From 3d082f84c846f59b3bafded5111664803ae1fbb4 Mon Sep 17 00:00:00 2001 From: John Fisher Date: Sat, 22 Feb 2025 13:35:09 +0100 Subject: [PATCH] Updates --- 404.html | 2 +- _next/data/3bqwlGhZxYXJfWdGp7YNO/index.json | 1 - ...ate-snowflake-rest-api-using-keycloak.json | 0 .../blog/back-to-the-monolith.json | 0 ...-dutch-energy-grid-with-flex-services.json | 0 ...es-and-compiling-with-graalvm-and-sbt.json | 0 .../blog/cassandra-its-not-you-its-us.json | 0 .../choosing-remix-as-an-ssr-framework.json | 0 .../blog/cicd-dagster-user-code.json | 0 .../creating_a_self-service_data_model.json | 0 ...sign-technique-for-react-applications.json | 0 ...e-energy-transition-with-spark-part-1.json | 0 .../blog/how-to-sign-soap-messages.json | 0 ...at-vandebron-greentech-hackathon-2021.json | 0 .../blog/migrating-dcos-kubernetes-l4lb.json | 0 ...ting-and-exporting-svg-icons-in-react.json | 0 .../blog/power-regular-hackathons.json | 0 .../blog/replacing-app-center.json | 2 +- .../salesforce-camunda-bpm-migration.json | 0 .../blog/spin-up-kubernetes-on-macbook.json | 0 .../blog/sustainable-tech-hardware.json | 0 ...component-library-and-a-design-system.json | 0 .../blog/vandebron-the-video-game.json | 0 ...to-build-a-reusable-component-library.json | 0 .../greentech-hackathon.json | 0 _next/data/OOMgl9sdO92b_IXfcvhV-/index.json | 1 + .../3bqwlGhZxYXJfWdGp7YNO/_buildManifest.js | 1 - .../65k1HLVmOHR7Ru8YkkK-5/_buildManifest.js | 1 - .../65k1HLVmOHR7Ru8YkkK-5/_ssgManifest.js | 1 - .../_buildManifest.js | 2 +- .../_ssgManifest.js | 0 .../BARd3a-dsddF1Rnpb7ubB/_ssgManifest.js | 1 - .../NVw5m6O-kHWen4j6NjFh5/_buildManifest.js | 1 - .../NVw5m6O-kHWen4j6NjFh5/_ssgManifest.js | 1 - .../_buildManifest.js | 2 +- .../_ssgManifest.js | 0 .../UljgdnKBc-B-sh5MjXiA-/_buildManifest.js | 1 - .../UljgdnKBc-B-sh5MjXiA-/_ssgManifest.js | 1 - .../Zxf7Z4-Xb7qG9tU8kMohi/_buildManifest.js | 1 - .../Zxf7Z4-Xb7qG9tU8kMohi/_ssgManifest.js | 1 - ...7484f094be037a30fa.91581ad1159d948d31b7.js | 1 - ...7484f094be037a30fa.9731460d600f94fea033.js | 1 - ...7484f094be037a30fa.cf988bb95046fabf6cc2.js | 1 + _next/static/chunks/pages/blog/[slug].js | 2 +- _next/static/chunks/pages/index.js | 1089 ----------------- .../chunks/pages/next/dist/pages/_error.js | 345 ++++++ _next/static/chunks/webpack.js | 2 +- _next/static/development/_buildManifest.js | 2 +- .../gzB60_OAN8-5jYSs7tPqd/_buildManifest.js | 1 - .../gzB60_OAN8-5jYSs7tPqd/_ssgManifest.js | 1 - .../sMaP26r88BWlLN5aWZqrh/_buildManifest.js | 1 - .../sMaP26r88BWlLN5aWZqrh/_ssgManifest.js | 1 - .../045aa36bfdcb84f53836.hot-update.json | 1 - .../05c0053eb13bab46bca4.hot-update.json | 1 - .../082932577e0db71fda3e.hot-update.json | 1 + .../1d8c547f9abb877f56b4.hot-update.json | 1 - .../1e96017d1654b24109f6.hot-update.json | 1 - .../1ed3bf7a44c05fc89bbe.hot-update.json | 1 - .../2830984271c8361f7e69.hot-update.json | 1 + .../2f3ff1b9a32ad1108cb5.hot-update.json | 1 - .../4a6246cb00144a264a80.hot-update.json | 1 - .../656cb36d1b7ceab9ac41.hot-update.json | 1 - .../67d46fe1d00b6cfa2fa9.hot-update.json | 1 + .../685fb85f4afad62de3e4.hot-update.json | 1 - .../6de4a6b8d4f651a3d938.hot-update.json | 1 - .../706cc8477ff71d2c99f9.hot-update.json | 1 - .../7e63bbf52f3628dc72d6.hot-update.json | 1 - .../81eb14340a150ff28f41.hot-update.json | 1 - .../b95d50f77e064531a643.hot-update.json | 1 - .../dcd431c2c642074bf604.hot-update.json | 1 - .../e66e5e798c6a970e4f36.hot-update.json | 1 - .../_app.045aa36bfdcb84f53836.hot-update.js | 15 - .../_app.1e96017d1654b24109f6.hot-update.js | 15 - .../_app.2f3ff1b9a32ad1108cb5.hot-update.js | 15 - .../_app.4a6246cb00144a264a80.hot-update.js | 15 - ...> _app.67d46fe1d00b6cfa2fa9.hot-update.js} | 0 .../_app.685fb85f4afad62de3e4.hot-update.js | 15 - .../_app.6de4a6b8d4f651a3d938.hot-update.js | 15 - .../_app.7e63bbf52f3628dc72d6.hot-update.js | 15 - .../_app.b95d50f77e064531a643.hot-update.js | 15 - .../_app.dcd431c2c642074bf604.hot-update.js | 15 - .../[slug].045aa36bfdcb84f53836.hot-update.js | 70 -- .../[slug].1d8c547f9abb877f56b4.hot-update.js | 15 - .../[slug].6de4a6b8d4f651a3d938.hot-update.js | 41 - .../[slug].706cc8477ff71d2c99f9.hot-update.js | 15 - .../[slug].81eb14340a150ff28f41.hot-update.js | 14 - about.html | 4 +- ...ate-snowflake-rest-api-using-keycloak.html | 14 +- blog/back-to-the-monolith.html | 4 +- ...-dutch-energy-grid-with-flex-services.html | 4 +- ...es-and-compiling-with-graalvm-and-sbt.html | 18 +- blog/cassandra-its-not-you-its-us.html | 12 +- blog/choosing-remix-as-an-ssr-framework.html | 12 +- blog/cicd-dagster-user-code.html | 4 +- blog/creating_a_self-service_data_model.html | 4 +- ...sign-technique-for-react-applications.html | 8 +- ...e-energy-transition-with-spark-part-1.html | 12 +- blog/how-to-sign-soap-messages.html | 8 +- ...at-vandebron-greentech-hackathon-2021.html | 4 +- blog/migrating-dcos-kubernetes-l4lb.html | 14 +- ...ting-and-exporting-svg-icons-in-react.html | 14 +- blog/power-regular-hackathons.html | 4 +- blog/replacing-app-center.html | 16 +- blog/salesforce-camunda-bpm-migration.html | 14 +- blog/spin-up-kubernetes-on-macbook.html | 4 +- blog/sustainable-tech-hardware.html | 4 +- ...component-library-and-a-design-system.html | 4 +- blog/vandebron-the-video-game.html | 4 +- ...to-build-a-reusable-component-library.html | 14 +- greentech-hackathon.html | 2 +- index.html | 2 +- posts/replacing-app-center.md | 2 +- pr-preview/pr-54/.nojekyll | 0 rss.xml | 2 +- 114 files changed, 461 insertions(+), 1523 deletions(-) delete mode 100644 _next/data/3bqwlGhZxYXJfWdGp7YNO/index.json rename _next/data/{3bqwlGhZxYXJfWdGp7YNO => OOMgl9sdO92b_IXfcvhV-}/blog/authenticate-snowflake-rest-api-using-keycloak.json (100%) rename _next/data/{3bqwlGhZxYXJfWdGp7YNO => OOMgl9sdO92b_IXfcvhV-}/blog/back-to-the-monolith.json (100%) rename _next/data/{3bqwlGhZxYXJfWdGp7YNO => OOMgl9sdO92b_IXfcvhV-}/blog/balancing-dutch-energy-grid-with-flex-services.json (100%) rename _next/data/{3bqwlGhZxYXJfWdGp7YNO => OOMgl9sdO92b_IXfcvhV-}/blog/building-native-images-and-compiling-with-graalvm-and-sbt.json (100%) rename _next/data/{3bqwlGhZxYXJfWdGp7YNO => OOMgl9sdO92b_IXfcvhV-}/blog/cassandra-its-not-you-its-us.json (100%) rename _next/data/{3bqwlGhZxYXJfWdGp7YNO => OOMgl9sdO92b_IXfcvhV-}/blog/choosing-remix-as-an-ssr-framework.json (100%) rename _next/data/{3bqwlGhZxYXJfWdGp7YNO => OOMgl9sdO92b_IXfcvhV-}/blog/cicd-dagster-user-code.json (100%) rename _next/data/{3bqwlGhZxYXJfWdGp7YNO => OOMgl9sdO92b_IXfcvhV-}/blog/creating_a_self-service_data_model.json (100%) rename _next/data/{3bqwlGhZxYXJfWdGp7YNO => OOMgl9sdO92b_IXfcvhV-}/blog/cypress-component-design-technique-for-react-applications.json (100%) rename _next/data/{3bqwlGhZxYXJfWdGp7YNO => OOMgl9sdO92b_IXfcvhV-}/blog/fueling-the-energy-transition-with-spark-part-1.json (100%) rename _next/data/{3bqwlGhZxYXJfWdGp7YNO => OOMgl9sdO92b_IXfcvhV-}/blog/how-to-sign-soap-messages.json (100%) rename _next/data/{3bqwlGhZxYXJfWdGp7YNO => OOMgl9sdO92b_IXfcvhV-}/blog/looking-back-at-vandebron-greentech-hackathon-2021.json (100%) rename _next/data/{3bqwlGhZxYXJfWdGp7YNO => OOMgl9sdO92b_IXfcvhV-}/blog/migrating-dcos-kubernetes-l4lb.json (100%) rename _next/data/{3bqwlGhZxYXJfWdGp7YNO => OOMgl9sdO92b_IXfcvhV-}/blog/optimizing-converting-and-exporting-svg-icons-in-react.json (100%) rename _next/data/{3bqwlGhZxYXJfWdGp7YNO => OOMgl9sdO92b_IXfcvhV-}/blog/power-regular-hackathons.json (100%) rename _next/data/{3bqwlGhZxYXJfWdGp7YNO => OOMgl9sdO92b_IXfcvhV-}/blog/replacing-app-center.json (85%) rename _next/data/{3bqwlGhZxYXJfWdGp7YNO => OOMgl9sdO92b_IXfcvhV-}/blog/salesforce-camunda-bpm-migration.json (100%) rename _next/data/{3bqwlGhZxYXJfWdGp7YNO => OOMgl9sdO92b_IXfcvhV-}/blog/spin-up-kubernetes-on-macbook.json (100%) rename _next/data/{3bqwlGhZxYXJfWdGp7YNO => OOMgl9sdO92b_IXfcvhV-}/blog/sustainable-tech-hardware.json (100%) rename _next/data/{3bqwlGhZxYXJfWdGp7YNO => OOMgl9sdO92b_IXfcvhV-}/blog/the-difference-between-a-component-library-and-a-design-system.json (100%) rename _next/data/{3bqwlGhZxYXJfWdGp7YNO => OOMgl9sdO92b_IXfcvhV-}/blog/vandebron-the-video-game.json (100%) rename _next/data/{3bqwlGhZxYXJfWdGp7YNO => OOMgl9sdO92b_IXfcvhV-}/blog/when-not-to-build-a-reusable-component-library.json (100%) rename _next/data/{3bqwlGhZxYXJfWdGp7YNO => OOMgl9sdO92b_IXfcvhV-}/greentech-hackathon.json (100%) create mode 100644 _next/data/OOMgl9sdO92b_IXfcvhV-/index.json delete mode 100644 _next/static/3bqwlGhZxYXJfWdGp7YNO/_buildManifest.js delete mode 100644 _next/static/65k1HLVmOHR7Ru8YkkK-5/_buildManifest.js delete mode 100644 _next/static/65k1HLVmOHR7Ru8YkkK-5/_ssgManifest.js rename _next/static/{BARd3a-dsddF1Rnpb7ubB => A2BmI3mWmRuC0fGN4s67Y}/_buildManifest.js (85%) rename _next/static/{2fzWnQF_oNnUsykSbhTNX => A2BmI3mWmRuC0fGN4s67Y}/_ssgManifest.js (100%) delete mode 100644 _next/static/BARd3a-dsddF1Rnpb7ubB/_ssgManifest.js delete mode 100644 _next/static/NVw5m6O-kHWen4j6NjFh5/_buildManifest.js delete mode 100644 _next/static/NVw5m6O-kHWen4j6NjFh5/_ssgManifest.js rename _next/static/{2fzWnQF_oNnUsykSbhTNX => OOMgl9sdO92b_IXfcvhV-}/_buildManifest.js (85%) rename _next/static/{3bqwlGhZxYXJfWdGp7YNO => OOMgl9sdO92b_IXfcvhV-}/_ssgManifest.js (100%) delete mode 100644 _next/static/UljgdnKBc-B-sh5MjXiA-/_buildManifest.js delete mode 100644 _next/static/UljgdnKBc-B-sh5MjXiA-/_ssgManifest.js delete mode 100644 _next/static/Zxf7Z4-Xb7qG9tU8kMohi/_buildManifest.js delete mode 100644 _next/static/Zxf7Z4-Xb7qG9tU8kMohi/_ssgManifest.js delete mode 100644 _next/static/chunks/1c49f5f00355f650bee3d37484f094be037a30fa.91581ad1159d948d31b7.js delete mode 100644 _next/static/chunks/1c49f5f00355f650bee3d37484f094be037a30fa.9731460d600f94fea033.js create mode 100644 _next/static/chunks/1c49f5f00355f650bee3d37484f094be037a30fa.cf988bb95046fabf6cc2.js delete mode 100644 _next/static/chunks/pages/index.js create mode 100644 _next/static/chunks/pages/next/dist/pages/_error.js delete mode 100644 _next/static/gzB60_OAN8-5jYSs7tPqd/_buildManifest.js delete mode 100644 _next/static/gzB60_OAN8-5jYSs7tPqd/_ssgManifest.js delete mode 100644 _next/static/sMaP26r88BWlLN5aWZqrh/_buildManifest.js delete mode 100644 _next/static/sMaP26r88BWlLN5aWZqrh/_ssgManifest.js delete mode 100644 _next/static/webpack/045aa36bfdcb84f53836.hot-update.json delete mode 100644 _next/static/webpack/05c0053eb13bab46bca4.hot-update.json create mode 100644 _next/static/webpack/082932577e0db71fda3e.hot-update.json delete mode 100644 _next/static/webpack/1d8c547f9abb877f56b4.hot-update.json delete mode 100644 _next/static/webpack/1e96017d1654b24109f6.hot-update.json delete mode 100644 _next/static/webpack/1ed3bf7a44c05fc89bbe.hot-update.json create mode 100644 _next/static/webpack/2830984271c8361f7e69.hot-update.json delete mode 100644 _next/static/webpack/2f3ff1b9a32ad1108cb5.hot-update.json delete mode 100644 _next/static/webpack/4a6246cb00144a264a80.hot-update.json delete mode 100644 _next/static/webpack/656cb36d1b7ceab9ac41.hot-update.json create mode 100644 _next/static/webpack/67d46fe1d00b6cfa2fa9.hot-update.json delete mode 100644 _next/static/webpack/685fb85f4afad62de3e4.hot-update.json delete mode 100644 _next/static/webpack/6de4a6b8d4f651a3d938.hot-update.json delete mode 100644 _next/static/webpack/706cc8477ff71d2c99f9.hot-update.json delete mode 100644 _next/static/webpack/7e63bbf52f3628dc72d6.hot-update.json delete mode 100644 _next/static/webpack/81eb14340a150ff28f41.hot-update.json delete mode 100644 _next/static/webpack/b95d50f77e064531a643.hot-update.json delete mode 100644 _next/static/webpack/dcd431c2c642074bf604.hot-update.json delete mode 100644 _next/static/webpack/e66e5e798c6a970e4f36.hot-update.json delete mode 100644 _next/static/webpack/pages/_app.045aa36bfdcb84f53836.hot-update.js delete mode 100644 _next/static/webpack/pages/_app.1e96017d1654b24109f6.hot-update.js delete mode 100644 _next/static/webpack/pages/_app.2f3ff1b9a32ad1108cb5.hot-update.js delete mode 100644 _next/static/webpack/pages/_app.4a6246cb00144a264a80.hot-update.js rename _next/static/webpack/pages/{_app.656cb36d1b7ceab9ac41.hot-update.js => _app.67d46fe1d00b6cfa2fa9.hot-update.js} (100%) delete mode 100644 _next/static/webpack/pages/_app.685fb85f4afad62de3e4.hot-update.js delete mode 100644 _next/static/webpack/pages/_app.6de4a6b8d4f651a3d938.hot-update.js delete mode 100644 _next/static/webpack/pages/_app.7e63bbf52f3628dc72d6.hot-update.js delete mode 100644 _next/static/webpack/pages/_app.b95d50f77e064531a643.hot-update.js delete mode 100644 _next/static/webpack/pages/_app.dcd431c2c642074bf604.hot-update.js delete mode 100644 _next/static/webpack/pages/blog/[slug].045aa36bfdcb84f53836.hot-update.js delete mode 100644 _next/static/webpack/pages/blog/[slug].1d8c547f9abb877f56b4.hot-update.js delete mode 100644 _next/static/webpack/pages/blog/[slug].6de4a6b8d4f651a3d938.hot-update.js delete mode 100644 _next/static/webpack/pages/blog/[slug].706cc8477ff71d2c99f9.hot-update.js delete mode 100644 _next/static/webpack/pages/blog/[slug].81eb14340a150ff28f41.hot-update.js delete mode 100644 pr-preview/pr-54/.nojekyll diff --git a/404.html b/404.html index 54db7da74..5d749e032 100644 --- a/404.html +++ b/404.html @@ -1,3 +1,3 @@ 404: This page could not be found

404

This page could not be found.

 .tech
© Vandebron
\ No newline at end of file + ga('send', 'pageview');404: This page could not be found

404

This page could not be found.

 .tech
© Vandebron
\ No newline at end of file diff --git a/_next/data/3bqwlGhZxYXJfWdGp7YNO/index.json b/_next/data/3bqwlGhZxYXJfWdGp7YNO/index.json deleted file mode 100644 index 61270c194..000000000 --- a/_next/data/3bqwlGhZxYXJfWdGp7YNO/index.json +++ /dev/null @@ -1 +0,0 @@ -{"pageProps":{"posts":[{"content":"\n## Why GHA?\nThis seems like a lot of work... Why not go with an off-the-shelf solution from something like Bitrise or Codemagic? Fair question but not the main point of this post. To look into our reasoning check out the [Benefits](#benefits) section!\n\n## Some notes before we get started\n- We use this workflow to build two apps, one of which can be white-labeled, so we have additional `app` and `white-label-release` inputs which makes things a bit trickier. You might not need that so feel free to trim stuff down and make it your own! But for us, we why we have the `env-variable-prep-android.sh` which normalizes the variable names used for secrets so those secrets and build file names, etc. can be easily used. If you just have a single app you probably don't need this script.\n- The code below is only for the build process. Though the Architecture Decision Record (ADR) considered how this would affect future decisions about artifact upload automation and rolling out releases for internal testing, nothing about that is automated here.\n- There's a lot of code here. We removed version numbers to make sure we're not giving out too much information. If you see something like `@vx.x.x`, you'll have to fill those in with the versions that are needed for your app/pipeline.\n\n## Implementation\n#### Part 1 - Basic Setup\nAdd the files below. Nothing in this setup should effect App Center but it is good to check in your changes to a branch and test those against the regular App Center build flow. The main point of the steps in this section is to just get a basic action, with inputs, set up and running. Full implementation is further down. The `env-variable-prep-android.sh` and `env-variable-prep-ios.sh` files created variables based off the input parameters passed in so they can be used in a reusable and consistent manner later on. The `env-file-prep.sh` file is responsible for creating a `.env` file with values from whichever environment you're using. Though it's nice to add the `Fastlane` and `Gymfile` files, those won't be used until Step 4 when the rest of the pipeline is fleshed out.\n\n##### Android\n\n `file: .github/workflows/mobile-apps-build-android.yaml`\n\n \n ---\n name: Mobile App Build for Android\n run-name: \"Build: Android, ${{ inputs.app }}, ${{ inputs.environment }}, white-label-release=${{ inputs.white-label-release }}\"\n on:\n workflow_dispatch:\n inputs:\n app:\n description: 'App'\n required: true\n type: choice\n options:\n - my-first-app\n - my-second-app\n environment:\n description: 'Environment'\n required: true\n type: choice\n options:\n - test\n - acceptance\n - production\n white-label-release:\n description: 'White-labeled Release?'\n type: boolean\n default: false\n jobs:\n build:\n name: Build app for android\n runs-on: ubuntu-latest\n environment: ${{ inputs.environment }}\n steps:\n - name: Checkout ${{ github.repository }}\n uses: actions/checkout@vx.x.x\n - name: Echo Input\n env:\n APP: ${{ inputs.app }}\n WHITE_LABEL_RELEASE: ${{ inputs.white-label-release }}\n ENVIRONMENT: ${{ inputs.environment }}\n run: |\n echo \"APP=$APP\"\n echo \"WHITE_LABEL_RELEASE=$WHITE_LABEL_RELEASE\"\n echo \"ENVIRONMENT=$ENVIRONMENT\"\n \n\n `file: env-variable-prep-android.sh`\n\n \n #!/bin/bash\n ARTIFACT_NAME=\"mobile-my-first-app-${ENVIRONMENT}-release\"\n FASTLANE_ANDROID_FLAVOR=\"${ENVIRONMENT}\"\n {\n echo \"artifact-name=${ARTIFACT_NAME}\"\n echo \"fastlane-android-flavor=${FASTLANE_ANDROID_FLAVOR}\"\n } | tee -a \"$GITHUB_OUTPUT\"\n # Secrets should not get sent out over tee command (which also prints it to console)\n {\n echo \"android-key-alias=my-first-app\"\n echo \"android-keystore-file=../keystores/my-first-app.jks\"\n echo \"android-keystore-pass=${ANDROID_KEY_PASSWORD}\"\n echo \"android-store-pass=${ANDROID_STORE_PASSWORD}\"\n } >> \"$GITHUB_OUTPUT\"\n \n\n `file: ./fastlane/Fastfile`\n\n \n opt_out_usage\n platform :android do\n desc 'Build app for Android'\n lane :build do\n build_android_app(\n task: 'bundle',\n flavor: ENV['FASTLANE_ANDROID_FLAVOR'],\n build_type: 'Release',\n project_dir: 'android/',\n print_command: true,\n print_command_output: true,\n )\n end\n end\n \n\n##### iOS\n\n `file: .github/workflows/mobile-apps-build-ios.yaml`\n\n \n ---\n name: Mobile App Build for iOS\n run-name: \"Build: iOS, ${{ inputs.app }}, ${{ inputs.environment }}, white-label-release=${{ inputs.white-label-release }}\"\n on:\n workflow_dispatch:\n inputs:\n app:\n description: 'App'\n required: true\n type: choice\n options:\n - my-first-app\n - my-second-app\n environment:\n description: 'Environment'\n required: true\n type: choice\n options:\n - test\n - acceptance\n - production\n white-label-release:\n description: 'White-labeled Release?'\n type: boolean\n default: false\n jobs:\n build:\n name: Build app for iOS\n runs-on: macos-latest\n environment: ${{ inputs.environment }}\n steps:\n - name: Checkout ${{ github.repository }}\n uses: actions/checkout@vx.x.x\n - name: Echo Input\n env:\n APP: ${{ inputs.app }}\n WHITE_LABEL_RELEASE: ${{ inputs.white-label-release }}\n ENVIRONMENT: ${{ inputs.environment }}\n run: |\n echo \"APP=$APP\"\n echo \"WHITE_LABEL_RELEASE=$WHITE_LABEL_RELEASE\"\n echo \"ENVIRONMENT=$ENVIRONMENT\"\n \n\n `file: env-variable-prep-ios.sh`\n\n \n #!/bin/bash\n # Secrets should not get sent out over tee command (which also prints it to console)\n {\n echo \"ios-mobile-provisioning-profile=${IOS_MOBILE_PROVISIONING_PROFILE}\"\n } >> \"$GITHUB_OUTPUT\"\n \n\n `file: ./fastlane/Gymfile`\n\n \n scheme(ENV['SCHEME'])\n workspace(\"ios/my-first-app.xcworkspace\")\n export_options(\"ios/exportOptions.plist\")\n output_directory(\"ios/build\")\n output_name(ENV['SCHEME'])\n \n\n ##### Both Android & iOS\n\n `file: env-file-prep.sh`\n\n \n #!/usr/bin/env bash\n #####################################################\n # Creates an .env file for use in react-native-config\n # This script should be run from the /mobile folder\n #####################################################\n if [ \"${ENVIRONMENT}\" != \"test\" ] && [ \"${ENVIRONMENT}\" != \"acceptance\" ] && [ \"${ENVIRONMENT}\" != \"production\" ]; then\n echo \"ENVIRONMENT is not set, using 'production' as default.\"\n ENVIRONMENT=production\n fi\n echo \"Copying 'my-first-app/.env.${ENVIRONMENT}' to 'my-first-app/.env'...\"\n cp \"my-first-app/.env.${ENVIRONMENT}\" \"my-first-app/.env\"\n echo \"Success!\"\n \n\n#### Part 2 - Testing your Workflow Locally\nWARNING: GitHub Actions doesn't let you run a `workflow_dispatch` action until it has been merged into the main branch so you'll want to get the basic setup above in place before you start tinkering with application logic or things that could effect App Center. Also note that while `act` is helpful for getting the basics in place, it's unlikely you'll be able to test the complete process locally because, at least for us a) Android pipeline crashes halfway through the `Build App` step with an error of `Gradle build daemon disappeared unexpectedly (it may have been killed or may have crashed)`, and b) iOS tries to install a fresh copy of Xcode\n\n 1. Follow installation instructions on [their User Guide](https://nektosact.com/installation/index.html)\n 2. Create a `~/.actrc` file that looks like this\n\n
\n        \n        --container-architecture linux/amd64\n        --secret GITHUB_TOKEN=$GITHUB_TOKEN\n        \n      
\n \n 3. Get your `$GITHUB_TOKEN` env variable in place\n\n 1. Install [gh, the GitHub cli](https://cli.github.com/)\n 2. Modify shells (zsh shown below)\n\n
\n            \n            export GITHUB_TOKEN=\"$(gh auth token)\"\n            \n          
\n\n 3. Close and re-open your terminal. Test to make sure you can see your `GITHUB_TOKEN` envrionment variable\n\n 4. Set up a temporary local file for secrets. WARNING: Once you’re done, remember to delete the file so it’s not hanging around on your system!! (or just don’t create it in the first place unless you really need it)\n\n `file: .secrets`\n\n
\n        \n      ANDROID_STORE_PASSWORD=\"someSecr3ts\"\n      ANDROID_KEY_PASSWORD=\"YouWantQuotesBecause*s_etc.WillScrewYouUp\"\n      MAPBOX_READ_TOKEN=shhhhh.Its.asecret\n        \n      
\n\n 5. Set up a temporary local file for your workflow trigger inputs.\n\n `file: app-input.json`\n\n
\n        \n      {\n        \"action\": \"workflow_dispatch\",\n        \"inputs\": {\n          \"app\": \"my-first-app\",\n          \"environment\": \"test\",\n          \"white-label-release\": false\n        }\n      }\n        \n      
\n\n 6. Run your workflow like this. As far as I know, you can only run the iOS workflow locally if you're on a mac. To do that you'll need to provide an additional parameter: `-P macos-latest=-self-hosted`\n\n **Android**\n\n \n act \\\n --workflows .github/workflows/mobile-apps-build-android.yaml \\\n --eventpath=\"${HOME}/Documents/IT/GitHub Actions/Mobile Apps/app-input.json\" \\\n --secret-file=\"${HOME}/Documents/IT/GitHub Actions/Mobile Apps/.secrets\"\n \n\n **iOS**\n\n \n act -P macos-latest=-self-hosted \\\n --workflows .github/workflows/mobile-apps-build-ios.yaml \\\n --eventpath=\"${HOME}/Documents/IT/GitHub Actions/Mobile Apps/app-input.json\" \\\n --secret-file=\"${HOME}/Documents/IT/GitHub Actions/Mobile Apps/.secrets\"\n \n\n#### Part 3 - Testing Things out from GHA\n\n1. Once you're happy with your changes locally, send a PR & merge them in! Remember this is only the basic setup to get the action avaible from the GitHub Actions interface so maybe leave a comment in the PR notifying your teammates about how they should expect a follow-up PR\n\n2. Go to the \"Actions\" tab at the top of your GitHub repo. You should now see your actions for building iOS and Android on the left. Since it's a `workflow_dispatch` action you'll trigger the actions manually.\n\n
\n \"run-workflow\"/\n
\n\n#### Part 4 - Implement the Full Workflow for iOS and Android\nAdjust the files below. This is where you may end up needing to modify things that affect your App Center build. Try to keep them to a mimimum so you can still use App Center for builds should anything not work as expected. [Fastlane](https://fastlane.tools/) is a tool that helps with automating build and release processes for mobile apps. You can think of it as a toolbox of easy-to-use wrapper functions around `gradle` for Android, and `xcodebuild` for iOS.\n\n\n##### Android\n \n `file: .github/workflows/mobile-apps-build-android.yaml`\n\n \n ---\n name: Mobile App Build for Android\n run-name: \"Build: android, ${{ inputs.app }}, ${{ inputs.environment }}, white-label-release=${{ inputs.white-label-release }}\"\n on:\n workflow_dispatch:\n inputs:\n app:\n description: 'App'\n required: true\n type: choice\n options:\n - my-first-app\n - my-second-app\n environment:\n description: 'Environment'\n required: true\n type: choice\n options:\n - test\n - acceptance\n - production\n white-label-release:\n description: 'White-labeled Release?'\n type: boolean\n default: false\n jobs:\n build:\n name: Build app for android\n runs-on: ubuntu-latest\n environment: ${{ inputs.environment }}\n steps:\n - name: Checkout ${{ github.repository }}\n uses: actions/checkout@vx.x.x\n - name: Prep Env Variables\n id: prep-env-variables\n working-directory: mobile\n env:\n APP: ${{ inputs.app }} # my-first-app | my-second-app\n ENVIRONMENT: ${{ inputs.environment }} # production | test | acceptance\n BRAND: ${{ inputs.white-label-release && 'other-company' || 'my-company' }}\n APP_1_ANDROID_KEY_PASSWORD_VANDEBRON: ${{ secrets.APP_1_ANDROID_KEY_PASSWORD_VANDEBRON }}\n APP_1_ANDROID_STORE_PASSWORD_VANDEBRON: ${{ secrets.APP_1_ANDROID_STORE_PASSWORD_VANDEBRON }}\n APP_1_ANDROID_KEY_PASSWORD_WHITE_LABEL: ${{ secrets.APP_1_ANDROID_KEY_PASSWORD_WHITE_LABEL }}\n APP_1_ANDROID_STORE_PASSWORD_WHITE_LABEL: ${{ secrets.APP_1_ANDROID_STORE_PASSWORD_WHITE_LABEL }}\n APP_2_ANDROID_KEY_PASSWORD_VANDEBRON: ${{ secrets.APP_2_ANDROID_KEY_PASSWORD_VANDEBRON }}\n APP_2_ANDROID_STORE_PASSWORD_VANDEBRON: ${{ secrets.APP_2_ANDROID_STORE_PASSWORD_VANDEBRON }}\n run: bash ./env-variable-prep-android.sh\n - name: Create .env file\n working-directory: mobile\n env:\n APP: ${{ inputs.app }}\n BRAND: ${{ steps.prep-env-variables.outputs.inferred-brand }}\n ENVIRONMENT: ${{inputs.environment}}\n run: bash ./env-file-prep.sh\n - name: Enable Corepack\n run: corepack enable\n - name: Setup NodeJS\n id: setup-node\n uses: actions/setup-node@vx.x.x\n with:\n node-version: 18.x\n registry-url: https://registry.npmjs.org\n cache: 'yarn'\n cache-dependency-path: mobile/${{ inputs.app }}/yarn.lock\n - name: Setup Java\n uses: actions/setup-java@vx.x.x\n with:\n distribution: 'temurin'\n java-version: '20'\n cache: 'gradle'\n - name: Setup Android SDK # sadly no caching capabilities here\n uses: android-actions/setup-android@vx.x.x\n with:\n log-accepted-android-sdk-licenses: false\n packages: 'tools' # Default is 'tools platform-tools but we don't need platform-tools for packaging'\n - name: Set up ruby env # Fastlane is a \"Ruby gem\"\n uses: ruby/setup-ruby@vx\n with:\n ruby-version: '3.3.0' # Changing this to 3.3 will give you \"Your Ruby version is 3.3.5, but your Gemfile specified 3.3.0\"\n bundler-cache: true\n - name: Install Gem Bundler\n working-directory: mobile/${{ inputs.app }}\n run: |\n gem install bundler\n bundle install --quiet\n # Install Dependencies\n - name: Yarn Install\n working-directory: mobile/${{ inputs.app }}\n run: yarn install --immutable\n # Build\n - name: Build App\n run: bundle exec fastlane android build\n working-directory: mobile/${{ inputs.app }}\n env:\n ENVIRONMENT: ${{ inputs.environment }}\n FASTLANE_ENV_INFERRED_BRAND: ${{ steps.prep-env-variables.outputs.inferred-brand }}\n ANDROID_KEYSTORE_FILE: ${{ steps.prep-env-variables.outputs.android-keystore-file }}\n ANDROID_KEY_ALIAS: ${{ steps.prep-env-variables.outputs.android-key-alias }}\n ANDROID_STORE_PASSWORD: ${{ steps.prep-env-variables.outputs.android-store-pass }}\n ANDROID_KEY_PASSWORD: ${{ steps.prep-env-variables.outputs.android-keystore-pass }}\n FASTLANE_ANDROID_FLAVOR: ${{ steps.prep-env-variables.outputs.fastlane-android-flavor }}\n # Upload\n - name: Upload application\n uses: actions/upload-artifact@vx\n with:\n name: ${{steps.prep-env-variables.outputs.artifact-name}}\n path: \"mobile/${{ inputs.app }}/android/app/build/outputs/bundle/${{ steps.prep-env-variables.outputs.fastlane-android-flavor }}Release/app-${{ steps.prep-env-variables.outputs.fastlane-android-flavor }}-release.aab\"\n retention-days: 30\n \n\n ##### iOS\n \n `file: .github/workflows/mobile-apps-build-ios.yaml`\n\n \n ---\n name: Mobile App Build for iOS\n run-name: \"Build: iOS, ${{ inputs.app }}, ${{ inputs.environment }}, white-label-release=${{ inputs.white-label-release }}\"\n on:\n workflow_dispatch:\n inputs:\n app:\n description: 'App'\n required: true\n type: choice\n options:\n - my-first-app\n - my-second-app\n environment:\n description: 'Environment'\n required: true\n type: choice\n options:\n - test\n - acceptance\n - production\n white-label-release:\n description: 'White-labeled Release?'\n type: boolean\n default: false\n jobs:\n build:\n name: Build app for iOS\n runs-on: macos-latest\n environment: ${{ inputs.environment }}\n steps:\n - name: Checkout ${{ github.repository }}\n uses: actions/checkout@vx.x.x\n - name: Prep Env Variables\n id: prep-env-variables\n working-directory: mobile\n env:\n APP: ${{ inputs.app }} # my-first-app | my-second-app\n BRAND: ${{ inputs.white-label-release && 'other-company' || 'my-company' }}\n ENVIRONMENT: ${{ inputs.environment }} # production | test | acceptance\n APP_1_MY_COMPANY_IOS_MOBILE_PROVISIONING_PROFILE: ${{ secrets.APP_1_MY_COMPANY_IOS_MOBILE_PROVISIONING_PROFILE }}\n APP_1_OTHER_COMPANY_IOS_MOBILE_PROVISIONING_PROFILE: ${{ secrets.APP_1_OTHER_COMPANY_IOS_MOBILE_PROVISIONING_PROFILE }}\n IOS_BUILD_CERTIFICATE_P12_OTHER_COMPANY: ${{ secrets.IOS_BUILD_CERTIFICATE_P12_OTHER_COMPANY }}\n IOS_BUILD_CERTIFICATE_P12_PASSWORD_OTHER_COMPANY: ${{ secrets.IOS_BUILD_CERTIFICATE_P12_PASSWORD_OTHER_COMPANY }}\n APP_2_IOS_MOBILE_PROVISIONING_PROFILE: ${{ secrets.APP_2_IOS_MOBILE_PROVISIONING_PROFILE }}\n run: bash ./env-variable-prep-ios.sh\n - name: Create .env file\n working-directory: mobile\n env:\n APP: ${{ inputs.app }} # my-first-app | my-second-app\n BRAND: ${{ steps.prep-env-variables.outputs.inferred-brand }}\n ENVIRONMENT: ${{inputs.environment}}\n run: bash ./env-file-prep.sh\n - name: Import Build Certificate from Secrets\n uses: apple-actions/import-codesign-certs@vx\n with:\n p12-file-base64: ${{ steps.prep-env-variables.outputs.ios-build-certificate-p12 }}\n p12-password: ${{ steps.prep-env-variables.outputs.ios-build-certificate-p12-password }}\n - name: Import Mobile Provisioning Profile\n uses: nickwph/apple-provisioning-profile-action@vx.x.x\n with:\n profile-base64: ${{ steps.prep-env-variables.outputs.ios-mobile-provisioning-profile }}\n - name: Setup NodeJS\n id: setup-node\n uses: actions/setup-node@vx.x.x\n with:\n node-version: 20.x\n # Mapbox v10 ships with bitcode on XCode 16 which is not allowed by the App Store\n # https://github.com/mapbox/mapbox-maps-ios/issues/2233\n # Once this issue is fixed we can upgrade to 16\n - name: Install XCode\n uses: maxim-lobanov/setup-xcode@vx.x.x\n with:\n xcode-version: 15.4\n - name: Install Ruby\n uses: ruby/setup-ruby@vx.x.x\n with:\n ruby-version: 3.3.0\n - name: Install Bundler\n run: gem install bundler\n # TODO: Cache node_modules similarly to how Pods are cached (compare hash of yarn.lock)\n - name: Yarn Install\n working-directory: mobile/${{ inputs.app }}\n run: yarn install --immutable\n # TODO: Cache Gems similarly to how Pods are cached (compare hash of Gemfile.lock)\n - name: Install Gems\n run: bundle install\n working-directory: mobile/${{ inputs.app }}\n - name: Cache CocoaPods dependencies\n uses: actions/cache@vx\n env:\n FILES_GLOB: mobile/${{ inputs.app }}/ios/Podfile.lock\n with:\n path: |\n mobile/${{ inputs.app }}/ios/Pods\n key: ${{ runner.os }}-pods-${{ hashFiles(env.FILES_GLOB) }}\n restore-keys: |\n ${{ runner.os }}-pods-\n - name: Install Pods\n working-directory: mobile/${{ inputs.app }}/ios\n run: bundle exec pod install\n - name: Build iOS App\n env:\n APP: ${{ inputs.app }}\n SCHEME: ${{ steps.prep-env-variables.outputs.ios-scheme }} # otherCompanyFirstAppProduction, myCompanySecondAppTest\n BRAND: ${{ steps.prep-env-variables.outputs.inferred-brand }}\n TARGET: ${{ steps.prep-env-variables.outputs.ios-target }}\n run: bundle exec fastlane gym\n working-directory: mobile/${{ inputs.app }}\n # Upload\n - name: Upload application\n uses: actions/upload-artifact@vx\n with:\n name: ${{steps.prep-env-variables.outputs.ios-scheme}}\n path: \"mobile/${{ inputs.app }}/ios/build/${{ steps.prep-env-variables.outputs.ios-scheme }}.ipa\"\n retention-days: 30\n overwrite: true\n if-no-files-found: error\n \n\n#### Part 5 - Troubleshooting\nMore than likely these won't work the first time. Time to go back and adjust. Note that since the workflow is now in the main branch you can test your workflow changes on a feature branch. Just select your feature branch in the \"Branch\" dropdown shown above.\n\n## Other Things to Note\n\n\n\n## Benefits\n- It regularly took over 50 minutes for our mobile app to build in App Center. Part of that could have very likely be improved by adjusting App Center configurations & how we store and bundle app assets but after migrating our builds to GitHub Actions our app build times are now down to 22 minutes - More than twice as fast!\n- All the rest of the software at Vandebron (backend services in Scala and Python and frontend applications in Typescript + React) is built using GitHub Actions. This move brings mobile apps in line with all other software. This move to GHA for mobile builds has led to several of our mobile devs getting our hands dirty in GHA, which is great because we can now play a role in the larger CICD discussions.\n- We have full control over our CICD pipeline for mobile builds. In the future we can integrate more Fastlane commands to further automate the release process.\n- We did a full ADR (shown below) which initiated the work here. Links referenced in image are in Appendix below.\n ![replace-app-center-adr](../images/replacing-app-center-adr.png)\n\n\n## Appendix\n\n#### Mapbox Integration\n\n`file: .github/workflows/mobile-apps-build-android.yaml and .github/workflows/mobile-apps-build-ios.yaml (optional mapbox)`\n\n
\n  \n  - name: Create Mapbox .netrc file (my-first-app only)\n    if: ${{ inputs.app == 'my-first-app' }}\n    working-directory: mobile\n    env:\n      MAPBOX_READ_TOKEN: ${{ secrets.MAPBOX_READ_TOKEN }}\n    run: bash ./my-first-app/prep-mapbox.sh\n  \n
\n\n\n`file: ./my-first-app/prep-mapbox.sh`\n\n
\n  \n  #!/usr/bin/env bash\n  \n  # WARN: DO NOT use tee here (it prints to console)\n  {\n    echo \"machine api.mapbox.com\"\n    echo \"login mapbox\"\n    echo \"password ${MAPBOX_READ_TOKEN}\"\n  } >> ~/.netrc\n  chmod 0600 ~/.netrc\n  \n
\n\n#### ADR Links\n- [GHA (Billing)](https://docs.github.com/en/billing/managing-billing-for-github-actions/about-billing-for-github-actions)\n- [Bitrise](https://bitrise.io/)\n- [CodeMagic](https://codemagic.io/)\n- [YouTube video showing GHA setup for Android](https://www.youtube.com/watch?v=_uRbEyBa9q0)\n- [Medium article showing GHA setup for Android](https://medium.com/scaleuptech/how-to-make-react-native-builds-with-github-actions-8d0203801eff)\n- [Article discussing how build uploads can be done](https://www.obytes.com/blog/react-native-ci-cd-github-action)","meta":{"title":"Replacing App Center with GitHub Actions","description":"App Center is closing up shop on March 31st, 2025. So what's the plan for building mobile apps at Vandebron?","createdAt":"Fri Feb 21 2025 01:00:00 GMT+0100 (Central European Standard Time)","coverImage":"images/replacing-app-center-building-a-phone.jpg","tags":["React Native","App Center","GHA","GitHub Actions"],"author":"John Fisher & Arnav Mundkur","slug":"blog/replacing-app-center","formattedDate":"21 februari 2025","date":"Fri Feb 21 2025 01:00:00 GMT+0100 (Central European Standard Time)"}},{"content":"\n# Grid City: A Hackathon Journey into the Energy Transition by Vandebron\n\nDuring the last couple of hackathons, we set out to gamify one of the most pressing challenges of our time, the transition to green energy.\nA problem our team, VPP [Virtual Power Plant], deals with on a daily basis.\nWhat emerged was an interactive game designed to educate players about the complexities of energy grid management in a fun and manageable way,\nthough debatable if it is fun or well-balanced. It was a hackathon project after all.\n\n\n\nLet’s dive into the vision, mechanics, and what we hope players take away from this experience.\n\n### Vision: Educate Through Play\nOur goal was to create more than just a game. We envisioned a tool that serves as an onboarding experience,\nnot just for our colleagues, but also anyone interested in the energy transition.\n\nTo realize this vision we chose to go with Godot as our game engine of choice.\nAn open-source game engine that is a super fun and fantastic tool that allowed us to quickly prototype and iterate on our ideas and feedback.\n\n### The Core Gameplay Loop: Keeping the Grid Balanced\nIn this game, your primary goal is to keep the energy grid frequency within the \"goldilocks zone\", i.e. not too much power production, not too little.\nThe longer you can maintain this balance, the better!\n\n#### Key Concepts:\n- **Keeping within the goldilocks zone:** energy production must match energy demand. Fall outside the goldilocks zone, and the grid becomes unstable. If it is unstable for too long, then it's game over.\n- **Keeping up with demand:** Houses are automatically built over time, mimicking real-life construction. It’s up to the player to meet this increasing demand by manually adding renewable energy assets, like wind turbines, solar panels, and batteries.\n- **Forecasting:** Players can use weather forecasts to anticipate and plan for energy production challenges. Too much wind? Better disable some wind turbines for the time being.\n- **Curtailment:** Too much energy? Players must decide when to turn off assets to avoid overproduction. This introduces the concept of curtailment and highlights the work often required in grid management, due to not being able to store the excess energy.\n- **The Main Goal:** A 100% Green Energy Grid, 100% of the time.\n\nWhat does success look like in the game? Maintaining the grid with 100% green power for as long as possible, via strategically managing energy production and curtailment to ensure sustainability.\nPlayers experience the dual challenge of meeting growing energy demands and avoiding excess production, a dilemma central to real-world energy grids.\n\n\n\n### Final Thoughts\n\nWhile we did meet most of these goals, we definitely see room for improvement.\nFor instance, the city building aspect of the game does not exactly match what we want to teach the player. A Virtual Power Plant mainly balances the grid through smart curtailment.\nIt doesn't involve building new renewables. So we considered removing the building mechanic from the game, but we were already to deep into development.\n\nTo work around this design issue, we toyed with the idea of having a coal plant in the game, amongst others.\nThe goal was to shut down the coal plant before it fully pollutes the planet.\nAfter shutdown, players face the challenge of balancing the grid reliably using just renewable energy.\nUnfortunately, we ran out of time before we could fine-tune this part of the game.\n\n\n\n*Here's an early prototype of the coal plant that didn't make it in to the game.*\n\nAt some point, though, you have to wrap up the hackathon. So we polished what we had and declared the game \"done\".\nWhether you’re a gamer, an energy enthusiast, or someone entirely new to the topic, we hope this game sparks your interest in the energy transition :)\n\nYou can play the game right from your browser [here](https://djvisser.itch.io/grid-city)!\nIf you want to take a look at the (hackathon-quality) code, check out our [public repo](https://github.com/Vandebron/vandebron_game).","meta":{"title":"Grid City: A Hackathon Journey into the Energy Transition by Vandebron","description":"A journey into the energy transition through the lens of a video game","createdAt":"Mon Jan 27 2025 01:00:00 GMT+0100 (Central European Standard Time)","coverImage":"images/game-start-screen.png","tags":["godot","energy transition","gaming"],"author":"Dick Visser & Tomás Phelan","slug":"blog/vandebron-the-video-game","formattedDate":"27 januari 2025","date":"Mon Jan 27 2025 01:00:00 GMT+0100 (Central European Standard Time)"}},{"content":"\n## The Background\n\nWe at Vandebron have a mission to get the news out about [our good work](https://vandebron.nl/missie), and we understand that [Server Side Rendering (SSR)](https://web.dev/articles/rendering-on-the-web#server-side) can really help with that. Among other things, it provides an easy way for search engines to discover our pages, so you, our (future?!) customer, can find them more easily. That means more people choosing green energy, and ultimately, a cleaner environment! 🎉\n\n## We rolled our own\n\nThe year was 2017, Covid was still a word that sounded more like a bird than anything else... The world was heating up and Vandebron was 4 years into its mission to bring 100% renewable energy throughout all of the Netherlands.\n\nAs far as web technologies are concerned, 4 years was ages ago. It was a time when NextJS was less than a year old, and Remix was still several years from coming out. But we needed a way to deliver that high-quality content to all of you. So, the innovators that we were, we decided to build our own SSR framework. In short, we wanted pizza, but there were no pizza shops in town... So we made our own!\n\nIt's been great but not without issue...\n\n\n \n \n \n \n
\"ugly-window-mock\"\"remix-migration-mocking-a-window\"
\n\n\n\n## A Short Note: Why Server Side Rendering\n\nYou might not be satisfied with the short explanation of why we picked an SSR framework in the first place. This article isn't really about that - if you're interested in more analysis on when and where to choose an SSR framework, check out these excellent articles from Splunk:\n* [The User Experience (UX) Benefits of SSR](https://www.splunk.com/en_us/blog/learn/server-side-rendering-ssr.html)\n* [The SEO Benefits of SSR](https://www.splunk.com/en_us/blog/learn/server-side-rendering-ssr.html)\n\n## Decisions Made the Right Way - A Comparison\n\nNowadays, there are better, industry standard technologies available! I.e. pizza shops have opened nearby!! Let's find a good one. Of course, you don't want to just go to any spot. Especially if there's more than one shop in town - you'd be silly not to check which one is closest, and look at the menu. Which one has better reviews, is that one very angry customer just upset that there wasn't any anchovies in the vegan pizza shop? What were they expecting anyway?\n\"vegan-pizza-shop\"\n\nAt Vandebron we're a React shop, so we limited ourselves to just SSR frameworks supporting React. The choice of one framework over another is of crucial importance, so, as part of our analysis, we built a small part of our [vandebron.nl/blog](https://vandebron.nl/blog) page twice. Two of our engineers then presented these prototypes to our Front End Guild, and this discussion fed heavily into the Architecture Decision Record that we wrote comparing the results.\n\n\\* At Vandebron, Guilds are groups of engineers from disparate teams that are interested in a single domain: i.e. Backend, Frontend, IAM and Auth, etc. \n\nThe Background for the decision record states this:\n\n> _\"Our Frontend currently uses a custom-built, hard to maintain SSR solution, which we'd like to replace with a modern and standard library. Possible candidates are NextJS and Remix. The goal is to investigate which one suits our needs best.\"_\n\nYes, there are other options we could have considered but we wanted to stay with a tried-and-tested framework and one that was compatible with our existing React setup.\n![remix-migration-adr-options-considered.png](../images/remix-migration-adr-options-considered.png)\n\nAs you can see, the comparison between the two frameworks was very similar. In the end we favoured the simple, opinionated direction of Remix over that of the more full-featured but potentially complex setup of NextJS. Even though Remix has a smaller community, we attributed this mostly to the age of the framework and not the quality of the framework itself. Though the Positivity has gone down a bit (as listed in [the 2023 StateOfJS survey](https://2023.stateofjs.com/en-US/libraries/meta-frameworks/),) the decrease has been relatively minor and in line with most-other frameworks (notable exceptions for Astro and SvelteKit which have both seen big upticks in both Usage and Positivity)\n![State of JS Positivity](../images/remix-migration-sojs-framework-positivity.png)\nFinally, we noted that NextJS is tightly coupled with Vercel. At Vandebron we value platform independence and not getting tied to specific hosting providers or platforms. Remix gives us the independence we're looking for by providing a SSR framework without a potential to be tied into other solutions/platforms in the future.\n\nOutcome\n> _\"Most members favoured Remix’s focus on web standards and usage of standard libraries and were put off (a little) by NextJS’s uncertainty in development direction.\"_\n\n## So, How's it Going?\n\nThe migration effort is still underway but already we can report that it's going quite well - developers are excited to work on the new tech stack because it's seen as a developer-friendly platform and one of the two leading frameworks in the industry. In the words of one engineer: \"Dev experience has improved massively, it's fun, it's easy to work with\"\nHere are some of the things we still need to work on:\n- Our Docker image is quite large as it includes all the `node_modules`. We think we can clean this up a bit by using Yarn's Plug'n'Play (PnP) feature which should lead to faster image-build times and faster container startup times.\n- With our custom SSR solution, we use Redux Toolkit (RTK) and RTKQuery on the server... This is of course an anti pattern on the server, since server-side logic should be stateless. The Remix framework does already tries to be smart with it's loaders, so the benefits we might have gotten from RTK aren't needed there.\n- We feel the application we're migrating from is doing too much - it includes our marketing pages like the _Blog_ and _Mission_ pages we've been working on for the initial release, as well as the pages for our our signup and renewal process (become a Vandebron customer [here](https://vandebron.nl)!!!) This is a separate conversation, and ultimately one for the FE Guild, but the existing app's size and purpose is making the migration take longer than it should, and forcing us to put some routing rules in place to make sure the right parts of our old site are getting swapped out for the new.\n- Previously, many of the images and PDFs we used on our website were checked directly into the repo. Part of our migration to Remix made us realize we should be using a CMS for this. We are already integrated with a CMS, we just need to be making better use of it in some cases.\n- We haven't explored the Remix-specific linting rules yet. While we're confident in the existing React and TS lint rules we already have, it seems like configs like [@remix-run/eslint-config](https://www.npmjs.com/package/@remix-run/eslint-config) could be quite handy.\n","meta":{"title":"Choosing Remix as a Server-Side Rendering (SSR) Framework","description":"We had our own custom SSR framework. It was time to move on. Find out why we picked Remix over NextJS as the replacement!","createdAt":"Fri Oct 18 2024 02:00:00 GMT+0200 (Central European Summer Time)","coverImage":"images/remix-migration-remix-vs-nextjs.png","tags":["remix","ssr","typescript","react","nextjs","ADR"],"author":"John Fisher","slug":"blog/choosing-remix-as-an-ssr-framework","formattedDate":"18 oktober 2024","date":"Fri Oct 18 2024 02:00:00 GMT+0200 (Central European Summer Time)"}},{"content":"\n\n## Salesforce + FlowRunner golden age\n\nSince 2015, Vandebron has been using Salesforce. At the time, Salesforce for Vandebron, was like a Swiss Army knife - versatile, multifunctional, and seemingly capable of addressing most of the business requirements. It quickly became the central hub for various operations - it became a workspace for agents, a CTI platform, a platform to send service emails and much more. Over time, Salesforce evolved beyond just a customer relationship management tool for Vandebron. It became a full-fledged platform that managed customer-related processes, such as the Signup process, Renewal process, Meter Reading process, etc. \nTo support this transition, Vandebron developed a custom mechanism known as FlowRunner, which was designed to automate and execute these processes within Salesforce.\nInitially, FlowRunner seemed like the perfect solution. It was tailor-made to handle the increasingly complex workflows that Vandebron needed to manage. While it successfully managed to support Vandebron’s operations for several years, this system was not without its flaws. These issues, which will be discussed in detail later, eventually led to the need for a more robust and scalable solution. But for a time, FlowRunner did its job, enabling Vandebron to leverage Salesforce far beyond its original purpose.\n\n\n## Salesforce + FlowRunner solution problems\n\n\nBroadly, the problems can be divided into two categories: technical and organizational.\n\nTechnical Problems: \n- Async Transactions Daily Limit. 250000 async transactions per 24 hours. For bulk processes, it is often not enough. We need to watch it carefully and adjust settings to avoid disaster.\n- Number of concurrent async jobs. Up to 5 async jobs simultaneously. \n- The FlowRunner mechanism in Salesforce creates lots of data. It uses ~ 25% of our storage. Data is expensive in Salesforce. \n- The Salesforce platform is not equipped for a custom BPM solution.This makes the Vandebron Salesforce codebase too large to be used with Salesforce DX (Salesforce CI/CD product). Furthermore, it forces us to maintain a lot of custom code that is available on the market.\n\nOrganizational Problems:\n- Centralization of Customer-Related Processes: With most customer-related processes embedded in Salesforce, any changes to these processes require intervention from the Salesforce team. This centralization creates a bottleneck, as all modifications, updates, and optimizations must pass through a single team, slowing down the overall pace of innovation and response.\n- Domain Overlap and Knowledge Dilution: The Salesforce team at Vandebron is responsible for managing approximately 50 different processes, each belonging to various business domains. This wide scope of responsibility leads to a dilution of expertise, as the team cannot maintain deep knowledge of every process. The result is a lower overall level of understanding and efficiency, making it difficult to ensure the smooth operation and timely updates of all processes.\n\n\n\n## Point of no return\n\nAt the beginning of 2022, Europe was hit by an unprecedented energy crisis. Gas and electricity prices skyrocketed, fluctuating unpredictably, and placing immense pressure on energy providers like Vandebron to adapt swiftly. In response, Vandebron introduced a solution designed to navigate this volatile market: the Flexible Variable Tariffs proposition.\nFrom a technical standpoint, implementing this new offering required the execution of a relatively complex process - Flow_VariableTariff for approximately 50% of our customer base. However, it soon became clear that the FlowRunner mechanism and Salesforce in general were not sufficient to handle the demands of this new process. The total execution time for Flow_VariableTariff was projected to be enormous, spanning over 20 days, which was far too long for a business that needed to respond rapidly to market changes.\nRecognizing the urgency of the situation, we immediately sought ways to optimize the process. While we succeeded in significantly simplifying Flow_VariableTariff, these improvements alone were insufficient to meet our needs. It was at this critical juncture that we realized Salesforce and the FlowRunner were no longer adequate for Vandebron’s evolving requirements. The limitations of these tools became glaringly apparent, signaling the need for a more powerful and flexible solution to support our operations in the face of such a dynamic and challenging environment.\n\n\n## Why Camunda?\n\nChoosing the right process orchestration tool is a critical decision, especially for a company like Vandebron, where efficient workflow management is essential for operational success. To ensure we made the best choice, we began by establishing a set of criteria that the new tool needed to meet. These criteria were designed to address our current challenges and future-proof our operations. Here are some of the most crucial criteria:\n- Compliance with BPMN 2.0 Standard: We prioritized tools that adhered to the BPMN 2.0 standard. This would make any future migration to another tool less painful, ensuring a smoother transition if needed.\n- CI/CD Integration: The ability to seamlessly integrate the tool with Vandebron's CI/CD pipeline was crucial. This integration would allow us to automate deployments, streamline updates, and maintain a high level of consistency across our development processes.\n- Support for Multiple Programming Languages: Given our diverse technology stack, we needed a tool that allowed us to implement flowstep logic in multiple programming languages, with a particular emphasis on supporting Scala, which is heavily used within our systems.\n- Unit Testing: The tool had to enable us to unit-test individual steps and parts of flows. This capability was essential for ensuring the reliability and accuracy of our processes before they were deployed to production.\n\nOur market analysis of process orchestration tools led us to evaluate five potential solutions:\n- Camunda 8\n- IBM Business Automation Workflow (BAW)\n- Bonita\n- Kogito\n- Flowable\n\n\nEach vendor provided us with a demo and/or a trial version of their product. During this evaluation process, we rigorously tested each tool against our criteria. Although all five options met our hard requirements, it quickly became evident that Camunda is the true leader in the market.\n\nSeveral factors contributed to our decision to choose Camunda:\n\n- SaaS Offering: Camunda's SaaS version provided us with the flexibility and scalability we needed, reducing the burden on our infrastructure and allowing us to focus on process management rather than platform maintenance.\n- Comprehensive Documentation: Camunda's clear and well-organized documentation made it easier for our teams to learn and implement the tool effectively, reducing the learning curve and speeding up the integration process.\n- Out-of-the-Box Connectors: Camunda offers a wide range of connectors right out of the box, enabling quick integration with various systems and services. This saved us time and effort, allowing us to implement new workflows faster.\n- User-Friendly Interface: The tool's intuitive and clean UI made it accessible to both technical and non-technical users, facilitating collaboration across teams and improving overall efficiency.\n- Responsive Support: Camunda's quick and helpful support was another decisive factor. Their team was readily available to assist us with any issues or questions, ensuring a smooth onboarding experience.\n\nIn the end, Camunda stood out as the optimal choice for Vandebron’s process orchestration needs, offering the perfect balance of functionality, usability, and support.\n\n## First steps with Camunda\n\nBefore we could begin migrating our processes from Salesforce to Camunda, it was essential to establish a robust infrastructure that would allow Camunda to seamlessly integrate with the rest of Vandebron’s ecosystem, particularly Salesforce. Since Salesforce would continue to serve as the primary workspace for our agents, we needed to ensure smooth communication and data flow between the two platforms. To achieve this, we developed several key infrastructural applications:\n\n- CamundaGateway: Camunda API (Zeebe API) operates using the gRPC protocol, which is not natively supported by Salesforce. To bridge this gap, we created the CamundaGateway, a proxy application that translates HTTP calls into a format that Zeebe API can understand. This application acts as an intermediary, enabling effective communication between Salesforce and Camunda.\n- CamundaSync: Each Camunda process instance has a corresponding representation in Salesforce. To keep the status of these instances up to date across both platforms, we implemented CamundaSync. This job regularly pulls the status of process instances from Camunda and updates the relevant records in Salesforce, ensuring that agents always have access to the most current information.\n- CamundaJobWorker: Not all process steps can be handled by simple connectors like the RestConnector. Some steps are more complex and require custom logic to be executed. To manage these, we developed the CamundaJobWorker service, which contains handlers for these complex process steps. This service allows us to extend Camunda’s capabilities and handle sophisticated workflow requirements efficiently.\n- BPM app (React): Certain processes require input from users, particularly agents working within Salesforce. To facilitate this, we built the BPM app, which includes a set of forms necessary for running specific processes. This application ensures that agents can interact with and influence the workflow directly from their workspace, maintaining the user experience they are accustomed to.\n\n\n![A schematic overview of the camunda infrastructure](../images/camunda_infrastructure.png \"A schematic overview of the camunda infrastructure\")\n\nAs of September 2024, we have successfully implemented the basic infrastructure needed for Camunda integration, and three customer-related processes have been migrated from Salesforce to Camunda, with several more in progress. \nIt's important to highlight that the migration process involved a comprehensive analysis of the existing process, including the removal of legacy components, identification of common errors, and targeted optimization efforts. As a result, we achieved a substantial reduction in errors. Specifically, the Flow_Renewal process, which previously had a 2% failure rate, now experiences only a 0.62% dropout rate post-migration, reflecting a 69% decrease in errors.\n\n\n## Future plans\n\nBy the end of the year, we aim to migrate up to 10 processes to Camunda, further reducing our reliance on Salesforce for process orchestration. In parallel, we plan to enhance our infrastructure applications—CamundaGateway, CamundaSync, CamundaJobWorker, and the BPM frontend app - to improve their performance, scalability, and ease of use. These enhancements will ensure that our systems remain robust and efficient as we expand our use of Camunda across more of Vandebron's operations.\nMoving forward, We will continue to leverage Camunda's capabilities to automate and optimize more processes, ultimately driving greater efficiencies and innovations across Vandebron.","meta":{"title":"Camunda BPM migration","description":"Migration from Salesforce Flow_Runner to Camunda BPM","createdAt":"Wed Sep 04 2024 02:00:00 GMT+0200 (Central European Summer Time)","coverImage":"images/camunda-rising.png","tags":["salesforce","camunda","bpm","process_orchestration"],"author":"Andrei Karabovich","slug":"blog/salesforce-camunda-bpm-migration","formattedDate":"4 september 2024","date":"Wed Sep 04 2024 02:00:00 GMT+0200 (Central European Summer Time)"}},{"content":"\n# Cassandra, it’s not you, it’s us\n\nI want you to know that you are probably an amazing product that has so much to offer to the world. However, it sadly just isn’t working out for us anymore.\n\nWe've encountered challenges such as escalating costs, inconsistent write and read performances, and setup misalignments that have constrained our growth. Of course, this is not entirely your fault, we set you up to fail with our infrastructure and use cases.\n\nI hope we can part on good terms, with mutual respect and appreciation for the time we shared. \nI wish you all the happiness, success, and fulfilment in the world, and I hope you find a company that complements your life in the way you deserve.\n\nThank you for understanding, and I truly wish you the best.\n\nYours truly, Vandebron\n\n## Our Data Storage Prince Charming\n![data-prince-charming.jpg](../images/data-prince-charming.jpg \"Data Prince\")\n\nA list of some of the qualities we are looking for:\n- Kindness and compassion. \n- High availability.\n- Low Maintenance.\n- Ability to store large volumes of data (currently around 10TB), though not everything has to be queried fast.\n- Capable of ingesting real-time energy usage data (every 15 minutes per customer, possibly higher frequency in the future).\n- Ideally, we can use our current tech stack as much as possible (flyway migrations, roundtrip tests, spark).\n- Ideally, use as few different database technologies as possible.\n- It does not need to be horizontally scalable, due to moving from 1 central data storage to a separate data storage per service.\n\nWith enough work, time and commitment, Cassandra could have fulfilled most of these requirements. However, love is a two-way street, and we didn't put in the time and effort to make it work.\n\n## Speed Dating Round\nSome potential suitors we considered for replacing Cassandra:\n\n#### ScyllaDB\nScyllaDB is very similar to Cassandra. It should have better performance but still have (almost) all the same functionality as Cassandra.\n\n#### PostgreSQL\nPostgreSQL is a relational database. We already use it extensively in our services.\n\n#### Cockroach\nIt is similar to PostgreSQL but with some limitations: [Known Limitations in CockroachDB v23.2](https://www.cockroachlabs.com/docs/stable/known-limitations.html)\n\nIt is horizontally scalable, which is an advantage over PostgreSQL when it comes to high availability and fault tolerance. We are also currently using it in some of our services.\n\n#### Timescale\nTimescale is a PostgreSQL extension that uses the same query layer, but a different storage layer, to have efficient time series-related features.\n\nIt can also distribute data, but this is still in early access and is not recommended.\n\n#### Yugabyte\n\nYugabyte is a PostgreSQL extension to make PostgreSQL into a distributed database.\n\n## Comparisons\n\nTo determine the most suitable match, we did some quick performance tests. One where we inserted 2 million + weather data records as fast as possible via recurring inserts, to see how easy it would be to migrate over to. And another test to determine general query speed.\n\n### Write Speed Results\n![insert-perf-database.jpg](../images/insert-perf-database.jpg \"Insert Graph\")\n\nNote that the test results are not 100% fair, because Timescale and Postgres don’t have to distribute the data over multiple nodes (though Timescale does have 2 replicas), and Cassandra already contained a lot of data (though with some testing timescale didn’t seem to become slower when it already had more data). For Yugabyte and Cockroach, we gave up after 1 hour. Also, the tests were done with the existing setup for Cassandra.\n\n### Query Speed Results\n![query-perf-database.jpg](../images/query-perf-database.jpg \"Query Graph\")\n\nWe also did some tests to query aggregated data from streaming data.\n- For this, we copied over 2.6M rows to each database.\n- For this data we need to aggregate (sum) some values per 15-minute time block).\n- For Cassandra/Scylla, this is done via spark.\n- For timescale use buckets based on timestamps.\n- For Postgres by grouping on floor(extract(epoch from timestamp) / 60 / 15)\n\n## Our Happily Ever After\n\nTimescale emerged as the clear winner here, not just for its performance in the above tests, but also for its seamless integration with our existing PostgreSQL setup. This compatibility allows us to maintain our current libraries and reduce code complexity, making Timescale an ideal choice for our time series data. At the same time, we continue to rely on Postgres for our other needs.\n\nCassandra, you won’t be missed.","meta":{"title":"Cassandra, it’s not you, it’s us","description":"Our Journey to find the perfect data storage solution for us","createdAt":"Fri Feb 16 2024 01:00:00 GMT+0100 (Central European Standard Time)","coverImage":"images/heart-breaking.jpg","tags":["cassandra","timescale","postgresql"],"author":"Tomás Phelan","slug":"blog/cassandra-its-not-you-its-us","formattedDate":"16 februari 2024","date":"Fri Feb 16 2024 01:00:00 GMT+0100 (Central European Standard Time)"}},{"content":"\nThe title of this article could have also been \"*Getting Rid of an Unmanageable Legacy Data Model*\", but after a year-long migration project the current title does more justice to the progress made. \n\n#### Compiled Legacy as a Data Model\n\nOur former data model was a series of parallel custom python jobs all covering every step of the *Extract-Transform-Load* (ETL) process from sources into report. Specific transformation got performed a numerous amount of times in multiple different jobs, daily. This made us prone to bugs, slow on development and maxing out on compute. \n\nThe situation became so pressing that keeping alive simple reporting to the business became a daily burden on the Data Analytics team, limiting resources for advanced analytics and leveraging data sources for competitive insights.\n\nWe concluded the old set-up to be outdated and looked around for current best practices concerning data infrastructure. Trying not to reinvent the wheel and staying away from designing custom solutions that had bitten us in the past, we decided to adopt a combination of *Snowflake*, *dbt* and *Lightdash* to start forming a new data landscape.\n\nThis revamping of the set-up gave us the opportunity to start over, using the power of *dbt* to create a modular data model where you could leverage different stages of data, while creating shared definitions, a single source of truth and documentation.\n\n#### What We Came Up With?\n\nWe went for a pretty classic *dbt* data model design, introducing 5 layers of data: staging, entity, intermediate, mart and api. Each layer serving a specific purpose.\n\n##### Staging\n\nWith all data coming in from different sources, this is where we ensure the data all adheres to the same conventions and formatting. This introduces a nice developer experience for the next layers, by introducing consistency across different sources. It also serves as the go to place for advanced or deep dive analysis that do not get answered by the downstream layers, which could potentially spark data modelling developments.\n\n##### Entity\n\nAfter uniforming the data, we create entities that form the building blocks of the downstream layers and analyses of our business analysts. We built entities along the core aspects of our product, capturing shared definitions in data and bringing together relevant features using the *One-Big-Table* (OBT) principle. We try to refrain from long queries or extensive use of CTE's, resulting in simplistic models. These models serve our business analysts by reducing the complexity of their queries with all joins and filters taken care of, denormalizing the database structure. This has shifted the place where ad-hoc BI requests are fulfilled from the central data team to the domain business teams, applying principles of a data mesh.\n\n##### Intermediate\n\nWith some models rising in complexity and computation, we use the intermediate layer to split this complexity and computation across multiple models. These intermediate models are rarely queried because they serve no reporting or analytical purpose. Think of incremental date spine explosions or highly complex business logic broken down into multiple models.\n\n##### Mart\n\nThis is the main layer where we provide self-service to less technical employees within the organization, creating ready-made tables. We aggregate along date spines and dimensions to create readable models. It is where we leverage *Lightdash* metrics to create dynamic tables to provide business teams with a certain amount of freedom in terms of the granularity and dimensions they want to report on in their dashboarding. The use of entities as building blocks has aligned reporting across domain business teams, creating a single and centralized source of truth and relieving the data team from explaining distinctions. So while the dimensions can be tweaked for specific use cases, the definitions of the metrics are set in code.\n\n##### API\n\nWith some dependencies outside of the data model, we use an API layer on top of our mart to record exposures towards different services and provide views which explicitly contain only the necessary datapoints.\n\n![A schematic overview of the data model structure](/images/schematic_data_layers.jpg \"A schematic overview of the data model structure\")\n\n#### The Process\n\nWe decided to take advantage of the chaos created by the old situation: no real single source of truth gave us the opportunity to create a truth. Investigating business teams' needs, we created data definitions in entities. We kept a pragmatic approach to these definitions, being flexible towards business teams' specific needs but also limiting the allowed complexity or number of exceptions. The new data model should answer everyone's questions, but should also be understood by everyone.\n\nWe forced ourselves to have descriptions for all data from the entity layer onwards, because only defining and describing the entities in code is not enough. We leveraged the embedded business analysts' knowledge to form the descriptions, noting that the best description is the one the user understands (because they wrote it).\n\nWith the ready-made marts in place, we decided to give away most of the dashboarding responsibility to the business teams. The embedded analysts are very apt at defining and designing their relevant insights into dashboards. The central data team only took ownership of company wide dashboards and provided support on the dashboarding where necessary.\n\nAfter the adoption of the new stack, we noticed that the more technical embedded analysts were very interested in learning a new tool and language. So, we started a data model group and onboarded multiple embedded business analysts as data model developers. This has massively increased the speed of development of the data model. Primarily, because of specific business domain knowledge not needed to be transferred to the developers in the central data team first, but the knowledge holders developed models themselves. The central data team took on a different role: providing infrastructural support, improving on efficiency, monitoring costs and creating a vision and strategy for organic but structured growth.\n\n![A schematic overview of the final self-servicing data model product](/images/schematic_data_product.jpg \"A schematic overview of the final self-servicing data model product\")\n\n#### What Did We Learn?\n\nFew key takeaways:\n\n- Some business teams have more requirements in terms of definitions than other teams, so if other teams allow, be pragmatic and just go for the stricter requirements.\n- Enabling self-service analysis means giving away control, take this into account in your data descriptions. They should be clear and concise.\n- Educate users on the designed structure of the data model, explain what layer serves which purpose and what questions can be answered how and where.\n- Create clear communication and support channels for the business to kickstart the adoption, you are not the only one learning a new tool.\n- Data is not only for the data team, so encourage those passionate and enthusiastic analysts to co-create! (Just keep an eye on the project.) ","meta":{"title":"Creating a Self-Service Data Model","description":"How we migrated to a modern data stack to enable self-servicing across the business","createdAt":"Wed Feb 07 2024 01:00:00 GMT+0100 (Central European Standard Time)","coverImage":"images/self_service.jpg","tags":["dbt","snowflake","lightdash","datamodel","self-service"],"author":"Mats Stijlaart","slug":"blog/creating_a_self-service_data_model","formattedDate":"7 februari 2024","date":"Wed Feb 07 2024 01:00:00 GMT+0100 (Central European Standard Time)"}},{"content":"\n\n# Authenticate Snowflake rest api via Keycloak\n\nHere in Vandebron we use Keycloak as our identity and access management (IAM) solution and Snowflake as our data warehousing platform. \nKeycloak is a powerful and extensible solution for managing user identities and access control, making it a popular choice for organizations seeking a comprehensive and open-source IAM platform.\nSnowflake is designed to handle and analyze large volumes of data with speed and efficiency. It is known for its scalability, flexibility, and ease of use in managing and analyzing diverse and massive datasets.\n\n## Accessing Snowflake data via Rest API\n\nThere are several ways to access data in Snowflake one of these are the Snowflake rest api, they are a comprehensive set of REST APIs for managing and interacting with various aspects of the Snowflake Data Cloud, including account management, data loading, querying, and more.\nThese REST APIs allow developers to programmatically perform tasks such as executing SQL queries, managing virtual warehouses, and administering user roles. They are designed to enable automation and integration with other applications and services.\n\n## Why via Rest Api?\n\nThe Snowflake SQL API is a REST API that you can use to access and update data in a Snowflake database. You can use this API to develop custom applications and integrations that can perform most of the queries you need. More info here: [Snowflake rest api](https://docs.snowflake.com/en/developer-guide/sql-api/index)\n\nWe decided to connect our microservices to snowflake via rest api mainly because we consider this mechanism the best way to decouple database processing with backend processing in fact the queries issued via the endpoint are processed inside Snowflake ecosystem asynchronously.\n\nThe service can poll snowflake to monitor the request until it is completed. See [Sql api response](https://docs.snowflake.com/en/developer-guide/sql-api/handling-responses) .\n\nUsing api communication has other very good benefits:\n\n- No additional library dependency\n- No Additional spark connectors\n- Since there is no way to run snowflake on a local machine unit test a snowflake connection would have been very hard ( impossible ). With Rest api communication we can unit test snowflake api client using contract test. ( one way contract test is better than nothing )\n\n## Snowflake Authentication\n\nSnowflake provides a convenient way to authenticate to it using “any” OAuth authentication server. Our authentication server is Keycloak so in the following sections you will learn how to integrate Keycloak with Snowflake.\nResources to this topic can be found here [auth-ext-overview ](https://docs.snowflake.com/en/user-guide/oauth-ext-overview) and here: [oauth-ext-custom](https://docs.snowflake.com/en/user-guide/oauth-ext-custom)\n\n\n## Keycloak side\n\nYou need to configure your client to return in the JWT access token the following claims:\n\n```json\n{\n \"aud\": \"\",\n \"iat\": 1576705500,\n \"exp\": 1576709100,\n \"iss\": \"\",\n \"scope\": [\n \"session:role-any\"\n ]\n}\n```\n\nmost of them are returned by default. Aud claims is the only one you should add\nTo add `aud` claim you can add a new mapper to your client with type Audience see image:\n\n![keycloak_aud.png](../images/keycloak_aud.png \"Keycloak aud mapper\")\n\n**Note**: You need to add a custom audience with the value **equal** to the login_name attribute value in snowflake. The audience value will be used to look up to the right user in snowflake integration\n\nThen you need to add the snowflake scope to your scope list: session:role-any\nFinally you can check that your token is correct:\n\n```json\n{\n .....\n \"iss\": \"https://test.vdbinfra.nl/auth/realms/vandebron\",\n \"scope\": \"session:role-any\",\n \"aud\": \"energy-trading-test\",\n ....\n}\n```\n\nThe `aud` must contain only the snowflake login_name. For instance, a token such as the following will not work (multiple audiences):\"aud\": [ \"batterypack-services-test\", \"account\" ],\n\n## Snowflake side\n\nHow to find keycloak public key: [stackoverflow](https://stackoverflow.com/a/57457227)\nRequired: `ACCOUNTADMIN` rights in Snowflake.\nExample integration command:\n\n```sql\ncreate or replace security integration external_oauth_keycloak_test\ntype = external_oauth\nenabled = true\nexternal_oauth_type = custom\nexternal_oauth_issuer = 'https://test.vdbinfra.nl/auth/realms/vandebron'\nexternal_oauth_rsa_public_key = ''\nexternal_oauth_audience_list = ('energy-trading-test')\nexternal_oauth_scope_mapping_attribute = 'scope'\nexternal_oauth_token_user_mapping_claim = 'aud'\nexternal_oauth_any_role_mode = 'ENABLE'\nexternal_oauth_scope_delimiter = ' '\nexternal_oauth_snowflake_user_mapping_attribute = 'login_name';\n```\n\nNote: the external_oauth_scope_delimiter setting must be enabled separately by Snowflake support.\nNext, you need to set the login name for the user you want associate with the integration:\n\n![snowflake_auth_conf.png](../images/snowflake_auth_conf.png \"Snowflake auth configuration\")\n\n### Example\n\nLet’s authenticate with keycloak as we do normally:\n\n```curl\ncurl --location --request POST 'https://keycloak.test-backend.vdbinfra.nl/auth/realms/vandebron/protocol/openid-connect/token/' \\\n--header 'Content-Type: application/x-www-form-urlencoded' \\\n--data-urlencode 'grant_type=client_credentials' \\\n--data-urlencode 'client_id=energy-trading' \\\n--data-urlencode 'client_secret='\n```\n\nNow you should get the token. Optional: van verify the token directly in snowflake with SQL:\n\n```sql\nSELECT SYSTEM$VERIFY_EXTERNAL_OAUTH_TOKEN( '' )\n```\n\nUse it in the snowflake statement endpoint. For example:\n\n```curl\ncurl --location --request POST 'https://.eu-central-1.snowflakecomputing.com/api/v2/statements?async=true' \\\n--header 'Authorization: Bearer \\\n--header 'Content-Type: application/json' \\\n--data-raw '{\n\"statement\": \"select \\\"data\\\" as prediction, to_number(\\\"lats\\\", 10, 4) as lats, to_number(\\\"lons\\\", 10, 4) as lons, \\\"scaledValueOfFirstFixedSurface\\\" as scaled_value_of_first_fixed_surface, to_timestamp_tz( concat(\\\"dataDate\\\", lpad(\\\"dataTime\\\", 4, 0)) || '\\''+0'\\'', '\\''yyyymmddhh24mi+tzh'\\'') as model_datetime, to_timestamp_tz( concat(\\\"validityDate\\\", lpad(\\\"validityTime\\\", 4, 0)) || '\\''+0'\\'', '\\''yyyymmddhh24mi+tzh'\\'') as predicted_datetime, insert_date_snowflake, current_timestamp()::timestamp_tz(9) as insert_date_staging from raw.icon_eu.alhfl_s;\"\n}'\n```\n\nNB: It is important to use the proper snowflake base url. In my case I am using https://.eu-central-1.snowflakecomputing.com/ where is my account identifier which was authorised during configuration phase the snowflake user the token is referring to in the clientId claim.\nYou should get a response such as:\n\n```json\n{\n \"code\": \"333334\",\n \"message\": \"Asynchronous execution in progress. Use provided query id to perform query monitoring and management.\",\n \"statementHandle\": \"01aafc80-3201-abed-0001-4a0e00e52816\",\n \"statementStatusUrl\": \"/api/v2/statements/01aafc80-3201-abed-0001-4a0e00e52816\"\n}\n```\n\nNow you can follow the async operation to the following get endpoint:\n\n```http\nhttps://.eu-central-1.snowflakecomputing.com/api/v2/statements/01aafc80-3201-abed-0001-4a0e00e52816\n```\n\nIt will return 202 if the processing is still ongoing. It will return 200 and the actual result when processing ends.\n\nHappy coding!","meta":{"title":"Authenticate Snowflake via Keycloak","description":"How to use Keycloak to authenticate against Snowflake rest api","createdAt":"Tue Dec 19 2023 01:00:00 GMT+0100 (Central European Standard Time)","coverImage":"images/snowflake_keycloak.jpg","tags":["keycloak","snowflake","rest","oauth","bearer token","authentication","security"],"author":"Rosario Renga","slug":"blog/authenticate-snowflake-rest-api-using-keycloak","formattedDate":"19 december 2023","date":"Tue Dec 19 2023 01:00:00 GMT+0100 (Central European Standard Time)"}},{"content":"\nIn our sustainable journey at Vandebron, we are not only striving to revolutionize the renewable energy sector, but we are also rethinking how we interact with technology ourselves. As a part of this initiative, we have been looking at how to reduce our digital footprint. One of our most recent projects involves transforming our ageing fleet of iMacs into revitalized, lightweight machines. \n\nWe proudly introduce the 'flexMac'.\n\n### Regained speed, sustainability and enhanced security\nOur customer contact department, the core of our operation, was equipped with older iMacs running on slower HDD drives. While replacing these machines with newer models might have been the easier route, it didn't align with our commitment to sustainability. \n\nInstead, we decided to be creative and look for ways to upcycle our older iMacs. Our choice of tool? Google's ChromeOS Flex. As the slogan suggests, [‘don’t bin it, just flex it’](https://www.linkedin.com/feed/update/urn:li:activity:7066377989831233536/) we figured this could very well meet our wishes. By installing this onto our iMacs, we have given birth to our new line of workstations, naming them 'flexMacs'.\n\n[ChromeOS Flex](https://chromeenterprise.google/os/chromeosflex/) is a free, open-source operating system by Google that breathes [new life into older PCs and Macs](https://cloud.google.com/blog/products/chrome-enterprise/chromeos-flex-ready-to-scale-to-pcs-and-macs). It's lightweight, fast, and ideal for the web-centric applications and services our customer contact department uses every day. Once ChromeOS Flex was installed, the transformation was remarkable. The old machines metamorphosed from very slow to production-ready again in a breath, adept at handling all our workflows at the Customer Contact department.\n\nThese workflows at Customer Contact are fully web-based. It enables us multichannel support, integration capabilities, and data-driven insights. These help our support agents to provide personalized and efficient service across various communication channels. By using these technologies and insights, we optimize our customer service strategies, leading (hopefully) to higher customer satisfaction.\n\nAnother important benefit of this transformation was an added layer of security. ChromeOS Flex allows our users to log in using their Google identity, ensuring a personalized and secure workspace for every team member. This means each user experiences a secure, tailored environment, whilst bringing an additional level of security and control to our IT operations.\n\n### The importance of circularity\nBesides the operational benefits, the broader environmental impact of this initiative is important to us. By extending the life of our technology, we contribute directly to reducing e-waste, one of [the fastest-growing waste streams in the EU](https://www.europarl.europa.eu/news/en/headlines/society/20201208STO93325/e-waste-in-the-eu-facts-and-figures-infographic). As a company, Vandebron is not only promoting sustainable innovations but striving to actively embody them. Our 'flexMacs project is a testament to this commitment.\n\nOur 'flexMacs' project demonstrates how we can repurpose and upgrade older hardware, which according to Emerce is a [hot thing to do](https://www.emerce.nl/achtergrond/circulaire-hardware-is-hot-dit-is-waarom). We hope this blogpost inspires you to consider similar sustainability initiatives. By choosing to upgrade rather than replace, we extend the life of existing hardware and contribute to a reduction in e-waste.\n\nStay tuned for more updates from our tech-driven sustainability journey.\n","meta":{"title":"Sustainable Tech-Hardware - Introducing the 'flexMac'","description":"Enhanced security, sustainability, and regained speed at Customer Contact revitalizing our old iMacs.","createdAt":"Mon Jul 03 2023 02:00:00 GMT+0200 (Central European Summer Time)","coverImage":"images/circular.jpeg","tags":"sustainable-tech, flexmac, circularity","author":"Gehdrio Lake & Sietse Bruinsma","slug":"blog/sustainable-tech-hardware","formattedDate":"3 juli 2023","date":"Mon Jul 03 2023 02:00:00 GMT+0200 (Central European Summer Time)"}},{"content":"\n\n### Amazon embraces the mighty monolith\n\n\"image\n\nIn March 2023, Amazon published a [blog post](https://www.primevideotech.com/video-streaming/scaling-up-the-prime-video-audio-video-monitoring-service-and-reducing-costs-by-90)\n, detailing how they had managed to reduce the cost of their audio-video monitoring service by 90%.\nThe _key_ to this reduction was migrating from a distributed, microservice architecture to a _monolith_.\nThe blog post went viral, prompting some software industry celebrities to \n[question](https://world.hey.com/dhh/even-amazon-can-t-make-sense-of-serverless-or-microservices-59625580) the entire concept of microservices.\n\n### What should we learn from this?\n\nSo, does this mean microservices are fundamentally flawed? Should we all migrate back to monoliths?\n_No_ and _definitely no_ I would say. Instead, my takeaways from this article are:\n\n1. **Microservices aren't about scaling for performance.** At least not primarily. Although horizontally scalability for computationally intensive operations _can_ be very useful or even essential in some cases, it tends to be a rare benefit. Very often, performance bottlenecks are IO bound and caused by external systems beyond your control. Nevertheless, there _are_ other compelling reasons to consider microservices: they _force_ you to communicate via contracts, _encourage_ you to organize your functionality around domains, and _allow_ you to scale your organization. Of course, all this comes at considerable costs. There's no [free lunch 👇](#presentation).\n2. Don't underestimate the power of a single CPU in 2023. To judge whether a process is unreasonably slow or not, I tend to think of the fact that already in the 1990s, screens showed 65K pixels at any given time. Back then, multiple arithmetic calculations (additions, subtractions) could be performed for each pixel, fifty times per second. Nowadays, your screen probably displays more than 5 Million pixels at once. So, if the amount of datapoints you are dealing with in the order of millions, you should generally be able to process them in a matter of seconds on a single machine. If you can't, you may be doing something very inefficient.\n3. **Software engineering is hard**. Mistakes are made all the time, everywhere. Even at the big 4 tech companies. Kudos to Amazon 👏 for openly sharing the mistake they made so that we may all learn.\nIn the next section I will share one of our own experiences, not entirely different from the Amazon example.\n\n### The 90% cost reduction case at Vandebron\n\n#### Microservices or just distributed computing?\nConsidering that all the functionality used in the Amazon case belongs to the same _domain_, it arguably does not even serve as \na case against improper use of microservices, but instead a case against misuse *distributed computing*.
\nLet's look into an example of misuse of distributed computing at Vandebron now.\n\n#### Predicting the production of electricity\nFor utility companies, accurately predicting both electricity consumption and production is crucial.\nFailing to do so can result in blackouts or overproduction, both of which are [very costly](https://vandebron.nl/blog/hoe-houdt-onze-technologie-het-energienet-in-balans).\nVandebron is a unique utility company in that the electricity that our customers consume is produced by a [very large\namount](https://vandebron.nl/energiebronnen) of relatively small scale producers, who produce electricity using windmills or solar panels.\nThe large number and the weather dependent nature of these producers make it very hard to predict electricity generation accurately.\n\nTo do this, we use a machine learning model that is trained on historical production data \nand predictions from the national weather [institute](https://www.knmi.nl/). As you can imagine, this is a computationally intensive task, involving large amounts of data.\nFortunately, we have [tooling in place](https://www.vandebron.tech/blog/fueling-the-energy-transition-with-spark-part-1) that\nallows us to distribute computations of a cluster of machines if the task is too large for a single machine to handle.\n\nHowever, here's the catch: the fact that we _can_ distribute computations does not mean that we should. Initially it seemed that\nwe couldn't analyze the weather data quick enough for the estimation of our production to still be a _prediction_\nrather than a _postdiction_. We decided to distribute the computation of the weather data over a cluster of machines.\nThis worked, but it made our software more complex and Jeff Bezos even richer than he already was.\n\nUpon closer inspection, we found an extreme inefficiency in our code. It turned out that we were repeatedly reading the entire weather dataset\ninto memory, for _every_ single \"pixel\". After removing this performance bug, the entire analysis could _easily_ be done\non a single machine. \n\n### What more is there to say? \n\n\nSo if microservices aren't about performance, what _are_ they about? If I had to sum it up in one sentence It would be:\n> _Microservices are a way to scale your organization_\n\nThere is a lot of detail hiding in that sentence, which I can't unpack in the scope of this article. If you're interested\nwhat microservices have meant for us, I would recommend you watch the presentation below.\n\n\n#### Microservices at Vandebron\nAt [Vandebron](https://vandebron.nl/), we jumped onto the \"microservice bandwagon\" circa 2019. This wasn't a decision\nmade on a whim. We had seen a few industry trends come and go, so we first [read up](https://samnewman.io/books/building_microservices_2nd_edition/)\nand did our own analysis. We found that the concept of microservices held promise, but also knew that they would come at a cost.\n\nThese are some of the dangers we identified and what we did to mitigate them.\n\n| **Danger** | **Mitigation** |\n|-------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------|\n| _A stagnating architecture_ | Compile and unit-test time detection of breaking changes |\n| _Complicated and error prone deployments_ | Modular CI/CD [pipelines](https://github.com/Vandebron/mpyl) |\n| _Team siloization_ | A single repository (AKA monorepo) for all microservices and a discussion platform for cross-domain and cross-team concerns |\n| _Duplication of code_ | Shared in house libraries for common functionality |\n\n\n\nThe following presentation to the students of [VU University, Amsterdam](https://vu.nl/) explains how we implemented\nsome of these mitigations and what we learned from them.\n\n[![Presentation about micro services to students of VU Amsterdam](/images/play_presentation.webp)](https://youtu.be/HDs-pCsEzKM)\n","meta":{"title":"So, back to the monolith it is then?","description":"A recent Amazon article explaining how they managed to save costs by merging some of their services has lead some to question the value of microservices. What is our take?","createdAt":"Sat May 20 2023 02:00:00 GMT+0200 (Central European Summer Time)","coverImage":"images/monolith.webp","tags":"dagster, cicd, ci-cd, orchestration, data pipeline, kubernetes, migration, helm, ansible","author":"Sam Theisens","slug":"blog/back-to-the-monolith","formattedDate":"20 mei 2023","date":"Sat May 20 2023 02:00:00 GMT+0200 (Central European Summer Time)"}},{"content":"\nVandebron is a Dutch green-tech energy company on a mission to accelerate the transition to 100% renewable energy, 100% of the time. As part of [our mission and strategy](https://vandebron.nl/100procentgroen), we are constantly innovating and looking for ways to optimize energy operations and reduce negative impacts when it comes to energy production.\n\nOur new mission: [100% renewable energy, 100% of the time](https://youtu.be/_Yf8jk4gZbI)\n\n### The importance of curtailment and flexibility services\n\nOne area where we are currently focusing our efforts is the area of curtailment and flexibility of wind turbines, solar parks, industrial batteries and electric vehicles. [Curtailment](https://vandebron.nl/blog/curtailment-slimmer-omgaan-met-goeie-energie) refers to the practice of reducing the electricity inflow to balance the electricity grid. In other words, it involves adjusting the operation of, for example, a wind turbine in order to match the demand for electricity at any given time.\n\n[This is often necessary](https://vandebron.nl/blog/hoe-houdt-onze-technologie-het-energienet-in-balans) because the output of renewable energy sources can vary significantly due to changes in weather conditions. If the output of these sources exceeds the demand for electricity, it can lead to an excess of electricity on the grid, which can cause stability issues. On the other hand, if the output of wind turbines is too low, it can lead to a deficit of electricity on the grid, which can cause blackouts or other disruptions. To tackle this, we look at our customer’s batteries and electric vehicles offering flexibility capabilities.\n\n### Our journey to finding reliable, secure and energy-efficient hardware and software\n\nTo optimize these curtailment and flexibility efforts, we were in need of a gateway device that we could place at the installations of the producers on our platform. To keep it close to our mission, we preferred an ARM-based CPU for its [energy efficiency](https://www.redhat.com/en/topics/linux/ARM-vs-x86) compared to an x86-based CPU. After all, we don’t want to consume all of the produced energy to power an actively cooled NUC… 😉\n\nWhile gathering our hardware requirements, we concluded there was really only one competitor. Therefore, we partnered up with OnLogic! We chose their [Factor 201 device](https://www.onlogic.com/fr201/), which boasts the ARM-based Raspberry Pi CM4 module packed in a small and beautiful orange industrial chassis. The model also enables a lot of custom configurations. For example, we are able to configure multiple (wireless) networks, add extra SSD storage or optionally mount on DIN rails.\n\n![OnLogic Factor 201](/images/flex-onlogic-factor-201.jpg \"OnLogic Factor 201\")\n\nTo ensure our gateway devices are secure and agile (like us, developers, 😛) we needed them to integrate well into our existing technology landscape based on Kubernetes. After struggling for some time to harden several (lightweight) operating systems and bootstrapping lightweight Kubernetes clusters our eyes fell on a new kid in town: ‘Talos Linux, the Kubernetes Operating system’ built by [Sidero Labs](https://www.siderolabs.com/). Again our predetermined wishlist was covered (even more), and what we got is a minimal OS tailored for Kubernetes, hardened, immutable and ephemeral out-of-the-box. Can you survive even more buzzwords than that? \n\nUntil the present day though, they have fulfilled every promise made on [their website](https://www.talos.dev/). It initially didn’t work on our ARM CM4-based device from OnLogic. But after testing a lot together with their team (thank you!) the [latest release (v1.3.0)](https://www.talos.dev/v1.3/introduction/what-is-new/#raspberry-generic-images) officially supports our ARM devices. Ready for action! Right after the stable release the first batches were shipped and connected to the installations of our producers on the platform.\n\nOverall, Vandebron's use of OnLogic's fabricated gateway devices running Talos Linux demonstrates the potential of IoT computing to drive innovation and sustainability in the renewable energy industry. By leveraging the power of these technologies combined, we are one step closer to achieving our goal of 100% renewable energy, 100% of the time. Care to join our mission? Look for [open positions](https://werkenbij.vandebron.nl/).\n\n","meta":{"title":"How Vandebron helps balancing the Dutch energy grid together with OnLogic & Talos Linux","description":"Our journey to find the best fitting hardware and operating system to use for our flex services","createdAt":"Wed Jan 11 2023 01:00:00 GMT+0100 (Central European Standard Time)","coverImage":"images/flex-wallpaper.webp","tags":"iot, flexibility services, curtailment, onlogic, talos linux, kubernetes, arm64, raspberry pi","author":"Sietse Bruinsma & Tim van Druenen","slug":"blog/balancing-dutch-energy-grid-with-flex-services","formattedDate":"11 januari 2023","date":"Wed Jan 11 2023 01:00:00 GMT+0100 (Central European Standard Time)"}},{"content":"\n### TL;DR\nIf you want to deploy new Dagster user code respositories, you need to modify and redeploy the whole Dagster system (while they are [presented as separate](https://docs.dagster.io/deployment/guides/kubernetes/customizing-your-deployment#separately-deploying-dagster-infrastructure-and-user-code) in the docs). This is undesirable for many reasons, most notably because it slows down a migration or the regular development process. This post presents a way to avoid this and build a fully automated CI/CD-pipeline for (new) user code.\n\nThis article assumes that:\n* you (plan to) host Dagster on Kubernetes and manage its deployment with Helm and Ansible;\n* you want to automate the deployment of new Dagster user code repositories with a CI/CD pipeline automation tool of choice;\n* and you want to be able to (re)deploy the whole Dagster system and user code from scratch.\n\n### Why Dagster?\n\nIn short Dagster is a tool to build and orchestrate complex data applications in Python. For us, in the end, Dagster improved the development cycle for things like simple cron jobs as well as for complex ML pipelines. Testing the flows locally was never so easy, for instance. And with features like [asset materialization](https://docs.dagster.io/concepts/assets/asset-materializations) and [sensors](https://docs.dagster.io/concepts/partitions-schedules-sensors/sensors), we can trigger downstream jobs based on the change of an external state that an upstream job caused, without these jobs having to know of each other's existence.\n\nHowever, deployment of new [user code respositories](https://docs.dagster.io/concepts/repositories-workspaces/repositories) caused us some CI/CD related headaches...\n\n### System and user code are separated\n\nDagster separates the system deployment - the Dagit (UI) web server and the daemons that coordinate the runs - from the user code deployment - the actual data pipeline. In other words: the user code servers run in complete isolation from the system and each other. \n\nThis is a great feature of which the advantages are obvious: user code repositories have their own Python environment, teams can manage these separately, and if a user code server breaks down the system is not impacted. In fact, it even doesn't require a restart when user code is updated!\n\n![Schematic of the Dagster architecture. The user code repositories (green) are separate from the rest of the system (yellow and blue). The right side — irrelevant for now — shows the job runs. Source: https://docs.dagster.io/deployment/overview.](/images/dagster-architecture.png)\n\nIn Helm terms: there are 2 charts, namely the _system_: `dagster/dagster` ([values.yaml](https://github.com/dagster-io/dagster/blob/master/helm/dagster/values.yaml)), and the _user code_: `dagster/dagster-user-deployments` ([values.yaml](https://github.com/dagster-io/dagster/blob/master/helm/dagster/charts/dagster-user-deployments/values.yaml)). Note that you have to set `dagster-user-deployments.enabled: true` in the `dagster/dagster` values-yaml to enable this.\n\n#### Or are they?\n\nThat having said, you might find it peculiar that in the values-yaml of the system deployment, _you need to specify the user code servers_. That looks like this:\n\n```yaml\nworkspace:\n enabled: true\n servers:\n - host: \"k8s-example-user-code-1\"\n port: 3030\n name: \"user-code-example\"\n```\n\n**This means system and user deployments are not actually completely separated!**\n\nThis implies that, if you want to add a _new_ user code repository, not only do you need to:\n\n1. add the repo to the user code's `values.yaml` (via a PR in the Git repo of your company's platform team, probably);\n2. do a helm-upgrade of the corresponding `dagster/dagster-user-deployments` chart;\n\nbut because of the not-so-separation, you still need to:\n\n3. add the user code server to the system's `values.yaml` (via that same PR);\n4. and do a helm-upgrade of the corresponding `dagster/dagster` chart.\n\nFormally this is the process to go through. If you are fine with this, stop reading here. It's the cleanest solution anyway. But it is quite cumbersome, so...\n\nIf you are in a situation in which new repositories can get added multiple times a day - for instance because you are in the middle of a migration to Dagster, or you want a staging environment for every single PR - then read on.\n\n#### Give me more details\n\nHow it works is that [for every new repo Dagster spins up a (gRPC) server to host the user code](https://docs.dagster.io/deployment/guides/kubernetes/deploying-with-helm#user-code-deployment). The separation is clear here. But the Dagster _system_ also needs to know about these user code servers, and it does so through a workspace-yaml file. If you run Dagit locally it relies on a `workspace.yaml` file; on Kubernetes it relies on a [ConfigMap](https://kubernetes.io/docs/concepts/configuration/configmap/) - a Kubernetes object used to store non-confidential data in key-value pairs, e.g. the content of a file - which they named `dagster-workspace-yaml`.\n\nThis workspace-yaml is the connection between the system and the user code. The fact that the charts are designed as such that this workspace-yaml is created and modified through the system deployment rather than the user code deployment is the reason we need to redeploy the system. \n\n**But what if we could modify this workspace-yaml file ourselves? Can we make the system redeployment obsolete? Short answer: we can.**\n\n### Our solution\n\n_Disclaimer: what we present here is a workaround that we'll keep in place until the moment Dagster releases a version in which the Dagster user code deployment is **actually completely separated** from the system deployment. And it works like a charm._\n\n**Remember: the desired situation is that we do not have to edit the values-yaml files (through a PR) and redeploy all of Dagster for every new repo.**\n\nFirst of all, we added an extra ConfigMap in Kubernetes that contains the `values.yaml` for the `dagster/dagster-user-deployments` chart. We named it `dagster-user-deployments-values-yaml`. The fact that this is a ConfigMap is crucial to prevent conflicts (see next section).\n\nWith the extra ConfigMap in place, these are the steps when a repo gets added:\n1. Add the new repo to the `dagster-user-deployments-values-yaml` Configmap.\n2. Helm-upgrade the `dagster/dagster-user-deployments` chart with the content of that ConfigMap.\n3. Add the server to the `dagster-workspace-yaml` ConfigMap.\n4. Do a rolling restart of the `dagster-dagit` and `dagster-daemon` deployment to pull the latest workspace to these services.\n\n**Refresh the workspace in the UI and there it is, your new repo!**\n\nNotes:\n* The steps above are completely automatable through your favorite CI/CD pipeline automation tool.\n* There is no interaction with a (platform team) Git repo.\n* The process, unfortunately, still requires a restart of the system in order to pull the latest workspace-yaml to the system services. The daemon terminates, then restarts, and it might cause a short interruption. Note that this is unavoidable if you add a new repo, no matter how you add it. This could be avoided if a reload of the ConfigMap would be triggered upon a change, [which is possible](https://kubernetes.io/docs/concepts/configuration/configmap/#mounted-configmaps-are-updated-automatically) but not enabled.\n* If you want to make changes to an existing repo (not code changes but server setting changes), you only have to do the first step (and _modify_ instead of _add_).\n\n#### How to prevent conflicts\n\nWith many of your team members adding new Dagster repositories through an automated CI/CD pipeline, you might face the situation that 2 people are adding a new repo at around the same time. \n\nWhen this happens, the `dagster-user-deployments-values-yaml` ConfigMap cannot be uploaded in the first step because Kubernetes demands that you provide the _last-applied-configuration_ when doing an update. If it doesn't match, the upload fails. \n\nThis is perfect as we do not want to overwrite the changes of the conflicting flow. You can optionally build in a retry-mechanism that starts over with pulling the ConfigMap again.\n\n#### How to deploy from scratch\n\nThe above does not yet cover how we are able to deploy the Dagster system _and user code_ completely from scratch. Why do we want this? Well, for instance when somebody accidently deletes the `dagster` namespace for instance. Or hell breaks loose in any other physical or non-physical form. Or when we simply want to bump the Dagster version, actually.\n\nThe key to this is that we version both the `dagster-user-deployments-values-yaml` and `dagster-workspace-yaml` as a final step to the flow described above (we do it on S3, in a versioned bucket). Whenever we redeploy Dagster (with Ansible) we pull the latest versions and use them to compile both the values-yaml files from it. \n\n#### How to clean up old repositories\n\nThe above described automation _adds_ new repos but doesn't take care of old obsolete repos. The steps for removing a repo are the same for adding one. The exact implementation depends on your situation. You might want to automatically remove PR staging environments after closing a PR, for instance.\n\n### Conclusion\n\nDagster is an incredibly powerful tool that enabled us to build complex data pipelines with ease. This posts explains how we **streamlined the CI/CD pipeline for user code respositories**, which enabled us to migrate to Dagster very quickly and saves us lots of time on a daily basis.\n","meta":{"title":"The Why and How of Dagster User Code Deployment Automation","description":"If you frequently deploy new user code repositories in Dagster, you want to automate this process. However, this is not so straightforward as it may seem at first. This post explains what we did at Vandebron.","createdAt":"Fri Jul 08 2022 02:00:00 GMT+0200 (Central European Summer Time)","coverImage":"images/dagster-cicd.png","tags":"dagster, cicd, ci-cd, orchestration, data pipeline, kubernetes, migration, helm, ansible","author":"Pieter Custers","slug":"blog/cicd-dagster-user-code","formattedDate":"8 juli 2022","date":"Fri Jul 08 2022 02:00:00 GMT+0200 (Central European Summer Time)"}},{"content":"\n**A while back, our former technology manager Roy Derks covered the subject of component libraries here on the blog. From a technical perspective, he spoke about when you need one (and when you don’t need one) and what to consider when building one. Since then, obviously a lot has happened at Vandebron. But one of the more interesting things to happen is that design became an integrated part of the digital department, as opposed to previously being attached to marketing. In this new setup, one of the first major projects the design team was involved in was the alignment of our component libraries. And no that’s not a typo, that’s libraries as in the plural form of library. Confusing? I thought so too. In this blog I’ll try to explain further why that was the case, how the work actually helped us bridge the gap between design and development, and dissect the work of unifying those component libraries into one single source of truth and ultimately what’s to become our design system.**\n\n### A bit of a mess\nBefore we get into it, some background as to where we started out might be useful. As previously mentioned, the design team had just become a part of the digital department and one of the first tasks at hand was the creation of a design system. In the design team, we had previously worked with a certain set of brand guidelines, a style guide if you will, which had not necessarily been translated or aligned to the requirements of a digital product or development environment. Development had also created a set of stylesheets and libraries with reusable components which they used to reduce development time. Having it all separately might sound a bit counter-intuitive, but not very surprising if you consider designers and developers not being in the same department, working on a different timeline, different priorities and so forth. However, this only highlighted the importance of designers and developers working together and the need for a proper design system to help prevent creating a fence between the teams causing unnecessary and ineffective work on both sides. The result of this previous “unsynciness”, a rebrand in 2017, and a re-aligned techstack, was the existence of 3 different libraries and subsequently 3 different sources of truth within the development environment. To add to this, we also had separate design guidelines geared more towards brand/marketing purposes in the design team. Now came the rather massive task of unifying these and eventually, rather than having just a library, _having a system_. \n\n### Component library ≠ design system\nNow, there’s a lot of terminology here that might be difficult to grasp if you’re new to the subject. So I thought I’d clarify what we mean when referring to these, how they fit into the context of our situation, and how many of them we had!\n\n- #### Brand guidelines / style guide (design)\n A set of guidelines and examples outlining all the visual elements of a brand such as logos, color, typography, imagery etc. and subsequently in what - - manner they should be applied. It can also be expanded to include more things brand related such as tone of voice, brand values and so forth. Often with brand guidelines, they are created from a marketing perspective and the digital experience(or product) aspect of how the brand should be applied/represented is usually thought about in the second hand, or not included at all. \n\n _Amount: 1_\n \n- #### Design kit/library (design)\n A designer resource file with all the available building blocks that make up the digital design language of a brand and/or the user interface of a product. This is usually only visual(no code) and lives in the design software of the designer's choosing. For us this used to be Sketch, but we recently moved to Figma. Can also include documentation and examples of how the different building blocks should be applied and utilized. \n\n _Amount: 1_\n \n- #### Style sheet (front-end)\n A set of styling properties to be applied when rendering a web page, usually in the format of CSS. This can include things related to the brand guidelines such as font size, colors, etc. but also things related to web layout such as the margins and paddings of different web elements.\n\n _Amount: 1_\n\n- #### Component library (front-end)\n A set of dynamic web components that can be used in a development environment in order to quickly build user interfaces. This helps to ensure consistency, to avoid rebuilding the same component more than once and to avoid changing said component in more places than one, and subsequently help reduce development time. \n\n _Amount: 3_\n \nAll of the above mentioned things, together with rigorous documentation, amount to what’s called a design system. Having it all combined in a structured way is key to getting the most out of such a system. In our case, most of these things were separate and not necessarily connected to each other. But what stands out most of the things above is probably the fact that we, over time, had amounted to 3 different component libraries. I mentioned earlier how that scenario had transpired so I won’t go into too much detail as to how that happened, but if you’re a developer in a small to medium-sized company and I mention “rebrand” and “new techstack” you can probably figure out how. However complex, this also proved to be an excellent opportunity for our developers and for us in the design team. We finally get to unify our component libraries into one, while simultaneously aligning it with our design kit and expanding the guidelines with new and updated documentation. Thus ensuring that designers and developers speak the same language and share the same single source of truth.\n\n### A guild forms\nTo kickstart this process we formed a project group(or ‘guild’) composed of 2 designers and 2 developers, each designer and developer from the two consumer-facing scrum teams. The idea was to let the developers work on the migration and unification of the component libraries in collaboration with us designers in the same project, making it easier to align and to create co-ownership of the product. Our first step was to decide on the structure of our component library, this way the developers could slot all the existing, reworked and new components into the right place in the new library. Easy enough right? Well, here comes our first challenge. We initially wanted to take an atomic approach and build our components from the well known and widely used atomic design principles. We also needed to consider the 3 different “product groups” which the library should apply to, all still utilizing the same style properties. \n\nVandebron has a wide range of products serving different platforms, with the visual language remaining the same but where the user interface might differ. This requires the top elements of the system(such as colors and typography) to be shared across all products, whereas the lower you get the more product-specific an element becomes. This is the reason why we wanted to structure the system according to the principles of Atomic Design first, in order to assign the components to a hierarchical structure.\n\n![Atomic Design](/images/AtomicDesign.jpg \"Atomic Design\")\n\nWith this approach the atoms would work like design tokens and the molecules would be components general enough that they’d be shared across all product groups, this CORE part of the library would essentially be the stylesheet that impacts all visual aspects of the digital brand experience. Only on organism-level do we start to differentiate what product group the component belongs to. So a change to the CORE parts of the library(atoms or molecules) would impact all components in all product groups.\n\nHowever, this approach actually made less sense from a development perspective. Not that it wouldn’t work or that the categorization didn’t make sense, but it would require us rewriting all the already existing components. Components that are actively in use. We deemed this approach a bit too high-risk and high-effort for the time being and started looking into alternatives, while still keeping the atomic structure as a more long-term goal. Another thing our initial idea didn’t take into account was the experience of the future main user of the library, **_the developer!_** Organizing a design system after the brand properties and product groups makes a lot of sense from a designers or a marketeers perspective, and it should probably still be presented outwards that way, but a component library is something else(remember?). So based on our development environment and the way we build our websites and apps our developers suggested a different structure:\n\n![Iteration](/images/Iteration.jpg \"Iteration\")\n\nIn this structure, similar to the previous one, the components are instead categorized and sorted by how they should be applied to the page or application that’s being built. Styles, layouts and inputs are general enough to be applied to all product groups whereas from the surface level the components start becoming more specific in their use case. That way, the components can be separated into specific or even several product groups. In this format the components themselves are not as intertwined as in the atomic structure, albeit still connected by the style element. So while it’s a bit more resistant to overall changes the main idea of having the same style properties applying to everything still works, and it helps us designers to better relate and contextualize what we’re designing from more of a development perspective, thus helping bridge the gap between development and design even further. The main insight we drew from this experience is to not let industry standards and certain trends dictate what you should do. Sure they’re important to keep an eye on, but do it with carefulness and always apply an asterisk to it. Figure out what works best for your specific situation and what’s realistic in the short-term vs. in the long-term. There’s no one-size-fits-all.\n\n### Speaking the same language\nWith the component library migration now underway, we started looking into ways to improve our system from the designers' side of things. As previously mentioned, we had just gone from using Sketch to using Figma and with that came a good opportunity to rebuild, adjust and expand our design kit also. We did that by removing, adding, simplifying and renaming a lot of what was in there since before and with the design kit now adjusted to match the component library we were now also speaking the same language. We can actually now compare this side-by-side with the tools we’re using. In Storybook we have attached the Figma design of every component, simply by activating the feature and pasting the link to its page or artboard in the Figma file. This will refresh in almost real-time if any changes are made so we can easily spot any differences and inconsistencies between what’s live and how the design looks. In Figma, we try to document all our components and give some context as to how it works and should be applied. This is now also directly visible to the developer in the context of the component library. Expanding on our documentation and exposing our digital design guidelines like that has been a great way to create a shared understanding of our designs. Rather than just an image being tossed over a fence, there is now quite literally a direct connection between design and development and therefore also more of a shared ownership.\n\n![Storybook & Figma](/images/StorybookFigma.jpg \"Storybook & Figma\")\n\n### Further defining the process\nAs all the alignment on the design side and the migration neared completion, we started seeing a lot of things that could be improved upon or even added to our component library. When we started logging these things down on our project backlog we quickly realized that the scope of our project had quickly been growing into something beyond what was initially intended, and that rather than giving us focus this guild format was instead at risk of creating an isolated bubble of knowledge surrounding the design system. This prompted us to gauge the opportunity and capacity among our development teams to instead tackle these tasks together, either alongside or within their respective day-to-day tasks. In order to do so we needed the buy-in from key stakeholders such as the product owners from the respective development teams. It’s obviously a big ask to get 1 developer from each team to work on improving a component library, especially when they’ve already given us a quarter on migration and have other important business and/or user needs to tend to. So instead, we looked into how we can embed the improvement and further development of our design system into the developers current processes and primary day-to-day work. We structure this by linking our component library improvement/addition tickets to relevant tickets in their respective sprints. In defining the workflow like this, our 2 designer 2 developer guild in effect rendered unnecessary and instead we opened up the co-ownership and contribution to all developers in all customer-facing development teams and in the process of it preventing isolating knowledge too much. In opening up the process like this, another positive side effect we see is the involvement, engagement and subsequent use of our component library going up. With the product designers now also actively a part of the front-end guild meetings, we have an ever bigger forum and bigger opportunity to build a world class component library and design system while also having more hands on deck to work on maintenance and improvements. We still have a long way to go, but all parts are now even more aligned and the future is looking bright!\n\n### What’s next\nIn the newly formed designer+developer guild, the work of defining requirements and improvements on the design system continues. From the design side we’re also looking to constantly improve on the documentation and the presentation of our system. This is something we imagine we’ll keep on doing continuously and iteratively for as long as it’s needed, if not even forever. After all, “design is never done” and a design system can and should be a living thing constantly evolving along with the products and the brand it serves, and in extension even the promise the brand and it’s products. In our case, that’s to aid in **accelerating the energy transition towards 100% renewable energy**. More on how we exactly do that, and how we always aim to design for impact, in the next blog post. Thanks for reading and stay tuned!\n\n\nPetter Andersson, Product Designer at Vandebron\n\n\n\n_If the type of work mentioned in this blog post sounds interesting to you, [take a look at our job openings here](https://werkenbij.vandebron.nl/l/en/)._ \n","meta":{"title":"The difference between a component library and a design system, and how they can help bridge the gap between design and development","description":"A while back we started a rather extensive project of migrating and unifying our component library, these are some of the learnings we made during the project.","createdAt":"Wed Jul 06 2022 02:00:00 GMT+0200 (Central European Summer Time)","coverImage":"images/WindmolenCover.jpg","imageSource":null,"tags":"product, design, design system, component library","author":"Petter Andersson","slug":"blog/the-difference-between-a-component-library-and-a-design-system","formattedDate":"6 juli 2022","date":"Wed Jul 06 2022 02:00:00 GMT+0200 (Central European Summer Time)"}},{"content":"\n# Signing and verfiying SOAP messages with wss4j and Scala\n\nSOAP is not dead. It is an established, XML-based and mature messaging protocol that comes with built-in security mechanisms, integrity checks, content validation and much more. A lot of enterprises and corporations are using it (sadly) still.\nJust recently, Vandebron had to implement a SOAP client to communicate with an external party. \nThis blog post will explain with code examples how we at Vandebron are signing and verifying SOAP messages for our latest SOAP client implementation. \n\nFor this process, we are using Apache's Web Service Security Library [wss4j](https://ws.apache.org/wss4j/) as it is a proven tool in the WSS context and provides, as a Java library, great interoperability with the programming language Scala.\n\n## Signing SOAP messages\n\nHere we will take a look at the necessary steps to sign a SOAP message like this one:\n```xml\n\n \n \n Hello World\n I am just a test\n \n\n```\nTo look after signing like this:\n```xml\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n 7KfPcTwDYWtLj4ZVWmWmVqX4IGwbBAAmUPigCdXdk4U=\n \n \n \n OBnbBWv8S70xDDn5uG++7cTRFa2Uz3D47oxTHuO163Y3/V7H35M1GHXbKaUDOHsgsfx3SdVmVi++ra06cpwJknzqoIQgDV9Qc0ydzfxljCqupPKBnfONDYJtihEE1jtQ0RP7OLzPVNUpgOgHqbLwJu2pRUA05ool+lxIs924OwPVPKyUryoYwWhwY1ttY4P+WY2L3ZqsH3fgoLCyjlvhDEAhsP9PCxsEzPSq3ECC55Nh7nqMoHPj2uNxonuMlPeYbrlMnwyiqEW8s3Sc+WmfiIOgekRE1AdNhpn3ARlO490nObQtXCU/TxeTfbh98TMbQRZWWyT4HuLS3fF6aeyD/Q==\n \n \n \n \n ox4ajWTdigy9oApTYs97CuCV/4k=\n \n \n \n \n \n \n \n Hello World\n I am just a test\n \n\n```\n\nFor implementing the steps of the blog post you will need:\n- a SOAP service you want to send messages to\n- documentation of that SOAP service that describes:\n - signature algorithm\n - canonicalization method\n - digest algorithm\n - key identifier type\n- a private key with which you will sign your messages\n- a certificate that is the counterpart of the private key\n- (optional) a pool of trusted certificates\n\nOur private and public key pair are available in the PKCS#12-format (.p12 file extension). Check out [this](https://www.ssl.com/how-to/create-a-pfx-p12-certificate-file-using-openssl/) to learn more about this format and how to achieve it.\nThe pool of trusted certificates are in the [PKCS#7 format](https://www.ssl.com/guide/pem-der-crt-and-cer-x-509-encodings-and-conversions/) (.p7b file extension).\n\nFirst we have to setup the necessary dependencies:\n\n```scala\n // in your build.sbt or project/Dependencies.scala\n // enabling signing and signature verification for SOAP messages\n lazy val webServiceSecurity = Seq(\n \"org.apache.wss4j\" % \"wss4j\" % \"2.3.1\" pomOnly (),\n \"org.apache.wss4j\" % \"wss4j-ws-security-dom\" % \"2.3.1\",\n \"org.apache.wss4j\" % \"wss4j-ws-security-common\" % \"2.3.1\"\n )\n\n libraryDependencies ++= webServiceSecurity\n```\n\nNext, we continue with a scala representation of our certificate we are using for signing:\n\n```scala\n import org.apache.wss4j.dom.WSConstants\n \n // algorithm configuration\n object SigningCertificate {\n val CanonicalizationMethodURI: String = \"http://www.w3.org/2001/10/xml-exc-c14n#\"\n val DigestAlgorithmURI: String = DigestMethod.SHA256\n val SignatureAlgorithmURI: String = \"http://www.w3.org/2001/04/xmldsig-more#rsa-sha256\"\n val KeyIdentifierType: Int = WSConstants.SKI_KEY_IDENTIFIER\n }\n\n case class SigningCertificate(keyStore: KeyStore, password: String) {\n require(\n keyStore.aliases().asScala.size == 1,\n s\"Certificate of Keystore needs to have one alias but had ${keyStore.aliases().asScala.size}\"\n )\n val alias: String = keyStore.aliases().nextElement()\n\n override def toString: String = s\"SigningCertificate(alias=$alias)\"\n }\n```\nIn the documentation of the SOAP service that you want to call should stand some information regarding the canonicalization method, signature algorithm, digest algorithm, and the key identifier type. Those are algorithms and information that define the signing process and we explain roughly now.\n\nBefore signing a message it has to be canonicalized. \"Canonicalization is a method for generating a physical representation, the canonical form, of an XML document that accounts for syntactic changes permitted by the XML specification\" (from [here](https://www.di-mgt.com.au/xmldsig-c14n.html)). In our case, the Exclusive XML Canonicalization is used.\n\nThe digest algorithm is used to ensure the integrity of the message during the verification of a signature. The algorithm is used to calculate a hash of the signed message. It should be documented in the SOAP service documentation. Here we will use SHA256 as a hashing algorithm.\n\nThe signature algorithm describes how the message will be signed. It can be defined in the SOAP service documentation but in the worst case you can read this algorithm from the certificate itself by using [`keytool`](https://docs.oracle.com/en/java/javase/12/tools/keytool.html):\n```bash\n$ keytool -list -v -keystore signature.p12\nEnter keystore password: ...\n\n[...] # more information about the certificates\n\nSignature algorithm name: SHA256withRSA # thats what we are after!\n\n[...] # more information about the certificates\n```\nAccording to the keytool inspection we will use SHA256withRSA (http://www.w3.org/2001/04/xmldsig-more#rsa-sha256) for signing.\n\nLast but not least, in our signature, a `` element is included. This element contains information about the public key of the sender (us) and is needed for the signature verification once the message is received (read more [here](https://www.xml.com/pub/a/2001/08/08/xmldsig.html)). Since we have our public key provided we don't need to do much here. The `KeyIdentifierType` describes which form of key identifier is used to present the public key information.\n\nHaving all this information about our certificate in place, we build the mechanism to load in our signing certificate. For this, we create the object `KeyStoreBuilder`.\n\n```scala\nimport java.io.{File, FileInputStream}\n\nobject KeyStoreBuilder {\n\n def loadSigningCertificate(signingCertificate: File, password: String): SigningCertificate = {\n val fis = new FileInputStream(signingCertificate)\n val ks: KeyStore = KeyStore.getInstance(\"PKCS12\")\n ks.load(fis, password.toCharArray)\n SigningCertificate(ks, password)\n } \n}\n```\nBear in mind, that you probably **don't** want to version any sensitive information like private keys and passwords hard-coded or in any environment variables, so a safe mechanism for storing/fetching passwords and certificates (like [Vault](https://www.hashicorp.com/products/vault)) should be in place.\n\nWith the signing certificate in place, we can actually start signing a message. The next code example contains quite some Java boilerplate from wss4j that is required to make the signing mechanism work.\n\nTo restrict the usage of Java classes to a small portion of our code we will firstly implement a conversion method `.toElem` inside of the companion object `SigningService`:\n\n```scala\n import java.io.StringWriter\n import javax.xml.transform.{OutputKeys, TransformerFactory}\n import javax.xml.transform.dom.DOMSource\n import javax.xml.transform.stream.StreamResult\n\n import org.w3c.dom.Document\n\n import scala.xml.Elem\n\n object SigningService {\n implicit class RichDocument(document: Document) {\n private val tf = TransformerFactory.newInstance()\n\n def toElem: Elem =\n val transformer = tf.newTransformer()\n transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, \"yes\");\n val stringWriter = new StringWriter()\n transformer.transform(new DOMSource(document), new StreamResult(stringWriter))\n scala.xml.XML.loadString(stringWriter.getBuffer.toString)\n }\n }\n```\nWith that, we can convert any `Document` SOAP message representation back to the `scala.xml` supported `Elem` format.\n\n```scala\nclass SigningService(signingCertificate: SigningCertificate) {\n\n // importing our conversion method\n import SigningService.RichDocument\n\n /**\n * REQUIRED, otherwise it will throw:\n *\n * org.apache.wss4j.common.ext.WSSecurityException:\n * You must initialize the xml-security library correctly before you use it.\n * Call the static method \"org.apache.xml.security.Init.init();\"\n * to do that before you use any functionality from that library\n */\n org.apache.xml.security.Init.init()\n \n private val documentBuilderFactory = DocumentBuilderFactory.newInstance()\n private val crypto: Merlin = getCrypto\n\n crypto.setKeyStore(signingCertificate.keyStore)\n\n def signElement(elem: Elem): Elem = {\n documentBuilderFactory.setNamespaceAware(true)\n // converting Elem to Document (Scala to Java conversion)\n val doc = documentBuilderFactory.newDocumentBuilder().parse(new InputSource(new StringReader(elem.toString())))\n\n // WSSecHeader wraps around the document we want to sign\n val header = new WSSecHeader(doc)\n header.setMustUnderstand(true)\n header.insertSecurityHeader()\n\n // start building Signature, use the (wrapper) header-instance\n val builder = new WSSecSignature(header)\n builder.setUserInfo(signingCertificate.alias, signingCertificate.password)\n\n // setting algorithms\n builder.setSignatureAlgorithm(SigningCertificate.SignatureAlgorithmURI)\n builder.setSigCanonicalization(SigningCertificate.CanonicalizationMethodURI)\n builder.setDigestAlgo(SigningCertificate.DigestAlgorithmURI)\n builder.setKeyIdentifierType(SigningCertificate.KeyIdentifierType)\n builder.setAddInclusivePrefixes(true)\n\n // signing the document!\n val signedDocument = builder.build(crypto)\n // conversion back to Elem\n signedDocument.toElem\n }\n\n private def getCrypto: Merlin = {\n val properties = new Properties()\n properties.setProperty(\"org.apache.wss4j.crypto.provider\", \"class org.apache.ws.security.components.crypto.Merlin\")\n CryptoFactory.getInstance().asInstanceOf[Merlin]\n }\n}\n```\n\nWss4j is a library that maintains an internal state during a signing process, but to avoid confusion it can be summarized as:\n1. `WSSecHeader` wraps around the document to be signed\n2. the WSSecHeader instance `header` will be used as part of the `WSSecSignature`-Builder\n3. the WSSecSignature instance `builder` gets configured with all necessary information, which algorithms are used for signing, digesting, canonicalization, which key identifier should be included. Those settings an vary from webservice to webservice.\n\nThe actual signing of the document, which is now nested like a matryoshka doll, is happening with the help of an instance of `Crypto`. `Crypto` will contain either a keystore or a truststore or even both. It needs to be specified in the `crypto.properties` file or a runtime which class of Crypto will be used.\n The most common one is [`Merlin`](https://ws.apache.org/wss4j/apidocs/org/apache/wss4j/common/crypto/Merlin.html).\nWe have decided to specify its configuration during runtime, since it is more visible than a properties file. Nevertheless, the `crypto.properties`-file needs to exist in your `resources` folder neverthless otherwise you will get a following `WSSecurityException`:\n```java\n org.apache.wss4j.common.ext.WSSecurityException: No message with ID \"resourceNotFound\" found in resource bundle \"org/apache/xml/security/resource/xmlsecurity\"\n [... rest of stacktrace ...]\n Cause: java.nio.file.NoSuchFileException: crypto.properties\n```\n\nAnd that's it! The `KeyStoreBuilder` helps us to load a `SigningCertificate` and the `SigningService` uses this loaded certificate to sign SOAP messages. \nA receiver of our SOAP message has all the necessary information in our signature to verify that this message has not been tampered with and we are the original sender.\n\nThis verification is something we should also do on our side for incoming messages. So let's take a look at how we can verify the signature of received messages.\n\n## Verification of SOAP messages\n\nVerifying the signature of incoming messages is equally important to ensure that the connection is secure. A verification process will tell you if the message is coming from a trusted source and has not been tampered with.\n\nAs previously mentioned we need our source of truth, a pool of trusted public keys from all parties which will receive our SOAP messages. These build the basis of the trust store.\n\nWe will create a `TrustedCertificates` wrapper class in which we will load in the trust store and add this method to the `KeyStoreBuilder`.\n```scala\ncase class TrustedCertificates(keyStore: KeyStore)\n\nobject KeyStoreBuilder {\n\n def loadTrustedCertificate(certificates: Seq[File]): TrustedCertificates = {\n val ks = KeyStore.getInstance(KeyStore.getDefaultType)\n // we just want the keystore to act as a truststore (only containing trusted certificates), so we initialize it empty\n ks.load(null, null)\n val cf = CertificateFactory.getInstance(\"X.509\")\n certificates.foreach { file =>\n CloseableUtil.using(getClass.getResourceAsStream(file.getPath)) { fis =>\n val certPath = cf.generateCertPath(fis, \"PKCS7\")\n certPath.getCertificates.asScala.toList.foreach { certificate =>\n ks.setCertificateEntry(file.getName, certificate)\n }\n }\n }\n TrustedCertificates(ks)\n }\n}\n```\nThis trust store is under the hood also just a KeyStore, without containing a private key that requires a password, that's why we can initialize the KeyStore with `null`-parameters.\n\nNow, the SigningService needs to be extended with this trusted certificates and a `verifySignatureOf`-method:\n\n```scala\nimport java.io.StringReader\nimport java.util.Properties\nimport javax.xml.parsers.DocumentBuilderFactory\n\nimport org.apache.wss4j.common.crypto.{ CryptoFactory, Merlin }\nimport org.apache.wss4j.dom.engine.WSSecurityEngine\nimport org.xml.sax.InputSource\n\nimport scala.util.{Failure, Success, Try}\nimport scala.xml.Elem\n\nclass SigningService(signingCertificate: SigningCertificate, trustedCertificates: TrustedCertificates) {\n\n private val engine = new WSSecurityEngine()\n private val documentBuilderFactory = DocumentBuilderFactory.newInstance()\n private val crypto: Merlin = getCrypto\n\n crypto.setKeyStore(signingCertificate.keyStore)\n crypto.setTrustStore(trustedCertificates.keyStore)\n\n def verifySignatureOf(elem: Elem): Boolean = {\n documentBuilderFactory.setNamespaceAware(true)\n val doc = documentBuilderFactory.newDocumentBuilder().parse(new InputSource(new StringReader(elem.toString())))\n\n Try(engine.processSecurityHeader(doc, null, null, crypto)) match {\n case Success(_) => true\n case Failure(exception) =>\n // replace with proper logging\n println(\n s\"Unsuccessful signature verification, it is most likely that the certificate used for signing is not in our Truststore: ${exception.getMessage}\")\n false\n }\n }\n\n private def getCrypto: Merlin = {\n val properties = new Properties()\n properties.setProperty(\"org.apache.wss4j.crypto.provider\", \"class org.apache.ws.security.components.crypto.Merlin\")\n CryptoFactory.getInstance().asInstanceOf[Merlin]\n }\n}\n```\n\nAnd with that, we have completed our roundtrip of signing and verifying SOAP messages!\n\nHere are gists, articles, and documentation that inspired and helped us to figure out the signing and verification process for our SOAP client. Feel free to check them out!\n\n* * *\n\n### Sources\n\n[WSSecurityVerifier by Luis Wolff](https://gist.github.com/luiswolff/1d388ec8c1d63cfb58974a6f826bc1be) \n\n[WSSecuritySigner by Luis Wolff](https://gist.github.com/luiswolff/64d15a99fbb5ec4b4e90eec04b09e053)\n\n[Unit Tests from ws-wss4j](https://github.com/apache/ws-wss4j/blob/master/ws-security-dom/src/test/java/org/apache/wss4j/dom/message/SignatureTest.java)\n\n[An Introduction to XML Digital Signatures](https://www.xml.com/pub/a/2001/08/08/xmldsig.html)\n\n[SOAP vs. REST](https://stackify.com/soap-vs-rest/)","meta":{"title":"Signing and verifying SOAP messages with wss4j and Scala","description":"This blogpost will explain with code examples how we at Vandebron are signing and verifying SOAP messages for our latest SOAP client implementation.","createdAt":"Mon Jun 28 2021 02:00:00 GMT+0200 (Central European Summer Time)","coverImage":"images/soap.jpg","imageSource":"https://cdn.pixabay.com/photo/2020/03/15/18/36/wash-4934590_960_720.jpg","tags":"SOAP, xml, scala, wss4j, signature, verification","author":"Katrin Grunert","slug":"blog/how-to-sign-soap-messages","formattedDate":"28 juni 2021","date":"Mon Jun 28 2021 02:00:00 GMT+0200 (Central European Summer Time)"}},{"content":"\nAt the end of March, we organized a public hackathon to create solutions to tackle climate challenges. After having done internal hackathons, we thought it was time to share our technologies with other innovative people and companies. Together with a group of partners, and enthusiastic participants, spend three full days of (remote) hacking with great results.\n\n### Why organize a public hackathon?\n\nClimate change is one of the many pressing challenges our society is currently facing. At [Vandebron](https://vandebron.nl/), we want to continue finding ways to tackle this immense challenge. That’s why we decided to organize a 3-day GreenTech hackathon that ran from March 31st to April 2nd, 2021. We've been organizing internal hackathons for the past four years, to foster innovation within our company and allow our developers to work on something exciting without any constraints. If you want to read more about why we organize internal hackathons, you can find an article by our CTO [here](https://www.vandebron.tech/blog/power-regular-hackathons). \n\nBy organizing a public hackathon, we hoped to attract a bigger audience, possibly even outside our country, The Netherlands, and attract partners to work together with. We succeeded in both, and together with [Hack the Planet](https://hack-the-planet.io/) and [Top Dutch Solar Racing](https://solarracing.nl/), we wanted to find technological solutions to problems in wildlife conservation and renewable energy. For these three days, all participants got the opportunity to work on challenges from our partners, access their technology and knowledge, and got the chance to win unique prizes. Also, we organized a free event with speakers Florian Dirkse ([The Ocean Cleanup](https://theoceancleanup.com/)), Thijs Suijten (Hack the Planet) and Heleen Klinkert ([Nieuw Groen](https://nieuw-groen.nl/)). \n\n### Looking back\n\nThe event started on March 31st, when all hackathon challenges were presented and the participants could select which challenge they wanted to work on. People from all over The Netherlands (and even beyond) signed up for the hackathon, ranging from students from the University of Amsterdam to young professionals looking for a job. The first challenge the participants could subscribe to was from Vandebron itself, where teams got the opportunity to use a selection of our Electronic Vehicle (EV) data. With this data, they could for example make a forecast on the amount of charging sessions we could expect on a typical day. Second, our partner Hack the Planet presented their challenge that was aimed at thinking of innovative solutions for their project [Hack the Poacher](https://www.hackthepoacher.com/). With Hack the Poacher, they install smart camera traps in African wildlife reservations to detect poachers. The teams could use their camera traps and data to create more solutions to map the poachers or use the camera traps for other needs. Finally, the students from Top Dutch Solar Racing presented a challenge to simulate the race they were supposed to join at the end of the year in Australia. Using their weather and traffic data, the teams could simulate the race and predict how much time they would need to complete the race. After selecting a challenge, all teams started the hackathon and participated in sessions to learn more about the challenges to get started.\n\nAll teams continued working on the hackathon challenge on the second day, after a nice warming-up quiz about climate change in the morning. For most teams this second day was when their project started to take shape, and they got a better idea about what they would be presenting on the final day. This second day was also an opportunity for non-technical people to get to know Vandebron and their partners better as we organized inspirational sessions with talks from different speakers in the afternoon. One of the co-founders from The Ocean Cleanup, Florian Dirkse, inspired us with his story behind making a difference in the world. After which, one of our hackathon partners Thijs Suijten, from Hack the Planet, demonstrated how technology can be used for the good. Our third, and final, speaker Heleen Klinkert (Nieuw Groen), showed how we can compensate for our CO2 emissions by storing them in the soil.\n\nOn the final day of the hackathon, all teams had to finalize their projects and create a presentation for the closing ceremony. During this ceremony, all participants and partners looked back at the past three days and shared what they had been working on during the hackathon. For every challenge, one team could win and take home several prizes, sponsored by [Marie-Stella-Maris](https://marie-stella-maris.com/), [EV Experience](https://evexperience.nl/), and [Klimaatroute](https://www.klimaatroute.nl/). The first presentations were for the Vandebron challenge about EV forecasts. This challenge was won by not one but two teams as the jury and audience were so impressed by their solutions. Both teams created not only the forecast based on the sample data provided, but also created interactive dashboards. On the challenge for Hack the Planet, the team that won came up with a unique solution to use the camera traps to detect wild animals on the streets. For countries like India, this is a huge problem, as wild animals get stuck in traffic or walk through rural areas. The final winner of the hackathon was a group of students that simulated the Top Dutch Solar Racing trip through Australia and forecasted they could complete the race within 7 days.\n\n### Thanks everyone\n\nI'd like to thank all the participants, prize/challenge partners, and speakers for their efforts during these days. The GreenTech Hackathon 2021 was a huge success thanks to everyone that has been involved. Keep following the [vandebron.tech](https://vandebron.tech) to be updated on future hackathons and events.\n","meta":{"title":"Looking back at the Vandebron GreenTech Hackathon 2021","description":"At the end of March, we organized a public hackathon to create solutions to tackle climate challenges. After having done internal hackathons, we thought it was time to share our technologies with other innovative people and companies.","createdAt":"Mon Apr 05 2021 02:00:00 GMT+0200 (Central European Summer Time)","coverImage":"images/looking-back-at-vandebron-greentech-hackathon-2021.png","tags":"hackathon, innovation","author":"Roy Derks","slug":"blog/looking-back-at-vandebron-greentech-hackathon-2021","formattedDate":"5 april 2021","date":"Mon Apr 05 2021 02:00:00 GMT+0200 (Central European Summer Time)"}},{"content":"\nAt Vandebron we have been organizing a regular hackathon for the last four years. Every three months we organize a two-day event. At first glance this seems quite an investment. Eight days a year, almost losing two working-weeks of productivity for your teams! \n\nOur company is like any other. Our roadmaps are stuffed, our backlogs are never-ending and pressure for delivering value to our customers is always present. Our ambitions are always higher than what we can handle with the amount of teams and people available. We like to say: ‘the energy transition can’t wait!’, but we sure do have to prioritize our projects very carefully.\n\nHowever this does not stop us from organizing our quarterly hackathons. Most of the time our regular hackathons are light-weight. People within the company know how it works. We try not to waste too much time in ‘organizing’ the event. We get right to it. \n\n#### Reasons why you should be organizing (regular) hackathons:\n- Fun - this reason does not need much explanation. Working on challenging, fun and creative ideas with uncertain outcome in a not-business-as-usual way. It makes you step out of your daily comfort zone and explore new things. \n- Walk the extra mile - Some team-members will have the energy, enthusiasm and commitment to use their spare time to fuel their curiosity and bring new insights to the workplace. These are the same people that you also expect to walk the extra mile if the team- or company objectives are at stake. This is in that same spare time! But in the end, if you value your teams to continuously think about new ideas, insights and work on out-of-the-box ideas, it is not a weird idea to create this environment within the company.\n- Bottled up energy - our people are focused on reaching goals and objectives. Every day, every week and every sprint the focus is clear. This also means that there is not always time for creative or high risk escapades that could hurt the overall team objectives. This might give an unsatisfied feeling to people. If the bottled up energy can not be released, engineers might get frustrated. But maybe even more important, you might be missing opportunities for the company.\n- Cross team collaboration - in an agile way of working the concept of the team is very important. At Vandebron we focus on teams staying together for a long period of time. This makes the relationship between individuals stronger, the knowledge of the product deeper and the team as a whole more effective. However, the company is bigger than your team. There might be different ways of connecting with other people within your company, but a hackathon is an ideal way of linking yourself up with people that you can learn from. It can really bring you new insights as an individual, and it will also be an investment for improved cross-team collaboration going forward.\n- Learning organisation - as mentioned, hackathons give you an excellent opportunity to learn new things. For yourself, but definitely also for the company. In my experience I often see that topics get selected that have high-risk and high-reward kind of characteristics. These topics can be scary to touch, which make you go out of your comfort zone. This is where you learn the most! These high-risk and high-reward projects are also very likely to fail, meaning that the reward is not as high as expected, or the complexity and risks are even greater than anticipated. At these moments the pressure-cooker of a hackathon is very valuable, because it forces the participants to draw conclusions in a short time-frame. The insights gained from these projects can be used to further steer the roadmap. And last but not least, it supports building a culture of being bold enough to try new things, and fail fast. I’ve noticed this is appreciated by a lot of people within the company and the hackathon contributes to a culture of innovation.\n\n#### Our most important learnings over the years\n- Spotlights on - It is good to put teams and their results in the spotlight. Let them take the podium and make sure there is an audience. However don’t make it too much about winning. Ideas that have completely failed are just as important as over-engineered fancy product demos. At Vandebron we like to declare ‘winners’ in different categories: ‘Fun & Original’, ’Impactful’, ‘Exploration & Learning’ and ‘Technical achievement’. \n- Harvest your ideas continuously - during normal work and life you hit those topics that you would like to investigate a bit deeper. But while you stumble upon such a topic you don’t have the time to dive into it. So therefore, write your idea down and publish it in the ‘hackathon-idea-box’ for everyone to see! It might already give you some good conversations during coffee or lunch, and it might already generate you some people that would like to join forces with you during the hackathon. Because rest assured, a new hackathon is always coming up!\n- To-theme-or-not-to-theme - we have experimented with adding a theme to a hackathon. It can help the company to generate ideas and action in a certain area of interest. It also helps to generate more focus within the company on a certain persistent challenge that we feel deserves a solution. Although everyone will be working on different sub-topics the full event will be experienced as more correlated and unified. But be careful not to push normal business-projects disguised as hackathon projects to your teams. This goes against the basic concept of a hackathon. At Vandebron we sometimes pick a theme if we would like to motivate people to think about ideas in a certain direction. But most of the time we keep it open.\n- Participation is optional. - At Vandebron we have autonomous teams with professionals that can manage their own agenda. As a team and as an individual. We put effort in promoting the hackathon by trying to make people enthusiastic about participating. But in the end people make their own decisions. Sometimes the team and company objectives do need to have priority, but the teams are perfectly able to make this judgement call themselves.\n- Magnify impact - show everyone what the impact is they have been making. It is good if people recognize how some projects have become reality and that feedback will be appreciated by the community. It gives people a feeling that the podium of the hackathon is a strong force. And ultimately that is how you also proof the value of organizing a hackathon.\n\nFor our next hackathon we are opening our (virtual) doors also for guests, as we are organizing a GreenTech hackathon with other sustainability minded companies (‘Hack the Planet’ and ‘Top Dutch Solar Racing’). You can find more information and sign up via [this link](https://www.vandebron.tech/greentech-hackathon). It is the first time we do it like this, and we sure will learn another thing or two!\n","meta":{"title":"The power of regular hackathons","description":"At Vandebron we have been organizing a regular hackathon for the last four years. Every three months we organize a two-day event. At first glance this seems quite an investment. Eight days a year, almost losing two working-weeks of productivity for your teams!","createdAt":"Fri Mar 19 2021 01:00:00 GMT+0100 (Central European Standard Time)","coverImage":"images/power-regular-hackathons.png","tags":"hackathon, innovation, scrum","author":"Arno van den Berg","slug":"blog/power-regular-hackathons","formattedDate":"19 maart 2021","date":"Fri Mar 19 2021 01:00:00 GMT+0100 (Central European Standard Time)"}},{"content":"\nIn October 2020 D2IQ [announced](https://d2iq.com/blog/d2iq-takes-the-next-step-forward) that they are moving onwards with their Kubernetes offering. Vandebron has been a D2IQ customer for their DCOS offering, we were just in the middle of a migration of our first workloads to DCOS Enterprise. We have evaluated the D2IQ K8s offering and decided to go for another Kubernetes product. We had a few migrations over the years, we migrated from Azure to AWS, we migrated workloads from normal instances to spot instances and all these migrations were done with nearly any downtime. We plan to reduce the downtime to a couple of minutes this migration and this is a real challenge. The first challenge that we will discuss today: We want to pair our Kubernetes clusters to the DCOS/Mesos clusters, while we move a workload it should be able to connect to its dependencies in the DCOS cluster. We use DCOS for our NoSQL databases like Cassandra, internal data that we want to keep internal. Pairing DCOS and Kubernetes clusters enable us to reduce downtime, enabling us to switch back if we run into issues and move faster because it reduces complexity.\n\n## L4LB\n\nThe internal layer 4 load balancer DCOS provides is used in the majority of our workloads. When our data scientists schedule a spark driver, they connect to the spark dispatcher through the Layer 4 load balancer. Most of the DCOS frameworks use this Layer 4 load balancer as an internal service discovery tool, with Vandebron we use this layer 4 load balancer to communicate between services. In a default DCOS set up this load balancer responds on domain names like: `spark-dispatcher.marathon.l4lb.thisdcos.directory:7077`\n\nWhen we ping the spark dispatcher we get the following:\n\n```bash\nPING spark-dispatcher.marathon.l4lb.thisdcos.directory (11.155.161.35) 56(84) bytes of data.\n64 bytes from 11.155.161.35 (11.155.161.35): icmp_seq=1 ttl=64 time=0.024 ms\n```\n\nAfter some investigation we found out that this IP range is not actually on a network interface, it is a Linux kernel functionality called `IPVS`. With IPVS you can do layer 4 load balancing, you provide the target location and the location you want to respond on.\n\nWhen we search for the IP from the spark dispatcher with ipvsadm, we get 3 results:\n\n```bash\nsudo ipvsadm -L -n |grep --color '11.155.161.35\\|$'\nTCP 11.155.161.35:80 wlc\n -> 10.2.7.146:16827 Masq 1 0 0\nTCP 11.155.161.35:4040 wlc\n -> 10.2.7.146:16826 Masq 1 0 0\nTCP 11.155.161.35:7077 wlc\n -> 10.2.7.146:16825 Masq 1 0 0\n````\n\nAs you can see the IP `11.155.161.35` points towards `10.2.7.146`, even the ports are configured and forwarded. We can add our route with ipvsadm, to understand IPVS a bit better. For example:\n\n```bash\nsudo ipvsadm -A -t 1.2.3.4:80 -s wlc # we add the target server and assign the scheduler\nsudo ipvsadm -a -r 10.2.7.146:16825 -t 1.2.3.4:80 -m # we configure the real server and target server and configure Masquerading\ncurl 1.2.3.4:80\n{\n \"action\" : \"ErrorResponse\",\n \"message\" : \"Missing protocol version. Please submit requests through http://[host]:[port]/v1/submissions/...\",\n \"serverSparkVersion\" : \"2.3.4\"\n}\n```\n\nThis results in that the spark dispatcher now also is available on `1.2.3.4:80`. As mentioned before we wanted to connect our DCOS and Kubernetes clusters, getting hundreds of entries from ipvsadm and manually adding them one by one didn’t sound appealing to us. Especially if you consider that sometimes services fail and run on a different port or different host after recovery, maintaining this by hand would be a nightmare. We therefore decided to build a tool to sync IPVS entries from DCOS to Kubernetes.\n\n## Stack\n\nWithin Vandebron we have our tech stack, we strongly believe it is good to eat your own dog food. When possible and when our use cases are similar we use the same tools as our Developers use. The parts of the stack we will be using are:\n\n- AWS ELB in front of Traefik 1.7\n- DCOS\n- Kubernetes\n\nWithin our platform team, we use Golang as our scripting language. Golang gives us the ability to build binary files with all the required libraries in the binary, we don’t have to install any packages, we do not even need to install Golang on the machine the application will be running on.\n\nIn our DCOS cluster we use Traefik 1.7, this version of Traefik only forwards HTTP requests. We decided to use Traefik to expose a JSON endpoint so we can gather the IPVS information from this location.\n\n## ipvs-server\n\nWithin our DCOS cluster we will expose the IPVS information through a JSON endpoint. We have built a tool for this to expose this information in multiple ways. In the next section, we are going to discuss some of the concepts and choices we made, we won’t deep dive into Go specifics. We have provided the entire code for this project in the examples directory of our GitHub repo:\n\n\nFirst, let’s discuss the library we use: . This library in its essence translates to ipvsadm commands, it helped save us time to implement this ourselves. There are some gotcha’s, such as newlines are not filtered out from the output. We solved this by cleaning up some of the data.\n\nIn the `childChan` function we create a go channel that is responsible for polling `ipvsadm` every 10 seconds and stores the result in a couple of variables we use in our HTTP endpoints. IPVS is a Linux kernel functionality and should be highly performant, we do not want to trigger kernel panics when the server gets overloaded with requests. We expect that every 10 seconds gives us accurate enough results, we can always lower this interval to ensure faster results. We also added in this function the string manipulation to ensure all the newlines were gone in the JSON output. The newline gave issues when we tried to add the IPVS scheduler entries.\n\n```go\nfunc childChan(c chan bool) {\n fmt.Println(\"Starting time based IPVS Admin poll\")\n\n pollInterval := 10\n timerCh := time.Tick(time.Duration(pollInterval) * time.Second)\n // Time based loop to generate Global variable\n for range timerCh {\n select {\n // when shutdown is received we break\n case <-c:\n fmt.Println(\"Received shutdown, stopping timer\")\n break\n default:\n var err error\n listIpvs.Save()\n ipvsString = fmt.Sprintln(listIpvs.Services)\n\n res := &responseObject{\n Services: listIpvs.Services,\n }\n \n ipvsJSONbyte, err := json.Marshal(res)\n if err != nil {\n logToErr.Printf(\"ERROR: -- Marshal JSON -- %v\\n\", err)\n }\n \n ipvsString = string(ipvsJSONbyte)\n ipvsJSON = strings.Replace(ipvsString, `\\n`, ``, -1)\n if debug != false {\n logToOut.Println(\"DEBUG: -- ipvsJSON --\", ipvsJSON)\n }\n }\n }\n}\n```\n\nNext is the index handler, we set our headers correctly and print the result as we would receive through ipvsadm. The index is mainly for our platform engineers to debug and verify the output. Thanks to this overview we found much faster that there was a newline hidden in the scheduler output.\n\n```go\nfunc index() http.Handler {\n // Generating the Index\n return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\n // Only available when debug is on\n if debug != false {\n logToOut.Println(\"DEBUG: -- index --\", ipvsString)\n }\n \n if r.URL.Path != \"/\" {\n http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)\n return\n }\n w.Header().Set(\"Content-Type\", \"text/plain; charset=utf-8\")\n // Site security testers expect this header to be set\n w.Header().Set(\"X-Content-Type-Options\", \"nosniff\")\n w.WriteHeader(http.StatusOK)\n fmt.Fprintln(w, ipvsString)\n })\n}\n```\n\nThe JSON endpoint is what we use in the client communicate with the server. \n\n```go\nfunc jsonz() http.Handler {\n // Generating the Index\n return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\n // Only available when debug is on\n if debug != false {\n logToOut.Println(\"DEBUG: -- jsonz --\", ipvsJSON)\n }\n \n if r.URL.Path != \"/json\" {\n http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)\n return\n }\n w.Header().Set(\"Content-Type\", \"application/json; charset=utf-8\")\n // Site security testers expect this header to be set\n w.Header().Set(\"X-Content-Type-Options\", \"nosniff\")\n w.WriteHeader(http.StatusOK)\n fmt.Fprintln(w, ipvsJSON)\n })\n}\n```\n\nWe ask our Developers often to implement a basic health endpoint, in DCOS we use this to see if a service needs to be restarted. In our application we enable set the statusOK in the index or in the JSON endpoint.\n\n```go\nfunc healthz() http.Handler {\n // Generating the healthz endpoint\n return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n if atomic.LoadInt32(&healthy) == 1 {\n w.WriteHeader(http.StatusNoContent)\n return\n }\n w.WriteHeader(http.StatusServiceUnavailable)\n })\n}\n```\n\nIn our logging and tracing functions we want to register the clients that are connecting, this gives us information where calls are coming from. It helps us debugging if we see weird behaviour.\n\n```go\nfunc tracing(nextRequestID func() string) func(http.Handler) http.Handler {\n // Tracing the http requests so its easier to check if server is reached\n return func(next http.Handler) http.Handler {\n return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n requestID := r.Header.Get(\"X-Request-Id\")\n if requestID == \"\" {\n requestID = nextRequestID()\n }\n ctx := context.WithValue(r.Context(), requestIDKey, requestID)\n w.Header().Set(\"X-Request-Id\", requestID)\n next.ServeHTTP(w, r.WithContext(ctx))\n })\n }\n}\n\nfunc logging(logToOut *log.Logger) func(http.Handler) http.Handler {\n // Creating logging entry tracing the http requests\n return func(next http.Handler) http.Handler {\n return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n defer func() {\n requestID, ok := r.Context().Value(requestIDKey).(string)\n if !ok {\n requestID = \"unknown\"\n }\n logToOut.Println(requestID, r.Method, r.URL.Path, r.RemoteAddr, r.UserAgent())\n }()\n next.ServeHTTP(w, r)\n })\n }\n}\n```\n\nIPVS needs to be executed with root privileges, to ensure this is correct we get the userid and print it when starting the server.\n\n```go\n// getProcessOwner function is to see who is running the process. It needs to be a sudo / root user\nfunc getProcessOwner() string {\n stdout, err := exec.Command(\"ps\", \"-o\", \"user=\", \"-p\", strconv.Itoa(os.Getpid())).Output()\n if err != nil {\n logToErr.Printf(\"ERROR: -- getProcessOwner -- %v\\n\", err)\n os.Exit(1)\n }\n return string(stdout)\n}\n```\n\nWe added the init function to ensure we print results the moment the server starts up, if we would not do this it would take 10 seconds for the go channel to activate\n\n```go\nfunc init() {\n // Placing the Save and val in the init, else we will need to wait for channel to perform its first run\n listIpvs.Save()\n ipvsString = fmt.Sprintln(listIpvs.Services)\n}\n```\n\nIn the main function, we set the configurable flags, such as debugging to show error messages. It proved useful during the creation of this tool to keep track and print output. If we would print the output at every call to our logs, our Elastic cluster would get thousands of logs that add little to no value.\n\nWe configure the listen port in the flags, we can use the portIndex from DCOS to assign a random port on the host to listen on. We also provided to print the version we are running. In our versioning, we use a constant to list the application semver version, we also provide the git-commit hash.\nWhen we begin the server we print the version information, the port we listen on and the user running the process. We then start the server process with the go channel, in setting up the go channel we ensure that when the server stops we try to gracefully stop the server within a 30-second timeframe. Since our ipvsadm timer is 10 seconds it should be able to cleanly shutdown within that period.\n\n### Docker build\n\nIn the repository, we have included a Dockerfile and a script to build the Dockerfile. In this Dockerfile, we pass the git commit hash to the go install. This way we always get the Git Hash from our GitHub repo and we can use this information in our version output.\n\n### DCOS service.json\n\nIn the repository, we have provided the service.json file, since it is opinionated on using Traefik you might need to change it. But in this service.json you see how we set up Traefik, the health check, and port index. Since the Mesos UCR container has fewer abstractions and has fewer limited capabilities. We can run the IPVS server inside a UCR container and get all the output as if we were running this directly as root on the host machine.\n\n## ipvs-client\n\nThe IPVS client is the component we use in the Kubernetes environment. The client connects to the server and gets the IPVS entries from the IPVS server inside our DCOS cluster. It then adds these IPVS entries to each node in the Kubernetes cluster. You, therefore, need to run each client per Kubernetes node.\n\nYou can find the code from the IPVS client in our repository.\n\n```go\nfunc httpGet(remoteURL string) []byte {\n if debug != false {\n _, err := url.ParseRequestURI(remoteURL)\n if err != nil {\n panic(err)\n }\n }\n\n req, err := http.NewRequest(http.MethodGet, remoteURL, nil)\n if err != nil {\n logToErr.Fatalf(\"ERROR: -- new HTTP request -- %v\", err)\n }\n\n ipvsClient := http.Client{\n Timeout: time.Second * 2, // Timeout after 2 seconds\n }\n req.Header.Set(\"User-Agent\", \"go-ipvs-get \\tversion: \"+version+\"\\t Git Commit: \"+gitCommit)\n res, err := ipvsClient.Do(req)\n if err != nil {\n logToErr.Fatalf(\"ERROR: -- ipvsClient -- %v\\n\", err)\n }\n\n if res.Body != nil {\n defer res.Body.Close()\n }\n\n body, readErr := ioutil.ReadAll(res.Body)\n if readErr != nil {\n logToErr.Fatalf(\"ERROR: -- body -- %v\\n\", readErr)\n }\n\n return body\n}\n```\n\nIn the httpGet function we can debug the URL and check if it is valid. Again we set the correct headers and retrieve the JSON body.\n\n```go\nfunc unmarshal(body []byte) []lvs.Service {\n\n res := &responseObject{\n Services: listIpvs.Services,\n }\n\n jsonErr := json.Unmarshal(body, &res)\n if jsonErr != nil {\n logToErr.Fatalf(\"ERROR: -- Unmarshal -- %v \\n\", jsonErr)\n }\n\n if debug != false {\n logToOut.Fatalf(\"DEBUG: -- res -- %v \\n\", res.Services)\n }\n\n r := res.Services\n\n return r\n}\n```\n\nIn the unmarshal function we unmarshal the JSON and turn it in a slice of lvs.Service.\n\n```go\nfunc addServers(remoteAddr string) {\n body := httpGet(remoteAddr)\n jsonData := unmarshal(body)\n\n for i, v := range jsonData {\n if debug != false {\n logToOut.Printf(\"DEBUG: -- range jsonDATA --\\n\")\n logToOut.Printf(\"ipvsCount=%v, value=%v\", i, v)\n }\n\n err := lvs.DefaultIpvs.AddService(v)\n if err != nil {\n logToErr.Printf(\"ERROR: -- AddService -- %v\", err)\n }\n \n i++\n ipvsServerCount = float64(i)\n }\n}\n```\n\nIn the addServers function we add the servers to IPVS.\n\n```go\nfunc clientChan(c chan bool) {\n logToOut.Println(\"Starting time based IPVS Admin add\")\n\n pollInterval := 10\n timerCh := time.Tick(time.Duration(pollInterval) * time.Second)\n // Time based loop to generate Global variable\n for range timerCh {\n select {\n // when shutdown is received we break\n case <-c:\n logToOut.Println(\"Received shutdown, stopping timer\")\n break\n default:\n\n logToOut.Println(\"Clearing & Adding servers...\")\n // Before we add Servers we need to clear the existing list\n lvs.Clear()\n addServers(remoteAddr)\n if debug != false {\n logToOut.Printf(\"IPVS servers added:\\t%v\", ipvsServerCount)\n }\n }\n }\n}\n```\n\nLike we did in the IPVS server we create a go channel to poll every 10 seconds the server endpoint. We perform this to get at a set interval the IPVS entries.\n\nSince we run the IPVS client as a binary directly on the Kubernetes hosts we build the binary with a few parameters we pass to the go build command. The binary we build with this command we host on an internal s3 bucket, we can download this binary with systemd unit files.\n\n```bash\nGOOS=linux\nGOARCH=amd64\nGIT_COMMIT=$(git rev-list -1 HEAD)\n\nexport GOOS\nexport GOARCH\nexport GIT_COMMIT\n\nenv GOOS=${GOOS} GOARCH=${GOARCH} go build -v -ldflags \"-X main.gitCommit=${GIT_COMMIT}\" .\n```\n\nWhen we run the IPVS client we can verify if the IPVS routes are added by running the `ipvsadm -L -n` command.\n\n### Unit files\n\nSince IPVS is part of the Linux kernel it is hard to deploy this in a docker container, the capabilities are more restricted in Kubernetes. We decided to deploy the IPVS client on each host machine through a systemd unit file, the main reason was that we ran into restrictions that slowed us down and this is not a permanent solution. By adding the IPVS client on the machines alone does not make it possible for containers to use the IPVS routes. We needed to add NET_ADMIN capabilities to all containers using the l4lb loadbalancer locations and configure `hostNetworking: true` in the Kubernetes pods.\n\nWe provided a deployment.yml file that runs a Ubuntu docker container with ipvsadm only installed extra. When the pods are deployed in this deployment you can use kubectl exec to get into the pod and run the `ipvsadm -L -n` command.\n\n## Vacancy at Vandebron\n\nWe are looking for a platform engineer in Vandebron. As you can understand this is not a typical scenario we daily run across, but it is part of the workloads that we will support when working on our platform. Within Vandebron we try to use the best technology available, when it is not available we build it. Due to this as platform engineers, we have many interesting challenges and offer engineers to support further than only a strict domain. We support all components of our entire platform, regardless if it is a Linux kernel issue like this, involves setting up and maintaining a NoSQL cluster, or helping the business with something like requesting a certificate.\n\nIf you are interested in learning more about this position, take a look at our Vacancy and get in contact with us.\n\n","meta":{"title":"Migrating from DCOS to Kubernetes, dealing with the l4lb loadbalancer","description":"When you want minimal downtime, you need to build your own tools","createdAt":"Fri Mar 05 2021 01:00:00 GMT+0100 (Central European Standard Time)","coverImage":"images/migrating-dcos-kubernetes-l4lb.jpg","imageSource":"https://pixabay.com/users/praesentator-4372890/","tags":"Kubernetes, k8s, mesos, l4lb, ipvs, ipvsadm","author":"Rogier Dikkes","slug":"blog/migrating-dcos-kubernetes-l4lb","formattedDate":"5 maart 2021","date":"Fri Mar 05 2021 01:00:00 GMT+0100 (Central European Standard Time)"}},{"content":"\nCypress is a game-changer in the automation testing world, the way that Cypress was built and its architecture allows us as testers to cover more scenarios.\n\nCypress is not Selenium; in fact, it is different. And the way to build and design a framework should be different as well.\n\nThe most famous design technique in Selenium is the Page Object Model, and many testers use the same design technique with Cypress. Even that Cypress on their official website [recommended](https://www.cypress.io/blog/2019/01/03/stop-using-page-objects-and-start-using-app-actions/) us not to go with that approach.\n\n## Page Object Model\n\nThe main benefit of using the page object model Is to make the automation framework maintenance-friendly. We can define a specific page's selectors in a separate file and then use these selectors in our test cases.\n\n```js\nclass SignInPage {\n visit() {\n cy.visit(\"/signin\");\n }\n getEmailError() {\n return cy.get(`[data-testid=SignInEmailError]`);\n }\n getPasswordError() {\n return cy.get(`[data-testid=SignInPasswordError]`);\n }\n fillEmail(value) {\n const field = cy.get(`[data-testid=SignInEmailField]`);\n field.clear();\n field.type(value);\n return this;\n }\n fillPassword(value) {\n const field = cy.get(`[data-testid=SignInPasswordField]`);\n field.clear();\n field.type(value);\n return this;\n }\n submit() {\n const button = cy.get(`[data-testid=SignInSubmitButton]`);\n button.click();\n }\n}\nexport default SignInPage;\n```\n\nThe main two downsides using the typical page object model with cypress are:\n\n- Page objects introduce an additional state into the tests, separate from the application’s internal state. This makes understanding the tests and failures harder.\n- Page objects make tests slow because they force the tests to always go through the application user interface.\n\n## Component-Based Architecture\n\nOn the other hand, a React application is component-based, where a specific page will be built from a collection of components. And components in React can be used on different pages too. So if we want to use the Page Object Model, we may define the same locator twice on different pages.\n\nSo having these two facts, At Vandebron, we came up with a new way to design our Cypress Automation framework by creating a separate JavaScript file for every component in our application, inside a folder called `components` within our Cypress project as below:\n\n```js\n// Locators\nexport const getEmailError = () => cy.get(`[data-testid=SignInEmailError]`);\nexport const getPasswordError = () =>\n cy.get(`[data-testid=SignInPasswordError]`);\nexport const emailField = () => cy.get(`[data-testid=SignInEmailField]`);\nexport const passwordField = () => cy.get(`[data-testid=SignInPasswordField]`);\nexport const submitButton = () => cy.get(`[data-testid=SignInSubmitButton]`);\n\n// Actions\nexport const visit = () => cy.visit(\"/signin\");\nexport const performLogin = (email, password) => {\n emailField().clear().type(email);\n passwordField().clear().type(password);\n submitButton().click();\n};\n```\n\nHaving it built this way, we eliminated all the previous problems mentioned earlier; we are not adding any classes, and we are defining objects within our test cases. And the most important part is that we are following the way that Cypress recommends it.\n\nAnd after defining the component locators and actions, we can import them inside our test case and use them as below:\n\n```js\nimport LoginComponent from \"../components/loginComponent\";\nimport Menu from \"../components/Menu\";\n\ndescribe(\"Test Login Page\", () => {\n it(\"should show an error message if the password in wrong\", () => {\n LoginComponent.visit();\n LoginComponent.performLogin(\"email@gmail.com\", \"wrongPassword\");\n LoginComponent.getPasswordError().should(\"be.visible\");\n });\n it(\"should show the logout button if the user logged in succesfully\", () => {\n LoginComponent.visit();\n LoginComponent.performLogin(\"email@gmail.com\", \"correctPassword\");\n Menu.LogoutButton().should(\"be.visible\");\n });\n});\n```\n\nAnd as you can see, our test cases are readable for anyone! And if any locator changes in any of the components, we can easily fix it in one location and from the same file. And lastly, if a component will be used in different places, we can use the same code.\n\nIn the next article, I will talk about how we use Cypress in our manual testing during the sprint and how it saves us tons of time and effort.\n","meta":{"title":"Cypress.io Component Design Technique for React Applications","description":"Cypress is a game-changer in the automation testing world, the way that Cypress was built and its architecture allows us as testers to cover more scenarios.","createdAt":"Fri Feb 05 2021 01:00:00 GMT+0100 (Central European Standard Time)","coverImage":"images/cypress-component-design-technique-for-react-applications.png","tags":"Cypress, Testing, React","author":"Hatem Hatamleh","slug":"blog/cypress-component-design-technique-for-react-applications","formattedDate":"5 februari 2021","date":"Fri Feb 05 2021 01:00:00 GMT+0100 (Central European Standard Time)"}},{"content":"\nIn Vandebron we have been using container clusters to host our services since the foundation of our Big Data team. \nRecently our cluster of choice has declared End-Of-Life development stage, so we decided to take a step forward and get a ticket for the Kubernetes boat.\n\nA change in the OS that is used to run your services and applications can look quite challenging and not everyone is on the same experience level. To make everyone comfortable it is a good choice to give everyone the possibility to play with the new tools and learn what can be done and how: **you need a sandbox.**\n\nOur developers are provided with a Macbook and at the moment of writing there some options you can go for when deciding how to set up your playground:\n\n- **Docker CE Kubernetes**: This is the easiest solution since there is a handy button to run your containers into a Kubernetes environment.\n\n- **Vagrant and Virtualbox**: This solution is the one that can give you more control and you can easily create a cluster the size you want, but you need to be handy with VMs, the hypervisor of choice, and Vagrant. It's the old school way to do it but, while it's a chunk your platform engineers can bite, it can be a steep and frustrating process for people that are not used to handle VMs.\n\n- **Multipass + some bash magic glue**: Since Canonical created this tool for macOS, creating an Ubuntu VM became a breeze and you can have a single, easily manageable VM with its networking up and running in less than a minute, without having to handle disks, distros, and stuff. On top of it, the command line interface is straight forward and it has just the basic commands we will need, so wrapping the entire process into a bash script is a piece of cake.\n\nI have found this super cool in-depth [article](https://jyeee.medium.com/kubernetes-on-your-macos-laptop-with-multipass-k3s-and-rancher-2-4-6e9cbf013f58) from Jason Yee (kudos to you bruh) that guided me through the installation of my first single node Kubernetes cluster.\n\nThe process is not that long but it involves a lot of copy/pasting and, once learned the basics, I didn't want to go under the same process more times, plus it could be interesting for me as a Platform Engineer, but it may be boring and pointless for developers who just want to have a sandbox replica of what they are working on in the remote environment.\nMy automator (aka do-it-once-never-do-it-again) spirit kicked in and I decided to wrap every step in a small command-line tool with only 3 options:\n- **install**\n- **cleanup**\n- **help**\n\n\n### What is happening under the hood\n\nWhat the script does is substantially automating all the steps needed to:\n1. Create a new VM using Multipass (tool released by Canonical)\n2. Fetch the VM IP address and adding it to your local `/etc/hosts` file\n3. Install k3s (a lightweight distribution of Kubernetes) on top of the VM\n4. Install the Kubernetes command-line tools on your laptop\n5. Install Helm (the Kubernetes package manager) on your laptop\n6. Install cert-manager (certificate manager) package on top of your k3s cluster\n7. Install Rancher (a Kubernetes control plane) package on top of your k3s cluster\n\nIf you are looking for a more in-depth breakdown of the single steps you can download and inspect [the script](https://gist.githubusercontent.com/nikotrone/50b1a5f8d137411879eb2467e689bfbe/raw/090b4b4323d96ac28d96bbb346e2e657073722e6/bronernetes) (one of the many advantages of [OpenSource](https://en.wikipedia.org/wiki/Open_source) projects) or checkout and read the original [article](https://jyeee.medium.com/kubernetes-on-your-macos-laptop-with-multipass-k3s-and-rancher-2-4-6e9cbf013f58): it explains line by line what the specific commands are doing.\n\n#### 1. Multipass VM\n[Multipass](https://multipass.run/) is a tool from Canonical (the company developing and maintaining the Ubuntu Linux distribution) that leverages Hyperkit (macOS feature to handle virtualization) to create and handle a Virtual Machine directly on your Mac.\n\n#### 2. Edit /etc/hosts\nOnce we have our VM up and running we need to make it available with an easy url that is also gonna be used to generate the SSL certificate, in our case we picked up `rancher.localdev`.\nIt is important to have a name setup in the beginning since this one will need to match with the certificate so we can use it programmatically.\n\n#### 3. Install K3S\nThis step is pretty straightforward: just fetch a script that is publicly available on the [k3s official website](https://get.k3s.io) and feed it to your bash.\nK3s is a lightweight version of Kubernetes with all the needed dependencies and executable packaged in a convenient installation script. Because of its light nature, it is often used in embedded devices that have a limited amount of resources to offer.\n\n#### 4 & 5. Kubernetes and Helm cli\n**Kubernetes cli** (`kubectl`) is used to talk and interact with your Kubernetes cluster. It can be used to manage multiple clusters according to the content of your KUBECONFIG environment variable. \nThe variable itself contains just a path to where your cluster configuration is stored, so you can switch from a cluster to another by simply pointing to another file that contains the configuration of another cluster.\n\n**Helm** instead is the \"package manager\" of Kubernetes: you can use it to add repositories to specific `charts` which are the blueprint that contains a way to install a specific tool on your cluster.\nBoth of these tools have to be installed and run from your local laptop, either in the case you are managing a local VM or in the case you are interacting with a remote cluster.\n\n#### 6 & 7. cert-manager and Rancher\n\n**Rancher** is the control plane for our cluster: it provides a GUI and an overview of our single node cluster. It offers other goodies like management of multiple clusters, deployed on different locations like AWS Azure and GCP or even on your own hardware, plus certificate deployment and some other handy functionalities.\n\n**cert-manager** is installed via Helm chart and it is the tool used by Rancher to generate and deploy a certificate across the entire cluster.\n\n### How to use it\n\nAll the steps will involve the use of a Terminal window\n#### Installation\nThe first thing you need to do is download [this script](https://gist.github.com/nikotrone/50b1a5f8d137411879eb2467e689bfbe) and save it in a folder on your Mac (let's assume `~/bronernetes`) by executing\n```bash\n mkdir ~/bronernetes\n cd ~/bronernetes\n curl https://gist.githubusercontent.com/nikotrone/50b1a5f8d137411879eb2467e689bfbe/raw/090b4b4323d96ac28d96bbb346e2e657073722e6/bronernetes > bronernetes\n export PATH=$PATH:$(pwd)\n```\n\nNow we have the toolset and you can confirm it works by simply running `bronernetes help`.\n\n#### Spin up Kubernetes\nThe next step is to run the installation process with the command `bronernetes install`\n\n#### Clean up\nWhen you are done or you just want to hard reset your environment you can just type `bronernetes cleanup` and it will take care of cleaning up the VM you just used, leaving you with a pristine machine, as nothing ever happened :)\n\n### Conclusion\n\nHaving a sandbox is very useful to play around with the concepts of a new setup or service and it packs up a huge amount of positive sides. No matter what is the language or the nature of the system you are trying to replicate, it can be challenging and involve a long list of instructions or manual operations and, sometimes, even dedicated hardware. Although with some bash glue, it is possible to automate most of those processes and the investment cost can be enormously beneficial for yourself (less work the next time you do it) and for the other people working with you (they can use the tool, comment and suggest improvements). Most of all, in the case of infrastructure, it helps raise the knowledge of \"what's going on here\" and documents for the ones interested in taking a trip down the rabbit hole.\n","meta":{"title":"How to Spin Up A Kubernetes Cluster On Your Macbook","description":"It is can be useful to create a disposable Kubernetes sandbox to play with when you are exploring a new application and how it could work.","createdAt":"Mon Jan 25 2021 01:00:00 GMT+0100 (Central European Standard Time)","coverImage":"images/spin-up-kubernetes-on-macbook.jpg","imageSource":"https://pixabay.com/it/users/mari_sparrow-13090456/","tags":"Kubernetes, k8s, local","author":"Marco Nicotra","slug":"blog/spin-up-kubernetes-on-macbook","formattedDate":"25 januari 2021","date":"Mon Jan 25 2021 01:00:00 GMT+0100 (Central European Standard Time)"}},{"content":"\nAt Vandebron we're maintaining a component library called [Windmolen](https://windmolen.netlify.app/) (Dutch for \"wind turbine\"). And if you've ever built a component library, you probably dealt with optimizing and converting icons before. With SVGO and SVGR you can do this at scale, without compromising the quality or size of your icons.\n\n## The problem\n\nThe web is full of icons, and often these icons are rendered from SVG files to ensure you can increase (or decrease) the size of the icons depending on the use case. Designers often create these icons from design tools like Adobe Photoshop or Sketch. Although these icons might look pretty, exporting a SVG out of these tools is often difficult as [this article](https://medium.com/sketch-app-sources/the-best-way-to-export-an-svg-from-sketch-dd8c66bb6ef2) explains. Also, added lot of code in the form of metadata is added to the SVG file. Let's have a look at what a typical SVG file exported out of Sketch looks like:\n\n```svg\n\n\n\n \n last\n Created with Sketch.\n \n \n \n \n \n \n\n```\n\nThe SVG file above holds a lot of information about Sketch, such as the `title` of the icon and a `desc`ription. Next to that, there's a lot of elements that could be combined into one element to reduce the file size.\n\n## Optimizing SVGs\n\nWhat's cool about SVG files is that you can optimize and minify them, without affecting what the SVG looks like. This is something you can try out yourself using the website [SVGOMG](https://jakearchibald.github.io/svgomg/), which is powered by the library SVGO that you'll learn more about later.\n\n\nYou can optimize the SVG file above by following these steps:\n\n1. Go to [https://jakearchibald.github.io/svgomg/](https://jakearchibald.github.io/svgomg/)\n2. Click on `Paste markup` an paste the SVG code that you exported from Sketch (a.k.a. the SVG file above)\n3. You will see the icon rendered, now you have to either click at the `Copy as a text` or `Download` button to get the optimized SVG file\n\nWith these simple steps you've optimized the SVG from over 450 bytes, which is already small, to 173 bytes (a decrease of over 62%!). If you'd open this file in the editor of your choice, you can see a lot of the useless (meta)data from the original file has been deleted. Also, the different elements of the SVG are combined in a single `path` that renders the icon:\n\n```svg\n\n\n \n\n```\n\nThis SVG can be even further optimized by checking the \"Prefer viewbox to width/height\" in SVGOMG, but let's save that for later when we use SVGO instead.\n\n## Using SVGO\n\nBy using SVGOMG you've already experienced what power [SVGO](https://github.com/svg/svgo) has, as SVGOMG is described by its creators as *\" SVGO's Missing GUI, aiming to expose the majority if not all the configuration options of SVGO\"*. Instead of using the GUI, you can also use SVGO directly from the command line as a CLI-tool or as a Node.js module. For the sake of this article, we'll be using it solely as CLI.\n\nSVGO can be installed globally on your machine, or locally in your project, from npm by running:\n\n```bash\nnpm i -g svgo\n\n# Yarn equivalent\nyarn add -G svgo\n```\n\nAfter doing this you can run `svgo` from the command line and optimize any SVG file instantly. But, you don't want to do this manually on your machine anytime you're adding a new icon to a project (or component library). Therefore, you can also add SVGO to a project locally and add a script to the `package.json` file to optimize all SVGs in a certain directory.\n\n```json\n// package.json\n{\n // ...\n \"scripts\": {\n // ...\n \"optimize-svg\": \"svgo --config=.svgo.yml -f ./src/assets/icons\"\n }\n}\n```\n\nThe `optimize-svg` script will run SVGO in the directory `src/assets/icons` and optimize all the SVG files based on the settings in `.svgo.yml`. This file is where you can configure the rules for SVGO, as the previously mentioned \"Prefer viewbox to width/height\":\n\n```yaml\n# .svgo.yml\nplugins:\n - removeViewBox: false\n - removeDimensions: true # this deletes width/height and adds it to the viewBox\n - removeDoctype: true\n - removeComments: true\n - removeMetadata: true\n - removeEditorsNSData: true\n - cleanupIDs: true\n - removeRasterImages: true\n - removeUselessDefs: true\n - removeUnknownsAndDefaults: true\n - removeUselessStrokeAndFill: true\n - removeHiddenElems: true\n - removeEmptyText: true\n - removeEmptyAttrs: true\n - removeEmptyContainers: true\n - removeUnusedNS: true\n - removeDesc: true\n - prefixIds: false\n - prefixClassNames: false\n```\n \nFrom the rules above you'll get an idea about all the redundant and useless lines of code that might be present in your SVG files. But luckily, they will all get removed when you run the command `npm run optimize-svg`.\n\n## Converting SVGs with SVGR\n\nYou've now learned how to optimize your SVG files, and are probably wondering how to use these files in a React application. To render an SVG in React, you need to either configure Webpack in a way that it knows how to deal with SVG files or use a library called SVGR. By default, any application created with `create-react-app` can render SVG files as a component, using the following `import` statement:\n\n```jsx\n// MyComponent.jsx\nimport React from 'react';\nimport { ReactComponent as MySVG } from './something.svg';\n\nconst MyComponent = () => {\n return (\n
\n \n
\n );\n}\nexport default MyComponent;\n```\n\nMore information about how this is done can be found in [this article](https://blog.logrocket.com/how-to-use-svgs-in-react/), but let me show you how to solve that with SVGR.\n\nWith [SVGR](https://react-svgr.com/) you can convert SVG files into React Components, either by adding it to Webpack or by using the SVGR CLI or Node.js module. In the same way, as we optimized the SVGs from the command line with SVGO, we can also convert these icons from the command line with SVGR:\n\n```json\n// package.json\n{\n // ...\n \"scripts\": {\n // ...\n \"optimize-svg\": \"svgo --config=.svgo.yml -f ./src/assets/icons\",\n \"convert-svg\": \"svgr -d ./src/components/Icon ./src/assets/icons\"\n }\n}\n```\n\nWhenever you run the command `npm run convert-svg` a JSX file will be created for every SVG file that's present in the directory `src/assets/icons`. These JSX files can be found in the directory `src/components/Icons`, together with an `index.js` file that exports all these components from this directory.\n\nAn example of such a converted SVG file is:\n\n\n```jsx\n// MySVG.jsx\nimport * as React from 'react';\n\nconst MySVG = (props) => (\n \n \n \n);\n\nexport default MySVG;\n```\n\nAnd, as we now have a directory filled with converted SVGs these can be imported into any React component like this:\n\n```jsx\n// MyComponent.jsx\nimport React from 'react';\nimport MySVG from './MySVG.jsx';\n\nconst MyComponent = () => {\n return (\n
\n \n
\n );\n}\nexport default MyComponent;\n```\n\nOften SVGR is used alongside SVGO, so you can even automatically optimize all SVGS that will be converted by SVGR. This is done by adding the flag `--no-svgo true` and point it towards your SVGO configuration file:\n\n```json\n// package.json\n{\n // ...\n \"scripts\": {\n // ...\n \"convert-svg\": \"svgr -d ./src/components/Icon ./src/assets/icons --no-svgo true --svgo-config .svgo.yml\"\n }\n}\n```\n\nBy running the `convert-svg` script you both optimize and convert all the SVG files in `src/assets/icons` to React components based on optimized SVGs.\n\n## Reading further\n\nThe examples in this post are the tip of the metaphorical iceberg on what problems SVGO and SVGR can solve. There are many other features you can enable, such as using them as Node.js modules or enabling TypeScript support. To read further make sure to have a look at the SVGR [playground](https://react-svgr.com/playground/) or [documentation](https://react-svgr.com/docs/getting-started/).\n","meta":{"title":"Optimizing, Converting And Exporting SVG Icons In React","description":"If you've ever build a component library, you probably dealt with optimizing and converting icons before. With SVGO and SVGR you can do this at scale.","createdAt":"Thu Dec 10 2020 01:00:00 GMT+0100 (Central European Standard Time)","coverImage":"images/optimizing-converting-and-exporting-svg-icons-in-react.jpg","tags":"React, component library","author":"Roy Derks","slug":"blog/optimizing-converting-and-exporting-svg-icons-in-react","formattedDate":"10 december 2020","date":"Thu Dec 10 2020 01:00:00 GMT+0100 (Central European Standard Time)"}},{"content":"\nHere at Vandebron, we have several projects which need to compute large amounts of data. To achieve acceptable results, we had to choose a computing tool that should have helped us to build such algorithms.\n\nAs you may have read in other articles our main backend language is Scala so the natural choice to build distributed parallel algorithms was indeed Spark.\n\n## What is Spark\n\nWe will briefly introduce Spark in the next few lines and then we will dive deep into some of its key concepts.\n\nSpark is an ETL distributed tool. ETL are three phases that describe a general procedure for moving data from a source to a destination.\n\n![ETL Diagram](/images/etlprocess.png \"ETL\")\n\n- **_Extract_** is the act of retrieving data from a data source which could be a database or a file system.\n- **_Transform_** is the core part of an algorithm. As you may know, functional programming is all about transformation. Whenever you write a block of code in Scala you go from an initial data structure to a resulting data structure, the same goes with Spark but the data structures you use are specific Spark structures we will describe later.\n- **_Load_** is the final part. Here you need to save (load) the resulting data structure from the transformation phase to a data source. This can either be the same as the extract phase or a different one.\n- **_Distributed_**: Spark is meant to be run in a cluster of nodes. Each node runs its own JVM and every Spark data structure can/should be distributed among all the nodes of the cluster (using serialization) to parallelize the computation.\n\n### Spark data structure: RDD, DataFrame, and Dataset\n\nThe core of Spark is its _distributed resilient dataset (RDD)_.\n\n![Spark API history](/images/sparkapihistory.png \"Spark API history\")\n\nAn **_RDD_** is a collection of elements partitioned across the nodes of the cluster that can be operated on in parallel. _Extracting_ data from a source creates an RDD. Operating on the RDD allows us to _transform_ the data. Writing the RDD _loads_ the data into the end target like a database for example). They are made to be distributed over the cluster to parallelize the computation.\n\nA **_DataFrame_** is an abstraction on top of an RDD. It is the first attempt of Spark (2013) to organize the data inside and RDD with an SQL-like structure. With dataframe, you can actually make a transformation in an SQL fashion. Every element in a dataframe is a Row and you can actually transform a dataframe to another by adding or removing columns.\n\nA **_DataSet_** finally is a further abstraction on top of a dataframe to organize data in an OO fashion (2015). Every element in a dataset is a case class and you can operate transformation in a scala fashion from a case class to another.\n\n## Spark in action\n\nLet’s see now some code samples from our codebase to illustrate in more detail each of the ETL phases.\n\n### Extract\n\nThe extraction phase is the first step in which you gather the data from a datasource.\n\n```scala\nval allConnections = sparkSession\n.read\n.jdbc(connectionString, tableName, props)\n\nval selectedConnections = allConnections\n.select(ColumnNames.head, ColumnNames.tail: _*)\n\nval p4Connections = selectedConnections\n.filter(allConnections(\"HasP4Day activated\").equalTo(1))\n.filter(allConnections(\"HasP4INT activated\").equalTo(1))\n.as[Connection]\n\np4Connections.show()\n```\n\nFor most people the extraction phase is just the first line (the invocation to the read method), they are not wrong because extracting means reading data from a datasource (in this case an SQL server database). I decided to include in this phase also some filtering and projection operations because I think these are not really part of the algorithm, this is still the preparation phase before you actually process the data. We can ultimately say that _preparing the data_ is something in between extraction and transformation therefore it is up to you to decide which phase it belongs to.\n\n### Transform\n\nTransformation phase is the core of the algorithm. Here you actually process your data to reach your final result.\n\n```java scala\nusageDF\n.groupBy('ConnectionId, window('ReadingDate, \"1 day\"))\n.agg(\n sum('Consumption).as(\"Consumption\"),\n sum('OffPeak_consumption).as(\"OffPeak_consumption\"),\n sum('Peak_consumption).as(\"Peak_consumption\"),\n sum('Production).as(\"Production\"),\n sum('OffPeak_production).as(\"OffPeak_production\"),\n sum('Peak_production).as(\"Peak_production\"),\n first('ReadingDate).as(\"ReadingDate\"),\n first('marketsegment).as(\"marketsegment\"),\n collect_set('Source).as(\"Sources\"),\n collect_set('Tag).as(\"Tags\"),\n max('Last_modified).as(\"Last_modified\")\n)\n.withColumn(\n \"Tag\", when(array_contains('Tags, “Interpolated”),\nlit(Tag.Interpolated.toString)).otherwise(lit(“Measured”)))\n.withColumn(\"Source\",\nwhen(size('Sources) > 1,\nlit(Source.Multiple.toString)).otherwise(mkString('Sources)))\n.orderBy('ConnectionId, 'ReadingDate)\n.drop(\"window\", \"sources\", \"tags\")\n```\n\nIn this specific example, we are processing connection usage data by aggregating it daily. In the `usageDF` we have 15 minutes interval usage data, now we want to show to the user the same data but with a different aggregation interval (1 day). So we group the whole data by connection id and window the reading date by 1 day (A window function calculates a return value for every input row of a table based on a group of rows [Introducing Window Functions in Spark SQL - The Databricks Blog](https://databricks.com/blog/2015/07/15/introducing-window-functions-in-spark-sql.html).\n\nOnce the data is grouped we can aggregate it, using the `agg` method which allows us to call the aggregation functions over the dataframe (for example: `sum`, `first`,`max` or `collect_set`). Successively we transform the dataframe to suit our visualization needs, the methods used are self-explanatory and the documentation is very clear. [Getting Started - Spark 3.0.1 Documentation](https://spark.apache.org/docs/latest/sql-getting-started.html)\n\n### Load\n\nThe final phase is the one which `save`, `put`, `show` the transformed data into the target data source.\n\n```java scala\ndataFrame\n.select(columns.head, columns.tail: _*)\n.write\n.cassandraFormat(tableName, keySpace)\n.mode(saveMode)\n.save()\n```\n\nIn this specific case, we will save our dataframe into a Cassandra database. In Spark, methods used to achieve the load phase are called _actions_. It is very important to distinguish Spark actions from the rest because actions are the only ones that trigger Spark to actually perform the whole transformation chain you have defined previously.\n\nIf our transformation phase, as we described above, wasn’t followed by an action (for example `save`) nothing would have happened, the software would have simply terminated without doing anything.\n\n## One concept to rule them all\n\n```java scala\nval rdd1 = sc.parallelize(1 to 10)\nval rdd2 = sc.parallelize(11 to 20)\nval rdd2Count = rdd1.map(\nx => rdd2.values.count() * x //This will NEVER work!!!!\n)\n```\n\n_One does not simply use RDD inside another RDD_. (Same goes for Dataframes or Datasets).\n\nThis is a very simple concept that leads very often to lots of questions because many people just want to use Spark as a normal scala library. But this is not possible due to the inner distributed nature of Spark and its data structures. We have said that an RDD is a resilient distributed dataset, let’s focus on the word _distributed_, it means that the data inside it is spread across the nodes of the cluster. Every node has its own JVM and it is called _Executor_, except for the master node where your program starts which is called _Driver_:\n\n![Spark cluster overview](/images/spark-cluster-overview.png \"Spark cluster overview\")\n\nYour code starts from the Driver and a copy is distributed to all executors, this also means that each executor needs to have the same working environment of the Driver, for Scala it is not a problem since it just needs a JVM to run. (but we will see that if you use _pySpark_ you need to take extra care when you distribute your application.) Every Spark data structure you have defined in your code will also be distributed across the executors and every time you perform a transformation it will be performed to each chunk of data in each executor.\n\nNow let’s go back to our example, a `map` is a transformation on `rdd1` this means that block inside will be executed at the executor level, if we need `rdd2` to perform this block Spark should somehow serialize the whole `rdd2` and send it to each executor. You can understand now that _it is really not possible to serialize the whole RDD since it is by its nature already a distributed data structure_. So what can you do to actually perform such computation we showed in the example? The solution is “simple”: _prepare your data in such a way that it will be contained in one single RDD_. To do so you can take advantage of all the transformation functions Spark has to offer such `map` `join` `union` `reduce` etc.\n\n## Next step…\n\nWe have explained all the main concepts of Spark and we have shown some real snippets of our codebase. In the next article, I would like to show you a real-life problem we have solved in our company using [_pySpark_](https://spark.apache.org/docs/latest/api/python/index.html). I will show you how to customize Spark infrastructure to correctly parallelize the ETL algorithm you have built.\n","meta":{"title":"Fueling the Energy Transition With Spark - Part 1","description":"Our main backend language is Scala, and by using Spark we build distributed parallel algorithms to fuel the Energy Transition. But why is Spark the best choice for that job?","createdAt":"Wed Nov 04 2020 01:00:00 GMT+0100 (Central European Standard Time)","coverImage":"images/fueling-the-energy-transition-with-spark-part-1.jpg","imageSource":"https://www.pexels.com/photo/shallow-focus-photography-of-light-bulbs-2764942","tags":"spark, scala","author":"Rosario Renga","slug":"blog/fueling-the-energy-transition-with-spark-part-1","formattedDate":"4 november 2020","date":"Wed Nov 04 2020 01:00:00 GMT+0100 (Central European Standard Time)"}},{"content":"\nAt Vandebron we organize a two-day long Hackathon every quarter, and a colleague and I took this chance to dig into the wonderful world of GraalVM.\n\nI've first heard of GraalVM around two years ago when Oleg Šelajev toured through Java User Groups in Germany and held talks about GraalVM. [Here](https://www.youtube.com/watch?v=GinNxS3OSi0) is one from 2019 (not Germany, but Spain this time).\n\nGraalVM promises a significant speedup in compile times and as I am working with Scala, which is notoriously known for its long compile times, this seems interesting. Furthermore, GraalVM provides functionality to build native executables. Meaning, an application can be run without a Java Virtual Machine (JVM).\n \nThanks to the Hackathon I finally took the time to get to know GraalVM a bit better. With this blog post, I want to share our findings, experiences, and results, as they might be helpful for you too!\n\n## What is GraalVM?\n\nGraalVM is a high-performance JVM that supports efficient ahead-of-time (AOT) and just-in-time (JIT) compilation, but also allows non-JVM languages (e.g. Ruby, Python, C++) to run on the JVM. The ahead-of-time compilation feature is the base for creating native executable programs, meaning an application can be run independently from the JVM. Seeing the versatile features of GraalVM, it is worth looking a bit under its hood.\n\nActually, GraalVM is defined by three main technologies:\n\n- [Graal compiler](https://www.graalvm.org/reference-manual/jvm/), a high-performance JIT-compiler that can make JVM applications run faster from within the JVM\n- [SubstrateVM](https://www.graalvm.org/reference-manual/native-image/SubstrateVM/), includes the necessary components to run a JVM-app as a native executable ( Garbage Collector, Thread Scheduler, etc.)\n- [Truffle Language Implementation Framework](https://www.graalvm.org/graalvm-as-a-platform/language-implementation-framework/), the basis for the polyglot support from GraalVM\n\nOur motivation for trying out GraalVM was tackling the pain points of Scala, Java projects, and microservices. Shipping microservices written in Scala as Docker containers to your production system comes with the cost that startup can be a bit slow, having JVM and Docker overhead, and that those containers can be fairly large, as the application can only be run with a JVM. See [Building Docker images](#building-docker-images) for more information.\n\nDuring the hackathon, we were most interested in building native images for Scala applications. Hoping to reduce the size of our docker containers and reducing up the startup time.\n\n## Project setup\n\nThe project we worked on during the Hackathon is an API that should be used for applicants to submit their applications at Vandebron in the future. By exposing one endpoint through which a resume and contact information can be submitted.\n\nIt is also a good project to test out GraalVM, nothing too complex but also not as simple as \"Hello World\".\n\nThe full setup can be found [on Github](https://github.com/kgrunert/apply-at-vdb). But I'll summarise the used stack below. The project is built around the following libraries, no particular reason, simply because I like them.\n\n- _cats_ for working with effects, such as IO\n- _http4s_ for running the server\n- _tapir_ for defining the endpoints\n- _circe_ for JSON de/serialisation\n- _pureconfig_ for reading config-files\n- _logback_ for logging\n\nThe project can be run via `sbt run` and with Postman or similar a POST-request can be sent like so:\n\n```json\nPOST localhost:8080/api/v1/apply\n\n{\n\t\"email\": \"my@email.de\",\n\t\"name\": \"My Name\",\n\t\"phoneNumber\": \"+310123456789\",\n\t\"applicationBase64\": \"VGhpcyBjb3VsZCBiZSB5b3VyIGFwcGxpY2F0aW9uIQ==\"\n}\n\nResponse:\n\"*confetti* Thanks for handing in your application, we will get back to you within the next days! *confetti*\"\n```\n\n## Setup GraalVM with sbt\n\nWith this initial project setup in mind, GraalVM needs to be installed locally.\n\nFor the installation of GraalVM the [setup guide](https://www.graalvm.org/docs/getting-started-with-graalvm/#install-graalvm) can be followed.\n\nAfter the installation sbt needs to know that not the regular JDK/JVM is used. This can be done with the `java-home` option on sbt bootup.\nTo make the path to GraalVM a bit more accessible and easy to use it can be exported as an environment variable.\n\n```bash\nexport GRAAL_HOME=/Library/Java/JavaVirtualMachines/graalvm-ce-java8-20.1.0/Contents/Home\nsbt -java-home $GRAALHOME\n```\n\nThe path to GraalVM can vary depending on OS and installation. We followed the basic installation for macOS.\n\nNow sbt using GraalVM can be verified with:\n\n```bash\nsbt -java-home $GRAALHOME\nscala> eval System.getProperty(\"java.home\")\n[info] ans: String = /Library/Java/JavaVirtualMachines/graalvm-ce-java8-20.1.0/Contents/Home/jre\n```\n\nThat means everything running in this sbt instance is getting compiled by GraalVM. Awesome!\n\nThe next step is to become strong and independent and learn how to run without an underlying JVM with the help of building native images.\n\n## Building native images\n\nGraalVM ships with the [GraalVM Updater](https://www.graalvm.org/reference-manual/graalvm-updater/) (`gu`) to install the `native-image` on your machine.\n\n```bash\n$GRAALHOME/bin/gu install native-image\n```\n\n[sbt-native-packager](https://sbt-native-packager.readthedocs.io/en/latest/) provides functionality to build packages efficiently (e.g. building Docker images) and added to that, it also provides support for building native images.\nIn order to build native images with sbt commands this plugin has to be added to the project:\n\n```java scala\n// inside project/plugins.sbt\naddSbtPlugin(\"com.typesafe.sbt\" % \"sbt-native-packager\" % \"1.7.3\")\n```\n\nAnd the `GraalVMNativeImagePlugin` needs to be enabled:\n\n```java scala\n// inside build.sbt\nenablePlugins(GraalVMNativeImagePlugin)\n```\n\nFrom within sbt it should be able to autocomplete and suggest graal-commands, e.g.:\n\n```java scala\nsbt:apply-at-vdb> graalvm\ngraalvm-native-image: graalvmNativeImageOptions\n```\n\nWith that setup, native images are just a stone's throw away!\n\n---\n\n### Disclaimer\n\nThe next three sections are not a write-up but rather the main steps we had to take to make the project work. This includes failing images and troubleshooting.\nI want to keep this in because it might be interesting for others when they have to troubleshoot.\nFor the summary and happy path, you can jump directly to [Roundup](#roundup).\n\n---\n\n### First try building a native image\n\nNext up `graalvm-native-image:packageBin` can be run from within sbt. This might take a while (on our systems it took about a minute)\n\nSome warnings start to pop up:\n\n```\n[error] warning: unknown locality of class Lnl/vandebron/applyatvdb/Main$anon$exportedReader$macro$24$1;, assuming class is not local. To remove the warning report an issue to the library or language author. The issue is caused by Lnl/vandebron/applyatvdb/Main$anon$exportedReader$macro$24$1; which is not following the naming convention.\n\n[error] warning: unknown locality of class Lfs2/internal/Algebra$Done$2$;, assuming class is not local. To remove the warning report an issue to the library or language author. The issue is caused by Lfs2/internal/Algebra$Done$2$; which is not following the naming convention.\n```\n\nThe library-specific warnings can be ignored for now. Ultimately it fails with:\n\n```\nError: com.oracle.graal.pointsto.constraints.UnresolvedElementException:\nDiscovered unresolved type during parsing: org.slf4j.impl.StaticLoggerBinder.\nTo diagnose the issue you can use the --allow-incomplete-classpath option.\nThe missing type is then reported at run time when it is accessed the first time.\n```\nActually a good hint on where to start fine-tuning the GraalVM config:\n\n```java scala\n// inside build.sbt\ngraalVMNativeImageOptions ++= Seq(\n\t\"--allow-incomplete-classpath\",\n)\n```\n\nSome things like a `StaticLoggerBinder` only get resolved at runtime, meaning at build time the classpath needs to be allowed to be incomplete. This option allows resolution errors to be ignored at build time and only pop up during runtime.\n\nDuring the build of a native image, GraalVM tries to resolve those runtime dependencies already at compile-time, as it is part of the Ahead-Of-Time-compilation process. With this flag, GraalVM knows \"hey, don't worry about it now, we cross the bridge when we get there\" (or something like that).\n\n### Adding resource files\n\nA `reload` (or restart) of sbt is needed to activate these new options. And we can try to build the native image up new.\nThis time the build finished successfully and the executable file `target/graalvm-native-image/apply-at-vdb` has been created!\nThis is an executable that can be run without a JVM:\n\n```bash\ntarget/graalvm-native-image/apply-at-vdb\n```\n\nBut what's that? It actually cannot be started...\n\n```bash\ntarget/graalvm-native-image/apply-at-vdb\n\nSLF4J: Failed to load class \"org.slf4j.impl.StaticLoggerBinder\".\nSLF4J: Defaulting to no-operation (NOP) logger implementation\nSLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.\n*** An error occured! ***\nCannot convert configuration to a de.erewl.pricetracker.server.Config. Failures are:\nat the root:\n- Key not found: 'host'.\n- Key not found: 'port'.\n```\n\nThe first three lines relate to the error that occurred during the first build. It simply says that logging hasn't been set up correctly (maybe due to the absence of a `src/main/resources/logback.xml` or some other misconfiguration), triggering the default setting of not logging anything at all.\nThe second error states that a configuration file does not have the right keys or cannot be found at all.\nLooking into `src/main/resources`:\n\n```bash\nls src/main/resources/\napplication.conf logback.xml\n```\n\nand peeking into `application.conf`:\n\n```bash\ncat src/main/resources/application.conf\n\thost = \"localhost\"\n\tport = 8080\n```\n\nHm, so everything is actually in place. But somehow GraalVM can't find those files.\nIt still requires some more GraalVM fine-tuning here.\n\nBy default, GraalVM doesn't include any resource or configuration-files.\nThe option `-H:ResourceConfigurationFiles=path/to/resource-config.json` defines a path to a JSON configuration file. So inside the `resource-config.json` we can include our `application.conf` and our `logback.xml`.\n\nBut writing those config files can be tedious and it is difficult in larger projects to find all necessary classes that need to be included. GraalVM provides some support with writing those files and actually does all the work. In the project's root directory a configs-folder can be created which will contain all necessary config-files.\n\nFor writing the configuration files we will build a normal JAR-file with the help of the `sbt-assembly` plugin. Adding it to the project like so:\n\n```java scala sbt\n // inside project/plugins.sbt\n addSbtPlugin(\"com.eed3si9n\" % \"sbt-assembly\" % \"0.14.6\")\n```\n\nThe JAR-file will be built with `sbt assembly`.\n\nWith that we can now start the application, providing the path to the JAR-file that just has been created:\n\n```bash\nmkdir configs\n$GRAALHOME/bin/java -agentlib:native-image-agent=config-output-dir=./configs -jar target/scala-2.12/apply-at-vdb-assembly-0.1.0-SNAPSHOT.jar\n```\n\nWith the command above the JAR gets to run with GraalVM but adds [dynamic lookups](https://www.graalvm.org/reference-manual/native-image/Configuration/#assisted-configuration-of-native-image-builds) that are being intercepted during runtime and written to the files: `jni-config.json`, `proxy-config.json`, `reflect-config.json` and `resource-config.json`.\n\nThose generated files can be included in the GraalVMNativeImageOptions:\n\n```java scala\n// build.sbt\ngraalVMNativeImageOptions ++= Seq(\n\t\"--allow-incomplete-classpath\",\n\t\"-H:ResourceConfigurationFiles=../../configs/resource-config.json\",\n\t\"-H:ReflectionConfigurationFiles=../../configs/reflect-config.json\",\n\t\"-H:JNIConfigurationFiles=../../configs/jni-config.json\",\n\t\"-H:DynamicProxyConfigurationFiles=../../configs/proxy-config.json\"\n)\n```\n\nThe build with those updated options should succeed and the app can be run once again: \n\n```bash\ntarget/graalvm-native-image/apply-at-vdb\n\nSLF4J: Failed to load class \"org.slf4j.impl.StaticLoggerBinder\".\nSLF4J: Defaulting to no-operation (NOP) logger implementation\nSLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.\n```\n\nStill no logging, sadly. But the server is actually running and responds to POST requests via its exposed endpoint:\n\n```json\nPOST localhost:8080/api/v1/apply\n\n{\n\t\"email\": \"my@email.de\",\n\t\"name\": \"My Name\",\n\t\"phoneNumber\": \"+310123456789\",\n\t\"applicationBase64\": \"VGhpcyBjb3VsZCBiZSB5b3VyIGFwcGxpY2F0aW9uIQ==\"\n}\n\nResponse:\n\"*confetti* Thanks for handing in your application, we will get back to you within the next days! *confetti*\"\n```\n\nThe next and last step will investigate why logging is not picked up by GraalVM.\n\n### Investigating the missing logging\n\nSo first I wanted to have a look if it was an overall issue with logging. I stepped back from using logging-framework and tried the most basic logging with the java-integrated `java.util.Logging`. GraalVM's [docs](https://www.graalvm.org/docs/Native-Image/user/LOGGING) stated that GraalVM supports any logging that depends on that.\n\nBuilding and running the native-image with `java.util.Logging` instead of `logback` succeeded and everything is logged properly.\n\nSo it must be something with the dependencies?\n\nFor further investigation, I added the [sbt-dependency-graph](https://github.com/jrudolph/sbt-dependency-graph) plugin and checked out the dependency-tree with `sbt dependencyBrowserTree`. The library `logback` wasn't included in the dependency tree.\nWhich is odd, since `logback` is clearly present in the project's library-dependencies.\n\n```java scala\n// inside build.sbt\nlibraryDependencies ++= Seq(\n\t...\n\t\"ch.qos.logback\" % \"logback-classic\" % \"1.2.3\" % Runtime,\n\t\"ch.qos.logback\" % \"logback-core\" % \"1.2.3\" % Runtime,\n\t...\n)\n```\n\nHaving a closer look, the appendix `% Runtime` on logback's dependency is present.\n\nNot sure where this was coming from but it is most probably blindly copy-pasted from somewhere when gathering the dependencies for this project.\n\n[sbt reference manual](https://www.scala-sbt.org/1.x/docs/Scopes.html#Scoping+by+the+configuration+axis) states that the appendix `Runtime` defines that this dependency will be only included in the runtime classpath.\n\nSo this explains probably why logging was only working when the server was run from inside sbt.\n\nWith removing this and building the native-image, `logback` appears in the dependency-tree, and logging works when the native image is executed!\n\nThis \"bug\" was interesting as it emphasized what GraalVM can NOT do for you. Dynamic class loading/linking can not be supported by GraalVM as classes and dependencies have to be present during compile time to make a fully functional application. \n\n### Roundup\n\nA successful setup of sbt and GraalVM to build native-images requires to:\n\n- install GraalVM's native-image functionality via it's graal-updater: \n ```bash\n gu install native-image\n ```\n- add sbt-native-packager and sbt-assembly to sbt:\n ```java scala sbt\n // inside project/plugins.sbt\n addSbtPlugin(\"com.typesafe.sbt\" % \"sbt-native-packager\" % \"1.7.3\")\n addSbtPlugin(\"com.eed3si9n\" % \"sbt-assembly\" % \"0.14.6\")\n ```\n- enable the GraalVM-Plugin:\n ```java scala sbt\n // inside build.sbt\n enablePlugins(GraalVMNativeImagePlugin)\n ```\n- create a fat JAR and define which resource and configuration files should be intergated by intercepting look up calls during its execution:\n ```bash\n sbt assembly\n mkdir configs\n $GRAALHOME/bin/java -agentlib:native-image-agent=config-output-dir=./configs -jar target/scala-2.12/apply-at-vdb-assembly-0.1.0-SNAPSHOT.jar\n ```\n- fine-tune GraalVM with the following options and include the files that have been created in the previous step:\n ```java scala\n // build.sbt\n graalVMNativeImageOptions ++= Seq(\n \"--allow-incomplete-classpath\",\n \"-H:ResourceConfigurationFiles=../../configs/resource-config.json\",\n \"-H:ReflectionConfigurationFiles=../../configs/reflect-config.json\",\n \"-H:JNIConfigurationFiles=../../configs/jni-config.json\",\n \"-H:DynamicProxyConfigurationFiles=../../configs/proxy-config.json\"\n )\n ```\n- build the native image with:\n ```bash\n sbt graalvm-native-image:packageBin\n ```\n- run the executable file without the need of java\n ```\n ./target/graalvm-native-image/apply-at-vdb\n ```\n\nEven without benchmarking, you notice that the startup time is way faster than with a traditional JAR-file and the application is up and running almost instantly.\n\nIt is worth noting that the creation of a native image is a quite time-consuming process. For this project, it took between 1 and 2 minutes. This is, of course, something a CI/CD-Server like Jenkins would take care of but it has to be kept in mind. \n\nWith a working native-image, it is time to dockerize.\n\n## Building Docker images\n\nIn this section two Docker containers will be built. One, following the \"normal\"-java way and the other will be using the native-image to build a Docker-container without Java.\n\nBefore getting started with native images, a regular JAR-file and Docker image for comparison can be built.\n\nWith the [sbt-assembly](https://github.com/sbt/sbt-assembly) plugin you can create JAR-files with all of its dependencies (fat JARs).\n`sbt assembly` creates this `target/scala-2.12/apply-at-vdb-assembly-0.1.0-SNAPSHOT.jar` which has a size of around 42MB:\n\n```shell\n sbt assembly \n ls -lh target/scala-2.12/apply-at-vdb-assembly-0.1.0-SNAPSHOT.jar\n\n ... ... 42M target/scala-2.12/apply-at-vdb-assembly-0.1.0-SNAPSHOT.jar\n```\n\nThis application can be run locally via `java -jar target/scala-2.12/apply-at-vdb-assembly-0.1.0-SNAPSHOT.jar` with the prerequisite that Java is installed on that machine.\n\nCreating the Docker image for this JAR-file can be done manually, but luckily `sbt-native-package` supports building regular Docker images out of the box, only the `DockerPlugin` needs to be enabled:\n\n```java scala\n// build.sbt\nenablePlugins(DockerPlugin)\n```\n\n`sbt docker:publishLocal` creates the Docker image `apply-at-vdb`.\n \n```shell\ndocker images | grep apply-at-vdb\n apply-at-vdb \t0.1.0-SNAPSHOT \t\tf488d4c06f28 \t555MB\n```\n\nA whopping 555MB for a tiny app exposing one endpoint which JAR-file was only 42MB. But to run this JAR-file in a container, this container needs to ship with a JVM, and that's where the overhead lies.\n\nWith that Docker image and JAR-file as a reference, we can now look into how the native-image operates together with Docker.\n\nGraalVM does not support cross-building, meaning an application cannot be expected to be built in a MacOS environment and run in a Linux environment. It has to be built and run on the same platform. With the help of Docker, the desired built environment can be provided.\nThe `Dockerfile` looks as follows:\n```docker\nFROM oracle/graalvm-ce AS builder\nWORKDIR /app/vdb\nRUN gu install native-image\nRUN curl https://bintray.com/sbt/rpm/rpm > bintray-sbt-rpm.repo \\\n\t&& mv bintray-sbt-rpm.repo /etc/yum.repos.d/ \\\n\t&& yum install -y sbt\nCOPY . /app/vdb\nWORKDIR /app/vdb\nRUN sbt \"graalvm-native-image:packageBin\"\n\nFROM oraclelinux:7-slim\nCOPY --from=builder /app/vdb/target/graalvm-native-image/apply-at-vdb ./app/\nCMD ./app/apply-at-vdb\n\n```\n\nAnd can be run with:\n```bash\ndocker build -t native-apply-at-vdb .\n```\nThe Dockerfile describes to do the following:\nThe first docker container, as the name implies, is the builder. As a base image the official [GraalVM image](https://hub.docker.com/r/oracle/graalvm-ce) is used. \n\nThis image needs two more things, GraalVM's native-image command, and sbt, and this is what the two follow-up rows are providing. Once that's done, the project is copied into this container and the native image is built from within sbt.\n\nThe next steps bring the native executable into its own docker container.\nAs a base image, we use an Oracle Linux image and from our builder-container, we copy the native executable to this new container. The last step is that the app gets run on container startup.\n\n`docker run -p 8080:8080 -it native-apply-at-vdb` starts the container and shows that everything is working just as before.\n\nBut what about the image size? Let's have a look.\n```\ndocker images | grep apply-at-vdb\n native-apply-at-vdb\t\tlatest 17b559e78645\t\t199MB\n apply-at-vdb\t\t\t0.1.0-SNAPSHOT f488d4c06f28\t\t555MB\n```\nThat is impressive! We created an app that is approx. 2.8 times smaller than our original app.\n\n## Summary\n\nWe learned how to set up a Scala project with GraalVM, what steps have to be taken to build a native image with GraalVM, and let it run inside a Docker container. We also received a good overview of what's possible with GraalVM and what's not.\n\nThe initial start and setup of GraalVM with sbt is pretty easy and straightforward. Getting GraalVM to compile an sbt project is nice and simple. \n\nThis Hackathon showed us that it is difficult and requires a lot of fine-tuning to integrate GraalVM into an existing project or product. At Vandebron we work with a complex stack of technologies including Spark, Kafka, and Akka which made it difficult to port the findings from this small toy service to one of our existing microservices. This made extensive troubleshooting in the Hackathon not possible.\n\nAll in all, GraalVM allows you to give up some Java overhead and create significant smaller Docker images. Sadly, this comes at the cost of giving up dynamic linking and class loading. \nA silver lining is, that inside Scala's ecosystem this rarely a problem. Scala relies heavily on compile-time mechanisms for detecting bugs early and creating type-safe applications (read [here](https://blog.softwaremill.com/small-fast-docker-images-using-graalvms-native-image-99c0bc92e70b) but also see e.g. [Scala's compiler phases](https://typelevel.org/scala/docs/phases.html)).\n\n* * *\n\n## Sources and Reading\n- [Building Serverless Scala Services with GraalVM](https://www.inner-product.com/posts/serverless-scala-services-with-graalvm/) by Noel Welsh\n- [Small & fast Docker images using GraalVM’s native-image](https://blog.softwaremill.com/small-fast-docker-images-using-graalvms-native-image-99c0bc92e70b) by Adam Warski\n- [Run Scala applications with GraalVM and Docker](https://medium.com/rahasak/run-scala-applications-with-graalvm-and-docker-a1e67701e935) by @itseranga\n- [Getting Started with GraalVM and Scala](https://medium.com/graalvm/getting-started-with-graalvm-for-scala-d0a006dec1d1) by Oleg Šelajev\n- [Updates on Class Initialization in GraalVM Native Image Generation](https://medium.com/graalvm/updates-on-class-initialization-in-graalvm-native-image-generation-c61faca461f7) by \nChristian Wimmer\n- [GraalVM's Reference Manuals](https://www.graalvm.org/reference-manual/)\n","meta":{"title":"Building native images and compiling with GraalVM and sbt","description":"At Vandebron we organized a two-day long Hackathon, a colleague and I took the chance to dig into the wonderful world of GraalVM.","createdAt":"Tue Oct 06 2020 02:00:00 GMT+0200 (Central European Summer Time)","coverImage":"images/building-native-images-and-compiling-with-graalvm-and-sbt.jpg","imageSource":"https://pixabay.com/users/lumix2004-3890388/","tags":"graalvm, scala","author":"Katrin Grunert","slug":"blog/building-native-images-and-compiling-with-graalvm-and-sbt","formattedDate":"6 oktober 2020","date":"Tue Oct 06 2020 02:00:00 GMT+0200 (Central European Summer Time)"}},{"content":"\nTwo months ago, I started my journey at Vandebron. One of the projects I first dove into was their efforts to build a [component library](https://windmolen.netlify.app/). Something I was already familiar with from previous companies I worked at. \n\nOn the internet, you can find many articles that describe why a reusable component library is a good investment for your development team(s). Although there's much to say about the advantages of component libraries, most articles don't state the (obvious) disadvantages such projects can have. In this post, I'll point out some of our learnings and why you might not need such a reusable component library.\n\n## About component libraries\n\nOften you find yourself repeating the same lines of code to make, for example, a button or the layout of a page look nice, especially when you're working on multiple projects. Or as a designer, you get frustrated every time the styling for a part of the application is off when a new page or project is created. Many companies have already found multiple solutions to preventing themselves from repeating styling, which is the main reason for design inconsistencies. And therefore component libraries were created.\n\nA component library is a collection of all the styled parts (or components) of a website or multiple websites that make it easier for developers to reuse these parts. Also, designers will know for sure that all components in the component library adhere to their designs, and therefore all projects that use these components will conform. Often these libraries consist of different layers of components, for example, offering atoms, molecules, and organisms when an [Atomic Design](https://bradfrost.com/blog/post/atomic-web-design/) pattern is applied. Following this pattern, developers can use the parts to style their templates and pages consistently.\n\nComponent libraries are becoming more and more popular with the rise of JavaScript libraries and frameworks like React and Vue. These technologies are very suitable for quickly building interactive components that you can use in your application, and can easily be exposed as a library on NPM or Github Packages. At Vandebron, we're building all our web and mobile applications with React and React Native and are using [Storybook](https://storybook.js.org/) to develop our components in a shared library between the engineering and design teams. This can potentially create a lot of advantages for both the developers and designers, as you can read below.\n\n## Why you *might* need a component library\n\nBefore deciding to create a component library for your team or company, you probably want to hear about the advantages such a project can lead to. The main advantages of component libraries are briefly mentioned in the first section above and are often defined as:\n\n- **Reducing code duplication**: With a component library, you can create components that can be shared across multiple websites or applications. This way you no longer have to duplicate styling in different projects. This can seriously decrease the amount of code duplication that you have in your projects, also reducing the number of bugs or design inconsistencies.\n\n- **Preventing design inconsistencies**: By adding all your components and styled parts to the component library you're certain that these will look the same on all the places they're used. Not only will all the components look the same on every page, when designers make a change to one of these components they can be easily updated on all the places they're used.\n\n- **Easier collaborating**: Component libraries make it easier for developers and designers to collaborate on applications and designs, with the component library as the common \"playground\". By using a tool, like Storybook, you can also make this playground visible to non-technical people and show what components are already available to use for new features.\n\nBut these advantages come at a certain price, as I'll explain in the next section.\n\n## Disadvantages of component libraries\n\nBesides the obvious advantages of a component library, it can also have serious disadvantages that are listed below. Whether or not these disadvantages apply to you depends on numerous things that are discussed later on in this article.\n\n- **Increasing complexity**: With all attempts to make code more generic, an increased level of complexity also comes to play. Reusable components should be easy to extend or customize, which requires you to think about the different use cases beforehand or force you to add many different variations to a component. With every new project that starts to use the component library, you get the risk of increasing the complexity of the library even more.\n\n- **Time-consuming**: Every time you want to add a component to your project, you need to create that component in the component library first and import it locally in the project to test it. Therefore you need to be working in multiple projects at the same time, which requires you to set up a more time-consuming workflow. Also, when you want to use this new component from the library, you have to publish a new version of the library to make the component available.\n\n- **Conflicting dependencies**: When you're using different versions of dependencies across your projects and the component library, you're forced to sync those with each other. Imagine having, for example, an older version of React running in one of your projects that doesn't use a recent React API that you want to use in your component library. In this scenario, you either have to update that project or are unable to keep your component library on par with the latest release of your dependency on React. Both solutions have pros and cons, and would rather be avoided.\n\nAs mentioned before, there are reasons why these disadvantages might apply to you that are the team size, the number of teams and projects at the company, development or release lifecycles, and how your source code is organized. It clearly doesn't make sense to invest in a component library if you have just a small amount of people work on just one project, or a sole team is working on all the different projects making it easier to manage code duplication or design inconsistencies.\n\n## Considerations before starting\n\nThere are two main alternatives that you need to take into consideration before building a reusable component library, which is (obviously) using or extending an existing component library or sourcing your code in a monorepo. \n\n- **Existing component libraries:** Using an existing component library is an efficient way to create consistently (web) pages and reduce the amount of complexity of your own project, while also taking advantage of best practices of large open-source projects. Popular examples of component libraries are [Ant Design For React](https://ant.design/docs/react/introduce) or [various implementations](https://material.io/develop) for Google's Material Design. These libraries allow you to move quickly without having all the overhead of creating complex components but limit you to the design guidelines of these component libraries.\n\n- **Monorepo:** If you don't want to take advantage of existing libraries or are very keen to apply your own styling to components across multiple applications without having to copy-paste the code, you can host the source code of applications in a monorepo. With the monorepo approach, you can create a shared folder that includes all the components used by your applications. This makes it possible to apply changes with a simple pull request and import these components from every project in that repository.\n\nBesides these two alternatives, you also need to have proper design guidelines set by your designer(s). When the design guidelines are flexible and fluctuating, you could be structuring components incorrectly with the risk of doing a lot of work that will be omitted once the project evolves.\n\n## To summarize\n\nComponent libraries are a great way to reduce the amount of code duplication in your applications, prevent design inconsistencies, and increase collaborations between developers, designers, and different teams. But this comes with increased complexity, slower development cycles, and possible code conflicts between projects. Therefore you should consider if using an existing component library or having a monorepo for your source code is a workable solution. At Vandebron we decided to build our own component library (called [windmolen](https://windmolen.netlify.app/)) and if you'd decide the same, then be sure that your design guidelines are properly structured and mature enough.\n","meta":{"title":"When (Not) To Build A Reusable Component Library","description":"You can find much information on why a reusable component library is a good investment, but most articles don't state the (obvious) disadvantages..","createdAt":"Mon Oct 05 2020 02:00:00 GMT+0200 (Central European Summer Time)","coverImage":"images/when-not-to-build-a-reusable-component-library.jpg","imageSource":"https://pixabay.com/users/stevepb-282134/","tags":"React, component library","author":"Roy Derks","slug":"blog/when-not-to-build-a-reusable-component-library","formattedDate":"5 oktober 2020","date":"Mon Oct 05 2020 02:00:00 GMT+0200 (Central European Summer Time)"}}]},"__N_SSG":true} \ No newline at end of file diff --git a/_next/data/3bqwlGhZxYXJfWdGp7YNO/blog/authenticate-snowflake-rest-api-using-keycloak.json b/_next/data/OOMgl9sdO92b_IXfcvhV-/blog/authenticate-snowflake-rest-api-using-keycloak.json similarity index 100% rename from _next/data/3bqwlGhZxYXJfWdGp7YNO/blog/authenticate-snowflake-rest-api-using-keycloak.json rename to _next/data/OOMgl9sdO92b_IXfcvhV-/blog/authenticate-snowflake-rest-api-using-keycloak.json diff --git a/_next/data/3bqwlGhZxYXJfWdGp7YNO/blog/back-to-the-monolith.json b/_next/data/OOMgl9sdO92b_IXfcvhV-/blog/back-to-the-monolith.json similarity index 100% rename from _next/data/3bqwlGhZxYXJfWdGp7YNO/blog/back-to-the-monolith.json rename to _next/data/OOMgl9sdO92b_IXfcvhV-/blog/back-to-the-monolith.json diff --git a/_next/data/3bqwlGhZxYXJfWdGp7YNO/blog/balancing-dutch-energy-grid-with-flex-services.json b/_next/data/OOMgl9sdO92b_IXfcvhV-/blog/balancing-dutch-energy-grid-with-flex-services.json similarity index 100% rename from _next/data/3bqwlGhZxYXJfWdGp7YNO/blog/balancing-dutch-energy-grid-with-flex-services.json rename to _next/data/OOMgl9sdO92b_IXfcvhV-/blog/balancing-dutch-energy-grid-with-flex-services.json diff --git a/_next/data/3bqwlGhZxYXJfWdGp7YNO/blog/building-native-images-and-compiling-with-graalvm-and-sbt.json b/_next/data/OOMgl9sdO92b_IXfcvhV-/blog/building-native-images-and-compiling-with-graalvm-and-sbt.json similarity index 100% rename from _next/data/3bqwlGhZxYXJfWdGp7YNO/blog/building-native-images-and-compiling-with-graalvm-and-sbt.json rename to _next/data/OOMgl9sdO92b_IXfcvhV-/blog/building-native-images-and-compiling-with-graalvm-and-sbt.json diff --git a/_next/data/3bqwlGhZxYXJfWdGp7YNO/blog/cassandra-its-not-you-its-us.json b/_next/data/OOMgl9sdO92b_IXfcvhV-/blog/cassandra-its-not-you-its-us.json similarity index 100% rename from _next/data/3bqwlGhZxYXJfWdGp7YNO/blog/cassandra-its-not-you-its-us.json rename to _next/data/OOMgl9sdO92b_IXfcvhV-/blog/cassandra-its-not-you-its-us.json diff --git a/_next/data/3bqwlGhZxYXJfWdGp7YNO/blog/choosing-remix-as-an-ssr-framework.json b/_next/data/OOMgl9sdO92b_IXfcvhV-/blog/choosing-remix-as-an-ssr-framework.json similarity index 100% rename from _next/data/3bqwlGhZxYXJfWdGp7YNO/blog/choosing-remix-as-an-ssr-framework.json rename to _next/data/OOMgl9sdO92b_IXfcvhV-/blog/choosing-remix-as-an-ssr-framework.json diff --git a/_next/data/3bqwlGhZxYXJfWdGp7YNO/blog/cicd-dagster-user-code.json b/_next/data/OOMgl9sdO92b_IXfcvhV-/blog/cicd-dagster-user-code.json similarity index 100% rename from _next/data/3bqwlGhZxYXJfWdGp7YNO/blog/cicd-dagster-user-code.json rename to _next/data/OOMgl9sdO92b_IXfcvhV-/blog/cicd-dagster-user-code.json diff --git a/_next/data/3bqwlGhZxYXJfWdGp7YNO/blog/creating_a_self-service_data_model.json b/_next/data/OOMgl9sdO92b_IXfcvhV-/blog/creating_a_self-service_data_model.json similarity index 100% rename from _next/data/3bqwlGhZxYXJfWdGp7YNO/blog/creating_a_self-service_data_model.json rename to _next/data/OOMgl9sdO92b_IXfcvhV-/blog/creating_a_self-service_data_model.json diff --git a/_next/data/3bqwlGhZxYXJfWdGp7YNO/blog/cypress-component-design-technique-for-react-applications.json b/_next/data/OOMgl9sdO92b_IXfcvhV-/blog/cypress-component-design-technique-for-react-applications.json similarity index 100% rename from _next/data/3bqwlGhZxYXJfWdGp7YNO/blog/cypress-component-design-technique-for-react-applications.json rename to _next/data/OOMgl9sdO92b_IXfcvhV-/blog/cypress-component-design-technique-for-react-applications.json diff --git a/_next/data/3bqwlGhZxYXJfWdGp7YNO/blog/fueling-the-energy-transition-with-spark-part-1.json b/_next/data/OOMgl9sdO92b_IXfcvhV-/blog/fueling-the-energy-transition-with-spark-part-1.json similarity index 100% rename from _next/data/3bqwlGhZxYXJfWdGp7YNO/blog/fueling-the-energy-transition-with-spark-part-1.json rename to _next/data/OOMgl9sdO92b_IXfcvhV-/blog/fueling-the-energy-transition-with-spark-part-1.json diff --git a/_next/data/3bqwlGhZxYXJfWdGp7YNO/blog/how-to-sign-soap-messages.json b/_next/data/OOMgl9sdO92b_IXfcvhV-/blog/how-to-sign-soap-messages.json similarity index 100% rename from _next/data/3bqwlGhZxYXJfWdGp7YNO/blog/how-to-sign-soap-messages.json rename to _next/data/OOMgl9sdO92b_IXfcvhV-/blog/how-to-sign-soap-messages.json diff --git a/_next/data/3bqwlGhZxYXJfWdGp7YNO/blog/looking-back-at-vandebron-greentech-hackathon-2021.json b/_next/data/OOMgl9sdO92b_IXfcvhV-/blog/looking-back-at-vandebron-greentech-hackathon-2021.json similarity index 100% rename from _next/data/3bqwlGhZxYXJfWdGp7YNO/blog/looking-back-at-vandebron-greentech-hackathon-2021.json rename to _next/data/OOMgl9sdO92b_IXfcvhV-/blog/looking-back-at-vandebron-greentech-hackathon-2021.json diff --git a/_next/data/3bqwlGhZxYXJfWdGp7YNO/blog/migrating-dcos-kubernetes-l4lb.json b/_next/data/OOMgl9sdO92b_IXfcvhV-/blog/migrating-dcos-kubernetes-l4lb.json similarity index 100% rename from _next/data/3bqwlGhZxYXJfWdGp7YNO/blog/migrating-dcos-kubernetes-l4lb.json rename to _next/data/OOMgl9sdO92b_IXfcvhV-/blog/migrating-dcos-kubernetes-l4lb.json diff --git a/_next/data/3bqwlGhZxYXJfWdGp7YNO/blog/optimizing-converting-and-exporting-svg-icons-in-react.json b/_next/data/OOMgl9sdO92b_IXfcvhV-/blog/optimizing-converting-and-exporting-svg-icons-in-react.json similarity index 100% rename from _next/data/3bqwlGhZxYXJfWdGp7YNO/blog/optimizing-converting-and-exporting-svg-icons-in-react.json rename to _next/data/OOMgl9sdO92b_IXfcvhV-/blog/optimizing-converting-and-exporting-svg-icons-in-react.json diff --git a/_next/data/3bqwlGhZxYXJfWdGp7YNO/blog/power-regular-hackathons.json b/_next/data/OOMgl9sdO92b_IXfcvhV-/blog/power-regular-hackathons.json similarity index 100% rename from _next/data/3bqwlGhZxYXJfWdGp7YNO/blog/power-regular-hackathons.json rename to _next/data/OOMgl9sdO92b_IXfcvhV-/blog/power-regular-hackathons.json diff --git a/_next/data/3bqwlGhZxYXJfWdGp7YNO/blog/replacing-app-center.json b/_next/data/OOMgl9sdO92b_IXfcvhV-/blog/replacing-app-center.json similarity index 85% rename from _next/data/3bqwlGhZxYXJfWdGp7YNO/blog/replacing-app-center.json rename to _next/data/OOMgl9sdO92b_IXfcvhV-/blog/replacing-app-center.json index 5c4f424cb..86101fd33 100644 --- a/_next/data/3bqwlGhZxYXJfWdGp7YNO/blog/replacing-app-center.json +++ b/_next/data/OOMgl9sdO92b_IXfcvhV-/blog/replacing-app-center.json @@ -1 +1 @@ -{"pageProps":{"post":{"content":"\n## Why GHA?\nThis seems like a lot of work... Why not go with an off-the-shelf solution from something like Bitrise or Codemagic? Fair question but not the main point of this post. To look into our reasoning check out the [Benefits](#benefits) section!\n\n## Some notes before we get started\n- We use this workflow to build two apps, one of which can be white-labeled, so we have additional `app` and `white-label-release` inputs which makes things a bit trickier. You might not need that so feel free to trim stuff down and make it your own! But for us, we why we have the `env-variable-prep-android.sh` which normalizes the variable names used for secrets so those secrets and build file names, etc. can be easily used. If you just have a single app you probably don't need this script.\n- The code below is only for the build process. Though the Architecture Decision Record (ADR) considered how this would affect future decisions about artifact upload automation and rolling out releases for internal testing, nothing about that is automated here.\n- There's a lot of code here. We removed version numbers to make sure we're not giving out too much information. If you see something like `@vx.x.x`, you'll have to fill those in with the versions that are needed for your app/pipeline.\n\n## Implementation\n#### Part 1 - Basic Setup\nAdd the files below. Nothing in this setup should effect App Center but it is good to check in your changes to a branch and test those against the regular App Center build flow. The main point of the steps in this section is to just get a basic action, with inputs, set up and running. Full implementation is further down. The `env-variable-prep-android.sh` and `env-variable-prep-ios.sh` files created variables based off the input parameters passed in so they can be used in a reusable and consistent manner later on. The `env-file-prep.sh` file is responsible for creating a `.env` file with values from whichever environment you're using. Though it's nice to add the `Fastlane` and `Gymfile` files, those won't be used until Step 4 when the rest of the pipeline is fleshed out.\n\n##### Android\n\n `file: .github/workflows/mobile-apps-build-android.yaml`\n\n \n ---\n name: Mobile App Build for Android\n run-name: \"Build: Android, ${{ inputs.app }}, ${{ inputs.environment }}, white-label-release=${{ inputs.white-label-release }}\"\n on:\n workflow_dispatch:\n inputs:\n app:\n description: 'App'\n required: true\n type: choice\n options:\n - my-first-app\n - my-second-app\n environment:\n description: 'Environment'\n required: true\n type: choice\n options:\n - test\n - acceptance\n - production\n white-label-release:\n description: 'White-labeled Release?'\n type: boolean\n default: false\n jobs:\n build:\n name: Build app for android\n runs-on: ubuntu-latest\n environment: ${{ inputs.environment }}\n steps:\n - name: Checkout ${{ github.repository }}\n uses: actions/checkout@vx.x.x\n - name: Echo Input\n env:\n APP: ${{ inputs.app }}\n WHITE_LABEL_RELEASE: ${{ inputs.white-label-release }}\n ENVIRONMENT: ${{ inputs.environment }}\n run: |\n echo \"APP=$APP\"\n echo \"WHITE_LABEL_RELEASE=$WHITE_LABEL_RELEASE\"\n echo \"ENVIRONMENT=$ENVIRONMENT\"\n \n\n `file: env-variable-prep-android.sh`\n\n \n #!/bin/bash\n ARTIFACT_NAME=\"mobile-my-first-app-${ENVIRONMENT}-release\"\n FASTLANE_ANDROID_FLAVOR=\"${ENVIRONMENT}\"\n {\n echo \"artifact-name=${ARTIFACT_NAME}\"\n echo \"fastlane-android-flavor=${FASTLANE_ANDROID_FLAVOR}\"\n } | tee -a \"$GITHUB_OUTPUT\"\n # Secrets should not get sent out over tee command (which also prints it to console)\n {\n echo \"android-key-alias=my-first-app\"\n echo \"android-keystore-file=../keystores/my-first-app.jks\"\n echo \"android-keystore-pass=${ANDROID_KEY_PASSWORD}\"\n echo \"android-store-pass=${ANDROID_STORE_PASSWORD}\"\n } >> \"$GITHUB_OUTPUT\"\n \n\n `file: ./fastlane/Fastfile`\n\n \n opt_out_usage\n platform :android do\n desc 'Build app for Android'\n lane :build do\n build_android_app(\n task: 'bundle',\n flavor: ENV['FASTLANE_ANDROID_FLAVOR'],\n build_type: 'Release',\n project_dir: 'android/',\n print_command: true,\n print_command_output: true,\n )\n end\n end\n \n\n##### iOS\n\n `file: .github/workflows/mobile-apps-build-ios.yaml`\n\n \n ---\n name: Mobile App Build for iOS\n run-name: \"Build: iOS, ${{ inputs.app }}, ${{ inputs.environment }}, white-label-release=${{ inputs.white-label-release }}\"\n on:\n workflow_dispatch:\n inputs:\n app:\n description: 'App'\n required: true\n type: choice\n options:\n - my-first-app\n - my-second-app\n environment:\n description: 'Environment'\n required: true\n type: choice\n options:\n - test\n - acceptance\n - production\n white-label-release:\n description: 'White-labeled Release?'\n type: boolean\n default: false\n jobs:\n build:\n name: Build app for iOS\n runs-on: macos-latest\n environment: ${{ inputs.environment }}\n steps:\n - name: Checkout ${{ github.repository }}\n uses: actions/checkout@vx.x.x\n - name: Echo Input\n env:\n APP: ${{ inputs.app }}\n WHITE_LABEL_RELEASE: ${{ inputs.white-label-release }}\n ENVIRONMENT: ${{ inputs.environment }}\n run: |\n echo \"APP=$APP\"\n echo \"WHITE_LABEL_RELEASE=$WHITE_LABEL_RELEASE\"\n echo \"ENVIRONMENT=$ENVIRONMENT\"\n \n\n `file: env-variable-prep-ios.sh`\n\n \n #!/bin/bash\n # Secrets should not get sent out over tee command (which also prints it to console)\n {\n echo \"ios-mobile-provisioning-profile=${IOS_MOBILE_PROVISIONING_PROFILE}\"\n } >> \"$GITHUB_OUTPUT\"\n \n\n `file: ./fastlane/Gymfile`\n\n \n scheme(ENV['SCHEME'])\n workspace(\"ios/my-first-app.xcworkspace\")\n export_options(\"ios/exportOptions.plist\")\n output_directory(\"ios/build\")\n output_name(ENV['SCHEME'])\n \n\n ##### Both Android & iOS\n\n `file: env-file-prep.sh`\n\n \n #!/usr/bin/env bash\n #####################################################\n # Creates an .env file for use in react-native-config\n # This script should be run from the /mobile folder\n #####################################################\n if [ \"${ENVIRONMENT}\" != \"test\" ] && [ \"${ENVIRONMENT}\" != \"acceptance\" ] && [ \"${ENVIRONMENT}\" != \"production\" ]; then\n echo \"ENVIRONMENT is not set, using 'production' as default.\"\n ENVIRONMENT=production\n fi\n echo \"Copying 'my-first-app/.env.${ENVIRONMENT}' to 'my-first-app/.env'...\"\n cp \"my-first-app/.env.${ENVIRONMENT}\" \"my-first-app/.env\"\n echo \"Success!\"\n \n\n#### Part 2 - Testing your Workflow Locally\nWARNING: GitHub Actions doesn't let you run a `workflow_dispatch` action until it has been merged into the main branch so you'll want to get the basic setup above in place before you start tinkering with application logic or things that could effect App Center. Also note that while `act` is helpful for getting the basics in place, it's unlikely you'll be able to test the complete process locally because, at least for us a) Android pipeline crashes halfway through the `Build App` step with an error of `Gradle build daemon disappeared unexpectedly (it may have been killed or may have crashed)`, and b) iOS tries to install a fresh copy of Xcode\n\n 1. Follow installation instructions on [their User Guide](https://nektosact.com/installation/index.html)\n 2. Create a `~/.actrc` file that looks like this\n\n
\n        \n        --container-architecture linux/amd64\n        --secret GITHUB_TOKEN=$GITHUB_TOKEN\n        \n      
\n \n 3. Get your `$GITHUB_TOKEN` env variable in place\n\n 1. Install [gh, the GitHub cli](https://cli.github.com/)\n 2. Modify shells (zsh shown below)\n\n
\n            \n            export GITHUB_TOKEN=\"$(gh auth token)\"\n            \n          
\n\n 3. Close and re-open your terminal. Test to make sure you can see your `GITHUB_TOKEN` envrionment variable\n\n 4. Set up a temporary local file for secrets. WARNING: Once you’re done, remember to delete the file so it’s not hanging around on your system!! (or just don’t create it in the first place unless you really need it)\n\n `file: .secrets`\n\n
\n        \n      ANDROID_STORE_PASSWORD=\"someSecr3ts\"\n      ANDROID_KEY_PASSWORD=\"YouWantQuotesBecause*s_etc.WillScrewYouUp\"\n      MAPBOX_READ_TOKEN=shhhhh.Its.asecret\n        \n      
\n\n 5. Set up a temporary local file for your workflow trigger inputs.\n\n `file: app-input.json`\n\n
\n        \n      {\n        \"action\": \"workflow_dispatch\",\n        \"inputs\": {\n          \"app\": \"my-first-app\",\n          \"environment\": \"test\",\n          \"white-label-release\": false\n        }\n      }\n        \n      
\n\n 6. Run your workflow like this. As far as I know, you can only run the iOS workflow locally if you're on a mac. To do that you'll need to provide an additional parameter: `-P macos-latest=-self-hosted`\n\n **Android**\n\n \n act \\\n --workflows .github/workflows/mobile-apps-build-android.yaml \\\n --eventpath=\"${HOME}/Documents/IT/GitHub Actions/Mobile Apps/app-input.json\" \\\n --secret-file=\"${HOME}/Documents/IT/GitHub Actions/Mobile Apps/.secrets\"\n \n\n **iOS**\n\n \n act -P macos-latest=-self-hosted \\\n --workflows .github/workflows/mobile-apps-build-ios.yaml \\\n --eventpath=\"${HOME}/Documents/IT/GitHub Actions/Mobile Apps/app-input.json\" \\\n --secret-file=\"${HOME}/Documents/IT/GitHub Actions/Mobile Apps/.secrets\"\n \n\n#### Part 3 - Testing Things out from GHA\n\n1. Once you're happy with your changes locally, send a PR & merge them in! Remember this is only the basic setup to get the action avaible from the GitHub Actions interface so maybe leave a comment in the PR notifying your teammates about how they should expect a follow-up PR\n\n2. Go to the \"Actions\" tab at the top of your GitHub repo. You should now see your actions for building iOS and Android on the left. Since it's a `workflow_dispatch` action you'll trigger the actions manually.\n\n
\n \"run-workflow\"/\n
\n\n#### Part 4 - Implement the Full Workflow for iOS and Android\nAdjust the files below. This is where you may end up needing to modify things that affect your App Center build. Try to keep them to a mimimum so you can still use App Center for builds should anything not work as expected. [Fastlane](https://fastlane.tools/) is a tool that helps with automating build and release processes for mobile apps. You can think of it as a toolbox of easy-to-use wrapper functions around `gradle` for Android, and `xcodebuild` for iOS.\n\n\n##### Android\n \n `file: .github/workflows/mobile-apps-build-android.yaml`\n\n \n ---\n name: Mobile App Build for Android\n run-name: \"Build: android, ${{ inputs.app }}, ${{ inputs.environment }}, white-label-release=${{ inputs.white-label-release }}\"\n on:\n workflow_dispatch:\n inputs:\n app:\n description: 'App'\n required: true\n type: choice\n options:\n - my-first-app\n - my-second-app\n environment:\n description: 'Environment'\n required: true\n type: choice\n options:\n - test\n - acceptance\n - production\n white-label-release:\n description: 'White-labeled Release?'\n type: boolean\n default: false\n jobs:\n build:\n name: Build app for android\n runs-on: ubuntu-latest\n environment: ${{ inputs.environment }}\n steps:\n - name: Checkout ${{ github.repository }}\n uses: actions/checkout@vx.x.x\n - name: Prep Env Variables\n id: prep-env-variables\n working-directory: mobile\n env:\n APP: ${{ inputs.app }} # my-first-app | my-second-app\n ENVIRONMENT: ${{ inputs.environment }} # production | test | acceptance\n BRAND: ${{ inputs.white-label-release && 'other-company' || 'my-company' }}\n APP_1_ANDROID_KEY_PASSWORD_VANDEBRON: ${{ secrets.APP_1_ANDROID_KEY_PASSWORD_VANDEBRON }}\n APP_1_ANDROID_STORE_PASSWORD_VANDEBRON: ${{ secrets.APP_1_ANDROID_STORE_PASSWORD_VANDEBRON }}\n APP_1_ANDROID_KEY_PASSWORD_WHITE_LABEL: ${{ secrets.APP_1_ANDROID_KEY_PASSWORD_WHITE_LABEL }}\n APP_1_ANDROID_STORE_PASSWORD_WHITE_LABEL: ${{ secrets.APP_1_ANDROID_STORE_PASSWORD_WHITE_LABEL }}\n APP_2_ANDROID_KEY_PASSWORD_VANDEBRON: ${{ secrets.APP_2_ANDROID_KEY_PASSWORD_VANDEBRON }}\n APP_2_ANDROID_STORE_PASSWORD_VANDEBRON: ${{ secrets.APP_2_ANDROID_STORE_PASSWORD_VANDEBRON }}\n run: bash ./env-variable-prep-android.sh\n - name: Create .env file\n working-directory: mobile\n env:\n APP: ${{ inputs.app }}\n BRAND: ${{ steps.prep-env-variables.outputs.inferred-brand }}\n ENVIRONMENT: ${{inputs.environment}}\n run: bash ./env-file-prep.sh\n - name: Enable Corepack\n run: corepack enable\n - name: Setup NodeJS\n id: setup-node\n uses: actions/setup-node@vx.x.x\n with:\n node-version: 18.x\n registry-url: https://registry.npmjs.org\n cache: 'yarn'\n cache-dependency-path: mobile/${{ inputs.app }}/yarn.lock\n - name: Setup Java\n uses: actions/setup-java@vx.x.x\n with:\n distribution: 'temurin'\n java-version: '20'\n cache: 'gradle'\n - name: Setup Android SDK # sadly no caching capabilities here\n uses: android-actions/setup-android@vx.x.x\n with:\n log-accepted-android-sdk-licenses: false\n packages: 'tools' # Default is 'tools platform-tools but we don't need platform-tools for packaging'\n - name: Set up ruby env # Fastlane is a \"Ruby gem\"\n uses: ruby/setup-ruby@vx\n with:\n ruby-version: '3.3.0' # Changing this to 3.3 will give you \"Your Ruby version is 3.3.5, but your Gemfile specified 3.3.0\"\n bundler-cache: true\n - name: Install Gem Bundler\n working-directory: mobile/${{ inputs.app }}\n run: |\n gem install bundler\n bundle install --quiet\n # Install Dependencies\n - name: Yarn Install\n working-directory: mobile/${{ inputs.app }}\n run: yarn install --immutable\n # Build\n - name: Build App\n run: bundle exec fastlane android build\n working-directory: mobile/${{ inputs.app }}\n env:\n ENVIRONMENT: ${{ inputs.environment }}\n FASTLANE_ENV_INFERRED_BRAND: ${{ steps.prep-env-variables.outputs.inferred-brand }}\n ANDROID_KEYSTORE_FILE: ${{ steps.prep-env-variables.outputs.android-keystore-file }}\n ANDROID_KEY_ALIAS: ${{ steps.prep-env-variables.outputs.android-key-alias }}\n ANDROID_STORE_PASSWORD: ${{ steps.prep-env-variables.outputs.android-store-pass }}\n ANDROID_KEY_PASSWORD: ${{ steps.prep-env-variables.outputs.android-keystore-pass }}\n FASTLANE_ANDROID_FLAVOR: ${{ steps.prep-env-variables.outputs.fastlane-android-flavor }}\n # Upload\n - name: Upload application\n uses: actions/upload-artifact@vx\n with:\n name: ${{steps.prep-env-variables.outputs.artifact-name}}\n path: \"mobile/${{ inputs.app }}/android/app/build/outputs/bundle/${{ steps.prep-env-variables.outputs.fastlane-android-flavor }}Release/app-${{ steps.prep-env-variables.outputs.fastlane-android-flavor }}-release.aab\"\n retention-days: 30\n \n\n ##### iOS\n \n `file: .github/workflows/mobile-apps-build-ios.yaml`\n\n \n ---\n name: Mobile App Build for iOS\n run-name: \"Build: iOS, ${{ inputs.app }}, ${{ inputs.environment }}, white-label-release=${{ inputs.white-label-release }}\"\n on:\n workflow_dispatch:\n inputs:\n app:\n description: 'App'\n required: true\n type: choice\n options:\n - my-first-app\n - my-second-app\n environment:\n description: 'Environment'\n required: true\n type: choice\n options:\n - test\n - acceptance\n - production\n white-label-release:\n description: 'White-labeled Release?'\n type: boolean\n default: false\n jobs:\n build:\n name: Build app for iOS\n runs-on: macos-latest\n environment: ${{ inputs.environment }}\n steps:\n - name: Checkout ${{ github.repository }}\n uses: actions/checkout@vx.x.x\n - name: Prep Env Variables\n id: prep-env-variables\n working-directory: mobile\n env:\n APP: ${{ inputs.app }} # my-first-app | my-second-app\n BRAND: ${{ inputs.white-label-release && 'other-company' || 'my-company' }}\n ENVIRONMENT: ${{ inputs.environment }} # production | test | acceptance\n APP_1_MY_COMPANY_IOS_MOBILE_PROVISIONING_PROFILE: ${{ secrets.APP_1_MY_COMPANY_IOS_MOBILE_PROVISIONING_PROFILE }}\n APP_1_OTHER_COMPANY_IOS_MOBILE_PROVISIONING_PROFILE: ${{ secrets.APP_1_OTHER_COMPANY_IOS_MOBILE_PROVISIONING_PROFILE }}\n IOS_BUILD_CERTIFICATE_P12_OTHER_COMPANY: ${{ secrets.IOS_BUILD_CERTIFICATE_P12_OTHER_COMPANY }}\n IOS_BUILD_CERTIFICATE_P12_PASSWORD_OTHER_COMPANY: ${{ secrets.IOS_BUILD_CERTIFICATE_P12_PASSWORD_OTHER_COMPANY }}\n APP_2_IOS_MOBILE_PROVISIONING_PROFILE: ${{ secrets.APP_2_IOS_MOBILE_PROVISIONING_PROFILE }}\n run: bash ./env-variable-prep-ios.sh\n - name: Create .env file\n working-directory: mobile\n env:\n APP: ${{ inputs.app }} # my-first-app | my-second-app\n BRAND: ${{ steps.prep-env-variables.outputs.inferred-brand }}\n ENVIRONMENT: ${{inputs.environment}}\n run: bash ./env-file-prep.sh\n - name: Import Build Certificate from Secrets\n uses: apple-actions/import-codesign-certs@vx\n with:\n p12-file-base64: ${{ steps.prep-env-variables.outputs.ios-build-certificate-p12 }}\n p12-password: ${{ steps.prep-env-variables.outputs.ios-build-certificate-p12-password }}\n - name: Import Mobile Provisioning Profile\n uses: nickwph/apple-provisioning-profile-action@vx.x.x\n with:\n profile-base64: ${{ steps.prep-env-variables.outputs.ios-mobile-provisioning-profile }}\n - name: Setup NodeJS\n id: setup-node\n uses: actions/setup-node@vx.x.x\n with:\n node-version: 20.x\n # Mapbox v10 ships with bitcode on XCode 16 which is not allowed by the App Store\n # https://github.com/mapbox/mapbox-maps-ios/issues/2233\n # Once this issue is fixed we can upgrade to 16\n - name: Install XCode\n uses: maxim-lobanov/setup-xcode@vx.x.x\n with:\n xcode-version: 15.4\n - name: Install Ruby\n uses: ruby/setup-ruby@vx.x.x\n with:\n ruby-version: 3.3.0\n - name: Install Bundler\n run: gem install bundler\n # TODO: Cache node_modules similarly to how Pods are cached (compare hash of yarn.lock)\n - name: Yarn Install\n working-directory: mobile/${{ inputs.app }}\n run: yarn install --immutable\n # TODO: Cache Gems similarly to how Pods are cached (compare hash of Gemfile.lock)\n - name: Install Gems\n run: bundle install\n working-directory: mobile/${{ inputs.app }}\n - name: Cache CocoaPods dependencies\n uses: actions/cache@vx\n env:\n FILES_GLOB: mobile/${{ inputs.app }}/ios/Podfile.lock\n with:\n path: |\n mobile/${{ inputs.app }}/ios/Pods\n key: ${{ runner.os }}-pods-${{ hashFiles(env.FILES_GLOB) }}\n restore-keys: |\n ${{ runner.os }}-pods-\n - name: Install Pods\n working-directory: mobile/${{ inputs.app }}/ios\n run: bundle exec pod install\n - name: Build iOS App\n env:\n APP: ${{ inputs.app }}\n SCHEME: ${{ steps.prep-env-variables.outputs.ios-scheme }} # otherCompanyFirstAppProduction, myCompanySecondAppTest\n BRAND: ${{ steps.prep-env-variables.outputs.inferred-brand }}\n TARGET: ${{ steps.prep-env-variables.outputs.ios-target }}\n run: bundle exec fastlane gym\n working-directory: mobile/${{ inputs.app }}\n # Upload\n - name: Upload application\n uses: actions/upload-artifact@vx\n with:\n name: ${{steps.prep-env-variables.outputs.ios-scheme}}\n path: \"mobile/${{ inputs.app }}/ios/build/${{ steps.prep-env-variables.outputs.ios-scheme }}.ipa\"\n retention-days: 30\n overwrite: true\n if-no-files-found: error\n \n\n#### Part 5 - Troubleshooting\nMore than likely these won't work the first time. Time to go back and adjust. Note that since the workflow is now in the main branch you can test your workflow changes on a feature branch. Just select your feature branch in the \"Branch\" dropdown shown above.\n\n## Other Things to Note\n\n
    \n
  • App Center gives you the ability to write `appcenter-pre-build.sh` and `appcenter-post-build.sh` scripts. The `env-file-prep.sh` is basically that same thing, just without the context of appcenter.
  • \n
  • One of our apps is using MapBox which needs a `.netrc` in the root directory. If you need something similar, you can add a step to your action by adding the code shown in the the \"optional mapbox\" part + the `./my-first-app/prep-mapbox.sh` in the [Appendix](#appendix).
  • \n
  • After our work on this was done (and only as I'm writing this article) we realized we can use the `sparse-checkout` option from `actions/checkout` to only check out the needed files. This should speed up our workflow runtime even more!
  • \n
  • It may be helpful for you to add the build and/or version number onto the artifact. We haven't done that but it's something we're interested in adding for the future.
  • \n
  • Troubleshooting certificates for iOS was a HUGE pain in the butt. I don't have any good advice here other than to realize (and communicate with your POs) that this part may take a while.
  • \n
\n\n## Benefits\n- It regularly took over 50 minutes for our mobile app to build in App Center. Part of that could have very likely be improved by adjusting App Center configurations & how we store and bundle app assets but after migrating our builds to GitHub Actions our app build times are now down to 22 minutes - More than twice as fast!\n- All the rest of the software at Vandebron (backend services in Scala and Python and frontend applications in Typescript + React) is built using GitHub Actions. This move brings mobile apps in line with all other software. This move to GHA for mobile builds has led to several of our mobile devs getting our hands dirty in GHA, which is great because we can now play a role in the larger CICD discussions.\n- We have full control over our CICD pipeline for mobile builds. In the future we can integrate more Fastlane commands to further automate the release process.\n- We did a full ADR (shown below) which initiated the work here. Links referenced in image are in Appendix below.\n ![replace-app-center-adr](../images/replacing-app-center-adr.png)\n\n\n## Appendix\n\n#### Mapbox Integration\n\n`file: .github/workflows/mobile-apps-build-android.yaml and .github/workflows/mobile-apps-build-ios.yaml (optional mapbox)`\n\n
\n  \n  - name: Create Mapbox .netrc file (my-first-app only)\n    if: ${{ inputs.app == 'my-first-app' }}\n    working-directory: mobile\n    env:\n      MAPBOX_READ_TOKEN: ${{ secrets.MAPBOX_READ_TOKEN }}\n    run: bash ./my-first-app/prep-mapbox.sh\n  \n
\n\n\n`file: ./my-first-app/prep-mapbox.sh`\n\n
\n  \n  #!/usr/bin/env bash\n  \n  # WARN: DO NOT use tee here (it prints to console)\n  {\n    echo \"machine api.mapbox.com\"\n    echo \"login mapbox\"\n    echo \"password ${MAPBOX_READ_TOKEN}\"\n  } >> ~/.netrc\n  chmod 0600 ~/.netrc\n  \n
\n\n#### ADR Links\n- [GHA (Billing)](https://docs.github.com/en/billing/managing-billing-for-github-actions/about-billing-for-github-actions)\n- [Bitrise](https://bitrise.io/)\n- [CodeMagic](https://codemagic.io/)\n- [YouTube video showing GHA setup for Android](https://www.youtube.com/watch?v=_uRbEyBa9q0)\n- [Medium article showing GHA setup for Android](https://medium.com/scaleuptech/how-to-make-react-native-builds-with-github-actions-8d0203801eff)\n- [Article discussing how build uploads can be done](https://www.obytes.com/blog/react-native-ci-cd-github-action)","meta":{"title":"Replacing App Center with GitHub Actions","description":"App Center is closing up shop on March 31st, 2025. So what's the plan for building mobile apps at Vandebron?","createdAt":"Fri Feb 21 2025 01:00:00 GMT+0100 (Central European Standard Time)","coverImage":"images/replacing-app-center-building-a-phone.jpg","tags":["React Native","App Center","GHA","GitHub Actions"],"author":"John Fisher & Arnav Mundkur","slug":"blog/replacing-app-center","formattedDate":"21 februari 2025","date":"Fri Feb 21 2025 01:00:00 GMT+0100 (Central European Standard Time)"}}},"__N_SSG":true} \ No newline at end of file +{"pageProps":{"post":{"content":"\n## Why GHA?\nThis seems like a lot of work... Why not go with an off-the-shelf solution from something like Bitrise or Codemagic? Fair question but not the main point of this post. To look into our reasoning check out the [Benefits](#benefits) section!\n\n## Some notes before we get started\n- We use this workflow to build two apps, one of which can be white-labeled, so we have additional `app` and `white-label-release` inputs which makes things a bit trickier. You might not need that so feel free to trim stuff down and make it your own! But for us, we why we have the `env-variable-prep-android.sh` which normalizes the variable names used for secrets so those secrets and build file names, etc. can be easily used. If you just have a single app you probably don't need this script.\n- The code below is only for the build process. Though the Architecture Decision Record (ADR) considered how this would affect future decisions about artifact upload automation and rolling out releases for internal testing, nothing about that is automated here.\n- There's a lot of code here. We removed version numbers to make sure we're not giving out too much information. If you see something like `@vx.x.x`, you'll have to fill those in with the versions that are needed for your app/pipeline.\n\n## Implementation\n#### Part 1 - Basic Setup\nAdd the files below. Nothing in this setup should effect App Center but it is good to check in your changes to a branch and test those against the regular App Center build flow. The main point of the steps in this section is to just get a basic action, with inputs, set up and running. Full implementation is further down. The `env-variable-prep-android.sh` and `env-variable-prep-ios.sh` files created variables based off the input parameters passed in so they can be used in a reusable and consistent manner later on. The `env-file-prep.sh` file is responsible for creating a `.env` file with values from whichever environment you're using. Though it's nice to add the `Fastlane` and `Gymfile` files, those won't be used until Step 4 when the rest of the pipeline is fleshed out.\n\n##### Android\n\n `file: .github/workflows/mobile-apps-build-android.yaml`\n\n \n ---\n name: Mobile App Build for Android\n run-name: \"Build: Android, ${{ inputs.app }}, ${{ inputs.environment }}, white-label-release=${{ inputs.white-label-release }}\"\n on:\n workflow_dispatch:\n inputs:\n app:\n description: 'App'\n required: true\n type: choice\n options:\n - my-first-app\n - my-second-app\n environment:\n description: 'Environment'\n required: true\n type: choice\n options:\n - test\n - acceptance\n - production\n white-label-release:\n description: 'White-labeled Release?'\n type: boolean\n default: false\n jobs:\n build:\n name: Build app for android\n runs-on: ubuntu-latest\n environment: ${{ inputs.environment }}\n steps:\n - name: Checkout ${{ github.repository }}\n uses: actions/checkout@vx.x.x\n - name: Echo Input\n env:\n APP: ${{ inputs.app }}\n WHITE_LABEL_RELEASE: ${{ inputs.white-label-release }}\n ENVIRONMENT: ${{ inputs.environment }}\n run: |\n echo \"APP=$APP\"\n echo \"WHITE_LABEL_RELEASE=$WHITE_LABEL_RELEASE\"\n echo \"ENVIRONMENT=$ENVIRONMENT\"\n \n\n `file: env-variable-prep-android.sh`\n\n \n #!/bin/bash\n ARTIFACT_NAME=\"mobile-my-first-app-${ENVIRONMENT}-release\"\n FASTLANE_ANDROID_FLAVOR=\"${ENVIRONMENT}\"\n {\n echo \"artifact-name=${ARTIFACT_NAME}\"\n echo \"fastlane-android-flavor=${FASTLANE_ANDROID_FLAVOR}\"\n } | tee -a \"$GITHUB_OUTPUT\"\n # Secrets should not get sent out over tee command (which also prints it to console)\n {\n echo \"android-key-alias=my-first-app\"\n echo \"android-keystore-file=../keystores/my-first-app.jks\"\n echo \"android-keystore-pass=${ANDROID_KEY_PASSWORD}\"\n echo \"android-store-pass=${ANDROID_STORE_PASSWORD}\"\n } >> \"$GITHUB_OUTPUT\"\n \n\n `file: ./fastlane/Fastfile`\n\n \n opt_out_usage\n platform :android do\n desc 'Build app for Android'\n lane :build do\n build_android_app(\n task: 'bundle',\n flavor: ENV['FASTLANE_ANDROID_FLAVOR'],\n build_type: 'Release',\n project_dir: 'android/',\n print_command: true,\n print_command_output: true,\n )\n end\n end\n \n\n##### iOS\n\n `file: .github/workflows/mobile-apps-build-ios.yaml`\n\n \n ---\n name: Mobile App Build for iOS\n run-name: \"Build: iOS, ${{ inputs.app }}, ${{ inputs.environment }}, white-label-release=${{ inputs.white-label-release }}\"\n on:\n workflow_dispatch:\n inputs:\n app:\n description: 'App'\n required: true\n type: choice\n options:\n - my-first-app\n - my-second-app\n environment:\n description: 'Environment'\n required: true\n type: choice\n options:\n - test\n - acceptance\n - production\n white-label-release:\n description: 'White-labeled Release?'\n type: boolean\n default: false\n jobs:\n build:\n name: Build app for iOS\n runs-on: macos-latest\n environment: ${{ inputs.environment }}\n steps:\n - name: Checkout ${{ github.repository }}\n uses: actions/checkout@vx.x.x\n - name: Echo Input\n env:\n APP: ${{ inputs.app }}\n WHITE_LABEL_RELEASE: ${{ inputs.white-label-release }}\n ENVIRONMENT: ${{ inputs.environment }}\n run: |\n echo \"APP=$APP\"\n echo \"WHITE_LABEL_RELEASE=$WHITE_LABEL_RELEASE\"\n echo \"ENVIRONMENT=$ENVIRONMENT\"\n \n\n `file: env-variable-prep-ios.sh`\n\n \n #!/bin/bash\n # Secrets should not get sent out over tee command (which also prints it to console)\n {\n echo \"ios-mobile-provisioning-profile=${IOS_MOBILE_PROVISIONING_PROFILE}\"\n } >> \"$GITHUB_OUTPUT\"\n \n\n `file: ./fastlane/Gymfile`\n\n \n scheme(ENV['SCHEME'])\n workspace(\"ios/my-first-app.xcworkspace\")\n export_options(\"ios/exportOptions.plist\")\n output_directory(\"ios/build\")\n output_name(ENV['SCHEME'])\n \n\n ##### Both Android & iOS\n\n `file: env-file-prep.sh`\n\n \n #!/usr/bin/env bash\n #####################################################\n # Creates an .env file for use in react-native-config\n # This script should be run from the /mobile folder\n #####################################################\n if [ \"${ENVIRONMENT}\" != \"test\" ] && [ \"${ENVIRONMENT}\" != \"acceptance\" ] && [ \"${ENVIRONMENT}\" != \"production\" ]; then\n echo \"ENVIRONMENT is not set, using 'production' as default.\"\n ENVIRONMENT=production\n fi\n echo \"Copying 'my-first-app/.env.${ENVIRONMENT}' to 'my-first-app/.env'...\"\n cp \"my-first-app/.env.${ENVIRONMENT}\" \"my-first-app/.env\"\n echo \"Success!\"\n \n\n#### Part 2 - Testing your Workflow Locally\nWARNING: GitHub Actions doesn't let you run a `workflow_dispatch` action until it has been merged into the main branch so you'll want to get the basic setup above in place before you start tinkering with application logic or things that could effect App Center. Also note that while `act` is helpful for getting the basics in place, it's unlikely you'll be able to test the complete process locally because, at least for us a) Android pipeline crashes halfway through the `Build App` step with an error of `Gradle build daemon disappeared unexpectedly (it may have been killed or may have crashed)`, and b) iOS tries to install a fresh copy of Xcode\n\n 1. Follow installation instructions on [their User Guide](https://nektosact.com/installation/index.html)\n 2. Create a `~/.actrc` file that looks like this\n\n
\n        \n        --container-architecture linux/amd64\n        --secret GITHUB_TOKEN=$GITHUB_TOKEN\n        \n      
\n \n 3. Get your `$GITHUB_TOKEN` env variable in place\n\n 1. Install [gh, the GitHub cli](https://cli.github.com/)\n 2. Modify shells (zsh shown below)\n\n
\n            \n            export GITHUB_TOKEN=\"$(gh auth token)\"\n            \n          
\n\n 3. Close and re-open your terminal. Test to make sure you can see your `GITHUB_TOKEN` envrionment variable\n\n 4. Set up a temporary local file for secrets. WARNING: Once you’re done, remember to delete the file so it’s not hanging around on your system!! (or just don’t create it in the first place unless you really need it)\n\n `file: .secrets`\n\n
\n        \n      ANDROID_STORE_PASSWORD=\"someSecr3ts\"\n      ANDROID_KEY_PASSWORD=\"YouWantQuotesBecause*s_etc.WillScrewYouUp\"\n      MAPBOX_READ_TOKEN=shhhhh.Its.asecret\n        \n      
\n\n 5. Set up a temporary local file for your workflow trigger inputs.\n\n `file: app-input.json`\n\n
\n        \n      {\n        \"action\": \"workflow_dispatch\",\n        \"inputs\": {\n          \"app\": \"my-first-app\",\n          \"environment\": \"test\",\n          \"white-label-release\": false\n        }\n      }\n        \n      
\n\n 6. Run your workflow like this. As far as I know, you can only run the iOS workflow locally if you're on a mac. To do that you'll need to provide an additional parameter: `-P macos-latest=-self-hosted`\n\n **Android**\n\n \n act \\\n --workflows .github/workflows/mobile-apps-build-android.yaml \\\n --eventpath=\"${HOME}/Documents/IT/GitHub Actions/Mobile Apps/app-input.json\" \\\n --secret-file=\"${HOME}/Documents/IT/GitHub Actions/Mobile Apps/.secrets\"\n \n\n **iOS**\n\n \n act -P macos-latest=-self-hosted \\\n --workflows .github/workflows/mobile-apps-build-ios.yaml \\\n --eventpath=\"${HOME}/Documents/IT/GitHub Actions/Mobile Apps/app-input.json\" \\\n --secret-file=\"${HOME}/Documents/IT/GitHub Actions/Mobile Apps/.secrets\"\n \n\n#### Part 3 - Testing Things out from GHA\n\n1. Once you're happy with your changes locally, send a PR & merge them in! Remember this is only the basic setup to get the action avaible from the GitHub Actions interface so maybe leave a comment in the PR notifying your teammates about how they should expect a follow-up PR\n\n2. Go to the \"Actions\" tab at the top of your GitHub repo. You should now see your actions for building iOS and Android on the left. Since it's a `workflow_dispatch` action you'll trigger the actions manually.\n\n
\n \"run-workflow\"/\n
\n\n#### Part 4 - Implement the Full Workflow for iOS and Android\nAdjust the files below. This is where you may end up needing to modify things that affect your App Center build. Try to keep them to a mimimum so you can still use App Center for builds should anything not work as expected. [Fastlane](https://fastlane.tools/) is a tool that helps with automating build and release processes for mobile apps. You can think of it as a toolbox of easy-to-use wrapper functions around `gradle` for Android, and `xcodebuild` for iOS.\n\n\n##### Android\n \n `file: .github/workflows/mobile-apps-build-android.yaml`\n\n \n ---\n name: Mobile App Build for Android\n run-name: \"Build: android, ${{ inputs.app }}, ${{ inputs.environment }}, white-label-release=${{ inputs.white-label-release }}\"\n on:\n workflow_dispatch:\n inputs:\n app:\n description: 'App'\n required: true\n type: choice\n options:\n - my-first-app\n - my-second-app\n environment:\n description: 'Environment'\n required: true\n type: choice\n options:\n - test\n - acceptance\n - production\n white-label-release:\n description: 'White-labeled Release?'\n type: boolean\n default: false\n jobs:\n build:\n name: Build app for android\n runs-on: ubuntu-latest\n environment: ${{ inputs.environment }}\n steps:\n - name: Checkout ${{ github.repository }}\n uses: actions/checkout@vx.x.x\n - name: Prep Env Variables\n id: prep-env-variables\n working-directory: mobile\n env:\n APP: ${{ inputs.app }} # my-first-app | my-second-app\n ENVIRONMENT: ${{ inputs.environment }} # production | test | acceptance\n BRAND: ${{ inputs.white-label-release && 'other-company' || 'my-company' }}\n APP_1_ANDROID_KEY_PASSWORD_VANDEBRON: ${{ secrets.APP_1_ANDROID_KEY_PASSWORD_VANDEBRON }}\n APP_1_ANDROID_STORE_PASSWORD_VANDEBRON: ${{ secrets.APP_1_ANDROID_STORE_PASSWORD_VANDEBRON }}\n APP_1_ANDROID_KEY_PASSWORD_WHITE_LABEL: ${{ secrets.APP_1_ANDROID_KEY_PASSWORD_WHITE_LABEL }}\n APP_1_ANDROID_STORE_PASSWORD_WHITE_LABEL: ${{ secrets.APP_1_ANDROID_STORE_PASSWORD_WHITE_LABEL }}\n APP_2_ANDROID_KEY_PASSWORD_VANDEBRON: ${{ secrets.APP_2_ANDROID_KEY_PASSWORD_VANDEBRON }}\n APP_2_ANDROID_STORE_PASSWORD_VANDEBRON: ${{ secrets.APP_2_ANDROID_STORE_PASSWORD_VANDEBRON }}\n run: bash ./env-variable-prep-android.sh\n - name: Create .env file\n working-directory: mobile\n env:\n APP: ${{ inputs.app }}\n BRAND: ${{ steps.prep-env-variables.outputs.inferred-brand }}\n ENVIRONMENT: ${{inputs.environment}}\n run: bash ./env-file-prep.sh\n - name: Enable Corepack\n run: corepack enable\n - name: Setup NodeJS\n id: setup-node\n uses: actions/setup-node@vx.x.x\n with:\n node-version: 18.x\n registry-url: https://registry.npmjs.org\n cache: 'yarn'\n cache-dependency-path: mobile/${{ inputs.app }}/yarn.lock\n - name: Setup Java\n uses: actions/setup-java@vx.x.x\n with:\n distribution: 'temurin'\n java-version: '20'\n cache: 'gradle'\n - name: Setup Android SDK # sadly no caching capabilities here\n uses: android-actions/setup-android@vx.x.x\n with:\n log-accepted-android-sdk-licenses: false\n packages: 'tools' # Default is 'tools platform-tools but we don't need platform-tools for packaging'\n - name: Set up ruby env # Fastlane is a \"Ruby gem\"\n uses: ruby/setup-ruby@vx\n with:\n ruby-version: '3.3.0' # Changing this to 3.3 will give you \"Your Ruby version is 3.3.5, but your Gemfile specified 3.3.0\"\n bundler-cache: true\n - name: Install Gem Bundler\n working-directory: mobile/${{ inputs.app }}\n run: |\n gem install bundler\n bundle install --quiet\n # Install Dependencies\n - name: Yarn Install\n working-directory: mobile/${{ inputs.app }}\n run: yarn install --immutable\n # Build\n - name: Build App\n run: bundle exec fastlane android build\n working-directory: mobile/${{ inputs.app }}\n env:\n ENVIRONMENT: ${{ inputs.environment }}\n FASTLANE_ENV_INFERRED_BRAND: ${{ steps.prep-env-variables.outputs.inferred-brand }}\n ANDROID_KEYSTORE_FILE: ${{ steps.prep-env-variables.outputs.android-keystore-file }}\n ANDROID_KEY_ALIAS: ${{ steps.prep-env-variables.outputs.android-key-alias }}\n ANDROID_STORE_PASSWORD: ${{ steps.prep-env-variables.outputs.android-store-pass }}\n ANDROID_KEY_PASSWORD: ${{ steps.prep-env-variables.outputs.android-keystore-pass }}\n FASTLANE_ANDROID_FLAVOR: ${{ steps.prep-env-variables.outputs.fastlane-android-flavor }}\n # Upload\n - name: Upload application\n uses: actions/upload-artifact@vx\n with:\n name: ${{steps.prep-env-variables.outputs.artifact-name}}\n path: \"mobile/${{ inputs.app }}/android/app/build/outputs/bundle/${{ steps.prep-env-variables.outputs.fastlane-android-flavor }}Release/app-${{ steps.prep-env-variables.outputs.fastlane-android-flavor }}-release.aab\"\n retention-days: 30\n \n\n ##### iOS\n \n `file: .github/workflows/mobile-apps-build-ios.yaml`\n\n \n ---\n name: Mobile App Build for iOS\n run-name: \"Build: iOS, ${{ inputs.app }}, ${{ inputs.environment }}, white-label-release=${{ inputs.white-label-release }}\"\n on:\n workflow_dispatch:\n inputs:\n app:\n description: 'App'\n required: true\n type: choice\n options:\n - my-first-app\n - my-second-app\n environment:\n description: 'Environment'\n required: true\n type: choice\n options:\n - test\n - acceptance\n - production\n white-label-release:\n description: 'White-labeled Release?'\n type: boolean\n default: false\n jobs:\n build:\n name: Build app for iOS\n runs-on: macos-latest\n environment: ${{ inputs.environment }}\n steps:\n - name: Checkout ${{ github.repository }}\n uses: actions/checkout@vx.x.x\n - name: Prep Env Variables\n id: prep-env-variables\n working-directory: mobile\n env:\n APP: ${{ inputs.app }} # my-first-app | my-second-app\n BRAND: ${{ inputs.white-label-release && 'other-company' || 'my-company' }}\n ENVIRONMENT: ${{ inputs.environment }} # production | test | acceptance\n APP_1_MY_COMPANY_IOS_MOBILE_PROVISIONING_PROFILE: ${{ secrets.APP_1_MY_COMPANY_IOS_MOBILE_PROVISIONING_PROFILE }}\n APP_1_OTHER_COMPANY_IOS_MOBILE_PROVISIONING_PROFILE: ${{ secrets.APP_1_OTHER_COMPANY_IOS_MOBILE_PROVISIONING_PROFILE }}\n IOS_BUILD_CERTIFICATE_P12_OTHER_COMPANY: ${{ secrets.IOS_BUILD_CERTIFICATE_P12_OTHER_COMPANY }}\n IOS_BUILD_CERTIFICATE_P12_PASSWORD_OTHER_COMPANY: ${{ secrets.IOS_BUILD_CERTIFICATE_P12_PASSWORD_OTHER_COMPANY }}\n APP_2_IOS_MOBILE_PROVISIONING_PROFILE: ${{ secrets.APP_2_IOS_MOBILE_PROVISIONING_PROFILE }}\n run: bash ./env-variable-prep-ios.sh\n - name: Create .env file\n working-directory: mobile\n env:\n APP: ${{ inputs.app }} # my-first-app | my-second-app\n BRAND: ${{ steps.prep-env-variables.outputs.inferred-brand }}\n ENVIRONMENT: ${{inputs.environment}}\n run: bash ./env-file-prep.sh\n - name: Import Build Certificate from Secrets\n uses: apple-actions/import-codesign-certs@vx\n with:\n p12-file-base64: ${{ steps.prep-env-variables.outputs.ios-build-certificate-p12 }}\n p12-password: ${{ steps.prep-env-variables.outputs.ios-build-certificate-p12-password }}\n - name: Import Mobile Provisioning Profile\n uses: nickwph/apple-provisioning-profile-action@vx.x.x\n with:\n profile-base64: ${{ steps.prep-env-variables.outputs.ios-mobile-provisioning-profile }}\n - name: Setup NodeJS\n id: setup-node\n uses: actions/setup-node@vx.x.x\n with:\n node-version: 20.x\n # Mapbox v10 ships with bitcode on XCode 16 which is not allowed by the App Store\n # https://github.com/mapbox/mapbox-maps-ios/issues/2233\n # Once this issue is fixed we can upgrade to 16\n - name: Install XCode\n uses: maxim-lobanov/setup-xcode@vx.x.x\n with:\n xcode-version: 15.4\n - name: Install Ruby\n uses: ruby/setup-ruby@vx.x.x\n with:\n ruby-version: 3.3.0\n - name: Install Bundler\n run: gem install bundler\n # TODO: Cache node_modules similarly to how Pods are cached (compare hash of yarn.lock)\n - name: Yarn Install\n working-directory: mobile/${{ inputs.app }}\n run: yarn install --immutable\n # TODO: Cache Gems similarly to how Pods are cached (compare hash of Gemfile.lock)\n - name: Install Gems\n run: bundle install\n working-directory: mobile/${{ inputs.app }}\n - name: Cache CocoaPods dependencies\n uses: actions/cache@vx\n env:\n FILES_GLOB: mobile/${{ inputs.app }}/ios/Podfile.lock\n with:\n path: |\n mobile/${{ inputs.app }}/ios/Pods\n key: ${{ runner.os }}-pods-${{ hashFiles(env.FILES_GLOB) }}\n restore-keys: |\n ${{ runner.os }}-pods-\n - name: Install Pods\n working-directory: mobile/${{ inputs.app }}/ios\n run: bundle exec pod install\n - name: Build iOS App\n env:\n APP: ${{ inputs.app }}\n SCHEME: ${{ steps.prep-env-variables.outputs.ios-scheme }} # otherCompanyFirstAppProduction, myCompanySecondAppTest\n BRAND: ${{ steps.prep-env-variables.outputs.inferred-brand }}\n TARGET: ${{ steps.prep-env-variables.outputs.ios-target }}\n run: bundle exec fastlane gym\n working-directory: mobile/${{ inputs.app }}\n # Upload\n - name: Upload application\n uses: actions/upload-artifact@vx\n with:\n name: ${{steps.prep-env-variables.outputs.ios-scheme}}\n path: \"mobile/${{ inputs.app }}/ios/build/${{ steps.prep-env-variables.outputs.ios-scheme }}.ipa\"\n retention-days: 30\n overwrite: true\n if-no-files-found: error\n \n\n#### Part 5 - Troubleshooting\nMore than likely these won't work the first time. Time to go back and adjust. Note that since the workflow is now in the main branch you can test your workflow changes on a feature branch. Just select your feature branch in the \"Branch\" dropdown shown above.\n\n## Other Things to Note\n\n
    \n
  • App Center gives you the ability to write `appcenter-pre-build.sh` and `appcenter-post-build.sh` scripts. The `env-file-prep.sh` is basically that same thing, just without the context of appcenter.
  • \n
  • One of our apps is using MapBox which needs a `.netrc` in the root directory. If you need something similar, you can add a step to your action by adding the code shown in the the \"optional mapbox\" part + the `./my-first-app/prep-mapbox.sh` in the Appendix section below.
  • \n
  • After our work on this was done (and only as I'm writing this article) we realized we can use the `sparse-checkout` option from `actions/checkout` to only check out the needed files. This should speed up our workflow runtime even more!
  • \n
  • It may be helpful for you to add the build and/or version number onto the artifact. We haven't done that but it's something we're interested in adding for the future.
  • \n
  • Troubleshooting certificates for iOS was a HUGE pain in the butt. I don't have any good advice here other than to realize (and communicate with your POs) that this part may take a while.
  • \n
\n\n## Benefits\n- It regularly took over 50 minutes for our mobile app to build in App Center. Part of that could have very likely be improved by adjusting App Center configurations & how we store and bundle app assets but after migrating our builds to GitHub Actions our app build times are now down to 22 minutes - More than twice as fast!\n- All the rest of the software at Vandebron (backend services in Scala and Python and frontend applications in Typescript + React) is built using GitHub Actions. This move brings mobile apps in line with all other software. This move to GHA for mobile builds has led to several of our mobile devs getting our hands dirty in GHA, which is great because we can now play a role in the larger CICD discussions.\n- We have full control over our CICD pipeline for mobile builds. In the future we can integrate more Fastlane commands to further automate the release process.\n- We did a full ADR (shown below) which initiated the work here. Links referenced in image are in Appendix below.\n ![replace-app-center-adr](../images/replacing-app-center-adr.png)\n\n\n## Appendix\n\n#### Mapbox Integration\n\n`file: .github/workflows/mobile-apps-build-android.yaml and .github/workflows/mobile-apps-build-ios.yaml (optional mapbox)`\n\n
\n  \n  - name: Create Mapbox .netrc file (my-first-app only)\n    if: ${{ inputs.app == 'my-first-app' }}\n    working-directory: mobile\n    env:\n      MAPBOX_READ_TOKEN: ${{ secrets.MAPBOX_READ_TOKEN }}\n    run: bash ./my-first-app/prep-mapbox.sh\n  \n
\n\n\n`file: ./my-first-app/prep-mapbox.sh`\n\n
\n  \n  #!/usr/bin/env bash\n  \n  # WARN: DO NOT use tee here (it prints to console)\n  {\n    echo \"machine api.mapbox.com\"\n    echo \"login mapbox\"\n    echo \"password ${MAPBOX_READ_TOKEN}\"\n  } >> ~/.netrc\n  chmod 0600 ~/.netrc\n  \n
\n\n#### ADR Links\n- [GHA (Billing)](https://docs.github.com/en/billing/managing-billing-for-github-actions/about-billing-for-github-actions)\n- [Bitrise](https://bitrise.io/)\n- [CodeMagic](https://codemagic.io/)\n- [YouTube video showing GHA setup for Android](https://www.youtube.com/watch?v=_uRbEyBa9q0)\n- [Medium article showing GHA setup for Android](https://medium.com/scaleuptech/how-to-make-react-native-builds-with-github-actions-8d0203801eff)\n- [Article discussing how build uploads can be done](https://www.obytes.com/blog/react-native-ci-cd-github-action)","meta":{"title":"Replacing App Center with GitHub Actions","description":"App Center is closing up shop on March 31st, 2025. So what's the plan for building mobile apps at Vandebron?","createdAt":"Fri Feb 21 2025 01:00:00 GMT+0100 (Central European Standard Time)","coverImage":"images/replacing-app-center-building-a-phone.jpg","tags":["React Native","App Center","GHA","GitHub Actions"],"author":"John Fisher & Arnav Mundkur","slug":"blog/replacing-app-center","formattedDate":"21 februari 2025","date":"Fri Feb 21 2025 01:00:00 GMT+0100 (Central European Standard Time)"}}},"__N_SSG":true} \ No newline at end of file diff --git a/_next/data/3bqwlGhZxYXJfWdGp7YNO/blog/salesforce-camunda-bpm-migration.json b/_next/data/OOMgl9sdO92b_IXfcvhV-/blog/salesforce-camunda-bpm-migration.json similarity index 100% rename from _next/data/3bqwlGhZxYXJfWdGp7YNO/blog/salesforce-camunda-bpm-migration.json rename to _next/data/OOMgl9sdO92b_IXfcvhV-/blog/salesforce-camunda-bpm-migration.json diff --git a/_next/data/3bqwlGhZxYXJfWdGp7YNO/blog/spin-up-kubernetes-on-macbook.json b/_next/data/OOMgl9sdO92b_IXfcvhV-/blog/spin-up-kubernetes-on-macbook.json similarity index 100% rename from _next/data/3bqwlGhZxYXJfWdGp7YNO/blog/spin-up-kubernetes-on-macbook.json rename to _next/data/OOMgl9sdO92b_IXfcvhV-/blog/spin-up-kubernetes-on-macbook.json diff --git a/_next/data/3bqwlGhZxYXJfWdGp7YNO/blog/sustainable-tech-hardware.json b/_next/data/OOMgl9sdO92b_IXfcvhV-/blog/sustainable-tech-hardware.json similarity index 100% rename from _next/data/3bqwlGhZxYXJfWdGp7YNO/blog/sustainable-tech-hardware.json rename to _next/data/OOMgl9sdO92b_IXfcvhV-/blog/sustainable-tech-hardware.json diff --git a/_next/data/3bqwlGhZxYXJfWdGp7YNO/blog/the-difference-between-a-component-library-and-a-design-system.json b/_next/data/OOMgl9sdO92b_IXfcvhV-/blog/the-difference-between-a-component-library-and-a-design-system.json similarity index 100% rename from _next/data/3bqwlGhZxYXJfWdGp7YNO/blog/the-difference-between-a-component-library-and-a-design-system.json rename to _next/data/OOMgl9sdO92b_IXfcvhV-/blog/the-difference-between-a-component-library-and-a-design-system.json diff --git a/_next/data/3bqwlGhZxYXJfWdGp7YNO/blog/vandebron-the-video-game.json b/_next/data/OOMgl9sdO92b_IXfcvhV-/blog/vandebron-the-video-game.json similarity index 100% rename from _next/data/3bqwlGhZxYXJfWdGp7YNO/blog/vandebron-the-video-game.json rename to _next/data/OOMgl9sdO92b_IXfcvhV-/blog/vandebron-the-video-game.json diff --git a/_next/data/3bqwlGhZxYXJfWdGp7YNO/blog/when-not-to-build-a-reusable-component-library.json b/_next/data/OOMgl9sdO92b_IXfcvhV-/blog/when-not-to-build-a-reusable-component-library.json similarity index 100% rename from _next/data/3bqwlGhZxYXJfWdGp7YNO/blog/when-not-to-build-a-reusable-component-library.json rename to _next/data/OOMgl9sdO92b_IXfcvhV-/blog/when-not-to-build-a-reusable-component-library.json diff --git a/_next/data/3bqwlGhZxYXJfWdGp7YNO/greentech-hackathon.json b/_next/data/OOMgl9sdO92b_IXfcvhV-/greentech-hackathon.json similarity index 100% rename from _next/data/3bqwlGhZxYXJfWdGp7YNO/greentech-hackathon.json rename to _next/data/OOMgl9sdO92b_IXfcvhV-/greentech-hackathon.json diff --git a/_next/data/OOMgl9sdO92b_IXfcvhV-/index.json b/_next/data/OOMgl9sdO92b_IXfcvhV-/index.json new file mode 100644 index 000000000..e2baaba67 --- /dev/null +++ b/_next/data/OOMgl9sdO92b_IXfcvhV-/index.json @@ -0,0 +1 @@ +{"pageProps":{"posts":[{"content":"\n## Why GHA?\nThis seems like a lot of work... Why not go with an off-the-shelf solution from something like Bitrise or Codemagic? Fair question but not the main point of this post. To look into our reasoning check out the [Benefits](#benefits) section!\n\n## Some notes before we get started\n- We use this workflow to build two apps, one of which can be white-labeled, so we have additional `app` and `white-label-release` inputs which makes things a bit trickier. You might not need that so feel free to trim stuff down and make it your own! But for us, we why we have the `env-variable-prep-android.sh` which normalizes the variable names used for secrets so those secrets and build file names, etc. can be easily used. If you just have a single app you probably don't need this script.\n- The code below is only for the build process. Though the Architecture Decision Record (ADR) considered how this would affect future decisions about artifact upload automation and rolling out releases for internal testing, nothing about that is automated here.\n- There's a lot of code here. We removed version numbers to make sure we're not giving out too much information. If you see something like `@vx.x.x`, you'll have to fill those in with the versions that are needed for your app/pipeline.\n\n## Implementation\n#### Part 1 - Basic Setup\nAdd the files below. Nothing in this setup should effect App Center but it is good to check in your changes to a branch and test those against the regular App Center build flow. The main point of the steps in this section is to just get a basic action, with inputs, set up and running. Full implementation is further down. The `env-variable-prep-android.sh` and `env-variable-prep-ios.sh` files created variables based off the input parameters passed in so they can be used in a reusable and consistent manner later on. The `env-file-prep.sh` file is responsible for creating a `.env` file with values from whichever environment you're using. Though it's nice to add the `Fastlane` and `Gymfile` files, those won't be used until Step 4 when the rest of the pipeline is fleshed out.\n\n##### Android\n\n `file: .github/workflows/mobile-apps-build-android.yaml`\n\n \n ---\n name: Mobile App Build for Android\n run-name: \"Build: Android, ${{ inputs.app }}, ${{ inputs.environment }}, white-label-release=${{ inputs.white-label-release }}\"\n on:\n workflow_dispatch:\n inputs:\n app:\n description: 'App'\n required: true\n type: choice\n options:\n - my-first-app\n - my-second-app\n environment:\n description: 'Environment'\n required: true\n type: choice\n options:\n - test\n - acceptance\n - production\n white-label-release:\n description: 'White-labeled Release?'\n type: boolean\n default: false\n jobs:\n build:\n name: Build app for android\n runs-on: ubuntu-latest\n environment: ${{ inputs.environment }}\n steps:\n - name: Checkout ${{ github.repository }}\n uses: actions/checkout@vx.x.x\n - name: Echo Input\n env:\n APP: ${{ inputs.app }}\n WHITE_LABEL_RELEASE: ${{ inputs.white-label-release }}\n ENVIRONMENT: ${{ inputs.environment }}\n run: |\n echo \"APP=$APP\"\n echo \"WHITE_LABEL_RELEASE=$WHITE_LABEL_RELEASE\"\n echo \"ENVIRONMENT=$ENVIRONMENT\"\n \n\n `file: env-variable-prep-android.sh`\n\n \n #!/bin/bash\n ARTIFACT_NAME=\"mobile-my-first-app-${ENVIRONMENT}-release\"\n FASTLANE_ANDROID_FLAVOR=\"${ENVIRONMENT}\"\n {\n echo \"artifact-name=${ARTIFACT_NAME}\"\n echo \"fastlane-android-flavor=${FASTLANE_ANDROID_FLAVOR}\"\n } | tee -a \"$GITHUB_OUTPUT\"\n # Secrets should not get sent out over tee command (which also prints it to console)\n {\n echo \"android-key-alias=my-first-app\"\n echo \"android-keystore-file=../keystores/my-first-app.jks\"\n echo \"android-keystore-pass=${ANDROID_KEY_PASSWORD}\"\n echo \"android-store-pass=${ANDROID_STORE_PASSWORD}\"\n } >> \"$GITHUB_OUTPUT\"\n \n\n `file: ./fastlane/Fastfile`\n\n \n opt_out_usage\n platform :android do\n desc 'Build app for Android'\n lane :build do\n build_android_app(\n task: 'bundle',\n flavor: ENV['FASTLANE_ANDROID_FLAVOR'],\n build_type: 'Release',\n project_dir: 'android/',\n print_command: true,\n print_command_output: true,\n )\n end\n end\n \n\n##### iOS\n\n `file: .github/workflows/mobile-apps-build-ios.yaml`\n\n \n ---\n name: Mobile App Build for iOS\n run-name: \"Build: iOS, ${{ inputs.app }}, ${{ inputs.environment }}, white-label-release=${{ inputs.white-label-release }}\"\n on:\n workflow_dispatch:\n inputs:\n app:\n description: 'App'\n required: true\n type: choice\n options:\n - my-first-app\n - my-second-app\n environment:\n description: 'Environment'\n required: true\n type: choice\n options:\n - test\n - acceptance\n - production\n white-label-release:\n description: 'White-labeled Release?'\n type: boolean\n default: false\n jobs:\n build:\n name: Build app for iOS\n runs-on: macos-latest\n environment: ${{ inputs.environment }}\n steps:\n - name: Checkout ${{ github.repository }}\n uses: actions/checkout@vx.x.x\n - name: Echo Input\n env:\n APP: ${{ inputs.app }}\n WHITE_LABEL_RELEASE: ${{ inputs.white-label-release }}\n ENVIRONMENT: ${{ inputs.environment }}\n run: |\n echo \"APP=$APP\"\n echo \"WHITE_LABEL_RELEASE=$WHITE_LABEL_RELEASE\"\n echo \"ENVIRONMENT=$ENVIRONMENT\"\n \n\n `file: env-variable-prep-ios.sh`\n\n \n #!/bin/bash\n # Secrets should not get sent out over tee command (which also prints it to console)\n {\n echo \"ios-mobile-provisioning-profile=${IOS_MOBILE_PROVISIONING_PROFILE}\"\n } >> \"$GITHUB_OUTPUT\"\n \n\n `file: ./fastlane/Gymfile`\n\n \n scheme(ENV['SCHEME'])\n workspace(\"ios/my-first-app.xcworkspace\")\n export_options(\"ios/exportOptions.plist\")\n output_directory(\"ios/build\")\n output_name(ENV['SCHEME'])\n \n\n ##### Both Android & iOS\n\n `file: env-file-prep.sh`\n\n \n #!/usr/bin/env bash\n #####################################################\n # Creates an .env file for use in react-native-config\n # This script should be run from the /mobile folder\n #####################################################\n if [ \"${ENVIRONMENT}\" != \"test\" ] && [ \"${ENVIRONMENT}\" != \"acceptance\" ] && [ \"${ENVIRONMENT}\" != \"production\" ]; then\n echo \"ENVIRONMENT is not set, using 'production' as default.\"\n ENVIRONMENT=production\n fi\n echo \"Copying 'my-first-app/.env.${ENVIRONMENT}' to 'my-first-app/.env'...\"\n cp \"my-first-app/.env.${ENVIRONMENT}\" \"my-first-app/.env\"\n echo \"Success!\"\n \n\n#### Part 2 - Testing your Workflow Locally\nWARNING: GitHub Actions doesn't let you run a `workflow_dispatch` action until it has been merged into the main branch so you'll want to get the basic setup above in place before you start tinkering with application logic or things that could effect App Center. Also note that while `act` is helpful for getting the basics in place, it's unlikely you'll be able to test the complete process locally because, at least for us a) Android pipeline crashes halfway through the `Build App` step with an error of `Gradle build daemon disappeared unexpectedly (it may have been killed or may have crashed)`, and b) iOS tries to install a fresh copy of Xcode\n\n 1. Follow installation instructions on [their User Guide](https://nektosact.com/installation/index.html)\n 2. Create a `~/.actrc` file that looks like this\n\n
\n        \n        --container-architecture linux/amd64\n        --secret GITHUB_TOKEN=$GITHUB_TOKEN\n        \n      
\n \n 3. Get your `$GITHUB_TOKEN` env variable in place\n\n 1. Install [gh, the GitHub cli](https://cli.github.com/)\n 2. Modify shells (zsh shown below)\n\n
\n            \n            export GITHUB_TOKEN=\"$(gh auth token)\"\n            \n          
\n\n 3. Close and re-open your terminal. Test to make sure you can see your `GITHUB_TOKEN` envrionment variable\n\n 4. Set up a temporary local file for secrets. WARNING: Once you’re done, remember to delete the file so it’s not hanging around on your system!! (or just don’t create it in the first place unless you really need it)\n\n `file: .secrets`\n\n
\n        \n      ANDROID_STORE_PASSWORD=\"someSecr3ts\"\n      ANDROID_KEY_PASSWORD=\"YouWantQuotesBecause*s_etc.WillScrewYouUp\"\n      MAPBOX_READ_TOKEN=shhhhh.Its.asecret\n        \n      
\n\n 5. Set up a temporary local file for your workflow trigger inputs.\n\n `file: app-input.json`\n\n
\n        \n      {\n        \"action\": \"workflow_dispatch\",\n        \"inputs\": {\n          \"app\": \"my-first-app\",\n          \"environment\": \"test\",\n          \"white-label-release\": false\n        }\n      }\n        \n      
\n\n 6. Run your workflow like this. As far as I know, you can only run the iOS workflow locally if you're on a mac. To do that you'll need to provide an additional parameter: `-P macos-latest=-self-hosted`\n\n **Android**\n\n \n act \\\n --workflows .github/workflows/mobile-apps-build-android.yaml \\\n --eventpath=\"${HOME}/Documents/IT/GitHub Actions/Mobile Apps/app-input.json\" \\\n --secret-file=\"${HOME}/Documents/IT/GitHub Actions/Mobile Apps/.secrets\"\n \n\n **iOS**\n\n \n act -P macos-latest=-self-hosted \\\n --workflows .github/workflows/mobile-apps-build-ios.yaml \\\n --eventpath=\"${HOME}/Documents/IT/GitHub Actions/Mobile Apps/app-input.json\" \\\n --secret-file=\"${HOME}/Documents/IT/GitHub Actions/Mobile Apps/.secrets\"\n \n\n#### Part 3 - Testing Things out from GHA\n\n1. Once you're happy with your changes locally, send a PR & merge them in! Remember this is only the basic setup to get the action avaible from the GitHub Actions interface so maybe leave a comment in the PR notifying your teammates about how they should expect a follow-up PR\n\n2. Go to the \"Actions\" tab at the top of your GitHub repo. You should now see your actions for building iOS and Android on the left. Since it's a `workflow_dispatch` action you'll trigger the actions manually.\n\n
\n \"run-workflow\"/\n
\n\n#### Part 4 - Implement the Full Workflow for iOS and Android\nAdjust the files below. This is where you may end up needing to modify things that affect your App Center build. Try to keep them to a mimimum so you can still use App Center for builds should anything not work as expected. [Fastlane](https://fastlane.tools/) is a tool that helps with automating build and release processes for mobile apps. You can think of it as a toolbox of easy-to-use wrapper functions around `gradle` for Android, and `xcodebuild` for iOS.\n\n\n##### Android\n \n `file: .github/workflows/mobile-apps-build-android.yaml`\n\n \n ---\n name: Mobile App Build for Android\n run-name: \"Build: android, ${{ inputs.app }}, ${{ inputs.environment }}, white-label-release=${{ inputs.white-label-release }}\"\n on:\n workflow_dispatch:\n inputs:\n app:\n description: 'App'\n required: true\n type: choice\n options:\n - my-first-app\n - my-second-app\n environment:\n description: 'Environment'\n required: true\n type: choice\n options:\n - test\n - acceptance\n - production\n white-label-release:\n description: 'White-labeled Release?'\n type: boolean\n default: false\n jobs:\n build:\n name: Build app for android\n runs-on: ubuntu-latest\n environment: ${{ inputs.environment }}\n steps:\n - name: Checkout ${{ github.repository }}\n uses: actions/checkout@vx.x.x\n - name: Prep Env Variables\n id: prep-env-variables\n working-directory: mobile\n env:\n APP: ${{ inputs.app }} # my-first-app | my-second-app\n ENVIRONMENT: ${{ inputs.environment }} # production | test | acceptance\n BRAND: ${{ inputs.white-label-release && 'other-company' || 'my-company' }}\n APP_1_ANDROID_KEY_PASSWORD_VANDEBRON: ${{ secrets.APP_1_ANDROID_KEY_PASSWORD_VANDEBRON }}\n APP_1_ANDROID_STORE_PASSWORD_VANDEBRON: ${{ secrets.APP_1_ANDROID_STORE_PASSWORD_VANDEBRON }}\n APP_1_ANDROID_KEY_PASSWORD_WHITE_LABEL: ${{ secrets.APP_1_ANDROID_KEY_PASSWORD_WHITE_LABEL }}\n APP_1_ANDROID_STORE_PASSWORD_WHITE_LABEL: ${{ secrets.APP_1_ANDROID_STORE_PASSWORD_WHITE_LABEL }}\n APP_2_ANDROID_KEY_PASSWORD_VANDEBRON: ${{ secrets.APP_2_ANDROID_KEY_PASSWORD_VANDEBRON }}\n APP_2_ANDROID_STORE_PASSWORD_VANDEBRON: ${{ secrets.APP_2_ANDROID_STORE_PASSWORD_VANDEBRON }}\n run: bash ./env-variable-prep-android.sh\n - name: Create .env file\n working-directory: mobile\n env:\n APP: ${{ inputs.app }}\n BRAND: ${{ steps.prep-env-variables.outputs.inferred-brand }}\n ENVIRONMENT: ${{inputs.environment}}\n run: bash ./env-file-prep.sh\n - name: Enable Corepack\n run: corepack enable\n - name: Setup NodeJS\n id: setup-node\n uses: actions/setup-node@vx.x.x\n with:\n node-version: 18.x\n registry-url: https://registry.npmjs.org\n cache: 'yarn'\n cache-dependency-path: mobile/${{ inputs.app }}/yarn.lock\n - name: Setup Java\n uses: actions/setup-java@vx.x.x\n with:\n distribution: 'temurin'\n java-version: '20'\n cache: 'gradle'\n - name: Setup Android SDK # sadly no caching capabilities here\n uses: android-actions/setup-android@vx.x.x\n with:\n log-accepted-android-sdk-licenses: false\n packages: 'tools' # Default is 'tools platform-tools but we don't need platform-tools for packaging'\n - name: Set up ruby env # Fastlane is a \"Ruby gem\"\n uses: ruby/setup-ruby@vx\n with:\n ruby-version: '3.3.0' # Changing this to 3.3 will give you \"Your Ruby version is 3.3.5, but your Gemfile specified 3.3.0\"\n bundler-cache: true\n - name: Install Gem Bundler\n working-directory: mobile/${{ inputs.app }}\n run: |\n gem install bundler\n bundle install --quiet\n # Install Dependencies\n - name: Yarn Install\n working-directory: mobile/${{ inputs.app }}\n run: yarn install --immutable\n # Build\n - name: Build App\n run: bundle exec fastlane android build\n working-directory: mobile/${{ inputs.app }}\n env:\n ENVIRONMENT: ${{ inputs.environment }}\n FASTLANE_ENV_INFERRED_BRAND: ${{ steps.prep-env-variables.outputs.inferred-brand }}\n ANDROID_KEYSTORE_FILE: ${{ steps.prep-env-variables.outputs.android-keystore-file }}\n ANDROID_KEY_ALIAS: ${{ steps.prep-env-variables.outputs.android-key-alias }}\n ANDROID_STORE_PASSWORD: ${{ steps.prep-env-variables.outputs.android-store-pass }}\n ANDROID_KEY_PASSWORD: ${{ steps.prep-env-variables.outputs.android-keystore-pass }}\n FASTLANE_ANDROID_FLAVOR: ${{ steps.prep-env-variables.outputs.fastlane-android-flavor }}\n # Upload\n - name: Upload application\n uses: actions/upload-artifact@vx\n with:\n name: ${{steps.prep-env-variables.outputs.artifact-name}}\n path: \"mobile/${{ inputs.app }}/android/app/build/outputs/bundle/${{ steps.prep-env-variables.outputs.fastlane-android-flavor }}Release/app-${{ steps.prep-env-variables.outputs.fastlane-android-flavor }}-release.aab\"\n retention-days: 30\n \n\n ##### iOS\n \n `file: .github/workflows/mobile-apps-build-ios.yaml`\n\n \n ---\n name: Mobile App Build for iOS\n run-name: \"Build: iOS, ${{ inputs.app }}, ${{ inputs.environment }}, white-label-release=${{ inputs.white-label-release }}\"\n on:\n workflow_dispatch:\n inputs:\n app:\n description: 'App'\n required: true\n type: choice\n options:\n - my-first-app\n - my-second-app\n environment:\n description: 'Environment'\n required: true\n type: choice\n options:\n - test\n - acceptance\n - production\n white-label-release:\n description: 'White-labeled Release?'\n type: boolean\n default: false\n jobs:\n build:\n name: Build app for iOS\n runs-on: macos-latest\n environment: ${{ inputs.environment }}\n steps:\n - name: Checkout ${{ github.repository }}\n uses: actions/checkout@vx.x.x\n - name: Prep Env Variables\n id: prep-env-variables\n working-directory: mobile\n env:\n APP: ${{ inputs.app }} # my-first-app | my-second-app\n BRAND: ${{ inputs.white-label-release && 'other-company' || 'my-company' }}\n ENVIRONMENT: ${{ inputs.environment }} # production | test | acceptance\n APP_1_MY_COMPANY_IOS_MOBILE_PROVISIONING_PROFILE: ${{ secrets.APP_1_MY_COMPANY_IOS_MOBILE_PROVISIONING_PROFILE }}\n APP_1_OTHER_COMPANY_IOS_MOBILE_PROVISIONING_PROFILE: ${{ secrets.APP_1_OTHER_COMPANY_IOS_MOBILE_PROVISIONING_PROFILE }}\n IOS_BUILD_CERTIFICATE_P12_OTHER_COMPANY: ${{ secrets.IOS_BUILD_CERTIFICATE_P12_OTHER_COMPANY }}\n IOS_BUILD_CERTIFICATE_P12_PASSWORD_OTHER_COMPANY: ${{ secrets.IOS_BUILD_CERTIFICATE_P12_PASSWORD_OTHER_COMPANY }}\n APP_2_IOS_MOBILE_PROVISIONING_PROFILE: ${{ secrets.APP_2_IOS_MOBILE_PROVISIONING_PROFILE }}\n run: bash ./env-variable-prep-ios.sh\n - name: Create .env file\n working-directory: mobile\n env:\n APP: ${{ inputs.app }} # my-first-app | my-second-app\n BRAND: ${{ steps.prep-env-variables.outputs.inferred-brand }}\n ENVIRONMENT: ${{inputs.environment}}\n run: bash ./env-file-prep.sh\n - name: Import Build Certificate from Secrets\n uses: apple-actions/import-codesign-certs@vx\n with:\n p12-file-base64: ${{ steps.prep-env-variables.outputs.ios-build-certificate-p12 }}\n p12-password: ${{ steps.prep-env-variables.outputs.ios-build-certificate-p12-password }}\n - name: Import Mobile Provisioning Profile\n uses: nickwph/apple-provisioning-profile-action@vx.x.x\n with:\n profile-base64: ${{ steps.prep-env-variables.outputs.ios-mobile-provisioning-profile }}\n - name: Setup NodeJS\n id: setup-node\n uses: actions/setup-node@vx.x.x\n with:\n node-version: 20.x\n # Mapbox v10 ships with bitcode on XCode 16 which is not allowed by the App Store\n # https://github.com/mapbox/mapbox-maps-ios/issues/2233\n # Once this issue is fixed we can upgrade to 16\n - name: Install XCode\n uses: maxim-lobanov/setup-xcode@vx.x.x\n with:\n xcode-version: 15.4\n - name: Install Ruby\n uses: ruby/setup-ruby@vx.x.x\n with:\n ruby-version: 3.3.0\n - name: Install Bundler\n run: gem install bundler\n # TODO: Cache node_modules similarly to how Pods are cached (compare hash of yarn.lock)\n - name: Yarn Install\n working-directory: mobile/${{ inputs.app }}\n run: yarn install --immutable\n # TODO: Cache Gems similarly to how Pods are cached (compare hash of Gemfile.lock)\n - name: Install Gems\n run: bundle install\n working-directory: mobile/${{ inputs.app }}\n - name: Cache CocoaPods dependencies\n uses: actions/cache@vx\n env:\n FILES_GLOB: mobile/${{ inputs.app }}/ios/Podfile.lock\n with:\n path: |\n mobile/${{ inputs.app }}/ios/Pods\n key: ${{ runner.os }}-pods-${{ hashFiles(env.FILES_GLOB) }}\n restore-keys: |\n ${{ runner.os }}-pods-\n - name: Install Pods\n working-directory: mobile/${{ inputs.app }}/ios\n run: bundle exec pod install\n - name: Build iOS App\n env:\n APP: ${{ inputs.app }}\n SCHEME: ${{ steps.prep-env-variables.outputs.ios-scheme }} # otherCompanyFirstAppProduction, myCompanySecondAppTest\n BRAND: ${{ steps.prep-env-variables.outputs.inferred-brand }}\n TARGET: ${{ steps.prep-env-variables.outputs.ios-target }}\n run: bundle exec fastlane gym\n working-directory: mobile/${{ inputs.app }}\n # Upload\n - name: Upload application\n uses: actions/upload-artifact@vx\n with:\n name: ${{steps.prep-env-variables.outputs.ios-scheme}}\n path: \"mobile/${{ inputs.app }}/ios/build/${{ steps.prep-env-variables.outputs.ios-scheme }}.ipa\"\n retention-days: 30\n overwrite: true\n if-no-files-found: error\n \n\n#### Part 5 - Troubleshooting\nMore than likely these won't work the first time. Time to go back and adjust. Note that since the workflow is now in the main branch you can test your workflow changes on a feature branch. Just select your feature branch in the \"Branch\" dropdown shown above.\n\n## Other Things to Note\n\n
    \n
  • App Center gives you the ability to write `appcenter-pre-build.sh` and `appcenter-post-build.sh` scripts. The `env-file-prep.sh` is basically that same thing, just without the context of appcenter.
  • \n
  • One of our apps is using MapBox which needs a `.netrc` in the root directory. If you need something similar, you can add a step to your action by adding the code shown in the the \"optional mapbox\" part + the `./my-first-app/prep-mapbox.sh` in the Appendix section below.
  • \n
  • After our work on this was done (and only as I'm writing this article) we realized we can use the `sparse-checkout` option from `actions/checkout` to only check out the needed files. This should speed up our workflow runtime even more!
  • \n
  • It may be helpful for you to add the build and/or version number onto the artifact. We haven't done that but it's something we're interested in adding for the future.
  • \n
  • Troubleshooting certificates for iOS was a HUGE pain in the butt. I don't have any good advice here other than to realize (and communicate with your POs) that this part may take a while.
  • \n
\n\n## Benefits\n- It regularly took over 50 minutes for our mobile app to build in App Center. Part of that could have very likely be improved by adjusting App Center configurations & how we store and bundle app assets but after migrating our builds to GitHub Actions our app build times are now down to 22 minutes - More than twice as fast!\n- All the rest of the software at Vandebron (backend services in Scala and Python and frontend applications in Typescript + React) is built using GitHub Actions. This move brings mobile apps in line with all other software. This move to GHA for mobile builds has led to several of our mobile devs getting our hands dirty in GHA, which is great because we can now play a role in the larger CICD discussions.\n- We have full control over our CICD pipeline for mobile builds. In the future we can integrate more Fastlane commands to further automate the release process.\n- We did a full ADR (shown below) which initiated the work here. Links referenced in image are in Appendix below.\n ![replace-app-center-adr](../images/replacing-app-center-adr.png)\n\n\n## Appendix\n\n#### Mapbox Integration\n\n`file: .github/workflows/mobile-apps-build-android.yaml and .github/workflows/mobile-apps-build-ios.yaml (optional mapbox)`\n\n
\n  \n  - name: Create Mapbox .netrc file (my-first-app only)\n    if: ${{ inputs.app == 'my-first-app' }}\n    working-directory: mobile\n    env:\n      MAPBOX_READ_TOKEN: ${{ secrets.MAPBOX_READ_TOKEN }}\n    run: bash ./my-first-app/prep-mapbox.sh\n  \n
\n\n\n`file: ./my-first-app/prep-mapbox.sh`\n\n
\n  \n  #!/usr/bin/env bash\n  \n  # WARN: DO NOT use tee here (it prints to console)\n  {\n    echo \"machine api.mapbox.com\"\n    echo \"login mapbox\"\n    echo \"password ${MAPBOX_READ_TOKEN}\"\n  } >> ~/.netrc\n  chmod 0600 ~/.netrc\n  \n
\n\n#### ADR Links\n- [GHA (Billing)](https://docs.github.com/en/billing/managing-billing-for-github-actions/about-billing-for-github-actions)\n- [Bitrise](https://bitrise.io/)\n- [CodeMagic](https://codemagic.io/)\n- [YouTube video showing GHA setup for Android](https://www.youtube.com/watch?v=_uRbEyBa9q0)\n- [Medium article showing GHA setup for Android](https://medium.com/scaleuptech/how-to-make-react-native-builds-with-github-actions-8d0203801eff)\n- [Article discussing how build uploads can be done](https://www.obytes.com/blog/react-native-ci-cd-github-action)","meta":{"title":"Replacing App Center with GitHub Actions","description":"App Center is closing up shop on March 31st, 2025. So what's the plan for building mobile apps at Vandebron?","createdAt":"Fri Feb 21 2025 01:00:00 GMT+0100 (Central European Standard Time)","coverImage":"images/replacing-app-center-building-a-phone.jpg","tags":["React Native","App Center","GHA","GitHub Actions"],"author":"John Fisher & Arnav Mundkur","slug":"blog/replacing-app-center","formattedDate":"21 februari 2025","date":"Fri Feb 21 2025 01:00:00 GMT+0100 (Central European Standard Time)"}},{"content":"\n# Grid City: A Hackathon Journey into the Energy Transition by Vandebron\n\nDuring the last couple of hackathons, we set out to gamify one of the most pressing challenges of our time, the transition to green energy.\nA problem our team, VPP [Virtual Power Plant], deals with on a daily basis.\nWhat emerged was an interactive game designed to educate players about the complexities of energy grid management in a fun and manageable way,\nthough debatable if it is fun or well-balanced. It was a hackathon project after all.\n\n\n\nLet’s dive into the vision, mechanics, and what we hope players take away from this experience.\n\n### Vision: Educate Through Play\nOur goal was to create more than just a game. We envisioned a tool that serves as an onboarding experience,\nnot just for our colleagues, but also anyone interested in the energy transition.\n\nTo realize this vision we chose to go with Godot as our game engine of choice.\nAn open-source game engine that is a super fun and fantastic tool that allowed us to quickly prototype and iterate on our ideas and feedback.\n\n### The Core Gameplay Loop: Keeping the Grid Balanced\nIn this game, your primary goal is to keep the energy grid frequency within the \"goldilocks zone\", i.e. not too much power production, not too little.\nThe longer you can maintain this balance, the better!\n\n#### Key Concepts:\n- **Keeping within the goldilocks zone:** energy production must match energy demand. Fall outside the goldilocks zone, and the grid becomes unstable. If it is unstable for too long, then it's game over.\n- **Keeping up with demand:** Houses are automatically built over time, mimicking real-life construction. It’s up to the player to meet this increasing demand by manually adding renewable energy assets, like wind turbines, solar panels, and batteries.\n- **Forecasting:** Players can use weather forecasts to anticipate and plan for energy production challenges. Too much wind? Better disable some wind turbines for the time being.\n- **Curtailment:** Too much energy? Players must decide when to turn off assets to avoid overproduction. This introduces the concept of curtailment and highlights the work often required in grid management, due to not being able to store the excess energy.\n- **The Main Goal:** A 100% Green Energy Grid, 100% of the time.\n\nWhat does success look like in the game? Maintaining the grid with 100% green power for as long as possible, via strategically managing energy production and curtailment to ensure sustainability.\nPlayers experience the dual challenge of meeting growing energy demands and avoiding excess production, a dilemma central to real-world energy grids.\n\n\n\n### Final Thoughts\n\nWhile we did meet most of these goals, we definitely see room for improvement.\nFor instance, the city building aspect of the game does not exactly match what we want to teach the player. A Virtual Power Plant mainly balances the grid through smart curtailment.\nIt doesn't involve building new renewables. So we considered removing the building mechanic from the game, but we were already to deep into development.\n\nTo work around this design issue, we toyed with the idea of having a coal plant in the game, amongst others.\nThe goal was to shut down the coal plant before it fully pollutes the planet.\nAfter shutdown, players face the challenge of balancing the grid reliably using just renewable energy.\nUnfortunately, we ran out of time before we could fine-tune this part of the game.\n\n\n\n*Here's an early prototype of the coal plant that didn't make it in to the game.*\n\nAt some point, though, you have to wrap up the hackathon. So we polished what we had and declared the game \"done\".\nWhether you’re a gamer, an energy enthusiast, or someone entirely new to the topic, we hope this game sparks your interest in the energy transition :)\n\nYou can play the game right from your browser [here](https://djvisser.itch.io/grid-city)!\nIf you want to take a look at the (hackathon-quality) code, check out our [public repo](https://github.com/Vandebron/vandebron_game).","meta":{"title":"Grid City: A Hackathon Journey into the Energy Transition by Vandebron","description":"A journey into the energy transition through the lens of a video game","createdAt":"Mon Jan 27 2025 01:00:00 GMT+0100 (Central European Standard Time)","coverImage":"images/game-start-screen.png","tags":["godot","energy transition","gaming"],"author":"Dick Visser & Tomás Phelan","slug":"blog/vandebron-the-video-game","formattedDate":"27 januari 2025","date":"Mon Jan 27 2025 01:00:00 GMT+0100 (Central European Standard Time)"}},{"content":"\n## The Background\n\nWe at Vandebron have a mission to get the news out about [our good work](https://vandebron.nl/missie), and we understand that [Server Side Rendering (SSR)](https://web.dev/articles/rendering-on-the-web#server-side) can really help with that. Among other things, it provides an easy way for search engines to discover our pages, so you, our (future?!) customer, can find them more easily. That means more people choosing green energy, and ultimately, a cleaner environment! 🎉\n\n## We rolled our own\n\nThe year was 2017, Covid was still a word that sounded more like a bird than anything else... The world was heating up and Vandebron was 4 years into its mission to bring 100% renewable energy throughout all of the Netherlands.\n\nAs far as web technologies are concerned, 4 years was ages ago. It was a time when NextJS was less than a year old, and Remix was still several years from coming out. But we needed a way to deliver that high-quality content to all of you. So, the innovators that we were, we decided to build our own SSR framework. In short, we wanted pizza, but there were no pizza shops in town... So we made our own!\n\nIt's been great but not without issue...\n\n\n \n \n \n \n
\"ugly-window-mock\"\"remix-migration-mocking-a-window\"
\n\n\n\n## A Short Note: Why Server Side Rendering\n\nYou might not be satisfied with the short explanation of why we picked an SSR framework in the first place. This article isn't really about that - if you're interested in more analysis on when and where to choose an SSR framework, check out these excellent articles from Splunk:\n* [The User Experience (UX) Benefits of SSR](https://www.splunk.com/en_us/blog/learn/server-side-rendering-ssr.html)\n* [The SEO Benefits of SSR](https://www.splunk.com/en_us/blog/learn/server-side-rendering-ssr.html)\n\n## Decisions Made the Right Way - A Comparison\n\nNowadays, there are better, industry standard technologies available! I.e. pizza shops have opened nearby!! Let's find a good one. Of course, you don't want to just go to any spot. Especially if there's more than one shop in town - you'd be silly not to check which one is closest, and look at the menu. Which one has better reviews, is that one very angry customer just upset that there wasn't any anchovies in the vegan pizza shop? What were they expecting anyway?\n\"vegan-pizza-shop\"\n\nAt Vandebron we're a React shop, so we limited ourselves to just SSR frameworks supporting React. The choice of one framework over another is of crucial importance, so, as part of our analysis, we built a small part of our [vandebron.nl/blog](https://vandebron.nl/blog) page twice. Two of our engineers then presented these prototypes to our Front End Guild, and this discussion fed heavily into the Architecture Decision Record that we wrote comparing the results.\n\n\\* At Vandebron, Guilds are groups of engineers from disparate teams that are interested in a single domain: i.e. Backend, Frontend, IAM and Auth, etc. \n\nThe Background for the decision record states this:\n\n> _\"Our Frontend currently uses a custom-built, hard to maintain SSR solution, which we'd like to replace with a modern and standard library. Possible candidates are NextJS and Remix. The goal is to investigate which one suits our needs best.\"_\n\nYes, there are other options we could have considered but we wanted to stay with a tried-and-tested framework and one that was compatible with our existing React setup.\n![remix-migration-adr-options-considered.png](../images/remix-migration-adr-options-considered.png)\n\nAs you can see, the comparison between the two frameworks was very similar. In the end we favoured the simple, opinionated direction of Remix over that of the more full-featured but potentially complex setup of NextJS. Even though Remix has a smaller community, we attributed this mostly to the age of the framework and not the quality of the framework itself. Though the Positivity has gone down a bit (as listed in [the 2023 StateOfJS survey](https://2023.stateofjs.com/en-US/libraries/meta-frameworks/),) the decrease has been relatively minor and in line with most-other frameworks (notable exceptions for Astro and SvelteKit which have both seen big upticks in both Usage and Positivity)\n![State of JS Positivity](../images/remix-migration-sojs-framework-positivity.png)\nFinally, we noted that NextJS is tightly coupled with Vercel. At Vandebron we value platform independence and not getting tied to specific hosting providers or platforms. Remix gives us the independence we're looking for by providing a SSR framework without a potential to be tied into other solutions/platforms in the future.\n\nOutcome\n> _\"Most members favoured Remix’s focus on web standards and usage of standard libraries and were put off (a little) by NextJS’s uncertainty in development direction.\"_\n\n## So, How's it Going?\n\nThe migration effort is still underway but already we can report that it's going quite well - developers are excited to work on the new tech stack because it's seen as a developer-friendly platform and one of the two leading frameworks in the industry. In the words of one engineer: \"Dev experience has improved massively, it's fun, it's easy to work with\"\nHere are some of the things we still need to work on:\n- Our Docker image is quite large as it includes all the `node_modules`. We think we can clean this up a bit by using Yarn's Plug'n'Play (PnP) feature which should lead to faster image-build times and faster container startup times.\n- With our custom SSR solution, we use Redux Toolkit (RTK) and RTKQuery on the server... This is of course an anti pattern on the server, since server-side logic should be stateless. The Remix framework does already tries to be smart with it's loaders, so the benefits we might have gotten from RTK aren't needed there.\n- We feel the application we're migrating from is doing too much - it includes our marketing pages like the _Blog_ and _Mission_ pages we've been working on for the initial release, as well as the pages for our our signup and renewal process (become a Vandebron customer [here](https://vandebron.nl)!!!) This is a separate conversation, and ultimately one for the FE Guild, but the existing app's size and purpose is making the migration take longer than it should, and forcing us to put some routing rules in place to make sure the right parts of our old site are getting swapped out for the new.\n- Previously, many of the images and PDFs we used on our website were checked directly into the repo. Part of our migration to Remix made us realize we should be using a CMS for this. We are already integrated with a CMS, we just need to be making better use of it in some cases.\n- We haven't explored the Remix-specific linting rules yet. While we're confident in the existing React and TS lint rules we already have, it seems like configs like [@remix-run/eslint-config](https://www.npmjs.com/package/@remix-run/eslint-config) could be quite handy.\n","meta":{"title":"Choosing Remix as a Server-Side Rendering (SSR) Framework","description":"We had our own custom SSR framework. It was time to move on. Find out why we picked Remix over NextJS as the replacement!","createdAt":"Fri Oct 18 2024 02:00:00 GMT+0200 (Central European Summer Time)","coverImage":"images/remix-migration-remix-vs-nextjs.png","tags":["remix","ssr","typescript","react","nextjs","ADR"],"author":"John Fisher","slug":"blog/choosing-remix-as-an-ssr-framework","formattedDate":"18 oktober 2024","date":"Fri Oct 18 2024 02:00:00 GMT+0200 (Central European Summer Time)"}},{"content":"\n\n## Salesforce + FlowRunner golden age\n\nSince 2015, Vandebron has been using Salesforce. At the time, Salesforce for Vandebron, was like a Swiss Army knife - versatile, multifunctional, and seemingly capable of addressing most of the business requirements. It quickly became the central hub for various operations - it became a workspace for agents, a CTI platform, a platform to send service emails and much more. Over time, Salesforce evolved beyond just a customer relationship management tool for Vandebron. It became a full-fledged platform that managed customer-related processes, such as the Signup process, Renewal process, Meter Reading process, etc. \nTo support this transition, Vandebron developed a custom mechanism known as FlowRunner, which was designed to automate and execute these processes within Salesforce.\nInitially, FlowRunner seemed like the perfect solution. It was tailor-made to handle the increasingly complex workflows that Vandebron needed to manage. While it successfully managed to support Vandebron’s operations for several years, this system was not without its flaws. These issues, which will be discussed in detail later, eventually led to the need for a more robust and scalable solution. But for a time, FlowRunner did its job, enabling Vandebron to leverage Salesforce far beyond its original purpose.\n\n\n## Salesforce + FlowRunner solution problems\n\n\nBroadly, the problems can be divided into two categories: technical and organizational.\n\nTechnical Problems: \n- Async Transactions Daily Limit. 250000 async transactions per 24 hours. For bulk processes, it is often not enough. We need to watch it carefully and adjust settings to avoid disaster.\n- Number of concurrent async jobs. Up to 5 async jobs simultaneously. \n- The FlowRunner mechanism in Salesforce creates lots of data. It uses ~ 25% of our storage. Data is expensive in Salesforce. \n- The Salesforce platform is not equipped for a custom BPM solution.This makes the Vandebron Salesforce codebase too large to be used with Salesforce DX (Salesforce CI/CD product). Furthermore, it forces us to maintain a lot of custom code that is available on the market.\n\nOrganizational Problems:\n- Centralization of Customer-Related Processes: With most customer-related processes embedded in Salesforce, any changes to these processes require intervention from the Salesforce team. This centralization creates a bottleneck, as all modifications, updates, and optimizations must pass through a single team, slowing down the overall pace of innovation and response.\n- Domain Overlap and Knowledge Dilution: The Salesforce team at Vandebron is responsible for managing approximately 50 different processes, each belonging to various business domains. This wide scope of responsibility leads to a dilution of expertise, as the team cannot maintain deep knowledge of every process. The result is a lower overall level of understanding and efficiency, making it difficult to ensure the smooth operation and timely updates of all processes.\n\n\n\n## Point of no return\n\nAt the beginning of 2022, Europe was hit by an unprecedented energy crisis. Gas and electricity prices skyrocketed, fluctuating unpredictably, and placing immense pressure on energy providers like Vandebron to adapt swiftly. In response, Vandebron introduced a solution designed to navigate this volatile market: the Flexible Variable Tariffs proposition.\nFrom a technical standpoint, implementing this new offering required the execution of a relatively complex process - Flow_VariableTariff for approximately 50% of our customer base. However, it soon became clear that the FlowRunner mechanism and Salesforce in general were not sufficient to handle the demands of this new process. The total execution time for Flow_VariableTariff was projected to be enormous, spanning over 20 days, which was far too long for a business that needed to respond rapidly to market changes.\nRecognizing the urgency of the situation, we immediately sought ways to optimize the process. While we succeeded in significantly simplifying Flow_VariableTariff, these improvements alone were insufficient to meet our needs. It was at this critical juncture that we realized Salesforce and the FlowRunner were no longer adequate for Vandebron’s evolving requirements. The limitations of these tools became glaringly apparent, signaling the need for a more powerful and flexible solution to support our operations in the face of such a dynamic and challenging environment.\n\n\n## Why Camunda?\n\nChoosing the right process orchestration tool is a critical decision, especially for a company like Vandebron, where efficient workflow management is essential for operational success. To ensure we made the best choice, we began by establishing a set of criteria that the new tool needed to meet. These criteria were designed to address our current challenges and future-proof our operations. Here are some of the most crucial criteria:\n- Compliance with BPMN 2.0 Standard: We prioritized tools that adhered to the BPMN 2.0 standard. This would make any future migration to another tool less painful, ensuring a smoother transition if needed.\n- CI/CD Integration: The ability to seamlessly integrate the tool with Vandebron's CI/CD pipeline was crucial. This integration would allow us to automate deployments, streamline updates, and maintain a high level of consistency across our development processes.\n- Support for Multiple Programming Languages: Given our diverse technology stack, we needed a tool that allowed us to implement flowstep logic in multiple programming languages, with a particular emphasis on supporting Scala, which is heavily used within our systems.\n- Unit Testing: The tool had to enable us to unit-test individual steps and parts of flows. This capability was essential for ensuring the reliability and accuracy of our processes before they were deployed to production.\n\nOur market analysis of process orchestration tools led us to evaluate five potential solutions:\n- Camunda 8\n- IBM Business Automation Workflow (BAW)\n- Bonita\n- Kogito\n- Flowable\n\n\nEach vendor provided us with a demo and/or a trial version of their product. During this evaluation process, we rigorously tested each tool against our criteria. Although all five options met our hard requirements, it quickly became evident that Camunda is the true leader in the market.\n\nSeveral factors contributed to our decision to choose Camunda:\n\n- SaaS Offering: Camunda's SaaS version provided us with the flexibility and scalability we needed, reducing the burden on our infrastructure and allowing us to focus on process management rather than platform maintenance.\n- Comprehensive Documentation: Camunda's clear and well-organized documentation made it easier for our teams to learn and implement the tool effectively, reducing the learning curve and speeding up the integration process.\n- Out-of-the-Box Connectors: Camunda offers a wide range of connectors right out of the box, enabling quick integration with various systems and services. This saved us time and effort, allowing us to implement new workflows faster.\n- User-Friendly Interface: The tool's intuitive and clean UI made it accessible to both technical and non-technical users, facilitating collaboration across teams and improving overall efficiency.\n- Responsive Support: Camunda's quick and helpful support was another decisive factor. Their team was readily available to assist us with any issues or questions, ensuring a smooth onboarding experience.\n\nIn the end, Camunda stood out as the optimal choice for Vandebron’s process orchestration needs, offering the perfect balance of functionality, usability, and support.\n\n## First steps with Camunda\n\nBefore we could begin migrating our processes from Salesforce to Camunda, it was essential to establish a robust infrastructure that would allow Camunda to seamlessly integrate with the rest of Vandebron’s ecosystem, particularly Salesforce. Since Salesforce would continue to serve as the primary workspace for our agents, we needed to ensure smooth communication and data flow between the two platforms. To achieve this, we developed several key infrastructural applications:\n\n- CamundaGateway: Camunda API (Zeebe API) operates using the gRPC protocol, which is not natively supported by Salesforce. To bridge this gap, we created the CamundaGateway, a proxy application that translates HTTP calls into a format that Zeebe API can understand. This application acts as an intermediary, enabling effective communication between Salesforce and Camunda.\n- CamundaSync: Each Camunda process instance has a corresponding representation in Salesforce. To keep the status of these instances up to date across both platforms, we implemented CamundaSync. This job regularly pulls the status of process instances from Camunda and updates the relevant records in Salesforce, ensuring that agents always have access to the most current information.\n- CamundaJobWorker: Not all process steps can be handled by simple connectors like the RestConnector. Some steps are more complex and require custom logic to be executed. To manage these, we developed the CamundaJobWorker service, which contains handlers for these complex process steps. This service allows us to extend Camunda’s capabilities and handle sophisticated workflow requirements efficiently.\n- BPM app (React): Certain processes require input from users, particularly agents working within Salesforce. To facilitate this, we built the BPM app, which includes a set of forms necessary for running specific processes. This application ensures that agents can interact with and influence the workflow directly from their workspace, maintaining the user experience they are accustomed to.\n\n\n![A schematic overview of the camunda infrastructure](../images/camunda_infrastructure.png \"A schematic overview of the camunda infrastructure\")\n\nAs of September 2024, we have successfully implemented the basic infrastructure needed for Camunda integration, and three customer-related processes have been migrated from Salesforce to Camunda, with several more in progress. \nIt's important to highlight that the migration process involved a comprehensive analysis of the existing process, including the removal of legacy components, identification of common errors, and targeted optimization efforts. As a result, we achieved a substantial reduction in errors. Specifically, the Flow_Renewal process, which previously had a 2% failure rate, now experiences only a 0.62% dropout rate post-migration, reflecting a 69% decrease in errors.\n\n\n## Future plans\n\nBy the end of the year, we aim to migrate up to 10 processes to Camunda, further reducing our reliance on Salesforce for process orchestration. In parallel, we plan to enhance our infrastructure applications—CamundaGateway, CamundaSync, CamundaJobWorker, and the BPM frontend app - to improve their performance, scalability, and ease of use. These enhancements will ensure that our systems remain robust and efficient as we expand our use of Camunda across more of Vandebron's operations.\nMoving forward, We will continue to leverage Camunda's capabilities to automate and optimize more processes, ultimately driving greater efficiencies and innovations across Vandebron.","meta":{"title":"Camunda BPM migration","description":"Migration from Salesforce Flow_Runner to Camunda BPM","createdAt":"Wed Sep 04 2024 02:00:00 GMT+0200 (Central European Summer Time)","coverImage":"images/camunda-rising.png","tags":["salesforce","camunda","bpm","process_orchestration"],"author":"Andrei Karabovich","slug":"blog/salesforce-camunda-bpm-migration","formattedDate":"4 september 2024","date":"Wed Sep 04 2024 02:00:00 GMT+0200 (Central European Summer Time)"}},{"content":"\n# Cassandra, it’s not you, it’s us\n\nI want you to know that you are probably an amazing product that has so much to offer to the world. However, it sadly just isn’t working out for us anymore.\n\nWe've encountered challenges such as escalating costs, inconsistent write and read performances, and setup misalignments that have constrained our growth. Of course, this is not entirely your fault, we set you up to fail with our infrastructure and use cases.\n\nI hope we can part on good terms, with mutual respect and appreciation for the time we shared. \nI wish you all the happiness, success, and fulfilment in the world, and I hope you find a company that complements your life in the way you deserve.\n\nThank you for understanding, and I truly wish you the best.\n\nYours truly, Vandebron\n\n## Our Data Storage Prince Charming\n![data-prince-charming.jpg](../images/data-prince-charming.jpg \"Data Prince\")\n\nA list of some of the qualities we are looking for:\n- Kindness and compassion. \n- High availability.\n- Low Maintenance.\n- Ability to store large volumes of data (currently around 10TB), though not everything has to be queried fast.\n- Capable of ingesting real-time energy usage data (every 15 minutes per customer, possibly higher frequency in the future).\n- Ideally, we can use our current tech stack as much as possible (flyway migrations, roundtrip tests, spark).\n- Ideally, use as few different database technologies as possible.\n- It does not need to be horizontally scalable, due to moving from 1 central data storage to a separate data storage per service.\n\nWith enough work, time and commitment, Cassandra could have fulfilled most of these requirements. However, love is a two-way street, and we didn't put in the time and effort to make it work.\n\n## Speed Dating Round\nSome potential suitors we considered for replacing Cassandra:\n\n#### ScyllaDB\nScyllaDB is very similar to Cassandra. It should have better performance but still have (almost) all the same functionality as Cassandra.\n\n#### PostgreSQL\nPostgreSQL is a relational database. We already use it extensively in our services.\n\n#### Cockroach\nIt is similar to PostgreSQL but with some limitations: [Known Limitations in CockroachDB v23.2](https://www.cockroachlabs.com/docs/stable/known-limitations.html)\n\nIt is horizontally scalable, which is an advantage over PostgreSQL when it comes to high availability and fault tolerance. We are also currently using it in some of our services.\n\n#### Timescale\nTimescale is a PostgreSQL extension that uses the same query layer, but a different storage layer, to have efficient time series-related features.\n\nIt can also distribute data, but this is still in early access and is not recommended.\n\n#### Yugabyte\n\nYugabyte is a PostgreSQL extension to make PostgreSQL into a distributed database.\n\n## Comparisons\n\nTo determine the most suitable match, we did some quick performance tests. One where we inserted 2 million + weather data records as fast as possible via recurring inserts, to see how easy it would be to migrate over to. And another test to determine general query speed.\n\n### Write Speed Results\n![insert-perf-database.jpg](../images/insert-perf-database.jpg \"Insert Graph\")\n\nNote that the test results are not 100% fair, because Timescale and Postgres don’t have to distribute the data over multiple nodes (though Timescale does have 2 replicas), and Cassandra already contained a lot of data (though with some testing timescale didn’t seem to become slower when it already had more data). For Yugabyte and Cockroach, we gave up after 1 hour. Also, the tests were done with the existing setup for Cassandra.\n\n### Query Speed Results\n![query-perf-database.jpg](../images/query-perf-database.jpg \"Query Graph\")\n\nWe also did some tests to query aggregated data from streaming data.\n- For this, we copied over 2.6M rows to each database.\n- For this data we need to aggregate (sum) some values per 15-minute time block).\n- For Cassandra/Scylla, this is done via spark.\n- For timescale use buckets based on timestamps.\n- For Postgres by grouping on floor(extract(epoch from timestamp) / 60 / 15)\n\n## Our Happily Ever After\n\nTimescale emerged as the clear winner here, not just for its performance in the above tests, but also for its seamless integration with our existing PostgreSQL setup. This compatibility allows us to maintain our current libraries and reduce code complexity, making Timescale an ideal choice for our time series data. At the same time, we continue to rely on Postgres for our other needs.\n\nCassandra, you won’t be missed.","meta":{"title":"Cassandra, it’s not you, it’s us","description":"Our Journey to find the perfect data storage solution for us","createdAt":"Fri Feb 16 2024 01:00:00 GMT+0100 (Central European Standard Time)","coverImage":"images/heart-breaking.jpg","tags":["cassandra","timescale","postgresql"],"author":"Tomás Phelan","slug":"blog/cassandra-its-not-you-its-us","formattedDate":"16 februari 2024","date":"Fri Feb 16 2024 01:00:00 GMT+0100 (Central European Standard Time)"}},{"content":"\nThe title of this article could have also been \"*Getting Rid of an Unmanageable Legacy Data Model*\", but after a year-long migration project the current title does more justice to the progress made. \n\n#### Compiled Legacy as a Data Model\n\nOur former data model was a series of parallel custom python jobs all covering every step of the *Extract-Transform-Load* (ETL) process from sources into report. Specific transformation got performed a numerous amount of times in multiple different jobs, daily. This made us prone to bugs, slow on development and maxing out on compute. \n\nThe situation became so pressing that keeping alive simple reporting to the business became a daily burden on the Data Analytics team, limiting resources for advanced analytics and leveraging data sources for competitive insights.\n\nWe concluded the old set-up to be outdated and looked around for current best practices concerning data infrastructure. Trying not to reinvent the wheel and staying away from designing custom solutions that had bitten us in the past, we decided to adopt a combination of *Snowflake*, *dbt* and *Lightdash* to start forming a new data landscape.\n\nThis revamping of the set-up gave us the opportunity to start over, using the power of *dbt* to create a modular data model where you could leverage different stages of data, while creating shared definitions, a single source of truth and documentation.\n\n#### What We Came Up With?\n\nWe went for a pretty classic *dbt* data model design, introducing 5 layers of data: staging, entity, intermediate, mart and api. Each layer serving a specific purpose.\n\n##### Staging\n\nWith all data coming in from different sources, this is where we ensure the data all adheres to the same conventions and formatting. This introduces a nice developer experience for the next layers, by introducing consistency across different sources. It also serves as the go to place for advanced or deep dive analysis that do not get answered by the downstream layers, which could potentially spark data modelling developments.\n\n##### Entity\n\nAfter uniforming the data, we create entities that form the building blocks of the downstream layers and analyses of our business analysts. We built entities along the core aspects of our product, capturing shared definitions in data and bringing together relevant features using the *One-Big-Table* (OBT) principle. We try to refrain from long queries or extensive use of CTE's, resulting in simplistic models. These models serve our business analysts by reducing the complexity of their queries with all joins and filters taken care of, denormalizing the database structure. This has shifted the place where ad-hoc BI requests are fulfilled from the central data team to the domain business teams, applying principles of a data mesh.\n\n##### Intermediate\n\nWith some models rising in complexity and computation, we use the intermediate layer to split this complexity and computation across multiple models. These intermediate models are rarely queried because they serve no reporting or analytical purpose. Think of incremental date spine explosions or highly complex business logic broken down into multiple models.\n\n##### Mart\n\nThis is the main layer where we provide self-service to less technical employees within the organization, creating ready-made tables. We aggregate along date spines and dimensions to create readable models. It is where we leverage *Lightdash* metrics to create dynamic tables to provide business teams with a certain amount of freedom in terms of the granularity and dimensions they want to report on in their dashboarding. The use of entities as building blocks has aligned reporting across domain business teams, creating a single and centralized source of truth and relieving the data team from explaining distinctions. So while the dimensions can be tweaked for specific use cases, the definitions of the metrics are set in code.\n\n##### API\n\nWith some dependencies outside of the data model, we use an API layer on top of our mart to record exposures towards different services and provide views which explicitly contain only the necessary datapoints.\n\n![A schematic overview of the data model structure](/images/schematic_data_layers.jpg \"A schematic overview of the data model structure\")\n\n#### The Process\n\nWe decided to take advantage of the chaos created by the old situation: no real single source of truth gave us the opportunity to create a truth. Investigating business teams' needs, we created data definitions in entities. We kept a pragmatic approach to these definitions, being flexible towards business teams' specific needs but also limiting the allowed complexity or number of exceptions. The new data model should answer everyone's questions, but should also be understood by everyone.\n\nWe forced ourselves to have descriptions for all data from the entity layer onwards, because only defining and describing the entities in code is not enough. We leveraged the embedded business analysts' knowledge to form the descriptions, noting that the best description is the one the user understands (because they wrote it).\n\nWith the ready-made marts in place, we decided to give away most of the dashboarding responsibility to the business teams. The embedded analysts are very apt at defining and designing their relevant insights into dashboards. The central data team only took ownership of company wide dashboards and provided support on the dashboarding where necessary.\n\nAfter the adoption of the new stack, we noticed that the more technical embedded analysts were very interested in learning a new tool and language. So, we started a data model group and onboarded multiple embedded business analysts as data model developers. This has massively increased the speed of development of the data model. Primarily, because of specific business domain knowledge not needed to be transferred to the developers in the central data team first, but the knowledge holders developed models themselves. The central data team took on a different role: providing infrastructural support, improving on efficiency, monitoring costs and creating a vision and strategy for organic but structured growth.\n\n![A schematic overview of the final self-servicing data model product](/images/schematic_data_product.jpg \"A schematic overview of the final self-servicing data model product\")\n\n#### What Did We Learn?\n\nFew key takeaways:\n\n- Some business teams have more requirements in terms of definitions than other teams, so if other teams allow, be pragmatic and just go for the stricter requirements.\n- Enabling self-service analysis means giving away control, take this into account in your data descriptions. They should be clear and concise.\n- Educate users on the designed structure of the data model, explain what layer serves which purpose and what questions can be answered how and where.\n- Create clear communication and support channels for the business to kickstart the adoption, you are not the only one learning a new tool.\n- Data is not only for the data team, so encourage those passionate and enthusiastic analysts to co-create! (Just keep an eye on the project.) ","meta":{"title":"Creating a Self-Service Data Model","description":"How we migrated to a modern data stack to enable self-servicing across the business","createdAt":"Wed Feb 07 2024 01:00:00 GMT+0100 (Central European Standard Time)","coverImage":"images/self_service.jpg","tags":["dbt","snowflake","lightdash","datamodel","self-service"],"author":"Mats Stijlaart","slug":"blog/creating_a_self-service_data_model","formattedDate":"7 februari 2024","date":"Wed Feb 07 2024 01:00:00 GMT+0100 (Central European Standard Time)"}},{"content":"\n\n# Authenticate Snowflake rest api via Keycloak\n\nHere in Vandebron we use Keycloak as our identity and access management (IAM) solution and Snowflake as our data warehousing platform. \nKeycloak is a powerful and extensible solution for managing user identities and access control, making it a popular choice for organizations seeking a comprehensive and open-source IAM platform.\nSnowflake is designed to handle and analyze large volumes of data with speed and efficiency. It is known for its scalability, flexibility, and ease of use in managing and analyzing diverse and massive datasets.\n\n## Accessing Snowflake data via Rest API\n\nThere are several ways to access data in Snowflake one of these are the Snowflake rest api, they are a comprehensive set of REST APIs for managing and interacting with various aspects of the Snowflake Data Cloud, including account management, data loading, querying, and more.\nThese REST APIs allow developers to programmatically perform tasks such as executing SQL queries, managing virtual warehouses, and administering user roles. They are designed to enable automation and integration with other applications and services.\n\n## Why via Rest Api?\n\nThe Snowflake SQL API is a REST API that you can use to access and update data in a Snowflake database. You can use this API to develop custom applications and integrations that can perform most of the queries you need. More info here: [Snowflake rest api](https://docs.snowflake.com/en/developer-guide/sql-api/index)\n\nWe decided to connect our microservices to snowflake via rest api mainly because we consider this mechanism the best way to decouple database processing with backend processing in fact the queries issued via the endpoint are processed inside Snowflake ecosystem asynchronously.\n\nThe service can poll snowflake to monitor the request until it is completed. See [Sql api response](https://docs.snowflake.com/en/developer-guide/sql-api/handling-responses) .\n\nUsing api communication has other very good benefits:\n\n- No additional library dependency\n- No Additional spark connectors\n- Since there is no way to run snowflake on a local machine unit test a snowflake connection would have been very hard ( impossible ). With Rest api communication we can unit test snowflake api client using contract test. ( one way contract test is better than nothing )\n\n## Snowflake Authentication\n\nSnowflake provides a convenient way to authenticate to it using “any” OAuth authentication server. Our authentication server is Keycloak so in the following sections you will learn how to integrate Keycloak with Snowflake.\nResources to this topic can be found here [auth-ext-overview ](https://docs.snowflake.com/en/user-guide/oauth-ext-overview) and here: [oauth-ext-custom](https://docs.snowflake.com/en/user-guide/oauth-ext-custom)\n\n\n## Keycloak side\n\nYou need to configure your client to return in the JWT access token the following claims:\n\n```json\n{\n \"aud\": \"\",\n \"iat\": 1576705500,\n \"exp\": 1576709100,\n \"iss\": \"\",\n \"scope\": [\n \"session:role-any\"\n ]\n}\n```\n\nmost of them are returned by default. Aud claims is the only one you should add\nTo add `aud` claim you can add a new mapper to your client with type Audience see image:\n\n![keycloak_aud.png](../images/keycloak_aud.png \"Keycloak aud mapper\")\n\n**Note**: You need to add a custom audience with the value **equal** to the login_name attribute value in snowflake. The audience value will be used to look up to the right user in snowflake integration\n\nThen you need to add the snowflake scope to your scope list: session:role-any\nFinally you can check that your token is correct:\n\n```json\n{\n .....\n \"iss\": \"https://test.vdbinfra.nl/auth/realms/vandebron\",\n \"scope\": \"session:role-any\",\n \"aud\": \"energy-trading-test\",\n ....\n}\n```\n\nThe `aud` must contain only the snowflake login_name. For instance, a token such as the following will not work (multiple audiences):\"aud\": [ \"batterypack-services-test\", \"account\" ],\n\n## Snowflake side\n\nHow to find keycloak public key: [stackoverflow](https://stackoverflow.com/a/57457227)\nRequired: `ACCOUNTADMIN` rights in Snowflake.\nExample integration command:\n\n```sql\ncreate or replace security integration external_oauth_keycloak_test\ntype = external_oauth\nenabled = true\nexternal_oauth_type = custom\nexternal_oauth_issuer = 'https://test.vdbinfra.nl/auth/realms/vandebron'\nexternal_oauth_rsa_public_key = ''\nexternal_oauth_audience_list = ('energy-trading-test')\nexternal_oauth_scope_mapping_attribute = 'scope'\nexternal_oauth_token_user_mapping_claim = 'aud'\nexternal_oauth_any_role_mode = 'ENABLE'\nexternal_oauth_scope_delimiter = ' '\nexternal_oauth_snowflake_user_mapping_attribute = 'login_name';\n```\n\nNote: the external_oauth_scope_delimiter setting must be enabled separately by Snowflake support.\nNext, you need to set the login name for the user you want associate with the integration:\n\n![snowflake_auth_conf.png](../images/snowflake_auth_conf.png \"Snowflake auth configuration\")\n\n### Example\n\nLet’s authenticate with keycloak as we do normally:\n\n```curl\ncurl --location --request POST 'https://keycloak.test-backend.vdbinfra.nl/auth/realms/vandebron/protocol/openid-connect/token/' \\\n--header 'Content-Type: application/x-www-form-urlencoded' \\\n--data-urlencode 'grant_type=client_credentials' \\\n--data-urlencode 'client_id=energy-trading' \\\n--data-urlencode 'client_secret='\n```\n\nNow you should get the token. Optional: van verify the token directly in snowflake with SQL:\n\n```sql\nSELECT SYSTEM$VERIFY_EXTERNAL_OAUTH_TOKEN( '' )\n```\n\nUse it in the snowflake statement endpoint. For example:\n\n```curl\ncurl --location --request POST 'https://.eu-central-1.snowflakecomputing.com/api/v2/statements?async=true' \\\n--header 'Authorization: Bearer \\\n--header 'Content-Type: application/json' \\\n--data-raw '{\n\"statement\": \"select \\\"data\\\" as prediction, to_number(\\\"lats\\\", 10, 4) as lats, to_number(\\\"lons\\\", 10, 4) as lons, \\\"scaledValueOfFirstFixedSurface\\\" as scaled_value_of_first_fixed_surface, to_timestamp_tz( concat(\\\"dataDate\\\", lpad(\\\"dataTime\\\", 4, 0)) || '\\''+0'\\'', '\\''yyyymmddhh24mi+tzh'\\'') as model_datetime, to_timestamp_tz( concat(\\\"validityDate\\\", lpad(\\\"validityTime\\\", 4, 0)) || '\\''+0'\\'', '\\''yyyymmddhh24mi+tzh'\\'') as predicted_datetime, insert_date_snowflake, current_timestamp()::timestamp_tz(9) as insert_date_staging from raw.icon_eu.alhfl_s;\"\n}'\n```\n\nNB: It is important to use the proper snowflake base url. In my case I am using https://.eu-central-1.snowflakecomputing.com/ where is my account identifier which was authorised during configuration phase the snowflake user the token is referring to in the clientId claim.\nYou should get a response such as:\n\n```json\n{\n \"code\": \"333334\",\n \"message\": \"Asynchronous execution in progress. Use provided query id to perform query monitoring and management.\",\n \"statementHandle\": \"01aafc80-3201-abed-0001-4a0e00e52816\",\n \"statementStatusUrl\": \"/api/v2/statements/01aafc80-3201-abed-0001-4a0e00e52816\"\n}\n```\n\nNow you can follow the async operation to the following get endpoint:\n\n```http\nhttps://.eu-central-1.snowflakecomputing.com/api/v2/statements/01aafc80-3201-abed-0001-4a0e00e52816\n```\n\nIt will return 202 if the processing is still ongoing. It will return 200 and the actual result when processing ends.\n\nHappy coding!","meta":{"title":"Authenticate Snowflake via Keycloak","description":"How to use Keycloak to authenticate against Snowflake rest api","createdAt":"Tue Dec 19 2023 01:00:00 GMT+0100 (Central European Standard Time)","coverImage":"images/snowflake_keycloak.jpg","tags":["keycloak","snowflake","rest","oauth","bearer token","authentication","security"],"author":"Rosario Renga","slug":"blog/authenticate-snowflake-rest-api-using-keycloak","formattedDate":"19 december 2023","date":"Tue Dec 19 2023 01:00:00 GMT+0100 (Central European Standard Time)"}},{"content":"\nIn our sustainable journey at Vandebron, we are not only striving to revolutionize the renewable energy sector, but we are also rethinking how we interact with technology ourselves. As a part of this initiative, we have been looking at how to reduce our digital footprint. One of our most recent projects involves transforming our ageing fleet of iMacs into revitalized, lightweight machines. \n\nWe proudly introduce the 'flexMac'.\n\n### Regained speed, sustainability and enhanced security\nOur customer contact department, the core of our operation, was equipped with older iMacs running on slower HDD drives. While replacing these machines with newer models might have been the easier route, it didn't align with our commitment to sustainability. \n\nInstead, we decided to be creative and look for ways to upcycle our older iMacs. Our choice of tool? Google's ChromeOS Flex. As the slogan suggests, [‘don’t bin it, just flex it’](https://www.linkedin.com/feed/update/urn:li:activity:7066377989831233536/) we figured this could very well meet our wishes. By installing this onto our iMacs, we have given birth to our new line of workstations, naming them 'flexMacs'.\n\n[ChromeOS Flex](https://chromeenterprise.google/os/chromeosflex/) is a free, open-source operating system by Google that breathes [new life into older PCs and Macs](https://cloud.google.com/blog/products/chrome-enterprise/chromeos-flex-ready-to-scale-to-pcs-and-macs). It's lightweight, fast, and ideal for the web-centric applications and services our customer contact department uses every day. Once ChromeOS Flex was installed, the transformation was remarkable. The old machines metamorphosed from very slow to production-ready again in a breath, adept at handling all our workflows at the Customer Contact department.\n\nThese workflows at Customer Contact are fully web-based. It enables us multichannel support, integration capabilities, and data-driven insights. These help our support agents to provide personalized and efficient service across various communication channels. By using these technologies and insights, we optimize our customer service strategies, leading (hopefully) to higher customer satisfaction.\n\nAnother important benefit of this transformation was an added layer of security. ChromeOS Flex allows our users to log in using their Google identity, ensuring a personalized and secure workspace for every team member. This means each user experiences a secure, tailored environment, whilst bringing an additional level of security and control to our IT operations.\n\n### The importance of circularity\nBesides the operational benefits, the broader environmental impact of this initiative is important to us. By extending the life of our technology, we contribute directly to reducing e-waste, one of [the fastest-growing waste streams in the EU](https://www.europarl.europa.eu/news/en/headlines/society/20201208STO93325/e-waste-in-the-eu-facts-and-figures-infographic). As a company, Vandebron is not only promoting sustainable innovations but striving to actively embody them. Our 'flexMacs project is a testament to this commitment.\n\nOur 'flexMacs' project demonstrates how we can repurpose and upgrade older hardware, which according to Emerce is a [hot thing to do](https://www.emerce.nl/achtergrond/circulaire-hardware-is-hot-dit-is-waarom). We hope this blogpost inspires you to consider similar sustainability initiatives. By choosing to upgrade rather than replace, we extend the life of existing hardware and contribute to a reduction in e-waste.\n\nStay tuned for more updates from our tech-driven sustainability journey.\n","meta":{"title":"Sustainable Tech-Hardware - Introducing the 'flexMac'","description":"Enhanced security, sustainability, and regained speed at Customer Contact revitalizing our old iMacs.","createdAt":"Mon Jul 03 2023 02:00:00 GMT+0200 (Central European Summer Time)","coverImage":"images/circular.jpeg","tags":"sustainable-tech, flexmac, circularity","author":"Gehdrio Lake & Sietse Bruinsma","slug":"blog/sustainable-tech-hardware","formattedDate":"3 juli 2023","date":"Mon Jul 03 2023 02:00:00 GMT+0200 (Central European Summer Time)"}},{"content":"\n\n### Amazon embraces the mighty monolith\n\n\"image\n\nIn March 2023, Amazon published a [blog post](https://www.primevideotech.com/video-streaming/scaling-up-the-prime-video-audio-video-monitoring-service-and-reducing-costs-by-90)\n, detailing how they had managed to reduce the cost of their audio-video monitoring service by 90%.\nThe _key_ to this reduction was migrating from a distributed, microservice architecture to a _monolith_.\nThe blog post went viral, prompting some software industry celebrities to \n[question](https://world.hey.com/dhh/even-amazon-can-t-make-sense-of-serverless-or-microservices-59625580) the entire concept of microservices.\n\n### What should we learn from this?\n\nSo, does this mean microservices are fundamentally flawed? Should we all migrate back to monoliths?\n_No_ and _definitely no_ I would say. Instead, my takeaways from this article are:\n\n1. **Microservices aren't about scaling for performance.** At least not primarily. Although horizontally scalability for computationally intensive operations _can_ be very useful or even essential in some cases, it tends to be a rare benefit. Very often, performance bottlenecks are IO bound and caused by external systems beyond your control. Nevertheless, there _are_ other compelling reasons to consider microservices: they _force_ you to communicate via contracts, _encourage_ you to organize your functionality around domains, and _allow_ you to scale your organization. Of course, all this comes at considerable costs. There's no [free lunch 👇](#presentation).\n2. Don't underestimate the power of a single CPU in 2023. To judge whether a process is unreasonably slow or not, I tend to think of the fact that already in the 1990s, screens showed 65K pixels at any given time. Back then, multiple arithmetic calculations (additions, subtractions) could be performed for each pixel, fifty times per second. Nowadays, your screen probably displays more than 5 Million pixels at once. So, if the amount of datapoints you are dealing with in the order of millions, you should generally be able to process them in a matter of seconds on a single machine. If you can't, you may be doing something very inefficient.\n3. **Software engineering is hard**. Mistakes are made all the time, everywhere. Even at the big 4 tech companies. Kudos to Amazon 👏 for openly sharing the mistake they made so that we may all learn.\nIn the next section I will share one of our own experiences, not entirely different from the Amazon example.\n\n### The 90% cost reduction case at Vandebron\n\n#### Microservices or just distributed computing?\nConsidering that all the functionality used in the Amazon case belongs to the same _domain_, it arguably does not even serve as \na case against improper use of microservices, but instead a case against misuse *distributed computing*.
\nLet's look into an example of misuse of distributed computing at Vandebron now.\n\n#### Predicting the production of electricity\nFor utility companies, accurately predicting both electricity consumption and production is crucial.\nFailing to do so can result in blackouts or overproduction, both of which are [very costly](https://vandebron.nl/blog/hoe-houdt-onze-technologie-het-energienet-in-balans).\nVandebron is a unique utility company in that the electricity that our customers consume is produced by a [very large\namount](https://vandebron.nl/energiebronnen) of relatively small scale producers, who produce electricity using windmills or solar panels.\nThe large number and the weather dependent nature of these producers make it very hard to predict electricity generation accurately.\n\nTo do this, we use a machine learning model that is trained on historical production data \nand predictions from the national weather [institute](https://www.knmi.nl/). As you can imagine, this is a computationally intensive task, involving large amounts of data.\nFortunately, we have [tooling in place](https://www.vandebron.tech/blog/fueling-the-energy-transition-with-spark-part-1) that\nallows us to distribute computations of a cluster of machines if the task is too large for a single machine to handle.\n\nHowever, here's the catch: the fact that we _can_ distribute computations does not mean that we should. Initially it seemed that\nwe couldn't analyze the weather data quick enough for the estimation of our production to still be a _prediction_\nrather than a _postdiction_. We decided to distribute the computation of the weather data over a cluster of machines.\nThis worked, but it made our software more complex and Jeff Bezos even richer than he already was.\n\nUpon closer inspection, we found an extreme inefficiency in our code. It turned out that we were repeatedly reading the entire weather dataset\ninto memory, for _every_ single \"pixel\". After removing this performance bug, the entire analysis could _easily_ be done\non a single machine. \n\n### What more is there to say? \n\n\nSo if microservices aren't about performance, what _are_ they about? If I had to sum it up in one sentence It would be:\n> _Microservices are a way to scale your organization_\n\nThere is a lot of detail hiding in that sentence, which I can't unpack in the scope of this article. If you're interested\nwhat microservices have meant for us, I would recommend you watch the presentation below.\n\n\n#### Microservices at Vandebron\nAt [Vandebron](https://vandebron.nl/), we jumped onto the \"microservice bandwagon\" circa 2019. This wasn't a decision\nmade on a whim. We had seen a few industry trends come and go, so we first [read up](https://samnewman.io/books/building_microservices_2nd_edition/)\nand did our own analysis. We found that the concept of microservices held promise, but also knew that they would come at a cost.\n\nThese are some of the dangers we identified and what we did to mitigate them.\n\n| **Danger** | **Mitigation** |\n|-------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------|\n| _A stagnating architecture_ | Compile and unit-test time detection of breaking changes |\n| _Complicated and error prone deployments_ | Modular CI/CD [pipelines](https://github.com/Vandebron/mpyl) |\n| _Team siloization_ | A single repository (AKA monorepo) for all microservices and a discussion platform for cross-domain and cross-team concerns |\n| _Duplication of code_ | Shared in house libraries for common functionality |\n\n\n\nThe following presentation to the students of [VU University, Amsterdam](https://vu.nl/) explains how we implemented\nsome of these mitigations and what we learned from them.\n\n[![Presentation about micro services to students of VU Amsterdam](/images/play_presentation.webp)](https://youtu.be/HDs-pCsEzKM)\n","meta":{"title":"So, back to the monolith it is then?","description":"A recent Amazon article explaining how they managed to save costs by merging some of their services has lead some to question the value of microservices. What is our take?","createdAt":"Sat May 20 2023 02:00:00 GMT+0200 (Central European Summer Time)","coverImage":"images/monolith.webp","tags":"dagster, cicd, ci-cd, orchestration, data pipeline, kubernetes, migration, helm, ansible","author":"Sam Theisens","slug":"blog/back-to-the-monolith","formattedDate":"20 mei 2023","date":"Sat May 20 2023 02:00:00 GMT+0200 (Central European Summer Time)"}},{"content":"\nVandebron is a Dutch green-tech energy company on a mission to accelerate the transition to 100% renewable energy, 100% of the time. As part of [our mission and strategy](https://vandebron.nl/100procentgroen), we are constantly innovating and looking for ways to optimize energy operations and reduce negative impacts when it comes to energy production.\n\nOur new mission: [100% renewable energy, 100% of the time](https://youtu.be/_Yf8jk4gZbI)\n\n### The importance of curtailment and flexibility services\n\nOne area where we are currently focusing our efforts is the area of curtailment and flexibility of wind turbines, solar parks, industrial batteries and electric vehicles. [Curtailment](https://vandebron.nl/blog/curtailment-slimmer-omgaan-met-goeie-energie) refers to the practice of reducing the electricity inflow to balance the electricity grid. In other words, it involves adjusting the operation of, for example, a wind turbine in order to match the demand for electricity at any given time.\n\n[This is often necessary](https://vandebron.nl/blog/hoe-houdt-onze-technologie-het-energienet-in-balans) because the output of renewable energy sources can vary significantly due to changes in weather conditions. If the output of these sources exceeds the demand for electricity, it can lead to an excess of electricity on the grid, which can cause stability issues. On the other hand, if the output of wind turbines is too low, it can lead to a deficit of electricity on the grid, which can cause blackouts or other disruptions. To tackle this, we look at our customer’s batteries and electric vehicles offering flexibility capabilities.\n\n### Our journey to finding reliable, secure and energy-efficient hardware and software\n\nTo optimize these curtailment and flexibility efforts, we were in need of a gateway device that we could place at the installations of the producers on our platform. To keep it close to our mission, we preferred an ARM-based CPU for its [energy efficiency](https://www.redhat.com/en/topics/linux/ARM-vs-x86) compared to an x86-based CPU. After all, we don’t want to consume all of the produced energy to power an actively cooled NUC… 😉\n\nWhile gathering our hardware requirements, we concluded there was really only one competitor. Therefore, we partnered up with OnLogic! We chose their [Factor 201 device](https://www.onlogic.com/fr201/), which boasts the ARM-based Raspberry Pi CM4 module packed in a small and beautiful orange industrial chassis. The model also enables a lot of custom configurations. For example, we are able to configure multiple (wireless) networks, add extra SSD storage or optionally mount on DIN rails.\n\n![OnLogic Factor 201](/images/flex-onlogic-factor-201.jpg \"OnLogic Factor 201\")\n\nTo ensure our gateway devices are secure and agile (like us, developers, 😛) we needed them to integrate well into our existing technology landscape based on Kubernetes. After struggling for some time to harden several (lightweight) operating systems and bootstrapping lightweight Kubernetes clusters our eyes fell on a new kid in town: ‘Talos Linux, the Kubernetes Operating system’ built by [Sidero Labs](https://www.siderolabs.com/). Again our predetermined wishlist was covered (even more), and what we got is a minimal OS tailored for Kubernetes, hardened, immutable and ephemeral out-of-the-box. Can you survive even more buzzwords than that? \n\nUntil the present day though, they have fulfilled every promise made on [their website](https://www.talos.dev/). It initially didn’t work on our ARM CM4-based device from OnLogic. But after testing a lot together with their team (thank you!) the [latest release (v1.3.0)](https://www.talos.dev/v1.3/introduction/what-is-new/#raspberry-generic-images) officially supports our ARM devices. Ready for action! Right after the stable release the first batches were shipped and connected to the installations of our producers on the platform.\n\nOverall, Vandebron's use of OnLogic's fabricated gateway devices running Talos Linux demonstrates the potential of IoT computing to drive innovation and sustainability in the renewable energy industry. By leveraging the power of these technologies combined, we are one step closer to achieving our goal of 100% renewable energy, 100% of the time. Care to join our mission? Look for [open positions](https://werkenbij.vandebron.nl/).\n\n","meta":{"title":"How Vandebron helps balancing the Dutch energy grid together with OnLogic & Talos Linux","description":"Our journey to find the best fitting hardware and operating system to use for our flex services","createdAt":"Wed Jan 11 2023 01:00:00 GMT+0100 (Central European Standard Time)","coverImage":"images/flex-wallpaper.webp","tags":"iot, flexibility services, curtailment, onlogic, talos linux, kubernetes, arm64, raspberry pi","author":"Sietse Bruinsma & Tim van Druenen","slug":"blog/balancing-dutch-energy-grid-with-flex-services","formattedDate":"11 januari 2023","date":"Wed Jan 11 2023 01:00:00 GMT+0100 (Central European Standard Time)"}},{"content":"\n### TL;DR\nIf you want to deploy new Dagster user code respositories, you need to modify and redeploy the whole Dagster system (while they are [presented as separate](https://docs.dagster.io/deployment/guides/kubernetes/customizing-your-deployment#separately-deploying-dagster-infrastructure-and-user-code) in the docs). This is undesirable for many reasons, most notably because it slows down a migration or the regular development process. This post presents a way to avoid this and build a fully automated CI/CD-pipeline for (new) user code.\n\nThis article assumes that:\n* you (plan to) host Dagster on Kubernetes and manage its deployment with Helm and Ansible;\n* you want to automate the deployment of new Dagster user code repositories with a CI/CD pipeline automation tool of choice;\n* and you want to be able to (re)deploy the whole Dagster system and user code from scratch.\n\n### Why Dagster?\n\nIn short Dagster is a tool to build and orchestrate complex data applications in Python. For us, in the end, Dagster improved the development cycle for things like simple cron jobs as well as for complex ML pipelines. Testing the flows locally was never so easy, for instance. And with features like [asset materialization](https://docs.dagster.io/concepts/assets/asset-materializations) and [sensors](https://docs.dagster.io/concepts/partitions-schedules-sensors/sensors), we can trigger downstream jobs based on the change of an external state that an upstream job caused, without these jobs having to know of each other's existence.\n\nHowever, deployment of new [user code respositories](https://docs.dagster.io/concepts/repositories-workspaces/repositories) caused us some CI/CD related headaches...\n\n### System and user code are separated\n\nDagster separates the system deployment - the Dagit (UI) web server and the daemons that coordinate the runs - from the user code deployment - the actual data pipeline. In other words: the user code servers run in complete isolation from the system and each other. \n\nThis is a great feature of which the advantages are obvious: user code repositories have their own Python environment, teams can manage these separately, and if a user code server breaks down the system is not impacted. In fact, it even doesn't require a restart when user code is updated!\n\n![Schematic of the Dagster architecture. The user code repositories (green) are separate from the rest of the system (yellow and blue). The right side — irrelevant for now — shows the job runs. Source: https://docs.dagster.io/deployment/overview.](/images/dagster-architecture.png)\n\nIn Helm terms: there are 2 charts, namely the _system_: `dagster/dagster` ([values.yaml](https://github.com/dagster-io/dagster/blob/master/helm/dagster/values.yaml)), and the _user code_: `dagster/dagster-user-deployments` ([values.yaml](https://github.com/dagster-io/dagster/blob/master/helm/dagster/charts/dagster-user-deployments/values.yaml)). Note that you have to set `dagster-user-deployments.enabled: true` in the `dagster/dagster` values-yaml to enable this.\n\n#### Or are they?\n\nThat having said, you might find it peculiar that in the values-yaml of the system deployment, _you need to specify the user code servers_. That looks like this:\n\n```yaml\nworkspace:\n enabled: true\n servers:\n - host: \"k8s-example-user-code-1\"\n port: 3030\n name: \"user-code-example\"\n```\n\n**This means system and user deployments are not actually completely separated!**\n\nThis implies that, if you want to add a _new_ user code repository, not only do you need to:\n\n1. add the repo to the user code's `values.yaml` (via a PR in the Git repo of your company's platform team, probably);\n2. do a helm-upgrade of the corresponding `dagster/dagster-user-deployments` chart;\n\nbut because of the not-so-separation, you still need to:\n\n3. add the user code server to the system's `values.yaml` (via that same PR);\n4. and do a helm-upgrade of the corresponding `dagster/dagster` chart.\n\nFormally this is the process to go through. If you are fine with this, stop reading here. It's the cleanest solution anyway. But it is quite cumbersome, so...\n\nIf you are in a situation in which new repositories can get added multiple times a day - for instance because you are in the middle of a migration to Dagster, or you want a staging environment for every single PR - then read on.\n\n#### Give me more details\n\nHow it works is that [for every new repo Dagster spins up a (gRPC) server to host the user code](https://docs.dagster.io/deployment/guides/kubernetes/deploying-with-helm#user-code-deployment). The separation is clear here. But the Dagster _system_ also needs to know about these user code servers, and it does so through a workspace-yaml file. If you run Dagit locally it relies on a `workspace.yaml` file; on Kubernetes it relies on a [ConfigMap](https://kubernetes.io/docs/concepts/configuration/configmap/) - a Kubernetes object used to store non-confidential data in key-value pairs, e.g. the content of a file - which they named `dagster-workspace-yaml`.\n\nThis workspace-yaml is the connection between the system and the user code. The fact that the charts are designed as such that this workspace-yaml is created and modified through the system deployment rather than the user code deployment is the reason we need to redeploy the system. \n\n**But what if we could modify this workspace-yaml file ourselves? Can we make the system redeployment obsolete? Short answer: we can.**\n\n### Our solution\n\n_Disclaimer: what we present here is a workaround that we'll keep in place until the moment Dagster releases a version in which the Dagster user code deployment is **actually completely separated** from the system deployment. And it works like a charm._\n\n**Remember: the desired situation is that we do not have to edit the values-yaml files (through a PR) and redeploy all of Dagster for every new repo.**\n\nFirst of all, we added an extra ConfigMap in Kubernetes that contains the `values.yaml` for the `dagster/dagster-user-deployments` chart. We named it `dagster-user-deployments-values-yaml`. The fact that this is a ConfigMap is crucial to prevent conflicts (see next section).\n\nWith the extra ConfigMap in place, these are the steps when a repo gets added:\n1. Add the new repo to the `dagster-user-deployments-values-yaml` Configmap.\n2. Helm-upgrade the `dagster/dagster-user-deployments` chart with the content of that ConfigMap.\n3. Add the server to the `dagster-workspace-yaml` ConfigMap.\n4. Do a rolling restart of the `dagster-dagit` and `dagster-daemon` deployment to pull the latest workspace to these services.\n\n**Refresh the workspace in the UI and there it is, your new repo!**\n\nNotes:\n* The steps above are completely automatable through your favorite CI/CD pipeline automation tool.\n* There is no interaction with a (platform team) Git repo.\n* The process, unfortunately, still requires a restart of the system in order to pull the latest workspace-yaml to the system services. The daemon terminates, then restarts, and it might cause a short interruption. Note that this is unavoidable if you add a new repo, no matter how you add it. This could be avoided if a reload of the ConfigMap would be triggered upon a change, [which is possible](https://kubernetes.io/docs/concepts/configuration/configmap/#mounted-configmaps-are-updated-automatically) but not enabled.\n* If you want to make changes to an existing repo (not code changes but server setting changes), you only have to do the first step (and _modify_ instead of _add_).\n\n#### How to prevent conflicts\n\nWith many of your team members adding new Dagster repositories through an automated CI/CD pipeline, you might face the situation that 2 people are adding a new repo at around the same time. \n\nWhen this happens, the `dagster-user-deployments-values-yaml` ConfigMap cannot be uploaded in the first step because Kubernetes demands that you provide the _last-applied-configuration_ when doing an update. If it doesn't match, the upload fails. \n\nThis is perfect as we do not want to overwrite the changes of the conflicting flow. You can optionally build in a retry-mechanism that starts over with pulling the ConfigMap again.\n\n#### How to deploy from scratch\n\nThe above does not yet cover how we are able to deploy the Dagster system _and user code_ completely from scratch. Why do we want this? Well, for instance when somebody accidently deletes the `dagster` namespace for instance. Or hell breaks loose in any other physical or non-physical form. Or when we simply want to bump the Dagster version, actually.\n\nThe key to this is that we version both the `dagster-user-deployments-values-yaml` and `dagster-workspace-yaml` as a final step to the flow described above (we do it on S3, in a versioned bucket). Whenever we redeploy Dagster (with Ansible) we pull the latest versions and use them to compile both the values-yaml files from it. \n\n#### How to clean up old repositories\n\nThe above described automation _adds_ new repos but doesn't take care of old obsolete repos. The steps for removing a repo are the same for adding one. The exact implementation depends on your situation. You might want to automatically remove PR staging environments after closing a PR, for instance.\n\n### Conclusion\n\nDagster is an incredibly powerful tool that enabled us to build complex data pipelines with ease. This posts explains how we **streamlined the CI/CD pipeline for user code respositories**, which enabled us to migrate to Dagster very quickly and saves us lots of time on a daily basis.\n","meta":{"title":"The Why and How of Dagster User Code Deployment Automation","description":"If you frequently deploy new user code repositories in Dagster, you want to automate this process. However, this is not so straightforward as it may seem at first. This post explains what we did at Vandebron.","createdAt":"Fri Jul 08 2022 02:00:00 GMT+0200 (Central European Summer Time)","coverImage":"images/dagster-cicd.png","tags":"dagster, cicd, ci-cd, orchestration, data pipeline, kubernetes, migration, helm, ansible","author":"Pieter Custers","slug":"blog/cicd-dagster-user-code","formattedDate":"8 juli 2022","date":"Fri Jul 08 2022 02:00:00 GMT+0200 (Central European Summer Time)"}},{"content":"\n**A while back, our former technology manager Roy Derks covered the subject of component libraries here on the blog. From a technical perspective, he spoke about when you need one (and when you don’t need one) and what to consider when building one. Since then, obviously a lot has happened at Vandebron. But one of the more interesting things to happen is that design became an integrated part of the digital department, as opposed to previously being attached to marketing. In this new setup, one of the first major projects the design team was involved in was the alignment of our component libraries. And no that’s not a typo, that’s libraries as in the plural form of library. Confusing? I thought so too. In this blog I’ll try to explain further why that was the case, how the work actually helped us bridge the gap between design and development, and dissect the work of unifying those component libraries into one single source of truth and ultimately what’s to become our design system.**\n\n### A bit of a mess\nBefore we get into it, some background as to where we started out might be useful. As previously mentioned, the design team had just become a part of the digital department and one of the first tasks at hand was the creation of a design system. In the design team, we had previously worked with a certain set of brand guidelines, a style guide if you will, which had not necessarily been translated or aligned to the requirements of a digital product or development environment. Development had also created a set of stylesheets and libraries with reusable components which they used to reduce development time. Having it all separately might sound a bit counter-intuitive, but not very surprising if you consider designers and developers not being in the same department, working on a different timeline, different priorities and so forth. However, this only highlighted the importance of designers and developers working together and the need for a proper design system to help prevent creating a fence between the teams causing unnecessary and ineffective work on both sides. The result of this previous “unsynciness”, a rebrand in 2017, and a re-aligned techstack, was the existence of 3 different libraries and subsequently 3 different sources of truth within the development environment. To add to this, we also had separate design guidelines geared more towards brand/marketing purposes in the design team. Now came the rather massive task of unifying these and eventually, rather than having just a library, _having a system_. \n\n### Component library ≠ design system\nNow, there’s a lot of terminology here that might be difficult to grasp if you’re new to the subject. So I thought I’d clarify what we mean when referring to these, how they fit into the context of our situation, and how many of them we had!\n\n- #### Brand guidelines / style guide (design)\n A set of guidelines and examples outlining all the visual elements of a brand such as logos, color, typography, imagery etc. and subsequently in what - - manner they should be applied. It can also be expanded to include more things brand related such as tone of voice, brand values and so forth. Often with brand guidelines, they are created from a marketing perspective and the digital experience(or product) aspect of how the brand should be applied/represented is usually thought about in the second hand, or not included at all. \n\n _Amount: 1_\n \n- #### Design kit/library (design)\n A designer resource file with all the available building blocks that make up the digital design language of a brand and/or the user interface of a product. This is usually only visual(no code) and lives in the design software of the designer's choosing. For us this used to be Sketch, but we recently moved to Figma. Can also include documentation and examples of how the different building blocks should be applied and utilized. \n\n _Amount: 1_\n \n- #### Style sheet (front-end)\n A set of styling properties to be applied when rendering a web page, usually in the format of CSS. This can include things related to the brand guidelines such as font size, colors, etc. but also things related to web layout such as the margins and paddings of different web elements.\n\n _Amount: 1_\n\n- #### Component library (front-end)\n A set of dynamic web components that can be used in a development environment in order to quickly build user interfaces. This helps to ensure consistency, to avoid rebuilding the same component more than once and to avoid changing said component in more places than one, and subsequently help reduce development time. \n\n _Amount: 3_\n \nAll of the above mentioned things, together with rigorous documentation, amount to what’s called a design system. Having it all combined in a structured way is key to getting the most out of such a system. In our case, most of these things were separate and not necessarily connected to each other. But what stands out most of the things above is probably the fact that we, over time, had amounted to 3 different component libraries. I mentioned earlier how that scenario had transpired so I won’t go into too much detail as to how that happened, but if you’re a developer in a small to medium-sized company and I mention “rebrand” and “new techstack” you can probably figure out how. However complex, this also proved to be an excellent opportunity for our developers and for us in the design team. We finally get to unify our component libraries into one, while simultaneously aligning it with our design kit and expanding the guidelines with new and updated documentation. Thus ensuring that designers and developers speak the same language and share the same single source of truth.\n\n### A guild forms\nTo kickstart this process we formed a project group(or ‘guild’) composed of 2 designers and 2 developers, each designer and developer from the two consumer-facing scrum teams. The idea was to let the developers work on the migration and unification of the component libraries in collaboration with us designers in the same project, making it easier to align and to create co-ownership of the product. Our first step was to decide on the structure of our component library, this way the developers could slot all the existing, reworked and new components into the right place in the new library. Easy enough right? Well, here comes our first challenge. We initially wanted to take an atomic approach and build our components from the well known and widely used atomic design principles. We also needed to consider the 3 different “product groups” which the library should apply to, all still utilizing the same style properties. \n\nVandebron has a wide range of products serving different platforms, with the visual language remaining the same but where the user interface might differ. This requires the top elements of the system(such as colors and typography) to be shared across all products, whereas the lower you get the more product-specific an element becomes. This is the reason why we wanted to structure the system according to the principles of Atomic Design first, in order to assign the components to a hierarchical structure.\n\n![Atomic Design](/images/AtomicDesign.jpg \"Atomic Design\")\n\nWith this approach the atoms would work like design tokens and the molecules would be components general enough that they’d be shared across all product groups, this CORE part of the library would essentially be the stylesheet that impacts all visual aspects of the digital brand experience. Only on organism-level do we start to differentiate what product group the component belongs to. So a change to the CORE parts of the library(atoms or molecules) would impact all components in all product groups.\n\nHowever, this approach actually made less sense from a development perspective. Not that it wouldn’t work or that the categorization didn’t make sense, but it would require us rewriting all the already existing components. Components that are actively in use. We deemed this approach a bit too high-risk and high-effort for the time being and started looking into alternatives, while still keeping the atomic structure as a more long-term goal. Another thing our initial idea didn’t take into account was the experience of the future main user of the library, **_the developer!_** Organizing a design system after the brand properties and product groups makes a lot of sense from a designers or a marketeers perspective, and it should probably still be presented outwards that way, but a component library is something else(remember?). So based on our development environment and the way we build our websites and apps our developers suggested a different structure:\n\n![Iteration](/images/Iteration.jpg \"Iteration\")\n\nIn this structure, similar to the previous one, the components are instead categorized and sorted by how they should be applied to the page or application that’s being built. Styles, layouts and inputs are general enough to be applied to all product groups whereas from the surface level the components start becoming more specific in their use case. That way, the components can be separated into specific or even several product groups. In this format the components themselves are not as intertwined as in the atomic structure, albeit still connected by the style element. So while it’s a bit more resistant to overall changes the main idea of having the same style properties applying to everything still works, and it helps us designers to better relate and contextualize what we’re designing from more of a development perspective, thus helping bridge the gap between development and design even further. The main insight we drew from this experience is to not let industry standards and certain trends dictate what you should do. Sure they’re important to keep an eye on, but do it with carefulness and always apply an asterisk to it. Figure out what works best for your specific situation and what’s realistic in the short-term vs. in the long-term. There’s no one-size-fits-all.\n\n### Speaking the same language\nWith the component library migration now underway, we started looking into ways to improve our system from the designers' side of things. As previously mentioned, we had just gone from using Sketch to using Figma and with that came a good opportunity to rebuild, adjust and expand our design kit also. We did that by removing, adding, simplifying and renaming a lot of what was in there since before and with the design kit now adjusted to match the component library we were now also speaking the same language. We can actually now compare this side-by-side with the tools we’re using. In Storybook we have attached the Figma design of every component, simply by activating the feature and pasting the link to its page or artboard in the Figma file. This will refresh in almost real-time if any changes are made so we can easily spot any differences and inconsistencies between what’s live and how the design looks. In Figma, we try to document all our components and give some context as to how it works and should be applied. This is now also directly visible to the developer in the context of the component library. Expanding on our documentation and exposing our digital design guidelines like that has been a great way to create a shared understanding of our designs. Rather than just an image being tossed over a fence, there is now quite literally a direct connection between design and development and therefore also more of a shared ownership.\n\n![Storybook & Figma](/images/StorybookFigma.jpg \"Storybook & Figma\")\n\n### Further defining the process\nAs all the alignment on the design side and the migration neared completion, we started seeing a lot of things that could be improved upon or even added to our component library. When we started logging these things down on our project backlog we quickly realized that the scope of our project had quickly been growing into something beyond what was initially intended, and that rather than giving us focus this guild format was instead at risk of creating an isolated bubble of knowledge surrounding the design system. This prompted us to gauge the opportunity and capacity among our development teams to instead tackle these tasks together, either alongside or within their respective day-to-day tasks. In order to do so we needed the buy-in from key stakeholders such as the product owners from the respective development teams. It’s obviously a big ask to get 1 developer from each team to work on improving a component library, especially when they’ve already given us a quarter on migration and have other important business and/or user needs to tend to. So instead, we looked into how we can embed the improvement and further development of our design system into the developers current processes and primary day-to-day work. We structure this by linking our component library improvement/addition tickets to relevant tickets in their respective sprints. In defining the workflow like this, our 2 designer 2 developer guild in effect rendered unnecessary and instead we opened up the co-ownership and contribution to all developers in all customer-facing development teams and in the process of it preventing isolating knowledge too much. In opening up the process like this, another positive side effect we see is the involvement, engagement and subsequent use of our component library going up. With the product designers now also actively a part of the front-end guild meetings, we have an ever bigger forum and bigger opportunity to build a world class component library and design system while also having more hands on deck to work on maintenance and improvements. We still have a long way to go, but all parts are now even more aligned and the future is looking bright!\n\n### What’s next\nIn the newly formed designer+developer guild, the work of defining requirements and improvements on the design system continues. From the design side we’re also looking to constantly improve on the documentation and the presentation of our system. This is something we imagine we’ll keep on doing continuously and iteratively for as long as it’s needed, if not even forever. After all, “design is never done” and a design system can and should be a living thing constantly evolving along with the products and the brand it serves, and in extension even the promise the brand and it’s products. In our case, that’s to aid in **accelerating the energy transition towards 100% renewable energy**. More on how we exactly do that, and how we always aim to design for impact, in the next blog post. Thanks for reading and stay tuned!\n\n\nPetter Andersson, Product Designer at Vandebron\n\n\n\n_If the type of work mentioned in this blog post sounds interesting to you, [take a look at our job openings here](https://werkenbij.vandebron.nl/l/en/)._ \n","meta":{"title":"The difference between a component library and a design system, and how they can help bridge the gap between design and development","description":"A while back we started a rather extensive project of migrating and unifying our component library, these are some of the learnings we made during the project.","createdAt":"Wed Jul 06 2022 02:00:00 GMT+0200 (Central European Summer Time)","coverImage":"images/WindmolenCover.jpg","imageSource":null,"tags":"product, design, design system, component library","author":"Petter Andersson","slug":"blog/the-difference-between-a-component-library-and-a-design-system","formattedDate":"6 juli 2022","date":"Wed Jul 06 2022 02:00:00 GMT+0200 (Central European Summer Time)"}},{"content":"\n# Signing and verfiying SOAP messages with wss4j and Scala\n\nSOAP is not dead. It is an established, XML-based and mature messaging protocol that comes with built-in security mechanisms, integrity checks, content validation and much more. A lot of enterprises and corporations are using it (sadly) still.\nJust recently, Vandebron had to implement a SOAP client to communicate with an external party. \nThis blog post will explain with code examples how we at Vandebron are signing and verifying SOAP messages for our latest SOAP client implementation. \n\nFor this process, we are using Apache's Web Service Security Library [wss4j](https://ws.apache.org/wss4j/) as it is a proven tool in the WSS context and provides, as a Java library, great interoperability with the programming language Scala.\n\n## Signing SOAP messages\n\nHere we will take a look at the necessary steps to sign a SOAP message like this one:\n```xml\n\n \n \n Hello World\n I am just a test\n \n\n```\nTo look after signing like this:\n```xml\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n 7KfPcTwDYWtLj4ZVWmWmVqX4IGwbBAAmUPigCdXdk4U=\n \n \n \n OBnbBWv8S70xDDn5uG++7cTRFa2Uz3D47oxTHuO163Y3/V7H35M1GHXbKaUDOHsgsfx3SdVmVi++ra06cpwJknzqoIQgDV9Qc0ydzfxljCqupPKBnfONDYJtihEE1jtQ0RP7OLzPVNUpgOgHqbLwJu2pRUA05ool+lxIs924OwPVPKyUryoYwWhwY1ttY4P+WY2L3ZqsH3fgoLCyjlvhDEAhsP9PCxsEzPSq3ECC55Nh7nqMoHPj2uNxonuMlPeYbrlMnwyiqEW8s3Sc+WmfiIOgekRE1AdNhpn3ARlO490nObQtXCU/TxeTfbh98TMbQRZWWyT4HuLS3fF6aeyD/Q==\n \n \n \n \n ox4ajWTdigy9oApTYs97CuCV/4k=\n \n \n \n \n \n \n \n Hello World\n I am just a test\n \n\n```\n\nFor implementing the steps of the blog post you will need:\n- a SOAP service you want to send messages to\n- documentation of that SOAP service that describes:\n - signature algorithm\n - canonicalization method\n - digest algorithm\n - key identifier type\n- a private key with which you will sign your messages\n- a certificate that is the counterpart of the private key\n- (optional) a pool of trusted certificates\n\nOur private and public key pair are available in the PKCS#12-format (.p12 file extension). Check out [this](https://www.ssl.com/how-to/create-a-pfx-p12-certificate-file-using-openssl/) to learn more about this format and how to achieve it.\nThe pool of trusted certificates are in the [PKCS#7 format](https://www.ssl.com/guide/pem-der-crt-and-cer-x-509-encodings-and-conversions/) (.p7b file extension).\n\nFirst we have to setup the necessary dependencies:\n\n```scala\n // in your build.sbt or project/Dependencies.scala\n // enabling signing and signature verification for SOAP messages\n lazy val webServiceSecurity = Seq(\n \"org.apache.wss4j\" % \"wss4j\" % \"2.3.1\" pomOnly (),\n \"org.apache.wss4j\" % \"wss4j-ws-security-dom\" % \"2.3.1\",\n \"org.apache.wss4j\" % \"wss4j-ws-security-common\" % \"2.3.1\"\n )\n\n libraryDependencies ++= webServiceSecurity\n```\n\nNext, we continue with a scala representation of our certificate we are using for signing:\n\n```scala\n import org.apache.wss4j.dom.WSConstants\n \n // algorithm configuration\n object SigningCertificate {\n val CanonicalizationMethodURI: String = \"http://www.w3.org/2001/10/xml-exc-c14n#\"\n val DigestAlgorithmURI: String = DigestMethod.SHA256\n val SignatureAlgorithmURI: String = \"http://www.w3.org/2001/04/xmldsig-more#rsa-sha256\"\n val KeyIdentifierType: Int = WSConstants.SKI_KEY_IDENTIFIER\n }\n\n case class SigningCertificate(keyStore: KeyStore, password: String) {\n require(\n keyStore.aliases().asScala.size == 1,\n s\"Certificate of Keystore needs to have one alias but had ${keyStore.aliases().asScala.size}\"\n )\n val alias: String = keyStore.aliases().nextElement()\n\n override def toString: String = s\"SigningCertificate(alias=$alias)\"\n }\n```\nIn the documentation of the SOAP service that you want to call should stand some information regarding the canonicalization method, signature algorithm, digest algorithm, and the key identifier type. Those are algorithms and information that define the signing process and we explain roughly now.\n\nBefore signing a message it has to be canonicalized. \"Canonicalization is a method for generating a physical representation, the canonical form, of an XML document that accounts for syntactic changes permitted by the XML specification\" (from [here](https://www.di-mgt.com.au/xmldsig-c14n.html)). In our case, the Exclusive XML Canonicalization is used.\n\nThe digest algorithm is used to ensure the integrity of the message during the verification of a signature. The algorithm is used to calculate a hash of the signed message. It should be documented in the SOAP service documentation. Here we will use SHA256 as a hashing algorithm.\n\nThe signature algorithm describes how the message will be signed. It can be defined in the SOAP service documentation but in the worst case you can read this algorithm from the certificate itself by using [`keytool`](https://docs.oracle.com/en/java/javase/12/tools/keytool.html):\n```bash\n$ keytool -list -v -keystore signature.p12\nEnter keystore password: ...\n\n[...] # more information about the certificates\n\nSignature algorithm name: SHA256withRSA # thats what we are after!\n\n[...] # more information about the certificates\n```\nAccording to the keytool inspection we will use SHA256withRSA (http://www.w3.org/2001/04/xmldsig-more#rsa-sha256) for signing.\n\nLast but not least, in our signature, a `` element is included. This element contains information about the public key of the sender (us) and is needed for the signature verification once the message is received (read more [here](https://www.xml.com/pub/a/2001/08/08/xmldsig.html)). Since we have our public key provided we don't need to do much here. The `KeyIdentifierType` describes which form of key identifier is used to present the public key information.\n\nHaving all this information about our certificate in place, we build the mechanism to load in our signing certificate. For this, we create the object `KeyStoreBuilder`.\n\n```scala\nimport java.io.{File, FileInputStream}\n\nobject KeyStoreBuilder {\n\n def loadSigningCertificate(signingCertificate: File, password: String): SigningCertificate = {\n val fis = new FileInputStream(signingCertificate)\n val ks: KeyStore = KeyStore.getInstance(\"PKCS12\")\n ks.load(fis, password.toCharArray)\n SigningCertificate(ks, password)\n } \n}\n```\nBear in mind, that you probably **don't** want to version any sensitive information like private keys and passwords hard-coded or in any environment variables, so a safe mechanism for storing/fetching passwords and certificates (like [Vault](https://www.hashicorp.com/products/vault)) should be in place.\n\nWith the signing certificate in place, we can actually start signing a message. The next code example contains quite some Java boilerplate from wss4j that is required to make the signing mechanism work.\n\nTo restrict the usage of Java classes to a small portion of our code we will firstly implement a conversion method `.toElem` inside of the companion object `SigningService`:\n\n```scala\n import java.io.StringWriter\n import javax.xml.transform.{OutputKeys, TransformerFactory}\n import javax.xml.transform.dom.DOMSource\n import javax.xml.transform.stream.StreamResult\n\n import org.w3c.dom.Document\n\n import scala.xml.Elem\n\n object SigningService {\n implicit class RichDocument(document: Document) {\n private val tf = TransformerFactory.newInstance()\n\n def toElem: Elem =\n val transformer = tf.newTransformer()\n transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, \"yes\");\n val stringWriter = new StringWriter()\n transformer.transform(new DOMSource(document), new StreamResult(stringWriter))\n scala.xml.XML.loadString(stringWriter.getBuffer.toString)\n }\n }\n```\nWith that, we can convert any `Document` SOAP message representation back to the `scala.xml` supported `Elem` format.\n\n```scala\nclass SigningService(signingCertificate: SigningCertificate) {\n\n // importing our conversion method\n import SigningService.RichDocument\n\n /**\n * REQUIRED, otherwise it will throw:\n *\n * org.apache.wss4j.common.ext.WSSecurityException:\n * You must initialize the xml-security library correctly before you use it.\n * Call the static method \"org.apache.xml.security.Init.init();\"\n * to do that before you use any functionality from that library\n */\n org.apache.xml.security.Init.init()\n \n private val documentBuilderFactory = DocumentBuilderFactory.newInstance()\n private val crypto: Merlin = getCrypto\n\n crypto.setKeyStore(signingCertificate.keyStore)\n\n def signElement(elem: Elem): Elem = {\n documentBuilderFactory.setNamespaceAware(true)\n // converting Elem to Document (Scala to Java conversion)\n val doc = documentBuilderFactory.newDocumentBuilder().parse(new InputSource(new StringReader(elem.toString())))\n\n // WSSecHeader wraps around the document we want to sign\n val header = new WSSecHeader(doc)\n header.setMustUnderstand(true)\n header.insertSecurityHeader()\n\n // start building Signature, use the (wrapper) header-instance\n val builder = new WSSecSignature(header)\n builder.setUserInfo(signingCertificate.alias, signingCertificate.password)\n\n // setting algorithms\n builder.setSignatureAlgorithm(SigningCertificate.SignatureAlgorithmURI)\n builder.setSigCanonicalization(SigningCertificate.CanonicalizationMethodURI)\n builder.setDigestAlgo(SigningCertificate.DigestAlgorithmURI)\n builder.setKeyIdentifierType(SigningCertificate.KeyIdentifierType)\n builder.setAddInclusivePrefixes(true)\n\n // signing the document!\n val signedDocument = builder.build(crypto)\n // conversion back to Elem\n signedDocument.toElem\n }\n\n private def getCrypto: Merlin = {\n val properties = new Properties()\n properties.setProperty(\"org.apache.wss4j.crypto.provider\", \"class org.apache.ws.security.components.crypto.Merlin\")\n CryptoFactory.getInstance().asInstanceOf[Merlin]\n }\n}\n```\n\nWss4j is a library that maintains an internal state during a signing process, but to avoid confusion it can be summarized as:\n1. `WSSecHeader` wraps around the document to be signed\n2. the WSSecHeader instance `header` will be used as part of the `WSSecSignature`-Builder\n3. the WSSecSignature instance `builder` gets configured with all necessary information, which algorithms are used for signing, digesting, canonicalization, which key identifier should be included. Those settings an vary from webservice to webservice.\n\nThe actual signing of the document, which is now nested like a matryoshka doll, is happening with the help of an instance of `Crypto`. `Crypto` will contain either a keystore or a truststore or even both. It needs to be specified in the `crypto.properties` file or a runtime which class of Crypto will be used.\n The most common one is [`Merlin`](https://ws.apache.org/wss4j/apidocs/org/apache/wss4j/common/crypto/Merlin.html).\nWe have decided to specify its configuration during runtime, since it is more visible than a properties file. Nevertheless, the `crypto.properties`-file needs to exist in your `resources` folder neverthless otherwise you will get a following `WSSecurityException`:\n```java\n org.apache.wss4j.common.ext.WSSecurityException: No message with ID \"resourceNotFound\" found in resource bundle \"org/apache/xml/security/resource/xmlsecurity\"\n [... rest of stacktrace ...]\n Cause: java.nio.file.NoSuchFileException: crypto.properties\n```\n\nAnd that's it! The `KeyStoreBuilder` helps us to load a `SigningCertificate` and the `SigningService` uses this loaded certificate to sign SOAP messages. \nA receiver of our SOAP message has all the necessary information in our signature to verify that this message has not been tampered with and we are the original sender.\n\nThis verification is something we should also do on our side for incoming messages. So let's take a look at how we can verify the signature of received messages.\n\n## Verification of SOAP messages\n\nVerifying the signature of incoming messages is equally important to ensure that the connection is secure. A verification process will tell you if the message is coming from a trusted source and has not been tampered with.\n\nAs previously mentioned we need our source of truth, a pool of trusted public keys from all parties which will receive our SOAP messages. These build the basis of the trust store.\n\nWe will create a `TrustedCertificates` wrapper class in which we will load in the trust store and add this method to the `KeyStoreBuilder`.\n```scala\ncase class TrustedCertificates(keyStore: KeyStore)\n\nobject KeyStoreBuilder {\n\n def loadTrustedCertificate(certificates: Seq[File]): TrustedCertificates = {\n val ks = KeyStore.getInstance(KeyStore.getDefaultType)\n // we just want the keystore to act as a truststore (only containing trusted certificates), so we initialize it empty\n ks.load(null, null)\n val cf = CertificateFactory.getInstance(\"X.509\")\n certificates.foreach { file =>\n CloseableUtil.using(getClass.getResourceAsStream(file.getPath)) { fis =>\n val certPath = cf.generateCertPath(fis, \"PKCS7\")\n certPath.getCertificates.asScala.toList.foreach { certificate =>\n ks.setCertificateEntry(file.getName, certificate)\n }\n }\n }\n TrustedCertificates(ks)\n }\n}\n```\nThis trust store is under the hood also just a KeyStore, without containing a private key that requires a password, that's why we can initialize the KeyStore with `null`-parameters.\n\nNow, the SigningService needs to be extended with this trusted certificates and a `verifySignatureOf`-method:\n\n```scala\nimport java.io.StringReader\nimport java.util.Properties\nimport javax.xml.parsers.DocumentBuilderFactory\n\nimport org.apache.wss4j.common.crypto.{ CryptoFactory, Merlin }\nimport org.apache.wss4j.dom.engine.WSSecurityEngine\nimport org.xml.sax.InputSource\n\nimport scala.util.{Failure, Success, Try}\nimport scala.xml.Elem\n\nclass SigningService(signingCertificate: SigningCertificate, trustedCertificates: TrustedCertificates) {\n\n private val engine = new WSSecurityEngine()\n private val documentBuilderFactory = DocumentBuilderFactory.newInstance()\n private val crypto: Merlin = getCrypto\n\n crypto.setKeyStore(signingCertificate.keyStore)\n crypto.setTrustStore(trustedCertificates.keyStore)\n\n def verifySignatureOf(elem: Elem): Boolean = {\n documentBuilderFactory.setNamespaceAware(true)\n val doc = documentBuilderFactory.newDocumentBuilder().parse(new InputSource(new StringReader(elem.toString())))\n\n Try(engine.processSecurityHeader(doc, null, null, crypto)) match {\n case Success(_) => true\n case Failure(exception) =>\n // replace with proper logging\n println(\n s\"Unsuccessful signature verification, it is most likely that the certificate used for signing is not in our Truststore: ${exception.getMessage}\")\n false\n }\n }\n\n private def getCrypto: Merlin = {\n val properties = new Properties()\n properties.setProperty(\"org.apache.wss4j.crypto.provider\", \"class org.apache.ws.security.components.crypto.Merlin\")\n CryptoFactory.getInstance().asInstanceOf[Merlin]\n }\n}\n```\n\nAnd with that, we have completed our roundtrip of signing and verifying SOAP messages!\n\nHere are gists, articles, and documentation that inspired and helped us to figure out the signing and verification process for our SOAP client. Feel free to check them out!\n\n* * *\n\n### Sources\n\n[WSSecurityVerifier by Luis Wolff](https://gist.github.com/luiswolff/1d388ec8c1d63cfb58974a6f826bc1be) \n\n[WSSecuritySigner by Luis Wolff](https://gist.github.com/luiswolff/64d15a99fbb5ec4b4e90eec04b09e053)\n\n[Unit Tests from ws-wss4j](https://github.com/apache/ws-wss4j/blob/master/ws-security-dom/src/test/java/org/apache/wss4j/dom/message/SignatureTest.java)\n\n[An Introduction to XML Digital Signatures](https://www.xml.com/pub/a/2001/08/08/xmldsig.html)\n\n[SOAP vs. REST](https://stackify.com/soap-vs-rest/)","meta":{"title":"Signing and verifying SOAP messages with wss4j and Scala","description":"This blogpost will explain with code examples how we at Vandebron are signing and verifying SOAP messages for our latest SOAP client implementation.","createdAt":"Mon Jun 28 2021 02:00:00 GMT+0200 (Central European Summer Time)","coverImage":"images/soap.jpg","imageSource":"https://cdn.pixabay.com/photo/2020/03/15/18/36/wash-4934590_960_720.jpg","tags":"SOAP, xml, scala, wss4j, signature, verification","author":"Katrin Grunert","slug":"blog/how-to-sign-soap-messages","formattedDate":"28 juni 2021","date":"Mon Jun 28 2021 02:00:00 GMT+0200 (Central European Summer Time)"}},{"content":"\nAt the end of March, we organized a public hackathon to create solutions to tackle climate challenges. After having done internal hackathons, we thought it was time to share our technologies with other innovative people and companies. Together with a group of partners, and enthusiastic participants, spend three full days of (remote) hacking with great results.\n\n### Why organize a public hackathon?\n\nClimate change is one of the many pressing challenges our society is currently facing. At [Vandebron](https://vandebron.nl/), we want to continue finding ways to tackle this immense challenge. That’s why we decided to organize a 3-day GreenTech hackathon that ran from March 31st to April 2nd, 2021. We've been organizing internal hackathons for the past four years, to foster innovation within our company and allow our developers to work on something exciting without any constraints. If you want to read more about why we organize internal hackathons, you can find an article by our CTO [here](https://www.vandebron.tech/blog/power-regular-hackathons). \n\nBy organizing a public hackathon, we hoped to attract a bigger audience, possibly even outside our country, The Netherlands, and attract partners to work together with. We succeeded in both, and together with [Hack the Planet](https://hack-the-planet.io/) and [Top Dutch Solar Racing](https://solarracing.nl/), we wanted to find technological solutions to problems in wildlife conservation and renewable energy. For these three days, all participants got the opportunity to work on challenges from our partners, access their technology and knowledge, and got the chance to win unique prizes. Also, we organized a free event with speakers Florian Dirkse ([The Ocean Cleanup](https://theoceancleanup.com/)), Thijs Suijten (Hack the Planet) and Heleen Klinkert ([Nieuw Groen](https://nieuw-groen.nl/)). \n\n### Looking back\n\nThe event started on March 31st, when all hackathon challenges were presented and the participants could select which challenge they wanted to work on. People from all over The Netherlands (and even beyond) signed up for the hackathon, ranging from students from the University of Amsterdam to young professionals looking for a job. The first challenge the participants could subscribe to was from Vandebron itself, where teams got the opportunity to use a selection of our Electronic Vehicle (EV) data. With this data, they could for example make a forecast on the amount of charging sessions we could expect on a typical day. Second, our partner Hack the Planet presented their challenge that was aimed at thinking of innovative solutions for their project [Hack the Poacher](https://www.hackthepoacher.com/). With Hack the Poacher, they install smart camera traps in African wildlife reservations to detect poachers. The teams could use their camera traps and data to create more solutions to map the poachers or use the camera traps for other needs. Finally, the students from Top Dutch Solar Racing presented a challenge to simulate the race they were supposed to join at the end of the year in Australia. Using their weather and traffic data, the teams could simulate the race and predict how much time they would need to complete the race. After selecting a challenge, all teams started the hackathon and participated in sessions to learn more about the challenges to get started.\n\nAll teams continued working on the hackathon challenge on the second day, after a nice warming-up quiz about climate change in the morning. For most teams this second day was when their project started to take shape, and they got a better idea about what they would be presenting on the final day. This second day was also an opportunity for non-technical people to get to know Vandebron and their partners better as we organized inspirational sessions with talks from different speakers in the afternoon. One of the co-founders from The Ocean Cleanup, Florian Dirkse, inspired us with his story behind making a difference in the world. After which, one of our hackathon partners Thijs Suijten, from Hack the Planet, demonstrated how technology can be used for the good. Our third, and final, speaker Heleen Klinkert (Nieuw Groen), showed how we can compensate for our CO2 emissions by storing them in the soil.\n\nOn the final day of the hackathon, all teams had to finalize their projects and create a presentation for the closing ceremony. During this ceremony, all participants and partners looked back at the past three days and shared what they had been working on during the hackathon. For every challenge, one team could win and take home several prizes, sponsored by [Marie-Stella-Maris](https://marie-stella-maris.com/), [EV Experience](https://evexperience.nl/), and [Klimaatroute](https://www.klimaatroute.nl/). The first presentations were for the Vandebron challenge about EV forecasts. This challenge was won by not one but two teams as the jury and audience were so impressed by their solutions. Both teams created not only the forecast based on the sample data provided, but also created interactive dashboards. On the challenge for Hack the Planet, the team that won came up with a unique solution to use the camera traps to detect wild animals on the streets. For countries like India, this is a huge problem, as wild animals get stuck in traffic or walk through rural areas. The final winner of the hackathon was a group of students that simulated the Top Dutch Solar Racing trip through Australia and forecasted they could complete the race within 7 days.\n\n### Thanks everyone\n\nI'd like to thank all the participants, prize/challenge partners, and speakers for their efforts during these days. The GreenTech Hackathon 2021 was a huge success thanks to everyone that has been involved. Keep following the [vandebron.tech](https://vandebron.tech) to be updated on future hackathons and events.\n","meta":{"title":"Looking back at the Vandebron GreenTech Hackathon 2021","description":"At the end of March, we organized a public hackathon to create solutions to tackle climate challenges. After having done internal hackathons, we thought it was time to share our technologies with other innovative people and companies.","createdAt":"Mon Apr 05 2021 02:00:00 GMT+0200 (Central European Summer Time)","coverImage":"images/looking-back-at-vandebron-greentech-hackathon-2021.png","tags":"hackathon, innovation","author":"Roy Derks","slug":"blog/looking-back-at-vandebron-greentech-hackathon-2021","formattedDate":"5 april 2021","date":"Mon Apr 05 2021 02:00:00 GMT+0200 (Central European Summer Time)"}},{"content":"\nAt Vandebron we have been organizing a regular hackathon for the last four years. Every three months we organize a two-day event. At first glance this seems quite an investment. Eight days a year, almost losing two working-weeks of productivity for your teams! \n\nOur company is like any other. Our roadmaps are stuffed, our backlogs are never-ending and pressure for delivering value to our customers is always present. Our ambitions are always higher than what we can handle with the amount of teams and people available. We like to say: ‘the energy transition can’t wait!’, but we sure do have to prioritize our projects very carefully.\n\nHowever this does not stop us from organizing our quarterly hackathons. Most of the time our regular hackathons are light-weight. People within the company know how it works. We try not to waste too much time in ‘organizing’ the event. We get right to it. \n\n#### Reasons why you should be organizing (regular) hackathons:\n- Fun - this reason does not need much explanation. Working on challenging, fun and creative ideas with uncertain outcome in a not-business-as-usual way. It makes you step out of your daily comfort zone and explore new things. \n- Walk the extra mile - Some team-members will have the energy, enthusiasm and commitment to use their spare time to fuel their curiosity and bring new insights to the workplace. These are the same people that you also expect to walk the extra mile if the team- or company objectives are at stake. This is in that same spare time! But in the end, if you value your teams to continuously think about new ideas, insights and work on out-of-the-box ideas, it is not a weird idea to create this environment within the company.\n- Bottled up energy - our people are focused on reaching goals and objectives. Every day, every week and every sprint the focus is clear. This also means that there is not always time for creative or high risk escapades that could hurt the overall team objectives. This might give an unsatisfied feeling to people. If the bottled up energy can not be released, engineers might get frustrated. But maybe even more important, you might be missing opportunities for the company.\n- Cross team collaboration - in an agile way of working the concept of the team is very important. At Vandebron we focus on teams staying together for a long period of time. This makes the relationship between individuals stronger, the knowledge of the product deeper and the team as a whole more effective. However, the company is bigger than your team. There might be different ways of connecting with other people within your company, but a hackathon is an ideal way of linking yourself up with people that you can learn from. It can really bring you new insights as an individual, and it will also be an investment for improved cross-team collaboration going forward.\n- Learning organisation - as mentioned, hackathons give you an excellent opportunity to learn new things. For yourself, but definitely also for the company. In my experience I often see that topics get selected that have high-risk and high-reward kind of characteristics. These topics can be scary to touch, which make you go out of your comfort zone. This is where you learn the most! These high-risk and high-reward projects are also very likely to fail, meaning that the reward is not as high as expected, or the complexity and risks are even greater than anticipated. At these moments the pressure-cooker of a hackathon is very valuable, because it forces the participants to draw conclusions in a short time-frame. The insights gained from these projects can be used to further steer the roadmap. And last but not least, it supports building a culture of being bold enough to try new things, and fail fast. I’ve noticed this is appreciated by a lot of people within the company and the hackathon contributes to a culture of innovation.\n\n#### Our most important learnings over the years\n- Spotlights on - It is good to put teams and their results in the spotlight. Let them take the podium and make sure there is an audience. However don’t make it too much about winning. Ideas that have completely failed are just as important as over-engineered fancy product demos. At Vandebron we like to declare ‘winners’ in different categories: ‘Fun & Original’, ’Impactful’, ‘Exploration & Learning’ and ‘Technical achievement’. \n- Harvest your ideas continuously - during normal work and life you hit those topics that you would like to investigate a bit deeper. But while you stumble upon such a topic you don’t have the time to dive into it. So therefore, write your idea down and publish it in the ‘hackathon-idea-box’ for everyone to see! It might already give you some good conversations during coffee or lunch, and it might already generate you some people that would like to join forces with you during the hackathon. Because rest assured, a new hackathon is always coming up!\n- To-theme-or-not-to-theme - we have experimented with adding a theme to a hackathon. It can help the company to generate ideas and action in a certain area of interest. It also helps to generate more focus within the company on a certain persistent challenge that we feel deserves a solution. Although everyone will be working on different sub-topics the full event will be experienced as more correlated and unified. But be careful not to push normal business-projects disguised as hackathon projects to your teams. This goes against the basic concept of a hackathon. At Vandebron we sometimes pick a theme if we would like to motivate people to think about ideas in a certain direction. But most of the time we keep it open.\n- Participation is optional. - At Vandebron we have autonomous teams with professionals that can manage their own agenda. As a team and as an individual. We put effort in promoting the hackathon by trying to make people enthusiastic about participating. But in the end people make their own decisions. Sometimes the team and company objectives do need to have priority, but the teams are perfectly able to make this judgement call themselves.\n- Magnify impact - show everyone what the impact is they have been making. It is good if people recognize how some projects have become reality and that feedback will be appreciated by the community. It gives people a feeling that the podium of the hackathon is a strong force. And ultimately that is how you also proof the value of organizing a hackathon.\n\nFor our next hackathon we are opening our (virtual) doors also for guests, as we are organizing a GreenTech hackathon with other sustainability minded companies (‘Hack the Planet’ and ‘Top Dutch Solar Racing’). You can find more information and sign up via [this link](https://www.vandebron.tech/greentech-hackathon). It is the first time we do it like this, and we sure will learn another thing or two!\n","meta":{"title":"The power of regular hackathons","description":"At Vandebron we have been organizing a regular hackathon for the last four years. Every three months we organize a two-day event. At first glance this seems quite an investment. Eight days a year, almost losing two working-weeks of productivity for your teams!","createdAt":"Fri Mar 19 2021 01:00:00 GMT+0100 (Central European Standard Time)","coverImage":"images/power-regular-hackathons.png","tags":"hackathon, innovation, scrum","author":"Arno van den Berg","slug":"blog/power-regular-hackathons","formattedDate":"19 maart 2021","date":"Fri Mar 19 2021 01:00:00 GMT+0100 (Central European Standard Time)"}},{"content":"\nIn October 2020 D2IQ [announced](https://d2iq.com/blog/d2iq-takes-the-next-step-forward) that they are moving onwards with their Kubernetes offering. Vandebron has been a D2IQ customer for their DCOS offering, we were just in the middle of a migration of our first workloads to DCOS Enterprise. We have evaluated the D2IQ K8s offering and decided to go for another Kubernetes product. We had a few migrations over the years, we migrated from Azure to AWS, we migrated workloads from normal instances to spot instances and all these migrations were done with nearly any downtime. We plan to reduce the downtime to a couple of minutes this migration and this is a real challenge. The first challenge that we will discuss today: We want to pair our Kubernetes clusters to the DCOS/Mesos clusters, while we move a workload it should be able to connect to its dependencies in the DCOS cluster. We use DCOS for our NoSQL databases like Cassandra, internal data that we want to keep internal. Pairing DCOS and Kubernetes clusters enable us to reduce downtime, enabling us to switch back if we run into issues and move faster because it reduces complexity.\n\n## L4LB\n\nThe internal layer 4 load balancer DCOS provides is used in the majority of our workloads. When our data scientists schedule a spark driver, they connect to the spark dispatcher through the Layer 4 load balancer. Most of the DCOS frameworks use this Layer 4 load balancer as an internal service discovery tool, with Vandebron we use this layer 4 load balancer to communicate between services. In a default DCOS set up this load balancer responds on domain names like: `spark-dispatcher.marathon.l4lb.thisdcos.directory:7077`\n\nWhen we ping the spark dispatcher we get the following:\n\n```bash\nPING spark-dispatcher.marathon.l4lb.thisdcos.directory (11.155.161.35) 56(84) bytes of data.\n64 bytes from 11.155.161.35 (11.155.161.35): icmp_seq=1 ttl=64 time=0.024 ms\n```\n\nAfter some investigation we found out that this IP range is not actually on a network interface, it is a Linux kernel functionality called `IPVS`. With IPVS you can do layer 4 load balancing, you provide the target location and the location you want to respond on.\n\nWhen we search for the IP from the spark dispatcher with ipvsadm, we get 3 results:\n\n```bash\nsudo ipvsadm -L -n |grep --color '11.155.161.35\\|$'\nTCP 11.155.161.35:80 wlc\n -> 10.2.7.146:16827 Masq 1 0 0\nTCP 11.155.161.35:4040 wlc\n -> 10.2.7.146:16826 Masq 1 0 0\nTCP 11.155.161.35:7077 wlc\n -> 10.2.7.146:16825 Masq 1 0 0\n````\n\nAs you can see the IP `11.155.161.35` points towards `10.2.7.146`, even the ports are configured and forwarded. We can add our route with ipvsadm, to understand IPVS a bit better. For example:\n\n```bash\nsudo ipvsadm -A -t 1.2.3.4:80 -s wlc # we add the target server and assign the scheduler\nsudo ipvsadm -a -r 10.2.7.146:16825 -t 1.2.3.4:80 -m # we configure the real server and target server and configure Masquerading\ncurl 1.2.3.4:80\n{\n \"action\" : \"ErrorResponse\",\n \"message\" : \"Missing protocol version. Please submit requests through http://[host]:[port]/v1/submissions/...\",\n \"serverSparkVersion\" : \"2.3.4\"\n}\n```\n\nThis results in that the spark dispatcher now also is available on `1.2.3.4:80`. As mentioned before we wanted to connect our DCOS and Kubernetes clusters, getting hundreds of entries from ipvsadm and manually adding them one by one didn’t sound appealing to us. Especially if you consider that sometimes services fail and run on a different port or different host after recovery, maintaining this by hand would be a nightmare. We therefore decided to build a tool to sync IPVS entries from DCOS to Kubernetes.\n\n## Stack\n\nWithin Vandebron we have our tech stack, we strongly believe it is good to eat your own dog food. When possible and when our use cases are similar we use the same tools as our Developers use. The parts of the stack we will be using are:\n\n- AWS ELB in front of Traefik 1.7\n- DCOS\n- Kubernetes\n\nWithin our platform team, we use Golang as our scripting language. Golang gives us the ability to build binary files with all the required libraries in the binary, we don’t have to install any packages, we do not even need to install Golang on the machine the application will be running on.\n\nIn our DCOS cluster we use Traefik 1.7, this version of Traefik only forwards HTTP requests. We decided to use Traefik to expose a JSON endpoint so we can gather the IPVS information from this location.\n\n## ipvs-server\n\nWithin our DCOS cluster we will expose the IPVS information through a JSON endpoint. We have built a tool for this to expose this information in multiple ways. In the next section, we are going to discuss some of the concepts and choices we made, we won’t deep dive into Go specifics. We have provided the entire code for this project in the examples directory of our GitHub repo:\n\n\nFirst, let’s discuss the library we use: . This library in its essence translates to ipvsadm commands, it helped save us time to implement this ourselves. There are some gotcha’s, such as newlines are not filtered out from the output. We solved this by cleaning up some of the data.\n\nIn the `childChan` function we create a go channel that is responsible for polling `ipvsadm` every 10 seconds and stores the result in a couple of variables we use in our HTTP endpoints. IPVS is a Linux kernel functionality and should be highly performant, we do not want to trigger kernel panics when the server gets overloaded with requests. We expect that every 10 seconds gives us accurate enough results, we can always lower this interval to ensure faster results. We also added in this function the string manipulation to ensure all the newlines were gone in the JSON output. The newline gave issues when we tried to add the IPVS scheduler entries.\n\n```go\nfunc childChan(c chan bool) {\n fmt.Println(\"Starting time based IPVS Admin poll\")\n\n pollInterval := 10\n timerCh := time.Tick(time.Duration(pollInterval) * time.Second)\n // Time based loop to generate Global variable\n for range timerCh {\n select {\n // when shutdown is received we break\n case <-c:\n fmt.Println(\"Received shutdown, stopping timer\")\n break\n default:\n var err error\n listIpvs.Save()\n ipvsString = fmt.Sprintln(listIpvs.Services)\n\n res := &responseObject{\n Services: listIpvs.Services,\n }\n \n ipvsJSONbyte, err := json.Marshal(res)\n if err != nil {\n logToErr.Printf(\"ERROR: -- Marshal JSON -- %v\\n\", err)\n }\n \n ipvsString = string(ipvsJSONbyte)\n ipvsJSON = strings.Replace(ipvsString, `\\n`, ``, -1)\n if debug != false {\n logToOut.Println(\"DEBUG: -- ipvsJSON --\", ipvsJSON)\n }\n }\n }\n}\n```\n\nNext is the index handler, we set our headers correctly and print the result as we would receive through ipvsadm. The index is mainly for our platform engineers to debug and verify the output. Thanks to this overview we found much faster that there was a newline hidden in the scheduler output.\n\n```go\nfunc index() http.Handler {\n // Generating the Index\n return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\n // Only available when debug is on\n if debug != false {\n logToOut.Println(\"DEBUG: -- index --\", ipvsString)\n }\n \n if r.URL.Path != \"/\" {\n http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)\n return\n }\n w.Header().Set(\"Content-Type\", \"text/plain; charset=utf-8\")\n // Site security testers expect this header to be set\n w.Header().Set(\"X-Content-Type-Options\", \"nosniff\")\n w.WriteHeader(http.StatusOK)\n fmt.Fprintln(w, ipvsString)\n })\n}\n```\n\nThe JSON endpoint is what we use in the client communicate with the server. \n\n```go\nfunc jsonz() http.Handler {\n // Generating the Index\n return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\n // Only available when debug is on\n if debug != false {\n logToOut.Println(\"DEBUG: -- jsonz --\", ipvsJSON)\n }\n \n if r.URL.Path != \"/json\" {\n http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)\n return\n }\n w.Header().Set(\"Content-Type\", \"application/json; charset=utf-8\")\n // Site security testers expect this header to be set\n w.Header().Set(\"X-Content-Type-Options\", \"nosniff\")\n w.WriteHeader(http.StatusOK)\n fmt.Fprintln(w, ipvsJSON)\n })\n}\n```\n\nWe ask our Developers often to implement a basic health endpoint, in DCOS we use this to see if a service needs to be restarted. In our application we enable set the statusOK in the index or in the JSON endpoint.\n\n```go\nfunc healthz() http.Handler {\n // Generating the healthz endpoint\n return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n if atomic.LoadInt32(&healthy) == 1 {\n w.WriteHeader(http.StatusNoContent)\n return\n }\n w.WriteHeader(http.StatusServiceUnavailable)\n })\n}\n```\n\nIn our logging and tracing functions we want to register the clients that are connecting, this gives us information where calls are coming from. It helps us debugging if we see weird behaviour.\n\n```go\nfunc tracing(nextRequestID func() string) func(http.Handler) http.Handler {\n // Tracing the http requests so its easier to check if server is reached\n return func(next http.Handler) http.Handler {\n return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n requestID := r.Header.Get(\"X-Request-Id\")\n if requestID == \"\" {\n requestID = nextRequestID()\n }\n ctx := context.WithValue(r.Context(), requestIDKey, requestID)\n w.Header().Set(\"X-Request-Id\", requestID)\n next.ServeHTTP(w, r.WithContext(ctx))\n })\n }\n}\n\nfunc logging(logToOut *log.Logger) func(http.Handler) http.Handler {\n // Creating logging entry tracing the http requests\n return func(next http.Handler) http.Handler {\n return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n defer func() {\n requestID, ok := r.Context().Value(requestIDKey).(string)\n if !ok {\n requestID = \"unknown\"\n }\n logToOut.Println(requestID, r.Method, r.URL.Path, r.RemoteAddr, r.UserAgent())\n }()\n next.ServeHTTP(w, r)\n })\n }\n}\n```\n\nIPVS needs to be executed with root privileges, to ensure this is correct we get the userid and print it when starting the server.\n\n```go\n// getProcessOwner function is to see who is running the process. It needs to be a sudo / root user\nfunc getProcessOwner() string {\n stdout, err := exec.Command(\"ps\", \"-o\", \"user=\", \"-p\", strconv.Itoa(os.Getpid())).Output()\n if err != nil {\n logToErr.Printf(\"ERROR: -- getProcessOwner -- %v\\n\", err)\n os.Exit(1)\n }\n return string(stdout)\n}\n```\n\nWe added the init function to ensure we print results the moment the server starts up, if we would not do this it would take 10 seconds for the go channel to activate\n\n```go\nfunc init() {\n // Placing the Save and val in the init, else we will need to wait for channel to perform its first run\n listIpvs.Save()\n ipvsString = fmt.Sprintln(listIpvs.Services)\n}\n```\n\nIn the main function, we set the configurable flags, such as debugging to show error messages. It proved useful during the creation of this tool to keep track and print output. If we would print the output at every call to our logs, our Elastic cluster would get thousands of logs that add little to no value.\n\nWe configure the listen port in the flags, we can use the portIndex from DCOS to assign a random port on the host to listen on. We also provided to print the version we are running. In our versioning, we use a constant to list the application semver version, we also provide the git-commit hash.\nWhen we begin the server we print the version information, the port we listen on and the user running the process. We then start the server process with the go channel, in setting up the go channel we ensure that when the server stops we try to gracefully stop the server within a 30-second timeframe. Since our ipvsadm timer is 10 seconds it should be able to cleanly shutdown within that period.\n\n### Docker build\n\nIn the repository, we have included a Dockerfile and a script to build the Dockerfile. In this Dockerfile, we pass the git commit hash to the go install. This way we always get the Git Hash from our GitHub repo and we can use this information in our version output.\n\n### DCOS service.json\n\nIn the repository, we have provided the service.json file, since it is opinionated on using Traefik you might need to change it. But in this service.json you see how we set up Traefik, the health check, and port index. Since the Mesos UCR container has fewer abstractions and has fewer limited capabilities. We can run the IPVS server inside a UCR container and get all the output as if we were running this directly as root on the host machine.\n\n## ipvs-client\n\nThe IPVS client is the component we use in the Kubernetes environment. The client connects to the server and gets the IPVS entries from the IPVS server inside our DCOS cluster. It then adds these IPVS entries to each node in the Kubernetes cluster. You, therefore, need to run each client per Kubernetes node.\n\nYou can find the code from the IPVS client in our repository.\n\n```go\nfunc httpGet(remoteURL string) []byte {\n if debug != false {\n _, err := url.ParseRequestURI(remoteURL)\n if err != nil {\n panic(err)\n }\n }\n\n req, err := http.NewRequest(http.MethodGet, remoteURL, nil)\n if err != nil {\n logToErr.Fatalf(\"ERROR: -- new HTTP request -- %v\", err)\n }\n\n ipvsClient := http.Client{\n Timeout: time.Second * 2, // Timeout after 2 seconds\n }\n req.Header.Set(\"User-Agent\", \"go-ipvs-get \\tversion: \"+version+\"\\t Git Commit: \"+gitCommit)\n res, err := ipvsClient.Do(req)\n if err != nil {\n logToErr.Fatalf(\"ERROR: -- ipvsClient -- %v\\n\", err)\n }\n\n if res.Body != nil {\n defer res.Body.Close()\n }\n\n body, readErr := ioutil.ReadAll(res.Body)\n if readErr != nil {\n logToErr.Fatalf(\"ERROR: -- body -- %v\\n\", readErr)\n }\n\n return body\n}\n```\n\nIn the httpGet function we can debug the URL and check if it is valid. Again we set the correct headers and retrieve the JSON body.\n\n```go\nfunc unmarshal(body []byte) []lvs.Service {\n\n res := &responseObject{\n Services: listIpvs.Services,\n }\n\n jsonErr := json.Unmarshal(body, &res)\n if jsonErr != nil {\n logToErr.Fatalf(\"ERROR: -- Unmarshal -- %v \\n\", jsonErr)\n }\n\n if debug != false {\n logToOut.Fatalf(\"DEBUG: -- res -- %v \\n\", res.Services)\n }\n\n r := res.Services\n\n return r\n}\n```\n\nIn the unmarshal function we unmarshal the JSON and turn it in a slice of lvs.Service.\n\n```go\nfunc addServers(remoteAddr string) {\n body := httpGet(remoteAddr)\n jsonData := unmarshal(body)\n\n for i, v := range jsonData {\n if debug != false {\n logToOut.Printf(\"DEBUG: -- range jsonDATA --\\n\")\n logToOut.Printf(\"ipvsCount=%v, value=%v\", i, v)\n }\n\n err := lvs.DefaultIpvs.AddService(v)\n if err != nil {\n logToErr.Printf(\"ERROR: -- AddService -- %v\", err)\n }\n \n i++\n ipvsServerCount = float64(i)\n }\n}\n```\n\nIn the addServers function we add the servers to IPVS.\n\n```go\nfunc clientChan(c chan bool) {\n logToOut.Println(\"Starting time based IPVS Admin add\")\n\n pollInterval := 10\n timerCh := time.Tick(time.Duration(pollInterval) * time.Second)\n // Time based loop to generate Global variable\n for range timerCh {\n select {\n // when shutdown is received we break\n case <-c:\n logToOut.Println(\"Received shutdown, stopping timer\")\n break\n default:\n\n logToOut.Println(\"Clearing & Adding servers...\")\n // Before we add Servers we need to clear the existing list\n lvs.Clear()\n addServers(remoteAddr)\n if debug != false {\n logToOut.Printf(\"IPVS servers added:\\t%v\", ipvsServerCount)\n }\n }\n }\n}\n```\n\nLike we did in the IPVS server we create a go channel to poll every 10 seconds the server endpoint. We perform this to get at a set interval the IPVS entries.\n\nSince we run the IPVS client as a binary directly on the Kubernetes hosts we build the binary with a few parameters we pass to the go build command. The binary we build with this command we host on an internal s3 bucket, we can download this binary with systemd unit files.\n\n```bash\nGOOS=linux\nGOARCH=amd64\nGIT_COMMIT=$(git rev-list -1 HEAD)\n\nexport GOOS\nexport GOARCH\nexport GIT_COMMIT\n\nenv GOOS=${GOOS} GOARCH=${GOARCH} go build -v -ldflags \"-X main.gitCommit=${GIT_COMMIT}\" .\n```\n\nWhen we run the IPVS client we can verify if the IPVS routes are added by running the `ipvsadm -L -n` command.\n\n### Unit files\n\nSince IPVS is part of the Linux kernel it is hard to deploy this in a docker container, the capabilities are more restricted in Kubernetes. We decided to deploy the IPVS client on each host machine through a systemd unit file, the main reason was that we ran into restrictions that slowed us down and this is not a permanent solution. By adding the IPVS client on the machines alone does not make it possible for containers to use the IPVS routes. We needed to add NET_ADMIN capabilities to all containers using the l4lb loadbalancer locations and configure `hostNetworking: true` in the Kubernetes pods.\n\nWe provided a deployment.yml file that runs a Ubuntu docker container with ipvsadm only installed extra. When the pods are deployed in this deployment you can use kubectl exec to get into the pod and run the `ipvsadm -L -n` command.\n\n## Vacancy at Vandebron\n\nWe are looking for a platform engineer in Vandebron. As you can understand this is not a typical scenario we daily run across, but it is part of the workloads that we will support when working on our platform. Within Vandebron we try to use the best technology available, when it is not available we build it. Due to this as platform engineers, we have many interesting challenges and offer engineers to support further than only a strict domain. We support all components of our entire platform, regardless if it is a Linux kernel issue like this, involves setting up and maintaining a NoSQL cluster, or helping the business with something like requesting a certificate.\n\nIf you are interested in learning more about this position, take a look at our Vacancy and get in contact with us.\n\n","meta":{"title":"Migrating from DCOS to Kubernetes, dealing with the l4lb loadbalancer","description":"When you want minimal downtime, you need to build your own tools","createdAt":"Fri Mar 05 2021 01:00:00 GMT+0100 (Central European Standard Time)","coverImage":"images/migrating-dcos-kubernetes-l4lb.jpg","imageSource":"https://pixabay.com/users/praesentator-4372890/","tags":"Kubernetes, k8s, mesos, l4lb, ipvs, ipvsadm","author":"Rogier Dikkes","slug":"blog/migrating-dcos-kubernetes-l4lb","formattedDate":"5 maart 2021","date":"Fri Mar 05 2021 01:00:00 GMT+0100 (Central European Standard Time)"}},{"content":"\nCypress is a game-changer in the automation testing world, the way that Cypress was built and its architecture allows us as testers to cover more scenarios.\n\nCypress is not Selenium; in fact, it is different. And the way to build and design a framework should be different as well.\n\nThe most famous design technique in Selenium is the Page Object Model, and many testers use the same design technique with Cypress. Even that Cypress on their official website [recommended](https://www.cypress.io/blog/2019/01/03/stop-using-page-objects-and-start-using-app-actions/) us not to go with that approach.\n\n## Page Object Model\n\nThe main benefit of using the page object model Is to make the automation framework maintenance-friendly. We can define a specific page's selectors in a separate file and then use these selectors in our test cases.\n\n```js\nclass SignInPage {\n visit() {\n cy.visit(\"/signin\");\n }\n getEmailError() {\n return cy.get(`[data-testid=SignInEmailError]`);\n }\n getPasswordError() {\n return cy.get(`[data-testid=SignInPasswordError]`);\n }\n fillEmail(value) {\n const field = cy.get(`[data-testid=SignInEmailField]`);\n field.clear();\n field.type(value);\n return this;\n }\n fillPassword(value) {\n const field = cy.get(`[data-testid=SignInPasswordField]`);\n field.clear();\n field.type(value);\n return this;\n }\n submit() {\n const button = cy.get(`[data-testid=SignInSubmitButton]`);\n button.click();\n }\n}\nexport default SignInPage;\n```\n\nThe main two downsides using the typical page object model with cypress are:\n\n- Page objects introduce an additional state into the tests, separate from the application’s internal state. This makes understanding the tests and failures harder.\n- Page objects make tests slow because they force the tests to always go through the application user interface.\n\n## Component-Based Architecture\n\nOn the other hand, a React application is component-based, where a specific page will be built from a collection of components. And components in React can be used on different pages too. So if we want to use the Page Object Model, we may define the same locator twice on different pages.\n\nSo having these two facts, At Vandebron, we came up with a new way to design our Cypress Automation framework by creating a separate JavaScript file for every component in our application, inside a folder called `components` within our Cypress project as below:\n\n```js\n// Locators\nexport const getEmailError = () => cy.get(`[data-testid=SignInEmailError]`);\nexport const getPasswordError = () =>\n cy.get(`[data-testid=SignInPasswordError]`);\nexport const emailField = () => cy.get(`[data-testid=SignInEmailField]`);\nexport const passwordField = () => cy.get(`[data-testid=SignInPasswordField]`);\nexport const submitButton = () => cy.get(`[data-testid=SignInSubmitButton]`);\n\n// Actions\nexport const visit = () => cy.visit(\"/signin\");\nexport const performLogin = (email, password) => {\n emailField().clear().type(email);\n passwordField().clear().type(password);\n submitButton().click();\n};\n```\n\nHaving it built this way, we eliminated all the previous problems mentioned earlier; we are not adding any classes, and we are defining objects within our test cases. And the most important part is that we are following the way that Cypress recommends it.\n\nAnd after defining the component locators and actions, we can import them inside our test case and use them as below:\n\n```js\nimport LoginComponent from \"../components/loginComponent\";\nimport Menu from \"../components/Menu\";\n\ndescribe(\"Test Login Page\", () => {\n it(\"should show an error message if the password in wrong\", () => {\n LoginComponent.visit();\n LoginComponent.performLogin(\"email@gmail.com\", \"wrongPassword\");\n LoginComponent.getPasswordError().should(\"be.visible\");\n });\n it(\"should show the logout button if the user logged in succesfully\", () => {\n LoginComponent.visit();\n LoginComponent.performLogin(\"email@gmail.com\", \"correctPassword\");\n Menu.LogoutButton().should(\"be.visible\");\n });\n});\n```\n\nAnd as you can see, our test cases are readable for anyone! And if any locator changes in any of the components, we can easily fix it in one location and from the same file. And lastly, if a component will be used in different places, we can use the same code.\n\nIn the next article, I will talk about how we use Cypress in our manual testing during the sprint and how it saves us tons of time and effort.\n","meta":{"title":"Cypress.io Component Design Technique for React Applications","description":"Cypress is a game-changer in the automation testing world, the way that Cypress was built and its architecture allows us as testers to cover more scenarios.","createdAt":"Fri Feb 05 2021 01:00:00 GMT+0100 (Central European Standard Time)","coverImage":"images/cypress-component-design-technique-for-react-applications.png","tags":"Cypress, Testing, React","author":"Hatem Hatamleh","slug":"blog/cypress-component-design-technique-for-react-applications","formattedDate":"5 februari 2021","date":"Fri Feb 05 2021 01:00:00 GMT+0100 (Central European Standard Time)"}},{"content":"\nIn Vandebron we have been using container clusters to host our services since the foundation of our Big Data team. \nRecently our cluster of choice has declared End-Of-Life development stage, so we decided to take a step forward and get a ticket for the Kubernetes boat.\n\nA change in the OS that is used to run your services and applications can look quite challenging and not everyone is on the same experience level. To make everyone comfortable it is a good choice to give everyone the possibility to play with the new tools and learn what can be done and how: **you need a sandbox.**\n\nOur developers are provided with a Macbook and at the moment of writing there some options you can go for when deciding how to set up your playground:\n\n- **Docker CE Kubernetes**: This is the easiest solution since there is a handy button to run your containers into a Kubernetes environment.\n\n- **Vagrant and Virtualbox**: This solution is the one that can give you more control and you can easily create a cluster the size you want, but you need to be handy with VMs, the hypervisor of choice, and Vagrant. It's the old school way to do it but, while it's a chunk your platform engineers can bite, it can be a steep and frustrating process for people that are not used to handle VMs.\n\n- **Multipass + some bash magic glue**: Since Canonical created this tool for macOS, creating an Ubuntu VM became a breeze and you can have a single, easily manageable VM with its networking up and running in less than a minute, without having to handle disks, distros, and stuff. On top of it, the command line interface is straight forward and it has just the basic commands we will need, so wrapping the entire process into a bash script is a piece of cake.\n\nI have found this super cool in-depth [article](https://jyeee.medium.com/kubernetes-on-your-macos-laptop-with-multipass-k3s-and-rancher-2-4-6e9cbf013f58) from Jason Yee (kudos to you bruh) that guided me through the installation of my first single node Kubernetes cluster.\n\nThe process is not that long but it involves a lot of copy/pasting and, once learned the basics, I didn't want to go under the same process more times, plus it could be interesting for me as a Platform Engineer, but it may be boring and pointless for developers who just want to have a sandbox replica of what they are working on in the remote environment.\nMy automator (aka do-it-once-never-do-it-again) spirit kicked in and I decided to wrap every step in a small command-line tool with only 3 options:\n- **install**\n- **cleanup**\n- **help**\n\n\n### What is happening under the hood\n\nWhat the script does is substantially automating all the steps needed to:\n1. Create a new VM using Multipass (tool released by Canonical)\n2. Fetch the VM IP address and adding it to your local `/etc/hosts` file\n3. Install k3s (a lightweight distribution of Kubernetes) on top of the VM\n4. Install the Kubernetes command-line tools on your laptop\n5. Install Helm (the Kubernetes package manager) on your laptop\n6. Install cert-manager (certificate manager) package on top of your k3s cluster\n7. Install Rancher (a Kubernetes control plane) package on top of your k3s cluster\n\nIf you are looking for a more in-depth breakdown of the single steps you can download and inspect [the script](https://gist.githubusercontent.com/nikotrone/50b1a5f8d137411879eb2467e689bfbe/raw/090b4b4323d96ac28d96bbb346e2e657073722e6/bronernetes) (one of the many advantages of [OpenSource](https://en.wikipedia.org/wiki/Open_source) projects) or checkout and read the original [article](https://jyeee.medium.com/kubernetes-on-your-macos-laptop-with-multipass-k3s-and-rancher-2-4-6e9cbf013f58): it explains line by line what the specific commands are doing.\n\n#### 1. Multipass VM\n[Multipass](https://multipass.run/) is a tool from Canonical (the company developing and maintaining the Ubuntu Linux distribution) that leverages Hyperkit (macOS feature to handle virtualization) to create and handle a Virtual Machine directly on your Mac.\n\n#### 2. Edit /etc/hosts\nOnce we have our VM up and running we need to make it available with an easy url that is also gonna be used to generate the SSL certificate, in our case we picked up `rancher.localdev`.\nIt is important to have a name setup in the beginning since this one will need to match with the certificate so we can use it programmatically.\n\n#### 3. Install K3S\nThis step is pretty straightforward: just fetch a script that is publicly available on the [k3s official website](https://get.k3s.io) and feed it to your bash.\nK3s is a lightweight version of Kubernetes with all the needed dependencies and executable packaged in a convenient installation script. Because of its light nature, it is often used in embedded devices that have a limited amount of resources to offer.\n\n#### 4 & 5. Kubernetes and Helm cli\n**Kubernetes cli** (`kubectl`) is used to talk and interact with your Kubernetes cluster. It can be used to manage multiple clusters according to the content of your KUBECONFIG environment variable. \nThe variable itself contains just a path to where your cluster configuration is stored, so you can switch from a cluster to another by simply pointing to another file that contains the configuration of another cluster.\n\n**Helm** instead is the \"package manager\" of Kubernetes: you can use it to add repositories to specific `charts` which are the blueprint that contains a way to install a specific tool on your cluster.\nBoth of these tools have to be installed and run from your local laptop, either in the case you are managing a local VM or in the case you are interacting with a remote cluster.\n\n#### 6 & 7. cert-manager and Rancher\n\n**Rancher** is the control plane for our cluster: it provides a GUI and an overview of our single node cluster. It offers other goodies like management of multiple clusters, deployed on different locations like AWS Azure and GCP or even on your own hardware, plus certificate deployment and some other handy functionalities.\n\n**cert-manager** is installed via Helm chart and it is the tool used by Rancher to generate and deploy a certificate across the entire cluster.\n\n### How to use it\n\nAll the steps will involve the use of a Terminal window\n#### Installation\nThe first thing you need to do is download [this script](https://gist.github.com/nikotrone/50b1a5f8d137411879eb2467e689bfbe) and save it in a folder on your Mac (let's assume `~/bronernetes`) by executing\n```bash\n mkdir ~/bronernetes\n cd ~/bronernetes\n curl https://gist.githubusercontent.com/nikotrone/50b1a5f8d137411879eb2467e689bfbe/raw/090b4b4323d96ac28d96bbb346e2e657073722e6/bronernetes > bronernetes\n export PATH=$PATH:$(pwd)\n```\n\nNow we have the toolset and you can confirm it works by simply running `bronernetes help`.\n\n#### Spin up Kubernetes\nThe next step is to run the installation process with the command `bronernetes install`\n\n#### Clean up\nWhen you are done or you just want to hard reset your environment you can just type `bronernetes cleanup` and it will take care of cleaning up the VM you just used, leaving you with a pristine machine, as nothing ever happened :)\n\n### Conclusion\n\nHaving a sandbox is very useful to play around with the concepts of a new setup or service and it packs up a huge amount of positive sides. No matter what is the language or the nature of the system you are trying to replicate, it can be challenging and involve a long list of instructions or manual operations and, sometimes, even dedicated hardware. Although with some bash glue, it is possible to automate most of those processes and the investment cost can be enormously beneficial for yourself (less work the next time you do it) and for the other people working with you (they can use the tool, comment and suggest improvements). Most of all, in the case of infrastructure, it helps raise the knowledge of \"what's going on here\" and documents for the ones interested in taking a trip down the rabbit hole.\n","meta":{"title":"How to Spin Up A Kubernetes Cluster On Your Macbook","description":"It is can be useful to create a disposable Kubernetes sandbox to play with when you are exploring a new application and how it could work.","createdAt":"Mon Jan 25 2021 01:00:00 GMT+0100 (Central European Standard Time)","coverImage":"images/spin-up-kubernetes-on-macbook.jpg","imageSource":"https://pixabay.com/it/users/mari_sparrow-13090456/","tags":"Kubernetes, k8s, local","author":"Marco Nicotra","slug":"blog/spin-up-kubernetes-on-macbook","formattedDate":"25 januari 2021","date":"Mon Jan 25 2021 01:00:00 GMT+0100 (Central European Standard Time)"}},{"content":"\nAt Vandebron we're maintaining a component library called [Windmolen](https://windmolen.netlify.app/) (Dutch for \"wind turbine\"). And if you've ever built a component library, you probably dealt with optimizing and converting icons before. With SVGO and SVGR you can do this at scale, without compromising the quality or size of your icons.\n\n## The problem\n\nThe web is full of icons, and often these icons are rendered from SVG files to ensure you can increase (or decrease) the size of the icons depending on the use case. Designers often create these icons from design tools like Adobe Photoshop or Sketch. Although these icons might look pretty, exporting a SVG out of these tools is often difficult as [this article](https://medium.com/sketch-app-sources/the-best-way-to-export-an-svg-from-sketch-dd8c66bb6ef2) explains. Also, added lot of code in the form of metadata is added to the SVG file. Let's have a look at what a typical SVG file exported out of Sketch looks like:\n\n```svg\n\n\n\n \n last\n Created with Sketch.\n \n \n \n \n \n \n\n```\n\nThe SVG file above holds a lot of information about Sketch, such as the `title` of the icon and a `desc`ription. Next to that, there's a lot of elements that could be combined into one element to reduce the file size.\n\n## Optimizing SVGs\n\nWhat's cool about SVG files is that you can optimize and minify them, without affecting what the SVG looks like. This is something you can try out yourself using the website [SVGOMG](https://jakearchibald.github.io/svgomg/), which is powered by the library SVGO that you'll learn more about later.\n\n\nYou can optimize the SVG file above by following these steps:\n\n1. Go to [https://jakearchibald.github.io/svgomg/](https://jakearchibald.github.io/svgomg/)\n2. Click on `Paste markup` an paste the SVG code that you exported from Sketch (a.k.a. the SVG file above)\n3. You will see the icon rendered, now you have to either click at the `Copy as a text` or `Download` button to get the optimized SVG file\n\nWith these simple steps you've optimized the SVG from over 450 bytes, which is already small, to 173 bytes (a decrease of over 62%!). If you'd open this file in the editor of your choice, you can see a lot of the useless (meta)data from the original file has been deleted. Also, the different elements of the SVG are combined in a single `path` that renders the icon:\n\n```svg\n\n\n \n\n```\n\nThis SVG can be even further optimized by checking the \"Prefer viewbox to width/height\" in SVGOMG, but let's save that for later when we use SVGO instead.\n\n## Using SVGO\n\nBy using SVGOMG you've already experienced what power [SVGO](https://github.com/svg/svgo) has, as SVGOMG is described by its creators as *\" SVGO's Missing GUI, aiming to expose the majority if not all the configuration options of SVGO\"*. Instead of using the GUI, you can also use SVGO directly from the command line as a CLI-tool or as a Node.js module. For the sake of this article, we'll be using it solely as CLI.\n\nSVGO can be installed globally on your machine, or locally in your project, from npm by running:\n\n```bash\nnpm i -g svgo\n\n# Yarn equivalent\nyarn add -G svgo\n```\n\nAfter doing this you can run `svgo` from the command line and optimize any SVG file instantly. But, you don't want to do this manually on your machine anytime you're adding a new icon to a project (or component library). Therefore, you can also add SVGO to a project locally and add a script to the `package.json` file to optimize all SVGs in a certain directory.\n\n```json\n// package.json\n{\n // ...\n \"scripts\": {\n // ...\n \"optimize-svg\": \"svgo --config=.svgo.yml -f ./src/assets/icons\"\n }\n}\n```\n\nThe `optimize-svg` script will run SVGO in the directory `src/assets/icons` and optimize all the SVG files based on the settings in `.svgo.yml`. This file is where you can configure the rules for SVGO, as the previously mentioned \"Prefer viewbox to width/height\":\n\n```yaml\n# .svgo.yml\nplugins:\n - removeViewBox: false\n - removeDimensions: true # this deletes width/height and adds it to the viewBox\n - removeDoctype: true\n - removeComments: true\n - removeMetadata: true\n - removeEditorsNSData: true\n - cleanupIDs: true\n - removeRasterImages: true\n - removeUselessDefs: true\n - removeUnknownsAndDefaults: true\n - removeUselessStrokeAndFill: true\n - removeHiddenElems: true\n - removeEmptyText: true\n - removeEmptyAttrs: true\n - removeEmptyContainers: true\n - removeUnusedNS: true\n - removeDesc: true\n - prefixIds: false\n - prefixClassNames: false\n```\n \nFrom the rules above you'll get an idea about all the redundant and useless lines of code that might be present in your SVG files. But luckily, they will all get removed when you run the command `npm run optimize-svg`.\n\n## Converting SVGs with SVGR\n\nYou've now learned how to optimize your SVG files, and are probably wondering how to use these files in a React application. To render an SVG in React, you need to either configure Webpack in a way that it knows how to deal with SVG files or use a library called SVGR. By default, any application created with `create-react-app` can render SVG files as a component, using the following `import` statement:\n\n```jsx\n// MyComponent.jsx\nimport React from 'react';\nimport { ReactComponent as MySVG } from './something.svg';\n\nconst MyComponent = () => {\n return (\n
\n \n
\n );\n}\nexport default MyComponent;\n```\n\nMore information about how this is done can be found in [this article](https://blog.logrocket.com/how-to-use-svgs-in-react/), but let me show you how to solve that with SVGR.\n\nWith [SVGR](https://react-svgr.com/) you can convert SVG files into React Components, either by adding it to Webpack or by using the SVGR CLI or Node.js module. In the same way, as we optimized the SVGs from the command line with SVGO, we can also convert these icons from the command line with SVGR:\n\n```json\n// package.json\n{\n // ...\n \"scripts\": {\n // ...\n \"optimize-svg\": \"svgo --config=.svgo.yml -f ./src/assets/icons\",\n \"convert-svg\": \"svgr -d ./src/components/Icon ./src/assets/icons\"\n }\n}\n```\n\nWhenever you run the command `npm run convert-svg` a JSX file will be created for every SVG file that's present in the directory `src/assets/icons`. These JSX files can be found in the directory `src/components/Icons`, together with an `index.js` file that exports all these components from this directory.\n\nAn example of such a converted SVG file is:\n\n\n```jsx\n// MySVG.jsx\nimport * as React from 'react';\n\nconst MySVG = (props) => (\n \n \n \n);\n\nexport default MySVG;\n```\n\nAnd, as we now have a directory filled with converted SVGs these can be imported into any React component like this:\n\n```jsx\n// MyComponent.jsx\nimport React from 'react';\nimport MySVG from './MySVG.jsx';\n\nconst MyComponent = () => {\n return (\n
\n \n
\n );\n}\nexport default MyComponent;\n```\n\nOften SVGR is used alongside SVGO, so you can even automatically optimize all SVGS that will be converted by SVGR. This is done by adding the flag `--no-svgo true` and point it towards your SVGO configuration file:\n\n```json\n// package.json\n{\n // ...\n \"scripts\": {\n // ...\n \"convert-svg\": \"svgr -d ./src/components/Icon ./src/assets/icons --no-svgo true --svgo-config .svgo.yml\"\n }\n}\n```\n\nBy running the `convert-svg` script you both optimize and convert all the SVG files in `src/assets/icons` to React components based on optimized SVGs.\n\n## Reading further\n\nThe examples in this post are the tip of the metaphorical iceberg on what problems SVGO and SVGR can solve. There are many other features you can enable, such as using them as Node.js modules or enabling TypeScript support. To read further make sure to have a look at the SVGR [playground](https://react-svgr.com/playground/) or [documentation](https://react-svgr.com/docs/getting-started/).\n","meta":{"title":"Optimizing, Converting And Exporting SVG Icons In React","description":"If you've ever build a component library, you probably dealt with optimizing and converting icons before. With SVGO and SVGR you can do this at scale.","createdAt":"Thu Dec 10 2020 01:00:00 GMT+0100 (Central European Standard Time)","coverImage":"images/optimizing-converting-and-exporting-svg-icons-in-react.jpg","tags":"React, component library","author":"Roy Derks","slug":"blog/optimizing-converting-and-exporting-svg-icons-in-react","formattedDate":"10 december 2020","date":"Thu Dec 10 2020 01:00:00 GMT+0100 (Central European Standard Time)"}},{"content":"\nHere at Vandebron, we have several projects which need to compute large amounts of data. To achieve acceptable results, we had to choose a computing tool that should have helped us to build such algorithms.\n\nAs you may have read in other articles our main backend language is Scala so the natural choice to build distributed parallel algorithms was indeed Spark.\n\n## What is Spark\n\nWe will briefly introduce Spark in the next few lines and then we will dive deep into some of its key concepts.\n\nSpark is an ETL distributed tool. ETL are three phases that describe a general procedure for moving data from a source to a destination.\n\n![ETL Diagram](/images/etlprocess.png \"ETL\")\n\n- **_Extract_** is the act of retrieving data from a data source which could be a database or a file system.\n- **_Transform_** is the core part of an algorithm. As you may know, functional programming is all about transformation. Whenever you write a block of code in Scala you go from an initial data structure to a resulting data structure, the same goes with Spark but the data structures you use are specific Spark structures we will describe later.\n- **_Load_** is the final part. Here you need to save (load) the resulting data structure from the transformation phase to a data source. This can either be the same as the extract phase or a different one.\n- **_Distributed_**: Spark is meant to be run in a cluster of nodes. Each node runs its own JVM and every Spark data structure can/should be distributed among all the nodes of the cluster (using serialization) to parallelize the computation.\n\n### Spark data structure: RDD, DataFrame, and Dataset\n\nThe core of Spark is its _distributed resilient dataset (RDD)_.\n\n![Spark API history](/images/sparkapihistory.png \"Spark API history\")\n\nAn **_RDD_** is a collection of elements partitioned across the nodes of the cluster that can be operated on in parallel. _Extracting_ data from a source creates an RDD. Operating on the RDD allows us to _transform_ the data. Writing the RDD _loads_ the data into the end target like a database for example). They are made to be distributed over the cluster to parallelize the computation.\n\nA **_DataFrame_** is an abstraction on top of an RDD. It is the first attempt of Spark (2013) to organize the data inside and RDD with an SQL-like structure. With dataframe, you can actually make a transformation in an SQL fashion. Every element in a dataframe is a Row and you can actually transform a dataframe to another by adding or removing columns.\n\nA **_DataSet_** finally is a further abstraction on top of a dataframe to organize data in an OO fashion (2015). Every element in a dataset is a case class and you can operate transformation in a scala fashion from a case class to another.\n\n## Spark in action\n\nLet’s see now some code samples from our codebase to illustrate in more detail each of the ETL phases.\n\n### Extract\n\nThe extraction phase is the first step in which you gather the data from a datasource.\n\n```scala\nval allConnections = sparkSession\n.read\n.jdbc(connectionString, tableName, props)\n\nval selectedConnections = allConnections\n.select(ColumnNames.head, ColumnNames.tail: _*)\n\nval p4Connections = selectedConnections\n.filter(allConnections(\"HasP4Day activated\").equalTo(1))\n.filter(allConnections(\"HasP4INT activated\").equalTo(1))\n.as[Connection]\n\np4Connections.show()\n```\n\nFor most people the extraction phase is just the first line (the invocation to the read method), they are not wrong because extracting means reading data from a datasource (in this case an SQL server database). I decided to include in this phase also some filtering and projection operations because I think these are not really part of the algorithm, this is still the preparation phase before you actually process the data. We can ultimately say that _preparing the data_ is something in between extraction and transformation therefore it is up to you to decide which phase it belongs to.\n\n### Transform\n\nTransformation phase is the core of the algorithm. Here you actually process your data to reach your final result.\n\n```java scala\nusageDF\n.groupBy('ConnectionId, window('ReadingDate, \"1 day\"))\n.agg(\n sum('Consumption).as(\"Consumption\"),\n sum('OffPeak_consumption).as(\"OffPeak_consumption\"),\n sum('Peak_consumption).as(\"Peak_consumption\"),\n sum('Production).as(\"Production\"),\n sum('OffPeak_production).as(\"OffPeak_production\"),\n sum('Peak_production).as(\"Peak_production\"),\n first('ReadingDate).as(\"ReadingDate\"),\n first('marketsegment).as(\"marketsegment\"),\n collect_set('Source).as(\"Sources\"),\n collect_set('Tag).as(\"Tags\"),\n max('Last_modified).as(\"Last_modified\")\n)\n.withColumn(\n \"Tag\", when(array_contains('Tags, “Interpolated”),\nlit(Tag.Interpolated.toString)).otherwise(lit(“Measured”)))\n.withColumn(\"Source\",\nwhen(size('Sources) > 1,\nlit(Source.Multiple.toString)).otherwise(mkString('Sources)))\n.orderBy('ConnectionId, 'ReadingDate)\n.drop(\"window\", \"sources\", \"tags\")\n```\n\nIn this specific example, we are processing connection usage data by aggregating it daily. In the `usageDF` we have 15 minutes interval usage data, now we want to show to the user the same data but with a different aggregation interval (1 day). So we group the whole data by connection id and window the reading date by 1 day (A window function calculates a return value for every input row of a table based on a group of rows [Introducing Window Functions in Spark SQL - The Databricks Blog](https://databricks.com/blog/2015/07/15/introducing-window-functions-in-spark-sql.html).\n\nOnce the data is grouped we can aggregate it, using the `agg` method which allows us to call the aggregation functions over the dataframe (for example: `sum`, `first`,`max` or `collect_set`). Successively we transform the dataframe to suit our visualization needs, the methods used are self-explanatory and the documentation is very clear. [Getting Started - Spark 3.0.1 Documentation](https://spark.apache.org/docs/latest/sql-getting-started.html)\n\n### Load\n\nThe final phase is the one which `save`, `put`, `show` the transformed data into the target data source.\n\n```java scala\ndataFrame\n.select(columns.head, columns.tail: _*)\n.write\n.cassandraFormat(tableName, keySpace)\n.mode(saveMode)\n.save()\n```\n\nIn this specific case, we will save our dataframe into a Cassandra database. In Spark, methods used to achieve the load phase are called _actions_. It is very important to distinguish Spark actions from the rest because actions are the only ones that trigger Spark to actually perform the whole transformation chain you have defined previously.\n\nIf our transformation phase, as we described above, wasn’t followed by an action (for example `save`) nothing would have happened, the software would have simply terminated without doing anything.\n\n## One concept to rule them all\n\n```java scala\nval rdd1 = sc.parallelize(1 to 10)\nval rdd2 = sc.parallelize(11 to 20)\nval rdd2Count = rdd1.map(\nx => rdd2.values.count() * x //This will NEVER work!!!!\n)\n```\n\n_One does not simply use RDD inside another RDD_. (Same goes for Dataframes or Datasets).\n\nThis is a very simple concept that leads very often to lots of questions because many people just want to use Spark as a normal scala library. But this is not possible due to the inner distributed nature of Spark and its data structures. We have said that an RDD is a resilient distributed dataset, let’s focus on the word _distributed_, it means that the data inside it is spread across the nodes of the cluster. Every node has its own JVM and it is called _Executor_, except for the master node where your program starts which is called _Driver_:\n\n![Spark cluster overview](/images/spark-cluster-overview.png \"Spark cluster overview\")\n\nYour code starts from the Driver and a copy is distributed to all executors, this also means that each executor needs to have the same working environment of the Driver, for Scala it is not a problem since it just needs a JVM to run. (but we will see that if you use _pySpark_ you need to take extra care when you distribute your application.) Every Spark data structure you have defined in your code will also be distributed across the executors and every time you perform a transformation it will be performed to each chunk of data in each executor.\n\nNow let’s go back to our example, a `map` is a transformation on `rdd1` this means that block inside will be executed at the executor level, if we need `rdd2` to perform this block Spark should somehow serialize the whole `rdd2` and send it to each executor. You can understand now that _it is really not possible to serialize the whole RDD since it is by its nature already a distributed data structure_. So what can you do to actually perform such computation we showed in the example? The solution is “simple”: _prepare your data in such a way that it will be contained in one single RDD_. To do so you can take advantage of all the transformation functions Spark has to offer such `map` `join` `union` `reduce` etc.\n\n## Next step…\n\nWe have explained all the main concepts of Spark and we have shown some real snippets of our codebase. In the next article, I would like to show you a real-life problem we have solved in our company using [_pySpark_](https://spark.apache.org/docs/latest/api/python/index.html). I will show you how to customize Spark infrastructure to correctly parallelize the ETL algorithm you have built.\n","meta":{"title":"Fueling the Energy Transition With Spark - Part 1","description":"Our main backend language is Scala, and by using Spark we build distributed parallel algorithms to fuel the Energy Transition. But why is Spark the best choice for that job?","createdAt":"Wed Nov 04 2020 01:00:00 GMT+0100 (Central European Standard Time)","coverImage":"images/fueling-the-energy-transition-with-spark-part-1.jpg","imageSource":"https://www.pexels.com/photo/shallow-focus-photography-of-light-bulbs-2764942","tags":"spark, scala","author":"Rosario Renga","slug":"blog/fueling-the-energy-transition-with-spark-part-1","formattedDate":"4 november 2020","date":"Wed Nov 04 2020 01:00:00 GMT+0100 (Central European Standard Time)"}},{"content":"\nAt Vandebron we organize a two-day long Hackathon every quarter, and a colleague and I took this chance to dig into the wonderful world of GraalVM.\n\nI've first heard of GraalVM around two years ago when Oleg Šelajev toured through Java User Groups in Germany and held talks about GraalVM. [Here](https://www.youtube.com/watch?v=GinNxS3OSi0) is one from 2019 (not Germany, but Spain this time).\n\nGraalVM promises a significant speedup in compile times and as I am working with Scala, which is notoriously known for its long compile times, this seems interesting. Furthermore, GraalVM provides functionality to build native executables. Meaning, an application can be run without a Java Virtual Machine (JVM).\n \nThanks to the Hackathon I finally took the time to get to know GraalVM a bit better. With this blog post, I want to share our findings, experiences, and results, as they might be helpful for you too!\n\n## What is GraalVM?\n\nGraalVM is a high-performance JVM that supports efficient ahead-of-time (AOT) and just-in-time (JIT) compilation, but also allows non-JVM languages (e.g. Ruby, Python, C++) to run on the JVM. The ahead-of-time compilation feature is the base for creating native executable programs, meaning an application can be run independently from the JVM. Seeing the versatile features of GraalVM, it is worth looking a bit under its hood.\n\nActually, GraalVM is defined by three main technologies:\n\n- [Graal compiler](https://www.graalvm.org/reference-manual/jvm/), a high-performance JIT-compiler that can make JVM applications run faster from within the JVM\n- [SubstrateVM](https://www.graalvm.org/reference-manual/native-image/SubstrateVM/), includes the necessary components to run a JVM-app as a native executable ( Garbage Collector, Thread Scheduler, etc.)\n- [Truffle Language Implementation Framework](https://www.graalvm.org/graalvm-as-a-platform/language-implementation-framework/), the basis for the polyglot support from GraalVM\n\nOur motivation for trying out GraalVM was tackling the pain points of Scala, Java projects, and microservices. Shipping microservices written in Scala as Docker containers to your production system comes with the cost that startup can be a bit slow, having JVM and Docker overhead, and that those containers can be fairly large, as the application can only be run with a JVM. See [Building Docker images](#building-docker-images) for more information.\n\nDuring the hackathon, we were most interested in building native images for Scala applications. Hoping to reduce the size of our docker containers and reducing up the startup time.\n\n## Project setup\n\nThe project we worked on during the Hackathon is an API that should be used for applicants to submit their applications at Vandebron in the future. By exposing one endpoint through which a resume and contact information can be submitted.\n\nIt is also a good project to test out GraalVM, nothing too complex but also not as simple as \"Hello World\".\n\nThe full setup can be found [on Github](https://github.com/kgrunert/apply-at-vdb). But I'll summarise the used stack below. The project is built around the following libraries, no particular reason, simply because I like them.\n\n- _cats_ for working with effects, such as IO\n- _http4s_ for running the server\n- _tapir_ for defining the endpoints\n- _circe_ for JSON de/serialisation\n- _pureconfig_ for reading config-files\n- _logback_ for logging\n\nThe project can be run via `sbt run` and with Postman or similar a POST-request can be sent like so:\n\n```json\nPOST localhost:8080/api/v1/apply\n\n{\n\t\"email\": \"my@email.de\",\n\t\"name\": \"My Name\",\n\t\"phoneNumber\": \"+310123456789\",\n\t\"applicationBase64\": \"VGhpcyBjb3VsZCBiZSB5b3VyIGFwcGxpY2F0aW9uIQ==\"\n}\n\nResponse:\n\"*confetti* Thanks for handing in your application, we will get back to you within the next days! *confetti*\"\n```\n\n## Setup GraalVM with sbt\n\nWith this initial project setup in mind, GraalVM needs to be installed locally.\n\nFor the installation of GraalVM the [setup guide](https://www.graalvm.org/docs/getting-started-with-graalvm/#install-graalvm) can be followed.\n\nAfter the installation sbt needs to know that not the regular JDK/JVM is used. This can be done with the `java-home` option on sbt bootup.\nTo make the path to GraalVM a bit more accessible and easy to use it can be exported as an environment variable.\n\n```bash\nexport GRAAL_HOME=/Library/Java/JavaVirtualMachines/graalvm-ce-java8-20.1.0/Contents/Home\nsbt -java-home $GRAALHOME\n```\n\nThe path to GraalVM can vary depending on OS and installation. We followed the basic installation for macOS.\n\nNow sbt using GraalVM can be verified with:\n\n```bash\nsbt -java-home $GRAALHOME\nscala> eval System.getProperty(\"java.home\")\n[info] ans: String = /Library/Java/JavaVirtualMachines/graalvm-ce-java8-20.1.0/Contents/Home/jre\n```\n\nThat means everything running in this sbt instance is getting compiled by GraalVM. Awesome!\n\nThe next step is to become strong and independent and learn how to run without an underlying JVM with the help of building native images.\n\n## Building native images\n\nGraalVM ships with the [GraalVM Updater](https://www.graalvm.org/reference-manual/graalvm-updater/) (`gu`) to install the `native-image` on your machine.\n\n```bash\n$GRAALHOME/bin/gu install native-image\n```\n\n[sbt-native-packager](https://sbt-native-packager.readthedocs.io/en/latest/) provides functionality to build packages efficiently (e.g. building Docker images) and added to that, it also provides support for building native images.\nIn order to build native images with sbt commands this plugin has to be added to the project:\n\n```java scala\n// inside project/plugins.sbt\naddSbtPlugin(\"com.typesafe.sbt\" % \"sbt-native-packager\" % \"1.7.3\")\n```\n\nAnd the `GraalVMNativeImagePlugin` needs to be enabled:\n\n```java scala\n// inside build.sbt\nenablePlugins(GraalVMNativeImagePlugin)\n```\n\nFrom within sbt it should be able to autocomplete and suggest graal-commands, e.g.:\n\n```java scala\nsbt:apply-at-vdb> graalvm\ngraalvm-native-image: graalvmNativeImageOptions\n```\n\nWith that setup, native images are just a stone's throw away!\n\n---\n\n### Disclaimer\n\nThe next three sections are not a write-up but rather the main steps we had to take to make the project work. This includes failing images and troubleshooting.\nI want to keep this in because it might be interesting for others when they have to troubleshoot.\nFor the summary and happy path, you can jump directly to [Roundup](#roundup).\n\n---\n\n### First try building a native image\n\nNext up `graalvm-native-image:packageBin` can be run from within sbt. This might take a while (on our systems it took about a minute)\n\nSome warnings start to pop up:\n\n```\n[error] warning: unknown locality of class Lnl/vandebron/applyatvdb/Main$anon$exportedReader$macro$24$1;, assuming class is not local. To remove the warning report an issue to the library or language author. The issue is caused by Lnl/vandebron/applyatvdb/Main$anon$exportedReader$macro$24$1; which is not following the naming convention.\n\n[error] warning: unknown locality of class Lfs2/internal/Algebra$Done$2$;, assuming class is not local. To remove the warning report an issue to the library or language author. The issue is caused by Lfs2/internal/Algebra$Done$2$; which is not following the naming convention.\n```\n\nThe library-specific warnings can be ignored for now. Ultimately it fails with:\n\n```\nError: com.oracle.graal.pointsto.constraints.UnresolvedElementException:\nDiscovered unresolved type during parsing: org.slf4j.impl.StaticLoggerBinder.\nTo diagnose the issue you can use the --allow-incomplete-classpath option.\nThe missing type is then reported at run time when it is accessed the first time.\n```\nActually a good hint on where to start fine-tuning the GraalVM config:\n\n```java scala\n// inside build.sbt\ngraalVMNativeImageOptions ++= Seq(\n\t\"--allow-incomplete-classpath\",\n)\n```\n\nSome things like a `StaticLoggerBinder` only get resolved at runtime, meaning at build time the classpath needs to be allowed to be incomplete. This option allows resolution errors to be ignored at build time and only pop up during runtime.\n\nDuring the build of a native image, GraalVM tries to resolve those runtime dependencies already at compile-time, as it is part of the Ahead-Of-Time-compilation process. With this flag, GraalVM knows \"hey, don't worry about it now, we cross the bridge when we get there\" (or something like that).\n\n### Adding resource files\n\nA `reload` (or restart) of sbt is needed to activate these new options. And we can try to build the native image up new.\nThis time the build finished successfully and the executable file `target/graalvm-native-image/apply-at-vdb` has been created!\nThis is an executable that can be run without a JVM:\n\n```bash\ntarget/graalvm-native-image/apply-at-vdb\n```\n\nBut what's that? It actually cannot be started...\n\n```bash\ntarget/graalvm-native-image/apply-at-vdb\n\nSLF4J: Failed to load class \"org.slf4j.impl.StaticLoggerBinder\".\nSLF4J: Defaulting to no-operation (NOP) logger implementation\nSLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.\n*** An error occured! ***\nCannot convert configuration to a de.erewl.pricetracker.server.Config. Failures are:\nat the root:\n- Key not found: 'host'.\n- Key not found: 'port'.\n```\n\nThe first three lines relate to the error that occurred during the first build. It simply says that logging hasn't been set up correctly (maybe due to the absence of a `src/main/resources/logback.xml` or some other misconfiguration), triggering the default setting of not logging anything at all.\nThe second error states that a configuration file does not have the right keys or cannot be found at all.\nLooking into `src/main/resources`:\n\n```bash\nls src/main/resources/\napplication.conf logback.xml\n```\n\nand peeking into `application.conf`:\n\n```bash\ncat src/main/resources/application.conf\n\thost = \"localhost\"\n\tport = 8080\n```\n\nHm, so everything is actually in place. But somehow GraalVM can't find those files.\nIt still requires some more GraalVM fine-tuning here.\n\nBy default, GraalVM doesn't include any resource or configuration-files.\nThe option `-H:ResourceConfigurationFiles=path/to/resource-config.json` defines a path to a JSON configuration file. So inside the `resource-config.json` we can include our `application.conf` and our `logback.xml`.\n\nBut writing those config files can be tedious and it is difficult in larger projects to find all necessary classes that need to be included. GraalVM provides some support with writing those files and actually does all the work. In the project's root directory a configs-folder can be created which will contain all necessary config-files.\n\nFor writing the configuration files we will build a normal JAR-file with the help of the `sbt-assembly` plugin. Adding it to the project like so:\n\n```java scala sbt\n // inside project/plugins.sbt\n addSbtPlugin(\"com.eed3si9n\" % \"sbt-assembly\" % \"0.14.6\")\n```\n\nThe JAR-file will be built with `sbt assembly`.\n\nWith that we can now start the application, providing the path to the JAR-file that just has been created:\n\n```bash\nmkdir configs\n$GRAALHOME/bin/java -agentlib:native-image-agent=config-output-dir=./configs -jar target/scala-2.12/apply-at-vdb-assembly-0.1.0-SNAPSHOT.jar\n```\n\nWith the command above the JAR gets to run with GraalVM but adds [dynamic lookups](https://www.graalvm.org/reference-manual/native-image/Configuration/#assisted-configuration-of-native-image-builds) that are being intercepted during runtime and written to the files: `jni-config.json`, `proxy-config.json`, `reflect-config.json` and `resource-config.json`.\n\nThose generated files can be included in the GraalVMNativeImageOptions:\n\n```java scala\n// build.sbt\ngraalVMNativeImageOptions ++= Seq(\n\t\"--allow-incomplete-classpath\",\n\t\"-H:ResourceConfigurationFiles=../../configs/resource-config.json\",\n\t\"-H:ReflectionConfigurationFiles=../../configs/reflect-config.json\",\n\t\"-H:JNIConfigurationFiles=../../configs/jni-config.json\",\n\t\"-H:DynamicProxyConfigurationFiles=../../configs/proxy-config.json\"\n)\n```\n\nThe build with those updated options should succeed and the app can be run once again: \n\n```bash\ntarget/graalvm-native-image/apply-at-vdb\n\nSLF4J: Failed to load class \"org.slf4j.impl.StaticLoggerBinder\".\nSLF4J: Defaulting to no-operation (NOP) logger implementation\nSLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.\n```\n\nStill no logging, sadly. But the server is actually running and responds to POST requests via its exposed endpoint:\n\n```json\nPOST localhost:8080/api/v1/apply\n\n{\n\t\"email\": \"my@email.de\",\n\t\"name\": \"My Name\",\n\t\"phoneNumber\": \"+310123456789\",\n\t\"applicationBase64\": \"VGhpcyBjb3VsZCBiZSB5b3VyIGFwcGxpY2F0aW9uIQ==\"\n}\n\nResponse:\n\"*confetti* Thanks for handing in your application, we will get back to you within the next days! *confetti*\"\n```\n\nThe next and last step will investigate why logging is not picked up by GraalVM.\n\n### Investigating the missing logging\n\nSo first I wanted to have a look if it was an overall issue with logging. I stepped back from using logging-framework and tried the most basic logging with the java-integrated `java.util.Logging`. GraalVM's [docs](https://www.graalvm.org/docs/Native-Image/user/LOGGING) stated that GraalVM supports any logging that depends on that.\n\nBuilding and running the native-image with `java.util.Logging` instead of `logback` succeeded and everything is logged properly.\n\nSo it must be something with the dependencies?\n\nFor further investigation, I added the [sbt-dependency-graph](https://github.com/jrudolph/sbt-dependency-graph) plugin and checked out the dependency-tree with `sbt dependencyBrowserTree`. The library `logback` wasn't included in the dependency tree.\nWhich is odd, since `logback` is clearly present in the project's library-dependencies.\n\n```java scala\n// inside build.sbt\nlibraryDependencies ++= Seq(\n\t...\n\t\"ch.qos.logback\" % \"logback-classic\" % \"1.2.3\" % Runtime,\n\t\"ch.qos.logback\" % \"logback-core\" % \"1.2.3\" % Runtime,\n\t...\n)\n```\n\nHaving a closer look, the appendix `% Runtime` on logback's dependency is present.\n\nNot sure where this was coming from but it is most probably blindly copy-pasted from somewhere when gathering the dependencies for this project.\n\n[sbt reference manual](https://www.scala-sbt.org/1.x/docs/Scopes.html#Scoping+by+the+configuration+axis) states that the appendix `Runtime` defines that this dependency will be only included in the runtime classpath.\n\nSo this explains probably why logging was only working when the server was run from inside sbt.\n\nWith removing this and building the native-image, `logback` appears in the dependency-tree, and logging works when the native image is executed!\n\nThis \"bug\" was interesting as it emphasized what GraalVM can NOT do for you. Dynamic class loading/linking can not be supported by GraalVM as classes and dependencies have to be present during compile time to make a fully functional application. \n\n### Roundup\n\nA successful setup of sbt and GraalVM to build native-images requires to:\n\n- install GraalVM's native-image functionality via it's graal-updater: \n ```bash\n gu install native-image\n ```\n- add sbt-native-packager and sbt-assembly to sbt:\n ```java scala sbt\n // inside project/plugins.sbt\n addSbtPlugin(\"com.typesafe.sbt\" % \"sbt-native-packager\" % \"1.7.3\")\n addSbtPlugin(\"com.eed3si9n\" % \"sbt-assembly\" % \"0.14.6\")\n ```\n- enable the GraalVM-Plugin:\n ```java scala sbt\n // inside build.sbt\n enablePlugins(GraalVMNativeImagePlugin)\n ```\n- create a fat JAR and define which resource and configuration files should be intergated by intercepting look up calls during its execution:\n ```bash\n sbt assembly\n mkdir configs\n $GRAALHOME/bin/java -agentlib:native-image-agent=config-output-dir=./configs -jar target/scala-2.12/apply-at-vdb-assembly-0.1.0-SNAPSHOT.jar\n ```\n- fine-tune GraalVM with the following options and include the files that have been created in the previous step:\n ```java scala\n // build.sbt\n graalVMNativeImageOptions ++= Seq(\n \"--allow-incomplete-classpath\",\n \"-H:ResourceConfigurationFiles=../../configs/resource-config.json\",\n \"-H:ReflectionConfigurationFiles=../../configs/reflect-config.json\",\n \"-H:JNIConfigurationFiles=../../configs/jni-config.json\",\n \"-H:DynamicProxyConfigurationFiles=../../configs/proxy-config.json\"\n )\n ```\n- build the native image with:\n ```bash\n sbt graalvm-native-image:packageBin\n ```\n- run the executable file without the need of java\n ```\n ./target/graalvm-native-image/apply-at-vdb\n ```\n\nEven without benchmarking, you notice that the startup time is way faster than with a traditional JAR-file and the application is up and running almost instantly.\n\nIt is worth noting that the creation of a native image is a quite time-consuming process. For this project, it took between 1 and 2 minutes. This is, of course, something a CI/CD-Server like Jenkins would take care of but it has to be kept in mind. \n\nWith a working native-image, it is time to dockerize.\n\n## Building Docker images\n\nIn this section two Docker containers will be built. One, following the \"normal\"-java way and the other will be using the native-image to build a Docker-container without Java.\n\nBefore getting started with native images, a regular JAR-file and Docker image for comparison can be built.\n\nWith the [sbt-assembly](https://github.com/sbt/sbt-assembly) plugin you can create JAR-files with all of its dependencies (fat JARs).\n`sbt assembly` creates this `target/scala-2.12/apply-at-vdb-assembly-0.1.0-SNAPSHOT.jar` which has a size of around 42MB:\n\n```shell\n sbt assembly \n ls -lh target/scala-2.12/apply-at-vdb-assembly-0.1.0-SNAPSHOT.jar\n\n ... ... 42M target/scala-2.12/apply-at-vdb-assembly-0.1.0-SNAPSHOT.jar\n```\n\nThis application can be run locally via `java -jar target/scala-2.12/apply-at-vdb-assembly-0.1.0-SNAPSHOT.jar` with the prerequisite that Java is installed on that machine.\n\nCreating the Docker image for this JAR-file can be done manually, but luckily `sbt-native-package` supports building regular Docker images out of the box, only the `DockerPlugin` needs to be enabled:\n\n```java scala\n// build.sbt\nenablePlugins(DockerPlugin)\n```\n\n`sbt docker:publishLocal` creates the Docker image `apply-at-vdb`.\n \n```shell\ndocker images | grep apply-at-vdb\n apply-at-vdb \t0.1.0-SNAPSHOT \t\tf488d4c06f28 \t555MB\n```\n\nA whopping 555MB for a tiny app exposing one endpoint which JAR-file was only 42MB. But to run this JAR-file in a container, this container needs to ship with a JVM, and that's where the overhead lies.\n\nWith that Docker image and JAR-file as a reference, we can now look into how the native-image operates together with Docker.\n\nGraalVM does not support cross-building, meaning an application cannot be expected to be built in a MacOS environment and run in a Linux environment. It has to be built and run on the same platform. With the help of Docker, the desired built environment can be provided.\nThe `Dockerfile` looks as follows:\n```docker\nFROM oracle/graalvm-ce AS builder\nWORKDIR /app/vdb\nRUN gu install native-image\nRUN curl https://bintray.com/sbt/rpm/rpm > bintray-sbt-rpm.repo \\\n\t&& mv bintray-sbt-rpm.repo /etc/yum.repos.d/ \\\n\t&& yum install -y sbt\nCOPY . /app/vdb\nWORKDIR /app/vdb\nRUN sbt \"graalvm-native-image:packageBin\"\n\nFROM oraclelinux:7-slim\nCOPY --from=builder /app/vdb/target/graalvm-native-image/apply-at-vdb ./app/\nCMD ./app/apply-at-vdb\n\n```\n\nAnd can be run with:\n```bash\ndocker build -t native-apply-at-vdb .\n```\nThe Dockerfile describes to do the following:\nThe first docker container, as the name implies, is the builder. As a base image the official [GraalVM image](https://hub.docker.com/r/oracle/graalvm-ce) is used. \n\nThis image needs two more things, GraalVM's native-image command, and sbt, and this is what the two follow-up rows are providing. Once that's done, the project is copied into this container and the native image is built from within sbt.\n\nThe next steps bring the native executable into its own docker container.\nAs a base image, we use an Oracle Linux image and from our builder-container, we copy the native executable to this new container. The last step is that the app gets run on container startup.\n\n`docker run -p 8080:8080 -it native-apply-at-vdb` starts the container and shows that everything is working just as before.\n\nBut what about the image size? Let's have a look.\n```\ndocker images | grep apply-at-vdb\n native-apply-at-vdb\t\tlatest 17b559e78645\t\t199MB\n apply-at-vdb\t\t\t0.1.0-SNAPSHOT f488d4c06f28\t\t555MB\n```\nThat is impressive! We created an app that is approx. 2.8 times smaller than our original app.\n\n## Summary\n\nWe learned how to set up a Scala project with GraalVM, what steps have to be taken to build a native image with GraalVM, and let it run inside a Docker container. We also received a good overview of what's possible with GraalVM and what's not.\n\nThe initial start and setup of GraalVM with sbt is pretty easy and straightforward. Getting GraalVM to compile an sbt project is nice and simple. \n\nThis Hackathon showed us that it is difficult and requires a lot of fine-tuning to integrate GraalVM into an existing project or product. At Vandebron we work with a complex stack of technologies including Spark, Kafka, and Akka which made it difficult to port the findings from this small toy service to one of our existing microservices. This made extensive troubleshooting in the Hackathon not possible.\n\nAll in all, GraalVM allows you to give up some Java overhead and create significant smaller Docker images. Sadly, this comes at the cost of giving up dynamic linking and class loading. \nA silver lining is, that inside Scala's ecosystem this rarely a problem. Scala relies heavily on compile-time mechanisms for detecting bugs early and creating type-safe applications (read [here](https://blog.softwaremill.com/small-fast-docker-images-using-graalvms-native-image-99c0bc92e70b) but also see e.g. [Scala's compiler phases](https://typelevel.org/scala/docs/phases.html)).\n\n* * *\n\n## Sources and Reading\n- [Building Serverless Scala Services with GraalVM](https://www.inner-product.com/posts/serverless-scala-services-with-graalvm/) by Noel Welsh\n- [Small & fast Docker images using GraalVM’s native-image](https://blog.softwaremill.com/small-fast-docker-images-using-graalvms-native-image-99c0bc92e70b) by Adam Warski\n- [Run Scala applications with GraalVM and Docker](https://medium.com/rahasak/run-scala-applications-with-graalvm-and-docker-a1e67701e935) by @itseranga\n- [Getting Started with GraalVM and Scala](https://medium.com/graalvm/getting-started-with-graalvm-for-scala-d0a006dec1d1) by Oleg Šelajev\n- [Updates on Class Initialization in GraalVM Native Image Generation](https://medium.com/graalvm/updates-on-class-initialization-in-graalvm-native-image-generation-c61faca461f7) by \nChristian Wimmer\n- [GraalVM's Reference Manuals](https://www.graalvm.org/reference-manual/)\n","meta":{"title":"Building native images and compiling with GraalVM and sbt","description":"At Vandebron we organized a two-day long Hackathon, a colleague and I took the chance to dig into the wonderful world of GraalVM.","createdAt":"Tue Oct 06 2020 02:00:00 GMT+0200 (Central European Summer Time)","coverImage":"images/building-native-images-and-compiling-with-graalvm-and-sbt.jpg","imageSource":"https://pixabay.com/users/lumix2004-3890388/","tags":"graalvm, scala","author":"Katrin Grunert","slug":"blog/building-native-images-and-compiling-with-graalvm-and-sbt","formattedDate":"6 oktober 2020","date":"Tue Oct 06 2020 02:00:00 GMT+0200 (Central European Summer Time)"}},{"content":"\nTwo months ago, I started my journey at Vandebron. One of the projects I first dove into was their efforts to build a [component library](https://windmolen.netlify.app/). Something I was already familiar with from previous companies I worked at. \n\nOn the internet, you can find many articles that describe why a reusable component library is a good investment for your development team(s). Although there's much to say about the advantages of component libraries, most articles don't state the (obvious) disadvantages such projects can have. In this post, I'll point out some of our learnings and why you might not need such a reusable component library.\n\n## About component libraries\n\nOften you find yourself repeating the same lines of code to make, for example, a button or the layout of a page look nice, especially when you're working on multiple projects. Or as a designer, you get frustrated every time the styling for a part of the application is off when a new page or project is created. Many companies have already found multiple solutions to preventing themselves from repeating styling, which is the main reason for design inconsistencies. And therefore component libraries were created.\n\nA component library is a collection of all the styled parts (or components) of a website or multiple websites that make it easier for developers to reuse these parts. Also, designers will know for sure that all components in the component library adhere to their designs, and therefore all projects that use these components will conform. Often these libraries consist of different layers of components, for example, offering atoms, molecules, and organisms when an [Atomic Design](https://bradfrost.com/blog/post/atomic-web-design/) pattern is applied. Following this pattern, developers can use the parts to style their templates and pages consistently.\n\nComponent libraries are becoming more and more popular with the rise of JavaScript libraries and frameworks like React and Vue. These technologies are very suitable for quickly building interactive components that you can use in your application, and can easily be exposed as a library on NPM or Github Packages. At Vandebron, we're building all our web and mobile applications with React and React Native and are using [Storybook](https://storybook.js.org/) to develop our components in a shared library between the engineering and design teams. This can potentially create a lot of advantages for both the developers and designers, as you can read below.\n\n## Why you *might* need a component library\n\nBefore deciding to create a component library for your team or company, you probably want to hear about the advantages such a project can lead to. The main advantages of component libraries are briefly mentioned in the first section above and are often defined as:\n\n- **Reducing code duplication**: With a component library, you can create components that can be shared across multiple websites or applications. This way you no longer have to duplicate styling in different projects. This can seriously decrease the amount of code duplication that you have in your projects, also reducing the number of bugs or design inconsistencies.\n\n- **Preventing design inconsistencies**: By adding all your components and styled parts to the component library you're certain that these will look the same on all the places they're used. Not only will all the components look the same on every page, when designers make a change to one of these components they can be easily updated on all the places they're used.\n\n- **Easier collaborating**: Component libraries make it easier for developers and designers to collaborate on applications and designs, with the component library as the common \"playground\". By using a tool, like Storybook, you can also make this playground visible to non-technical people and show what components are already available to use for new features.\n\nBut these advantages come at a certain price, as I'll explain in the next section.\n\n## Disadvantages of component libraries\n\nBesides the obvious advantages of a component library, it can also have serious disadvantages that are listed below. Whether or not these disadvantages apply to you depends on numerous things that are discussed later on in this article.\n\n- **Increasing complexity**: With all attempts to make code more generic, an increased level of complexity also comes to play. Reusable components should be easy to extend or customize, which requires you to think about the different use cases beforehand or force you to add many different variations to a component. With every new project that starts to use the component library, you get the risk of increasing the complexity of the library even more.\n\n- **Time-consuming**: Every time you want to add a component to your project, you need to create that component in the component library first and import it locally in the project to test it. Therefore you need to be working in multiple projects at the same time, which requires you to set up a more time-consuming workflow. Also, when you want to use this new component from the library, you have to publish a new version of the library to make the component available.\n\n- **Conflicting dependencies**: When you're using different versions of dependencies across your projects and the component library, you're forced to sync those with each other. Imagine having, for example, an older version of React running in one of your projects that doesn't use a recent React API that you want to use in your component library. In this scenario, you either have to update that project or are unable to keep your component library on par with the latest release of your dependency on React. Both solutions have pros and cons, and would rather be avoided.\n\nAs mentioned before, there are reasons why these disadvantages might apply to you that are the team size, the number of teams and projects at the company, development or release lifecycles, and how your source code is organized. It clearly doesn't make sense to invest in a component library if you have just a small amount of people work on just one project, or a sole team is working on all the different projects making it easier to manage code duplication or design inconsistencies.\n\n## Considerations before starting\n\nThere are two main alternatives that you need to take into consideration before building a reusable component library, which is (obviously) using or extending an existing component library or sourcing your code in a monorepo. \n\n- **Existing component libraries:** Using an existing component library is an efficient way to create consistently (web) pages and reduce the amount of complexity of your own project, while also taking advantage of best practices of large open-source projects. Popular examples of component libraries are [Ant Design For React](https://ant.design/docs/react/introduce) or [various implementations](https://material.io/develop) for Google's Material Design. These libraries allow you to move quickly without having all the overhead of creating complex components but limit you to the design guidelines of these component libraries.\n\n- **Monorepo:** If you don't want to take advantage of existing libraries or are very keen to apply your own styling to components across multiple applications without having to copy-paste the code, you can host the source code of applications in a monorepo. With the monorepo approach, you can create a shared folder that includes all the components used by your applications. This makes it possible to apply changes with a simple pull request and import these components from every project in that repository.\n\nBesides these two alternatives, you also need to have proper design guidelines set by your designer(s). When the design guidelines are flexible and fluctuating, you could be structuring components incorrectly with the risk of doing a lot of work that will be omitted once the project evolves.\n\n## To summarize\n\nComponent libraries are a great way to reduce the amount of code duplication in your applications, prevent design inconsistencies, and increase collaborations between developers, designers, and different teams. But this comes with increased complexity, slower development cycles, and possible code conflicts between projects. Therefore you should consider if using an existing component library or having a monorepo for your source code is a workable solution. At Vandebron we decided to build our own component library (called [windmolen](https://windmolen.netlify.app/)) and if you'd decide the same, then be sure that your design guidelines are properly structured and mature enough.\n","meta":{"title":"When (Not) To Build A Reusable Component Library","description":"You can find much information on why a reusable component library is a good investment, but most articles don't state the (obvious) disadvantages..","createdAt":"Mon Oct 05 2020 02:00:00 GMT+0200 (Central European Summer Time)","coverImage":"images/when-not-to-build-a-reusable-component-library.jpg","imageSource":"https://pixabay.com/users/stevepb-282134/","tags":"React, component library","author":"Roy Derks","slug":"blog/when-not-to-build-a-reusable-component-library","formattedDate":"5 oktober 2020","date":"Mon Oct 05 2020 02:00:00 GMT+0200 (Central European Summer Time)"}}]},"__N_SSG":true} \ No newline at end of file diff --git a/_next/static/3bqwlGhZxYXJfWdGp7YNO/_buildManifest.js b/_next/static/3bqwlGhZxYXJfWdGp7YNO/_buildManifest.js deleted file mode 100644 index 9aece60b9..000000000 --- a/_next/static/3bqwlGhZxYXJfWdGp7YNO/_buildManifest.js +++ /dev/null @@ -1 +0,0 @@ -self.__BUILD_MANIFEST = (function(a){return {__rewrites:{beforeFiles:[],afterFiles:[],fallback:[]},"/":["static\u002Fchunks\u002Fpages\u002Findex-fa81e77dbb0d11046a38.js"],"/_error":["static\u002Fchunks\u002Fpages\u002F_error-3471ef3eb12e3a96abde.js"],"/about":[a,"static\u002Fchunks\u002Fpages\u002Fabout-2cf6cb0673d6904a8e88.js"],"/blog/[slug]":[a,"static\u002Fchunks\u002Fpages\u002Fblog\u002F[slug]-8ca30567d5754bf22109.js"],"/greentech-hackathon":["static\u002Fcss\u002F7335de542e4b4f02a25b.css","static\u002Fchunks\u002Fd637bb0c.ddce25b62cf34b951439.js",a,"static\u002Fchunks\u002Fpages\u002Fgreentech-hackathon-6b79709a263687467e50.js"],sortedPages:["\u002F","\u002F_app","\u002F_error","\u002Fabout","\u002Fblog\u002F[slug]","\u002Fgreentech-hackathon"]}}("static\u002Fchunks\u002F1c49f5f00355f650bee3d37484f094be037a30fa.91581ad1159d948d31b7.js"));self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB() \ No newline at end of file diff --git a/_next/static/65k1HLVmOHR7Ru8YkkK-5/_buildManifest.js b/_next/static/65k1HLVmOHR7Ru8YkkK-5/_buildManifest.js deleted file mode 100644 index 1fa59f280..000000000 --- a/_next/static/65k1HLVmOHR7Ru8YkkK-5/_buildManifest.js +++ /dev/null @@ -1 +0,0 @@ -self.__BUILD_MANIFEST = (function(a){return {__rewrites:{beforeFiles:[],afterFiles:[],fallback:[]},"/":["static\u002Fchunks\u002Fpages\u002Findex-fa81e77dbb0d11046a38.js"],"/_error":["static\u002Fchunks\u002Fpages\u002F_error-3471ef3eb12e3a96abde.js"],"/about":[a,"static\u002Fchunks\u002Fpages\u002Fabout-2cf6cb0673d6904a8e88.js"],"/blog/[slug]":[a,"static\u002Fchunks\u002Fpages\u002Fblog\u002F[slug]-8ca30567d5754bf22109.js"],"/greentech-hackathon":["static\u002Fcss\u002F7335de542e4b4f02a25b.css","static\u002Fchunks\u002Fd637bb0c.ddce25b62cf34b951439.js",a,"static\u002Fchunks\u002Fpages\u002Fgreentech-hackathon-6b79709a263687467e50.js"],sortedPages:["\u002F","\u002F_app","\u002F_error","\u002Fabout","\u002Fblog\u002F[slug]","\u002Fgreentech-hackathon"]}}("static\u002Fchunks\u002F1c49f5f00355f650bee3d37484f094be037a30fa.9731460d600f94fea033.js"));self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB() \ No newline at end of file diff --git a/_next/static/65k1HLVmOHR7Ru8YkkK-5/_ssgManifest.js b/_next/static/65k1HLVmOHR7Ru8YkkK-5/_ssgManifest.js deleted file mode 100644 index 5ed81266f..000000000 --- a/_next/static/65k1HLVmOHR7Ru8YkkK-5/_ssgManifest.js +++ /dev/null @@ -1 +0,0 @@ -self.__SSG_MANIFEST=new Set(["\u002F","\u002Fgreentech-hackathon","\u002Fblog\u002F[slug]"]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB() \ No newline at end of file diff --git a/_next/static/BARd3a-dsddF1Rnpb7ubB/_buildManifest.js b/_next/static/A2BmI3mWmRuC0fGN4s67Y/_buildManifest.js similarity index 85% rename from _next/static/BARd3a-dsddF1Rnpb7ubB/_buildManifest.js rename to _next/static/A2BmI3mWmRuC0fGN4s67Y/_buildManifest.js index 1fa59f280..8ef4c6581 100644 --- a/_next/static/BARd3a-dsddF1Rnpb7ubB/_buildManifest.js +++ b/_next/static/A2BmI3mWmRuC0fGN4s67Y/_buildManifest.js @@ -1 +1 @@ -self.__BUILD_MANIFEST = (function(a){return {__rewrites:{beforeFiles:[],afterFiles:[],fallback:[]},"/":["static\u002Fchunks\u002Fpages\u002Findex-fa81e77dbb0d11046a38.js"],"/_error":["static\u002Fchunks\u002Fpages\u002F_error-3471ef3eb12e3a96abde.js"],"/about":[a,"static\u002Fchunks\u002Fpages\u002Fabout-2cf6cb0673d6904a8e88.js"],"/blog/[slug]":[a,"static\u002Fchunks\u002Fpages\u002Fblog\u002F[slug]-8ca30567d5754bf22109.js"],"/greentech-hackathon":["static\u002Fcss\u002F7335de542e4b4f02a25b.css","static\u002Fchunks\u002Fd637bb0c.ddce25b62cf34b951439.js",a,"static\u002Fchunks\u002Fpages\u002Fgreentech-hackathon-6b79709a263687467e50.js"],sortedPages:["\u002F","\u002F_app","\u002F_error","\u002Fabout","\u002Fblog\u002F[slug]","\u002Fgreentech-hackathon"]}}("static\u002Fchunks\u002F1c49f5f00355f650bee3d37484f094be037a30fa.9731460d600f94fea033.js"));self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB() \ No newline at end of file +self.__BUILD_MANIFEST = (function(a){return {__rewrites:{beforeFiles:[],afterFiles:[],fallback:[]},"/":["static\u002Fchunks\u002Fpages\u002Findex-fa81e77dbb0d11046a38.js"],"/_error":["static\u002Fchunks\u002Fpages\u002F_error-3471ef3eb12e3a96abde.js"],"/about":[a,"static\u002Fchunks\u002Fpages\u002Fabout-2cf6cb0673d6904a8e88.js"],"/blog/[slug]":[a,"static\u002Fchunks\u002Fpages\u002Fblog\u002F[slug]-8ca30567d5754bf22109.js"],"/greentech-hackathon":["static\u002Fcss\u002F7335de542e4b4f02a25b.css","static\u002Fchunks\u002Fd637bb0c.ddce25b62cf34b951439.js",a,"static\u002Fchunks\u002Fpages\u002Fgreentech-hackathon-6b79709a263687467e50.js"],sortedPages:["\u002F","\u002F_app","\u002F_error","\u002Fabout","\u002Fblog\u002F[slug]","\u002Fgreentech-hackathon"]}}("static\u002Fchunks\u002F1c49f5f00355f650bee3d37484f094be037a30fa.cf988bb95046fabf6cc2.js"));self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB() \ No newline at end of file diff --git a/_next/static/2fzWnQF_oNnUsykSbhTNX/_ssgManifest.js b/_next/static/A2BmI3mWmRuC0fGN4s67Y/_ssgManifest.js similarity index 100% rename from _next/static/2fzWnQF_oNnUsykSbhTNX/_ssgManifest.js rename to _next/static/A2BmI3mWmRuC0fGN4s67Y/_ssgManifest.js diff --git a/_next/static/BARd3a-dsddF1Rnpb7ubB/_ssgManifest.js b/_next/static/BARd3a-dsddF1Rnpb7ubB/_ssgManifest.js deleted file mode 100644 index 5ed81266f..000000000 --- a/_next/static/BARd3a-dsddF1Rnpb7ubB/_ssgManifest.js +++ /dev/null @@ -1 +0,0 @@ -self.__SSG_MANIFEST=new Set(["\u002F","\u002Fgreentech-hackathon","\u002Fblog\u002F[slug]"]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB() \ No newline at end of file diff --git a/_next/static/NVw5m6O-kHWen4j6NjFh5/_buildManifest.js b/_next/static/NVw5m6O-kHWen4j6NjFh5/_buildManifest.js deleted file mode 100644 index 9aece60b9..000000000 --- a/_next/static/NVw5m6O-kHWen4j6NjFh5/_buildManifest.js +++ /dev/null @@ -1 +0,0 @@ -self.__BUILD_MANIFEST = (function(a){return {__rewrites:{beforeFiles:[],afterFiles:[],fallback:[]},"/":["static\u002Fchunks\u002Fpages\u002Findex-fa81e77dbb0d11046a38.js"],"/_error":["static\u002Fchunks\u002Fpages\u002F_error-3471ef3eb12e3a96abde.js"],"/about":[a,"static\u002Fchunks\u002Fpages\u002Fabout-2cf6cb0673d6904a8e88.js"],"/blog/[slug]":[a,"static\u002Fchunks\u002Fpages\u002Fblog\u002F[slug]-8ca30567d5754bf22109.js"],"/greentech-hackathon":["static\u002Fcss\u002F7335de542e4b4f02a25b.css","static\u002Fchunks\u002Fd637bb0c.ddce25b62cf34b951439.js",a,"static\u002Fchunks\u002Fpages\u002Fgreentech-hackathon-6b79709a263687467e50.js"],sortedPages:["\u002F","\u002F_app","\u002F_error","\u002Fabout","\u002Fblog\u002F[slug]","\u002Fgreentech-hackathon"]}}("static\u002Fchunks\u002F1c49f5f00355f650bee3d37484f094be037a30fa.91581ad1159d948d31b7.js"));self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB() \ No newline at end of file diff --git a/_next/static/NVw5m6O-kHWen4j6NjFh5/_ssgManifest.js b/_next/static/NVw5m6O-kHWen4j6NjFh5/_ssgManifest.js deleted file mode 100644 index 5ed81266f..000000000 --- a/_next/static/NVw5m6O-kHWen4j6NjFh5/_ssgManifest.js +++ /dev/null @@ -1 +0,0 @@ -self.__SSG_MANIFEST=new Set(["\u002F","\u002Fgreentech-hackathon","\u002Fblog\u002F[slug]"]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB() \ No newline at end of file diff --git a/_next/static/2fzWnQF_oNnUsykSbhTNX/_buildManifest.js b/_next/static/OOMgl9sdO92b_IXfcvhV-/_buildManifest.js similarity index 85% rename from _next/static/2fzWnQF_oNnUsykSbhTNX/_buildManifest.js rename to _next/static/OOMgl9sdO92b_IXfcvhV-/_buildManifest.js index 1fa59f280..8ef4c6581 100644 --- a/_next/static/2fzWnQF_oNnUsykSbhTNX/_buildManifest.js +++ b/_next/static/OOMgl9sdO92b_IXfcvhV-/_buildManifest.js @@ -1 +1 @@ -self.__BUILD_MANIFEST = (function(a){return {__rewrites:{beforeFiles:[],afterFiles:[],fallback:[]},"/":["static\u002Fchunks\u002Fpages\u002Findex-fa81e77dbb0d11046a38.js"],"/_error":["static\u002Fchunks\u002Fpages\u002F_error-3471ef3eb12e3a96abde.js"],"/about":[a,"static\u002Fchunks\u002Fpages\u002Fabout-2cf6cb0673d6904a8e88.js"],"/blog/[slug]":[a,"static\u002Fchunks\u002Fpages\u002Fblog\u002F[slug]-8ca30567d5754bf22109.js"],"/greentech-hackathon":["static\u002Fcss\u002F7335de542e4b4f02a25b.css","static\u002Fchunks\u002Fd637bb0c.ddce25b62cf34b951439.js",a,"static\u002Fchunks\u002Fpages\u002Fgreentech-hackathon-6b79709a263687467e50.js"],sortedPages:["\u002F","\u002F_app","\u002F_error","\u002Fabout","\u002Fblog\u002F[slug]","\u002Fgreentech-hackathon"]}}("static\u002Fchunks\u002F1c49f5f00355f650bee3d37484f094be037a30fa.9731460d600f94fea033.js"));self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB() \ No newline at end of file +self.__BUILD_MANIFEST = (function(a){return {__rewrites:{beforeFiles:[],afterFiles:[],fallback:[]},"/":["static\u002Fchunks\u002Fpages\u002Findex-fa81e77dbb0d11046a38.js"],"/_error":["static\u002Fchunks\u002Fpages\u002F_error-3471ef3eb12e3a96abde.js"],"/about":[a,"static\u002Fchunks\u002Fpages\u002Fabout-2cf6cb0673d6904a8e88.js"],"/blog/[slug]":[a,"static\u002Fchunks\u002Fpages\u002Fblog\u002F[slug]-8ca30567d5754bf22109.js"],"/greentech-hackathon":["static\u002Fcss\u002F7335de542e4b4f02a25b.css","static\u002Fchunks\u002Fd637bb0c.ddce25b62cf34b951439.js",a,"static\u002Fchunks\u002Fpages\u002Fgreentech-hackathon-6b79709a263687467e50.js"],sortedPages:["\u002F","\u002F_app","\u002F_error","\u002Fabout","\u002Fblog\u002F[slug]","\u002Fgreentech-hackathon"]}}("static\u002Fchunks\u002F1c49f5f00355f650bee3d37484f094be037a30fa.cf988bb95046fabf6cc2.js"));self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB() \ No newline at end of file diff --git a/_next/static/3bqwlGhZxYXJfWdGp7YNO/_ssgManifest.js b/_next/static/OOMgl9sdO92b_IXfcvhV-/_ssgManifest.js similarity index 100% rename from _next/static/3bqwlGhZxYXJfWdGp7YNO/_ssgManifest.js rename to _next/static/OOMgl9sdO92b_IXfcvhV-/_ssgManifest.js diff --git a/_next/static/UljgdnKBc-B-sh5MjXiA-/_buildManifest.js b/_next/static/UljgdnKBc-B-sh5MjXiA-/_buildManifest.js deleted file mode 100644 index 9aece60b9..000000000 --- a/_next/static/UljgdnKBc-B-sh5MjXiA-/_buildManifest.js +++ /dev/null @@ -1 +0,0 @@ -self.__BUILD_MANIFEST = (function(a){return {__rewrites:{beforeFiles:[],afterFiles:[],fallback:[]},"/":["static\u002Fchunks\u002Fpages\u002Findex-fa81e77dbb0d11046a38.js"],"/_error":["static\u002Fchunks\u002Fpages\u002F_error-3471ef3eb12e3a96abde.js"],"/about":[a,"static\u002Fchunks\u002Fpages\u002Fabout-2cf6cb0673d6904a8e88.js"],"/blog/[slug]":[a,"static\u002Fchunks\u002Fpages\u002Fblog\u002F[slug]-8ca30567d5754bf22109.js"],"/greentech-hackathon":["static\u002Fcss\u002F7335de542e4b4f02a25b.css","static\u002Fchunks\u002Fd637bb0c.ddce25b62cf34b951439.js",a,"static\u002Fchunks\u002Fpages\u002Fgreentech-hackathon-6b79709a263687467e50.js"],sortedPages:["\u002F","\u002F_app","\u002F_error","\u002Fabout","\u002Fblog\u002F[slug]","\u002Fgreentech-hackathon"]}}("static\u002Fchunks\u002F1c49f5f00355f650bee3d37484f094be037a30fa.91581ad1159d948d31b7.js"));self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB() \ No newline at end of file diff --git a/_next/static/UljgdnKBc-B-sh5MjXiA-/_ssgManifest.js b/_next/static/UljgdnKBc-B-sh5MjXiA-/_ssgManifest.js deleted file mode 100644 index 5ed81266f..000000000 --- a/_next/static/UljgdnKBc-B-sh5MjXiA-/_ssgManifest.js +++ /dev/null @@ -1 +0,0 @@ -self.__SSG_MANIFEST=new Set(["\u002F","\u002Fgreentech-hackathon","\u002Fblog\u002F[slug]"]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB() \ No newline at end of file diff --git a/_next/static/Zxf7Z4-Xb7qG9tU8kMohi/_buildManifest.js b/_next/static/Zxf7Z4-Xb7qG9tU8kMohi/_buildManifest.js deleted file mode 100644 index 1fa59f280..000000000 --- a/_next/static/Zxf7Z4-Xb7qG9tU8kMohi/_buildManifest.js +++ /dev/null @@ -1 +0,0 @@ -self.__BUILD_MANIFEST = (function(a){return {__rewrites:{beforeFiles:[],afterFiles:[],fallback:[]},"/":["static\u002Fchunks\u002Fpages\u002Findex-fa81e77dbb0d11046a38.js"],"/_error":["static\u002Fchunks\u002Fpages\u002F_error-3471ef3eb12e3a96abde.js"],"/about":[a,"static\u002Fchunks\u002Fpages\u002Fabout-2cf6cb0673d6904a8e88.js"],"/blog/[slug]":[a,"static\u002Fchunks\u002Fpages\u002Fblog\u002F[slug]-8ca30567d5754bf22109.js"],"/greentech-hackathon":["static\u002Fcss\u002F7335de542e4b4f02a25b.css","static\u002Fchunks\u002Fd637bb0c.ddce25b62cf34b951439.js",a,"static\u002Fchunks\u002Fpages\u002Fgreentech-hackathon-6b79709a263687467e50.js"],sortedPages:["\u002F","\u002F_app","\u002F_error","\u002Fabout","\u002Fblog\u002F[slug]","\u002Fgreentech-hackathon"]}}("static\u002Fchunks\u002F1c49f5f00355f650bee3d37484f094be037a30fa.9731460d600f94fea033.js"));self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB() \ No newline at end of file diff --git a/_next/static/Zxf7Z4-Xb7qG9tU8kMohi/_ssgManifest.js b/_next/static/Zxf7Z4-Xb7qG9tU8kMohi/_ssgManifest.js deleted file mode 100644 index 5ed81266f..000000000 --- a/_next/static/Zxf7Z4-Xb7qG9tU8kMohi/_ssgManifest.js +++ /dev/null @@ -1 +0,0 @@ -self.__SSG_MANIFEST=new Set(["\u002F","\u002Fgreentech-hackathon","\u002Fblog\u002F[slug]"]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB() \ No newline at end of file diff --git a/_next/static/chunks/1c49f5f00355f650bee3d37484f094be037a30fa.91581ad1159d948d31b7.js b/_next/static/chunks/1c49f5f00355f650bee3d37484f094be037a30fa.91581ad1159d948d31b7.js deleted file mode 100644 index 447068da2..000000000 --- a/_next/static/chunks/1c49f5f00355f650bee3d37484f094be037a30fa.91581ad1159d948d31b7.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp_N_E=window.webpackJsonp_N_E||[]).push([[4],{"++Eq":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{fontFamily:'Consolas, Menlo, Monaco, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace',fontSize:"14px",lineHeight:"1.375",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",background:"#1d262f",color:"#57718e"},'pre[class*="language-"]':{fontFamily:'Consolas, Menlo, Monaco, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace',fontSize:"14px",lineHeight:"1.375",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",background:"#1d262f",color:"#57718e",padding:"1em",margin:".5em 0",overflow:"auto"},'pre > code[class*="language-"]':{fontSize:"1em"},'pre[class*="language-"]::-moz-selection':{textShadow:"none",background:"#004a9e"},'pre[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#004a9e"},'code[class*="language-"]::-moz-selection':{textShadow:"none",background:"#004a9e"},'code[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#004a9e"},'pre[class*="language-"]::selection':{textShadow:"none",background:"#004a9e"},'pre[class*="language-"] ::selection':{textShadow:"none",background:"#004a9e"},'code[class*="language-"]::selection':{textShadow:"none",background:"#004a9e"},'code[class*="language-"] ::selection':{textShadow:"none",background:"#004a9e"},':not(pre) > code[class*="language-"]':{padding:".1em",borderRadius:".3em"},comment:{color:"#4a5f78"},prolog:{color:"#4a5f78"},doctype:{color:"#4a5f78"},cdata:{color:"#4a5f78"},punctuation:{color:"#4a5f78"},namespace:{Opacity:".7"},tag:{color:"#0aa370"},operator:{color:"#0aa370"},number:{color:"#0aa370"},property:{color:"#57718e"},function:{color:"#57718e"},"tag-id":{color:"#ebf4ff"},selector:{color:"#ebf4ff"},"atrule-id":{color:"#ebf4ff"},"code.language-javascript":{color:"#7eb6f6"},"attr-name":{color:"#7eb6f6"},"code.language-css":{color:"#47ebb4"},"code.language-scss":{color:"#47ebb4"},boolean:{color:"#47ebb4"},string:{color:"#47ebb4"},entity:{color:"#47ebb4",cursor:"help"},url:{color:"#47ebb4"},".language-css .token.string":{color:"#47ebb4"},".language-scss .token.string":{color:"#47ebb4"},".style .token.string":{color:"#47ebb4"},"attr-value":{color:"#47ebb4"},keyword:{color:"#47ebb4"},control:{color:"#47ebb4"},directive:{color:"#47ebb4"},unit:{color:"#47ebb4"},statement:{color:"#47ebb4"},regex:{color:"#47ebb4"},atrule:{color:"#47ebb4"},placeholder:{color:"#47ebb4"},variable:{color:"#47ebb4"},deleted:{textDecoration:"line-through"},inserted:{borderBottom:"1px dotted #ebf4ff",textDecoration:"none"},italic:{fontStyle:"italic"},important:{fontWeight:"bold",color:"#7eb6f6"},bold:{fontWeight:"bold"},"pre > code.highlight":{Outline:".4em solid #34659d",OutlineOffset:".4em"},".line-numbers .line-numbers-rows":{borderRightColor:"#1f2932"},".line-numbers-rows > span:before":{color:"#2c3847"},".line-highlight":{background:"linear-gradient(to right, rgba(10, 163, 112, 0.2) 70%, rgba(10, 163, 112, 0))"}}},"+OJB":function(e,t,n){"use strict";t.cwd=function(){return"/"}},"+Pz5":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n("NOby"),r=n("T0BQ"),i=l("text"),a=l("string"),s={resolveAll:c()};function l(e){return{tokenize:function(t){var n=this,o=this.parser.constructs[e],r=t.attempt(o,i,a);return i;function i(e){return l(e)?r(e):a(e)}function a(e){if(null!==e)return t.enter("data"),t.consume(e),s;t.consume(e)}function s(e){return l(e)?(t.exit("data"),r(e)):(t.consume(e),s)}function l(e){var t=o[e],r=-1;if(null===e)return!0;if(t)for(;++r0&&void 0!==arguments[0]?arguments[0]:{},t=e.ampFirst,n=void 0!==t&&t,o=e.hybrid,r=void 0!==o&&o,i=e.hasQuery,a=void 0!==i&&i;return n||r&&a}},"/BR8":function(e,t,n){"use strict";e.exports=function(e,t){var n=e.footnoteOrder,r=String(t.identifier);-1===n.indexOf(r)&&n.push(r);return e(t.position,"sup",{id:"fnref-"+r},[e(t,"a",{href:"#fn-"+r,className:["footnote-ref"]},[o("text",t.label||r)])])};var o=n("vUGn")},"/Fgc":function(e,t,n){"use strict";e.exports=function(e,t){return e(t,"del",o(e,t))};var o=n("WFsM")},"/apb":function(e,t,n){"use strict";var o=n("E/Jm"),r={name:"codeText",tokenize:function(e,t,n){var r,i,a=0;return function(t){return e.enter("codeText"),e.enter("codeTextSequence"),s(t)};function s(t){return 96===t?(e.consume(t),a++,s):(e.exit("codeTextSequence"),l(t))}function l(t){return null===t?n(t):96===t?(i=e.enter("codeTextSequence"),r=0,u(t)):32===t?(e.enter("space"),e.consume(t),e.exit("space"),l):o(t)?(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),l):(e.enter("codeTextData"),c(t))}function c(t){return null===t||32===t||96===t||o(t)?(e.exit("codeTextData"),l(t)):(e.consume(t),c)}function u(n){return 96===n?(e.consume(n),r++,u):r===a?(e.exit("codeTextSequence"),e.exit("codeText"),t(n)):(i.type="codeTextData",c(n))}},resolve:function(e){var t,n,o=e.length-4,r=3;if(("lineEnding"===e[r][1].type||"space"===e[r][1].type)&&("lineEnding"===e[o][1].type||"space"===e[o][1].type))for(t=r;++t code[class*="language-"]':{fontSize:"1em"},'pre[class*="language-"]::-moz-selection':{textShadow:"none",background:"#6a51e6"},'pre[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#6a51e6"},'code[class*="language-"]::-moz-selection':{textShadow:"none",background:"#6a51e6"},'code[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#6a51e6"},'pre[class*="language-"]::selection':{textShadow:"none",background:"#6a51e6"},'pre[class*="language-"] ::selection':{textShadow:"none",background:"#6a51e6"},'code[class*="language-"]::selection':{textShadow:"none",background:"#6a51e6"},'code[class*="language-"] ::selection':{textShadow:"none",background:"#6a51e6"},':not(pre) > code[class*="language-"]':{padding:".1em",borderRadius:".3em"},comment:{color:"#6c6783"},prolog:{color:"#6c6783"},doctype:{color:"#6c6783"},cdata:{color:"#6c6783"},punctuation:{color:"#6c6783"},namespace:{Opacity:".7"},tag:{color:"#e09142"},operator:{color:"#e09142"},number:{color:"#e09142"},property:{color:"#9a86fd"},function:{color:"#9a86fd"},"tag-id":{color:"#eeebff"},selector:{color:"#eeebff"},"atrule-id":{color:"#eeebff"},"code.language-javascript":{color:"#c4b9fe"},"attr-name":{color:"#c4b9fe"},"code.language-css":{color:"#ffcc99"},"code.language-scss":{color:"#ffcc99"},boolean:{color:"#ffcc99"},string:{color:"#ffcc99"},entity:{color:"#ffcc99",cursor:"help"},url:{color:"#ffcc99"},".language-css .token.string":{color:"#ffcc99"},".language-scss .token.string":{color:"#ffcc99"},".style .token.string":{color:"#ffcc99"},"attr-value":{color:"#ffcc99"},keyword:{color:"#ffcc99"},control:{color:"#ffcc99"},directive:{color:"#ffcc99"},unit:{color:"#ffcc99"},statement:{color:"#ffcc99"},regex:{color:"#ffcc99"},atrule:{color:"#ffcc99"},placeholder:{color:"#ffcc99"},variable:{color:"#ffcc99"},deleted:{textDecoration:"line-through"},inserted:{borderBottom:"1px dotted #eeebff",textDecoration:"none"},italic:{fontStyle:"italic"},important:{fontWeight:"bold",color:"#c4b9fe"},bold:{fontWeight:"bold"},"pre > code.highlight":{Outline:".4em solid #8a75f5",OutlineOffset:".4em"},".line-numbers .line-numbers-rows":{borderRightColor:"#2c2937"},".line-numbers-rows > span:before":{color:"#3c3949"},".line-highlight":{background:"linear-gradient(to right, rgba(224, 145, 66, 0.2) 70%, rgba(224, 145, 66, 0))"}}},"0RbX":function(e,t,n){"use strict";var o=n("0h9/"),r=n("Yoeg"),i=n("L8sx"),a=n("+Pz5"),s=n("oJEb"),l=n("5pEW"),c=n("pe0m"),u=n("RrMp");e.exports=function(e){var t={defined:[],constructs:s([u].concat(c((e||{}).extensions))),content:n(o),document:n(r),flow:n(i),string:n(a.string),text:n(a.text)};return t;function n(e){return function(n){return l(t,e,n)}}}},"0So9":function(e,t,n){var o=n("hq1P"),r=n("Ny5O"),i=n("9SNS"),a=n("E/Jm"),s=n("BjXi"),l=n("uDje"),c={tokenize:function(e,t,n){return function(t){return e.consume(t),o};function o(t){return 87===t||t-32===87?(e.consume(t),r):n(t)}function r(t){return 87===t||t-32===87?(e.consume(t),i):n(t)}function i(t){return 46===t?(e.consume(t),s):n(t)}function s(e){return null===e||a(e)?n(e):t(e)}},partial:!0},u={tokenize:function(e,t,n){var o,r;return a;function a(t){return 38===t?e.check(f,u,c)(t):46===t||95===t?e.check(p,u,c)(t):i(t)||l(t)||45!==t&&s(t)?u(t):(e.consume(t),a)}function c(t){return 46===t?(r=o,o=void 0,e.consume(t),a):(95===t&&(o=!0),e.consume(t),a)}function u(e){return r||o?n(e):t(e)}},partial:!0},d={tokenize:function(e,t){var n=0;return o;function o(a){return 38===a?e.check(f,t,r)(a):(40===a&&n++,41===a?e.check(p,i,r)(a):A(a)?t(a):b(a)?e.check(p,t,r)(a):(e.consume(a),o))}function r(t){return e.consume(t),o}function i(e){return--n<0?t(e):r(e)}},partial:!0},p={tokenize:function(e,t,n){return function(t){return e.consume(t),o};function o(r){return b(r)?(e.consume(r),o):A(r)?t(r):n(r)}},partial:!0},f={tokenize:function(e,t,n){return function(t){return e.consume(t),r};function r(t){return o(t)?(e.consume(t),r):59===t?(e.consume(t),i):n(t)}function i(e){return A(e)?t(e):n(e)}},partial:!0},h={tokenize:function(e,t,n){var o=this;return function(t){if(87!==t&&t-32!==87||!y(o.previous)||C(o.events))return n(t);return e.enter("literalAutolink"),e.enter("literalAutolinkWww"),e.check(c,e.attempt(u,e.attempt(d,r),n),n)(t)};function r(n){return e.exit("literalAutolinkWww"),e.exit("literalAutolink"),t(n)}},previous:y},m={tokenize:function(e,t,n){var o=this;return function(t){if(72!==t&&t-32!==72||!_(o.previous)||C(o.events))return n(t);return e.enter("literalAutolink"),e.enter("literalAutolinkHttp"),e.consume(t),r};function r(t){return 84===t||t-32===84?(e.consume(t),a):n(t)}function a(t){return 84===t||t-32===84?(e.consume(t),c):n(t)}function c(t){return 80===t||t-32===80?(e.consume(t),p):n(t)}function p(t){return 83===t||t-32===83?(e.consume(t),f):f(t)}function f(t){return 58===t?(e.consume(t),h):n(t)}function h(t){return 47===t?(e.consume(t),m):n(t)}function m(t){return 47===t?(e.consume(t),g):n(t)}function g(t){return i(t)||l(t)||s(t)?n(t):e.attempt(u,e.attempt(d,T),n)(t)}function T(n){return e.exit("literalAutolinkHttp"),e.exit("literalAutolink"),t(n)}},previous:_},g={tokenize:function(e,t,n){var o,i=this;return function(t){if(!k(t)||!S(i.previous)||C(i.events))return n(t);return e.enter("literalAutolink"),e.enter("literalAutolinkEmail"),a(t)};function a(t){return k(t)?(e.consume(t),a):64===t?(e.consume(t),s):n(t)}function s(t){return 46===t?e.check(p,d,l)(t):45===t||95===t?e.check(p,n,c)(t):r(t)?(e.consume(t),s):d(t)}function l(t){return e.consume(t),o=!0,s}function c(t){return e.consume(t),u}function u(t){return 46===t?e.check(p,n,l)(t):s(t)}function d(r){return o?(e.exit("literalAutolinkEmail"),e.exit("literalAutolink"),t(r)):n(r)}},previous:S},T={};t.text=T;for(var E=48;E<123;)T[E]=g,58===++E?E=65:91===E&&(E=97);function b(e){return 33===e||34===e||39===e||41===e||42===e||44===e||46===e||58===e||59===e||60===e||63===e||95===e||126===e}function A(e){return null===e||e<0||32===e||60===e}function k(e){return 43===e||45===e||46===e||95===e||r(e)}function y(e){return null===e||e<0||32===e||40===e||42===e||95===e||126===e}function _(e){return null===e||!o(e)}function S(e){return 47!==e&&_(e)}function C(e){for(var t=e.length;t--;)if(("labelLink"===e[t][1].type||"labelImage"===e[t][1].type)&&!e[t][1]._balanced)return!0}T[43]=g,T[45]=g,T[46]=g,T[95]=g,T[72]=[g,m],T[104]=[g,m],T[87]=[g,h],T[119]=[g,h]},"0aKP":function(e,t,n){"use strict";var o=[].splice;e.exports=o},"0h9/":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n("E/Jm"),r=n("yRGd"),i=function(e){var t,n=e.attempt(this.parser.constructs.contentInitial,(function(t){if(null===t)return void e.consume(t);return e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),r(e,n,"linePrefix")}),(function(t){return e.enter("paragraph"),i(t)}));return n;function i(n){var o=e.enter("chunkText",{contentType:"text",previous:t});return t&&(t.next=o),t=o,a(n)}function a(t){return null===t?(e.exit("chunkText"),e.exit("paragraph"),void e.consume(t)):o(t)?(e.consume(t),e.exit("chunkText"),i):(e.consume(t),a)}};t.tokenize=i},"0mGV":function(e,t,n){"use strict";var o=n("E/Jm"),r=n("2N74"),i=n("yRGd");e.exports=function(e,t){var n;return function a(s){if(o(s))return e.enter("lineEnding"),e.consume(s),e.exit("lineEnding"),n=!0,a;if(r(s))return i(e,a,n?"linePrefix":"lineSuffix")(s);return t(s)}}},"1CLp":function(e,t,n){"use strict";const o=n("UwWT"),r=o.TAG_NAMES,i=o.NAMESPACES;function a(e){switch(e.length){case 1:return e===r.P;case 2:return e===r.RB||e===r.RP||e===r.RT||e===r.DD||e===r.DT||e===r.LI;case 3:return e===r.RTC;case 6:return e===r.OPTION;case 8:return e===r.OPTGROUP}return!1}function s(e){switch(e.length){case 1:return e===r.P;case 2:return e===r.RB||e===r.RP||e===r.RT||e===r.DD||e===r.DT||e===r.LI||e===r.TD||e===r.TH||e===r.TR;case 3:return e===r.RTC;case 5:return e===r.TBODY||e===r.TFOOT||e===r.THEAD;case 6:return e===r.OPTION;case 7:return e===r.CAPTION;case 8:return e===r.OPTGROUP||e===r.COLGROUP}return!1}function l(e,t){switch(e.length){case 2:if(e===r.TD||e===r.TH)return t===i.HTML;if(e===r.MI||e===r.MO||e===r.MN||e===r.MS)return t===i.MATHML;break;case 4:if(e===r.HTML)return t===i.HTML;if(e===r.DESC)return t===i.SVG;break;case 5:if(e===r.TABLE)return t===i.HTML;if(e===r.MTEXT)return t===i.MATHML;if(e===r.TITLE)return t===i.SVG;break;case 6:return(e===r.APPLET||e===r.OBJECT)&&t===i.HTML;case 7:return(e===r.CAPTION||e===r.MARQUEE)&&t===i.HTML;case 8:return e===r.TEMPLATE&&t===i.HTML;case 13:return e===r.FOREIGN_OBJECT&&t===i.SVG;case 14:return e===r.ANNOTATION_XML&&t===i.MATHML}return!1}e.exports=class{constructor(e,t){this.stackTop=-1,this.items=[],this.current=e,this.currentTagName=null,this.currentTmplContent=null,this.tmplCount=0,this.treeAdapter=t}_indexOf(e){let t=-1;for(let n=this.stackTop;n>=0;n--)if(this.items[n]===e){t=n;break}return t}_isInTemplate(){return this.currentTagName===r.TEMPLATE&&this.treeAdapter.getNamespaceURI(this.current)===i.HTML}_updateCurrentElement(){this.current=this.items[this.stackTop],this.currentTagName=this.current&&this.treeAdapter.getTagName(this.current),this.currentTmplContent=this._isInTemplate()?this.treeAdapter.getTemplateContent(this.current):null}push(e){this.items[++this.stackTop]=e,this._updateCurrentElement(),this._isInTemplate()&&this.tmplCount++}pop(){this.stackTop--,this.tmplCount>0&&this._isInTemplate()&&this.tmplCount--,this._updateCurrentElement()}replace(e,t){const n=this._indexOf(e);this.items[n]=t,n===this.stackTop&&this._updateCurrentElement()}insertAfter(e,t){const n=this._indexOf(e)+1;this.items.splice(n,0,t),n===++this.stackTop&&this._updateCurrentElement()}popUntilTagNamePopped(e){for(;this.stackTop>-1;){const t=this.currentTagName,n=this.treeAdapter.getNamespaceURI(this.current);if(this.pop(),t===e&&n===i.HTML)break}}popUntilElementPopped(e){for(;this.stackTop>-1;){const t=this.current;if(this.pop(),t===e)break}}popUntilNumberedHeaderPopped(){for(;this.stackTop>-1;){const e=this.currentTagName,t=this.treeAdapter.getNamespaceURI(this.current);if(this.pop(),e===r.H1||e===r.H2||e===r.H3||e===r.H4||e===r.H5||e===r.H6&&t===i.HTML)break}}popUntilTableCellPopped(){for(;this.stackTop>-1;){const e=this.currentTagName,t=this.treeAdapter.getNamespaceURI(this.current);if(this.pop(),e===r.TD||e===r.TH&&t===i.HTML)break}}popAllUpToHtmlElement(){this.stackTop=0,this._updateCurrentElement()}clearBackToTableContext(){for(;this.currentTagName!==r.TABLE&&this.currentTagName!==r.TEMPLATE&&this.currentTagName!==r.HTML||this.treeAdapter.getNamespaceURI(this.current)!==i.HTML;)this.pop()}clearBackToTableBodyContext(){for(;this.currentTagName!==r.TBODY&&this.currentTagName!==r.TFOOT&&this.currentTagName!==r.THEAD&&this.currentTagName!==r.TEMPLATE&&this.currentTagName!==r.HTML||this.treeAdapter.getNamespaceURI(this.current)!==i.HTML;)this.pop()}clearBackToTableRowContext(){for(;this.currentTagName!==r.TR&&this.currentTagName!==r.TEMPLATE&&this.currentTagName!==r.HTML||this.treeAdapter.getNamespaceURI(this.current)!==i.HTML;)this.pop()}remove(e){for(let t=this.stackTop;t>=0;t--)if(this.items[t]===e){this.items.splice(t,1),this.stackTop--,this._updateCurrentElement();break}}tryPeekProperlyNestedBodyElement(){const e=this.items[1];return e&&this.treeAdapter.getTagName(e)===r.BODY?e:null}contains(e){return this._indexOf(e)>-1}getCommonAncestor(e){let t=this._indexOf(e);return--t>=0?this.items[t]:null}isRootHtmlElementCurrent(){return 0===this.stackTop&&this.currentTagName===r.HTML}hasInScope(e){for(let t=this.stackTop;t>=0;t--){const n=this.treeAdapter.getTagName(this.items[t]),o=this.treeAdapter.getNamespaceURI(this.items[t]);if(n===e&&o===i.HTML)return!0;if(l(n,o))return!1}return!0}hasNumberedHeaderInScope(){for(let e=this.stackTop;e>=0;e--){const t=this.treeAdapter.getTagName(this.items[e]),n=this.treeAdapter.getNamespaceURI(this.items[e]);if((t===r.H1||t===r.H2||t===r.H3||t===r.H4||t===r.H5||t===r.H6)&&n===i.HTML)return!0;if(l(t,n))return!1}return!0}hasInListItemScope(e){for(let t=this.stackTop;t>=0;t--){const n=this.treeAdapter.getTagName(this.items[t]),o=this.treeAdapter.getNamespaceURI(this.items[t]);if(n===e&&o===i.HTML)return!0;if((n===r.UL||n===r.OL)&&o===i.HTML||l(n,o))return!1}return!0}hasInButtonScope(e){for(let t=this.stackTop;t>=0;t--){const n=this.treeAdapter.getTagName(this.items[t]),o=this.treeAdapter.getNamespaceURI(this.items[t]);if(n===e&&o===i.HTML)return!0;if(n===r.BUTTON&&o===i.HTML||l(n,o))return!1}return!0}hasInTableScope(e){for(let t=this.stackTop;t>=0;t--){const n=this.treeAdapter.getTagName(this.items[t]);if(this.treeAdapter.getNamespaceURI(this.items[t])===i.HTML){if(n===e)return!0;if(n===r.TABLE||n===r.TEMPLATE||n===r.HTML)return!1}}return!0}hasTableBodyContextInTableScope(){for(let e=this.stackTop;e>=0;e--){const t=this.treeAdapter.getTagName(this.items[e]);if(this.treeAdapter.getNamespaceURI(this.items[e])===i.HTML){if(t===r.TBODY||t===r.THEAD||t===r.TFOOT)return!0;if(t===r.TABLE||t===r.HTML)return!1}}return!0}hasInSelectScope(e){for(let t=this.stackTop;t>=0;t--){const n=this.treeAdapter.getTagName(this.items[t]);if(this.treeAdapter.getNamespaceURI(this.items[t])===i.HTML){if(n===e)return!0;if(n!==r.OPTION&&n!==r.OPTGROUP)return!1}}return!0}generateImpliedEndTags(){for(;a(this.currentTagName);)this.pop()}generateImpliedEndTagsThoroughly(){for(;s(this.currentTagName);)this.pop()}generateImpliedEndTagsWithExclusion(e){for(;a(this.currentTagName)&&this.currentTagName!==e;)this.pop()}}},"1VtT":function(e,t,n){"use strict";var o=n("Gdbo"),r=n("k1+7"),i=n("6dBs"),a=n("bwJB"),s=n("xkQk"),l=n("Esvb");e.exports=function e(){var t,n=[],r=s(),E={},b=-1;return A.data=function(e,n){if("string"===typeof e)return 2===arguments.length?(m("data",t),E[e]=n,A):u.call(E,e)&&E[e]||null;if(e)return m("data",t),E=e,A;return E},A.freeze=k,A.attachers=n,A.use=function(e){var o;if(m("use",t),null===e||void 0===e);else if("function"===typeof e)u.apply(null,arguments);else{if("object"!==typeof e)throw new Error("Expected usable value, not `"+e+"`");"length"in e?l(e):r(e)}o&&(E.settings=i(E.settings||{},o));return A;function r(e){l(e.plugins),e.settings&&(o=i(o||{},e.settings))}function s(e){if("function"===typeof e)u(e);else{if("object"!==typeof e)throw new Error("Expected usable value, not `"+e+"`");"length"in e?u.apply(null,e):r(e)}}function l(e){var t=-1;if(null===e||void 0===e);else{if("object"!==typeof e||!("length"in e))throw new Error("Expected a list of plugins, not `"+e+"`");for(;++t-1&&(n[0]=n[0].slice(r)),a>0&&n.push(e[i].slice(0,a))),n}},"2N74":function(e,t,n){"use strict";e.exports=function(e){return-2===e||-1===e||32===e}},"2l2D":function(e,t,n){"use strict";e.exports={controlCharacterInInputStream:"control-character-in-input-stream",noncharacterInInputStream:"noncharacter-in-input-stream",surrogateInInputStream:"surrogate-in-input-stream",nonVoidHtmlElementStartTagWithTrailingSolidus:"non-void-html-element-start-tag-with-trailing-solidus",endTagWithAttributes:"end-tag-with-attributes",endTagWithTrailingSolidus:"end-tag-with-trailing-solidus",unexpectedSolidusInTag:"unexpected-solidus-in-tag",unexpectedNullCharacter:"unexpected-null-character",unexpectedQuestionMarkInsteadOfTagName:"unexpected-question-mark-instead-of-tag-name",invalidFirstCharacterOfTagName:"invalid-first-character-of-tag-name",unexpectedEqualsSignBeforeAttributeName:"unexpected-equals-sign-before-attribute-name",missingEndTagName:"missing-end-tag-name",unexpectedCharacterInAttributeName:"unexpected-character-in-attribute-name",unknownNamedCharacterReference:"unknown-named-character-reference",missingSemicolonAfterCharacterReference:"missing-semicolon-after-character-reference",unexpectedCharacterAfterDoctypeSystemIdentifier:"unexpected-character-after-doctype-system-identifier",unexpectedCharacterInUnquotedAttributeValue:"unexpected-character-in-unquoted-attribute-value",eofBeforeTagName:"eof-before-tag-name",eofInTag:"eof-in-tag",missingAttributeValue:"missing-attribute-value",missingWhitespaceBetweenAttributes:"missing-whitespace-between-attributes",missingWhitespaceAfterDoctypePublicKeyword:"missing-whitespace-after-doctype-public-keyword",missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers:"missing-whitespace-between-doctype-public-and-system-identifiers",missingWhitespaceAfterDoctypeSystemKeyword:"missing-whitespace-after-doctype-system-keyword",missingQuoteBeforeDoctypePublicIdentifier:"missing-quote-before-doctype-public-identifier",missingQuoteBeforeDoctypeSystemIdentifier:"missing-quote-before-doctype-system-identifier",missingDoctypePublicIdentifier:"missing-doctype-public-identifier",missingDoctypeSystemIdentifier:"missing-doctype-system-identifier",abruptDoctypePublicIdentifier:"abrupt-doctype-public-identifier",abruptDoctypeSystemIdentifier:"abrupt-doctype-system-identifier",cdataInHtmlContent:"cdata-in-html-content",incorrectlyOpenedComment:"incorrectly-opened-comment",eofInScriptHtmlCommentLikeText:"eof-in-script-html-comment-like-text",eofInDoctype:"eof-in-doctype",nestedComment:"nested-comment",abruptClosingOfEmptyComment:"abrupt-closing-of-empty-comment",eofInComment:"eof-in-comment",incorrectlyClosedComment:"incorrectly-closed-comment",eofInCdata:"eof-in-cdata",absenceOfDigitsInNumericCharacterReference:"absence-of-digits-in-numeric-character-reference",nullCharacterReference:"null-character-reference",surrogateCharacterReference:"surrogate-character-reference",characterReferenceOutsideUnicodeRange:"character-reference-outside-unicode-range",controlCharacterReference:"control-character-reference",noncharacterCharacterReference:"noncharacter-character-reference",missingWhitespaceBeforeDoctypeName:"missing-whitespace-before-doctype-name",missingDoctypeName:"missing-doctype-name",invalidCharacterSequenceAfterDoctypeName:"invalid-character-sequence-after-doctype-name",duplicateAttribute:"duplicate-attribute",nonConformingDoctype:"non-conforming-doctype",missingDoctype:"missing-doctype",misplacedDoctype:"misplaced-doctype",endTagWithoutMatchingOpenElement:"end-tag-without-matching-open-element",closingOfElementWithOpenChildElements:"closing-of-element-with-open-child-elements",disallowedContentInNoscriptInHead:"disallowed-content-in-noscript-in-head",openElementsLeftAfterEof:"open-elements-left-after-eof",abandonedHeadElementChild:"abandoned-head-element-child",misplacedStartTagForHeadElement:"misplaced-start-tag-for-head-element",nestedNoscriptInHead:"nested-noscript-in-head",eofInElementThatCanContainOnlyText:"eof-in-element-that-can-contain-only-text"}},"2uWR":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",color:"#c3cee3",background:"#263238",fontFamily:"Roboto Mono, monospace",fontSize:"1em",lineHeight:"1.5em",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none"},'pre[class*="language-"]':{textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",color:"#c3cee3",background:"#263238",fontFamily:"Roboto Mono, monospace",fontSize:"1em",lineHeight:"1.5em",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",overflow:"auto",position:"relative",margin:"0.5em 0",padding:"1.25em 1em"},'code[class*="language-"]::-moz-selection':{background:"#363636"},'pre[class*="language-"]::-moz-selection':{background:"#363636"},'code[class*="language-"] ::-moz-selection':{background:"#363636"},'pre[class*="language-"] ::-moz-selection':{background:"#363636"},'code[class*="language-"]::selection':{background:"#363636"},'pre[class*="language-"]::selection':{background:"#363636"},'code[class*="language-"] ::selection':{background:"#363636"},'pre[class*="language-"] ::selection':{background:"#363636"},':not(pre) > code[class*="language-"]':{whiteSpace:"normal",borderRadius:"0.2em",padding:"0.1em"},".language-css > code":{color:"#fd9170"},".language-sass > code":{color:"#fd9170"},".language-scss > code":{color:"#fd9170"},'[class*="language-"] .namespace':{Opacity:"0.7"},atrule:{color:"#c792ea"},"attr-name":{color:"#ffcb6b"},"attr-value":{color:"#c3e88d"},attribute:{color:"#c3e88d"},boolean:{color:"#c792ea"},builtin:{color:"#ffcb6b"},cdata:{color:"#80cbc4"},char:{color:"#80cbc4"},class:{color:"#ffcb6b"},"class-name":{color:"#f2ff00"},color:{color:"#f2ff00"},comment:{color:"#546e7a"},constant:{color:"#c792ea"},deleted:{color:"#f07178"},doctype:{color:"#546e7a"},entity:{color:"#f07178"},function:{color:"#c792ea"},hexcode:{color:"#f2ff00"},id:{color:"#c792ea",fontWeight:"bold"},important:{color:"#c792ea",fontWeight:"bold"},inserted:{color:"#80cbc4"},keyword:{color:"#c792ea",fontStyle:"italic"},number:{color:"#fd9170"},operator:{color:"#89ddff"},prolog:{color:"#546e7a"},property:{color:"#80cbc4"},"pseudo-class":{color:"#c3e88d"},"pseudo-element":{color:"#c3e88d"},punctuation:{color:"#89ddff"},regex:{color:"#f2ff00"},selector:{color:"#f07178"},string:{color:"#c3e88d"},symbol:{color:"#c792ea"},tag:{color:"#f07178"},unit:{color:"#f07178"},url:{color:"#fd9170"},variable:{color:"#f07178"}}},"321L":function(e,t,n){e.exports=n("0So9")},"33Zt":function(e,t,n){"use strict";var o=n("E/Jm"),r=n("2N74"),i=n("yRGd"),a={name:"thematicBreak",tokenize:function(e,t,n){var a,s=0;return function(t){return e.enter("thematicBreak"),a=t,l(t)};function l(u){return u===a?(e.enter("thematicBreakSequence"),c(u)):r(u)?i(e,l,"whitespace")(u):s<3||null!==u&&!o(u)?n(u):(e.exit("thematicBreak"),t(u))}function c(t){return t===a?(e.consume(t),s++,c):(e.exit("thematicBreakSequence"),l(t))}}};e.exports=a},"38Ti":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{color:"#fff",textShadow:"0 1px 1px #000",fontFamily:'Menlo, Monaco, "Courier New", monospace',direction:"ltr",textAlign:"left",wordSpacing:"normal",whiteSpace:"pre",wordWrap:"normal",lineHeight:"1.4",background:"none",border:"0",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none"},'pre[class*="language-"]':{color:"#fff",textShadow:"0 1px 1px #000",fontFamily:'Menlo, Monaco, "Courier New", monospace',direction:"ltr",textAlign:"left",wordSpacing:"normal",whiteSpace:"pre",wordWrap:"normal",lineHeight:"1.4",background:"#222",border:"0",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",padding:"15px",margin:"1em 0",overflow:"auto",MozBorderRadius:"8px",WebkitBorderRadius:"8px",borderRadius:"8px"},'pre[class*="language-"] code':{float:"left",padding:"0 15px 0 0"},':not(pre) > code[class*="language-"]':{background:"#222",padding:"5px 10px",lineHeight:"1",MozBorderRadius:"3px",WebkitBorderRadius:"3px",borderRadius:"3px"},comment:{color:"#797979"},prolog:{color:"#797979"},doctype:{color:"#797979"},cdata:{color:"#797979"},selector:{color:"#fff"},operator:{color:"#fff"},punctuation:{color:"#fff"},namespace:{Opacity:".7"},tag:{color:"#ffd893"},boolean:{color:"#ffd893"},atrule:{color:"#B0C975"},"attr-value":{color:"#B0C975"},hex:{color:"#B0C975"},string:{color:"#B0C975"},property:{color:"#c27628"},entity:{color:"#c27628",cursor:"help"},url:{color:"#c27628"},"attr-name":{color:"#c27628"},keyword:{color:"#c27628"},regex:{color:"#9B71C6"},function:{color:"#e5a638"},constant:{color:"#e5a638"},variable:{color:"#fdfba8"},number:{color:"#8799B0"},important:{color:"#E45734"},deliminator:{color:"#E45734"},"pre[data-line]":{position:"relative",padding:"1em 0 1em 3em"},".line-highlight":{position:"absolute",left:"0",right:"0",marginTop:"1em",background:"rgba(255, 255, 255, .2)",pointerEvents:"none",lineHeight:"inherit",whiteSpace:"pre"},".line-highlight:before":{content:"attr(data-start)",position:"absolute",top:".3em",left:".6em",minWidth:"1em",padding:"0 .5em",backgroundColor:"rgba(255, 255, 255, .3)",color:"#fff",font:"bold 65%/1.5 sans-serif",textAlign:"center",MozBorderRadius:"8px",WebkitBorderRadius:"8px",borderRadius:"8px",textShadow:"none"},".line-highlight[data-end]:after":{content:"attr(data-end)",position:"absolute",top:"auto",left:".6em",minWidth:"1em",padding:"0 .5em",backgroundColor:"rgba(255, 255, 255, .3)",color:"#fff",font:"bold 65%/1.5 sans-serif",textAlign:"center",MozBorderRadius:"8px",WebkitBorderRadius:"8px",borderRadius:"8px",textShadow:"none",bottom:".4em"},".line-numbers-rows":{margin:"0"},".line-numbers-rows span":{paddingRight:"10px",borderRight:"3px #d9d336 solid"}}},"3HEo":function(e,t,n){"use strict";var o=n("ZkSf");e.exports=function(e,t){return function(e){return t;function t(t){var n=t&&i(t);return n&&r.call(e,n)?e[n]:null}}(function(e){var t={};if(!e||!e.type)throw new Error("mdast-util-definitions expected node");return o(e,"definition",n),t;function n(e){var n=i(e.identifier);r.call(t,n)||(t[n]=e)}}(e))};var r={}.hasOwnProperty;function i(e){return e.toUpperCase()}},"3iNw":function(e,t,n){"use strict";var o=n("hq1P"),r=n("Ny5O"),i=n("E/Jm"),a=n("Q3zd"),s=n("2N74"),l=n("yRGd"),c={name:"htmlText",tokenize:function(e,t,n){var c,u,d,p,f=this;return function(t){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(t),h};function h(t){return 33===t?(e.consume(t),m):47===t?(e.consume(t),O):63===t?(e.consume(t),x):o(t)?(e.consume(t),w):n(t)}function m(t){return 45===t?(e.consume(t),g):91===t?(e.consume(t),u="CDATA[",d=0,k):o(t)?(e.consume(t),C):n(t)}function g(t){return 45===t?(e.consume(t),T):n(t)}function T(t){return null===t||62===t?n(t):45===t?(e.consume(t),E):b(t)}function E(e){return null===e||62===e?n(e):b(e)}function b(t){return null===t?n(t):45===t?(e.consume(t),A):i(t)?(p=b,B(t)):(e.consume(t),b)}function A(t){return 45===t?(e.consume(t),U):b(t)}function k(t){return t===u.charCodeAt(d++)?(e.consume(t),d===u.length?y:k):n(t)}function y(t){return null===t?n(t):93===t?(e.consume(t),_):i(t)?(p=y,B(t)):(e.consume(t),y)}function _(t){return 93===t?(e.consume(t),S):y(t)}function S(t){return 62===t?U(t):93===t?(e.consume(t),S):y(t)}function C(t){return null===t||62===t?U(t):i(t)?(p=C,B(t)):(e.consume(t),C)}function x(t){return null===t?n(t):63===t?(e.consume(t),v):i(t)?(p=x,B(t)):(e.consume(t),x)}function v(e){return 62===e?U(e):x(e)}function O(t){return o(t)?(e.consume(t),N):n(t)}function N(t){return 45===t||r(t)?(e.consume(t),N):M(t)}function M(t){return i(t)?(p=M,B(t)):s(t)?(e.consume(t),M):U(t)}function w(t){return 45===t||r(t)?(e.consume(t),w):47===t||62===t||a(t)?R(t):n(t)}function R(t){return 47===t?(e.consume(t),U):58===t||95===t||o(t)?(e.consume(t),I):i(t)?(p=R,B(t)):s(t)?(e.consume(t),R):U(t)}function I(t){return 45===t||46===t||58===t||95===t||r(t)?(e.consume(t),I):L(t)}function L(t){return 61===t?(e.consume(t),P):i(t)?(p=L,B(t)):s(t)?(e.consume(t),L):R(t)}function P(t){return null===t||60===t||61===t||62===t||96===t?n(t):34===t||39===t?(e.consume(t),c=t,H):i(t)?(p=P,B(t)):s(t)?(e.consume(t),P):(e.consume(t),c=void 0,F)}function H(t){return t===c?(e.consume(t),D):null===t?n(t):i(t)?(p=H,B(t)):(e.consume(t),H)}function D(e){return 62===e||47===e||a(e)?R(e):n(e)}function F(t){return null===t||34===t||39===t||60===t||61===t||96===t?n(t):62===t||a(t)?R(t):(e.consume(t),F)}function B(t){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),l(e,z,"linePrefix",f.parser.constructs.disable.null.indexOf("codeIndented")>-1?void 0:4)}function z(t){return e.enter("htmlTextData"),p(t)}function U(o){return 62===o?(e.consume(o),e.exit("htmlTextData"),e.exit("htmlText"),t):n(o)}}};e.exports=c},"4+h/":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{fontFamily:'Consolas, Menlo, Monaco, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace',fontSize:"14px",lineHeight:"1.375",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",background:"#faf8f5",color:"#728fcb"},'pre[class*="language-"]':{fontFamily:'Consolas, Menlo, Monaco, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace',fontSize:"14px",lineHeight:"1.375",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",background:"#faf8f5",color:"#728fcb",padding:"1em",margin:".5em 0",overflow:"auto"},'pre > code[class*="language-"]':{fontSize:"1em"},'pre[class*="language-"]::-moz-selection':{textShadow:"none",background:"#faf8f5"},'pre[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#faf8f5"},'code[class*="language-"]::-moz-selection':{textShadow:"none",background:"#faf8f5"},'code[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#faf8f5"},'pre[class*="language-"]::selection':{textShadow:"none",background:"#faf8f5"},'pre[class*="language-"] ::selection':{textShadow:"none",background:"#faf8f5"},'code[class*="language-"]::selection':{textShadow:"none",background:"#faf8f5"},'code[class*="language-"] ::selection':{textShadow:"none",background:"#faf8f5"},':not(pre) > code[class*="language-"]':{padding:".1em",borderRadius:".3em"},comment:{color:"#b6ad9a"},prolog:{color:"#b6ad9a"},doctype:{color:"#b6ad9a"},cdata:{color:"#b6ad9a"},punctuation:{color:"#b6ad9a"},namespace:{Opacity:".7"},tag:{color:"#063289"},operator:{color:"#063289"},number:{color:"#063289"},property:{color:"#b29762"},function:{color:"#b29762"},"tag-id":{color:"#2d2006"},selector:{color:"#2d2006"},"atrule-id":{color:"#2d2006"},"code.language-javascript":{color:"#896724"},"attr-name":{color:"#896724"},"code.language-css":{color:"#728fcb"},"code.language-scss":{color:"#728fcb"},boolean:{color:"#728fcb"},string:{color:"#728fcb"},entity:{color:"#728fcb",cursor:"help"},url:{color:"#728fcb"},".language-css .token.string":{color:"#728fcb"},".language-scss .token.string":{color:"#728fcb"},".style .token.string":{color:"#728fcb"},"attr-value":{color:"#728fcb"},keyword:{color:"#728fcb"},control:{color:"#728fcb"},directive:{color:"#728fcb"},unit:{color:"#728fcb"},statement:{color:"#728fcb"},regex:{color:"#728fcb"},atrule:{color:"#728fcb"},placeholder:{color:"#93abdc"},variable:{color:"#93abdc"},deleted:{textDecoration:"line-through"},inserted:{borderBottom:"1px dotted #2d2006",textDecoration:"none"},italic:{fontStyle:"italic"},important:{fontWeight:"bold",color:"#896724"},bold:{fontWeight:"bold"},"pre > code.highlight":{Outline:".4em solid #896724",OutlineOffset:".4em"},".line-numbers .line-numbers-rows":{borderRightColor:"#ece8de"},".line-numbers-rows > span:before":{color:"#cdc4b1"},".line-highlight":{background:"linear-gradient(to right, rgba(45, 32, 6, 0.2) 70%, rgba(45, 32, 6, 0))"}}},"42yH":function(e,t,n){"use strict";var o=n("WtKE"),r=n("Ny5O"),i=n("ljYj"),a=n("QB/b");function s(e){return e&&"object"===typeof e&&"default"in e?e:{default:e}}var l=s(o),c={name:"characterReference",tokenize:function(e,t,n){var o,s,c=this,u=0;return function(t){return e.enter("characterReference"),e.enter("characterReferenceMarker"),e.consume(t),e.exit("characterReferenceMarker"),d};function d(t){return 35===t?(e.enter("characterReferenceMarkerNumeric"),e.consume(t),e.exit("characterReferenceMarkerNumeric"),p):(e.enter("characterReferenceValue"),o=31,s=r,f(t))}function p(t){return 88===t||120===t?(e.enter("characterReferenceMarkerHexadecimal"),e.consume(t),e.exit("characterReferenceMarkerHexadecimal"),e.enter("characterReferenceValue"),o=6,s=a,f):(e.enter("characterReferenceValue"),o=7,s=i,f(t))}function f(i){var a;return 59===i&&u?(a=e.exit("characterReferenceValue"),s!==r||l.default(c.sliceSerialize(a))?(e.enter("characterReferenceMarker"),e.consume(i),e.exit("characterReferenceMarker"),e.exit("characterReference"),t):n(i)):s(i)&&u++P&&(P=d);++up)&&(L[u]=f)),R.push(h);M[O]=R,w[O]=I}var H;if(u=-1,d=P,"object"===typeof S&&"length"in S)for(;++uL[u]&&(L[u]=f),I[u]=f),R[u]=h;M.splice(1,0,R),w.splice(1,0,I),O=-1,N=M.length,m=[];for(;++O=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var a=n("q1tI"),s=n.n(a),l=n("6x+I"),c=n.n(l),u=n("jaOS"),d=n("o0o1"),p=n.n(d),f=n("yXPU"),h=n.n(f),m=n("pVnL"),g=n.n(m),T=n("lwsE"),E=n.n(T),b=n("W8MJ"),A=n.n(b),k=n("a1gu"),y=n.n(k),_=n("Nsbk"),S=n.n(_),C=n("7W2i"),x=n.n(C),v=n("lSNA"),O=n.n(v),N=n("QILm"),M=n.n(N),w=n("MVZn"),R=n.n(w);function I(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0;return e.reduce((function(e,t){return R()({},e,n[t])}),t)}function L(e){return e.join(" ")}function P(e){var t=e.node,n=e.stylesheet,o=e.style,r=void 0===o?{}:o,i=e.useInlineStyles,a=e.key,l=t.properties,c=t.type,u=t.tagName,d=t.value;if("text"===c)return d;if(u){var p=function(e,t){var n=0;return function(o){return n+=1,o.map((function(o,r){return P({node:o,stylesheet:e,useInlineStyles:t,key:"code-segment-".concat(n,"-").concat(r)})}))}}(n,i),f=i&&l.className&&l.className.filter((function(e){return!n[e]})),h=f&&f.length?f:void 0,m=i?R()({},l,{className:h&&L(h)},{style:I(l.className,Object.assign({},l.style,r),n)}):R()({},l,{className:L(l.className)}),T=p(t.children);return s.a.createElement(u,g()({key:a},m),T)}}var H=/\n/g;function D(e){var t=e.codeString,n=e.codeStyle,o=e.containerStyle,r=void 0===o?{float:"left",paddingRight:"10px"}:o,i=e.numberStyle,a=void 0===i?{}:i,l=e.startingLineNumber;return s.a.createElement("code",{style:Object.assign({},n,r)},function(e){var t=e.lines,n=e.startingLineNumber,o=e.style;return t.map((function(e,t){var r=t+n;return s.a.createElement("span",{key:"line-".concat(t),className:"react-syntax-highlighter-line-number",style:"function"===typeof o?o(r):o},"".concat(r,"\n"))}))}({lines:t.replace(/\n$/,"").split("\n"),style:a,startingLineNumber:l}))}function F(e){var t=e.toString().length;return"".concat(t,"em")}function B(e,t){return{type:"element",tagName:"span",properties:{key:"line-number--".concat(e),className:["comment","linenumber","react-syntax-highlighter-line-number"],style:t},children:[{type:"text",value:e}]}}function z(e,t,n){var o={display:"inline-block",minWidth:F(n),paddingRight:"1em",textAlign:"right",userSelect:"none"},r="function"===typeof e?e(t):e;return R()({},o,r)}function U(e){var t=e.children,n=e.lineNumber,o=e.lineNumberStyle,r=e.largestLineNumber,i=e.showInlineLineNumbers,a=e.lineProps,s=void 0===a?{}:a,l=e.className,c=void 0===l?[]:l,u="function"===typeof s?s(n):s;if(u.className=c,n&&i){var d=z(o,n,r);t.unshift(B(n,d))}return{type:"element",tagName:"span",properties:u,children:t}}function G(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],o=0;o2&&void 0!==arguments[2]?arguments[2]:[];return U({children:e,lineNumber:t,lineNumberStyle:s,largestLineNumber:a,showInlineLineNumbers:r,lineProps:n,className:o})}function h(e,t){if(t&&r){var n=z(s,t,a);e.unshift(B(t,n))}return e}function m(e,n){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];return t||o.length>0?f(e,n,o):h(e,n)}for(var g=function(){var e=c[p],t=e.children[0].value;if(t.match(H)){var n=t.split("\n");n.forEach((function(t,r){var a=o&&u.length+i,s={type:"text",value:"".concat(t,"\n")};if(0===r){var l=m(c.slice(d+1,p).concat(U({children:[s],className:e.properties.className})),a);u.push(l)}else if(r===n.length-1){if(c[p+1]&&c[p+1].children&&c[p+1].children[0]){var f=U({children:[{type:"text",value:"".concat(t)}],className:e.properties.className});c.splice(p+1,0,f)}else{var h=m([s],a,e.properties.className);u.push(h)}}else{var g=m([s],a,e.properties.className);u.push(g)}})),d=p}p++};p-1?void 0:4)(r)}}},exit:function(e){e.exit(this.containerState.type)}},d={tokenize:function(e,t,n){var o=this;return s(e,(function(e){return r(e)||!i(o.events,"listItemPrefixWhitespace")?n(e):t(e)}),"listItemPrefixWhitespace",o.parser.constructs.disable.null.indexOf("codeIndented")>-1?void 0:5)},partial:!0},p={tokenize:function(e,t,n){var o=this;return s(e,(function(e){return i(o.events,"listItemIndent")===o.containerState.size?t(e):n(e)}),"listItemIndent",o.containerState.size+1)},partial:!0};e.exports=u},"5fIB":function(e,t,n){var o=n("7eYB");e.exports=function(e){if(Array.isArray(e))return o(e)}},"5pEW":function(e,t,n){"use strict";var o=n("NOby"),r=n("E/Jm"),i=n("HtLg"),a=n("Vx/6"),s=n("pe0m"),l=n("Ig3s"),c=n("FE4A"),u=n("T0BQ"),d=n("20u5");e.exports=function(e,t,n){var p=n?u(n):{line:1,column:1,offset:0},f={},h=[],m=[],g=[],T={consume:function(e){r(e)?(p.line++,p.column=1,p.offset+=-3===e?2:1,v()):-1!==e&&(p.column++,p.offset++);p._bufferIndex<0?p._index++:(p._bufferIndex++,p._bufferIndex===m[p._index].length&&(p._bufferIndex=-1,p._index++));E.previous=e},enter:function(e,t){var n=t||{};return n.type=e,n.start=k(),E.events.push(["enter",n,E]),g.push(n),n},exit:function(e){var t=g.pop();return t.end=k(),E.events.push(["exit",t,E]),t},attempt:C((function(e,t){x(e,t.from)})),check:C(S),interrupt:C(S,{interrupt:!0}),lazy:C(S,{lazy:!0})},E={previous:null,events:[],parser:e,sliceStream:A,sliceSerialize:function(e){return c(A(e))},now:k,defineSkip:function(e){f[e.line]=e.column,v()},write:function(e){if(m=i(m,e),y(),null!==m[m.length-1])return[];return x(t,0),E.events=l(h,E.events,E),E.events}},b=t.tokenize.call(E,T);return t.resolveAll&&h.push(t),p._index=0,p._bufferIndex=-1,E;function A(e){return d(m,e)}function k(){return u(p)}function y(){for(var e,t;p._index-1)return m();return e.tokenize.call(t?o({},E,t):E,T,h,m)(n)}}function h(t){return e(c,u),r}function m(e){return u.restore(),++lcode':{position:"relative",borderLeft:"10px solid #358ccb",boxShadow:"-1px 0px 0px 0px #358ccb, 0px 0px 0px 1px #dfdfdf",backgroundColor:"#fdfdfd",backgroundImage:"linear-gradient(transparent 50%, rgba(69, 142, 209, 0.04) 50%)",backgroundSize:"3em 3em",backgroundOrigin:"content-box",backgroundAttachment:"local"},':not(pre) > code[class*="language-"]':{backgroundColor:"#fdfdfd",WebkitBoxSizing:"border-box",MozBoxSizing:"border-box",boxSizing:"border-box",marginBottom:"1em",position:"relative",padding:".2em",borderRadius:"0.3em",color:"#c92c2c",border:"1px solid rgba(0, 0, 0, 0.1)",display:"inline",whiteSpace:"normal"},'pre[class*="language-"]:before':{content:"''",zIndex:"-2",display:"block",position:"absolute",bottom:"0.75em",left:"0.18em",width:"40%",height:"20%",maxHeight:"13em",boxShadow:"0px 13px 8px #979797",WebkitTransform:"rotate(-2deg)",MozTransform:"rotate(-2deg)",msTransform:"rotate(-2deg)",OTransform:"rotate(-2deg)",transform:"rotate(-2deg)"},'pre[class*="language-"]:after':{content:"''",zIndex:"-2",display:"block",position:"absolute",bottom:"0.75em",left:"auto",width:"40%",height:"20%",maxHeight:"13em",boxShadow:"0px 13px 8px #979797",WebkitTransform:"rotate(2deg)",MozTransform:"rotate(2deg)",msTransform:"rotate(2deg)",OTransform:"rotate(2deg)",transform:"rotate(2deg)",right:"0.75em"},comment:{color:"#7D8B99"},"block-comment":{color:"#7D8B99"},prolog:{color:"#7D8B99"},doctype:{color:"#7D8B99"},cdata:{color:"#7D8B99"},punctuation:{color:"#5F6364"},property:{color:"#c92c2c"},tag:{color:"#c92c2c"},boolean:{color:"#c92c2c"},number:{color:"#c92c2c"},"function-name":{color:"#c92c2c"},constant:{color:"#c92c2c"},symbol:{color:"#c92c2c"},deleted:{color:"#c92c2c"},selector:{color:"#2f9c0a"},"attr-name":{color:"#2f9c0a"},string:{color:"#2f9c0a"},char:{color:"#2f9c0a"},function:{color:"#2f9c0a"},builtin:{color:"#2f9c0a"},inserted:{color:"#2f9c0a"},operator:{color:"#a67f59",background:"rgba(255, 255, 255, 0.5)"},entity:{color:"#a67f59",background:"rgba(255, 255, 255, 0.5)",cursor:"help"},url:{color:"#a67f59",background:"rgba(255, 255, 255, 0.5)"},variable:{color:"#a67f59",background:"rgba(255, 255, 255, 0.5)"},atrule:{color:"#1990b8"},"attr-value":{color:"#1990b8"},keyword:{color:"#1990b8"},"class-name":{color:"#1990b8"},regex:{color:"#e90"},important:{color:"#e90",fontWeight:"normal"},".language-css .token.string":{color:"#a67f59",background:"rgba(255, 255, 255, 0.5)"},".style .token.string":{color:"#a67f59",background:"rgba(255, 255, 255, 0.5)"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},namespace:{Opacity:".7"},'pre[class*="language-"].line-numbers.line-numbers':{paddingLeft:"0"},'pre[class*="language-"].line-numbers.line-numbers code':{paddingLeft:"3.8em"},'pre[class*="language-"].line-numbers.line-numbers .line-numbers-rows':{left:"0"},'pre[class*="language-"][data-line]':{paddingTop:"0",paddingBottom:"0",paddingLeft:"0"},"pre[data-line] code":{position:"relative",paddingLeft:"4em"},"pre .line-highlight":{marginTop:"0"}}},"6MAg":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{color:"black",background:"none",textShadow:"0 1px white",fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",fontSize:"1em",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none"},'pre[class*="language-"]':{color:"black",background:"#f5f2f0",textShadow:"0 1px white",fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",fontSize:"1em",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",padding:"1em",margin:".5em 0",overflow:"auto"},'pre[class*="language-"]::-moz-selection':{textShadow:"none",background:"#b3d4fc"},'pre[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#b3d4fc"},'code[class*="language-"]::-moz-selection':{textShadow:"none",background:"#b3d4fc"},'code[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#b3d4fc"},'pre[class*="language-"]::selection':{textShadow:"none",background:"#b3d4fc"},'pre[class*="language-"] ::selection':{textShadow:"none",background:"#b3d4fc"},'code[class*="language-"]::selection':{textShadow:"none",background:"#b3d4fc"},'code[class*="language-"] ::selection':{textShadow:"none",background:"#b3d4fc"},':not(pre) > code[class*="language-"]':{background:"#f5f2f0",padding:".1em",borderRadius:".3em",whiteSpace:"normal"},comment:{color:"slategray"},prolog:{color:"slategray"},doctype:{color:"slategray"},cdata:{color:"slategray"},punctuation:{color:"#999"},namespace:{Opacity:".7"},property:{color:"#905"},tag:{color:"#905"},boolean:{color:"#905"},number:{color:"#905"},constant:{color:"#905"},symbol:{color:"#905"},deleted:{color:"#905"},selector:{color:"#690"},"attr-name":{color:"#690"},string:{color:"#690"},char:{color:"#690"},builtin:{color:"#690"},inserted:{color:"#690"},operator:{color:"#9a6e3a",background:"hsla(0, 0%, 100%, .5)"},entity:{color:"#9a6e3a",background:"hsla(0, 0%, 100%, .5)",cursor:"help"},url:{color:"#9a6e3a",background:"hsla(0, 0%, 100%, .5)"},".language-css .token.string":{color:"#9a6e3a",background:"hsla(0, 0%, 100%, .5)"},".style .token.string":{color:"#9a6e3a",background:"hsla(0, 0%, 100%, .5)"},atrule:{color:"#07a"},"attr-value":{color:"#07a"},keyword:{color:"#07a"},function:{color:"#DD4A68"},"class-name":{color:"#DD4A68"},regex:{color:"#e90"},important:{color:"#e90",fontWeight:"bold"},variable:{color:"#e90"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"}}},"6dBs":function(e,t,n){"use strict";var o=Object.prototype.hasOwnProperty,r=Object.prototype.toString,i=Object.defineProperty,a=Object.getOwnPropertyDescriptor,s=function(e){return"function"===typeof Array.isArray?Array.isArray(e):"[object Array]"===r.call(e)},l=function(e){if(!e||"[object Object]"!==r.call(e))return!1;var t,n=o.call(e,"constructor"),i=e.constructor&&e.constructor.prototype&&o.call(e.constructor.prototype,"isPrototypeOf");if(e.constructor&&!n&&!i)return!1;for(t in e);return"undefined"===typeof t||o.call(e,t)},c=function(e,t){i&&"__proto__"===t.name?i(e,t.name,{enumerable:!0,configurable:!0,value:t.newValue,writable:!0}):e[t.name]=t.newValue},u=function(e,t){if("__proto__"===t){if(!o.call(e,t))return;if(a)return a(e,t).value}return e[t]};e.exports=function e(){var t,n,o,r,i,a,d=arguments[0],p=1,f=arguments.length,h=!1;for("boolean"===typeof d&&(h=d,d=arguments[1]||{},p=2),(null==d||"object"!==typeof d&&"function"!==typeof d)&&(d={});p for more info)`),delete h[o]}const t=i().use(a).use(e.remarkPlugins||e.plugins||[]).use(s,{allowDangerousHtml:!0}).use(e.rehypePlugins||[]).use(u,e);let n;"string"===typeof e.children?n=r(e.children):(void 0!==e.children&&null!==e.children&&console.warn(`[react-markdown] Warning: please pass a string as \`children\` (not: \`${e.children}\`)`),n=r());const l=t.runSync(t.parse(n),n);if("root"!==l.type)throw new TypeError("Expected a `root` node");let d=o.createElement(o.Fragment,{},p({options:e,schema:c,listDepth:0},l));return e.className&&(d=o.createElement("div",{className:e.className},d)),d}m.defaultProps={transformLinkUri:d},m.propTypes={children:l.string,className:l.string,allowElement:l.func,allowedElements:l.arrayOf(l.string),disallowedElements:l.arrayOf(l.string),unwrapDisallowed:l.bool,remarkPlugins:l.arrayOf(l.oneOfType([l.object,l.func,l.arrayOf(l.oneOfType([l.object,l.func]))])),rehypePlugins:l.arrayOf(l.oneOfType([l.object,l.func,l.arrayOf(l.oneOfType([l.object,l.func]))])),sourcePos:l.bool,rawSourcePos:l.bool,skipHtml:l.bool,includeElementIndex:l.bool,transformLinkUri:l.oneOfType([l.func,l.bool]),linkTarget:l.oneOfType([l.func,l.string]),transformImageUri:l.func,components:l.object},m.uriTransformer=d},"7+hk":function(e,t,n){"use strict";var o=n("z2ZG"),r=n("du5t"),i=n("eAD1"),a=n("dXJL"),s=n("bHgY"),l=n("RXC2");e.exports=o([i,r,a,s,l])},"7J+x":function(e,t){e.exports=function(e){var t,n;e._compiled||(t=e.before?"(?:"+e.before+")":"",n=e.after?"(?:"+e.after+")":"",e.atBreak&&(t="[\\r\\n][\\t ]*"+t),e._compiled=new RegExp((t?"("+t+")":"")+(/[|\\{}()[\]^$+*?.-]/.test(e.character)?"\\":"")+e.character+(n||""),"g"));return e._compiled}},"7W2i":function(e,t,n){var o=n("SksO");e.exports=function(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&o(e,t)},e.exports.__esModule=!0,e.exports.default=e.exports},"7enW":function(e,t,n){"use strict";var o={name:"labelStartImage",tokenize:function(e,t,n){var o=this;return function(t){return e.enter("labelImage"),e.enter("labelImageMarker"),e.consume(t),e.exit("labelImageMarker"),r};function r(t){return 91===t?(e.enter("labelMarker"),e.consume(t),e.exit("labelMarker"),e.exit("labelImage"),i):n(t)}function i(e){return 94===e&&"_hiddenFootnoteSupport"in o.parser.constructs?n(e):t(e)}},resolveAll:n("OaLn").resolveAll};e.exports=o},"7nPM":function(e,t,n){"use strict";e.exports=function(e){var t=String(e),n=[],o=/\r?\n|\r/g;for(;o.exec(t);)n.push(o.lastIndex);return n.push(t.length+1),{toPoint:r,toPosition:r,toOffset:function(e){var t,o=e&&e.line,r=e&&e.column;isNaN(o)||isNaN(r)||!(o-1 in n)||(t=(n[o-2]||0)+r-1||0);return t>-1&&t-1&&ee)return{line:t+1,column:e-(n[t-1]||0)+1,offset:e};return{}}}},"8Kt/":function(e,t,n){"use strict";var o=n("oI91");function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}t.__esModule=!0,t.defaultHead=p,t.default=void 0;var i,a=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==typeof e&&"function"!==typeof e)return{default:e};var t=d();if(t&&t.has(e))return t.get(e);var n={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){var i=o?Object.getOwnPropertyDescriptor(e,r):null;i&&(i.get||i.set)?Object.defineProperty(n,r,i):n[r]=e[r]}n.default=e,t&&t.set(e,n);return n}(n("q1tI")),s=(i=n("Xuae"))&&i.__esModule?i:{default:i},l=n("lwAK"),c=n("FYa8"),u=n("/0+H");function d(){if("function"!==typeof WeakMap)return null;var e=new WeakMap;return d=function(){return e},e}function p(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=[a.default.createElement("meta",{charSet:"utf-8"})];return e||t.push(a.default.createElement("meta",{name:"viewport",content:"width=device-width"})),t}function f(e,t){return"string"===typeof t||"number"===typeof t?e:t.type===a.default.Fragment?e.concat(a.default.Children.toArray(t.props.children).reduce((function(e,t){return"string"===typeof t||"number"===typeof t?e:e.concat(t)}),[])):e.concat(t)}var h=["name","httpEquiv","charSet","itemProp"];function m(e,t){return e.reduce((function(e,t){var n=a.default.Children.toArray(t.props.children);return e.concat(n)}),[]).reduce(f,[]).reverse().concat(p(t.inAmpMode)).filter(function(){var e=new Set,t=new Set,n=new Set,o={};return function(r){var i=!0,a=!1;if(r.key&&"number"!==typeof r.key&&r.key.indexOf("$")>0){a=!0;var s=r.key.slice(r.key.indexOf("$")+1);e.has(s)?i=!1:e.add(s)}switch(r.type){case"title":case"base":t.has(r.type)?i=!1:t.add(r.type);break;case"meta":for(var l=0,c=h.length;l code[class*="language-"]':{fontSize:"1em"},'pre[class*="language-"]::-moz-selection':{textShadow:"none",background:"#435643"},'pre[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#435643"},'code[class*="language-"]::-moz-selection':{textShadow:"none",background:"#435643"},'code[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#435643"},'pre[class*="language-"]::selection':{textShadow:"none",background:"#435643"},'pre[class*="language-"] ::selection':{textShadow:"none",background:"#435643"},'code[class*="language-"]::selection':{textShadow:"none",background:"#435643"},'code[class*="language-"] ::selection':{textShadow:"none",background:"#435643"},':not(pre) > code[class*="language-"]':{padding:".1em",borderRadius:".3em"},comment:{color:"#535f53"},prolog:{color:"#535f53"},doctype:{color:"#535f53"},cdata:{color:"#535f53"},punctuation:{color:"#535f53"},namespace:{Opacity:".7"},tag:{color:"#a2b34d"},operator:{color:"#a2b34d"},number:{color:"#a2b34d"},property:{color:"#687d68"},function:{color:"#687d68"},"tag-id":{color:"#f0fff0"},selector:{color:"#f0fff0"},"atrule-id":{color:"#f0fff0"},"code.language-javascript":{color:"#b3d6b3"},"attr-name":{color:"#b3d6b3"},"code.language-css":{color:"#e5fb79"},"code.language-scss":{color:"#e5fb79"},boolean:{color:"#e5fb79"},string:{color:"#e5fb79"},entity:{color:"#e5fb79",cursor:"help"},url:{color:"#e5fb79"},".language-css .token.string":{color:"#e5fb79"},".language-scss .token.string":{color:"#e5fb79"},".style .token.string":{color:"#e5fb79"},"attr-value":{color:"#e5fb79"},keyword:{color:"#e5fb79"},control:{color:"#e5fb79"},directive:{color:"#e5fb79"},unit:{color:"#e5fb79"},statement:{color:"#e5fb79"},regex:{color:"#e5fb79"},atrule:{color:"#e5fb79"},placeholder:{color:"#e5fb79"},variable:{color:"#e5fb79"},deleted:{textDecoration:"line-through"},inserted:{borderBottom:"1px dotted #f0fff0",textDecoration:"none"},italic:{fontStyle:"italic"},important:{fontWeight:"bold",color:"#b3d6b3"},bold:{fontWeight:"bold"},"pre > code.highlight":{Outline:".4em solid #5c705c",OutlineOffset:".4em"},".line-numbers .line-numbers-rows":{borderRightColor:"#2c302c"},".line-numbers-rows > span:before":{color:"#3b423b"},".line-highlight":{background:"linear-gradient(to right, rgba(162, 179, 77, 0.2) 70%, rgba(162, 179, 77, 0))"}}},"9SNS":function(e,t,n){"use strict";e.exports=function(e){return e<32||127===e}},"9kwo":function(e,t,n){"use strict";const o=n("HwUZ");e.exports=class extends o{constructor(e,t){super(e),this.posTracker=null,this.onParseError=t.onParseError}_setErrorLocation(e){e.startLine=e.endLine=this.posTracker.line,e.startCol=e.endCol=this.posTracker.col,e.startOffset=e.endOffset=this.posTracker.offset}_reportError(e){const t={code:e,startLine:-1,startCol:-1,startOffset:-1,endLine:-1,endCol:-1,endOffset:-1};this._setErrorLocation(t),this.onParseError(t)}_getOverriddenMethods(e){return{_err(t){e._reportError(t)}}}}},"9ppO":function(e,t,n){"use strict";var o=n("E/Jm"),r=n("yRGd");e.exports=function(e,t,n,i,a,s){var l;return function(t){return e.enter(i),e.enter(a),e.consume(t),e.exit(a),l=40===t?41:t,c};function c(n){return n===l?(e.enter(a),e.consume(n),e.exit(a),e.exit(i),t):(e.enter(s),u(n))}function u(t){return t===l?(e.exit(s),c(l)):null===t?n(t):o(t)?(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),r(e,u,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),d(t))}function d(t){return t===l||null===t||o(t)?(e.exit("chunkString"),u(t)):(e.consume(t),92===t?p:d)}function p(t){return t===l||92===t?(e.consume(t),d):d(t)}}},A0ZL:function(e,t,n){"use strict";class o{constructor(e){this.length=0,this.entries=[],this.treeAdapter=e,this.bookmark=null}_getNoahArkConditionCandidates(e){const t=[];if(this.length>=3){const n=this.treeAdapter.getAttrList(e).length,r=this.treeAdapter.getTagName(e),i=this.treeAdapter.getNamespaceURI(e);for(let e=this.length-1;e>=0;e--){const a=this.entries[e];if(a.type===o.MARKER_ENTRY)break;const s=a.element,l=this.treeAdapter.getAttrList(s);this.treeAdapter.getTagName(s)===r&&this.treeAdapter.getNamespaceURI(s)===i&&l.length===n&&t.push({idx:e,attrs:l})}}return t.length<3?[]:t}_ensureNoahArkCondition(e){const t=this._getNoahArkConditionCandidates(e);let n=t.length;if(n){const o=this.treeAdapter.getAttrList(e),r=o.length,i=Object.create(null);for(let e=0;e=2;e--)this.entries.splice(t[e].idx,1),this.length--}}insertMarker(){this.entries.push({type:o.MARKER_ENTRY}),this.length++}pushElement(e,t){this._ensureNoahArkCondition(e),this.entries.push({type:o.ELEMENT_ENTRY,element:e,token:t}),this.length++}insertElementAfterBookmark(e,t){let n=this.length-1;for(;n>=0&&this.entries[n]!==this.bookmark;n--);this.entries.splice(n+1,0,{type:o.ELEMENT_ENTRY,element:e,token:t}),this.length++}removeEntry(e){for(let t=this.length-1;t>=0;t--)if(this.entries[t]===e){this.entries.splice(t,1),this.length--;break}}clearToLastMarker(){for(;this.length;){const e=this.entries.pop();if(this.length--,e.type===o.MARKER_ENTRY)break}}getElementEntryInScopeWithTagName(e){for(let t=this.length-1;t>=0;t--){const n=this.entries[t];if(n.type===o.MARKER_ENTRY)return null;if(this.treeAdapter.getTagName(n.element)===e)return n}return null}getElementEntry(e){for(let t=this.length-1;t>=0;t--){const n=this.entries[t];if(n.type===o.ELEMENT_ENTRY&&n.element===e)return n}return null}}o.MARKER_ENTRY="MARKER_ENTRY",o.ELEMENT_ENTRY="ELEMENT_ENTRY",e.exports=o},ADT3:function(e,t,n){"use strict";e.exports=function(e,t,n,o){var r,i;"string"===typeof t||t&&"function"===typeof t.exec?i=[[t,n]]:(i=t,o=n);return s(e,r=o||{},function e(t){var n=t[0];return o;function o(o,i){var l,c,u,d,p=n[0],f=n[1],h=[],m=0,g=i.children.indexOf(o);for(p.lastIndex=0,c=p.exec(o.value);c&&(l=c.index,!1!==(d=f.apply(null,[].concat(c,{index:c.index,input:c.input})))&&(m!==l&&h.push({type:"text",value:o.value.slice(m,l)}),"string"===typeof d&&d.length>0&&(d={type:"text",value:d}),d&&(h=[].concat(h,d)),m=l+c[0].length),p.global);)c=p.exec(o.value);if(void 0===l?(h=[o],g--):(m1)for(u=e(t.slice(1)),l=-1;++lString(e))).join("")),!A&&s.rawSourcePos&&(u.sourcePosition=t.position),!A&&s.includeElementIndex&&(u.index=m(a,t),u.siblingCount=m(a)),A||(u.node=t),T.length>0?o.createElement(b,u,T):o.createElement(b,u)}function m(e,t){let n=-1,o=0;for(;++n(Object.keys(t).forEach((n=>{e[n]=t[n]})),e)),Object.create(null))}},B5Lt:function(e,t,n){e.exports=function(e,t){var n,r=e.children||[],i=[],a=-1;for(;++a code[class*="language-"]':{backgroundColor:"transparent !important",backgroundImage:"linear-gradient(to bottom, #2a2139 75%, #34294f)",padding:".1em",borderRadius:".3em",whiteSpace:"normal"},comment:{color:"#8e8e8e"},"block-comment":{color:"#8e8e8e"},prolog:{color:"#8e8e8e"},doctype:{color:"#8e8e8e"},cdata:{color:"#8e8e8e"},punctuation:{color:"#ccc"},tag:{color:"#e2777a"},"attr-name":{color:"#e2777a"},namespace:{color:"#e2777a"},number:{color:"#e2777a"},unit:{color:"#e2777a"},hexcode:{color:"#e2777a"},deleted:{color:"#e2777a"},property:{color:"#72f1b8",textShadow:"0 0 2px #100c0f, 0 0 10px #257c5575, 0 0 35px #21272475"},selector:{color:"#72f1b8",textShadow:"0 0 2px #100c0f, 0 0 10px #257c5575, 0 0 35px #21272475"},"function-name":{color:"#6196cc"},boolean:{color:"#fdfdfd",textShadow:"0 0 2px #001716, 0 0 3px #03edf975, 0 0 5px #03edf975, 0 0 8px #03edf975"},"selector .token.id":{color:"#fdfdfd",textShadow:"0 0 2px #001716, 0 0 3px #03edf975, 0 0 5px #03edf975, 0 0 8px #03edf975"},function:{color:"#fdfdfd",textShadow:"0 0 2px #001716, 0 0 3px #03edf975, 0 0 5px #03edf975, 0 0 8px #03edf975"},"class-name":{color:"#fff5f6",textShadow:"0 0 2px #000, 0 0 10px #fc1f2c75, 0 0 5px #fc1f2c75, 0 0 25px #fc1f2c75"},constant:{color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"},symbol:{color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"},important:{color:"#f4eee4",textShadow:"0 0 2px #393a33, 0 0 8px #f39f0575, 0 0 2px #f39f0575",fontWeight:"bold"},atrule:{color:"#f4eee4",textShadow:"0 0 2px #393a33, 0 0 8px #f39f0575, 0 0 2px #f39f0575"},keyword:{color:"#f4eee4",textShadow:"0 0 2px #393a33, 0 0 8px #f39f0575, 0 0 2px #f39f0575"},"selector .token.class":{color:"#f4eee4",textShadow:"0 0 2px #393a33, 0 0 8px #f39f0575, 0 0 2px #f39f0575"},builtin:{color:"#f4eee4",textShadow:"0 0 2px #393a33, 0 0 8px #f39f0575, 0 0 2px #f39f0575"},string:{color:"#f87c32"},char:{color:"#f87c32"},"attr-value":{color:"#f87c32"},regex:{color:"#f87c32"},variable:{color:"#f87c32"},operator:{color:"#67cdcc"},entity:{color:"#67cdcc",cursor:"help"},url:{color:"#67cdcc"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},inserted:{color:"green"}}},BfbN:function(e,t,n){"use strict";var o=a("start"),r=a("end");function i(e){return{start:o(e),end:r(e)}}function a(e){return t.displayName=e,t;function t(t){var n=t&&t.position&&t.position[e]||{};return{line:n.line||null,column:n.column||null,offset:isNaN(n.offset)?null:n.offset}}}e.exports=i,i.start=o,i.end=r},Bh6z:function(e,t,n){"use strict";e.exports=function(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}},BjXi:function(e,t,n){"use strict";var o=n("M8+4"),r=n("rm/B")(o);e.exports=r},C7Ve:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{color:"#393A34",fontFamily:'"Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace',direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",fontSize:".9em",lineHeight:"1.2em",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none"},'pre[class*="language-"]':{color:"#393A34",fontFamily:'"Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace',direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",fontSize:".9em",lineHeight:"1.2em",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",padding:"1em",margin:".5em 0",overflow:"auto",border:"1px solid #dddddd",backgroundColor:"white"},'pre > code[class*="language-"]':{fontSize:"1em"},'pre[class*="language-"]::-moz-selection':{background:"#C1DEF1"},'pre[class*="language-"] ::-moz-selection':{background:"#C1DEF1"},'code[class*="language-"]::-moz-selection':{background:"#C1DEF1"},'code[class*="language-"] ::-moz-selection':{background:"#C1DEF1"},'pre[class*="language-"]::selection':{background:"#C1DEF1"},'pre[class*="language-"] ::selection':{background:"#C1DEF1"},'code[class*="language-"]::selection':{background:"#C1DEF1"},'code[class*="language-"] ::selection':{background:"#C1DEF1"},':not(pre) > code[class*="language-"]':{padding:".2em",paddingTop:"1px",paddingBottom:"1px",background:"#f8f8f8",border:"1px solid #dddddd"},comment:{color:"#008000",fontStyle:"italic"},prolog:{color:"#008000",fontStyle:"italic"},doctype:{color:"#008000",fontStyle:"italic"},cdata:{color:"#008000",fontStyle:"italic"},namespace:{Opacity:".7"},string:{color:"#A31515"},punctuation:{color:"#393A34"},operator:{color:"#393A34"},url:{color:"#36acaa"},symbol:{color:"#36acaa"},number:{color:"#36acaa"},boolean:{color:"#36acaa"},variable:{color:"#36acaa"},constant:{color:"#36acaa"},inserted:{color:"#36acaa"},atrule:{color:"#0000ff"},keyword:{color:"#0000ff"},"attr-value":{color:"#0000ff"},".language-autohotkey .token.selector":{color:"#0000ff"},".language-json .token.boolean":{color:"#0000ff"},".language-json .token.number":{color:"#0000ff"},'code[class*="language-css"]':{color:"#0000ff"},function:{color:"#393A34"},deleted:{color:"#9a050f"},".language-autohotkey .token.tag":{color:"#9a050f"},selector:{color:"#800000"},".language-autohotkey .token.keyword":{color:"#00009f"},important:{fontWeight:"bold"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},"class-name":{color:"#2B91AF"},".language-json .token.property":{color:"#2B91AF"},tag:{color:"#800000"},"attr-name":{color:"#ff0000"},property:{color:"#ff0000"},regex:{color:"#ff0000"},entity:{color:"#ff0000"},"directive.tag .tag":{background:"#ffff00",color:"#393A34"},".line-numbers .line-numbers-rows":{borderRightColor:"#a5a5a5"},".line-numbers-rows > span:before":{color:"#2B91AF"},".line-highlight":{background:"linear-gradient(to right, rgba(193, 222, 241, 0.2) 70%, rgba(221, 222, 241, 0))"}}},CC3I:function(e,t,n){var o=n("Lc7W");e.exports=function(e,t){var n,r=null;if(!e||"string"!==typeof e)return r;for(var i,a,s=o(e),l="function"===typeof t,c=0,u=s.length;ci&&"whitespace"===e[r][1].type&&(r-=2);"atxHeadingSequence"===e[r][1].type&&(i===r-1||r-4>i&&"whitespace"===e[r-2][1].type)&&(r-=i+1===r?2:4);r>i&&(n={type:"atxHeadingText",start:e[i][1].start,end:e[r][1].end},o={type:"chunkText",start:e[i][1].start,end:e[r][1].end,contentType:"text"},a(e,i,r-i+1,[["enter",n,t],["enter",o,t],["exit",o,t],["exit",n,t]]));return e}};e.exports=l},Cjod:function(e,t,n){"use strict";var o=n("7+hk"),r=n("IEZ+"),i=n("F6fn"),a=n("Ho5A"),s=n("TTG4"),l=n("vfP8"),c=n("CC3I"),u=n("qrWY"),d=n("Zasy"),p=d("root"),f=d("element"),h=d("text");function m(e,t,n){var o,i,a=n.schema,s=a,l=t.tagName,c={},d=[],p=-1;for(o in"html"===a.space&&"svg"===l.toLowerCase()&&(s=r,n.schema=s),t.properties)g(c,o,t.properties[o],n,l);if(n.vdom&&("html"===s.space?l=l.toUpperCase():c.namespace=u[s.space]),n.prefix&&(n.key++,c.key=n.prefix+n.key),t.children)for(;++p0&&n.push(o("text","\n"));return n};var o=n("vUGn")},"E/Jm":function(e,t,n){"use strict";e.exports=function(e){return e<-2}},EBzq:function(e,t,n){"use strict";var o=[].slice;e.exports=function(e,t){var n;return function(){var t,a=o.call(arguments,0),s=e.length>a.length;s&&a.push(r);try{t=e.apply(null,a)}catch(l){if(s&&n)throw l;return r(l)}s||(t&&"function"===typeof t.then?t.then(i,r):t instanceof Error?r(t):i(t))};function r(){n||(n=!0,t.apply(null,arguments))}function i(e){r(null,e)}}},EIjK:function(e,t,n){"use strict";var o=String.fromCharCode;e.exports=o},"EfL/":function(e,t,n){const o=n("ZkSf");e.exports=function(e){if(e.allowedElements&&e.disallowedElements)throw new TypeError("Only one of `allowedElements` and `disallowedElements` should be defined");if(e.allowedElements||e.disallowedElements||e.allowElement)return e=>{o(e,"element",t)};function t(t,n,o){const r=t,i=o;let a;if(e.allowedElements?a=!e.allowedElements.includes(r.tagName):e.disallowedElements&&(a=e.disallowedElements.includes(r.tagName)),!a&&e.allowElement&&"number"===typeof n&&(a=!e.allowElement(r,n,i)),a&&"number"===typeof n)return e.unwrapDisallowed&&r.children?i.children.splice(n,1,...r.children):i.children.splice(n,1),n}}},Esvb:function(e,t,n){"use strict";e.exports=n("PPHF")},F2il:function(e,t,n){"use strict";e.exports=function(e,t){var n,o=String(e),r=0;if("string"!==typeof t)throw new Error("Expected character");n=o.indexOf(t);for(;-1!==n;)r++,n=o.indexOf(t,n+t.length);return r}},F6fn:function(e,t,n){"use strict";var o=n("bAF5"),r=n("qTn3"),i=n("Ut8p"),a="data";e.exports=function(e,t){var n=o(t),p=t,f=i;if(n in e.normal)return e.property[e.normal[n]];n.length>4&&n.slice(0,4)===a&&s.test(t)&&("-"===t.charAt(4)?p=function(e){var t=e.slice(5).replace(l,d);return a+t.charAt(0).toUpperCase()+t.slice(1)}(t):t=function(e){var t=e.slice(4);if(l.test(t))return e;"-"!==(t=t.replace(c,u)).charAt(0)&&(t="-"+t);return a+t}(t),f=r);return new f(p,t)};var s=/^data[-\w.:]+$/i,l=/-[a-z]/g,c=/[A-Z]/g;function u(e){return"-"+e.toLowerCase()}function d(e){return e.charAt(1).toUpperCase()}},FE4A:function(e,t,n){"use strict";var o=n("EIjK");e.exports=function(e){for(var t,n,r,i=-1,a=[];++i code[class*="language-"]':{fontSize:"1em"},'pre[class*="language-"]::-moz-selection':{background:"#b3d4fc"},'pre[class*="language-"] ::-moz-selection':{background:"#b3d4fc"},'code[class*="language-"]::-moz-selection':{background:"#b3d4fc"},'code[class*="language-"] ::-moz-selection':{background:"#b3d4fc"},'pre[class*="language-"]::selection':{background:"#b3d4fc"},'pre[class*="language-"] ::selection':{background:"#b3d4fc"},'code[class*="language-"]::selection':{background:"#b3d4fc"},'code[class*="language-"] ::selection':{background:"#b3d4fc"},':not(pre) > code[class*="language-"]':{padding:".2em",paddingTop:"1px",paddingBottom:"1px",background:"#f8f8f8",border:"1px solid #dddddd"},comment:{color:"#999988",fontStyle:"italic"},prolog:{color:"#999988",fontStyle:"italic"},doctype:{color:"#999988",fontStyle:"italic"},cdata:{color:"#999988",fontStyle:"italic"},namespace:{Opacity:".7"},string:{color:"#e3116c"},"attr-value":{color:"#e3116c"},punctuation:{color:"#393A34"},operator:{color:"#393A34"},entity:{color:"#36acaa"},url:{color:"#36acaa"},symbol:{color:"#36acaa"},number:{color:"#36acaa"},boolean:{color:"#36acaa"},variable:{color:"#36acaa"},constant:{color:"#36acaa"},property:{color:"#36acaa"},regex:{color:"#36acaa"},inserted:{color:"#36acaa"},atrule:{color:"#00a4db"},keyword:{color:"#00a4db"},"attr-name":{color:"#00a4db"},".language-autohotkey .token.selector":{color:"#00a4db"},function:{color:"#9a050f",fontWeight:"bold"},deleted:{color:"#9a050f"},".language-autohotkey .token.tag":{color:"#9a050f"},tag:{color:"#00009f"},selector:{color:"#00009f"},".language-autohotkey .token.keyword":{color:"#00009f"},important:{fontWeight:"bold"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"}}},Gdbo:function(e,t,n){"use strict";e.exports=function(e){if(e)throw e}},GjEx:function(e,t,n){"use strict";e.exports=function(e,t){var n,r=t.value?t.value+"\n":"",i=t.lang&&t.lang.match(/^[^ \t]+(?=[ \t]|$)/),a={};i&&(a.className=["language-"+i]);n=e(t,"code",a,[o("text",r)]),t.meta&&(n.data={meta:t.meta});return e(t.position,"pre",[n])};var o=n("vUGn")},H0fq:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",fontSize:"1em",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",background:"black",color:"white",boxShadow:"-.3em 0 0 .3em black, .3em 0 0 .3em black"},'pre[class*="language-"]':{fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",fontSize:"1em",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",padding:".4em .8em",margin:".5em 0",overflow:"auto",background:'url(\'data:image/svg+xml;charset=utf-8,%0D%0A%0D%0A%0D%0A<%2Fsvg>\')',backgroundSize:"1em 1em"},':not(pre) > code[class*="language-"]':{padding:".2em",borderRadius:".3em",boxShadow:"none",whiteSpace:"normal"},comment:{color:"#aaa"},prolog:{color:"#aaa"},doctype:{color:"#aaa"},cdata:{color:"#aaa"},punctuation:{color:"#999"},namespace:{Opacity:".7"},property:{color:"#0cf"},tag:{color:"#0cf"},boolean:{color:"#0cf"},number:{color:"#0cf"},constant:{color:"#0cf"},symbol:{color:"#0cf"},selector:{color:"yellow"},"attr-name":{color:"yellow"},string:{color:"yellow"},char:{color:"yellow"},builtin:{color:"yellow"},operator:{color:"yellowgreen"},entity:{color:"yellowgreen",cursor:"help"},url:{color:"yellowgreen"},".language-css .token.string":{color:"yellowgreen"},variable:{color:"yellowgreen"},inserted:{color:"yellowgreen"},atrule:{color:"deeppink"},"attr-value":{color:"deeppink"},keyword:{color:"deeppink"},regex:{color:"orange"},important:{color:"orange",fontWeight:"bold"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},deleted:{color:"red"},"pre.diff-highlight.diff-highlight > code .token.deleted:not(.prefix)":{backgroundColor:"rgba(255, 0, 0, .3)",display:"inline"},"pre > code.diff-highlight.diff-highlight .token.deleted:not(.prefix)":{backgroundColor:"rgba(255, 0, 0, .3)",display:"inline"},"pre.diff-highlight.diff-highlight > code .token.inserted:not(.prefix)":{backgroundColor:"rgba(0, 255, 128, .3)",display:"inline"},"pre > code.diff-highlight.diff-highlight .token.inserted:not(.prefix)":{backgroundColor:"rgba(0, 255, 128, .3)",display:"inline"}}},HALo:function(e,t,n){"use strict";function o(){return(o=Object.assign||function(e){for(var t=1;t code[class*="language-"]':{fontSize:"1em"},':not(pre) > code[class*="language-"]':{padding:".1em",borderRadius:".3em"},comment:{color:"#797379"},prolog:{color:"#797379"},doctype:{color:"#797379"},cdata:{color:"#797379"},punctuation:{color:"#b9b5b8"},".namespace":{Opacity:".7"},null:{color:"#fd8b19"},operator:{color:"#fd8b19"},boolean:{color:"#fd8b19"},number:{color:"#fd8b19"},property:{color:"#fdcc59"},tag:{color:"#1290bf"},string:{color:"#149b93"},selector:{color:"#c85e7c"},"attr-name":{color:"#fd8b19"},entity:{color:"#149b93",cursor:"help"},url:{color:"#149b93"},".language-css .token.string":{color:"#149b93"},".style .token.string":{color:"#149b93"},"attr-value":{color:"#8fc13e"},keyword:{color:"#8fc13e"},control:{color:"#8fc13e"},directive:{color:"#8fc13e"},unit:{color:"#8fc13e"},statement:{color:"#149b93"},regex:{color:"#149b93"},atrule:{color:"#149b93"},placeholder:{color:"#1290bf"},variable:{color:"#1290bf"},important:{color:"#dd464c",fontWeight:"bold"},"pre > code.highlight":{Outline:".4em solid red",OutlineOffset:".4em"}}},Ho5A:function(e){e.exports=JSON.parse('{"classId":"classID","dataType":"datatype","itemId":"itemID","strokeDashArray":"strokeDasharray","strokeDashOffset":"strokeDashoffset","strokeLineCap":"strokeLinecap","strokeLineJoin":"strokeLinejoin","strokeMiterLimit":"strokeMiterlimit","typeOf":"typeof","xLinkActuate":"xlinkActuate","xLinkArcRole":"xlinkArcrole","xLinkHref":"xlinkHref","xLinkRole":"xlinkRole","xLinkShow":"xlinkShow","xLinkTitle":"xlinkTitle","xLinkType":"xlinkType","xmlnsXLink":"xmlnsXlink"}')},HtLg:function(e,t,n){"use strict";var o=n("Vx/6");e.exports=function(e,t){return e.length?(o(e,e.length,0,t),e):t}},HwUZ:function(e,t,n){"use strict";class o{constructor(e){const t={},n=this._getOverriddenMethods(this,t);for(const o of Object.keys(n))"function"===typeof n[o]&&(t[o]=e[o],e[o]=n[o])}_getOverriddenMethods(){throw new Error("Not implemented")}}o.install=function(e,t,n){e.__mixins||(e.__mixins=[]);for(let r=0;r-1?(d=1,T.interrupt?t(o):P(o)):c.indexOf(h.toLowerCase())>-1?(d=6,47===o?(e.consume(o),S):T.interrupt?t(o):P(o)):(d=7,T.interrupt?n(o):p?x(o):C(o)):45===o||r(o)?(e.consume(o),h+=l(o),_):n(o)}function S(o){return 62===o?(e.consume(o),T.interrupt?t:P):n(o)}function C(t){return s(t)?(e.consume(t),C):I(t)}function x(t){return 47===t?(e.consume(t),I):58===t||95===t||o(t)?(e.consume(t),v):s(t)?(e.consume(t),x):I(t)}function v(t){return 45===t||46===t||58===t||95===t||r(t)?(e.consume(t),v):O(t)}function O(t){return 61===t?(e.consume(t),N):s(t)?(e.consume(t),O):x(t)}function N(t){return null===t||60===t||61===t||62===t||96===t?n(t):34===t||39===t?(e.consume(t),g=t,M):s(t)?(e.consume(t),N):(g=void 0,w(t))}function M(t){return t===g?(e.consume(t),R):null===t||i(t)?n(t):(e.consume(t),M)}function w(t){return null===t||34===t||39===t||60===t||61===t||62===t||96===t||a(t)?O(t):(e.consume(t),w)}function R(e){return 47===e||62===e||s(e)?x(e):n(e)}function I(t){return 62===t?(e.consume(t),L):n(t)}function L(t){return s(t)?(e.consume(t),L):null===t||i(t)?P(t):n(t)}function P(t){return 45===t&&2===d?(e.consume(t),F):60===t&&1===d?(e.consume(t),B):62===t&&4===d?(e.consume(t),W):63===t&&3===d?(e.consume(t),G):93===t&&5===d?(e.consume(t),U):!i(t)||6!==d&&7!==d?null===t||i(t)?H(t):(e.consume(t),P):e.check(f,W,H)(t)}function H(t){return e.exit("htmlFlowData"),D(t)}function D(t){return null===t?K(t):i(t)?(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),D):(e.enter("htmlFlowData"),P(t))}function F(t){return 45===t?(e.consume(t),G):P(t)}function B(t){return 47===t?(e.consume(t),h="",z):P(t)}function z(t){return 62===t&&u.indexOf(h.toLowerCase())>-1?(e.consume(t),W):o(t)&&h.length<8?(e.consume(t),h+=l(t),z):P(t)}function U(t){return 93===t?(e.consume(t),G):P(t)}function G(t){return 62===t?(e.consume(t),W):P(t)}function W(t){return null===t||i(t)?(e.exit("htmlFlowData"),K(t)):(e.consume(t),W)}function K(n){return e.exit("htmlFlow"),t(n)}},resolveTo:function(e){var t=e.length;for(;t--&&("enter"!==e[t][0]||"htmlFlow"!==e[t][1].type););t>1&&"linePrefix"===e[t-2][1].type&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2));return e},concrete:!0},f={tokenize:function(e,t,n){return function(o){return e.exit("htmlFlowData"),e.enter("lineEndingBlank"),e.consume(o),e.exit("lineEndingBlank"),e.attempt(d,t,n)}},partial:!0};e.exports=p},L8sx:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n("rCOv"),r=n("yRGd"),i=n("VLot"),a=function(e){var t=this,n=e.attempt(i,(function(o){if(null===o)return void e.consume(o);return e.enter("lineEndingBlank"),e.consume(o),e.exit("lineEndingBlank"),t.currentConstruct=void 0,n}),e.attempt(this.parser.constructs.flowInitial,a,r(e,e.attempt(this.parser.constructs.flow,a,e.attempt(o,a)),"linePrefix")));return n;function a(o){if(null!==o)return e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),t.currentConstruct=void 0,n;e.consume(o)}};t.tokenize=a},LLHA:function(e,t,n){"use strict";e.exports=n("wJMj")},Lc7W:function(e,t){var n=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,o=/\n/g,r=/^\s*/,i=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,a=/^:\s*/,s=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,l=/^[;\s]*/,c=/^\s+|\s+$/g,u="";function d(e){return e?e.replace(c,u):u}e.exports=function(e,t){if("string"!==typeof e)throw new TypeError("First argument must be a string");if(!e)return[];t=t||{};var c=1,p=1;function f(e){var t=e.match(o);t&&(c+=t.length);var n=e.lastIndexOf("\n");p=~n?e.length-n:p+e.length}function h(){var e={line:c,column:p};return function(t){return t.position=new m(e),b(),t}}function m(e){this.start=e,this.end={line:c,column:p},this.source=t.source}m.prototype.content=e;var g=[];function T(n){var o=new Error(t.source+":"+c+":"+p+": "+n);if(o.reason=n,o.filename=t.source,o.line=c,o.column=p,o.source=e,!t.silent)throw o;g.push(o)}function E(t){var n=t.exec(e);if(n){var o=n[0];return f(o),e=e.slice(o.length),n}}function b(){E(r)}function A(e){var t;for(e=e||[];t=k();)!1!==t&&e.push(t);return e}function k(){var t=h();if("/"==e.charAt(0)&&"*"==e.charAt(1)){for(var n=2;u!=e.charAt(n)&&("*"!=e.charAt(n)||"/"!=e.charAt(n+1));)++n;if(n+=2,u===e.charAt(n-1))return T("End of comment missing");var o=e.slice(2,n-2);return p+=2,f(o),e=e.slice(n),p+=2,t({type:"comment",comment:o})}}function y(){var e=h(),t=E(i);if(t){if(k(),!E(a))return T("property missing ':'");var o=E(s),r=e({type:"declaration",property:d(t[0].replace(n,u)),value:o?d(o[0].replace(n,u)):u});return E(l),r}}return b(),function(){var e,t=[];for(A(t);e=y();)!1!==e&&(t.push(e),A(t));return t}()}},"M3+Y":function(e,t,n){"use strict";e.exports=function(e,t){var n=t.value.replace(/\r?\n|\r/g," ");return e(t,"code",[o("text",n)])};var o=n("vUGn")},"M8+4":function(e,t,n){"use strict";e.exports=/[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/},MVZn:function(e,t,n){var o=n("lSNA");e.exports=function(e){for(var t=1;t code[class*="language-"]':{background:"#1d1f21",padding:".1em",borderRadius:".3em"},comment:{color:"#7C7C7C"},prolog:{color:"#7C7C7C"},doctype:{color:"#7C7C7C"},cdata:{color:"#7C7C7C"},punctuation:{color:"#c5c8c6"},".namespace":{Opacity:".7"},property:{color:"#96CBFE"},keyword:{color:"#96CBFE"},tag:{color:"#96CBFE"},"class-name":{color:"#FFFFB6",textDecoration:"underline"},boolean:{color:"#99CC99"},constant:{color:"#99CC99"},symbol:{color:"#f92672"},deleted:{color:"#f92672"},number:{color:"#FF73FD"},selector:{color:"#A8FF60"},"attr-name":{color:"#A8FF60"},string:{color:"#A8FF60"},char:{color:"#A8FF60"},builtin:{color:"#A8FF60"},inserted:{color:"#A8FF60"},variable:{color:"#C6C5FE"},operator:{color:"#EDEDED"},entity:{color:"#FFFFB6",cursor:"help"},url:{color:"#96CBFE"},".language-css .token.string":{color:"#87C38A"},".style .token.string":{color:"#87C38A"},atrule:{color:"#F9EE98"},"attr-value":{color:"#F9EE98"},function:{color:"#DAD085"},regex:{color:"#E9C062"},important:{color:"#fd971f",fontWeight:"bold"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"}}},NNOl:function(e,t,n){"use strict";var o=n("E/Jm"),r=n("Vx/6"),i=n("O+c1"),a=n("yRGd"),s={name:"codeIndented",tokenize:function(e,t,n){return e.attempt(l,r,n);function r(n){return null===n?t(n):o(n)?e.attempt(l,r,t)(n):(e.enter("codeFlowValue"),i(n))}function i(t){return null===t||o(t)?(e.exit("codeFlowValue"),r(t)):(e.consume(t),i)}},resolve:function(e,t){var n={type:"codeIndented",start:e[0][1].start,end:e[e.length-1][1].end};return r(e,0,0,[["enter",n,t]]),r(e,e.length,0,[["exit",n,t]]),e}},l={tokenize:function(e,t,n){var r=this;return a(e,(function s(l){if(o(l))return e.enter("lineEnding"),e.consume(l),e.exit("lineEnding"),a(e,s,"linePrefix",5);return i(r.events,"linePrefix")<4?n(l):t(l)}),"linePrefix",5)},partial:!0};e.exports=s},NOby:function(e,t,n){"use strict";var o=Object.assign;e.exports=o},Ne21:function(e,t,n){"use strict";const o=n("9kwo"),r=n("srZV"),i=n("HwUZ");e.exports=class extends o{constructor(e,t){super(e,t);const n=i.install(e.preprocessor,r,t);this.posTracker=n.posTracker}}},NfWH:function(e,t){e.exports=function(e){var t=e.options.listItemIndent||"tab";if(1===t||"1"===t)return"one";if("tab"!==t&&"one"!==t&&"mixed"!==t)throw new Error("Cannot serialize items with `"+t+"` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`");return t}},Nsbk:function(e,t){function n(t){return e.exports=n=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},e.exports.__esModule=!0,e.exports.default=e.exports,n(t)}e.exports=n,e.exports.__esModule=!0,e.exports.default=e.exports},Ny5O:function(e,t,n){"use strict";var o=n("rm/B")(/[\dA-Za-z]/);e.exports=o},"O+c1":function(e,t,n){"use strict";var o=n("jeK3");e.exports=function(e,t){var n=e[e.length-1];return n&&n[1].type===t?o(n[2].sliceStream(n[1])):0}},OaLn:function(e,t,n){"use strict";var o=n("Q3zd"),r=n("HtLg"),i=n("Vx/6"),a=n("Bh6z"),s=n("Ig3s"),l=n("T0BQ"),c=n("haLp"),u=n("kViG"),d=n("9ppO"),p=n("0mGV"),f={name:"labelEnd",tokenize:function(e,t,n){var o,r,i=this,s=i.events.length;for(;s--;)if(("labelImage"===i.events[s][1].type||"labelLink"===i.events[s][1].type)&&!i.events[s][1]._balanced){o=i.events[s][1];break}return function(t){if(!o)return n(t);return o._inactive?c(t):(r=i.parser.defined.indexOf(a(i.sliceSerialize({start:o.end,end:i.now()})))>-1,e.enter("labelEnd"),e.enter("labelMarker"),e.consume(t),e.exit("labelMarker"),e.exit("labelEnd"),l)};function l(n){return 40===n?e.attempt(h,t,r?t:c)(n):91===n?e.attempt(m,t,r?e.attempt(g,t,c):c)(n):r?t(n):c(n)}function c(e){return o._balanced=!0,n(e)}},resolveTo:function(e,t){var n,o,a,c,u,d,p,f=e.length,h=0;for(;f--;)if(c=e[f][1],u){if("link"===c.type||"labelLink"===c.type&&c._inactive)break;"enter"===e[f][0]&&"labelLink"===c.type&&(c._inactive=!0)}else if(d){if("enter"===e[f][0]&&("labelImage"===c.type||"labelLink"===c.type)&&!c._balanced&&(u=f,"labelLink"!==c.type)){h=2;break}}else"labelEnd"===c.type&&(d=f);return n={type:"labelLink"===e[u][1].type?"link":"image",start:l(e[u][1].start),end:l(e[e.length-1][1].end)},o={type:"label",start:l(e[u][1].start),end:l(e[d][1].end)},a={type:"labelText",start:l(e[u+h+2][1].end),end:l(e[d-2][1].start)},p=r(p=[["enter",n,t],["enter",o,t]],e.slice(u+1,u+h+3)),p=r(p,[["enter",a,t]]),p=r(p,s(t.parser.constructs.insideSpan.null,e.slice(u+h+4,d-3),t)),p=r(p,[["exit",a,t],e[d-2],e[d-1],["exit",o,t]]),p=r(p,e.slice(d+1)),p=r(p,[["exit",n,t]]),i(e,u,e.length,p),e},resolveAll:function(e){var t,n=-1;for(;++n code[class*="language-"]':{background:"hsl(30, 20%, 25%)",padding:".15em .2em .05em",borderRadius:".3em",border:".13em solid hsl(30, 20%, 40%)",boxShadow:"1px 1px .3em -.1em black inset",whiteSpace:"normal"},comment:{color:"hsl(30, 20%, 50%)"},prolog:{color:"hsl(30, 20%, 50%)"},doctype:{color:"hsl(30, 20%, 50%)"},cdata:{color:"hsl(30, 20%, 50%)"},punctuation:{Opacity:".7"},namespace:{Opacity:".7"},property:{color:"hsl(350, 40%, 70%)"},tag:{color:"hsl(350, 40%, 70%)"},boolean:{color:"hsl(350, 40%, 70%)"},number:{color:"hsl(350, 40%, 70%)"},constant:{color:"hsl(350, 40%, 70%)"},symbol:{color:"hsl(350, 40%, 70%)"},selector:{color:"hsl(75, 70%, 60%)"},"attr-name":{color:"hsl(75, 70%, 60%)"},string:{color:"hsl(75, 70%, 60%)"},char:{color:"hsl(75, 70%, 60%)"},builtin:{color:"hsl(75, 70%, 60%)"},inserted:{color:"hsl(75, 70%, 60%)"},operator:{color:"hsl(40, 90%, 60%)"},entity:{color:"hsl(40, 90%, 60%)",cursor:"help"},url:{color:"hsl(40, 90%, 60%)"},".language-css .token.string":{color:"hsl(40, 90%, 60%)"},".style .token.string":{color:"hsl(40, 90%, 60%)"},variable:{color:"hsl(40, 90%, 60%)"},atrule:{color:"hsl(350, 40%, 70%)"},"attr-value":{color:"hsl(350, 40%, 70%)"},keyword:{color:"hsl(350, 40%, 70%)"},regex:{color:"#e90"},important:{color:"#e90",fontWeight:"bold"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},deleted:{color:"red"}}},PGbq:function(e){e.exports=JSON.parse('["area","base","basefont","bgsound","br","col","command","embed","frame","hr","image","img","input","isindex","keygen","link","menuitem","meta","nextid","param","source","track","wbr"]')},PPHF:function(e,t,n){"use strict";var o=n("aCXt"),r=n("tgGP");e.exports=r,r.prototype.message=function(e,t,n){var r=new o(e,t,n);this.path&&(r.name=this.path+":"+r.name,r.file=this.path);return r.fatal=!1,this.messages.push(r),r},r.prototype.info=function(){var e=this.message.apply(this,arguments);return e.fatal=null,e},r.prototype.fail=function(){var e=this.message.apply(this,arguments);throw e.fatal=!0,e}},PSll:function(e,t,n){"use strict";var o=n("E/Jm"),r=n("Q3zd"),i=n("O+c1"),a=n("yRGd"),s={name:"codeFenced",tokenize:function(e,t,n){var s,l=this,c={tokenize:function(e,t,n){var r=0;return a(e,i,"linePrefix",this.parser.constructs.disable.null.indexOf("codeIndented")>-1?void 0:4);function i(t){return e.enter("codeFencedFence"),e.enter("codeFencedFenceSequence"),l(t)}function l(t){return t===s?(e.consume(t),r++,l):r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i},e.exports.__esModule=!0,e.exports.default=e.exports},R5yl:function(e,t,n){"use strict";e.exports=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","section","source","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"]},REpm:function(e,t){const n=["http","https","mailto","tel"];e.exports=function(e){const t=(e||"").trim(),o=t.charAt(0);if("#"===o||"/"===o)return t;const r=t.indexOf(":");if(-1===r)return t;let i=-1;for(;++ii)return t;if(i=t.indexOf("#"),-1!==i&&r>i)return t;return"javascript:void(0)"}},RXC2:function(e,t,n){"use strict";var o=n("FWC9"),r=n("DUvi"),i=n("y3WP"),a=o.boolean,s=o.overloadedBoolean,l=o.booleanish,c=o.number,u=o.spaceSeparated,d=o.commaSeparated;e.exports=r({space:"html",attributes:{acceptcharset:"accept-charset",classname:"class",htmlfor:"for",httpequiv:"http-equiv"},transform:i,mustUseProperty:["checked","multiple","muted","selected"],properties:{abbr:null,accept:d,acceptCharset:u,accessKey:u,action:null,allow:null,allowFullScreen:a,allowPaymentRequest:a,allowUserMedia:a,alt:null,as:null,async:a,autoCapitalize:null,autoComplete:u,autoFocus:a,autoPlay:a,capture:a,charSet:null,checked:a,cite:null,className:u,cols:c,colSpan:null,content:null,contentEditable:l,controls:a,controlsList:u,coords:c|d,crossOrigin:null,data:null,dateTime:null,decoding:null,default:a,defer:a,dir:null,dirName:null,disabled:a,download:s,draggable:l,encType:null,enterKeyHint:null,form:null,formAction:null,formEncType:null,formMethod:null,formNoValidate:a,formTarget:null,headers:u,height:c,hidden:a,high:c,href:null,hrefLang:null,htmlFor:u,httpEquiv:u,id:null,imageSizes:null,imageSrcSet:d,inputMode:null,integrity:null,is:null,isMap:a,itemId:null,itemProp:u,itemRef:u,itemScope:a,itemType:u,kind:null,label:null,lang:null,language:null,list:null,loading:null,loop:a,low:c,manifest:null,max:null,maxLength:c,media:null,method:null,min:null,minLength:c,multiple:a,muted:a,name:null,nonce:null,noModule:a,noValidate:a,onAbort:null,onAfterPrint:null,onAuxClick:null,onBeforePrint:null,onBeforeUnload:null,onBlur:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onContextMenu:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnded:null,onError:null,onFocus:null,onFormData:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLanguageChange:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadEnd:null,onLoadStart:null,onMessage:null,onMessageError:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRejectionHandled:null,onReset:null,onResize:null,onScroll:null,onSecurityPolicyViolation:null,onSeeked:null,onSeeking:null,onSelect:null,onSlotChange:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnhandledRejection:null,onUnload:null,onVolumeChange:null,onWaiting:null,onWheel:null,open:a,optimum:c,pattern:null,ping:u,placeholder:null,playsInline:a,poster:null,preload:null,readOnly:a,referrerPolicy:null,rel:u,required:a,reversed:a,rows:c,rowSpan:c,sandbox:u,scope:null,scoped:a,seamless:a,selected:a,shape:null,size:c,sizes:null,slot:null,span:c,spellCheck:l,src:null,srcDoc:null,srcLang:null,srcSet:d,start:c,step:null,style:null,tabIndex:c,target:null,title:null,translate:null,type:null,typeMustMatch:a,useMap:null,value:l,width:c,wrap:null,align:null,aLink:null,archive:u,axis:null,background:null,bgColor:null,border:c,borderColor:null,bottomMargin:c,cellPadding:null,cellSpacing:null,char:null,charOff:null,classId:null,clear:null,code:null,codeBase:null,codeType:null,color:null,compact:a,declare:a,event:null,face:null,frame:null,frameBorder:null,hSpace:c,leftMargin:c,link:null,longDesc:null,lowSrc:null,marginHeight:c,marginWidth:c,noResize:a,noHref:a,noShade:a,noWrap:a,object:null,profile:null,prompt:null,rev:null,rightMargin:c,rules:null,scheme:null,scrolling:l,standby:null,summary:null,text:null,topMargin:c,valueType:null,version:null,vAlign:null,vLink:null,vSpace:c,allowTransparency:null,autoCorrect:null,autoSave:null,disablePictureInPicture:a,disableRemotePlayback:a,prefix:null,property:null,results:c,security:null,unselectable:null}})},RjOF:function(e,t,n){"use strict";var o,r="";e.exports=function(e,t){if("string"!==typeof e)throw new TypeError("expected a string");if(1===t)return e;if(2===t)return e+e;var n=e.length*t;if(o!==e||"undefined"===typeof o)o=e,r="";else if(r.length>=n)return r.substr(0,n);for(;n>r.length&&t>1;)1&t&&(r+=e),t>>=1,e+=e;return r=(r+=e).substr(0,n)}},RrMp:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n("+Pz5"),r=n("dAEq"),i=n("Atxm"),a=n("kQY0"),s=n("Ue0c"),l=n("42yH"),c=n("PSll"),u=n("NNOl"),d=n("/apb"),p=n("HxRD"),f=n("gyVW"),h=n("CUvb"),m=n("KynH"),g=n("3iNw"),T=n("OaLn"),E=n("7enW"),b=n("Ie4K"),A=n("escJ"),k=n("5bit"),y=n("Iv+h"),_=n("33Zt"),S={42:k,43:k,45:k,48:k,49:k,50:k,51:k,52:k,53:k,54:k,55:k,56:k,57:k,62:a},C={91:p},x={"-2":u,"-1":u,32:u},v={35:h,42:_,45:[y,_],60:m,61:y,95:_,96:c,126:c},O={38:l,92:s},N={"-5":A,"-4":A,"-3":A,33:E,38:l,42:r,60:[i,g],91:b,92:[f,s],93:T,95:r,96:d},M={null:[r,o.resolver]};t.contentInitial=C,t.disable={null:[]},t.document=S,t.flow=v,t.flowInitial=x,t.insideSpan=M,t.string=O,t.text=N},Ry5F:function(e,t,n){"use strict";e.exports=function(e,t){var n,a,s,l,c,u=t.children,d=u.length,p=t.align||[],f=p.length,h=[];for(;d--;){for(a=u[d].children,l=0===d?"th":"td",n=f||a.length,s=[];n--;)c=a[n],s[n]=e(c,l,{align:p[n]},c?i(e,c):[]);h[d]=e(u[d],"tr",r(s,!0))}return e(t,"table",r([e(h[0].position,"thead",r([h[0]],!0))].concat(h[1]?e({start:o.start(h[1]),end:o.end(h[h.length-1])},"tbody",r(h.slice(1),!0)):[]),!0))};var o=n("BfbN"),r=n("Dvol"),i=n("WFsM")},ScQ6:function(e,t,n){e.exports=function(e,t,n){var l,c,u,d=r(n),p=i(n);t&&t.ordered&&(d=(t.start>-1?t.start:1)+(!1===n.options.incrementListMarker?0:t.children.indexOf(e))+".");l=d.length+1,("tab"===p||"mixed"===p&&(t&&t.spread||e.spread))&&(l=4*Math.ceil(l/4));return u=n.enter("listItem"),c=s(a(e,n),(function(e,t,n){if(t)return(n?"":o(" ",l))+e;return(n?d:d+o(" ",l-d.length))+e})),u(),c};var o=n("RjOF"),r=n("/cIb"),i=n("NfWH"),a=n("B5Lt"),s=n("deF/")},T0BQ:function(e,t,n){"use strict";var o=n("NOby");e.exports=function(e){return o({},e)}},T0f4:function(e,t){function n(t){return e.exports=n=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},n(t)}e.exports=n},TDhK:function(e,t,n){"use strict";var o={}.hasOwnProperty;e.exports=o},THrT:function(e,t,n){e.exports=n("qOO9")},TTG4:function(e,t,n){"use strict";t.parse=function(e){var t=String(e||"").trim();return""===t?[]:t.split(o)},t.stringify=function(e){return e.join(" ").trim()};var o=/[ \t\n\r\f]+/g},Tauu:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{color:"#a9b7c6",fontFamily:"Consolas, Monaco, 'Andale Mono', monospace",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none"},'pre[class*="language-"]':{color:"#a9b7c6",fontFamily:"Consolas, Monaco, 'Andale Mono', monospace",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",padding:"1em",margin:".5em 0",overflow:"auto",background:"#2b2b2b"},'pre[class*="language-"]::-moz-selection':{color:"inherit",background:"rgba(33, 66, 131, .85)"},'pre[class*="language-"] ::-moz-selection':{color:"inherit",background:"rgba(33, 66, 131, .85)"},'code[class*="language-"]::-moz-selection':{color:"inherit",background:"rgba(33, 66, 131, .85)"},'code[class*="language-"] ::-moz-selection':{color:"inherit",background:"rgba(33, 66, 131, .85)"},'pre[class*="language-"]::selection':{color:"inherit",background:"rgba(33, 66, 131, .85)"},'pre[class*="language-"] ::selection':{color:"inherit",background:"rgba(33, 66, 131, .85)"},'code[class*="language-"]::selection':{color:"inherit",background:"rgba(33, 66, 131, .85)"},'code[class*="language-"] ::selection':{color:"inherit",background:"rgba(33, 66, 131, .85)"},':not(pre) > code[class*="language-"]':{background:"#2b2b2b",padding:".1em",borderRadius:".3em"},comment:{color:"#808080"},prolog:{color:"#808080"},cdata:{color:"#808080"},delimiter:{color:"#cc7832"},boolean:{color:"#cc7832"},keyword:{color:"#cc7832"},selector:{color:"#cc7832"},important:{color:"#cc7832"},atrule:{color:"#cc7832"},operator:{color:"#a9b7c6"},punctuation:{color:"#a9b7c6"},"attr-name":{color:"#a9b7c6"},tag:{color:"#e8bf6a"},"tag .punctuation":{color:"#e8bf6a"},doctype:{color:"#e8bf6a"},builtin:{color:"#e8bf6a"},entity:{color:"#6897bb"},number:{color:"#6897bb"},symbol:{color:"#6897bb"},property:{color:"#9876aa"},constant:{color:"#9876aa"},variable:{color:"#9876aa"},string:{color:"#6a8759"},char:{color:"#6a8759"},"attr-value":{color:"#a5c261"},"attr-value .punctuation":{color:"#a5c261"},"attr-value .punctuation:first-child":{color:"#a9b7c6"},url:{color:"#287bde",textDecoration:"underline"},function:{color:"#ffc66d"},regex:{background:"#364135"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},inserted:{background:"#294436"},deleted:{background:"#484a4a"},"code.language-css .token.property":{color:"#a9b7c6"},"code.language-css .token.property + .token.punctuation":{color:"#a9b7c6"},"code.language-css .token.id":{color:"#ffc66d"},"code.language-css .token.selector > .token.class":{color:"#ffc66d"},"code.language-css .token.selector > .token.attribute":{color:"#ffc66d"},"code.language-css .token.selector > .token.pseudo-class":{color:"#ffc66d"},"code.language-css .token.selector > .token.pseudo-element":{color:"#ffc66d"}}},TqRt:function(e,t){e.exports=function(e){return e&&e.__esModule?e:{default:e}},e.exports.__esModule=!0,e.exports.default=e.exports},U6jy:function(e,t){e.exports=function(){for(var e={},t=0;t0;t--)e.onItemPop(this.items[t]);t.popAllUpToHtmlElement.call(this)},remove(n){e.onItemPop(this.current),t.remove.call(this,n)}}}}},Ue0c:function(e,t,n){"use strict";var o=n("qF1g"),r={name:"characterEscape",tokenize:function(e,t,n){return function(t){return e.enter("characterEscape"),e.enter("escapeMarker"),e.consume(t),e.exit("escapeMarker"),r};function r(r){return o(r)?(e.enter("characterEscapeValue"),e.consume(r),e.exit("characterEscapeValue"),e.exit("characterEscape"),t):n(r)}}};e.exports=r},UhtW:function(e,t){e.exports=function e(t,n){var o,r=-1;if(n.extensions)for(;++ra?0:a+t:t>a?a:t,n=n>0?n:0,r.length<1e4)(i=Array.from(r)).unshift(t,n),o.apply(e,i);else for(n&&o.apply(e,[t,n]);s code[class*="language-"]':{background:"#272822",padding:".1em",borderRadius:".3em",whiteSpace:"normal"},comment:{color:"#8292a2"},prolog:{color:"#8292a2"},doctype:{color:"#8292a2"},cdata:{color:"#8292a2"},punctuation:{color:"#f8f8f2"},namespace:{Opacity:".7"},property:{color:"#f92672"},tag:{color:"#f92672"},constant:{color:"#f92672"},symbol:{color:"#f92672"},deleted:{color:"#f92672"},boolean:{color:"#ae81ff"},number:{color:"#ae81ff"},selector:{color:"#a6e22e"},"attr-name":{color:"#a6e22e"},string:{color:"#a6e22e"},char:{color:"#a6e22e"},builtin:{color:"#a6e22e"},inserted:{color:"#a6e22e"},operator:{color:"#f8f8f2"},entity:{color:"#f8f8f2",cursor:"help"},url:{color:"#f8f8f2"},".language-css .token.string":{color:"#f8f8f2"},".style .token.string":{color:"#f8f8f2"},variable:{color:"#f8f8f2"},atrule:{color:"#e6db74"},"attr-value":{color:"#e6db74"},function:{color:"#e6db74"},"class-name":{color:"#e6db74"},keyword:{color:"#66d9ef"},regex:{color:"#fd971f"},important:{color:"#fd971f",fontWeight:"bold"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"}}},WniP:function(e,t,n){"use strict";e.exports=function(e,t){var n,i,a,s=t.referenceType,l="]";"collapsed"===s?l+="[]":"full"===s&&(l+="["+(t.label||t.identifier)+"]");if("imageReference"===t.type)return o("text","!["+t.alt+l);n=r(e,t),(i=n[0])&&"text"===i.type?i.value="["+i.value:n.unshift(o("text","["));(a=n[n.length-1])&&"text"===a.type?a.value+=l:n.push(o("text",l));return n};var o=n("vUGn"),r=n("WFsM")},WtKE:function(e,t,n){"use strict";var o;e.exports=function(e){var t,n="&"+e+";";if((o=o||document.createElement("i")).innerHTML=n,59===(t=o.textContent).charCodeAt(t.length-1)&&"semi"!==e)return!1;return t!==n&&t}},Xuae:function(e,t,n){"use strict";var o=n("mPvQ"),r=n("/GRZ"),i=n("i2R6"),a=(n("qXWd"),n("48fX")),s=n("tCBg"),l=n("T0f4");function c(e){var t=function(){if("undefined"===typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"===typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,o=l(e);if(t){var r=l(this).constructor;n=Reflect.construct(o,arguments,r)}else n=o.apply(this,arguments);return s(this,n)}}t.__esModule=!0,t.default=void 0;var u=n("q1tI"),d=function(e){a(n,e);var t=c(n);function n(e){var i;return r(this,n),(i=t.call(this,e))._hasHeadManager=void 0,i.emitChange=function(){i._hasHeadManager&&i.props.headManager.updateHead(i.props.reduceComponentsToState(o(i.props.headManager.mountedInstances),i.props))},i._hasHeadManager=i.props.headManager&&i.props.headManager.mountedInstances,i}return i(n,[{key:"componentDidMount",value:function(){this._hasHeadManager&&this.props.headManager.mountedInstances.add(this),this.emitChange()}},{key:"componentDidUpdate",value:function(){this.emitChange()}},{key:"componentWillUnmount",value:function(){this._hasHeadManager&&this.props.headManager.mountedInstances.delete(this),this.emitChange()}},{key:"render",value:function(){return null}}]),n}(u.Component);t.default=d},"Y+Mq":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{fontFamily:'Consolas, Menlo, Monaco, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace',fontSize:"14px",lineHeight:"1.375",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",background:"#24242e",color:"#767693"},'pre[class*="language-"]':{fontFamily:'Consolas, Menlo, Monaco, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace',fontSize:"14px",lineHeight:"1.375",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",background:"#24242e",color:"#767693",padding:"1em",margin:".5em 0",overflow:"auto"},'pre > code[class*="language-"]':{fontSize:"1em"},'pre[class*="language-"]::-moz-selection':{textShadow:"none",background:"#5151e6"},'pre[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#5151e6"},'code[class*="language-"]::-moz-selection':{textShadow:"none",background:"#5151e6"},'code[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#5151e6"},'pre[class*="language-"]::selection':{textShadow:"none",background:"#5151e6"},'pre[class*="language-"] ::selection':{textShadow:"none",background:"#5151e6"},'code[class*="language-"]::selection':{textShadow:"none",background:"#5151e6"},'code[class*="language-"] ::selection':{textShadow:"none",background:"#5151e6"},':not(pre) > code[class*="language-"]':{padding:".1em",borderRadius:".3em"},comment:{color:"#5b5b76"},prolog:{color:"#5b5b76"},doctype:{color:"#5b5b76"},cdata:{color:"#5b5b76"},punctuation:{color:"#5b5b76"},namespace:{Opacity:".7"},tag:{color:"#dd672c"},operator:{color:"#dd672c"},number:{color:"#dd672c"},property:{color:"#767693"},function:{color:"#767693"},"tag-id":{color:"#ebebff"},selector:{color:"#ebebff"},"atrule-id":{color:"#ebebff"},"code.language-javascript":{color:"#aaaaca"},"attr-name":{color:"#aaaaca"},"code.language-css":{color:"#fe8c52"},"code.language-scss":{color:"#fe8c52"},boolean:{color:"#fe8c52"},string:{color:"#fe8c52"},entity:{color:"#fe8c52",cursor:"help"},url:{color:"#fe8c52"},".language-css .token.string":{color:"#fe8c52"},".language-scss .token.string":{color:"#fe8c52"},".style .token.string":{color:"#fe8c52"},"attr-value":{color:"#fe8c52"},keyword:{color:"#fe8c52"},control:{color:"#fe8c52"},directive:{color:"#fe8c52"},unit:{color:"#fe8c52"},statement:{color:"#fe8c52"},regex:{color:"#fe8c52"},atrule:{color:"#fe8c52"},placeholder:{color:"#fe8c52"},variable:{color:"#fe8c52"},deleted:{textDecoration:"line-through"},inserted:{borderBottom:"1px dotted #ebebff",textDecoration:"none"},italic:{fontStyle:"italic"},important:{fontWeight:"bold",color:"#aaaaca"},bold:{fontWeight:"bold"},"pre > code.highlight":{Outline:".4em solid #7676f4",OutlineOffset:".4em"},".line-numbers .line-numbers-rows":{borderRightColor:"#262631"},".line-numbers-rows > span:before":{color:"#393949"},".line-highlight":{background:"linear-gradient(to right, rgba(221, 103, 44, 0.2) 70%, rgba(221, 103, 44, 0))"}}},"Y/Y8":function(e,t,n){"use strict";const o=n("HwUZ"),r=n("zpDW"),i=n("lb9w"),a=n("UTAp"),s=n("UwWT").TAG_NAMES;e.exports=class extends o{constructor(e){super(e),this.parser=e,this.treeAdapter=this.parser.treeAdapter,this.posTracker=null,this.lastStartTagToken=null,this.lastFosterParentingLocation=null,this.currentToken=null}_setStartLocation(e){let t=null;this.lastStartTagToken&&(t=Object.assign({},this.lastStartTagToken.location),t.startTag=this.lastStartTagToken.location),this.treeAdapter.setNodeSourceCodeLocation(e,t)}_setEndLocation(e,t){if(this.treeAdapter.getNodeSourceCodeLocation(e)&&t.location){const n=t.location,o=this.treeAdapter.getTagName(e),i={};t.type===r.END_TAG_TOKEN&&o===t.tagName?(i.endTag=Object.assign({},n),i.endLine=n.endLine,i.endCol=n.endCol,i.endOffset=n.endOffset):(i.endLine=n.startLine,i.endCol=n.startCol,i.endOffset=n.startOffset),this.treeAdapter.updateNodeSourceCodeLocation(e,i)}}_getOverriddenMethods(e,t){return{_bootstrap(n,r){t._bootstrap.call(this,n,r),e.lastStartTagToken=null,e.lastFosterParentingLocation=null,e.currentToken=null;const s=o.install(this.tokenizer,i);e.posTracker=s.posTracker,o.install(this.openElements,a,{onItemPop:function(t){e._setEndLocation(t,e.currentToken)}})},_runParsingLoop(n){t._runParsingLoop.call(this,n);for(let t=this.openElements.stackTop;t>=0;t--)e._setEndLocation(this.openElements.items[t],e.currentToken)},_processTokenInForeignContent(n){e.currentToken=n,t._processTokenInForeignContent.call(this,n)},_processToken(n){e.currentToken=n,t._processToken.call(this,n);if(n.type===r.END_TAG_TOKEN&&(n.tagName===s.HTML||n.tagName===s.BODY&&this.openElements.hasInScope(s.BODY)))for(let t=this.openElements.stackTop;t>=0;t--){const o=this.openElements.items[t];if(this.treeAdapter.getTagName(o)===n.tagName){e._setEndLocation(o,n);break}}},_setDocumentType(e){t._setDocumentType.call(this,e);const n=this.treeAdapter.getChildNodes(this.document),o=n.length;for(let t=0;tt;)a.containerState=c[i][1],c[i][0].exit.call(a,e);c.length=t}},s={tokenize:function(e,t,n){return r(e,e.attempt(this.parser.constructs.document,t,n),"linePrefix",this.parser.constructs.disable.null.indexOf("codeIndented")>-1?void 0:4)}},l={tokenize:function(e,t,n){return r(e,e.lazy(this.parser.constructs.flow,t,n),"linePrefix",this.parser.constructs.disable.null.indexOf("codeIndented")>-1?void 0:4)}};t.tokenize=a},YpxX:function(e,t,n){"use strict";const o=n("pRQB"),r=n("2l2D"),i=o.CODE_POINTS;e.exports=class{constructor(){this.html=null,this.pos=-1,this.lastGapPos=-1,this.lastCharPos=-1,this.gapStack=[],this.skipNextNewLine=!1,this.lastChunkWritten=!1,this.endOfChunkHit=!1,this.bufferWaterline=65536}_err(){}_addGap(){this.gapStack.push(this.lastGapPos),this.lastGapPos=this.pos}_processSurrogate(e){if(this.pos!==this.lastCharPos){const t=this.html.charCodeAt(this.pos+1);if(o.isSurrogatePair(t))return this.pos++,this._addGap(),o.getSurrogatePairCodePoint(e,t)}else if(!this.lastChunkWritten)return this.endOfChunkHit=!0,i.EOF;return this._err(r.surrogateInInputStream),e}dropParsedChunk(){this.pos>this.bufferWaterline&&(this.lastCharPos-=this.pos,this.html=this.html.substring(this.pos),this.pos=0,this.lastGapPos=-1,this.gapStack=[])}write(e,t){this.html?this.html+=e:this.html=e,this.lastCharPos=this.html.length-1,this.endOfChunkHit=!1,this.lastChunkWritten=t}insertHtmlAtCurrentPos(e){this.html=this.html.substring(0,this.pos+1)+e+this.html.substring(this.pos+1,this.html.length),this.lastCharPos=this.html.length-1,this.endOfChunkHit=!1}advance(){if(this.pos++,this.pos>this.lastCharPos)return this.endOfChunkHit=!this.lastChunkWritten,i.EOF;let e=this.html.charCodeAt(this.pos);if(this.skipNextNewLine&&e===i.LINE_FEED)return this.skipNextNewLine=!1,this._addGap(),this.advance();if(e===i.CARRIAGE_RETURN)return this.skipNextNewLine=!0,i.LINE_FEED;this.skipNextNewLine=!1,o.isSurrogate(e)&&(e=this._processSurrogate(e));return e>31&&e<127||e===i.LINE_FEED||e===i.CARRIAGE_RETURN||e>159&&e<64976||this._checkForProblematicCharacters(e),e}_checkForProblematicCharacters(e){o.isControlCodePoint(e)?this._err(r.controlCharacterInInputStream):o.isUndefinedCodePoint(e)&&this._err(r.noncharacterInInputStream)}retreat(){this.pos===this.lastGapPos&&(this.lastGapPos=this.gapStack.pop(),this.pos--),this.pos--}}},Z0IX:function(e,t,n){"use strict";var o=n("EIjK");e.exports=function(e,t){var n=parseInt(e,t);return n<9||11===n||n>13&&n<32||n>126&&n<160||n>55295&&n<57344||n>64975&&n<65008||65535===(65535&n)||65534===(65535&n)||n>1114111?"\ufffd":o(n)}},ZOei:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{color:"#f8f8f2",background:"none",fontFamily:"\"Fira Code\", Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none"},'pre[class*="language-"]':{color:"#f8f8f2",background:"#2E3440",fontFamily:"\"Fira Code\", Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",padding:"1em",margin:".5em 0",overflow:"auto",borderRadius:"0.3em"},':not(pre) > code[class*="language-"]':{background:"#2E3440",padding:".1em",borderRadius:".3em",whiteSpace:"normal"},comment:{color:"#636f88"},prolog:{color:"#636f88"},doctype:{color:"#636f88"},cdata:{color:"#636f88"},punctuation:{color:"#81A1C1"},".namespace":{Opacity:".7"},property:{color:"#81A1C1"},tag:{color:"#81A1C1"},constant:{color:"#81A1C1"},symbol:{color:"#81A1C1"},deleted:{color:"#81A1C1"},number:{color:"#B48EAD"},boolean:{color:"#81A1C1"},selector:{color:"#A3BE8C"},"attr-name":{color:"#A3BE8C"},string:{color:"#A3BE8C"},char:{color:"#A3BE8C"},builtin:{color:"#A3BE8C"},inserted:{color:"#A3BE8C"},operator:{color:"#81A1C1"},entity:{color:"#81A1C1",cursor:"help"},url:{color:"#81A1C1"},".language-css .token.string":{color:"#81A1C1"},".style .token.string":{color:"#81A1C1"},variable:{color:"#81A1C1"},atrule:{color:"#88C0D0"},"attr-value":{color:"#88C0D0"},function:{color:"#88C0D0"},"class-name":{color:"#88C0D0"},keyword:{color:"#81A1C1"},regex:{color:"#EBCB8B"},important:{color:"#EBCB8B",fontWeight:"bold"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"}}},"ZTJ+":function(e,t,n){"use strict";function o(){return null}e.exports={blockquote:n("iX4R"),break:n("aRXn"),code:n("GjEx"),delete:n("/Fgc"),emphasis:n("ktEA"),footnoteReference:n("/BR8"),footnote:n("nbFU"),heading:n("lQDV"),html:n("fFcG"),imageReference:n("rRyo"),image:n("I3zf"),inlineCode:n("M3+Y"),linkReference:n("W+EG"),link:n("/ulP"),listItem:n("bS0g"),list:n("pI64"),paragraph:n("1rba"),root:n("N+Fa"),strong:n("CndC"),table:n("Ry5F"),text:n("KvLk"),thematicBreak:n("WV47"),toml:o,yaml:o,definition:o,footnoteDefinition:o}},Zasy:function(e,t,n){"use strict";function o(e){if(null==e)return r;if("string"===typeof e)return function(e){return t;function t(t){return Boolean(t&&t.type===e)}}(e);if("object"===typeof e)return"length"in e?function(e){var t=[],n=-1;for(;++n code[class*="language-"]':{whiteSpace:"normal",borderRadius:"0.2em",padding:"0.1em"},".language-css > code":{color:"#f76d47"},".language-sass > code":{color:"#f76d47"},".language-scss > code":{color:"#f76d47"},'[class*="language-"] .namespace':{Opacity:"0.7"},atrule:{color:"#7c4dff"},"attr-name":{color:"#39adb5"},"attr-value":{color:"#f6a434"},attribute:{color:"#f6a434"},boolean:{color:"#7c4dff"},builtin:{color:"#39adb5"},cdata:{color:"#39adb5"},char:{color:"#39adb5"},class:{color:"#39adb5"},"class-name":{color:"#6182b8"},comment:{color:"#aabfc9"},constant:{color:"#7c4dff"},deleted:{color:"#e53935"},doctype:{color:"#aabfc9"},entity:{color:"#e53935"},function:{color:"#7c4dff"},hexcode:{color:"#f76d47"},id:{color:"#7c4dff",fontWeight:"bold"},important:{color:"#7c4dff",fontWeight:"bold"},inserted:{color:"#39adb5"},keyword:{color:"#7c4dff"},number:{color:"#f76d47"},operator:{color:"#39adb5"},prolog:{color:"#aabfc9"},property:{color:"#39adb5"},"pseudo-class":{color:"#f6a434"},"pseudo-element":{color:"#f6a434"},punctuation:{color:"#39adb5"},regex:{color:"#6182b8"},selector:{color:"#e53935"},string:{color:"#f6a434"},symbol:{color:"#7c4dff"},tag:{color:"#e53935"},unit:{color:"#f76d47"},url:{color:"#e53935"},variable:{color:"#e53935"}}},b9um:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{MozTabSize:"2",OTabSize:"2",tabSize:"2",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",whiteSpace:"pre-wrap",wordWrap:"normal",fontFamily:'Menlo, Monaco, "Courier New", monospace',fontSize:"14px",color:"#76d9e6",textShadow:"none"},'pre[class*="language-"]':{MozTabSize:"2",OTabSize:"2",tabSize:"2",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",whiteSpace:"pre-wrap",wordWrap:"normal",fontFamily:'Menlo, Monaco, "Courier New", monospace',fontSize:"14px",color:"#76d9e6",textShadow:"none",background:"#2a2a2a",padding:"15px",borderRadius:"4px",border:"1px solid #e1e1e8",overflow:"auto",position:"relative"},'pre > code[class*="language-"]':{fontSize:"1em"},':not(pre) > code[class*="language-"]':{background:"#2a2a2a",padding:"0.15em 0.2em 0.05em",borderRadius:".3em",border:"0.13em solid #7a6652",boxShadow:"1px 1px 0.3em -0.1em #000 inset"},'pre[class*="language-"] code':{whiteSpace:"pre",display:"block"},namespace:{Opacity:".7"},comment:{color:"#6f705e"},prolog:{color:"#6f705e"},doctype:{color:"#6f705e"},cdata:{color:"#6f705e"},operator:{color:"#a77afe"},boolean:{color:"#a77afe"},number:{color:"#a77afe"},"attr-name":{color:"#e6d06c"},string:{color:"#e6d06c"},entity:{color:"#e6d06c",cursor:"help"},url:{color:"#e6d06c"},".language-css .token.string":{color:"#e6d06c"},".style .token.string":{color:"#e6d06c"},selector:{color:"#a6e22d"},inserted:{color:"#a6e22d"},atrule:{color:"#ef3b7d"},"attr-value":{color:"#ef3b7d"},keyword:{color:"#ef3b7d"},important:{color:"#ef3b7d",fontWeight:"bold"},deleted:{color:"#ef3b7d"},regex:{color:"#76d9e6"},statement:{color:"#76d9e6",fontWeight:"bold"},placeholder:{color:"#fff"},variable:{color:"#fff"},bold:{fontWeight:"bold"},punctuation:{color:"#bebec5"},italic:{fontStyle:"italic"},"code.language-markup":{color:"#f9f9f9"},"code.language-markup .token.tag":{color:"#ef3b7d"},"code.language-markup .token.attr-name":{color:"#a6e22d"},"code.language-markup .token.attr-value":{color:"#e6d06c"},"code.language-markup .token.style":{color:"#76d9e6"},"code.language-markup .token.script":{color:"#76d9e6"},"code.language-markup .token.script .token.keyword":{color:"#76d9e6"},'pre[class*="language-"][data-line]':{position:"relative",padding:"1em 0 1em 3em"},"pre[data-line] .line-highlight":{position:"absolute",left:"0",right:"0",padding:"0",marginTop:"1em",background:"rgba(255, 255, 255, 0.08)",pointerEvents:"none",lineHeight:"inherit",whiteSpace:"pre"},"pre[data-line] .line-highlight:before":{content:"attr(data-start)",position:"absolute",top:".4em",left:".6em",minWidth:"1em",padding:"0.2em 0.5em",backgroundColor:"rgba(255, 255, 255, 0.4)",color:"black",font:"bold 65%/1 sans-serif",height:"1em",lineHeight:"1em",textAlign:"center",borderRadius:"999px",textShadow:"none",boxShadow:"0 1px 1px rgba(255, 255, 255, 0.7)"},"pre[data-line] .line-highlight[data-end]:after":{content:"attr(data-end)",position:"absolute",top:"auto",left:".6em",minWidth:"1em",padding:"0.2em 0.5em",backgroundColor:"rgba(255, 255, 255, 0.4)",color:"black",font:"bold 65%/1 sans-serif",height:"1em",lineHeight:"1em",textAlign:"center",borderRadius:"999px",textShadow:"none",boxShadow:"0 1px 1px rgba(255, 255, 255, 0.7)",bottom:".4em"}}},bAF5:function(e,t,n){"use strict";e.exports=function(e){return e.toLowerCase()}},bFEn:function(e,t,n){"use strict";var o=n("7+hk"),r=n("rS7C")(o,"div");r.displayName="html",e.exports=r},bHgY:function(e,t,n){"use strict";var o=n("FWC9"),r=n("DUvi"),i=o.booleanish,a=o.number,s=o.spaceSeparated;e.exports=r({transform:function(e,t){return"role"===t?t:"aria-"+t.slice(4).toLowerCase()},properties:{ariaActiveDescendant:null,ariaAtomic:i,ariaAutoComplete:null,ariaBusy:i,ariaChecked:i,ariaColCount:a,ariaColIndex:a,ariaColSpan:a,ariaControls:s,ariaCurrent:null,ariaDescribedBy:s,ariaDetails:null,ariaDisabled:i,ariaDropEffect:s,ariaErrorMessage:null,ariaExpanded:i,ariaFlowTo:s,ariaGrabbed:i,ariaHasPopup:null,ariaHidden:i,ariaInvalid:null,ariaKeyShortcuts:null,ariaLabel:null,ariaLabelledBy:s,ariaLevel:a,ariaLive:null,ariaModal:i,ariaMultiLine:i,ariaMultiSelectable:i,ariaOrientation:null,ariaOwns:s,ariaPlaceholder:null,ariaPosInSet:a,ariaPressed:i,ariaReadOnly:i,ariaRelevant:null,ariaRequired:i,ariaRoleDescription:s,ariaRowCount:a,ariaRowIndex:a,ariaRowSpan:a,ariaSelected:i,ariaSetSize:a,ariaSort:null,ariaValueMax:a,ariaValueMin:a,ariaValueNow:a,ariaValueText:null,role:null}})},bS0g:function(e,t,n){"use strict";e.exports=function(e,t,n){var a,s,l,c=r(e,t),u=c[0],d=n?function(e){var t=e.spread,n=e.children,o=n.length,r=-1;for(;!t&&++r0&&u.children.unshift(o("text"," ")),u.children.unshift(e(null,"input",{type:"checkbox",checked:t.checked,disabled:!0})),p.className=["task-list-item"]);a=c.length,s=-1;for(;++s1:t}},bWFg:function(e,t,n){"use strict";e.exports=e=>{if("string"!==typeof e)throw new TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}},bwJB:function(e,t,n){"use strict";e.exports=e=>{if("[object Object]"!==Object.prototype.toString.call(e))return!1;const t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}},c2c2:function(e,t,n){"use strict";var o=n("TqRt");Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"coy",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(t,"dark",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(t,"funky",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(t,"okaidia",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(t,"solarizedlight",{enumerable:!0,get:function(){return l.default}}),Object.defineProperty(t,"tomorrow",{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(t,"twilight",{enumerable:!0,get:function(){return u.default}}),Object.defineProperty(t,"prism",{enumerable:!0,get:function(){return d.default}}),Object.defineProperty(t,"a11yDark",{enumerable:!0,get:function(){return p.default}}),Object.defineProperty(t,"atomDark",{enumerable:!0,get:function(){return f.default}}),Object.defineProperty(t,"base16AteliersulphurpoolLight",{enumerable:!0,get:function(){return h.default}}),Object.defineProperty(t,"cb",{enumerable:!0,get:function(){return m.default}}),Object.defineProperty(t,"darcula",{enumerable:!0,get:function(){return g.default}}),Object.defineProperty(t,"dracula",{enumerable:!0,get:function(){return T.default}}),Object.defineProperty(t,"duotoneDark",{enumerable:!0,get:function(){return E.default}}),Object.defineProperty(t,"duotoneEarth",{enumerable:!0,get:function(){return b.default}}),Object.defineProperty(t,"duotoneForest",{enumerable:!0,get:function(){return A.default}}),Object.defineProperty(t,"duotoneLight",{enumerable:!0,get:function(){return k.default}}),Object.defineProperty(t,"duotoneSea",{enumerable:!0,get:function(){return y.default}}),Object.defineProperty(t,"duotoneSpace",{enumerable:!0,get:function(){return _.default}}),Object.defineProperty(t,"ghcolors",{enumerable:!0,get:function(){return S.default}}),Object.defineProperty(t,"hopscotch",{enumerable:!0,get:function(){return C.default}}),Object.defineProperty(t,"materialDark",{enumerable:!0,get:function(){return x.default}}),Object.defineProperty(t,"materialLight",{enumerable:!0,get:function(){return v.default}}),Object.defineProperty(t,"materialOceanic",{enumerable:!0,get:function(){return O.default}}),Object.defineProperty(t,"nord",{enumerable:!0,get:function(){return N.default}}),Object.defineProperty(t,"pojoaque",{enumerable:!0,get:function(){return M.default}}),Object.defineProperty(t,"shadesOfPurple",{enumerable:!0,get:function(){return w.default}}),Object.defineProperty(t,"synthwave84",{enumerable:!0,get:function(){return R.default}}),Object.defineProperty(t,"vs",{enumerable:!0,get:function(){return I.default}}),Object.defineProperty(t,"vscDarkPlus",{enumerable:!0,get:function(){return L.default}}),Object.defineProperty(t,"xonokai",{enumerable:!0,get:function(){return P.default}});var r=o(n("61xa")),i=o(n("PCRY")),a=o(n("H0fq")),s=o(n("WVFU")),l=o(n("fL8H")),c=o(n("wGQB")),u=o(n("iy38")),d=o(n("6MAg")),p=o(n("yix/")),f=o(n("N4m7")),h=o(n("mAwW")),m=o(n("38Ti")),g=o(n("Tauu")),T=o(n("slJw")),E=o(n("007m")),b=o(n("kWEd")),A=o(n("9891")),k=o(n("4+h/")),y=o(n("++Eq")),_=o(n("Y+Mq")),S=o(n("GVPn")),C=o(n("HbD6")),x=o(n("vjtj")),v=o(n("auM2")),O=o(n("2uWR")),N=o(n("ZOei")),M=o(n("fe/W")),w=o(n("otMa")),R=o(n("BYRM")),I=o(n("C7Ve")),L=o(n("u0PD")),P=o(n("b9um"))},c6jy:function(e,t){e.exports=function(e){return null!=e&&null!=e.constructor&&"function"===typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}},cRLj:function(e,t,n){"use strict";e.exports=new Uint16Array([4,52,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,106,303,412,810,1432,1701,1796,1987,2114,2360,2420,2484,3170,3251,4140,4393,4575,4610,5106,5512,5728,6117,6274,6315,6345,6427,6516,7002,7910,8733,9323,9870,10170,10631,10893,11318,11386,11467,12773,13092,14474,14922,15448,15542,16419,17666,18166,18611,19004,19095,19298,19397,4,16,69,77,97,98,99,102,103,108,109,110,111,112,114,115,116,117,140,150,158,169,176,194,199,210,216,222,226,242,256,266,283,294,108,105,103,5,198,1,59,148,1,198,80,5,38,1,59,156,1,38,99,117,116,101,5,193,1,59,167,1,193,114,101,118,101,59,1,258,4,2,105,121,182,191,114,99,5,194,1,59,189,1,194,59,1,1040,114,59,3,55349,56580,114,97,118,101,5,192,1,59,208,1,192,112,104,97,59,1,913,97,99,114,59,1,256,100,59,1,10835,4,2,103,112,232,237,111,110,59,1,260,102,59,3,55349,56632,112,108,121,70,117,110,99,116,105,111,110,59,1,8289,105,110,103,5,197,1,59,264,1,197,4,2,99,115,272,277,114,59,3,55349,56476,105,103,110,59,1,8788,105,108,100,101,5,195,1,59,292,1,195,109,108,5,196,1,59,301,1,196,4,8,97,99,101,102,111,114,115,117,321,350,354,383,388,394,400,405,4,2,99,114,327,336,107,115,108,97,115,104,59,1,8726,4,2,118,119,342,345,59,1,10983,101,100,59,1,8966,121,59,1,1041,4,3,99,114,116,362,369,379,97,117,115,101,59,1,8757,110,111,117,108,108,105,115,59,1,8492,97,59,1,914,114,59,3,55349,56581,112,102,59,3,55349,56633,101,118,101,59,1,728,99,114,59,1,8492,109,112,101,113,59,1,8782,4,14,72,79,97,99,100,101,102,104,105,108,111,114,115,117,442,447,456,504,542,547,569,573,577,616,678,784,790,796,99,121,59,1,1063,80,89,5,169,1,59,454,1,169,4,3,99,112,121,464,470,497,117,116,101,59,1,262,4,2,59,105,476,478,1,8914,116,97,108,68,105,102,102,101,114,101,110,116,105,97,108,68,59,1,8517,108,101,121,115,59,1,8493,4,4,97,101,105,111,514,520,530,535,114,111,110,59,1,268,100,105,108,5,199,1,59,528,1,199,114,99,59,1,264,110,105,110,116,59,1,8752,111,116,59,1,266,4,2,100,110,553,560,105,108,108,97,59,1,184,116,101,114,68,111,116,59,1,183,114,59,1,8493,105,59,1,935,114,99,108,101,4,4,68,77,80,84,591,596,603,609,111,116,59,1,8857,105,110,117,115,59,1,8854,108,117,115,59,1,8853,105,109,101,115,59,1,8855,111,4,2,99,115,623,646,107,119,105,115,101,67,111,110,116,111,117,114,73,110,116,101,103,114,97,108,59,1,8754,101,67,117,114,108,121,4,2,68,81,658,671,111,117,98,108,101,81,117,111,116,101,59,1,8221,117,111,116,101,59,1,8217,4,4,108,110,112,117,688,701,736,753,111,110,4,2,59,101,696,698,1,8759,59,1,10868,4,3,103,105,116,709,717,722,114,117,101,110,116,59,1,8801,110,116,59,1,8751,111,117,114,73,110,116,101,103,114,97,108,59,1,8750,4,2,102,114,742,745,59,1,8450,111,100,117,99,116,59,1,8720,110,116,101,114,67,108,111,99,107,119,105,115,101,67,111,110,116,111,117,114,73,110,116,101,103,114,97,108,59,1,8755,111,115,115,59,1,10799,99,114,59,3,55349,56478,112,4,2,59,67,803,805,1,8915,97,112,59,1,8781,4,11,68,74,83,90,97,99,101,102,105,111,115,834,850,855,860,865,888,903,916,921,1011,1415,4,2,59,111,840,842,1,8517,116,114,97,104,100,59,1,10513,99,121,59,1,1026,99,121,59,1,1029,99,121,59,1,1039,4,3,103,114,115,873,879,883,103,101,114,59,1,8225,114,59,1,8609,104,118,59,1,10980,4,2,97,121,894,900,114,111,110,59,1,270,59,1,1044,108,4,2,59,116,910,912,1,8711,97,59,1,916,114,59,3,55349,56583,4,2,97,102,927,998,4,2,99,109,933,992,114,105,116,105,99,97,108,4,4,65,68,71,84,950,957,978,985,99,117,116,101,59,1,180,111,4,2,116,117,964,967,59,1,729,98,108,101,65,99,117,116,101,59,1,733,114,97,118,101,59,1,96,105,108,100,101,59,1,732,111,110,100,59,1,8900,102,101,114,101,110,116,105,97,108,68,59,1,8518,4,4,112,116,117,119,1021,1026,1048,1249,102,59,3,55349,56635,4,3,59,68,69,1034,1036,1041,1,168,111,116,59,1,8412,113,117,97,108,59,1,8784,98,108,101,4,6,67,68,76,82,85,86,1065,1082,1101,1189,1211,1236,111,110,116,111,117,114,73,110,116,101,103,114,97,108,59,1,8751,111,4,2,116,119,1089,1092,59,1,168,110,65,114,114,111,119,59,1,8659,4,2,101,111,1107,1141,102,116,4,3,65,82,84,1117,1124,1136,114,114,111,119,59,1,8656,105,103,104,116,65,114,114,111,119,59,1,8660,101,101,59,1,10980,110,103,4,2,76,82,1149,1177,101,102,116,4,2,65,82,1158,1165,114,114,111,119,59,1,10232,105,103,104,116,65,114,114,111,119,59,1,10234,105,103,104,116,65,114,114,111,119,59,1,10233,105,103,104,116,4,2,65,84,1199,1206,114,114,111,119,59,1,8658,101,101,59,1,8872,112,4,2,65,68,1218,1225,114,114,111,119,59,1,8657,111,119,110,65,114,114,111,119,59,1,8661,101,114,116,105,99,97,108,66,97,114,59,1,8741,110,4,6,65,66,76,82,84,97,1264,1292,1299,1352,1391,1408,114,114,111,119,4,3,59,66,85,1276,1278,1283,1,8595,97,114,59,1,10515,112,65,114,114,111,119,59,1,8693,114,101,118,101,59,1,785,101,102,116,4,3,82,84,86,1310,1323,1334,105,103,104,116,86,101,99,116,111,114,59,1,10576,101,101,86,101,99,116,111,114,59,1,10590,101,99,116,111,114,4,2,59,66,1345,1347,1,8637,97,114,59,1,10582,105,103,104,116,4,2,84,86,1362,1373,101,101,86,101,99,116,111,114,59,1,10591,101,99,116,111,114,4,2,59,66,1384,1386,1,8641,97,114,59,1,10583,101,101,4,2,59,65,1399,1401,1,8868,114,114,111,119,59,1,8615,114,114,111,119,59,1,8659,4,2,99,116,1421,1426,114,59,3,55349,56479,114,111,107,59,1,272,4,16,78,84,97,99,100,102,103,108,109,111,112,113,115,116,117,120,1466,1470,1478,1489,1515,1520,1525,1536,1544,1593,1609,1617,1650,1664,1668,1677,71,59,1,330,72,5,208,1,59,1476,1,208,99,117,116,101,5,201,1,59,1487,1,201,4,3,97,105,121,1497,1503,1512,114,111,110,59,1,282,114,99,5,202,1,59,1510,1,202,59,1,1069,111,116,59,1,278,114,59,3,55349,56584,114,97,118,101,5,200,1,59,1534,1,200,101,109,101,110,116,59,1,8712,4,2,97,112,1550,1555,99,114,59,1,274,116,121,4,2,83,86,1563,1576,109,97,108,108,83,113,117,97,114,101,59,1,9723,101,114,121,83,109,97,108,108,83,113,117,97,114,101,59,1,9643,4,2,103,112,1599,1604,111,110,59,1,280,102,59,3,55349,56636,115,105,108,111,110,59,1,917,117,4,2,97,105,1624,1640,108,4,2,59,84,1631,1633,1,10869,105,108,100,101,59,1,8770,108,105,98,114,105,117,109,59,1,8652,4,2,99,105,1656,1660,114,59,1,8496,109,59,1,10867,97,59,1,919,109,108,5,203,1,59,1675,1,203,4,2,105,112,1683,1689,115,116,115,59,1,8707,111,110,101,110,116,105,97,108,69,59,1,8519,4,5,99,102,105,111,115,1713,1717,1722,1762,1791,121,59,1,1060,114,59,3,55349,56585,108,108,101,100,4,2,83,86,1732,1745,109,97,108,108,83,113,117,97,114,101,59,1,9724,101,114,121,83,109,97,108,108,83,113,117,97,114,101,59,1,9642,4,3,112,114,117,1770,1775,1781,102,59,3,55349,56637,65,108,108,59,1,8704,114,105,101,114,116,114,102,59,1,8497,99,114,59,1,8497,4,12,74,84,97,98,99,100,102,103,111,114,115,116,1822,1827,1834,1848,1855,1877,1882,1887,1890,1896,1978,1984,99,121,59,1,1027,5,62,1,59,1832,1,62,109,109,97,4,2,59,100,1843,1845,1,915,59,1,988,114,101,118,101,59,1,286,4,3,101,105,121,1863,1869,1874,100,105,108,59,1,290,114,99,59,1,284,59,1,1043,111,116,59,1,288,114,59,3,55349,56586,59,1,8921,112,102,59,3,55349,56638,101,97,116,101,114,4,6,69,70,71,76,83,84,1915,1933,1944,1953,1959,1971,113,117,97,108,4,2,59,76,1925,1927,1,8805,101,115,115,59,1,8923,117,108,108,69,113,117,97,108,59,1,8807,114,101,97,116,101,114,59,1,10914,101,115,115,59,1,8823,108,97,110,116,69,113,117,97,108,59,1,10878,105,108,100,101,59,1,8819,99,114,59,3,55349,56482,59,1,8811,4,8,65,97,99,102,105,111,115,117,2005,2012,2026,2032,2036,2049,2073,2089,82,68,99,121,59,1,1066,4,2,99,116,2018,2023,101,107,59,1,711,59,1,94,105,114,99,59,1,292,114,59,1,8460,108,98,101,114,116,83,112,97,99,101,59,1,8459,4,2,112,114,2055,2059,102,59,1,8461,105,122,111,110,116,97,108,76,105,110,101,59,1,9472,4,2,99,116,2079,2083,114,59,1,8459,114,111,107,59,1,294,109,112,4,2,68,69,2097,2107,111,119,110,72,117,109,112,59,1,8782,113,117,97,108,59,1,8783,4,14,69,74,79,97,99,100,102,103,109,110,111,115,116,117,2144,2149,2155,2160,2171,2189,2194,2198,2209,2245,2307,2329,2334,2341,99,121,59,1,1045,108,105,103,59,1,306,99,121,59,1,1025,99,117,116,101,5,205,1,59,2169,1,205,4,2,105,121,2177,2186,114,99,5,206,1,59,2184,1,206,59,1,1048,111,116,59,1,304,114,59,1,8465,114,97,118,101,5,204,1,59,2207,1,204,4,3,59,97,112,2217,2219,2238,1,8465,4,2,99,103,2225,2229,114,59,1,298,105,110,97,114,121,73,59,1,8520,108,105,101,115,59,1,8658,4,2,116,118,2251,2281,4,2,59,101,2257,2259,1,8748,4,2,103,114,2265,2271,114,97,108,59,1,8747,115,101,99,116,105,111,110,59,1,8898,105,115,105,98,108,101,4,2,67,84,2293,2300,111,109,109,97,59,1,8291,105,109,101,115,59,1,8290,4,3,103,112,116,2315,2320,2325,111,110,59,1,302,102,59,3,55349,56640,97,59,1,921,99,114,59,1,8464,105,108,100,101,59,1,296,4,2,107,109,2347,2352,99,121,59,1,1030,108,5,207,1,59,2358,1,207,4,5,99,102,111,115,117,2372,2386,2391,2397,2414,4,2,105,121,2378,2383,114,99,59,1,308,59,1,1049,114,59,3,55349,56589,112,102,59,3,55349,56641,4,2,99,101,2403,2408,114,59,3,55349,56485,114,99,121,59,1,1032,107,99,121,59,1,1028,4,7,72,74,97,99,102,111,115,2436,2441,2446,2452,2467,2472,2478,99,121,59,1,1061,99,121,59,1,1036,112,112,97,59,1,922,4,2,101,121,2458,2464,100,105,108,59,1,310,59,1,1050,114,59,3,55349,56590,112,102,59,3,55349,56642,99,114,59,3,55349,56486,4,11,74,84,97,99,101,102,108,109,111,115,116,2508,2513,2520,2562,2585,2981,2986,3004,3011,3146,3167,99,121,59,1,1033,5,60,1,59,2518,1,60,4,5,99,109,110,112,114,2532,2538,2544,2548,2558,117,116,101,59,1,313,98,100,97,59,1,923,103,59,1,10218,108,97,99,101,116,114,102,59,1,8466,114,59,1,8606,4,3,97,101,121,2570,2576,2582,114,111,110,59,1,317,100,105,108,59,1,315,59,1,1051,4,2,102,115,2591,2907,116,4,10,65,67,68,70,82,84,85,86,97,114,2614,2663,2672,2728,2735,2760,2820,2870,2888,2895,4,2,110,114,2620,2633,103,108,101,66,114,97,99,107,101,116,59,1,10216,114,111,119,4,3,59,66,82,2644,2646,2651,1,8592,97,114,59,1,8676,105,103,104,116,65,114,114,111,119,59,1,8646,101,105,108,105,110,103,59,1,8968,111,4,2,117,119,2679,2692,98,108,101,66,114,97,99,107,101,116,59,1,10214,110,4,2,84,86,2699,2710,101,101,86,101,99,116,111,114,59,1,10593,101,99,116,111,114,4,2,59,66,2721,2723,1,8643,97,114,59,1,10585,108,111,111,114,59,1,8970,105,103,104,116,4,2,65,86,2745,2752,114,114,111,119,59,1,8596,101,99,116,111,114,59,1,10574,4,2,101,114,2766,2792,101,4,3,59,65,86,2775,2777,2784,1,8867,114,114,111,119,59,1,8612,101,99,116,111,114,59,1,10586,105,97,110,103,108,101,4,3,59,66,69,2806,2808,2813,1,8882,97,114,59,1,10703,113,117,97,108,59,1,8884,112,4,3,68,84,86,2829,2841,2852,111,119,110,86,101,99,116,111,114,59,1,10577,101,101,86,101,99,116,111,114,59,1,10592,101,99,116,111,114,4,2,59,66,2863,2865,1,8639,97,114,59,1,10584,101,99,116,111,114,4,2,59,66,2881,2883,1,8636,97,114,59,1,10578,114,114,111,119,59,1,8656,105,103,104,116,97,114,114,111,119,59,1,8660,115,4,6,69,70,71,76,83,84,2922,2936,2947,2956,2962,2974,113,117,97,108,71,114,101,97,116,101,114,59,1,8922,117,108,108,69,113,117,97,108,59,1,8806,114,101,97,116,101,114,59,1,8822,101,115,115,59,1,10913,108,97,110,116,69,113,117,97,108,59,1,10877,105,108,100,101,59,1,8818,114,59,3,55349,56591,4,2,59,101,2992,2994,1,8920,102,116,97,114,114,111,119,59,1,8666,105,100,111,116,59,1,319,4,3,110,112,119,3019,3110,3115,103,4,4,76,82,108,114,3030,3058,3070,3098,101,102,116,4,2,65,82,3039,3046,114,114,111,119,59,1,10229,105,103,104,116,65,114,114,111,119,59,1,10231,105,103,104,116,65,114,114,111,119,59,1,10230,101,102,116,4,2,97,114,3079,3086,114,114,111,119,59,1,10232,105,103,104,116,97,114,114,111,119,59,1,10234,105,103,104,116,97,114,114,111,119,59,1,10233,102,59,3,55349,56643,101,114,4,2,76,82,3123,3134,101,102,116,65,114,114,111,119,59,1,8601,105,103,104,116,65,114,114,111,119,59,1,8600,4,3,99,104,116,3154,3158,3161,114,59,1,8466,59,1,8624,114,111,107,59,1,321,59,1,8810,4,8,97,99,101,102,105,111,115,117,3188,3192,3196,3222,3227,3237,3243,3248,112,59,1,10501,121,59,1,1052,4,2,100,108,3202,3213,105,117,109,83,112,97,99,101,59,1,8287,108,105,110,116,114,102,59,1,8499,114,59,3,55349,56592,110,117,115,80,108,117,115,59,1,8723,112,102,59,3,55349,56644,99,114,59,1,8499,59,1,924,4,9,74,97,99,101,102,111,115,116,117,3271,3276,3283,3306,3422,3427,4120,4126,4137,99,121,59,1,1034,99,117,116,101,59,1,323,4,3,97,101,121,3291,3297,3303,114,111,110,59,1,327,100,105,108,59,1,325,59,1,1053,4,3,103,115,119,3314,3380,3415,97,116,105,118,101,4,3,77,84,86,3327,3340,3365,101,100,105,117,109,83,112,97,99,101,59,1,8203,104,105,4,2,99,110,3348,3357,107,83,112,97,99,101,59,1,8203,83,112,97,99,101,59,1,8203,101,114,121,84,104,105,110,83,112,97,99,101,59,1,8203,116,101,100,4,2,71,76,3389,3405,114,101,97,116,101,114,71,114,101,97,116,101,114,59,1,8811,101,115,115,76,101,115,115,59,1,8810,76,105,110,101,59,1,10,114,59,3,55349,56593,4,4,66,110,112,116,3437,3444,3460,3464,114,101,97,107,59,1,8288,66,114,101,97,107,105,110,103,83,112,97,99,101,59,1,160,102,59,1,8469,4,13,59,67,68,69,71,72,76,78,80,82,83,84,86,3492,3494,3517,3536,3578,3657,3685,3784,3823,3860,3915,4066,4107,1,10988,4,2,111,117,3500,3510,110,103,114,117,101,110,116,59,1,8802,112,67,97,112,59,1,8813,111,117,98,108,101,86,101,114,116,105,99,97,108,66,97,114,59,1,8742,4,3,108,113,120,3544,3552,3571,101,109,101,110,116,59,1,8713,117,97,108,4,2,59,84,3561,3563,1,8800,105,108,100,101,59,3,8770,824,105,115,116,115,59,1,8708,114,101,97,116,101,114,4,7,59,69,70,71,76,83,84,3600,3602,3609,3621,3631,3637,3650,1,8815,113,117,97,108,59,1,8817,117,108,108,69,113,117,97,108,59,3,8807,824,114,101,97,116,101,114,59,3,8811,824,101,115,115,59,1,8825,108,97,110,116,69,113,117,97,108,59,3,10878,824,105,108,100,101,59,1,8821,117,109,112,4,2,68,69,3666,3677,111,119,110,72,117,109,112,59,3,8782,824,113,117,97,108,59,3,8783,824,101,4,2,102,115,3692,3724,116,84,114,105,97,110,103,108,101,4,3,59,66,69,3709,3711,3717,1,8938,97,114,59,3,10703,824,113,117,97,108,59,1,8940,115,4,6,59,69,71,76,83,84,3739,3741,3748,3757,3764,3777,1,8814,113,117,97,108,59,1,8816,114,101,97,116,101,114,59,1,8824,101,115,115,59,3,8810,824,108,97,110,116,69,113,117,97,108,59,3,10877,824,105,108,100,101,59,1,8820,101,115,116,101,100,4,2,71,76,3795,3812,114,101,97,116,101,114,71,114,101,97,116,101,114,59,3,10914,824,101,115,115,76,101,115,115,59,3,10913,824,114,101,99,101,100,101,115,4,3,59,69,83,3838,3840,3848,1,8832,113,117,97,108,59,3,10927,824,108,97,110,116,69,113,117,97,108,59,1,8928,4,2,101,105,3866,3881,118,101,114,115,101,69,108,101,109,101,110,116,59,1,8716,103,104,116,84,114,105,97,110,103,108,101,4,3,59,66,69,3900,3902,3908,1,8939,97,114,59,3,10704,824,113,117,97,108,59,1,8941,4,2,113,117,3921,3973,117,97,114,101,83,117,4,2,98,112,3933,3952,115,101,116,4,2,59,69,3942,3945,3,8847,824,113,117,97,108,59,1,8930,101,114,115,101,116,4,2,59,69,3963,3966,3,8848,824,113,117,97,108,59,1,8931,4,3,98,99,112,3981,4e3,4045,115,101,116,4,2,59,69,3990,3993,3,8834,8402,113,117,97,108,59,1,8840,99,101,101,100,115,4,4,59,69,83,84,4015,4017,4025,4037,1,8833,113,117,97,108,59,3,10928,824,108,97,110,116,69,113,117,97,108,59,1,8929,105,108,100,101,59,3,8831,824,101,114,115,101,116,4,2,59,69,4056,4059,3,8835,8402,113,117,97,108,59,1,8841,105,108,100,101,4,4,59,69,70,84,4080,4082,4089,4100,1,8769,113,117,97,108,59,1,8772,117,108,108,69,113,117,97,108,59,1,8775,105,108,100,101,59,1,8777,101,114,116,105,99,97,108,66,97,114,59,1,8740,99,114,59,3,55349,56489,105,108,100,101,5,209,1,59,4135,1,209,59,1,925,4,14,69,97,99,100,102,103,109,111,112,114,115,116,117,118,4170,4176,4187,4205,4212,4217,4228,4253,4259,4292,4295,4316,4337,4346,108,105,103,59,1,338,99,117,116,101,5,211,1,59,4185,1,211,4,2,105,121,4193,4202,114,99,5,212,1,59,4200,1,212,59,1,1054,98,108,97,99,59,1,336,114,59,3,55349,56594,114,97,118,101,5,210,1,59,4226,1,210,4,3,97,101,105,4236,4241,4246,99,114,59,1,332,103,97,59,1,937,99,114,111,110,59,1,927,112,102,59,3,55349,56646,101,110,67,117,114,108,121,4,2,68,81,4272,4285,111,117,98,108,101,81,117,111,116,101,59,1,8220,117,111,116,101,59,1,8216,59,1,10836,4,2,99,108,4301,4306,114,59,3,55349,56490,97,115,104,5,216,1,59,4314,1,216,105,4,2,108,109,4323,4332,100,101,5,213,1,59,4330,1,213,101,115,59,1,10807,109,108,5,214,1,59,4344,1,214,101,114,4,2,66,80,4354,4380,4,2,97,114,4360,4364,114,59,1,8254,97,99,4,2,101,107,4372,4375,59,1,9182,101,116,59,1,9140,97,114,101,110,116,104,101,115,105,115,59,1,9180,4,9,97,99,102,104,105,108,111,114,115,4413,4422,4426,4431,4435,4438,4448,4471,4561,114,116,105,97,108,68,59,1,8706,121,59,1,1055,114,59,3,55349,56595,105,59,1,934,59,1,928,117,115,77,105,110,117,115,59,1,177,4,2,105,112,4454,4467,110,99,97,114,101,112,108,97,110,101,59,1,8460,102,59,1,8473,4,4,59,101,105,111,4481,4483,4526,4531,1,10939,99,101,100,101,115,4,4,59,69,83,84,4498,4500,4507,4519,1,8826,113,117,97,108,59,1,10927,108,97,110,116,69,113,117,97,108,59,1,8828,105,108,100,101,59,1,8830,109,101,59,1,8243,4,2,100,112,4537,4543,117,99,116,59,1,8719,111,114,116,105,111,110,4,2,59,97,4555,4557,1,8759,108,59,1,8733,4,2,99,105,4567,4572,114,59,3,55349,56491,59,1,936,4,4,85,102,111,115,4585,4594,4599,4604,79,84,5,34,1,59,4592,1,34,114,59,3,55349,56596,112,102,59,1,8474,99,114,59,3,55349,56492,4,12,66,69,97,99,101,102,104,105,111,114,115,117,4636,4642,4650,4681,4704,4763,4767,4771,5047,5069,5081,5094,97,114,114,59,1,10512,71,5,174,1,59,4648,1,174,4,3,99,110,114,4658,4664,4668,117,116,101,59,1,340,103,59,1,10219,114,4,2,59,116,4675,4677,1,8608,108,59,1,10518,4,3,97,101,121,4689,4695,4701,114,111,110,59,1,344,100,105,108,59,1,342,59,1,1056,4,2,59,118,4710,4712,1,8476,101,114,115,101,4,2,69,85,4722,4748,4,2,108,113,4728,4736,101,109,101,110,116,59,1,8715,117,105,108,105,98,114,105,117,109,59,1,8651,112,69,113,117,105,108,105,98,114,105,117,109,59,1,10607,114,59,1,8476,111,59,1,929,103,104,116,4,8,65,67,68,70,84,85,86,97,4792,4840,4849,4905,4912,4972,5022,5040,4,2,110,114,4798,4811,103,108,101,66,114,97,99,107,101,116,59,1,10217,114,111,119,4,3,59,66,76,4822,4824,4829,1,8594,97,114,59,1,8677,101,102,116,65,114,114,111,119,59,1,8644,101,105,108,105,110,103,59,1,8969,111,4,2,117,119,4856,4869,98,108,101,66,114,97,99,107,101,116,59,1,10215,110,4,2,84,86,4876,4887,101,101,86,101,99,116,111,114,59,1,10589,101,99,116,111,114,4,2,59,66,4898,4900,1,8642,97,114,59,1,10581,108,111,111,114,59,1,8971,4,2,101,114,4918,4944,101,4,3,59,65,86,4927,4929,4936,1,8866,114,114,111,119,59,1,8614,101,99,116,111,114,59,1,10587,105,97,110,103,108,101,4,3,59,66,69,4958,4960,4965,1,8883,97,114,59,1,10704,113,117,97,108,59,1,8885,112,4,3,68,84,86,4981,4993,5004,111,119,110,86,101,99,116,111,114,59,1,10575,101,101,86,101,99,116,111,114,59,1,10588,101,99,116,111,114,4,2,59,66,5015,5017,1,8638,97,114,59,1,10580,101,99,116,111,114,4,2,59,66,5033,5035,1,8640,97,114,59,1,10579,114,114,111,119,59,1,8658,4,2,112,117,5053,5057,102,59,1,8477,110,100,73,109,112,108,105,101,115,59,1,10608,105,103,104,116,97,114,114,111,119,59,1,8667,4,2,99,104,5087,5091,114,59,1,8475,59,1,8625,108,101,68,101,108,97,121,101,100,59,1,10740,4,13,72,79,97,99,102,104,105,109,111,113,115,116,117,5134,5150,5157,5164,5198,5203,5259,5265,5277,5283,5374,5380,5385,4,2,67,99,5140,5146,72,99,121,59,1,1065,121,59,1,1064,70,84,99,121,59,1,1068,99,117,116,101,59,1,346,4,5,59,97,101,105,121,5176,5178,5184,5190,5195,1,10940,114,111,110,59,1,352,100,105,108,59,1,350,114,99,59,1,348,59,1,1057,114,59,3,55349,56598,111,114,116,4,4,68,76,82,85,5216,5227,5238,5250,111,119,110,65,114,114,111,119,59,1,8595,101,102,116,65,114,114,111,119,59,1,8592,105,103,104,116,65,114,114,111,119,59,1,8594,112,65,114,114,111,119,59,1,8593,103,109,97,59,1,931,97,108,108,67,105,114,99,108,101,59,1,8728,112,102,59,3,55349,56650,4,2,114,117,5289,5293,116,59,1,8730,97,114,101,4,4,59,73,83,85,5306,5308,5322,5367,1,9633,110,116,101,114,115,101,99,116,105,111,110,59,1,8851,117,4,2,98,112,5329,5347,115,101,116,4,2,59,69,5338,5340,1,8847,113,117,97,108,59,1,8849,101,114,115,101,116,4,2,59,69,5358,5360,1,8848,113,117,97,108,59,1,8850,110,105,111,110,59,1,8852,99,114,59,3,55349,56494,97,114,59,1,8902,4,4,98,99,109,112,5395,5420,5475,5478,4,2,59,115,5401,5403,1,8912,101,116,4,2,59,69,5411,5413,1,8912,113,117,97,108,59,1,8838,4,2,99,104,5426,5468,101,101,100,115,4,4,59,69,83,84,5440,5442,5449,5461,1,8827,113,117,97,108,59,1,10928,108,97,110,116,69,113,117,97,108,59,1,8829,105,108,100,101,59,1,8831,84,104,97,116,59,1,8715,59,1,8721,4,3,59,101,115,5486,5488,5507,1,8913,114,115,101,116,4,2,59,69,5498,5500,1,8835,113,117,97,108,59,1,8839,101,116,59,1,8913,4,11,72,82,83,97,99,102,104,105,111,114,115,5536,5546,5552,5567,5579,5602,5607,5655,5695,5701,5711,79,82,78,5,222,1,59,5544,1,222,65,68,69,59,1,8482,4,2,72,99,5558,5563,99,121,59,1,1035,121,59,1,1062,4,2,98,117,5573,5576,59,1,9,59,1,932,4,3,97,101,121,5587,5593,5599,114,111,110,59,1,356,100,105,108,59,1,354,59,1,1058,114,59,3,55349,56599,4,2,101,105,5613,5631,4,2,114,116,5619,5627,101,102,111,114,101,59,1,8756,97,59,1,920,4,2,99,110,5637,5647,107,83,112,97,99,101,59,3,8287,8202,83,112,97,99,101,59,1,8201,108,100,101,4,4,59,69,70,84,5668,5670,5677,5688,1,8764,113,117,97,108,59,1,8771,117,108,108,69,113,117,97,108,59,1,8773,105,108,100,101,59,1,8776,112,102,59,3,55349,56651,105,112,108,101,68,111,116,59,1,8411,4,2,99,116,5717,5722,114,59,3,55349,56495,114,111,107,59,1,358,4,14,97,98,99,100,102,103,109,110,111,112,114,115,116,117,5758,5789,5805,5823,5830,5835,5846,5852,5921,5937,6089,6095,6101,6108,4,2,99,114,5764,5774,117,116,101,5,218,1,59,5772,1,218,114,4,2,59,111,5781,5783,1,8607,99,105,114,59,1,10569,114,4,2,99,101,5796,5800,121,59,1,1038,118,101,59,1,364,4,2,105,121,5811,5820,114,99,5,219,1,59,5818,1,219,59,1,1059,98,108,97,99,59,1,368,114,59,3,55349,56600,114,97,118,101,5,217,1,59,5844,1,217,97,99,114,59,1,362,4,2,100,105,5858,5905,101,114,4,2,66,80,5866,5892,4,2,97,114,5872,5876,114,59,1,95,97,99,4,2,101,107,5884,5887,59,1,9183,101,116,59,1,9141,97,114,101,110,116,104,101,115,105,115,59,1,9181,111,110,4,2,59,80,5913,5915,1,8899,108,117,115,59,1,8846,4,2,103,112,5927,5932,111,110,59,1,370,102,59,3,55349,56652,4,8,65,68,69,84,97,100,112,115,5955,5985,5996,6009,6026,6033,6044,6075,114,114,111,119,4,3,59,66,68,5967,5969,5974,1,8593,97,114,59,1,10514,111,119,110,65,114,114,111,119,59,1,8645,111,119,110,65,114,114,111,119,59,1,8597,113,117,105,108,105,98,114,105,117,109,59,1,10606,101,101,4,2,59,65,6017,6019,1,8869,114,114,111,119,59,1,8613,114,114,111,119,59,1,8657,111,119,110,97,114,114,111,119,59,1,8661,101,114,4,2,76,82,6052,6063,101,102,116,65,114,114,111,119,59,1,8598,105,103,104,116,65,114,114,111,119,59,1,8599,105,4,2,59,108,6082,6084,1,978,111,110,59,1,933,105,110,103,59,1,366,99,114,59,3,55349,56496,105,108,100,101,59,1,360,109,108,5,220,1,59,6115,1,220,4,9,68,98,99,100,101,102,111,115,118,6137,6143,6148,6152,6166,6250,6255,6261,6267,97,115,104,59,1,8875,97,114,59,1,10987,121,59,1,1042,97,115,104,4,2,59,108,6161,6163,1,8873,59,1,10982,4,2,101,114,6172,6175,59,1,8897,4,3,98,116,121,6183,6188,6238,97,114,59,1,8214,4,2,59,105,6194,6196,1,8214,99,97,108,4,4,66,76,83,84,6209,6214,6220,6231,97,114,59,1,8739,105,110,101,59,1,124,101,112,97,114,97,116,111,114,59,1,10072,105,108,100,101,59,1,8768,84,104,105,110,83,112,97,99,101,59,1,8202,114,59,3,55349,56601,112,102,59,3,55349,56653,99,114,59,3,55349,56497,100,97,115,104,59,1,8874,4,5,99,101,102,111,115,6286,6292,6298,6303,6309,105,114,99,59,1,372,100,103,101,59,1,8896,114,59,3,55349,56602,112,102,59,3,55349,56654,99,114,59,3,55349,56498,4,4,102,105,111,115,6325,6330,6333,6339,114,59,3,55349,56603,59,1,926,112,102,59,3,55349,56655,99,114,59,3,55349,56499,4,9,65,73,85,97,99,102,111,115,117,6365,6370,6375,6380,6391,6405,6410,6416,6422,99,121,59,1,1071,99,121,59,1,1031,99,121,59,1,1070,99,117,116,101,5,221,1,59,6389,1,221,4,2,105,121,6397,6402,114,99,59,1,374,59,1,1067,114,59,3,55349,56604,112,102,59,3,55349,56656,99,114,59,3,55349,56500,109,108,59,1,376,4,8,72,97,99,100,101,102,111,115,6445,6450,6457,6472,6477,6501,6505,6510,99,121,59,1,1046,99,117,116,101,59,1,377,4,2,97,121,6463,6469,114,111,110,59,1,381,59,1,1047,111,116,59,1,379,4,2,114,116,6483,6497,111,87,105,100,116,104,83,112,97,99,101,59,1,8203,97,59,1,918,114,59,1,8488,112,102,59,1,8484,99,114,59,3,55349,56501,4,16,97,98,99,101,102,103,108,109,110,111,112,114,115,116,117,119,6550,6561,6568,6612,6622,6634,6645,6672,6699,6854,6870,6923,6933,6963,6974,6983,99,117,116,101,5,225,1,59,6559,1,225,114,101,118,101,59,1,259,4,6,59,69,100,105,117,121,6582,6584,6588,6591,6600,6609,1,8766,59,3,8766,819,59,1,8767,114,99,5,226,1,59,6598,1,226,116,101,5,180,1,59,6607,1,180,59,1,1072,108,105,103,5,230,1,59,6620,1,230,4,2,59,114,6628,6630,1,8289,59,3,55349,56606,114,97,118,101,5,224,1,59,6643,1,224,4,2,101,112,6651,6667,4,2,102,112,6657,6663,115,121,109,59,1,8501,104,59,1,8501,104,97,59,1,945,4,2,97,112,6678,6692,4,2,99,108,6684,6688,114,59,1,257,103,59,1,10815,5,38,1,59,6697,1,38,4,2,100,103,6705,6737,4,5,59,97,100,115,118,6717,6719,6724,6727,6734,1,8743,110,100,59,1,10837,59,1,10844,108,111,112,101,59,1,10840,59,1,10842,4,7,59,101,108,109,114,115,122,6753,6755,6758,6762,6814,6835,6848,1,8736,59,1,10660,101,59,1,8736,115,100,4,2,59,97,6770,6772,1,8737,4,8,97,98,99,100,101,102,103,104,6790,6793,6796,6799,6802,6805,6808,6811,59,1,10664,59,1,10665,59,1,10666,59,1,10667,59,1,10668,59,1,10669,59,1,10670,59,1,10671,116,4,2,59,118,6821,6823,1,8735,98,4,2,59,100,6830,6832,1,8894,59,1,10653,4,2,112,116,6841,6845,104,59,1,8738,59,1,197,97,114,114,59,1,9084,4,2,103,112,6860,6865,111,110,59,1,261,102,59,3,55349,56658,4,7,59,69,97,101,105,111,112,6886,6888,6891,6897,6900,6904,6908,1,8776,59,1,10864,99,105,114,59,1,10863,59,1,8778,100,59,1,8779,115,59,1,39,114,111,120,4,2,59,101,6917,6919,1,8776,113,59,1,8778,105,110,103,5,229,1,59,6931,1,229,4,3,99,116,121,6941,6946,6949,114,59,3,55349,56502,59,1,42,109,112,4,2,59,101,6957,6959,1,8776,113,59,1,8781,105,108,100,101,5,227,1,59,6972,1,227,109,108,5,228,1,59,6981,1,228,4,2,99,105,6989,6997,111,110,105,110,116,59,1,8755,110,116,59,1,10769,4,16,78,97,98,99,100,101,102,105,107,108,110,111,112,114,115,117,7036,7041,7119,7135,7149,7155,7219,7224,7347,7354,7463,7489,7786,7793,7814,7866,111,116,59,1,10989,4,2,99,114,7047,7094,107,4,4,99,101,112,115,7058,7064,7073,7080,111,110,103,59,1,8780,112,115,105,108,111,110,59,1,1014,114,105,109,101,59,1,8245,105,109,4,2,59,101,7088,7090,1,8765,113,59,1,8909,4,2,118,119,7100,7105,101,101,59,1,8893,101,100,4,2,59,103,7113,7115,1,8965,101,59,1,8965,114,107,4,2,59,116,7127,7129,1,9141,98,114,107,59,1,9142,4,2,111,121,7141,7146,110,103,59,1,8780,59,1,1073,113,117,111,59,1,8222,4,5,99,109,112,114,116,7167,7181,7188,7193,7199,97,117,115,4,2,59,101,7176,7178,1,8757,59,1,8757,112,116,121,118,59,1,10672,115,105,59,1,1014,110,111,117,59,1,8492,4,3,97,104,119,7207,7210,7213,59,1,946,59,1,8502,101,101,110,59,1,8812,114,59,3,55349,56607,103,4,7,99,111,115,116,117,118,119,7241,7262,7288,7305,7328,7335,7340,4,3,97,105,117,7249,7253,7258,112,59,1,8898,114,99,59,1,9711,112,59,1,8899,4,3,100,112,116,7270,7275,7281,111,116,59,1,10752,108,117,115,59,1,10753,105,109,101,115,59,1,10754,4,2,113,116,7294,7300,99,117,112,59,1,10758,97,114,59,1,9733,114,105,97,110,103,108,101,4,2,100,117,7318,7324,111,119,110,59,1,9661,112,59,1,9651,112,108,117,115,59,1,10756,101,101,59,1,8897,101,100,103,101,59,1,8896,97,114,111,119,59,1,10509,4,3,97,107,111,7362,7436,7458,4,2,99,110,7368,7432,107,4,3,108,115,116,7377,7386,7394,111,122,101,110,103,101,59,1,10731,113,117,97,114,101,59,1,9642,114,105,97,110,103,108,101,4,4,59,100,108,114,7411,7413,7419,7425,1,9652,111,119,110,59,1,9662,101,102,116,59,1,9666,105,103,104,116,59,1,9656,107,59,1,9251,4,2,49,51,7442,7454,4,2,50,52,7448,7451,59,1,9618,59,1,9617,52,59,1,9619,99,107,59,1,9608,4,2,101,111,7469,7485,4,2,59,113,7475,7478,3,61,8421,117,105,118,59,3,8801,8421,116,59,1,8976,4,4,112,116,119,120,7499,7504,7517,7523,102,59,3,55349,56659,4,2,59,116,7510,7512,1,8869,111,109,59,1,8869,116,105,101,59,1,8904,4,12,68,72,85,86,98,100,104,109,112,116,117,118,7549,7571,7597,7619,7655,7660,7682,7708,7715,7721,7728,7750,4,4,76,82,108,114,7559,7562,7565,7568,59,1,9559,59,1,9556,59,1,9558,59,1,9555,4,5,59,68,85,100,117,7583,7585,7588,7591,7594,1,9552,59,1,9574,59,1,9577,59,1,9572,59,1,9575,4,4,76,82,108,114,7607,7610,7613,7616,59,1,9565,59,1,9562,59,1,9564,59,1,9561,4,7,59,72,76,82,104,108,114,7635,7637,7640,7643,7646,7649,7652,1,9553,59,1,9580,59,1,9571,59,1,9568,59,1,9579,59,1,9570,59,1,9567,111,120,59,1,10697,4,4,76,82,108,114,7670,7673,7676,7679,59,1,9557,59,1,9554,59,1,9488,59,1,9484,4,5,59,68,85,100,117,7694,7696,7699,7702,7705,1,9472,59,1,9573,59,1,9576,59,1,9516,59,1,9524,105,110,117,115,59,1,8863,108,117,115,59,1,8862,105,109,101,115,59,1,8864,4,4,76,82,108,114,7738,7741,7744,7747,59,1,9563,59,1,9560,59,1,9496,59,1,9492,4,7,59,72,76,82,104,108,114,7766,7768,7771,7774,7777,7780,7783,1,9474,59,1,9578,59,1,9569,59,1,9566,59,1,9532,59,1,9508,59,1,9500,114,105,109,101,59,1,8245,4,2,101,118,7799,7804,118,101,59,1,728,98,97,114,5,166,1,59,7812,1,166,4,4,99,101,105,111,7824,7829,7834,7846,114,59,3,55349,56503,109,105,59,1,8271,109,4,2,59,101,7841,7843,1,8765,59,1,8909,108,4,3,59,98,104,7855,7857,7860,1,92,59,1,10693,115,117,98,59,1,10184,4,2,108,109,7872,7885,108,4,2,59,101,7879,7881,1,8226,116,59,1,8226,112,4,3,59,69,101,7894,7896,7899,1,8782,59,1,10926,4,2,59,113,7905,7907,1,8783,59,1,8783,4,15,97,99,100,101,102,104,105,108,111,114,115,116,117,119,121,7942,8021,8075,8080,8121,8126,8157,8279,8295,8430,8446,8485,8491,8707,8726,4,3,99,112,114,7950,7956,8007,117,116,101,59,1,263,4,6,59,97,98,99,100,115,7970,7972,7977,7984,7998,8003,1,8745,110,100,59,1,10820,114,99,117,112,59,1,10825,4,2,97,117,7990,7994,112,59,1,10827,112,59,1,10823,111,116,59,1,10816,59,3,8745,65024,4,2,101,111,8013,8017,116,59,1,8257,110,59,1,711,4,4,97,101,105,117,8031,8046,8056,8061,4,2,112,114,8037,8041,115,59,1,10829,111,110,59,1,269,100,105,108,5,231,1,59,8054,1,231,114,99,59,1,265,112,115,4,2,59,115,8069,8071,1,10828,109,59,1,10832,111,116,59,1,267,4,3,100,109,110,8088,8097,8104,105,108,5,184,1,59,8095,1,184,112,116,121,118,59,1,10674,116,5,162,2,59,101,8112,8114,1,162,114,100,111,116,59,1,183,114,59,3,55349,56608,4,3,99,101,105,8134,8138,8154,121,59,1,1095,99,107,4,2,59,109,8146,8148,1,10003,97,114,107,59,1,10003,59,1,967,114,4,7,59,69,99,101,102,109,115,8174,8176,8179,8258,8261,8268,8273,1,9675,59,1,10691,4,3,59,101,108,8187,8189,8193,1,710,113,59,1,8791,101,4,2,97,100,8200,8223,114,114,111,119,4,2,108,114,8210,8216,101,102,116,59,1,8634,105,103,104,116,59,1,8635,4,5,82,83,97,99,100,8235,8238,8241,8246,8252,59,1,174,59,1,9416,115,116,59,1,8859,105,114,99,59,1,8858,97,115,104,59,1,8861,59,1,8791,110,105,110,116,59,1,10768,105,100,59,1,10991,99,105,114,59,1,10690,117,98,115,4,2,59,117,8288,8290,1,9827,105,116,59,1,9827,4,4,108,109,110,112,8305,8326,8376,8400,111,110,4,2,59,101,8313,8315,1,58,4,2,59,113,8321,8323,1,8788,59,1,8788,4,2,109,112,8332,8344,97,4,2,59,116,8339,8341,1,44,59,1,64,4,3,59,102,108,8352,8354,8358,1,8705,110,59,1,8728,101,4,2,109,120,8365,8371,101,110,116,59,1,8705,101,115,59,1,8450,4,2,103,105,8382,8395,4,2,59,100,8388,8390,1,8773,111,116,59,1,10861,110,116,59,1,8750,4,3,102,114,121,8408,8412,8417,59,3,55349,56660,111,100,59,1,8720,5,169,2,59,115,8424,8426,1,169,114,59,1,8471,4,2,97,111,8436,8441,114,114,59,1,8629,115,115,59,1,10007,4,2,99,117,8452,8457,114,59,3,55349,56504,4,2,98,112,8463,8474,4,2,59,101,8469,8471,1,10959,59,1,10961,4,2,59,101,8480,8482,1,10960,59,1,10962,100,111,116,59,1,8943,4,7,100,101,108,112,114,118,119,8507,8522,8536,8550,8600,8697,8702,97,114,114,4,2,108,114,8516,8519,59,1,10552,59,1,10549,4,2,112,115,8528,8532,114,59,1,8926,99,59,1,8927,97,114,114,4,2,59,112,8545,8547,1,8630,59,1,10557,4,6,59,98,99,100,111,115,8564,8566,8573,8587,8592,8596,1,8746,114,99,97,112,59,1,10824,4,2,97,117,8579,8583,112,59,1,10822,112,59,1,10826,111,116,59,1,8845,114,59,1,10821,59,3,8746,65024,4,4,97,108,114,118,8610,8623,8663,8672,114,114,4,2,59,109,8618,8620,1,8631,59,1,10556,121,4,3,101,118,119,8632,8651,8656,113,4,2,112,115,8639,8645,114,101,99,59,1,8926,117,99,99,59,1,8927,101,101,59,1,8910,101,100,103,101,59,1,8911,101,110,5,164,1,59,8670,1,164,101,97,114,114,111,119,4,2,108,114,8684,8690,101,102,116,59,1,8630,105,103,104,116,59,1,8631,101,101,59,1,8910,101,100,59,1,8911,4,2,99,105,8713,8721,111,110,105,110,116,59,1,8754,110,116,59,1,8753,108,99,116,121,59,1,9005,4,19,65,72,97,98,99,100,101,102,104,105,106,108,111,114,115,116,117,119,122,8773,8778,8783,8821,8839,8854,8887,8914,8930,8944,9036,9041,9058,9197,9227,9258,9281,9297,9305,114,114,59,1,8659,97,114,59,1,10597,4,4,103,108,114,115,8793,8799,8805,8809,103,101,114,59,1,8224,101,116,104,59,1,8504,114,59,1,8595,104,4,2,59,118,8816,8818,1,8208,59,1,8867,4,2,107,108,8827,8834,97,114,111,119,59,1,10511,97,99,59,1,733,4,2,97,121,8845,8851,114,111,110,59,1,271,59,1,1076,4,3,59,97,111,8862,8864,8880,1,8518,4,2,103,114,8870,8876,103,101,114,59,1,8225,114,59,1,8650,116,115,101,113,59,1,10871,4,3,103,108,109,8895,8902,8907,5,176,1,59,8900,1,176,116,97,59,1,948,112,116,121,118,59,1,10673,4,2,105,114,8920,8926,115,104,116,59,1,10623,59,3,55349,56609,97,114,4,2,108,114,8938,8941,59,1,8643,59,1,8642,4,5,97,101,103,115,118,8956,8986,8989,8996,9001,109,4,3,59,111,115,8965,8967,8983,1,8900,110,100,4,2,59,115,8975,8977,1,8900,117,105,116,59,1,9830,59,1,9830,59,1,168,97,109,109,97,59,1,989,105,110,59,1,8946,4,3,59,105,111,9009,9011,9031,1,247,100,101,5,247,2,59,111,9020,9022,1,247,110,116,105,109,101,115,59,1,8903,110,120,59,1,8903,99,121,59,1,1106,99,4,2,111,114,9048,9053,114,110,59,1,8990,111,112,59,1,8973,4,5,108,112,116,117,119,9070,9076,9081,9130,9144,108,97,114,59,1,36,102,59,3,55349,56661,4,5,59,101,109,112,115,9093,9095,9109,9116,9122,1,729,113,4,2,59,100,9102,9104,1,8784,111,116,59,1,8785,105,110,117,115,59,1,8760,108,117,115,59,1,8724,113,117,97,114,101,59,1,8865,98,108,101,98,97,114,119,101,100,103,101,59,1,8966,110,4,3,97,100,104,9153,9160,9172,114,114,111,119,59,1,8595,111,119,110,97,114,114,111,119,115,59,1,8650,97,114,112,111,111,110,4,2,108,114,9184,9190,101,102,116,59,1,8643,105,103,104,116,59,1,8642,4,2,98,99,9203,9211,107,97,114,111,119,59,1,10512,4,2,111,114,9217,9222,114,110,59,1,8991,111,112,59,1,8972,4,3,99,111,116,9235,9248,9252,4,2,114,121,9241,9245,59,3,55349,56505,59,1,1109,108,59,1,10742,114,111,107,59,1,273,4,2,100,114,9264,9269,111,116,59,1,8945,105,4,2,59,102,9276,9278,1,9663,59,1,9662,4,2,97,104,9287,9292,114,114,59,1,8693,97,114,59,1,10607,97,110,103,108,101,59,1,10662,4,2,99,105,9311,9315,121,59,1,1119,103,114,97,114,114,59,1,10239,4,18,68,97,99,100,101,102,103,108,109,110,111,112,113,114,115,116,117,120,9361,9376,9398,9439,9444,9447,9462,9495,9531,9585,9598,9614,9659,9755,9771,9792,9808,9826,4,2,68,111,9367,9372,111,116,59,1,10871,116,59,1,8785,4,2,99,115,9382,9392,117,116,101,5,233,1,59,9390,1,233,116,101,114,59,1,10862,4,4,97,105,111,121,9408,9414,9430,9436,114,111,110,59,1,283,114,4,2,59,99,9421,9423,1,8790,5,234,1,59,9428,1,234,108,111,110,59,1,8789,59,1,1101,111,116,59,1,279,59,1,8519,4,2,68,114,9453,9458,111,116,59,1,8786,59,3,55349,56610,4,3,59,114,115,9470,9472,9482,1,10906,97,118,101,5,232,1,59,9480,1,232,4,2,59,100,9488,9490,1,10902,111,116,59,1,10904,4,4,59,105,108,115,9505,9507,9515,9518,1,10905,110,116,101,114,115,59,1,9191,59,1,8467,4,2,59,100,9524,9526,1,10901,111,116,59,1,10903,4,3,97,112,115,9539,9544,9564,99,114,59,1,275,116,121,4,3,59,115,118,9554,9556,9561,1,8709,101,116,59,1,8709,59,1,8709,112,4,2,49,59,9571,9583,4,2,51,52,9577,9580,59,1,8196,59,1,8197,1,8195,4,2,103,115,9591,9594,59,1,331,112,59,1,8194,4,2,103,112,9604,9609,111,110,59,1,281,102,59,3,55349,56662,4,3,97,108,115,9622,9635,9640,114,4,2,59,115,9629,9631,1,8917,108,59,1,10723,117,115,59,1,10865,105,4,3,59,108,118,9649,9651,9656,1,949,111,110,59,1,949,59,1,1013,4,4,99,115,117,118,9669,9686,9716,9747,4,2,105,111,9675,9680,114,99,59,1,8790,108,111,110,59,1,8789,4,2,105,108,9692,9696,109,59,1,8770,97,110,116,4,2,103,108,9705,9710,116,114,59,1,10902,101,115,115,59,1,10901,4,3,97,101,105,9724,9729,9734,108,115,59,1,61,115,116,59,1,8799,118,4,2,59,68,9741,9743,1,8801,68,59,1,10872,112,97,114,115,108,59,1,10725,4,2,68,97,9761,9766,111,116,59,1,8787,114,114,59,1,10609,4,3,99,100,105,9779,9783,9788,114,59,1,8495,111,116,59,1,8784,109,59,1,8770,4,2,97,104,9798,9801,59,1,951,5,240,1,59,9806,1,240,4,2,109,114,9814,9822,108,5,235,1,59,9820,1,235,111,59,1,8364,4,3,99,105,112,9834,9838,9843,108,59,1,33,115,116,59,1,8707,4,2,101,111,9849,9859,99,116,97,116,105,111,110,59,1,8496,110,101,110,116,105,97,108,101,59,1,8519,4,12,97,99,101,102,105,106,108,110,111,112,114,115,9896,9910,9914,9921,9954,9960,9967,9989,9994,10027,10036,10164,108,108,105,110,103,100,111,116,115,101,113,59,1,8786,121,59,1,1092,109,97,108,101,59,1,9792,4,3,105,108,114,9929,9935,9950,108,105,103,59,1,64259,4,2,105,108,9941,9945,103,59,1,64256,105,103,59,1,64260,59,3,55349,56611,108,105,103,59,1,64257,108,105,103,59,3,102,106,4,3,97,108,116,9975,9979,9984,116,59,1,9837,105,103,59,1,64258,110,115,59,1,9649,111,102,59,1,402,4,2,112,114,1e4,10005,102,59,3,55349,56663,4,2,97,107,10011,10016,108,108,59,1,8704,4,2,59,118,10022,10024,1,8916,59,1,10969,97,114,116,105,110,116,59,1,10765,4,2,97,111,10042,10159,4,2,99,115,10048,10155,4,6,49,50,51,52,53,55,10062,10102,10114,10135,10139,10151,4,6,50,51,52,53,54,56,10076,10083,10086,10093,10096,10099,5,189,1,59,10081,1,189,59,1,8531,5,188,1,59,10091,1,188,59,1,8533,59,1,8537,59,1,8539,4,2,51,53,10108,10111,59,1,8532,59,1,8534,4,3,52,53,56,10122,10129,10132,5,190,1,59,10127,1,190,59,1,8535,59,1,8540,53,59,1,8536,4,2,54,56,10145,10148,59,1,8538,59,1,8541,56,59,1,8542,108,59,1,8260,119,110,59,1,8994,99,114,59,3,55349,56507,4,17,69,97,98,99,100,101,102,103,105,106,108,110,111,114,115,116,118,10206,10217,10247,10254,10268,10273,10358,10363,10374,10380,10385,10406,10458,10464,10470,10497,10610,4,2,59,108,10212,10214,1,8807,59,1,10892,4,3,99,109,112,10225,10231,10244,117,116,101,59,1,501,109,97,4,2,59,100,10239,10241,1,947,59,1,989,59,1,10886,114,101,118,101,59,1,287,4,2,105,121,10260,10265,114,99,59,1,285,59,1,1075,111,116,59,1,289,4,4,59,108,113,115,10283,10285,10288,10308,1,8805,59,1,8923,4,3,59,113,115,10296,10298,10301,1,8805,59,1,8807,108,97,110,116,59,1,10878,4,4,59,99,100,108,10318,10320,10324,10345,1,10878,99,59,1,10921,111,116,4,2,59,111,10332,10334,1,10880,4,2,59,108,10340,10342,1,10882,59,1,10884,4,2,59,101,10351,10354,3,8923,65024,115,59,1,10900,114,59,3,55349,56612,4,2,59,103,10369,10371,1,8811,59,1,8921,109,101,108,59,1,8503,99,121,59,1,1107,4,4,59,69,97,106,10395,10397,10400,10403,1,8823,59,1,10898,59,1,10917,59,1,10916,4,4,69,97,101,115,10416,10419,10434,10453,59,1,8809,112,4,2,59,112,10426,10428,1,10890,114,111,120,59,1,10890,4,2,59,113,10440,10442,1,10888,4,2,59,113,10448,10450,1,10888,59,1,8809,105,109,59,1,8935,112,102,59,3,55349,56664,97,118,101,59,1,96,4,2,99,105,10476,10480,114,59,1,8458,109,4,3,59,101,108,10489,10491,10494,1,8819,59,1,10894,59,1,10896,5,62,6,59,99,100,108,113,114,10512,10514,10527,10532,10538,10545,1,62,4,2,99,105,10520,10523,59,1,10919,114,59,1,10874,111,116,59,1,8919,80,97,114,59,1,10645,117,101,115,116,59,1,10876,4,5,97,100,101,108,115,10557,10574,10579,10599,10605,4,2,112,114,10563,10570,112,114,111,120,59,1,10886,114,59,1,10616,111,116,59,1,8919,113,4,2,108,113,10586,10592,101,115,115,59,1,8923,108,101,115,115,59,1,10892,101,115,115,59,1,8823,105,109,59,1,8819,4,2,101,110,10616,10626,114,116,110,101,113,113,59,3,8809,65024,69,59,3,8809,65024,4,10,65,97,98,99,101,102,107,111,115,121,10653,10658,10713,10718,10724,10760,10765,10786,10850,10875,114,114,59,1,8660,4,4,105,108,109,114,10668,10674,10678,10684,114,115,112,59,1,8202,102,59,1,189,105,108,116,59,1,8459,4,2,100,114,10690,10695,99,121,59,1,1098,4,3,59,99,119,10703,10705,10710,1,8596,105,114,59,1,10568,59,1,8621,97,114,59,1,8463,105,114,99,59,1,293,4,3,97,108,114,10732,10748,10754,114,116,115,4,2,59,117,10741,10743,1,9829,105,116,59,1,9829,108,105,112,59,1,8230,99,111,110,59,1,8889,114,59,3,55349,56613,115,4,2,101,119,10772,10779,97,114,111,119,59,1,10533,97,114,111,119,59,1,10534,4,5,97,109,111,112,114,10798,10803,10809,10839,10844,114,114,59,1,8703,116,104,116,59,1,8763,107,4,2,108,114,10816,10827,101,102,116,97,114,114,111,119,59,1,8617,105,103,104,116,97,114,114,111,119,59,1,8618,102,59,3,55349,56665,98,97,114,59,1,8213,4,3,99,108,116,10858,10863,10869,114,59,3,55349,56509,97,115,104,59,1,8463,114,111,107,59,1,295,4,2,98,112,10881,10887,117,108,108,59,1,8259,104,101,110,59,1,8208,4,15,97,99,101,102,103,105,106,109,110,111,112,113,115,116,117,10925,10936,10958,10977,10990,11001,11039,11045,11101,11192,11220,11226,11237,11285,11299,99,117,116,101,5,237,1,59,10934,1,237,4,3,59,105,121,10944,10946,10955,1,8291,114,99,5,238,1,59,10953,1,238,59,1,1080,4,2,99,120,10964,10968,121,59,1,1077,99,108,5,161,1,59,10975,1,161,4,2,102,114,10983,10986,59,1,8660,59,3,55349,56614,114,97,118,101,5,236,1,59,10999,1,236,4,4,59,105,110,111,11011,11013,11028,11034,1,8520,4,2,105,110,11019,11024,110,116,59,1,10764,116,59,1,8749,102,105,110,59,1,10716,116,97,59,1,8489,108,105,103,59,1,307,4,3,97,111,112,11053,11092,11096,4,3,99,103,116,11061,11065,11088,114,59,1,299,4,3,101,108,112,11073,11076,11082,59,1,8465,105,110,101,59,1,8464,97,114,116,59,1,8465,104,59,1,305,102,59,1,8887,101,100,59,1,437,4,5,59,99,102,111,116,11113,11115,11121,11136,11142,1,8712,97,114,101,59,1,8453,105,110,4,2,59,116,11129,11131,1,8734,105,101,59,1,10717,100,111,116,59,1,305,4,5,59,99,101,108,112,11154,11156,11161,11179,11186,1,8747,97,108,59,1,8890,4,2,103,114,11167,11173,101,114,115,59,1,8484,99,97,108,59,1,8890,97,114,104,107,59,1,10775,114,111,100,59,1,10812,4,4,99,103,112,116,11202,11206,11211,11216,121,59,1,1105,111,110,59,1,303,102,59,3,55349,56666,97,59,1,953,114,111,100,59,1,10812,117,101,115,116,5,191,1,59,11235,1,191,4,2,99,105,11243,11248,114,59,3,55349,56510,110,4,5,59,69,100,115,118,11261,11263,11266,11271,11282,1,8712,59,1,8953,111,116,59,1,8949,4,2,59,118,11277,11279,1,8948,59,1,8947,59,1,8712,4,2,59,105,11291,11293,1,8290,108,100,101,59,1,297,4,2,107,109,11305,11310,99,121,59,1,1110,108,5,239,1,59,11316,1,239,4,6,99,102,109,111,115,117,11332,11346,11351,11357,11363,11380,4,2,105,121,11338,11343,114,99,59,1,309,59,1,1081,114,59,3,55349,56615,97,116,104,59,1,567,112,102,59,3,55349,56667,4,2,99,101,11369,11374,114,59,3,55349,56511,114,99,121,59,1,1112,107,99,121,59,1,1108,4,8,97,99,102,103,104,106,111,115,11404,11418,11433,11438,11445,11450,11455,11461,112,112,97,4,2,59,118,11413,11415,1,954,59,1,1008,4,2,101,121,11424,11430,100,105,108,59,1,311,59,1,1082,114,59,3,55349,56616,114,101,101,110,59,1,312,99,121,59,1,1093,99,121,59,1,1116,112,102,59,3,55349,56668,99,114,59,3,55349,56512,4,23,65,66,69,72,97,98,99,100,101,102,103,104,106,108,109,110,111,112,114,115,116,117,118,11515,11538,11544,11555,11560,11721,11780,11818,11868,12136,12160,12171,12203,12208,12246,12275,12327,12509,12523,12569,12641,12732,12752,4,3,97,114,116,11523,11528,11532,114,114,59,1,8666,114,59,1,8656,97,105,108,59,1,10523,97,114,114,59,1,10510,4,2,59,103,11550,11552,1,8806,59,1,10891,97,114,59,1,10594,4,9,99,101,103,109,110,112,113,114,116,11580,11586,11594,11600,11606,11624,11627,11636,11694,117,116,101,59,1,314,109,112,116,121,118,59,1,10676,114,97,110,59,1,8466,98,100,97,59,1,955,103,4,3,59,100,108,11615,11617,11620,1,10216,59,1,10641,101,59,1,10216,59,1,10885,117,111,5,171,1,59,11634,1,171,114,4,8,59,98,102,104,108,112,115,116,11655,11657,11669,11673,11677,11681,11685,11690,1,8592,4,2,59,102,11663,11665,1,8676,115,59,1,10527,115,59,1,10525,107,59,1,8617,112,59,1,8619,108,59,1,10553,105,109,59,1,10611,108,59,1,8610,4,3,59,97,101,11702,11704,11709,1,10923,105,108,59,1,10521,4,2,59,115,11715,11717,1,10925,59,3,10925,65024,4,3,97,98,114,11729,11734,11739,114,114,59,1,10508,114,107,59,1,10098,4,2,97,107,11745,11758,99,4,2,101,107,11752,11755,59,1,123,59,1,91,4,2,101,115,11764,11767,59,1,10635,108,4,2,100,117,11774,11777,59,1,10639,59,1,10637,4,4,97,101,117,121,11790,11796,11811,11815,114,111,110,59,1,318,4,2,100,105,11802,11807,105,108,59,1,316,108,59,1,8968,98,59,1,123,59,1,1083,4,4,99,113,114,115,11828,11832,11845,11864,97,59,1,10550,117,111,4,2,59,114,11840,11842,1,8220,59,1,8222,4,2,100,117,11851,11857,104,97,114,59,1,10599,115,104,97,114,59,1,10571,104,59,1,8626,4,5,59,102,103,113,115,11880,11882,12008,12011,12031,1,8804,116,4,5,97,104,108,114,116,11895,11913,11935,11947,11996,114,114,111,119,4,2,59,116,11905,11907,1,8592,97,105,108,59,1,8610,97,114,112,111,111,110,4,2,100,117,11925,11931,111,119,110,59,1,8637,112,59,1,8636,101,102,116,97,114,114,111,119,115,59,1,8647,105,103,104,116,4,3,97,104,115,11959,11974,11984,114,114,111,119,4,2,59,115,11969,11971,1,8596,59,1,8646,97,114,112,111,111,110,115,59,1,8651,113,117,105,103,97,114,114,111,119,59,1,8621,104,114,101,101,116,105,109,101,115,59,1,8907,59,1,8922,4,3,59,113,115,12019,12021,12024,1,8804,59,1,8806,108,97,110,116,59,1,10877,4,5,59,99,100,103,115,12043,12045,12049,12070,12083,1,10877,99,59,1,10920,111,116,4,2,59,111,12057,12059,1,10879,4,2,59,114,12065,12067,1,10881,59,1,10883,4,2,59,101,12076,12079,3,8922,65024,115,59,1,10899,4,5,97,100,101,103,115,12095,12103,12108,12126,12131,112,112,114,111,120,59,1,10885,111,116,59,1,8918,113,4,2,103,113,12115,12120,116,114,59,1,8922,103,116,114,59,1,10891,116,114,59,1,8822,105,109,59,1,8818,4,3,105,108,114,12144,12150,12156,115,104,116,59,1,10620,111,111,114,59,1,8970,59,3,55349,56617,4,2,59,69,12166,12168,1,8822,59,1,10897,4,2,97,98,12177,12198,114,4,2,100,117,12184,12187,59,1,8637,4,2,59,108,12193,12195,1,8636,59,1,10602,108,107,59,1,9604,99,121,59,1,1113,4,5,59,97,99,104,116,12220,12222,12227,12235,12241,1,8810,114,114,59,1,8647,111,114,110,101,114,59,1,8990,97,114,100,59,1,10603,114,105,59,1,9722,4,2,105,111,12252,12258,100,111,116,59,1,320,117,115,116,4,2,59,97,12267,12269,1,9136,99,104,101,59,1,9136,4,4,69,97,101,115,12285,12288,12303,12322,59,1,8808,112,4,2,59,112,12295,12297,1,10889,114,111,120,59,1,10889,4,2,59,113,12309,12311,1,10887,4,2,59,113,12317,12319,1,10887,59,1,8808,105,109,59,1,8934,4,8,97,98,110,111,112,116,119,122,12345,12359,12364,12421,12446,12467,12474,12490,4,2,110,114,12351,12355,103,59,1,10220,114,59,1,8701,114,107,59,1,10214,103,4,3,108,109,114,12373,12401,12409,101,102,116,4,2,97,114,12382,12389,114,114,111,119,59,1,10229,105,103,104,116,97,114,114,111,119,59,1,10231,97,112,115,116,111,59,1,10236,105,103,104,116,97,114,114,111,119,59,1,10230,112,97,114,114,111,119,4,2,108,114,12433,12439,101,102,116,59,1,8619,105,103,104,116,59,1,8620,4,3,97,102,108,12454,12458,12462,114,59,1,10629,59,3,55349,56669,117,115,59,1,10797,105,109,101,115,59,1,10804,4,2,97,98,12480,12485,115,116,59,1,8727,97,114,59,1,95,4,3,59,101,102,12498,12500,12506,1,9674,110,103,101,59,1,9674,59,1,10731,97,114,4,2,59,108,12517,12519,1,40,116,59,1,10643,4,5,97,99,104,109,116,12535,12540,12548,12561,12564,114,114,59,1,8646,111,114,110,101,114,59,1,8991,97,114,4,2,59,100,12556,12558,1,8651,59,1,10605,59,1,8206,114,105,59,1,8895,4,6,97,99,104,105,113,116,12583,12589,12594,12597,12614,12635,113,117,111,59,1,8249,114,59,3,55349,56513,59,1,8624,109,4,3,59,101,103,12606,12608,12611,1,8818,59,1,10893,59,1,10895,4,2,98,117,12620,12623,59,1,91,111,4,2,59,114,12630,12632,1,8216,59,1,8218,114,111,107,59,1,322,5,60,8,59,99,100,104,105,108,113,114,12660,12662,12675,12680,12686,12692,12698,12705,1,60,4,2,99,105,12668,12671,59,1,10918,114,59,1,10873,111,116,59,1,8918,114,101,101,59,1,8907,109,101,115,59,1,8905,97,114,114,59,1,10614,117,101,115,116,59,1,10875,4,2,80,105,12711,12716,97,114,59,1,10646,4,3,59,101,102,12724,12726,12729,1,9667,59,1,8884,59,1,9666,114,4,2,100,117,12739,12746,115,104,97,114,59,1,10570,104,97,114,59,1,10598,4,2,101,110,12758,12768,114,116,110,101,113,113,59,3,8808,65024,69,59,3,8808,65024,4,14,68,97,99,100,101,102,104,105,108,110,111,112,115,117,12803,12809,12893,12908,12914,12928,12933,12937,13011,13025,13032,13049,13052,13069,68,111,116,59,1,8762,4,4,99,108,112,114,12819,12827,12849,12887,114,5,175,1,59,12825,1,175,4,2,101,116,12833,12836,59,1,9794,4,2,59,101,12842,12844,1,10016,115,101,59,1,10016,4,2,59,115,12855,12857,1,8614,116,111,4,4,59,100,108,117,12869,12871,12877,12883,1,8614,111,119,110,59,1,8615,101,102,116,59,1,8612,112,59,1,8613,107,101,114,59,1,9646,4,2,111,121,12899,12905,109,109,97,59,1,10793,59,1,1084,97,115,104,59,1,8212,97,115,117,114,101,100,97,110,103,108,101,59,1,8737,114,59,3,55349,56618,111,59,1,8487,4,3,99,100,110,12945,12954,12985,114,111,5,181,1,59,12952,1,181,4,4,59,97,99,100,12964,12966,12971,12976,1,8739,115,116,59,1,42,105,114,59,1,10992,111,116,5,183,1,59,12983,1,183,117,115,4,3,59,98,100,12995,12997,13e3,1,8722,59,1,8863,4,2,59,117,13006,13008,1,8760,59,1,10794,4,2,99,100,13017,13021,112,59,1,10971,114,59,1,8230,112,108,117,115,59,1,8723,4,2,100,112,13038,13044,101,108,115,59,1,8871,102,59,3,55349,56670,59,1,8723,4,2,99,116,13058,13063,114,59,3,55349,56514,112,111,115,59,1,8766,4,3,59,108,109,13077,13079,13087,1,956,116,105,109,97,112,59,1,8888,97,112,59,1,8888,4,24,71,76,82,86,97,98,99,100,101,102,103,104,105,106,108,109,111,112,114,115,116,117,118,119,13142,13165,13217,13229,13247,13330,13359,13414,13420,13508,13513,13579,13602,13626,13631,13762,13767,13855,13936,13995,14214,14285,14312,14432,4,2,103,116,13148,13152,59,3,8921,824,4,2,59,118,13158,13161,3,8811,8402,59,3,8811,824,4,3,101,108,116,13173,13200,13204,102,116,4,2,97,114,13181,13188,114,114,111,119,59,1,8653,105,103,104,116,97,114,114,111,119,59,1,8654,59,3,8920,824,4,2,59,118,13210,13213,3,8810,8402,59,3,8810,824,105,103,104,116,97,114,114,111,119,59,1,8655,4,2,68,100,13235,13241,97,115,104,59,1,8879,97,115,104,59,1,8878,4,5,98,99,110,112,116,13259,13264,13270,13275,13308,108,97,59,1,8711,117,116,101,59,1,324,103,59,3,8736,8402,4,5,59,69,105,111,112,13287,13289,13293,13298,13302,1,8777,59,3,10864,824,100,59,3,8779,824,115,59,1,329,114,111,120,59,1,8777,117,114,4,2,59,97,13316,13318,1,9838,108,4,2,59,115,13325,13327,1,9838,59,1,8469,4,2,115,117,13336,13344,112,5,160,1,59,13342,1,160,109,112,4,2,59,101,13352,13355,3,8782,824,59,3,8783,824,4,5,97,101,111,117,121,13371,13385,13391,13407,13411,4,2,112,114,13377,13380,59,1,10819,111,110,59,1,328,100,105,108,59,1,326,110,103,4,2,59,100,13399,13401,1,8775,111,116,59,3,10861,824,112,59,1,10818,59,1,1085,97,115,104,59,1,8211,4,7,59,65,97,100,113,115,120,13436,13438,13443,13466,13472,13478,13494,1,8800,114,114,59,1,8663,114,4,2,104,114,13450,13454,107,59,1,10532,4,2,59,111,13460,13462,1,8599,119,59,1,8599,111,116,59,3,8784,824,117,105,118,59,1,8802,4,2,101,105,13484,13489,97,114,59,1,10536,109,59,3,8770,824,105,115,116,4,2,59,115,13503,13505,1,8708,59,1,8708,114,59,3,55349,56619,4,4,69,101,115,116,13523,13527,13563,13568,59,3,8807,824,4,3,59,113,115,13535,13537,13559,1,8817,4,3,59,113,115,13545,13547,13551,1,8817,59,3,8807,824,108,97,110,116,59,3,10878,824,59,3,10878,824,105,109,59,1,8821,4,2,59,114,13574,13576,1,8815,59,1,8815,4,3,65,97,112,13587,13592,13597,114,114,59,1,8654,114,114,59,1,8622,97,114,59,1,10994,4,3,59,115,118,13610,13612,13623,1,8715,4,2,59,100,13618,13620,1,8956,59,1,8954,59,1,8715,99,121,59,1,1114,4,7,65,69,97,100,101,115,116,13647,13652,13656,13661,13665,13737,13742,114,114,59,1,8653,59,3,8806,824,114,114,59,1,8602,114,59,1,8229,4,4,59,102,113,115,13675,13677,13703,13725,1,8816,116,4,2,97,114,13684,13691,114,114,111,119,59,1,8602,105,103,104,116,97,114,114,111,119,59,1,8622,4,3,59,113,115,13711,13713,13717,1,8816,59,3,8806,824,108,97,110,116,59,3,10877,824,4,2,59,115,13731,13734,3,10877,824,59,1,8814,105,109,59,1,8820,4,2,59,114,13748,13750,1,8814,105,4,2,59,101,13757,13759,1,8938,59,1,8940,105,100,59,1,8740,4,2,112,116,13773,13778,102,59,3,55349,56671,5,172,3,59,105,110,13787,13789,13829,1,172,110,4,4,59,69,100,118,13800,13802,13806,13812,1,8713,59,3,8953,824,111,116,59,3,8949,824,4,3,97,98,99,13820,13823,13826,59,1,8713,59,1,8951,59,1,8950,105,4,2,59,118,13836,13838,1,8716,4,3,97,98,99,13846,13849,13852,59,1,8716,59,1,8958,59,1,8957,4,3,97,111,114,13863,13892,13899,114,4,4,59,97,115,116,13874,13876,13883,13888,1,8742,108,108,101,108,59,1,8742,108,59,3,11005,8421,59,3,8706,824,108,105,110,116,59,1,10772,4,3,59,99,101,13907,13909,13914,1,8832,117,101,59,1,8928,4,2,59,99,13920,13923,3,10927,824,4,2,59,101,13929,13931,1,8832,113,59,3,10927,824,4,4,65,97,105,116,13946,13951,13971,13982,114,114,59,1,8655,114,114,4,3,59,99,119,13961,13963,13967,1,8603,59,3,10547,824,59,3,8605,824,103,104,116,97,114,114,111,119,59,1,8603,114,105,4,2,59,101,13990,13992,1,8939,59,1,8941,4,7,99,104,105,109,112,113,117,14011,14036,14060,14080,14085,14090,14106,4,4,59,99,101,114,14021,14023,14028,14032,1,8833,117,101,59,1,8929,59,3,10928,824,59,3,55349,56515,111,114,116,4,2,109,112,14045,14050,105,100,59,1,8740,97,114,97,108,108,101,108,59,1,8742,109,4,2,59,101,14067,14069,1,8769,4,2,59,113,14075,14077,1,8772,59,1,8772,105,100,59,1,8740,97,114,59,1,8742,115,117,4,2,98,112,14098,14102,101,59,1,8930,101,59,1,8931,4,3,98,99,112,14114,14157,14171,4,4,59,69,101,115,14124,14126,14130,14133,1,8836,59,3,10949,824,59,1,8840,101,116,4,2,59,101,14141,14144,3,8834,8402,113,4,2,59,113,14151,14153,1,8840,59,3,10949,824,99,4,2,59,101,14164,14166,1,8833,113,59,3,10928,824,4,4,59,69,101,115,14181,14183,14187,14190,1,8837,59,3,10950,824,59,1,8841,101,116,4,2,59,101,14198,14201,3,8835,8402,113,4,2,59,113,14208,14210,1,8841,59,3,10950,824,4,4,103,105,108,114,14224,14228,14238,14242,108,59,1,8825,108,100,101,5,241,1,59,14236,1,241,103,59,1,8824,105,97,110,103,108,101,4,2,108,114,14254,14269,101,102,116,4,2,59,101,14263,14265,1,8938,113,59,1,8940,105,103,104,116,4,2,59,101,14279,14281,1,8939,113,59,1,8941,4,2,59,109,14291,14293,1,957,4,3,59,101,115,14301,14303,14308,1,35,114,111,59,1,8470,112,59,1,8199,4,9,68,72,97,100,103,105,108,114,115,14332,14338,14344,14349,14355,14369,14376,14408,14426,97,115,104,59,1,8877,97,114,114,59,1,10500,112,59,3,8781,8402,97,115,104,59,1,8876,4,2,101,116,14361,14365,59,3,8805,8402,59,3,62,8402,110,102,105,110,59,1,10718,4,3,65,101,116,14384,14389,14393,114,114,59,1,10498,59,3,8804,8402,4,2,59,114,14399,14402,3,60,8402,105,101,59,3,8884,8402,4,2,65,116,14414,14419,114,114,59,1,10499,114,105,101,59,3,8885,8402,105,109,59,3,8764,8402,4,3,65,97,110,14440,14445,14468,114,114,59,1,8662,114,4,2,104,114,14452,14456,107,59,1,10531,4,2,59,111,14462,14464,1,8598,119,59,1,8598,101,97,114,59,1,10535,4,18,83,97,99,100,101,102,103,104,105,108,109,111,112,114,115,116,117,118,14512,14515,14535,14560,14597,14603,14618,14643,14657,14662,14701,14741,14747,14769,14851,14877,14907,14916,59,1,9416,4,2,99,115,14521,14531,117,116,101,5,243,1,59,14529,1,243,116,59,1,8859,4,2,105,121,14541,14557,114,4,2,59,99,14548,14550,1,8858,5,244,1,59,14555,1,244,59,1,1086,4,5,97,98,105,111,115,14572,14577,14583,14587,14591,115,104,59,1,8861,108,97,99,59,1,337,118,59,1,10808,116,59,1,8857,111,108,100,59,1,10684,108,105,103,59,1,339,4,2,99,114,14609,14614,105,114,59,1,10687,59,3,55349,56620,4,3,111,114,116,14626,14630,14640,110,59,1,731,97,118,101,5,242,1,59,14638,1,242,59,1,10689,4,2,98,109,14649,14654,97,114,59,1,10677,59,1,937,110,116,59,1,8750,4,4,97,99,105,116,14672,14677,14693,14698,114,114,59,1,8634,4,2,105,114,14683,14687,114,59,1,10686,111,115,115,59,1,10683,110,101,59,1,8254,59,1,10688,4,3,97,101,105,14709,14714,14719,99,114,59,1,333,103,97,59,1,969,4,3,99,100,110,14727,14733,14736,114,111,110,59,1,959,59,1,10678,117,115,59,1,8854,112,102,59,3,55349,56672,4,3,97,101,108,14755,14759,14764,114,59,1,10679,114,112,59,1,10681,117,115,59,1,8853,4,7,59,97,100,105,111,115,118,14785,14787,14792,14831,14837,14841,14848,1,8744,114,114,59,1,8635,4,4,59,101,102,109,14802,14804,14817,14824,1,10845,114,4,2,59,111,14811,14813,1,8500,102,59,1,8500,5,170,1,59,14822,1,170,5,186,1,59,14829,1,186,103,111,102,59,1,8886,114,59,1,10838,108,111,112,101,59,1,10839,59,1,10843,4,3,99,108,111,14859,14863,14873,114,59,1,8500,97,115,104,5,248,1,59,14871,1,248,108,59,1,8856,105,4,2,108,109,14884,14893,100,101,5,245,1,59,14891,1,245,101,115,4,2,59,97,14901,14903,1,8855,115,59,1,10806,109,108,5,246,1,59,14914,1,246,98,97,114,59,1,9021,4,12,97,99,101,102,104,105,108,109,111,114,115,117,14948,14992,14996,15033,15038,15068,15090,15189,15192,15222,15427,15441,114,4,4,59,97,115,116,14959,14961,14976,14989,1,8741,5,182,2,59,108,14968,14970,1,182,108,101,108,59,1,8741,4,2,105,108,14982,14986,109,59,1,10995,59,1,11005,59,1,8706,121,59,1,1087,114,4,5,99,105,109,112,116,15009,15014,15019,15024,15027,110,116,59,1,37,111,100,59,1,46,105,108,59,1,8240,59,1,8869,101,110,107,59,1,8241,114,59,3,55349,56621,4,3,105,109,111,15046,15057,15063,4,2,59,118,15052,15054,1,966,59,1,981,109,97,116,59,1,8499,110,101,59,1,9742,4,3,59,116,118,15076,15078,15087,1,960,99,104,102,111,114,107,59,1,8916,59,1,982,4,2,97,117,15096,15119,110,4,2,99,107,15103,15115,107,4,2,59,104,15110,15112,1,8463,59,1,8462,118,59,1,8463,115,4,9,59,97,98,99,100,101,109,115,116,15140,15142,15148,15151,15156,15168,15171,15179,15184,1,43,99,105,114,59,1,10787,59,1,8862,105,114,59,1,10786,4,2,111,117,15162,15165,59,1,8724,59,1,10789,59,1,10866,110,5,177,1,59,15177,1,177,105,109,59,1,10790,119,111,59,1,10791,59,1,177,4,3,105,112,117,15200,15208,15213,110,116,105,110,116,59,1,10773,102,59,3,55349,56673,110,100,5,163,1,59,15220,1,163,4,10,59,69,97,99,101,105,110,111,115,117,15244,15246,15249,15253,15258,15334,15347,15367,15416,15421,1,8826,59,1,10931,112,59,1,10935,117,101,59,1,8828,4,2,59,99,15264,15266,1,10927,4,6,59,97,99,101,110,115,15280,15282,15290,15299,15303,15329,1,8826,112,112,114,111,120,59,1,10935,117,114,108,121,101,113,59,1,8828,113,59,1,10927,4,3,97,101,115,15311,15319,15324,112,112,114,111,120,59,1,10937,113,113,59,1,10933,105,109,59,1,8936,105,109,59,1,8830,109,101,4,2,59,115,15342,15344,1,8242,59,1,8473,4,3,69,97,115,15355,15358,15362,59,1,10933,112,59,1,10937,105,109,59,1,8936,4,3,100,102,112,15375,15378,15404,59,1,8719,4,3,97,108,115,15386,15392,15398,108,97,114,59,1,9006,105,110,101,59,1,8978,117,114,102,59,1,8979,4,2,59,116,15410,15412,1,8733,111,59,1,8733,105,109,59,1,8830,114,101,108,59,1,8880,4,2,99,105,15433,15438,114,59,3,55349,56517,59,1,968,110,99,115,112,59,1,8200,4,6,102,105,111,112,115,117,15462,15467,15472,15478,15485,15491,114,59,3,55349,56622,110,116,59,1,10764,112,102,59,3,55349,56674,114,105,109,101,59,1,8279,99,114,59,3,55349,56518,4,3,97,101,111,15499,15520,15534,116,4,2,101,105,15506,15515,114,110,105,111,110,115,59,1,8461,110,116,59,1,10774,115,116,4,2,59,101,15528,15530,1,63,113,59,1,8799,116,5,34,1,59,15540,1,34,4,21,65,66,72,97,98,99,100,101,102,104,105,108,109,110,111,112,114,115,116,117,120,15586,15609,15615,15620,15796,15855,15893,15931,15977,16001,16039,16183,16204,16222,16228,16285,16312,16318,16363,16408,16416,4,3,97,114,116,15594,15599,15603,114,114,59,1,8667,114,59,1,8658,97,105,108,59,1,10524,97,114,114,59,1,10511,97,114,59,1,10596,4,7,99,100,101,110,113,114,116,15636,15651,15656,15664,15687,15696,15770,4,2,101,117,15642,15646,59,3,8765,817,116,101,59,1,341,105,99,59,1,8730,109,112,116,121,118,59,1,10675,103,4,4,59,100,101,108,15675,15677,15680,15683,1,10217,59,1,10642,59,1,10661,101,59,1,10217,117,111,5,187,1,59,15694,1,187,114,4,11,59,97,98,99,102,104,108,112,115,116,119,15721,15723,15727,15739,15742,15746,15750,15754,15758,15763,15767,1,8594,112,59,1,10613,4,2,59,102,15733,15735,1,8677,115,59,1,10528,59,1,10547,115,59,1,10526,107,59,1,8618,112,59,1,8620,108,59,1,10565,105,109,59,1,10612,108,59,1,8611,59,1,8605,4,2,97,105,15776,15781,105,108,59,1,10522,111,4,2,59,110,15788,15790,1,8758,97,108,115,59,1,8474,4,3,97,98,114,15804,15809,15814,114,114,59,1,10509,114,107,59,1,10099,4,2,97,107,15820,15833,99,4,2,101,107,15827,15830,59,1,125,59,1,93,4,2,101,115,15839,15842,59,1,10636,108,4,2,100,117,15849,15852,59,1,10638,59,1,10640,4,4,97,101,117,121,15865,15871,15886,15890,114,111,110,59,1,345,4,2,100,105,15877,15882,105,108,59,1,343,108,59,1,8969,98,59,1,125,59,1,1088,4,4,99,108,113,115,15903,15907,15914,15927,97,59,1,10551,100,104,97,114,59,1,10601,117,111,4,2,59,114,15922,15924,1,8221,59,1,8221,104,59,1,8627,4,3,97,99,103,15939,15966,15970,108,4,4,59,105,112,115,15950,15952,15957,15963,1,8476,110,101,59,1,8475,97,114,116,59,1,8476,59,1,8477,116,59,1,9645,5,174,1,59,15975,1,174,4,3,105,108,114,15985,15991,15997,115,104,116,59,1,10621,111,111,114,59,1,8971,59,3,55349,56623,4,2,97,111,16007,16028,114,4,2,100,117,16014,16017,59,1,8641,4,2,59,108,16023,16025,1,8640,59,1,10604,4,2,59,118,16034,16036,1,961,59,1,1009,4,3,103,110,115,16047,16167,16171,104,116,4,6,97,104,108,114,115,116,16063,16081,16103,16130,16143,16155,114,114,111,119,4,2,59,116,16073,16075,1,8594,97,105,108,59,1,8611,97,114,112,111,111,110,4,2,100,117,16093,16099,111,119,110,59,1,8641,112,59,1,8640,101,102,116,4,2,97,104,16112,16120,114,114,111,119,115,59,1,8644,97,114,112,111,111,110,115,59,1,8652,105,103,104,116,97,114,114,111,119,115,59,1,8649,113,117,105,103,97,114,114,111,119,59,1,8605,104,114,101,101,116,105,109,101,115,59,1,8908,103,59,1,730,105,110,103,100,111,116,115,101,113,59,1,8787,4,3,97,104,109,16191,16196,16201,114,114,59,1,8644,97,114,59,1,8652,59,1,8207,111,117,115,116,4,2,59,97,16214,16216,1,9137,99,104,101,59,1,9137,109,105,100,59,1,10990,4,4,97,98,112,116,16238,16252,16257,16278,4,2,110,114,16244,16248,103,59,1,10221,114,59,1,8702,114,107,59,1,10215,4,3,97,102,108,16265,16269,16273,114,59,1,10630,59,3,55349,56675,117,115,59,1,10798,105,109,101,115,59,1,10805,4,2,97,112,16291,16304,114,4,2,59,103,16298,16300,1,41,116,59,1,10644,111,108,105,110,116,59,1,10770,97,114,114,59,1,8649,4,4,97,99,104,113,16328,16334,16339,16342,113,117,111,59,1,8250,114,59,3,55349,56519,59,1,8625,4,2,98,117,16348,16351,59,1,93,111,4,2,59,114,16358,16360,1,8217,59,1,8217,4,3,104,105,114,16371,16377,16383,114,101,101,59,1,8908,109,101,115,59,1,8906,105,4,4,59,101,102,108,16394,16396,16399,16402,1,9657,59,1,8885,59,1,9656,116,114,105,59,1,10702,108,117,104,97,114,59,1,10600,59,1,8478,4,19,97,98,99,100,101,102,104,105,108,109,111,112,113,114,115,116,117,119,122,16459,16466,16472,16572,16590,16672,16687,16746,16844,16850,16924,16963,16988,17115,17121,17154,17206,17614,17656,99,117,116,101,59,1,347,113,117,111,59,1,8218,4,10,59,69,97,99,101,105,110,112,115,121,16494,16496,16499,16513,16518,16531,16536,16556,16564,16569,1,8827,59,1,10932,4,2,112,114,16505,16508,59,1,10936,111,110,59,1,353,117,101,59,1,8829,4,2,59,100,16524,16526,1,10928,105,108,59,1,351,114,99,59,1,349,4,3,69,97,115,16544,16547,16551,59,1,10934,112,59,1,10938,105,109,59,1,8937,111,108,105,110,116,59,1,10771,105,109,59,1,8831,59,1,1089,111,116,4,3,59,98,101,16582,16584,16587,1,8901,59,1,8865,59,1,10854,4,7,65,97,99,109,115,116,120,16606,16611,16634,16642,16646,16652,16668,114,114,59,1,8664,114,4,2,104,114,16618,16622,107,59,1,10533,4,2,59,111,16628,16630,1,8600,119,59,1,8600,116,5,167,1,59,16640,1,167,105,59,1,59,119,97,114,59,1,10537,109,4,2,105,110,16659,16665,110,117,115,59,1,8726,59,1,8726,116,59,1,10038,114,4,2,59,111,16679,16682,3,55349,56624,119,110,59,1,8994,4,4,97,99,111,121,16697,16702,16716,16739,114,112,59,1,9839,4,2,104,121,16708,16713,99,121,59,1,1097,59,1,1096,114,116,4,2,109,112,16724,16729,105,100,59,1,8739,97,114,97,108,108,101,108,59,1,8741,5,173,1,59,16744,1,173,4,2,103,109,16752,16770,109,97,4,3,59,102,118,16762,16764,16767,1,963,59,1,962,59,1,962,4,8,59,100,101,103,108,110,112,114,16788,16790,16795,16806,16817,16828,16832,16838,1,8764,111,116,59,1,10858,4,2,59,113,16801,16803,1,8771,59,1,8771,4,2,59,69,16812,16814,1,10910,59,1,10912,4,2,59,69,16823,16825,1,10909,59,1,10911,101,59,1,8774,108,117,115,59,1,10788,97,114,114,59,1,10610,97,114,114,59,1,8592,4,4,97,101,105,116,16860,16883,16891,16904,4,2,108,115,16866,16878,108,115,101,116,109,105,110,117,115,59,1,8726,104,112,59,1,10803,112,97,114,115,108,59,1,10724,4,2,100,108,16897,16900,59,1,8739,101,59,1,8995,4,2,59,101,16910,16912,1,10922,4,2,59,115,16918,16920,1,10924,59,3,10924,65024,4,3,102,108,112,16932,16938,16958,116,99,121,59,1,1100,4,2,59,98,16944,16946,1,47,4,2,59,97,16952,16954,1,10692,114,59,1,9023,102,59,3,55349,56676,97,4,2,100,114,16970,16985,101,115,4,2,59,117,16978,16980,1,9824,105,116,59,1,9824,59,1,8741,4,3,99,115,117,16996,17028,17089,4,2,97,117,17002,17015,112,4,2,59,115,17009,17011,1,8851,59,3,8851,65024,112,4,2,59,115,17022,17024,1,8852,59,3,8852,65024,117,4,2,98,112,17035,17062,4,3,59,101,115,17043,17045,17048,1,8847,59,1,8849,101,116,4,2,59,101,17056,17058,1,8847,113,59,1,8849,4,3,59,101,115,17070,17072,17075,1,8848,59,1,8850,101,116,4,2,59,101,17083,17085,1,8848,113,59,1,8850,4,3,59,97,102,17097,17099,17112,1,9633,114,4,2,101,102,17106,17109,59,1,9633,59,1,9642,59,1,9642,97,114,114,59,1,8594,4,4,99,101,109,116,17131,17136,17142,17148,114,59,3,55349,56520,116,109,110,59,1,8726,105,108,101,59,1,8995,97,114,102,59,1,8902,4,2,97,114,17160,17172,114,4,2,59,102,17167,17169,1,9734,59,1,9733,4,2,97,110,17178,17202,105,103,104,116,4,2,101,112,17188,17197,112,115,105,108,111,110,59,1,1013,104,105,59,1,981,115,59,1,175,4,5,98,99,109,110,112,17218,17351,17420,17423,17427,4,9,59,69,100,101,109,110,112,114,115,17238,17240,17243,17248,17261,17267,17279,17285,17291,1,8834,59,1,10949,111,116,59,1,10941,4,2,59,100,17254,17256,1,8838,111,116,59,1,10947,117,108,116,59,1,10945,4,2,69,101,17273,17276,59,1,10955,59,1,8842,108,117,115,59,1,10943,97,114,114,59,1,10617,4,3,101,105,117,17299,17335,17339,116,4,3,59,101,110,17308,17310,17322,1,8834,113,4,2,59,113,17317,17319,1,8838,59,1,10949,101,113,4,2,59,113,17330,17332,1,8842,59,1,10955,109,59,1,10951,4,2,98,112,17345,17348,59,1,10965,59,1,10963,99,4,6,59,97,99,101,110,115,17366,17368,17376,17385,17389,17415,1,8827,112,112,114,111,120,59,1,10936,117,114,108,121,101,113,59,1,8829,113,59,1,10928,4,3,97,101,115,17397,17405,17410,112,112,114,111,120,59,1,10938,113,113,59,1,10934,105,109,59,1,8937,105,109,59,1,8831,59,1,8721,103,59,1,9834,4,13,49,50,51,59,69,100,101,104,108,109,110,112,115,17455,17462,17469,17476,17478,17481,17496,17509,17524,17530,17536,17548,17554,5,185,1,59,17460,1,185,5,178,1,59,17467,1,178,5,179,1,59,17474,1,179,1,8835,59,1,10950,4,2,111,115,17487,17491,116,59,1,10942,117,98,59,1,10968,4,2,59,100,17502,17504,1,8839,111,116,59,1,10948,115,4,2,111,117,17516,17520,108,59,1,10185,98,59,1,10967,97,114,114,59,1,10619,117,108,116,59,1,10946,4,2,69,101,17542,17545,59,1,10956,59,1,8843,108,117,115,59,1,10944,4,3,101,105,117,17562,17598,17602,116,4,3,59,101,110,17571,17573,17585,1,8835,113,4,2,59,113,17580,17582,1,8839,59,1,10950,101,113,4,2,59,113,17593,17595,1,8843,59,1,10956,109,59,1,10952,4,2,98,112,17608,17611,59,1,10964,59,1,10966,4,3,65,97,110,17622,17627,17650,114,114,59,1,8665,114,4,2,104,114,17634,17638,107,59,1,10534,4,2,59,111,17644,17646,1,8601,119,59,1,8601,119,97,114,59,1,10538,108,105,103,5,223,1,59,17664,1,223,4,13,97,98,99,100,101,102,104,105,111,112,114,115,119,17694,17709,17714,17737,17742,17749,17754,17860,17905,17957,17964,18090,18122,4,2,114,117,17700,17706,103,101,116,59,1,8982,59,1,964,114,107,59,1,9140,4,3,97,101,121,17722,17728,17734,114,111,110,59,1,357,100,105,108,59,1,355,59,1,1090,111,116,59,1,8411,108,114,101,99,59,1,8981,114,59,3,55349,56625,4,4,101,105,107,111,17764,17805,17836,17851,4,2,114,116,17770,17786,101,4,2,52,102,17777,17780,59,1,8756,111,114,101,59,1,8756,97,4,3,59,115,118,17795,17797,17802,1,952,121,109,59,1,977,59,1,977,4,2,99,110,17811,17831,107,4,2,97,115,17818,17826,112,112,114,111,120,59,1,8776,105,109,59,1,8764,115,112,59,1,8201,4,2,97,115,17842,17846,112,59,1,8776,105,109,59,1,8764,114,110,5,254,1,59,17858,1,254,4,3,108,109,110,17868,17873,17901,100,101,59,1,732,101,115,5,215,3,59,98,100,17884,17886,17898,1,215,4,2,59,97,17892,17894,1,8864,114,59,1,10801,59,1,10800,116,59,1,8749,4,3,101,112,115,17913,17917,17953,97,59,1,10536,4,4,59,98,99,102,17927,17929,17934,17939,1,8868,111,116,59,1,9014,105,114,59,1,10993,4,2,59,111,17945,17948,3,55349,56677,114,107,59,1,10970,97,59,1,10537,114,105,109,101,59,1,8244,4,3,97,105,112,17972,17977,18082,100,101,59,1,8482,4,7,97,100,101,109,112,115,116,17993,18051,18056,18059,18066,18072,18076,110,103,108,101,4,5,59,100,108,113,114,18009,18011,18017,18032,18035,1,9653,111,119,110,59,1,9663,101,102,116,4,2,59,101,18026,18028,1,9667,113,59,1,8884,59,1,8796,105,103,104,116,4,2,59,101,18045,18047,1,9657,113,59,1,8885,111,116,59,1,9708,59,1,8796,105,110,117,115,59,1,10810,108,117,115,59,1,10809,98,59,1,10701,105,109,101,59,1,10811,101,122,105,117,109,59,1,9186,4,3,99,104,116,18098,18111,18116,4,2,114,121,18104,18108,59,3,55349,56521,59,1,1094,99,121,59,1,1115,114,111,107,59,1,359,4,2,105,111,18128,18133,120,116,59,1,8812,104,101,97,100,4,2,108,114,18143,18154,101,102,116,97,114,114,111,119,59,1,8606,105,103,104,116,97,114,114,111,119,59,1,8608,4,18,65,72,97,98,99,100,102,103,104,108,109,111,112,114,115,116,117,119,18204,18209,18214,18234,18250,18268,18292,18308,18319,18343,18379,18397,18413,18504,18547,18553,18584,18603,114,114,59,1,8657,97,114,59,1,10595,4,2,99,114,18220,18230,117,116,101,5,250,1,59,18228,1,250,114,59,1,8593,114,4,2,99,101,18241,18245,121,59,1,1118,118,101,59,1,365,4,2,105,121,18256,18265,114,99,5,251,1,59,18263,1,251,59,1,1091,4,3,97,98,104,18276,18281,18287,114,114,59,1,8645,108,97,99,59,1,369,97,114,59,1,10606,4,2,105,114,18298,18304,115,104,116,59,1,10622,59,3,55349,56626,114,97,118,101,5,249,1,59,18317,1,249,4,2,97,98,18325,18338,114,4,2,108,114,18332,18335,59,1,8639,59,1,8638,108,107,59,1,9600,4,2,99,116,18349,18374,4,2,111,114,18355,18369,114,110,4,2,59,101,18363,18365,1,8988,114,59,1,8988,111,112,59,1,8975,114,105,59,1,9720,4,2,97,108,18385,18390,99,114,59,1,363,5,168,1,59,18395,1,168,4,2,103,112,18403,18408,111,110,59,1,371,102,59,3,55349,56678,4,6,97,100,104,108,115,117,18427,18434,18445,18470,18475,18494,114,114,111,119,59,1,8593,111,119,110,97,114,114,111,119,59,1,8597,97,114,112,111,111,110,4,2,108,114,18457,18463,101,102,116,59,1,8639,105,103,104,116,59,1,8638,117,115,59,1,8846,105,4,3,59,104,108,18484,18486,18489,1,965,59,1,978,111,110,59,1,965,112,97,114,114,111,119,115,59,1,8648,4,3,99,105,116,18512,18537,18542,4,2,111,114,18518,18532,114,110,4,2,59,101,18526,18528,1,8989,114,59,1,8989,111,112,59,1,8974,110,103,59,1,367,114,105,59,1,9721,99,114,59,3,55349,56522,4,3,100,105,114,18561,18566,18572,111,116,59,1,8944,108,100,101,59,1,361,105,4,2,59,102,18579,18581,1,9653,59,1,9652,4,2,97,109,18590,18595,114,114,59,1,8648,108,5,252,1,59,18601,1,252,97,110,103,108,101,59,1,10663,4,15,65,66,68,97,99,100,101,102,108,110,111,112,114,115,122,18643,18648,18661,18667,18847,18851,18857,18904,18909,18915,18931,18937,18943,18949,18996,114,114,59,1,8661,97,114,4,2,59,118,18656,18658,1,10984,59,1,10985,97,115,104,59,1,8872,4,2,110,114,18673,18679,103,114,116,59,1,10652,4,7,101,107,110,112,114,115,116,18695,18704,18711,18720,18742,18754,18810,112,115,105,108,111,110,59,1,1013,97,112,112,97,59,1,1008,111,116,104,105,110,103,59,1,8709,4,3,104,105,114,18728,18732,18735,105,59,1,981,59,1,982,111,112,116,111,59,1,8733,4,2,59,104,18748,18750,1,8597,111,59,1,1009,4,2,105,117,18760,18766,103,109,97,59,1,962,4,2,98,112,18772,18791,115,101,116,110,101,113,4,2,59,113,18784,18787,3,8842,65024,59,3,10955,65024,115,101,116,110,101,113,4,2,59,113,18803,18806,3,8843,65024,59,3,10956,65024,4,2,104,114,18816,18822,101,116,97,59,1,977,105,97,110,103,108,101,4,2,108,114,18834,18840,101,102,116,59,1,8882,105,103,104,116,59,1,8883,121,59,1,1074,97,115,104,59,1,8866,4,3,101,108,114,18865,18884,18890,4,3,59,98,101,18873,18875,18880,1,8744,97,114,59,1,8891,113,59,1,8794,108,105,112,59,1,8942,4,2,98,116,18896,18901,97,114,59,1,124,59,1,124,114,59,3,55349,56627,116,114,105,59,1,8882,115,117,4,2,98,112,18923,18927,59,3,8834,8402,59,3,8835,8402,112,102,59,3,55349,56679,114,111,112,59,1,8733,116,114,105,59,1,8883,4,2,99,117,18955,18960,114,59,3,55349,56523,4,2,98,112,18966,18981,110,4,2,69,101,18973,18977,59,3,10955,65024,59,3,8842,65024,110,4,2,69,101,18988,18992,59,3,10956,65024,59,3,8843,65024,105,103,122,97,103,59,1,10650,4,7,99,101,102,111,112,114,115,19020,19026,19061,19066,19072,19075,19089,105,114,99,59,1,373,4,2,100,105,19032,19055,4,2,98,103,19038,19043,97,114,59,1,10847,101,4,2,59,113,19050,19052,1,8743,59,1,8793,101,114,112,59,1,8472,114,59,3,55349,56628,112,102,59,3,55349,56680,59,1,8472,4,2,59,101,19081,19083,1,8768,97,116,104,59,1,8768,99,114,59,3,55349,56524,4,14,99,100,102,104,105,108,109,110,111,114,115,117,118,119,19125,19146,19152,19157,19173,19176,19192,19197,19202,19236,19252,19269,19286,19291,4,3,97,105,117,19133,19137,19142,112,59,1,8898,114,99,59,1,9711,112,59,1,8899,116,114,105,59,1,9661,114,59,3,55349,56629,4,2,65,97,19163,19168,114,114,59,1,10234,114,114,59,1,10231,59,1,958,4,2,65,97,19182,19187,114,114,59,1,10232,114,114,59,1,10229,97,112,59,1,10236,105,115,59,1,8955,4,3,100,112,116,19210,19215,19230,111,116,59,1,10752,4,2,102,108,19221,19225,59,3,55349,56681,117,115,59,1,10753,105,109,101,59,1,10754,4,2,65,97,19242,19247,114,114,59,1,10233,114,114,59,1,10230,4,2,99,113,19258,19263,114,59,3,55349,56525,99,117,112,59,1,10758,4,2,112,116,19275,19281,108,117,115,59,1,10756,114,105,59,1,9651,101,101,59,1,8897,101,100,103,101,59,1,8896,4,8,97,99,101,102,105,111,115,117,19316,19335,19349,19357,19362,19367,19373,19379,99,4,2,117,121,19323,19332,116,101,5,253,1,59,19330,1,253,59,1,1103,4,2,105,121,19341,19346,114,99,59,1,375,59,1,1099,110,5,165,1,59,19355,1,165,114,59,3,55349,56630,99,121,59,1,1111,112,102,59,3,55349,56682,99,114,59,3,55349,56526,4,2,99,109,19385,19389,121,59,1,1102,108,5,255,1,59,19395,1,255,4,10,97,99,100,101,102,104,105,111,115,119,19419,19426,19441,19446,19462,19467,19472,19480,19486,19492,99,117,116,101,59,1,378,4,2,97,121,19432,19438,114,111,110,59,1,382,59,1,1079,111,116,59,1,380,4,2,101,116,19452,19458,116,114,102,59,1,8488,97,59,1,950,114,59,3,55349,56631,99,121,59,1,1078,103,114,97,114,114,59,1,8669,112,102,59,3,55349,56683,99,114,59,3,55349,56527,4,2,106,110,19498,19501,59,1,8205,106,59,1,8204])},cpVT:function(e,t,n){"use strict";function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}n.d(t,"a",(function(){return o}))},dAEq:function(e,t,n){"use strict";var o=n("HtLg"),r=n("Vx/6"),i=n("fuKP"),a=n("/+k/"),s=n("Ig3s"),l=n("T0BQ"),c={name:"attention",tokenize:function(e,t){var n,o=i(this.previous);return function(t){return e.enter("attentionSequence"),n=t,r(t)};function r(a){var s,l,c,u;return a===n?(e.consume(a),r):(s=e.exit("attentionSequence"),c=!(l=i(a))||2===l&&o,u=!o||2===o&&l,s._open=42===n?c:c&&(o||!u),s._close=42===n?u:u&&(l||!c),t(a))}},resolveAll:function(e,t){var n,i,c,u,d,p,f,h,m=-1;for(;++m1&&e[m][1].end.offset-e[m][1].start.offset>1?2:1,u={type:p>1?"strongSequence":"emphasisSequence",start:a(l(e[n][1].end),-p),end:l(e[n][1].end)},d={type:p>1?"strongSequence":"emphasisSequence",start:l(e[m][1].start),end:a(l(e[m][1].start),p)},c={type:p>1?"strongText":"emphasisText",start:l(e[n][1].end),end:l(e[m][1].start)},i={type:p>1?"strong":"emphasis",start:l(u.start),end:l(d.end)},e[n][1].end=l(u.start),e[m][1].start=l(d.end),f=[],e[n][1].end.offset-e[n][1].start.offset&&(f=o(f,[["enter",e[n][1],t],["exit",e[n][1],t]])),f=o(f,[["enter",i,t],["enter",u,t],["exit",u,t],["enter",c,t]]),f=o(f,s(t.parser.constructs.insideSpan.null,e.slice(n+1,m),t)),f=o(f,[["exit",c,t],["enter",d,t],["exit",d,t],["exit",i,t]]),e[m][1].end.offset-e[m][1].start.offset?(h=2,f=o(f,[["enter",e[m][1],t],["exit",e[m][1],t]])):h=0,r(e,n-1,m-n+3,f),m=n+f.length-h-2;break}m=-1;for(;++m?\]}]+$/.exec(e);if(i)for(e=e.slice(0,i.index),t=(i=i[0]).indexOf(")"),n=o(e,"("),r=o(e,")");-1!==t&&n>r;)e+=i.slice(0,t+1),t=(i=i.slice(t+1)).indexOf(")"),r++;return[e,i]}(n+r))[0]&&(s={type:"link",title:null,url:l+t+a[0],children:[{type:"text",value:t+a[0]}]},a[1]&&(s=[s,{type:"text",value:a[1]}]),s)))}function c(e,t,n,o){return!(!u(o,!0)||/[_-]$/.test(n))&&{type:"link",title:null,url:"mailto:"+t+"@"+n,children:[{type:"text",value:t+"@"+n}]}}function u(e,t){var n=e.input.charCodeAt(e.index-1);return(n!==n||a(n)||i(n))&&(!t||47!==n)}t.transforms=[function(e){r(e,[[/(https?:\/\/|www(?=\.))([-.\w]+)([^ \t\r\n]*)/i,l],[/([-.\w+]+)@([-\w]+(?:\.[-\w]+)+)/,c]],{ignore:["link","linkReference"]})}],t.enter={literalAutolink:function(e){this.enter({type:"link",title:null,url:"",children:[]},e)},literalAutolinkEmail:s,literalAutolinkHttp:s,literalAutolinkWww:s},t.exit={literalAutolink:function(e){this.exit(e)},literalAutolinkEmail:function(e){this.config.exit.autolinkEmail.call(this,e)},literalAutolinkHttp:function(e){this.config.exit.autolinkProtocol.call(this,e)},literalAutolinkWww:function(e){this.config.exit.data.call(this,e),this.stack[this.stack.length-1].url="http://"+this.sliceSerialize(e)}}},ecSx:function(e,t,n){"use strict";var o=n("ek1N");e.exports=function(e,t){e&&!e.process&&(t=e,e=null);return e?function(e,t){return n;function n(n,r,i){function a(e){i(e)}e.run(o(n,t),r,a)}}(e,t):function(e){return t;function t(t){return o(t,e)}}(t)}},ek1N:function(e,t,n){"use strict";e.exports=n("FYh5")},escJ:function(e,t,n){"use strict";var o=n("yRGd"),r={name:"lineEnding",tokenize:function(e,t){return function(n){return e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),o(e,t,"linePrefix")}}};e.exports=r},f8fV:function(e,t,n){e.exports=function(e){var t=(e||{}).singleTilde,n={tokenize:function(e,n,r){var i=this.previous,a=this.events,s=0;return l;function l(t){return 126!==t||126===i&&"characterEscape"!==a[a.length-1][1].type?r(t):(e.enter("strikethroughSequenceTemporary"),c(t))}function c(a){var l,u,d=o(i);return 126===a?s>1?r(a):(e.consume(a),s++,c):s<2&&!t?r(a):(l=e.exit("strikethroughSequenceTemporary"),u=o(a),l._open=!u||2===u&&d,l._close=!d||2===d&&u,n(a))}},resolveAll:function(e,t){var n,o,s,l,c=-1;for(;++c-1)return o.QUIRKS;let e=null===t?a:i;if(d(n,e))return o.QUIRKS;if(e=null===t?l:c,d(n,e))return o.LIMITED_QUIRKS}return o.NO_QUIRKS},t.serializeContent=function(e,t,n){let o="!DOCTYPE ";return e&&(o+=e),t?o+=" PUBLIC "+u(t):n&&(o+=" SYSTEM"),null!==n&&(o+=" "+u(n)),o}},fFcG:function(e,t,n){"use strict";e.exports=function(e,t){return e.dangerous?e.augment(t,o("raw",t.value)):null};var o=n("vUGn")},fL8H:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{color:"#657b83",fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",fontSize:"1em",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none"},'pre[class*="language-"]':{color:"#657b83",fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",fontSize:"1em",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",padding:"1em",margin:".5em 0",overflow:"auto",borderRadius:"0.3em",backgroundColor:"#fdf6e3"},'pre[class*="language-"]::-moz-selection':{background:"#073642"},'pre[class*="language-"] ::-moz-selection':{background:"#073642"},'code[class*="language-"]::-moz-selection':{background:"#073642"},'code[class*="language-"] ::-moz-selection':{background:"#073642"},'pre[class*="language-"]::selection':{background:"#073642"},'pre[class*="language-"] ::selection':{background:"#073642"},'code[class*="language-"]::selection':{background:"#073642"},'code[class*="language-"] ::selection':{background:"#073642"},':not(pre) > code[class*="language-"]':{backgroundColor:"#fdf6e3",padding:".1em",borderRadius:".3em"},comment:{color:"#93a1a1"},prolog:{color:"#93a1a1"},doctype:{color:"#93a1a1"},cdata:{color:"#93a1a1"},punctuation:{color:"#586e75"},namespace:{Opacity:".7"},property:{color:"#268bd2"},tag:{color:"#268bd2"},boolean:{color:"#268bd2"},number:{color:"#268bd2"},constant:{color:"#268bd2"},symbol:{color:"#268bd2"},deleted:{color:"#268bd2"},selector:{color:"#2aa198"},"attr-name":{color:"#2aa198"},string:{color:"#2aa198"},char:{color:"#2aa198"},builtin:{color:"#2aa198"},url:{color:"#2aa198"},inserted:{color:"#2aa198"},entity:{color:"#657b83",background:"#eee8d5",cursor:"help"},atrule:{color:"#859900"},"attr-value":{color:"#859900"},keyword:{color:"#859900"},function:{color:"#b58900"},"class-name":{color:"#b58900"},regex:{color:"#cb4b16"},important:{color:"#cb4b16",fontWeight:"bold"},variable:{color:"#cb4b16"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"}}},fUUT:function(e,t,n){"use strict";e.exports=function(e){var t=this;this.Parser=function(n){return o(n,Object.assign({},t.data("settings"),e,{extensions:t.data("micromarkExtensions")||[],mdastExtensions:t.data("fromMarkdownExtensions")||[]}))}};var o=n("LLHA")},"fe/W":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",whiteSpace:"pre-wrap",wordBreak:"break-all",wordWrap:"break-word",fontFamily:'Menlo, Monaco, "Courier New", monospace',fontSize:"15px",lineHeight:"1.5",color:"#dccf8f",textShadow:"0"},'pre[class*="language-"]':{MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",whiteSpace:"pre-wrap",wordBreak:"break-all",wordWrap:"break-word",fontFamily:'Menlo, Monaco, "Courier New", monospace',fontSize:"15px",lineHeight:"1.5",color:"#DCCF8F",textShadow:"0",borderRadius:"5px",border:"1px solid #000",background:"#181914 url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAMAAA/+4ADkFkb2JlAGTAAAAAAf/bAIQACQYGBgcGCQcHCQ0IBwgNDwsJCQsPEQ4ODw4OERENDg4ODg0RERQUFhQUERoaHBwaGiYmJiYmKysrKysrKysrKwEJCAgJCgkMCgoMDwwODA8TDg4ODhMVDg4PDg4VGhMRERERExoXGhYWFhoXHR0aGh0dJCQjJCQrKysrKysrKysr/8AAEQgAjACMAwEiAAIRAQMRAf/EAF4AAQEBAAAAAAAAAAAAAAAAAAABBwEBAQAAAAAAAAAAAAAAAAAAAAIQAAEDAwIHAQEAAAAAAAAAAADwAREhYaExkUFRcYGxwdHh8REBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AyGFEjHaBS2fDDs2zkhKmBKktb7km+ZwwCnXPkLVmCTMItj6AXFxRS465/BTnkAJvkLkJe+7AKKoi2AtRS2zuAWsCb5GOlBN8gKfmuGHZ8MFqIth3ALmFoFwbwKWyAlTAp17uKqBvgBD8sM4fTjhvAhkzhaRkBMKBrfs7jGPIpzy7gFrAqnC0C0gB0EWwBDW2cBVQwm+QtPpa3wBO3sVvszCnLAhkzgL5/RLf13cLQd8/AGlu0Cb5HTx9KuAEieGJEdcehS3eRTp2ATdt3CpIm+QtZwAhROXFeb7swp/ahaM3kBE/jSIUBc/AWrgBN8uNFAl+b7sAXFxFn2YLUU5Ns7gFX8C4ib+hN8gFWXwK3bZglxEJm+gKdciLPsFV/TClsgJUwKJ5FVA7tvIFrfZhVfGJDcsCKaYgAqv6YRbE+RWOWBtu7+AL3yRalXLyKqAIIfk+zARbDgFyEsncYwJvlgFRW+GEWntIi2P0BooyFxcNr8Ep3+ANLbMO+QyhvbiqdgC0kVvgUUiLYgBS2QtPbiVI1/sgOmG9uO+Y8DW+7jS2zAOnj6O2BndwuIAUtkdRN8gFoK3wwXMQyZwHVbClsuNLd4E3yAUR6FVDBR+BafQGt93LVMxJTv8ABts4CVLhcfYWsCb5kC9/BHdU8CLYFY5bMAd+eX9MGthhpbA1vu4B7+RKkaW2Yq4AQtVBBFsAJU/AuIXBhN8gGWnstefhiZyWvLAEnbYS1uzSFP6Jvn4Baxx70JKkQojLib5AVTey1jjgkKJGO0AKWyOm7N7cSpgSpAdPH0Tfd/gp1z5C1ZgKqN9J2wFxcUUuAFLZAm+QC0Fb4YUVRFsAOvj4KW2dwtYE3yAWk/wS/PLMKfmuGHZ8MAXF/Ja32Yi5haAKWz4Ydm2cSpgU693Atb7km+Zwwh+WGcPpxw3gAkzCLY+iYUDW/Z3Adc/gpzyFrAqnALkJe+7DoItgAtRS2zuKqGE3yAx0oJvkdvYrfZmALURbDuL5/RLf13cAuDeBS2RpbtAm+QFVA3wR+3fUtFHoBDJnC0jIXH0HWsgMY8inPLuOkd9chp4z20ALQLSA8cI9jYAIa2zjzjBd8gRafS1vgiUho/kAKcsCGTOGWvoOpkAtB3z8Hm8x2Ff5ADp4+lXAlIvcmwH/2Q==') repeat left top",padding:"12px",overflow:"auto"},'pre > code[class*="language-"]':{fontSize:"1em"},':not(pre) > code[class*="language-"]':{borderRadius:"5px",border:"1px solid #000",color:"#DCCF8F",background:"#181914 url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAMAAA/+4ADkFkb2JlAGTAAAAAAf/bAIQACQYGBgcGCQcHCQ0IBwgNDwsJCQsPEQ4ODw4OERENDg4ODg0RERQUFhQUERoaHBwaGiYmJiYmKysrKysrKysrKwEJCAgJCgkMCgoMDwwODA8TDg4ODhMVDg4PDg4VGhMRERERExoXGhYWFhoXHR0aGh0dJCQjJCQrKysrKysrKysr/8AAEQgAjACMAwEiAAIRAQMRAf/EAF4AAQEBAAAAAAAAAAAAAAAAAAABBwEBAQAAAAAAAAAAAAAAAAAAAAIQAAEDAwIHAQEAAAAAAAAAAADwAREhYaExkUFRcYGxwdHh8REBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AyGFEjHaBS2fDDs2zkhKmBKktb7km+ZwwCnXPkLVmCTMItj6AXFxRS465/BTnkAJvkLkJe+7AKKoi2AtRS2zuAWsCb5GOlBN8gKfmuGHZ8MFqIth3ALmFoFwbwKWyAlTAp17uKqBvgBD8sM4fTjhvAhkzhaRkBMKBrfs7jGPIpzy7gFrAqnC0C0gB0EWwBDW2cBVQwm+QtPpa3wBO3sVvszCnLAhkzgL5/RLf13cLQd8/AGlu0Cb5HTx9KuAEieGJEdcehS3eRTp2ATdt3CpIm+QtZwAhROXFeb7swp/ahaM3kBE/jSIUBc/AWrgBN8uNFAl+b7sAXFxFn2YLUU5Ns7gFX8C4ib+hN8gFWXwK3bZglxEJm+gKdciLPsFV/TClsgJUwKJ5FVA7tvIFrfZhVfGJDcsCKaYgAqv6YRbE+RWOWBtu7+AL3yRalXLyKqAIIfk+zARbDgFyEsncYwJvlgFRW+GEWntIi2P0BooyFxcNr8Ep3+ANLbMO+QyhvbiqdgC0kVvgUUiLYgBS2QtPbiVI1/sgOmG9uO+Y8DW+7jS2zAOnj6O2BndwuIAUtkdRN8gFoK3wwXMQyZwHVbClsuNLd4E3yAUR6FVDBR+BafQGt93LVMxJTv8ABts4CVLhcfYWsCb5kC9/BHdU8CLYFY5bMAd+eX9MGthhpbA1vu4B7+RKkaW2Yq4AQtVBBFsAJU/AuIXBhN8gGWnstefhiZyWvLAEnbYS1uzSFP6Jvn4Baxx70JKkQojLib5AVTey1jjgkKJGO0AKWyOm7N7cSpgSpAdPH0Tfd/gp1z5C1ZgKqN9J2wFxcUUuAFLZAm+QC0Fb4YUVRFsAOvj4KW2dwtYE3yAWk/wS/PLMKfmuGHZ8MAXF/Ja32Yi5haAKWz4Ydm2cSpgU693Atb7km+Zwwh+WGcPpxw3gAkzCLY+iYUDW/Z3Adc/gpzyFrAqnALkJe+7DoItgAtRS2zuKqGE3yAx0oJvkdvYrfZmALURbDuL5/RLf13cAuDeBS2RpbtAm+QFVA3wR+3fUtFHoBDJnC0jIXH0HWsgMY8inPLuOkd9chp4z20ALQLSA8cI9jYAIa2zjzjBd8gRafS1vgiUho/kAKcsCGTOGWvoOpkAtB3z8Hm8x2Ff5ADp4+lXAlIvcmwH/2Q==') repeat left top",padding:"2px 6px"},namespace:{Opacity:".7"},comment:{color:"#586e75",fontStyle:"italic"},prolog:{color:"#586e75",fontStyle:"italic"},doctype:{color:"#586e75",fontStyle:"italic"},cdata:{color:"#586e75",fontStyle:"italic"},number:{color:"#b89859"},string:{color:"#468966"},char:{color:"#468966"},builtin:{color:"#468966"},inserted:{color:"#468966"},"attr-name":{color:"#b89859"},operator:{color:"#dccf8f"},entity:{color:"#dccf8f",cursor:"help"},url:{color:"#dccf8f"},".language-css .token.string":{color:"#dccf8f"},".style .token.string":{color:"#dccf8f"},selector:{color:"#859900"},regex:{color:"#859900"},atrule:{color:"#cb4b16"},keyword:{color:"#cb4b16"},"attr-value":{color:"#468966"},function:{color:"#b58900"},variable:{color:"#b58900"},placeholder:{color:"#b58900"},property:{color:"#b89859"},tag:{color:"#ffb03b"},boolean:{color:"#b89859"},constant:{color:"#b89859"},symbol:{color:"#b89859"},important:{color:"#dc322f"},statement:{color:"#dc322f"},deleted:{color:"#dc322f"},punctuation:{color:"#dccf8f"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"}}},fsL8:function(e,t,n){var o=n("cDf5").default;function r(){"use strict";e.exports=r=function(){return t},e.exports.__esModule=!0,e.exports.default=e.exports;var t={},n=Object.prototype,i=n.hasOwnProperty,a=Object.defineProperty||function(e,t,n){e[t]=n.value},s="function"==typeof Symbol?Symbol:{},l=s.iterator||"@@iterator",c=s.asyncIterator||"@@asyncIterator",u=s.toStringTag||"@@toStringTag";function d(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{d({},"")}catch(w){d=function(e,t,n){return e[t]=n}}function p(e,t,n,o){var r=t&&t.prototype instanceof m?t:m,i=Object.create(r.prototype),s=new O(o||[]);return a(i,"_invoke",{value:S(e,n,s)}),i}function f(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(w){return{type:"throw",arg:w}}}t.wrap=p;var h={};function m(){}function g(){}function T(){}var E={};d(E,l,(function(){return this}));var b=Object.getPrototypeOf,A=b&&b(b(N([])));A&&A!==n&&i.call(A,l)&&(E=A);var k=T.prototype=m.prototype=Object.create(E);function y(e){["next","throw","return"].forEach((function(t){d(e,t,(function(e){return this._invoke(t,e)}))}))}function _(e,t){function n(r,a,s,l){var c=f(e[r],e,a);if("throw"!==c.type){var u=c.arg,d=u.value;return d&&"object"==o(d)&&i.call(d,"__await")?t.resolve(d.__await).then((function(e){n("next",e,s,l)}),(function(e){n("throw",e,s,l)})):t.resolve(d).then((function(e){u.value=e,s(u)}),(function(e){return n("throw",e,s,l)}))}l(c.arg)}var r;a(this,"_invoke",{value:function(e,o){function i(){return new t((function(t,r){n(e,o,t,r)}))}return r=r?r.then(i,i):i()}})}function S(e,t,n){var o="suspendedStart";return function(r,i){if("executing"===o)throw new Error("Generator is already running");if("completed"===o){if("throw"===r)throw i;return M()}for(n.method=r,n.arg=i;;){var a=n.delegate;if(a){var s=C(a,n);if(s){if(s===h)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===o)throw o="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);o="executing";var l=f(e,t,n);if("normal"===l.type){if(o=n.done?"completed":"suspendedYield",l.arg===h)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(o="completed",n.method="throw",n.arg=l.arg)}}}function C(e,t){var n=t.method,o=e.iterator[n];if(void 0===o)return t.delegate=null,"throw"===n&&e.iterator.return&&(t.method="return",t.arg=void 0,C(e,t),"throw"===t.method)||"return"!==n&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+n+"' method")),h;var r=f(o,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,h;var i=r.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,h):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,h)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function v(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function O(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(x,this),this.reset(!0)}function N(e){if(e){var t=e[l];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,o=function t(){for(;++n=0;--o){var r=this.tryEntries[o],a=r.completion;if("root"===r.tryLoc)return n("end");if(r.tryLoc<=this.prev){var s=i.call(r,"catchLoc"),l=i.call(r,"finallyLoc");if(s&&l){if(this.prev=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&i.call(o,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),v(n),h}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var o=n.completion;if("throw"===o.type){var r=o.arg;v(n)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:N(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),h}},t}e.exports=r,e.exports.__esModule=!0,e.exports.default=e.exports},fuKP:function(e,t,n){"use strict";var o=n("Q3zd"),r=n("BjXi"),i=n("uDje");e.exports=function(e){return null===e||o(e)||i(e)?1:r(e)?2:void 0}},g4pe:function(e,t,n){e.exports=n("8Kt/")},gsvO:function(e,t,n){e.exports=r,r.peek=function(){return"`"};var o=n("7J+x");function r(e,t,n){for(var r,i,a,s,l=e.value||"",c="`",u=-1;new RegExp("(^|[^`])"+c+"([^`]|$)").test(l);)c+="`";for(/[^ \r\n]/.test(l)&&(/[ \r\n`]/.test(l.charAt(0))||/[ \r\n`]/.test(l.charAt(l.length-1)))&&(l=" "+l+" ");++up?n(i):(e.consume(i),T):41===i?f--?(e.consume(i),T):(e.exit("chunkString"),e.exit(u),e.exit(c),e.exit(a),t(i)):null===i||r(i)?f?n(i):(e.exit("chunkString"),e.exit(u),e.exit(c),e.exit(a),t(i)):o(i)?n(i):(e.consume(i),92===i?E:T)}function E(t){return 40===t||41===t||92===t?(e.consume(t),T):T(t)}}},hq1P:function(e,t,n){"use strict";var o=n("rm/B")(/[A-Za-z]/);e.exports=o},iX4R:function(e,t,n){"use strict";e.exports=function(e,t){return e(t,"blockquote",o(r(e,t),!0))};var o=n("Dvol"),r=n("WFsM")},iy38:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{color:"white",background:"none",fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",fontSize:"1em",textAlign:"left",textShadow:"0 -.1em .2em black",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none"},'pre[class*="language-"]':{color:"white",background:"hsl(0, 0%, 8%)",fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",fontSize:"1em",textAlign:"left",textShadow:"0 -.1em .2em black",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",borderRadius:".5em",border:".3em solid hsl(0, 0%, 33%)",boxShadow:"1px 1px .5em black inset",margin:".5em 0",overflow:"auto",padding:"1em"},':not(pre) > code[class*="language-"]':{background:"hsl(0, 0%, 8%)",borderRadius:".3em",border:".13em solid hsl(0, 0%, 33%)",boxShadow:"1px 1px .3em -.1em black inset",padding:".15em .2em .05em",whiteSpace:"normal"},'pre[class*="language-"]::-moz-selection':{background:"hsla(0, 0%, 93%, 0.15)",textShadow:"none"},'pre[class*="language-"]::selection':{background:"hsla(0, 0%, 93%, 0.15)",textShadow:"none"},'pre[class*="language-"] ::-moz-selection':{textShadow:"none",background:"hsla(0, 0%, 93%, 0.15)"},'code[class*="language-"]::-moz-selection':{textShadow:"none",background:"hsla(0, 0%, 93%, 0.15)"},'code[class*="language-"] ::-moz-selection':{textShadow:"none",background:"hsla(0, 0%, 93%, 0.15)"},'pre[class*="language-"] ::selection':{textShadow:"none",background:"hsla(0, 0%, 93%, 0.15)"},'code[class*="language-"]::selection':{textShadow:"none",background:"hsla(0, 0%, 93%, 0.15)"},'code[class*="language-"] ::selection':{textShadow:"none",background:"hsla(0, 0%, 93%, 0.15)"},comment:{color:"hsl(0, 0%, 47%)"},prolog:{color:"hsl(0, 0%, 47%)"},doctype:{color:"hsl(0, 0%, 47%)"},cdata:{color:"hsl(0, 0%, 47%)"},punctuation:{Opacity:".7"},namespace:{Opacity:".7"},tag:{color:"hsl(14, 58%, 55%)"},boolean:{color:"hsl(14, 58%, 55%)"},number:{color:"hsl(14, 58%, 55%)"},deleted:{color:"hsl(14, 58%, 55%)"},keyword:{color:"hsl(53, 89%, 79%)"},property:{color:"hsl(53, 89%, 79%)"},selector:{color:"hsl(53, 89%, 79%)"},constant:{color:"hsl(53, 89%, 79%)"},symbol:{color:"hsl(53, 89%, 79%)"},builtin:{color:"hsl(53, 89%, 79%)"},"attr-name":{color:"hsl(76, 21%, 52%)"},"attr-value":{color:"hsl(76, 21%, 52%)"},string:{color:"hsl(76, 21%, 52%)"},char:{color:"hsl(76, 21%, 52%)"},operator:{color:"hsl(76, 21%, 52%)"},entity:{color:"hsl(76, 21%, 52%)",cursor:"help"},url:{color:"hsl(76, 21%, 52%)"},".language-css .token.string":{color:"hsl(76, 21%, 52%)"},".style .token.string":{color:"hsl(76, 21%, 52%)"},variable:{color:"hsl(76, 21%, 52%)"},inserted:{color:"hsl(76, 21%, 52%)"},atrule:{color:"hsl(218, 22%, 55%)"},regex:{color:"hsl(42, 75%, 65%)"},important:{color:"hsl(42, 75%, 65%)",fontWeight:"bold"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},"pre[data-line]":{padding:"1em 0 1em 3em",position:"relative"},".language-markup .token.tag":{color:"hsl(33, 33%, 52%)"},".language-markup .token.attr-name":{color:"hsl(33, 33%, 52%)"},".language-markup .token.punctuation":{color:"hsl(33, 33%, 52%)"},"":{position:"relative",zIndex:"1"},".line-highlight":{background:"linear-gradient(to right, hsla(0, 0%, 33%, .1) 70%, hsla(0, 0%, 33%, 0))",borderBottom:"1px dashed hsl(0, 0%, 33%)",borderTop:"1px dashed hsl(0, 0%, 33%)",left:"0",lineHeight:"inherit",marginTop:"0.75em",padding:"inherit 0",pointerEvents:"none",position:"absolute",right:"0",whiteSpace:"pre",zIndex:"0"},".line-highlight:before":{backgroundColor:"hsl(215, 15%, 59%)",borderRadius:"999px",boxShadow:"0 1px white",color:"hsl(24, 20%, 95%)",content:"attr(data-start)",font:"bold 65%/1.5 sans-serif",left:".6em",minWidth:"1em",padding:"0 .5em",position:"absolute",textAlign:"center",textShadow:"none",top:".4em",verticalAlign:".3em"},".line-highlight[data-end]:after":{backgroundColor:"hsl(215, 15%, 59%)",borderRadius:"999px",boxShadow:"0 1px white",color:"hsl(24, 20%, 95%)",content:"attr(data-end)",font:"bold 65%/1.5 sans-serif",left:".6em",minWidth:"1em",padding:"0 .5em",position:"absolute",textAlign:"center",textShadow:"none",top:"auto",verticalAlign:".3em",bottom:".4em"}}},jO3g:function(e,t,n){"use strict";e.exports=function(e,t,n){var o,r=t&&t.type;if(!r)throw new Error("Expected node, got `"+t+"`");o=i.call(e.handlers,r)?e.handlers[r]:e.passThrough&&e.passThrough.indexOf(r)>-1?s:e.unknownHandler;return("function"===typeof o?o:a)(e,t,n)};var o=n("vUGn"),r=n("WFsM"),i={}.hasOwnProperty;function a(e,t){return function(e){var t=e.data||{};if(i.call(t,"hName")||i.call(t,"hProperties")||i.call(t,"hChildren"))return!1;return"value"in e}(t)?e.augment(t,o("text",t.value)):e(t,"div",r(e,t))}function s(e,t){var n;return t.children?((n=Object.assign({},t)).children=r(e,t),n):t}},jeK3:function(e,t,n){"use strict";e.exports=function(e){for(var t=-1,n=0;++t-1?void 0:4)}},exit:function(e){e.exit("blockQuote")}};e.exports=i},kViG:function(e,t,n){"use strict";var o=n("E/Jm"),r=n("2N74");e.exports=function(e,t,n,i,a,s){var l,c=this,u=0;return function(t){return e.enter(i),e.enter(a),e.consume(t),e.exit(a),e.enter(s),d};function d(r){return null===r||91===r||93===r&&!l||94===r&&!u&&"_hiddenFootnoteSupport"in c.parser.constructs||u>999?n(r):93===r?(e.exit(s),e.enter(a),e.consume(r),e.exit(a),e.exit(i),t):o(r)?(e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),d):(e.enter("chunkString",{contentType:"string"}),p(r))}function p(t){return null===t||91===t||93===t||o(t)||u++>999?(e.exit("chunkString"),d(t)):(e.consume(t),l=l||!r(t),92===t?f:p)}function f(t){return 91===t||92===t||93===t?(e.consume(t),u++,p):p(t)}}},kWEd:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{fontFamily:'Consolas, Menlo, Monaco, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace',fontSize:"14px",lineHeight:"1.375",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",background:"#322d29",color:"#88786d"},'pre[class*="language-"]':{fontFamily:'Consolas, Menlo, Monaco, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace',fontSize:"14px",lineHeight:"1.375",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",background:"#322d29",color:"#88786d",padding:"1em",margin:".5em 0",overflow:"auto"},'pre > code[class*="language-"]':{fontSize:"1em"},'pre[class*="language-"]::-moz-selection':{textShadow:"none",background:"#6f5849"},'pre[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#6f5849"},'code[class*="language-"]::-moz-selection':{textShadow:"none",background:"#6f5849"},'code[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#6f5849"},'pre[class*="language-"]::selection':{textShadow:"none",background:"#6f5849"},'pre[class*="language-"] ::selection':{textShadow:"none",background:"#6f5849"},'code[class*="language-"]::selection':{textShadow:"none",background:"#6f5849"},'code[class*="language-"] ::selection':{textShadow:"none",background:"#6f5849"},':not(pre) > code[class*="language-"]':{padding:".1em",borderRadius:".3em"},comment:{color:"#6a5f58"},prolog:{color:"#6a5f58"},doctype:{color:"#6a5f58"},cdata:{color:"#6a5f58"},punctuation:{color:"#6a5f58"},namespace:{Opacity:".7"},tag:{color:"#bfa05a"},operator:{color:"#bfa05a"},number:{color:"#bfa05a"},property:{color:"#88786d"},function:{color:"#88786d"},"tag-id":{color:"#fff3eb"},selector:{color:"#fff3eb"},"atrule-id":{color:"#fff3eb"},"code.language-javascript":{color:"#a48774"},"attr-name":{color:"#a48774"},"code.language-css":{color:"#fcc440"},"code.language-scss":{color:"#fcc440"},boolean:{color:"#fcc440"},string:{color:"#fcc440"},entity:{color:"#fcc440",cursor:"help"},url:{color:"#fcc440"},".language-css .token.string":{color:"#fcc440"},".language-scss .token.string":{color:"#fcc440"},".style .token.string":{color:"#fcc440"},"attr-value":{color:"#fcc440"},keyword:{color:"#fcc440"},control:{color:"#fcc440"},directive:{color:"#fcc440"},unit:{color:"#fcc440"},statement:{color:"#fcc440"},regex:{color:"#fcc440"},atrule:{color:"#fcc440"},placeholder:{color:"#fcc440"},variable:{color:"#fcc440"},deleted:{textDecoration:"line-through"},inserted:{borderBottom:"1px dotted #fff3eb",textDecoration:"none"},italic:{fontStyle:"italic"},important:{fontWeight:"bold",color:"#a48774"},bold:{fontWeight:"bold"},"pre > code.highlight":{Outline:".4em solid #816d5f",OutlineOffset:".4em"},".line-numbers .line-numbers-rows":{borderRightColor:"#35302b"},".line-numbers-rows > span:before":{color:"#46403d"},".line-highlight":{background:"linear-gradient(to right, rgba(191, 160, 90, 0.2) 70%, rgba(191, 160, 90, 0))"}}},ki31:function(e,t){t.canContainEols=["delete"],t.enter={strikethrough:function(e){this.enter({type:"delete",children:[]},e)}},t.exit={strikethrough:function(e){this.exit(e)}}},ktEA:function(e,t,n){"use strict";e.exports=function(e,t){return e(t,"em",o(e,t))};var o=n("WFsM")},lQDV:function(e,t,n){"use strict";e.exports=function(e,t){return e(t,"h"+t.depth,o(e,t))};var o=n("WFsM")},lVxK:function(e,t,n){"use strict";const o=n("zpDW"),r=n("UwWT"),i=r.TAG_NAMES,a=r.NAMESPACES,s=r.ATTRS,l="text/html",c="application/xhtml+xml",u={attributename:"attributeName",attributetype:"attributeType",basefrequency:"baseFrequency",baseprofile:"baseProfile",calcmode:"calcMode",clippathunits:"clipPathUnits",diffuseconstant:"diffuseConstant",edgemode:"edgeMode",filterunits:"filterUnits",glyphref:"glyphRef",gradienttransform:"gradientTransform",gradientunits:"gradientUnits",kernelmatrix:"kernelMatrix",kernelunitlength:"kernelUnitLength",keypoints:"keyPoints",keysplines:"keySplines",keytimes:"keyTimes",lengthadjust:"lengthAdjust",limitingconeangle:"limitingConeAngle",markerheight:"markerHeight",markerunits:"markerUnits",markerwidth:"markerWidth",maskcontentunits:"maskContentUnits",maskunits:"maskUnits",numoctaves:"numOctaves",pathlength:"pathLength",patterncontentunits:"patternContentUnits",patterntransform:"patternTransform",patternunits:"patternUnits",pointsatx:"pointsAtX",pointsaty:"pointsAtY",pointsatz:"pointsAtZ",preservealpha:"preserveAlpha",preserveaspectratio:"preserveAspectRatio",primitiveunits:"primitiveUnits",refx:"refX",refy:"refY",repeatcount:"repeatCount",repeatdur:"repeatDur",requiredextensions:"requiredExtensions",requiredfeatures:"requiredFeatures",specularconstant:"specularConstant",specularexponent:"specularExponent",spreadmethod:"spreadMethod",startoffset:"startOffset",stddeviation:"stdDeviation",stitchtiles:"stitchTiles",surfacescale:"surfaceScale",systemlanguage:"systemLanguage",tablevalues:"tableValues",targetx:"targetX",targety:"targetY",textlength:"textLength",viewbox:"viewBox",viewtarget:"viewTarget",xchannelselector:"xChannelSelector",ychannelselector:"yChannelSelector",zoomandpan:"zoomAndPan"},d={"xlink:actuate":{prefix:"xlink",name:"actuate",namespace:a.XLINK},"xlink:arcrole":{prefix:"xlink",name:"arcrole",namespace:a.XLINK},"xlink:href":{prefix:"xlink",name:"href",namespace:a.XLINK},"xlink:role":{prefix:"xlink",name:"role",namespace:a.XLINK},"xlink:show":{prefix:"xlink",name:"show",namespace:a.XLINK},"xlink:title":{prefix:"xlink",name:"title",namespace:a.XLINK},"xlink:type":{prefix:"xlink",name:"type",namespace:a.XLINK},"xml:base":{prefix:"xml",name:"base",namespace:a.XML},"xml:lang":{prefix:"xml",name:"lang",namespace:a.XML},"xml:space":{prefix:"xml",name:"space",namespace:a.XML},xmlns:{prefix:"",name:"xmlns",namespace:a.XMLNS},"xmlns:xlink":{prefix:"xmlns",name:"xlink",namespace:a.XMLNS}},p=t.SVG_TAG_NAMES_ADJUSTMENT_MAP={altglyph:"altGlyph",altglyphdef:"altGlyphDef",altglyphitem:"altGlyphItem",animatecolor:"animateColor",animatemotion:"animateMotion",animatetransform:"animateTransform",clippath:"clipPath",feblend:"feBlend",fecolormatrix:"feColorMatrix",fecomponenttransfer:"feComponentTransfer",fecomposite:"feComposite",feconvolvematrix:"feConvolveMatrix",fediffuselighting:"feDiffuseLighting",fedisplacementmap:"feDisplacementMap",fedistantlight:"feDistantLight",feflood:"feFlood",fefunca:"feFuncA",fefuncb:"feFuncB",fefuncg:"feFuncG",fefuncr:"feFuncR",fegaussianblur:"feGaussianBlur",feimage:"feImage",femerge:"feMerge",femergenode:"feMergeNode",femorphology:"feMorphology",feoffset:"feOffset",fepointlight:"fePointLight",fespecularlighting:"feSpecularLighting",fespotlight:"feSpotLight",fetile:"feTile",feturbulence:"feTurbulence",foreignobject:"foreignObject",glyphref:"glyphRef",lineargradient:"linearGradient",radialgradient:"radialGradient",textpath:"textPath"},f={[i.B]:!0,[i.BIG]:!0,[i.BLOCKQUOTE]:!0,[i.BODY]:!0,[i.BR]:!0,[i.CENTER]:!0,[i.CODE]:!0,[i.DD]:!0,[i.DIV]:!0,[i.DL]:!0,[i.DT]:!0,[i.EM]:!0,[i.EMBED]:!0,[i.H1]:!0,[i.H2]:!0,[i.H3]:!0,[i.H4]:!0,[i.H5]:!0,[i.H6]:!0,[i.HEAD]:!0,[i.HR]:!0,[i.I]:!0,[i.IMG]:!0,[i.LI]:!0,[i.LISTING]:!0,[i.MENU]:!0,[i.META]:!0,[i.NOBR]:!0,[i.OL]:!0,[i.P]:!0,[i.PRE]:!0,[i.RUBY]:!0,[i.S]:!0,[i.SMALL]:!0,[i.SPAN]:!0,[i.STRONG]:!0,[i.STRIKE]:!0,[i.SUB]:!0,[i.SUP]:!0,[i.TABLE]:!0,[i.TT]:!0,[i.U]:!0,[i.UL]:!0,[i.VAR]:!0};t.causesExit=function(e){const t=e.tagName;return!!(t===i.FONT&&(null!==o.getTokenAttr(e,s.COLOR)||null!==o.getTokenAttr(e,s.SIZE)||null!==o.getTokenAttr(e,s.FACE)))||f[t]},t.adjustTokenMathMLAttrs=function(e){for(let t=0;t{const i=r.MODE[o];n[i]=function(n){e.ctLoc=e._getCurrentLocation(),t[i].call(this,n)}})),n}}},ljYj:function(e,t,n){"use strict";var o=n("rm/B")(/\d/);e.exports=o},lwAK:function(e,t,n){"use strict";var o;t.__esModule=!0,t.AmpStateContext=void 0;var r=((o=n("q1tI"))&&o.__esModule?o:{default:o}).default.createContext({});t.AmpStateContext=r},lwsE:function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},e.exports.__esModule=!0,e.exports.default=e.exports},mAwW:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{fontFamily:'Consolas, Menlo, Monaco, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace',fontSize:"14px",lineHeight:"1.375",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",background:"#f5f7ff",color:"#5e6687"},'pre[class*="language-"]':{fontFamily:'Consolas, Menlo, Monaco, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace',fontSize:"14px",lineHeight:"1.375",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",background:"#f5f7ff",color:"#5e6687",padding:"1em",margin:".5em 0",overflow:"auto"},'pre > code[class*="language-"]':{fontSize:"1em"},'pre[class*="language-"]::-moz-selection':{textShadow:"none",background:"#dfe2f1"},'pre[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#dfe2f1"},'code[class*="language-"]::-moz-selection':{textShadow:"none",background:"#dfe2f1"},'code[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#dfe2f1"},'pre[class*="language-"]::selection':{textShadow:"none",background:"#dfe2f1"},'pre[class*="language-"] ::selection':{textShadow:"none",background:"#dfe2f1"},'code[class*="language-"]::selection':{textShadow:"none",background:"#dfe2f1"},'code[class*="language-"] ::selection':{textShadow:"none",background:"#dfe2f1"},':not(pre) > code[class*="language-"]':{padding:".1em",borderRadius:".3em"},comment:{color:"#898ea4"},prolog:{color:"#898ea4"},doctype:{color:"#898ea4"},cdata:{color:"#898ea4"},punctuation:{color:"#5e6687"},namespace:{Opacity:".7"},operator:{color:"#c76b29"},boolean:{color:"#c76b29"},number:{color:"#c76b29"},property:{color:"#c08b30"},tag:{color:"#3d8fd1"},string:{color:"#22a2c9"},selector:{color:"#6679cc"},"attr-name":{color:"#c76b29"},entity:{color:"#22a2c9",cursor:"help"},url:{color:"#22a2c9"},".language-css .token.string":{color:"#22a2c9"},".style .token.string":{color:"#22a2c9"},"attr-value":{color:"#ac9739"},keyword:{color:"#ac9739"},control:{color:"#ac9739"},directive:{color:"#ac9739"},unit:{color:"#ac9739"},statement:{color:"#22a2c9"},regex:{color:"#22a2c9"},atrule:{color:"#22a2c9"},placeholder:{color:"#3d8fd1"},variable:{color:"#3d8fd1"},deleted:{textDecoration:"line-through"},inserted:{borderBottom:"1px dotted #202746",textDecoration:"none"},italic:{fontStyle:"italic"},important:{fontWeight:"bold",color:"#c94922"},bold:{fontWeight:"bold"},"pre > code.highlight":{Outline:"0.4em solid #c94922",OutlineOffset:".4em"},".line-numbers .line-numbers-rows":{borderRightColor:"#dfe2f1"},".line-numbers-rows > span:before":{color:"#979db4"},".line-highlight":{background:"linear-gradient(to right, rgba(107, 115, 148, 0.2) 70%, rgba(107, 115, 148, 0))"}}},mPvQ:function(e,t,n){var o=n("5fIB"),r=n("rlHP"),i=n("KckH"),a=n("kG2m");e.exports=function(e){return o(e)||r(e)||i(e)||a()}},nbFU:function(e,t,n){"use strict";e.exports=function(e,t){var n=e.footnoteById,r=e.footnoteOrder,i=1;for(;i in n;)i++;return i=String(i),r.push(i),n[i]={type:"footnoteDefinition",identifier:i,children:[{type:"paragraph",children:t.children}],position:t.position},o(e,{type:"footnoteReference",identifier:i,position:t.position})};var o=n("/BR8")},niEq:function(e,t,n){"use strict";const o=n("9kwo"),r=n("Ne21"),i=n("lb9w"),a=n("HwUZ");e.exports=class extends o{constructor(e,t){super(e,t),this.opts=t,this.ctLoc=null,this.locBeforeToken=!1}_setErrorLocation(e){this.ctLoc&&(e.startLine=this.ctLoc.startLine,e.startCol=this.ctLoc.startCol,e.startOffset=this.ctLoc.startOffset,e.endLine=this.locBeforeToken?this.ctLoc.startLine:this.ctLoc.endLine,e.endCol=this.locBeforeToken?this.ctLoc.startCol:this.ctLoc.endCol,e.endOffset=this.locBeforeToken?this.ctLoc.startOffset:this.ctLoc.endOffset)}_getOverriddenMethods(e,t){return{_bootstrap(n,o){t._bootstrap.call(this,n,o),a.install(this.tokenizer,r,e.opts),a.install(this.tokenizer,i)},_processInputToken(n){e.ctLoc=n.location,t._processInputToken.call(this,n)},_err(t,n){e.locBeforeToken=n&&n.beforeToken,e._reportError(t)}}}}},o0o1:function(e,t,n){var o=n("fsL8")();e.exports=o;try{regeneratorRuntime=o}catch(r){"object"===typeof globalThis?globalThis.regeneratorRuntime=o:Function("r","regeneratorRuntime = r")(o)}},o8bm:function(e,t,n){"use strict";var o=/[\0\t\n\r]/g;e.exports=function(){var e,t=!0,n=1,r="";return function(i,a,s){var l,c,u,d,p,f=[];i=r+i.toString(a),u=0,r="",t&&(65279===i.charCodeAt(0)&&u++,t=void 0);for(;u code[class*='language-']":{background:"#1e1e3f",padding:"0.1em",borderRadius:"0.3em"},"":{fontWeight:"400"},comment:{color:"#b362ff"},prolog:{color:"#b362ff"},cdata:{color:"#b362ff"},delimiter:{color:"#ff9d00"},keyword:{color:"#ff9d00"},selector:{color:"#ff9d00"},important:{color:"#ff9d00"},atrule:{color:"#ff9d00"},operator:{color:"rgb(255, 180, 84)",background:"none"},"attr-name":{color:"rgb(255, 180, 84)"},punctuation:{color:"#ffffff"},boolean:{color:"rgb(255, 98, 140)"},tag:{color:"rgb(255, 157, 0)"},"tag .punctuation":{color:"rgb(255, 157, 0)"},doctype:{color:"rgb(255, 157, 0)"},builtin:{color:"rgb(255, 157, 0)"},entity:{color:"#6897bb",background:"none"},symbol:{color:"#6897bb"},number:{color:"#ff628c"},property:{color:"#ff628c"},constant:{color:"#ff628c"},variable:{color:"#ff628c"},string:{color:"#a5ff90"},char:{color:"#a5ff90"},"attr-value":{color:"#a5c261"},"attr-value .punctuation":{color:"#a5c261"},"attr-value .punctuation:first-child":{color:"#a9b7c6"},url:{color:"#287bde",textDecoration:"underline",background:"none"},function:{color:"rgb(250, 208, 0)"},regex:{background:"#364135"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},inserted:{background:"#00ff00"},deleted:{background:"#ff000d"},"code.language-css .token.property":{color:"#a9b7c6"},"code.language-css .token.property + .token.punctuation":{color:"#a9b7c6"},"code.language-css .token.id":{color:"#ffc66d"},"code.language-css .token.selector > .token.class":{color:"#ffc66d"},"code.language-css .token.selector > .token.attribute":{color:"#ffc66d"},"code.language-css .token.selector > .token.pseudo-class":{color:"#ffc66d"},"code.language-css .token.selector > .token.pseudo-element":{color:"#ffc66d"},"class-name":{color:"#fb94ff"},".language-css .token.string":{background:"none"},".style .token.string":{background:"none"},"pre .line-highlight":{marginTop:"36px",background:"linear-gradient(to right, rgba(179, 98, 255, 0.17), transparent)"},"pre .line-highlight.line-highlight":{marginTop:"36px",background:"linear-gradient(to right, rgba(179, 98, 255, 0.17), transparent)"},"pre > code.line-highlight":{marginTop:"36px",background:"linear-gradient(to right, rgba(179, 98, 255, 0.17), transparent)"},"pre .line-highlight:before":{content:"''"},"pre > code.line-highlight:before":{content:"''"},"pre .line-highlight[data-end]:after":{content:"''"},"pre > code.line-highlight[data-end]:after":{content:"''"}}},pI64:function(e,t,n){"use strict";e.exports=function(e,t){var n,i,a={},s=t.ordered?"ol":"ul",l=-1;"number"===typeof t.start&&1!==t.start&&(a.start=t.start);n=r(e,t),i=n.length;for(;++l=55296&&e<=57343},t.isSurrogatePair=function(e){return e>=56320&&e<=57343},t.getSurrogatePairCodePoint=function(e,t){return 1024*(e-55296)+9216+t},t.isControlCodePoint=function(e){return 32!==e&&10!==e&&13!==e&&9!==e&&12!==e&&e>=1&&e<=31||e>=127&&e<=159},t.isUndefinedCodePoint=function(e){return e>=64976&&e<=65007||o.indexOf(e)>-1}},pe0m:function(e,t,n){"use strict";e.exports=function(e){return null===e||void 0===e?[]:"length"in e?e:[e]}},penn:function(e,t,n){e.exports=n("YK6v")},qD0n:function(e,t){function n(e){this.stack[this.stack.length-2].checked="taskListCheckValueChecked"===e.type}t.exit={taskListCheckValueChecked:n,taskListCheckValueUnchecked:n,paragraph:function(e){var t,n=this.stack[this.stack.length-2],o=this.stack[this.stack.length-1],r=n.children,i=o.children[0],a=-1;if(n&&"listItem"===n.type&&"boolean"===typeof n.checked&&i&&"text"===i.type){for(;++a-1||r(i.events,"linePrefix")<4?e.interrupt(i.parser.constructs.flow,n,t)(a):t(a)}},partial:!0};e.exports=s},rRyo:function(e,t,n){"use strict";e.exports=function(e,t){var n,i=e.definition(t.identifier);if(!i)return r(e,t);n={src:o(i.url||""),alt:t.alt},null!==i.title&&void 0!==i.title&&(n.title=i.title);return e(t,"img",n)};var o=n("xGQ6"),r=n("WniP")},rS7C:function(e,t,n){"use strict";var o=n("F6fn"),r=n("bAF5"),i=n("r3IV"),a=n("TTG4").parse,s=n("vfP8").parse;e.exports=function(e,t,n){var r=n?function(e){var t,n=e.length,o=-1,r={};for(;++o code[class*="language-"]':{background:"#282a36",padding:".1em",borderRadius:".3em",whiteSpace:"normal"},comment:{color:"#6272a4"},prolog:{color:"#6272a4"},doctype:{color:"#6272a4"},cdata:{color:"#6272a4"},punctuation:{color:"#f8f8f2"},".namespace":{Opacity:".7"},property:{color:"#ff79c6"},tag:{color:"#ff79c6"},constant:{color:"#ff79c6"},symbol:{color:"#ff79c6"},deleted:{color:"#ff79c6"},boolean:{color:"#bd93f9"},number:{color:"#bd93f9"},selector:{color:"#50fa7b"},"attr-name":{color:"#50fa7b"},string:{color:"#50fa7b"},char:{color:"#50fa7b"},builtin:{color:"#50fa7b"},inserted:{color:"#50fa7b"},operator:{color:"#f8f8f2"},entity:{color:"#f8f8f2",cursor:"help"},url:{color:"#f8f8f2"},".language-css .token.string":{color:"#f8f8f2"},".style .token.string":{color:"#f8f8f2"},variable:{color:"#f8f8f2"},atrule:{color:"#f1fa8c"},"attr-value":{color:"#f1fa8c"},function:{color:"#f1fa8c"},"class-name":{color:"#f1fa8c"},keyword:{color:"#8be9fd"},regex:{color:"#ffb86c"},important:{color:"#ffb86c",fontWeight:"bold"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"}}},srZV:function(e,t,n){"use strict";const o=n("9kwo"),r=n("CGnT"),i=n("HwUZ");e.exports=class extends o{constructor(e,t){super(e,t),this.posTracker=i.install(e,r),this.lastErrOffset=-1}_reportError(e){this.lastErrOffset!==this.posTracker.offset&&(this.lastErrOffset=this.posTracker.offset,super._reportError(e))}}},tCBg:function(e,t,n){var o=n("C+bE"),r=n("qXWd");e.exports=function(e,t){return!t||"object"!==o(t)&&"function"!==typeof t?r(e):t}},tgGP:function(e,t,n){"use strict";var o=n("ueQ+"),r=n("+OJB"),i=n("c6jy");e.exports=l;var a={}.hasOwnProperty,s=["history","path","basename","stem","extname","dirname"];function l(e){var t,n;if(e){if("string"===typeof e||i(e))e={contents:e};else if("message"in e&&"messages"in e)return e}else e={};if(!(this instanceof l))return new l(e);for(this.data={},this.messages=[],this.history=[],this.cwd=r.cwd(),n=-1;++n-1)throw new Error("`"+t+"` cannot be a path: did not expect `"+o.sep+"`")}function u(e,t){if(!e)throw new Error("`"+t+"` cannot be empty")}function d(e,t){if(!e)throw new Error("Setting `"+t+"` requires `path` to be set too")}l.prototype.toString=function(e){return(this.contents||"").toString(e)},Object.defineProperty(l.prototype,"path",{get:function(){return this.history[this.history.length-1]},set:function(e){u(e,"path"),this.path!==e&&this.history.push(e)}}),Object.defineProperty(l.prototype,"dirname",{get:function(){return"string"===typeof this.path?o.dirname(this.path):void 0},set:function(e){d(this.path,"dirname"),this.path=o.join(e||"",this.basename)}}),Object.defineProperty(l.prototype,"basename",{get:function(){return"string"===typeof this.path?o.basename(this.path):void 0},set:function(e){u(e,"basename"),c(e,"basename"),this.path=o.join(this.dirname||"",e)}}),Object.defineProperty(l.prototype,"extname",{get:function(){return"string"===typeof this.path?o.extname(this.path):void 0},set:function(e){if(c(e,"extname"),d(this.path,"extname"),e){if(46!==e.charCodeAt(0))throw new Error("`extname` must start with `.`");if(e.indexOf(".",1)>-1)throw new Error("`extname` cannot contain multiple dots")}this.path=o.join(this.dirname,this.stem+(e||""))}}),Object.defineProperty(l.prototype,"stem",{get:function(){return"string"===typeof this.path?o.basename(this.path,this.extname):void 0},set:function(e){u(e,"stem"),c(e,"stem"),this.path=o.join(this.dirname||"",e+(this.extname||""))}})},u0PD:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'pre[class*="language-"]':{color:"#d4d4d4",fontSize:"13px",textShadow:"none",fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",padding:"1em",margin:".5em 0",overflow:"auto",background:"#1e1e1e"},'code[class*="language-"]':{color:"#d4d4d4",fontSize:"13px",textShadow:"none",fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none"},'pre[class*="language-"]::selection':{textShadow:"none",background:"#b3d4fc"},'code[class*="language-"]::selection':{textShadow:"none",background:"#b3d4fc"},':not(pre) > code[class*="language-"]':{padding:".1em .3em",borderRadius:".3em",color:"#db4c69",background:"#f9f2f4"},".namespace":{Opacity:".7"},comment:{color:"#6a9955"},prolog:{color:"#6a9955"},doctype:{color:"#6a9955"},cdata:{color:"#6a9955"},punctuation:{color:"#d4d4d4"},property:{color:"#9cdcfe"},tag:{color:"#569cd6"},boolean:{color:"#569cd6"},number:{color:"#b5cea8"},constant:{color:"#9CDCFE"},symbol:{color:"#b5cea8"},deleted:{color:"#b5cea8"},selector:{color:"#d7ba7d"},"attr-name":{color:"#9cdcfe"},string:{color:"#ce9178"},char:{color:"#ce9178"},builtin:{color:"#ce9178"},inserted:{color:"#ce9178"},operator:{color:"#d4d4d4",background:"#1e1e1e"},entity:{color:"#4ec9b0",background:"#1e1e1e",cursor:"unset"},url:{color:"#d4d4d4",background:"#1e1e1e"},".language-css .token.string":{color:"#d4d4d4",background:"#1e1e1e"},".style .token.string":{color:"#d4d4d4",background:"#1e1e1e"},atrule:{color:"#c586c0"},"attr-value":{color:"#ce9178"},keyword:{color:"#c586c0"},function:{color:"#dcdcaa"},regex:{color:"#d16969"},important:{color:"#d16969",fontWeight:"bold"},variable:{color:"#d16969"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},"class-name":{color:"#4EC9B0"},parameter:{color:"#9CDCFE"},interpolation:{color:"#9CDCFE"},"punctuation.interpolation-punctuation":{color:"#569cd6"},namespace:{color:"#4ec9b0"},'pre[class*="language-javascript"]':{color:"#4ec9b0"},'code[class*="language-javascript"]':{color:"#4ec9b0"},'pre[class*="language-css"]':{color:"#CE9178"},'code[class*="language-css"]':{color:"#CE9178"},'pre[class*="language-html"]':{color:"#d4d4d4"},'code[class*="language-html"]':{color:"#d4d4d4"},".language-html .token.punctuation":{color:"#808080"},"pre[data-line]":{position:"relative"},'pre[class*="language-"] > code[class*="language-"]':{position:"relative",zIndex:"1"},".line-highlight":{position:"absolute",left:"0",right:"0",padding:"inherit 0",marginTop:"1em",background:"#f7ebc6",boxShadow:"inset 5px 0 0 #f7d87c",zIndex:"0",pointerEvents:"none",lineHeight:"inherit",whiteSpace:"pre"}}},uDje:function(e,t,n){"use strict";var o=n("rm/B")(/\s/);e.exports=o},uGmZ:function(e,t,n){e.exports=n("CGL2")},"ueQ+":function(e,t,n){"use strict";function o(e){var t,n;return r(e),t=47===e.charCodeAt(0),(n=function(e,t){var n,o,r="",i=0,a=-1,s=0,l=-1;for(;++l<=e.length;){if(l2){if((o=r.lastIndexOf("/"))!==r.length-1){o<0?(r="",i=0):i=(r=r.slice(0,o)).length-1-r.lastIndexOf("/"),a=l,s=0;continue}}else if(r.length){r="",i=0,a=l,s=0;continue}t&&(r=r.length?r+"/..":"..",i=2)}else r.length?r+="/"+e.slice(a+1,l):r=e.slice(a+1,l),i=l-a-1;a=l,s=0}else 46===n&&s>-1?s++:s=-1}return r}(e,!t)).length||t||(n="."),n.length&&47===e.charCodeAt(e.length-1)&&(n+="/"),t?"/"+n:n}function r(e){if("string"!==typeof e)throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}t.basename=function(e,t){var n,o,i,a,s=0,l=-1;if(void 0!==t&&"string"!==typeof t)throw new TypeError('"ext" argument must be a string');if(r(e),n=e.length,void 0===t||!t.length||t.length>e.length){for(;n--;)if(47===e.charCodeAt(n)){if(i){s=n+1;break}}else l<0&&(i=!0,l=n+1);return l<0?"":e.slice(s,l)}if(t===e)return"";o=-1,a=t.length-1;for(;n--;)if(47===e.charCodeAt(n)){if(i){s=n+1;break}}else o<0&&(i=!0,o=n+1),a>-1&&(e.charCodeAt(n)===t.charCodeAt(a--)?a<0&&(l=n):(a=-1,l=o));s===l?l=o:l<0&&(l=e.length);return e.slice(s,l)},t.dirname=function(e){var t,n,o;if(r(e),!e.length)return".";t=-1,o=e.length;for(;--o;)if(47===e.charCodeAt(o)){if(n){t=o;break}}else n||(n=!0);return t<0?47===e.charCodeAt(0)?"/":".":1===t&&47===e.charCodeAt(0)?"//":e.slice(0,t)},t.extname=function(e){var t,n,o,i=-1,a=0,s=-1,l=0;r(e),o=e.length;for(;o--;)if(47!==(n=e.charCodeAt(o)))s<0&&(t=!0,s=o+1),46===n?i<0?i=o:1!==l&&(l=1):i>-1&&(l=-1);else if(t){a=o+1;break}if(i<0||s<0||0===l||1===l&&i===s-1&&i===a+1)return"";return e.slice(i,s)},t.join=function(){var e,t=-1;for(;++t0&&("\r"===c||"\n"===c)&&"html"===i.type&&(s[s.length-1]=s[s.length-1].replace(/(\r?\n|\r)$/," "),c=" "),s.push(t.handle(i,e,t,{before:c,after:o})),c=s[s.length-1].slice(-1);return s.join("")}},uzq8:function(e,t,n){"use strict";e.exports=l;var o=n("Zasy"),r=n("AJTF"),i=!0,a="skip",s=!1;function l(e,t,n,l){var c,u;"function"===typeof t&&"function"!==typeof n&&(l=n,n=t,t=null),u=o(t),c=l?-1:1,function e(o,d,p){var f,h="object"===typeof o&&null!==o?o:{};"string"===typeof h.type&&(f="string"===typeof h.tagName?h.tagName:"string"===typeof h.name?h.name:void 0,m.displayName="node ("+r(h.type+(f?"<"+f+">":""))+")");return m;function m(){var r,f,h=p.concat(o),m=[];if((!t||u(o,d,p[p.length-1]||null))&&(m=function(e){if(null!==e&&"object"===typeof e&&"length"in e)return e;if("number"===typeof e)return[i,e];return[e]}(n(o,p)))[0]===s)return m;if(o.children&&m[0]!==a)for(f=(l?o.children.length:-1)+c;f>-1&&f code[class*="language-"]':{whiteSpace:"normal",borderRadius:"0.2em",padding:"0.1em"},".language-css > code":{color:"#fd9170"},".language-sass > code":{color:"#fd9170"},".language-scss > code":{color:"#fd9170"},'[class*="language-"] .namespace':{Opacity:"0.7"},atrule:{color:"#c792ea"},"attr-name":{color:"#ffcb6b"},"attr-value":{color:"#a5e844"},attribute:{color:"#a5e844"},boolean:{color:"#c792ea"},builtin:{color:"#ffcb6b"},cdata:{color:"#80cbc4"},char:{color:"#80cbc4"},class:{color:"#ffcb6b"},"class-name":{color:"#f2ff00"},comment:{color:"#616161"},constant:{color:"#c792ea"},deleted:{color:"#ff6666"},doctype:{color:"#616161"},entity:{color:"#ff6666"},function:{color:"#c792ea"},hexcode:{color:"#f2ff00"},id:{color:"#c792ea",fontWeight:"bold"},important:{color:"#c792ea",fontWeight:"bold"},inserted:{color:"#80cbc4"},keyword:{color:"#c792ea"},number:{color:"#fd9170"},operator:{color:"#89ddff"},prolog:{color:"#616161"},property:{color:"#80cbc4"},"pseudo-class":{color:"#a5e844"},"pseudo-element":{color:"#a5e844"},punctuation:{color:"#89ddff"},regex:{color:"#f2ff00"},selector:{color:"#ff6666"},string:{color:"#a5e844"},symbol:{color:"#c792ea"},tag:{color:"#ff6666"},unit:{color:"#fd9170"},url:{color:"#ff6666"},variable:{color:"#ff6666"}}},wGQB:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{color:"#ccc",background:"none",fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",fontSize:"1em",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none"},'pre[class*="language-"]':{color:"#ccc",background:"#2d2d2d",fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",fontSize:"1em",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",padding:"1em",margin:".5em 0",overflow:"auto"},':not(pre) > code[class*="language-"]':{background:"#2d2d2d",padding:".1em",borderRadius:".3em",whiteSpace:"normal"},comment:{color:"#999"},"block-comment":{color:"#999"},prolog:{color:"#999"},doctype:{color:"#999"},cdata:{color:"#999"},punctuation:{color:"#ccc"},tag:{color:"#e2777a"},"attr-name":{color:"#e2777a"},namespace:{color:"#e2777a"},deleted:{color:"#e2777a"},"function-name":{color:"#6196cc"},boolean:{color:"#f08d49"},number:{color:"#f08d49"},function:{color:"#f08d49"},property:{color:"#f8c555"},"class-name":{color:"#f8c555"},constant:{color:"#f8c555"},symbol:{color:"#f8c555"},selector:{color:"#cc99cd"},important:{color:"#cc99cd",fontWeight:"bold"},atrule:{color:"#cc99cd"},keyword:{color:"#cc99cd"},builtin:{color:"#cc99cd"},string:{color:"#7ec699"},char:{color:"#7ec699"},"attr-value":{color:"#7ec699"},regex:{color:"#7ec699"},variable:{color:"#7ec699"},operator:{color:"#67cdcc"},entity:{color:"#67cdcc",cursor:"help"},url:{color:"#67cdcc"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},inserted:{color:"green"}}},wH4i:function(e,t,n){"use strict";var o,r=n("penn"),i=n("jv5L"),a=n("ywEd");e.exports=function(e){var t=this.data();!o&&(this.Parser&&this.Parser.prototype&&this.Parser.prototype.blockTokenizers||this.Compiler&&this.Compiler.prototype&&this.Compiler.prototype.visitors)&&(o=!0,console.warn("[remark-gfm] Warning: please upgrade to remark 13 to use this plugin"));function n(e,n){t[e]?t[e].push(n):t[e]=[n]}n("micromarkExtensions",r(e)),n("fromMarkdownExtensions",i),n("toMarkdownExtensions",a(e))}},wJMj:function(e,t,n){"use strict";e.exports=function(e,t,n){"string"!==typeof t&&(n=t,t=void 0);return function(e){var t=e||{},n=function(e,t){var n=-1;for(;++n-1&&(D.call(this,e),F.call(this,e))}function z(){h("atHardBreak",!0)}function U(){var e=this.resume();this.stack[this.stack.length-1].value=e}function G(){var e=this.resume();this.stack[this.stack.length-1].value=e}function W(){var e=this.resume();this.stack[this.stack.length-1].value=e}function K(){var e=this.stack[this.stack.length-1];m("inReference")?(e.type+="Reference",e.referenceType=m("referenceType")||"shortcut",delete e.url,delete e.title):(delete e.identifier,delete e.label,delete e.referenceType),h("referenceType")}function j(){var e=this.stack[this.stack.length-1];m("inReference")?(e.type+="Reference",e.referenceType=m("referenceType")||"shortcut",delete e.url,delete e.title):(delete e.identifier,delete e.label,delete e.referenceType),h("referenceType")}function Y(e){this.stack[this.stack.length-2].identifier=a(this.sliceSerialize(e)).toLowerCase()}function Q(){var e=this.stack[this.stack.length-1],t=this.resume();this.stack[this.stack.length-1].label=t,h("inReference",!0),"link"===this.stack[this.stack.length-1].type?this.stack[this.stack.length-1].children=e.children:this.stack[this.stack.length-1].alt=t}function V(){var e=this.resume();this.stack[this.stack.length-1].url=e}function q(){var e=this.resume();this.stack[this.stack.length-1].title=e}function X(){h("inReference")}function J(){h("referenceType","collapsed")}function Z(e){var t=this.resume();this.stack[this.stack.length-1].label=t,this.stack[this.stack.length-1].identifier=a(this.sliceSerialize(e)).toLowerCase(),h("referenceType","full")}function $(e){h("characterReferenceType",e.type)}function ee(e){var t,n,o=this.sliceSerialize(e),r=m("characterReferenceType");r?(t=s(o,"characterReferenceMarkerNumeric"===r?10:16),h("characterReferenceType")):t=d(o),(n=this.stack.pop()).value+=t,n.position.end=g(e.end)}function te(e){F.call(this,e),this.stack[this.stack.length-1].url=this.sliceSerialize(e)}function ne(e){F.call(this,e),this.stack[this.stack.length-1].url="mailto:"+this.sliceSerialize(e)}function oe(){return{type:"blockquote",children:[]}}function re(){return{type:"code",lang:null,meta:null,value:""}}function ie(){return{type:"inlineCode",value:""}}function ae(){return{type:"definition",identifier:"",label:null,title:null,url:""}}function se(){return{type:"emphasis",children:[]}}function le(){return{type:"heading",depth:void 0,children:[]}}function ce(){return{type:"break"}}function ue(){return{type:"html",value:""}}function de(){return{type:"image",title:null,url:"",alt:null}}function pe(){return{type:"link",title:null,url:"",children:[]}}function fe(e){return{type:"list",ordered:"listOrdered"===e.type,start:null,spread:e._spread,children:[]}}function he(e){return{type:"listItem",spread:e._spread,checked:null,children:[]}}function me(){return{type:"paragraph",children:[]}}function ge(){return{type:"strong",children:[]}}function Te(){return{type:"text",value:""}}function Ee(){return{type:"thematicBreak"}}}(n)(u(l(n).document().write(c()(e,t,!0))))};var o=n("IW26"),r=n("NOby"),i=n("TDhK"),a=n("Bh6z"),s=n("Z0IX"),l=n("0RbX"),c=n("o8bm"),u=n("1mpw"),d=n("WtKE"),p=n("/qNp");function f(e,t){var n,o;for(n in t)o=i.call(e,n)?e[n]:e[n]={},"canContainEols"===n||"transforms"===n?e[n]=[].concat(o,t[n]):Object.assign(o,t[n])}},wYf1:function(e,t,n){var o=n("uzhd"),r=n("gsvO"),i=n("55fs");e.exports=function(e){var t=e||{},n=t.tableCellPadding,a=t.tablePipeAlign,s=t.stringLength,l=n?" ":"|";return{unsafe:[{character:"\r",inConstruct:"tableCell"},{character:"\n",inConstruct:"tableCell"},{atBreak:!0,character:"|",after:"[\t :-]"},{character:"|",inConstruct:"tableCell"},{atBreak:!0,character:":",after:"-"},{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{table:function(e,t,n){return u(function(e,t){var n=e.children,o=-1,r=n.length,i=[],a=t.enter("table");for(;++o=55296&&s<=57343){if(s>=55296&&s<=56319&&i+1=56320&&l<=57343){u+=encodeURIComponent(e[i]+e[i+1]),i++;continue}u+="%EF%BF%BD"}else u+=encodeURIComponent(e[i]);return u}r.defaultChars=";/?:@&=+$,-_.!~*'()#",r.componentChars="-_.!~*'()",e.exports=r},xkQk:function(e,t,n){"use strict";var o=n("EBzq");e.exports=i,i.wrap=o;var r=[].slice;function i(){var e=[],t={run:function(){var t=-1,n=r.call(arguments,0,-1),i=arguments[arguments.length-1];if("function"!==typeof i)throw new Error("Expected function as last argument, not "+i);function a(s){var l=e[++t],c=r.call(arguments,0),u=c.slice(1),d=n.length,p=-1;if(s)i(s);else{for(;++p code[class*="language-"]':{background:"#2b2b2b",padding:"0.1em",borderRadius:"0.3em",whiteSpace:"normal"},comment:{color:"#d4d0ab"},prolog:{color:"#d4d0ab"},doctype:{color:"#d4d0ab"},cdata:{color:"#d4d0ab"},punctuation:{color:"#fefefe"},property:{color:"#ffa07a"},tag:{color:"#ffa07a"},constant:{color:"#ffa07a"},symbol:{color:"#ffa07a"},deleted:{color:"#ffa07a"},boolean:{color:"#00e0e0"},number:{color:"#00e0e0"},selector:{color:"#abe338"},"attr-name":{color:"#abe338"},string:{color:"#abe338"},char:{color:"#abe338"},builtin:{color:"#abe338"},inserted:{color:"#abe338"},operator:{color:"#00e0e0"},entity:{color:"#00e0e0",cursor:"help"},url:{color:"#00e0e0"},".language-css .token.string":{color:"#00e0e0"},".style .token.string":{color:"#00e0e0"},variable:{color:"#00e0e0"},atrule:{color:"#ffd700"},"attr-value":{color:"#ffd700"},function:{color:"#ffd700"},keyword:{color:"#00e0e0"},regex:{color:"#ffd700"},important:{color:"#ffd700",fontWeight:"bold"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"}}},ywEd:function(e,t,n){var o=n("oDdY"),r=n("K/gC"),i=n("wYf1"),a=n("vSfO"),s=n("UhtW");e.exports=function(e){var t=s({handlers:{},join:[],unsafe:[],options:{}},{extensions:[o,r,i(e),a]});return Object.assign(t.options,{handlers:t.handlers,join:t.join,unsafe:t.unsafe})}},z2ZG:function(e,t,n){"use strict";var o=n("U6jy"),r=n("dKIx");e.exports=function(e){var t,n,i=e.length,a=[],s=[],l=-1;for(;++l=0;o--){const r=e.openElements.items[o];if(r===t.element)break;e._isSpecialElement(r)&&(n=r)}return n||(e.openElements.popUntilElementPopped(t.element),e.activeFormattingElements.removeEntry(t)),n}function q(e,t,n){let o=t,r=e.openElements.getCommonAncestor(t);for(let i=0,a=r;a!==n;i++,a=r){r=e.openElements.getCommonAncestor(a);const n=e.activeFormattingElements.getElementEntry(a),s=n&&i>=3;!n||s?(s&&e.activeFormattingElements.removeEntry(n),e.openElements.remove(a)):(a=X(e,n),o===t&&(e.activeFormattingElements.bookmark=n),e.treeAdapter.detachNode(o),e.treeAdapter.appendChild(a,o),o=a)}return o}function X(e,t){const n=e.treeAdapter.getNamespaceURI(t.element),o=e.treeAdapter.createElement(t.token.tagName,n,t.token.attrs);return e.openElements.replace(t.element,o),t.element=o,o}function J(e,t,n){if(e._isElementCausesFosterParenting(t))e._fosterParentElement(n);else{const o=e.treeAdapter.getTagName(t),r=e.treeAdapter.getNamespaceURI(t);o===g.TEMPLATE&&r===T.HTML&&(t=e.treeAdapter.getTemplateContent(t)),e.treeAdapter.appendChild(t,n)}}function Z(e,t,n){const o=e.treeAdapter.getNamespaceURI(n.element),r=n.token,i=e.treeAdapter.createElement(r.tagName,o,r.attrs);e._adoptNodes(t,i),e.treeAdapter.appendChild(t,i),e.activeFormattingElements.insertElementAfterBookmark(i,n.token),e.activeFormattingElements.removeEntry(n),e.openElements.remove(n.element),e.openElements.insertAfter(t,i)}function $(e,t){let n;for(let o=0;o<8&&(n=Q(e,t),n);o++){const t=V(e,n);if(!t)break;e.activeFormattingElements.bookmark=n;const o=q(e,t,n.element),r=e.openElements.getCommonAncestor(n.element);e.treeAdapter.detachNode(o),J(e,r,o),Z(e,t,n)}}function ee(){}function te(e){e._err(f.misplacedDoctype)}function ne(e,t){e._appendCommentNode(t,e.openElements.currentTmplContent||e.openElements.current)}function oe(e,t){e._appendCommentNode(t,e.document)}function re(e,t){e._insertCharacters(t)}function ie(e){e.stopped=!0}function ae(e,t){e._err(f.missingDoctype,{beforeToken:!0}),e.treeAdapter.setDocumentMode(e.document,m.DOCUMENT_MODE.QUIRKS),e.insertionMode=y,e._processToken(t)}function se(e,t){e._insertFakeRootElement(),e.insertionMode=_,e._processToken(t)}function le(e,t){e._insertFakeElement(g.HEAD),e.headElement=e.openElements.current,e.insertionMode=S,e._processToken(t)}function ce(e,t){const n=t.tagName;n===g.HTML?xe(e,t):n===g.BASE||n===g.BASEFONT||n===g.BGSOUND||n===g.LINK||n===g.META?(e._appendElement(t,T.HTML),t.ackSelfClosing=!0):n===g.TITLE?e._switchToTextParsing(t,o.MODE.RCDATA):n===g.NOSCRIPT?e.options.scriptingEnabled?e._switchToTextParsing(t,o.MODE.RAWTEXT):(e._insertElement(t,T.HTML),e.insertionMode=C):n===g.NOFRAMES||n===g.STYLE?e._switchToTextParsing(t,o.MODE.RAWTEXT):n===g.SCRIPT?e._switchToTextParsing(t,o.MODE.SCRIPT_DATA):n===g.TEMPLATE?(e._insertTemplate(t,T.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=!1,e.insertionMode=F,e._pushTmplInsertionMode(F)):n===g.HEAD?e._err(f.misplacedStartTagForHeadElement):de(e,t)}function ue(e,t){const n=t.tagName;n===g.HEAD?(e.openElements.pop(),e.insertionMode=x):n===g.BODY||n===g.BR||n===g.HTML?de(e,t):n===g.TEMPLATE&&e.openElements.tmplCount>0?(e.openElements.generateImpliedEndTagsThoroughly(),e.openElements.currentTagName!==g.TEMPLATE&&e._err(f.closingOfElementWithOpenChildElements),e.openElements.popUntilTagNamePopped(g.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e._popTmplInsertionMode(),e._resetInsertionMode()):e._err(f.endTagWithoutMatchingOpenElement)}function de(e,t){e.openElements.pop(),e.insertionMode=x,e._processToken(t)}function pe(e,t){const n=t.type===o.EOF_TOKEN?f.openElementsLeftAfterEof:f.disallowedContentInNoscriptInHead;e._err(n),e.openElements.pop(),e.insertionMode=S,e._processToken(t)}function fe(e,t){e._insertFakeElement(g.BODY),e.insertionMode=v,e._processToken(t)}function he(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t)}function me(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t),e.framesetOk=!1}function ge(e,t){e.openElements.hasInButtonScope(g.P)&&e._closePElement(),e._insertElement(t,T.HTML)}function Te(e,t){e.openElements.hasInButtonScope(g.P)&&e._closePElement(),e._insertElement(t,T.HTML),e.skipNextNewLine=!0,e.framesetOk=!1}function Ee(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,T.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}function be(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,T.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=!1}function Ae(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,T.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}function ke(e,t){e._appendElement(t,T.HTML),t.ackSelfClosing=!0}function ye(e,t){e._switchToTextParsing(t,o.MODE.RAWTEXT)}function _e(e,t){e.openElements.currentTagName===g.OPTION&&e.openElements.pop(),e._reconstructActiveFormattingElements(),e._insertElement(t,T.HTML)}function Se(e,t){e.openElements.hasInScope(g.RUBY)&&e.openElements.generateImpliedEndTags(),e._insertElement(t,T.HTML)}function Ce(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,T.HTML)}function xe(e,t){const n=t.tagName;switch(n.length){case 1:n===g.I||n===g.S||n===g.B||n===g.U?Ee(e,t):n===g.P?ge(e,t):n===g.A?function(e,t){const n=e.activeFormattingElements.getElementEntryInScopeWithTagName(g.A);n&&($(e,t),e.openElements.remove(n.element),e.activeFormattingElements.removeEntry(n)),e._reconstructActiveFormattingElements(),e._insertElement(t,T.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}(e,t):Ce(e,t);break;case 2:n===g.DL||n===g.OL||n===g.UL?ge(e,t):n===g.H1||n===g.H2||n===g.H3||n===g.H4||n===g.H5||n===g.H6?function(e,t){e.openElements.hasInButtonScope(g.P)&&e._closePElement();const n=e.openElements.currentTagName;n!==g.H1&&n!==g.H2&&n!==g.H3&&n!==g.H4&&n!==g.H5&&n!==g.H6||e.openElements.pop(),e._insertElement(t,T.HTML)}(e,t):n===g.LI||n===g.DD||n===g.DT?function(e,t){e.framesetOk=!1;const n=t.tagName;for(let o=e.openElements.stackTop;o>=0;o--){const t=e.openElements.items[o],r=e.treeAdapter.getTagName(t);let i=null;if(n===g.LI&&r===g.LI?i=g.LI:n!==g.DD&&n!==g.DT||r!==g.DD&&r!==g.DT||(i=r),i){e.openElements.generateImpliedEndTagsWithExclusion(i),e.openElements.popUntilTagNamePopped(i);break}if(r!==g.ADDRESS&&r!==g.DIV&&r!==g.P&&e._isSpecialElement(t))break}e.openElements.hasInButtonScope(g.P)&&e._closePElement(),e._insertElement(t,T.HTML)}(e,t):n===g.EM||n===g.TT?Ee(e,t):n===g.BR?Ae(e,t):n===g.HR?function(e,t){e.openElements.hasInButtonScope(g.P)&&e._closePElement(),e._appendElement(t,T.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}(e,t):n===g.RB?Se(e,t):n===g.RT||n===g.RP?function(e,t){e.openElements.hasInScope(g.RUBY)&&e.openElements.generateImpliedEndTagsWithExclusion(g.RTC),e._insertElement(t,T.HTML)}(e,t):n!==g.TH&&n!==g.TD&&n!==g.TR&&Ce(e,t);break;case 3:n===g.DIV||n===g.DIR||n===g.NAV?ge(e,t):n===g.PRE?Te(e,t):n===g.BIG?Ee(e,t):n===g.IMG||n===g.WBR?Ae(e,t):n===g.XMP?function(e,t){e.openElements.hasInButtonScope(g.P)&&e._closePElement(),e._reconstructActiveFormattingElements(),e.framesetOk=!1,e._switchToTextParsing(t,o.MODE.RAWTEXT)}(e,t):n===g.SVG?function(e,t){e._reconstructActiveFormattingElements(),p.adjustTokenSVGAttrs(t),p.adjustTokenXMLAttrs(t),t.selfClosing?e._appendElement(t,T.SVG):e._insertElement(t,T.SVG),t.ackSelfClosing=!0}(e,t):n===g.RTC?Se(e,t):n!==g.COL&&Ce(e,t);break;case 4:n===g.HTML?function(e,t){0===e.openElements.tmplCount&&e.treeAdapter.adoptAttributes(e.openElements.items[0],t.attrs)}(e,t):n===g.BASE||n===g.LINK||n===g.META?ce(e,t):n===g.BODY?function(e,t){const n=e.openElements.tryPeekProperlyNestedBodyElement();n&&0===e.openElements.tmplCount&&(e.framesetOk=!1,e.treeAdapter.adoptAttributes(n,t.attrs))}(e,t):n===g.MAIN||n===g.MENU?ge(e,t):n===g.FORM?function(e,t){const n=e.openElements.tmplCount>0;e.formElement&&!n||(e.openElements.hasInButtonScope(g.P)&&e._closePElement(),e._insertElement(t,T.HTML),n||(e.formElement=e.openElements.current))}(e,t):n===g.CODE||n===g.FONT?Ee(e,t):n===g.NOBR?function(e,t){e._reconstructActiveFormattingElements(),e.openElements.hasInScope(g.NOBR)&&($(e,t),e._reconstructActiveFormattingElements()),e._insertElement(t,T.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}(e,t):n===g.AREA?Ae(e,t):n===g.MATH?function(e,t){e._reconstructActiveFormattingElements(),p.adjustTokenMathMLAttrs(t),p.adjustTokenXMLAttrs(t),t.selfClosing?e._appendElement(t,T.MATHML):e._insertElement(t,T.MATHML),t.ackSelfClosing=!0}(e,t):n===g.MENU?function(e,t){e.openElements.hasInButtonScope(g.P)&&e._closePElement(),e._insertElement(t,T.HTML)}(e,t):n!==g.HEAD&&Ce(e,t);break;case 5:n===g.STYLE||n===g.TITLE?ce(e,t):n===g.ASIDE?ge(e,t):n===g.SMALL?Ee(e,t):n===g.TABLE?function(e,t){e.treeAdapter.getDocumentMode(e.document)!==m.DOCUMENT_MODE.QUIRKS&&e.openElements.hasInButtonScope(g.P)&&e._closePElement(),e._insertElement(t,T.HTML),e.framesetOk=!1,e.insertionMode=N}(e,t):n===g.EMBED?Ae(e,t):n===g.INPUT?function(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,T.HTML);const n=o.getTokenAttr(t,E.TYPE);n&&n.toLowerCase()===A||(e.framesetOk=!1),t.ackSelfClosing=!0}(e,t):n===g.PARAM||n===g.TRACK?ke(e,t):n===g.IMAGE?function(e,t){t.tagName=g.IMG,Ae(e,t)}(e,t):n!==g.FRAME&&n!==g.TBODY&&n!==g.TFOOT&&n!==g.THEAD&&Ce(e,t);break;case 6:n===g.SCRIPT?ce(e,t):n===g.CENTER||n===g.FIGURE||n===g.FOOTER||n===g.HEADER||n===g.HGROUP||n===g.DIALOG?ge(e,t):n===g.BUTTON?function(e,t){e.openElements.hasInScope(g.BUTTON)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(g.BUTTON)),e._reconstructActiveFormattingElements(),e._insertElement(t,T.HTML),e.framesetOk=!1}(e,t):n===g.STRIKE||n===g.STRONG?Ee(e,t):n===g.APPLET||n===g.OBJECT?be(e,t):n===g.KEYGEN?Ae(e,t):n===g.SOURCE?ke(e,t):n===g.IFRAME?function(e,t){e.framesetOk=!1,e._switchToTextParsing(t,o.MODE.RAWTEXT)}(e,t):n===g.SELECT?function(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,T.HTML),e.framesetOk=!1,e.insertionMode===N||e.insertionMode===w||e.insertionMode===I||e.insertionMode===L||e.insertionMode===P?e.insertionMode=D:e.insertionMode=H}(e,t):n===g.OPTION?_e(e,t):Ce(e,t);break;case 7:n===g.BGSOUND?ce(e,t):n===g.DETAILS||n===g.ADDRESS||n===g.ARTICLE||n===g.SECTION||n===g.SUMMARY?ge(e,t):n===g.LISTING?Te(e,t):n===g.MARQUEE?be(e,t):n===g.NOEMBED?ye(e,t):n!==g.CAPTION&&Ce(e,t);break;case 8:n===g.BASEFONT?ce(e,t):n===g.FRAMESET?function(e,t){const n=e.openElements.tryPeekProperlyNestedBodyElement();e.framesetOk&&n&&(e.treeAdapter.detachNode(n),e.openElements.popAllUpToHtmlElement(),e._insertElement(t,T.HTML),e.insertionMode=z)}(e,t):n===g.FIELDSET?ge(e,t):n===g.TEXTAREA?function(e,t){e._insertElement(t,T.HTML),e.skipNextNewLine=!0,e.tokenizer.state=o.MODE.RCDATA,e.originalInsertionMode=e.insertionMode,e.framesetOk=!1,e.insertionMode=O}(e,t):n===g.TEMPLATE?ce(e,t):n===g.NOSCRIPT?e.options.scriptingEnabled?ye(e,t):Ce(e,t):n===g.OPTGROUP?_e(e,t):n!==g.COLGROUP&&Ce(e,t);break;case 9:n===g.PLAINTEXT?function(e,t){e.openElements.hasInButtonScope(g.P)&&e._closePElement(),e._insertElement(t,T.HTML),e.tokenizer.state=o.MODE.PLAINTEXT}(e,t):Ce(e,t);break;case 10:n===g.BLOCKQUOTE||n===g.FIGCAPTION?ge(e,t):Ce(e,t);break;default:Ce(e,t)}}function ve(e,t){const n=t.tagName;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n))}function Oe(e,t){const n=t.tagName;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n),e.activeFormattingElements.clearToLastMarker())}function Ne(e,t){const n=t.tagName;for(let o=e.openElements.stackTop;o>0;o--){const t=e.openElements.items[o];if(e.treeAdapter.getTagName(t)===n){e.openElements.generateImpliedEndTagsWithExclusion(n),e.openElements.popUntilElementPopped(t);break}if(e._isSpecialElement(t))break}}function Me(e,t){const n=t.tagName;switch(n.length){case 1:n===g.A||n===g.B||n===g.I||n===g.S||n===g.U?$(e,t):n===g.P?function(e){e.openElements.hasInButtonScope(g.P)||e._insertFakeElement(g.P),e._closePElement()}(e):Ne(e,t);break;case 2:n===g.DL||n===g.UL||n===g.OL?ve(e,t):n===g.LI?function(e){e.openElements.hasInListItemScope(g.LI)&&(e.openElements.generateImpliedEndTagsWithExclusion(g.LI),e.openElements.popUntilTagNamePopped(g.LI))}(e):n===g.DD||n===g.DT?function(e,t){const n=t.tagName;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTagsWithExclusion(n),e.openElements.popUntilTagNamePopped(n))}(e,t):n===g.H1||n===g.H2||n===g.H3||n===g.H4||n===g.H5||n===g.H6?function(e){e.openElements.hasNumberedHeaderInScope()&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilNumberedHeaderPopped())}(e):n===g.BR?function(e){e._reconstructActiveFormattingElements(),e._insertFakeElement(g.BR),e.openElements.pop(),e.framesetOk=!1}(e):n===g.EM||n===g.TT?$(e,t):Ne(e,t);break;case 3:n===g.BIG?$(e,t):n===g.DIR||n===g.DIV||n===g.NAV||n===g.PRE?ve(e,t):Ne(e,t);break;case 4:n===g.BODY?function(e){e.openElements.hasInScope(g.BODY)&&(e.insertionMode=B)}(e):n===g.HTML?function(e,t){e.openElements.hasInScope(g.BODY)&&(e.insertionMode=B,e._processToken(t))}(e,t):n===g.FORM?function(e){const t=e.openElements.tmplCount>0,n=e.formElement;t||(e.formElement=null),(n||t)&&e.openElements.hasInScope(g.FORM)&&(e.openElements.generateImpliedEndTags(),t?e.openElements.popUntilTagNamePopped(g.FORM):e.openElements.remove(n))}(e):n===g.CODE||n===g.FONT||n===g.NOBR?$(e,t):n===g.MAIN||n===g.MENU?ve(e,t):Ne(e,t);break;case 5:n===g.ASIDE?ve(e,t):n===g.SMALL?$(e,t):Ne(e,t);break;case 6:n===g.CENTER||n===g.FIGURE||n===g.FOOTER||n===g.HEADER||n===g.HGROUP||n===g.DIALOG?ve(e,t):n===g.APPLET||n===g.OBJECT?Oe(e,t):n===g.STRIKE||n===g.STRONG?$(e,t):Ne(e,t);break;case 7:n===g.ADDRESS||n===g.ARTICLE||n===g.DETAILS||n===g.SECTION||n===g.SUMMARY||n===g.LISTING?ve(e,t):n===g.MARQUEE?Oe(e,t):Ne(e,t);break;case 8:n===g.FIELDSET?ve(e,t):n===g.TEMPLATE?ue(e,t):Ne(e,t);break;case 10:n===g.BLOCKQUOTE||n===g.FIGCAPTION?ve(e,t):Ne(e,t);break;default:Ne(e,t)}}function we(e,t){e.tmplInsertionModeStackTop>-1?ze(e,t):e.stopped=!0}function Re(e,t){const n=e.openElements.currentTagName;n===g.TABLE||n===g.TBODY||n===g.TFOOT||n===g.THEAD||n===g.TR?(e.pendingCharacterTokens=[],e.hasNonWhitespacePendingCharacterToken=!1,e.originalInsertionMode=e.insertionMode,e.insertionMode=M,e._processToken(t)):Pe(e,t)}function Ie(e,t){const n=t.tagName;switch(n.length){case 2:n===g.TD||n===g.TH||n===g.TR?function(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(g.TBODY),e.insertionMode=I,e._processToken(t)}(e,t):Pe(e,t);break;case 3:n===g.COL?function(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(g.COLGROUP),e.insertionMode=R,e._processToken(t)}(e,t):Pe(e,t);break;case 4:n===g.FORM?function(e,t){e.formElement||0!==e.openElements.tmplCount||(e._insertElement(t,T.HTML),e.formElement=e.openElements.current,e.openElements.pop())}(e,t):Pe(e,t);break;case 5:n===g.TABLE?function(e,t){e.openElements.hasInTableScope(g.TABLE)&&(e.openElements.popUntilTagNamePopped(g.TABLE),e._resetInsertionMode(),e._processToken(t))}(e,t):n===g.STYLE?ce(e,t):n===g.TBODY||n===g.TFOOT||n===g.THEAD?function(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,T.HTML),e.insertionMode=I}(e,t):n===g.INPUT?function(e,t){const n=o.getTokenAttr(t,E.TYPE);n&&n.toLowerCase()===A?e._appendElement(t,T.HTML):Pe(e,t),t.ackSelfClosing=!0}(e,t):Pe(e,t);break;case 6:n===g.SCRIPT?ce(e,t):Pe(e,t);break;case 7:n===g.CAPTION?function(e,t){e.openElements.clearBackToTableContext(),e.activeFormattingElements.insertMarker(),e._insertElement(t,T.HTML),e.insertionMode=w}(e,t):Pe(e,t);break;case 8:n===g.COLGROUP?function(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,T.HTML),e.insertionMode=R}(e,t):n===g.TEMPLATE?ce(e,t):Pe(e,t);break;default:Pe(e,t)}}function Le(e,t){const n=t.tagName;n===g.TABLE?e.openElements.hasInTableScope(g.TABLE)&&(e.openElements.popUntilTagNamePopped(g.TABLE),e._resetInsertionMode()):n===g.TEMPLATE?ue(e,t):n!==g.BODY&&n!==g.CAPTION&&n!==g.COL&&n!==g.COLGROUP&&n!==g.HTML&&n!==g.TBODY&&n!==g.TD&&n!==g.TFOOT&&n!==g.TH&&n!==g.THEAD&&n!==g.TR&&Pe(e,t)}function Pe(e,t){const n=e.fosterParentingEnabled;e.fosterParentingEnabled=!0,e._processTokenInBodyMode(t),e.fosterParentingEnabled=n}function He(e,t){let n=0;if(e.hasNonWhitespacePendingCharacterToken)for(;n0?(e.openElements.popUntilTagNamePopped(g.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e._popTmplInsertionMode(),e._resetInsertionMode(),e._processToken(t)):e.stopped=!0}function Ue(e,t){e.insertionMode=v,e._processToken(t)}function Ge(e,t){e.insertionMode=v,e._processToken(t)}e.exports=class{constructor(e){this.options=u(b,e),this.treeAdapter=this.options.treeAdapter,this.pendingScript=null,this.options.sourceCodeLocationInfo&&l.install(this,a),this.options.onParseError&&l.install(this,s,{onParseError:this.options.onParseError})}parse(e){const t=this.treeAdapter.createDocument();return this._bootstrap(t,null),this.tokenizer.write(e,!0),this._runParsingLoop(null),t}parseFragment(e,t){t||(t=this.treeAdapter.createElement(g.TEMPLATE,T.HTML,[]));const n=this.treeAdapter.createElement("documentmock",T.HTML,[]);this._bootstrap(n,t),this.treeAdapter.getTagName(t)===g.TEMPLATE&&this._pushTmplInsertionMode(F),this._initTokenizerForFragmentParsing(),this._insertFakeRootElement(),this._resetInsertionMode(),this._findFormInFragmentContext(),this.tokenizer.write(e,!0),this._runParsingLoop(null);const o=this.treeAdapter.getFirstChild(n),r=this.treeAdapter.createDocumentFragment();return this._adoptNodes(o,r),r}_bootstrap(e,t){this.tokenizer=new o(this.options),this.stopped=!1,this.insertionMode=k,this.originalInsertionMode="",this.document=e,this.fragmentContext=t,this.headElement=null,this.formElement=null,this.openElements=new r(this.document,this.treeAdapter),this.activeFormattingElements=new i(this.treeAdapter),this.tmplInsertionModeStack=[],this.tmplInsertionModeStackTop=-1,this.currentTmplInsertionMode=null,this.pendingCharacterTokens=[],this.hasNonWhitespacePendingCharacterToken=!1,this.framesetOk=!0,this.skipNextNewLine=!1,this.fosterParentingEnabled=!1}_err(){}_runParsingLoop(e){for(;!this.stopped;){this._setupTokenizerCDATAMode();const t=this.tokenizer.getNextToken();if(t.type===o.HIBERNATION_TOKEN)break;if(this.skipNextNewLine&&(this.skipNextNewLine=!1,t.type===o.WHITESPACE_CHARACTER_TOKEN&&"\n"===t.chars[0])){if(1===t.chars.length)continue;t.chars=t.chars.substr(1)}if(this._processInputToken(t),e&&this.pendingScript)break}}runParsingLoopForCurrentChunk(e,t){if(this._runParsingLoop(t),t&&this.pendingScript){const e=this.pendingScript;return this.pendingScript=null,void t(e)}e&&e()}_setupTokenizerCDATAMode(){const e=this._getAdjustedCurrentElement();this.tokenizer.allowCDATA=e&&e!==this.document&&this.treeAdapter.getNamespaceURI(e)!==T.HTML&&!this._isIntegrationPoint(e)}_switchToTextParsing(e,t){this._insertElement(e,T.HTML),this.tokenizer.state=t,this.originalInsertionMode=this.insertionMode,this.insertionMode=O}switchToPlaintextParsing(){this.insertionMode=O,this.originalInsertionMode=v,this.tokenizer.state=o.MODE.PLAINTEXT}_getAdjustedCurrentElement(){return 0===this.openElements.stackTop&&this.fragmentContext?this.fragmentContext:this.openElements.current}_findFormInFragmentContext(){let e=this.fragmentContext;do{if(this.treeAdapter.getTagName(e)===g.FORM){this.formElement=e;break}e=this.treeAdapter.getParentNode(e)}while(e)}_initTokenizerForFragmentParsing(){if(this.treeAdapter.getNamespaceURI(this.fragmentContext)===T.HTML){const e=this.treeAdapter.getTagName(this.fragmentContext);e===g.TITLE||e===g.TEXTAREA?this.tokenizer.state=o.MODE.RCDATA:e===g.STYLE||e===g.XMP||e===g.IFRAME||e===g.NOEMBED||e===g.NOFRAMES||e===g.NOSCRIPT?this.tokenizer.state=o.MODE.RAWTEXT:e===g.SCRIPT?this.tokenizer.state=o.MODE.SCRIPT_DATA:e===g.PLAINTEXT&&(this.tokenizer.state=o.MODE.PLAINTEXT)}}_setDocumentType(e){const t=e.name||"",n=e.publicId||"",o=e.systemId||"";this.treeAdapter.setDocumentType(this.document,t,n,o)}_attachElementToTree(e){if(this._shouldFosterParentOnInsertion())this._fosterParentElement(e);else{const t=this.openElements.currentTmplContent||this.openElements.current;this.treeAdapter.appendChild(t,e)}}_appendElement(e,t){const n=this.treeAdapter.createElement(e.tagName,t,e.attrs);this._attachElementToTree(n)}_insertElement(e,t){const n=this.treeAdapter.createElement(e.tagName,t,e.attrs);this._attachElementToTree(n),this.openElements.push(n)}_insertFakeElement(e){const t=this.treeAdapter.createElement(e,T.HTML,[]);this._attachElementToTree(t),this.openElements.push(t)}_insertTemplate(e){const t=this.treeAdapter.createElement(e.tagName,T.HTML,e.attrs),n=this.treeAdapter.createDocumentFragment();this.treeAdapter.setTemplateContent(t,n),this._attachElementToTree(t),this.openElements.push(t)}_insertFakeRootElement(){const e=this.treeAdapter.createElement(g.HTML,T.HTML,[]);this.treeAdapter.appendChild(this.openElements.current,e),this.openElements.push(e)}_appendCommentNode(e,t){const n=this.treeAdapter.createCommentNode(e.data);this.treeAdapter.appendChild(t,n)}_insertCharacters(e){if(this._shouldFosterParentOnInsertion())this._fosterParentText(e.chars);else{const t=this.openElements.currentTmplContent||this.openElements.current;this.treeAdapter.insertText(t,e.chars)}}_adoptNodes(e,t){for(let n=this.treeAdapter.getFirstChild(e);n;n=this.treeAdapter.getFirstChild(e))this.treeAdapter.detachNode(n),this.treeAdapter.appendChild(t,n)}_shouldProcessTokenInForeignContent(e){const t=this._getAdjustedCurrentElement();if(!t||t===this.document)return!1;const n=this.treeAdapter.getNamespaceURI(t);if(n===T.HTML)return!1;if(this.treeAdapter.getTagName(t)===g.ANNOTATION_XML&&n===T.MATHML&&e.type===o.START_TAG_TOKEN&&e.tagName===g.SVG)return!1;const r=e.type===o.CHARACTER_TOKEN||e.type===o.NULL_CHARACTER_TOKEN||e.type===o.WHITESPACE_CHARACTER_TOKEN;return(!(e.type===o.START_TAG_TOKEN&&e.tagName!==g.MGLYPH&&e.tagName!==g.MALIGNMARK)&&!r||!this._isIntegrationPoint(t,T.MATHML))&&((e.type!==o.START_TAG_TOKEN&&!r||!this._isIntegrationPoint(t,T.HTML))&&e.type!==o.EOF_TOKEN)}_processToken(e){Y[this.insertionMode][e.type](this,e)}_processTokenInBodyMode(e){Y.IN_BODY_MODE[e.type](this,e)}_processTokenInForeignContent(e){e.type===o.CHARACTER_TOKEN?function(e,t){e._insertCharacters(t),e.framesetOk=!1}(this,e):e.type===o.NULL_CHARACTER_TOKEN?function(e,t){t.chars=h.REPLACEMENT_CHARACTER,e._insertCharacters(t)}(this,e):e.type===o.WHITESPACE_CHARACTER_TOKEN?re(this,e):e.type===o.COMMENT_TOKEN?ne(this,e):e.type===o.START_TAG_TOKEN?function(e,t){if(p.causesExit(t)&&!e.fragmentContext){for(;e.treeAdapter.getNamespaceURI(e.openElements.current)!==T.HTML&&!e._isIntegrationPoint(e.openElements.current);)e.openElements.pop();e._processToken(t)}else{const n=e._getAdjustedCurrentElement(),o=e.treeAdapter.getNamespaceURI(n);o===T.MATHML?p.adjustTokenMathMLAttrs(t):o===T.SVG&&(p.adjustTokenSVGTagName(t),p.adjustTokenSVGAttrs(t)),p.adjustTokenXMLAttrs(t),t.selfClosing?e._appendElement(t,o):e._insertElement(t,o),t.ackSelfClosing=!0}}(this,e):e.type===o.END_TAG_TOKEN&&function(e,t){for(let n=e.openElements.stackTop;n>0;n--){const o=e.openElements.items[n];if(e.treeAdapter.getNamespaceURI(o)===T.HTML){e._processToken(t);break}if(e.treeAdapter.getTagName(o).toLowerCase()===t.tagName){e.openElements.popUntilElementPopped(o);break}}}(this,e)}_processInputToken(e){this._shouldProcessTokenInForeignContent(e)?this._processTokenInForeignContent(e):this._processToken(e),e.type===o.START_TAG_TOKEN&&e.selfClosing&&!e.ackSelfClosing&&this._err(f.nonVoidHtmlElementStartTagWithTrailingSolidus)}_isIntegrationPoint(e,t){const n=this.treeAdapter.getTagName(e),o=this.treeAdapter.getNamespaceURI(e),r=this.treeAdapter.getAttrList(e);return p.isIntegrationPoint(n,o,r,t)}_reconstructActiveFormattingElements(){const e=this.activeFormattingElements.length;if(e){let t=e,n=null;do{if(t--,n=this.activeFormattingElements.entries[t],n.type===i.MARKER_ENTRY||this.openElements.contains(n.element)){t++;break}}while(t>0);for(let o=t;o=0;e--){let n=this.openElements.items[e];0===e&&(t=!0,this.fragmentContext&&(n=this.fragmentContext));const o=this.treeAdapter.getTagName(n),r=K[o];if(r){this.insertionMode=r;break}if(!(t||o!==g.TD&&o!==g.TH)){this.insertionMode=P;break}if(!t&&o===g.HEAD){this.insertionMode=S;break}if(o===g.SELECT){this._resetInsertionModeForSelect(e);break}if(o===g.TEMPLATE){this.insertionMode=this.currentTmplInsertionMode;break}if(o===g.HTML){this.insertionMode=this.headElement?x:_;break}if(t){this.insertionMode=v;break}}}_resetInsertionModeForSelect(e){if(e>0)for(let t=e-1;t>0;t--){const e=this.openElements.items[t],n=this.treeAdapter.getTagName(e);if(n===g.TEMPLATE)break;if(n===g.TABLE)return void(this.insertionMode=D)}this.insertionMode=H}_pushTmplInsertionMode(e){this.tmplInsertionModeStack.push(e),this.tmplInsertionModeStackTop++,this.currentTmplInsertionMode=e}_popTmplInsertionMode(){this.tmplInsertionModeStack.pop(),this.tmplInsertionModeStackTop--,this.currentTmplInsertionMode=this.tmplInsertionModeStack[this.tmplInsertionModeStackTop]}_isElementCausesFosterParenting(e){const t=this.treeAdapter.getTagName(e);return t===g.TABLE||t===g.TBODY||t===g.TFOOT||t===g.THEAD||t===g.TR}_shouldFosterParentOnInsertion(){return this.fosterParentingEnabled&&this._isElementCausesFosterParenting(this.openElements.current)}_findFosterParentingLocation(){const e={parent:null,beforeElement:null};for(let t=this.openElements.stackTop;t>=0;t--){const n=this.openElements.items[t],o=this.treeAdapter.getTagName(n),r=this.treeAdapter.getNamespaceURI(n);if(o===g.TEMPLATE&&r===T.HTML){e.parent=this.treeAdapter.getTemplateContent(n);break}if(o===g.TABLE){e.parent=this.treeAdapter.getParentNode(n),e.parent?e.beforeElement=n:e.parent=this.openElements.items[t-1];break}}return e.parent||(e.parent=this.openElements.items[0]),e}_fosterParentElement(e){const t=this._findFosterParentingLocation();t.beforeElement?this.treeAdapter.insertBefore(t.parent,e,t.beforeElement):this.treeAdapter.appendChild(t.parent,e)}_fosterParentText(e){const t=this._findFosterParentingLocation();t.beforeElement?this.treeAdapter.insertTextBefore(t.parent,e,t.beforeElement):this.treeAdapter.insertText(t.parent,e)}_isSpecialElement(e){const t=this.treeAdapter.getTagName(e),n=this.treeAdapter.getNamespaceURI(e);return m.SPECIAL_ELEMENTS[n][t]}}},zktx:function(e,t,n){"use strict";var o=n("FWC9"),r=n("DUvi"),i=n("vGni"),a=o.boolean,s=o.number,l=o.spaceSeparated,c=o.commaSeparated,u=o.commaOrSpaceSeparated;e.exports=r({space:"svg",attributes:{accentHeight:"accent-height",alignmentBaseline:"alignment-baseline",arabicForm:"arabic-form",baselineShift:"baseline-shift",capHeight:"cap-height",className:"class",clipPath:"clip-path",clipRule:"clip-rule",colorInterpolation:"color-interpolation",colorInterpolationFilters:"color-interpolation-filters",colorProfile:"color-profile",colorRendering:"color-rendering",crossOrigin:"crossorigin",dataType:"datatype",dominantBaseline:"dominant-baseline",enableBackground:"enable-background",fillOpacity:"fill-opacity",fillRule:"fill-rule",floodColor:"flood-color",floodOpacity:"flood-opacity",fontFamily:"font-family",fontSize:"font-size",fontSizeAdjust:"font-size-adjust",fontStretch:"font-stretch",fontStyle:"font-style",fontVariant:"font-variant",fontWeight:"font-weight",glyphName:"glyph-name",glyphOrientationHorizontal:"glyph-orientation-horizontal",glyphOrientationVertical:"glyph-orientation-vertical",hrefLang:"hreflang",horizAdvX:"horiz-adv-x",horizOriginX:"horiz-origin-x",horizOriginY:"horiz-origin-y",imageRendering:"image-rendering",letterSpacing:"letter-spacing",lightingColor:"lighting-color",markerEnd:"marker-end",markerMid:"marker-mid",markerStart:"marker-start",navDown:"nav-down",navDownLeft:"nav-down-left",navDownRight:"nav-down-right",navLeft:"nav-left",navNext:"nav-next",navPrev:"nav-prev",navRight:"nav-right",navUp:"nav-up",navUpLeft:"nav-up-left",navUpRight:"nav-up-right",onAbort:"onabort",onActivate:"onactivate",onAfterPrint:"onafterprint",onBeforePrint:"onbeforeprint",onBegin:"onbegin",onCancel:"oncancel",onCanPlay:"oncanplay",onCanPlayThrough:"oncanplaythrough",onChange:"onchange",onClick:"onclick",onClose:"onclose",onCopy:"oncopy",onCueChange:"oncuechange",onCut:"oncut",onDblClick:"ondblclick",onDrag:"ondrag",onDragEnd:"ondragend",onDragEnter:"ondragenter",onDragExit:"ondragexit",onDragLeave:"ondragleave",onDragOver:"ondragover",onDragStart:"ondragstart",onDrop:"ondrop",onDurationChange:"ondurationchange",onEmptied:"onemptied",onEnd:"onend",onEnded:"onended",onError:"onerror",onFocus:"onfocus",onFocusIn:"onfocusin",onFocusOut:"onfocusout",onHashChange:"onhashchange",onInput:"oninput",onInvalid:"oninvalid",onKeyDown:"onkeydown",onKeyPress:"onkeypress",onKeyUp:"onkeyup",onLoad:"onload",onLoadedData:"onloadeddata",onLoadedMetadata:"onloadedmetadata",onLoadStart:"onloadstart",onMessage:"onmessage",onMouseDown:"onmousedown",onMouseEnter:"onmouseenter",onMouseLeave:"onmouseleave",onMouseMove:"onmousemove",onMouseOut:"onmouseout",onMouseOver:"onmouseover",onMouseUp:"onmouseup",onMouseWheel:"onmousewheel",onOffline:"onoffline",onOnline:"ononline",onPageHide:"onpagehide",onPageShow:"onpageshow",onPaste:"onpaste",onPause:"onpause",onPlay:"onplay",onPlaying:"onplaying",onPopState:"onpopstate",onProgress:"onprogress",onRateChange:"onratechange",onRepeat:"onrepeat",onReset:"onreset",onResize:"onresize",onScroll:"onscroll",onSeeked:"onseeked",onSeeking:"onseeking",onSelect:"onselect",onShow:"onshow",onStalled:"onstalled",onStorage:"onstorage",onSubmit:"onsubmit",onSuspend:"onsuspend",onTimeUpdate:"ontimeupdate",onToggle:"ontoggle",onUnload:"onunload",onVolumeChange:"onvolumechange",onWaiting:"onwaiting",onZoom:"onzoom",overlinePosition:"overline-position",overlineThickness:"overline-thickness",paintOrder:"paint-order",panose1:"panose-1",pointerEvents:"pointer-events",referrerPolicy:"referrerpolicy",renderingIntent:"rendering-intent",shapeRendering:"shape-rendering",stopColor:"stop-color",stopOpacity:"stop-opacity",strikethroughPosition:"strikethrough-position",strikethroughThickness:"strikethrough-thickness",strokeDashArray:"stroke-dasharray",strokeDashOffset:"stroke-dashoffset",strokeLineCap:"stroke-linecap",strokeLineJoin:"stroke-linejoin",strokeMiterLimit:"stroke-miterlimit",strokeOpacity:"stroke-opacity",strokeWidth:"stroke-width",tabIndex:"tabindex",textAnchor:"text-anchor",textDecoration:"text-decoration",textRendering:"text-rendering",typeOf:"typeof",underlinePosition:"underline-position",underlineThickness:"underline-thickness",unicodeBidi:"unicode-bidi",unicodeRange:"unicode-range",unitsPerEm:"units-per-em",vAlphabetic:"v-alphabetic",vHanging:"v-hanging",vIdeographic:"v-ideographic",vMathematical:"v-mathematical",vectorEffect:"vector-effect",vertAdvY:"vert-adv-y",vertOriginX:"vert-origin-x",vertOriginY:"vert-origin-y",wordSpacing:"word-spacing",writingMode:"writing-mode",xHeight:"x-height",playbackOrder:"playbackorder",timelineBegin:"timelinebegin"},transform:i,properties:{about:u,accentHeight:s,accumulate:null,additive:null,alignmentBaseline:null,alphabetic:s,amplitude:s,arabicForm:null,ascent:s,attributeName:null,attributeType:null,azimuth:s,bandwidth:null,baselineShift:null,baseFrequency:null,baseProfile:null,bbox:null,begin:null,bias:s,by:null,calcMode:null,capHeight:s,className:l,clip:null,clipPath:null,clipPathUnits:null,clipRule:null,color:null,colorInterpolation:null,colorInterpolationFilters:null,colorProfile:null,colorRendering:null,content:null,contentScriptType:null,contentStyleType:null,crossOrigin:null,cursor:null,cx:null,cy:null,d:null,dataType:null,defaultAction:null,descent:s,diffuseConstant:s,direction:null,display:null,dur:null,divisor:s,dominantBaseline:null,download:a,dx:null,dy:null,edgeMode:null,editable:null,elevation:s,enableBackground:null,end:null,event:null,exponent:s,externalResourcesRequired:null,fill:null,fillOpacity:s,fillRule:null,filter:null,filterRes:null,filterUnits:null,floodColor:null,floodOpacity:null,focusable:null,focusHighlight:null,fontFamily:null,fontSize:null,fontSizeAdjust:null,fontStretch:null,fontStyle:null,fontVariant:null,fontWeight:null,format:null,fr:null,from:null,fx:null,fy:null,g1:c,g2:c,glyphName:c,glyphOrientationHorizontal:null,glyphOrientationVertical:null,glyphRef:null,gradientTransform:null,gradientUnits:null,handler:null,hanging:s,hatchContentUnits:null,hatchUnits:null,height:null,href:null,hrefLang:null,horizAdvX:s,horizOriginX:s,horizOriginY:s,id:null,ideographic:s,imageRendering:null,initialVisibility:null,in:null,in2:null,intercept:s,k:s,k1:s,k2:s,k3:s,k4:s,kernelMatrix:u,kernelUnitLength:null,keyPoints:null,keySplines:null,keyTimes:null,kerning:null,lang:null,lengthAdjust:null,letterSpacing:null,lightingColor:null,limitingConeAngle:s,local:null,markerEnd:null,markerMid:null,markerStart:null,markerHeight:null,markerUnits:null,markerWidth:null,mask:null,maskContentUnits:null,maskUnits:null,mathematical:null,max:null,media:null,mediaCharacterEncoding:null,mediaContentEncodings:null,mediaSize:s,mediaTime:null,method:null,min:null,mode:null,name:null,navDown:null,navDownLeft:null,navDownRight:null,navLeft:null,navNext:null,navPrev:null,navRight:null,navUp:null,navUpLeft:null,navUpRight:null,numOctaves:null,observer:null,offset:null,onAbort:null,onActivate:null,onAfterPrint:null,onBeforePrint:null,onBegin:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnd:null,onEnded:null,onError:null,onFocus:null,onFocusIn:null,onFocusOut:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadStart:null,onMessage:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onMouseWheel:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRepeat:null,onReset:null,onResize:null,onScroll:null,onSeeked:null,onSeeking:null,onSelect:null,onShow:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnload:null,onVolumeChange:null,onWaiting:null,onZoom:null,opacity:null,operator:null,order:null,orient:null,orientation:null,origin:null,overflow:null,overlay:null,overlinePosition:s,overlineThickness:s,paintOrder:null,panose1:null,path:null,pathLength:s,patternContentUnits:null,patternTransform:null,patternUnits:null,phase:null,ping:l,pitch:null,playbackOrder:null,pointerEvents:null,points:null,pointsAtX:s,pointsAtY:s,pointsAtZ:s,preserveAlpha:null,preserveAspectRatio:null,primitiveUnits:null,propagate:null,property:u,r:null,radius:null,referrerPolicy:null,refX:null,refY:null,rel:u,rev:u,renderingIntent:null,repeatCount:null,repeatDur:null,requiredExtensions:u,requiredFeatures:u,requiredFonts:u,requiredFormats:u,resource:null,restart:null,result:null,rotate:null,rx:null,ry:null,scale:null,seed:null,shapeRendering:null,side:null,slope:null,snapshotTime:null,specularConstant:s,specularExponent:s,spreadMethod:null,spacing:null,startOffset:null,stdDeviation:null,stemh:null,stemv:null,stitchTiles:null,stopColor:null,stopOpacity:null,strikethroughPosition:s,strikethroughThickness:s,string:null,stroke:null,strokeDashArray:u,strokeDashOffset:null,strokeLineCap:null,strokeLineJoin:null,strokeMiterLimit:s,strokeOpacity:s,strokeWidth:null,style:null,surfaceScale:s,syncBehavior:null,syncBehaviorDefault:null,syncMaster:null,syncTolerance:null,syncToleranceDefault:null,systemLanguage:u,tabIndex:s,tableValues:null,target:null,targetX:s,targetY:s,textAnchor:null,textDecoration:null,textRendering:null,textLength:null,timelineBegin:null,title:null,transformBehavior:null,type:null,typeOf:u,to:null,transform:null,u1:null,u2:null,underlinePosition:s,underlineThickness:s,unicode:null,unicodeBidi:null,unicodeRange:null,unitsPerEm:s,values:null,vAlphabetic:s,vMathematical:s,vectorEffect:null,vHanging:s,vIdeographic:s,version:null,vertAdvY:s,vertOriginX:s,vertOriginY:s,viewBox:null,viewTarget:null,visibility:null,width:null,widths:null,wordSpacing:null,writingMode:null,x:null,x1:null,x2:null,xChannelSelector:null,xHeight:s,y:null,y1:null,y2:null,yChannelSelector:null,z:null,zoomAndPan:null}})},zpDW:function(e,t,n){"use strict";const o=n("YpxX"),r=n("pRQB"),i=n("cRLj"),a=n("2l2D"),s=r.CODE_POINTS,l=r.CODE_POINT_SEQUENCES,c={128:8364,130:8218,131:402,132:8222,133:8230,134:8224,135:8225,136:710,137:8240,138:352,139:8249,140:338,142:381,145:8216,146:8217,147:8220,148:8221,149:8226,150:8211,151:8212,152:732,153:8482,154:353,155:8250,156:339,158:382,159:376},u="DATA_STATE",d="RCDATA_STATE",p="RAWTEXT_STATE",f="SCRIPT_DATA_STATE",h="PLAINTEXT_STATE",m="TAG_OPEN_STATE",g="END_TAG_OPEN_STATE",T="TAG_NAME_STATE",E="RCDATA_LESS_THAN_SIGN_STATE",b="RCDATA_END_TAG_OPEN_STATE",A="RCDATA_END_TAG_NAME_STATE",k="RAWTEXT_LESS_THAN_SIGN_STATE",y="RAWTEXT_END_TAG_OPEN_STATE",_="RAWTEXT_END_TAG_NAME_STATE",S="SCRIPT_DATA_LESS_THAN_SIGN_STATE",C="SCRIPT_DATA_END_TAG_OPEN_STATE",x="SCRIPT_DATA_END_TAG_NAME_STATE",v="SCRIPT_DATA_ESCAPE_START_STATE",O="SCRIPT_DATA_ESCAPE_START_DASH_STATE",N="SCRIPT_DATA_ESCAPED_STATE",M="SCRIPT_DATA_ESCAPED_DASH_STATE",w="SCRIPT_DATA_ESCAPED_DASH_DASH_STATE",R="SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE",I="SCRIPT_DATA_ESCAPED_END_TAG_OPEN_STATE",L="SCRIPT_DATA_ESCAPED_END_TAG_NAME_STATE",P="SCRIPT_DATA_DOUBLE_ESCAPE_START_STATE",H="SCRIPT_DATA_DOUBLE_ESCAPED_STATE",D="SCRIPT_DATA_DOUBLE_ESCAPED_DASH_STATE",F="SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH_STATE",B="SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE",z="SCRIPT_DATA_DOUBLE_ESCAPE_END_STATE",U="BEFORE_ATTRIBUTE_NAME_STATE",G="ATTRIBUTE_NAME_STATE",W="AFTER_ATTRIBUTE_NAME_STATE",K="BEFORE_ATTRIBUTE_VALUE_STATE",j="ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE",Y="ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE",Q="ATTRIBUTE_VALUE_UNQUOTED_STATE",V="AFTER_ATTRIBUTE_VALUE_QUOTED_STATE",q="SELF_CLOSING_START_TAG_STATE",X="BOGUS_COMMENT_STATE",J="MARKUP_DECLARATION_OPEN_STATE",Z="COMMENT_START_STATE",$="COMMENT_START_DASH_STATE",ee="COMMENT_STATE",te="COMMENT_LESS_THAN_SIGN_STATE",ne="COMMENT_LESS_THAN_SIGN_BANG_STATE",oe="COMMENT_LESS_THAN_SIGN_BANG_DASH_STATE",re="COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH_STATE",ie="COMMENT_END_DASH_STATE",ae="COMMENT_END_STATE",se="COMMENT_END_BANG_STATE",le="DOCTYPE_STATE",ce="BEFORE_DOCTYPE_NAME_STATE",ue="DOCTYPE_NAME_STATE",de="AFTER_DOCTYPE_NAME_STATE",pe="AFTER_DOCTYPE_PUBLIC_KEYWORD_STATE",fe="BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE",he="DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE",me="DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE",ge="AFTER_DOCTYPE_PUBLIC_IDENTIFIER_STATE",Te="BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE",Ee="AFTER_DOCTYPE_SYSTEM_KEYWORD_STATE",be="BEFORE_DOCTYPE_SYSTEM_IDENTIFIER_STATE",Ae="DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE",ke="DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE",ye="AFTER_DOCTYPE_SYSTEM_IDENTIFIER_STATE",_e="BOGUS_DOCTYPE_STATE",Se="CDATA_SECTION_STATE",Ce="CDATA_SECTION_BRACKET_STATE",xe="CDATA_SECTION_END_STATE",ve="CHARACTER_REFERENCE_STATE",Oe="NAMED_CHARACTER_REFERENCE_STATE",Ne="AMBIGUOS_AMPERSAND_STATE",Me="NUMERIC_CHARACTER_REFERENCE_STATE",we="HEXADEMICAL_CHARACTER_REFERENCE_START_STATE",Re="DECIMAL_CHARACTER_REFERENCE_START_STATE",Ie="HEXADEMICAL_CHARACTER_REFERENCE_STATE",Le="DECIMAL_CHARACTER_REFERENCE_STATE",Pe="NUMERIC_CHARACTER_REFERENCE_END_STATE";function He(e){return e===s.SPACE||e===s.LINE_FEED||e===s.TABULATION||e===s.FORM_FEED}function De(e){return e>=s.DIGIT_0&&e<=s.DIGIT_9}function Fe(e){return e>=s.LATIN_CAPITAL_A&&e<=s.LATIN_CAPITAL_Z}function Be(e){return e>=s.LATIN_SMALL_A&&e<=s.LATIN_SMALL_Z}function ze(e){return Be(e)||Fe(e)}function Ue(e){return ze(e)||De(e)}function Ge(e){return e>=s.LATIN_CAPITAL_A&&e<=s.LATIN_CAPITAL_F}function We(e){return e>=s.LATIN_SMALL_A&&e<=s.LATIN_SMALL_F}function Ke(e){return e+32}function je(e){return e<=65535?String.fromCharCode(e):(e-=65536,String.fromCharCode(e>>>10&1023|55296)+String.fromCharCode(56320|1023&e))}function Ye(e){return String.fromCharCode(Ke(e))}function Qe(e,t){const n=i[++e];let o=++e,r=o+n-1;for(;o<=r;){const e=o+r>>>1,a=i[e];if(at))return i[e+n];r=e-1}}return-1}class Ve{constructor(){this.preprocessor=new o,this.tokenQueue=[],this.allowCDATA=!1,this.state=u,this.returnState="",this.charRefCode=-1,this.tempBuff=[],this.lastStartTagName="",this.consumedAfterSnapshot=-1,this.active=!1,this.currentCharacterToken=null,this.currentToken=null,this.currentAttr=null}_err(){}_errOnNextCodePoint(e){this._consume(),this._err(e),this._unconsume()}getNextToken(){for(;!this.tokenQueue.length&&this.active;){this.consumedAfterSnapshot=0;const e=this._consume();this._ensureHibernation()||this[this.state](e)}return this.tokenQueue.shift()}write(e,t){this.active=!0,this.preprocessor.write(e,t)}insertHtmlAtCurrentPos(e){this.active=!0,this.preprocessor.insertHtmlAtCurrentPos(e)}_ensureHibernation(){if(this.preprocessor.endOfChunkHit){for(;this.consumedAfterSnapshot>0;this.consumedAfterSnapshot--)this.preprocessor.retreat();return this.active=!1,this.tokenQueue.push({type:Ve.HIBERNATION_TOKEN}),!0}return!1}_consume(){return this.consumedAfterSnapshot++,this.preprocessor.advance()}_unconsume(){this.consumedAfterSnapshot--,this.preprocessor.retreat()}_reconsumeInState(e){this.state=e,this._unconsume()}_consumeSequenceIfMatch(e,t,n){let o=0,r=!0;const i=e.length;let a,l=0,c=t;for(;l0&&(c=this._consume(),o++),c===s.EOF){r=!1;break}if(a=e[l],c!==a&&(n||c!==Ke(a))){r=!1;break}}if(!r)for(;o--;)this._unconsume();return r}_isTempBufferEqualToScriptString(){if(this.tempBuff.length!==l.SCRIPT_STRING.length)return!1;for(let e=0;e0&&this._err(a.endTagWithAttributes),e.selfClosing&&this._err(a.endTagWithTrailingSolidus)),this.tokenQueue.push(e)}_emitCurrentCharacterToken(){this.currentCharacterToken&&(this.tokenQueue.push(this.currentCharacterToken),this.currentCharacterToken=null)}_emitEOFToken(){this._createEOFToken(),this._emitCurrentToken()}_appendCharToCurrentCharacterToken(e,t){this.currentCharacterToken&&this.currentCharacterToken.type!==e&&this._emitCurrentCharacterToken(),this.currentCharacterToken?this.currentCharacterToken.chars+=t:this._createCharacterToken(e,t)}_emitCodePoint(e){let t=Ve.CHARACTER_TOKEN;He(e)?t=Ve.WHITESPACE_CHARACTER_TOKEN:e===s.NULL&&(t=Ve.NULL_CHARACTER_TOKEN),this._appendCharToCurrentCharacterToken(t,je(e))}_emitSeveralCodePoints(e){for(let t=0;t-1;){const e=i[o],r=e<7;r&&1&e&&(t=2&e?[i[++o],i[++o]]:[i[++o]],n=0);const a=this._consume();if(this.tempBuff.push(a),n++,a===s.EOF)break;o=r?4&e?Qe(o,a):-1:a===e?++o:-1}for(;n--;)this.tempBuff.pop(),this._unconsume();return t}_isCharacterReferenceInAttribute(){return this.returnState===j||this.returnState===Y||this.returnState===Q}_isCharacterReferenceAttributeQuirk(e){if(!e&&this._isCharacterReferenceInAttribute()){const e=this._consume();return this._unconsume(),e===s.EQUALS_SIGN||Ue(e)}return!1}_flushCodePointsConsumedAsCharacterReference(){if(this._isCharacterReferenceInAttribute())for(let e=0;e")):e===s.NULL?(this._err(a.unexpectedNullCharacter),this.state=N,this._emitChars(r.REPLACEMENT_CHARACTER)):e===s.EOF?(this._err(a.eofInScriptHtmlCommentLikeText),this._emitEOFToken()):(this.state=N,this._emitCodePoint(e))}[R](e){e===s.SOLIDUS?(this.tempBuff=[],this.state=I):ze(e)?(this.tempBuff=[],this._emitChars("<"),this._reconsumeInState(P)):(this._emitChars("<"),this._reconsumeInState(N))}[I](e){ze(e)?(this._createEndTagToken(),this._reconsumeInState(L)):(this._emitChars("")):e===s.NULL?(this._err(a.unexpectedNullCharacter),this.state=H,this._emitChars(r.REPLACEMENT_CHARACTER)):e===s.EOF?(this._err(a.eofInScriptHtmlCommentLikeText),this._emitEOFToken()):(this.state=H,this._emitCodePoint(e))}[B](e){e===s.SOLIDUS?(this.tempBuff=[],this.state=z,this._emitChars("/")):this._reconsumeInState(H)}[z](e){He(e)||e===s.SOLIDUS||e===s.GREATER_THAN_SIGN?(this.state=this._isTempBufferEqualToScriptString()?N:H,this._emitCodePoint(e)):Fe(e)?(this.tempBuff.push(Ke(e)),this._emitCodePoint(e)):Be(e)?(this.tempBuff.push(e),this._emitCodePoint(e)):this._reconsumeInState(H)}[U](e){He(e)||(e===s.SOLIDUS||e===s.GREATER_THAN_SIGN||e===s.EOF?this._reconsumeInState(W):e===s.EQUALS_SIGN?(this._err(a.unexpectedEqualsSignBeforeAttributeName),this._createAttr("="),this.state=G):(this._createAttr(""),this._reconsumeInState(G)))}[G](e){He(e)||e===s.SOLIDUS||e===s.GREATER_THAN_SIGN||e===s.EOF?(this._leaveAttrName(W),this._unconsume()):e===s.EQUALS_SIGN?this._leaveAttrName(K):Fe(e)?this.currentAttr.name+=Ye(e):e===s.QUOTATION_MARK||e===s.APOSTROPHE||e===s.LESS_THAN_SIGN?(this._err(a.unexpectedCharacterInAttributeName),this.currentAttr.name+=je(e)):e===s.NULL?(this._err(a.unexpectedNullCharacter),this.currentAttr.name+=r.REPLACEMENT_CHARACTER):this.currentAttr.name+=je(e)}[W](e){He(e)||(e===s.SOLIDUS?this.state=q:e===s.EQUALS_SIGN?this.state=K:e===s.GREATER_THAN_SIGN?(this.state=u,this._emitCurrentToken()):e===s.EOF?(this._err(a.eofInTag),this._emitEOFToken()):(this._createAttr(""),this._reconsumeInState(G)))}[K](e){He(e)||(e===s.QUOTATION_MARK?this.state=j:e===s.APOSTROPHE?this.state=Y:e===s.GREATER_THAN_SIGN?(this._err(a.missingAttributeValue),this.state=u,this._emitCurrentToken()):this._reconsumeInState(Q))}[j](e){e===s.QUOTATION_MARK?this.state=V:e===s.AMPERSAND?(this.returnState=j,this.state=ve):e===s.NULL?(this._err(a.unexpectedNullCharacter),this.currentAttr.value+=r.REPLACEMENT_CHARACTER):e===s.EOF?(this._err(a.eofInTag),this._emitEOFToken()):this.currentAttr.value+=je(e)}[Y](e){e===s.APOSTROPHE?this.state=V:e===s.AMPERSAND?(this.returnState=Y,this.state=ve):e===s.NULL?(this._err(a.unexpectedNullCharacter),this.currentAttr.value+=r.REPLACEMENT_CHARACTER):e===s.EOF?(this._err(a.eofInTag),this._emitEOFToken()):this.currentAttr.value+=je(e)}[Q](e){He(e)?this._leaveAttrValue(U):e===s.AMPERSAND?(this.returnState=Q,this.state=ve):e===s.GREATER_THAN_SIGN?(this._leaveAttrValue(u),this._emitCurrentToken()):e===s.NULL?(this._err(a.unexpectedNullCharacter),this.currentAttr.value+=r.REPLACEMENT_CHARACTER):e===s.QUOTATION_MARK||e===s.APOSTROPHE||e===s.LESS_THAN_SIGN||e===s.EQUALS_SIGN||e===s.GRAVE_ACCENT?(this._err(a.unexpectedCharacterInUnquotedAttributeValue),this.currentAttr.value+=je(e)):e===s.EOF?(this._err(a.eofInTag),this._emitEOFToken()):this.currentAttr.value+=je(e)}[V](e){He(e)?this._leaveAttrValue(U):e===s.SOLIDUS?this._leaveAttrValue(q):e===s.GREATER_THAN_SIGN?(this._leaveAttrValue(u),this._emitCurrentToken()):e===s.EOF?(this._err(a.eofInTag),this._emitEOFToken()):(this._err(a.missingWhitespaceBetweenAttributes),this._reconsumeInState(U))}[q](e){e===s.GREATER_THAN_SIGN?(this.currentToken.selfClosing=!0,this.state=u,this._emitCurrentToken()):e===s.EOF?(this._err(a.eofInTag),this._emitEOFToken()):(this._err(a.unexpectedSolidusInTag),this._reconsumeInState(U))}[X](e){e===s.GREATER_THAN_SIGN?(this.state=u,this._emitCurrentToken()):e===s.EOF?(this._emitCurrentToken(),this._emitEOFToken()):e===s.NULL?(this._err(a.unexpectedNullCharacter),this.currentToken.data+=r.REPLACEMENT_CHARACTER):this.currentToken.data+=je(e)}[J](e){this._consumeSequenceIfMatch(l.DASH_DASH_STRING,e,!0)?(this._createCommentToken(),this.state=Z):this._consumeSequenceIfMatch(l.DOCTYPE_STRING,e,!1)?this.state=le:this._consumeSequenceIfMatch(l.CDATA_START_STRING,e,!0)?this.allowCDATA?this.state=Se:(this._err(a.cdataInHtmlContent),this._createCommentToken(),this.currentToken.data="[CDATA[",this.state=X):this._ensureHibernation()||(this._err(a.incorrectlyOpenedComment),this._createCommentToken(),this._reconsumeInState(X))}[Z](e){e===s.HYPHEN_MINUS?this.state=$:e===s.GREATER_THAN_SIGN?(this._err(a.abruptClosingOfEmptyComment),this.state=u,this._emitCurrentToken()):this._reconsumeInState(ee)}[$](e){e===s.HYPHEN_MINUS?this.state=ae:e===s.GREATER_THAN_SIGN?(this._err(a.abruptClosingOfEmptyComment),this.state=u,this._emitCurrentToken()):e===s.EOF?(this._err(a.eofInComment),this._emitCurrentToken(),this._emitEOFToken()):(this.currentToken.data+="-",this._reconsumeInState(ee))}[ee](e){e===s.HYPHEN_MINUS?this.state=ie:e===s.LESS_THAN_SIGN?(this.currentToken.data+="<",this.state=te):e===s.NULL?(this._err(a.unexpectedNullCharacter),this.currentToken.data+=r.REPLACEMENT_CHARACTER):e===s.EOF?(this._err(a.eofInComment),this._emitCurrentToken(),this._emitEOFToken()):this.currentToken.data+=je(e)}[te](e){e===s.EXCLAMATION_MARK?(this.currentToken.data+="!",this.state=ne):e===s.LESS_THAN_SIGN?this.currentToken.data+="!":this._reconsumeInState(ee)}[ne](e){e===s.HYPHEN_MINUS?this.state=oe:this._reconsumeInState(ee)}[oe](e){e===s.HYPHEN_MINUS?this.state=re:this._reconsumeInState(ie)}[re](e){e!==s.GREATER_THAN_SIGN&&e!==s.EOF&&this._err(a.nestedComment),this._reconsumeInState(ae)}[ie](e){e===s.HYPHEN_MINUS?this.state=ae:e===s.EOF?(this._err(a.eofInComment),this._emitCurrentToken(),this._emitEOFToken()):(this.currentToken.data+="-",this._reconsumeInState(ee))}[ae](e){e===s.GREATER_THAN_SIGN?(this.state=u,this._emitCurrentToken()):e===s.EXCLAMATION_MARK?this.state=se:e===s.HYPHEN_MINUS?this.currentToken.data+="-":e===s.EOF?(this._err(a.eofInComment),this._emitCurrentToken(),this._emitEOFToken()):(this.currentToken.data+="--",this._reconsumeInState(ee))}[se](e){e===s.HYPHEN_MINUS?(this.currentToken.data+="--!",this.state=ie):e===s.GREATER_THAN_SIGN?(this._err(a.incorrectlyClosedComment),this.state=u,this._emitCurrentToken()):e===s.EOF?(this._err(a.eofInComment),this._emitCurrentToken(),this._emitEOFToken()):(this.currentToken.data+="--!",this._reconsumeInState(ee))}[le](e){He(e)?this.state=ce:e===s.GREATER_THAN_SIGN?this._reconsumeInState(ce):e===s.EOF?(this._err(a.eofInDoctype),this._createDoctypeToken(null),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(a.missingWhitespaceBeforeDoctypeName),this._reconsumeInState(ce))}[ce](e){He(e)||(Fe(e)?(this._createDoctypeToken(Ye(e)),this.state=ue):e===s.NULL?(this._err(a.unexpectedNullCharacter),this._createDoctypeToken(r.REPLACEMENT_CHARACTER),this.state=ue):e===s.GREATER_THAN_SIGN?(this._err(a.missingDoctypeName),this._createDoctypeToken(null),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this.state=u):e===s.EOF?(this._err(a.eofInDoctype),this._createDoctypeToken(null),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._createDoctypeToken(je(e)),this.state=ue))}[ue](e){He(e)?this.state=de:e===s.GREATER_THAN_SIGN?(this.state=u,this._emitCurrentToken()):Fe(e)?this.currentToken.name+=Ye(e):e===s.NULL?(this._err(a.unexpectedNullCharacter),this.currentToken.name+=r.REPLACEMENT_CHARACTER):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):this.currentToken.name+=je(e)}[de](e){He(e)||(e===s.GREATER_THAN_SIGN?(this.state=u,this._emitCurrentToken()):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):this._consumeSequenceIfMatch(l.PUBLIC_STRING,e,!1)?this.state=pe:this._consumeSequenceIfMatch(l.SYSTEM_STRING,e,!1)?this.state=Ee:this._ensureHibernation()||(this._err(a.invalidCharacterSequenceAfterDoctypeName),this.currentToken.forceQuirks=!0,this._reconsumeInState(_e)))}[pe](e){He(e)?this.state=fe:e===s.QUOTATION_MARK?(this._err(a.missingWhitespaceAfterDoctypePublicKeyword),this.currentToken.publicId="",this.state=he):e===s.APOSTROPHE?(this._err(a.missingWhitespaceAfterDoctypePublicKeyword),this.currentToken.publicId="",this.state=me):e===s.GREATER_THAN_SIGN?(this._err(a.missingDoctypePublicIdentifier),this.currentToken.forceQuirks=!0,this.state=u,this._emitCurrentToken()):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(a.missingQuoteBeforeDoctypePublicIdentifier),this.currentToken.forceQuirks=!0,this._reconsumeInState(_e))}[fe](e){He(e)||(e===s.QUOTATION_MARK?(this.currentToken.publicId="",this.state=he):e===s.APOSTROPHE?(this.currentToken.publicId="",this.state=me):e===s.GREATER_THAN_SIGN?(this._err(a.missingDoctypePublicIdentifier),this.currentToken.forceQuirks=!0,this.state=u,this._emitCurrentToken()):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(a.missingQuoteBeforeDoctypePublicIdentifier),this.currentToken.forceQuirks=!0,this._reconsumeInState(_e)))}[he](e){e===s.QUOTATION_MARK?this.state=ge:e===s.NULL?(this._err(a.unexpectedNullCharacter),this.currentToken.publicId+=r.REPLACEMENT_CHARACTER):e===s.GREATER_THAN_SIGN?(this._err(a.abruptDoctypePublicIdentifier),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this.state=u):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):this.currentToken.publicId+=je(e)}[me](e){e===s.APOSTROPHE?this.state=ge:e===s.NULL?(this._err(a.unexpectedNullCharacter),this.currentToken.publicId+=r.REPLACEMENT_CHARACTER):e===s.GREATER_THAN_SIGN?(this._err(a.abruptDoctypePublicIdentifier),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this.state=u):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):this.currentToken.publicId+=je(e)}[ge](e){He(e)?this.state=Te:e===s.GREATER_THAN_SIGN?(this.state=u,this._emitCurrentToken()):e===s.QUOTATION_MARK?(this._err(a.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),this.currentToken.systemId="",this.state=Ae):e===s.APOSTROPHE?(this._err(a.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),this.currentToken.systemId="",this.state=ke):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(a.missingQuoteBeforeDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this._reconsumeInState(_e))}[Te](e){He(e)||(e===s.GREATER_THAN_SIGN?(this._emitCurrentToken(),this.state=u):e===s.QUOTATION_MARK?(this.currentToken.systemId="",this.state=Ae):e===s.APOSTROPHE?(this.currentToken.systemId="",this.state=ke):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(a.missingQuoteBeforeDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this._reconsumeInState(_e)))}[Ee](e){He(e)?this.state=be:e===s.QUOTATION_MARK?(this._err(a.missingWhitespaceAfterDoctypeSystemKeyword),this.currentToken.systemId="",this.state=Ae):e===s.APOSTROPHE?(this._err(a.missingWhitespaceAfterDoctypeSystemKeyword),this.currentToken.systemId="",this.state=ke):e===s.GREATER_THAN_SIGN?(this._err(a.missingDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this.state=u,this._emitCurrentToken()):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(a.missingQuoteBeforeDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this._reconsumeInState(_e))}[be](e){He(e)||(e===s.QUOTATION_MARK?(this.currentToken.systemId="",this.state=Ae):e===s.APOSTROPHE?(this.currentToken.systemId="",this.state=ke):e===s.GREATER_THAN_SIGN?(this._err(a.missingDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this.state=u,this._emitCurrentToken()):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(a.missingQuoteBeforeDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this._reconsumeInState(_e)))}[Ae](e){e===s.QUOTATION_MARK?this.state=ye:e===s.NULL?(this._err(a.unexpectedNullCharacter),this.currentToken.systemId+=r.REPLACEMENT_CHARACTER):e===s.GREATER_THAN_SIGN?(this._err(a.abruptDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this.state=u):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):this.currentToken.systemId+=je(e)}[ke](e){e===s.APOSTROPHE?this.state=ye:e===s.NULL?(this._err(a.unexpectedNullCharacter),this.currentToken.systemId+=r.REPLACEMENT_CHARACTER):e===s.GREATER_THAN_SIGN?(this._err(a.abruptDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this.state=u):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):this.currentToken.systemId+=je(e)}[ye](e){He(e)||(e===s.GREATER_THAN_SIGN?(this._emitCurrentToken(),this.state=u):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(a.unexpectedCharacterAfterDoctypeSystemIdentifier),this._reconsumeInState(_e)))}[_e](e){e===s.GREATER_THAN_SIGN?(this._emitCurrentToken(),this.state=u):e===s.NULL?this._err(a.unexpectedNullCharacter):e===s.EOF&&(this._emitCurrentToken(),this._emitEOFToken())}[Se](e){e===s.RIGHT_SQUARE_BRACKET?this.state=Ce:e===s.EOF?(this._err(a.eofInCdata),this._emitEOFToken()):this._emitCodePoint(e)}[Ce](e){e===s.RIGHT_SQUARE_BRACKET?this.state=xe:(this._emitChars("]"),this._reconsumeInState(Se))}[xe](e){e===s.GREATER_THAN_SIGN?this.state=u:e===s.RIGHT_SQUARE_BRACKET?this._emitChars("]"):(this._emitChars("]]"),this._reconsumeInState(Se))}[ve](e){this.tempBuff=[s.AMPERSAND],e===s.NUMBER_SIGN?(this.tempBuff.push(e),this.state=Me):Ue(e)?this._reconsumeInState(Oe):(this._flushCodePointsConsumedAsCharacterReference(),this._reconsumeInState(this.returnState))}[Oe](e){const t=this._matchNamedCharacterReference(e);if(this._ensureHibernation())this.tempBuff=[s.AMPERSAND];else if(t){const e=this.tempBuff[this.tempBuff.length-1]===s.SEMICOLON;this._isCharacterReferenceAttributeQuirk(e)||(e||this._errOnNextCodePoint(a.missingSemicolonAfterCharacterReference),this.tempBuff=t),this._flushCodePointsConsumedAsCharacterReference(),this.state=this.returnState}else this._flushCodePointsConsumedAsCharacterReference(),this.state=Ne}[Ne](e){Ue(e)?this._isCharacterReferenceInAttribute()?this.currentAttr.value+=je(e):this._emitCodePoint(e):(e===s.SEMICOLON&&this._err(a.unknownNamedCharacterReference),this._reconsumeInState(this.returnState))}[Me](e){this.charRefCode=0,e===s.LATIN_SMALL_X||e===s.LATIN_CAPITAL_X?(this.tempBuff.push(e),this.state=we):this._reconsumeInState(Re)}[we](e){!function(e){return De(e)||Ge(e)||We(e)}(e)?(this._err(a.absenceOfDigitsInNumericCharacterReference),this._flushCodePointsConsumedAsCharacterReference(),this._reconsumeInState(this.returnState)):this._reconsumeInState(Ie)}[Re](e){De(e)?this._reconsumeInState(Le):(this._err(a.absenceOfDigitsInNumericCharacterReference),this._flushCodePointsConsumedAsCharacterReference(),this._reconsumeInState(this.returnState))}[Ie](e){Ge(e)?this.charRefCode=16*this.charRefCode+e-55:We(e)?this.charRefCode=16*this.charRefCode+e-87:De(e)?this.charRefCode=16*this.charRefCode+e-48:e===s.SEMICOLON?this.state=Pe:(this._err(a.missingSemicolonAfterCharacterReference),this._reconsumeInState(Pe))}[Le](e){De(e)?this.charRefCode=10*this.charRefCode+e-48:e===s.SEMICOLON?this.state=Pe:(this._err(a.missingSemicolonAfterCharacterReference),this._reconsumeInState(Pe))}[Pe](){if(this.charRefCode===s.NULL)this._err(a.nullCharacterReference),this.charRefCode=s.REPLACEMENT_CHARACTER;else if(this.charRefCode>1114111)this._err(a.characterReferenceOutsideUnicodeRange),this.charRefCode=s.REPLACEMENT_CHARACTER;else if(r.isSurrogate(this.charRefCode))this._err(a.surrogateCharacterReference),this.charRefCode=s.REPLACEMENT_CHARACTER;else if(r.isUndefinedCodePoint(this.charRefCode))this._err(a.noncharacterCharacterReference);else if(r.isControlCodePoint(this.charRefCode)||this.charRefCode===s.CARRIAGE_RETURN){this._err(a.controlCharacterReference);const e=c[this.charRefCode];e&&(this.charRefCode=e)}this.tempBuff=[this.charRefCode],this._flushCodePointsConsumedAsCharacterReference(),this._reconsumeInState(this.returnState)}}Ve.CHARACTER_TOKEN="CHARACTER_TOKEN",Ve.NULL_CHARACTER_TOKEN="NULL_CHARACTER_TOKEN",Ve.WHITESPACE_CHARACTER_TOKEN="WHITESPACE_CHARACTER_TOKEN",Ve.START_TAG_TOKEN="START_TAG_TOKEN",Ve.END_TAG_TOKEN="END_TAG_TOKEN",Ve.COMMENT_TOKEN="COMMENT_TOKEN",Ve.DOCTYPE_TOKEN="DOCTYPE_TOKEN",Ve.EOF_TOKEN="EOF_TOKEN",Ve.HIBERNATION_TOKEN="HIBERNATION_TOKEN",Ve.MODE={DATA:u,RCDATA:d,RAWTEXT:p,SCRIPT_DATA:f,PLAINTEXT:h},Ve.getTokenAttr=function(e,t){for(let n=e.attrs.length-1;n>=0;n--)if(e.attrs[n].name===t)return e.attrs[n].value;return null},e.exports=Ve}}]); \ No newline at end of file diff --git a/_next/static/chunks/1c49f5f00355f650bee3d37484f094be037a30fa.9731460d600f94fea033.js b/_next/static/chunks/1c49f5f00355f650bee3d37484f094be037a30fa.9731460d600f94fea033.js deleted file mode 100644 index 28e77db5e..000000000 --- a/_next/static/chunks/1c49f5f00355f650bee3d37484f094be037a30fa.9731460d600f94fea033.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp_N_E=window.webpackJsonp_N_E||[]).push([[4],{"++Eq":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{fontFamily:'Consolas, Menlo, Monaco, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace',fontSize:"14px",lineHeight:"1.375",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",background:"#1d262f",color:"#57718e"},'pre[class*="language-"]':{fontFamily:'Consolas, Menlo, Monaco, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace',fontSize:"14px",lineHeight:"1.375",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",background:"#1d262f",color:"#57718e",padding:"1em",margin:".5em 0",overflow:"auto"},'pre > code[class*="language-"]':{fontSize:"1em"},'pre[class*="language-"]::-moz-selection':{textShadow:"none",background:"#004a9e"},'pre[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#004a9e"},'code[class*="language-"]::-moz-selection':{textShadow:"none",background:"#004a9e"},'code[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#004a9e"},'pre[class*="language-"]::selection':{textShadow:"none",background:"#004a9e"},'pre[class*="language-"] ::selection':{textShadow:"none",background:"#004a9e"},'code[class*="language-"]::selection':{textShadow:"none",background:"#004a9e"},'code[class*="language-"] ::selection':{textShadow:"none",background:"#004a9e"},':not(pre) > code[class*="language-"]':{padding:".1em",borderRadius:".3em"},comment:{color:"#4a5f78"},prolog:{color:"#4a5f78"},doctype:{color:"#4a5f78"},cdata:{color:"#4a5f78"},punctuation:{color:"#4a5f78"},namespace:{Opacity:".7"},tag:{color:"#0aa370"},operator:{color:"#0aa370"},number:{color:"#0aa370"},property:{color:"#57718e"},function:{color:"#57718e"},"tag-id":{color:"#ebf4ff"},selector:{color:"#ebf4ff"},"atrule-id":{color:"#ebf4ff"},"code.language-javascript":{color:"#7eb6f6"},"attr-name":{color:"#7eb6f6"},"code.language-css":{color:"#47ebb4"},"code.language-scss":{color:"#47ebb4"},boolean:{color:"#47ebb4"},string:{color:"#47ebb4"},entity:{color:"#47ebb4",cursor:"help"},url:{color:"#47ebb4"},".language-css .token.string":{color:"#47ebb4"},".language-scss .token.string":{color:"#47ebb4"},".style .token.string":{color:"#47ebb4"},"attr-value":{color:"#47ebb4"},keyword:{color:"#47ebb4"},control:{color:"#47ebb4"},directive:{color:"#47ebb4"},unit:{color:"#47ebb4"},statement:{color:"#47ebb4"},regex:{color:"#47ebb4"},atrule:{color:"#47ebb4"},placeholder:{color:"#47ebb4"},variable:{color:"#47ebb4"},deleted:{textDecoration:"line-through"},inserted:{borderBottom:"1px dotted #ebf4ff",textDecoration:"none"},italic:{fontStyle:"italic"},important:{fontWeight:"bold",color:"#7eb6f6"},bold:{fontWeight:"bold"},"pre > code.highlight":{Outline:".4em solid #34659d",OutlineOffset:".4em"},".line-numbers .line-numbers-rows":{borderRightColor:"#1f2932"},".line-numbers-rows > span:before":{color:"#2c3847"},".line-highlight":{background:"linear-gradient(to right, rgba(10, 163, 112, 0.2) 70%, rgba(10, 163, 112, 0))"}}},"+OJB":function(e,t,n){"use strict";t.cwd=function(){return"/"}},"+Pz5":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n("NOby"),r=n("T0BQ"),i=l("text"),a=l("string"),s={resolveAll:c()};function l(e){return{tokenize:function(t){var n=this,o=this.parser.constructs[e],r=t.attempt(o,i,a);return i;function i(e){return l(e)?r(e):a(e)}function a(e){if(null!==e)return t.enter("data"),t.consume(e),s;t.consume(e)}function s(e){return l(e)?(t.exit("data"),r(e)):(t.consume(e),s)}function l(e){var t=o[e],r=-1;if(null===e)return!0;if(t)for(;++r0&&void 0!==arguments[0]?arguments[0]:{},t=e.ampFirst,n=void 0!==t&&t,o=e.hybrid,r=void 0!==o&&o,i=e.hasQuery,a=void 0!==i&&i;return n||r&&a}},"/BR8":function(e,t,n){"use strict";e.exports=function(e,t){var n=e.footnoteOrder,r=String(t.identifier);-1===n.indexOf(r)&&n.push(r);return e(t.position,"sup",{id:"fnref-"+r},[e(t,"a",{href:"#fn-"+r,className:["footnote-ref"]},[o("text",t.label||r)])])};var o=n("vUGn")},"/Fgc":function(e,t,n){"use strict";e.exports=function(e,t){return e(t,"del",o(e,t))};var o=n("WFsM")},"/apb":function(e,t,n){"use strict";var o=n("E/Jm"),r={name:"codeText",tokenize:function(e,t,n){var r,i,a=0;return function(t){return e.enter("codeText"),e.enter("codeTextSequence"),s(t)};function s(t){return 96===t?(e.consume(t),a++,s):(e.exit("codeTextSequence"),l(t))}function l(t){return null===t?n(t):96===t?(i=e.enter("codeTextSequence"),r=0,u(t)):32===t?(e.enter("space"),e.consume(t),e.exit("space"),l):o(t)?(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),l):(e.enter("codeTextData"),c(t))}function c(t){return null===t||32===t||96===t||o(t)?(e.exit("codeTextData"),l(t)):(e.consume(t),c)}function u(n){return 96===n?(e.consume(n),r++,u):r===a?(e.exit("codeTextSequence"),e.exit("codeText"),t(n)):(i.type="codeTextData",c(n))}},resolve:function(e){var t,n,o=e.length-4,r=3;if(("lineEnding"===e[r][1].type||"space"===e[r][1].type)&&("lineEnding"===e[o][1].type||"space"===e[o][1].type))for(t=r;++t code[class*="language-"]':{fontSize:"1em"},'pre[class*="language-"]::-moz-selection':{textShadow:"none",background:"#6a51e6"},'pre[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#6a51e6"},'code[class*="language-"]::-moz-selection':{textShadow:"none",background:"#6a51e6"},'code[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#6a51e6"},'pre[class*="language-"]::selection':{textShadow:"none",background:"#6a51e6"},'pre[class*="language-"] ::selection':{textShadow:"none",background:"#6a51e6"},'code[class*="language-"]::selection':{textShadow:"none",background:"#6a51e6"},'code[class*="language-"] ::selection':{textShadow:"none",background:"#6a51e6"},':not(pre) > code[class*="language-"]':{padding:".1em",borderRadius:".3em"},comment:{color:"#6c6783"},prolog:{color:"#6c6783"},doctype:{color:"#6c6783"},cdata:{color:"#6c6783"},punctuation:{color:"#6c6783"},namespace:{Opacity:".7"},tag:{color:"#e09142"},operator:{color:"#e09142"},number:{color:"#e09142"},property:{color:"#9a86fd"},function:{color:"#9a86fd"},"tag-id":{color:"#eeebff"},selector:{color:"#eeebff"},"atrule-id":{color:"#eeebff"},"code.language-javascript":{color:"#c4b9fe"},"attr-name":{color:"#c4b9fe"},"code.language-css":{color:"#ffcc99"},"code.language-scss":{color:"#ffcc99"},boolean:{color:"#ffcc99"},string:{color:"#ffcc99"},entity:{color:"#ffcc99",cursor:"help"},url:{color:"#ffcc99"},".language-css .token.string":{color:"#ffcc99"},".language-scss .token.string":{color:"#ffcc99"},".style .token.string":{color:"#ffcc99"},"attr-value":{color:"#ffcc99"},keyword:{color:"#ffcc99"},control:{color:"#ffcc99"},directive:{color:"#ffcc99"},unit:{color:"#ffcc99"},statement:{color:"#ffcc99"},regex:{color:"#ffcc99"},atrule:{color:"#ffcc99"},placeholder:{color:"#ffcc99"},variable:{color:"#ffcc99"},deleted:{textDecoration:"line-through"},inserted:{borderBottom:"1px dotted #eeebff",textDecoration:"none"},italic:{fontStyle:"italic"},important:{fontWeight:"bold",color:"#c4b9fe"},bold:{fontWeight:"bold"},"pre > code.highlight":{Outline:".4em solid #8a75f5",OutlineOffset:".4em"},".line-numbers .line-numbers-rows":{borderRightColor:"#2c2937"},".line-numbers-rows > span:before":{color:"#3c3949"},".line-highlight":{background:"linear-gradient(to right, rgba(224, 145, 66, 0.2) 70%, rgba(224, 145, 66, 0))"}}},"0RbX":function(e,t,n){"use strict";var o=n("0h9/"),r=n("Yoeg"),i=n("L8sx"),a=n("+Pz5"),s=n("oJEb"),l=n("5pEW"),c=n("pe0m"),u=n("RrMp");e.exports=function(e){var t={defined:[],constructs:s([u].concat(c((e||{}).extensions))),content:n(o),document:n(r),flow:n(i),string:n(a.string),text:n(a.text)};return t;function n(e){return function(n){return l(t,e,n)}}}},"0So9":function(e,t,n){var o=n("hq1P"),r=n("Ny5O"),i=n("9SNS"),a=n("E/Jm"),s=n("BjXi"),l=n("uDje"),c={tokenize:function(e,t,n){return function(t){return e.consume(t),o};function o(t){return 87===t||t-32===87?(e.consume(t),r):n(t)}function r(t){return 87===t||t-32===87?(e.consume(t),i):n(t)}function i(t){return 46===t?(e.consume(t),s):n(t)}function s(e){return null===e||a(e)?n(e):t(e)}},partial:!0},u={tokenize:function(e,t,n){var o,r;return a;function a(t){return 38===t?e.check(f,u,c)(t):46===t||95===t?e.check(p,u,c)(t):i(t)||l(t)||45!==t&&s(t)?u(t):(e.consume(t),a)}function c(t){return 46===t?(r=o,o=void 0,e.consume(t),a):(95===t&&(o=!0),e.consume(t),a)}function u(e){return r||o?n(e):t(e)}},partial:!0},d={tokenize:function(e,t){var n=0;return o;function o(a){return 38===a?e.check(f,t,r)(a):(40===a&&n++,41===a?e.check(p,i,r)(a):A(a)?t(a):b(a)?e.check(p,t,r)(a):(e.consume(a),o))}function r(t){return e.consume(t),o}function i(e){return--n<0?t(e):r(e)}},partial:!0},p={tokenize:function(e,t,n){return function(t){return e.consume(t),o};function o(r){return b(r)?(e.consume(r),o):A(r)?t(r):n(r)}},partial:!0},f={tokenize:function(e,t,n){return function(t){return e.consume(t),r};function r(t){return o(t)?(e.consume(t),r):59===t?(e.consume(t),i):n(t)}function i(e){return A(e)?t(e):n(e)}},partial:!0},h={tokenize:function(e,t,n){var o=this;return function(t){if(87!==t&&t-32!==87||!y(o.previous)||C(o.events))return n(t);return e.enter("literalAutolink"),e.enter("literalAutolinkWww"),e.check(c,e.attempt(u,e.attempt(d,r),n),n)(t)};function r(n){return e.exit("literalAutolinkWww"),e.exit("literalAutolink"),t(n)}},previous:y},m={tokenize:function(e,t,n){var o=this;return function(t){if(72!==t&&t-32!==72||!_(o.previous)||C(o.events))return n(t);return e.enter("literalAutolink"),e.enter("literalAutolinkHttp"),e.consume(t),r};function r(t){return 84===t||t-32===84?(e.consume(t),a):n(t)}function a(t){return 84===t||t-32===84?(e.consume(t),c):n(t)}function c(t){return 80===t||t-32===80?(e.consume(t),p):n(t)}function p(t){return 83===t||t-32===83?(e.consume(t),f):f(t)}function f(t){return 58===t?(e.consume(t),h):n(t)}function h(t){return 47===t?(e.consume(t),m):n(t)}function m(t){return 47===t?(e.consume(t),g):n(t)}function g(t){return i(t)||l(t)||s(t)?n(t):e.attempt(u,e.attempt(d,T),n)(t)}function T(n){return e.exit("literalAutolinkHttp"),e.exit("literalAutolink"),t(n)}},previous:_},g={tokenize:function(e,t,n){var o,i=this;return function(t){if(!k(t)||!S(i.previous)||C(i.events))return n(t);return e.enter("literalAutolink"),e.enter("literalAutolinkEmail"),a(t)};function a(t){return k(t)?(e.consume(t),a):64===t?(e.consume(t),s):n(t)}function s(t){return 46===t?e.check(p,d,l)(t):45===t||95===t?e.check(p,n,c)(t):r(t)?(e.consume(t),s):d(t)}function l(t){return e.consume(t),o=!0,s}function c(t){return e.consume(t),u}function u(t){return 46===t?e.check(p,n,l)(t):s(t)}function d(r){return o?(e.exit("literalAutolinkEmail"),e.exit("literalAutolink"),t(r)):n(r)}},previous:S},T={};t.text=T;for(var E=48;E<123;)T[E]=g,58===++E?E=65:91===E&&(E=97);function b(e){return 33===e||34===e||39===e||41===e||42===e||44===e||46===e||58===e||59===e||60===e||63===e||95===e||126===e}function A(e){return null===e||e<0||32===e||60===e}function k(e){return 43===e||45===e||46===e||95===e||r(e)}function y(e){return null===e||e<0||32===e||40===e||42===e||95===e||126===e}function _(e){return null===e||!o(e)}function S(e){return 47!==e&&_(e)}function C(e){for(var t=e.length;t--;)if(("labelLink"===e[t][1].type||"labelImage"===e[t][1].type)&&!e[t][1]._balanced)return!0}T[43]=g,T[45]=g,T[46]=g,T[95]=g,T[72]=[g,m],T[104]=[g,m],T[87]=[g,h],T[119]=[g,h]},"0aKP":function(e,t,n){"use strict";var o=[].splice;e.exports=o},"0h9/":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n("E/Jm"),r=n("yRGd"),i=function(e){var t,n=e.attempt(this.parser.constructs.contentInitial,(function(t){if(null===t)return void e.consume(t);return e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),r(e,n,"linePrefix")}),(function(t){return e.enter("paragraph"),i(t)}));return n;function i(n){var o=e.enter("chunkText",{contentType:"text",previous:t});return t&&(t.next=o),t=o,a(n)}function a(t){return null===t?(e.exit("chunkText"),e.exit("paragraph"),void e.consume(t)):o(t)?(e.consume(t),e.exit("chunkText"),i):(e.consume(t),a)}};t.tokenize=i},"0mGV":function(e,t,n){"use strict";var o=n("E/Jm"),r=n("2N74"),i=n("yRGd");e.exports=function(e,t){var n;return function a(s){if(o(s))return e.enter("lineEnding"),e.consume(s),e.exit("lineEnding"),n=!0,a;if(r(s))return i(e,a,n?"linePrefix":"lineSuffix")(s);return t(s)}}},"1CLp":function(e,t,n){"use strict";const o=n("UwWT"),r=o.TAG_NAMES,i=o.NAMESPACES;function a(e){switch(e.length){case 1:return e===r.P;case 2:return e===r.RB||e===r.RP||e===r.RT||e===r.DD||e===r.DT||e===r.LI;case 3:return e===r.RTC;case 6:return e===r.OPTION;case 8:return e===r.OPTGROUP}return!1}function s(e){switch(e.length){case 1:return e===r.P;case 2:return e===r.RB||e===r.RP||e===r.RT||e===r.DD||e===r.DT||e===r.LI||e===r.TD||e===r.TH||e===r.TR;case 3:return e===r.RTC;case 5:return e===r.TBODY||e===r.TFOOT||e===r.THEAD;case 6:return e===r.OPTION;case 7:return e===r.CAPTION;case 8:return e===r.OPTGROUP||e===r.COLGROUP}return!1}function l(e,t){switch(e.length){case 2:if(e===r.TD||e===r.TH)return t===i.HTML;if(e===r.MI||e===r.MO||e===r.MN||e===r.MS)return t===i.MATHML;break;case 4:if(e===r.HTML)return t===i.HTML;if(e===r.DESC)return t===i.SVG;break;case 5:if(e===r.TABLE)return t===i.HTML;if(e===r.MTEXT)return t===i.MATHML;if(e===r.TITLE)return t===i.SVG;break;case 6:return(e===r.APPLET||e===r.OBJECT)&&t===i.HTML;case 7:return(e===r.CAPTION||e===r.MARQUEE)&&t===i.HTML;case 8:return e===r.TEMPLATE&&t===i.HTML;case 13:return e===r.FOREIGN_OBJECT&&t===i.SVG;case 14:return e===r.ANNOTATION_XML&&t===i.MATHML}return!1}e.exports=class{constructor(e,t){this.stackTop=-1,this.items=[],this.current=e,this.currentTagName=null,this.currentTmplContent=null,this.tmplCount=0,this.treeAdapter=t}_indexOf(e){let t=-1;for(let n=this.stackTop;n>=0;n--)if(this.items[n]===e){t=n;break}return t}_isInTemplate(){return this.currentTagName===r.TEMPLATE&&this.treeAdapter.getNamespaceURI(this.current)===i.HTML}_updateCurrentElement(){this.current=this.items[this.stackTop],this.currentTagName=this.current&&this.treeAdapter.getTagName(this.current),this.currentTmplContent=this._isInTemplate()?this.treeAdapter.getTemplateContent(this.current):null}push(e){this.items[++this.stackTop]=e,this._updateCurrentElement(),this._isInTemplate()&&this.tmplCount++}pop(){this.stackTop--,this.tmplCount>0&&this._isInTemplate()&&this.tmplCount--,this._updateCurrentElement()}replace(e,t){const n=this._indexOf(e);this.items[n]=t,n===this.stackTop&&this._updateCurrentElement()}insertAfter(e,t){const n=this._indexOf(e)+1;this.items.splice(n,0,t),n===++this.stackTop&&this._updateCurrentElement()}popUntilTagNamePopped(e){for(;this.stackTop>-1;){const t=this.currentTagName,n=this.treeAdapter.getNamespaceURI(this.current);if(this.pop(),t===e&&n===i.HTML)break}}popUntilElementPopped(e){for(;this.stackTop>-1;){const t=this.current;if(this.pop(),t===e)break}}popUntilNumberedHeaderPopped(){for(;this.stackTop>-1;){const e=this.currentTagName,t=this.treeAdapter.getNamespaceURI(this.current);if(this.pop(),e===r.H1||e===r.H2||e===r.H3||e===r.H4||e===r.H5||e===r.H6&&t===i.HTML)break}}popUntilTableCellPopped(){for(;this.stackTop>-1;){const e=this.currentTagName,t=this.treeAdapter.getNamespaceURI(this.current);if(this.pop(),e===r.TD||e===r.TH&&t===i.HTML)break}}popAllUpToHtmlElement(){this.stackTop=0,this._updateCurrentElement()}clearBackToTableContext(){for(;this.currentTagName!==r.TABLE&&this.currentTagName!==r.TEMPLATE&&this.currentTagName!==r.HTML||this.treeAdapter.getNamespaceURI(this.current)!==i.HTML;)this.pop()}clearBackToTableBodyContext(){for(;this.currentTagName!==r.TBODY&&this.currentTagName!==r.TFOOT&&this.currentTagName!==r.THEAD&&this.currentTagName!==r.TEMPLATE&&this.currentTagName!==r.HTML||this.treeAdapter.getNamespaceURI(this.current)!==i.HTML;)this.pop()}clearBackToTableRowContext(){for(;this.currentTagName!==r.TR&&this.currentTagName!==r.TEMPLATE&&this.currentTagName!==r.HTML||this.treeAdapter.getNamespaceURI(this.current)!==i.HTML;)this.pop()}remove(e){for(let t=this.stackTop;t>=0;t--)if(this.items[t]===e){this.items.splice(t,1),this.stackTop--,this._updateCurrentElement();break}}tryPeekProperlyNestedBodyElement(){const e=this.items[1];return e&&this.treeAdapter.getTagName(e)===r.BODY?e:null}contains(e){return this._indexOf(e)>-1}getCommonAncestor(e){let t=this._indexOf(e);return--t>=0?this.items[t]:null}isRootHtmlElementCurrent(){return 0===this.stackTop&&this.currentTagName===r.HTML}hasInScope(e){for(let t=this.stackTop;t>=0;t--){const n=this.treeAdapter.getTagName(this.items[t]),o=this.treeAdapter.getNamespaceURI(this.items[t]);if(n===e&&o===i.HTML)return!0;if(l(n,o))return!1}return!0}hasNumberedHeaderInScope(){for(let e=this.stackTop;e>=0;e--){const t=this.treeAdapter.getTagName(this.items[e]),n=this.treeAdapter.getNamespaceURI(this.items[e]);if((t===r.H1||t===r.H2||t===r.H3||t===r.H4||t===r.H5||t===r.H6)&&n===i.HTML)return!0;if(l(t,n))return!1}return!0}hasInListItemScope(e){for(let t=this.stackTop;t>=0;t--){const n=this.treeAdapter.getTagName(this.items[t]),o=this.treeAdapter.getNamespaceURI(this.items[t]);if(n===e&&o===i.HTML)return!0;if((n===r.UL||n===r.OL)&&o===i.HTML||l(n,o))return!1}return!0}hasInButtonScope(e){for(let t=this.stackTop;t>=0;t--){const n=this.treeAdapter.getTagName(this.items[t]),o=this.treeAdapter.getNamespaceURI(this.items[t]);if(n===e&&o===i.HTML)return!0;if(n===r.BUTTON&&o===i.HTML||l(n,o))return!1}return!0}hasInTableScope(e){for(let t=this.stackTop;t>=0;t--){const n=this.treeAdapter.getTagName(this.items[t]);if(this.treeAdapter.getNamespaceURI(this.items[t])===i.HTML){if(n===e)return!0;if(n===r.TABLE||n===r.TEMPLATE||n===r.HTML)return!1}}return!0}hasTableBodyContextInTableScope(){for(let e=this.stackTop;e>=0;e--){const t=this.treeAdapter.getTagName(this.items[e]);if(this.treeAdapter.getNamespaceURI(this.items[e])===i.HTML){if(t===r.TBODY||t===r.THEAD||t===r.TFOOT)return!0;if(t===r.TABLE||t===r.HTML)return!1}}return!0}hasInSelectScope(e){for(let t=this.stackTop;t>=0;t--){const n=this.treeAdapter.getTagName(this.items[t]);if(this.treeAdapter.getNamespaceURI(this.items[t])===i.HTML){if(n===e)return!0;if(n!==r.OPTION&&n!==r.OPTGROUP)return!1}}return!0}generateImpliedEndTags(){for(;a(this.currentTagName);)this.pop()}generateImpliedEndTagsThoroughly(){for(;s(this.currentTagName);)this.pop()}generateImpliedEndTagsWithExclusion(e){for(;a(this.currentTagName)&&this.currentTagName!==e;)this.pop()}}},"1VtT":function(e,t,n){"use strict";var o=n("Gdbo"),r=n("k1+7"),i=n("6dBs"),a=n("bwJB"),s=n("xkQk"),l=n("Esvb");e.exports=function e(){var t,n=[],r=s(),E={},b=-1;return A.data=function(e,n){if("string"===typeof e)return 2===arguments.length?(m("data",t),E[e]=n,A):u.call(E,e)&&E[e]||null;if(e)return m("data",t),E=e,A;return E},A.freeze=k,A.attachers=n,A.use=function(e){var o;if(m("use",t),null===e||void 0===e);else if("function"===typeof e)u.apply(null,arguments);else{if("object"!==typeof e)throw new Error("Expected usable value, not `"+e+"`");"length"in e?l(e):r(e)}o&&(E.settings=i(E.settings||{},o));return A;function r(e){l(e.plugins),e.settings&&(o=i(o||{},e.settings))}function s(e){if("function"===typeof e)u(e);else{if("object"!==typeof e)throw new Error("Expected usable value, not `"+e+"`");"length"in e?u.apply(null,e):r(e)}}function l(e){var t=-1;if(null===e||void 0===e);else{if("object"!==typeof e||!("length"in e))throw new Error("Expected a list of plugins, not `"+e+"`");for(;++t-1&&(n[0]=n[0].slice(r)),a>0&&n.push(e[i].slice(0,a))),n}},"2N74":function(e,t,n){"use strict";e.exports=function(e){return-2===e||-1===e||32===e}},"2l2D":function(e,t,n){"use strict";e.exports={controlCharacterInInputStream:"control-character-in-input-stream",noncharacterInInputStream:"noncharacter-in-input-stream",surrogateInInputStream:"surrogate-in-input-stream",nonVoidHtmlElementStartTagWithTrailingSolidus:"non-void-html-element-start-tag-with-trailing-solidus",endTagWithAttributes:"end-tag-with-attributes",endTagWithTrailingSolidus:"end-tag-with-trailing-solidus",unexpectedSolidusInTag:"unexpected-solidus-in-tag",unexpectedNullCharacter:"unexpected-null-character",unexpectedQuestionMarkInsteadOfTagName:"unexpected-question-mark-instead-of-tag-name",invalidFirstCharacterOfTagName:"invalid-first-character-of-tag-name",unexpectedEqualsSignBeforeAttributeName:"unexpected-equals-sign-before-attribute-name",missingEndTagName:"missing-end-tag-name",unexpectedCharacterInAttributeName:"unexpected-character-in-attribute-name",unknownNamedCharacterReference:"unknown-named-character-reference",missingSemicolonAfterCharacterReference:"missing-semicolon-after-character-reference",unexpectedCharacterAfterDoctypeSystemIdentifier:"unexpected-character-after-doctype-system-identifier",unexpectedCharacterInUnquotedAttributeValue:"unexpected-character-in-unquoted-attribute-value",eofBeforeTagName:"eof-before-tag-name",eofInTag:"eof-in-tag",missingAttributeValue:"missing-attribute-value",missingWhitespaceBetweenAttributes:"missing-whitespace-between-attributes",missingWhitespaceAfterDoctypePublicKeyword:"missing-whitespace-after-doctype-public-keyword",missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers:"missing-whitespace-between-doctype-public-and-system-identifiers",missingWhitespaceAfterDoctypeSystemKeyword:"missing-whitespace-after-doctype-system-keyword",missingQuoteBeforeDoctypePublicIdentifier:"missing-quote-before-doctype-public-identifier",missingQuoteBeforeDoctypeSystemIdentifier:"missing-quote-before-doctype-system-identifier",missingDoctypePublicIdentifier:"missing-doctype-public-identifier",missingDoctypeSystemIdentifier:"missing-doctype-system-identifier",abruptDoctypePublicIdentifier:"abrupt-doctype-public-identifier",abruptDoctypeSystemIdentifier:"abrupt-doctype-system-identifier",cdataInHtmlContent:"cdata-in-html-content",incorrectlyOpenedComment:"incorrectly-opened-comment",eofInScriptHtmlCommentLikeText:"eof-in-script-html-comment-like-text",eofInDoctype:"eof-in-doctype",nestedComment:"nested-comment",abruptClosingOfEmptyComment:"abrupt-closing-of-empty-comment",eofInComment:"eof-in-comment",incorrectlyClosedComment:"incorrectly-closed-comment",eofInCdata:"eof-in-cdata",absenceOfDigitsInNumericCharacterReference:"absence-of-digits-in-numeric-character-reference",nullCharacterReference:"null-character-reference",surrogateCharacterReference:"surrogate-character-reference",characterReferenceOutsideUnicodeRange:"character-reference-outside-unicode-range",controlCharacterReference:"control-character-reference",noncharacterCharacterReference:"noncharacter-character-reference",missingWhitespaceBeforeDoctypeName:"missing-whitespace-before-doctype-name",missingDoctypeName:"missing-doctype-name",invalidCharacterSequenceAfterDoctypeName:"invalid-character-sequence-after-doctype-name",duplicateAttribute:"duplicate-attribute",nonConformingDoctype:"non-conforming-doctype",missingDoctype:"missing-doctype",misplacedDoctype:"misplaced-doctype",endTagWithoutMatchingOpenElement:"end-tag-without-matching-open-element",closingOfElementWithOpenChildElements:"closing-of-element-with-open-child-elements",disallowedContentInNoscriptInHead:"disallowed-content-in-noscript-in-head",openElementsLeftAfterEof:"open-elements-left-after-eof",abandonedHeadElementChild:"abandoned-head-element-child",misplacedStartTagForHeadElement:"misplaced-start-tag-for-head-element",nestedNoscriptInHead:"nested-noscript-in-head",eofInElementThatCanContainOnlyText:"eof-in-element-that-can-contain-only-text"}},"2uWR":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",color:"#c3cee3",background:"#263238",fontFamily:"Roboto Mono, monospace",fontSize:"1em",lineHeight:"1.5em",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none"},'pre[class*="language-"]':{textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",color:"#c3cee3",background:"#263238",fontFamily:"Roboto Mono, monospace",fontSize:"1em",lineHeight:"1.5em",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",overflow:"auto",position:"relative",margin:"0.5em 0",padding:"1.25em 1em"},'code[class*="language-"]::-moz-selection':{background:"#363636"},'pre[class*="language-"]::-moz-selection':{background:"#363636"},'code[class*="language-"] ::-moz-selection':{background:"#363636"},'pre[class*="language-"] ::-moz-selection':{background:"#363636"},'code[class*="language-"]::selection':{background:"#363636"},'pre[class*="language-"]::selection':{background:"#363636"},'code[class*="language-"] ::selection':{background:"#363636"},'pre[class*="language-"] ::selection':{background:"#363636"},':not(pre) > code[class*="language-"]':{whiteSpace:"normal",borderRadius:"0.2em",padding:"0.1em"},".language-css > code":{color:"#fd9170"},".language-sass > code":{color:"#fd9170"},".language-scss > code":{color:"#fd9170"},'[class*="language-"] .namespace':{Opacity:"0.7"},atrule:{color:"#c792ea"},"attr-name":{color:"#ffcb6b"},"attr-value":{color:"#c3e88d"},attribute:{color:"#c3e88d"},boolean:{color:"#c792ea"},builtin:{color:"#ffcb6b"},cdata:{color:"#80cbc4"},char:{color:"#80cbc4"},class:{color:"#ffcb6b"},"class-name":{color:"#f2ff00"},color:{color:"#f2ff00"},comment:{color:"#546e7a"},constant:{color:"#c792ea"},deleted:{color:"#f07178"},doctype:{color:"#546e7a"},entity:{color:"#f07178"},function:{color:"#c792ea"},hexcode:{color:"#f2ff00"},id:{color:"#c792ea",fontWeight:"bold"},important:{color:"#c792ea",fontWeight:"bold"},inserted:{color:"#80cbc4"},keyword:{color:"#c792ea",fontStyle:"italic"},number:{color:"#fd9170"},operator:{color:"#89ddff"},prolog:{color:"#546e7a"},property:{color:"#80cbc4"},"pseudo-class":{color:"#c3e88d"},"pseudo-element":{color:"#c3e88d"},punctuation:{color:"#89ddff"},regex:{color:"#f2ff00"},selector:{color:"#f07178"},string:{color:"#c3e88d"},symbol:{color:"#c792ea"},tag:{color:"#f07178"},unit:{color:"#f07178"},url:{color:"#fd9170"},variable:{color:"#f07178"}}},"321L":function(e,t,n){e.exports=n("0So9")},"33Zt":function(e,t,n){"use strict";var o=n("E/Jm"),r=n("2N74"),i=n("yRGd"),a={name:"thematicBreak",tokenize:function(e,t,n){var a,s=0;return function(t){return e.enter("thematicBreak"),a=t,l(t)};function l(u){return u===a?(e.enter("thematicBreakSequence"),c(u)):r(u)?i(e,l,"whitespace")(u):s<3||null!==u&&!o(u)?n(u):(e.exit("thematicBreak"),t(u))}function c(t){return t===a?(e.consume(t),s++,c):(e.exit("thematicBreakSequence"),l(t))}}};e.exports=a},"38Ti":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{color:"#fff",textShadow:"0 1px 1px #000",fontFamily:'Menlo, Monaco, "Courier New", monospace',direction:"ltr",textAlign:"left",wordSpacing:"normal",whiteSpace:"pre",wordWrap:"normal",lineHeight:"1.4",background:"none",border:"0",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none"},'pre[class*="language-"]':{color:"#fff",textShadow:"0 1px 1px #000",fontFamily:'Menlo, Monaco, "Courier New", monospace',direction:"ltr",textAlign:"left",wordSpacing:"normal",whiteSpace:"pre",wordWrap:"normal",lineHeight:"1.4",background:"#222",border:"0",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",padding:"15px",margin:"1em 0",overflow:"auto",MozBorderRadius:"8px",WebkitBorderRadius:"8px",borderRadius:"8px"},'pre[class*="language-"] code':{float:"left",padding:"0 15px 0 0"},':not(pre) > code[class*="language-"]':{background:"#222",padding:"5px 10px",lineHeight:"1",MozBorderRadius:"3px",WebkitBorderRadius:"3px",borderRadius:"3px"},comment:{color:"#797979"},prolog:{color:"#797979"},doctype:{color:"#797979"},cdata:{color:"#797979"},selector:{color:"#fff"},operator:{color:"#fff"},punctuation:{color:"#fff"},namespace:{Opacity:".7"},tag:{color:"#ffd893"},boolean:{color:"#ffd893"},atrule:{color:"#B0C975"},"attr-value":{color:"#B0C975"},hex:{color:"#B0C975"},string:{color:"#B0C975"},property:{color:"#c27628"},entity:{color:"#c27628",cursor:"help"},url:{color:"#c27628"},"attr-name":{color:"#c27628"},keyword:{color:"#c27628"},regex:{color:"#9B71C6"},function:{color:"#e5a638"},constant:{color:"#e5a638"},variable:{color:"#fdfba8"},number:{color:"#8799B0"},important:{color:"#E45734"},deliminator:{color:"#E45734"},"pre[data-line]":{position:"relative",padding:"1em 0 1em 3em"},".line-highlight":{position:"absolute",left:"0",right:"0",marginTop:"1em",background:"rgba(255, 255, 255, .2)",pointerEvents:"none",lineHeight:"inherit",whiteSpace:"pre"},".line-highlight:before":{content:"attr(data-start)",position:"absolute",top:".3em",left:".6em",minWidth:"1em",padding:"0 .5em",backgroundColor:"rgba(255, 255, 255, .3)",color:"#fff",font:"bold 65%/1.5 sans-serif",textAlign:"center",MozBorderRadius:"8px",WebkitBorderRadius:"8px",borderRadius:"8px",textShadow:"none"},".line-highlight[data-end]:after":{content:"attr(data-end)",position:"absolute",top:"auto",left:".6em",minWidth:"1em",padding:"0 .5em",backgroundColor:"rgba(255, 255, 255, .3)",color:"#fff",font:"bold 65%/1.5 sans-serif",textAlign:"center",MozBorderRadius:"8px",WebkitBorderRadius:"8px",borderRadius:"8px",textShadow:"none",bottom:".4em"},".line-numbers-rows":{margin:"0"},".line-numbers-rows span":{paddingRight:"10px",borderRight:"3px #d9d336 solid"}}},"3HEo":function(e,t,n){"use strict";var o=n("ZkSf");e.exports=function(e,t){return function(e){return t;function t(t){var n=t&&i(t);return n&&r.call(e,n)?e[n]:null}}(function(e){var t={};if(!e||!e.type)throw new Error("mdast-util-definitions expected node");return o(e,"definition",n),t;function n(e){var n=i(e.identifier);r.call(t,n)||(t[n]=e)}}(e))};var r={}.hasOwnProperty;function i(e){return e.toUpperCase()}},"3iNw":function(e,t,n){"use strict";var o=n("hq1P"),r=n("Ny5O"),i=n("E/Jm"),a=n("Q3zd"),s=n("2N74"),l=n("yRGd"),c={name:"htmlText",tokenize:function(e,t,n){var c,u,d,p,f=this;return function(t){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(t),h};function h(t){return 33===t?(e.consume(t),m):47===t?(e.consume(t),O):63===t?(e.consume(t),x):o(t)?(e.consume(t),w):n(t)}function m(t){return 45===t?(e.consume(t),g):91===t?(e.consume(t),u="CDATA[",d=0,k):o(t)?(e.consume(t),C):n(t)}function g(t){return 45===t?(e.consume(t),T):n(t)}function T(t){return null===t||62===t?n(t):45===t?(e.consume(t),E):b(t)}function E(e){return null===e||62===e?n(e):b(e)}function b(t){return null===t?n(t):45===t?(e.consume(t),A):i(t)?(p=b,B(t)):(e.consume(t),b)}function A(t){return 45===t?(e.consume(t),U):b(t)}function k(t){return t===u.charCodeAt(d++)?(e.consume(t),d===u.length?y:k):n(t)}function y(t){return null===t?n(t):93===t?(e.consume(t),_):i(t)?(p=y,B(t)):(e.consume(t),y)}function _(t){return 93===t?(e.consume(t),S):y(t)}function S(t){return 62===t?U(t):93===t?(e.consume(t),S):y(t)}function C(t){return null===t||62===t?U(t):i(t)?(p=C,B(t)):(e.consume(t),C)}function x(t){return null===t?n(t):63===t?(e.consume(t),v):i(t)?(p=x,B(t)):(e.consume(t),x)}function v(e){return 62===e?U(e):x(e)}function O(t){return o(t)?(e.consume(t),N):n(t)}function N(t){return 45===t||r(t)?(e.consume(t),N):M(t)}function M(t){return i(t)?(p=M,B(t)):s(t)?(e.consume(t),M):U(t)}function w(t){return 45===t||r(t)?(e.consume(t),w):47===t||62===t||a(t)?R(t):n(t)}function R(t){return 47===t?(e.consume(t),U):58===t||95===t||o(t)?(e.consume(t),I):i(t)?(p=R,B(t)):s(t)?(e.consume(t),R):U(t)}function I(t){return 45===t||46===t||58===t||95===t||r(t)?(e.consume(t),I):L(t)}function L(t){return 61===t?(e.consume(t),P):i(t)?(p=L,B(t)):s(t)?(e.consume(t),L):R(t)}function P(t){return null===t||60===t||61===t||62===t||96===t?n(t):34===t||39===t?(e.consume(t),c=t,H):i(t)?(p=P,B(t)):s(t)?(e.consume(t),P):(e.consume(t),c=void 0,F)}function H(t){return t===c?(e.consume(t),D):null===t?n(t):i(t)?(p=H,B(t)):(e.consume(t),H)}function D(e){return 62===e||47===e||a(e)?R(e):n(e)}function F(t){return null===t||34===t||39===t||60===t||61===t||96===t?n(t):62===t||a(t)?R(t):(e.consume(t),F)}function B(t){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),l(e,z,"linePrefix",f.parser.constructs.disable.null.indexOf("codeIndented")>-1?void 0:4)}function z(t){return e.enter("htmlTextData"),p(t)}function U(o){return 62===o?(e.consume(o),e.exit("htmlTextData"),e.exit("htmlText"),t):n(o)}}};e.exports=c},"4+h/":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{fontFamily:'Consolas, Menlo, Monaco, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace',fontSize:"14px",lineHeight:"1.375",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",background:"#faf8f5",color:"#728fcb"},'pre[class*="language-"]':{fontFamily:'Consolas, Menlo, Monaco, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace',fontSize:"14px",lineHeight:"1.375",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",background:"#faf8f5",color:"#728fcb",padding:"1em",margin:".5em 0",overflow:"auto"},'pre > code[class*="language-"]':{fontSize:"1em"},'pre[class*="language-"]::-moz-selection':{textShadow:"none",background:"#faf8f5"},'pre[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#faf8f5"},'code[class*="language-"]::-moz-selection':{textShadow:"none",background:"#faf8f5"},'code[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#faf8f5"},'pre[class*="language-"]::selection':{textShadow:"none",background:"#faf8f5"},'pre[class*="language-"] ::selection':{textShadow:"none",background:"#faf8f5"},'code[class*="language-"]::selection':{textShadow:"none",background:"#faf8f5"},'code[class*="language-"] ::selection':{textShadow:"none",background:"#faf8f5"},':not(pre) > code[class*="language-"]':{padding:".1em",borderRadius:".3em"},comment:{color:"#b6ad9a"},prolog:{color:"#b6ad9a"},doctype:{color:"#b6ad9a"},cdata:{color:"#b6ad9a"},punctuation:{color:"#b6ad9a"},namespace:{Opacity:".7"},tag:{color:"#063289"},operator:{color:"#063289"},number:{color:"#063289"},property:{color:"#b29762"},function:{color:"#b29762"},"tag-id":{color:"#2d2006"},selector:{color:"#2d2006"},"atrule-id":{color:"#2d2006"},"code.language-javascript":{color:"#896724"},"attr-name":{color:"#896724"},"code.language-css":{color:"#728fcb"},"code.language-scss":{color:"#728fcb"},boolean:{color:"#728fcb"},string:{color:"#728fcb"},entity:{color:"#728fcb",cursor:"help"},url:{color:"#728fcb"},".language-css .token.string":{color:"#728fcb"},".language-scss .token.string":{color:"#728fcb"},".style .token.string":{color:"#728fcb"},"attr-value":{color:"#728fcb"},keyword:{color:"#728fcb"},control:{color:"#728fcb"},directive:{color:"#728fcb"},unit:{color:"#728fcb"},statement:{color:"#728fcb"},regex:{color:"#728fcb"},atrule:{color:"#728fcb"},placeholder:{color:"#93abdc"},variable:{color:"#93abdc"},deleted:{textDecoration:"line-through"},inserted:{borderBottom:"1px dotted #2d2006",textDecoration:"none"},italic:{fontStyle:"italic"},important:{fontWeight:"bold",color:"#896724"},bold:{fontWeight:"bold"},"pre > code.highlight":{Outline:".4em solid #896724",OutlineOffset:".4em"},".line-numbers .line-numbers-rows":{borderRightColor:"#ece8de"},".line-numbers-rows > span:before":{color:"#cdc4b1"},".line-highlight":{background:"linear-gradient(to right, rgba(45, 32, 6, 0.2) 70%, rgba(45, 32, 6, 0))"}}},"42yH":function(e,t,n){"use strict";var o=n("WtKE"),r=n("Ny5O"),i=n("ljYj"),a=n("QB/b");function s(e){return e&&"object"===typeof e&&"default"in e?e:{default:e}}var l=s(o),c={name:"characterReference",tokenize:function(e,t,n){var o,s,c=this,u=0;return function(t){return e.enter("characterReference"),e.enter("characterReferenceMarker"),e.consume(t),e.exit("characterReferenceMarker"),d};function d(t){return 35===t?(e.enter("characterReferenceMarkerNumeric"),e.consume(t),e.exit("characterReferenceMarkerNumeric"),p):(e.enter("characterReferenceValue"),o=31,s=r,f(t))}function p(t){return 88===t||120===t?(e.enter("characterReferenceMarkerHexadecimal"),e.consume(t),e.exit("characterReferenceMarkerHexadecimal"),e.enter("characterReferenceValue"),o=6,s=a,f):(e.enter("characterReferenceValue"),o=7,s=i,f(t))}function f(i){var a;return 59===i&&u?(a=e.exit("characterReferenceValue"),s!==r||l.default(c.sliceSerialize(a))?(e.enter("characterReferenceMarker"),e.consume(i),e.exit("characterReferenceMarker"),e.exit("characterReference"),t):n(i)):s(i)&&u++P&&(P=d);++up)&&(L[u]=f)),R.push(h);M[O]=R,w[O]=I}var H;if(u=-1,d=P,"object"===typeof S&&"length"in S)for(;++uL[u]&&(L[u]=f),I[u]=f),R[u]=h;M.splice(1,0,R),w.splice(1,0,I),O=-1,N=M.length,m=[];for(;++O=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var a=n("q1tI"),s=n.n(a),l=n("6x+I"),c=n.n(l),u=n("jaOS"),d=n("o0o1"),p=n.n(d),f=n("yXPU"),h=n.n(f),m=n("pVnL"),g=n.n(m),T=n("lwsE"),E=n.n(T),b=n("W8MJ"),A=n.n(b),k=n("a1gu"),y=n.n(k),_=n("Nsbk"),S=n.n(_),C=n("7W2i"),x=n.n(C),v=n("lSNA"),O=n.n(v),N=n("QILm"),M=n.n(N),w=n("MVZn"),R=n.n(w);function I(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0;return e.reduce((function(e,t){return R()({},e,n[t])}),t)}function L(e){return e.join(" ")}function P(e){var t=e.node,n=e.stylesheet,o=e.style,r=void 0===o?{}:o,i=e.useInlineStyles,a=e.key,l=t.properties,c=t.type,u=t.tagName,d=t.value;if("text"===c)return d;if(u){var p=function(e,t){var n=0;return function(o){return n+=1,o.map((function(o,r){return P({node:o,stylesheet:e,useInlineStyles:t,key:"code-segment-".concat(n,"-").concat(r)})}))}}(n,i),f=i&&l.className&&l.className.filter((function(e){return!n[e]})),h=f&&f.length?f:void 0,m=i?R()({},l,{className:h&&L(h)},{style:I(l.className,Object.assign({},l.style,r),n)}):R()({},l,{className:L(l.className)}),T=p(t.children);return s.a.createElement(u,g()({key:a},m),T)}}var H=/\n/g;function D(e){var t=e.codeString,n=e.codeStyle,o=e.containerStyle,r=void 0===o?{float:"left",paddingRight:"10px"}:o,i=e.numberStyle,a=void 0===i?{}:i,l=e.startingLineNumber;return s.a.createElement("code",{style:Object.assign({},n,r)},function(e){var t=e.lines,n=e.startingLineNumber,o=e.style;return t.map((function(e,t){var r=t+n;return s.a.createElement("span",{key:"line-".concat(t),className:"react-syntax-highlighter-line-number",style:"function"===typeof o?o(r):o},"".concat(r,"\n"))}))}({lines:t.replace(/\n$/,"").split("\n"),style:a,startingLineNumber:l}))}function F(e){var t=e.toString().length;return"".concat(t,"em")}function B(e,t){return{type:"element",tagName:"span",properties:{key:"line-number--".concat(e),className:["comment","linenumber","react-syntax-highlighter-line-number"],style:t},children:[{type:"text",value:e}]}}function z(e,t,n){var o={display:"inline-block",minWidth:F(n),paddingRight:"1em",textAlign:"right",userSelect:"none"},r="function"===typeof e?e(t):e;return R()({},o,r)}function U(e){var t=e.children,n=e.lineNumber,o=e.lineNumberStyle,r=e.largestLineNumber,i=e.showInlineLineNumbers,a=e.lineProps,s=void 0===a?{}:a,l=e.className,c=void 0===l?[]:l,u="function"===typeof s?s(n):s;if(u.className=c,n&&i){var d=z(o,n,r);t.unshift(B(n,d))}return{type:"element",tagName:"span",properties:u,children:t}}function G(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],o=0;o2&&void 0!==arguments[2]?arguments[2]:[];return U({children:e,lineNumber:t,lineNumberStyle:s,largestLineNumber:a,showInlineLineNumbers:r,lineProps:n,className:o})}function h(e,t){if(t&&r){var n=z(s,t,a);e.unshift(B(t,n))}return e}function m(e,n){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];return t||o.length>0?f(e,n,o):h(e,n)}for(var g=function(){var e=c[p],t=e.children[0].value;if(t.match(H)){var n=t.split("\n");n.forEach((function(t,r){var a=o&&u.length+i,s={type:"text",value:"".concat(t,"\n")};if(0===r){var l=m(c.slice(d+1,p).concat(U({children:[s],className:e.properties.className})),a);u.push(l)}else if(r===n.length-1){if(c[p+1]&&c[p+1].children&&c[p+1].children[0]){var f=U({children:[{type:"text",value:"".concat(t)}],className:e.properties.className});c.splice(p+1,0,f)}else{var h=m([s],a,e.properties.className);u.push(h)}}else{var g=m([s],a,e.properties.className);u.push(g)}})),d=p}p++};p-1?void 0:4)(r)}}},exit:function(e){e.exit(this.containerState.type)}},d={tokenize:function(e,t,n){var o=this;return s(e,(function(e){return r(e)||!i(o.events,"listItemPrefixWhitespace")?n(e):t(e)}),"listItemPrefixWhitespace",o.parser.constructs.disable.null.indexOf("codeIndented")>-1?void 0:5)},partial:!0},p={tokenize:function(e,t,n){var o=this;return s(e,(function(e){return i(o.events,"listItemIndent")===o.containerState.size?t(e):n(e)}),"listItemIndent",o.containerState.size+1)},partial:!0};e.exports=u},"5fIB":function(e,t,n){var o=n("7eYB");e.exports=function(e){if(Array.isArray(e))return o(e)}},"5pEW":function(e,t,n){"use strict";var o=n("NOby"),r=n("E/Jm"),i=n("HtLg"),a=n("Vx/6"),s=n("pe0m"),l=n("Ig3s"),c=n("FE4A"),u=n("T0BQ"),d=n("20u5");e.exports=function(e,t,n){var p=n?u(n):{line:1,column:1,offset:0},f={},h=[],m=[],g=[],T={consume:function(e){r(e)?(p.line++,p.column=1,p.offset+=-3===e?2:1,v()):-1!==e&&(p.column++,p.offset++);p._bufferIndex<0?p._index++:(p._bufferIndex++,p._bufferIndex===m[p._index].length&&(p._bufferIndex=-1,p._index++));E.previous=e},enter:function(e,t){var n=t||{};return n.type=e,n.start=k(),E.events.push(["enter",n,E]),g.push(n),n},exit:function(e){var t=g.pop();return t.end=k(),E.events.push(["exit",t,E]),t},attempt:C((function(e,t){x(e,t.from)})),check:C(S),interrupt:C(S,{interrupt:!0}),lazy:C(S,{lazy:!0})},E={previous:null,events:[],parser:e,sliceStream:A,sliceSerialize:function(e){return c(A(e))},now:k,defineSkip:function(e){f[e.line]=e.column,v()},write:function(e){if(m=i(m,e),y(),null!==m[m.length-1])return[];return x(t,0),E.events=l(h,E.events,E),E.events}},b=t.tokenize.call(E,T);return t.resolveAll&&h.push(t),p._index=0,p._bufferIndex=-1,E;function A(e){return d(m,e)}function k(){return u(p)}function y(){for(var e,t;p._index-1)return m();return e.tokenize.call(t?o({},E,t):E,T,h,m)(n)}}function h(t){return e(c,u),r}function m(e){return u.restore(),++lcode':{position:"relative",borderLeft:"10px solid #358ccb",boxShadow:"-1px 0px 0px 0px #358ccb, 0px 0px 0px 1px #dfdfdf",backgroundColor:"#fdfdfd",backgroundImage:"linear-gradient(transparent 50%, rgba(69, 142, 209, 0.04) 50%)",backgroundSize:"3em 3em",backgroundOrigin:"content-box",backgroundAttachment:"local"},':not(pre) > code[class*="language-"]':{backgroundColor:"#fdfdfd",WebkitBoxSizing:"border-box",MozBoxSizing:"border-box",boxSizing:"border-box",marginBottom:"1em",position:"relative",padding:".2em",borderRadius:"0.3em",color:"#c92c2c",border:"1px solid rgba(0, 0, 0, 0.1)",display:"inline",whiteSpace:"normal"},'pre[class*="language-"]:before':{content:"''",zIndex:"-2",display:"block",position:"absolute",bottom:"0.75em",left:"0.18em",width:"40%",height:"20%",maxHeight:"13em",boxShadow:"0px 13px 8px #979797",WebkitTransform:"rotate(-2deg)",MozTransform:"rotate(-2deg)",msTransform:"rotate(-2deg)",OTransform:"rotate(-2deg)",transform:"rotate(-2deg)"},'pre[class*="language-"]:after':{content:"''",zIndex:"-2",display:"block",position:"absolute",bottom:"0.75em",left:"auto",width:"40%",height:"20%",maxHeight:"13em",boxShadow:"0px 13px 8px #979797",WebkitTransform:"rotate(2deg)",MozTransform:"rotate(2deg)",msTransform:"rotate(2deg)",OTransform:"rotate(2deg)",transform:"rotate(2deg)",right:"0.75em"},comment:{color:"#7D8B99"},"block-comment":{color:"#7D8B99"},prolog:{color:"#7D8B99"},doctype:{color:"#7D8B99"},cdata:{color:"#7D8B99"},punctuation:{color:"#5F6364"},property:{color:"#c92c2c"},tag:{color:"#c92c2c"},boolean:{color:"#c92c2c"},number:{color:"#c92c2c"},"function-name":{color:"#c92c2c"},constant:{color:"#c92c2c"},symbol:{color:"#c92c2c"},deleted:{color:"#c92c2c"},selector:{color:"#2f9c0a"},"attr-name":{color:"#2f9c0a"},string:{color:"#2f9c0a"},char:{color:"#2f9c0a"},function:{color:"#2f9c0a"},builtin:{color:"#2f9c0a"},inserted:{color:"#2f9c0a"},operator:{color:"#a67f59",background:"rgba(255, 255, 255, 0.5)"},entity:{color:"#a67f59",background:"rgba(255, 255, 255, 0.5)",cursor:"help"},url:{color:"#a67f59",background:"rgba(255, 255, 255, 0.5)"},variable:{color:"#a67f59",background:"rgba(255, 255, 255, 0.5)"},atrule:{color:"#1990b8"},"attr-value":{color:"#1990b8"},keyword:{color:"#1990b8"},"class-name":{color:"#1990b8"},regex:{color:"#e90"},important:{color:"#e90",fontWeight:"normal"},".language-css .token.string":{color:"#a67f59",background:"rgba(255, 255, 255, 0.5)"},".style .token.string":{color:"#a67f59",background:"rgba(255, 255, 255, 0.5)"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},namespace:{Opacity:".7"},'pre[class*="language-"].line-numbers.line-numbers':{paddingLeft:"0"},'pre[class*="language-"].line-numbers.line-numbers code':{paddingLeft:"3.8em"},'pre[class*="language-"].line-numbers.line-numbers .line-numbers-rows':{left:"0"},'pre[class*="language-"][data-line]':{paddingTop:"0",paddingBottom:"0",paddingLeft:"0"},"pre[data-line] code":{position:"relative",paddingLeft:"4em"},"pre .line-highlight":{marginTop:"0"}}},"6MAg":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{color:"black",background:"none",textShadow:"0 1px white",fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",fontSize:"1em",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none"},'pre[class*="language-"]':{color:"black",background:"#f5f2f0",textShadow:"0 1px white",fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",fontSize:"1em",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",padding:"1em",margin:".5em 0",overflow:"auto"},'pre[class*="language-"]::-moz-selection':{textShadow:"none",background:"#b3d4fc"},'pre[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#b3d4fc"},'code[class*="language-"]::-moz-selection':{textShadow:"none",background:"#b3d4fc"},'code[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#b3d4fc"},'pre[class*="language-"]::selection':{textShadow:"none",background:"#b3d4fc"},'pre[class*="language-"] ::selection':{textShadow:"none",background:"#b3d4fc"},'code[class*="language-"]::selection':{textShadow:"none",background:"#b3d4fc"},'code[class*="language-"] ::selection':{textShadow:"none",background:"#b3d4fc"},':not(pre) > code[class*="language-"]':{background:"#f5f2f0",padding:".1em",borderRadius:".3em",whiteSpace:"normal"},comment:{color:"slategray"},prolog:{color:"slategray"},doctype:{color:"slategray"},cdata:{color:"slategray"},punctuation:{color:"#999"},namespace:{Opacity:".7"},property:{color:"#905"},tag:{color:"#905"},boolean:{color:"#905"},number:{color:"#905"},constant:{color:"#905"},symbol:{color:"#905"},deleted:{color:"#905"},selector:{color:"#690"},"attr-name":{color:"#690"},string:{color:"#690"},char:{color:"#690"},builtin:{color:"#690"},inserted:{color:"#690"},operator:{color:"#9a6e3a",background:"hsla(0, 0%, 100%, .5)"},entity:{color:"#9a6e3a",background:"hsla(0, 0%, 100%, .5)",cursor:"help"},url:{color:"#9a6e3a",background:"hsla(0, 0%, 100%, .5)"},".language-css .token.string":{color:"#9a6e3a",background:"hsla(0, 0%, 100%, .5)"},".style .token.string":{color:"#9a6e3a",background:"hsla(0, 0%, 100%, .5)"},atrule:{color:"#07a"},"attr-value":{color:"#07a"},keyword:{color:"#07a"},function:{color:"#DD4A68"},"class-name":{color:"#DD4A68"},regex:{color:"#e90"},important:{color:"#e90",fontWeight:"bold"},variable:{color:"#e90"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"}}},"6dBs":function(e,t,n){"use strict";var o=Object.prototype.hasOwnProperty,r=Object.prototype.toString,i=Object.defineProperty,a=Object.getOwnPropertyDescriptor,s=function(e){return"function"===typeof Array.isArray?Array.isArray(e):"[object Array]"===r.call(e)},l=function(e){if(!e||"[object Object]"!==r.call(e))return!1;var t,n=o.call(e,"constructor"),i=e.constructor&&e.constructor.prototype&&o.call(e.constructor.prototype,"isPrototypeOf");if(e.constructor&&!n&&!i)return!1;for(t in e);return"undefined"===typeof t||o.call(e,t)},c=function(e,t){i&&"__proto__"===t.name?i(e,t.name,{enumerable:!0,configurable:!0,value:t.newValue,writable:!0}):e[t.name]=t.newValue},u=function(e,t){if("__proto__"===t){if(!o.call(e,t))return;if(a)return a(e,t).value}return e[t]};e.exports=function e(){var t,n,o,r,i,a,d=arguments[0],p=1,f=arguments.length,h=!1;for("boolean"===typeof d&&(h=d,d=arguments[1]||{},p=2),(null==d||"object"!==typeof d&&"function"!==typeof d)&&(d={});p for more info)`),delete h[o]}const t=i().use(a).use(e.remarkPlugins||e.plugins||[]).use(s,{allowDangerousHtml:!0}).use(e.rehypePlugins||[]).use(u,e);let n;"string"===typeof e.children?n=r(e.children):(void 0!==e.children&&null!==e.children&&console.warn(`[react-markdown] Warning: please pass a string as \`children\` (not: \`${e.children}\`)`),n=r());const l=t.runSync(t.parse(n),n);if("root"!==l.type)throw new TypeError("Expected a `root` node");let d=o.createElement(o.Fragment,{},p({options:e,schema:c,listDepth:0},l));return e.className&&(d=o.createElement("div",{className:e.className},d)),d}m.defaultProps={transformLinkUri:d},m.propTypes={children:l.string,className:l.string,allowElement:l.func,allowedElements:l.arrayOf(l.string),disallowedElements:l.arrayOf(l.string),unwrapDisallowed:l.bool,remarkPlugins:l.arrayOf(l.oneOfType([l.object,l.func,l.arrayOf(l.oneOfType([l.object,l.func]))])),rehypePlugins:l.arrayOf(l.oneOfType([l.object,l.func,l.arrayOf(l.oneOfType([l.object,l.func]))])),sourcePos:l.bool,rawSourcePos:l.bool,skipHtml:l.bool,includeElementIndex:l.bool,transformLinkUri:l.oneOfType([l.func,l.bool]),linkTarget:l.oneOfType([l.func,l.string]),transformImageUri:l.func,components:l.object},m.uriTransformer=d},"7+hk":function(e,t,n){"use strict";var o=n("z2ZG"),r=n("du5t"),i=n("eAD1"),a=n("dXJL"),s=n("bHgY"),l=n("RXC2");e.exports=o([i,r,a,s,l])},"7J+x":function(e,t){e.exports=function(e){var t,n;e._compiled||(t=e.before?"(?:"+e.before+")":"",n=e.after?"(?:"+e.after+")":"",e.atBreak&&(t="[\\r\\n][\\t ]*"+t),e._compiled=new RegExp((t?"("+t+")":"")+(/[|\\{}()[\]^$+*?.-]/.test(e.character)?"\\":"")+e.character+(n||""),"g"));return e._compiled}},"7W2i":function(e,t,n){var o=n("SksO");e.exports=function(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&o(e,t)},e.exports.__esModule=!0,e.exports.default=e.exports},"7enW":function(e,t,n){"use strict";var o={name:"labelStartImage",tokenize:function(e,t,n){var o=this;return function(t){return e.enter("labelImage"),e.enter("labelImageMarker"),e.consume(t),e.exit("labelImageMarker"),r};function r(t){return 91===t?(e.enter("labelMarker"),e.consume(t),e.exit("labelMarker"),e.exit("labelImage"),i):n(t)}function i(e){return 94===e&&"_hiddenFootnoteSupport"in o.parser.constructs?n(e):t(e)}},resolveAll:n("OaLn").resolveAll};e.exports=o},"7nPM":function(e,t,n){"use strict";e.exports=function(e){var t=String(e),n=[],o=/\r?\n|\r/g;for(;o.exec(t);)n.push(o.lastIndex);return n.push(t.length+1),{toPoint:r,toPosition:r,toOffset:function(e){var t,o=e&&e.line,r=e&&e.column;isNaN(o)||isNaN(r)||!(o-1 in n)||(t=(n[o-2]||0)+r-1||0);return t>-1&&t-1&&ee)return{line:t+1,column:e-(n[t-1]||0)+1,offset:e};return{}}}},"8Kt/":function(e,t,n){"use strict";var o=n("oI91");function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}t.__esModule=!0,t.defaultHead=p,t.default=void 0;var i,a=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==typeof e&&"function"!==typeof e)return{default:e};var t=d();if(t&&t.has(e))return t.get(e);var n={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){var i=o?Object.getOwnPropertyDescriptor(e,r):null;i&&(i.get||i.set)?Object.defineProperty(n,r,i):n[r]=e[r]}n.default=e,t&&t.set(e,n);return n}(n("q1tI")),s=(i=n("Xuae"))&&i.__esModule?i:{default:i},l=n("lwAK"),c=n("FYa8"),u=n("/0+H");function d(){if("function"!==typeof WeakMap)return null;var e=new WeakMap;return d=function(){return e},e}function p(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=[a.default.createElement("meta",{charSet:"utf-8"})];return e||t.push(a.default.createElement("meta",{name:"viewport",content:"width=device-width"})),t}function f(e,t){return"string"===typeof t||"number"===typeof t?e:t.type===a.default.Fragment?e.concat(a.default.Children.toArray(t.props.children).reduce((function(e,t){return"string"===typeof t||"number"===typeof t?e:e.concat(t)}),[])):e.concat(t)}var h=["name","httpEquiv","charSet","itemProp"];function m(e,t){return e.reduce((function(e,t){var n=a.default.Children.toArray(t.props.children);return e.concat(n)}),[]).reduce(f,[]).reverse().concat(p(t.inAmpMode)).filter(function(){var e=new Set,t=new Set,n=new Set,o={};return function(r){var i=!0,a=!1;if(r.key&&"number"!==typeof r.key&&r.key.indexOf("$")>0){a=!0;var s=r.key.slice(r.key.indexOf("$")+1);e.has(s)?i=!1:e.add(s)}switch(r.type){case"title":case"base":t.has(r.type)?i=!1:t.add(r.type);break;case"meta":for(var l=0,c=h.length;l code[class*="language-"]':{fontSize:"1em"},'pre[class*="language-"]::-moz-selection':{textShadow:"none",background:"#435643"},'pre[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#435643"},'code[class*="language-"]::-moz-selection':{textShadow:"none",background:"#435643"},'code[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#435643"},'pre[class*="language-"]::selection':{textShadow:"none",background:"#435643"},'pre[class*="language-"] ::selection':{textShadow:"none",background:"#435643"},'code[class*="language-"]::selection':{textShadow:"none",background:"#435643"},'code[class*="language-"] ::selection':{textShadow:"none",background:"#435643"},':not(pre) > code[class*="language-"]':{padding:".1em",borderRadius:".3em"},comment:{color:"#535f53"},prolog:{color:"#535f53"},doctype:{color:"#535f53"},cdata:{color:"#535f53"},punctuation:{color:"#535f53"},namespace:{Opacity:".7"},tag:{color:"#a2b34d"},operator:{color:"#a2b34d"},number:{color:"#a2b34d"},property:{color:"#687d68"},function:{color:"#687d68"},"tag-id":{color:"#f0fff0"},selector:{color:"#f0fff0"},"atrule-id":{color:"#f0fff0"},"code.language-javascript":{color:"#b3d6b3"},"attr-name":{color:"#b3d6b3"},"code.language-css":{color:"#e5fb79"},"code.language-scss":{color:"#e5fb79"},boolean:{color:"#e5fb79"},string:{color:"#e5fb79"},entity:{color:"#e5fb79",cursor:"help"},url:{color:"#e5fb79"},".language-css .token.string":{color:"#e5fb79"},".language-scss .token.string":{color:"#e5fb79"},".style .token.string":{color:"#e5fb79"},"attr-value":{color:"#e5fb79"},keyword:{color:"#e5fb79"},control:{color:"#e5fb79"},directive:{color:"#e5fb79"},unit:{color:"#e5fb79"},statement:{color:"#e5fb79"},regex:{color:"#e5fb79"},atrule:{color:"#e5fb79"},placeholder:{color:"#e5fb79"},variable:{color:"#e5fb79"},deleted:{textDecoration:"line-through"},inserted:{borderBottom:"1px dotted #f0fff0",textDecoration:"none"},italic:{fontStyle:"italic"},important:{fontWeight:"bold",color:"#b3d6b3"},bold:{fontWeight:"bold"},"pre > code.highlight":{Outline:".4em solid #5c705c",OutlineOffset:".4em"},".line-numbers .line-numbers-rows":{borderRightColor:"#2c302c"},".line-numbers-rows > span:before":{color:"#3b423b"},".line-highlight":{background:"linear-gradient(to right, rgba(162, 179, 77, 0.2) 70%, rgba(162, 179, 77, 0))"}}},"9SNS":function(e,t,n){"use strict";e.exports=function(e){return e<32||127===e}},"9kwo":function(e,t,n){"use strict";const o=n("HwUZ");e.exports=class extends o{constructor(e,t){super(e),this.posTracker=null,this.onParseError=t.onParseError}_setErrorLocation(e){e.startLine=e.endLine=this.posTracker.line,e.startCol=e.endCol=this.posTracker.col,e.startOffset=e.endOffset=this.posTracker.offset}_reportError(e){const t={code:e,startLine:-1,startCol:-1,startOffset:-1,endLine:-1,endCol:-1,endOffset:-1};this._setErrorLocation(t),this.onParseError(t)}_getOverriddenMethods(e){return{_err(t){e._reportError(t)}}}}},"9ppO":function(e,t,n){"use strict";var o=n("E/Jm"),r=n("yRGd");e.exports=function(e,t,n,i,a,s){var l;return function(t){return e.enter(i),e.enter(a),e.consume(t),e.exit(a),l=40===t?41:t,c};function c(n){return n===l?(e.enter(a),e.consume(n),e.exit(a),e.exit(i),t):(e.enter(s),u(n))}function u(t){return t===l?(e.exit(s),c(l)):null===t?n(t):o(t)?(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),r(e,u,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),d(t))}function d(t){return t===l||null===t||o(t)?(e.exit("chunkString"),u(t)):(e.consume(t),92===t?p:d)}function p(t){return t===l||92===t?(e.consume(t),d):d(t)}}},A0ZL:function(e,t,n){"use strict";class o{constructor(e){this.length=0,this.entries=[],this.treeAdapter=e,this.bookmark=null}_getNoahArkConditionCandidates(e){const t=[];if(this.length>=3){const n=this.treeAdapter.getAttrList(e).length,r=this.treeAdapter.getTagName(e),i=this.treeAdapter.getNamespaceURI(e);for(let e=this.length-1;e>=0;e--){const a=this.entries[e];if(a.type===o.MARKER_ENTRY)break;const s=a.element,l=this.treeAdapter.getAttrList(s);this.treeAdapter.getTagName(s)===r&&this.treeAdapter.getNamespaceURI(s)===i&&l.length===n&&t.push({idx:e,attrs:l})}}return t.length<3?[]:t}_ensureNoahArkCondition(e){const t=this._getNoahArkConditionCandidates(e);let n=t.length;if(n){const o=this.treeAdapter.getAttrList(e),r=o.length,i=Object.create(null);for(let e=0;e=2;e--)this.entries.splice(t[e].idx,1),this.length--}}insertMarker(){this.entries.push({type:o.MARKER_ENTRY}),this.length++}pushElement(e,t){this._ensureNoahArkCondition(e),this.entries.push({type:o.ELEMENT_ENTRY,element:e,token:t}),this.length++}insertElementAfterBookmark(e,t){let n=this.length-1;for(;n>=0&&this.entries[n]!==this.bookmark;n--);this.entries.splice(n+1,0,{type:o.ELEMENT_ENTRY,element:e,token:t}),this.length++}removeEntry(e){for(let t=this.length-1;t>=0;t--)if(this.entries[t]===e){this.entries.splice(t,1),this.length--;break}}clearToLastMarker(){for(;this.length;){const e=this.entries.pop();if(this.length--,e.type===o.MARKER_ENTRY)break}}getElementEntryInScopeWithTagName(e){for(let t=this.length-1;t>=0;t--){const n=this.entries[t];if(n.type===o.MARKER_ENTRY)return null;if(this.treeAdapter.getTagName(n.element)===e)return n}return null}getElementEntry(e){for(let t=this.length-1;t>=0;t--){const n=this.entries[t];if(n.type===o.ELEMENT_ENTRY&&n.element===e)return n}return null}}o.MARKER_ENTRY="MARKER_ENTRY",o.ELEMENT_ENTRY="ELEMENT_ENTRY",e.exports=o},ADT3:function(e,t,n){"use strict";e.exports=function(e,t,n,o){var r,i;"string"===typeof t||t&&"function"===typeof t.exec?i=[[t,n]]:(i=t,o=n);return s(e,r=o||{},function e(t){var n=t[0];return o;function o(o,i){var l,c,u,d,p=n[0],f=n[1],h=[],m=0,g=i.children.indexOf(o);for(p.lastIndex=0,c=p.exec(o.value);c&&(l=c.index,!1!==(d=f.apply(null,[].concat(c,{index:c.index,input:c.input})))&&(m!==l&&h.push({type:"text",value:o.value.slice(m,l)}),"string"===typeof d&&d.length>0&&(d={type:"text",value:d}),d&&(h=[].concat(h,d)),m=l+c[0].length),p.global);)c=p.exec(o.value);if(void 0===l?(h=[o],g--):(m1)for(u=e(t.slice(1)),l=-1;++lString(e))).join("")),!A&&s.rawSourcePos&&(u.sourcePosition=t.position),!A&&s.includeElementIndex&&(u.index=m(a,t),u.siblingCount=m(a)),A||(u.node=t),T.length>0?o.createElement(b,u,T):o.createElement(b,u)}function m(e,t){let n=-1,o=0;for(;++n(Object.keys(t).forEach((n=>{e[n]=t[n]})),e)),Object.create(null))}},B5Lt:function(e,t,n){e.exports=function(e,t){var n,r=e.children||[],i=[],a=-1;for(;++a code[class*="language-"]':{backgroundColor:"transparent !important",backgroundImage:"linear-gradient(to bottom, #2a2139 75%, #34294f)",padding:".1em",borderRadius:".3em",whiteSpace:"normal"},comment:{color:"#8e8e8e"},"block-comment":{color:"#8e8e8e"},prolog:{color:"#8e8e8e"},doctype:{color:"#8e8e8e"},cdata:{color:"#8e8e8e"},punctuation:{color:"#ccc"},tag:{color:"#e2777a"},"attr-name":{color:"#e2777a"},namespace:{color:"#e2777a"},number:{color:"#e2777a"},unit:{color:"#e2777a"},hexcode:{color:"#e2777a"},deleted:{color:"#e2777a"},property:{color:"#72f1b8",textShadow:"0 0 2px #100c0f, 0 0 10px #257c5575, 0 0 35px #21272475"},selector:{color:"#72f1b8",textShadow:"0 0 2px #100c0f, 0 0 10px #257c5575, 0 0 35px #21272475"},"function-name":{color:"#6196cc"},boolean:{color:"#fdfdfd",textShadow:"0 0 2px #001716, 0 0 3px #03edf975, 0 0 5px #03edf975, 0 0 8px #03edf975"},"selector .token.id":{color:"#fdfdfd",textShadow:"0 0 2px #001716, 0 0 3px #03edf975, 0 0 5px #03edf975, 0 0 8px #03edf975"},function:{color:"#fdfdfd",textShadow:"0 0 2px #001716, 0 0 3px #03edf975, 0 0 5px #03edf975, 0 0 8px #03edf975"},"class-name":{color:"#fff5f6",textShadow:"0 0 2px #000, 0 0 10px #fc1f2c75, 0 0 5px #fc1f2c75, 0 0 25px #fc1f2c75"},constant:{color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"},symbol:{color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"},important:{color:"#f4eee4",textShadow:"0 0 2px #393a33, 0 0 8px #f39f0575, 0 0 2px #f39f0575",fontWeight:"bold"},atrule:{color:"#f4eee4",textShadow:"0 0 2px #393a33, 0 0 8px #f39f0575, 0 0 2px #f39f0575"},keyword:{color:"#f4eee4",textShadow:"0 0 2px #393a33, 0 0 8px #f39f0575, 0 0 2px #f39f0575"},"selector .token.class":{color:"#f4eee4",textShadow:"0 0 2px #393a33, 0 0 8px #f39f0575, 0 0 2px #f39f0575"},builtin:{color:"#f4eee4",textShadow:"0 0 2px #393a33, 0 0 8px #f39f0575, 0 0 2px #f39f0575"},string:{color:"#f87c32"},char:{color:"#f87c32"},"attr-value":{color:"#f87c32"},regex:{color:"#f87c32"},variable:{color:"#f87c32"},operator:{color:"#67cdcc"},entity:{color:"#67cdcc",cursor:"help"},url:{color:"#67cdcc"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},inserted:{color:"green"}}},BfbN:function(e,t,n){"use strict";var o=a("start"),r=a("end");function i(e){return{start:o(e),end:r(e)}}function a(e){return t.displayName=e,t;function t(t){var n=t&&t.position&&t.position[e]||{};return{line:n.line||null,column:n.column||null,offset:isNaN(n.offset)?null:n.offset}}}e.exports=i,i.start=o,i.end=r},Bh6z:function(e,t,n){"use strict";e.exports=function(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}},BjXi:function(e,t,n){"use strict";var o=n("M8+4"),r=n("rm/B")(o);e.exports=r},C7Ve:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{color:"#393A34",fontFamily:'"Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace',direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",fontSize:".9em",lineHeight:"1.2em",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none"},'pre[class*="language-"]':{color:"#393A34",fontFamily:'"Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace',direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",fontSize:".9em",lineHeight:"1.2em",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",padding:"1em",margin:".5em 0",overflow:"auto",border:"1px solid #dddddd",backgroundColor:"white"},'pre > code[class*="language-"]':{fontSize:"1em"},'pre[class*="language-"]::-moz-selection':{background:"#C1DEF1"},'pre[class*="language-"] ::-moz-selection':{background:"#C1DEF1"},'code[class*="language-"]::-moz-selection':{background:"#C1DEF1"},'code[class*="language-"] ::-moz-selection':{background:"#C1DEF1"},'pre[class*="language-"]::selection':{background:"#C1DEF1"},'pre[class*="language-"] ::selection':{background:"#C1DEF1"},'code[class*="language-"]::selection':{background:"#C1DEF1"},'code[class*="language-"] ::selection':{background:"#C1DEF1"},':not(pre) > code[class*="language-"]':{padding:".2em",paddingTop:"1px",paddingBottom:"1px",background:"#f8f8f8",border:"1px solid #dddddd"},comment:{color:"#008000",fontStyle:"italic"},prolog:{color:"#008000",fontStyle:"italic"},doctype:{color:"#008000",fontStyle:"italic"},cdata:{color:"#008000",fontStyle:"italic"},namespace:{Opacity:".7"},string:{color:"#A31515"},punctuation:{color:"#393A34"},operator:{color:"#393A34"},url:{color:"#36acaa"},symbol:{color:"#36acaa"},number:{color:"#36acaa"},boolean:{color:"#36acaa"},variable:{color:"#36acaa"},constant:{color:"#36acaa"},inserted:{color:"#36acaa"},atrule:{color:"#0000ff"},keyword:{color:"#0000ff"},"attr-value":{color:"#0000ff"},".language-autohotkey .token.selector":{color:"#0000ff"},".language-json .token.boolean":{color:"#0000ff"},".language-json .token.number":{color:"#0000ff"},'code[class*="language-css"]':{color:"#0000ff"},function:{color:"#393A34"},deleted:{color:"#9a050f"},".language-autohotkey .token.tag":{color:"#9a050f"},selector:{color:"#800000"},".language-autohotkey .token.keyword":{color:"#00009f"},important:{fontWeight:"bold"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},"class-name":{color:"#2B91AF"},".language-json .token.property":{color:"#2B91AF"},tag:{color:"#800000"},"attr-name":{color:"#ff0000"},property:{color:"#ff0000"},regex:{color:"#ff0000"},entity:{color:"#ff0000"},"directive.tag .tag":{background:"#ffff00",color:"#393A34"},".line-numbers .line-numbers-rows":{borderRightColor:"#a5a5a5"},".line-numbers-rows > span:before":{color:"#2B91AF"},".line-highlight":{background:"linear-gradient(to right, rgba(193, 222, 241, 0.2) 70%, rgba(221, 222, 241, 0))"}}},CC3I:function(e,t,n){var o=n("Lc7W");e.exports=function(e,t){var n,r=null;if(!e||"string"!==typeof e)return r;for(var i,a,s=o(e),l="function"===typeof t,c=0,u=s.length;ci&&"whitespace"===e[r][1].type&&(r-=2);"atxHeadingSequence"===e[r][1].type&&(i===r-1||r-4>i&&"whitespace"===e[r-2][1].type)&&(r-=i+1===r?2:4);r>i&&(n={type:"atxHeadingText",start:e[i][1].start,end:e[r][1].end},o={type:"chunkText",start:e[i][1].start,end:e[r][1].end,contentType:"text"},a(e,i,r-i+1,[["enter",n,t],["enter",o,t],["exit",o,t],["exit",n,t]]));return e}};e.exports=l},Cjod:function(e,t,n){"use strict";var o=n("7+hk"),r=n("IEZ+"),i=n("F6fn"),a=n("Ho5A"),s=n("TTG4"),l=n("vfP8"),c=n("CC3I"),u=n("qrWY"),d=n("Zasy"),p=d("root"),f=d("element"),h=d("text");function m(e,t,n){var o,i,a=n.schema,s=a,l=t.tagName,c={},d=[],p=-1;for(o in"html"===a.space&&"svg"===l.toLowerCase()&&(s=r,n.schema=s),t.properties)g(c,o,t.properties[o],n,l);if(n.vdom&&("html"===s.space?l=l.toUpperCase():c.namespace=u[s.space]),n.prefix&&(n.key++,c.key=n.prefix+n.key),t.children)for(;++p0&&n.push(o("text","\n"));return n};var o=n("vUGn")},"E/Jm":function(e,t,n){"use strict";e.exports=function(e){return e<-2}},EBzq:function(e,t,n){"use strict";var o=[].slice;e.exports=function(e,t){var n;return function(){var t,a=o.call(arguments,0),s=e.length>a.length;s&&a.push(r);try{t=e.apply(null,a)}catch(l){if(s&&n)throw l;return r(l)}s||(t&&"function"===typeof t.then?t.then(i,r):t instanceof Error?r(t):i(t))};function r(){n||(n=!0,t.apply(null,arguments))}function i(e){r(null,e)}}},EIjK:function(e,t,n){"use strict";var o=String.fromCharCode;e.exports=o},"EfL/":function(e,t,n){const o=n("ZkSf");e.exports=function(e){if(e.allowedElements&&e.disallowedElements)throw new TypeError("Only one of `allowedElements` and `disallowedElements` should be defined");if(e.allowedElements||e.disallowedElements||e.allowElement)return e=>{o(e,"element",t)};function t(t,n,o){const r=t,i=o;let a;if(e.allowedElements?a=!e.allowedElements.includes(r.tagName):e.disallowedElements&&(a=e.disallowedElements.includes(r.tagName)),!a&&e.allowElement&&"number"===typeof n&&(a=!e.allowElement(r,n,i)),a&&"number"===typeof n)return e.unwrapDisallowed&&r.children?i.children.splice(n,1,...r.children):i.children.splice(n,1),n}}},Esvb:function(e,t,n){"use strict";e.exports=n("PPHF")},F2il:function(e,t,n){"use strict";e.exports=function(e,t){var n,o=String(e),r=0;if("string"!==typeof t)throw new Error("Expected character");n=o.indexOf(t);for(;-1!==n;)r++,n=o.indexOf(t,n+t.length);return r}},F6fn:function(e,t,n){"use strict";var o=n("bAF5"),r=n("qTn3"),i=n("Ut8p"),a="data";e.exports=function(e,t){var n=o(t),p=t,f=i;if(n in e.normal)return e.property[e.normal[n]];n.length>4&&n.slice(0,4)===a&&s.test(t)&&("-"===t.charAt(4)?p=function(e){var t=e.slice(5).replace(l,d);return a+t.charAt(0).toUpperCase()+t.slice(1)}(t):t=function(e){var t=e.slice(4);if(l.test(t))return e;"-"!==(t=t.replace(c,u)).charAt(0)&&(t="-"+t);return a+t}(t),f=r);return new f(p,t)};var s=/^data[-\w.:]+$/i,l=/-[a-z]/g,c=/[A-Z]/g;function u(e){return"-"+e.toLowerCase()}function d(e){return e.charAt(1).toUpperCase()}},FE4A:function(e,t,n){"use strict";var o=n("EIjK");e.exports=function(e){for(var t,n,r,i=-1,a=[];++i code[class*="language-"]':{fontSize:"1em"},'pre[class*="language-"]::-moz-selection':{background:"#b3d4fc"},'pre[class*="language-"] ::-moz-selection':{background:"#b3d4fc"},'code[class*="language-"]::-moz-selection':{background:"#b3d4fc"},'code[class*="language-"] ::-moz-selection':{background:"#b3d4fc"},'pre[class*="language-"]::selection':{background:"#b3d4fc"},'pre[class*="language-"] ::selection':{background:"#b3d4fc"},'code[class*="language-"]::selection':{background:"#b3d4fc"},'code[class*="language-"] ::selection':{background:"#b3d4fc"},':not(pre) > code[class*="language-"]':{padding:".2em",paddingTop:"1px",paddingBottom:"1px",background:"#f8f8f8",border:"1px solid #dddddd"},comment:{color:"#999988",fontStyle:"italic"},prolog:{color:"#999988",fontStyle:"italic"},doctype:{color:"#999988",fontStyle:"italic"},cdata:{color:"#999988",fontStyle:"italic"},namespace:{Opacity:".7"},string:{color:"#e3116c"},"attr-value":{color:"#e3116c"},punctuation:{color:"#393A34"},operator:{color:"#393A34"},entity:{color:"#36acaa"},url:{color:"#36acaa"},symbol:{color:"#36acaa"},number:{color:"#36acaa"},boolean:{color:"#36acaa"},variable:{color:"#36acaa"},constant:{color:"#36acaa"},property:{color:"#36acaa"},regex:{color:"#36acaa"},inserted:{color:"#36acaa"},atrule:{color:"#00a4db"},keyword:{color:"#00a4db"},"attr-name":{color:"#00a4db"},".language-autohotkey .token.selector":{color:"#00a4db"},function:{color:"#9a050f",fontWeight:"bold"},deleted:{color:"#9a050f"},".language-autohotkey .token.tag":{color:"#9a050f"},tag:{color:"#00009f"},selector:{color:"#00009f"},".language-autohotkey .token.keyword":{color:"#00009f"},important:{fontWeight:"bold"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"}}},Gdbo:function(e,t,n){"use strict";e.exports=function(e){if(e)throw e}},GjEx:function(e,t,n){"use strict";e.exports=function(e,t){var n,r=t.value?t.value+"\n":"",i=t.lang&&t.lang.match(/^[^ \t]+(?=[ \t]|$)/),a={};i&&(a.className=["language-"+i]);n=e(t,"code",a,[o("text",r)]),t.meta&&(n.data={meta:t.meta});return e(t.position,"pre",[n])};var o=n("vUGn")},H0fq:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",fontSize:"1em",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",background:"black",color:"white",boxShadow:"-.3em 0 0 .3em black, .3em 0 0 .3em black"},'pre[class*="language-"]':{fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",fontSize:"1em",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",padding:".4em .8em",margin:".5em 0",overflow:"auto",background:'url(\'data:image/svg+xml;charset=utf-8,%0D%0A%0D%0A%0D%0A<%2Fsvg>\')',backgroundSize:"1em 1em"},':not(pre) > code[class*="language-"]':{padding:".2em",borderRadius:".3em",boxShadow:"none",whiteSpace:"normal"},comment:{color:"#aaa"},prolog:{color:"#aaa"},doctype:{color:"#aaa"},cdata:{color:"#aaa"},punctuation:{color:"#999"},namespace:{Opacity:".7"},property:{color:"#0cf"},tag:{color:"#0cf"},boolean:{color:"#0cf"},number:{color:"#0cf"},constant:{color:"#0cf"},symbol:{color:"#0cf"},selector:{color:"yellow"},"attr-name":{color:"yellow"},string:{color:"yellow"},char:{color:"yellow"},builtin:{color:"yellow"},operator:{color:"yellowgreen"},entity:{color:"yellowgreen",cursor:"help"},url:{color:"yellowgreen"},".language-css .token.string":{color:"yellowgreen"},variable:{color:"yellowgreen"},inserted:{color:"yellowgreen"},atrule:{color:"deeppink"},"attr-value":{color:"deeppink"},keyword:{color:"deeppink"},regex:{color:"orange"},important:{color:"orange",fontWeight:"bold"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},deleted:{color:"red"},"pre.diff-highlight.diff-highlight > code .token.deleted:not(.prefix)":{backgroundColor:"rgba(255, 0, 0, .3)",display:"inline"},"pre > code.diff-highlight.diff-highlight .token.deleted:not(.prefix)":{backgroundColor:"rgba(255, 0, 0, .3)",display:"inline"},"pre.diff-highlight.diff-highlight > code .token.inserted:not(.prefix)":{backgroundColor:"rgba(0, 255, 128, .3)",display:"inline"},"pre > code.diff-highlight.diff-highlight .token.inserted:not(.prefix)":{backgroundColor:"rgba(0, 255, 128, .3)",display:"inline"}}},HALo:function(e,t,n){"use strict";function o(){return(o=Object.assign||function(e){for(var t=1;t code[class*="language-"]':{fontSize:"1em"},':not(pre) > code[class*="language-"]':{padding:".1em",borderRadius:".3em"},comment:{color:"#797379"},prolog:{color:"#797379"},doctype:{color:"#797379"},cdata:{color:"#797379"},punctuation:{color:"#b9b5b8"},".namespace":{Opacity:".7"},null:{color:"#fd8b19"},operator:{color:"#fd8b19"},boolean:{color:"#fd8b19"},number:{color:"#fd8b19"},property:{color:"#fdcc59"},tag:{color:"#1290bf"},string:{color:"#149b93"},selector:{color:"#c85e7c"},"attr-name":{color:"#fd8b19"},entity:{color:"#149b93",cursor:"help"},url:{color:"#149b93"},".language-css .token.string":{color:"#149b93"},".style .token.string":{color:"#149b93"},"attr-value":{color:"#8fc13e"},keyword:{color:"#8fc13e"},control:{color:"#8fc13e"},directive:{color:"#8fc13e"},unit:{color:"#8fc13e"},statement:{color:"#149b93"},regex:{color:"#149b93"},atrule:{color:"#149b93"},placeholder:{color:"#1290bf"},variable:{color:"#1290bf"},important:{color:"#dd464c",fontWeight:"bold"},"pre > code.highlight":{Outline:".4em solid red",OutlineOffset:".4em"}}},Ho5A:function(e){e.exports=JSON.parse('{"classId":"classID","dataType":"datatype","itemId":"itemID","strokeDashArray":"strokeDasharray","strokeDashOffset":"strokeDashoffset","strokeLineCap":"strokeLinecap","strokeLineJoin":"strokeLinejoin","strokeMiterLimit":"strokeMiterlimit","typeOf":"typeof","xLinkActuate":"xlinkActuate","xLinkArcRole":"xlinkArcrole","xLinkHref":"xlinkHref","xLinkRole":"xlinkRole","xLinkShow":"xlinkShow","xLinkTitle":"xlinkTitle","xLinkType":"xlinkType","xmlnsXLink":"xmlnsXlink"}')},HtLg:function(e,t,n){"use strict";var o=n("Vx/6");e.exports=function(e,t){return e.length?(o(e,e.length,0,t),e):t}},HwUZ:function(e,t,n){"use strict";class o{constructor(e){const t={},n=this._getOverriddenMethods(this,t);for(const o of Object.keys(n))"function"===typeof n[o]&&(t[o]=e[o],e[o]=n[o])}_getOverriddenMethods(){throw new Error("Not implemented")}}o.install=function(e,t,n){e.__mixins||(e.__mixins=[]);for(let r=0;r-1?(d=1,T.interrupt?t(o):P(o)):c.indexOf(h.toLowerCase())>-1?(d=6,47===o?(e.consume(o),S):T.interrupt?t(o):P(o)):(d=7,T.interrupt?n(o):p?x(o):C(o)):45===o||r(o)?(e.consume(o),h+=l(o),_):n(o)}function S(o){return 62===o?(e.consume(o),T.interrupt?t:P):n(o)}function C(t){return s(t)?(e.consume(t),C):I(t)}function x(t){return 47===t?(e.consume(t),I):58===t||95===t||o(t)?(e.consume(t),v):s(t)?(e.consume(t),x):I(t)}function v(t){return 45===t||46===t||58===t||95===t||r(t)?(e.consume(t),v):O(t)}function O(t){return 61===t?(e.consume(t),N):s(t)?(e.consume(t),O):x(t)}function N(t){return null===t||60===t||61===t||62===t||96===t?n(t):34===t||39===t?(e.consume(t),g=t,M):s(t)?(e.consume(t),N):(g=void 0,w(t))}function M(t){return t===g?(e.consume(t),R):null===t||i(t)?n(t):(e.consume(t),M)}function w(t){return null===t||34===t||39===t||60===t||61===t||62===t||96===t||a(t)?O(t):(e.consume(t),w)}function R(e){return 47===e||62===e||s(e)?x(e):n(e)}function I(t){return 62===t?(e.consume(t),L):n(t)}function L(t){return s(t)?(e.consume(t),L):null===t||i(t)?P(t):n(t)}function P(t){return 45===t&&2===d?(e.consume(t),F):60===t&&1===d?(e.consume(t),B):62===t&&4===d?(e.consume(t),W):63===t&&3===d?(e.consume(t),G):93===t&&5===d?(e.consume(t),U):!i(t)||6!==d&&7!==d?null===t||i(t)?H(t):(e.consume(t),P):e.check(f,W,H)(t)}function H(t){return e.exit("htmlFlowData"),D(t)}function D(t){return null===t?K(t):i(t)?(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),D):(e.enter("htmlFlowData"),P(t))}function F(t){return 45===t?(e.consume(t),G):P(t)}function B(t){return 47===t?(e.consume(t),h="",z):P(t)}function z(t){return 62===t&&u.indexOf(h.toLowerCase())>-1?(e.consume(t),W):o(t)&&h.length<8?(e.consume(t),h+=l(t),z):P(t)}function U(t){return 93===t?(e.consume(t),G):P(t)}function G(t){return 62===t?(e.consume(t),W):P(t)}function W(t){return null===t||i(t)?(e.exit("htmlFlowData"),K(t)):(e.consume(t),W)}function K(n){return e.exit("htmlFlow"),t(n)}},resolveTo:function(e){var t=e.length;for(;t--&&("enter"!==e[t][0]||"htmlFlow"!==e[t][1].type););t>1&&"linePrefix"===e[t-2][1].type&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2));return e},concrete:!0},f={tokenize:function(e,t,n){return function(o){return e.exit("htmlFlowData"),e.enter("lineEndingBlank"),e.consume(o),e.exit("lineEndingBlank"),e.attempt(d,t,n)}},partial:!0};e.exports=p},L8sx:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n("rCOv"),r=n("yRGd"),i=n("VLot"),a=function(e){var t=this,n=e.attempt(i,(function(o){if(null===o)return void e.consume(o);return e.enter("lineEndingBlank"),e.consume(o),e.exit("lineEndingBlank"),t.currentConstruct=void 0,n}),e.attempt(this.parser.constructs.flowInitial,a,r(e,e.attempt(this.parser.constructs.flow,a,e.attempt(o,a)),"linePrefix")));return n;function a(o){if(null!==o)return e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),t.currentConstruct=void 0,n;e.consume(o)}};t.tokenize=a},LLHA:function(e,t,n){"use strict";e.exports=n("wJMj")},Lc7W:function(e,t){var n=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,o=/\n/g,r=/^\s*/,i=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,a=/^:\s*/,s=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,l=/^[;\s]*/,c=/^\s+|\s+$/g,u="";function d(e){return e?e.replace(c,u):u}e.exports=function(e,t){if("string"!==typeof e)throw new TypeError("First argument must be a string");if(!e)return[];t=t||{};var c=1,p=1;function f(e){var t=e.match(o);t&&(c+=t.length);var n=e.lastIndexOf("\n");p=~n?e.length-n:p+e.length}function h(){var e={line:c,column:p};return function(t){return t.position=new m(e),b(),t}}function m(e){this.start=e,this.end={line:c,column:p},this.source=t.source}m.prototype.content=e;var g=[];function T(n){var o=new Error(t.source+":"+c+":"+p+": "+n);if(o.reason=n,o.filename=t.source,o.line=c,o.column=p,o.source=e,!t.silent)throw o;g.push(o)}function E(t){var n=t.exec(e);if(n){var o=n[0];return f(o),e=e.slice(o.length),n}}function b(){E(r)}function A(e){var t;for(e=e||[];t=k();)!1!==t&&e.push(t);return e}function k(){var t=h();if("/"==e.charAt(0)&&"*"==e.charAt(1)){for(var n=2;u!=e.charAt(n)&&("*"!=e.charAt(n)||"/"!=e.charAt(n+1));)++n;if(n+=2,u===e.charAt(n-1))return T("End of comment missing");var o=e.slice(2,n-2);return p+=2,f(o),e=e.slice(n),p+=2,t({type:"comment",comment:o})}}function y(){var e=h(),t=E(i);if(t){if(k(),!E(a))return T("property missing ':'");var o=E(s),r=e({type:"declaration",property:d(t[0].replace(n,u)),value:o?d(o[0].replace(n,u)):u});return E(l),r}}return b(),function(){var e,t=[];for(A(t);e=y();)!1!==e&&(t.push(e),A(t));return t}()}},"M3+Y":function(e,t,n){"use strict";e.exports=function(e,t){var n=t.value.replace(/\r?\n|\r/g," ");return e(t,"code",[o("text",n)])};var o=n("vUGn")},"M8+4":function(e,t,n){"use strict";e.exports=/[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/},MVZn:function(e,t,n){var o=n("lSNA");e.exports=function(e){for(var t=1;t code[class*="language-"]':{background:"#1d1f21",padding:".1em",borderRadius:".3em"},comment:{color:"#7C7C7C"},prolog:{color:"#7C7C7C"},doctype:{color:"#7C7C7C"},cdata:{color:"#7C7C7C"},punctuation:{color:"#c5c8c6"},".namespace":{Opacity:".7"},property:{color:"#96CBFE"},keyword:{color:"#96CBFE"},tag:{color:"#96CBFE"},"class-name":{color:"#FFFFB6",textDecoration:"underline"},boolean:{color:"#99CC99"},constant:{color:"#99CC99"},symbol:{color:"#f92672"},deleted:{color:"#f92672"},number:{color:"#FF73FD"},selector:{color:"#A8FF60"},"attr-name":{color:"#A8FF60"},string:{color:"#A8FF60"},char:{color:"#A8FF60"},builtin:{color:"#A8FF60"},inserted:{color:"#A8FF60"},variable:{color:"#C6C5FE"},operator:{color:"#EDEDED"},entity:{color:"#FFFFB6",cursor:"help"},url:{color:"#96CBFE"},".language-css .token.string":{color:"#87C38A"},".style .token.string":{color:"#87C38A"},atrule:{color:"#F9EE98"},"attr-value":{color:"#F9EE98"},function:{color:"#DAD085"},regex:{color:"#E9C062"},important:{color:"#fd971f",fontWeight:"bold"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"}}},NNOl:function(e,t,n){"use strict";var o=n("E/Jm"),r=n("Vx/6"),i=n("O+c1"),a=n("yRGd"),s={name:"codeIndented",tokenize:function(e,t,n){return e.attempt(l,r,n);function r(n){return null===n?t(n):o(n)?e.attempt(l,r,t)(n):(e.enter("codeFlowValue"),i(n))}function i(t){return null===t||o(t)?(e.exit("codeFlowValue"),r(t)):(e.consume(t),i)}},resolve:function(e,t){var n={type:"codeIndented",start:e[0][1].start,end:e[e.length-1][1].end};return r(e,0,0,[["enter",n,t]]),r(e,e.length,0,[["exit",n,t]]),e}},l={tokenize:function(e,t,n){var r=this;return a(e,(function s(l){if(o(l))return e.enter("lineEnding"),e.consume(l),e.exit("lineEnding"),a(e,s,"linePrefix",5);return i(r.events,"linePrefix")<4?n(l):t(l)}),"linePrefix",5)},partial:!0};e.exports=s},NOby:function(e,t,n){"use strict";var o=Object.assign;e.exports=o},Ne21:function(e,t,n){"use strict";const o=n("9kwo"),r=n("srZV"),i=n("HwUZ");e.exports=class extends o{constructor(e,t){super(e,t);const n=i.install(e.preprocessor,r,t);this.posTracker=n.posTracker}}},NfWH:function(e,t){e.exports=function(e){var t=e.options.listItemIndent||"tab";if(1===t||"1"===t)return"one";if("tab"!==t&&"one"!==t&&"mixed"!==t)throw new Error("Cannot serialize items with `"+t+"` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`");return t}},Nsbk:function(e,t){function n(t){return e.exports=n=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},e.exports.__esModule=!0,e.exports.default=e.exports,n(t)}e.exports=n,e.exports.__esModule=!0,e.exports.default=e.exports},Ny5O:function(e,t,n){"use strict";var o=n("rm/B")(/[\dA-Za-z]/);e.exports=o},"O+c1":function(e,t,n){"use strict";var o=n("jeK3");e.exports=function(e,t){var n=e[e.length-1];return n&&n[1].type===t?o(n[2].sliceStream(n[1])):0}},OaLn:function(e,t,n){"use strict";var o=n("Q3zd"),r=n("HtLg"),i=n("Vx/6"),a=n("Bh6z"),s=n("Ig3s"),l=n("T0BQ"),c=n("haLp"),u=n("kViG"),d=n("9ppO"),p=n("0mGV"),f={name:"labelEnd",tokenize:function(e,t,n){var o,r,i=this,s=i.events.length;for(;s--;)if(("labelImage"===i.events[s][1].type||"labelLink"===i.events[s][1].type)&&!i.events[s][1]._balanced){o=i.events[s][1];break}return function(t){if(!o)return n(t);return o._inactive?c(t):(r=i.parser.defined.indexOf(a(i.sliceSerialize({start:o.end,end:i.now()})))>-1,e.enter("labelEnd"),e.enter("labelMarker"),e.consume(t),e.exit("labelMarker"),e.exit("labelEnd"),l)};function l(n){return 40===n?e.attempt(h,t,r?t:c)(n):91===n?e.attempt(m,t,r?e.attempt(g,t,c):c)(n):r?t(n):c(n)}function c(e){return o._balanced=!0,n(e)}},resolveTo:function(e,t){var n,o,a,c,u,d,p,f=e.length,h=0;for(;f--;)if(c=e[f][1],u){if("link"===c.type||"labelLink"===c.type&&c._inactive)break;"enter"===e[f][0]&&"labelLink"===c.type&&(c._inactive=!0)}else if(d){if("enter"===e[f][0]&&("labelImage"===c.type||"labelLink"===c.type)&&!c._balanced&&(u=f,"labelLink"!==c.type)){h=2;break}}else"labelEnd"===c.type&&(d=f);return n={type:"labelLink"===e[u][1].type?"link":"image",start:l(e[u][1].start),end:l(e[e.length-1][1].end)},o={type:"label",start:l(e[u][1].start),end:l(e[d][1].end)},a={type:"labelText",start:l(e[u+h+2][1].end),end:l(e[d-2][1].start)},p=r(p=[["enter",n,t],["enter",o,t]],e.slice(u+1,u+h+3)),p=r(p,[["enter",a,t]]),p=r(p,s(t.parser.constructs.insideSpan.null,e.slice(u+h+4,d-3),t)),p=r(p,[["exit",a,t],e[d-2],e[d-1],["exit",o,t]]),p=r(p,e.slice(d+1)),p=r(p,[["exit",n,t]]),i(e,u,e.length,p),e},resolveAll:function(e){var t,n=-1;for(;++n code[class*="language-"]':{background:"hsl(30, 20%, 25%)",padding:".15em .2em .05em",borderRadius:".3em",border:".13em solid hsl(30, 20%, 40%)",boxShadow:"1px 1px .3em -.1em black inset",whiteSpace:"normal"},comment:{color:"hsl(30, 20%, 50%)"},prolog:{color:"hsl(30, 20%, 50%)"},doctype:{color:"hsl(30, 20%, 50%)"},cdata:{color:"hsl(30, 20%, 50%)"},punctuation:{Opacity:".7"},namespace:{Opacity:".7"},property:{color:"hsl(350, 40%, 70%)"},tag:{color:"hsl(350, 40%, 70%)"},boolean:{color:"hsl(350, 40%, 70%)"},number:{color:"hsl(350, 40%, 70%)"},constant:{color:"hsl(350, 40%, 70%)"},symbol:{color:"hsl(350, 40%, 70%)"},selector:{color:"hsl(75, 70%, 60%)"},"attr-name":{color:"hsl(75, 70%, 60%)"},string:{color:"hsl(75, 70%, 60%)"},char:{color:"hsl(75, 70%, 60%)"},builtin:{color:"hsl(75, 70%, 60%)"},inserted:{color:"hsl(75, 70%, 60%)"},operator:{color:"hsl(40, 90%, 60%)"},entity:{color:"hsl(40, 90%, 60%)",cursor:"help"},url:{color:"hsl(40, 90%, 60%)"},".language-css .token.string":{color:"hsl(40, 90%, 60%)"},".style .token.string":{color:"hsl(40, 90%, 60%)"},variable:{color:"hsl(40, 90%, 60%)"},atrule:{color:"hsl(350, 40%, 70%)"},"attr-value":{color:"hsl(350, 40%, 70%)"},keyword:{color:"hsl(350, 40%, 70%)"},regex:{color:"#e90"},important:{color:"#e90",fontWeight:"bold"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},deleted:{color:"red"}}},PGbq:function(e){e.exports=JSON.parse('["area","base","basefont","bgsound","br","col","command","embed","frame","hr","image","img","input","isindex","keygen","link","menuitem","meta","nextid","param","source","track","wbr"]')},PPHF:function(e,t,n){"use strict";var o=n("aCXt"),r=n("tgGP");e.exports=r,r.prototype.message=function(e,t,n){var r=new o(e,t,n);this.path&&(r.name=this.path+":"+r.name,r.file=this.path);return r.fatal=!1,this.messages.push(r),r},r.prototype.info=function(){var e=this.message.apply(this,arguments);return e.fatal=null,e},r.prototype.fail=function(){var e=this.message.apply(this,arguments);throw e.fatal=!0,e}},PSll:function(e,t,n){"use strict";var o=n("E/Jm"),r=n("Q3zd"),i=n("O+c1"),a=n("yRGd"),s={name:"codeFenced",tokenize:function(e,t,n){var s,l=this,c={tokenize:function(e,t,n){var r=0;return a(e,i,"linePrefix",this.parser.constructs.disable.null.indexOf("codeIndented")>-1?void 0:4);function i(t){return e.enter("codeFencedFence"),e.enter("codeFencedFenceSequence"),l(t)}function l(t){return t===s?(e.consume(t),r++,l):r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i},e.exports.__esModule=!0,e.exports.default=e.exports},R5yl:function(e,t,n){"use strict";e.exports=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","section","source","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"]},REpm:function(e,t){const n=["http","https","mailto","tel"];e.exports=function(e){const t=(e||"").trim(),o=t.charAt(0);if("#"===o||"/"===o)return t;const r=t.indexOf(":");if(-1===r)return t;let i=-1;for(;++ii)return t;if(i=t.indexOf("#"),-1!==i&&r>i)return t;return"javascript:void(0)"}},RXC2:function(e,t,n){"use strict";var o=n("FWC9"),r=n("DUvi"),i=n("y3WP"),a=o.boolean,s=o.overloadedBoolean,l=o.booleanish,c=o.number,u=o.spaceSeparated,d=o.commaSeparated;e.exports=r({space:"html",attributes:{acceptcharset:"accept-charset",classname:"class",htmlfor:"for",httpequiv:"http-equiv"},transform:i,mustUseProperty:["checked","multiple","muted","selected"],properties:{abbr:null,accept:d,acceptCharset:u,accessKey:u,action:null,allow:null,allowFullScreen:a,allowPaymentRequest:a,allowUserMedia:a,alt:null,as:null,async:a,autoCapitalize:null,autoComplete:u,autoFocus:a,autoPlay:a,capture:a,charSet:null,checked:a,cite:null,className:u,cols:c,colSpan:null,content:null,contentEditable:l,controls:a,controlsList:u,coords:c|d,crossOrigin:null,data:null,dateTime:null,decoding:null,default:a,defer:a,dir:null,dirName:null,disabled:a,download:s,draggable:l,encType:null,enterKeyHint:null,form:null,formAction:null,formEncType:null,formMethod:null,formNoValidate:a,formTarget:null,headers:u,height:c,hidden:a,high:c,href:null,hrefLang:null,htmlFor:u,httpEquiv:u,id:null,imageSizes:null,imageSrcSet:d,inputMode:null,integrity:null,is:null,isMap:a,itemId:null,itemProp:u,itemRef:u,itemScope:a,itemType:u,kind:null,label:null,lang:null,language:null,list:null,loading:null,loop:a,low:c,manifest:null,max:null,maxLength:c,media:null,method:null,min:null,minLength:c,multiple:a,muted:a,name:null,nonce:null,noModule:a,noValidate:a,onAbort:null,onAfterPrint:null,onAuxClick:null,onBeforePrint:null,onBeforeUnload:null,onBlur:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onContextMenu:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnded:null,onError:null,onFocus:null,onFormData:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLanguageChange:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadEnd:null,onLoadStart:null,onMessage:null,onMessageError:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRejectionHandled:null,onReset:null,onResize:null,onScroll:null,onSecurityPolicyViolation:null,onSeeked:null,onSeeking:null,onSelect:null,onSlotChange:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnhandledRejection:null,onUnload:null,onVolumeChange:null,onWaiting:null,onWheel:null,open:a,optimum:c,pattern:null,ping:u,placeholder:null,playsInline:a,poster:null,preload:null,readOnly:a,referrerPolicy:null,rel:u,required:a,reversed:a,rows:c,rowSpan:c,sandbox:u,scope:null,scoped:a,seamless:a,selected:a,shape:null,size:c,sizes:null,slot:null,span:c,spellCheck:l,src:null,srcDoc:null,srcLang:null,srcSet:d,start:c,step:null,style:null,tabIndex:c,target:null,title:null,translate:null,type:null,typeMustMatch:a,useMap:null,value:l,width:c,wrap:null,align:null,aLink:null,archive:u,axis:null,background:null,bgColor:null,border:c,borderColor:null,bottomMargin:c,cellPadding:null,cellSpacing:null,char:null,charOff:null,classId:null,clear:null,code:null,codeBase:null,codeType:null,color:null,compact:a,declare:a,event:null,face:null,frame:null,frameBorder:null,hSpace:c,leftMargin:c,link:null,longDesc:null,lowSrc:null,marginHeight:c,marginWidth:c,noResize:a,noHref:a,noShade:a,noWrap:a,object:null,profile:null,prompt:null,rev:null,rightMargin:c,rules:null,scheme:null,scrolling:l,standby:null,summary:null,text:null,topMargin:c,valueType:null,version:null,vAlign:null,vLink:null,vSpace:c,allowTransparency:null,autoCorrect:null,autoSave:null,disablePictureInPicture:a,disableRemotePlayback:a,prefix:null,property:null,results:c,security:null,unselectable:null}})},RjOF:function(e,t,n){"use strict";var o,r="";e.exports=function(e,t){if("string"!==typeof e)throw new TypeError("expected a string");if(1===t)return e;if(2===t)return e+e;var n=e.length*t;if(o!==e||"undefined"===typeof o)o=e,r="";else if(r.length>=n)return r.substr(0,n);for(;n>r.length&&t>1;)1&t&&(r+=e),t>>=1,e+=e;return r=(r+=e).substr(0,n)}},RrMp:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n("+Pz5"),r=n("dAEq"),i=n("Atxm"),a=n("kQY0"),s=n("Ue0c"),l=n("42yH"),c=n("PSll"),u=n("NNOl"),d=n("/apb"),p=n("HxRD"),f=n("gyVW"),h=n("CUvb"),m=n("KynH"),g=n("3iNw"),T=n("OaLn"),E=n("7enW"),b=n("Ie4K"),A=n("escJ"),k=n("5bit"),y=n("Iv+h"),_=n("33Zt"),S={42:k,43:k,45:k,48:k,49:k,50:k,51:k,52:k,53:k,54:k,55:k,56:k,57:k,62:a},C={91:p},x={"-2":u,"-1":u,32:u},v={35:h,42:_,45:[y,_],60:m,61:y,95:_,96:c,126:c},O={38:l,92:s},N={"-5":A,"-4":A,"-3":A,33:E,38:l,42:r,60:[i,g],91:b,92:[f,s],93:T,95:r,96:d},M={null:[r,o.resolver]};t.contentInitial=C,t.disable={null:[]},t.document=S,t.flow=v,t.flowInitial=x,t.insideSpan=M,t.string=O,t.text=N},Ry5F:function(e,t,n){"use strict";e.exports=function(e,t){var n,a,s,l,c,u=t.children,d=u.length,p=t.align||[],f=p.length,h=[];for(;d--;){for(a=u[d].children,l=0===d?"th":"td",n=f||a.length,s=[];n--;)c=a[n],s[n]=e(c,l,{align:p[n]},c?i(e,c):[]);h[d]=e(u[d],"tr",r(s,!0))}return e(t,"table",r([e(h[0].position,"thead",r([h[0]],!0))].concat(h[1]?e({start:o.start(h[1]),end:o.end(h[h.length-1])},"tbody",r(h.slice(1),!0)):[]),!0))};var o=n("BfbN"),r=n("Dvol"),i=n("WFsM")},ScQ6:function(e,t,n){e.exports=function(e,t,n){var l,c,u,d=r(n),p=i(n);t&&t.ordered&&(d=(t.start>-1?t.start:1)+(!1===n.options.incrementListMarker?0:t.children.indexOf(e))+".");l=d.length+1,("tab"===p||"mixed"===p&&(t&&t.spread||e.spread))&&(l=4*Math.ceil(l/4));return u=n.enter("listItem"),c=s(a(e,n),(function(e,t,n){if(t)return(n?"":o(" ",l))+e;return(n?d:d+o(" ",l-d.length))+e})),u(),c};var o=n("RjOF"),r=n("/cIb"),i=n("NfWH"),a=n("B5Lt"),s=n("deF/")},T0BQ:function(e,t,n){"use strict";var o=n("NOby");e.exports=function(e){return o({},e)}},T0f4:function(e,t){function n(t){return e.exports=n=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},n(t)}e.exports=n},TDhK:function(e,t,n){"use strict";var o={}.hasOwnProperty;e.exports=o},THrT:function(e,t,n){e.exports=n("qOO9")},TTG4:function(e,t,n){"use strict";t.parse=function(e){var t=String(e||"").trim();return""===t?[]:t.split(o)},t.stringify=function(e){return e.join(" ").trim()};var o=/[ \t\n\r\f]+/g},Tauu:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{color:"#a9b7c6",fontFamily:"Consolas, Monaco, 'Andale Mono', monospace",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none"},'pre[class*="language-"]':{color:"#a9b7c6",fontFamily:"Consolas, Monaco, 'Andale Mono', monospace",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",padding:"1em",margin:".5em 0",overflow:"auto",background:"#2b2b2b"},'pre[class*="language-"]::-moz-selection':{color:"inherit",background:"rgba(33, 66, 131, .85)"},'pre[class*="language-"] ::-moz-selection':{color:"inherit",background:"rgba(33, 66, 131, .85)"},'code[class*="language-"]::-moz-selection':{color:"inherit",background:"rgba(33, 66, 131, .85)"},'code[class*="language-"] ::-moz-selection':{color:"inherit",background:"rgba(33, 66, 131, .85)"},'pre[class*="language-"]::selection':{color:"inherit",background:"rgba(33, 66, 131, .85)"},'pre[class*="language-"] ::selection':{color:"inherit",background:"rgba(33, 66, 131, .85)"},'code[class*="language-"]::selection':{color:"inherit",background:"rgba(33, 66, 131, .85)"},'code[class*="language-"] ::selection':{color:"inherit",background:"rgba(33, 66, 131, .85)"},':not(pre) > code[class*="language-"]':{background:"#2b2b2b",padding:".1em",borderRadius:".3em"},comment:{color:"#808080"},prolog:{color:"#808080"},cdata:{color:"#808080"},delimiter:{color:"#cc7832"},boolean:{color:"#cc7832"},keyword:{color:"#cc7832"},selector:{color:"#cc7832"},important:{color:"#cc7832"},atrule:{color:"#cc7832"},operator:{color:"#a9b7c6"},punctuation:{color:"#a9b7c6"},"attr-name":{color:"#a9b7c6"},tag:{color:"#e8bf6a"},"tag .punctuation":{color:"#e8bf6a"},doctype:{color:"#e8bf6a"},builtin:{color:"#e8bf6a"},entity:{color:"#6897bb"},number:{color:"#6897bb"},symbol:{color:"#6897bb"},property:{color:"#9876aa"},constant:{color:"#9876aa"},variable:{color:"#9876aa"},string:{color:"#6a8759"},char:{color:"#6a8759"},"attr-value":{color:"#a5c261"},"attr-value .punctuation":{color:"#a5c261"},"attr-value .punctuation:first-child":{color:"#a9b7c6"},url:{color:"#287bde",textDecoration:"underline"},function:{color:"#ffc66d"},regex:{background:"#364135"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},inserted:{background:"#294436"},deleted:{background:"#484a4a"},"code.language-css .token.property":{color:"#a9b7c6"},"code.language-css .token.property + .token.punctuation":{color:"#a9b7c6"},"code.language-css .token.id":{color:"#ffc66d"},"code.language-css .token.selector > .token.class":{color:"#ffc66d"},"code.language-css .token.selector > .token.attribute":{color:"#ffc66d"},"code.language-css .token.selector > .token.pseudo-class":{color:"#ffc66d"},"code.language-css .token.selector > .token.pseudo-element":{color:"#ffc66d"}}},TqRt:function(e,t){e.exports=function(e){return e&&e.__esModule?e:{default:e}},e.exports.__esModule=!0,e.exports.default=e.exports},U6jy:function(e,t){e.exports=function(){for(var e={},t=0;t0;t--)e.onItemPop(this.items[t]);t.popAllUpToHtmlElement.call(this)},remove(n){e.onItemPop(this.current),t.remove.call(this,n)}}}}},Ue0c:function(e,t,n){"use strict";var o=n("qF1g"),r={name:"characterEscape",tokenize:function(e,t,n){return function(t){return e.enter("characterEscape"),e.enter("escapeMarker"),e.consume(t),e.exit("escapeMarker"),r};function r(r){return o(r)?(e.enter("characterEscapeValue"),e.consume(r),e.exit("characterEscapeValue"),e.exit("characterEscape"),t):n(r)}}};e.exports=r},UhtW:function(e,t){e.exports=function e(t,n){var o,r=-1;if(n.extensions)for(;++ra?0:a+t:t>a?a:t,n=n>0?n:0,r.length<1e4)(i=Array.from(r)).unshift(t,n),o.apply(e,i);else for(n&&o.apply(e,[t,n]);s code[class*="language-"]':{background:"#272822",padding:".1em",borderRadius:".3em",whiteSpace:"normal"},comment:{color:"#8292a2"},prolog:{color:"#8292a2"},doctype:{color:"#8292a2"},cdata:{color:"#8292a2"},punctuation:{color:"#f8f8f2"},namespace:{Opacity:".7"},property:{color:"#f92672"},tag:{color:"#f92672"},constant:{color:"#f92672"},symbol:{color:"#f92672"},deleted:{color:"#f92672"},boolean:{color:"#ae81ff"},number:{color:"#ae81ff"},selector:{color:"#a6e22e"},"attr-name":{color:"#a6e22e"},string:{color:"#a6e22e"},char:{color:"#a6e22e"},builtin:{color:"#a6e22e"},inserted:{color:"#a6e22e"},operator:{color:"#f8f8f2"},entity:{color:"#f8f8f2",cursor:"help"},url:{color:"#f8f8f2"},".language-css .token.string":{color:"#f8f8f2"},".style .token.string":{color:"#f8f8f2"},variable:{color:"#f8f8f2"},atrule:{color:"#e6db74"},"attr-value":{color:"#e6db74"},function:{color:"#e6db74"},"class-name":{color:"#e6db74"},keyword:{color:"#66d9ef"},regex:{color:"#fd971f"},important:{color:"#fd971f",fontWeight:"bold"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"}}},WniP:function(e,t,n){"use strict";e.exports=function(e,t){var n,i,a,s=t.referenceType,l="]";"collapsed"===s?l+="[]":"full"===s&&(l+="["+(t.label||t.identifier)+"]");if("imageReference"===t.type)return o("text","!["+t.alt+l);n=r(e,t),(i=n[0])&&"text"===i.type?i.value="["+i.value:n.unshift(o("text","["));(a=n[n.length-1])&&"text"===a.type?a.value+=l:n.push(o("text",l));return n};var o=n("vUGn"),r=n("WFsM")},WtKE:function(e,t,n){"use strict";var o;e.exports=function(e){var t,n="&"+e+";";if((o=o||document.createElement("i")).innerHTML=n,59===(t=o.textContent).charCodeAt(t.length-1)&&"semi"!==e)return!1;return t!==n&&t}},Xuae:function(e,t,n){"use strict";var o=n("mPvQ"),r=n("/GRZ"),i=n("i2R6"),a=(n("qXWd"),n("48fX")),s=n("tCBg"),l=n("T0f4");function c(e){var t=function(){if("undefined"===typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"===typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,o=l(e);if(t){var r=l(this).constructor;n=Reflect.construct(o,arguments,r)}else n=o.apply(this,arguments);return s(this,n)}}t.__esModule=!0,t.default=void 0;var u=n("q1tI"),d=function(e){a(n,e);var t=c(n);function n(e){var i;return r(this,n),(i=t.call(this,e))._hasHeadManager=void 0,i.emitChange=function(){i._hasHeadManager&&i.props.headManager.updateHead(i.props.reduceComponentsToState(o(i.props.headManager.mountedInstances),i.props))},i._hasHeadManager=i.props.headManager&&i.props.headManager.mountedInstances,i}return i(n,[{key:"componentDidMount",value:function(){this._hasHeadManager&&this.props.headManager.mountedInstances.add(this),this.emitChange()}},{key:"componentDidUpdate",value:function(){this.emitChange()}},{key:"componentWillUnmount",value:function(){this._hasHeadManager&&this.props.headManager.mountedInstances.delete(this),this.emitChange()}},{key:"render",value:function(){return null}}]),n}(u.Component);t.default=d},"Y+Mq":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{fontFamily:'Consolas, Menlo, Monaco, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace',fontSize:"14px",lineHeight:"1.375",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",background:"#24242e",color:"#767693"},'pre[class*="language-"]':{fontFamily:'Consolas, Menlo, Monaco, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace',fontSize:"14px",lineHeight:"1.375",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",background:"#24242e",color:"#767693",padding:"1em",margin:".5em 0",overflow:"auto"},'pre > code[class*="language-"]':{fontSize:"1em"},'pre[class*="language-"]::-moz-selection':{textShadow:"none",background:"#5151e6"},'pre[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#5151e6"},'code[class*="language-"]::-moz-selection':{textShadow:"none",background:"#5151e6"},'code[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#5151e6"},'pre[class*="language-"]::selection':{textShadow:"none",background:"#5151e6"},'pre[class*="language-"] ::selection':{textShadow:"none",background:"#5151e6"},'code[class*="language-"]::selection':{textShadow:"none",background:"#5151e6"},'code[class*="language-"] ::selection':{textShadow:"none",background:"#5151e6"},':not(pre) > code[class*="language-"]':{padding:".1em",borderRadius:".3em"},comment:{color:"#5b5b76"},prolog:{color:"#5b5b76"},doctype:{color:"#5b5b76"},cdata:{color:"#5b5b76"},punctuation:{color:"#5b5b76"},namespace:{Opacity:".7"},tag:{color:"#dd672c"},operator:{color:"#dd672c"},number:{color:"#dd672c"},property:{color:"#767693"},function:{color:"#767693"},"tag-id":{color:"#ebebff"},selector:{color:"#ebebff"},"atrule-id":{color:"#ebebff"},"code.language-javascript":{color:"#aaaaca"},"attr-name":{color:"#aaaaca"},"code.language-css":{color:"#fe8c52"},"code.language-scss":{color:"#fe8c52"},boolean:{color:"#fe8c52"},string:{color:"#fe8c52"},entity:{color:"#fe8c52",cursor:"help"},url:{color:"#fe8c52"},".language-css .token.string":{color:"#fe8c52"},".language-scss .token.string":{color:"#fe8c52"},".style .token.string":{color:"#fe8c52"},"attr-value":{color:"#fe8c52"},keyword:{color:"#fe8c52"},control:{color:"#fe8c52"},directive:{color:"#fe8c52"},unit:{color:"#fe8c52"},statement:{color:"#fe8c52"},regex:{color:"#fe8c52"},atrule:{color:"#fe8c52"},placeholder:{color:"#fe8c52"},variable:{color:"#fe8c52"},deleted:{textDecoration:"line-through"},inserted:{borderBottom:"1px dotted #ebebff",textDecoration:"none"},italic:{fontStyle:"italic"},important:{fontWeight:"bold",color:"#aaaaca"},bold:{fontWeight:"bold"},"pre > code.highlight":{Outline:".4em solid #7676f4",OutlineOffset:".4em"},".line-numbers .line-numbers-rows":{borderRightColor:"#262631"},".line-numbers-rows > span:before":{color:"#393949"},".line-highlight":{background:"linear-gradient(to right, rgba(221, 103, 44, 0.2) 70%, rgba(221, 103, 44, 0))"}}},"Y/Y8":function(e,t,n){"use strict";const o=n("HwUZ"),r=n("zpDW"),i=n("lb9w"),a=n("UTAp"),s=n("UwWT").TAG_NAMES;e.exports=class extends o{constructor(e){super(e),this.parser=e,this.treeAdapter=this.parser.treeAdapter,this.posTracker=null,this.lastStartTagToken=null,this.lastFosterParentingLocation=null,this.currentToken=null}_setStartLocation(e){let t=null;this.lastStartTagToken&&(t=Object.assign({},this.lastStartTagToken.location),t.startTag=this.lastStartTagToken.location),this.treeAdapter.setNodeSourceCodeLocation(e,t)}_setEndLocation(e,t){if(this.treeAdapter.getNodeSourceCodeLocation(e)&&t.location){const n=t.location,o=this.treeAdapter.getTagName(e),i={};t.type===r.END_TAG_TOKEN&&o===t.tagName?(i.endTag=Object.assign({},n),i.endLine=n.endLine,i.endCol=n.endCol,i.endOffset=n.endOffset):(i.endLine=n.startLine,i.endCol=n.startCol,i.endOffset=n.startOffset),this.treeAdapter.updateNodeSourceCodeLocation(e,i)}}_getOverriddenMethods(e,t){return{_bootstrap(n,r){t._bootstrap.call(this,n,r),e.lastStartTagToken=null,e.lastFosterParentingLocation=null,e.currentToken=null;const s=o.install(this.tokenizer,i);e.posTracker=s.posTracker,o.install(this.openElements,a,{onItemPop:function(t){e._setEndLocation(t,e.currentToken)}})},_runParsingLoop(n){t._runParsingLoop.call(this,n);for(let t=this.openElements.stackTop;t>=0;t--)e._setEndLocation(this.openElements.items[t],e.currentToken)},_processTokenInForeignContent(n){e.currentToken=n,t._processTokenInForeignContent.call(this,n)},_processToken(n){e.currentToken=n,t._processToken.call(this,n);if(n.type===r.END_TAG_TOKEN&&(n.tagName===s.HTML||n.tagName===s.BODY&&this.openElements.hasInScope(s.BODY)))for(let t=this.openElements.stackTop;t>=0;t--){const o=this.openElements.items[t];if(this.treeAdapter.getTagName(o)===n.tagName){e._setEndLocation(o,n);break}}},_setDocumentType(e){t._setDocumentType.call(this,e);const n=this.treeAdapter.getChildNodes(this.document),o=n.length;for(let t=0;tt;)a.containerState=c[i][1],c[i][0].exit.call(a,e);c.length=t}},s={tokenize:function(e,t,n){return r(e,e.attempt(this.parser.constructs.document,t,n),"linePrefix",this.parser.constructs.disable.null.indexOf("codeIndented")>-1?void 0:4)}},l={tokenize:function(e,t,n){return r(e,e.lazy(this.parser.constructs.flow,t,n),"linePrefix",this.parser.constructs.disable.null.indexOf("codeIndented")>-1?void 0:4)}};t.tokenize=a},YpxX:function(e,t,n){"use strict";const o=n("pRQB"),r=n("2l2D"),i=o.CODE_POINTS;e.exports=class{constructor(){this.html=null,this.pos=-1,this.lastGapPos=-1,this.lastCharPos=-1,this.gapStack=[],this.skipNextNewLine=!1,this.lastChunkWritten=!1,this.endOfChunkHit=!1,this.bufferWaterline=65536}_err(){}_addGap(){this.gapStack.push(this.lastGapPos),this.lastGapPos=this.pos}_processSurrogate(e){if(this.pos!==this.lastCharPos){const t=this.html.charCodeAt(this.pos+1);if(o.isSurrogatePair(t))return this.pos++,this._addGap(),o.getSurrogatePairCodePoint(e,t)}else if(!this.lastChunkWritten)return this.endOfChunkHit=!0,i.EOF;return this._err(r.surrogateInInputStream),e}dropParsedChunk(){this.pos>this.bufferWaterline&&(this.lastCharPos-=this.pos,this.html=this.html.substring(this.pos),this.pos=0,this.lastGapPos=-1,this.gapStack=[])}write(e,t){this.html?this.html+=e:this.html=e,this.lastCharPos=this.html.length-1,this.endOfChunkHit=!1,this.lastChunkWritten=t}insertHtmlAtCurrentPos(e){this.html=this.html.substring(0,this.pos+1)+e+this.html.substring(this.pos+1,this.html.length),this.lastCharPos=this.html.length-1,this.endOfChunkHit=!1}advance(){if(this.pos++,this.pos>this.lastCharPos)return this.endOfChunkHit=!this.lastChunkWritten,i.EOF;let e=this.html.charCodeAt(this.pos);if(this.skipNextNewLine&&e===i.LINE_FEED)return this.skipNextNewLine=!1,this._addGap(),this.advance();if(e===i.CARRIAGE_RETURN)return this.skipNextNewLine=!0,i.LINE_FEED;this.skipNextNewLine=!1,o.isSurrogate(e)&&(e=this._processSurrogate(e));return e>31&&e<127||e===i.LINE_FEED||e===i.CARRIAGE_RETURN||e>159&&e<64976||this._checkForProblematicCharacters(e),e}_checkForProblematicCharacters(e){o.isControlCodePoint(e)?this._err(r.controlCharacterInInputStream):o.isUndefinedCodePoint(e)&&this._err(r.noncharacterInInputStream)}retreat(){this.pos===this.lastGapPos&&(this.lastGapPos=this.gapStack.pop(),this.pos--),this.pos--}}},Z0IX:function(e,t,n){"use strict";var o=n("EIjK");e.exports=function(e,t){var n=parseInt(e,t);return n<9||11===n||n>13&&n<32||n>126&&n<160||n>55295&&n<57344||n>64975&&n<65008||65535===(65535&n)||65534===(65535&n)||n>1114111?"\ufffd":o(n)}},ZOei:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{color:"#f8f8f2",background:"none",fontFamily:"\"Fira Code\", Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none"},'pre[class*="language-"]':{color:"#f8f8f2",background:"#2E3440",fontFamily:"\"Fira Code\", Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",padding:"1em",margin:".5em 0",overflow:"auto",borderRadius:"0.3em"},':not(pre) > code[class*="language-"]':{background:"#2E3440",padding:".1em",borderRadius:".3em",whiteSpace:"normal"},comment:{color:"#636f88"},prolog:{color:"#636f88"},doctype:{color:"#636f88"},cdata:{color:"#636f88"},punctuation:{color:"#81A1C1"},".namespace":{Opacity:".7"},property:{color:"#81A1C1"},tag:{color:"#81A1C1"},constant:{color:"#81A1C1"},symbol:{color:"#81A1C1"},deleted:{color:"#81A1C1"},number:{color:"#B48EAD"},boolean:{color:"#81A1C1"},selector:{color:"#A3BE8C"},"attr-name":{color:"#A3BE8C"},string:{color:"#A3BE8C"},char:{color:"#A3BE8C"},builtin:{color:"#A3BE8C"},inserted:{color:"#A3BE8C"},operator:{color:"#81A1C1"},entity:{color:"#81A1C1",cursor:"help"},url:{color:"#81A1C1"},".language-css .token.string":{color:"#81A1C1"},".style .token.string":{color:"#81A1C1"},variable:{color:"#81A1C1"},atrule:{color:"#88C0D0"},"attr-value":{color:"#88C0D0"},function:{color:"#88C0D0"},"class-name":{color:"#88C0D0"},keyword:{color:"#81A1C1"},regex:{color:"#EBCB8B"},important:{color:"#EBCB8B",fontWeight:"bold"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"}}},"ZTJ+":function(e,t,n){"use strict";function o(){return null}e.exports={blockquote:n("iX4R"),break:n("aRXn"),code:n("GjEx"),delete:n("/Fgc"),emphasis:n("ktEA"),footnoteReference:n("/BR8"),footnote:n("nbFU"),heading:n("lQDV"),html:n("fFcG"),imageReference:n("rRyo"),image:n("I3zf"),inlineCode:n("M3+Y"),linkReference:n("W+EG"),link:n("/ulP"),listItem:n("bS0g"),list:n("pI64"),paragraph:n("1rba"),root:n("N+Fa"),strong:n("CndC"),table:n("Ry5F"),text:n("KvLk"),thematicBreak:n("WV47"),toml:o,yaml:o,definition:o,footnoteDefinition:o}},Zasy:function(e,t,n){"use strict";function o(e){if(null==e)return r;if("string"===typeof e)return function(e){return t;function t(t){return Boolean(t&&t.type===e)}}(e);if("object"===typeof e)return"length"in e?function(e){var t=[],n=-1;for(;++n code[class*="language-"]':{whiteSpace:"normal",borderRadius:"0.2em",padding:"0.1em"},".language-css > code":{color:"#f76d47"},".language-sass > code":{color:"#f76d47"},".language-scss > code":{color:"#f76d47"},'[class*="language-"] .namespace':{Opacity:"0.7"},atrule:{color:"#7c4dff"},"attr-name":{color:"#39adb5"},"attr-value":{color:"#f6a434"},attribute:{color:"#f6a434"},boolean:{color:"#7c4dff"},builtin:{color:"#39adb5"},cdata:{color:"#39adb5"},char:{color:"#39adb5"},class:{color:"#39adb5"},"class-name":{color:"#6182b8"},comment:{color:"#aabfc9"},constant:{color:"#7c4dff"},deleted:{color:"#e53935"},doctype:{color:"#aabfc9"},entity:{color:"#e53935"},function:{color:"#7c4dff"},hexcode:{color:"#f76d47"},id:{color:"#7c4dff",fontWeight:"bold"},important:{color:"#7c4dff",fontWeight:"bold"},inserted:{color:"#39adb5"},keyword:{color:"#7c4dff"},number:{color:"#f76d47"},operator:{color:"#39adb5"},prolog:{color:"#aabfc9"},property:{color:"#39adb5"},"pseudo-class":{color:"#f6a434"},"pseudo-element":{color:"#f6a434"},punctuation:{color:"#39adb5"},regex:{color:"#6182b8"},selector:{color:"#e53935"},string:{color:"#f6a434"},symbol:{color:"#7c4dff"},tag:{color:"#e53935"},unit:{color:"#f76d47"},url:{color:"#e53935"},variable:{color:"#e53935"}}},b9um:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{MozTabSize:"2",OTabSize:"2",tabSize:"2",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",whiteSpace:"pre-wrap",wordWrap:"normal",fontFamily:'Menlo, Monaco, "Courier New", monospace',fontSize:"14px",color:"#76d9e6",textShadow:"none"},'pre[class*="language-"]':{MozTabSize:"2",OTabSize:"2",tabSize:"2",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",whiteSpace:"pre-wrap",wordWrap:"normal",fontFamily:'Menlo, Monaco, "Courier New", monospace',fontSize:"14px",color:"#76d9e6",textShadow:"none",background:"#2a2a2a",padding:"15px",borderRadius:"4px",border:"1px solid #e1e1e8",overflow:"auto",position:"relative"},'pre > code[class*="language-"]':{fontSize:"1em"},':not(pre) > code[class*="language-"]':{background:"#2a2a2a",padding:"0.15em 0.2em 0.05em",borderRadius:".3em",border:"0.13em solid #7a6652",boxShadow:"1px 1px 0.3em -0.1em #000 inset"},'pre[class*="language-"] code':{whiteSpace:"pre",display:"block"},namespace:{Opacity:".7"},comment:{color:"#6f705e"},prolog:{color:"#6f705e"},doctype:{color:"#6f705e"},cdata:{color:"#6f705e"},operator:{color:"#a77afe"},boolean:{color:"#a77afe"},number:{color:"#a77afe"},"attr-name":{color:"#e6d06c"},string:{color:"#e6d06c"},entity:{color:"#e6d06c",cursor:"help"},url:{color:"#e6d06c"},".language-css .token.string":{color:"#e6d06c"},".style .token.string":{color:"#e6d06c"},selector:{color:"#a6e22d"},inserted:{color:"#a6e22d"},atrule:{color:"#ef3b7d"},"attr-value":{color:"#ef3b7d"},keyword:{color:"#ef3b7d"},important:{color:"#ef3b7d",fontWeight:"bold"},deleted:{color:"#ef3b7d"},regex:{color:"#76d9e6"},statement:{color:"#76d9e6",fontWeight:"bold"},placeholder:{color:"#fff"},variable:{color:"#fff"},bold:{fontWeight:"bold"},punctuation:{color:"#bebec5"},italic:{fontStyle:"italic"},"code.language-markup":{color:"#f9f9f9"},"code.language-markup .token.tag":{color:"#ef3b7d"},"code.language-markup .token.attr-name":{color:"#a6e22d"},"code.language-markup .token.attr-value":{color:"#e6d06c"},"code.language-markup .token.style":{color:"#76d9e6"},"code.language-markup .token.script":{color:"#76d9e6"},"code.language-markup .token.script .token.keyword":{color:"#76d9e6"},'pre[class*="language-"][data-line]':{position:"relative",padding:"1em 0 1em 3em"},"pre[data-line] .line-highlight":{position:"absolute",left:"0",right:"0",padding:"0",marginTop:"1em",background:"rgba(255, 255, 255, 0.08)",pointerEvents:"none",lineHeight:"inherit",whiteSpace:"pre"},"pre[data-line] .line-highlight:before":{content:"attr(data-start)",position:"absolute",top:".4em",left:".6em",minWidth:"1em",padding:"0.2em 0.5em",backgroundColor:"rgba(255, 255, 255, 0.4)",color:"black",font:"bold 65%/1 sans-serif",height:"1em",lineHeight:"1em",textAlign:"center",borderRadius:"999px",textShadow:"none",boxShadow:"0 1px 1px rgba(255, 255, 255, 0.7)"},"pre[data-line] .line-highlight[data-end]:after":{content:"attr(data-end)",position:"absolute",top:"auto",left:".6em",minWidth:"1em",padding:"0.2em 0.5em",backgroundColor:"rgba(255, 255, 255, 0.4)",color:"black",font:"bold 65%/1 sans-serif",height:"1em",lineHeight:"1em",textAlign:"center",borderRadius:"999px",textShadow:"none",boxShadow:"0 1px 1px rgba(255, 255, 255, 0.7)",bottom:".4em"}}},bAF5:function(e,t,n){"use strict";e.exports=function(e){return e.toLowerCase()}},bFEn:function(e,t,n){"use strict";var o=n("7+hk"),r=n("rS7C")(o,"div");r.displayName="html",e.exports=r},bHgY:function(e,t,n){"use strict";var o=n("FWC9"),r=n("DUvi"),i=o.booleanish,a=o.number,s=o.spaceSeparated;e.exports=r({transform:function(e,t){return"role"===t?t:"aria-"+t.slice(4).toLowerCase()},properties:{ariaActiveDescendant:null,ariaAtomic:i,ariaAutoComplete:null,ariaBusy:i,ariaChecked:i,ariaColCount:a,ariaColIndex:a,ariaColSpan:a,ariaControls:s,ariaCurrent:null,ariaDescribedBy:s,ariaDetails:null,ariaDisabled:i,ariaDropEffect:s,ariaErrorMessage:null,ariaExpanded:i,ariaFlowTo:s,ariaGrabbed:i,ariaHasPopup:null,ariaHidden:i,ariaInvalid:null,ariaKeyShortcuts:null,ariaLabel:null,ariaLabelledBy:s,ariaLevel:a,ariaLive:null,ariaModal:i,ariaMultiLine:i,ariaMultiSelectable:i,ariaOrientation:null,ariaOwns:s,ariaPlaceholder:null,ariaPosInSet:a,ariaPressed:i,ariaReadOnly:i,ariaRelevant:null,ariaRequired:i,ariaRoleDescription:s,ariaRowCount:a,ariaRowIndex:a,ariaRowSpan:a,ariaSelected:i,ariaSetSize:a,ariaSort:null,ariaValueMax:a,ariaValueMin:a,ariaValueNow:a,ariaValueText:null,role:null}})},bS0g:function(e,t,n){"use strict";e.exports=function(e,t,n){var a,s,l,c=r(e,t),u=c[0],d=n?function(e){var t=e.spread,n=e.children,o=n.length,r=-1;for(;!t&&++r0&&u.children.unshift(o("text"," ")),u.children.unshift(e(null,"input",{type:"checkbox",checked:t.checked,disabled:!0})),p.className=["task-list-item"]);a=c.length,s=-1;for(;++s1:t}},bWFg:function(e,t,n){"use strict";e.exports=e=>{if("string"!==typeof e)throw new TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}},bwJB:function(e,t,n){"use strict";e.exports=e=>{if("[object Object]"!==Object.prototype.toString.call(e))return!1;const t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}},c2c2:function(e,t,n){"use strict";var o=n("TqRt");Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"coy",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(t,"dark",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(t,"funky",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(t,"okaidia",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(t,"solarizedlight",{enumerable:!0,get:function(){return l.default}}),Object.defineProperty(t,"tomorrow",{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(t,"twilight",{enumerable:!0,get:function(){return u.default}}),Object.defineProperty(t,"prism",{enumerable:!0,get:function(){return d.default}}),Object.defineProperty(t,"a11yDark",{enumerable:!0,get:function(){return p.default}}),Object.defineProperty(t,"atomDark",{enumerable:!0,get:function(){return f.default}}),Object.defineProperty(t,"base16AteliersulphurpoolLight",{enumerable:!0,get:function(){return h.default}}),Object.defineProperty(t,"cb",{enumerable:!0,get:function(){return m.default}}),Object.defineProperty(t,"darcula",{enumerable:!0,get:function(){return g.default}}),Object.defineProperty(t,"dracula",{enumerable:!0,get:function(){return T.default}}),Object.defineProperty(t,"duotoneDark",{enumerable:!0,get:function(){return E.default}}),Object.defineProperty(t,"duotoneEarth",{enumerable:!0,get:function(){return b.default}}),Object.defineProperty(t,"duotoneForest",{enumerable:!0,get:function(){return A.default}}),Object.defineProperty(t,"duotoneLight",{enumerable:!0,get:function(){return k.default}}),Object.defineProperty(t,"duotoneSea",{enumerable:!0,get:function(){return y.default}}),Object.defineProperty(t,"duotoneSpace",{enumerable:!0,get:function(){return _.default}}),Object.defineProperty(t,"ghcolors",{enumerable:!0,get:function(){return S.default}}),Object.defineProperty(t,"hopscotch",{enumerable:!0,get:function(){return C.default}}),Object.defineProperty(t,"materialDark",{enumerable:!0,get:function(){return x.default}}),Object.defineProperty(t,"materialLight",{enumerable:!0,get:function(){return v.default}}),Object.defineProperty(t,"materialOceanic",{enumerable:!0,get:function(){return O.default}}),Object.defineProperty(t,"nord",{enumerable:!0,get:function(){return N.default}}),Object.defineProperty(t,"pojoaque",{enumerable:!0,get:function(){return M.default}}),Object.defineProperty(t,"shadesOfPurple",{enumerable:!0,get:function(){return w.default}}),Object.defineProperty(t,"synthwave84",{enumerable:!0,get:function(){return R.default}}),Object.defineProperty(t,"vs",{enumerable:!0,get:function(){return I.default}}),Object.defineProperty(t,"vscDarkPlus",{enumerable:!0,get:function(){return L.default}}),Object.defineProperty(t,"xonokai",{enumerable:!0,get:function(){return P.default}});var r=o(n("61xa")),i=o(n("PCRY")),a=o(n("H0fq")),s=o(n("WVFU")),l=o(n("fL8H")),c=o(n("wGQB")),u=o(n("iy38")),d=o(n("6MAg")),p=o(n("yix/")),f=o(n("N4m7")),h=o(n("mAwW")),m=o(n("38Ti")),g=o(n("Tauu")),T=o(n("slJw")),E=o(n("007m")),b=o(n("kWEd")),A=o(n("9891")),k=o(n("4+h/")),y=o(n("++Eq")),_=o(n("Y+Mq")),S=o(n("GVPn")),C=o(n("HbD6")),x=o(n("vjtj")),v=o(n("auM2")),O=o(n("2uWR")),N=o(n("ZOei")),M=o(n("fe/W")),w=o(n("otMa")),R=o(n("BYRM")),I=o(n("C7Ve")),L=o(n("u0PD")),P=o(n("b9um"))},c6jy:function(e,t){e.exports=function(e){return null!=e&&null!=e.constructor&&"function"===typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}},cRLj:function(e,t,n){"use strict";e.exports=new Uint16Array([4,52,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,106,303,412,810,1432,1701,1796,1987,2114,2360,2420,2484,3170,3251,4140,4393,4575,4610,5106,5512,5728,6117,6274,6315,6345,6427,6516,7002,7910,8733,9323,9870,10170,10631,10893,11318,11386,11467,12773,13092,14474,14922,15448,15542,16419,17666,18166,18611,19004,19095,19298,19397,4,16,69,77,97,98,99,102,103,108,109,110,111,112,114,115,116,117,140,150,158,169,176,194,199,210,216,222,226,242,256,266,283,294,108,105,103,5,198,1,59,148,1,198,80,5,38,1,59,156,1,38,99,117,116,101,5,193,1,59,167,1,193,114,101,118,101,59,1,258,4,2,105,121,182,191,114,99,5,194,1,59,189,1,194,59,1,1040,114,59,3,55349,56580,114,97,118,101,5,192,1,59,208,1,192,112,104,97,59,1,913,97,99,114,59,1,256,100,59,1,10835,4,2,103,112,232,237,111,110,59,1,260,102,59,3,55349,56632,112,108,121,70,117,110,99,116,105,111,110,59,1,8289,105,110,103,5,197,1,59,264,1,197,4,2,99,115,272,277,114,59,3,55349,56476,105,103,110,59,1,8788,105,108,100,101,5,195,1,59,292,1,195,109,108,5,196,1,59,301,1,196,4,8,97,99,101,102,111,114,115,117,321,350,354,383,388,394,400,405,4,2,99,114,327,336,107,115,108,97,115,104,59,1,8726,4,2,118,119,342,345,59,1,10983,101,100,59,1,8966,121,59,1,1041,4,3,99,114,116,362,369,379,97,117,115,101,59,1,8757,110,111,117,108,108,105,115,59,1,8492,97,59,1,914,114,59,3,55349,56581,112,102,59,3,55349,56633,101,118,101,59,1,728,99,114,59,1,8492,109,112,101,113,59,1,8782,4,14,72,79,97,99,100,101,102,104,105,108,111,114,115,117,442,447,456,504,542,547,569,573,577,616,678,784,790,796,99,121,59,1,1063,80,89,5,169,1,59,454,1,169,4,3,99,112,121,464,470,497,117,116,101,59,1,262,4,2,59,105,476,478,1,8914,116,97,108,68,105,102,102,101,114,101,110,116,105,97,108,68,59,1,8517,108,101,121,115,59,1,8493,4,4,97,101,105,111,514,520,530,535,114,111,110,59,1,268,100,105,108,5,199,1,59,528,1,199,114,99,59,1,264,110,105,110,116,59,1,8752,111,116,59,1,266,4,2,100,110,553,560,105,108,108,97,59,1,184,116,101,114,68,111,116,59,1,183,114,59,1,8493,105,59,1,935,114,99,108,101,4,4,68,77,80,84,591,596,603,609,111,116,59,1,8857,105,110,117,115,59,1,8854,108,117,115,59,1,8853,105,109,101,115,59,1,8855,111,4,2,99,115,623,646,107,119,105,115,101,67,111,110,116,111,117,114,73,110,116,101,103,114,97,108,59,1,8754,101,67,117,114,108,121,4,2,68,81,658,671,111,117,98,108,101,81,117,111,116,101,59,1,8221,117,111,116,101,59,1,8217,4,4,108,110,112,117,688,701,736,753,111,110,4,2,59,101,696,698,1,8759,59,1,10868,4,3,103,105,116,709,717,722,114,117,101,110,116,59,1,8801,110,116,59,1,8751,111,117,114,73,110,116,101,103,114,97,108,59,1,8750,4,2,102,114,742,745,59,1,8450,111,100,117,99,116,59,1,8720,110,116,101,114,67,108,111,99,107,119,105,115,101,67,111,110,116,111,117,114,73,110,116,101,103,114,97,108,59,1,8755,111,115,115,59,1,10799,99,114,59,3,55349,56478,112,4,2,59,67,803,805,1,8915,97,112,59,1,8781,4,11,68,74,83,90,97,99,101,102,105,111,115,834,850,855,860,865,888,903,916,921,1011,1415,4,2,59,111,840,842,1,8517,116,114,97,104,100,59,1,10513,99,121,59,1,1026,99,121,59,1,1029,99,121,59,1,1039,4,3,103,114,115,873,879,883,103,101,114,59,1,8225,114,59,1,8609,104,118,59,1,10980,4,2,97,121,894,900,114,111,110,59,1,270,59,1,1044,108,4,2,59,116,910,912,1,8711,97,59,1,916,114,59,3,55349,56583,4,2,97,102,927,998,4,2,99,109,933,992,114,105,116,105,99,97,108,4,4,65,68,71,84,950,957,978,985,99,117,116,101,59,1,180,111,4,2,116,117,964,967,59,1,729,98,108,101,65,99,117,116,101,59,1,733,114,97,118,101,59,1,96,105,108,100,101,59,1,732,111,110,100,59,1,8900,102,101,114,101,110,116,105,97,108,68,59,1,8518,4,4,112,116,117,119,1021,1026,1048,1249,102,59,3,55349,56635,4,3,59,68,69,1034,1036,1041,1,168,111,116,59,1,8412,113,117,97,108,59,1,8784,98,108,101,4,6,67,68,76,82,85,86,1065,1082,1101,1189,1211,1236,111,110,116,111,117,114,73,110,116,101,103,114,97,108,59,1,8751,111,4,2,116,119,1089,1092,59,1,168,110,65,114,114,111,119,59,1,8659,4,2,101,111,1107,1141,102,116,4,3,65,82,84,1117,1124,1136,114,114,111,119,59,1,8656,105,103,104,116,65,114,114,111,119,59,1,8660,101,101,59,1,10980,110,103,4,2,76,82,1149,1177,101,102,116,4,2,65,82,1158,1165,114,114,111,119,59,1,10232,105,103,104,116,65,114,114,111,119,59,1,10234,105,103,104,116,65,114,114,111,119,59,1,10233,105,103,104,116,4,2,65,84,1199,1206,114,114,111,119,59,1,8658,101,101,59,1,8872,112,4,2,65,68,1218,1225,114,114,111,119,59,1,8657,111,119,110,65,114,114,111,119,59,1,8661,101,114,116,105,99,97,108,66,97,114,59,1,8741,110,4,6,65,66,76,82,84,97,1264,1292,1299,1352,1391,1408,114,114,111,119,4,3,59,66,85,1276,1278,1283,1,8595,97,114,59,1,10515,112,65,114,114,111,119,59,1,8693,114,101,118,101,59,1,785,101,102,116,4,3,82,84,86,1310,1323,1334,105,103,104,116,86,101,99,116,111,114,59,1,10576,101,101,86,101,99,116,111,114,59,1,10590,101,99,116,111,114,4,2,59,66,1345,1347,1,8637,97,114,59,1,10582,105,103,104,116,4,2,84,86,1362,1373,101,101,86,101,99,116,111,114,59,1,10591,101,99,116,111,114,4,2,59,66,1384,1386,1,8641,97,114,59,1,10583,101,101,4,2,59,65,1399,1401,1,8868,114,114,111,119,59,1,8615,114,114,111,119,59,1,8659,4,2,99,116,1421,1426,114,59,3,55349,56479,114,111,107,59,1,272,4,16,78,84,97,99,100,102,103,108,109,111,112,113,115,116,117,120,1466,1470,1478,1489,1515,1520,1525,1536,1544,1593,1609,1617,1650,1664,1668,1677,71,59,1,330,72,5,208,1,59,1476,1,208,99,117,116,101,5,201,1,59,1487,1,201,4,3,97,105,121,1497,1503,1512,114,111,110,59,1,282,114,99,5,202,1,59,1510,1,202,59,1,1069,111,116,59,1,278,114,59,3,55349,56584,114,97,118,101,5,200,1,59,1534,1,200,101,109,101,110,116,59,1,8712,4,2,97,112,1550,1555,99,114,59,1,274,116,121,4,2,83,86,1563,1576,109,97,108,108,83,113,117,97,114,101,59,1,9723,101,114,121,83,109,97,108,108,83,113,117,97,114,101,59,1,9643,4,2,103,112,1599,1604,111,110,59,1,280,102,59,3,55349,56636,115,105,108,111,110,59,1,917,117,4,2,97,105,1624,1640,108,4,2,59,84,1631,1633,1,10869,105,108,100,101,59,1,8770,108,105,98,114,105,117,109,59,1,8652,4,2,99,105,1656,1660,114,59,1,8496,109,59,1,10867,97,59,1,919,109,108,5,203,1,59,1675,1,203,4,2,105,112,1683,1689,115,116,115,59,1,8707,111,110,101,110,116,105,97,108,69,59,1,8519,4,5,99,102,105,111,115,1713,1717,1722,1762,1791,121,59,1,1060,114,59,3,55349,56585,108,108,101,100,4,2,83,86,1732,1745,109,97,108,108,83,113,117,97,114,101,59,1,9724,101,114,121,83,109,97,108,108,83,113,117,97,114,101,59,1,9642,4,3,112,114,117,1770,1775,1781,102,59,3,55349,56637,65,108,108,59,1,8704,114,105,101,114,116,114,102,59,1,8497,99,114,59,1,8497,4,12,74,84,97,98,99,100,102,103,111,114,115,116,1822,1827,1834,1848,1855,1877,1882,1887,1890,1896,1978,1984,99,121,59,1,1027,5,62,1,59,1832,1,62,109,109,97,4,2,59,100,1843,1845,1,915,59,1,988,114,101,118,101,59,1,286,4,3,101,105,121,1863,1869,1874,100,105,108,59,1,290,114,99,59,1,284,59,1,1043,111,116,59,1,288,114,59,3,55349,56586,59,1,8921,112,102,59,3,55349,56638,101,97,116,101,114,4,6,69,70,71,76,83,84,1915,1933,1944,1953,1959,1971,113,117,97,108,4,2,59,76,1925,1927,1,8805,101,115,115,59,1,8923,117,108,108,69,113,117,97,108,59,1,8807,114,101,97,116,101,114,59,1,10914,101,115,115,59,1,8823,108,97,110,116,69,113,117,97,108,59,1,10878,105,108,100,101,59,1,8819,99,114,59,3,55349,56482,59,1,8811,4,8,65,97,99,102,105,111,115,117,2005,2012,2026,2032,2036,2049,2073,2089,82,68,99,121,59,1,1066,4,2,99,116,2018,2023,101,107,59,1,711,59,1,94,105,114,99,59,1,292,114,59,1,8460,108,98,101,114,116,83,112,97,99,101,59,1,8459,4,2,112,114,2055,2059,102,59,1,8461,105,122,111,110,116,97,108,76,105,110,101,59,1,9472,4,2,99,116,2079,2083,114,59,1,8459,114,111,107,59,1,294,109,112,4,2,68,69,2097,2107,111,119,110,72,117,109,112,59,1,8782,113,117,97,108,59,1,8783,4,14,69,74,79,97,99,100,102,103,109,110,111,115,116,117,2144,2149,2155,2160,2171,2189,2194,2198,2209,2245,2307,2329,2334,2341,99,121,59,1,1045,108,105,103,59,1,306,99,121,59,1,1025,99,117,116,101,5,205,1,59,2169,1,205,4,2,105,121,2177,2186,114,99,5,206,1,59,2184,1,206,59,1,1048,111,116,59,1,304,114,59,1,8465,114,97,118,101,5,204,1,59,2207,1,204,4,3,59,97,112,2217,2219,2238,1,8465,4,2,99,103,2225,2229,114,59,1,298,105,110,97,114,121,73,59,1,8520,108,105,101,115,59,1,8658,4,2,116,118,2251,2281,4,2,59,101,2257,2259,1,8748,4,2,103,114,2265,2271,114,97,108,59,1,8747,115,101,99,116,105,111,110,59,1,8898,105,115,105,98,108,101,4,2,67,84,2293,2300,111,109,109,97,59,1,8291,105,109,101,115,59,1,8290,4,3,103,112,116,2315,2320,2325,111,110,59,1,302,102,59,3,55349,56640,97,59,1,921,99,114,59,1,8464,105,108,100,101,59,1,296,4,2,107,109,2347,2352,99,121,59,1,1030,108,5,207,1,59,2358,1,207,4,5,99,102,111,115,117,2372,2386,2391,2397,2414,4,2,105,121,2378,2383,114,99,59,1,308,59,1,1049,114,59,3,55349,56589,112,102,59,3,55349,56641,4,2,99,101,2403,2408,114,59,3,55349,56485,114,99,121,59,1,1032,107,99,121,59,1,1028,4,7,72,74,97,99,102,111,115,2436,2441,2446,2452,2467,2472,2478,99,121,59,1,1061,99,121,59,1,1036,112,112,97,59,1,922,4,2,101,121,2458,2464,100,105,108,59,1,310,59,1,1050,114,59,3,55349,56590,112,102,59,3,55349,56642,99,114,59,3,55349,56486,4,11,74,84,97,99,101,102,108,109,111,115,116,2508,2513,2520,2562,2585,2981,2986,3004,3011,3146,3167,99,121,59,1,1033,5,60,1,59,2518,1,60,4,5,99,109,110,112,114,2532,2538,2544,2548,2558,117,116,101,59,1,313,98,100,97,59,1,923,103,59,1,10218,108,97,99,101,116,114,102,59,1,8466,114,59,1,8606,4,3,97,101,121,2570,2576,2582,114,111,110,59,1,317,100,105,108,59,1,315,59,1,1051,4,2,102,115,2591,2907,116,4,10,65,67,68,70,82,84,85,86,97,114,2614,2663,2672,2728,2735,2760,2820,2870,2888,2895,4,2,110,114,2620,2633,103,108,101,66,114,97,99,107,101,116,59,1,10216,114,111,119,4,3,59,66,82,2644,2646,2651,1,8592,97,114,59,1,8676,105,103,104,116,65,114,114,111,119,59,1,8646,101,105,108,105,110,103,59,1,8968,111,4,2,117,119,2679,2692,98,108,101,66,114,97,99,107,101,116,59,1,10214,110,4,2,84,86,2699,2710,101,101,86,101,99,116,111,114,59,1,10593,101,99,116,111,114,4,2,59,66,2721,2723,1,8643,97,114,59,1,10585,108,111,111,114,59,1,8970,105,103,104,116,4,2,65,86,2745,2752,114,114,111,119,59,1,8596,101,99,116,111,114,59,1,10574,4,2,101,114,2766,2792,101,4,3,59,65,86,2775,2777,2784,1,8867,114,114,111,119,59,1,8612,101,99,116,111,114,59,1,10586,105,97,110,103,108,101,4,3,59,66,69,2806,2808,2813,1,8882,97,114,59,1,10703,113,117,97,108,59,1,8884,112,4,3,68,84,86,2829,2841,2852,111,119,110,86,101,99,116,111,114,59,1,10577,101,101,86,101,99,116,111,114,59,1,10592,101,99,116,111,114,4,2,59,66,2863,2865,1,8639,97,114,59,1,10584,101,99,116,111,114,4,2,59,66,2881,2883,1,8636,97,114,59,1,10578,114,114,111,119,59,1,8656,105,103,104,116,97,114,114,111,119,59,1,8660,115,4,6,69,70,71,76,83,84,2922,2936,2947,2956,2962,2974,113,117,97,108,71,114,101,97,116,101,114,59,1,8922,117,108,108,69,113,117,97,108,59,1,8806,114,101,97,116,101,114,59,1,8822,101,115,115,59,1,10913,108,97,110,116,69,113,117,97,108,59,1,10877,105,108,100,101,59,1,8818,114,59,3,55349,56591,4,2,59,101,2992,2994,1,8920,102,116,97,114,114,111,119,59,1,8666,105,100,111,116,59,1,319,4,3,110,112,119,3019,3110,3115,103,4,4,76,82,108,114,3030,3058,3070,3098,101,102,116,4,2,65,82,3039,3046,114,114,111,119,59,1,10229,105,103,104,116,65,114,114,111,119,59,1,10231,105,103,104,116,65,114,114,111,119,59,1,10230,101,102,116,4,2,97,114,3079,3086,114,114,111,119,59,1,10232,105,103,104,116,97,114,114,111,119,59,1,10234,105,103,104,116,97,114,114,111,119,59,1,10233,102,59,3,55349,56643,101,114,4,2,76,82,3123,3134,101,102,116,65,114,114,111,119,59,1,8601,105,103,104,116,65,114,114,111,119,59,1,8600,4,3,99,104,116,3154,3158,3161,114,59,1,8466,59,1,8624,114,111,107,59,1,321,59,1,8810,4,8,97,99,101,102,105,111,115,117,3188,3192,3196,3222,3227,3237,3243,3248,112,59,1,10501,121,59,1,1052,4,2,100,108,3202,3213,105,117,109,83,112,97,99,101,59,1,8287,108,105,110,116,114,102,59,1,8499,114,59,3,55349,56592,110,117,115,80,108,117,115,59,1,8723,112,102,59,3,55349,56644,99,114,59,1,8499,59,1,924,4,9,74,97,99,101,102,111,115,116,117,3271,3276,3283,3306,3422,3427,4120,4126,4137,99,121,59,1,1034,99,117,116,101,59,1,323,4,3,97,101,121,3291,3297,3303,114,111,110,59,1,327,100,105,108,59,1,325,59,1,1053,4,3,103,115,119,3314,3380,3415,97,116,105,118,101,4,3,77,84,86,3327,3340,3365,101,100,105,117,109,83,112,97,99,101,59,1,8203,104,105,4,2,99,110,3348,3357,107,83,112,97,99,101,59,1,8203,83,112,97,99,101,59,1,8203,101,114,121,84,104,105,110,83,112,97,99,101,59,1,8203,116,101,100,4,2,71,76,3389,3405,114,101,97,116,101,114,71,114,101,97,116,101,114,59,1,8811,101,115,115,76,101,115,115,59,1,8810,76,105,110,101,59,1,10,114,59,3,55349,56593,4,4,66,110,112,116,3437,3444,3460,3464,114,101,97,107,59,1,8288,66,114,101,97,107,105,110,103,83,112,97,99,101,59,1,160,102,59,1,8469,4,13,59,67,68,69,71,72,76,78,80,82,83,84,86,3492,3494,3517,3536,3578,3657,3685,3784,3823,3860,3915,4066,4107,1,10988,4,2,111,117,3500,3510,110,103,114,117,101,110,116,59,1,8802,112,67,97,112,59,1,8813,111,117,98,108,101,86,101,114,116,105,99,97,108,66,97,114,59,1,8742,4,3,108,113,120,3544,3552,3571,101,109,101,110,116,59,1,8713,117,97,108,4,2,59,84,3561,3563,1,8800,105,108,100,101,59,3,8770,824,105,115,116,115,59,1,8708,114,101,97,116,101,114,4,7,59,69,70,71,76,83,84,3600,3602,3609,3621,3631,3637,3650,1,8815,113,117,97,108,59,1,8817,117,108,108,69,113,117,97,108,59,3,8807,824,114,101,97,116,101,114,59,3,8811,824,101,115,115,59,1,8825,108,97,110,116,69,113,117,97,108,59,3,10878,824,105,108,100,101,59,1,8821,117,109,112,4,2,68,69,3666,3677,111,119,110,72,117,109,112,59,3,8782,824,113,117,97,108,59,3,8783,824,101,4,2,102,115,3692,3724,116,84,114,105,97,110,103,108,101,4,3,59,66,69,3709,3711,3717,1,8938,97,114,59,3,10703,824,113,117,97,108,59,1,8940,115,4,6,59,69,71,76,83,84,3739,3741,3748,3757,3764,3777,1,8814,113,117,97,108,59,1,8816,114,101,97,116,101,114,59,1,8824,101,115,115,59,3,8810,824,108,97,110,116,69,113,117,97,108,59,3,10877,824,105,108,100,101,59,1,8820,101,115,116,101,100,4,2,71,76,3795,3812,114,101,97,116,101,114,71,114,101,97,116,101,114,59,3,10914,824,101,115,115,76,101,115,115,59,3,10913,824,114,101,99,101,100,101,115,4,3,59,69,83,3838,3840,3848,1,8832,113,117,97,108,59,3,10927,824,108,97,110,116,69,113,117,97,108,59,1,8928,4,2,101,105,3866,3881,118,101,114,115,101,69,108,101,109,101,110,116,59,1,8716,103,104,116,84,114,105,97,110,103,108,101,4,3,59,66,69,3900,3902,3908,1,8939,97,114,59,3,10704,824,113,117,97,108,59,1,8941,4,2,113,117,3921,3973,117,97,114,101,83,117,4,2,98,112,3933,3952,115,101,116,4,2,59,69,3942,3945,3,8847,824,113,117,97,108,59,1,8930,101,114,115,101,116,4,2,59,69,3963,3966,3,8848,824,113,117,97,108,59,1,8931,4,3,98,99,112,3981,4e3,4045,115,101,116,4,2,59,69,3990,3993,3,8834,8402,113,117,97,108,59,1,8840,99,101,101,100,115,4,4,59,69,83,84,4015,4017,4025,4037,1,8833,113,117,97,108,59,3,10928,824,108,97,110,116,69,113,117,97,108,59,1,8929,105,108,100,101,59,3,8831,824,101,114,115,101,116,4,2,59,69,4056,4059,3,8835,8402,113,117,97,108,59,1,8841,105,108,100,101,4,4,59,69,70,84,4080,4082,4089,4100,1,8769,113,117,97,108,59,1,8772,117,108,108,69,113,117,97,108,59,1,8775,105,108,100,101,59,1,8777,101,114,116,105,99,97,108,66,97,114,59,1,8740,99,114,59,3,55349,56489,105,108,100,101,5,209,1,59,4135,1,209,59,1,925,4,14,69,97,99,100,102,103,109,111,112,114,115,116,117,118,4170,4176,4187,4205,4212,4217,4228,4253,4259,4292,4295,4316,4337,4346,108,105,103,59,1,338,99,117,116,101,5,211,1,59,4185,1,211,4,2,105,121,4193,4202,114,99,5,212,1,59,4200,1,212,59,1,1054,98,108,97,99,59,1,336,114,59,3,55349,56594,114,97,118,101,5,210,1,59,4226,1,210,4,3,97,101,105,4236,4241,4246,99,114,59,1,332,103,97,59,1,937,99,114,111,110,59,1,927,112,102,59,3,55349,56646,101,110,67,117,114,108,121,4,2,68,81,4272,4285,111,117,98,108,101,81,117,111,116,101,59,1,8220,117,111,116,101,59,1,8216,59,1,10836,4,2,99,108,4301,4306,114,59,3,55349,56490,97,115,104,5,216,1,59,4314,1,216,105,4,2,108,109,4323,4332,100,101,5,213,1,59,4330,1,213,101,115,59,1,10807,109,108,5,214,1,59,4344,1,214,101,114,4,2,66,80,4354,4380,4,2,97,114,4360,4364,114,59,1,8254,97,99,4,2,101,107,4372,4375,59,1,9182,101,116,59,1,9140,97,114,101,110,116,104,101,115,105,115,59,1,9180,4,9,97,99,102,104,105,108,111,114,115,4413,4422,4426,4431,4435,4438,4448,4471,4561,114,116,105,97,108,68,59,1,8706,121,59,1,1055,114,59,3,55349,56595,105,59,1,934,59,1,928,117,115,77,105,110,117,115,59,1,177,4,2,105,112,4454,4467,110,99,97,114,101,112,108,97,110,101,59,1,8460,102,59,1,8473,4,4,59,101,105,111,4481,4483,4526,4531,1,10939,99,101,100,101,115,4,4,59,69,83,84,4498,4500,4507,4519,1,8826,113,117,97,108,59,1,10927,108,97,110,116,69,113,117,97,108,59,1,8828,105,108,100,101,59,1,8830,109,101,59,1,8243,4,2,100,112,4537,4543,117,99,116,59,1,8719,111,114,116,105,111,110,4,2,59,97,4555,4557,1,8759,108,59,1,8733,4,2,99,105,4567,4572,114,59,3,55349,56491,59,1,936,4,4,85,102,111,115,4585,4594,4599,4604,79,84,5,34,1,59,4592,1,34,114,59,3,55349,56596,112,102,59,1,8474,99,114,59,3,55349,56492,4,12,66,69,97,99,101,102,104,105,111,114,115,117,4636,4642,4650,4681,4704,4763,4767,4771,5047,5069,5081,5094,97,114,114,59,1,10512,71,5,174,1,59,4648,1,174,4,3,99,110,114,4658,4664,4668,117,116,101,59,1,340,103,59,1,10219,114,4,2,59,116,4675,4677,1,8608,108,59,1,10518,4,3,97,101,121,4689,4695,4701,114,111,110,59,1,344,100,105,108,59,1,342,59,1,1056,4,2,59,118,4710,4712,1,8476,101,114,115,101,4,2,69,85,4722,4748,4,2,108,113,4728,4736,101,109,101,110,116,59,1,8715,117,105,108,105,98,114,105,117,109,59,1,8651,112,69,113,117,105,108,105,98,114,105,117,109,59,1,10607,114,59,1,8476,111,59,1,929,103,104,116,4,8,65,67,68,70,84,85,86,97,4792,4840,4849,4905,4912,4972,5022,5040,4,2,110,114,4798,4811,103,108,101,66,114,97,99,107,101,116,59,1,10217,114,111,119,4,3,59,66,76,4822,4824,4829,1,8594,97,114,59,1,8677,101,102,116,65,114,114,111,119,59,1,8644,101,105,108,105,110,103,59,1,8969,111,4,2,117,119,4856,4869,98,108,101,66,114,97,99,107,101,116,59,1,10215,110,4,2,84,86,4876,4887,101,101,86,101,99,116,111,114,59,1,10589,101,99,116,111,114,4,2,59,66,4898,4900,1,8642,97,114,59,1,10581,108,111,111,114,59,1,8971,4,2,101,114,4918,4944,101,4,3,59,65,86,4927,4929,4936,1,8866,114,114,111,119,59,1,8614,101,99,116,111,114,59,1,10587,105,97,110,103,108,101,4,3,59,66,69,4958,4960,4965,1,8883,97,114,59,1,10704,113,117,97,108,59,1,8885,112,4,3,68,84,86,4981,4993,5004,111,119,110,86,101,99,116,111,114,59,1,10575,101,101,86,101,99,116,111,114,59,1,10588,101,99,116,111,114,4,2,59,66,5015,5017,1,8638,97,114,59,1,10580,101,99,116,111,114,4,2,59,66,5033,5035,1,8640,97,114,59,1,10579,114,114,111,119,59,1,8658,4,2,112,117,5053,5057,102,59,1,8477,110,100,73,109,112,108,105,101,115,59,1,10608,105,103,104,116,97,114,114,111,119,59,1,8667,4,2,99,104,5087,5091,114,59,1,8475,59,1,8625,108,101,68,101,108,97,121,101,100,59,1,10740,4,13,72,79,97,99,102,104,105,109,111,113,115,116,117,5134,5150,5157,5164,5198,5203,5259,5265,5277,5283,5374,5380,5385,4,2,67,99,5140,5146,72,99,121,59,1,1065,121,59,1,1064,70,84,99,121,59,1,1068,99,117,116,101,59,1,346,4,5,59,97,101,105,121,5176,5178,5184,5190,5195,1,10940,114,111,110,59,1,352,100,105,108,59,1,350,114,99,59,1,348,59,1,1057,114,59,3,55349,56598,111,114,116,4,4,68,76,82,85,5216,5227,5238,5250,111,119,110,65,114,114,111,119,59,1,8595,101,102,116,65,114,114,111,119,59,1,8592,105,103,104,116,65,114,114,111,119,59,1,8594,112,65,114,114,111,119,59,1,8593,103,109,97,59,1,931,97,108,108,67,105,114,99,108,101,59,1,8728,112,102,59,3,55349,56650,4,2,114,117,5289,5293,116,59,1,8730,97,114,101,4,4,59,73,83,85,5306,5308,5322,5367,1,9633,110,116,101,114,115,101,99,116,105,111,110,59,1,8851,117,4,2,98,112,5329,5347,115,101,116,4,2,59,69,5338,5340,1,8847,113,117,97,108,59,1,8849,101,114,115,101,116,4,2,59,69,5358,5360,1,8848,113,117,97,108,59,1,8850,110,105,111,110,59,1,8852,99,114,59,3,55349,56494,97,114,59,1,8902,4,4,98,99,109,112,5395,5420,5475,5478,4,2,59,115,5401,5403,1,8912,101,116,4,2,59,69,5411,5413,1,8912,113,117,97,108,59,1,8838,4,2,99,104,5426,5468,101,101,100,115,4,4,59,69,83,84,5440,5442,5449,5461,1,8827,113,117,97,108,59,1,10928,108,97,110,116,69,113,117,97,108,59,1,8829,105,108,100,101,59,1,8831,84,104,97,116,59,1,8715,59,1,8721,4,3,59,101,115,5486,5488,5507,1,8913,114,115,101,116,4,2,59,69,5498,5500,1,8835,113,117,97,108,59,1,8839,101,116,59,1,8913,4,11,72,82,83,97,99,102,104,105,111,114,115,5536,5546,5552,5567,5579,5602,5607,5655,5695,5701,5711,79,82,78,5,222,1,59,5544,1,222,65,68,69,59,1,8482,4,2,72,99,5558,5563,99,121,59,1,1035,121,59,1,1062,4,2,98,117,5573,5576,59,1,9,59,1,932,4,3,97,101,121,5587,5593,5599,114,111,110,59,1,356,100,105,108,59,1,354,59,1,1058,114,59,3,55349,56599,4,2,101,105,5613,5631,4,2,114,116,5619,5627,101,102,111,114,101,59,1,8756,97,59,1,920,4,2,99,110,5637,5647,107,83,112,97,99,101,59,3,8287,8202,83,112,97,99,101,59,1,8201,108,100,101,4,4,59,69,70,84,5668,5670,5677,5688,1,8764,113,117,97,108,59,1,8771,117,108,108,69,113,117,97,108,59,1,8773,105,108,100,101,59,1,8776,112,102,59,3,55349,56651,105,112,108,101,68,111,116,59,1,8411,4,2,99,116,5717,5722,114,59,3,55349,56495,114,111,107,59,1,358,4,14,97,98,99,100,102,103,109,110,111,112,114,115,116,117,5758,5789,5805,5823,5830,5835,5846,5852,5921,5937,6089,6095,6101,6108,4,2,99,114,5764,5774,117,116,101,5,218,1,59,5772,1,218,114,4,2,59,111,5781,5783,1,8607,99,105,114,59,1,10569,114,4,2,99,101,5796,5800,121,59,1,1038,118,101,59,1,364,4,2,105,121,5811,5820,114,99,5,219,1,59,5818,1,219,59,1,1059,98,108,97,99,59,1,368,114,59,3,55349,56600,114,97,118,101,5,217,1,59,5844,1,217,97,99,114,59,1,362,4,2,100,105,5858,5905,101,114,4,2,66,80,5866,5892,4,2,97,114,5872,5876,114,59,1,95,97,99,4,2,101,107,5884,5887,59,1,9183,101,116,59,1,9141,97,114,101,110,116,104,101,115,105,115,59,1,9181,111,110,4,2,59,80,5913,5915,1,8899,108,117,115,59,1,8846,4,2,103,112,5927,5932,111,110,59,1,370,102,59,3,55349,56652,4,8,65,68,69,84,97,100,112,115,5955,5985,5996,6009,6026,6033,6044,6075,114,114,111,119,4,3,59,66,68,5967,5969,5974,1,8593,97,114,59,1,10514,111,119,110,65,114,114,111,119,59,1,8645,111,119,110,65,114,114,111,119,59,1,8597,113,117,105,108,105,98,114,105,117,109,59,1,10606,101,101,4,2,59,65,6017,6019,1,8869,114,114,111,119,59,1,8613,114,114,111,119,59,1,8657,111,119,110,97,114,114,111,119,59,1,8661,101,114,4,2,76,82,6052,6063,101,102,116,65,114,114,111,119,59,1,8598,105,103,104,116,65,114,114,111,119,59,1,8599,105,4,2,59,108,6082,6084,1,978,111,110,59,1,933,105,110,103,59,1,366,99,114,59,3,55349,56496,105,108,100,101,59,1,360,109,108,5,220,1,59,6115,1,220,4,9,68,98,99,100,101,102,111,115,118,6137,6143,6148,6152,6166,6250,6255,6261,6267,97,115,104,59,1,8875,97,114,59,1,10987,121,59,1,1042,97,115,104,4,2,59,108,6161,6163,1,8873,59,1,10982,4,2,101,114,6172,6175,59,1,8897,4,3,98,116,121,6183,6188,6238,97,114,59,1,8214,4,2,59,105,6194,6196,1,8214,99,97,108,4,4,66,76,83,84,6209,6214,6220,6231,97,114,59,1,8739,105,110,101,59,1,124,101,112,97,114,97,116,111,114,59,1,10072,105,108,100,101,59,1,8768,84,104,105,110,83,112,97,99,101,59,1,8202,114,59,3,55349,56601,112,102,59,3,55349,56653,99,114,59,3,55349,56497,100,97,115,104,59,1,8874,4,5,99,101,102,111,115,6286,6292,6298,6303,6309,105,114,99,59,1,372,100,103,101,59,1,8896,114,59,3,55349,56602,112,102,59,3,55349,56654,99,114,59,3,55349,56498,4,4,102,105,111,115,6325,6330,6333,6339,114,59,3,55349,56603,59,1,926,112,102,59,3,55349,56655,99,114,59,3,55349,56499,4,9,65,73,85,97,99,102,111,115,117,6365,6370,6375,6380,6391,6405,6410,6416,6422,99,121,59,1,1071,99,121,59,1,1031,99,121,59,1,1070,99,117,116,101,5,221,1,59,6389,1,221,4,2,105,121,6397,6402,114,99,59,1,374,59,1,1067,114,59,3,55349,56604,112,102,59,3,55349,56656,99,114,59,3,55349,56500,109,108,59,1,376,4,8,72,97,99,100,101,102,111,115,6445,6450,6457,6472,6477,6501,6505,6510,99,121,59,1,1046,99,117,116,101,59,1,377,4,2,97,121,6463,6469,114,111,110,59,1,381,59,1,1047,111,116,59,1,379,4,2,114,116,6483,6497,111,87,105,100,116,104,83,112,97,99,101,59,1,8203,97,59,1,918,114,59,1,8488,112,102,59,1,8484,99,114,59,3,55349,56501,4,16,97,98,99,101,102,103,108,109,110,111,112,114,115,116,117,119,6550,6561,6568,6612,6622,6634,6645,6672,6699,6854,6870,6923,6933,6963,6974,6983,99,117,116,101,5,225,1,59,6559,1,225,114,101,118,101,59,1,259,4,6,59,69,100,105,117,121,6582,6584,6588,6591,6600,6609,1,8766,59,3,8766,819,59,1,8767,114,99,5,226,1,59,6598,1,226,116,101,5,180,1,59,6607,1,180,59,1,1072,108,105,103,5,230,1,59,6620,1,230,4,2,59,114,6628,6630,1,8289,59,3,55349,56606,114,97,118,101,5,224,1,59,6643,1,224,4,2,101,112,6651,6667,4,2,102,112,6657,6663,115,121,109,59,1,8501,104,59,1,8501,104,97,59,1,945,4,2,97,112,6678,6692,4,2,99,108,6684,6688,114,59,1,257,103,59,1,10815,5,38,1,59,6697,1,38,4,2,100,103,6705,6737,4,5,59,97,100,115,118,6717,6719,6724,6727,6734,1,8743,110,100,59,1,10837,59,1,10844,108,111,112,101,59,1,10840,59,1,10842,4,7,59,101,108,109,114,115,122,6753,6755,6758,6762,6814,6835,6848,1,8736,59,1,10660,101,59,1,8736,115,100,4,2,59,97,6770,6772,1,8737,4,8,97,98,99,100,101,102,103,104,6790,6793,6796,6799,6802,6805,6808,6811,59,1,10664,59,1,10665,59,1,10666,59,1,10667,59,1,10668,59,1,10669,59,1,10670,59,1,10671,116,4,2,59,118,6821,6823,1,8735,98,4,2,59,100,6830,6832,1,8894,59,1,10653,4,2,112,116,6841,6845,104,59,1,8738,59,1,197,97,114,114,59,1,9084,4,2,103,112,6860,6865,111,110,59,1,261,102,59,3,55349,56658,4,7,59,69,97,101,105,111,112,6886,6888,6891,6897,6900,6904,6908,1,8776,59,1,10864,99,105,114,59,1,10863,59,1,8778,100,59,1,8779,115,59,1,39,114,111,120,4,2,59,101,6917,6919,1,8776,113,59,1,8778,105,110,103,5,229,1,59,6931,1,229,4,3,99,116,121,6941,6946,6949,114,59,3,55349,56502,59,1,42,109,112,4,2,59,101,6957,6959,1,8776,113,59,1,8781,105,108,100,101,5,227,1,59,6972,1,227,109,108,5,228,1,59,6981,1,228,4,2,99,105,6989,6997,111,110,105,110,116,59,1,8755,110,116,59,1,10769,4,16,78,97,98,99,100,101,102,105,107,108,110,111,112,114,115,117,7036,7041,7119,7135,7149,7155,7219,7224,7347,7354,7463,7489,7786,7793,7814,7866,111,116,59,1,10989,4,2,99,114,7047,7094,107,4,4,99,101,112,115,7058,7064,7073,7080,111,110,103,59,1,8780,112,115,105,108,111,110,59,1,1014,114,105,109,101,59,1,8245,105,109,4,2,59,101,7088,7090,1,8765,113,59,1,8909,4,2,118,119,7100,7105,101,101,59,1,8893,101,100,4,2,59,103,7113,7115,1,8965,101,59,1,8965,114,107,4,2,59,116,7127,7129,1,9141,98,114,107,59,1,9142,4,2,111,121,7141,7146,110,103,59,1,8780,59,1,1073,113,117,111,59,1,8222,4,5,99,109,112,114,116,7167,7181,7188,7193,7199,97,117,115,4,2,59,101,7176,7178,1,8757,59,1,8757,112,116,121,118,59,1,10672,115,105,59,1,1014,110,111,117,59,1,8492,4,3,97,104,119,7207,7210,7213,59,1,946,59,1,8502,101,101,110,59,1,8812,114,59,3,55349,56607,103,4,7,99,111,115,116,117,118,119,7241,7262,7288,7305,7328,7335,7340,4,3,97,105,117,7249,7253,7258,112,59,1,8898,114,99,59,1,9711,112,59,1,8899,4,3,100,112,116,7270,7275,7281,111,116,59,1,10752,108,117,115,59,1,10753,105,109,101,115,59,1,10754,4,2,113,116,7294,7300,99,117,112,59,1,10758,97,114,59,1,9733,114,105,97,110,103,108,101,4,2,100,117,7318,7324,111,119,110,59,1,9661,112,59,1,9651,112,108,117,115,59,1,10756,101,101,59,1,8897,101,100,103,101,59,1,8896,97,114,111,119,59,1,10509,4,3,97,107,111,7362,7436,7458,4,2,99,110,7368,7432,107,4,3,108,115,116,7377,7386,7394,111,122,101,110,103,101,59,1,10731,113,117,97,114,101,59,1,9642,114,105,97,110,103,108,101,4,4,59,100,108,114,7411,7413,7419,7425,1,9652,111,119,110,59,1,9662,101,102,116,59,1,9666,105,103,104,116,59,1,9656,107,59,1,9251,4,2,49,51,7442,7454,4,2,50,52,7448,7451,59,1,9618,59,1,9617,52,59,1,9619,99,107,59,1,9608,4,2,101,111,7469,7485,4,2,59,113,7475,7478,3,61,8421,117,105,118,59,3,8801,8421,116,59,1,8976,4,4,112,116,119,120,7499,7504,7517,7523,102,59,3,55349,56659,4,2,59,116,7510,7512,1,8869,111,109,59,1,8869,116,105,101,59,1,8904,4,12,68,72,85,86,98,100,104,109,112,116,117,118,7549,7571,7597,7619,7655,7660,7682,7708,7715,7721,7728,7750,4,4,76,82,108,114,7559,7562,7565,7568,59,1,9559,59,1,9556,59,1,9558,59,1,9555,4,5,59,68,85,100,117,7583,7585,7588,7591,7594,1,9552,59,1,9574,59,1,9577,59,1,9572,59,1,9575,4,4,76,82,108,114,7607,7610,7613,7616,59,1,9565,59,1,9562,59,1,9564,59,1,9561,4,7,59,72,76,82,104,108,114,7635,7637,7640,7643,7646,7649,7652,1,9553,59,1,9580,59,1,9571,59,1,9568,59,1,9579,59,1,9570,59,1,9567,111,120,59,1,10697,4,4,76,82,108,114,7670,7673,7676,7679,59,1,9557,59,1,9554,59,1,9488,59,1,9484,4,5,59,68,85,100,117,7694,7696,7699,7702,7705,1,9472,59,1,9573,59,1,9576,59,1,9516,59,1,9524,105,110,117,115,59,1,8863,108,117,115,59,1,8862,105,109,101,115,59,1,8864,4,4,76,82,108,114,7738,7741,7744,7747,59,1,9563,59,1,9560,59,1,9496,59,1,9492,4,7,59,72,76,82,104,108,114,7766,7768,7771,7774,7777,7780,7783,1,9474,59,1,9578,59,1,9569,59,1,9566,59,1,9532,59,1,9508,59,1,9500,114,105,109,101,59,1,8245,4,2,101,118,7799,7804,118,101,59,1,728,98,97,114,5,166,1,59,7812,1,166,4,4,99,101,105,111,7824,7829,7834,7846,114,59,3,55349,56503,109,105,59,1,8271,109,4,2,59,101,7841,7843,1,8765,59,1,8909,108,4,3,59,98,104,7855,7857,7860,1,92,59,1,10693,115,117,98,59,1,10184,4,2,108,109,7872,7885,108,4,2,59,101,7879,7881,1,8226,116,59,1,8226,112,4,3,59,69,101,7894,7896,7899,1,8782,59,1,10926,4,2,59,113,7905,7907,1,8783,59,1,8783,4,15,97,99,100,101,102,104,105,108,111,114,115,116,117,119,121,7942,8021,8075,8080,8121,8126,8157,8279,8295,8430,8446,8485,8491,8707,8726,4,3,99,112,114,7950,7956,8007,117,116,101,59,1,263,4,6,59,97,98,99,100,115,7970,7972,7977,7984,7998,8003,1,8745,110,100,59,1,10820,114,99,117,112,59,1,10825,4,2,97,117,7990,7994,112,59,1,10827,112,59,1,10823,111,116,59,1,10816,59,3,8745,65024,4,2,101,111,8013,8017,116,59,1,8257,110,59,1,711,4,4,97,101,105,117,8031,8046,8056,8061,4,2,112,114,8037,8041,115,59,1,10829,111,110,59,1,269,100,105,108,5,231,1,59,8054,1,231,114,99,59,1,265,112,115,4,2,59,115,8069,8071,1,10828,109,59,1,10832,111,116,59,1,267,4,3,100,109,110,8088,8097,8104,105,108,5,184,1,59,8095,1,184,112,116,121,118,59,1,10674,116,5,162,2,59,101,8112,8114,1,162,114,100,111,116,59,1,183,114,59,3,55349,56608,4,3,99,101,105,8134,8138,8154,121,59,1,1095,99,107,4,2,59,109,8146,8148,1,10003,97,114,107,59,1,10003,59,1,967,114,4,7,59,69,99,101,102,109,115,8174,8176,8179,8258,8261,8268,8273,1,9675,59,1,10691,4,3,59,101,108,8187,8189,8193,1,710,113,59,1,8791,101,4,2,97,100,8200,8223,114,114,111,119,4,2,108,114,8210,8216,101,102,116,59,1,8634,105,103,104,116,59,1,8635,4,5,82,83,97,99,100,8235,8238,8241,8246,8252,59,1,174,59,1,9416,115,116,59,1,8859,105,114,99,59,1,8858,97,115,104,59,1,8861,59,1,8791,110,105,110,116,59,1,10768,105,100,59,1,10991,99,105,114,59,1,10690,117,98,115,4,2,59,117,8288,8290,1,9827,105,116,59,1,9827,4,4,108,109,110,112,8305,8326,8376,8400,111,110,4,2,59,101,8313,8315,1,58,4,2,59,113,8321,8323,1,8788,59,1,8788,4,2,109,112,8332,8344,97,4,2,59,116,8339,8341,1,44,59,1,64,4,3,59,102,108,8352,8354,8358,1,8705,110,59,1,8728,101,4,2,109,120,8365,8371,101,110,116,59,1,8705,101,115,59,1,8450,4,2,103,105,8382,8395,4,2,59,100,8388,8390,1,8773,111,116,59,1,10861,110,116,59,1,8750,4,3,102,114,121,8408,8412,8417,59,3,55349,56660,111,100,59,1,8720,5,169,2,59,115,8424,8426,1,169,114,59,1,8471,4,2,97,111,8436,8441,114,114,59,1,8629,115,115,59,1,10007,4,2,99,117,8452,8457,114,59,3,55349,56504,4,2,98,112,8463,8474,4,2,59,101,8469,8471,1,10959,59,1,10961,4,2,59,101,8480,8482,1,10960,59,1,10962,100,111,116,59,1,8943,4,7,100,101,108,112,114,118,119,8507,8522,8536,8550,8600,8697,8702,97,114,114,4,2,108,114,8516,8519,59,1,10552,59,1,10549,4,2,112,115,8528,8532,114,59,1,8926,99,59,1,8927,97,114,114,4,2,59,112,8545,8547,1,8630,59,1,10557,4,6,59,98,99,100,111,115,8564,8566,8573,8587,8592,8596,1,8746,114,99,97,112,59,1,10824,4,2,97,117,8579,8583,112,59,1,10822,112,59,1,10826,111,116,59,1,8845,114,59,1,10821,59,3,8746,65024,4,4,97,108,114,118,8610,8623,8663,8672,114,114,4,2,59,109,8618,8620,1,8631,59,1,10556,121,4,3,101,118,119,8632,8651,8656,113,4,2,112,115,8639,8645,114,101,99,59,1,8926,117,99,99,59,1,8927,101,101,59,1,8910,101,100,103,101,59,1,8911,101,110,5,164,1,59,8670,1,164,101,97,114,114,111,119,4,2,108,114,8684,8690,101,102,116,59,1,8630,105,103,104,116,59,1,8631,101,101,59,1,8910,101,100,59,1,8911,4,2,99,105,8713,8721,111,110,105,110,116,59,1,8754,110,116,59,1,8753,108,99,116,121,59,1,9005,4,19,65,72,97,98,99,100,101,102,104,105,106,108,111,114,115,116,117,119,122,8773,8778,8783,8821,8839,8854,8887,8914,8930,8944,9036,9041,9058,9197,9227,9258,9281,9297,9305,114,114,59,1,8659,97,114,59,1,10597,4,4,103,108,114,115,8793,8799,8805,8809,103,101,114,59,1,8224,101,116,104,59,1,8504,114,59,1,8595,104,4,2,59,118,8816,8818,1,8208,59,1,8867,4,2,107,108,8827,8834,97,114,111,119,59,1,10511,97,99,59,1,733,4,2,97,121,8845,8851,114,111,110,59,1,271,59,1,1076,4,3,59,97,111,8862,8864,8880,1,8518,4,2,103,114,8870,8876,103,101,114,59,1,8225,114,59,1,8650,116,115,101,113,59,1,10871,4,3,103,108,109,8895,8902,8907,5,176,1,59,8900,1,176,116,97,59,1,948,112,116,121,118,59,1,10673,4,2,105,114,8920,8926,115,104,116,59,1,10623,59,3,55349,56609,97,114,4,2,108,114,8938,8941,59,1,8643,59,1,8642,4,5,97,101,103,115,118,8956,8986,8989,8996,9001,109,4,3,59,111,115,8965,8967,8983,1,8900,110,100,4,2,59,115,8975,8977,1,8900,117,105,116,59,1,9830,59,1,9830,59,1,168,97,109,109,97,59,1,989,105,110,59,1,8946,4,3,59,105,111,9009,9011,9031,1,247,100,101,5,247,2,59,111,9020,9022,1,247,110,116,105,109,101,115,59,1,8903,110,120,59,1,8903,99,121,59,1,1106,99,4,2,111,114,9048,9053,114,110,59,1,8990,111,112,59,1,8973,4,5,108,112,116,117,119,9070,9076,9081,9130,9144,108,97,114,59,1,36,102,59,3,55349,56661,4,5,59,101,109,112,115,9093,9095,9109,9116,9122,1,729,113,4,2,59,100,9102,9104,1,8784,111,116,59,1,8785,105,110,117,115,59,1,8760,108,117,115,59,1,8724,113,117,97,114,101,59,1,8865,98,108,101,98,97,114,119,101,100,103,101,59,1,8966,110,4,3,97,100,104,9153,9160,9172,114,114,111,119,59,1,8595,111,119,110,97,114,114,111,119,115,59,1,8650,97,114,112,111,111,110,4,2,108,114,9184,9190,101,102,116,59,1,8643,105,103,104,116,59,1,8642,4,2,98,99,9203,9211,107,97,114,111,119,59,1,10512,4,2,111,114,9217,9222,114,110,59,1,8991,111,112,59,1,8972,4,3,99,111,116,9235,9248,9252,4,2,114,121,9241,9245,59,3,55349,56505,59,1,1109,108,59,1,10742,114,111,107,59,1,273,4,2,100,114,9264,9269,111,116,59,1,8945,105,4,2,59,102,9276,9278,1,9663,59,1,9662,4,2,97,104,9287,9292,114,114,59,1,8693,97,114,59,1,10607,97,110,103,108,101,59,1,10662,4,2,99,105,9311,9315,121,59,1,1119,103,114,97,114,114,59,1,10239,4,18,68,97,99,100,101,102,103,108,109,110,111,112,113,114,115,116,117,120,9361,9376,9398,9439,9444,9447,9462,9495,9531,9585,9598,9614,9659,9755,9771,9792,9808,9826,4,2,68,111,9367,9372,111,116,59,1,10871,116,59,1,8785,4,2,99,115,9382,9392,117,116,101,5,233,1,59,9390,1,233,116,101,114,59,1,10862,4,4,97,105,111,121,9408,9414,9430,9436,114,111,110,59,1,283,114,4,2,59,99,9421,9423,1,8790,5,234,1,59,9428,1,234,108,111,110,59,1,8789,59,1,1101,111,116,59,1,279,59,1,8519,4,2,68,114,9453,9458,111,116,59,1,8786,59,3,55349,56610,4,3,59,114,115,9470,9472,9482,1,10906,97,118,101,5,232,1,59,9480,1,232,4,2,59,100,9488,9490,1,10902,111,116,59,1,10904,4,4,59,105,108,115,9505,9507,9515,9518,1,10905,110,116,101,114,115,59,1,9191,59,1,8467,4,2,59,100,9524,9526,1,10901,111,116,59,1,10903,4,3,97,112,115,9539,9544,9564,99,114,59,1,275,116,121,4,3,59,115,118,9554,9556,9561,1,8709,101,116,59,1,8709,59,1,8709,112,4,2,49,59,9571,9583,4,2,51,52,9577,9580,59,1,8196,59,1,8197,1,8195,4,2,103,115,9591,9594,59,1,331,112,59,1,8194,4,2,103,112,9604,9609,111,110,59,1,281,102,59,3,55349,56662,4,3,97,108,115,9622,9635,9640,114,4,2,59,115,9629,9631,1,8917,108,59,1,10723,117,115,59,1,10865,105,4,3,59,108,118,9649,9651,9656,1,949,111,110,59,1,949,59,1,1013,4,4,99,115,117,118,9669,9686,9716,9747,4,2,105,111,9675,9680,114,99,59,1,8790,108,111,110,59,1,8789,4,2,105,108,9692,9696,109,59,1,8770,97,110,116,4,2,103,108,9705,9710,116,114,59,1,10902,101,115,115,59,1,10901,4,3,97,101,105,9724,9729,9734,108,115,59,1,61,115,116,59,1,8799,118,4,2,59,68,9741,9743,1,8801,68,59,1,10872,112,97,114,115,108,59,1,10725,4,2,68,97,9761,9766,111,116,59,1,8787,114,114,59,1,10609,4,3,99,100,105,9779,9783,9788,114,59,1,8495,111,116,59,1,8784,109,59,1,8770,4,2,97,104,9798,9801,59,1,951,5,240,1,59,9806,1,240,4,2,109,114,9814,9822,108,5,235,1,59,9820,1,235,111,59,1,8364,4,3,99,105,112,9834,9838,9843,108,59,1,33,115,116,59,1,8707,4,2,101,111,9849,9859,99,116,97,116,105,111,110,59,1,8496,110,101,110,116,105,97,108,101,59,1,8519,4,12,97,99,101,102,105,106,108,110,111,112,114,115,9896,9910,9914,9921,9954,9960,9967,9989,9994,10027,10036,10164,108,108,105,110,103,100,111,116,115,101,113,59,1,8786,121,59,1,1092,109,97,108,101,59,1,9792,4,3,105,108,114,9929,9935,9950,108,105,103,59,1,64259,4,2,105,108,9941,9945,103,59,1,64256,105,103,59,1,64260,59,3,55349,56611,108,105,103,59,1,64257,108,105,103,59,3,102,106,4,3,97,108,116,9975,9979,9984,116,59,1,9837,105,103,59,1,64258,110,115,59,1,9649,111,102,59,1,402,4,2,112,114,1e4,10005,102,59,3,55349,56663,4,2,97,107,10011,10016,108,108,59,1,8704,4,2,59,118,10022,10024,1,8916,59,1,10969,97,114,116,105,110,116,59,1,10765,4,2,97,111,10042,10159,4,2,99,115,10048,10155,4,6,49,50,51,52,53,55,10062,10102,10114,10135,10139,10151,4,6,50,51,52,53,54,56,10076,10083,10086,10093,10096,10099,5,189,1,59,10081,1,189,59,1,8531,5,188,1,59,10091,1,188,59,1,8533,59,1,8537,59,1,8539,4,2,51,53,10108,10111,59,1,8532,59,1,8534,4,3,52,53,56,10122,10129,10132,5,190,1,59,10127,1,190,59,1,8535,59,1,8540,53,59,1,8536,4,2,54,56,10145,10148,59,1,8538,59,1,8541,56,59,1,8542,108,59,1,8260,119,110,59,1,8994,99,114,59,3,55349,56507,4,17,69,97,98,99,100,101,102,103,105,106,108,110,111,114,115,116,118,10206,10217,10247,10254,10268,10273,10358,10363,10374,10380,10385,10406,10458,10464,10470,10497,10610,4,2,59,108,10212,10214,1,8807,59,1,10892,4,3,99,109,112,10225,10231,10244,117,116,101,59,1,501,109,97,4,2,59,100,10239,10241,1,947,59,1,989,59,1,10886,114,101,118,101,59,1,287,4,2,105,121,10260,10265,114,99,59,1,285,59,1,1075,111,116,59,1,289,4,4,59,108,113,115,10283,10285,10288,10308,1,8805,59,1,8923,4,3,59,113,115,10296,10298,10301,1,8805,59,1,8807,108,97,110,116,59,1,10878,4,4,59,99,100,108,10318,10320,10324,10345,1,10878,99,59,1,10921,111,116,4,2,59,111,10332,10334,1,10880,4,2,59,108,10340,10342,1,10882,59,1,10884,4,2,59,101,10351,10354,3,8923,65024,115,59,1,10900,114,59,3,55349,56612,4,2,59,103,10369,10371,1,8811,59,1,8921,109,101,108,59,1,8503,99,121,59,1,1107,4,4,59,69,97,106,10395,10397,10400,10403,1,8823,59,1,10898,59,1,10917,59,1,10916,4,4,69,97,101,115,10416,10419,10434,10453,59,1,8809,112,4,2,59,112,10426,10428,1,10890,114,111,120,59,1,10890,4,2,59,113,10440,10442,1,10888,4,2,59,113,10448,10450,1,10888,59,1,8809,105,109,59,1,8935,112,102,59,3,55349,56664,97,118,101,59,1,96,4,2,99,105,10476,10480,114,59,1,8458,109,4,3,59,101,108,10489,10491,10494,1,8819,59,1,10894,59,1,10896,5,62,6,59,99,100,108,113,114,10512,10514,10527,10532,10538,10545,1,62,4,2,99,105,10520,10523,59,1,10919,114,59,1,10874,111,116,59,1,8919,80,97,114,59,1,10645,117,101,115,116,59,1,10876,4,5,97,100,101,108,115,10557,10574,10579,10599,10605,4,2,112,114,10563,10570,112,114,111,120,59,1,10886,114,59,1,10616,111,116,59,1,8919,113,4,2,108,113,10586,10592,101,115,115,59,1,8923,108,101,115,115,59,1,10892,101,115,115,59,1,8823,105,109,59,1,8819,4,2,101,110,10616,10626,114,116,110,101,113,113,59,3,8809,65024,69,59,3,8809,65024,4,10,65,97,98,99,101,102,107,111,115,121,10653,10658,10713,10718,10724,10760,10765,10786,10850,10875,114,114,59,1,8660,4,4,105,108,109,114,10668,10674,10678,10684,114,115,112,59,1,8202,102,59,1,189,105,108,116,59,1,8459,4,2,100,114,10690,10695,99,121,59,1,1098,4,3,59,99,119,10703,10705,10710,1,8596,105,114,59,1,10568,59,1,8621,97,114,59,1,8463,105,114,99,59,1,293,4,3,97,108,114,10732,10748,10754,114,116,115,4,2,59,117,10741,10743,1,9829,105,116,59,1,9829,108,105,112,59,1,8230,99,111,110,59,1,8889,114,59,3,55349,56613,115,4,2,101,119,10772,10779,97,114,111,119,59,1,10533,97,114,111,119,59,1,10534,4,5,97,109,111,112,114,10798,10803,10809,10839,10844,114,114,59,1,8703,116,104,116,59,1,8763,107,4,2,108,114,10816,10827,101,102,116,97,114,114,111,119,59,1,8617,105,103,104,116,97,114,114,111,119,59,1,8618,102,59,3,55349,56665,98,97,114,59,1,8213,4,3,99,108,116,10858,10863,10869,114,59,3,55349,56509,97,115,104,59,1,8463,114,111,107,59,1,295,4,2,98,112,10881,10887,117,108,108,59,1,8259,104,101,110,59,1,8208,4,15,97,99,101,102,103,105,106,109,110,111,112,113,115,116,117,10925,10936,10958,10977,10990,11001,11039,11045,11101,11192,11220,11226,11237,11285,11299,99,117,116,101,5,237,1,59,10934,1,237,4,3,59,105,121,10944,10946,10955,1,8291,114,99,5,238,1,59,10953,1,238,59,1,1080,4,2,99,120,10964,10968,121,59,1,1077,99,108,5,161,1,59,10975,1,161,4,2,102,114,10983,10986,59,1,8660,59,3,55349,56614,114,97,118,101,5,236,1,59,10999,1,236,4,4,59,105,110,111,11011,11013,11028,11034,1,8520,4,2,105,110,11019,11024,110,116,59,1,10764,116,59,1,8749,102,105,110,59,1,10716,116,97,59,1,8489,108,105,103,59,1,307,4,3,97,111,112,11053,11092,11096,4,3,99,103,116,11061,11065,11088,114,59,1,299,4,3,101,108,112,11073,11076,11082,59,1,8465,105,110,101,59,1,8464,97,114,116,59,1,8465,104,59,1,305,102,59,1,8887,101,100,59,1,437,4,5,59,99,102,111,116,11113,11115,11121,11136,11142,1,8712,97,114,101,59,1,8453,105,110,4,2,59,116,11129,11131,1,8734,105,101,59,1,10717,100,111,116,59,1,305,4,5,59,99,101,108,112,11154,11156,11161,11179,11186,1,8747,97,108,59,1,8890,4,2,103,114,11167,11173,101,114,115,59,1,8484,99,97,108,59,1,8890,97,114,104,107,59,1,10775,114,111,100,59,1,10812,4,4,99,103,112,116,11202,11206,11211,11216,121,59,1,1105,111,110,59,1,303,102,59,3,55349,56666,97,59,1,953,114,111,100,59,1,10812,117,101,115,116,5,191,1,59,11235,1,191,4,2,99,105,11243,11248,114,59,3,55349,56510,110,4,5,59,69,100,115,118,11261,11263,11266,11271,11282,1,8712,59,1,8953,111,116,59,1,8949,4,2,59,118,11277,11279,1,8948,59,1,8947,59,1,8712,4,2,59,105,11291,11293,1,8290,108,100,101,59,1,297,4,2,107,109,11305,11310,99,121,59,1,1110,108,5,239,1,59,11316,1,239,4,6,99,102,109,111,115,117,11332,11346,11351,11357,11363,11380,4,2,105,121,11338,11343,114,99,59,1,309,59,1,1081,114,59,3,55349,56615,97,116,104,59,1,567,112,102,59,3,55349,56667,4,2,99,101,11369,11374,114,59,3,55349,56511,114,99,121,59,1,1112,107,99,121,59,1,1108,4,8,97,99,102,103,104,106,111,115,11404,11418,11433,11438,11445,11450,11455,11461,112,112,97,4,2,59,118,11413,11415,1,954,59,1,1008,4,2,101,121,11424,11430,100,105,108,59,1,311,59,1,1082,114,59,3,55349,56616,114,101,101,110,59,1,312,99,121,59,1,1093,99,121,59,1,1116,112,102,59,3,55349,56668,99,114,59,3,55349,56512,4,23,65,66,69,72,97,98,99,100,101,102,103,104,106,108,109,110,111,112,114,115,116,117,118,11515,11538,11544,11555,11560,11721,11780,11818,11868,12136,12160,12171,12203,12208,12246,12275,12327,12509,12523,12569,12641,12732,12752,4,3,97,114,116,11523,11528,11532,114,114,59,1,8666,114,59,1,8656,97,105,108,59,1,10523,97,114,114,59,1,10510,4,2,59,103,11550,11552,1,8806,59,1,10891,97,114,59,1,10594,4,9,99,101,103,109,110,112,113,114,116,11580,11586,11594,11600,11606,11624,11627,11636,11694,117,116,101,59,1,314,109,112,116,121,118,59,1,10676,114,97,110,59,1,8466,98,100,97,59,1,955,103,4,3,59,100,108,11615,11617,11620,1,10216,59,1,10641,101,59,1,10216,59,1,10885,117,111,5,171,1,59,11634,1,171,114,4,8,59,98,102,104,108,112,115,116,11655,11657,11669,11673,11677,11681,11685,11690,1,8592,4,2,59,102,11663,11665,1,8676,115,59,1,10527,115,59,1,10525,107,59,1,8617,112,59,1,8619,108,59,1,10553,105,109,59,1,10611,108,59,1,8610,4,3,59,97,101,11702,11704,11709,1,10923,105,108,59,1,10521,4,2,59,115,11715,11717,1,10925,59,3,10925,65024,4,3,97,98,114,11729,11734,11739,114,114,59,1,10508,114,107,59,1,10098,4,2,97,107,11745,11758,99,4,2,101,107,11752,11755,59,1,123,59,1,91,4,2,101,115,11764,11767,59,1,10635,108,4,2,100,117,11774,11777,59,1,10639,59,1,10637,4,4,97,101,117,121,11790,11796,11811,11815,114,111,110,59,1,318,4,2,100,105,11802,11807,105,108,59,1,316,108,59,1,8968,98,59,1,123,59,1,1083,4,4,99,113,114,115,11828,11832,11845,11864,97,59,1,10550,117,111,4,2,59,114,11840,11842,1,8220,59,1,8222,4,2,100,117,11851,11857,104,97,114,59,1,10599,115,104,97,114,59,1,10571,104,59,1,8626,4,5,59,102,103,113,115,11880,11882,12008,12011,12031,1,8804,116,4,5,97,104,108,114,116,11895,11913,11935,11947,11996,114,114,111,119,4,2,59,116,11905,11907,1,8592,97,105,108,59,1,8610,97,114,112,111,111,110,4,2,100,117,11925,11931,111,119,110,59,1,8637,112,59,1,8636,101,102,116,97,114,114,111,119,115,59,1,8647,105,103,104,116,4,3,97,104,115,11959,11974,11984,114,114,111,119,4,2,59,115,11969,11971,1,8596,59,1,8646,97,114,112,111,111,110,115,59,1,8651,113,117,105,103,97,114,114,111,119,59,1,8621,104,114,101,101,116,105,109,101,115,59,1,8907,59,1,8922,4,3,59,113,115,12019,12021,12024,1,8804,59,1,8806,108,97,110,116,59,1,10877,4,5,59,99,100,103,115,12043,12045,12049,12070,12083,1,10877,99,59,1,10920,111,116,4,2,59,111,12057,12059,1,10879,4,2,59,114,12065,12067,1,10881,59,1,10883,4,2,59,101,12076,12079,3,8922,65024,115,59,1,10899,4,5,97,100,101,103,115,12095,12103,12108,12126,12131,112,112,114,111,120,59,1,10885,111,116,59,1,8918,113,4,2,103,113,12115,12120,116,114,59,1,8922,103,116,114,59,1,10891,116,114,59,1,8822,105,109,59,1,8818,4,3,105,108,114,12144,12150,12156,115,104,116,59,1,10620,111,111,114,59,1,8970,59,3,55349,56617,4,2,59,69,12166,12168,1,8822,59,1,10897,4,2,97,98,12177,12198,114,4,2,100,117,12184,12187,59,1,8637,4,2,59,108,12193,12195,1,8636,59,1,10602,108,107,59,1,9604,99,121,59,1,1113,4,5,59,97,99,104,116,12220,12222,12227,12235,12241,1,8810,114,114,59,1,8647,111,114,110,101,114,59,1,8990,97,114,100,59,1,10603,114,105,59,1,9722,4,2,105,111,12252,12258,100,111,116,59,1,320,117,115,116,4,2,59,97,12267,12269,1,9136,99,104,101,59,1,9136,4,4,69,97,101,115,12285,12288,12303,12322,59,1,8808,112,4,2,59,112,12295,12297,1,10889,114,111,120,59,1,10889,4,2,59,113,12309,12311,1,10887,4,2,59,113,12317,12319,1,10887,59,1,8808,105,109,59,1,8934,4,8,97,98,110,111,112,116,119,122,12345,12359,12364,12421,12446,12467,12474,12490,4,2,110,114,12351,12355,103,59,1,10220,114,59,1,8701,114,107,59,1,10214,103,4,3,108,109,114,12373,12401,12409,101,102,116,4,2,97,114,12382,12389,114,114,111,119,59,1,10229,105,103,104,116,97,114,114,111,119,59,1,10231,97,112,115,116,111,59,1,10236,105,103,104,116,97,114,114,111,119,59,1,10230,112,97,114,114,111,119,4,2,108,114,12433,12439,101,102,116,59,1,8619,105,103,104,116,59,1,8620,4,3,97,102,108,12454,12458,12462,114,59,1,10629,59,3,55349,56669,117,115,59,1,10797,105,109,101,115,59,1,10804,4,2,97,98,12480,12485,115,116,59,1,8727,97,114,59,1,95,4,3,59,101,102,12498,12500,12506,1,9674,110,103,101,59,1,9674,59,1,10731,97,114,4,2,59,108,12517,12519,1,40,116,59,1,10643,4,5,97,99,104,109,116,12535,12540,12548,12561,12564,114,114,59,1,8646,111,114,110,101,114,59,1,8991,97,114,4,2,59,100,12556,12558,1,8651,59,1,10605,59,1,8206,114,105,59,1,8895,4,6,97,99,104,105,113,116,12583,12589,12594,12597,12614,12635,113,117,111,59,1,8249,114,59,3,55349,56513,59,1,8624,109,4,3,59,101,103,12606,12608,12611,1,8818,59,1,10893,59,1,10895,4,2,98,117,12620,12623,59,1,91,111,4,2,59,114,12630,12632,1,8216,59,1,8218,114,111,107,59,1,322,5,60,8,59,99,100,104,105,108,113,114,12660,12662,12675,12680,12686,12692,12698,12705,1,60,4,2,99,105,12668,12671,59,1,10918,114,59,1,10873,111,116,59,1,8918,114,101,101,59,1,8907,109,101,115,59,1,8905,97,114,114,59,1,10614,117,101,115,116,59,1,10875,4,2,80,105,12711,12716,97,114,59,1,10646,4,3,59,101,102,12724,12726,12729,1,9667,59,1,8884,59,1,9666,114,4,2,100,117,12739,12746,115,104,97,114,59,1,10570,104,97,114,59,1,10598,4,2,101,110,12758,12768,114,116,110,101,113,113,59,3,8808,65024,69,59,3,8808,65024,4,14,68,97,99,100,101,102,104,105,108,110,111,112,115,117,12803,12809,12893,12908,12914,12928,12933,12937,13011,13025,13032,13049,13052,13069,68,111,116,59,1,8762,4,4,99,108,112,114,12819,12827,12849,12887,114,5,175,1,59,12825,1,175,4,2,101,116,12833,12836,59,1,9794,4,2,59,101,12842,12844,1,10016,115,101,59,1,10016,4,2,59,115,12855,12857,1,8614,116,111,4,4,59,100,108,117,12869,12871,12877,12883,1,8614,111,119,110,59,1,8615,101,102,116,59,1,8612,112,59,1,8613,107,101,114,59,1,9646,4,2,111,121,12899,12905,109,109,97,59,1,10793,59,1,1084,97,115,104,59,1,8212,97,115,117,114,101,100,97,110,103,108,101,59,1,8737,114,59,3,55349,56618,111,59,1,8487,4,3,99,100,110,12945,12954,12985,114,111,5,181,1,59,12952,1,181,4,4,59,97,99,100,12964,12966,12971,12976,1,8739,115,116,59,1,42,105,114,59,1,10992,111,116,5,183,1,59,12983,1,183,117,115,4,3,59,98,100,12995,12997,13e3,1,8722,59,1,8863,4,2,59,117,13006,13008,1,8760,59,1,10794,4,2,99,100,13017,13021,112,59,1,10971,114,59,1,8230,112,108,117,115,59,1,8723,4,2,100,112,13038,13044,101,108,115,59,1,8871,102,59,3,55349,56670,59,1,8723,4,2,99,116,13058,13063,114,59,3,55349,56514,112,111,115,59,1,8766,4,3,59,108,109,13077,13079,13087,1,956,116,105,109,97,112,59,1,8888,97,112,59,1,8888,4,24,71,76,82,86,97,98,99,100,101,102,103,104,105,106,108,109,111,112,114,115,116,117,118,119,13142,13165,13217,13229,13247,13330,13359,13414,13420,13508,13513,13579,13602,13626,13631,13762,13767,13855,13936,13995,14214,14285,14312,14432,4,2,103,116,13148,13152,59,3,8921,824,4,2,59,118,13158,13161,3,8811,8402,59,3,8811,824,4,3,101,108,116,13173,13200,13204,102,116,4,2,97,114,13181,13188,114,114,111,119,59,1,8653,105,103,104,116,97,114,114,111,119,59,1,8654,59,3,8920,824,4,2,59,118,13210,13213,3,8810,8402,59,3,8810,824,105,103,104,116,97,114,114,111,119,59,1,8655,4,2,68,100,13235,13241,97,115,104,59,1,8879,97,115,104,59,1,8878,4,5,98,99,110,112,116,13259,13264,13270,13275,13308,108,97,59,1,8711,117,116,101,59,1,324,103,59,3,8736,8402,4,5,59,69,105,111,112,13287,13289,13293,13298,13302,1,8777,59,3,10864,824,100,59,3,8779,824,115,59,1,329,114,111,120,59,1,8777,117,114,4,2,59,97,13316,13318,1,9838,108,4,2,59,115,13325,13327,1,9838,59,1,8469,4,2,115,117,13336,13344,112,5,160,1,59,13342,1,160,109,112,4,2,59,101,13352,13355,3,8782,824,59,3,8783,824,4,5,97,101,111,117,121,13371,13385,13391,13407,13411,4,2,112,114,13377,13380,59,1,10819,111,110,59,1,328,100,105,108,59,1,326,110,103,4,2,59,100,13399,13401,1,8775,111,116,59,3,10861,824,112,59,1,10818,59,1,1085,97,115,104,59,1,8211,4,7,59,65,97,100,113,115,120,13436,13438,13443,13466,13472,13478,13494,1,8800,114,114,59,1,8663,114,4,2,104,114,13450,13454,107,59,1,10532,4,2,59,111,13460,13462,1,8599,119,59,1,8599,111,116,59,3,8784,824,117,105,118,59,1,8802,4,2,101,105,13484,13489,97,114,59,1,10536,109,59,3,8770,824,105,115,116,4,2,59,115,13503,13505,1,8708,59,1,8708,114,59,3,55349,56619,4,4,69,101,115,116,13523,13527,13563,13568,59,3,8807,824,4,3,59,113,115,13535,13537,13559,1,8817,4,3,59,113,115,13545,13547,13551,1,8817,59,3,8807,824,108,97,110,116,59,3,10878,824,59,3,10878,824,105,109,59,1,8821,4,2,59,114,13574,13576,1,8815,59,1,8815,4,3,65,97,112,13587,13592,13597,114,114,59,1,8654,114,114,59,1,8622,97,114,59,1,10994,4,3,59,115,118,13610,13612,13623,1,8715,4,2,59,100,13618,13620,1,8956,59,1,8954,59,1,8715,99,121,59,1,1114,4,7,65,69,97,100,101,115,116,13647,13652,13656,13661,13665,13737,13742,114,114,59,1,8653,59,3,8806,824,114,114,59,1,8602,114,59,1,8229,4,4,59,102,113,115,13675,13677,13703,13725,1,8816,116,4,2,97,114,13684,13691,114,114,111,119,59,1,8602,105,103,104,116,97,114,114,111,119,59,1,8622,4,3,59,113,115,13711,13713,13717,1,8816,59,3,8806,824,108,97,110,116,59,3,10877,824,4,2,59,115,13731,13734,3,10877,824,59,1,8814,105,109,59,1,8820,4,2,59,114,13748,13750,1,8814,105,4,2,59,101,13757,13759,1,8938,59,1,8940,105,100,59,1,8740,4,2,112,116,13773,13778,102,59,3,55349,56671,5,172,3,59,105,110,13787,13789,13829,1,172,110,4,4,59,69,100,118,13800,13802,13806,13812,1,8713,59,3,8953,824,111,116,59,3,8949,824,4,3,97,98,99,13820,13823,13826,59,1,8713,59,1,8951,59,1,8950,105,4,2,59,118,13836,13838,1,8716,4,3,97,98,99,13846,13849,13852,59,1,8716,59,1,8958,59,1,8957,4,3,97,111,114,13863,13892,13899,114,4,4,59,97,115,116,13874,13876,13883,13888,1,8742,108,108,101,108,59,1,8742,108,59,3,11005,8421,59,3,8706,824,108,105,110,116,59,1,10772,4,3,59,99,101,13907,13909,13914,1,8832,117,101,59,1,8928,4,2,59,99,13920,13923,3,10927,824,4,2,59,101,13929,13931,1,8832,113,59,3,10927,824,4,4,65,97,105,116,13946,13951,13971,13982,114,114,59,1,8655,114,114,4,3,59,99,119,13961,13963,13967,1,8603,59,3,10547,824,59,3,8605,824,103,104,116,97,114,114,111,119,59,1,8603,114,105,4,2,59,101,13990,13992,1,8939,59,1,8941,4,7,99,104,105,109,112,113,117,14011,14036,14060,14080,14085,14090,14106,4,4,59,99,101,114,14021,14023,14028,14032,1,8833,117,101,59,1,8929,59,3,10928,824,59,3,55349,56515,111,114,116,4,2,109,112,14045,14050,105,100,59,1,8740,97,114,97,108,108,101,108,59,1,8742,109,4,2,59,101,14067,14069,1,8769,4,2,59,113,14075,14077,1,8772,59,1,8772,105,100,59,1,8740,97,114,59,1,8742,115,117,4,2,98,112,14098,14102,101,59,1,8930,101,59,1,8931,4,3,98,99,112,14114,14157,14171,4,4,59,69,101,115,14124,14126,14130,14133,1,8836,59,3,10949,824,59,1,8840,101,116,4,2,59,101,14141,14144,3,8834,8402,113,4,2,59,113,14151,14153,1,8840,59,3,10949,824,99,4,2,59,101,14164,14166,1,8833,113,59,3,10928,824,4,4,59,69,101,115,14181,14183,14187,14190,1,8837,59,3,10950,824,59,1,8841,101,116,4,2,59,101,14198,14201,3,8835,8402,113,4,2,59,113,14208,14210,1,8841,59,3,10950,824,4,4,103,105,108,114,14224,14228,14238,14242,108,59,1,8825,108,100,101,5,241,1,59,14236,1,241,103,59,1,8824,105,97,110,103,108,101,4,2,108,114,14254,14269,101,102,116,4,2,59,101,14263,14265,1,8938,113,59,1,8940,105,103,104,116,4,2,59,101,14279,14281,1,8939,113,59,1,8941,4,2,59,109,14291,14293,1,957,4,3,59,101,115,14301,14303,14308,1,35,114,111,59,1,8470,112,59,1,8199,4,9,68,72,97,100,103,105,108,114,115,14332,14338,14344,14349,14355,14369,14376,14408,14426,97,115,104,59,1,8877,97,114,114,59,1,10500,112,59,3,8781,8402,97,115,104,59,1,8876,4,2,101,116,14361,14365,59,3,8805,8402,59,3,62,8402,110,102,105,110,59,1,10718,4,3,65,101,116,14384,14389,14393,114,114,59,1,10498,59,3,8804,8402,4,2,59,114,14399,14402,3,60,8402,105,101,59,3,8884,8402,4,2,65,116,14414,14419,114,114,59,1,10499,114,105,101,59,3,8885,8402,105,109,59,3,8764,8402,4,3,65,97,110,14440,14445,14468,114,114,59,1,8662,114,4,2,104,114,14452,14456,107,59,1,10531,4,2,59,111,14462,14464,1,8598,119,59,1,8598,101,97,114,59,1,10535,4,18,83,97,99,100,101,102,103,104,105,108,109,111,112,114,115,116,117,118,14512,14515,14535,14560,14597,14603,14618,14643,14657,14662,14701,14741,14747,14769,14851,14877,14907,14916,59,1,9416,4,2,99,115,14521,14531,117,116,101,5,243,1,59,14529,1,243,116,59,1,8859,4,2,105,121,14541,14557,114,4,2,59,99,14548,14550,1,8858,5,244,1,59,14555,1,244,59,1,1086,4,5,97,98,105,111,115,14572,14577,14583,14587,14591,115,104,59,1,8861,108,97,99,59,1,337,118,59,1,10808,116,59,1,8857,111,108,100,59,1,10684,108,105,103,59,1,339,4,2,99,114,14609,14614,105,114,59,1,10687,59,3,55349,56620,4,3,111,114,116,14626,14630,14640,110,59,1,731,97,118,101,5,242,1,59,14638,1,242,59,1,10689,4,2,98,109,14649,14654,97,114,59,1,10677,59,1,937,110,116,59,1,8750,4,4,97,99,105,116,14672,14677,14693,14698,114,114,59,1,8634,4,2,105,114,14683,14687,114,59,1,10686,111,115,115,59,1,10683,110,101,59,1,8254,59,1,10688,4,3,97,101,105,14709,14714,14719,99,114,59,1,333,103,97,59,1,969,4,3,99,100,110,14727,14733,14736,114,111,110,59,1,959,59,1,10678,117,115,59,1,8854,112,102,59,3,55349,56672,4,3,97,101,108,14755,14759,14764,114,59,1,10679,114,112,59,1,10681,117,115,59,1,8853,4,7,59,97,100,105,111,115,118,14785,14787,14792,14831,14837,14841,14848,1,8744,114,114,59,1,8635,4,4,59,101,102,109,14802,14804,14817,14824,1,10845,114,4,2,59,111,14811,14813,1,8500,102,59,1,8500,5,170,1,59,14822,1,170,5,186,1,59,14829,1,186,103,111,102,59,1,8886,114,59,1,10838,108,111,112,101,59,1,10839,59,1,10843,4,3,99,108,111,14859,14863,14873,114,59,1,8500,97,115,104,5,248,1,59,14871,1,248,108,59,1,8856,105,4,2,108,109,14884,14893,100,101,5,245,1,59,14891,1,245,101,115,4,2,59,97,14901,14903,1,8855,115,59,1,10806,109,108,5,246,1,59,14914,1,246,98,97,114,59,1,9021,4,12,97,99,101,102,104,105,108,109,111,114,115,117,14948,14992,14996,15033,15038,15068,15090,15189,15192,15222,15427,15441,114,4,4,59,97,115,116,14959,14961,14976,14989,1,8741,5,182,2,59,108,14968,14970,1,182,108,101,108,59,1,8741,4,2,105,108,14982,14986,109,59,1,10995,59,1,11005,59,1,8706,121,59,1,1087,114,4,5,99,105,109,112,116,15009,15014,15019,15024,15027,110,116,59,1,37,111,100,59,1,46,105,108,59,1,8240,59,1,8869,101,110,107,59,1,8241,114,59,3,55349,56621,4,3,105,109,111,15046,15057,15063,4,2,59,118,15052,15054,1,966,59,1,981,109,97,116,59,1,8499,110,101,59,1,9742,4,3,59,116,118,15076,15078,15087,1,960,99,104,102,111,114,107,59,1,8916,59,1,982,4,2,97,117,15096,15119,110,4,2,99,107,15103,15115,107,4,2,59,104,15110,15112,1,8463,59,1,8462,118,59,1,8463,115,4,9,59,97,98,99,100,101,109,115,116,15140,15142,15148,15151,15156,15168,15171,15179,15184,1,43,99,105,114,59,1,10787,59,1,8862,105,114,59,1,10786,4,2,111,117,15162,15165,59,1,8724,59,1,10789,59,1,10866,110,5,177,1,59,15177,1,177,105,109,59,1,10790,119,111,59,1,10791,59,1,177,4,3,105,112,117,15200,15208,15213,110,116,105,110,116,59,1,10773,102,59,3,55349,56673,110,100,5,163,1,59,15220,1,163,4,10,59,69,97,99,101,105,110,111,115,117,15244,15246,15249,15253,15258,15334,15347,15367,15416,15421,1,8826,59,1,10931,112,59,1,10935,117,101,59,1,8828,4,2,59,99,15264,15266,1,10927,4,6,59,97,99,101,110,115,15280,15282,15290,15299,15303,15329,1,8826,112,112,114,111,120,59,1,10935,117,114,108,121,101,113,59,1,8828,113,59,1,10927,4,3,97,101,115,15311,15319,15324,112,112,114,111,120,59,1,10937,113,113,59,1,10933,105,109,59,1,8936,105,109,59,1,8830,109,101,4,2,59,115,15342,15344,1,8242,59,1,8473,4,3,69,97,115,15355,15358,15362,59,1,10933,112,59,1,10937,105,109,59,1,8936,4,3,100,102,112,15375,15378,15404,59,1,8719,4,3,97,108,115,15386,15392,15398,108,97,114,59,1,9006,105,110,101,59,1,8978,117,114,102,59,1,8979,4,2,59,116,15410,15412,1,8733,111,59,1,8733,105,109,59,1,8830,114,101,108,59,1,8880,4,2,99,105,15433,15438,114,59,3,55349,56517,59,1,968,110,99,115,112,59,1,8200,4,6,102,105,111,112,115,117,15462,15467,15472,15478,15485,15491,114,59,3,55349,56622,110,116,59,1,10764,112,102,59,3,55349,56674,114,105,109,101,59,1,8279,99,114,59,3,55349,56518,4,3,97,101,111,15499,15520,15534,116,4,2,101,105,15506,15515,114,110,105,111,110,115,59,1,8461,110,116,59,1,10774,115,116,4,2,59,101,15528,15530,1,63,113,59,1,8799,116,5,34,1,59,15540,1,34,4,21,65,66,72,97,98,99,100,101,102,104,105,108,109,110,111,112,114,115,116,117,120,15586,15609,15615,15620,15796,15855,15893,15931,15977,16001,16039,16183,16204,16222,16228,16285,16312,16318,16363,16408,16416,4,3,97,114,116,15594,15599,15603,114,114,59,1,8667,114,59,1,8658,97,105,108,59,1,10524,97,114,114,59,1,10511,97,114,59,1,10596,4,7,99,100,101,110,113,114,116,15636,15651,15656,15664,15687,15696,15770,4,2,101,117,15642,15646,59,3,8765,817,116,101,59,1,341,105,99,59,1,8730,109,112,116,121,118,59,1,10675,103,4,4,59,100,101,108,15675,15677,15680,15683,1,10217,59,1,10642,59,1,10661,101,59,1,10217,117,111,5,187,1,59,15694,1,187,114,4,11,59,97,98,99,102,104,108,112,115,116,119,15721,15723,15727,15739,15742,15746,15750,15754,15758,15763,15767,1,8594,112,59,1,10613,4,2,59,102,15733,15735,1,8677,115,59,1,10528,59,1,10547,115,59,1,10526,107,59,1,8618,112,59,1,8620,108,59,1,10565,105,109,59,1,10612,108,59,1,8611,59,1,8605,4,2,97,105,15776,15781,105,108,59,1,10522,111,4,2,59,110,15788,15790,1,8758,97,108,115,59,1,8474,4,3,97,98,114,15804,15809,15814,114,114,59,1,10509,114,107,59,1,10099,4,2,97,107,15820,15833,99,4,2,101,107,15827,15830,59,1,125,59,1,93,4,2,101,115,15839,15842,59,1,10636,108,4,2,100,117,15849,15852,59,1,10638,59,1,10640,4,4,97,101,117,121,15865,15871,15886,15890,114,111,110,59,1,345,4,2,100,105,15877,15882,105,108,59,1,343,108,59,1,8969,98,59,1,125,59,1,1088,4,4,99,108,113,115,15903,15907,15914,15927,97,59,1,10551,100,104,97,114,59,1,10601,117,111,4,2,59,114,15922,15924,1,8221,59,1,8221,104,59,1,8627,4,3,97,99,103,15939,15966,15970,108,4,4,59,105,112,115,15950,15952,15957,15963,1,8476,110,101,59,1,8475,97,114,116,59,1,8476,59,1,8477,116,59,1,9645,5,174,1,59,15975,1,174,4,3,105,108,114,15985,15991,15997,115,104,116,59,1,10621,111,111,114,59,1,8971,59,3,55349,56623,4,2,97,111,16007,16028,114,4,2,100,117,16014,16017,59,1,8641,4,2,59,108,16023,16025,1,8640,59,1,10604,4,2,59,118,16034,16036,1,961,59,1,1009,4,3,103,110,115,16047,16167,16171,104,116,4,6,97,104,108,114,115,116,16063,16081,16103,16130,16143,16155,114,114,111,119,4,2,59,116,16073,16075,1,8594,97,105,108,59,1,8611,97,114,112,111,111,110,4,2,100,117,16093,16099,111,119,110,59,1,8641,112,59,1,8640,101,102,116,4,2,97,104,16112,16120,114,114,111,119,115,59,1,8644,97,114,112,111,111,110,115,59,1,8652,105,103,104,116,97,114,114,111,119,115,59,1,8649,113,117,105,103,97,114,114,111,119,59,1,8605,104,114,101,101,116,105,109,101,115,59,1,8908,103,59,1,730,105,110,103,100,111,116,115,101,113,59,1,8787,4,3,97,104,109,16191,16196,16201,114,114,59,1,8644,97,114,59,1,8652,59,1,8207,111,117,115,116,4,2,59,97,16214,16216,1,9137,99,104,101,59,1,9137,109,105,100,59,1,10990,4,4,97,98,112,116,16238,16252,16257,16278,4,2,110,114,16244,16248,103,59,1,10221,114,59,1,8702,114,107,59,1,10215,4,3,97,102,108,16265,16269,16273,114,59,1,10630,59,3,55349,56675,117,115,59,1,10798,105,109,101,115,59,1,10805,4,2,97,112,16291,16304,114,4,2,59,103,16298,16300,1,41,116,59,1,10644,111,108,105,110,116,59,1,10770,97,114,114,59,1,8649,4,4,97,99,104,113,16328,16334,16339,16342,113,117,111,59,1,8250,114,59,3,55349,56519,59,1,8625,4,2,98,117,16348,16351,59,1,93,111,4,2,59,114,16358,16360,1,8217,59,1,8217,4,3,104,105,114,16371,16377,16383,114,101,101,59,1,8908,109,101,115,59,1,8906,105,4,4,59,101,102,108,16394,16396,16399,16402,1,9657,59,1,8885,59,1,9656,116,114,105,59,1,10702,108,117,104,97,114,59,1,10600,59,1,8478,4,19,97,98,99,100,101,102,104,105,108,109,111,112,113,114,115,116,117,119,122,16459,16466,16472,16572,16590,16672,16687,16746,16844,16850,16924,16963,16988,17115,17121,17154,17206,17614,17656,99,117,116,101,59,1,347,113,117,111,59,1,8218,4,10,59,69,97,99,101,105,110,112,115,121,16494,16496,16499,16513,16518,16531,16536,16556,16564,16569,1,8827,59,1,10932,4,2,112,114,16505,16508,59,1,10936,111,110,59,1,353,117,101,59,1,8829,4,2,59,100,16524,16526,1,10928,105,108,59,1,351,114,99,59,1,349,4,3,69,97,115,16544,16547,16551,59,1,10934,112,59,1,10938,105,109,59,1,8937,111,108,105,110,116,59,1,10771,105,109,59,1,8831,59,1,1089,111,116,4,3,59,98,101,16582,16584,16587,1,8901,59,1,8865,59,1,10854,4,7,65,97,99,109,115,116,120,16606,16611,16634,16642,16646,16652,16668,114,114,59,1,8664,114,4,2,104,114,16618,16622,107,59,1,10533,4,2,59,111,16628,16630,1,8600,119,59,1,8600,116,5,167,1,59,16640,1,167,105,59,1,59,119,97,114,59,1,10537,109,4,2,105,110,16659,16665,110,117,115,59,1,8726,59,1,8726,116,59,1,10038,114,4,2,59,111,16679,16682,3,55349,56624,119,110,59,1,8994,4,4,97,99,111,121,16697,16702,16716,16739,114,112,59,1,9839,4,2,104,121,16708,16713,99,121,59,1,1097,59,1,1096,114,116,4,2,109,112,16724,16729,105,100,59,1,8739,97,114,97,108,108,101,108,59,1,8741,5,173,1,59,16744,1,173,4,2,103,109,16752,16770,109,97,4,3,59,102,118,16762,16764,16767,1,963,59,1,962,59,1,962,4,8,59,100,101,103,108,110,112,114,16788,16790,16795,16806,16817,16828,16832,16838,1,8764,111,116,59,1,10858,4,2,59,113,16801,16803,1,8771,59,1,8771,4,2,59,69,16812,16814,1,10910,59,1,10912,4,2,59,69,16823,16825,1,10909,59,1,10911,101,59,1,8774,108,117,115,59,1,10788,97,114,114,59,1,10610,97,114,114,59,1,8592,4,4,97,101,105,116,16860,16883,16891,16904,4,2,108,115,16866,16878,108,115,101,116,109,105,110,117,115,59,1,8726,104,112,59,1,10803,112,97,114,115,108,59,1,10724,4,2,100,108,16897,16900,59,1,8739,101,59,1,8995,4,2,59,101,16910,16912,1,10922,4,2,59,115,16918,16920,1,10924,59,3,10924,65024,4,3,102,108,112,16932,16938,16958,116,99,121,59,1,1100,4,2,59,98,16944,16946,1,47,4,2,59,97,16952,16954,1,10692,114,59,1,9023,102,59,3,55349,56676,97,4,2,100,114,16970,16985,101,115,4,2,59,117,16978,16980,1,9824,105,116,59,1,9824,59,1,8741,4,3,99,115,117,16996,17028,17089,4,2,97,117,17002,17015,112,4,2,59,115,17009,17011,1,8851,59,3,8851,65024,112,4,2,59,115,17022,17024,1,8852,59,3,8852,65024,117,4,2,98,112,17035,17062,4,3,59,101,115,17043,17045,17048,1,8847,59,1,8849,101,116,4,2,59,101,17056,17058,1,8847,113,59,1,8849,4,3,59,101,115,17070,17072,17075,1,8848,59,1,8850,101,116,4,2,59,101,17083,17085,1,8848,113,59,1,8850,4,3,59,97,102,17097,17099,17112,1,9633,114,4,2,101,102,17106,17109,59,1,9633,59,1,9642,59,1,9642,97,114,114,59,1,8594,4,4,99,101,109,116,17131,17136,17142,17148,114,59,3,55349,56520,116,109,110,59,1,8726,105,108,101,59,1,8995,97,114,102,59,1,8902,4,2,97,114,17160,17172,114,4,2,59,102,17167,17169,1,9734,59,1,9733,4,2,97,110,17178,17202,105,103,104,116,4,2,101,112,17188,17197,112,115,105,108,111,110,59,1,1013,104,105,59,1,981,115,59,1,175,4,5,98,99,109,110,112,17218,17351,17420,17423,17427,4,9,59,69,100,101,109,110,112,114,115,17238,17240,17243,17248,17261,17267,17279,17285,17291,1,8834,59,1,10949,111,116,59,1,10941,4,2,59,100,17254,17256,1,8838,111,116,59,1,10947,117,108,116,59,1,10945,4,2,69,101,17273,17276,59,1,10955,59,1,8842,108,117,115,59,1,10943,97,114,114,59,1,10617,4,3,101,105,117,17299,17335,17339,116,4,3,59,101,110,17308,17310,17322,1,8834,113,4,2,59,113,17317,17319,1,8838,59,1,10949,101,113,4,2,59,113,17330,17332,1,8842,59,1,10955,109,59,1,10951,4,2,98,112,17345,17348,59,1,10965,59,1,10963,99,4,6,59,97,99,101,110,115,17366,17368,17376,17385,17389,17415,1,8827,112,112,114,111,120,59,1,10936,117,114,108,121,101,113,59,1,8829,113,59,1,10928,4,3,97,101,115,17397,17405,17410,112,112,114,111,120,59,1,10938,113,113,59,1,10934,105,109,59,1,8937,105,109,59,1,8831,59,1,8721,103,59,1,9834,4,13,49,50,51,59,69,100,101,104,108,109,110,112,115,17455,17462,17469,17476,17478,17481,17496,17509,17524,17530,17536,17548,17554,5,185,1,59,17460,1,185,5,178,1,59,17467,1,178,5,179,1,59,17474,1,179,1,8835,59,1,10950,4,2,111,115,17487,17491,116,59,1,10942,117,98,59,1,10968,4,2,59,100,17502,17504,1,8839,111,116,59,1,10948,115,4,2,111,117,17516,17520,108,59,1,10185,98,59,1,10967,97,114,114,59,1,10619,117,108,116,59,1,10946,4,2,69,101,17542,17545,59,1,10956,59,1,8843,108,117,115,59,1,10944,4,3,101,105,117,17562,17598,17602,116,4,3,59,101,110,17571,17573,17585,1,8835,113,4,2,59,113,17580,17582,1,8839,59,1,10950,101,113,4,2,59,113,17593,17595,1,8843,59,1,10956,109,59,1,10952,4,2,98,112,17608,17611,59,1,10964,59,1,10966,4,3,65,97,110,17622,17627,17650,114,114,59,1,8665,114,4,2,104,114,17634,17638,107,59,1,10534,4,2,59,111,17644,17646,1,8601,119,59,1,8601,119,97,114,59,1,10538,108,105,103,5,223,1,59,17664,1,223,4,13,97,98,99,100,101,102,104,105,111,112,114,115,119,17694,17709,17714,17737,17742,17749,17754,17860,17905,17957,17964,18090,18122,4,2,114,117,17700,17706,103,101,116,59,1,8982,59,1,964,114,107,59,1,9140,4,3,97,101,121,17722,17728,17734,114,111,110,59,1,357,100,105,108,59,1,355,59,1,1090,111,116,59,1,8411,108,114,101,99,59,1,8981,114,59,3,55349,56625,4,4,101,105,107,111,17764,17805,17836,17851,4,2,114,116,17770,17786,101,4,2,52,102,17777,17780,59,1,8756,111,114,101,59,1,8756,97,4,3,59,115,118,17795,17797,17802,1,952,121,109,59,1,977,59,1,977,4,2,99,110,17811,17831,107,4,2,97,115,17818,17826,112,112,114,111,120,59,1,8776,105,109,59,1,8764,115,112,59,1,8201,4,2,97,115,17842,17846,112,59,1,8776,105,109,59,1,8764,114,110,5,254,1,59,17858,1,254,4,3,108,109,110,17868,17873,17901,100,101,59,1,732,101,115,5,215,3,59,98,100,17884,17886,17898,1,215,4,2,59,97,17892,17894,1,8864,114,59,1,10801,59,1,10800,116,59,1,8749,4,3,101,112,115,17913,17917,17953,97,59,1,10536,4,4,59,98,99,102,17927,17929,17934,17939,1,8868,111,116,59,1,9014,105,114,59,1,10993,4,2,59,111,17945,17948,3,55349,56677,114,107,59,1,10970,97,59,1,10537,114,105,109,101,59,1,8244,4,3,97,105,112,17972,17977,18082,100,101,59,1,8482,4,7,97,100,101,109,112,115,116,17993,18051,18056,18059,18066,18072,18076,110,103,108,101,4,5,59,100,108,113,114,18009,18011,18017,18032,18035,1,9653,111,119,110,59,1,9663,101,102,116,4,2,59,101,18026,18028,1,9667,113,59,1,8884,59,1,8796,105,103,104,116,4,2,59,101,18045,18047,1,9657,113,59,1,8885,111,116,59,1,9708,59,1,8796,105,110,117,115,59,1,10810,108,117,115,59,1,10809,98,59,1,10701,105,109,101,59,1,10811,101,122,105,117,109,59,1,9186,4,3,99,104,116,18098,18111,18116,4,2,114,121,18104,18108,59,3,55349,56521,59,1,1094,99,121,59,1,1115,114,111,107,59,1,359,4,2,105,111,18128,18133,120,116,59,1,8812,104,101,97,100,4,2,108,114,18143,18154,101,102,116,97,114,114,111,119,59,1,8606,105,103,104,116,97,114,114,111,119,59,1,8608,4,18,65,72,97,98,99,100,102,103,104,108,109,111,112,114,115,116,117,119,18204,18209,18214,18234,18250,18268,18292,18308,18319,18343,18379,18397,18413,18504,18547,18553,18584,18603,114,114,59,1,8657,97,114,59,1,10595,4,2,99,114,18220,18230,117,116,101,5,250,1,59,18228,1,250,114,59,1,8593,114,4,2,99,101,18241,18245,121,59,1,1118,118,101,59,1,365,4,2,105,121,18256,18265,114,99,5,251,1,59,18263,1,251,59,1,1091,4,3,97,98,104,18276,18281,18287,114,114,59,1,8645,108,97,99,59,1,369,97,114,59,1,10606,4,2,105,114,18298,18304,115,104,116,59,1,10622,59,3,55349,56626,114,97,118,101,5,249,1,59,18317,1,249,4,2,97,98,18325,18338,114,4,2,108,114,18332,18335,59,1,8639,59,1,8638,108,107,59,1,9600,4,2,99,116,18349,18374,4,2,111,114,18355,18369,114,110,4,2,59,101,18363,18365,1,8988,114,59,1,8988,111,112,59,1,8975,114,105,59,1,9720,4,2,97,108,18385,18390,99,114,59,1,363,5,168,1,59,18395,1,168,4,2,103,112,18403,18408,111,110,59,1,371,102,59,3,55349,56678,4,6,97,100,104,108,115,117,18427,18434,18445,18470,18475,18494,114,114,111,119,59,1,8593,111,119,110,97,114,114,111,119,59,1,8597,97,114,112,111,111,110,4,2,108,114,18457,18463,101,102,116,59,1,8639,105,103,104,116,59,1,8638,117,115,59,1,8846,105,4,3,59,104,108,18484,18486,18489,1,965,59,1,978,111,110,59,1,965,112,97,114,114,111,119,115,59,1,8648,4,3,99,105,116,18512,18537,18542,4,2,111,114,18518,18532,114,110,4,2,59,101,18526,18528,1,8989,114,59,1,8989,111,112,59,1,8974,110,103,59,1,367,114,105,59,1,9721,99,114,59,3,55349,56522,4,3,100,105,114,18561,18566,18572,111,116,59,1,8944,108,100,101,59,1,361,105,4,2,59,102,18579,18581,1,9653,59,1,9652,4,2,97,109,18590,18595,114,114,59,1,8648,108,5,252,1,59,18601,1,252,97,110,103,108,101,59,1,10663,4,15,65,66,68,97,99,100,101,102,108,110,111,112,114,115,122,18643,18648,18661,18667,18847,18851,18857,18904,18909,18915,18931,18937,18943,18949,18996,114,114,59,1,8661,97,114,4,2,59,118,18656,18658,1,10984,59,1,10985,97,115,104,59,1,8872,4,2,110,114,18673,18679,103,114,116,59,1,10652,4,7,101,107,110,112,114,115,116,18695,18704,18711,18720,18742,18754,18810,112,115,105,108,111,110,59,1,1013,97,112,112,97,59,1,1008,111,116,104,105,110,103,59,1,8709,4,3,104,105,114,18728,18732,18735,105,59,1,981,59,1,982,111,112,116,111,59,1,8733,4,2,59,104,18748,18750,1,8597,111,59,1,1009,4,2,105,117,18760,18766,103,109,97,59,1,962,4,2,98,112,18772,18791,115,101,116,110,101,113,4,2,59,113,18784,18787,3,8842,65024,59,3,10955,65024,115,101,116,110,101,113,4,2,59,113,18803,18806,3,8843,65024,59,3,10956,65024,4,2,104,114,18816,18822,101,116,97,59,1,977,105,97,110,103,108,101,4,2,108,114,18834,18840,101,102,116,59,1,8882,105,103,104,116,59,1,8883,121,59,1,1074,97,115,104,59,1,8866,4,3,101,108,114,18865,18884,18890,4,3,59,98,101,18873,18875,18880,1,8744,97,114,59,1,8891,113,59,1,8794,108,105,112,59,1,8942,4,2,98,116,18896,18901,97,114,59,1,124,59,1,124,114,59,3,55349,56627,116,114,105,59,1,8882,115,117,4,2,98,112,18923,18927,59,3,8834,8402,59,3,8835,8402,112,102,59,3,55349,56679,114,111,112,59,1,8733,116,114,105,59,1,8883,4,2,99,117,18955,18960,114,59,3,55349,56523,4,2,98,112,18966,18981,110,4,2,69,101,18973,18977,59,3,10955,65024,59,3,8842,65024,110,4,2,69,101,18988,18992,59,3,10956,65024,59,3,8843,65024,105,103,122,97,103,59,1,10650,4,7,99,101,102,111,112,114,115,19020,19026,19061,19066,19072,19075,19089,105,114,99,59,1,373,4,2,100,105,19032,19055,4,2,98,103,19038,19043,97,114,59,1,10847,101,4,2,59,113,19050,19052,1,8743,59,1,8793,101,114,112,59,1,8472,114,59,3,55349,56628,112,102,59,3,55349,56680,59,1,8472,4,2,59,101,19081,19083,1,8768,97,116,104,59,1,8768,99,114,59,3,55349,56524,4,14,99,100,102,104,105,108,109,110,111,114,115,117,118,119,19125,19146,19152,19157,19173,19176,19192,19197,19202,19236,19252,19269,19286,19291,4,3,97,105,117,19133,19137,19142,112,59,1,8898,114,99,59,1,9711,112,59,1,8899,116,114,105,59,1,9661,114,59,3,55349,56629,4,2,65,97,19163,19168,114,114,59,1,10234,114,114,59,1,10231,59,1,958,4,2,65,97,19182,19187,114,114,59,1,10232,114,114,59,1,10229,97,112,59,1,10236,105,115,59,1,8955,4,3,100,112,116,19210,19215,19230,111,116,59,1,10752,4,2,102,108,19221,19225,59,3,55349,56681,117,115,59,1,10753,105,109,101,59,1,10754,4,2,65,97,19242,19247,114,114,59,1,10233,114,114,59,1,10230,4,2,99,113,19258,19263,114,59,3,55349,56525,99,117,112,59,1,10758,4,2,112,116,19275,19281,108,117,115,59,1,10756,114,105,59,1,9651,101,101,59,1,8897,101,100,103,101,59,1,8896,4,8,97,99,101,102,105,111,115,117,19316,19335,19349,19357,19362,19367,19373,19379,99,4,2,117,121,19323,19332,116,101,5,253,1,59,19330,1,253,59,1,1103,4,2,105,121,19341,19346,114,99,59,1,375,59,1,1099,110,5,165,1,59,19355,1,165,114,59,3,55349,56630,99,121,59,1,1111,112,102,59,3,55349,56682,99,114,59,3,55349,56526,4,2,99,109,19385,19389,121,59,1,1102,108,5,255,1,59,19395,1,255,4,10,97,99,100,101,102,104,105,111,115,119,19419,19426,19441,19446,19462,19467,19472,19480,19486,19492,99,117,116,101,59,1,378,4,2,97,121,19432,19438,114,111,110,59,1,382,59,1,1079,111,116,59,1,380,4,2,101,116,19452,19458,116,114,102,59,1,8488,97,59,1,950,114,59,3,55349,56631,99,121,59,1,1078,103,114,97,114,114,59,1,8669,112,102,59,3,55349,56683,99,114,59,3,55349,56527,4,2,106,110,19498,19501,59,1,8205,106,59,1,8204])},cpVT:function(e,t,n){"use strict";function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}n.d(t,"a",(function(){return o}))},dAEq:function(e,t,n){"use strict";var o=n("HtLg"),r=n("Vx/6"),i=n("fuKP"),a=n("/+k/"),s=n("Ig3s"),l=n("T0BQ"),c={name:"attention",tokenize:function(e,t){var n,o=i(this.previous);return function(t){return e.enter("attentionSequence"),n=t,r(t)};function r(a){var s,l,c,u;return a===n?(e.consume(a),r):(s=e.exit("attentionSequence"),c=!(l=i(a))||2===l&&o,u=!o||2===o&&l,s._open=42===n?c:c&&(o||!u),s._close=42===n?u:u&&(l||!c),t(a))}},resolveAll:function(e,t){var n,i,c,u,d,p,f,h,m=-1;for(;++m1&&e[m][1].end.offset-e[m][1].start.offset>1?2:1,u={type:p>1?"strongSequence":"emphasisSequence",start:a(l(e[n][1].end),-p),end:l(e[n][1].end)},d={type:p>1?"strongSequence":"emphasisSequence",start:l(e[m][1].start),end:a(l(e[m][1].start),p)},c={type:p>1?"strongText":"emphasisText",start:l(e[n][1].end),end:l(e[m][1].start)},i={type:p>1?"strong":"emphasis",start:l(u.start),end:l(d.end)},e[n][1].end=l(u.start),e[m][1].start=l(d.end),f=[],e[n][1].end.offset-e[n][1].start.offset&&(f=o(f,[["enter",e[n][1],t],["exit",e[n][1],t]])),f=o(f,[["enter",i,t],["enter",u,t],["exit",u,t],["enter",c,t]]),f=o(f,s(t.parser.constructs.insideSpan.null,e.slice(n+1,m),t)),f=o(f,[["exit",c,t],["enter",d,t],["exit",d,t],["exit",i,t]]),e[m][1].end.offset-e[m][1].start.offset?(h=2,f=o(f,[["enter",e[m][1],t],["exit",e[m][1],t]])):h=0,r(e,n-1,m-n+3,f),m=n+f.length-h-2;break}m=-1;for(;++m?\]}]+$/.exec(e);if(i)for(e=e.slice(0,i.index),t=(i=i[0]).indexOf(")"),n=o(e,"("),r=o(e,")");-1!==t&&n>r;)e+=i.slice(0,t+1),t=(i=i.slice(t+1)).indexOf(")"),r++;return[e,i]}(n+r))[0]&&(s={type:"link",title:null,url:l+t+a[0],children:[{type:"text",value:t+a[0]}]},a[1]&&(s=[s,{type:"text",value:a[1]}]),s)))}function c(e,t,n,o){return!(!u(o,!0)||/[_-]$/.test(n))&&{type:"link",title:null,url:"mailto:"+t+"@"+n,children:[{type:"text",value:t+"@"+n}]}}function u(e,t){var n=e.input.charCodeAt(e.index-1);return(n!==n||a(n)||i(n))&&(!t||47!==n)}t.transforms=[function(e){r(e,[[/(https?:\/\/|www(?=\.))([-.\w]+)([^ \t\r\n]*)/i,l],[/([-.\w+]+)@([-\w]+(?:\.[-\w]+)+)/,c]],{ignore:["link","linkReference"]})}],t.enter={literalAutolink:function(e){this.enter({type:"link",title:null,url:"",children:[]},e)},literalAutolinkEmail:s,literalAutolinkHttp:s,literalAutolinkWww:s},t.exit={literalAutolink:function(e){this.exit(e)},literalAutolinkEmail:function(e){this.config.exit.autolinkEmail.call(this,e)},literalAutolinkHttp:function(e){this.config.exit.autolinkProtocol.call(this,e)},literalAutolinkWww:function(e){this.config.exit.data.call(this,e),this.stack[this.stack.length-1].url="http://"+this.sliceSerialize(e)}}},ecSx:function(e,t,n){"use strict";var o=n("ek1N");e.exports=function(e,t){e&&!e.process&&(t=e,e=null);return e?function(e,t){return n;function n(n,r,i){function a(e){i(e)}e.run(o(n,t),r,a)}}(e,t):function(e){return t;function t(t){return o(t,e)}}(t)}},ek1N:function(e,t,n){"use strict";e.exports=n("FYh5")},escJ:function(e,t,n){"use strict";var o=n("yRGd"),r={name:"lineEnding",tokenize:function(e,t){return function(n){return e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),o(e,t,"linePrefix")}}};e.exports=r},f8fV:function(e,t,n){e.exports=function(e){var t=(e||{}).singleTilde,n={tokenize:function(e,n,r){var i=this.previous,a=this.events,s=0;return l;function l(t){return 126!==t||126===i&&"characterEscape"!==a[a.length-1][1].type?r(t):(e.enter("strikethroughSequenceTemporary"),c(t))}function c(a){var l,u,d=o(i);return 126===a?s>1?r(a):(e.consume(a),s++,c):s<2&&!t?r(a):(l=e.exit("strikethroughSequenceTemporary"),u=o(a),l._open=!u||2===u&&d,l._close=!d||2===d&&u,n(a))}},resolveAll:function(e,t){var n,o,s,l,c=-1;for(;++c-1)return o.QUIRKS;let e=null===t?a:i;if(d(n,e))return o.QUIRKS;if(e=null===t?l:c,d(n,e))return o.LIMITED_QUIRKS}return o.NO_QUIRKS},t.serializeContent=function(e,t,n){let o="!DOCTYPE ";return e&&(o+=e),t?o+=" PUBLIC "+u(t):n&&(o+=" SYSTEM"),null!==n&&(o+=" "+u(n)),o}},fFcG:function(e,t,n){"use strict";e.exports=function(e,t){return e.dangerous?e.augment(t,o("raw",t.value)):null};var o=n("vUGn")},fL8H:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{color:"#657b83",fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",fontSize:"1em",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none"},'pre[class*="language-"]':{color:"#657b83",fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",fontSize:"1em",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",padding:"1em",margin:".5em 0",overflow:"auto",borderRadius:"0.3em",backgroundColor:"#fdf6e3"},'pre[class*="language-"]::-moz-selection':{background:"#073642"},'pre[class*="language-"] ::-moz-selection':{background:"#073642"},'code[class*="language-"]::-moz-selection':{background:"#073642"},'code[class*="language-"] ::-moz-selection':{background:"#073642"},'pre[class*="language-"]::selection':{background:"#073642"},'pre[class*="language-"] ::selection':{background:"#073642"},'code[class*="language-"]::selection':{background:"#073642"},'code[class*="language-"] ::selection':{background:"#073642"},':not(pre) > code[class*="language-"]':{backgroundColor:"#fdf6e3",padding:".1em",borderRadius:".3em"},comment:{color:"#93a1a1"},prolog:{color:"#93a1a1"},doctype:{color:"#93a1a1"},cdata:{color:"#93a1a1"},punctuation:{color:"#586e75"},namespace:{Opacity:".7"},property:{color:"#268bd2"},tag:{color:"#268bd2"},boolean:{color:"#268bd2"},number:{color:"#268bd2"},constant:{color:"#268bd2"},symbol:{color:"#268bd2"},deleted:{color:"#268bd2"},selector:{color:"#2aa198"},"attr-name":{color:"#2aa198"},string:{color:"#2aa198"},char:{color:"#2aa198"},builtin:{color:"#2aa198"},url:{color:"#2aa198"},inserted:{color:"#2aa198"},entity:{color:"#657b83",background:"#eee8d5",cursor:"help"},atrule:{color:"#859900"},"attr-value":{color:"#859900"},keyword:{color:"#859900"},function:{color:"#b58900"},"class-name":{color:"#b58900"},regex:{color:"#cb4b16"},important:{color:"#cb4b16",fontWeight:"bold"},variable:{color:"#cb4b16"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"}}},fUUT:function(e,t,n){"use strict";e.exports=function(e){var t=this;this.Parser=function(n){return o(n,Object.assign({},t.data("settings"),e,{extensions:t.data("micromarkExtensions")||[],mdastExtensions:t.data("fromMarkdownExtensions")||[]}))}};var o=n("LLHA")},"fe/W":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",whiteSpace:"pre-wrap",wordBreak:"break-all",wordWrap:"break-word",fontFamily:'Menlo, Monaco, "Courier New", monospace',fontSize:"15px",lineHeight:"1.5",color:"#dccf8f",textShadow:"0"},'pre[class*="language-"]':{MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",whiteSpace:"pre-wrap",wordBreak:"break-all",wordWrap:"break-word",fontFamily:'Menlo, Monaco, "Courier New", monospace',fontSize:"15px",lineHeight:"1.5",color:"#DCCF8F",textShadow:"0",borderRadius:"5px",border:"1px solid #000",background:"#181914 url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAMAAA/+4ADkFkb2JlAGTAAAAAAf/bAIQACQYGBgcGCQcHCQ0IBwgNDwsJCQsPEQ4ODw4OERENDg4ODg0RERQUFhQUERoaHBwaGiYmJiYmKysrKysrKysrKwEJCAgJCgkMCgoMDwwODA8TDg4ODhMVDg4PDg4VGhMRERERExoXGhYWFhoXHR0aGh0dJCQjJCQrKysrKysrKysr/8AAEQgAjACMAwEiAAIRAQMRAf/EAF4AAQEBAAAAAAAAAAAAAAAAAAABBwEBAQAAAAAAAAAAAAAAAAAAAAIQAAEDAwIHAQEAAAAAAAAAAADwAREhYaExkUFRcYGxwdHh8REBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AyGFEjHaBS2fDDs2zkhKmBKktb7km+ZwwCnXPkLVmCTMItj6AXFxRS465/BTnkAJvkLkJe+7AKKoi2AtRS2zuAWsCb5GOlBN8gKfmuGHZ8MFqIth3ALmFoFwbwKWyAlTAp17uKqBvgBD8sM4fTjhvAhkzhaRkBMKBrfs7jGPIpzy7gFrAqnC0C0gB0EWwBDW2cBVQwm+QtPpa3wBO3sVvszCnLAhkzgL5/RLf13cLQd8/AGlu0Cb5HTx9KuAEieGJEdcehS3eRTp2ATdt3CpIm+QtZwAhROXFeb7swp/ahaM3kBE/jSIUBc/AWrgBN8uNFAl+b7sAXFxFn2YLUU5Ns7gFX8C4ib+hN8gFWXwK3bZglxEJm+gKdciLPsFV/TClsgJUwKJ5FVA7tvIFrfZhVfGJDcsCKaYgAqv6YRbE+RWOWBtu7+AL3yRalXLyKqAIIfk+zARbDgFyEsncYwJvlgFRW+GEWntIi2P0BooyFxcNr8Ep3+ANLbMO+QyhvbiqdgC0kVvgUUiLYgBS2QtPbiVI1/sgOmG9uO+Y8DW+7jS2zAOnj6O2BndwuIAUtkdRN8gFoK3wwXMQyZwHVbClsuNLd4E3yAUR6FVDBR+BafQGt93LVMxJTv8ABts4CVLhcfYWsCb5kC9/BHdU8CLYFY5bMAd+eX9MGthhpbA1vu4B7+RKkaW2Yq4AQtVBBFsAJU/AuIXBhN8gGWnstefhiZyWvLAEnbYS1uzSFP6Jvn4Baxx70JKkQojLib5AVTey1jjgkKJGO0AKWyOm7N7cSpgSpAdPH0Tfd/gp1z5C1ZgKqN9J2wFxcUUuAFLZAm+QC0Fb4YUVRFsAOvj4KW2dwtYE3yAWk/wS/PLMKfmuGHZ8MAXF/Ja32Yi5haAKWz4Ydm2cSpgU693Atb7km+Zwwh+WGcPpxw3gAkzCLY+iYUDW/Z3Adc/gpzyFrAqnALkJe+7DoItgAtRS2zuKqGE3yAx0oJvkdvYrfZmALURbDuL5/RLf13cAuDeBS2RpbtAm+QFVA3wR+3fUtFHoBDJnC0jIXH0HWsgMY8inPLuOkd9chp4z20ALQLSA8cI9jYAIa2zjzjBd8gRafS1vgiUho/kAKcsCGTOGWvoOpkAtB3z8Hm8x2Ff5ADp4+lXAlIvcmwH/2Q==') repeat left top",padding:"12px",overflow:"auto"},'pre > code[class*="language-"]':{fontSize:"1em"},':not(pre) > code[class*="language-"]':{borderRadius:"5px",border:"1px solid #000",color:"#DCCF8F",background:"#181914 url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAMAAA/+4ADkFkb2JlAGTAAAAAAf/bAIQACQYGBgcGCQcHCQ0IBwgNDwsJCQsPEQ4ODw4OERENDg4ODg0RERQUFhQUERoaHBwaGiYmJiYmKysrKysrKysrKwEJCAgJCgkMCgoMDwwODA8TDg4ODhMVDg4PDg4VGhMRERERExoXGhYWFhoXHR0aGh0dJCQjJCQrKysrKysrKysr/8AAEQgAjACMAwEiAAIRAQMRAf/EAF4AAQEBAAAAAAAAAAAAAAAAAAABBwEBAQAAAAAAAAAAAAAAAAAAAAIQAAEDAwIHAQEAAAAAAAAAAADwAREhYaExkUFRcYGxwdHh8REBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AyGFEjHaBS2fDDs2zkhKmBKktb7km+ZwwCnXPkLVmCTMItj6AXFxRS465/BTnkAJvkLkJe+7AKKoi2AtRS2zuAWsCb5GOlBN8gKfmuGHZ8MFqIth3ALmFoFwbwKWyAlTAp17uKqBvgBD8sM4fTjhvAhkzhaRkBMKBrfs7jGPIpzy7gFrAqnC0C0gB0EWwBDW2cBVQwm+QtPpa3wBO3sVvszCnLAhkzgL5/RLf13cLQd8/AGlu0Cb5HTx9KuAEieGJEdcehS3eRTp2ATdt3CpIm+QtZwAhROXFeb7swp/ahaM3kBE/jSIUBc/AWrgBN8uNFAl+b7sAXFxFn2YLUU5Ns7gFX8C4ib+hN8gFWXwK3bZglxEJm+gKdciLPsFV/TClsgJUwKJ5FVA7tvIFrfZhVfGJDcsCKaYgAqv6YRbE+RWOWBtu7+AL3yRalXLyKqAIIfk+zARbDgFyEsncYwJvlgFRW+GEWntIi2P0BooyFxcNr8Ep3+ANLbMO+QyhvbiqdgC0kVvgUUiLYgBS2QtPbiVI1/sgOmG9uO+Y8DW+7jS2zAOnj6O2BndwuIAUtkdRN8gFoK3wwXMQyZwHVbClsuNLd4E3yAUR6FVDBR+BafQGt93LVMxJTv8ABts4CVLhcfYWsCb5kC9/BHdU8CLYFY5bMAd+eX9MGthhpbA1vu4B7+RKkaW2Yq4AQtVBBFsAJU/AuIXBhN8gGWnstefhiZyWvLAEnbYS1uzSFP6Jvn4Baxx70JKkQojLib5AVTey1jjgkKJGO0AKWyOm7N7cSpgSpAdPH0Tfd/gp1z5C1ZgKqN9J2wFxcUUuAFLZAm+QC0Fb4YUVRFsAOvj4KW2dwtYE3yAWk/wS/PLMKfmuGHZ8MAXF/Ja32Yi5haAKWz4Ydm2cSpgU693Atb7km+Zwwh+WGcPpxw3gAkzCLY+iYUDW/Z3Adc/gpzyFrAqnALkJe+7DoItgAtRS2zuKqGE3yAx0oJvkdvYrfZmALURbDuL5/RLf13cAuDeBS2RpbtAm+QFVA3wR+3fUtFHoBDJnC0jIXH0HWsgMY8inPLuOkd9chp4z20ALQLSA8cI9jYAIa2zjzjBd8gRafS1vgiUho/kAKcsCGTOGWvoOpkAtB3z8Hm8x2Ff5ADp4+lXAlIvcmwH/2Q==') repeat left top",padding:"2px 6px"},namespace:{Opacity:".7"},comment:{color:"#586e75",fontStyle:"italic"},prolog:{color:"#586e75",fontStyle:"italic"},doctype:{color:"#586e75",fontStyle:"italic"},cdata:{color:"#586e75",fontStyle:"italic"},number:{color:"#b89859"},string:{color:"#468966"},char:{color:"#468966"},builtin:{color:"#468966"},inserted:{color:"#468966"},"attr-name":{color:"#b89859"},operator:{color:"#dccf8f"},entity:{color:"#dccf8f",cursor:"help"},url:{color:"#dccf8f"},".language-css .token.string":{color:"#dccf8f"},".style .token.string":{color:"#dccf8f"},selector:{color:"#859900"},regex:{color:"#859900"},atrule:{color:"#cb4b16"},keyword:{color:"#cb4b16"},"attr-value":{color:"#468966"},function:{color:"#b58900"},variable:{color:"#b58900"},placeholder:{color:"#b58900"},property:{color:"#b89859"},tag:{color:"#ffb03b"},boolean:{color:"#b89859"},constant:{color:"#b89859"},symbol:{color:"#b89859"},important:{color:"#dc322f"},statement:{color:"#dc322f"},deleted:{color:"#dc322f"},punctuation:{color:"#dccf8f"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"}}},fsL8:function(e,t,n){var o=n("cDf5").default;function r(){"use strict";e.exports=r=function(){return t},e.exports.__esModule=!0,e.exports.default=e.exports;var t={},n=Object.prototype,i=n.hasOwnProperty,a=Object.defineProperty||function(e,t,n){e[t]=n.value},s="function"==typeof Symbol?Symbol:{},l=s.iterator||"@@iterator",c=s.asyncIterator||"@@asyncIterator",u=s.toStringTag||"@@toStringTag";function d(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{d({},"")}catch(w){d=function(e,t,n){return e[t]=n}}function p(e,t,n,o){var r=t&&t.prototype instanceof m?t:m,i=Object.create(r.prototype),s=new O(o||[]);return a(i,"_invoke",{value:S(e,n,s)}),i}function f(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(w){return{type:"throw",arg:w}}}t.wrap=p;var h={};function m(){}function g(){}function T(){}var E={};d(E,l,(function(){return this}));var b=Object.getPrototypeOf,A=b&&b(b(N([])));A&&A!==n&&i.call(A,l)&&(E=A);var k=T.prototype=m.prototype=Object.create(E);function y(e){["next","throw","return"].forEach((function(t){d(e,t,(function(e){return this._invoke(t,e)}))}))}function _(e,t){function n(r,a,s,l){var c=f(e[r],e,a);if("throw"!==c.type){var u=c.arg,d=u.value;return d&&"object"==o(d)&&i.call(d,"__await")?t.resolve(d.__await).then((function(e){n("next",e,s,l)}),(function(e){n("throw",e,s,l)})):t.resolve(d).then((function(e){u.value=e,s(u)}),(function(e){return n("throw",e,s,l)}))}l(c.arg)}var r;a(this,"_invoke",{value:function(e,o){function i(){return new t((function(t,r){n(e,o,t,r)}))}return r=r?r.then(i,i):i()}})}function S(e,t,n){var o="suspendedStart";return function(r,i){if("executing"===o)throw new Error("Generator is already running");if("completed"===o){if("throw"===r)throw i;return M()}for(n.method=r,n.arg=i;;){var a=n.delegate;if(a){var s=C(a,n);if(s){if(s===h)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===o)throw o="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);o="executing";var l=f(e,t,n);if("normal"===l.type){if(o=n.done?"completed":"suspendedYield",l.arg===h)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(o="completed",n.method="throw",n.arg=l.arg)}}}function C(e,t){var n=t.method,o=e.iterator[n];if(void 0===o)return t.delegate=null,"throw"===n&&e.iterator.return&&(t.method="return",t.arg=void 0,C(e,t),"throw"===t.method)||"return"!==n&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+n+"' method")),h;var r=f(o,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,h;var i=r.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,h):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,h)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function v(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function O(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(x,this),this.reset(!0)}function N(e){if(e){var t=e[l];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,o=function t(){for(;++n=0;--o){var r=this.tryEntries[o],a=r.completion;if("root"===r.tryLoc)return n("end");if(r.tryLoc<=this.prev){var s=i.call(r,"catchLoc"),l=i.call(r,"finallyLoc");if(s&&l){if(this.prev=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&i.call(o,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),v(n),h}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var o=n.completion;if("throw"===o.type){var r=o.arg;v(n)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:N(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),h}},t}e.exports=r,e.exports.__esModule=!0,e.exports.default=e.exports},fuKP:function(e,t,n){"use strict";var o=n("Q3zd"),r=n("BjXi"),i=n("uDje");e.exports=function(e){return null===e||o(e)||i(e)?1:r(e)?2:void 0}},g4pe:function(e,t,n){e.exports=n("8Kt/")},gsvO:function(e,t,n){e.exports=r,r.peek=function(){return"`"};var o=n("7J+x");function r(e,t,n){for(var r,i,a,s,l=e.value||"",c="`",u=-1;new RegExp("(^|[^`])"+c+"([^`]|$)").test(l);)c+="`";for(/[^ \r\n]/.test(l)&&(/[ \r\n`]/.test(l.charAt(0))||/[ \r\n`]/.test(l.charAt(l.length-1)))&&(l=" "+l+" ");++up?n(i):(e.consume(i),T):41===i?f--?(e.consume(i),T):(e.exit("chunkString"),e.exit(u),e.exit(c),e.exit(a),t(i)):null===i||r(i)?f?n(i):(e.exit("chunkString"),e.exit(u),e.exit(c),e.exit(a),t(i)):o(i)?n(i):(e.consume(i),92===i?E:T)}function E(t){return 40===t||41===t||92===t?(e.consume(t),T):T(t)}}},hq1P:function(e,t,n){"use strict";var o=n("rm/B")(/[A-Za-z]/);e.exports=o},iX4R:function(e,t,n){"use strict";e.exports=function(e,t){return e(t,"blockquote",o(r(e,t),!0))};var o=n("Dvol"),r=n("WFsM")},iy38:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{color:"white",background:"none",fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",fontSize:"1em",textAlign:"left",textShadow:"0 -.1em .2em black",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none"},'pre[class*="language-"]':{color:"white",background:"hsl(0, 0%, 8%)",fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",fontSize:"1em",textAlign:"left",textShadow:"0 -.1em .2em black",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",borderRadius:".5em",border:".3em solid hsl(0, 0%, 33%)",boxShadow:"1px 1px .5em black inset",margin:".5em 0",overflow:"auto",padding:"1em"},':not(pre) > code[class*="language-"]':{background:"hsl(0, 0%, 8%)",borderRadius:".3em",border:".13em solid hsl(0, 0%, 33%)",boxShadow:"1px 1px .3em -.1em black inset",padding:".15em .2em .05em",whiteSpace:"normal"},'pre[class*="language-"]::-moz-selection':{background:"hsla(0, 0%, 93%, 0.15)",textShadow:"none"},'pre[class*="language-"]::selection':{background:"hsla(0, 0%, 93%, 0.15)",textShadow:"none"},'pre[class*="language-"] ::-moz-selection':{textShadow:"none",background:"hsla(0, 0%, 93%, 0.15)"},'code[class*="language-"]::-moz-selection':{textShadow:"none",background:"hsla(0, 0%, 93%, 0.15)"},'code[class*="language-"] ::-moz-selection':{textShadow:"none",background:"hsla(0, 0%, 93%, 0.15)"},'pre[class*="language-"] ::selection':{textShadow:"none",background:"hsla(0, 0%, 93%, 0.15)"},'code[class*="language-"]::selection':{textShadow:"none",background:"hsla(0, 0%, 93%, 0.15)"},'code[class*="language-"] ::selection':{textShadow:"none",background:"hsla(0, 0%, 93%, 0.15)"},comment:{color:"hsl(0, 0%, 47%)"},prolog:{color:"hsl(0, 0%, 47%)"},doctype:{color:"hsl(0, 0%, 47%)"},cdata:{color:"hsl(0, 0%, 47%)"},punctuation:{Opacity:".7"},namespace:{Opacity:".7"},tag:{color:"hsl(14, 58%, 55%)"},boolean:{color:"hsl(14, 58%, 55%)"},number:{color:"hsl(14, 58%, 55%)"},deleted:{color:"hsl(14, 58%, 55%)"},keyword:{color:"hsl(53, 89%, 79%)"},property:{color:"hsl(53, 89%, 79%)"},selector:{color:"hsl(53, 89%, 79%)"},constant:{color:"hsl(53, 89%, 79%)"},symbol:{color:"hsl(53, 89%, 79%)"},builtin:{color:"hsl(53, 89%, 79%)"},"attr-name":{color:"hsl(76, 21%, 52%)"},"attr-value":{color:"hsl(76, 21%, 52%)"},string:{color:"hsl(76, 21%, 52%)"},char:{color:"hsl(76, 21%, 52%)"},operator:{color:"hsl(76, 21%, 52%)"},entity:{color:"hsl(76, 21%, 52%)",cursor:"help"},url:{color:"hsl(76, 21%, 52%)"},".language-css .token.string":{color:"hsl(76, 21%, 52%)"},".style .token.string":{color:"hsl(76, 21%, 52%)"},variable:{color:"hsl(76, 21%, 52%)"},inserted:{color:"hsl(76, 21%, 52%)"},atrule:{color:"hsl(218, 22%, 55%)"},regex:{color:"hsl(42, 75%, 65%)"},important:{color:"hsl(42, 75%, 65%)",fontWeight:"bold"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},"pre[data-line]":{padding:"1em 0 1em 3em",position:"relative"},".language-markup .token.tag":{color:"hsl(33, 33%, 52%)"},".language-markup .token.attr-name":{color:"hsl(33, 33%, 52%)"},".language-markup .token.punctuation":{color:"hsl(33, 33%, 52%)"},"":{position:"relative",zIndex:"1"},".line-highlight":{background:"linear-gradient(to right, hsla(0, 0%, 33%, .1) 70%, hsla(0, 0%, 33%, 0))",borderBottom:"1px dashed hsl(0, 0%, 33%)",borderTop:"1px dashed hsl(0, 0%, 33%)",left:"0",lineHeight:"inherit",marginTop:"0.75em",padding:"inherit 0",pointerEvents:"none",position:"absolute",right:"0",whiteSpace:"pre",zIndex:"0"},".line-highlight:before":{backgroundColor:"hsl(215, 15%, 59%)",borderRadius:"999px",boxShadow:"0 1px white",color:"hsl(24, 20%, 95%)",content:"attr(data-start)",font:"bold 65%/1.5 sans-serif",left:".6em",minWidth:"1em",padding:"0 .5em",position:"absolute",textAlign:"center",textShadow:"none",top:".4em",verticalAlign:".3em"},".line-highlight[data-end]:after":{backgroundColor:"hsl(215, 15%, 59%)",borderRadius:"999px",boxShadow:"0 1px white",color:"hsl(24, 20%, 95%)",content:"attr(data-end)",font:"bold 65%/1.5 sans-serif",left:".6em",minWidth:"1em",padding:"0 .5em",position:"absolute",textAlign:"center",textShadow:"none",top:"auto",verticalAlign:".3em",bottom:".4em"}}},jO3g:function(e,t,n){"use strict";e.exports=function(e,t,n){var o,r=t&&t.type;if(!r)throw new Error("Expected node, got `"+t+"`");o=i.call(e.handlers,r)?e.handlers[r]:e.passThrough&&e.passThrough.indexOf(r)>-1?s:e.unknownHandler;return("function"===typeof o?o:a)(e,t,n)};var o=n("vUGn"),r=n("WFsM"),i={}.hasOwnProperty;function a(e,t){return function(e){var t=e.data||{};if(i.call(t,"hName")||i.call(t,"hProperties")||i.call(t,"hChildren"))return!1;return"value"in e}(t)?e.augment(t,o("text",t.value)):e(t,"div",r(e,t))}function s(e,t){var n;return t.children?((n=Object.assign({},t)).children=r(e,t),n):t}},jeK3:function(e,t,n){"use strict";e.exports=function(e){for(var t=-1,n=0;++t-1?void 0:4)}},exit:function(e){e.exit("blockQuote")}};e.exports=i},kViG:function(e,t,n){"use strict";var o=n("E/Jm"),r=n("2N74");e.exports=function(e,t,n,i,a,s){var l,c=this,u=0;return function(t){return e.enter(i),e.enter(a),e.consume(t),e.exit(a),e.enter(s),d};function d(r){return null===r||91===r||93===r&&!l||94===r&&!u&&"_hiddenFootnoteSupport"in c.parser.constructs||u>999?n(r):93===r?(e.exit(s),e.enter(a),e.consume(r),e.exit(a),e.exit(i),t):o(r)?(e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),d):(e.enter("chunkString",{contentType:"string"}),p(r))}function p(t){return null===t||91===t||93===t||o(t)||u++>999?(e.exit("chunkString"),d(t)):(e.consume(t),l=l||!r(t),92===t?f:p)}function f(t){return 91===t||92===t||93===t?(e.consume(t),u++,p):p(t)}}},kWEd:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{fontFamily:'Consolas, Menlo, Monaco, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace',fontSize:"14px",lineHeight:"1.375",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",background:"#322d29",color:"#88786d"},'pre[class*="language-"]':{fontFamily:'Consolas, Menlo, Monaco, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace',fontSize:"14px",lineHeight:"1.375",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",background:"#322d29",color:"#88786d",padding:"1em",margin:".5em 0",overflow:"auto"},'pre > code[class*="language-"]':{fontSize:"1em"},'pre[class*="language-"]::-moz-selection':{textShadow:"none",background:"#6f5849"},'pre[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#6f5849"},'code[class*="language-"]::-moz-selection':{textShadow:"none",background:"#6f5849"},'code[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#6f5849"},'pre[class*="language-"]::selection':{textShadow:"none",background:"#6f5849"},'pre[class*="language-"] ::selection':{textShadow:"none",background:"#6f5849"},'code[class*="language-"]::selection':{textShadow:"none",background:"#6f5849"},'code[class*="language-"] ::selection':{textShadow:"none",background:"#6f5849"},':not(pre) > code[class*="language-"]':{padding:".1em",borderRadius:".3em"},comment:{color:"#6a5f58"},prolog:{color:"#6a5f58"},doctype:{color:"#6a5f58"},cdata:{color:"#6a5f58"},punctuation:{color:"#6a5f58"},namespace:{Opacity:".7"},tag:{color:"#bfa05a"},operator:{color:"#bfa05a"},number:{color:"#bfa05a"},property:{color:"#88786d"},function:{color:"#88786d"},"tag-id":{color:"#fff3eb"},selector:{color:"#fff3eb"},"atrule-id":{color:"#fff3eb"},"code.language-javascript":{color:"#a48774"},"attr-name":{color:"#a48774"},"code.language-css":{color:"#fcc440"},"code.language-scss":{color:"#fcc440"},boolean:{color:"#fcc440"},string:{color:"#fcc440"},entity:{color:"#fcc440",cursor:"help"},url:{color:"#fcc440"},".language-css .token.string":{color:"#fcc440"},".language-scss .token.string":{color:"#fcc440"},".style .token.string":{color:"#fcc440"},"attr-value":{color:"#fcc440"},keyword:{color:"#fcc440"},control:{color:"#fcc440"},directive:{color:"#fcc440"},unit:{color:"#fcc440"},statement:{color:"#fcc440"},regex:{color:"#fcc440"},atrule:{color:"#fcc440"},placeholder:{color:"#fcc440"},variable:{color:"#fcc440"},deleted:{textDecoration:"line-through"},inserted:{borderBottom:"1px dotted #fff3eb",textDecoration:"none"},italic:{fontStyle:"italic"},important:{fontWeight:"bold",color:"#a48774"},bold:{fontWeight:"bold"},"pre > code.highlight":{Outline:".4em solid #816d5f",OutlineOffset:".4em"},".line-numbers .line-numbers-rows":{borderRightColor:"#35302b"},".line-numbers-rows > span:before":{color:"#46403d"},".line-highlight":{background:"linear-gradient(to right, rgba(191, 160, 90, 0.2) 70%, rgba(191, 160, 90, 0))"}}},ki31:function(e,t){t.canContainEols=["delete"],t.enter={strikethrough:function(e){this.enter({type:"delete",children:[]},e)}},t.exit={strikethrough:function(e){this.exit(e)}}},ktEA:function(e,t,n){"use strict";e.exports=function(e,t){return e(t,"em",o(e,t))};var o=n("WFsM")},lQDV:function(e,t,n){"use strict";e.exports=function(e,t){return e(t,"h"+t.depth,o(e,t))};var o=n("WFsM")},lVxK:function(e,t,n){"use strict";const o=n("zpDW"),r=n("UwWT"),i=r.TAG_NAMES,a=r.NAMESPACES,s=r.ATTRS,l="text/html",c="application/xhtml+xml",u={attributename:"attributeName",attributetype:"attributeType",basefrequency:"baseFrequency",baseprofile:"baseProfile",calcmode:"calcMode",clippathunits:"clipPathUnits",diffuseconstant:"diffuseConstant",edgemode:"edgeMode",filterunits:"filterUnits",glyphref:"glyphRef",gradienttransform:"gradientTransform",gradientunits:"gradientUnits",kernelmatrix:"kernelMatrix",kernelunitlength:"kernelUnitLength",keypoints:"keyPoints",keysplines:"keySplines",keytimes:"keyTimes",lengthadjust:"lengthAdjust",limitingconeangle:"limitingConeAngle",markerheight:"markerHeight",markerunits:"markerUnits",markerwidth:"markerWidth",maskcontentunits:"maskContentUnits",maskunits:"maskUnits",numoctaves:"numOctaves",pathlength:"pathLength",patterncontentunits:"patternContentUnits",patterntransform:"patternTransform",patternunits:"patternUnits",pointsatx:"pointsAtX",pointsaty:"pointsAtY",pointsatz:"pointsAtZ",preservealpha:"preserveAlpha",preserveaspectratio:"preserveAspectRatio",primitiveunits:"primitiveUnits",refx:"refX",refy:"refY",repeatcount:"repeatCount",repeatdur:"repeatDur",requiredextensions:"requiredExtensions",requiredfeatures:"requiredFeatures",specularconstant:"specularConstant",specularexponent:"specularExponent",spreadmethod:"spreadMethod",startoffset:"startOffset",stddeviation:"stdDeviation",stitchtiles:"stitchTiles",surfacescale:"surfaceScale",systemlanguage:"systemLanguage",tablevalues:"tableValues",targetx:"targetX",targety:"targetY",textlength:"textLength",viewbox:"viewBox",viewtarget:"viewTarget",xchannelselector:"xChannelSelector",ychannelselector:"yChannelSelector",zoomandpan:"zoomAndPan"},d={"xlink:actuate":{prefix:"xlink",name:"actuate",namespace:a.XLINK},"xlink:arcrole":{prefix:"xlink",name:"arcrole",namespace:a.XLINK},"xlink:href":{prefix:"xlink",name:"href",namespace:a.XLINK},"xlink:role":{prefix:"xlink",name:"role",namespace:a.XLINK},"xlink:show":{prefix:"xlink",name:"show",namespace:a.XLINK},"xlink:title":{prefix:"xlink",name:"title",namespace:a.XLINK},"xlink:type":{prefix:"xlink",name:"type",namespace:a.XLINK},"xml:base":{prefix:"xml",name:"base",namespace:a.XML},"xml:lang":{prefix:"xml",name:"lang",namespace:a.XML},"xml:space":{prefix:"xml",name:"space",namespace:a.XML},xmlns:{prefix:"",name:"xmlns",namespace:a.XMLNS},"xmlns:xlink":{prefix:"xmlns",name:"xlink",namespace:a.XMLNS}},p=t.SVG_TAG_NAMES_ADJUSTMENT_MAP={altglyph:"altGlyph",altglyphdef:"altGlyphDef",altglyphitem:"altGlyphItem",animatecolor:"animateColor",animatemotion:"animateMotion",animatetransform:"animateTransform",clippath:"clipPath",feblend:"feBlend",fecolormatrix:"feColorMatrix",fecomponenttransfer:"feComponentTransfer",fecomposite:"feComposite",feconvolvematrix:"feConvolveMatrix",fediffuselighting:"feDiffuseLighting",fedisplacementmap:"feDisplacementMap",fedistantlight:"feDistantLight",feflood:"feFlood",fefunca:"feFuncA",fefuncb:"feFuncB",fefuncg:"feFuncG",fefuncr:"feFuncR",fegaussianblur:"feGaussianBlur",feimage:"feImage",femerge:"feMerge",femergenode:"feMergeNode",femorphology:"feMorphology",feoffset:"feOffset",fepointlight:"fePointLight",fespecularlighting:"feSpecularLighting",fespotlight:"feSpotLight",fetile:"feTile",feturbulence:"feTurbulence",foreignobject:"foreignObject",glyphref:"glyphRef",lineargradient:"linearGradient",radialgradient:"radialGradient",textpath:"textPath"},f={[i.B]:!0,[i.BIG]:!0,[i.BLOCKQUOTE]:!0,[i.BODY]:!0,[i.BR]:!0,[i.CENTER]:!0,[i.CODE]:!0,[i.DD]:!0,[i.DIV]:!0,[i.DL]:!0,[i.DT]:!0,[i.EM]:!0,[i.EMBED]:!0,[i.H1]:!0,[i.H2]:!0,[i.H3]:!0,[i.H4]:!0,[i.H5]:!0,[i.H6]:!0,[i.HEAD]:!0,[i.HR]:!0,[i.I]:!0,[i.IMG]:!0,[i.LI]:!0,[i.LISTING]:!0,[i.MENU]:!0,[i.META]:!0,[i.NOBR]:!0,[i.OL]:!0,[i.P]:!0,[i.PRE]:!0,[i.RUBY]:!0,[i.S]:!0,[i.SMALL]:!0,[i.SPAN]:!0,[i.STRONG]:!0,[i.STRIKE]:!0,[i.SUB]:!0,[i.SUP]:!0,[i.TABLE]:!0,[i.TT]:!0,[i.U]:!0,[i.UL]:!0,[i.VAR]:!0};t.causesExit=function(e){const t=e.tagName;return!!(t===i.FONT&&(null!==o.getTokenAttr(e,s.COLOR)||null!==o.getTokenAttr(e,s.SIZE)||null!==o.getTokenAttr(e,s.FACE)))||f[t]},t.adjustTokenMathMLAttrs=function(e){for(let t=0;t{const i=r.MODE[o];n[i]=function(n){e.ctLoc=e._getCurrentLocation(),t[i].call(this,n)}})),n}}},ljYj:function(e,t,n){"use strict";var o=n("rm/B")(/\d/);e.exports=o},lwAK:function(e,t,n){"use strict";var o;t.__esModule=!0,t.AmpStateContext=void 0;var r=((o=n("q1tI"))&&o.__esModule?o:{default:o}).default.createContext({});t.AmpStateContext=r},lwsE:function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},e.exports.__esModule=!0,e.exports.default=e.exports},mAwW:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{fontFamily:'Consolas, Menlo, Monaco, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace',fontSize:"14px",lineHeight:"1.375",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",background:"#f5f7ff",color:"#5e6687"},'pre[class*="language-"]':{fontFamily:'Consolas, Menlo, Monaco, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace',fontSize:"14px",lineHeight:"1.375",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",background:"#f5f7ff",color:"#5e6687",padding:"1em",margin:".5em 0",overflow:"auto"},'pre > code[class*="language-"]':{fontSize:"1em"},'pre[class*="language-"]::-moz-selection':{textShadow:"none",background:"#dfe2f1"},'pre[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#dfe2f1"},'code[class*="language-"]::-moz-selection':{textShadow:"none",background:"#dfe2f1"},'code[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#dfe2f1"},'pre[class*="language-"]::selection':{textShadow:"none",background:"#dfe2f1"},'pre[class*="language-"] ::selection':{textShadow:"none",background:"#dfe2f1"},'code[class*="language-"]::selection':{textShadow:"none",background:"#dfe2f1"},'code[class*="language-"] ::selection':{textShadow:"none",background:"#dfe2f1"},':not(pre) > code[class*="language-"]':{padding:".1em",borderRadius:".3em"},comment:{color:"#898ea4"},prolog:{color:"#898ea4"},doctype:{color:"#898ea4"},cdata:{color:"#898ea4"},punctuation:{color:"#5e6687"},namespace:{Opacity:".7"},operator:{color:"#c76b29"},boolean:{color:"#c76b29"},number:{color:"#c76b29"},property:{color:"#c08b30"},tag:{color:"#3d8fd1"},string:{color:"#22a2c9"},selector:{color:"#6679cc"},"attr-name":{color:"#c76b29"},entity:{color:"#22a2c9",cursor:"help"},url:{color:"#22a2c9"},".language-css .token.string":{color:"#22a2c9"},".style .token.string":{color:"#22a2c9"},"attr-value":{color:"#ac9739"},keyword:{color:"#ac9739"},control:{color:"#ac9739"},directive:{color:"#ac9739"},unit:{color:"#ac9739"},statement:{color:"#22a2c9"},regex:{color:"#22a2c9"},atrule:{color:"#22a2c9"},placeholder:{color:"#3d8fd1"},variable:{color:"#3d8fd1"},deleted:{textDecoration:"line-through"},inserted:{borderBottom:"1px dotted #202746",textDecoration:"none"},italic:{fontStyle:"italic"},important:{fontWeight:"bold",color:"#c94922"},bold:{fontWeight:"bold"},"pre > code.highlight":{Outline:"0.4em solid #c94922",OutlineOffset:".4em"},".line-numbers .line-numbers-rows":{borderRightColor:"#dfe2f1"},".line-numbers-rows > span:before":{color:"#979db4"},".line-highlight":{background:"linear-gradient(to right, rgba(107, 115, 148, 0.2) 70%, rgba(107, 115, 148, 0))"}}},mPvQ:function(e,t,n){var o=n("5fIB"),r=n("rlHP"),i=n("KckH"),a=n("kG2m");e.exports=function(e){return o(e)||r(e)||i(e)||a()}},nbFU:function(e,t,n){"use strict";e.exports=function(e,t){var n=e.footnoteById,r=e.footnoteOrder,i=1;for(;i in n;)i++;return i=String(i),r.push(i),n[i]={type:"footnoteDefinition",identifier:i,children:[{type:"paragraph",children:t.children}],position:t.position},o(e,{type:"footnoteReference",identifier:i,position:t.position})};var o=n("/BR8")},niEq:function(e,t,n){"use strict";const o=n("9kwo"),r=n("Ne21"),i=n("lb9w"),a=n("HwUZ");e.exports=class extends o{constructor(e,t){super(e,t),this.opts=t,this.ctLoc=null,this.locBeforeToken=!1}_setErrorLocation(e){this.ctLoc&&(e.startLine=this.ctLoc.startLine,e.startCol=this.ctLoc.startCol,e.startOffset=this.ctLoc.startOffset,e.endLine=this.locBeforeToken?this.ctLoc.startLine:this.ctLoc.endLine,e.endCol=this.locBeforeToken?this.ctLoc.startCol:this.ctLoc.endCol,e.endOffset=this.locBeforeToken?this.ctLoc.startOffset:this.ctLoc.endOffset)}_getOverriddenMethods(e,t){return{_bootstrap(n,o){t._bootstrap.call(this,n,o),a.install(this.tokenizer,r,e.opts),a.install(this.tokenizer,i)},_processInputToken(n){e.ctLoc=n.location,t._processInputToken.call(this,n)},_err(t,n){e.locBeforeToken=n&&n.beforeToken,e._reportError(t)}}}}},o0o1:function(e,t,n){var o=n("fsL8")();e.exports=o;try{regeneratorRuntime=o}catch(r){"object"===typeof globalThis?globalThis.regeneratorRuntime=o:Function("r","regeneratorRuntime = r")(o)}},o8bm:function(e,t,n){"use strict";var o=/[\0\t\n\r]/g;e.exports=function(){var e,t=!0,n=1,r="";return function(i,a,s){var l,c,u,d,p,f=[];i=r+i.toString(a),u=0,r="",t&&(65279===i.charCodeAt(0)&&u++,t=void 0);for(;u code[class*='language-']":{background:"#1e1e3f",padding:"0.1em",borderRadius:"0.3em"},"":{fontWeight:"400"},comment:{color:"#b362ff"},prolog:{color:"#b362ff"},cdata:{color:"#b362ff"},delimiter:{color:"#ff9d00"},keyword:{color:"#ff9d00"},selector:{color:"#ff9d00"},important:{color:"#ff9d00"},atrule:{color:"#ff9d00"},operator:{color:"rgb(255, 180, 84)",background:"none"},"attr-name":{color:"rgb(255, 180, 84)"},punctuation:{color:"#ffffff"},boolean:{color:"rgb(255, 98, 140)"},tag:{color:"rgb(255, 157, 0)"},"tag .punctuation":{color:"rgb(255, 157, 0)"},doctype:{color:"rgb(255, 157, 0)"},builtin:{color:"rgb(255, 157, 0)"},entity:{color:"#6897bb",background:"none"},symbol:{color:"#6897bb"},number:{color:"#ff628c"},property:{color:"#ff628c"},constant:{color:"#ff628c"},variable:{color:"#ff628c"},string:{color:"#a5ff90"},char:{color:"#a5ff90"},"attr-value":{color:"#a5c261"},"attr-value .punctuation":{color:"#a5c261"},"attr-value .punctuation:first-child":{color:"#a9b7c6"},url:{color:"#287bde",textDecoration:"underline",background:"none"},function:{color:"rgb(250, 208, 0)"},regex:{background:"#364135"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},inserted:{background:"#00ff00"},deleted:{background:"#ff000d"},"code.language-css .token.property":{color:"#a9b7c6"},"code.language-css .token.property + .token.punctuation":{color:"#a9b7c6"},"code.language-css .token.id":{color:"#ffc66d"},"code.language-css .token.selector > .token.class":{color:"#ffc66d"},"code.language-css .token.selector > .token.attribute":{color:"#ffc66d"},"code.language-css .token.selector > .token.pseudo-class":{color:"#ffc66d"},"code.language-css .token.selector > .token.pseudo-element":{color:"#ffc66d"},"class-name":{color:"#fb94ff"},".language-css .token.string":{background:"none"},".style .token.string":{background:"none"},"pre .line-highlight":{marginTop:"36px",background:"linear-gradient(to right, rgba(179, 98, 255, 0.17), transparent)"},"pre .line-highlight.line-highlight":{marginTop:"36px",background:"linear-gradient(to right, rgba(179, 98, 255, 0.17), transparent)"},"pre > code.line-highlight":{marginTop:"36px",background:"linear-gradient(to right, rgba(179, 98, 255, 0.17), transparent)"},"pre .line-highlight:before":{content:"''"},"pre > code.line-highlight:before":{content:"''"},"pre .line-highlight[data-end]:after":{content:"''"},"pre > code.line-highlight[data-end]:after":{content:"''"}}},pI64:function(e,t,n){"use strict";e.exports=function(e,t){var n,i,a={},s=t.ordered?"ol":"ul",l=-1;"number"===typeof t.start&&1!==t.start&&(a.start=t.start);n=r(e,t),i=n.length;for(;++l=55296&&e<=57343},t.isSurrogatePair=function(e){return e>=56320&&e<=57343},t.getSurrogatePairCodePoint=function(e,t){return 1024*(e-55296)+9216+t},t.isControlCodePoint=function(e){return 32!==e&&10!==e&&13!==e&&9!==e&&12!==e&&e>=1&&e<=31||e>=127&&e<=159},t.isUndefinedCodePoint=function(e){return e>=64976&&e<=65007||o.indexOf(e)>-1}},pe0m:function(e,t,n){"use strict";e.exports=function(e){return null===e||void 0===e?[]:"length"in e?e:[e]}},penn:function(e,t,n){e.exports=n("YK6v")},qD0n:function(e,t){function n(e){this.stack[this.stack.length-2].checked="taskListCheckValueChecked"===e.type}t.exit={taskListCheckValueChecked:n,taskListCheckValueUnchecked:n,paragraph:function(e){var t,n=this.stack[this.stack.length-2],o=this.stack[this.stack.length-1],r=n.children,i=o.children[0],a=-1;if(n&&"listItem"===n.type&&"boolean"===typeof n.checked&&i&&"text"===i.type){for(;++a-1||r(i.events,"linePrefix")<4?e.interrupt(i.parser.constructs.flow,n,t)(a):t(a)}},partial:!0};e.exports=s},rRyo:function(e,t,n){"use strict";e.exports=function(e,t){var n,i=e.definition(t.identifier);if(!i)return r(e,t);n={src:o(i.url||""),alt:t.alt},null!==i.title&&void 0!==i.title&&(n.title=i.title);return e(t,"img",n)};var o=n("xGQ6"),r=n("WniP")},rS7C:function(e,t,n){"use strict";var o=n("F6fn"),r=n("bAF5"),i=n("r3IV"),a=n("TTG4").parse,s=n("vfP8").parse;e.exports=function(e,t,n){var r=n?function(e){var t,n=e.length,o=-1,r={};for(;++o code[class*="language-"]':{background:"#282a36",padding:".1em",borderRadius:".3em",whiteSpace:"normal"},comment:{color:"#6272a4"},prolog:{color:"#6272a4"},doctype:{color:"#6272a4"},cdata:{color:"#6272a4"},punctuation:{color:"#f8f8f2"},".namespace":{Opacity:".7"},property:{color:"#ff79c6"},tag:{color:"#ff79c6"},constant:{color:"#ff79c6"},symbol:{color:"#ff79c6"},deleted:{color:"#ff79c6"},boolean:{color:"#bd93f9"},number:{color:"#bd93f9"},selector:{color:"#50fa7b"},"attr-name":{color:"#50fa7b"},string:{color:"#50fa7b"},char:{color:"#50fa7b"},builtin:{color:"#50fa7b"},inserted:{color:"#50fa7b"},operator:{color:"#f8f8f2"},entity:{color:"#f8f8f2",cursor:"help"},url:{color:"#f8f8f2"},".language-css .token.string":{color:"#f8f8f2"},".style .token.string":{color:"#f8f8f2"},variable:{color:"#f8f8f2"},atrule:{color:"#f1fa8c"},"attr-value":{color:"#f1fa8c"},function:{color:"#f1fa8c"},"class-name":{color:"#f1fa8c"},keyword:{color:"#8be9fd"},regex:{color:"#ffb86c"},important:{color:"#ffb86c",fontWeight:"bold"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"}}},srZV:function(e,t,n){"use strict";const o=n("9kwo"),r=n("CGnT"),i=n("HwUZ");e.exports=class extends o{constructor(e,t){super(e,t),this.posTracker=i.install(e,r),this.lastErrOffset=-1}_reportError(e){this.lastErrOffset!==this.posTracker.offset&&(this.lastErrOffset=this.posTracker.offset,super._reportError(e))}}},tCBg:function(e,t,n){var o=n("C+bE"),r=n("qXWd");e.exports=function(e,t){return!t||"object"!==o(t)&&"function"!==typeof t?r(e):t}},tgGP:function(e,t,n){"use strict";var o=n("ueQ+"),r=n("+OJB"),i=n("c6jy");e.exports=l;var a={}.hasOwnProperty,s=["history","path","basename","stem","extname","dirname"];function l(e){var t,n;if(e){if("string"===typeof e||i(e))e={contents:e};else if("message"in e&&"messages"in e)return e}else e={};if(!(this instanceof l))return new l(e);for(this.data={},this.messages=[],this.history=[],this.cwd=r.cwd(),n=-1;++n-1)throw new Error("`"+t+"` cannot be a path: did not expect `"+o.sep+"`")}function u(e,t){if(!e)throw new Error("`"+t+"` cannot be empty")}function d(e,t){if(!e)throw new Error("Setting `"+t+"` requires `path` to be set too")}l.prototype.toString=function(e){return(this.contents||"").toString(e)},Object.defineProperty(l.prototype,"path",{get:function(){return this.history[this.history.length-1]},set:function(e){u(e,"path"),this.path!==e&&this.history.push(e)}}),Object.defineProperty(l.prototype,"dirname",{get:function(){return"string"===typeof this.path?o.dirname(this.path):void 0},set:function(e){d(this.path,"dirname"),this.path=o.join(e||"",this.basename)}}),Object.defineProperty(l.prototype,"basename",{get:function(){return"string"===typeof this.path?o.basename(this.path):void 0},set:function(e){u(e,"basename"),c(e,"basename"),this.path=o.join(this.dirname||"",e)}}),Object.defineProperty(l.prototype,"extname",{get:function(){return"string"===typeof this.path?o.extname(this.path):void 0},set:function(e){if(c(e,"extname"),d(this.path,"extname"),e){if(46!==e.charCodeAt(0))throw new Error("`extname` must start with `.`");if(e.indexOf(".",1)>-1)throw new Error("`extname` cannot contain multiple dots")}this.path=o.join(this.dirname,this.stem+(e||""))}}),Object.defineProperty(l.prototype,"stem",{get:function(){return"string"===typeof this.path?o.basename(this.path,this.extname):void 0},set:function(e){u(e,"stem"),c(e,"stem"),this.path=o.join(this.dirname||"",e+(this.extname||""))}})},u0PD:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'pre[class*="language-"]':{color:"#d4d4d4",fontSize:"13px",textShadow:"none",fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",padding:"1em",margin:".5em 0",overflow:"auto",background:"#1e1e1e"},'code[class*="language-"]':{color:"#d4d4d4",fontSize:"13px",textShadow:"none",fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none"},'pre[class*="language-"]::selection':{textShadow:"none",background:"#b3d4fc"},'code[class*="language-"]::selection':{textShadow:"none",background:"#b3d4fc"},':not(pre) > code[class*="language-"]':{padding:".1em .3em",borderRadius:".3em",color:"#db4c69",background:"#f9f2f4"},".namespace":{Opacity:".7"},comment:{color:"#6a9955"},prolog:{color:"#6a9955"},doctype:{color:"#6a9955"},cdata:{color:"#6a9955"},punctuation:{color:"#d4d4d4"},property:{color:"#9cdcfe"},tag:{color:"#569cd6"},boolean:{color:"#569cd6"},number:{color:"#b5cea8"},constant:{color:"#9CDCFE"},symbol:{color:"#b5cea8"},deleted:{color:"#b5cea8"},selector:{color:"#d7ba7d"},"attr-name":{color:"#9cdcfe"},string:{color:"#ce9178"},char:{color:"#ce9178"},builtin:{color:"#ce9178"},inserted:{color:"#ce9178"},operator:{color:"#d4d4d4",background:"#1e1e1e"},entity:{color:"#4ec9b0",background:"#1e1e1e",cursor:"unset"},url:{color:"#d4d4d4",background:"#1e1e1e"},".language-css .token.string":{color:"#d4d4d4",background:"#1e1e1e"},".style .token.string":{color:"#d4d4d4",background:"#1e1e1e"},atrule:{color:"#c586c0"},"attr-value":{color:"#ce9178"},keyword:{color:"#c586c0"},function:{color:"#dcdcaa"},regex:{color:"#d16969"},important:{color:"#d16969",fontWeight:"bold"},variable:{color:"#d16969"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},"class-name":{color:"#4EC9B0"},parameter:{color:"#9CDCFE"},interpolation:{color:"#9CDCFE"},"punctuation.interpolation-punctuation":{color:"#569cd6"},namespace:{color:"#4ec9b0"},'pre[class*="language-javascript"]':{color:"#4ec9b0"},'code[class*="language-javascript"]':{color:"#4ec9b0"},'pre[class*="language-css"]':{color:"#CE9178"},'code[class*="language-css"]':{color:"#CE9178"},'pre[class*="language-html"]':{color:"#d4d4d4"},'code[class*="language-html"]':{color:"#d4d4d4"},".language-html .token.punctuation":{color:"#808080"},"pre[data-line]":{position:"relative"},'pre[class*="language-"] > code[class*="language-"]':{position:"relative",zIndex:"1"},".line-highlight":{position:"absolute",left:"0",right:"0",padding:"inherit 0",marginTop:"1em",background:"#f7ebc6",boxShadow:"inset 5px 0 0 #f7d87c",zIndex:"0",pointerEvents:"none",lineHeight:"inherit",whiteSpace:"pre"}}},uDje:function(e,t,n){"use strict";var o=n("rm/B")(/\s/);e.exports=o},uGmZ:function(e,t,n){e.exports=n("CGL2")},"ueQ+":function(e,t,n){"use strict";function o(e){var t,n;return r(e),t=47===e.charCodeAt(0),(n=function(e,t){var n,o,r="",i=0,a=-1,s=0,l=-1;for(;++l<=e.length;){if(l2){if((o=r.lastIndexOf("/"))!==r.length-1){o<0?(r="",i=0):i=(r=r.slice(0,o)).length-1-r.lastIndexOf("/"),a=l,s=0;continue}}else if(r.length){r="",i=0,a=l,s=0;continue}t&&(r=r.length?r+"/..":"..",i=2)}else r.length?r+="/"+e.slice(a+1,l):r=e.slice(a+1,l),i=l-a-1;a=l,s=0}else 46===n&&s>-1?s++:s=-1}return r}(e,!t)).length||t||(n="."),n.length&&47===e.charCodeAt(e.length-1)&&(n+="/"),t?"/"+n:n}function r(e){if("string"!==typeof e)throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}t.basename=function(e,t){var n,o,i,a,s=0,l=-1;if(void 0!==t&&"string"!==typeof t)throw new TypeError('"ext" argument must be a string');if(r(e),n=e.length,void 0===t||!t.length||t.length>e.length){for(;n--;)if(47===e.charCodeAt(n)){if(i){s=n+1;break}}else l<0&&(i=!0,l=n+1);return l<0?"":e.slice(s,l)}if(t===e)return"";o=-1,a=t.length-1;for(;n--;)if(47===e.charCodeAt(n)){if(i){s=n+1;break}}else o<0&&(i=!0,o=n+1),a>-1&&(e.charCodeAt(n)===t.charCodeAt(a--)?a<0&&(l=n):(a=-1,l=o));s===l?l=o:l<0&&(l=e.length);return e.slice(s,l)},t.dirname=function(e){var t,n,o;if(r(e),!e.length)return".";t=-1,o=e.length;for(;--o;)if(47===e.charCodeAt(o)){if(n){t=o;break}}else n||(n=!0);return t<0?47===e.charCodeAt(0)?"/":".":1===t&&47===e.charCodeAt(0)?"//":e.slice(0,t)},t.extname=function(e){var t,n,o,i=-1,a=0,s=-1,l=0;r(e),o=e.length;for(;o--;)if(47!==(n=e.charCodeAt(o)))s<0&&(t=!0,s=o+1),46===n?i<0?i=o:1!==l&&(l=1):i>-1&&(l=-1);else if(t){a=o+1;break}if(i<0||s<0||0===l||1===l&&i===s-1&&i===a+1)return"";return e.slice(i,s)},t.join=function(){var e,t=-1;for(;++t0&&("\r"===c||"\n"===c)&&"html"===i.type&&(s[s.length-1]=s[s.length-1].replace(/(\r?\n|\r)$/," "),c=" "),s.push(t.handle(i,e,t,{before:c,after:o})),c=s[s.length-1].slice(-1);return s.join("")}},uzq8:function(e,t,n){"use strict";e.exports=l;var o=n("Zasy"),r=n("AJTF"),i=!0,a="skip",s=!1;function l(e,t,n,l){var c,u;"function"===typeof t&&"function"!==typeof n&&(l=n,n=t,t=null),u=o(t),c=l?-1:1,function e(o,d,p){var f,h="object"===typeof o&&null!==o?o:{};"string"===typeof h.type&&(f="string"===typeof h.tagName?h.tagName:"string"===typeof h.name?h.name:void 0,m.displayName="node ("+r(h.type+(f?"<"+f+">":""))+")");return m;function m(){var r,f,h=p.concat(o),m=[];if((!t||u(o,d,p[p.length-1]||null))&&(m=function(e){if(null!==e&&"object"===typeof e&&"length"in e)return e;if("number"===typeof e)return[i,e];return[e]}(n(o,p)))[0]===s)return m;if(o.children&&m[0]!==a)for(f=(l?o.children.length:-1)+c;f>-1&&f code[class*="language-"]':{whiteSpace:"normal",borderRadius:"0.2em",padding:"0.1em"},".language-css > code":{color:"#fd9170"},".language-sass > code":{color:"#fd9170"},".language-scss > code":{color:"#fd9170"},'[class*="language-"] .namespace':{Opacity:"0.7"},atrule:{color:"#c792ea"},"attr-name":{color:"#ffcb6b"},"attr-value":{color:"#a5e844"},attribute:{color:"#a5e844"},boolean:{color:"#c792ea"},builtin:{color:"#ffcb6b"},cdata:{color:"#80cbc4"},char:{color:"#80cbc4"},class:{color:"#ffcb6b"},"class-name":{color:"#f2ff00"},comment:{color:"#616161"},constant:{color:"#c792ea"},deleted:{color:"#ff6666"},doctype:{color:"#616161"},entity:{color:"#ff6666"},function:{color:"#c792ea"},hexcode:{color:"#f2ff00"},id:{color:"#c792ea",fontWeight:"bold"},important:{color:"#c792ea",fontWeight:"bold"},inserted:{color:"#80cbc4"},keyword:{color:"#c792ea"},number:{color:"#fd9170"},operator:{color:"#89ddff"},prolog:{color:"#616161"},property:{color:"#80cbc4"},"pseudo-class":{color:"#a5e844"},"pseudo-element":{color:"#a5e844"},punctuation:{color:"#89ddff"},regex:{color:"#f2ff00"},selector:{color:"#ff6666"},string:{color:"#a5e844"},symbol:{color:"#c792ea"},tag:{color:"#ff6666"},unit:{color:"#fd9170"},url:{color:"#ff6666"},variable:{color:"#ff6666"}}},wGQB:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{color:"#ccc",background:"none",fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",fontSize:"1em",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none"},'pre[class*="language-"]':{color:"#ccc",background:"#2d2d2d",fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",fontSize:"1em",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",padding:"1em",margin:".5em 0",overflow:"auto"},':not(pre) > code[class*="language-"]':{background:"#2d2d2d",padding:".1em",borderRadius:".3em",whiteSpace:"normal"},comment:{color:"#999"},"block-comment":{color:"#999"},prolog:{color:"#999"},doctype:{color:"#999"},cdata:{color:"#999"},punctuation:{color:"#ccc"},tag:{color:"#e2777a"},"attr-name":{color:"#e2777a"},namespace:{color:"#e2777a"},deleted:{color:"#e2777a"},"function-name":{color:"#6196cc"},boolean:{color:"#f08d49"},number:{color:"#f08d49"},function:{color:"#f08d49"},property:{color:"#f8c555"},"class-name":{color:"#f8c555"},constant:{color:"#f8c555"},symbol:{color:"#f8c555"},selector:{color:"#cc99cd"},important:{color:"#cc99cd",fontWeight:"bold"},atrule:{color:"#cc99cd"},keyword:{color:"#cc99cd"},builtin:{color:"#cc99cd"},string:{color:"#7ec699"},char:{color:"#7ec699"},"attr-value":{color:"#7ec699"},regex:{color:"#7ec699"},variable:{color:"#7ec699"},operator:{color:"#67cdcc"},entity:{color:"#67cdcc",cursor:"help"},url:{color:"#67cdcc"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},inserted:{color:"green"}}},wH4i:function(e,t,n){"use strict";var o,r=n("penn"),i=n("jv5L"),a=n("ywEd");e.exports=function(e){var t=this.data();!o&&(this.Parser&&this.Parser.prototype&&this.Parser.prototype.blockTokenizers||this.Compiler&&this.Compiler.prototype&&this.Compiler.prototype.visitors)&&(o=!0,console.warn("[remark-gfm] Warning: please upgrade to remark 13 to use this plugin"));function n(e,n){t[e]?t[e].push(n):t[e]=[n]}n("micromarkExtensions",r(e)),n("fromMarkdownExtensions",i),n("toMarkdownExtensions",a(e))}},wJMj:function(e,t,n){"use strict";e.exports=function(e,t,n){"string"!==typeof t&&(n=t,t=void 0);return function(e){var t=e||{},n=function(e,t){var n=-1;for(;++n-1&&(D.call(this,e),F.call(this,e))}function z(){h("atHardBreak",!0)}function U(){var e=this.resume();this.stack[this.stack.length-1].value=e}function G(){var e=this.resume();this.stack[this.stack.length-1].value=e}function W(){var e=this.resume();this.stack[this.stack.length-1].value=e}function K(){var e=this.stack[this.stack.length-1];m("inReference")?(e.type+="Reference",e.referenceType=m("referenceType")||"shortcut",delete e.url,delete e.title):(delete e.identifier,delete e.label,delete e.referenceType),h("referenceType")}function j(){var e=this.stack[this.stack.length-1];m("inReference")?(e.type+="Reference",e.referenceType=m("referenceType")||"shortcut",delete e.url,delete e.title):(delete e.identifier,delete e.label,delete e.referenceType),h("referenceType")}function Y(e){this.stack[this.stack.length-2].identifier=a(this.sliceSerialize(e)).toLowerCase()}function Q(){var e=this.stack[this.stack.length-1],t=this.resume();this.stack[this.stack.length-1].label=t,h("inReference",!0),"link"===this.stack[this.stack.length-1].type?this.stack[this.stack.length-1].children=e.children:this.stack[this.stack.length-1].alt=t}function V(){var e=this.resume();this.stack[this.stack.length-1].url=e}function q(){var e=this.resume();this.stack[this.stack.length-1].title=e}function X(){h("inReference")}function J(){h("referenceType","collapsed")}function Z(e){var t=this.resume();this.stack[this.stack.length-1].label=t,this.stack[this.stack.length-1].identifier=a(this.sliceSerialize(e)).toLowerCase(),h("referenceType","full")}function $(e){h("characterReferenceType",e.type)}function ee(e){var t,n,o=this.sliceSerialize(e),r=m("characterReferenceType");r?(t=s(o,"characterReferenceMarkerNumeric"===r?10:16),h("characterReferenceType")):t=d(o),(n=this.stack.pop()).value+=t,n.position.end=g(e.end)}function te(e){F.call(this,e),this.stack[this.stack.length-1].url=this.sliceSerialize(e)}function ne(e){F.call(this,e),this.stack[this.stack.length-1].url="mailto:"+this.sliceSerialize(e)}function oe(){return{type:"blockquote",children:[]}}function re(){return{type:"code",lang:null,meta:null,value:""}}function ie(){return{type:"inlineCode",value:""}}function ae(){return{type:"definition",identifier:"",label:null,title:null,url:""}}function se(){return{type:"emphasis",children:[]}}function le(){return{type:"heading",depth:void 0,children:[]}}function ce(){return{type:"break"}}function ue(){return{type:"html",value:""}}function de(){return{type:"image",title:null,url:"",alt:null}}function pe(){return{type:"link",title:null,url:"",children:[]}}function fe(e){return{type:"list",ordered:"listOrdered"===e.type,start:null,spread:e._spread,children:[]}}function he(e){return{type:"listItem",spread:e._spread,checked:null,children:[]}}function me(){return{type:"paragraph",children:[]}}function ge(){return{type:"strong",children:[]}}function Te(){return{type:"text",value:""}}function Ee(){return{type:"thematicBreak"}}}(n)(u(l(n).document().write(c()(e,t,!0))))};var o=n("IW26"),r=n("NOby"),i=n("TDhK"),a=n("Bh6z"),s=n("Z0IX"),l=n("0RbX"),c=n("o8bm"),u=n("1mpw"),d=n("WtKE"),p=n("/qNp");function f(e,t){var n,o;for(n in t)o=i.call(e,n)?e[n]:e[n]={},"canContainEols"===n||"transforms"===n?e[n]=[].concat(o,t[n]):Object.assign(o,t[n])}},wYf1:function(e,t,n){var o=n("uzhd"),r=n("gsvO"),i=n("55fs");e.exports=function(e){var t=e||{},n=t.tableCellPadding,a=t.tablePipeAlign,s=t.stringLength,l=n?" ":"|";return{unsafe:[{character:"\r",inConstruct:"tableCell"},{character:"\n",inConstruct:"tableCell"},{atBreak:!0,character:"|",after:"[\t :-]"},{character:"|",inConstruct:"tableCell"},{atBreak:!0,character:":",after:"-"},{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{table:function(e,t,n){return u(function(e,t){var n=e.children,o=-1,r=n.length,i=[],a=t.enter("table");for(;++o=55296&&s<=57343){if(s>=55296&&s<=56319&&i+1=56320&&l<=57343){u+=encodeURIComponent(e[i]+e[i+1]),i++;continue}u+="%EF%BF%BD"}else u+=encodeURIComponent(e[i]);return u}r.defaultChars=";/?:@&=+$,-_.!~*'()#",r.componentChars="-_.!~*'()",e.exports=r},xkQk:function(e,t,n){"use strict";var o=n("EBzq");e.exports=i,i.wrap=o;var r=[].slice;function i(){var e=[],t={run:function(){var t=-1,n=r.call(arguments,0,-1),i=arguments[arguments.length-1];if("function"!==typeof i)throw new Error("Expected function as last argument, not "+i);function a(s){var l=e[++t],c=r.call(arguments,0),u=c.slice(1),d=n.length,p=-1;if(s)i(s);else{for(;++p code[class*="language-"]':{background:"#2b2b2b",padding:"0.1em",borderRadius:"0.3em",whiteSpace:"normal"},comment:{color:"#d4d0ab"},prolog:{color:"#d4d0ab"},doctype:{color:"#d4d0ab"},cdata:{color:"#d4d0ab"},punctuation:{color:"#fefefe"},property:{color:"#ffa07a"},tag:{color:"#ffa07a"},constant:{color:"#ffa07a"},symbol:{color:"#ffa07a"},deleted:{color:"#ffa07a"},boolean:{color:"#00e0e0"},number:{color:"#00e0e0"},selector:{color:"#abe338"},"attr-name":{color:"#abe338"},string:{color:"#abe338"},char:{color:"#abe338"},builtin:{color:"#abe338"},inserted:{color:"#abe338"},operator:{color:"#00e0e0"},entity:{color:"#00e0e0",cursor:"help"},url:{color:"#00e0e0"},".language-css .token.string":{color:"#00e0e0"},".style .token.string":{color:"#00e0e0"},variable:{color:"#00e0e0"},atrule:{color:"#ffd700"},"attr-value":{color:"#ffd700"},function:{color:"#ffd700"},keyword:{color:"#00e0e0"},regex:{color:"#ffd700"},important:{color:"#ffd700",fontWeight:"bold"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"}}},ywEd:function(e,t,n){var o=n("oDdY"),r=n("K/gC"),i=n("wYf1"),a=n("vSfO"),s=n("UhtW");e.exports=function(e){var t=s({handlers:{},join:[],unsafe:[],options:{}},{extensions:[o,r,i(e),a]});return Object.assign(t.options,{handlers:t.handlers,join:t.join,unsafe:t.unsafe})}},z2ZG:function(e,t,n){"use strict";var o=n("U6jy"),r=n("dKIx");e.exports=function(e){var t,n,i=e.length,a=[],s=[],l=-1;for(;++l=0;o--){const r=e.openElements.items[o];if(r===t.element)break;e._isSpecialElement(r)&&(n=r)}return n||(e.openElements.popUntilElementPopped(t.element),e.activeFormattingElements.removeEntry(t)),n}function q(e,t,n){let o=t,r=e.openElements.getCommonAncestor(t);for(let i=0,a=r;a!==n;i++,a=r){r=e.openElements.getCommonAncestor(a);const n=e.activeFormattingElements.getElementEntry(a),s=n&&i>=3;!n||s?(s&&e.activeFormattingElements.removeEntry(n),e.openElements.remove(a)):(a=X(e,n),o===t&&(e.activeFormattingElements.bookmark=n),e.treeAdapter.detachNode(o),e.treeAdapter.appendChild(a,o),o=a)}return o}function X(e,t){const n=e.treeAdapter.getNamespaceURI(t.element),o=e.treeAdapter.createElement(t.token.tagName,n,t.token.attrs);return e.openElements.replace(t.element,o),t.element=o,o}function J(e,t,n){if(e._isElementCausesFosterParenting(t))e._fosterParentElement(n);else{const o=e.treeAdapter.getTagName(t),r=e.treeAdapter.getNamespaceURI(t);o===g.TEMPLATE&&r===T.HTML&&(t=e.treeAdapter.getTemplateContent(t)),e.treeAdapter.appendChild(t,n)}}function Z(e,t,n){const o=e.treeAdapter.getNamespaceURI(n.element),r=n.token,i=e.treeAdapter.createElement(r.tagName,o,r.attrs);e._adoptNodes(t,i),e.treeAdapter.appendChild(t,i),e.activeFormattingElements.insertElementAfterBookmark(i,n.token),e.activeFormattingElements.removeEntry(n),e.openElements.remove(n.element),e.openElements.insertAfter(t,i)}function $(e,t){let n;for(let o=0;o<8&&(n=Q(e,t),n);o++){const t=V(e,n);if(!t)break;e.activeFormattingElements.bookmark=n;const o=q(e,t,n.element),r=e.openElements.getCommonAncestor(n.element);e.treeAdapter.detachNode(o),J(e,r,o),Z(e,t,n)}}function ee(){}function te(e){e._err(f.misplacedDoctype)}function ne(e,t){e._appendCommentNode(t,e.openElements.currentTmplContent||e.openElements.current)}function oe(e,t){e._appendCommentNode(t,e.document)}function re(e,t){e._insertCharacters(t)}function ie(e){e.stopped=!0}function ae(e,t){e._err(f.missingDoctype,{beforeToken:!0}),e.treeAdapter.setDocumentMode(e.document,m.DOCUMENT_MODE.QUIRKS),e.insertionMode=y,e._processToken(t)}function se(e,t){e._insertFakeRootElement(),e.insertionMode=_,e._processToken(t)}function le(e,t){e._insertFakeElement(g.HEAD),e.headElement=e.openElements.current,e.insertionMode=S,e._processToken(t)}function ce(e,t){const n=t.tagName;n===g.HTML?xe(e,t):n===g.BASE||n===g.BASEFONT||n===g.BGSOUND||n===g.LINK||n===g.META?(e._appendElement(t,T.HTML),t.ackSelfClosing=!0):n===g.TITLE?e._switchToTextParsing(t,o.MODE.RCDATA):n===g.NOSCRIPT?e.options.scriptingEnabled?e._switchToTextParsing(t,o.MODE.RAWTEXT):(e._insertElement(t,T.HTML),e.insertionMode=C):n===g.NOFRAMES||n===g.STYLE?e._switchToTextParsing(t,o.MODE.RAWTEXT):n===g.SCRIPT?e._switchToTextParsing(t,o.MODE.SCRIPT_DATA):n===g.TEMPLATE?(e._insertTemplate(t,T.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=!1,e.insertionMode=F,e._pushTmplInsertionMode(F)):n===g.HEAD?e._err(f.misplacedStartTagForHeadElement):de(e,t)}function ue(e,t){const n=t.tagName;n===g.HEAD?(e.openElements.pop(),e.insertionMode=x):n===g.BODY||n===g.BR||n===g.HTML?de(e,t):n===g.TEMPLATE&&e.openElements.tmplCount>0?(e.openElements.generateImpliedEndTagsThoroughly(),e.openElements.currentTagName!==g.TEMPLATE&&e._err(f.closingOfElementWithOpenChildElements),e.openElements.popUntilTagNamePopped(g.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e._popTmplInsertionMode(),e._resetInsertionMode()):e._err(f.endTagWithoutMatchingOpenElement)}function de(e,t){e.openElements.pop(),e.insertionMode=x,e._processToken(t)}function pe(e,t){const n=t.type===o.EOF_TOKEN?f.openElementsLeftAfterEof:f.disallowedContentInNoscriptInHead;e._err(n),e.openElements.pop(),e.insertionMode=S,e._processToken(t)}function fe(e,t){e._insertFakeElement(g.BODY),e.insertionMode=v,e._processToken(t)}function he(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t)}function me(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t),e.framesetOk=!1}function ge(e,t){e.openElements.hasInButtonScope(g.P)&&e._closePElement(),e._insertElement(t,T.HTML)}function Te(e,t){e.openElements.hasInButtonScope(g.P)&&e._closePElement(),e._insertElement(t,T.HTML),e.skipNextNewLine=!0,e.framesetOk=!1}function Ee(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,T.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}function be(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,T.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=!1}function Ae(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,T.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}function ke(e,t){e._appendElement(t,T.HTML),t.ackSelfClosing=!0}function ye(e,t){e._switchToTextParsing(t,o.MODE.RAWTEXT)}function _e(e,t){e.openElements.currentTagName===g.OPTION&&e.openElements.pop(),e._reconstructActiveFormattingElements(),e._insertElement(t,T.HTML)}function Se(e,t){e.openElements.hasInScope(g.RUBY)&&e.openElements.generateImpliedEndTags(),e._insertElement(t,T.HTML)}function Ce(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,T.HTML)}function xe(e,t){const n=t.tagName;switch(n.length){case 1:n===g.I||n===g.S||n===g.B||n===g.U?Ee(e,t):n===g.P?ge(e,t):n===g.A?function(e,t){const n=e.activeFormattingElements.getElementEntryInScopeWithTagName(g.A);n&&($(e,t),e.openElements.remove(n.element),e.activeFormattingElements.removeEntry(n)),e._reconstructActiveFormattingElements(),e._insertElement(t,T.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}(e,t):Ce(e,t);break;case 2:n===g.DL||n===g.OL||n===g.UL?ge(e,t):n===g.H1||n===g.H2||n===g.H3||n===g.H4||n===g.H5||n===g.H6?function(e,t){e.openElements.hasInButtonScope(g.P)&&e._closePElement();const n=e.openElements.currentTagName;n!==g.H1&&n!==g.H2&&n!==g.H3&&n!==g.H4&&n!==g.H5&&n!==g.H6||e.openElements.pop(),e._insertElement(t,T.HTML)}(e,t):n===g.LI||n===g.DD||n===g.DT?function(e,t){e.framesetOk=!1;const n=t.tagName;for(let o=e.openElements.stackTop;o>=0;o--){const t=e.openElements.items[o],r=e.treeAdapter.getTagName(t);let i=null;if(n===g.LI&&r===g.LI?i=g.LI:n!==g.DD&&n!==g.DT||r!==g.DD&&r!==g.DT||(i=r),i){e.openElements.generateImpliedEndTagsWithExclusion(i),e.openElements.popUntilTagNamePopped(i);break}if(r!==g.ADDRESS&&r!==g.DIV&&r!==g.P&&e._isSpecialElement(t))break}e.openElements.hasInButtonScope(g.P)&&e._closePElement(),e._insertElement(t,T.HTML)}(e,t):n===g.EM||n===g.TT?Ee(e,t):n===g.BR?Ae(e,t):n===g.HR?function(e,t){e.openElements.hasInButtonScope(g.P)&&e._closePElement(),e._appendElement(t,T.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}(e,t):n===g.RB?Se(e,t):n===g.RT||n===g.RP?function(e,t){e.openElements.hasInScope(g.RUBY)&&e.openElements.generateImpliedEndTagsWithExclusion(g.RTC),e._insertElement(t,T.HTML)}(e,t):n!==g.TH&&n!==g.TD&&n!==g.TR&&Ce(e,t);break;case 3:n===g.DIV||n===g.DIR||n===g.NAV?ge(e,t):n===g.PRE?Te(e,t):n===g.BIG?Ee(e,t):n===g.IMG||n===g.WBR?Ae(e,t):n===g.XMP?function(e,t){e.openElements.hasInButtonScope(g.P)&&e._closePElement(),e._reconstructActiveFormattingElements(),e.framesetOk=!1,e._switchToTextParsing(t,o.MODE.RAWTEXT)}(e,t):n===g.SVG?function(e,t){e._reconstructActiveFormattingElements(),p.adjustTokenSVGAttrs(t),p.adjustTokenXMLAttrs(t),t.selfClosing?e._appendElement(t,T.SVG):e._insertElement(t,T.SVG),t.ackSelfClosing=!0}(e,t):n===g.RTC?Se(e,t):n!==g.COL&&Ce(e,t);break;case 4:n===g.HTML?function(e,t){0===e.openElements.tmplCount&&e.treeAdapter.adoptAttributes(e.openElements.items[0],t.attrs)}(e,t):n===g.BASE||n===g.LINK||n===g.META?ce(e,t):n===g.BODY?function(e,t){const n=e.openElements.tryPeekProperlyNestedBodyElement();n&&0===e.openElements.tmplCount&&(e.framesetOk=!1,e.treeAdapter.adoptAttributes(n,t.attrs))}(e,t):n===g.MAIN||n===g.MENU?ge(e,t):n===g.FORM?function(e,t){const n=e.openElements.tmplCount>0;e.formElement&&!n||(e.openElements.hasInButtonScope(g.P)&&e._closePElement(),e._insertElement(t,T.HTML),n||(e.formElement=e.openElements.current))}(e,t):n===g.CODE||n===g.FONT?Ee(e,t):n===g.NOBR?function(e,t){e._reconstructActiveFormattingElements(),e.openElements.hasInScope(g.NOBR)&&($(e,t),e._reconstructActiveFormattingElements()),e._insertElement(t,T.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}(e,t):n===g.AREA?Ae(e,t):n===g.MATH?function(e,t){e._reconstructActiveFormattingElements(),p.adjustTokenMathMLAttrs(t),p.adjustTokenXMLAttrs(t),t.selfClosing?e._appendElement(t,T.MATHML):e._insertElement(t,T.MATHML),t.ackSelfClosing=!0}(e,t):n===g.MENU?function(e,t){e.openElements.hasInButtonScope(g.P)&&e._closePElement(),e._insertElement(t,T.HTML)}(e,t):n!==g.HEAD&&Ce(e,t);break;case 5:n===g.STYLE||n===g.TITLE?ce(e,t):n===g.ASIDE?ge(e,t):n===g.SMALL?Ee(e,t):n===g.TABLE?function(e,t){e.treeAdapter.getDocumentMode(e.document)!==m.DOCUMENT_MODE.QUIRKS&&e.openElements.hasInButtonScope(g.P)&&e._closePElement(),e._insertElement(t,T.HTML),e.framesetOk=!1,e.insertionMode=N}(e,t):n===g.EMBED?Ae(e,t):n===g.INPUT?function(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,T.HTML);const n=o.getTokenAttr(t,E.TYPE);n&&n.toLowerCase()===A||(e.framesetOk=!1),t.ackSelfClosing=!0}(e,t):n===g.PARAM||n===g.TRACK?ke(e,t):n===g.IMAGE?function(e,t){t.tagName=g.IMG,Ae(e,t)}(e,t):n!==g.FRAME&&n!==g.TBODY&&n!==g.TFOOT&&n!==g.THEAD&&Ce(e,t);break;case 6:n===g.SCRIPT?ce(e,t):n===g.CENTER||n===g.FIGURE||n===g.FOOTER||n===g.HEADER||n===g.HGROUP||n===g.DIALOG?ge(e,t):n===g.BUTTON?function(e,t){e.openElements.hasInScope(g.BUTTON)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(g.BUTTON)),e._reconstructActiveFormattingElements(),e._insertElement(t,T.HTML),e.framesetOk=!1}(e,t):n===g.STRIKE||n===g.STRONG?Ee(e,t):n===g.APPLET||n===g.OBJECT?be(e,t):n===g.KEYGEN?Ae(e,t):n===g.SOURCE?ke(e,t):n===g.IFRAME?function(e,t){e.framesetOk=!1,e._switchToTextParsing(t,o.MODE.RAWTEXT)}(e,t):n===g.SELECT?function(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,T.HTML),e.framesetOk=!1,e.insertionMode===N||e.insertionMode===w||e.insertionMode===I||e.insertionMode===L||e.insertionMode===P?e.insertionMode=D:e.insertionMode=H}(e,t):n===g.OPTION?_e(e,t):Ce(e,t);break;case 7:n===g.BGSOUND?ce(e,t):n===g.DETAILS||n===g.ADDRESS||n===g.ARTICLE||n===g.SECTION||n===g.SUMMARY?ge(e,t):n===g.LISTING?Te(e,t):n===g.MARQUEE?be(e,t):n===g.NOEMBED?ye(e,t):n!==g.CAPTION&&Ce(e,t);break;case 8:n===g.BASEFONT?ce(e,t):n===g.FRAMESET?function(e,t){const n=e.openElements.tryPeekProperlyNestedBodyElement();e.framesetOk&&n&&(e.treeAdapter.detachNode(n),e.openElements.popAllUpToHtmlElement(),e._insertElement(t,T.HTML),e.insertionMode=z)}(e,t):n===g.FIELDSET?ge(e,t):n===g.TEXTAREA?function(e,t){e._insertElement(t,T.HTML),e.skipNextNewLine=!0,e.tokenizer.state=o.MODE.RCDATA,e.originalInsertionMode=e.insertionMode,e.framesetOk=!1,e.insertionMode=O}(e,t):n===g.TEMPLATE?ce(e,t):n===g.NOSCRIPT?e.options.scriptingEnabled?ye(e,t):Ce(e,t):n===g.OPTGROUP?_e(e,t):n!==g.COLGROUP&&Ce(e,t);break;case 9:n===g.PLAINTEXT?function(e,t){e.openElements.hasInButtonScope(g.P)&&e._closePElement(),e._insertElement(t,T.HTML),e.tokenizer.state=o.MODE.PLAINTEXT}(e,t):Ce(e,t);break;case 10:n===g.BLOCKQUOTE||n===g.FIGCAPTION?ge(e,t):Ce(e,t);break;default:Ce(e,t)}}function ve(e,t){const n=t.tagName;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n))}function Oe(e,t){const n=t.tagName;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n),e.activeFormattingElements.clearToLastMarker())}function Ne(e,t){const n=t.tagName;for(let o=e.openElements.stackTop;o>0;o--){const t=e.openElements.items[o];if(e.treeAdapter.getTagName(t)===n){e.openElements.generateImpliedEndTagsWithExclusion(n),e.openElements.popUntilElementPopped(t);break}if(e._isSpecialElement(t))break}}function Me(e,t){const n=t.tagName;switch(n.length){case 1:n===g.A||n===g.B||n===g.I||n===g.S||n===g.U?$(e,t):n===g.P?function(e){e.openElements.hasInButtonScope(g.P)||e._insertFakeElement(g.P),e._closePElement()}(e):Ne(e,t);break;case 2:n===g.DL||n===g.UL||n===g.OL?ve(e,t):n===g.LI?function(e){e.openElements.hasInListItemScope(g.LI)&&(e.openElements.generateImpliedEndTagsWithExclusion(g.LI),e.openElements.popUntilTagNamePopped(g.LI))}(e):n===g.DD||n===g.DT?function(e,t){const n=t.tagName;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTagsWithExclusion(n),e.openElements.popUntilTagNamePopped(n))}(e,t):n===g.H1||n===g.H2||n===g.H3||n===g.H4||n===g.H5||n===g.H6?function(e){e.openElements.hasNumberedHeaderInScope()&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilNumberedHeaderPopped())}(e):n===g.BR?function(e){e._reconstructActiveFormattingElements(),e._insertFakeElement(g.BR),e.openElements.pop(),e.framesetOk=!1}(e):n===g.EM||n===g.TT?$(e,t):Ne(e,t);break;case 3:n===g.BIG?$(e,t):n===g.DIR||n===g.DIV||n===g.NAV||n===g.PRE?ve(e,t):Ne(e,t);break;case 4:n===g.BODY?function(e){e.openElements.hasInScope(g.BODY)&&(e.insertionMode=B)}(e):n===g.HTML?function(e,t){e.openElements.hasInScope(g.BODY)&&(e.insertionMode=B,e._processToken(t))}(e,t):n===g.FORM?function(e){const t=e.openElements.tmplCount>0,n=e.formElement;t||(e.formElement=null),(n||t)&&e.openElements.hasInScope(g.FORM)&&(e.openElements.generateImpliedEndTags(),t?e.openElements.popUntilTagNamePopped(g.FORM):e.openElements.remove(n))}(e):n===g.CODE||n===g.FONT||n===g.NOBR?$(e,t):n===g.MAIN||n===g.MENU?ve(e,t):Ne(e,t);break;case 5:n===g.ASIDE?ve(e,t):n===g.SMALL?$(e,t):Ne(e,t);break;case 6:n===g.CENTER||n===g.FIGURE||n===g.FOOTER||n===g.HEADER||n===g.HGROUP||n===g.DIALOG?ve(e,t):n===g.APPLET||n===g.OBJECT?Oe(e,t):n===g.STRIKE||n===g.STRONG?$(e,t):Ne(e,t);break;case 7:n===g.ADDRESS||n===g.ARTICLE||n===g.DETAILS||n===g.SECTION||n===g.SUMMARY||n===g.LISTING?ve(e,t):n===g.MARQUEE?Oe(e,t):Ne(e,t);break;case 8:n===g.FIELDSET?ve(e,t):n===g.TEMPLATE?ue(e,t):Ne(e,t);break;case 10:n===g.BLOCKQUOTE||n===g.FIGCAPTION?ve(e,t):Ne(e,t);break;default:Ne(e,t)}}function we(e,t){e.tmplInsertionModeStackTop>-1?ze(e,t):e.stopped=!0}function Re(e,t){const n=e.openElements.currentTagName;n===g.TABLE||n===g.TBODY||n===g.TFOOT||n===g.THEAD||n===g.TR?(e.pendingCharacterTokens=[],e.hasNonWhitespacePendingCharacterToken=!1,e.originalInsertionMode=e.insertionMode,e.insertionMode=M,e._processToken(t)):Pe(e,t)}function Ie(e,t){const n=t.tagName;switch(n.length){case 2:n===g.TD||n===g.TH||n===g.TR?function(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(g.TBODY),e.insertionMode=I,e._processToken(t)}(e,t):Pe(e,t);break;case 3:n===g.COL?function(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(g.COLGROUP),e.insertionMode=R,e._processToken(t)}(e,t):Pe(e,t);break;case 4:n===g.FORM?function(e,t){e.formElement||0!==e.openElements.tmplCount||(e._insertElement(t,T.HTML),e.formElement=e.openElements.current,e.openElements.pop())}(e,t):Pe(e,t);break;case 5:n===g.TABLE?function(e,t){e.openElements.hasInTableScope(g.TABLE)&&(e.openElements.popUntilTagNamePopped(g.TABLE),e._resetInsertionMode(),e._processToken(t))}(e,t):n===g.STYLE?ce(e,t):n===g.TBODY||n===g.TFOOT||n===g.THEAD?function(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,T.HTML),e.insertionMode=I}(e,t):n===g.INPUT?function(e,t){const n=o.getTokenAttr(t,E.TYPE);n&&n.toLowerCase()===A?e._appendElement(t,T.HTML):Pe(e,t),t.ackSelfClosing=!0}(e,t):Pe(e,t);break;case 6:n===g.SCRIPT?ce(e,t):Pe(e,t);break;case 7:n===g.CAPTION?function(e,t){e.openElements.clearBackToTableContext(),e.activeFormattingElements.insertMarker(),e._insertElement(t,T.HTML),e.insertionMode=w}(e,t):Pe(e,t);break;case 8:n===g.COLGROUP?function(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,T.HTML),e.insertionMode=R}(e,t):n===g.TEMPLATE?ce(e,t):Pe(e,t);break;default:Pe(e,t)}}function Le(e,t){const n=t.tagName;n===g.TABLE?e.openElements.hasInTableScope(g.TABLE)&&(e.openElements.popUntilTagNamePopped(g.TABLE),e._resetInsertionMode()):n===g.TEMPLATE?ue(e,t):n!==g.BODY&&n!==g.CAPTION&&n!==g.COL&&n!==g.COLGROUP&&n!==g.HTML&&n!==g.TBODY&&n!==g.TD&&n!==g.TFOOT&&n!==g.TH&&n!==g.THEAD&&n!==g.TR&&Pe(e,t)}function Pe(e,t){const n=e.fosterParentingEnabled;e.fosterParentingEnabled=!0,e._processTokenInBodyMode(t),e.fosterParentingEnabled=n}function He(e,t){let n=0;if(e.hasNonWhitespacePendingCharacterToken)for(;n0?(e.openElements.popUntilTagNamePopped(g.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e._popTmplInsertionMode(),e._resetInsertionMode(),e._processToken(t)):e.stopped=!0}function Ue(e,t){e.insertionMode=v,e._processToken(t)}function Ge(e,t){e.insertionMode=v,e._processToken(t)}e.exports=class{constructor(e){this.options=u(b,e),this.treeAdapter=this.options.treeAdapter,this.pendingScript=null,this.options.sourceCodeLocationInfo&&l.install(this,a),this.options.onParseError&&l.install(this,s,{onParseError:this.options.onParseError})}parse(e){const t=this.treeAdapter.createDocument();return this._bootstrap(t,null),this.tokenizer.write(e,!0),this._runParsingLoop(null),t}parseFragment(e,t){t||(t=this.treeAdapter.createElement(g.TEMPLATE,T.HTML,[]));const n=this.treeAdapter.createElement("documentmock",T.HTML,[]);this._bootstrap(n,t),this.treeAdapter.getTagName(t)===g.TEMPLATE&&this._pushTmplInsertionMode(F),this._initTokenizerForFragmentParsing(),this._insertFakeRootElement(),this._resetInsertionMode(),this._findFormInFragmentContext(),this.tokenizer.write(e,!0),this._runParsingLoop(null);const o=this.treeAdapter.getFirstChild(n),r=this.treeAdapter.createDocumentFragment();return this._adoptNodes(o,r),r}_bootstrap(e,t){this.tokenizer=new o(this.options),this.stopped=!1,this.insertionMode=k,this.originalInsertionMode="",this.document=e,this.fragmentContext=t,this.headElement=null,this.formElement=null,this.openElements=new r(this.document,this.treeAdapter),this.activeFormattingElements=new i(this.treeAdapter),this.tmplInsertionModeStack=[],this.tmplInsertionModeStackTop=-1,this.currentTmplInsertionMode=null,this.pendingCharacterTokens=[],this.hasNonWhitespacePendingCharacterToken=!1,this.framesetOk=!0,this.skipNextNewLine=!1,this.fosterParentingEnabled=!1}_err(){}_runParsingLoop(e){for(;!this.stopped;){this._setupTokenizerCDATAMode();const t=this.tokenizer.getNextToken();if(t.type===o.HIBERNATION_TOKEN)break;if(this.skipNextNewLine&&(this.skipNextNewLine=!1,t.type===o.WHITESPACE_CHARACTER_TOKEN&&"\n"===t.chars[0])){if(1===t.chars.length)continue;t.chars=t.chars.substr(1)}if(this._processInputToken(t),e&&this.pendingScript)break}}runParsingLoopForCurrentChunk(e,t){if(this._runParsingLoop(t),t&&this.pendingScript){const e=this.pendingScript;return this.pendingScript=null,void t(e)}e&&e()}_setupTokenizerCDATAMode(){const e=this._getAdjustedCurrentElement();this.tokenizer.allowCDATA=e&&e!==this.document&&this.treeAdapter.getNamespaceURI(e)!==T.HTML&&!this._isIntegrationPoint(e)}_switchToTextParsing(e,t){this._insertElement(e,T.HTML),this.tokenizer.state=t,this.originalInsertionMode=this.insertionMode,this.insertionMode=O}switchToPlaintextParsing(){this.insertionMode=O,this.originalInsertionMode=v,this.tokenizer.state=o.MODE.PLAINTEXT}_getAdjustedCurrentElement(){return 0===this.openElements.stackTop&&this.fragmentContext?this.fragmentContext:this.openElements.current}_findFormInFragmentContext(){let e=this.fragmentContext;do{if(this.treeAdapter.getTagName(e)===g.FORM){this.formElement=e;break}e=this.treeAdapter.getParentNode(e)}while(e)}_initTokenizerForFragmentParsing(){if(this.treeAdapter.getNamespaceURI(this.fragmentContext)===T.HTML){const e=this.treeAdapter.getTagName(this.fragmentContext);e===g.TITLE||e===g.TEXTAREA?this.tokenizer.state=o.MODE.RCDATA:e===g.STYLE||e===g.XMP||e===g.IFRAME||e===g.NOEMBED||e===g.NOFRAMES||e===g.NOSCRIPT?this.tokenizer.state=o.MODE.RAWTEXT:e===g.SCRIPT?this.tokenizer.state=o.MODE.SCRIPT_DATA:e===g.PLAINTEXT&&(this.tokenizer.state=o.MODE.PLAINTEXT)}}_setDocumentType(e){const t=e.name||"",n=e.publicId||"",o=e.systemId||"";this.treeAdapter.setDocumentType(this.document,t,n,o)}_attachElementToTree(e){if(this._shouldFosterParentOnInsertion())this._fosterParentElement(e);else{const t=this.openElements.currentTmplContent||this.openElements.current;this.treeAdapter.appendChild(t,e)}}_appendElement(e,t){const n=this.treeAdapter.createElement(e.tagName,t,e.attrs);this._attachElementToTree(n)}_insertElement(e,t){const n=this.treeAdapter.createElement(e.tagName,t,e.attrs);this._attachElementToTree(n),this.openElements.push(n)}_insertFakeElement(e){const t=this.treeAdapter.createElement(e,T.HTML,[]);this._attachElementToTree(t),this.openElements.push(t)}_insertTemplate(e){const t=this.treeAdapter.createElement(e.tagName,T.HTML,e.attrs),n=this.treeAdapter.createDocumentFragment();this.treeAdapter.setTemplateContent(t,n),this._attachElementToTree(t),this.openElements.push(t)}_insertFakeRootElement(){const e=this.treeAdapter.createElement(g.HTML,T.HTML,[]);this.treeAdapter.appendChild(this.openElements.current,e),this.openElements.push(e)}_appendCommentNode(e,t){const n=this.treeAdapter.createCommentNode(e.data);this.treeAdapter.appendChild(t,n)}_insertCharacters(e){if(this._shouldFosterParentOnInsertion())this._fosterParentText(e.chars);else{const t=this.openElements.currentTmplContent||this.openElements.current;this.treeAdapter.insertText(t,e.chars)}}_adoptNodes(e,t){for(let n=this.treeAdapter.getFirstChild(e);n;n=this.treeAdapter.getFirstChild(e))this.treeAdapter.detachNode(n),this.treeAdapter.appendChild(t,n)}_shouldProcessTokenInForeignContent(e){const t=this._getAdjustedCurrentElement();if(!t||t===this.document)return!1;const n=this.treeAdapter.getNamespaceURI(t);if(n===T.HTML)return!1;if(this.treeAdapter.getTagName(t)===g.ANNOTATION_XML&&n===T.MATHML&&e.type===o.START_TAG_TOKEN&&e.tagName===g.SVG)return!1;const r=e.type===o.CHARACTER_TOKEN||e.type===o.NULL_CHARACTER_TOKEN||e.type===o.WHITESPACE_CHARACTER_TOKEN;return(!(e.type===o.START_TAG_TOKEN&&e.tagName!==g.MGLYPH&&e.tagName!==g.MALIGNMARK)&&!r||!this._isIntegrationPoint(t,T.MATHML))&&((e.type!==o.START_TAG_TOKEN&&!r||!this._isIntegrationPoint(t,T.HTML))&&e.type!==o.EOF_TOKEN)}_processToken(e){Y[this.insertionMode][e.type](this,e)}_processTokenInBodyMode(e){Y.IN_BODY_MODE[e.type](this,e)}_processTokenInForeignContent(e){e.type===o.CHARACTER_TOKEN?function(e,t){e._insertCharacters(t),e.framesetOk=!1}(this,e):e.type===o.NULL_CHARACTER_TOKEN?function(e,t){t.chars=h.REPLACEMENT_CHARACTER,e._insertCharacters(t)}(this,e):e.type===o.WHITESPACE_CHARACTER_TOKEN?re(this,e):e.type===o.COMMENT_TOKEN?ne(this,e):e.type===o.START_TAG_TOKEN?function(e,t){if(p.causesExit(t)&&!e.fragmentContext){for(;e.treeAdapter.getNamespaceURI(e.openElements.current)!==T.HTML&&!e._isIntegrationPoint(e.openElements.current);)e.openElements.pop();e._processToken(t)}else{const n=e._getAdjustedCurrentElement(),o=e.treeAdapter.getNamespaceURI(n);o===T.MATHML?p.adjustTokenMathMLAttrs(t):o===T.SVG&&(p.adjustTokenSVGTagName(t),p.adjustTokenSVGAttrs(t)),p.adjustTokenXMLAttrs(t),t.selfClosing?e._appendElement(t,o):e._insertElement(t,o),t.ackSelfClosing=!0}}(this,e):e.type===o.END_TAG_TOKEN&&function(e,t){for(let n=e.openElements.stackTop;n>0;n--){const o=e.openElements.items[n];if(e.treeAdapter.getNamespaceURI(o)===T.HTML){e._processToken(t);break}if(e.treeAdapter.getTagName(o).toLowerCase()===t.tagName){e.openElements.popUntilElementPopped(o);break}}}(this,e)}_processInputToken(e){this._shouldProcessTokenInForeignContent(e)?this._processTokenInForeignContent(e):this._processToken(e),e.type===o.START_TAG_TOKEN&&e.selfClosing&&!e.ackSelfClosing&&this._err(f.nonVoidHtmlElementStartTagWithTrailingSolidus)}_isIntegrationPoint(e,t){const n=this.treeAdapter.getTagName(e),o=this.treeAdapter.getNamespaceURI(e),r=this.treeAdapter.getAttrList(e);return p.isIntegrationPoint(n,o,r,t)}_reconstructActiveFormattingElements(){const e=this.activeFormattingElements.length;if(e){let t=e,n=null;do{if(t--,n=this.activeFormattingElements.entries[t],n.type===i.MARKER_ENTRY||this.openElements.contains(n.element)){t++;break}}while(t>0);for(let o=t;o=0;e--){let n=this.openElements.items[e];0===e&&(t=!0,this.fragmentContext&&(n=this.fragmentContext));const o=this.treeAdapter.getTagName(n),r=K[o];if(r){this.insertionMode=r;break}if(!(t||o!==g.TD&&o!==g.TH)){this.insertionMode=P;break}if(!t&&o===g.HEAD){this.insertionMode=S;break}if(o===g.SELECT){this._resetInsertionModeForSelect(e);break}if(o===g.TEMPLATE){this.insertionMode=this.currentTmplInsertionMode;break}if(o===g.HTML){this.insertionMode=this.headElement?x:_;break}if(t){this.insertionMode=v;break}}}_resetInsertionModeForSelect(e){if(e>0)for(let t=e-1;t>0;t--){const e=this.openElements.items[t],n=this.treeAdapter.getTagName(e);if(n===g.TEMPLATE)break;if(n===g.TABLE)return void(this.insertionMode=D)}this.insertionMode=H}_pushTmplInsertionMode(e){this.tmplInsertionModeStack.push(e),this.tmplInsertionModeStackTop++,this.currentTmplInsertionMode=e}_popTmplInsertionMode(){this.tmplInsertionModeStack.pop(),this.tmplInsertionModeStackTop--,this.currentTmplInsertionMode=this.tmplInsertionModeStack[this.tmplInsertionModeStackTop]}_isElementCausesFosterParenting(e){const t=this.treeAdapter.getTagName(e);return t===g.TABLE||t===g.TBODY||t===g.TFOOT||t===g.THEAD||t===g.TR}_shouldFosterParentOnInsertion(){return this.fosterParentingEnabled&&this._isElementCausesFosterParenting(this.openElements.current)}_findFosterParentingLocation(){const e={parent:null,beforeElement:null};for(let t=this.openElements.stackTop;t>=0;t--){const n=this.openElements.items[t],o=this.treeAdapter.getTagName(n),r=this.treeAdapter.getNamespaceURI(n);if(o===g.TEMPLATE&&r===T.HTML){e.parent=this.treeAdapter.getTemplateContent(n);break}if(o===g.TABLE){e.parent=this.treeAdapter.getParentNode(n),e.parent?e.beforeElement=n:e.parent=this.openElements.items[t-1];break}}return e.parent||(e.parent=this.openElements.items[0]),e}_fosterParentElement(e){const t=this._findFosterParentingLocation();t.beforeElement?this.treeAdapter.insertBefore(t.parent,e,t.beforeElement):this.treeAdapter.appendChild(t.parent,e)}_fosterParentText(e){const t=this._findFosterParentingLocation();t.beforeElement?this.treeAdapter.insertTextBefore(t.parent,e,t.beforeElement):this.treeAdapter.insertText(t.parent,e)}_isSpecialElement(e){const t=this.treeAdapter.getTagName(e),n=this.treeAdapter.getNamespaceURI(e);return m.SPECIAL_ELEMENTS[n][t]}}},zktx:function(e,t,n){"use strict";var o=n("FWC9"),r=n("DUvi"),i=n("vGni"),a=o.boolean,s=o.number,l=o.spaceSeparated,c=o.commaSeparated,u=o.commaOrSpaceSeparated;e.exports=r({space:"svg",attributes:{accentHeight:"accent-height",alignmentBaseline:"alignment-baseline",arabicForm:"arabic-form",baselineShift:"baseline-shift",capHeight:"cap-height",className:"class",clipPath:"clip-path",clipRule:"clip-rule",colorInterpolation:"color-interpolation",colorInterpolationFilters:"color-interpolation-filters",colorProfile:"color-profile",colorRendering:"color-rendering",crossOrigin:"crossorigin",dataType:"datatype",dominantBaseline:"dominant-baseline",enableBackground:"enable-background",fillOpacity:"fill-opacity",fillRule:"fill-rule",floodColor:"flood-color",floodOpacity:"flood-opacity",fontFamily:"font-family",fontSize:"font-size",fontSizeAdjust:"font-size-adjust",fontStretch:"font-stretch",fontStyle:"font-style",fontVariant:"font-variant",fontWeight:"font-weight",glyphName:"glyph-name",glyphOrientationHorizontal:"glyph-orientation-horizontal",glyphOrientationVertical:"glyph-orientation-vertical",hrefLang:"hreflang",horizAdvX:"horiz-adv-x",horizOriginX:"horiz-origin-x",horizOriginY:"horiz-origin-y",imageRendering:"image-rendering",letterSpacing:"letter-spacing",lightingColor:"lighting-color",markerEnd:"marker-end",markerMid:"marker-mid",markerStart:"marker-start",navDown:"nav-down",navDownLeft:"nav-down-left",navDownRight:"nav-down-right",navLeft:"nav-left",navNext:"nav-next",navPrev:"nav-prev",navRight:"nav-right",navUp:"nav-up",navUpLeft:"nav-up-left",navUpRight:"nav-up-right",onAbort:"onabort",onActivate:"onactivate",onAfterPrint:"onafterprint",onBeforePrint:"onbeforeprint",onBegin:"onbegin",onCancel:"oncancel",onCanPlay:"oncanplay",onCanPlayThrough:"oncanplaythrough",onChange:"onchange",onClick:"onclick",onClose:"onclose",onCopy:"oncopy",onCueChange:"oncuechange",onCut:"oncut",onDblClick:"ondblclick",onDrag:"ondrag",onDragEnd:"ondragend",onDragEnter:"ondragenter",onDragExit:"ondragexit",onDragLeave:"ondragleave",onDragOver:"ondragover",onDragStart:"ondragstart",onDrop:"ondrop",onDurationChange:"ondurationchange",onEmptied:"onemptied",onEnd:"onend",onEnded:"onended",onError:"onerror",onFocus:"onfocus",onFocusIn:"onfocusin",onFocusOut:"onfocusout",onHashChange:"onhashchange",onInput:"oninput",onInvalid:"oninvalid",onKeyDown:"onkeydown",onKeyPress:"onkeypress",onKeyUp:"onkeyup",onLoad:"onload",onLoadedData:"onloadeddata",onLoadedMetadata:"onloadedmetadata",onLoadStart:"onloadstart",onMessage:"onmessage",onMouseDown:"onmousedown",onMouseEnter:"onmouseenter",onMouseLeave:"onmouseleave",onMouseMove:"onmousemove",onMouseOut:"onmouseout",onMouseOver:"onmouseover",onMouseUp:"onmouseup",onMouseWheel:"onmousewheel",onOffline:"onoffline",onOnline:"ononline",onPageHide:"onpagehide",onPageShow:"onpageshow",onPaste:"onpaste",onPause:"onpause",onPlay:"onplay",onPlaying:"onplaying",onPopState:"onpopstate",onProgress:"onprogress",onRateChange:"onratechange",onRepeat:"onrepeat",onReset:"onreset",onResize:"onresize",onScroll:"onscroll",onSeeked:"onseeked",onSeeking:"onseeking",onSelect:"onselect",onShow:"onshow",onStalled:"onstalled",onStorage:"onstorage",onSubmit:"onsubmit",onSuspend:"onsuspend",onTimeUpdate:"ontimeupdate",onToggle:"ontoggle",onUnload:"onunload",onVolumeChange:"onvolumechange",onWaiting:"onwaiting",onZoom:"onzoom",overlinePosition:"overline-position",overlineThickness:"overline-thickness",paintOrder:"paint-order",panose1:"panose-1",pointerEvents:"pointer-events",referrerPolicy:"referrerpolicy",renderingIntent:"rendering-intent",shapeRendering:"shape-rendering",stopColor:"stop-color",stopOpacity:"stop-opacity",strikethroughPosition:"strikethrough-position",strikethroughThickness:"strikethrough-thickness",strokeDashArray:"stroke-dasharray",strokeDashOffset:"stroke-dashoffset",strokeLineCap:"stroke-linecap",strokeLineJoin:"stroke-linejoin",strokeMiterLimit:"stroke-miterlimit",strokeOpacity:"stroke-opacity",strokeWidth:"stroke-width",tabIndex:"tabindex",textAnchor:"text-anchor",textDecoration:"text-decoration",textRendering:"text-rendering",typeOf:"typeof",underlinePosition:"underline-position",underlineThickness:"underline-thickness",unicodeBidi:"unicode-bidi",unicodeRange:"unicode-range",unitsPerEm:"units-per-em",vAlphabetic:"v-alphabetic",vHanging:"v-hanging",vIdeographic:"v-ideographic",vMathematical:"v-mathematical",vectorEffect:"vector-effect",vertAdvY:"vert-adv-y",vertOriginX:"vert-origin-x",vertOriginY:"vert-origin-y",wordSpacing:"word-spacing",writingMode:"writing-mode",xHeight:"x-height",playbackOrder:"playbackorder",timelineBegin:"timelinebegin"},transform:i,properties:{about:u,accentHeight:s,accumulate:null,additive:null,alignmentBaseline:null,alphabetic:s,amplitude:s,arabicForm:null,ascent:s,attributeName:null,attributeType:null,azimuth:s,bandwidth:null,baselineShift:null,baseFrequency:null,baseProfile:null,bbox:null,begin:null,bias:s,by:null,calcMode:null,capHeight:s,className:l,clip:null,clipPath:null,clipPathUnits:null,clipRule:null,color:null,colorInterpolation:null,colorInterpolationFilters:null,colorProfile:null,colorRendering:null,content:null,contentScriptType:null,contentStyleType:null,crossOrigin:null,cursor:null,cx:null,cy:null,d:null,dataType:null,defaultAction:null,descent:s,diffuseConstant:s,direction:null,display:null,dur:null,divisor:s,dominantBaseline:null,download:a,dx:null,dy:null,edgeMode:null,editable:null,elevation:s,enableBackground:null,end:null,event:null,exponent:s,externalResourcesRequired:null,fill:null,fillOpacity:s,fillRule:null,filter:null,filterRes:null,filterUnits:null,floodColor:null,floodOpacity:null,focusable:null,focusHighlight:null,fontFamily:null,fontSize:null,fontSizeAdjust:null,fontStretch:null,fontStyle:null,fontVariant:null,fontWeight:null,format:null,fr:null,from:null,fx:null,fy:null,g1:c,g2:c,glyphName:c,glyphOrientationHorizontal:null,glyphOrientationVertical:null,glyphRef:null,gradientTransform:null,gradientUnits:null,handler:null,hanging:s,hatchContentUnits:null,hatchUnits:null,height:null,href:null,hrefLang:null,horizAdvX:s,horizOriginX:s,horizOriginY:s,id:null,ideographic:s,imageRendering:null,initialVisibility:null,in:null,in2:null,intercept:s,k:s,k1:s,k2:s,k3:s,k4:s,kernelMatrix:u,kernelUnitLength:null,keyPoints:null,keySplines:null,keyTimes:null,kerning:null,lang:null,lengthAdjust:null,letterSpacing:null,lightingColor:null,limitingConeAngle:s,local:null,markerEnd:null,markerMid:null,markerStart:null,markerHeight:null,markerUnits:null,markerWidth:null,mask:null,maskContentUnits:null,maskUnits:null,mathematical:null,max:null,media:null,mediaCharacterEncoding:null,mediaContentEncodings:null,mediaSize:s,mediaTime:null,method:null,min:null,mode:null,name:null,navDown:null,navDownLeft:null,navDownRight:null,navLeft:null,navNext:null,navPrev:null,navRight:null,navUp:null,navUpLeft:null,navUpRight:null,numOctaves:null,observer:null,offset:null,onAbort:null,onActivate:null,onAfterPrint:null,onBeforePrint:null,onBegin:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnd:null,onEnded:null,onError:null,onFocus:null,onFocusIn:null,onFocusOut:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadStart:null,onMessage:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onMouseWheel:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRepeat:null,onReset:null,onResize:null,onScroll:null,onSeeked:null,onSeeking:null,onSelect:null,onShow:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnload:null,onVolumeChange:null,onWaiting:null,onZoom:null,opacity:null,operator:null,order:null,orient:null,orientation:null,origin:null,overflow:null,overlay:null,overlinePosition:s,overlineThickness:s,paintOrder:null,panose1:null,path:null,pathLength:s,patternContentUnits:null,patternTransform:null,patternUnits:null,phase:null,ping:l,pitch:null,playbackOrder:null,pointerEvents:null,points:null,pointsAtX:s,pointsAtY:s,pointsAtZ:s,preserveAlpha:null,preserveAspectRatio:null,primitiveUnits:null,propagate:null,property:u,r:null,radius:null,referrerPolicy:null,refX:null,refY:null,rel:u,rev:u,renderingIntent:null,repeatCount:null,repeatDur:null,requiredExtensions:u,requiredFeatures:u,requiredFonts:u,requiredFormats:u,resource:null,restart:null,result:null,rotate:null,rx:null,ry:null,scale:null,seed:null,shapeRendering:null,side:null,slope:null,snapshotTime:null,specularConstant:s,specularExponent:s,spreadMethod:null,spacing:null,startOffset:null,stdDeviation:null,stemh:null,stemv:null,stitchTiles:null,stopColor:null,stopOpacity:null,strikethroughPosition:s,strikethroughThickness:s,string:null,stroke:null,strokeDashArray:u,strokeDashOffset:null,strokeLineCap:null,strokeLineJoin:null,strokeMiterLimit:s,strokeOpacity:s,strokeWidth:null,style:null,surfaceScale:s,syncBehavior:null,syncBehaviorDefault:null,syncMaster:null,syncTolerance:null,syncToleranceDefault:null,systemLanguage:u,tabIndex:s,tableValues:null,target:null,targetX:s,targetY:s,textAnchor:null,textDecoration:null,textRendering:null,textLength:null,timelineBegin:null,title:null,transformBehavior:null,type:null,typeOf:u,to:null,transform:null,u1:null,u2:null,underlinePosition:s,underlineThickness:s,unicode:null,unicodeBidi:null,unicodeRange:null,unitsPerEm:s,values:null,vAlphabetic:s,vMathematical:s,vectorEffect:null,vHanging:s,vIdeographic:s,version:null,vertAdvY:s,vertOriginX:s,vertOriginY:s,viewBox:null,viewTarget:null,visibility:null,width:null,widths:null,wordSpacing:null,writingMode:null,x:null,x1:null,x2:null,xChannelSelector:null,xHeight:s,y:null,y1:null,y2:null,yChannelSelector:null,z:null,zoomAndPan:null}})},zpDW:function(e,t,n){"use strict";const o=n("YpxX"),r=n("pRQB"),i=n("cRLj"),a=n("2l2D"),s=r.CODE_POINTS,l=r.CODE_POINT_SEQUENCES,c={128:8364,130:8218,131:402,132:8222,133:8230,134:8224,135:8225,136:710,137:8240,138:352,139:8249,140:338,142:381,145:8216,146:8217,147:8220,148:8221,149:8226,150:8211,151:8212,152:732,153:8482,154:353,155:8250,156:339,158:382,159:376},u="DATA_STATE",d="RCDATA_STATE",p="RAWTEXT_STATE",f="SCRIPT_DATA_STATE",h="PLAINTEXT_STATE",m="TAG_OPEN_STATE",g="END_TAG_OPEN_STATE",T="TAG_NAME_STATE",E="RCDATA_LESS_THAN_SIGN_STATE",b="RCDATA_END_TAG_OPEN_STATE",A="RCDATA_END_TAG_NAME_STATE",k="RAWTEXT_LESS_THAN_SIGN_STATE",y="RAWTEXT_END_TAG_OPEN_STATE",_="RAWTEXT_END_TAG_NAME_STATE",S="SCRIPT_DATA_LESS_THAN_SIGN_STATE",C="SCRIPT_DATA_END_TAG_OPEN_STATE",x="SCRIPT_DATA_END_TAG_NAME_STATE",v="SCRIPT_DATA_ESCAPE_START_STATE",O="SCRIPT_DATA_ESCAPE_START_DASH_STATE",N="SCRIPT_DATA_ESCAPED_STATE",M="SCRIPT_DATA_ESCAPED_DASH_STATE",w="SCRIPT_DATA_ESCAPED_DASH_DASH_STATE",R="SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE",I="SCRIPT_DATA_ESCAPED_END_TAG_OPEN_STATE",L="SCRIPT_DATA_ESCAPED_END_TAG_NAME_STATE",P="SCRIPT_DATA_DOUBLE_ESCAPE_START_STATE",H="SCRIPT_DATA_DOUBLE_ESCAPED_STATE",D="SCRIPT_DATA_DOUBLE_ESCAPED_DASH_STATE",F="SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH_STATE",B="SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE",z="SCRIPT_DATA_DOUBLE_ESCAPE_END_STATE",U="BEFORE_ATTRIBUTE_NAME_STATE",G="ATTRIBUTE_NAME_STATE",W="AFTER_ATTRIBUTE_NAME_STATE",K="BEFORE_ATTRIBUTE_VALUE_STATE",j="ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE",Y="ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE",Q="ATTRIBUTE_VALUE_UNQUOTED_STATE",V="AFTER_ATTRIBUTE_VALUE_QUOTED_STATE",q="SELF_CLOSING_START_TAG_STATE",X="BOGUS_COMMENT_STATE",J="MARKUP_DECLARATION_OPEN_STATE",Z="COMMENT_START_STATE",$="COMMENT_START_DASH_STATE",ee="COMMENT_STATE",te="COMMENT_LESS_THAN_SIGN_STATE",ne="COMMENT_LESS_THAN_SIGN_BANG_STATE",oe="COMMENT_LESS_THAN_SIGN_BANG_DASH_STATE",re="COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH_STATE",ie="COMMENT_END_DASH_STATE",ae="COMMENT_END_STATE",se="COMMENT_END_BANG_STATE",le="DOCTYPE_STATE",ce="BEFORE_DOCTYPE_NAME_STATE",ue="DOCTYPE_NAME_STATE",de="AFTER_DOCTYPE_NAME_STATE",pe="AFTER_DOCTYPE_PUBLIC_KEYWORD_STATE",fe="BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE",he="DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE",me="DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE",ge="AFTER_DOCTYPE_PUBLIC_IDENTIFIER_STATE",Te="BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE",Ee="AFTER_DOCTYPE_SYSTEM_KEYWORD_STATE",be="BEFORE_DOCTYPE_SYSTEM_IDENTIFIER_STATE",Ae="DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE",ke="DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE",ye="AFTER_DOCTYPE_SYSTEM_IDENTIFIER_STATE",_e="BOGUS_DOCTYPE_STATE",Se="CDATA_SECTION_STATE",Ce="CDATA_SECTION_BRACKET_STATE",xe="CDATA_SECTION_END_STATE",ve="CHARACTER_REFERENCE_STATE",Oe="NAMED_CHARACTER_REFERENCE_STATE",Ne="AMBIGUOS_AMPERSAND_STATE",Me="NUMERIC_CHARACTER_REFERENCE_STATE",we="HEXADEMICAL_CHARACTER_REFERENCE_START_STATE",Re="DECIMAL_CHARACTER_REFERENCE_START_STATE",Ie="HEXADEMICAL_CHARACTER_REFERENCE_STATE",Le="DECIMAL_CHARACTER_REFERENCE_STATE",Pe="NUMERIC_CHARACTER_REFERENCE_END_STATE";function He(e){return e===s.SPACE||e===s.LINE_FEED||e===s.TABULATION||e===s.FORM_FEED}function De(e){return e>=s.DIGIT_0&&e<=s.DIGIT_9}function Fe(e){return e>=s.LATIN_CAPITAL_A&&e<=s.LATIN_CAPITAL_Z}function Be(e){return e>=s.LATIN_SMALL_A&&e<=s.LATIN_SMALL_Z}function ze(e){return Be(e)||Fe(e)}function Ue(e){return ze(e)||De(e)}function Ge(e){return e>=s.LATIN_CAPITAL_A&&e<=s.LATIN_CAPITAL_F}function We(e){return e>=s.LATIN_SMALL_A&&e<=s.LATIN_SMALL_F}function Ke(e){return e+32}function je(e){return e<=65535?String.fromCharCode(e):(e-=65536,String.fromCharCode(e>>>10&1023|55296)+String.fromCharCode(56320|1023&e))}function Ye(e){return String.fromCharCode(Ke(e))}function Qe(e,t){const n=i[++e];let o=++e,r=o+n-1;for(;o<=r;){const e=o+r>>>1,a=i[e];if(at))return i[e+n];r=e-1}}return-1}class Ve{constructor(){this.preprocessor=new o,this.tokenQueue=[],this.allowCDATA=!1,this.state=u,this.returnState="",this.charRefCode=-1,this.tempBuff=[],this.lastStartTagName="",this.consumedAfterSnapshot=-1,this.active=!1,this.currentCharacterToken=null,this.currentToken=null,this.currentAttr=null}_err(){}_errOnNextCodePoint(e){this._consume(),this._err(e),this._unconsume()}getNextToken(){for(;!this.tokenQueue.length&&this.active;){this.consumedAfterSnapshot=0;const e=this._consume();this._ensureHibernation()||this[this.state](e)}return this.tokenQueue.shift()}write(e,t){this.active=!0,this.preprocessor.write(e,t)}insertHtmlAtCurrentPos(e){this.active=!0,this.preprocessor.insertHtmlAtCurrentPos(e)}_ensureHibernation(){if(this.preprocessor.endOfChunkHit){for(;this.consumedAfterSnapshot>0;this.consumedAfterSnapshot--)this.preprocessor.retreat();return this.active=!1,this.tokenQueue.push({type:Ve.HIBERNATION_TOKEN}),!0}return!1}_consume(){return this.consumedAfterSnapshot++,this.preprocessor.advance()}_unconsume(){this.consumedAfterSnapshot--,this.preprocessor.retreat()}_reconsumeInState(e){this.state=e,this._unconsume()}_consumeSequenceIfMatch(e,t,n){let o=0,r=!0;const i=e.length;let a,l=0,c=t;for(;l0&&(c=this._consume(),o++),c===s.EOF){r=!1;break}if(a=e[l],c!==a&&(n||c!==Ke(a))){r=!1;break}}if(!r)for(;o--;)this._unconsume();return r}_isTempBufferEqualToScriptString(){if(this.tempBuff.length!==l.SCRIPT_STRING.length)return!1;for(let e=0;e0&&this._err(a.endTagWithAttributes),e.selfClosing&&this._err(a.endTagWithTrailingSolidus)),this.tokenQueue.push(e)}_emitCurrentCharacterToken(){this.currentCharacterToken&&(this.tokenQueue.push(this.currentCharacterToken),this.currentCharacterToken=null)}_emitEOFToken(){this._createEOFToken(),this._emitCurrentToken()}_appendCharToCurrentCharacterToken(e,t){this.currentCharacterToken&&this.currentCharacterToken.type!==e&&this._emitCurrentCharacterToken(),this.currentCharacterToken?this.currentCharacterToken.chars+=t:this._createCharacterToken(e,t)}_emitCodePoint(e){let t=Ve.CHARACTER_TOKEN;He(e)?t=Ve.WHITESPACE_CHARACTER_TOKEN:e===s.NULL&&(t=Ve.NULL_CHARACTER_TOKEN),this._appendCharToCurrentCharacterToken(t,je(e))}_emitSeveralCodePoints(e){for(let t=0;t-1;){const e=i[o],r=e<7;r&&1&e&&(t=2&e?[i[++o],i[++o]]:[i[++o]],n=0);const a=this._consume();if(this.tempBuff.push(a),n++,a===s.EOF)break;o=r?4&e?Qe(o,a):-1:a===e?++o:-1}for(;n--;)this.tempBuff.pop(),this._unconsume();return t}_isCharacterReferenceInAttribute(){return this.returnState===j||this.returnState===Y||this.returnState===Q}_isCharacterReferenceAttributeQuirk(e){if(!e&&this._isCharacterReferenceInAttribute()){const e=this._consume();return this._unconsume(),e===s.EQUALS_SIGN||Ue(e)}return!1}_flushCodePointsConsumedAsCharacterReference(){if(this._isCharacterReferenceInAttribute())for(let e=0;e")):e===s.NULL?(this._err(a.unexpectedNullCharacter),this.state=N,this._emitChars(r.REPLACEMENT_CHARACTER)):e===s.EOF?(this._err(a.eofInScriptHtmlCommentLikeText),this._emitEOFToken()):(this.state=N,this._emitCodePoint(e))}[R](e){e===s.SOLIDUS?(this.tempBuff=[],this.state=I):ze(e)?(this.tempBuff=[],this._emitChars("<"),this._reconsumeInState(P)):(this._emitChars("<"),this._reconsumeInState(N))}[I](e){ze(e)?(this._createEndTagToken(),this._reconsumeInState(L)):(this._emitChars("")):e===s.NULL?(this._err(a.unexpectedNullCharacter),this.state=H,this._emitChars(r.REPLACEMENT_CHARACTER)):e===s.EOF?(this._err(a.eofInScriptHtmlCommentLikeText),this._emitEOFToken()):(this.state=H,this._emitCodePoint(e))}[B](e){e===s.SOLIDUS?(this.tempBuff=[],this.state=z,this._emitChars("/")):this._reconsumeInState(H)}[z](e){He(e)||e===s.SOLIDUS||e===s.GREATER_THAN_SIGN?(this.state=this._isTempBufferEqualToScriptString()?N:H,this._emitCodePoint(e)):Fe(e)?(this.tempBuff.push(Ke(e)),this._emitCodePoint(e)):Be(e)?(this.tempBuff.push(e),this._emitCodePoint(e)):this._reconsumeInState(H)}[U](e){He(e)||(e===s.SOLIDUS||e===s.GREATER_THAN_SIGN||e===s.EOF?this._reconsumeInState(W):e===s.EQUALS_SIGN?(this._err(a.unexpectedEqualsSignBeforeAttributeName),this._createAttr("="),this.state=G):(this._createAttr(""),this._reconsumeInState(G)))}[G](e){He(e)||e===s.SOLIDUS||e===s.GREATER_THAN_SIGN||e===s.EOF?(this._leaveAttrName(W),this._unconsume()):e===s.EQUALS_SIGN?this._leaveAttrName(K):Fe(e)?this.currentAttr.name+=Ye(e):e===s.QUOTATION_MARK||e===s.APOSTROPHE||e===s.LESS_THAN_SIGN?(this._err(a.unexpectedCharacterInAttributeName),this.currentAttr.name+=je(e)):e===s.NULL?(this._err(a.unexpectedNullCharacter),this.currentAttr.name+=r.REPLACEMENT_CHARACTER):this.currentAttr.name+=je(e)}[W](e){He(e)||(e===s.SOLIDUS?this.state=q:e===s.EQUALS_SIGN?this.state=K:e===s.GREATER_THAN_SIGN?(this.state=u,this._emitCurrentToken()):e===s.EOF?(this._err(a.eofInTag),this._emitEOFToken()):(this._createAttr(""),this._reconsumeInState(G)))}[K](e){He(e)||(e===s.QUOTATION_MARK?this.state=j:e===s.APOSTROPHE?this.state=Y:e===s.GREATER_THAN_SIGN?(this._err(a.missingAttributeValue),this.state=u,this._emitCurrentToken()):this._reconsumeInState(Q))}[j](e){e===s.QUOTATION_MARK?this.state=V:e===s.AMPERSAND?(this.returnState=j,this.state=ve):e===s.NULL?(this._err(a.unexpectedNullCharacter),this.currentAttr.value+=r.REPLACEMENT_CHARACTER):e===s.EOF?(this._err(a.eofInTag),this._emitEOFToken()):this.currentAttr.value+=je(e)}[Y](e){e===s.APOSTROPHE?this.state=V:e===s.AMPERSAND?(this.returnState=Y,this.state=ve):e===s.NULL?(this._err(a.unexpectedNullCharacter),this.currentAttr.value+=r.REPLACEMENT_CHARACTER):e===s.EOF?(this._err(a.eofInTag),this._emitEOFToken()):this.currentAttr.value+=je(e)}[Q](e){He(e)?this._leaveAttrValue(U):e===s.AMPERSAND?(this.returnState=Q,this.state=ve):e===s.GREATER_THAN_SIGN?(this._leaveAttrValue(u),this._emitCurrentToken()):e===s.NULL?(this._err(a.unexpectedNullCharacter),this.currentAttr.value+=r.REPLACEMENT_CHARACTER):e===s.QUOTATION_MARK||e===s.APOSTROPHE||e===s.LESS_THAN_SIGN||e===s.EQUALS_SIGN||e===s.GRAVE_ACCENT?(this._err(a.unexpectedCharacterInUnquotedAttributeValue),this.currentAttr.value+=je(e)):e===s.EOF?(this._err(a.eofInTag),this._emitEOFToken()):this.currentAttr.value+=je(e)}[V](e){He(e)?this._leaveAttrValue(U):e===s.SOLIDUS?this._leaveAttrValue(q):e===s.GREATER_THAN_SIGN?(this._leaveAttrValue(u),this._emitCurrentToken()):e===s.EOF?(this._err(a.eofInTag),this._emitEOFToken()):(this._err(a.missingWhitespaceBetweenAttributes),this._reconsumeInState(U))}[q](e){e===s.GREATER_THAN_SIGN?(this.currentToken.selfClosing=!0,this.state=u,this._emitCurrentToken()):e===s.EOF?(this._err(a.eofInTag),this._emitEOFToken()):(this._err(a.unexpectedSolidusInTag),this._reconsumeInState(U))}[X](e){e===s.GREATER_THAN_SIGN?(this.state=u,this._emitCurrentToken()):e===s.EOF?(this._emitCurrentToken(),this._emitEOFToken()):e===s.NULL?(this._err(a.unexpectedNullCharacter),this.currentToken.data+=r.REPLACEMENT_CHARACTER):this.currentToken.data+=je(e)}[J](e){this._consumeSequenceIfMatch(l.DASH_DASH_STRING,e,!0)?(this._createCommentToken(),this.state=Z):this._consumeSequenceIfMatch(l.DOCTYPE_STRING,e,!1)?this.state=le:this._consumeSequenceIfMatch(l.CDATA_START_STRING,e,!0)?this.allowCDATA?this.state=Se:(this._err(a.cdataInHtmlContent),this._createCommentToken(),this.currentToken.data="[CDATA[",this.state=X):this._ensureHibernation()||(this._err(a.incorrectlyOpenedComment),this._createCommentToken(),this._reconsumeInState(X))}[Z](e){e===s.HYPHEN_MINUS?this.state=$:e===s.GREATER_THAN_SIGN?(this._err(a.abruptClosingOfEmptyComment),this.state=u,this._emitCurrentToken()):this._reconsumeInState(ee)}[$](e){e===s.HYPHEN_MINUS?this.state=ae:e===s.GREATER_THAN_SIGN?(this._err(a.abruptClosingOfEmptyComment),this.state=u,this._emitCurrentToken()):e===s.EOF?(this._err(a.eofInComment),this._emitCurrentToken(),this._emitEOFToken()):(this.currentToken.data+="-",this._reconsumeInState(ee))}[ee](e){e===s.HYPHEN_MINUS?this.state=ie:e===s.LESS_THAN_SIGN?(this.currentToken.data+="<",this.state=te):e===s.NULL?(this._err(a.unexpectedNullCharacter),this.currentToken.data+=r.REPLACEMENT_CHARACTER):e===s.EOF?(this._err(a.eofInComment),this._emitCurrentToken(),this._emitEOFToken()):this.currentToken.data+=je(e)}[te](e){e===s.EXCLAMATION_MARK?(this.currentToken.data+="!",this.state=ne):e===s.LESS_THAN_SIGN?this.currentToken.data+="!":this._reconsumeInState(ee)}[ne](e){e===s.HYPHEN_MINUS?this.state=oe:this._reconsumeInState(ee)}[oe](e){e===s.HYPHEN_MINUS?this.state=re:this._reconsumeInState(ie)}[re](e){e!==s.GREATER_THAN_SIGN&&e!==s.EOF&&this._err(a.nestedComment),this._reconsumeInState(ae)}[ie](e){e===s.HYPHEN_MINUS?this.state=ae:e===s.EOF?(this._err(a.eofInComment),this._emitCurrentToken(),this._emitEOFToken()):(this.currentToken.data+="-",this._reconsumeInState(ee))}[ae](e){e===s.GREATER_THAN_SIGN?(this.state=u,this._emitCurrentToken()):e===s.EXCLAMATION_MARK?this.state=se:e===s.HYPHEN_MINUS?this.currentToken.data+="-":e===s.EOF?(this._err(a.eofInComment),this._emitCurrentToken(),this._emitEOFToken()):(this.currentToken.data+="--",this._reconsumeInState(ee))}[se](e){e===s.HYPHEN_MINUS?(this.currentToken.data+="--!",this.state=ie):e===s.GREATER_THAN_SIGN?(this._err(a.incorrectlyClosedComment),this.state=u,this._emitCurrentToken()):e===s.EOF?(this._err(a.eofInComment),this._emitCurrentToken(),this._emitEOFToken()):(this.currentToken.data+="--!",this._reconsumeInState(ee))}[le](e){He(e)?this.state=ce:e===s.GREATER_THAN_SIGN?this._reconsumeInState(ce):e===s.EOF?(this._err(a.eofInDoctype),this._createDoctypeToken(null),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(a.missingWhitespaceBeforeDoctypeName),this._reconsumeInState(ce))}[ce](e){He(e)||(Fe(e)?(this._createDoctypeToken(Ye(e)),this.state=ue):e===s.NULL?(this._err(a.unexpectedNullCharacter),this._createDoctypeToken(r.REPLACEMENT_CHARACTER),this.state=ue):e===s.GREATER_THAN_SIGN?(this._err(a.missingDoctypeName),this._createDoctypeToken(null),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this.state=u):e===s.EOF?(this._err(a.eofInDoctype),this._createDoctypeToken(null),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._createDoctypeToken(je(e)),this.state=ue))}[ue](e){He(e)?this.state=de:e===s.GREATER_THAN_SIGN?(this.state=u,this._emitCurrentToken()):Fe(e)?this.currentToken.name+=Ye(e):e===s.NULL?(this._err(a.unexpectedNullCharacter),this.currentToken.name+=r.REPLACEMENT_CHARACTER):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):this.currentToken.name+=je(e)}[de](e){He(e)||(e===s.GREATER_THAN_SIGN?(this.state=u,this._emitCurrentToken()):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):this._consumeSequenceIfMatch(l.PUBLIC_STRING,e,!1)?this.state=pe:this._consumeSequenceIfMatch(l.SYSTEM_STRING,e,!1)?this.state=Ee:this._ensureHibernation()||(this._err(a.invalidCharacterSequenceAfterDoctypeName),this.currentToken.forceQuirks=!0,this._reconsumeInState(_e)))}[pe](e){He(e)?this.state=fe:e===s.QUOTATION_MARK?(this._err(a.missingWhitespaceAfterDoctypePublicKeyword),this.currentToken.publicId="",this.state=he):e===s.APOSTROPHE?(this._err(a.missingWhitespaceAfterDoctypePublicKeyword),this.currentToken.publicId="",this.state=me):e===s.GREATER_THAN_SIGN?(this._err(a.missingDoctypePublicIdentifier),this.currentToken.forceQuirks=!0,this.state=u,this._emitCurrentToken()):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(a.missingQuoteBeforeDoctypePublicIdentifier),this.currentToken.forceQuirks=!0,this._reconsumeInState(_e))}[fe](e){He(e)||(e===s.QUOTATION_MARK?(this.currentToken.publicId="",this.state=he):e===s.APOSTROPHE?(this.currentToken.publicId="",this.state=me):e===s.GREATER_THAN_SIGN?(this._err(a.missingDoctypePublicIdentifier),this.currentToken.forceQuirks=!0,this.state=u,this._emitCurrentToken()):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(a.missingQuoteBeforeDoctypePublicIdentifier),this.currentToken.forceQuirks=!0,this._reconsumeInState(_e)))}[he](e){e===s.QUOTATION_MARK?this.state=ge:e===s.NULL?(this._err(a.unexpectedNullCharacter),this.currentToken.publicId+=r.REPLACEMENT_CHARACTER):e===s.GREATER_THAN_SIGN?(this._err(a.abruptDoctypePublicIdentifier),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this.state=u):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):this.currentToken.publicId+=je(e)}[me](e){e===s.APOSTROPHE?this.state=ge:e===s.NULL?(this._err(a.unexpectedNullCharacter),this.currentToken.publicId+=r.REPLACEMENT_CHARACTER):e===s.GREATER_THAN_SIGN?(this._err(a.abruptDoctypePublicIdentifier),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this.state=u):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):this.currentToken.publicId+=je(e)}[ge](e){He(e)?this.state=Te:e===s.GREATER_THAN_SIGN?(this.state=u,this._emitCurrentToken()):e===s.QUOTATION_MARK?(this._err(a.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),this.currentToken.systemId="",this.state=Ae):e===s.APOSTROPHE?(this._err(a.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),this.currentToken.systemId="",this.state=ke):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(a.missingQuoteBeforeDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this._reconsumeInState(_e))}[Te](e){He(e)||(e===s.GREATER_THAN_SIGN?(this._emitCurrentToken(),this.state=u):e===s.QUOTATION_MARK?(this.currentToken.systemId="",this.state=Ae):e===s.APOSTROPHE?(this.currentToken.systemId="",this.state=ke):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(a.missingQuoteBeforeDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this._reconsumeInState(_e)))}[Ee](e){He(e)?this.state=be:e===s.QUOTATION_MARK?(this._err(a.missingWhitespaceAfterDoctypeSystemKeyword),this.currentToken.systemId="",this.state=Ae):e===s.APOSTROPHE?(this._err(a.missingWhitespaceAfterDoctypeSystemKeyword),this.currentToken.systemId="",this.state=ke):e===s.GREATER_THAN_SIGN?(this._err(a.missingDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this.state=u,this._emitCurrentToken()):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(a.missingQuoteBeforeDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this._reconsumeInState(_e))}[be](e){He(e)||(e===s.QUOTATION_MARK?(this.currentToken.systemId="",this.state=Ae):e===s.APOSTROPHE?(this.currentToken.systemId="",this.state=ke):e===s.GREATER_THAN_SIGN?(this._err(a.missingDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this.state=u,this._emitCurrentToken()):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(a.missingQuoteBeforeDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this._reconsumeInState(_e)))}[Ae](e){e===s.QUOTATION_MARK?this.state=ye:e===s.NULL?(this._err(a.unexpectedNullCharacter),this.currentToken.systemId+=r.REPLACEMENT_CHARACTER):e===s.GREATER_THAN_SIGN?(this._err(a.abruptDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this.state=u):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):this.currentToken.systemId+=je(e)}[ke](e){e===s.APOSTROPHE?this.state=ye:e===s.NULL?(this._err(a.unexpectedNullCharacter),this.currentToken.systemId+=r.REPLACEMENT_CHARACTER):e===s.GREATER_THAN_SIGN?(this._err(a.abruptDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this.state=u):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):this.currentToken.systemId+=je(e)}[ye](e){He(e)||(e===s.GREATER_THAN_SIGN?(this._emitCurrentToken(),this.state=u):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(a.unexpectedCharacterAfterDoctypeSystemIdentifier),this._reconsumeInState(_e)))}[_e](e){e===s.GREATER_THAN_SIGN?(this._emitCurrentToken(),this.state=u):e===s.NULL?this._err(a.unexpectedNullCharacter):e===s.EOF&&(this._emitCurrentToken(),this._emitEOFToken())}[Se](e){e===s.RIGHT_SQUARE_BRACKET?this.state=Ce:e===s.EOF?(this._err(a.eofInCdata),this._emitEOFToken()):this._emitCodePoint(e)}[Ce](e){e===s.RIGHT_SQUARE_BRACKET?this.state=xe:(this._emitChars("]"),this._reconsumeInState(Se))}[xe](e){e===s.GREATER_THAN_SIGN?this.state=u:e===s.RIGHT_SQUARE_BRACKET?this._emitChars("]"):(this._emitChars("]]"),this._reconsumeInState(Se))}[ve](e){this.tempBuff=[s.AMPERSAND],e===s.NUMBER_SIGN?(this.tempBuff.push(e),this.state=Me):Ue(e)?this._reconsumeInState(Oe):(this._flushCodePointsConsumedAsCharacterReference(),this._reconsumeInState(this.returnState))}[Oe](e){const t=this._matchNamedCharacterReference(e);if(this._ensureHibernation())this.tempBuff=[s.AMPERSAND];else if(t){const e=this.tempBuff[this.tempBuff.length-1]===s.SEMICOLON;this._isCharacterReferenceAttributeQuirk(e)||(e||this._errOnNextCodePoint(a.missingSemicolonAfterCharacterReference),this.tempBuff=t),this._flushCodePointsConsumedAsCharacterReference(),this.state=this.returnState}else this._flushCodePointsConsumedAsCharacterReference(),this.state=Ne}[Ne](e){Ue(e)?this._isCharacterReferenceInAttribute()?this.currentAttr.value+=je(e):this._emitCodePoint(e):(e===s.SEMICOLON&&this._err(a.unknownNamedCharacterReference),this._reconsumeInState(this.returnState))}[Me](e){this.charRefCode=0,e===s.LATIN_SMALL_X||e===s.LATIN_CAPITAL_X?(this.tempBuff.push(e),this.state=we):this._reconsumeInState(Re)}[we](e){!function(e){return De(e)||Ge(e)||We(e)}(e)?(this._err(a.absenceOfDigitsInNumericCharacterReference),this._flushCodePointsConsumedAsCharacterReference(),this._reconsumeInState(this.returnState)):this._reconsumeInState(Ie)}[Re](e){De(e)?this._reconsumeInState(Le):(this._err(a.absenceOfDigitsInNumericCharacterReference),this._flushCodePointsConsumedAsCharacterReference(),this._reconsumeInState(this.returnState))}[Ie](e){Ge(e)?this.charRefCode=16*this.charRefCode+e-55:We(e)?this.charRefCode=16*this.charRefCode+e-87:De(e)?this.charRefCode=16*this.charRefCode+e-48:e===s.SEMICOLON?this.state=Pe:(this._err(a.missingSemicolonAfterCharacterReference),this._reconsumeInState(Pe))}[Le](e){De(e)?this.charRefCode=10*this.charRefCode+e-48:e===s.SEMICOLON?this.state=Pe:(this._err(a.missingSemicolonAfterCharacterReference),this._reconsumeInState(Pe))}[Pe](){if(this.charRefCode===s.NULL)this._err(a.nullCharacterReference),this.charRefCode=s.REPLACEMENT_CHARACTER;else if(this.charRefCode>1114111)this._err(a.characterReferenceOutsideUnicodeRange),this.charRefCode=s.REPLACEMENT_CHARACTER;else if(r.isSurrogate(this.charRefCode))this._err(a.surrogateCharacterReference),this.charRefCode=s.REPLACEMENT_CHARACTER;else if(r.isUndefinedCodePoint(this.charRefCode))this._err(a.noncharacterCharacterReference);else if(r.isControlCodePoint(this.charRefCode)||this.charRefCode===s.CARRIAGE_RETURN){this._err(a.controlCharacterReference);const e=c[this.charRefCode];e&&(this.charRefCode=e)}this.tempBuff=[this.charRefCode],this._flushCodePointsConsumedAsCharacterReference(),this._reconsumeInState(this.returnState)}}Ve.CHARACTER_TOKEN="CHARACTER_TOKEN",Ve.NULL_CHARACTER_TOKEN="NULL_CHARACTER_TOKEN",Ve.WHITESPACE_CHARACTER_TOKEN="WHITESPACE_CHARACTER_TOKEN",Ve.START_TAG_TOKEN="START_TAG_TOKEN",Ve.END_TAG_TOKEN="END_TAG_TOKEN",Ve.COMMENT_TOKEN="COMMENT_TOKEN",Ve.DOCTYPE_TOKEN="DOCTYPE_TOKEN",Ve.EOF_TOKEN="EOF_TOKEN",Ve.HIBERNATION_TOKEN="HIBERNATION_TOKEN",Ve.MODE={DATA:u,RCDATA:d,RAWTEXT:p,SCRIPT_DATA:f,PLAINTEXT:h},Ve.getTokenAttr=function(e,t){for(let n=e.attrs.length-1;n>=0;n--)if(e.attrs[n].name===t)return e.attrs[n].value;return null},e.exports=Ve}}]); \ No newline at end of file diff --git a/_next/static/chunks/1c49f5f00355f650bee3d37484f094be037a30fa.cf988bb95046fabf6cc2.js b/_next/static/chunks/1c49f5f00355f650bee3d37484f094be037a30fa.cf988bb95046fabf6cc2.js new file mode 100644 index 000000000..ac9253c0c --- /dev/null +++ b/_next/static/chunks/1c49f5f00355f650bee3d37484f094be037a30fa.cf988bb95046fabf6cc2.js @@ -0,0 +1 @@ +(window.webpackJsonp_N_E=window.webpackJsonp_N_E||[]).push([[4],{"++Eq":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{fontFamily:'Consolas, Menlo, Monaco, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace',fontSize:"14px",lineHeight:"1.375",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",background:"#1d262f",color:"#57718e"},'pre[class*="language-"]':{fontFamily:'Consolas, Menlo, Monaco, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace',fontSize:"14px",lineHeight:"1.375",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",background:"#1d262f",color:"#57718e",padding:"1em",margin:".5em 0",overflow:"auto"},'pre > code[class*="language-"]':{fontSize:"1em"},'pre[class*="language-"]::-moz-selection':{textShadow:"none",background:"#004a9e"},'pre[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#004a9e"},'code[class*="language-"]::-moz-selection':{textShadow:"none",background:"#004a9e"},'code[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#004a9e"},'pre[class*="language-"]::selection':{textShadow:"none",background:"#004a9e"},'pre[class*="language-"] ::selection':{textShadow:"none",background:"#004a9e"},'code[class*="language-"]::selection':{textShadow:"none",background:"#004a9e"},'code[class*="language-"] ::selection':{textShadow:"none",background:"#004a9e"},':not(pre) > code[class*="language-"]':{padding:".1em",borderRadius:".3em"},comment:{color:"#4a5f78"},prolog:{color:"#4a5f78"},doctype:{color:"#4a5f78"},cdata:{color:"#4a5f78"},punctuation:{color:"#4a5f78"},namespace:{Opacity:".7"},tag:{color:"#0aa370"},operator:{color:"#0aa370"},number:{color:"#0aa370"},property:{color:"#57718e"},function:{color:"#57718e"},"tag-id":{color:"#ebf4ff"},selector:{color:"#ebf4ff"},"atrule-id":{color:"#ebf4ff"},"code.language-javascript":{color:"#7eb6f6"},"attr-name":{color:"#7eb6f6"},"code.language-css":{color:"#47ebb4"},"code.language-scss":{color:"#47ebb4"},boolean:{color:"#47ebb4"},string:{color:"#47ebb4"},entity:{color:"#47ebb4",cursor:"help"},url:{color:"#47ebb4"},".language-css .token.string":{color:"#47ebb4"},".language-scss .token.string":{color:"#47ebb4"},".style .token.string":{color:"#47ebb4"},"attr-value":{color:"#47ebb4"},keyword:{color:"#47ebb4"},control:{color:"#47ebb4"},directive:{color:"#47ebb4"},unit:{color:"#47ebb4"},statement:{color:"#47ebb4"},regex:{color:"#47ebb4"},atrule:{color:"#47ebb4"},placeholder:{color:"#47ebb4"},variable:{color:"#47ebb4"},deleted:{textDecoration:"line-through"},inserted:{borderBottom:"1px dotted #ebf4ff",textDecoration:"none"},italic:{fontStyle:"italic"},important:{fontWeight:"bold",color:"#7eb6f6"},bold:{fontWeight:"bold"},"pre > code.highlight":{Outline:".4em solid #34659d",OutlineOffset:".4em"},".line-numbers .line-numbers-rows":{borderRightColor:"#1f2932"},".line-numbers-rows > span:before":{color:"#2c3847"},".line-highlight":{background:"linear-gradient(to right, rgba(10, 163, 112, 0.2) 70%, rgba(10, 163, 112, 0))"}}},"+OJB":function(e,t,n){"use strict";t.cwd=function(){return"/"}},"+Pz5":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n("NOby"),r=n("T0BQ"),i=l("text"),a=l("string"),s={resolveAll:c()};function l(e){return{tokenize:function(t){var n=this,o=this.parser.constructs[e],r=t.attempt(o,i,a);return i;function i(e){return l(e)?r(e):a(e)}function a(e){if(null!==e)return t.enter("data"),t.consume(e),s;t.consume(e)}function s(e){return l(e)?(t.exit("data"),r(e)):(t.consume(e),s)}function l(e){var t=o[e],r=-1;if(null===e)return!0;if(t)for(;++r0&&void 0!==arguments[0]?arguments[0]:{},t=e.ampFirst,n=void 0!==t&&t,o=e.hybrid,r=void 0!==o&&o,i=e.hasQuery,a=void 0!==i&&i;return n||r&&a}},"/BR8":function(e,t,n){"use strict";e.exports=function(e,t){var n=e.footnoteOrder,r=String(t.identifier);-1===n.indexOf(r)&&n.push(r);return e(t.position,"sup",{id:"fnref-"+r},[e(t,"a",{href:"#fn-"+r,className:["footnote-ref"]},[o("text",t.label||r)])])};var o=n("vUGn")},"/Fgc":function(e,t,n){"use strict";e.exports=function(e,t){return e(t,"del",o(e,t))};var o=n("WFsM")},"/apb":function(e,t,n){"use strict";var o=n("E/Jm"),r={name:"codeText",tokenize:function(e,t,n){var r,i,a=0;return function(t){return e.enter("codeText"),e.enter("codeTextSequence"),s(t)};function s(t){return 96===t?(e.consume(t),a++,s):(e.exit("codeTextSequence"),l(t))}function l(t){return null===t?n(t):96===t?(i=e.enter("codeTextSequence"),r=0,u(t)):32===t?(e.enter("space"),e.consume(t),e.exit("space"),l):o(t)?(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),l):(e.enter("codeTextData"),c(t))}function c(t){return null===t||32===t||96===t||o(t)?(e.exit("codeTextData"),l(t)):(e.consume(t),c)}function u(n){return 96===n?(e.consume(n),r++,u):r===a?(e.exit("codeTextSequence"),e.exit("codeText"),t(n)):(i.type="codeTextData",c(n))}},resolve:function(e){var t,n,o=e.length-4,r=3;if(("lineEnding"===e[r][1].type||"space"===e[r][1].type)&&("lineEnding"===e[o][1].type||"space"===e[o][1].type))for(t=r;++t code[class*="language-"]':{fontSize:"1em"},'pre[class*="language-"]::-moz-selection':{textShadow:"none",background:"#6a51e6"},'pre[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#6a51e6"},'code[class*="language-"]::-moz-selection':{textShadow:"none",background:"#6a51e6"},'code[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#6a51e6"},'pre[class*="language-"]::selection':{textShadow:"none",background:"#6a51e6"},'pre[class*="language-"] ::selection':{textShadow:"none",background:"#6a51e6"},'code[class*="language-"]::selection':{textShadow:"none",background:"#6a51e6"},'code[class*="language-"] ::selection':{textShadow:"none",background:"#6a51e6"},':not(pre) > code[class*="language-"]':{padding:".1em",borderRadius:".3em"},comment:{color:"#6c6783"},prolog:{color:"#6c6783"},doctype:{color:"#6c6783"},cdata:{color:"#6c6783"},punctuation:{color:"#6c6783"},namespace:{Opacity:".7"},tag:{color:"#e09142"},operator:{color:"#e09142"},number:{color:"#e09142"},property:{color:"#9a86fd"},function:{color:"#9a86fd"},"tag-id":{color:"#eeebff"},selector:{color:"#eeebff"},"atrule-id":{color:"#eeebff"},"code.language-javascript":{color:"#c4b9fe"},"attr-name":{color:"#c4b9fe"},"code.language-css":{color:"#ffcc99"},"code.language-scss":{color:"#ffcc99"},boolean:{color:"#ffcc99"},string:{color:"#ffcc99"},entity:{color:"#ffcc99",cursor:"help"},url:{color:"#ffcc99"},".language-css .token.string":{color:"#ffcc99"},".language-scss .token.string":{color:"#ffcc99"},".style .token.string":{color:"#ffcc99"},"attr-value":{color:"#ffcc99"},keyword:{color:"#ffcc99"},control:{color:"#ffcc99"},directive:{color:"#ffcc99"},unit:{color:"#ffcc99"},statement:{color:"#ffcc99"},regex:{color:"#ffcc99"},atrule:{color:"#ffcc99"},placeholder:{color:"#ffcc99"},variable:{color:"#ffcc99"},deleted:{textDecoration:"line-through"},inserted:{borderBottom:"1px dotted #eeebff",textDecoration:"none"},italic:{fontStyle:"italic"},important:{fontWeight:"bold",color:"#c4b9fe"},bold:{fontWeight:"bold"},"pre > code.highlight":{Outline:".4em solid #8a75f5",OutlineOffset:".4em"},".line-numbers .line-numbers-rows":{borderRightColor:"#2c2937"},".line-numbers-rows > span:before":{color:"#3c3949"},".line-highlight":{background:"linear-gradient(to right, rgba(224, 145, 66, 0.2) 70%, rgba(224, 145, 66, 0))"}}},"0RbX":function(e,t,n){"use strict";var o=n("0h9/"),r=n("Yoeg"),i=n("L8sx"),a=n("+Pz5"),s=n("oJEb"),l=n("5pEW"),c=n("pe0m"),u=n("RrMp");e.exports=function(e){var t={defined:[],constructs:s([u].concat(c((e||{}).extensions))),content:n(o),document:n(r),flow:n(i),string:n(a.string),text:n(a.text)};return t;function n(e){return function(n){return l(t,e,n)}}}},"0So9":function(e,t,n){var o=n("hq1P"),r=n("Ny5O"),i=n("9SNS"),a=n("E/Jm"),s=n("BjXi"),l=n("uDje"),c={tokenize:function(e,t,n){return function(t){return e.consume(t),o};function o(t){return 87===t||t-32===87?(e.consume(t),r):n(t)}function r(t){return 87===t||t-32===87?(e.consume(t),i):n(t)}function i(t){return 46===t?(e.consume(t),s):n(t)}function s(e){return null===e||a(e)?n(e):t(e)}},partial:!0},u={tokenize:function(e,t,n){var o,r;return a;function a(t){return 38===t?e.check(f,u,c)(t):46===t||95===t?e.check(p,u,c)(t):i(t)||l(t)||45!==t&&s(t)?u(t):(e.consume(t),a)}function c(t){return 46===t?(r=o,o=void 0,e.consume(t),a):(95===t&&(o=!0),e.consume(t),a)}function u(e){return r||o?n(e):t(e)}},partial:!0},d={tokenize:function(e,t){var n=0;return o;function o(a){return 38===a?e.check(f,t,r)(a):(40===a&&n++,41===a?e.check(p,i,r)(a):A(a)?t(a):b(a)?e.check(p,t,r)(a):(e.consume(a),o))}function r(t){return e.consume(t),o}function i(e){return--n<0?t(e):r(e)}},partial:!0},p={tokenize:function(e,t,n){return function(t){return e.consume(t),o};function o(r){return b(r)?(e.consume(r),o):A(r)?t(r):n(r)}},partial:!0},f={tokenize:function(e,t,n){return function(t){return e.consume(t),r};function r(t){return o(t)?(e.consume(t),r):59===t?(e.consume(t),i):n(t)}function i(e){return A(e)?t(e):n(e)}},partial:!0},h={tokenize:function(e,t,n){var o=this;return function(t){if(87!==t&&t-32!==87||!y(o.previous)||C(o.events))return n(t);return e.enter("literalAutolink"),e.enter("literalAutolinkWww"),e.check(c,e.attempt(u,e.attempt(d,r),n),n)(t)};function r(n){return e.exit("literalAutolinkWww"),e.exit("literalAutolink"),t(n)}},previous:y},m={tokenize:function(e,t,n){var o=this;return function(t){if(72!==t&&t-32!==72||!_(o.previous)||C(o.events))return n(t);return e.enter("literalAutolink"),e.enter("literalAutolinkHttp"),e.consume(t),r};function r(t){return 84===t||t-32===84?(e.consume(t),a):n(t)}function a(t){return 84===t||t-32===84?(e.consume(t),c):n(t)}function c(t){return 80===t||t-32===80?(e.consume(t),p):n(t)}function p(t){return 83===t||t-32===83?(e.consume(t),f):f(t)}function f(t){return 58===t?(e.consume(t),h):n(t)}function h(t){return 47===t?(e.consume(t),m):n(t)}function m(t){return 47===t?(e.consume(t),g):n(t)}function g(t){return i(t)||l(t)||s(t)?n(t):e.attempt(u,e.attempt(d,T),n)(t)}function T(n){return e.exit("literalAutolinkHttp"),e.exit("literalAutolink"),t(n)}},previous:_},g={tokenize:function(e,t,n){var o,i=this;return function(t){if(!k(t)||!S(i.previous)||C(i.events))return n(t);return e.enter("literalAutolink"),e.enter("literalAutolinkEmail"),a(t)};function a(t){return k(t)?(e.consume(t),a):64===t?(e.consume(t),s):n(t)}function s(t){return 46===t?e.check(p,d,l)(t):45===t||95===t?e.check(p,n,c)(t):r(t)?(e.consume(t),s):d(t)}function l(t){return e.consume(t),o=!0,s}function c(t){return e.consume(t),u}function u(t){return 46===t?e.check(p,n,l)(t):s(t)}function d(r){return o?(e.exit("literalAutolinkEmail"),e.exit("literalAutolink"),t(r)):n(r)}},previous:S},T={};t.text=T;for(var E=48;E<123;)T[E]=g,58===++E?E=65:91===E&&(E=97);function b(e){return 33===e||34===e||39===e||41===e||42===e||44===e||46===e||58===e||59===e||60===e||63===e||95===e||126===e}function A(e){return null===e||e<0||32===e||60===e}function k(e){return 43===e||45===e||46===e||95===e||r(e)}function y(e){return null===e||e<0||32===e||40===e||42===e||95===e||126===e}function _(e){return null===e||!o(e)}function S(e){return 47!==e&&_(e)}function C(e){for(var t=e.length;t--;)if(("labelLink"===e[t][1].type||"labelImage"===e[t][1].type)&&!e[t][1]._balanced)return!0}T[43]=g,T[45]=g,T[46]=g,T[95]=g,T[72]=[g,m],T[104]=[g,m],T[87]=[g,h],T[119]=[g,h]},"0aKP":function(e,t,n){"use strict";var o=[].splice;e.exports=o},"0h9/":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n("E/Jm"),r=n("yRGd"),i=function(e){var t,n=e.attempt(this.parser.constructs.contentInitial,(function(t){if(null===t)return void e.consume(t);return e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),r(e,n,"linePrefix")}),(function(t){return e.enter("paragraph"),i(t)}));return n;function i(n){var o=e.enter("chunkText",{contentType:"text",previous:t});return t&&(t.next=o),t=o,a(n)}function a(t){return null===t?(e.exit("chunkText"),e.exit("paragraph"),void e.consume(t)):o(t)?(e.consume(t),e.exit("chunkText"),i):(e.consume(t),a)}};t.tokenize=i},"0mGV":function(e,t,n){"use strict";var o=n("E/Jm"),r=n("2N74"),i=n("yRGd");e.exports=function(e,t){var n;return function a(s){if(o(s))return e.enter("lineEnding"),e.consume(s),e.exit("lineEnding"),n=!0,a;if(r(s))return i(e,a,n?"linePrefix":"lineSuffix")(s);return t(s)}}},"1CLp":function(e,t,n){"use strict";const o=n("UwWT"),r=o.TAG_NAMES,i=o.NAMESPACES;function a(e){switch(e.length){case 1:return e===r.P;case 2:return e===r.RB||e===r.RP||e===r.RT||e===r.DD||e===r.DT||e===r.LI;case 3:return e===r.RTC;case 6:return e===r.OPTION;case 8:return e===r.OPTGROUP}return!1}function s(e){switch(e.length){case 1:return e===r.P;case 2:return e===r.RB||e===r.RP||e===r.RT||e===r.DD||e===r.DT||e===r.LI||e===r.TD||e===r.TH||e===r.TR;case 3:return e===r.RTC;case 5:return e===r.TBODY||e===r.TFOOT||e===r.THEAD;case 6:return e===r.OPTION;case 7:return e===r.CAPTION;case 8:return e===r.OPTGROUP||e===r.COLGROUP}return!1}function l(e,t){switch(e.length){case 2:if(e===r.TD||e===r.TH)return t===i.HTML;if(e===r.MI||e===r.MO||e===r.MN||e===r.MS)return t===i.MATHML;break;case 4:if(e===r.HTML)return t===i.HTML;if(e===r.DESC)return t===i.SVG;break;case 5:if(e===r.TABLE)return t===i.HTML;if(e===r.MTEXT)return t===i.MATHML;if(e===r.TITLE)return t===i.SVG;break;case 6:return(e===r.APPLET||e===r.OBJECT)&&t===i.HTML;case 7:return(e===r.CAPTION||e===r.MARQUEE)&&t===i.HTML;case 8:return e===r.TEMPLATE&&t===i.HTML;case 13:return e===r.FOREIGN_OBJECT&&t===i.SVG;case 14:return e===r.ANNOTATION_XML&&t===i.MATHML}return!1}e.exports=class{constructor(e,t){this.stackTop=-1,this.items=[],this.current=e,this.currentTagName=null,this.currentTmplContent=null,this.tmplCount=0,this.treeAdapter=t}_indexOf(e){let t=-1;for(let n=this.stackTop;n>=0;n--)if(this.items[n]===e){t=n;break}return t}_isInTemplate(){return this.currentTagName===r.TEMPLATE&&this.treeAdapter.getNamespaceURI(this.current)===i.HTML}_updateCurrentElement(){this.current=this.items[this.stackTop],this.currentTagName=this.current&&this.treeAdapter.getTagName(this.current),this.currentTmplContent=this._isInTemplate()?this.treeAdapter.getTemplateContent(this.current):null}push(e){this.items[++this.stackTop]=e,this._updateCurrentElement(),this._isInTemplate()&&this.tmplCount++}pop(){this.stackTop--,this.tmplCount>0&&this._isInTemplate()&&this.tmplCount--,this._updateCurrentElement()}replace(e,t){const n=this._indexOf(e);this.items[n]=t,n===this.stackTop&&this._updateCurrentElement()}insertAfter(e,t){const n=this._indexOf(e)+1;this.items.splice(n,0,t),n===++this.stackTop&&this._updateCurrentElement()}popUntilTagNamePopped(e){for(;this.stackTop>-1;){const t=this.currentTagName,n=this.treeAdapter.getNamespaceURI(this.current);if(this.pop(),t===e&&n===i.HTML)break}}popUntilElementPopped(e){for(;this.stackTop>-1;){const t=this.current;if(this.pop(),t===e)break}}popUntilNumberedHeaderPopped(){for(;this.stackTop>-1;){const e=this.currentTagName,t=this.treeAdapter.getNamespaceURI(this.current);if(this.pop(),e===r.H1||e===r.H2||e===r.H3||e===r.H4||e===r.H5||e===r.H6&&t===i.HTML)break}}popUntilTableCellPopped(){for(;this.stackTop>-1;){const e=this.currentTagName,t=this.treeAdapter.getNamespaceURI(this.current);if(this.pop(),e===r.TD||e===r.TH&&t===i.HTML)break}}popAllUpToHtmlElement(){this.stackTop=0,this._updateCurrentElement()}clearBackToTableContext(){for(;this.currentTagName!==r.TABLE&&this.currentTagName!==r.TEMPLATE&&this.currentTagName!==r.HTML||this.treeAdapter.getNamespaceURI(this.current)!==i.HTML;)this.pop()}clearBackToTableBodyContext(){for(;this.currentTagName!==r.TBODY&&this.currentTagName!==r.TFOOT&&this.currentTagName!==r.THEAD&&this.currentTagName!==r.TEMPLATE&&this.currentTagName!==r.HTML||this.treeAdapter.getNamespaceURI(this.current)!==i.HTML;)this.pop()}clearBackToTableRowContext(){for(;this.currentTagName!==r.TR&&this.currentTagName!==r.TEMPLATE&&this.currentTagName!==r.HTML||this.treeAdapter.getNamespaceURI(this.current)!==i.HTML;)this.pop()}remove(e){for(let t=this.stackTop;t>=0;t--)if(this.items[t]===e){this.items.splice(t,1),this.stackTop--,this._updateCurrentElement();break}}tryPeekProperlyNestedBodyElement(){const e=this.items[1];return e&&this.treeAdapter.getTagName(e)===r.BODY?e:null}contains(e){return this._indexOf(e)>-1}getCommonAncestor(e){let t=this._indexOf(e);return--t>=0?this.items[t]:null}isRootHtmlElementCurrent(){return 0===this.stackTop&&this.currentTagName===r.HTML}hasInScope(e){for(let t=this.stackTop;t>=0;t--){const n=this.treeAdapter.getTagName(this.items[t]),o=this.treeAdapter.getNamespaceURI(this.items[t]);if(n===e&&o===i.HTML)return!0;if(l(n,o))return!1}return!0}hasNumberedHeaderInScope(){for(let e=this.stackTop;e>=0;e--){const t=this.treeAdapter.getTagName(this.items[e]),n=this.treeAdapter.getNamespaceURI(this.items[e]);if((t===r.H1||t===r.H2||t===r.H3||t===r.H4||t===r.H5||t===r.H6)&&n===i.HTML)return!0;if(l(t,n))return!1}return!0}hasInListItemScope(e){for(let t=this.stackTop;t>=0;t--){const n=this.treeAdapter.getTagName(this.items[t]),o=this.treeAdapter.getNamespaceURI(this.items[t]);if(n===e&&o===i.HTML)return!0;if((n===r.UL||n===r.OL)&&o===i.HTML||l(n,o))return!1}return!0}hasInButtonScope(e){for(let t=this.stackTop;t>=0;t--){const n=this.treeAdapter.getTagName(this.items[t]),o=this.treeAdapter.getNamespaceURI(this.items[t]);if(n===e&&o===i.HTML)return!0;if(n===r.BUTTON&&o===i.HTML||l(n,o))return!1}return!0}hasInTableScope(e){for(let t=this.stackTop;t>=0;t--){const n=this.treeAdapter.getTagName(this.items[t]);if(this.treeAdapter.getNamespaceURI(this.items[t])===i.HTML){if(n===e)return!0;if(n===r.TABLE||n===r.TEMPLATE||n===r.HTML)return!1}}return!0}hasTableBodyContextInTableScope(){for(let e=this.stackTop;e>=0;e--){const t=this.treeAdapter.getTagName(this.items[e]);if(this.treeAdapter.getNamespaceURI(this.items[e])===i.HTML){if(t===r.TBODY||t===r.THEAD||t===r.TFOOT)return!0;if(t===r.TABLE||t===r.HTML)return!1}}return!0}hasInSelectScope(e){for(let t=this.stackTop;t>=0;t--){const n=this.treeAdapter.getTagName(this.items[t]);if(this.treeAdapter.getNamespaceURI(this.items[t])===i.HTML){if(n===e)return!0;if(n!==r.OPTION&&n!==r.OPTGROUP)return!1}}return!0}generateImpliedEndTags(){for(;a(this.currentTagName);)this.pop()}generateImpliedEndTagsThoroughly(){for(;s(this.currentTagName);)this.pop()}generateImpliedEndTagsWithExclusion(e){for(;a(this.currentTagName)&&this.currentTagName!==e;)this.pop()}}},"1VtT":function(e,t,n){"use strict";var o=n("Gdbo"),r=n("k1+7"),i=n("6dBs"),a=n("bwJB"),s=n("xkQk"),l=n("Esvb");e.exports=function e(){var t,n=[],r=s(),E={},b=-1;return A.data=function(e,n){if("string"===typeof e)return 2===arguments.length?(m("data",t),E[e]=n,A):u.call(E,e)&&E[e]||null;if(e)return m("data",t),E=e,A;return E},A.freeze=k,A.attachers=n,A.use=function(e){var o;if(m("use",t),null===e||void 0===e);else if("function"===typeof e)u.apply(null,arguments);else{if("object"!==typeof e)throw new Error("Expected usable value, not `"+e+"`");"length"in e?l(e):r(e)}o&&(E.settings=i(E.settings||{},o));return A;function r(e){l(e.plugins),e.settings&&(o=i(o||{},e.settings))}function s(e){if("function"===typeof e)u(e);else{if("object"!==typeof e)throw new Error("Expected usable value, not `"+e+"`");"length"in e?u.apply(null,e):r(e)}}function l(e){var t=-1;if(null===e||void 0===e);else{if("object"!==typeof e||!("length"in e))throw new Error("Expected a list of plugins, not `"+e+"`");for(;++t-1&&(n[0]=n[0].slice(r)),a>0&&n.push(e[i].slice(0,a))),n}},"2N74":function(e,t,n){"use strict";e.exports=function(e){return-2===e||-1===e||32===e}},"2l2D":function(e,t,n){"use strict";e.exports={controlCharacterInInputStream:"control-character-in-input-stream",noncharacterInInputStream:"noncharacter-in-input-stream",surrogateInInputStream:"surrogate-in-input-stream",nonVoidHtmlElementStartTagWithTrailingSolidus:"non-void-html-element-start-tag-with-trailing-solidus",endTagWithAttributes:"end-tag-with-attributes",endTagWithTrailingSolidus:"end-tag-with-trailing-solidus",unexpectedSolidusInTag:"unexpected-solidus-in-tag",unexpectedNullCharacter:"unexpected-null-character",unexpectedQuestionMarkInsteadOfTagName:"unexpected-question-mark-instead-of-tag-name",invalidFirstCharacterOfTagName:"invalid-first-character-of-tag-name",unexpectedEqualsSignBeforeAttributeName:"unexpected-equals-sign-before-attribute-name",missingEndTagName:"missing-end-tag-name",unexpectedCharacterInAttributeName:"unexpected-character-in-attribute-name",unknownNamedCharacterReference:"unknown-named-character-reference",missingSemicolonAfterCharacterReference:"missing-semicolon-after-character-reference",unexpectedCharacterAfterDoctypeSystemIdentifier:"unexpected-character-after-doctype-system-identifier",unexpectedCharacterInUnquotedAttributeValue:"unexpected-character-in-unquoted-attribute-value",eofBeforeTagName:"eof-before-tag-name",eofInTag:"eof-in-tag",missingAttributeValue:"missing-attribute-value",missingWhitespaceBetweenAttributes:"missing-whitespace-between-attributes",missingWhitespaceAfterDoctypePublicKeyword:"missing-whitespace-after-doctype-public-keyword",missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers:"missing-whitespace-between-doctype-public-and-system-identifiers",missingWhitespaceAfterDoctypeSystemKeyword:"missing-whitespace-after-doctype-system-keyword",missingQuoteBeforeDoctypePublicIdentifier:"missing-quote-before-doctype-public-identifier",missingQuoteBeforeDoctypeSystemIdentifier:"missing-quote-before-doctype-system-identifier",missingDoctypePublicIdentifier:"missing-doctype-public-identifier",missingDoctypeSystemIdentifier:"missing-doctype-system-identifier",abruptDoctypePublicIdentifier:"abrupt-doctype-public-identifier",abruptDoctypeSystemIdentifier:"abrupt-doctype-system-identifier",cdataInHtmlContent:"cdata-in-html-content",incorrectlyOpenedComment:"incorrectly-opened-comment",eofInScriptHtmlCommentLikeText:"eof-in-script-html-comment-like-text",eofInDoctype:"eof-in-doctype",nestedComment:"nested-comment",abruptClosingOfEmptyComment:"abrupt-closing-of-empty-comment",eofInComment:"eof-in-comment",incorrectlyClosedComment:"incorrectly-closed-comment",eofInCdata:"eof-in-cdata",absenceOfDigitsInNumericCharacterReference:"absence-of-digits-in-numeric-character-reference",nullCharacterReference:"null-character-reference",surrogateCharacterReference:"surrogate-character-reference",characterReferenceOutsideUnicodeRange:"character-reference-outside-unicode-range",controlCharacterReference:"control-character-reference",noncharacterCharacterReference:"noncharacter-character-reference",missingWhitespaceBeforeDoctypeName:"missing-whitespace-before-doctype-name",missingDoctypeName:"missing-doctype-name",invalidCharacterSequenceAfterDoctypeName:"invalid-character-sequence-after-doctype-name",duplicateAttribute:"duplicate-attribute",nonConformingDoctype:"non-conforming-doctype",missingDoctype:"missing-doctype",misplacedDoctype:"misplaced-doctype",endTagWithoutMatchingOpenElement:"end-tag-without-matching-open-element",closingOfElementWithOpenChildElements:"closing-of-element-with-open-child-elements",disallowedContentInNoscriptInHead:"disallowed-content-in-noscript-in-head",openElementsLeftAfterEof:"open-elements-left-after-eof",abandonedHeadElementChild:"abandoned-head-element-child",misplacedStartTagForHeadElement:"misplaced-start-tag-for-head-element",nestedNoscriptInHead:"nested-noscript-in-head",eofInElementThatCanContainOnlyText:"eof-in-element-that-can-contain-only-text"}},"2uWR":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",color:"#c3cee3",background:"#263238",fontFamily:"Roboto Mono, monospace",fontSize:"1em",lineHeight:"1.5em",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none"},'pre[class*="language-"]':{textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",color:"#c3cee3",background:"#263238",fontFamily:"Roboto Mono, monospace",fontSize:"1em",lineHeight:"1.5em",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",overflow:"auto",position:"relative",margin:"0.5em 0",padding:"1.25em 1em"},'code[class*="language-"]::-moz-selection':{background:"#363636"},'pre[class*="language-"]::-moz-selection':{background:"#363636"},'code[class*="language-"] ::-moz-selection':{background:"#363636"},'pre[class*="language-"] ::-moz-selection':{background:"#363636"},'code[class*="language-"]::selection':{background:"#363636"},'pre[class*="language-"]::selection':{background:"#363636"},'code[class*="language-"] ::selection':{background:"#363636"},'pre[class*="language-"] ::selection':{background:"#363636"},':not(pre) > code[class*="language-"]':{whiteSpace:"normal",borderRadius:"0.2em",padding:"0.1em"},".language-css > code":{color:"#fd9170"},".language-sass > code":{color:"#fd9170"},".language-scss > code":{color:"#fd9170"},'[class*="language-"] .namespace':{Opacity:"0.7"},atrule:{color:"#c792ea"},"attr-name":{color:"#ffcb6b"},"attr-value":{color:"#c3e88d"},attribute:{color:"#c3e88d"},boolean:{color:"#c792ea"},builtin:{color:"#ffcb6b"},cdata:{color:"#80cbc4"},char:{color:"#80cbc4"},class:{color:"#ffcb6b"},"class-name":{color:"#f2ff00"},color:{color:"#f2ff00"},comment:{color:"#546e7a"},constant:{color:"#c792ea"},deleted:{color:"#f07178"},doctype:{color:"#546e7a"},entity:{color:"#f07178"},function:{color:"#c792ea"},hexcode:{color:"#f2ff00"},id:{color:"#c792ea",fontWeight:"bold"},important:{color:"#c792ea",fontWeight:"bold"},inserted:{color:"#80cbc4"},keyword:{color:"#c792ea",fontStyle:"italic"},number:{color:"#fd9170"},operator:{color:"#89ddff"},prolog:{color:"#546e7a"},property:{color:"#80cbc4"},"pseudo-class":{color:"#c3e88d"},"pseudo-element":{color:"#c3e88d"},punctuation:{color:"#89ddff"},regex:{color:"#f2ff00"},selector:{color:"#f07178"},string:{color:"#c3e88d"},symbol:{color:"#c792ea"},tag:{color:"#f07178"},unit:{color:"#f07178"},url:{color:"#fd9170"},variable:{color:"#f07178"}}},"321L":function(e,t,n){e.exports=n("0So9")},"33Zt":function(e,t,n){"use strict";var o=n("E/Jm"),r=n("2N74"),i=n("yRGd"),a={name:"thematicBreak",tokenize:function(e,t,n){var a,s=0;return function(t){return e.enter("thematicBreak"),a=t,l(t)};function l(u){return u===a?(e.enter("thematicBreakSequence"),c(u)):r(u)?i(e,l,"whitespace")(u):s<3||null!==u&&!o(u)?n(u):(e.exit("thematicBreak"),t(u))}function c(t){return t===a?(e.consume(t),s++,c):(e.exit("thematicBreakSequence"),l(t))}}};e.exports=a},"38Ti":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{color:"#fff",textShadow:"0 1px 1px #000",fontFamily:'Menlo, Monaco, "Courier New", monospace',direction:"ltr",textAlign:"left",wordSpacing:"normal",whiteSpace:"pre",wordWrap:"normal",lineHeight:"1.4",background:"none",border:"0",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none"},'pre[class*="language-"]':{color:"#fff",textShadow:"0 1px 1px #000",fontFamily:'Menlo, Monaco, "Courier New", monospace',direction:"ltr",textAlign:"left",wordSpacing:"normal",whiteSpace:"pre",wordWrap:"normal",lineHeight:"1.4",background:"#222",border:"0",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",padding:"15px",margin:"1em 0",overflow:"auto",MozBorderRadius:"8px",WebkitBorderRadius:"8px",borderRadius:"8px"},'pre[class*="language-"] code':{float:"left",padding:"0 15px 0 0"},':not(pre) > code[class*="language-"]':{background:"#222",padding:"5px 10px",lineHeight:"1",MozBorderRadius:"3px",WebkitBorderRadius:"3px",borderRadius:"3px"},comment:{color:"#797979"},prolog:{color:"#797979"},doctype:{color:"#797979"},cdata:{color:"#797979"},selector:{color:"#fff"},operator:{color:"#fff"},punctuation:{color:"#fff"},namespace:{Opacity:".7"},tag:{color:"#ffd893"},boolean:{color:"#ffd893"},atrule:{color:"#B0C975"},"attr-value":{color:"#B0C975"},hex:{color:"#B0C975"},string:{color:"#B0C975"},property:{color:"#c27628"},entity:{color:"#c27628",cursor:"help"},url:{color:"#c27628"},"attr-name":{color:"#c27628"},keyword:{color:"#c27628"},regex:{color:"#9B71C6"},function:{color:"#e5a638"},constant:{color:"#e5a638"},variable:{color:"#fdfba8"},number:{color:"#8799B0"},important:{color:"#E45734"},deliminator:{color:"#E45734"},"pre[data-line]":{position:"relative",padding:"1em 0 1em 3em"},".line-highlight":{position:"absolute",left:"0",right:"0",marginTop:"1em",background:"rgba(255, 255, 255, .2)",pointerEvents:"none",lineHeight:"inherit",whiteSpace:"pre"},".line-highlight:before":{content:"attr(data-start)",position:"absolute",top:".3em",left:".6em",minWidth:"1em",padding:"0 .5em",backgroundColor:"rgba(255, 255, 255, .3)",color:"#fff",font:"bold 65%/1.5 sans-serif",textAlign:"center",MozBorderRadius:"8px",WebkitBorderRadius:"8px",borderRadius:"8px",textShadow:"none"},".line-highlight[data-end]:after":{content:"attr(data-end)",position:"absolute",top:"auto",left:".6em",minWidth:"1em",padding:"0 .5em",backgroundColor:"rgba(255, 255, 255, .3)",color:"#fff",font:"bold 65%/1.5 sans-serif",textAlign:"center",MozBorderRadius:"8px",WebkitBorderRadius:"8px",borderRadius:"8px",textShadow:"none",bottom:".4em"},".line-numbers-rows":{margin:"0"},".line-numbers-rows span":{paddingRight:"10px",borderRight:"3px #d9d336 solid"}}},"3HEo":function(e,t,n){"use strict";var o=n("ZkSf");e.exports=function(e,t){return function(e){return t;function t(t){var n=t&&i(t);return n&&r.call(e,n)?e[n]:null}}(function(e){var t={};if(!e||!e.type)throw new Error("mdast-util-definitions expected node");return o(e,"definition",n),t;function n(e){var n=i(e.identifier);r.call(t,n)||(t[n]=e)}}(e))};var r={}.hasOwnProperty;function i(e){return e.toUpperCase()}},"3iNw":function(e,t,n){"use strict";var o=n("hq1P"),r=n("Ny5O"),i=n("E/Jm"),a=n("Q3zd"),s=n("2N74"),l=n("yRGd"),c={name:"htmlText",tokenize:function(e,t,n){var c,u,d,p,f=this;return function(t){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(t),h};function h(t){return 33===t?(e.consume(t),m):47===t?(e.consume(t),O):63===t?(e.consume(t),x):o(t)?(e.consume(t),w):n(t)}function m(t){return 45===t?(e.consume(t),g):91===t?(e.consume(t),u="CDATA[",d=0,k):o(t)?(e.consume(t),C):n(t)}function g(t){return 45===t?(e.consume(t),T):n(t)}function T(t){return null===t||62===t?n(t):45===t?(e.consume(t),E):b(t)}function E(e){return null===e||62===e?n(e):b(e)}function b(t){return null===t?n(t):45===t?(e.consume(t),A):i(t)?(p=b,B(t)):(e.consume(t),b)}function A(t){return 45===t?(e.consume(t),U):b(t)}function k(t){return t===u.charCodeAt(d++)?(e.consume(t),d===u.length?y:k):n(t)}function y(t){return null===t?n(t):93===t?(e.consume(t),_):i(t)?(p=y,B(t)):(e.consume(t),y)}function _(t){return 93===t?(e.consume(t),S):y(t)}function S(t){return 62===t?U(t):93===t?(e.consume(t),S):y(t)}function C(t){return null===t||62===t?U(t):i(t)?(p=C,B(t)):(e.consume(t),C)}function x(t){return null===t?n(t):63===t?(e.consume(t),v):i(t)?(p=x,B(t)):(e.consume(t),x)}function v(e){return 62===e?U(e):x(e)}function O(t){return o(t)?(e.consume(t),N):n(t)}function N(t){return 45===t||r(t)?(e.consume(t),N):M(t)}function M(t){return i(t)?(p=M,B(t)):s(t)?(e.consume(t),M):U(t)}function w(t){return 45===t||r(t)?(e.consume(t),w):47===t||62===t||a(t)?R(t):n(t)}function R(t){return 47===t?(e.consume(t),U):58===t||95===t||o(t)?(e.consume(t),I):i(t)?(p=R,B(t)):s(t)?(e.consume(t),R):U(t)}function I(t){return 45===t||46===t||58===t||95===t||r(t)?(e.consume(t),I):L(t)}function L(t){return 61===t?(e.consume(t),P):i(t)?(p=L,B(t)):s(t)?(e.consume(t),L):R(t)}function P(t){return null===t||60===t||61===t||62===t||96===t?n(t):34===t||39===t?(e.consume(t),c=t,H):i(t)?(p=P,B(t)):s(t)?(e.consume(t),P):(e.consume(t),c=void 0,F)}function H(t){return t===c?(e.consume(t),D):null===t?n(t):i(t)?(p=H,B(t)):(e.consume(t),H)}function D(e){return 62===e||47===e||a(e)?R(e):n(e)}function F(t){return null===t||34===t||39===t||60===t||61===t||96===t?n(t):62===t||a(t)?R(t):(e.consume(t),F)}function B(t){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),l(e,z,"linePrefix",f.parser.constructs.disable.null.indexOf("codeIndented")>-1?void 0:4)}function z(t){return e.enter("htmlTextData"),p(t)}function U(o){return 62===o?(e.consume(o),e.exit("htmlTextData"),e.exit("htmlText"),t):n(o)}}};e.exports=c},"4+h/":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{fontFamily:'Consolas, Menlo, Monaco, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace',fontSize:"14px",lineHeight:"1.375",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",background:"#faf8f5",color:"#728fcb"},'pre[class*="language-"]':{fontFamily:'Consolas, Menlo, Monaco, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace',fontSize:"14px",lineHeight:"1.375",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",background:"#faf8f5",color:"#728fcb",padding:"1em",margin:".5em 0",overflow:"auto"},'pre > code[class*="language-"]':{fontSize:"1em"},'pre[class*="language-"]::-moz-selection':{textShadow:"none",background:"#faf8f5"},'pre[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#faf8f5"},'code[class*="language-"]::-moz-selection':{textShadow:"none",background:"#faf8f5"},'code[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#faf8f5"},'pre[class*="language-"]::selection':{textShadow:"none",background:"#faf8f5"},'pre[class*="language-"] ::selection':{textShadow:"none",background:"#faf8f5"},'code[class*="language-"]::selection':{textShadow:"none",background:"#faf8f5"},'code[class*="language-"] ::selection':{textShadow:"none",background:"#faf8f5"},':not(pre) > code[class*="language-"]':{padding:".1em",borderRadius:".3em"},comment:{color:"#b6ad9a"},prolog:{color:"#b6ad9a"},doctype:{color:"#b6ad9a"},cdata:{color:"#b6ad9a"},punctuation:{color:"#b6ad9a"},namespace:{Opacity:".7"},tag:{color:"#063289"},operator:{color:"#063289"},number:{color:"#063289"},property:{color:"#b29762"},function:{color:"#b29762"},"tag-id":{color:"#2d2006"},selector:{color:"#2d2006"},"atrule-id":{color:"#2d2006"},"code.language-javascript":{color:"#896724"},"attr-name":{color:"#896724"},"code.language-css":{color:"#728fcb"},"code.language-scss":{color:"#728fcb"},boolean:{color:"#728fcb"},string:{color:"#728fcb"},entity:{color:"#728fcb",cursor:"help"},url:{color:"#728fcb"},".language-css .token.string":{color:"#728fcb"},".language-scss .token.string":{color:"#728fcb"},".style .token.string":{color:"#728fcb"},"attr-value":{color:"#728fcb"},keyword:{color:"#728fcb"},control:{color:"#728fcb"},directive:{color:"#728fcb"},unit:{color:"#728fcb"},statement:{color:"#728fcb"},regex:{color:"#728fcb"},atrule:{color:"#728fcb"},placeholder:{color:"#93abdc"},variable:{color:"#93abdc"},deleted:{textDecoration:"line-through"},inserted:{borderBottom:"1px dotted #2d2006",textDecoration:"none"},italic:{fontStyle:"italic"},important:{fontWeight:"bold",color:"#896724"},bold:{fontWeight:"bold"},"pre > code.highlight":{Outline:".4em solid #896724",OutlineOffset:".4em"},".line-numbers .line-numbers-rows":{borderRightColor:"#ece8de"},".line-numbers-rows > span:before":{color:"#cdc4b1"},".line-highlight":{background:"linear-gradient(to right, rgba(45, 32, 6, 0.2) 70%, rgba(45, 32, 6, 0))"}}},"42yH":function(e,t,n){"use strict";var o=n("WtKE"),r=n("Ny5O"),i=n("ljYj"),a=n("QB/b");function s(e){return e&&"object"===typeof e&&"default"in e?e:{default:e}}var l=s(o),c={name:"characterReference",tokenize:function(e,t,n){var o,s,c=this,u=0;return function(t){return e.enter("characterReference"),e.enter("characterReferenceMarker"),e.consume(t),e.exit("characterReferenceMarker"),d};function d(t){return 35===t?(e.enter("characterReferenceMarkerNumeric"),e.consume(t),e.exit("characterReferenceMarkerNumeric"),p):(e.enter("characterReferenceValue"),o=31,s=r,f(t))}function p(t){return 88===t||120===t?(e.enter("characterReferenceMarkerHexadecimal"),e.consume(t),e.exit("characterReferenceMarkerHexadecimal"),e.enter("characterReferenceValue"),o=6,s=a,f):(e.enter("characterReferenceValue"),o=7,s=i,f(t))}function f(i){var a;return 59===i&&u?(a=e.exit("characterReferenceValue"),s!==r||l.default(c.sliceSerialize(a))?(e.enter("characterReferenceMarker"),e.consume(i),e.exit("characterReferenceMarker"),e.exit("characterReference"),t):n(i)):s(i)&&u++P&&(P=d);++up)&&(L[u]=f)),R.push(h);M[O]=R,w[O]=I}var H;if(u=-1,d=P,"object"===typeof S&&"length"in S)for(;++uL[u]&&(L[u]=f),I[u]=f),R[u]=h;M.splice(1,0,R),w.splice(1,0,I),O=-1,N=M.length,m=[];for(;++O=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var a=n("q1tI"),s=n.n(a),l=n("6x+I"),c=n.n(l),u=n("jaOS"),d=n("o0o1"),p=n.n(d),f=n("yXPU"),h=n.n(f),m=n("pVnL"),g=n.n(m),T=n("lwsE"),E=n.n(T),b=n("W8MJ"),A=n.n(b),k=n("a1gu"),y=n.n(k),_=n("Nsbk"),S=n.n(_),C=n("7W2i"),x=n.n(C),v=n("lSNA"),O=n.n(v),N=n("QILm"),M=n.n(N),w=n("MVZn"),R=n.n(w);function I(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0;return e.reduce((function(e,t){return R()({},e,n[t])}),t)}function L(e){return e.join(" ")}function P(e){var t=e.node,n=e.stylesheet,o=e.style,r=void 0===o?{}:o,i=e.useInlineStyles,a=e.key,l=t.properties,c=t.type,u=t.tagName,d=t.value;if("text"===c)return d;if(u){var p=function(e,t){var n=0;return function(o){return n+=1,o.map((function(o,r){return P({node:o,stylesheet:e,useInlineStyles:t,key:"code-segment-".concat(n,"-").concat(r)})}))}}(n,i),f=i&&l.className&&l.className.filter((function(e){return!n[e]})),h=f&&f.length?f:void 0,m=i?R()({},l,{className:h&&L(h)},{style:I(l.className,Object.assign({},l.style,r),n)}):R()({},l,{className:L(l.className)}),T=p(t.children);return s.a.createElement(u,g()({key:a},m),T)}}var H=/\n/g;function D(e){var t=e.codeString,n=e.codeStyle,o=e.containerStyle,r=void 0===o?{float:"left",paddingRight:"10px"}:o,i=e.numberStyle,a=void 0===i?{}:i,l=e.startingLineNumber;return s.a.createElement("code",{style:Object.assign({},n,r)},function(e){var t=e.lines,n=e.startingLineNumber,o=e.style;return t.map((function(e,t){var r=t+n;return s.a.createElement("span",{key:"line-".concat(t),className:"react-syntax-highlighter-line-number",style:"function"===typeof o?o(r):o},"".concat(r,"\n"))}))}({lines:t.replace(/\n$/,"").split("\n"),style:a,startingLineNumber:l}))}function F(e){var t=e.toString().length;return"".concat(t,"em")}function B(e,t){return{type:"element",tagName:"span",properties:{key:"line-number--".concat(e),className:["comment","linenumber","react-syntax-highlighter-line-number"],style:t},children:[{type:"text",value:e}]}}function z(e,t,n){var o={display:"inline-block",minWidth:F(n),paddingRight:"1em",textAlign:"right",userSelect:"none"},r="function"===typeof e?e(t):e;return R()({},o,r)}function U(e){var t=e.children,n=e.lineNumber,o=e.lineNumberStyle,r=e.largestLineNumber,i=e.showInlineLineNumbers,a=e.lineProps,s=void 0===a?{}:a,l=e.className,c=void 0===l?[]:l,u="function"===typeof s?s(n):s;if(u.className=c,n&&i){var d=z(o,n,r);t.unshift(B(n,d))}return{type:"element",tagName:"span",properties:u,children:t}}function G(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],o=0;o2&&void 0!==arguments[2]?arguments[2]:[];return U({children:e,lineNumber:t,lineNumberStyle:s,largestLineNumber:a,showInlineLineNumbers:r,lineProps:n,className:o})}function h(e,t){if(t&&r){var n=z(s,t,a);e.unshift(B(t,n))}return e}function m(e,n){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];return t||o.length>0?f(e,n,o):h(e,n)}for(var g=function(){var e=c[p],t=e.children[0].value;if(t.match(H)){var n=t.split("\n");n.forEach((function(t,r){var a=o&&u.length+i,s={type:"text",value:"".concat(t,"\n")};if(0===r){var l=m(c.slice(d+1,p).concat(U({children:[s],className:e.properties.className})),a);u.push(l)}else if(r===n.length-1){if(c[p+1]&&c[p+1].children&&c[p+1].children[0]){var f=U({children:[{type:"text",value:"".concat(t)}],className:e.properties.className});c.splice(p+1,0,f)}else{var h=m([s],a,e.properties.className);u.push(h)}}else{var g=m([s],a,e.properties.className);u.push(g)}})),d=p}p++};p-1?void 0:4)(r)}}},exit:function(e){e.exit(this.containerState.type)}},d={tokenize:function(e,t,n){var o=this;return s(e,(function(e){return r(e)||!i(o.events,"listItemPrefixWhitespace")?n(e):t(e)}),"listItemPrefixWhitespace",o.parser.constructs.disable.null.indexOf("codeIndented")>-1?void 0:5)},partial:!0},p={tokenize:function(e,t,n){var o=this;return s(e,(function(e){return i(o.events,"listItemIndent")===o.containerState.size?t(e):n(e)}),"listItemIndent",o.containerState.size+1)},partial:!0};e.exports=u},"5fIB":function(e,t,n){var o=n("7eYB");e.exports=function(e){if(Array.isArray(e))return o(e)}},"5pEW":function(e,t,n){"use strict";var o=n("NOby"),r=n("E/Jm"),i=n("HtLg"),a=n("Vx/6"),s=n("pe0m"),l=n("Ig3s"),c=n("FE4A"),u=n("T0BQ"),d=n("20u5");e.exports=function(e,t,n){var p=n?u(n):{line:1,column:1,offset:0},f={},h=[],m=[],g=[],T={consume:function(e){r(e)?(p.line++,p.column=1,p.offset+=-3===e?2:1,v()):-1!==e&&(p.column++,p.offset++);p._bufferIndex<0?p._index++:(p._bufferIndex++,p._bufferIndex===m[p._index].length&&(p._bufferIndex=-1,p._index++));E.previous=e},enter:function(e,t){var n=t||{};return n.type=e,n.start=k(),E.events.push(["enter",n,E]),g.push(n),n},exit:function(e){var t=g.pop();return t.end=k(),E.events.push(["exit",t,E]),t},attempt:C((function(e,t){x(e,t.from)})),check:C(S),interrupt:C(S,{interrupt:!0}),lazy:C(S,{lazy:!0})},E={previous:null,events:[],parser:e,sliceStream:A,sliceSerialize:function(e){return c(A(e))},now:k,defineSkip:function(e){f[e.line]=e.column,v()},write:function(e){if(m=i(m,e),y(),null!==m[m.length-1])return[];return x(t,0),E.events=l(h,E.events,E),E.events}},b=t.tokenize.call(E,T);return t.resolveAll&&h.push(t),p._index=0,p._bufferIndex=-1,E;function A(e){return d(m,e)}function k(){return u(p)}function y(){for(var e,t;p._index-1)return m();return e.tokenize.call(t?o({},E,t):E,T,h,m)(n)}}function h(t){return e(c,u),r}function m(e){return u.restore(),++lcode':{position:"relative",borderLeft:"10px solid #358ccb",boxShadow:"-1px 0px 0px 0px #358ccb, 0px 0px 0px 1px #dfdfdf",backgroundColor:"#fdfdfd",backgroundImage:"linear-gradient(transparent 50%, rgba(69, 142, 209, 0.04) 50%)",backgroundSize:"3em 3em",backgroundOrigin:"content-box",backgroundAttachment:"local"},':not(pre) > code[class*="language-"]':{backgroundColor:"#fdfdfd",WebkitBoxSizing:"border-box",MozBoxSizing:"border-box",boxSizing:"border-box",marginBottom:"1em",position:"relative",padding:".2em",borderRadius:"0.3em",color:"#c92c2c",border:"1px solid rgba(0, 0, 0, 0.1)",display:"inline",whiteSpace:"normal"},'pre[class*="language-"]:before':{content:"''",zIndex:"-2",display:"block",position:"absolute",bottom:"0.75em",left:"0.18em",width:"40%",height:"20%",maxHeight:"13em",boxShadow:"0px 13px 8px #979797",WebkitTransform:"rotate(-2deg)",MozTransform:"rotate(-2deg)",msTransform:"rotate(-2deg)",OTransform:"rotate(-2deg)",transform:"rotate(-2deg)"},'pre[class*="language-"]:after':{content:"''",zIndex:"-2",display:"block",position:"absolute",bottom:"0.75em",left:"auto",width:"40%",height:"20%",maxHeight:"13em",boxShadow:"0px 13px 8px #979797",WebkitTransform:"rotate(2deg)",MozTransform:"rotate(2deg)",msTransform:"rotate(2deg)",OTransform:"rotate(2deg)",transform:"rotate(2deg)",right:"0.75em"},comment:{color:"#7D8B99"},"block-comment":{color:"#7D8B99"},prolog:{color:"#7D8B99"},doctype:{color:"#7D8B99"},cdata:{color:"#7D8B99"},punctuation:{color:"#5F6364"},property:{color:"#c92c2c"},tag:{color:"#c92c2c"},boolean:{color:"#c92c2c"},number:{color:"#c92c2c"},"function-name":{color:"#c92c2c"},constant:{color:"#c92c2c"},symbol:{color:"#c92c2c"},deleted:{color:"#c92c2c"},selector:{color:"#2f9c0a"},"attr-name":{color:"#2f9c0a"},string:{color:"#2f9c0a"},char:{color:"#2f9c0a"},function:{color:"#2f9c0a"},builtin:{color:"#2f9c0a"},inserted:{color:"#2f9c0a"},operator:{color:"#a67f59",background:"rgba(255, 255, 255, 0.5)"},entity:{color:"#a67f59",background:"rgba(255, 255, 255, 0.5)",cursor:"help"},url:{color:"#a67f59",background:"rgba(255, 255, 255, 0.5)"},variable:{color:"#a67f59",background:"rgba(255, 255, 255, 0.5)"},atrule:{color:"#1990b8"},"attr-value":{color:"#1990b8"},keyword:{color:"#1990b8"},"class-name":{color:"#1990b8"},regex:{color:"#e90"},important:{color:"#e90",fontWeight:"normal"},".language-css .token.string":{color:"#a67f59",background:"rgba(255, 255, 255, 0.5)"},".style .token.string":{color:"#a67f59",background:"rgba(255, 255, 255, 0.5)"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},namespace:{Opacity:".7"},'pre[class*="language-"].line-numbers.line-numbers':{paddingLeft:"0"},'pre[class*="language-"].line-numbers.line-numbers code':{paddingLeft:"3.8em"},'pre[class*="language-"].line-numbers.line-numbers .line-numbers-rows':{left:"0"},'pre[class*="language-"][data-line]':{paddingTop:"0",paddingBottom:"0",paddingLeft:"0"},"pre[data-line] code":{position:"relative",paddingLeft:"4em"},"pre .line-highlight":{marginTop:"0"}}},"6MAg":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{color:"black",background:"none",textShadow:"0 1px white",fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",fontSize:"1em",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none"},'pre[class*="language-"]':{color:"black",background:"#f5f2f0",textShadow:"0 1px white",fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",fontSize:"1em",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",padding:"1em",margin:".5em 0",overflow:"auto"},'pre[class*="language-"]::-moz-selection':{textShadow:"none",background:"#b3d4fc"},'pre[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#b3d4fc"},'code[class*="language-"]::-moz-selection':{textShadow:"none",background:"#b3d4fc"},'code[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#b3d4fc"},'pre[class*="language-"]::selection':{textShadow:"none",background:"#b3d4fc"},'pre[class*="language-"] ::selection':{textShadow:"none",background:"#b3d4fc"},'code[class*="language-"]::selection':{textShadow:"none",background:"#b3d4fc"},'code[class*="language-"] ::selection':{textShadow:"none",background:"#b3d4fc"},':not(pre) > code[class*="language-"]':{background:"#f5f2f0",padding:".1em",borderRadius:".3em",whiteSpace:"normal"},comment:{color:"slategray"},prolog:{color:"slategray"},doctype:{color:"slategray"},cdata:{color:"slategray"},punctuation:{color:"#999"},namespace:{Opacity:".7"},property:{color:"#905"},tag:{color:"#905"},boolean:{color:"#905"},number:{color:"#905"},constant:{color:"#905"},symbol:{color:"#905"},deleted:{color:"#905"},selector:{color:"#690"},"attr-name":{color:"#690"},string:{color:"#690"},char:{color:"#690"},builtin:{color:"#690"},inserted:{color:"#690"},operator:{color:"#9a6e3a",background:"hsla(0, 0%, 100%, .5)"},entity:{color:"#9a6e3a",background:"hsla(0, 0%, 100%, .5)",cursor:"help"},url:{color:"#9a6e3a",background:"hsla(0, 0%, 100%, .5)"},".language-css .token.string":{color:"#9a6e3a",background:"hsla(0, 0%, 100%, .5)"},".style .token.string":{color:"#9a6e3a",background:"hsla(0, 0%, 100%, .5)"},atrule:{color:"#07a"},"attr-value":{color:"#07a"},keyword:{color:"#07a"},function:{color:"#DD4A68"},"class-name":{color:"#DD4A68"},regex:{color:"#e90"},important:{color:"#e90",fontWeight:"bold"},variable:{color:"#e90"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"}}},"6dBs":function(e,t,n){"use strict";var o=Object.prototype.hasOwnProperty,r=Object.prototype.toString,i=Object.defineProperty,a=Object.getOwnPropertyDescriptor,s=function(e){return"function"===typeof Array.isArray?Array.isArray(e):"[object Array]"===r.call(e)},l=function(e){if(!e||"[object Object]"!==r.call(e))return!1;var t,n=o.call(e,"constructor"),i=e.constructor&&e.constructor.prototype&&o.call(e.constructor.prototype,"isPrototypeOf");if(e.constructor&&!n&&!i)return!1;for(t in e);return"undefined"===typeof t||o.call(e,t)},c=function(e,t){i&&"__proto__"===t.name?i(e,t.name,{enumerable:!0,configurable:!0,value:t.newValue,writable:!0}):e[t.name]=t.newValue},u=function(e,t){if("__proto__"===t){if(!o.call(e,t))return;if(a)return a(e,t).value}return e[t]};e.exports=function e(){var t,n,o,r,i,a,d=arguments[0],p=1,f=arguments.length,h=!1;for("boolean"===typeof d&&(h=d,d=arguments[1]||{},p=2),(null==d||"object"!==typeof d&&"function"!==typeof d)&&(d={});p for more info)`),delete h[o]}const t=i().use(a).use(e.remarkPlugins||e.plugins||[]).use(s,{allowDangerousHtml:!0}).use(e.rehypePlugins||[]).use(u,e);let n;"string"===typeof e.children?n=r(e.children):(void 0!==e.children&&null!==e.children&&console.warn(`[react-markdown] Warning: please pass a string as \`children\` (not: \`${e.children}\`)`),n=r());const l=t.runSync(t.parse(n),n);if("root"!==l.type)throw new TypeError("Expected a `root` node");let d=o.createElement(o.Fragment,{},p({options:e,schema:c,listDepth:0},l));return e.className&&(d=o.createElement("div",{className:e.className},d)),d}m.defaultProps={transformLinkUri:d},m.propTypes={children:l.string,className:l.string,allowElement:l.func,allowedElements:l.arrayOf(l.string),disallowedElements:l.arrayOf(l.string),unwrapDisallowed:l.bool,remarkPlugins:l.arrayOf(l.oneOfType([l.object,l.func,l.arrayOf(l.oneOfType([l.object,l.func]))])),rehypePlugins:l.arrayOf(l.oneOfType([l.object,l.func,l.arrayOf(l.oneOfType([l.object,l.func]))])),sourcePos:l.bool,rawSourcePos:l.bool,skipHtml:l.bool,includeElementIndex:l.bool,transformLinkUri:l.oneOfType([l.func,l.bool]),linkTarget:l.oneOfType([l.func,l.string]),transformImageUri:l.func,components:l.object},m.uriTransformer=d},"7+hk":function(e,t,n){"use strict";var o=n("z2ZG"),r=n("du5t"),i=n("eAD1"),a=n("dXJL"),s=n("bHgY"),l=n("RXC2");e.exports=o([i,r,a,s,l])},"7J+x":function(e,t){e.exports=function(e){var t,n;e._compiled||(t=e.before?"(?:"+e.before+")":"",n=e.after?"(?:"+e.after+")":"",e.atBreak&&(t="[\\r\\n][\\t ]*"+t),e._compiled=new RegExp((t?"("+t+")":"")+(/[|\\{}()[\]^$+*?.-]/.test(e.character)?"\\":"")+e.character+(n||""),"g"));return e._compiled}},"7W2i":function(e,t,n){var o=n("SksO");e.exports=function(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&o(e,t)},e.exports.__esModule=!0,e.exports.default=e.exports},"7enW":function(e,t,n){"use strict";var o={name:"labelStartImage",tokenize:function(e,t,n){var o=this;return function(t){return e.enter("labelImage"),e.enter("labelImageMarker"),e.consume(t),e.exit("labelImageMarker"),r};function r(t){return 91===t?(e.enter("labelMarker"),e.consume(t),e.exit("labelMarker"),e.exit("labelImage"),i):n(t)}function i(e){return 94===e&&"_hiddenFootnoteSupport"in o.parser.constructs?n(e):t(e)}},resolveAll:n("OaLn").resolveAll};e.exports=o},"7nPM":function(e,t,n){"use strict";e.exports=function(e){var t=String(e),n=[],o=/\r?\n|\r/g;for(;o.exec(t);)n.push(o.lastIndex);return n.push(t.length+1),{toPoint:r,toPosition:r,toOffset:function(e){var t,o=e&&e.line,r=e&&e.column;isNaN(o)||isNaN(r)||!(o-1 in n)||(t=(n[o-2]||0)+r-1||0);return t>-1&&t-1&&ee)return{line:t+1,column:e-(n[t-1]||0)+1,offset:e};return{}}}},"8Kt/":function(e,t,n){"use strict";var o=n("oI91");function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}t.__esModule=!0,t.defaultHead=p,t.default=void 0;var i,a=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==typeof e&&"function"!==typeof e)return{default:e};var t=d();if(t&&t.has(e))return t.get(e);var n={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){var i=o?Object.getOwnPropertyDescriptor(e,r):null;i&&(i.get||i.set)?Object.defineProperty(n,r,i):n[r]=e[r]}n.default=e,t&&t.set(e,n);return n}(n("q1tI")),s=(i=n("Xuae"))&&i.__esModule?i:{default:i},l=n("lwAK"),c=n("FYa8"),u=n("/0+H");function d(){if("function"!==typeof WeakMap)return null;var e=new WeakMap;return d=function(){return e},e}function p(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=[a.default.createElement("meta",{charSet:"utf-8"})];return e||t.push(a.default.createElement("meta",{name:"viewport",content:"width=device-width"})),t}function f(e,t){return"string"===typeof t||"number"===typeof t?e:t.type===a.default.Fragment?e.concat(a.default.Children.toArray(t.props.children).reduce((function(e,t){return"string"===typeof t||"number"===typeof t?e:e.concat(t)}),[])):e.concat(t)}var h=["name","httpEquiv","charSet","itemProp"];function m(e,t){return e.reduce((function(e,t){var n=a.default.Children.toArray(t.props.children);return e.concat(n)}),[]).reduce(f,[]).reverse().concat(p(t.inAmpMode)).filter(function(){var e=new Set,t=new Set,n=new Set,o={};return function(r){var i=!0,a=!1;if(r.key&&"number"!==typeof r.key&&r.key.indexOf("$")>0){a=!0;var s=r.key.slice(r.key.indexOf("$")+1);e.has(s)?i=!1:e.add(s)}switch(r.type){case"title":case"base":t.has(r.type)?i=!1:t.add(r.type);break;case"meta":for(var l=0,c=h.length;l code[class*="language-"]':{fontSize:"1em"},'pre[class*="language-"]::-moz-selection':{textShadow:"none",background:"#435643"},'pre[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#435643"},'code[class*="language-"]::-moz-selection':{textShadow:"none",background:"#435643"},'code[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#435643"},'pre[class*="language-"]::selection':{textShadow:"none",background:"#435643"},'pre[class*="language-"] ::selection':{textShadow:"none",background:"#435643"},'code[class*="language-"]::selection':{textShadow:"none",background:"#435643"},'code[class*="language-"] ::selection':{textShadow:"none",background:"#435643"},':not(pre) > code[class*="language-"]':{padding:".1em",borderRadius:".3em"},comment:{color:"#535f53"},prolog:{color:"#535f53"},doctype:{color:"#535f53"},cdata:{color:"#535f53"},punctuation:{color:"#535f53"},namespace:{Opacity:".7"},tag:{color:"#a2b34d"},operator:{color:"#a2b34d"},number:{color:"#a2b34d"},property:{color:"#687d68"},function:{color:"#687d68"},"tag-id":{color:"#f0fff0"},selector:{color:"#f0fff0"},"atrule-id":{color:"#f0fff0"},"code.language-javascript":{color:"#b3d6b3"},"attr-name":{color:"#b3d6b3"},"code.language-css":{color:"#e5fb79"},"code.language-scss":{color:"#e5fb79"},boolean:{color:"#e5fb79"},string:{color:"#e5fb79"},entity:{color:"#e5fb79",cursor:"help"},url:{color:"#e5fb79"},".language-css .token.string":{color:"#e5fb79"},".language-scss .token.string":{color:"#e5fb79"},".style .token.string":{color:"#e5fb79"},"attr-value":{color:"#e5fb79"},keyword:{color:"#e5fb79"},control:{color:"#e5fb79"},directive:{color:"#e5fb79"},unit:{color:"#e5fb79"},statement:{color:"#e5fb79"},regex:{color:"#e5fb79"},atrule:{color:"#e5fb79"},placeholder:{color:"#e5fb79"},variable:{color:"#e5fb79"},deleted:{textDecoration:"line-through"},inserted:{borderBottom:"1px dotted #f0fff0",textDecoration:"none"},italic:{fontStyle:"italic"},important:{fontWeight:"bold",color:"#b3d6b3"},bold:{fontWeight:"bold"},"pre > code.highlight":{Outline:".4em solid #5c705c",OutlineOffset:".4em"},".line-numbers .line-numbers-rows":{borderRightColor:"#2c302c"},".line-numbers-rows > span:before":{color:"#3b423b"},".line-highlight":{background:"linear-gradient(to right, rgba(162, 179, 77, 0.2) 70%, rgba(162, 179, 77, 0))"}}},"9SNS":function(e,t,n){"use strict";e.exports=function(e){return e<32||127===e}},"9kwo":function(e,t,n){"use strict";const o=n("HwUZ");e.exports=class extends o{constructor(e,t){super(e),this.posTracker=null,this.onParseError=t.onParseError}_setErrorLocation(e){e.startLine=e.endLine=this.posTracker.line,e.startCol=e.endCol=this.posTracker.col,e.startOffset=e.endOffset=this.posTracker.offset}_reportError(e){const t={code:e,startLine:-1,startCol:-1,startOffset:-1,endLine:-1,endCol:-1,endOffset:-1};this._setErrorLocation(t),this.onParseError(t)}_getOverriddenMethods(e){return{_err(t){e._reportError(t)}}}}},"9ppO":function(e,t,n){"use strict";var o=n("E/Jm"),r=n("yRGd");e.exports=function(e,t,n,i,a,s){var l;return function(t){return e.enter(i),e.enter(a),e.consume(t),e.exit(a),l=40===t?41:t,c};function c(n){return n===l?(e.enter(a),e.consume(n),e.exit(a),e.exit(i),t):(e.enter(s),u(n))}function u(t){return t===l?(e.exit(s),c(l)):null===t?n(t):o(t)?(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),r(e,u,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),d(t))}function d(t){return t===l||null===t||o(t)?(e.exit("chunkString"),u(t)):(e.consume(t),92===t?p:d)}function p(t){return t===l||92===t?(e.consume(t),d):d(t)}}},A0ZL:function(e,t,n){"use strict";class o{constructor(e){this.length=0,this.entries=[],this.treeAdapter=e,this.bookmark=null}_getNoahArkConditionCandidates(e){const t=[];if(this.length>=3){const n=this.treeAdapter.getAttrList(e).length,r=this.treeAdapter.getTagName(e),i=this.treeAdapter.getNamespaceURI(e);for(let e=this.length-1;e>=0;e--){const a=this.entries[e];if(a.type===o.MARKER_ENTRY)break;const s=a.element,l=this.treeAdapter.getAttrList(s);this.treeAdapter.getTagName(s)===r&&this.treeAdapter.getNamespaceURI(s)===i&&l.length===n&&t.push({idx:e,attrs:l})}}return t.length<3?[]:t}_ensureNoahArkCondition(e){const t=this._getNoahArkConditionCandidates(e);let n=t.length;if(n){const o=this.treeAdapter.getAttrList(e),r=o.length,i=Object.create(null);for(let e=0;e=2;e--)this.entries.splice(t[e].idx,1),this.length--}}insertMarker(){this.entries.push({type:o.MARKER_ENTRY}),this.length++}pushElement(e,t){this._ensureNoahArkCondition(e),this.entries.push({type:o.ELEMENT_ENTRY,element:e,token:t}),this.length++}insertElementAfterBookmark(e,t){let n=this.length-1;for(;n>=0&&this.entries[n]!==this.bookmark;n--);this.entries.splice(n+1,0,{type:o.ELEMENT_ENTRY,element:e,token:t}),this.length++}removeEntry(e){for(let t=this.length-1;t>=0;t--)if(this.entries[t]===e){this.entries.splice(t,1),this.length--;break}}clearToLastMarker(){for(;this.length;){const e=this.entries.pop();if(this.length--,e.type===o.MARKER_ENTRY)break}}getElementEntryInScopeWithTagName(e){for(let t=this.length-1;t>=0;t--){const n=this.entries[t];if(n.type===o.MARKER_ENTRY)return null;if(this.treeAdapter.getTagName(n.element)===e)return n}return null}getElementEntry(e){for(let t=this.length-1;t>=0;t--){const n=this.entries[t];if(n.type===o.ELEMENT_ENTRY&&n.element===e)return n}return null}}o.MARKER_ENTRY="MARKER_ENTRY",o.ELEMENT_ENTRY="ELEMENT_ENTRY",e.exports=o},ADT3:function(e,t,n){"use strict";e.exports=function(e,t,n,o){var r,i;"string"===typeof t||t&&"function"===typeof t.exec?i=[[t,n]]:(i=t,o=n);return s(e,r=o||{},function e(t){var n=t[0];return o;function o(o,i){var l,c,u,d,p=n[0],f=n[1],h=[],m=0,g=i.children.indexOf(o);for(p.lastIndex=0,c=p.exec(o.value);c&&(l=c.index,!1!==(d=f.apply(null,[].concat(c,{index:c.index,input:c.input})))&&(m!==l&&h.push({type:"text",value:o.value.slice(m,l)}),"string"===typeof d&&d.length>0&&(d={type:"text",value:d}),d&&(h=[].concat(h,d)),m=l+c[0].length),p.global);)c=p.exec(o.value);if(void 0===l?(h=[o],g--):(m1)for(u=e(t.slice(1)),l=-1;++lString(e))).join("")),!A&&s.rawSourcePos&&(u.sourcePosition=t.position),!A&&s.includeElementIndex&&(u.index=m(a,t),u.siblingCount=m(a)),A||(u.node=t),T.length>0?o.createElement(b,u,T):o.createElement(b,u)}function m(e,t){let n=-1,o=0;for(;++n(Object.keys(t).forEach((n=>{e[n]=t[n]})),e)),Object.create(null))}},B5Lt:function(e,t,n){e.exports=function(e,t){var n,r=e.children||[],i=[],a=-1;for(;++a code[class*="language-"]':{backgroundColor:"transparent !important",backgroundImage:"linear-gradient(to bottom, #2a2139 75%, #34294f)",padding:".1em",borderRadius:".3em",whiteSpace:"normal"},comment:{color:"#8e8e8e"},"block-comment":{color:"#8e8e8e"},prolog:{color:"#8e8e8e"},doctype:{color:"#8e8e8e"},cdata:{color:"#8e8e8e"},punctuation:{color:"#ccc"},tag:{color:"#e2777a"},"attr-name":{color:"#e2777a"},namespace:{color:"#e2777a"},number:{color:"#e2777a"},unit:{color:"#e2777a"},hexcode:{color:"#e2777a"},deleted:{color:"#e2777a"},property:{color:"#72f1b8",textShadow:"0 0 2px #100c0f, 0 0 10px #257c5575, 0 0 35px #21272475"},selector:{color:"#72f1b8",textShadow:"0 0 2px #100c0f, 0 0 10px #257c5575, 0 0 35px #21272475"},"function-name":{color:"#6196cc"},boolean:{color:"#fdfdfd",textShadow:"0 0 2px #001716, 0 0 3px #03edf975, 0 0 5px #03edf975, 0 0 8px #03edf975"},"selector .token.id":{color:"#fdfdfd",textShadow:"0 0 2px #001716, 0 0 3px #03edf975, 0 0 5px #03edf975, 0 0 8px #03edf975"},function:{color:"#fdfdfd",textShadow:"0 0 2px #001716, 0 0 3px #03edf975, 0 0 5px #03edf975, 0 0 8px #03edf975"},"class-name":{color:"#fff5f6",textShadow:"0 0 2px #000, 0 0 10px #fc1f2c75, 0 0 5px #fc1f2c75, 0 0 25px #fc1f2c75"},constant:{color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"},symbol:{color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"},important:{color:"#f4eee4",textShadow:"0 0 2px #393a33, 0 0 8px #f39f0575, 0 0 2px #f39f0575",fontWeight:"bold"},atrule:{color:"#f4eee4",textShadow:"0 0 2px #393a33, 0 0 8px #f39f0575, 0 0 2px #f39f0575"},keyword:{color:"#f4eee4",textShadow:"0 0 2px #393a33, 0 0 8px #f39f0575, 0 0 2px #f39f0575"},"selector .token.class":{color:"#f4eee4",textShadow:"0 0 2px #393a33, 0 0 8px #f39f0575, 0 0 2px #f39f0575"},builtin:{color:"#f4eee4",textShadow:"0 0 2px #393a33, 0 0 8px #f39f0575, 0 0 2px #f39f0575"},string:{color:"#f87c32"},char:{color:"#f87c32"},"attr-value":{color:"#f87c32"},regex:{color:"#f87c32"},variable:{color:"#f87c32"},operator:{color:"#67cdcc"},entity:{color:"#67cdcc",cursor:"help"},url:{color:"#67cdcc"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},inserted:{color:"green"}}},BfbN:function(e,t,n){"use strict";var o=a("start"),r=a("end");function i(e){return{start:o(e),end:r(e)}}function a(e){return t.displayName=e,t;function t(t){var n=t&&t.position&&t.position[e]||{};return{line:n.line||null,column:n.column||null,offset:isNaN(n.offset)?null:n.offset}}}e.exports=i,i.start=o,i.end=r},Bh6z:function(e,t,n){"use strict";e.exports=function(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}},BjXi:function(e,t,n){"use strict";var o=n("M8+4"),r=n("rm/B")(o);e.exports=r},C7Ve:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{color:"#393A34",fontFamily:'"Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace',direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",fontSize:".9em",lineHeight:"1.2em",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none"},'pre[class*="language-"]':{color:"#393A34",fontFamily:'"Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace',direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",fontSize:".9em",lineHeight:"1.2em",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",padding:"1em",margin:".5em 0",overflow:"auto",border:"1px solid #dddddd",backgroundColor:"white"},'pre > code[class*="language-"]':{fontSize:"1em"},'pre[class*="language-"]::-moz-selection':{background:"#C1DEF1"},'pre[class*="language-"] ::-moz-selection':{background:"#C1DEF1"},'code[class*="language-"]::-moz-selection':{background:"#C1DEF1"},'code[class*="language-"] ::-moz-selection':{background:"#C1DEF1"},'pre[class*="language-"]::selection':{background:"#C1DEF1"},'pre[class*="language-"] ::selection':{background:"#C1DEF1"},'code[class*="language-"]::selection':{background:"#C1DEF1"},'code[class*="language-"] ::selection':{background:"#C1DEF1"},':not(pre) > code[class*="language-"]':{padding:".2em",paddingTop:"1px",paddingBottom:"1px",background:"#f8f8f8",border:"1px solid #dddddd"},comment:{color:"#008000",fontStyle:"italic"},prolog:{color:"#008000",fontStyle:"italic"},doctype:{color:"#008000",fontStyle:"italic"},cdata:{color:"#008000",fontStyle:"italic"},namespace:{Opacity:".7"},string:{color:"#A31515"},punctuation:{color:"#393A34"},operator:{color:"#393A34"},url:{color:"#36acaa"},symbol:{color:"#36acaa"},number:{color:"#36acaa"},boolean:{color:"#36acaa"},variable:{color:"#36acaa"},constant:{color:"#36acaa"},inserted:{color:"#36acaa"},atrule:{color:"#0000ff"},keyword:{color:"#0000ff"},"attr-value":{color:"#0000ff"},".language-autohotkey .token.selector":{color:"#0000ff"},".language-json .token.boolean":{color:"#0000ff"},".language-json .token.number":{color:"#0000ff"},'code[class*="language-css"]':{color:"#0000ff"},function:{color:"#393A34"},deleted:{color:"#9a050f"},".language-autohotkey .token.tag":{color:"#9a050f"},selector:{color:"#800000"},".language-autohotkey .token.keyword":{color:"#00009f"},important:{fontWeight:"bold"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},"class-name":{color:"#2B91AF"},".language-json .token.property":{color:"#2B91AF"},tag:{color:"#800000"},"attr-name":{color:"#ff0000"},property:{color:"#ff0000"},regex:{color:"#ff0000"},entity:{color:"#ff0000"},"directive.tag .tag":{background:"#ffff00",color:"#393A34"},".line-numbers .line-numbers-rows":{borderRightColor:"#a5a5a5"},".line-numbers-rows > span:before":{color:"#2B91AF"},".line-highlight":{background:"linear-gradient(to right, rgba(193, 222, 241, 0.2) 70%, rgba(221, 222, 241, 0))"}}},CC3I:function(e,t,n){var o=n("Lc7W");e.exports=function(e,t){var n,r=null;if(!e||"string"!==typeof e)return r;for(var i,a,s=o(e),l="function"===typeof t,c=0,u=s.length;ci&&"whitespace"===e[r][1].type&&(r-=2);"atxHeadingSequence"===e[r][1].type&&(i===r-1||r-4>i&&"whitespace"===e[r-2][1].type)&&(r-=i+1===r?2:4);r>i&&(n={type:"atxHeadingText",start:e[i][1].start,end:e[r][1].end},o={type:"chunkText",start:e[i][1].start,end:e[r][1].end,contentType:"text"},a(e,i,r-i+1,[["enter",n,t],["enter",o,t],["exit",o,t],["exit",n,t]]));return e}};e.exports=l},Cjod:function(e,t,n){"use strict";var o=n("7+hk"),r=n("IEZ+"),i=n("F6fn"),a=n("Ho5A"),s=n("TTG4"),l=n("vfP8"),c=n("CC3I"),u=n("qrWY"),d=n("Zasy"),p=d("root"),f=d("element"),h=d("text");function m(e,t,n){var o,i,a=n.schema,s=a,l=t.tagName,c={},d=[],p=-1;for(o in"html"===a.space&&"svg"===l.toLowerCase()&&(s=r,n.schema=s),t.properties)g(c,o,t.properties[o],n,l);if(n.vdom&&("html"===s.space?l=l.toUpperCase():c.namespace=u[s.space]),n.prefix&&(n.key++,c.key=n.prefix+n.key),t.children)for(;++p0&&n.push(o("text","\n"));return n};var o=n("vUGn")},"E/Jm":function(e,t,n){"use strict";e.exports=function(e){return e<-2}},EBzq:function(e,t,n){"use strict";var o=[].slice;e.exports=function(e,t){var n;return function(){var t,a=o.call(arguments,0),s=e.length>a.length;s&&a.push(r);try{t=e.apply(null,a)}catch(l){if(s&&n)throw l;return r(l)}s||(t&&"function"===typeof t.then?t.then(i,r):t instanceof Error?r(t):i(t))};function r(){n||(n=!0,t.apply(null,arguments))}function i(e){r(null,e)}}},EIjK:function(e,t,n){"use strict";var o=String.fromCharCode;e.exports=o},"EfL/":function(e,t,n){const o=n("ZkSf");e.exports=function(e){if(e.allowedElements&&e.disallowedElements)throw new TypeError("Only one of `allowedElements` and `disallowedElements` should be defined");if(e.allowedElements||e.disallowedElements||e.allowElement)return e=>{o(e,"element",t)};function t(t,n,o){const r=t,i=o;let a;if(e.allowedElements?a=!e.allowedElements.includes(r.tagName):e.disallowedElements&&(a=e.disallowedElements.includes(r.tagName)),!a&&e.allowElement&&"number"===typeof n&&(a=!e.allowElement(r,n,i)),a&&"number"===typeof n)return e.unwrapDisallowed&&r.children?i.children.splice(n,1,...r.children):i.children.splice(n,1),n}}},Esvb:function(e,t,n){"use strict";e.exports=n("PPHF")},F2il:function(e,t,n){"use strict";e.exports=function(e,t){var n,o=String(e),r=0;if("string"!==typeof t)throw new Error("Expected character");n=o.indexOf(t);for(;-1!==n;)r++,n=o.indexOf(t,n+t.length);return r}},F6fn:function(e,t,n){"use strict";var o=n("bAF5"),r=n("qTn3"),i=n("Ut8p"),a="data";e.exports=function(e,t){var n=o(t),p=t,f=i;if(n in e.normal)return e.property[e.normal[n]];n.length>4&&n.slice(0,4)===a&&s.test(t)&&("-"===t.charAt(4)?p=function(e){var t=e.slice(5).replace(l,d);return a+t.charAt(0).toUpperCase()+t.slice(1)}(t):t=function(e){var t=e.slice(4);if(l.test(t))return e;"-"!==(t=t.replace(c,u)).charAt(0)&&(t="-"+t);return a+t}(t),f=r);return new f(p,t)};var s=/^data[-\w.:]+$/i,l=/-[a-z]/g,c=/[A-Z]/g;function u(e){return"-"+e.toLowerCase()}function d(e){return e.charAt(1).toUpperCase()}},FE4A:function(e,t,n){"use strict";var o=n("EIjK");e.exports=function(e){for(var t,n,r,i=-1,a=[];++i code[class*="language-"]':{fontSize:"1em"},'pre[class*="language-"]::-moz-selection':{background:"#b3d4fc"},'pre[class*="language-"] ::-moz-selection':{background:"#b3d4fc"},'code[class*="language-"]::-moz-selection':{background:"#b3d4fc"},'code[class*="language-"] ::-moz-selection':{background:"#b3d4fc"},'pre[class*="language-"]::selection':{background:"#b3d4fc"},'pre[class*="language-"] ::selection':{background:"#b3d4fc"},'code[class*="language-"]::selection':{background:"#b3d4fc"},'code[class*="language-"] ::selection':{background:"#b3d4fc"},':not(pre) > code[class*="language-"]':{padding:".2em",paddingTop:"1px",paddingBottom:"1px",background:"#f8f8f8",border:"1px solid #dddddd"},comment:{color:"#999988",fontStyle:"italic"},prolog:{color:"#999988",fontStyle:"italic"},doctype:{color:"#999988",fontStyle:"italic"},cdata:{color:"#999988",fontStyle:"italic"},namespace:{Opacity:".7"},string:{color:"#e3116c"},"attr-value":{color:"#e3116c"},punctuation:{color:"#393A34"},operator:{color:"#393A34"},entity:{color:"#36acaa"},url:{color:"#36acaa"},symbol:{color:"#36acaa"},number:{color:"#36acaa"},boolean:{color:"#36acaa"},variable:{color:"#36acaa"},constant:{color:"#36acaa"},property:{color:"#36acaa"},regex:{color:"#36acaa"},inserted:{color:"#36acaa"},atrule:{color:"#00a4db"},keyword:{color:"#00a4db"},"attr-name":{color:"#00a4db"},".language-autohotkey .token.selector":{color:"#00a4db"},function:{color:"#9a050f",fontWeight:"bold"},deleted:{color:"#9a050f"},".language-autohotkey .token.tag":{color:"#9a050f"},tag:{color:"#00009f"},selector:{color:"#00009f"},".language-autohotkey .token.keyword":{color:"#00009f"},important:{fontWeight:"bold"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"}}},Gdbo:function(e,t,n){"use strict";e.exports=function(e){if(e)throw e}},GjEx:function(e,t,n){"use strict";e.exports=function(e,t){var n,r=t.value?t.value+"\n":"",i=t.lang&&t.lang.match(/^[^ \t]+(?=[ \t]|$)/),a={};i&&(a.className=["language-"+i]);n=e(t,"code",a,[o("text",r)]),t.meta&&(n.data={meta:t.meta});return e(t.position,"pre",[n])};var o=n("vUGn")},H0fq:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",fontSize:"1em",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",background:"black",color:"white",boxShadow:"-.3em 0 0 .3em black, .3em 0 0 .3em black"},'pre[class*="language-"]':{fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",fontSize:"1em",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",padding:".4em .8em",margin:".5em 0",overflow:"auto",background:'url(\'data:image/svg+xml;charset=utf-8,%0D%0A%0D%0A%0D%0A<%2Fsvg>\')',backgroundSize:"1em 1em"},':not(pre) > code[class*="language-"]':{padding:".2em",borderRadius:".3em",boxShadow:"none",whiteSpace:"normal"},comment:{color:"#aaa"},prolog:{color:"#aaa"},doctype:{color:"#aaa"},cdata:{color:"#aaa"},punctuation:{color:"#999"},namespace:{Opacity:".7"},property:{color:"#0cf"},tag:{color:"#0cf"},boolean:{color:"#0cf"},number:{color:"#0cf"},constant:{color:"#0cf"},symbol:{color:"#0cf"},selector:{color:"yellow"},"attr-name":{color:"yellow"},string:{color:"yellow"},char:{color:"yellow"},builtin:{color:"yellow"},operator:{color:"yellowgreen"},entity:{color:"yellowgreen",cursor:"help"},url:{color:"yellowgreen"},".language-css .token.string":{color:"yellowgreen"},variable:{color:"yellowgreen"},inserted:{color:"yellowgreen"},atrule:{color:"deeppink"},"attr-value":{color:"deeppink"},keyword:{color:"deeppink"},regex:{color:"orange"},important:{color:"orange",fontWeight:"bold"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},deleted:{color:"red"},"pre.diff-highlight.diff-highlight > code .token.deleted:not(.prefix)":{backgroundColor:"rgba(255, 0, 0, .3)",display:"inline"},"pre > code.diff-highlight.diff-highlight .token.deleted:not(.prefix)":{backgroundColor:"rgba(255, 0, 0, .3)",display:"inline"},"pre.diff-highlight.diff-highlight > code .token.inserted:not(.prefix)":{backgroundColor:"rgba(0, 255, 128, .3)",display:"inline"},"pre > code.diff-highlight.diff-highlight .token.inserted:not(.prefix)":{backgroundColor:"rgba(0, 255, 128, .3)",display:"inline"}}},HALo:function(e,t,n){"use strict";function o(){return(o=Object.assign||function(e){for(var t=1;t code[class*="language-"]':{fontSize:"1em"},':not(pre) > code[class*="language-"]':{padding:".1em",borderRadius:".3em"},comment:{color:"#797379"},prolog:{color:"#797379"},doctype:{color:"#797379"},cdata:{color:"#797379"},punctuation:{color:"#b9b5b8"},".namespace":{Opacity:".7"},null:{color:"#fd8b19"},operator:{color:"#fd8b19"},boolean:{color:"#fd8b19"},number:{color:"#fd8b19"},property:{color:"#fdcc59"},tag:{color:"#1290bf"},string:{color:"#149b93"},selector:{color:"#c85e7c"},"attr-name":{color:"#fd8b19"},entity:{color:"#149b93",cursor:"help"},url:{color:"#149b93"},".language-css .token.string":{color:"#149b93"},".style .token.string":{color:"#149b93"},"attr-value":{color:"#8fc13e"},keyword:{color:"#8fc13e"},control:{color:"#8fc13e"},directive:{color:"#8fc13e"},unit:{color:"#8fc13e"},statement:{color:"#149b93"},regex:{color:"#149b93"},atrule:{color:"#149b93"},placeholder:{color:"#1290bf"},variable:{color:"#1290bf"},important:{color:"#dd464c",fontWeight:"bold"},"pre > code.highlight":{Outline:".4em solid red",OutlineOffset:".4em"}}},Ho5A:function(e){e.exports=JSON.parse('{"classId":"classID","dataType":"datatype","itemId":"itemID","strokeDashArray":"strokeDasharray","strokeDashOffset":"strokeDashoffset","strokeLineCap":"strokeLinecap","strokeLineJoin":"strokeLinejoin","strokeMiterLimit":"strokeMiterlimit","typeOf":"typeof","xLinkActuate":"xlinkActuate","xLinkArcRole":"xlinkArcrole","xLinkHref":"xlinkHref","xLinkRole":"xlinkRole","xLinkShow":"xlinkShow","xLinkTitle":"xlinkTitle","xLinkType":"xlinkType","xmlnsXLink":"xmlnsXlink"}')},HtLg:function(e,t,n){"use strict";var o=n("Vx/6");e.exports=function(e,t){return e.length?(o(e,e.length,0,t),e):t}},HwUZ:function(e,t,n){"use strict";class o{constructor(e){const t={},n=this._getOverriddenMethods(this,t);for(const o of Object.keys(n))"function"===typeof n[o]&&(t[o]=e[o],e[o]=n[o])}_getOverriddenMethods(){throw new Error("Not implemented")}}o.install=function(e,t,n){e.__mixins||(e.__mixins=[]);for(let r=0;r-1?(d=1,T.interrupt?t(o):P(o)):c.indexOf(h.toLowerCase())>-1?(d=6,47===o?(e.consume(o),S):T.interrupt?t(o):P(o)):(d=7,T.interrupt?n(o):p?x(o):C(o)):45===o||r(o)?(e.consume(o),h+=l(o),_):n(o)}function S(o){return 62===o?(e.consume(o),T.interrupt?t:P):n(o)}function C(t){return s(t)?(e.consume(t),C):I(t)}function x(t){return 47===t?(e.consume(t),I):58===t||95===t||o(t)?(e.consume(t),v):s(t)?(e.consume(t),x):I(t)}function v(t){return 45===t||46===t||58===t||95===t||r(t)?(e.consume(t),v):O(t)}function O(t){return 61===t?(e.consume(t),N):s(t)?(e.consume(t),O):x(t)}function N(t){return null===t||60===t||61===t||62===t||96===t?n(t):34===t||39===t?(e.consume(t),g=t,M):s(t)?(e.consume(t),N):(g=void 0,w(t))}function M(t){return t===g?(e.consume(t),R):null===t||i(t)?n(t):(e.consume(t),M)}function w(t){return null===t||34===t||39===t||60===t||61===t||62===t||96===t||a(t)?O(t):(e.consume(t),w)}function R(e){return 47===e||62===e||s(e)?x(e):n(e)}function I(t){return 62===t?(e.consume(t),L):n(t)}function L(t){return s(t)?(e.consume(t),L):null===t||i(t)?P(t):n(t)}function P(t){return 45===t&&2===d?(e.consume(t),F):60===t&&1===d?(e.consume(t),B):62===t&&4===d?(e.consume(t),W):63===t&&3===d?(e.consume(t),G):93===t&&5===d?(e.consume(t),U):!i(t)||6!==d&&7!==d?null===t||i(t)?H(t):(e.consume(t),P):e.check(f,W,H)(t)}function H(t){return e.exit("htmlFlowData"),D(t)}function D(t){return null===t?K(t):i(t)?(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),D):(e.enter("htmlFlowData"),P(t))}function F(t){return 45===t?(e.consume(t),G):P(t)}function B(t){return 47===t?(e.consume(t),h="",z):P(t)}function z(t){return 62===t&&u.indexOf(h.toLowerCase())>-1?(e.consume(t),W):o(t)&&h.length<8?(e.consume(t),h+=l(t),z):P(t)}function U(t){return 93===t?(e.consume(t),G):P(t)}function G(t){return 62===t?(e.consume(t),W):P(t)}function W(t){return null===t||i(t)?(e.exit("htmlFlowData"),K(t)):(e.consume(t),W)}function K(n){return e.exit("htmlFlow"),t(n)}},resolveTo:function(e){var t=e.length;for(;t--&&("enter"!==e[t][0]||"htmlFlow"!==e[t][1].type););t>1&&"linePrefix"===e[t-2][1].type&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2));return e},concrete:!0},f={tokenize:function(e,t,n){return function(o){return e.exit("htmlFlowData"),e.enter("lineEndingBlank"),e.consume(o),e.exit("lineEndingBlank"),e.attempt(d,t,n)}},partial:!0};e.exports=p},L8sx:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n("rCOv"),r=n("yRGd"),i=n("VLot"),a=function(e){var t=this,n=e.attempt(i,(function(o){if(null===o)return void e.consume(o);return e.enter("lineEndingBlank"),e.consume(o),e.exit("lineEndingBlank"),t.currentConstruct=void 0,n}),e.attempt(this.parser.constructs.flowInitial,a,r(e,e.attempt(this.parser.constructs.flow,a,e.attempt(o,a)),"linePrefix")));return n;function a(o){if(null!==o)return e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),t.currentConstruct=void 0,n;e.consume(o)}};t.tokenize=a},LLHA:function(e,t,n){"use strict";e.exports=n("wJMj")},Lc7W:function(e,t){var n=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,o=/\n/g,r=/^\s*/,i=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,a=/^:\s*/,s=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,l=/^[;\s]*/,c=/^\s+|\s+$/g,u="";function d(e){return e?e.replace(c,u):u}e.exports=function(e,t){if("string"!==typeof e)throw new TypeError("First argument must be a string");if(!e)return[];t=t||{};var c=1,p=1;function f(e){var t=e.match(o);t&&(c+=t.length);var n=e.lastIndexOf("\n");p=~n?e.length-n:p+e.length}function h(){var e={line:c,column:p};return function(t){return t.position=new m(e),b(),t}}function m(e){this.start=e,this.end={line:c,column:p},this.source=t.source}m.prototype.content=e;var g=[];function T(n){var o=new Error(t.source+":"+c+":"+p+": "+n);if(o.reason=n,o.filename=t.source,o.line=c,o.column=p,o.source=e,!t.silent)throw o;g.push(o)}function E(t){var n=t.exec(e);if(n){var o=n[0];return f(o),e=e.slice(o.length),n}}function b(){E(r)}function A(e){var t;for(e=e||[];t=k();)!1!==t&&e.push(t);return e}function k(){var t=h();if("/"==e.charAt(0)&&"*"==e.charAt(1)){for(var n=2;u!=e.charAt(n)&&("*"!=e.charAt(n)||"/"!=e.charAt(n+1));)++n;if(n+=2,u===e.charAt(n-1))return T("End of comment missing");var o=e.slice(2,n-2);return p+=2,f(o),e=e.slice(n),p+=2,t({type:"comment",comment:o})}}function y(){var e=h(),t=E(i);if(t){if(k(),!E(a))return T("property missing ':'");var o=E(s),r=e({type:"declaration",property:d(t[0].replace(n,u)),value:o?d(o[0].replace(n,u)):u});return E(l),r}}return b(),function(){var e,t=[];for(A(t);e=y();)!1!==e&&(t.push(e),A(t));return t}()}},"M3+Y":function(e,t,n){"use strict";e.exports=function(e,t){var n=t.value.replace(/\r?\n|\r/g," ");return e(t,"code",[o("text",n)])};var o=n("vUGn")},"M8+4":function(e,t,n){"use strict";e.exports=/[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/},MVZn:function(e,t,n){var o=n("lSNA");e.exports=function(e){for(var t=1;t code[class*="language-"]':{background:"#1d1f21",padding:".1em",borderRadius:".3em"},comment:{color:"#7C7C7C"},prolog:{color:"#7C7C7C"},doctype:{color:"#7C7C7C"},cdata:{color:"#7C7C7C"},punctuation:{color:"#c5c8c6"},".namespace":{Opacity:".7"},property:{color:"#96CBFE"},keyword:{color:"#96CBFE"},tag:{color:"#96CBFE"},"class-name":{color:"#FFFFB6",textDecoration:"underline"},boolean:{color:"#99CC99"},constant:{color:"#99CC99"},symbol:{color:"#f92672"},deleted:{color:"#f92672"},number:{color:"#FF73FD"},selector:{color:"#A8FF60"},"attr-name":{color:"#A8FF60"},string:{color:"#A8FF60"},char:{color:"#A8FF60"},builtin:{color:"#A8FF60"},inserted:{color:"#A8FF60"},variable:{color:"#C6C5FE"},operator:{color:"#EDEDED"},entity:{color:"#FFFFB6",cursor:"help"},url:{color:"#96CBFE"},".language-css .token.string":{color:"#87C38A"},".style .token.string":{color:"#87C38A"},atrule:{color:"#F9EE98"},"attr-value":{color:"#F9EE98"},function:{color:"#DAD085"},regex:{color:"#E9C062"},important:{color:"#fd971f",fontWeight:"bold"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"}}},NNOl:function(e,t,n){"use strict";var o=n("E/Jm"),r=n("Vx/6"),i=n("O+c1"),a=n("yRGd"),s={name:"codeIndented",tokenize:function(e,t,n){return e.attempt(l,r,n);function r(n){return null===n?t(n):o(n)?e.attempt(l,r,t)(n):(e.enter("codeFlowValue"),i(n))}function i(t){return null===t||o(t)?(e.exit("codeFlowValue"),r(t)):(e.consume(t),i)}},resolve:function(e,t){var n={type:"codeIndented",start:e[0][1].start,end:e[e.length-1][1].end};return r(e,0,0,[["enter",n,t]]),r(e,e.length,0,[["exit",n,t]]),e}},l={tokenize:function(e,t,n){var r=this;return a(e,(function s(l){if(o(l))return e.enter("lineEnding"),e.consume(l),e.exit("lineEnding"),a(e,s,"linePrefix",5);return i(r.events,"linePrefix")<4?n(l):t(l)}),"linePrefix",5)},partial:!0};e.exports=s},NOby:function(e,t,n){"use strict";var o=Object.assign;e.exports=o},Ne21:function(e,t,n){"use strict";const o=n("9kwo"),r=n("srZV"),i=n("HwUZ");e.exports=class extends o{constructor(e,t){super(e,t);const n=i.install(e.preprocessor,r,t);this.posTracker=n.posTracker}}},NfWH:function(e,t){e.exports=function(e){var t=e.options.listItemIndent||"tab";if(1===t||"1"===t)return"one";if("tab"!==t&&"one"!==t&&"mixed"!==t)throw new Error("Cannot serialize items with `"+t+"` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`");return t}},Nsbk:function(e,t){function n(t){return e.exports=n=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},e.exports.__esModule=!0,e.exports.default=e.exports,n(t)}e.exports=n,e.exports.__esModule=!0,e.exports.default=e.exports},Ny5O:function(e,t,n){"use strict";var o=n("rm/B")(/[\dA-Za-z]/);e.exports=o},"O+c1":function(e,t,n){"use strict";var o=n("jeK3");e.exports=function(e,t){var n=e[e.length-1];return n&&n[1].type===t?o(n[2].sliceStream(n[1])):0}},OaLn:function(e,t,n){"use strict";var o=n("Q3zd"),r=n("HtLg"),i=n("Vx/6"),a=n("Bh6z"),s=n("Ig3s"),l=n("T0BQ"),c=n("haLp"),u=n("kViG"),d=n("9ppO"),p=n("0mGV"),f={name:"labelEnd",tokenize:function(e,t,n){var o,r,i=this,s=i.events.length;for(;s--;)if(("labelImage"===i.events[s][1].type||"labelLink"===i.events[s][1].type)&&!i.events[s][1]._balanced){o=i.events[s][1];break}return function(t){if(!o)return n(t);return o._inactive?c(t):(r=i.parser.defined.indexOf(a(i.sliceSerialize({start:o.end,end:i.now()})))>-1,e.enter("labelEnd"),e.enter("labelMarker"),e.consume(t),e.exit("labelMarker"),e.exit("labelEnd"),l)};function l(n){return 40===n?e.attempt(h,t,r?t:c)(n):91===n?e.attempt(m,t,r?e.attempt(g,t,c):c)(n):r?t(n):c(n)}function c(e){return o._balanced=!0,n(e)}},resolveTo:function(e,t){var n,o,a,c,u,d,p,f=e.length,h=0;for(;f--;)if(c=e[f][1],u){if("link"===c.type||"labelLink"===c.type&&c._inactive)break;"enter"===e[f][0]&&"labelLink"===c.type&&(c._inactive=!0)}else if(d){if("enter"===e[f][0]&&("labelImage"===c.type||"labelLink"===c.type)&&!c._balanced&&(u=f,"labelLink"!==c.type)){h=2;break}}else"labelEnd"===c.type&&(d=f);return n={type:"labelLink"===e[u][1].type?"link":"image",start:l(e[u][1].start),end:l(e[e.length-1][1].end)},o={type:"label",start:l(e[u][1].start),end:l(e[d][1].end)},a={type:"labelText",start:l(e[u+h+2][1].end),end:l(e[d-2][1].start)},p=r(p=[["enter",n,t],["enter",o,t]],e.slice(u+1,u+h+3)),p=r(p,[["enter",a,t]]),p=r(p,s(t.parser.constructs.insideSpan.null,e.slice(u+h+4,d-3),t)),p=r(p,[["exit",a,t],e[d-2],e[d-1],["exit",o,t]]),p=r(p,e.slice(d+1)),p=r(p,[["exit",n,t]]),i(e,u,e.length,p),e},resolveAll:function(e){var t,n=-1;for(;++n code[class*="language-"]':{background:"hsl(30, 20%, 25%)",padding:".15em .2em .05em",borderRadius:".3em",border:".13em solid hsl(30, 20%, 40%)",boxShadow:"1px 1px .3em -.1em black inset",whiteSpace:"normal"},comment:{color:"hsl(30, 20%, 50%)"},prolog:{color:"hsl(30, 20%, 50%)"},doctype:{color:"hsl(30, 20%, 50%)"},cdata:{color:"hsl(30, 20%, 50%)"},punctuation:{Opacity:".7"},namespace:{Opacity:".7"},property:{color:"hsl(350, 40%, 70%)"},tag:{color:"hsl(350, 40%, 70%)"},boolean:{color:"hsl(350, 40%, 70%)"},number:{color:"hsl(350, 40%, 70%)"},constant:{color:"hsl(350, 40%, 70%)"},symbol:{color:"hsl(350, 40%, 70%)"},selector:{color:"hsl(75, 70%, 60%)"},"attr-name":{color:"hsl(75, 70%, 60%)"},string:{color:"hsl(75, 70%, 60%)"},char:{color:"hsl(75, 70%, 60%)"},builtin:{color:"hsl(75, 70%, 60%)"},inserted:{color:"hsl(75, 70%, 60%)"},operator:{color:"hsl(40, 90%, 60%)"},entity:{color:"hsl(40, 90%, 60%)",cursor:"help"},url:{color:"hsl(40, 90%, 60%)"},".language-css .token.string":{color:"hsl(40, 90%, 60%)"},".style .token.string":{color:"hsl(40, 90%, 60%)"},variable:{color:"hsl(40, 90%, 60%)"},atrule:{color:"hsl(350, 40%, 70%)"},"attr-value":{color:"hsl(350, 40%, 70%)"},keyword:{color:"hsl(350, 40%, 70%)"},regex:{color:"#e90"},important:{color:"#e90",fontWeight:"bold"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},deleted:{color:"red"}}},PGbq:function(e){e.exports=JSON.parse('["area","base","basefont","bgsound","br","col","command","embed","frame","hr","image","img","input","isindex","keygen","link","menuitem","meta","nextid","param","source","track","wbr"]')},PPHF:function(e,t,n){"use strict";var o=n("aCXt"),r=n("tgGP");e.exports=r,r.prototype.message=function(e,t,n){var r=new o(e,t,n);this.path&&(r.name=this.path+":"+r.name,r.file=this.path);return r.fatal=!1,this.messages.push(r),r},r.prototype.info=function(){var e=this.message.apply(this,arguments);return e.fatal=null,e},r.prototype.fail=function(){var e=this.message.apply(this,arguments);throw e.fatal=!0,e}},PSll:function(e,t,n){"use strict";var o=n("E/Jm"),r=n("Q3zd"),i=n("O+c1"),a=n("yRGd"),s={name:"codeFenced",tokenize:function(e,t,n){var s,l=this,c={tokenize:function(e,t,n){var r=0;return a(e,i,"linePrefix",this.parser.constructs.disable.null.indexOf("codeIndented")>-1?void 0:4);function i(t){return e.enter("codeFencedFence"),e.enter("codeFencedFenceSequence"),l(t)}function l(t){return t===s?(e.consume(t),r++,l):r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i},e.exports.__esModule=!0,e.exports.default=e.exports},R5yl:function(e,t,n){"use strict";e.exports=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","section","source","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"]},REpm:function(e,t){const n=["http","https","mailto","tel"];e.exports=function(e){const t=(e||"").trim(),o=t.charAt(0);if("#"===o||"/"===o)return t;const r=t.indexOf(":");if(-1===r)return t;let i=-1;for(;++ii)return t;if(i=t.indexOf("#"),-1!==i&&r>i)return t;return"javascript:void(0)"}},RXC2:function(e,t,n){"use strict";var o=n("FWC9"),r=n("DUvi"),i=n("y3WP"),a=o.boolean,s=o.overloadedBoolean,l=o.booleanish,c=o.number,u=o.spaceSeparated,d=o.commaSeparated;e.exports=r({space:"html",attributes:{acceptcharset:"accept-charset",classname:"class",htmlfor:"for",httpequiv:"http-equiv"},transform:i,mustUseProperty:["checked","multiple","muted","selected"],properties:{abbr:null,accept:d,acceptCharset:u,accessKey:u,action:null,allow:null,allowFullScreen:a,allowPaymentRequest:a,allowUserMedia:a,alt:null,as:null,async:a,autoCapitalize:null,autoComplete:u,autoFocus:a,autoPlay:a,capture:a,charSet:null,checked:a,cite:null,className:u,cols:c,colSpan:null,content:null,contentEditable:l,controls:a,controlsList:u,coords:c|d,crossOrigin:null,data:null,dateTime:null,decoding:null,default:a,defer:a,dir:null,dirName:null,disabled:a,download:s,draggable:l,encType:null,enterKeyHint:null,form:null,formAction:null,formEncType:null,formMethod:null,formNoValidate:a,formTarget:null,headers:u,height:c,hidden:a,high:c,href:null,hrefLang:null,htmlFor:u,httpEquiv:u,id:null,imageSizes:null,imageSrcSet:d,inputMode:null,integrity:null,is:null,isMap:a,itemId:null,itemProp:u,itemRef:u,itemScope:a,itemType:u,kind:null,label:null,lang:null,language:null,list:null,loading:null,loop:a,low:c,manifest:null,max:null,maxLength:c,media:null,method:null,min:null,minLength:c,multiple:a,muted:a,name:null,nonce:null,noModule:a,noValidate:a,onAbort:null,onAfterPrint:null,onAuxClick:null,onBeforePrint:null,onBeforeUnload:null,onBlur:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onContextMenu:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnded:null,onError:null,onFocus:null,onFormData:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLanguageChange:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadEnd:null,onLoadStart:null,onMessage:null,onMessageError:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRejectionHandled:null,onReset:null,onResize:null,onScroll:null,onSecurityPolicyViolation:null,onSeeked:null,onSeeking:null,onSelect:null,onSlotChange:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnhandledRejection:null,onUnload:null,onVolumeChange:null,onWaiting:null,onWheel:null,open:a,optimum:c,pattern:null,ping:u,placeholder:null,playsInline:a,poster:null,preload:null,readOnly:a,referrerPolicy:null,rel:u,required:a,reversed:a,rows:c,rowSpan:c,sandbox:u,scope:null,scoped:a,seamless:a,selected:a,shape:null,size:c,sizes:null,slot:null,span:c,spellCheck:l,src:null,srcDoc:null,srcLang:null,srcSet:d,start:c,step:null,style:null,tabIndex:c,target:null,title:null,translate:null,type:null,typeMustMatch:a,useMap:null,value:l,width:c,wrap:null,align:null,aLink:null,archive:u,axis:null,background:null,bgColor:null,border:c,borderColor:null,bottomMargin:c,cellPadding:null,cellSpacing:null,char:null,charOff:null,classId:null,clear:null,code:null,codeBase:null,codeType:null,color:null,compact:a,declare:a,event:null,face:null,frame:null,frameBorder:null,hSpace:c,leftMargin:c,link:null,longDesc:null,lowSrc:null,marginHeight:c,marginWidth:c,noResize:a,noHref:a,noShade:a,noWrap:a,object:null,profile:null,prompt:null,rev:null,rightMargin:c,rules:null,scheme:null,scrolling:l,standby:null,summary:null,text:null,topMargin:c,valueType:null,version:null,vAlign:null,vLink:null,vSpace:c,allowTransparency:null,autoCorrect:null,autoSave:null,disablePictureInPicture:a,disableRemotePlayback:a,prefix:null,property:null,results:c,security:null,unselectable:null}})},RjOF:function(e,t,n){"use strict";var o,r="";e.exports=function(e,t){if("string"!==typeof e)throw new TypeError("expected a string");if(1===t)return e;if(2===t)return e+e;var n=e.length*t;if(o!==e||"undefined"===typeof o)o=e,r="";else if(r.length>=n)return r.substr(0,n);for(;n>r.length&&t>1;)1&t&&(r+=e),t>>=1,e+=e;return r=(r+=e).substr(0,n)}},RrMp:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n("+Pz5"),r=n("dAEq"),i=n("Atxm"),a=n("kQY0"),s=n("Ue0c"),l=n("42yH"),c=n("PSll"),u=n("NNOl"),d=n("/apb"),p=n("HxRD"),f=n("gyVW"),h=n("CUvb"),m=n("KynH"),g=n("3iNw"),T=n("OaLn"),E=n("7enW"),b=n("Ie4K"),A=n("escJ"),k=n("5bit"),y=n("Iv+h"),_=n("33Zt"),S={42:k,43:k,45:k,48:k,49:k,50:k,51:k,52:k,53:k,54:k,55:k,56:k,57:k,62:a},C={91:p},x={"-2":u,"-1":u,32:u},v={35:h,42:_,45:[y,_],60:m,61:y,95:_,96:c,126:c},O={38:l,92:s},N={"-5":A,"-4":A,"-3":A,33:E,38:l,42:r,60:[i,g],91:b,92:[f,s],93:T,95:r,96:d},M={null:[r,o.resolver]};t.contentInitial=C,t.disable={null:[]},t.document=S,t.flow=v,t.flowInitial=x,t.insideSpan=M,t.string=O,t.text=N},Ry5F:function(e,t,n){"use strict";e.exports=function(e,t){var n,a,s,l,c,u=t.children,d=u.length,p=t.align||[],f=p.length,h=[];for(;d--;){for(a=u[d].children,l=0===d?"th":"td",n=f||a.length,s=[];n--;)c=a[n],s[n]=e(c,l,{align:p[n]},c?i(e,c):[]);h[d]=e(u[d],"tr",r(s,!0))}return e(t,"table",r([e(h[0].position,"thead",r([h[0]],!0))].concat(h[1]?e({start:o.start(h[1]),end:o.end(h[h.length-1])},"tbody",r(h.slice(1),!0)):[]),!0))};var o=n("BfbN"),r=n("Dvol"),i=n("WFsM")},ScQ6:function(e,t,n){e.exports=function(e,t,n){var l,c,u,d=r(n),p=i(n);t&&t.ordered&&(d=(t.start>-1?t.start:1)+(!1===n.options.incrementListMarker?0:t.children.indexOf(e))+".");l=d.length+1,("tab"===p||"mixed"===p&&(t&&t.spread||e.spread))&&(l=4*Math.ceil(l/4));return u=n.enter("listItem"),c=s(a(e,n),(function(e,t,n){if(t)return(n?"":o(" ",l))+e;return(n?d:d+o(" ",l-d.length))+e})),u(),c};var o=n("RjOF"),r=n("/cIb"),i=n("NfWH"),a=n("B5Lt"),s=n("deF/")},T0BQ:function(e,t,n){"use strict";var o=n("NOby");e.exports=function(e){return o({},e)}},T0f4:function(e,t){function n(t){return e.exports=n=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},n(t)}e.exports=n},TDhK:function(e,t,n){"use strict";var o={}.hasOwnProperty;e.exports=o},THrT:function(e,t,n){e.exports=n("qOO9")},TTG4:function(e,t,n){"use strict";t.parse=function(e){var t=String(e||"").trim();return""===t?[]:t.split(o)},t.stringify=function(e){return e.join(" ").trim()};var o=/[ \t\n\r\f]+/g},Tauu:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{color:"#a9b7c6",fontFamily:"Consolas, Monaco, 'Andale Mono', monospace",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none"},'pre[class*="language-"]':{color:"#a9b7c6",fontFamily:"Consolas, Monaco, 'Andale Mono', monospace",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",padding:"1em",margin:".5em 0",overflow:"auto",background:"#2b2b2b"},'pre[class*="language-"]::-moz-selection':{color:"inherit",background:"rgba(33, 66, 131, .85)"},'pre[class*="language-"] ::-moz-selection':{color:"inherit",background:"rgba(33, 66, 131, .85)"},'code[class*="language-"]::-moz-selection':{color:"inherit",background:"rgba(33, 66, 131, .85)"},'code[class*="language-"] ::-moz-selection':{color:"inherit",background:"rgba(33, 66, 131, .85)"},'pre[class*="language-"]::selection':{color:"inherit",background:"rgba(33, 66, 131, .85)"},'pre[class*="language-"] ::selection':{color:"inherit",background:"rgba(33, 66, 131, .85)"},'code[class*="language-"]::selection':{color:"inherit",background:"rgba(33, 66, 131, .85)"},'code[class*="language-"] ::selection':{color:"inherit",background:"rgba(33, 66, 131, .85)"},':not(pre) > code[class*="language-"]':{background:"#2b2b2b",padding:".1em",borderRadius:".3em"},comment:{color:"#808080"},prolog:{color:"#808080"},cdata:{color:"#808080"},delimiter:{color:"#cc7832"},boolean:{color:"#cc7832"},keyword:{color:"#cc7832"},selector:{color:"#cc7832"},important:{color:"#cc7832"},atrule:{color:"#cc7832"},operator:{color:"#a9b7c6"},punctuation:{color:"#a9b7c6"},"attr-name":{color:"#a9b7c6"},tag:{color:"#e8bf6a"},"tag .punctuation":{color:"#e8bf6a"},doctype:{color:"#e8bf6a"},builtin:{color:"#e8bf6a"},entity:{color:"#6897bb"},number:{color:"#6897bb"},symbol:{color:"#6897bb"},property:{color:"#9876aa"},constant:{color:"#9876aa"},variable:{color:"#9876aa"},string:{color:"#6a8759"},char:{color:"#6a8759"},"attr-value":{color:"#a5c261"},"attr-value .punctuation":{color:"#a5c261"},"attr-value .punctuation:first-child":{color:"#a9b7c6"},url:{color:"#287bde",textDecoration:"underline"},function:{color:"#ffc66d"},regex:{background:"#364135"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},inserted:{background:"#294436"},deleted:{background:"#484a4a"},"code.language-css .token.property":{color:"#a9b7c6"},"code.language-css .token.property + .token.punctuation":{color:"#a9b7c6"},"code.language-css .token.id":{color:"#ffc66d"},"code.language-css .token.selector > .token.class":{color:"#ffc66d"},"code.language-css .token.selector > .token.attribute":{color:"#ffc66d"},"code.language-css .token.selector > .token.pseudo-class":{color:"#ffc66d"},"code.language-css .token.selector > .token.pseudo-element":{color:"#ffc66d"}}},TqRt:function(e,t){e.exports=function(e){return e&&e.__esModule?e:{default:e}},e.exports.__esModule=!0,e.exports.default=e.exports},U6jy:function(e,t){e.exports=function(){for(var e={},t=0;t0;t--)e.onItemPop(this.items[t]);t.popAllUpToHtmlElement.call(this)},remove(n){e.onItemPop(this.current),t.remove.call(this,n)}}}}},Ue0c:function(e,t,n){"use strict";var o=n("qF1g"),r={name:"characterEscape",tokenize:function(e,t,n){return function(t){return e.enter("characterEscape"),e.enter("escapeMarker"),e.consume(t),e.exit("escapeMarker"),r};function r(r){return o(r)?(e.enter("characterEscapeValue"),e.consume(r),e.exit("characterEscapeValue"),e.exit("characterEscape"),t):n(r)}}};e.exports=r},UhtW:function(e,t){e.exports=function e(t,n){var o,r=-1;if(n.extensions)for(;++ra?0:a+t:t>a?a:t,n=n>0?n:0,r.length<1e4)(i=Array.from(r)).unshift(t,n),o.apply(e,i);else for(n&&o.apply(e,[t,n]);s code[class*="language-"]':{background:"#272822",padding:".1em",borderRadius:".3em",whiteSpace:"normal"},comment:{color:"#8292a2"},prolog:{color:"#8292a2"},doctype:{color:"#8292a2"},cdata:{color:"#8292a2"},punctuation:{color:"#f8f8f2"},namespace:{Opacity:".7"},property:{color:"#f92672"},tag:{color:"#f92672"},constant:{color:"#f92672"},symbol:{color:"#f92672"},deleted:{color:"#f92672"},boolean:{color:"#ae81ff"},number:{color:"#ae81ff"},selector:{color:"#a6e22e"},"attr-name":{color:"#a6e22e"},string:{color:"#a6e22e"},char:{color:"#a6e22e"},builtin:{color:"#a6e22e"},inserted:{color:"#a6e22e"},operator:{color:"#f8f8f2"},entity:{color:"#f8f8f2",cursor:"help"},url:{color:"#f8f8f2"},".language-css .token.string":{color:"#f8f8f2"},".style .token.string":{color:"#f8f8f2"},variable:{color:"#f8f8f2"},atrule:{color:"#e6db74"},"attr-value":{color:"#e6db74"},function:{color:"#e6db74"},"class-name":{color:"#e6db74"},keyword:{color:"#66d9ef"},regex:{color:"#fd971f"},important:{color:"#fd971f",fontWeight:"bold"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"}}},WniP:function(e,t,n){"use strict";e.exports=function(e,t){var n,i,a,s=t.referenceType,l="]";"collapsed"===s?l+="[]":"full"===s&&(l+="["+(t.label||t.identifier)+"]");if("imageReference"===t.type)return o("text","!["+t.alt+l);n=r(e,t),(i=n[0])&&"text"===i.type?i.value="["+i.value:n.unshift(o("text","["));(a=n[n.length-1])&&"text"===a.type?a.value+=l:n.push(o("text",l));return n};var o=n("vUGn"),r=n("WFsM")},WtKE:function(e,t,n){"use strict";var o;e.exports=function(e){var t,n="&"+e+";";if((o=o||document.createElement("i")).innerHTML=n,59===(t=o.textContent).charCodeAt(t.length-1)&&"semi"!==e)return!1;return t!==n&&t}},Xuae:function(e,t,n){"use strict";var o=n("mPvQ"),r=n("/GRZ"),i=n("i2R6"),a=(n("qXWd"),n("48fX")),s=n("tCBg"),l=n("T0f4");function c(e){var t=function(){if("undefined"===typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"===typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,o=l(e);if(t){var r=l(this).constructor;n=Reflect.construct(o,arguments,r)}else n=o.apply(this,arguments);return s(this,n)}}t.__esModule=!0,t.default=void 0;var u=n("q1tI"),d=function(e){a(n,e);var t=c(n);function n(e){var i;return r(this,n),(i=t.call(this,e))._hasHeadManager=void 0,i.emitChange=function(){i._hasHeadManager&&i.props.headManager.updateHead(i.props.reduceComponentsToState(o(i.props.headManager.mountedInstances),i.props))},i._hasHeadManager=i.props.headManager&&i.props.headManager.mountedInstances,i}return i(n,[{key:"componentDidMount",value:function(){this._hasHeadManager&&this.props.headManager.mountedInstances.add(this),this.emitChange()}},{key:"componentDidUpdate",value:function(){this.emitChange()}},{key:"componentWillUnmount",value:function(){this._hasHeadManager&&this.props.headManager.mountedInstances.delete(this),this.emitChange()}},{key:"render",value:function(){return null}}]),n}(u.Component);t.default=d},"Y+Mq":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{fontFamily:'Consolas, Menlo, Monaco, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace',fontSize:"14px",lineHeight:"1.375",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",background:"#24242e",color:"#767693"},'pre[class*="language-"]':{fontFamily:'Consolas, Menlo, Monaco, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace',fontSize:"14px",lineHeight:"1.375",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",background:"#24242e",color:"#767693",padding:"1em",margin:".5em 0",overflow:"auto"},'pre > code[class*="language-"]':{fontSize:"1em"},'pre[class*="language-"]::-moz-selection':{textShadow:"none",background:"#5151e6"},'pre[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#5151e6"},'code[class*="language-"]::-moz-selection':{textShadow:"none",background:"#5151e6"},'code[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#5151e6"},'pre[class*="language-"]::selection':{textShadow:"none",background:"#5151e6"},'pre[class*="language-"] ::selection':{textShadow:"none",background:"#5151e6"},'code[class*="language-"]::selection':{textShadow:"none",background:"#5151e6"},'code[class*="language-"] ::selection':{textShadow:"none",background:"#5151e6"},':not(pre) > code[class*="language-"]':{padding:".1em",borderRadius:".3em"},comment:{color:"#5b5b76"},prolog:{color:"#5b5b76"},doctype:{color:"#5b5b76"},cdata:{color:"#5b5b76"},punctuation:{color:"#5b5b76"},namespace:{Opacity:".7"},tag:{color:"#dd672c"},operator:{color:"#dd672c"},number:{color:"#dd672c"},property:{color:"#767693"},function:{color:"#767693"},"tag-id":{color:"#ebebff"},selector:{color:"#ebebff"},"atrule-id":{color:"#ebebff"},"code.language-javascript":{color:"#aaaaca"},"attr-name":{color:"#aaaaca"},"code.language-css":{color:"#fe8c52"},"code.language-scss":{color:"#fe8c52"},boolean:{color:"#fe8c52"},string:{color:"#fe8c52"},entity:{color:"#fe8c52",cursor:"help"},url:{color:"#fe8c52"},".language-css .token.string":{color:"#fe8c52"},".language-scss .token.string":{color:"#fe8c52"},".style .token.string":{color:"#fe8c52"},"attr-value":{color:"#fe8c52"},keyword:{color:"#fe8c52"},control:{color:"#fe8c52"},directive:{color:"#fe8c52"},unit:{color:"#fe8c52"},statement:{color:"#fe8c52"},regex:{color:"#fe8c52"},atrule:{color:"#fe8c52"},placeholder:{color:"#fe8c52"},variable:{color:"#fe8c52"},deleted:{textDecoration:"line-through"},inserted:{borderBottom:"1px dotted #ebebff",textDecoration:"none"},italic:{fontStyle:"italic"},important:{fontWeight:"bold",color:"#aaaaca"},bold:{fontWeight:"bold"},"pre > code.highlight":{Outline:".4em solid #7676f4",OutlineOffset:".4em"},".line-numbers .line-numbers-rows":{borderRightColor:"#262631"},".line-numbers-rows > span:before":{color:"#393949"},".line-highlight":{background:"linear-gradient(to right, rgba(221, 103, 44, 0.2) 70%, rgba(221, 103, 44, 0))"}}},"Y/Y8":function(e,t,n){"use strict";const o=n("HwUZ"),r=n("zpDW"),i=n("lb9w"),a=n("UTAp"),s=n("UwWT").TAG_NAMES;e.exports=class extends o{constructor(e){super(e),this.parser=e,this.treeAdapter=this.parser.treeAdapter,this.posTracker=null,this.lastStartTagToken=null,this.lastFosterParentingLocation=null,this.currentToken=null}_setStartLocation(e){let t=null;this.lastStartTagToken&&(t=Object.assign({},this.lastStartTagToken.location),t.startTag=this.lastStartTagToken.location),this.treeAdapter.setNodeSourceCodeLocation(e,t)}_setEndLocation(e,t){if(this.treeAdapter.getNodeSourceCodeLocation(e)&&t.location){const n=t.location,o=this.treeAdapter.getTagName(e),i={};t.type===r.END_TAG_TOKEN&&o===t.tagName?(i.endTag=Object.assign({},n),i.endLine=n.endLine,i.endCol=n.endCol,i.endOffset=n.endOffset):(i.endLine=n.startLine,i.endCol=n.startCol,i.endOffset=n.startOffset),this.treeAdapter.updateNodeSourceCodeLocation(e,i)}}_getOverriddenMethods(e,t){return{_bootstrap(n,r){t._bootstrap.call(this,n,r),e.lastStartTagToken=null,e.lastFosterParentingLocation=null,e.currentToken=null;const s=o.install(this.tokenizer,i);e.posTracker=s.posTracker,o.install(this.openElements,a,{onItemPop:function(t){e._setEndLocation(t,e.currentToken)}})},_runParsingLoop(n){t._runParsingLoop.call(this,n);for(let t=this.openElements.stackTop;t>=0;t--)e._setEndLocation(this.openElements.items[t],e.currentToken)},_processTokenInForeignContent(n){e.currentToken=n,t._processTokenInForeignContent.call(this,n)},_processToken(n){e.currentToken=n,t._processToken.call(this,n);if(n.type===r.END_TAG_TOKEN&&(n.tagName===s.HTML||n.tagName===s.BODY&&this.openElements.hasInScope(s.BODY)))for(let t=this.openElements.stackTop;t>=0;t--){const o=this.openElements.items[t];if(this.treeAdapter.getTagName(o)===n.tagName){e._setEndLocation(o,n);break}}},_setDocumentType(e){t._setDocumentType.call(this,e);const n=this.treeAdapter.getChildNodes(this.document),o=n.length;for(let t=0;tt;)a.containerState=c[i][1],c[i][0].exit.call(a,e);c.length=t}},s={tokenize:function(e,t,n){return r(e,e.attempt(this.parser.constructs.document,t,n),"linePrefix",this.parser.constructs.disable.null.indexOf("codeIndented")>-1?void 0:4)}},l={tokenize:function(e,t,n){return r(e,e.lazy(this.parser.constructs.flow,t,n),"linePrefix",this.parser.constructs.disable.null.indexOf("codeIndented")>-1?void 0:4)}};t.tokenize=a},YpxX:function(e,t,n){"use strict";const o=n("pRQB"),r=n("2l2D"),i=o.CODE_POINTS;e.exports=class{constructor(){this.html=null,this.pos=-1,this.lastGapPos=-1,this.lastCharPos=-1,this.gapStack=[],this.skipNextNewLine=!1,this.lastChunkWritten=!1,this.endOfChunkHit=!1,this.bufferWaterline=65536}_err(){}_addGap(){this.gapStack.push(this.lastGapPos),this.lastGapPos=this.pos}_processSurrogate(e){if(this.pos!==this.lastCharPos){const t=this.html.charCodeAt(this.pos+1);if(o.isSurrogatePair(t))return this.pos++,this._addGap(),o.getSurrogatePairCodePoint(e,t)}else if(!this.lastChunkWritten)return this.endOfChunkHit=!0,i.EOF;return this._err(r.surrogateInInputStream),e}dropParsedChunk(){this.pos>this.bufferWaterline&&(this.lastCharPos-=this.pos,this.html=this.html.substring(this.pos),this.pos=0,this.lastGapPos=-1,this.gapStack=[])}write(e,t){this.html?this.html+=e:this.html=e,this.lastCharPos=this.html.length-1,this.endOfChunkHit=!1,this.lastChunkWritten=t}insertHtmlAtCurrentPos(e){this.html=this.html.substring(0,this.pos+1)+e+this.html.substring(this.pos+1,this.html.length),this.lastCharPos=this.html.length-1,this.endOfChunkHit=!1}advance(){if(this.pos++,this.pos>this.lastCharPos)return this.endOfChunkHit=!this.lastChunkWritten,i.EOF;let e=this.html.charCodeAt(this.pos);if(this.skipNextNewLine&&e===i.LINE_FEED)return this.skipNextNewLine=!1,this._addGap(),this.advance();if(e===i.CARRIAGE_RETURN)return this.skipNextNewLine=!0,i.LINE_FEED;this.skipNextNewLine=!1,o.isSurrogate(e)&&(e=this._processSurrogate(e));return e>31&&e<127||e===i.LINE_FEED||e===i.CARRIAGE_RETURN||e>159&&e<64976||this._checkForProblematicCharacters(e),e}_checkForProblematicCharacters(e){o.isControlCodePoint(e)?this._err(r.controlCharacterInInputStream):o.isUndefinedCodePoint(e)&&this._err(r.noncharacterInInputStream)}retreat(){this.pos===this.lastGapPos&&(this.lastGapPos=this.gapStack.pop(),this.pos--),this.pos--}}},Z0IX:function(e,t,n){"use strict";var o=n("EIjK");e.exports=function(e,t){var n=parseInt(e,t);return n<9||11===n||n>13&&n<32||n>126&&n<160||n>55295&&n<57344||n>64975&&n<65008||65535===(65535&n)||65534===(65535&n)||n>1114111?"\ufffd":o(n)}},ZOei:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{color:"#f8f8f2",background:"none",fontFamily:"\"Fira Code\", Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none"},'pre[class*="language-"]':{color:"#f8f8f2",background:"#2E3440",fontFamily:"\"Fira Code\", Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",padding:"1em",margin:".5em 0",overflow:"auto",borderRadius:"0.3em"},':not(pre) > code[class*="language-"]':{background:"#2E3440",padding:".1em",borderRadius:".3em",whiteSpace:"normal"},comment:{color:"#636f88"},prolog:{color:"#636f88"},doctype:{color:"#636f88"},cdata:{color:"#636f88"},punctuation:{color:"#81A1C1"},".namespace":{Opacity:".7"},property:{color:"#81A1C1"},tag:{color:"#81A1C1"},constant:{color:"#81A1C1"},symbol:{color:"#81A1C1"},deleted:{color:"#81A1C1"},number:{color:"#B48EAD"},boolean:{color:"#81A1C1"},selector:{color:"#A3BE8C"},"attr-name":{color:"#A3BE8C"},string:{color:"#A3BE8C"},char:{color:"#A3BE8C"},builtin:{color:"#A3BE8C"},inserted:{color:"#A3BE8C"},operator:{color:"#81A1C1"},entity:{color:"#81A1C1",cursor:"help"},url:{color:"#81A1C1"},".language-css .token.string":{color:"#81A1C1"},".style .token.string":{color:"#81A1C1"},variable:{color:"#81A1C1"},atrule:{color:"#88C0D0"},"attr-value":{color:"#88C0D0"},function:{color:"#88C0D0"},"class-name":{color:"#88C0D0"},keyword:{color:"#81A1C1"},regex:{color:"#EBCB8B"},important:{color:"#EBCB8B",fontWeight:"bold"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"}}},"ZTJ+":function(e,t,n){"use strict";function o(){return null}e.exports={blockquote:n("iX4R"),break:n("aRXn"),code:n("GjEx"),delete:n("/Fgc"),emphasis:n("ktEA"),footnoteReference:n("/BR8"),footnote:n("nbFU"),heading:n("lQDV"),html:n("fFcG"),imageReference:n("rRyo"),image:n("I3zf"),inlineCode:n("M3+Y"),linkReference:n("W+EG"),link:n("/ulP"),listItem:n("bS0g"),list:n("pI64"),paragraph:n("1rba"),root:n("N+Fa"),strong:n("CndC"),table:n("Ry5F"),text:n("KvLk"),thematicBreak:n("WV47"),toml:o,yaml:o,definition:o,footnoteDefinition:o}},Zasy:function(e,t,n){"use strict";function o(e){if(null==e)return r;if("string"===typeof e)return function(e){return t;function t(t){return Boolean(t&&t.type===e)}}(e);if("object"===typeof e)return"length"in e?function(e){var t=[],n=-1;for(;++n code[class*="language-"]':{whiteSpace:"normal",borderRadius:"0.2em",padding:"0.1em"},".language-css > code":{color:"#f76d47"},".language-sass > code":{color:"#f76d47"},".language-scss > code":{color:"#f76d47"},'[class*="language-"] .namespace':{Opacity:"0.7"},atrule:{color:"#7c4dff"},"attr-name":{color:"#39adb5"},"attr-value":{color:"#f6a434"},attribute:{color:"#f6a434"},boolean:{color:"#7c4dff"},builtin:{color:"#39adb5"},cdata:{color:"#39adb5"},char:{color:"#39adb5"},class:{color:"#39adb5"},"class-name":{color:"#6182b8"},comment:{color:"#aabfc9"},constant:{color:"#7c4dff"},deleted:{color:"#e53935"},doctype:{color:"#aabfc9"},entity:{color:"#e53935"},function:{color:"#7c4dff"},hexcode:{color:"#f76d47"},id:{color:"#7c4dff",fontWeight:"bold"},important:{color:"#7c4dff",fontWeight:"bold"},inserted:{color:"#39adb5"},keyword:{color:"#7c4dff"},number:{color:"#f76d47"},operator:{color:"#39adb5"},prolog:{color:"#aabfc9"},property:{color:"#39adb5"},"pseudo-class":{color:"#f6a434"},"pseudo-element":{color:"#f6a434"},punctuation:{color:"#39adb5"},regex:{color:"#6182b8"},selector:{color:"#e53935"},string:{color:"#f6a434"},symbol:{color:"#7c4dff"},tag:{color:"#e53935"},unit:{color:"#f76d47"},url:{color:"#e53935"},variable:{color:"#e53935"}}},b9um:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{MozTabSize:"2",OTabSize:"2",tabSize:"2",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",whiteSpace:"pre-wrap",wordWrap:"normal",fontFamily:'Menlo, Monaco, "Courier New", monospace',fontSize:"14px",color:"#76d9e6",textShadow:"none"},'pre[class*="language-"]':{MozTabSize:"2",OTabSize:"2",tabSize:"2",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",whiteSpace:"pre-wrap",wordWrap:"normal",fontFamily:'Menlo, Monaco, "Courier New", monospace',fontSize:"14px",color:"#76d9e6",textShadow:"none",background:"#2a2a2a",padding:"15px",borderRadius:"4px",border:"1px solid #e1e1e8",overflow:"auto",position:"relative"},'pre > code[class*="language-"]':{fontSize:"1em"},':not(pre) > code[class*="language-"]':{background:"#2a2a2a",padding:"0.15em 0.2em 0.05em",borderRadius:".3em",border:"0.13em solid #7a6652",boxShadow:"1px 1px 0.3em -0.1em #000 inset"},'pre[class*="language-"] code':{whiteSpace:"pre",display:"block"},namespace:{Opacity:".7"},comment:{color:"#6f705e"},prolog:{color:"#6f705e"},doctype:{color:"#6f705e"},cdata:{color:"#6f705e"},operator:{color:"#a77afe"},boolean:{color:"#a77afe"},number:{color:"#a77afe"},"attr-name":{color:"#e6d06c"},string:{color:"#e6d06c"},entity:{color:"#e6d06c",cursor:"help"},url:{color:"#e6d06c"},".language-css .token.string":{color:"#e6d06c"},".style .token.string":{color:"#e6d06c"},selector:{color:"#a6e22d"},inserted:{color:"#a6e22d"},atrule:{color:"#ef3b7d"},"attr-value":{color:"#ef3b7d"},keyword:{color:"#ef3b7d"},important:{color:"#ef3b7d",fontWeight:"bold"},deleted:{color:"#ef3b7d"},regex:{color:"#76d9e6"},statement:{color:"#76d9e6",fontWeight:"bold"},placeholder:{color:"#fff"},variable:{color:"#fff"},bold:{fontWeight:"bold"},punctuation:{color:"#bebec5"},italic:{fontStyle:"italic"},"code.language-markup":{color:"#f9f9f9"},"code.language-markup .token.tag":{color:"#ef3b7d"},"code.language-markup .token.attr-name":{color:"#a6e22d"},"code.language-markup .token.attr-value":{color:"#e6d06c"},"code.language-markup .token.style":{color:"#76d9e6"},"code.language-markup .token.script":{color:"#76d9e6"},"code.language-markup .token.script .token.keyword":{color:"#76d9e6"},'pre[class*="language-"][data-line]':{position:"relative",padding:"1em 0 1em 3em"},"pre[data-line] .line-highlight":{position:"absolute",left:"0",right:"0",padding:"0",marginTop:"1em",background:"rgba(255, 255, 255, 0.08)",pointerEvents:"none",lineHeight:"inherit",whiteSpace:"pre"},"pre[data-line] .line-highlight:before":{content:"attr(data-start)",position:"absolute",top:".4em",left:".6em",minWidth:"1em",padding:"0.2em 0.5em",backgroundColor:"rgba(255, 255, 255, 0.4)",color:"black",font:"bold 65%/1 sans-serif",height:"1em",lineHeight:"1em",textAlign:"center",borderRadius:"999px",textShadow:"none",boxShadow:"0 1px 1px rgba(255, 255, 255, 0.7)"},"pre[data-line] .line-highlight[data-end]:after":{content:"attr(data-end)",position:"absolute",top:"auto",left:".6em",minWidth:"1em",padding:"0.2em 0.5em",backgroundColor:"rgba(255, 255, 255, 0.4)",color:"black",font:"bold 65%/1 sans-serif",height:"1em",lineHeight:"1em",textAlign:"center",borderRadius:"999px",textShadow:"none",boxShadow:"0 1px 1px rgba(255, 255, 255, 0.7)",bottom:".4em"}}},bAF5:function(e,t,n){"use strict";e.exports=function(e){return e.toLowerCase()}},bFEn:function(e,t,n){"use strict";var o=n("7+hk"),r=n("rS7C")(o,"div");r.displayName="html",e.exports=r},bHgY:function(e,t,n){"use strict";var o=n("FWC9"),r=n("DUvi"),i=o.booleanish,a=o.number,s=o.spaceSeparated;e.exports=r({transform:function(e,t){return"role"===t?t:"aria-"+t.slice(4).toLowerCase()},properties:{ariaActiveDescendant:null,ariaAtomic:i,ariaAutoComplete:null,ariaBusy:i,ariaChecked:i,ariaColCount:a,ariaColIndex:a,ariaColSpan:a,ariaControls:s,ariaCurrent:null,ariaDescribedBy:s,ariaDetails:null,ariaDisabled:i,ariaDropEffect:s,ariaErrorMessage:null,ariaExpanded:i,ariaFlowTo:s,ariaGrabbed:i,ariaHasPopup:null,ariaHidden:i,ariaInvalid:null,ariaKeyShortcuts:null,ariaLabel:null,ariaLabelledBy:s,ariaLevel:a,ariaLive:null,ariaModal:i,ariaMultiLine:i,ariaMultiSelectable:i,ariaOrientation:null,ariaOwns:s,ariaPlaceholder:null,ariaPosInSet:a,ariaPressed:i,ariaReadOnly:i,ariaRelevant:null,ariaRequired:i,ariaRoleDescription:s,ariaRowCount:a,ariaRowIndex:a,ariaRowSpan:a,ariaSelected:i,ariaSetSize:a,ariaSort:null,ariaValueMax:a,ariaValueMin:a,ariaValueNow:a,ariaValueText:null,role:null}})},bS0g:function(e,t,n){"use strict";e.exports=function(e,t,n){var a,s,l,c=r(e,t),u=c[0],d=n?function(e){var t=e.spread,n=e.children,o=n.length,r=-1;for(;!t&&++r0&&u.children.unshift(o("text"," ")),u.children.unshift(e(null,"input",{type:"checkbox",checked:t.checked,disabled:!0})),p.className=["task-list-item"]);a=c.length,s=-1;for(;++s1:t}},bWFg:function(e,t,n){"use strict";e.exports=e=>{if("string"!==typeof e)throw new TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}},bwJB:function(e,t,n){"use strict";e.exports=e=>{if("[object Object]"!==Object.prototype.toString.call(e))return!1;const t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}},c2c2:function(e,t,n){"use strict";var o=n("TqRt");Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"coy",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(t,"dark",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(t,"funky",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(t,"okaidia",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(t,"solarizedlight",{enumerable:!0,get:function(){return l.default}}),Object.defineProperty(t,"tomorrow",{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(t,"twilight",{enumerable:!0,get:function(){return u.default}}),Object.defineProperty(t,"prism",{enumerable:!0,get:function(){return d.default}}),Object.defineProperty(t,"a11yDark",{enumerable:!0,get:function(){return p.default}}),Object.defineProperty(t,"atomDark",{enumerable:!0,get:function(){return f.default}}),Object.defineProperty(t,"base16AteliersulphurpoolLight",{enumerable:!0,get:function(){return h.default}}),Object.defineProperty(t,"cb",{enumerable:!0,get:function(){return m.default}}),Object.defineProperty(t,"darcula",{enumerable:!0,get:function(){return g.default}}),Object.defineProperty(t,"dracula",{enumerable:!0,get:function(){return T.default}}),Object.defineProperty(t,"duotoneDark",{enumerable:!0,get:function(){return E.default}}),Object.defineProperty(t,"duotoneEarth",{enumerable:!0,get:function(){return b.default}}),Object.defineProperty(t,"duotoneForest",{enumerable:!0,get:function(){return A.default}}),Object.defineProperty(t,"duotoneLight",{enumerable:!0,get:function(){return k.default}}),Object.defineProperty(t,"duotoneSea",{enumerable:!0,get:function(){return y.default}}),Object.defineProperty(t,"duotoneSpace",{enumerable:!0,get:function(){return _.default}}),Object.defineProperty(t,"ghcolors",{enumerable:!0,get:function(){return S.default}}),Object.defineProperty(t,"hopscotch",{enumerable:!0,get:function(){return C.default}}),Object.defineProperty(t,"materialDark",{enumerable:!0,get:function(){return x.default}}),Object.defineProperty(t,"materialLight",{enumerable:!0,get:function(){return v.default}}),Object.defineProperty(t,"materialOceanic",{enumerable:!0,get:function(){return O.default}}),Object.defineProperty(t,"nord",{enumerable:!0,get:function(){return N.default}}),Object.defineProperty(t,"pojoaque",{enumerable:!0,get:function(){return M.default}}),Object.defineProperty(t,"shadesOfPurple",{enumerable:!0,get:function(){return w.default}}),Object.defineProperty(t,"synthwave84",{enumerable:!0,get:function(){return R.default}}),Object.defineProperty(t,"vs",{enumerable:!0,get:function(){return I.default}}),Object.defineProperty(t,"vscDarkPlus",{enumerable:!0,get:function(){return L.default}}),Object.defineProperty(t,"xonokai",{enumerable:!0,get:function(){return P.default}});var r=o(n("61xa")),i=o(n("PCRY")),a=o(n("H0fq")),s=o(n("WVFU")),l=o(n("fL8H")),c=o(n("wGQB")),u=o(n("iy38")),d=o(n("6MAg")),p=o(n("yix/")),f=o(n("N4m7")),h=o(n("mAwW")),m=o(n("38Ti")),g=o(n("Tauu")),T=o(n("slJw")),E=o(n("007m")),b=o(n("kWEd")),A=o(n("9891")),k=o(n("4+h/")),y=o(n("++Eq")),_=o(n("Y+Mq")),S=o(n("GVPn")),C=o(n("HbD6")),x=o(n("vjtj")),v=o(n("auM2")),O=o(n("2uWR")),N=o(n("ZOei")),M=o(n("fe/W")),w=o(n("otMa")),R=o(n("BYRM")),I=o(n("C7Ve")),L=o(n("u0PD")),P=o(n("b9um"))},c6jy:function(e,t){e.exports=function(e){return null!=e&&null!=e.constructor&&"function"===typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}},cRLj:function(e,t,n){"use strict";e.exports=new Uint16Array([4,52,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,106,303,412,810,1432,1701,1796,1987,2114,2360,2420,2484,3170,3251,4140,4393,4575,4610,5106,5512,5728,6117,6274,6315,6345,6427,6516,7002,7910,8733,9323,9870,10170,10631,10893,11318,11386,11467,12773,13092,14474,14922,15448,15542,16419,17666,18166,18611,19004,19095,19298,19397,4,16,69,77,97,98,99,102,103,108,109,110,111,112,114,115,116,117,140,150,158,169,176,194,199,210,216,222,226,242,256,266,283,294,108,105,103,5,198,1,59,148,1,198,80,5,38,1,59,156,1,38,99,117,116,101,5,193,1,59,167,1,193,114,101,118,101,59,1,258,4,2,105,121,182,191,114,99,5,194,1,59,189,1,194,59,1,1040,114,59,3,55349,56580,114,97,118,101,5,192,1,59,208,1,192,112,104,97,59,1,913,97,99,114,59,1,256,100,59,1,10835,4,2,103,112,232,237,111,110,59,1,260,102,59,3,55349,56632,112,108,121,70,117,110,99,116,105,111,110,59,1,8289,105,110,103,5,197,1,59,264,1,197,4,2,99,115,272,277,114,59,3,55349,56476,105,103,110,59,1,8788,105,108,100,101,5,195,1,59,292,1,195,109,108,5,196,1,59,301,1,196,4,8,97,99,101,102,111,114,115,117,321,350,354,383,388,394,400,405,4,2,99,114,327,336,107,115,108,97,115,104,59,1,8726,4,2,118,119,342,345,59,1,10983,101,100,59,1,8966,121,59,1,1041,4,3,99,114,116,362,369,379,97,117,115,101,59,1,8757,110,111,117,108,108,105,115,59,1,8492,97,59,1,914,114,59,3,55349,56581,112,102,59,3,55349,56633,101,118,101,59,1,728,99,114,59,1,8492,109,112,101,113,59,1,8782,4,14,72,79,97,99,100,101,102,104,105,108,111,114,115,117,442,447,456,504,542,547,569,573,577,616,678,784,790,796,99,121,59,1,1063,80,89,5,169,1,59,454,1,169,4,3,99,112,121,464,470,497,117,116,101,59,1,262,4,2,59,105,476,478,1,8914,116,97,108,68,105,102,102,101,114,101,110,116,105,97,108,68,59,1,8517,108,101,121,115,59,1,8493,4,4,97,101,105,111,514,520,530,535,114,111,110,59,1,268,100,105,108,5,199,1,59,528,1,199,114,99,59,1,264,110,105,110,116,59,1,8752,111,116,59,1,266,4,2,100,110,553,560,105,108,108,97,59,1,184,116,101,114,68,111,116,59,1,183,114,59,1,8493,105,59,1,935,114,99,108,101,4,4,68,77,80,84,591,596,603,609,111,116,59,1,8857,105,110,117,115,59,1,8854,108,117,115,59,1,8853,105,109,101,115,59,1,8855,111,4,2,99,115,623,646,107,119,105,115,101,67,111,110,116,111,117,114,73,110,116,101,103,114,97,108,59,1,8754,101,67,117,114,108,121,4,2,68,81,658,671,111,117,98,108,101,81,117,111,116,101,59,1,8221,117,111,116,101,59,1,8217,4,4,108,110,112,117,688,701,736,753,111,110,4,2,59,101,696,698,1,8759,59,1,10868,4,3,103,105,116,709,717,722,114,117,101,110,116,59,1,8801,110,116,59,1,8751,111,117,114,73,110,116,101,103,114,97,108,59,1,8750,4,2,102,114,742,745,59,1,8450,111,100,117,99,116,59,1,8720,110,116,101,114,67,108,111,99,107,119,105,115,101,67,111,110,116,111,117,114,73,110,116,101,103,114,97,108,59,1,8755,111,115,115,59,1,10799,99,114,59,3,55349,56478,112,4,2,59,67,803,805,1,8915,97,112,59,1,8781,4,11,68,74,83,90,97,99,101,102,105,111,115,834,850,855,860,865,888,903,916,921,1011,1415,4,2,59,111,840,842,1,8517,116,114,97,104,100,59,1,10513,99,121,59,1,1026,99,121,59,1,1029,99,121,59,1,1039,4,3,103,114,115,873,879,883,103,101,114,59,1,8225,114,59,1,8609,104,118,59,1,10980,4,2,97,121,894,900,114,111,110,59,1,270,59,1,1044,108,4,2,59,116,910,912,1,8711,97,59,1,916,114,59,3,55349,56583,4,2,97,102,927,998,4,2,99,109,933,992,114,105,116,105,99,97,108,4,4,65,68,71,84,950,957,978,985,99,117,116,101,59,1,180,111,4,2,116,117,964,967,59,1,729,98,108,101,65,99,117,116,101,59,1,733,114,97,118,101,59,1,96,105,108,100,101,59,1,732,111,110,100,59,1,8900,102,101,114,101,110,116,105,97,108,68,59,1,8518,4,4,112,116,117,119,1021,1026,1048,1249,102,59,3,55349,56635,4,3,59,68,69,1034,1036,1041,1,168,111,116,59,1,8412,113,117,97,108,59,1,8784,98,108,101,4,6,67,68,76,82,85,86,1065,1082,1101,1189,1211,1236,111,110,116,111,117,114,73,110,116,101,103,114,97,108,59,1,8751,111,4,2,116,119,1089,1092,59,1,168,110,65,114,114,111,119,59,1,8659,4,2,101,111,1107,1141,102,116,4,3,65,82,84,1117,1124,1136,114,114,111,119,59,1,8656,105,103,104,116,65,114,114,111,119,59,1,8660,101,101,59,1,10980,110,103,4,2,76,82,1149,1177,101,102,116,4,2,65,82,1158,1165,114,114,111,119,59,1,10232,105,103,104,116,65,114,114,111,119,59,1,10234,105,103,104,116,65,114,114,111,119,59,1,10233,105,103,104,116,4,2,65,84,1199,1206,114,114,111,119,59,1,8658,101,101,59,1,8872,112,4,2,65,68,1218,1225,114,114,111,119,59,1,8657,111,119,110,65,114,114,111,119,59,1,8661,101,114,116,105,99,97,108,66,97,114,59,1,8741,110,4,6,65,66,76,82,84,97,1264,1292,1299,1352,1391,1408,114,114,111,119,4,3,59,66,85,1276,1278,1283,1,8595,97,114,59,1,10515,112,65,114,114,111,119,59,1,8693,114,101,118,101,59,1,785,101,102,116,4,3,82,84,86,1310,1323,1334,105,103,104,116,86,101,99,116,111,114,59,1,10576,101,101,86,101,99,116,111,114,59,1,10590,101,99,116,111,114,4,2,59,66,1345,1347,1,8637,97,114,59,1,10582,105,103,104,116,4,2,84,86,1362,1373,101,101,86,101,99,116,111,114,59,1,10591,101,99,116,111,114,4,2,59,66,1384,1386,1,8641,97,114,59,1,10583,101,101,4,2,59,65,1399,1401,1,8868,114,114,111,119,59,1,8615,114,114,111,119,59,1,8659,4,2,99,116,1421,1426,114,59,3,55349,56479,114,111,107,59,1,272,4,16,78,84,97,99,100,102,103,108,109,111,112,113,115,116,117,120,1466,1470,1478,1489,1515,1520,1525,1536,1544,1593,1609,1617,1650,1664,1668,1677,71,59,1,330,72,5,208,1,59,1476,1,208,99,117,116,101,5,201,1,59,1487,1,201,4,3,97,105,121,1497,1503,1512,114,111,110,59,1,282,114,99,5,202,1,59,1510,1,202,59,1,1069,111,116,59,1,278,114,59,3,55349,56584,114,97,118,101,5,200,1,59,1534,1,200,101,109,101,110,116,59,1,8712,4,2,97,112,1550,1555,99,114,59,1,274,116,121,4,2,83,86,1563,1576,109,97,108,108,83,113,117,97,114,101,59,1,9723,101,114,121,83,109,97,108,108,83,113,117,97,114,101,59,1,9643,4,2,103,112,1599,1604,111,110,59,1,280,102,59,3,55349,56636,115,105,108,111,110,59,1,917,117,4,2,97,105,1624,1640,108,4,2,59,84,1631,1633,1,10869,105,108,100,101,59,1,8770,108,105,98,114,105,117,109,59,1,8652,4,2,99,105,1656,1660,114,59,1,8496,109,59,1,10867,97,59,1,919,109,108,5,203,1,59,1675,1,203,4,2,105,112,1683,1689,115,116,115,59,1,8707,111,110,101,110,116,105,97,108,69,59,1,8519,4,5,99,102,105,111,115,1713,1717,1722,1762,1791,121,59,1,1060,114,59,3,55349,56585,108,108,101,100,4,2,83,86,1732,1745,109,97,108,108,83,113,117,97,114,101,59,1,9724,101,114,121,83,109,97,108,108,83,113,117,97,114,101,59,1,9642,4,3,112,114,117,1770,1775,1781,102,59,3,55349,56637,65,108,108,59,1,8704,114,105,101,114,116,114,102,59,1,8497,99,114,59,1,8497,4,12,74,84,97,98,99,100,102,103,111,114,115,116,1822,1827,1834,1848,1855,1877,1882,1887,1890,1896,1978,1984,99,121,59,1,1027,5,62,1,59,1832,1,62,109,109,97,4,2,59,100,1843,1845,1,915,59,1,988,114,101,118,101,59,1,286,4,3,101,105,121,1863,1869,1874,100,105,108,59,1,290,114,99,59,1,284,59,1,1043,111,116,59,1,288,114,59,3,55349,56586,59,1,8921,112,102,59,3,55349,56638,101,97,116,101,114,4,6,69,70,71,76,83,84,1915,1933,1944,1953,1959,1971,113,117,97,108,4,2,59,76,1925,1927,1,8805,101,115,115,59,1,8923,117,108,108,69,113,117,97,108,59,1,8807,114,101,97,116,101,114,59,1,10914,101,115,115,59,1,8823,108,97,110,116,69,113,117,97,108,59,1,10878,105,108,100,101,59,1,8819,99,114,59,3,55349,56482,59,1,8811,4,8,65,97,99,102,105,111,115,117,2005,2012,2026,2032,2036,2049,2073,2089,82,68,99,121,59,1,1066,4,2,99,116,2018,2023,101,107,59,1,711,59,1,94,105,114,99,59,1,292,114,59,1,8460,108,98,101,114,116,83,112,97,99,101,59,1,8459,4,2,112,114,2055,2059,102,59,1,8461,105,122,111,110,116,97,108,76,105,110,101,59,1,9472,4,2,99,116,2079,2083,114,59,1,8459,114,111,107,59,1,294,109,112,4,2,68,69,2097,2107,111,119,110,72,117,109,112,59,1,8782,113,117,97,108,59,1,8783,4,14,69,74,79,97,99,100,102,103,109,110,111,115,116,117,2144,2149,2155,2160,2171,2189,2194,2198,2209,2245,2307,2329,2334,2341,99,121,59,1,1045,108,105,103,59,1,306,99,121,59,1,1025,99,117,116,101,5,205,1,59,2169,1,205,4,2,105,121,2177,2186,114,99,5,206,1,59,2184,1,206,59,1,1048,111,116,59,1,304,114,59,1,8465,114,97,118,101,5,204,1,59,2207,1,204,4,3,59,97,112,2217,2219,2238,1,8465,4,2,99,103,2225,2229,114,59,1,298,105,110,97,114,121,73,59,1,8520,108,105,101,115,59,1,8658,4,2,116,118,2251,2281,4,2,59,101,2257,2259,1,8748,4,2,103,114,2265,2271,114,97,108,59,1,8747,115,101,99,116,105,111,110,59,1,8898,105,115,105,98,108,101,4,2,67,84,2293,2300,111,109,109,97,59,1,8291,105,109,101,115,59,1,8290,4,3,103,112,116,2315,2320,2325,111,110,59,1,302,102,59,3,55349,56640,97,59,1,921,99,114,59,1,8464,105,108,100,101,59,1,296,4,2,107,109,2347,2352,99,121,59,1,1030,108,5,207,1,59,2358,1,207,4,5,99,102,111,115,117,2372,2386,2391,2397,2414,4,2,105,121,2378,2383,114,99,59,1,308,59,1,1049,114,59,3,55349,56589,112,102,59,3,55349,56641,4,2,99,101,2403,2408,114,59,3,55349,56485,114,99,121,59,1,1032,107,99,121,59,1,1028,4,7,72,74,97,99,102,111,115,2436,2441,2446,2452,2467,2472,2478,99,121,59,1,1061,99,121,59,1,1036,112,112,97,59,1,922,4,2,101,121,2458,2464,100,105,108,59,1,310,59,1,1050,114,59,3,55349,56590,112,102,59,3,55349,56642,99,114,59,3,55349,56486,4,11,74,84,97,99,101,102,108,109,111,115,116,2508,2513,2520,2562,2585,2981,2986,3004,3011,3146,3167,99,121,59,1,1033,5,60,1,59,2518,1,60,4,5,99,109,110,112,114,2532,2538,2544,2548,2558,117,116,101,59,1,313,98,100,97,59,1,923,103,59,1,10218,108,97,99,101,116,114,102,59,1,8466,114,59,1,8606,4,3,97,101,121,2570,2576,2582,114,111,110,59,1,317,100,105,108,59,1,315,59,1,1051,4,2,102,115,2591,2907,116,4,10,65,67,68,70,82,84,85,86,97,114,2614,2663,2672,2728,2735,2760,2820,2870,2888,2895,4,2,110,114,2620,2633,103,108,101,66,114,97,99,107,101,116,59,1,10216,114,111,119,4,3,59,66,82,2644,2646,2651,1,8592,97,114,59,1,8676,105,103,104,116,65,114,114,111,119,59,1,8646,101,105,108,105,110,103,59,1,8968,111,4,2,117,119,2679,2692,98,108,101,66,114,97,99,107,101,116,59,1,10214,110,4,2,84,86,2699,2710,101,101,86,101,99,116,111,114,59,1,10593,101,99,116,111,114,4,2,59,66,2721,2723,1,8643,97,114,59,1,10585,108,111,111,114,59,1,8970,105,103,104,116,4,2,65,86,2745,2752,114,114,111,119,59,1,8596,101,99,116,111,114,59,1,10574,4,2,101,114,2766,2792,101,4,3,59,65,86,2775,2777,2784,1,8867,114,114,111,119,59,1,8612,101,99,116,111,114,59,1,10586,105,97,110,103,108,101,4,3,59,66,69,2806,2808,2813,1,8882,97,114,59,1,10703,113,117,97,108,59,1,8884,112,4,3,68,84,86,2829,2841,2852,111,119,110,86,101,99,116,111,114,59,1,10577,101,101,86,101,99,116,111,114,59,1,10592,101,99,116,111,114,4,2,59,66,2863,2865,1,8639,97,114,59,1,10584,101,99,116,111,114,4,2,59,66,2881,2883,1,8636,97,114,59,1,10578,114,114,111,119,59,1,8656,105,103,104,116,97,114,114,111,119,59,1,8660,115,4,6,69,70,71,76,83,84,2922,2936,2947,2956,2962,2974,113,117,97,108,71,114,101,97,116,101,114,59,1,8922,117,108,108,69,113,117,97,108,59,1,8806,114,101,97,116,101,114,59,1,8822,101,115,115,59,1,10913,108,97,110,116,69,113,117,97,108,59,1,10877,105,108,100,101,59,1,8818,114,59,3,55349,56591,4,2,59,101,2992,2994,1,8920,102,116,97,114,114,111,119,59,1,8666,105,100,111,116,59,1,319,4,3,110,112,119,3019,3110,3115,103,4,4,76,82,108,114,3030,3058,3070,3098,101,102,116,4,2,65,82,3039,3046,114,114,111,119,59,1,10229,105,103,104,116,65,114,114,111,119,59,1,10231,105,103,104,116,65,114,114,111,119,59,1,10230,101,102,116,4,2,97,114,3079,3086,114,114,111,119,59,1,10232,105,103,104,116,97,114,114,111,119,59,1,10234,105,103,104,116,97,114,114,111,119,59,1,10233,102,59,3,55349,56643,101,114,4,2,76,82,3123,3134,101,102,116,65,114,114,111,119,59,1,8601,105,103,104,116,65,114,114,111,119,59,1,8600,4,3,99,104,116,3154,3158,3161,114,59,1,8466,59,1,8624,114,111,107,59,1,321,59,1,8810,4,8,97,99,101,102,105,111,115,117,3188,3192,3196,3222,3227,3237,3243,3248,112,59,1,10501,121,59,1,1052,4,2,100,108,3202,3213,105,117,109,83,112,97,99,101,59,1,8287,108,105,110,116,114,102,59,1,8499,114,59,3,55349,56592,110,117,115,80,108,117,115,59,1,8723,112,102,59,3,55349,56644,99,114,59,1,8499,59,1,924,4,9,74,97,99,101,102,111,115,116,117,3271,3276,3283,3306,3422,3427,4120,4126,4137,99,121,59,1,1034,99,117,116,101,59,1,323,4,3,97,101,121,3291,3297,3303,114,111,110,59,1,327,100,105,108,59,1,325,59,1,1053,4,3,103,115,119,3314,3380,3415,97,116,105,118,101,4,3,77,84,86,3327,3340,3365,101,100,105,117,109,83,112,97,99,101,59,1,8203,104,105,4,2,99,110,3348,3357,107,83,112,97,99,101,59,1,8203,83,112,97,99,101,59,1,8203,101,114,121,84,104,105,110,83,112,97,99,101,59,1,8203,116,101,100,4,2,71,76,3389,3405,114,101,97,116,101,114,71,114,101,97,116,101,114,59,1,8811,101,115,115,76,101,115,115,59,1,8810,76,105,110,101,59,1,10,114,59,3,55349,56593,4,4,66,110,112,116,3437,3444,3460,3464,114,101,97,107,59,1,8288,66,114,101,97,107,105,110,103,83,112,97,99,101,59,1,160,102,59,1,8469,4,13,59,67,68,69,71,72,76,78,80,82,83,84,86,3492,3494,3517,3536,3578,3657,3685,3784,3823,3860,3915,4066,4107,1,10988,4,2,111,117,3500,3510,110,103,114,117,101,110,116,59,1,8802,112,67,97,112,59,1,8813,111,117,98,108,101,86,101,114,116,105,99,97,108,66,97,114,59,1,8742,4,3,108,113,120,3544,3552,3571,101,109,101,110,116,59,1,8713,117,97,108,4,2,59,84,3561,3563,1,8800,105,108,100,101,59,3,8770,824,105,115,116,115,59,1,8708,114,101,97,116,101,114,4,7,59,69,70,71,76,83,84,3600,3602,3609,3621,3631,3637,3650,1,8815,113,117,97,108,59,1,8817,117,108,108,69,113,117,97,108,59,3,8807,824,114,101,97,116,101,114,59,3,8811,824,101,115,115,59,1,8825,108,97,110,116,69,113,117,97,108,59,3,10878,824,105,108,100,101,59,1,8821,117,109,112,4,2,68,69,3666,3677,111,119,110,72,117,109,112,59,3,8782,824,113,117,97,108,59,3,8783,824,101,4,2,102,115,3692,3724,116,84,114,105,97,110,103,108,101,4,3,59,66,69,3709,3711,3717,1,8938,97,114,59,3,10703,824,113,117,97,108,59,1,8940,115,4,6,59,69,71,76,83,84,3739,3741,3748,3757,3764,3777,1,8814,113,117,97,108,59,1,8816,114,101,97,116,101,114,59,1,8824,101,115,115,59,3,8810,824,108,97,110,116,69,113,117,97,108,59,3,10877,824,105,108,100,101,59,1,8820,101,115,116,101,100,4,2,71,76,3795,3812,114,101,97,116,101,114,71,114,101,97,116,101,114,59,3,10914,824,101,115,115,76,101,115,115,59,3,10913,824,114,101,99,101,100,101,115,4,3,59,69,83,3838,3840,3848,1,8832,113,117,97,108,59,3,10927,824,108,97,110,116,69,113,117,97,108,59,1,8928,4,2,101,105,3866,3881,118,101,114,115,101,69,108,101,109,101,110,116,59,1,8716,103,104,116,84,114,105,97,110,103,108,101,4,3,59,66,69,3900,3902,3908,1,8939,97,114,59,3,10704,824,113,117,97,108,59,1,8941,4,2,113,117,3921,3973,117,97,114,101,83,117,4,2,98,112,3933,3952,115,101,116,4,2,59,69,3942,3945,3,8847,824,113,117,97,108,59,1,8930,101,114,115,101,116,4,2,59,69,3963,3966,3,8848,824,113,117,97,108,59,1,8931,4,3,98,99,112,3981,4e3,4045,115,101,116,4,2,59,69,3990,3993,3,8834,8402,113,117,97,108,59,1,8840,99,101,101,100,115,4,4,59,69,83,84,4015,4017,4025,4037,1,8833,113,117,97,108,59,3,10928,824,108,97,110,116,69,113,117,97,108,59,1,8929,105,108,100,101,59,3,8831,824,101,114,115,101,116,4,2,59,69,4056,4059,3,8835,8402,113,117,97,108,59,1,8841,105,108,100,101,4,4,59,69,70,84,4080,4082,4089,4100,1,8769,113,117,97,108,59,1,8772,117,108,108,69,113,117,97,108,59,1,8775,105,108,100,101,59,1,8777,101,114,116,105,99,97,108,66,97,114,59,1,8740,99,114,59,3,55349,56489,105,108,100,101,5,209,1,59,4135,1,209,59,1,925,4,14,69,97,99,100,102,103,109,111,112,114,115,116,117,118,4170,4176,4187,4205,4212,4217,4228,4253,4259,4292,4295,4316,4337,4346,108,105,103,59,1,338,99,117,116,101,5,211,1,59,4185,1,211,4,2,105,121,4193,4202,114,99,5,212,1,59,4200,1,212,59,1,1054,98,108,97,99,59,1,336,114,59,3,55349,56594,114,97,118,101,5,210,1,59,4226,1,210,4,3,97,101,105,4236,4241,4246,99,114,59,1,332,103,97,59,1,937,99,114,111,110,59,1,927,112,102,59,3,55349,56646,101,110,67,117,114,108,121,4,2,68,81,4272,4285,111,117,98,108,101,81,117,111,116,101,59,1,8220,117,111,116,101,59,1,8216,59,1,10836,4,2,99,108,4301,4306,114,59,3,55349,56490,97,115,104,5,216,1,59,4314,1,216,105,4,2,108,109,4323,4332,100,101,5,213,1,59,4330,1,213,101,115,59,1,10807,109,108,5,214,1,59,4344,1,214,101,114,4,2,66,80,4354,4380,4,2,97,114,4360,4364,114,59,1,8254,97,99,4,2,101,107,4372,4375,59,1,9182,101,116,59,1,9140,97,114,101,110,116,104,101,115,105,115,59,1,9180,4,9,97,99,102,104,105,108,111,114,115,4413,4422,4426,4431,4435,4438,4448,4471,4561,114,116,105,97,108,68,59,1,8706,121,59,1,1055,114,59,3,55349,56595,105,59,1,934,59,1,928,117,115,77,105,110,117,115,59,1,177,4,2,105,112,4454,4467,110,99,97,114,101,112,108,97,110,101,59,1,8460,102,59,1,8473,4,4,59,101,105,111,4481,4483,4526,4531,1,10939,99,101,100,101,115,4,4,59,69,83,84,4498,4500,4507,4519,1,8826,113,117,97,108,59,1,10927,108,97,110,116,69,113,117,97,108,59,1,8828,105,108,100,101,59,1,8830,109,101,59,1,8243,4,2,100,112,4537,4543,117,99,116,59,1,8719,111,114,116,105,111,110,4,2,59,97,4555,4557,1,8759,108,59,1,8733,4,2,99,105,4567,4572,114,59,3,55349,56491,59,1,936,4,4,85,102,111,115,4585,4594,4599,4604,79,84,5,34,1,59,4592,1,34,114,59,3,55349,56596,112,102,59,1,8474,99,114,59,3,55349,56492,4,12,66,69,97,99,101,102,104,105,111,114,115,117,4636,4642,4650,4681,4704,4763,4767,4771,5047,5069,5081,5094,97,114,114,59,1,10512,71,5,174,1,59,4648,1,174,4,3,99,110,114,4658,4664,4668,117,116,101,59,1,340,103,59,1,10219,114,4,2,59,116,4675,4677,1,8608,108,59,1,10518,4,3,97,101,121,4689,4695,4701,114,111,110,59,1,344,100,105,108,59,1,342,59,1,1056,4,2,59,118,4710,4712,1,8476,101,114,115,101,4,2,69,85,4722,4748,4,2,108,113,4728,4736,101,109,101,110,116,59,1,8715,117,105,108,105,98,114,105,117,109,59,1,8651,112,69,113,117,105,108,105,98,114,105,117,109,59,1,10607,114,59,1,8476,111,59,1,929,103,104,116,4,8,65,67,68,70,84,85,86,97,4792,4840,4849,4905,4912,4972,5022,5040,4,2,110,114,4798,4811,103,108,101,66,114,97,99,107,101,116,59,1,10217,114,111,119,4,3,59,66,76,4822,4824,4829,1,8594,97,114,59,1,8677,101,102,116,65,114,114,111,119,59,1,8644,101,105,108,105,110,103,59,1,8969,111,4,2,117,119,4856,4869,98,108,101,66,114,97,99,107,101,116,59,1,10215,110,4,2,84,86,4876,4887,101,101,86,101,99,116,111,114,59,1,10589,101,99,116,111,114,4,2,59,66,4898,4900,1,8642,97,114,59,1,10581,108,111,111,114,59,1,8971,4,2,101,114,4918,4944,101,4,3,59,65,86,4927,4929,4936,1,8866,114,114,111,119,59,1,8614,101,99,116,111,114,59,1,10587,105,97,110,103,108,101,4,3,59,66,69,4958,4960,4965,1,8883,97,114,59,1,10704,113,117,97,108,59,1,8885,112,4,3,68,84,86,4981,4993,5004,111,119,110,86,101,99,116,111,114,59,1,10575,101,101,86,101,99,116,111,114,59,1,10588,101,99,116,111,114,4,2,59,66,5015,5017,1,8638,97,114,59,1,10580,101,99,116,111,114,4,2,59,66,5033,5035,1,8640,97,114,59,1,10579,114,114,111,119,59,1,8658,4,2,112,117,5053,5057,102,59,1,8477,110,100,73,109,112,108,105,101,115,59,1,10608,105,103,104,116,97,114,114,111,119,59,1,8667,4,2,99,104,5087,5091,114,59,1,8475,59,1,8625,108,101,68,101,108,97,121,101,100,59,1,10740,4,13,72,79,97,99,102,104,105,109,111,113,115,116,117,5134,5150,5157,5164,5198,5203,5259,5265,5277,5283,5374,5380,5385,4,2,67,99,5140,5146,72,99,121,59,1,1065,121,59,1,1064,70,84,99,121,59,1,1068,99,117,116,101,59,1,346,4,5,59,97,101,105,121,5176,5178,5184,5190,5195,1,10940,114,111,110,59,1,352,100,105,108,59,1,350,114,99,59,1,348,59,1,1057,114,59,3,55349,56598,111,114,116,4,4,68,76,82,85,5216,5227,5238,5250,111,119,110,65,114,114,111,119,59,1,8595,101,102,116,65,114,114,111,119,59,1,8592,105,103,104,116,65,114,114,111,119,59,1,8594,112,65,114,114,111,119,59,1,8593,103,109,97,59,1,931,97,108,108,67,105,114,99,108,101,59,1,8728,112,102,59,3,55349,56650,4,2,114,117,5289,5293,116,59,1,8730,97,114,101,4,4,59,73,83,85,5306,5308,5322,5367,1,9633,110,116,101,114,115,101,99,116,105,111,110,59,1,8851,117,4,2,98,112,5329,5347,115,101,116,4,2,59,69,5338,5340,1,8847,113,117,97,108,59,1,8849,101,114,115,101,116,4,2,59,69,5358,5360,1,8848,113,117,97,108,59,1,8850,110,105,111,110,59,1,8852,99,114,59,3,55349,56494,97,114,59,1,8902,4,4,98,99,109,112,5395,5420,5475,5478,4,2,59,115,5401,5403,1,8912,101,116,4,2,59,69,5411,5413,1,8912,113,117,97,108,59,1,8838,4,2,99,104,5426,5468,101,101,100,115,4,4,59,69,83,84,5440,5442,5449,5461,1,8827,113,117,97,108,59,1,10928,108,97,110,116,69,113,117,97,108,59,1,8829,105,108,100,101,59,1,8831,84,104,97,116,59,1,8715,59,1,8721,4,3,59,101,115,5486,5488,5507,1,8913,114,115,101,116,4,2,59,69,5498,5500,1,8835,113,117,97,108,59,1,8839,101,116,59,1,8913,4,11,72,82,83,97,99,102,104,105,111,114,115,5536,5546,5552,5567,5579,5602,5607,5655,5695,5701,5711,79,82,78,5,222,1,59,5544,1,222,65,68,69,59,1,8482,4,2,72,99,5558,5563,99,121,59,1,1035,121,59,1,1062,4,2,98,117,5573,5576,59,1,9,59,1,932,4,3,97,101,121,5587,5593,5599,114,111,110,59,1,356,100,105,108,59,1,354,59,1,1058,114,59,3,55349,56599,4,2,101,105,5613,5631,4,2,114,116,5619,5627,101,102,111,114,101,59,1,8756,97,59,1,920,4,2,99,110,5637,5647,107,83,112,97,99,101,59,3,8287,8202,83,112,97,99,101,59,1,8201,108,100,101,4,4,59,69,70,84,5668,5670,5677,5688,1,8764,113,117,97,108,59,1,8771,117,108,108,69,113,117,97,108,59,1,8773,105,108,100,101,59,1,8776,112,102,59,3,55349,56651,105,112,108,101,68,111,116,59,1,8411,4,2,99,116,5717,5722,114,59,3,55349,56495,114,111,107,59,1,358,4,14,97,98,99,100,102,103,109,110,111,112,114,115,116,117,5758,5789,5805,5823,5830,5835,5846,5852,5921,5937,6089,6095,6101,6108,4,2,99,114,5764,5774,117,116,101,5,218,1,59,5772,1,218,114,4,2,59,111,5781,5783,1,8607,99,105,114,59,1,10569,114,4,2,99,101,5796,5800,121,59,1,1038,118,101,59,1,364,4,2,105,121,5811,5820,114,99,5,219,1,59,5818,1,219,59,1,1059,98,108,97,99,59,1,368,114,59,3,55349,56600,114,97,118,101,5,217,1,59,5844,1,217,97,99,114,59,1,362,4,2,100,105,5858,5905,101,114,4,2,66,80,5866,5892,4,2,97,114,5872,5876,114,59,1,95,97,99,4,2,101,107,5884,5887,59,1,9183,101,116,59,1,9141,97,114,101,110,116,104,101,115,105,115,59,1,9181,111,110,4,2,59,80,5913,5915,1,8899,108,117,115,59,1,8846,4,2,103,112,5927,5932,111,110,59,1,370,102,59,3,55349,56652,4,8,65,68,69,84,97,100,112,115,5955,5985,5996,6009,6026,6033,6044,6075,114,114,111,119,4,3,59,66,68,5967,5969,5974,1,8593,97,114,59,1,10514,111,119,110,65,114,114,111,119,59,1,8645,111,119,110,65,114,114,111,119,59,1,8597,113,117,105,108,105,98,114,105,117,109,59,1,10606,101,101,4,2,59,65,6017,6019,1,8869,114,114,111,119,59,1,8613,114,114,111,119,59,1,8657,111,119,110,97,114,114,111,119,59,1,8661,101,114,4,2,76,82,6052,6063,101,102,116,65,114,114,111,119,59,1,8598,105,103,104,116,65,114,114,111,119,59,1,8599,105,4,2,59,108,6082,6084,1,978,111,110,59,1,933,105,110,103,59,1,366,99,114,59,3,55349,56496,105,108,100,101,59,1,360,109,108,5,220,1,59,6115,1,220,4,9,68,98,99,100,101,102,111,115,118,6137,6143,6148,6152,6166,6250,6255,6261,6267,97,115,104,59,1,8875,97,114,59,1,10987,121,59,1,1042,97,115,104,4,2,59,108,6161,6163,1,8873,59,1,10982,4,2,101,114,6172,6175,59,1,8897,4,3,98,116,121,6183,6188,6238,97,114,59,1,8214,4,2,59,105,6194,6196,1,8214,99,97,108,4,4,66,76,83,84,6209,6214,6220,6231,97,114,59,1,8739,105,110,101,59,1,124,101,112,97,114,97,116,111,114,59,1,10072,105,108,100,101,59,1,8768,84,104,105,110,83,112,97,99,101,59,1,8202,114,59,3,55349,56601,112,102,59,3,55349,56653,99,114,59,3,55349,56497,100,97,115,104,59,1,8874,4,5,99,101,102,111,115,6286,6292,6298,6303,6309,105,114,99,59,1,372,100,103,101,59,1,8896,114,59,3,55349,56602,112,102,59,3,55349,56654,99,114,59,3,55349,56498,4,4,102,105,111,115,6325,6330,6333,6339,114,59,3,55349,56603,59,1,926,112,102,59,3,55349,56655,99,114,59,3,55349,56499,4,9,65,73,85,97,99,102,111,115,117,6365,6370,6375,6380,6391,6405,6410,6416,6422,99,121,59,1,1071,99,121,59,1,1031,99,121,59,1,1070,99,117,116,101,5,221,1,59,6389,1,221,4,2,105,121,6397,6402,114,99,59,1,374,59,1,1067,114,59,3,55349,56604,112,102,59,3,55349,56656,99,114,59,3,55349,56500,109,108,59,1,376,4,8,72,97,99,100,101,102,111,115,6445,6450,6457,6472,6477,6501,6505,6510,99,121,59,1,1046,99,117,116,101,59,1,377,4,2,97,121,6463,6469,114,111,110,59,1,381,59,1,1047,111,116,59,1,379,4,2,114,116,6483,6497,111,87,105,100,116,104,83,112,97,99,101,59,1,8203,97,59,1,918,114,59,1,8488,112,102,59,1,8484,99,114,59,3,55349,56501,4,16,97,98,99,101,102,103,108,109,110,111,112,114,115,116,117,119,6550,6561,6568,6612,6622,6634,6645,6672,6699,6854,6870,6923,6933,6963,6974,6983,99,117,116,101,5,225,1,59,6559,1,225,114,101,118,101,59,1,259,4,6,59,69,100,105,117,121,6582,6584,6588,6591,6600,6609,1,8766,59,3,8766,819,59,1,8767,114,99,5,226,1,59,6598,1,226,116,101,5,180,1,59,6607,1,180,59,1,1072,108,105,103,5,230,1,59,6620,1,230,4,2,59,114,6628,6630,1,8289,59,3,55349,56606,114,97,118,101,5,224,1,59,6643,1,224,4,2,101,112,6651,6667,4,2,102,112,6657,6663,115,121,109,59,1,8501,104,59,1,8501,104,97,59,1,945,4,2,97,112,6678,6692,4,2,99,108,6684,6688,114,59,1,257,103,59,1,10815,5,38,1,59,6697,1,38,4,2,100,103,6705,6737,4,5,59,97,100,115,118,6717,6719,6724,6727,6734,1,8743,110,100,59,1,10837,59,1,10844,108,111,112,101,59,1,10840,59,1,10842,4,7,59,101,108,109,114,115,122,6753,6755,6758,6762,6814,6835,6848,1,8736,59,1,10660,101,59,1,8736,115,100,4,2,59,97,6770,6772,1,8737,4,8,97,98,99,100,101,102,103,104,6790,6793,6796,6799,6802,6805,6808,6811,59,1,10664,59,1,10665,59,1,10666,59,1,10667,59,1,10668,59,1,10669,59,1,10670,59,1,10671,116,4,2,59,118,6821,6823,1,8735,98,4,2,59,100,6830,6832,1,8894,59,1,10653,4,2,112,116,6841,6845,104,59,1,8738,59,1,197,97,114,114,59,1,9084,4,2,103,112,6860,6865,111,110,59,1,261,102,59,3,55349,56658,4,7,59,69,97,101,105,111,112,6886,6888,6891,6897,6900,6904,6908,1,8776,59,1,10864,99,105,114,59,1,10863,59,1,8778,100,59,1,8779,115,59,1,39,114,111,120,4,2,59,101,6917,6919,1,8776,113,59,1,8778,105,110,103,5,229,1,59,6931,1,229,4,3,99,116,121,6941,6946,6949,114,59,3,55349,56502,59,1,42,109,112,4,2,59,101,6957,6959,1,8776,113,59,1,8781,105,108,100,101,5,227,1,59,6972,1,227,109,108,5,228,1,59,6981,1,228,4,2,99,105,6989,6997,111,110,105,110,116,59,1,8755,110,116,59,1,10769,4,16,78,97,98,99,100,101,102,105,107,108,110,111,112,114,115,117,7036,7041,7119,7135,7149,7155,7219,7224,7347,7354,7463,7489,7786,7793,7814,7866,111,116,59,1,10989,4,2,99,114,7047,7094,107,4,4,99,101,112,115,7058,7064,7073,7080,111,110,103,59,1,8780,112,115,105,108,111,110,59,1,1014,114,105,109,101,59,1,8245,105,109,4,2,59,101,7088,7090,1,8765,113,59,1,8909,4,2,118,119,7100,7105,101,101,59,1,8893,101,100,4,2,59,103,7113,7115,1,8965,101,59,1,8965,114,107,4,2,59,116,7127,7129,1,9141,98,114,107,59,1,9142,4,2,111,121,7141,7146,110,103,59,1,8780,59,1,1073,113,117,111,59,1,8222,4,5,99,109,112,114,116,7167,7181,7188,7193,7199,97,117,115,4,2,59,101,7176,7178,1,8757,59,1,8757,112,116,121,118,59,1,10672,115,105,59,1,1014,110,111,117,59,1,8492,4,3,97,104,119,7207,7210,7213,59,1,946,59,1,8502,101,101,110,59,1,8812,114,59,3,55349,56607,103,4,7,99,111,115,116,117,118,119,7241,7262,7288,7305,7328,7335,7340,4,3,97,105,117,7249,7253,7258,112,59,1,8898,114,99,59,1,9711,112,59,1,8899,4,3,100,112,116,7270,7275,7281,111,116,59,1,10752,108,117,115,59,1,10753,105,109,101,115,59,1,10754,4,2,113,116,7294,7300,99,117,112,59,1,10758,97,114,59,1,9733,114,105,97,110,103,108,101,4,2,100,117,7318,7324,111,119,110,59,1,9661,112,59,1,9651,112,108,117,115,59,1,10756,101,101,59,1,8897,101,100,103,101,59,1,8896,97,114,111,119,59,1,10509,4,3,97,107,111,7362,7436,7458,4,2,99,110,7368,7432,107,4,3,108,115,116,7377,7386,7394,111,122,101,110,103,101,59,1,10731,113,117,97,114,101,59,1,9642,114,105,97,110,103,108,101,4,4,59,100,108,114,7411,7413,7419,7425,1,9652,111,119,110,59,1,9662,101,102,116,59,1,9666,105,103,104,116,59,1,9656,107,59,1,9251,4,2,49,51,7442,7454,4,2,50,52,7448,7451,59,1,9618,59,1,9617,52,59,1,9619,99,107,59,1,9608,4,2,101,111,7469,7485,4,2,59,113,7475,7478,3,61,8421,117,105,118,59,3,8801,8421,116,59,1,8976,4,4,112,116,119,120,7499,7504,7517,7523,102,59,3,55349,56659,4,2,59,116,7510,7512,1,8869,111,109,59,1,8869,116,105,101,59,1,8904,4,12,68,72,85,86,98,100,104,109,112,116,117,118,7549,7571,7597,7619,7655,7660,7682,7708,7715,7721,7728,7750,4,4,76,82,108,114,7559,7562,7565,7568,59,1,9559,59,1,9556,59,1,9558,59,1,9555,4,5,59,68,85,100,117,7583,7585,7588,7591,7594,1,9552,59,1,9574,59,1,9577,59,1,9572,59,1,9575,4,4,76,82,108,114,7607,7610,7613,7616,59,1,9565,59,1,9562,59,1,9564,59,1,9561,4,7,59,72,76,82,104,108,114,7635,7637,7640,7643,7646,7649,7652,1,9553,59,1,9580,59,1,9571,59,1,9568,59,1,9579,59,1,9570,59,1,9567,111,120,59,1,10697,4,4,76,82,108,114,7670,7673,7676,7679,59,1,9557,59,1,9554,59,1,9488,59,1,9484,4,5,59,68,85,100,117,7694,7696,7699,7702,7705,1,9472,59,1,9573,59,1,9576,59,1,9516,59,1,9524,105,110,117,115,59,1,8863,108,117,115,59,1,8862,105,109,101,115,59,1,8864,4,4,76,82,108,114,7738,7741,7744,7747,59,1,9563,59,1,9560,59,1,9496,59,1,9492,4,7,59,72,76,82,104,108,114,7766,7768,7771,7774,7777,7780,7783,1,9474,59,1,9578,59,1,9569,59,1,9566,59,1,9532,59,1,9508,59,1,9500,114,105,109,101,59,1,8245,4,2,101,118,7799,7804,118,101,59,1,728,98,97,114,5,166,1,59,7812,1,166,4,4,99,101,105,111,7824,7829,7834,7846,114,59,3,55349,56503,109,105,59,1,8271,109,4,2,59,101,7841,7843,1,8765,59,1,8909,108,4,3,59,98,104,7855,7857,7860,1,92,59,1,10693,115,117,98,59,1,10184,4,2,108,109,7872,7885,108,4,2,59,101,7879,7881,1,8226,116,59,1,8226,112,4,3,59,69,101,7894,7896,7899,1,8782,59,1,10926,4,2,59,113,7905,7907,1,8783,59,1,8783,4,15,97,99,100,101,102,104,105,108,111,114,115,116,117,119,121,7942,8021,8075,8080,8121,8126,8157,8279,8295,8430,8446,8485,8491,8707,8726,4,3,99,112,114,7950,7956,8007,117,116,101,59,1,263,4,6,59,97,98,99,100,115,7970,7972,7977,7984,7998,8003,1,8745,110,100,59,1,10820,114,99,117,112,59,1,10825,4,2,97,117,7990,7994,112,59,1,10827,112,59,1,10823,111,116,59,1,10816,59,3,8745,65024,4,2,101,111,8013,8017,116,59,1,8257,110,59,1,711,4,4,97,101,105,117,8031,8046,8056,8061,4,2,112,114,8037,8041,115,59,1,10829,111,110,59,1,269,100,105,108,5,231,1,59,8054,1,231,114,99,59,1,265,112,115,4,2,59,115,8069,8071,1,10828,109,59,1,10832,111,116,59,1,267,4,3,100,109,110,8088,8097,8104,105,108,5,184,1,59,8095,1,184,112,116,121,118,59,1,10674,116,5,162,2,59,101,8112,8114,1,162,114,100,111,116,59,1,183,114,59,3,55349,56608,4,3,99,101,105,8134,8138,8154,121,59,1,1095,99,107,4,2,59,109,8146,8148,1,10003,97,114,107,59,1,10003,59,1,967,114,4,7,59,69,99,101,102,109,115,8174,8176,8179,8258,8261,8268,8273,1,9675,59,1,10691,4,3,59,101,108,8187,8189,8193,1,710,113,59,1,8791,101,4,2,97,100,8200,8223,114,114,111,119,4,2,108,114,8210,8216,101,102,116,59,1,8634,105,103,104,116,59,1,8635,4,5,82,83,97,99,100,8235,8238,8241,8246,8252,59,1,174,59,1,9416,115,116,59,1,8859,105,114,99,59,1,8858,97,115,104,59,1,8861,59,1,8791,110,105,110,116,59,1,10768,105,100,59,1,10991,99,105,114,59,1,10690,117,98,115,4,2,59,117,8288,8290,1,9827,105,116,59,1,9827,4,4,108,109,110,112,8305,8326,8376,8400,111,110,4,2,59,101,8313,8315,1,58,4,2,59,113,8321,8323,1,8788,59,1,8788,4,2,109,112,8332,8344,97,4,2,59,116,8339,8341,1,44,59,1,64,4,3,59,102,108,8352,8354,8358,1,8705,110,59,1,8728,101,4,2,109,120,8365,8371,101,110,116,59,1,8705,101,115,59,1,8450,4,2,103,105,8382,8395,4,2,59,100,8388,8390,1,8773,111,116,59,1,10861,110,116,59,1,8750,4,3,102,114,121,8408,8412,8417,59,3,55349,56660,111,100,59,1,8720,5,169,2,59,115,8424,8426,1,169,114,59,1,8471,4,2,97,111,8436,8441,114,114,59,1,8629,115,115,59,1,10007,4,2,99,117,8452,8457,114,59,3,55349,56504,4,2,98,112,8463,8474,4,2,59,101,8469,8471,1,10959,59,1,10961,4,2,59,101,8480,8482,1,10960,59,1,10962,100,111,116,59,1,8943,4,7,100,101,108,112,114,118,119,8507,8522,8536,8550,8600,8697,8702,97,114,114,4,2,108,114,8516,8519,59,1,10552,59,1,10549,4,2,112,115,8528,8532,114,59,1,8926,99,59,1,8927,97,114,114,4,2,59,112,8545,8547,1,8630,59,1,10557,4,6,59,98,99,100,111,115,8564,8566,8573,8587,8592,8596,1,8746,114,99,97,112,59,1,10824,4,2,97,117,8579,8583,112,59,1,10822,112,59,1,10826,111,116,59,1,8845,114,59,1,10821,59,3,8746,65024,4,4,97,108,114,118,8610,8623,8663,8672,114,114,4,2,59,109,8618,8620,1,8631,59,1,10556,121,4,3,101,118,119,8632,8651,8656,113,4,2,112,115,8639,8645,114,101,99,59,1,8926,117,99,99,59,1,8927,101,101,59,1,8910,101,100,103,101,59,1,8911,101,110,5,164,1,59,8670,1,164,101,97,114,114,111,119,4,2,108,114,8684,8690,101,102,116,59,1,8630,105,103,104,116,59,1,8631,101,101,59,1,8910,101,100,59,1,8911,4,2,99,105,8713,8721,111,110,105,110,116,59,1,8754,110,116,59,1,8753,108,99,116,121,59,1,9005,4,19,65,72,97,98,99,100,101,102,104,105,106,108,111,114,115,116,117,119,122,8773,8778,8783,8821,8839,8854,8887,8914,8930,8944,9036,9041,9058,9197,9227,9258,9281,9297,9305,114,114,59,1,8659,97,114,59,1,10597,4,4,103,108,114,115,8793,8799,8805,8809,103,101,114,59,1,8224,101,116,104,59,1,8504,114,59,1,8595,104,4,2,59,118,8816,8818,1,8208,59,1,8867,4,2,107,108,8827,8834,97,114,111,119,59,1,10511,97,99,59,1,733,4,2,97,121,8845,8851,114,111,110,59,1,271,59,1,1076,4,3,59,97,111,8862,8864,8880,1,8518,4,2,103,114,8870,8876,103,101,114,59,1,8225,114,59,1,8650,116,115,101,113,59,1,10871,4,3,103,108,109,8895,8902,8907,5,176,1,59,8900,1,176,116,97,59,1,948,112,116,121,118,59,1,10673,4,2,105,114,8920,8926,115,104,116,59,1,10623,59,3,55349,56609,97,114,4,2,108,114,8938,8941,59,1,8643,59,1,8642,4,5,97,101,103,115,118,8956,8986,8989,8996,9001,109,4,3,59,111,115,8965,8967,8983,1,8900,110,100,4,2,59,115,8975,8977,1,8900,117,105,116,59,1,9830,59,1,9830,59,1,168,97,109,109,97,59,1,989,105,110,59,1,8946,4,3,59,105,111,9009,9011,9031,1,247,100,101,5,247,2,59,111,9020,9022,1,247,110,116,105,109,101,115,59,1,8903,110,120,59,1,8903,99,121,59,1,1106,99,4,2,111,114,9048,9053,114,110,59,1,8990,111,112,59,1,8973,4,5,108,112,116,117,119,9070,9076,9081,9130,9144,108,97,114,59,1,36,102,59,3,55349,56661,4,5,59,101,109,112,115,9093,9095,9109,9116,9122,1,729,113,4,2,59,100,9102,9104,1,8784,111,116,59,1,8785,105,110,117,115,59,1,8760,108,117,115,59,1,8724,113,117,97,114,101,59,1,8865,98,108,101,98,97,114,119,101,100,103,101,59,1,8966,110,4,3,97,100,104,9153,9160,9172,114,114,111,119,59,1,8595,111,119,110,97,114,114,111,119,115,59,1,8650,97,114,112,111,111,110,4,2,108,114,9184,9190,101,102,116,59,1,8643,105,103,104,116,59,1,8642,4,2,98,99,9203,9211,107,97,114,111,119,59,1,10512,4,2,111,114,9217,9222,114,110,59,1,8991,111,112,59,1,8972,4,3,99,111,116,9235,9248,9252,4,2,114,121,9241,9245,59,3,55349,56505,59,1,1109,108,59,1,10742,114,111,107,59,1,273,4,2,100,114,9264,9269,111,116,59,1,8945,105,4,2,59,102,9276,9278,1,9663,59,1,9662,4,2,97,104,9287,9292,114,114,59,1,8693,97,114,59,1,10607,97,110,103,108,101,59,1,10662,4,2,99,105,9311,9315,121,59,1,1119,103,114,97,114,114,59,1,10239,4,18,68,97,99,100,101,102,103,108,109,110,111,112,113,114,115,116,117,120,9361,9376,9398,9439,9444,9447,9462,9495,9531,9585,9598,9614,9659,9755,9771,9792,9808,9826,4,2,68,111,9367,9372,111,116,59,1,10871,116,59,1,8785,4,2,99,115,9382,9392,117,116,101,5,233,1,59,9390,1,233,116,101,114,59,1,10862,4,4,97,105,111,121,9408,9414,9430,9436,114,111,110,59,1,283,114,4,2,59,99,9421,9423,1,8790,5,234,1,59,9428,1,234,108,111,110,59,1,8789,59,1,1101,111,116,59,1,279,59,1,8519,4,2,68,114,9453,9458,111,116,59,1,8786,59,3,55349,56610,4,3,59,114,115,9470,9472,9482,1,10906,97,118,101,5,232,1,59,9480,1,232,4,2,59,100,9488,9490,1,10902,111,116,59,1,10904,4,4,59,105,108,115,9505,9507,9515,9518,1,10905,110,116,101,114,115,59,1,9191,59,1,8467,4,2,59,100,9524,9526,1,10901,111,116,59,1,10903,4,3,97,112,115,9539,9544,9564,99,114,59,1,275,116,121,4,3,59,115,118,9554,9556,9561,1,8709,101,116,59,1,8709,59,1,8709,112,4,2,49,59,9571,9583,4,2,51,52,9577,9580,59,1,8196,59,1,8197,1,8195,4,2,103,115,9591,9594,59,1,331,112,59,1,8194,4,2,103,112,9604,9609,111,110,59,1,281,102,59,3,55349,56662,4,3,97,108,115,9622,9635,9640,114,4,2,59,115,9629,9631,1,8917,108,59,1,10723,117,115,59,1,10865,105,4,3,59,108,118,9649,9651,9656,1,949,111,110,59,1,949,59,1,1013,4,4,99,115,117,118,9669,9686,9716,9747,4,2,105,111,9675,9680,114,99,59,1,8790,108,111,110,59,1,8789,4,2,105,108,9692,9696,109,59,1,8770,97,110,116,4,2,103,108,9705,9710,116,114,59,1,10902,101,115,115,59,1,10901,4,3,97,101,105,9724,9729,9734,108,115,59,1,61,115,116,59,1,8799,118,4,2,59,68,9741,9743,1,8801,68,59,1,10872,112,97,114,115,108,59,1,10725,4,2,68,97,9761,9766,111,116,59,1,8787,114,114,59,1,10609,4,3,99,100,105,9779,9783,9788,114,59,1,8495,111,116,59,1,8784,109,59,1,8770,4,2,97,104,9798,9801,59,1,951,5,240,1,59,9806,1,240,4,2,109,114,9814,9822,108,5,235,1,59,9820,1,235,111,59,1,8364,4,3,99,105,112,9834,9838,9843,108,59,1,33,115,116,59,1,8707,4,2,101,111,9849,9859,99,116,97,116,105,111,110,59,1,8496,110,101,110,116,105,97,108,101,59,1,8519,4,12,97,99,101,102,105,106,108,110,111,112,114,115,9896,9910,9914,9921,9954,9960,9967,9989,9994,10027,10036,10164,108,108,105,110,103,100,111,116,115,101,113,59,1,8786,121,59,1,1092,109,97,108,101,59,1,9792,4,3,105,108,114,9929,9935,9950,108,105,103,59,1,64259,4,2,105,108,9941,9945,103,59,1,64256,105,103,59,1,64260,59,3,55349,56611,108,105,103,59,1,64257,108,105,103,59,3,102,106,4,3,97,108,116,9975,9979,9984,116,59,1,9837,105,103,59,1,64258,110,115,59,1,9649,111,102,59,1,402,4,2,112,114,1e4,10005,102,59,3,55349,56663,4,2,97,107,10011,10016,108,108,59,1,8704,4,2,59,118,10022,10024,1,8916,59,1,10969,97,114,116,105,110,116,59,1,10765,4,2,97,111,10042,10159,4,2,99,115,10048,10155,4,6,49,50,51,52,53,55,10062,10102,10114,10135,10139,10151,4,6,50,51,52,53,54,56,10076,10083,10086,10093,10096,10099,5,189,1,59,10081,1,189,59,1,8531,5,188,1,59,10091,1,188,59,1,8533,59,1,8537,59,1,8539,4,2,51,53,10108,10111,59,1,8532,59,1,8534,4,3,52,53,56,10122,10129,10132,5,190,1,59,10127,1,190,59,1,8535,59,1,8540,53,59,1,8536,4,2,54,56,10145,10148,59,1,8538,59,1,8541,56,59,1,8542,108,59,1,8260,119,110,59,1,8994,99,114,59,3,55349,56507,4,17,69,97,98,99,100,101,102,103,105,106,108,110,111,114,115,116,118,10206,10217,10247,10254,10268,10273,10358,10363,10374,10380,10385,10406,10458,10464,10470,10497,10610,4,2,59,108,10212,10214,1,8807,59,1,10892,4,3,99,109,112,10225,10231,10244,117,116,101,59,1,501,109,97,4,2,59,100,10239,10241,1,947,59,1,989,59,1,10886,114,101,118,101,59,1,287,4,2,105,121,10260,10265,114,99,59,1,285,59,1,1075,111,116,59,1,289,4,4,59,108,113,115,10283,10285,10288,10308,1,8805,59,1,8923,4,3,59,113,115,10296,10298,10301,1,8805,59,1,8807,108,97,110,116,59,1,10878,4,4,59,99,100,108,10318,10320,10324,10345,1,10878,99,59,1,10921,111,116,4,2,59,111,10332,10334,1,10880,4,2,59,108,10340,10342,1,10882,59,1,10884,4,2,59,101,10351,10354,3,8923,65024,115,59,1,10900,114,59,3,55349,56612,4,2,59,103,10369,10371,1,8811,59,1,8921,109,101,108,59,1,8503,99,121,59,1,1107,4,4,59,69,97,106,10395,10397,10400,10403,1,8823,59,1,10898,59,1,10917,59,1,10916,4,4,69,97,101,115,10416,10419,10434,10453,59,1,8809,112,4,2,59,112,10426,10428,1,10890,114,111,120,59,1,10890,4,2,59,113,10440,10442,1,10888,4,2,59,113,10448,10450,1,10888,59,1,8809,105,109,59,1,8935,112,102,59,3,55349,56664,97,118,101,59,1,96,4,2,99,105,10476,10480,114,59,1,8458,109,4,3,59,101,108,10489,10491,10494,1,8819,59,1,10894,59,1,10896,5,62,6,59,99,100,108,113,114,10512,10514,10527,10532,10538,10545,1,62,4,2,99,105,10520,10523,59,1,10919,114,59,1,10874,111,116,59,1,8919,80,97,114,59,1,10645,117,101,115,116,59,1,10876,4,5,97,100,101,108,115,10557,10574,10579,10599,10605,4,2,112,114,10563,10570,112,114,111,120,59,1,10886,114,59,1,10616,111,116,59,1,8919,113,4,2,108,113,10586,10592,101,115,115,59,1,8923,108,101,115,115,59,1,10892,101,115,115,59,1,8823,105,109,59,1,8819,4,2,101,110,10616,10626,114,116,110,101,113,113,59,3,8809,65024,69,59,3,8809,65024,4,10,65,97,98,99,101,102,107,111,115,121,10653,10658,10713,10718,10724,10760,10765,10786,10850,10875,114,114,59,1,8660,4,4,105,108,109,114,10668,10674,10678,10684,114,115,112,59,1,8202,102,59,1,189,105,108,116,59,1,8459,4,2,100,114,10690,10695,99,121,59,1,1098,4,3,59,99,119,10703,10705,10710,1,8596,105,114,59,1,10568,59,1,8621,97,114,59,1,8463,105,114,99,59,1,293,4,3,97,108,114,10732,10748,10754,114,116,115,4,2,59,117,10741,10743,1,9829,105,116,59,1,9829,108,105,112,59,1,8230,99,111,110,59,1,8889,114,59,3,55349,56613,115,4,2,101,119,10772,10779,97,114,111,119,59,1,10533,97,114,111,119,59,1,10534,4,5,97,109,111,112,114,10798,10803,10809,10839,10844,114,114,59,1,8703,116,104,116,59,1,8763,107,4,2,108,114,10816,10827,101,102,116,97,114,114,111,119,59,1,8617,105,103,104,116,97,114,114,111,119,59,1,8618,102,59,3,55349,56665,98,97,114,59,1,8213,4,3,99,108,116,10858,10863,10869,114,59,3,55349,56509,97,115,104,59,1,8463,114,111,107,59,1,295,4,2,98,112,10881,10887,117,108,108,59,1,8259,104,101,110,59,1,8208,4,15,97,99,101,102,103,105,106,109,110,111,112,113,115,116,117,10925,10936,10958,10977,10990,11001,11039,11045,11101,11192,11220,11226,11237,11285,11299,99,117,116,101,5,237,1,59,10934,1,237,4,3,59,105,121,10944,10946,10955,1,8291,114,99,5,238,1,59,10953,1,238,59,1,1080,4,2,99,120,10964,10968,121,59,1,1077,99,108,5,161,1,59,10975,1,161,4,2,102,114,10983,10986,59,1,8660,59,3,55349,56614,114,97,118,101,5,236,1,59,10999,1,236,4,4,59,105,110,111,11011,11013,11028,11034,1,8520,4,2,105,110,11019,11024,110,116,59,1,10764,116,59,1,8749,102,105,110,59,1,10716,116,97,59,1,8489,108,105,103,59,1,307,4,3,97,111,112,11053,11092,11096,4,3,99,103,116,11061,11065,11088,114,59,1,299,4,3,101,108,112,11073,11076,11082,59,1,8465,105,110,101,59,1,8464,97,114,116,59,1,8465,104,59,1,305,102,59,1,8887,101,100,59,1,437,4,5,59,99,102,111,116,11113,11115,11121,11136,11142,1,8712,97,114,101,59,1,8453,105,110,4,2,59,116,11129,11131,1,8734,105,101,59,1,10717,100,111,116,59,1,305,4,5,59,99,101,108,112,11154,11156,11161,11179,11186,1,8747,97,108,59,1,8890,4,2,103,114,11167,11173,101,114,115,59,1,8484,99,97,108,59,1,8890,97,114,104,107,59,1,10775,114,111,100,59,1,10812,4,4,99,103,112,116,11202,11206,11211,11216,121,59,1,1105,111,110,59,1,303,102,59,3,55349,56666,97,59,1,953,114,111,100,59,1,10812,117,101,115,116,5,191,1,59,11235,1,191,4,2,99,105,11243,11248,114,59,3,55349,56510,110,4,5,59,69,100,115,118,11261,11263,11266,11271,11282,1,8712,59,1,8953,111,116,59,1,8949,4,2,59,118,11277,11279,1,8948,59,1,8947,59,1,8712,4,2,59,105,11291,11293,1,8290,108,100,101,59,1,297,4,2,107,109,11305,11310,99,121,59,1,1110,108,5,239,1,59,11316,1,239,4,6,99,102,109,111,115,117,11332,11346,11351,11357,11363,11380,4,2,105,121,11338,11343,114,99,59,1,309,59,1,1081,114,59,3,55349,56615,97,116,104,59,1,567,112,102,59,3,55349,56667,4,2,99,101,11369,11374,114,59,3,55349,56511,114,99,121,59,1,1112,107,99,121,59,1,1108,4,8,97,99,102,103,104,106,111,115,11404,11418,11433,11438,11445,11450,11455,11461,112,112,97,4,2,59,118,11413,11415,1,954,59,1,1008,4,2,101,121,11424,11430,100,105,108,59,1,311,59,1,1082,114,59,3,55349,56616,114,101,101,110,59,1,312,99,121,59,1,1093,99,121,59,1,1116,112,102,59,3,55349,56668,99,114,59,3,55349,56512,4,23,65,66,69,72,97,98,99,100,101,102,103,104,106,108,109,110,111,112,114,115,116,117,118,11515,11538,11544,11555,11560,11721,11780,11818,11868,12136,12160,12171,12203,12208,12246,12275,12327,12509,12523,12569,12641,12732,12752,4,3,97,114,116,11523,11528,11532,114,114,59,1,8666,114,59,1,8656,97,105,108,59,1,10523,97,114,114,59,1,10510,4,2,59,103,11550,11552,1,8806,59,1,10891,97,114,59,1,10594,4,9,99,101,103,109,110,112,113,114,116,11580,11586,11594,11600,11606,11624,11627,11636,11694,117,116,101,59,1,314,109,112,116,121,118,59,1,10676,114,97,110,59,1,8466,98,100,97,59,1,955,103,4,3,59,100,108,11615,11617,11620,1,10216,59,1,10641,101,59,1,10216,59,1,10885,117,111,5,171,1,59,11634,1,171,114,4,8,59,98,102,104,108,112,115,116,11655,11657,11669,11673,11677,11681,11685,11690,1,8592,4,2,59,102,11663,11665,1,8676,115,59,1,10527,115,59,1,10525,107,59,1,8617,112,59,1,8619,108,59,1,10553,105,109,59,1,10611,108,59,1,8610,4,3,59,97,101,11702,11704,11709,1,10923,105,108,59,1,10521,4,2,59,115,11715,11717,1,10925,59,3,10925,65024,4,3,97,98,114,11729,11734,11739,114,114,59,1,10508,114,107,59,1,10098,4,2,97,107,11745,11758,99,4,2,101,107,11752,11755,59,1,123,59,1,91,4,2,101,115,11764,11767,59,1,10635,108,4,2,100,117,11774,11777,59,1,10639,59,1,10637,4,4,97,101,117,121,11790,11796,11811,11815,114,111,110,59,1,318,4,2,100,105,11802,11807,105,108,59,1,316,108,59,1,8968,98,59,1,123,59,1,1083,4,4,99,113,114,115,11828,11832,11845,11864,97,59,1,10550,117,111,4,2,59,114,11840,11842,1,8220,59,1,8222,4,2,100,117,11851,11857,104,97,114,59,1,10599,115,104,97,114,59,1,10571,104,59,1,8626,4,5,59,102,103,113,115,11880,11882,12008,12011,12031,1,8804,116,4,5,97,104,108,114,116,11895,11913,11935,11947,11996,114,114,111,119,4,2,59,116,11905,11907,1,8592,97,105,108,59,1,8610,97,114,112,111,111,110,4,2,100,117,11925,11931,111,119,110,59,1,8637,112,59,1,8636,101,102,116,97,114,114,111,119,115,59,1,8647,105,103,104,116,4,3,97,104,115,11959,11974,11984,114,114,111,119,4,2,59,115,11969,11971,1,8596,59,1,8646,97,114,112,111,111,110,115,59,1,8651,113,117,105,103,97,114,114,111,119,59,1,8621,104,114,101,101,116,105,109,101,115,59,1,8907,59,1,8922,4,3,59,113,115,12019,12021,12024,1,8804,59,1,8806,108,97,110,116,59,1,10877,4,5,59,99,100,103,115,12043,12045,12049,12070,12083,1,10877,99,59,1,10920,111,116,4,2,59,111,12057,12059,1,10879,4,2,59,114,12065,12067,1,10881,59,1,10883,4,2,59,101,12076,12079,3,8922,65024,115,59,1,10899,4,5,97,100,101,103,115,12095,12103,12108,12126,12131,112,112,114,111,120,59,1,10885,111,116,59,1,8918,113,4,2,103,113,12115,12120,116,114,59,1,8922,103,116,114,59,1,10891,116,114,59,1,8822,105,109,59,1,8818,4,3,105,108,114,12144,12150,12156,115,104,116,59,1,10620,111,111,114,59,1,8970,59,3,55349,56617,4,2,59,69,12166,12168,1,8822,59,1,10897,4,2,97,98,12177,12198,114,4,2,100,117,12184,12187,59,1,8637,4,2,59,108,12193,12195,1,8636,59,1,10602,108,107,59,1,9604,99,121,59,1,1113,4,5,59,97,99,104,116,12220,12222,12227,12235,12241,1,8810,114,114,59,1,8647,111,114,110,101,114,59,1,8990,97,114,100,59,1,10603,114,105,59,1,9722,4,2,105,111,12252,12258,100,111,116,59,1,320,117,115,116,4,2,59,97,12267,12269,1,9136,99,104,101,59,1,9136,4,4,69,97,101,115,12285,12288,12303,12322,59,1,8808,112,4,2,59,112,12295,12297,1,10889,114,111,120,59,1,10889,4,2,59,113,12309,12311,1,10887,4,2,59,113,12317,12319,1,10887,59,1,8808,105,109,59,1,8934,4,8,97,98,110,111,112,116,119,122,12345,12359,12364,12421,12446,12467,12474,12490,4,2,110,114,12351,12355,103,59,1,10220,114,59,1,8701,114,107,59,1,10214,103,4,3,108,109,114,12373,12401,12409,101,102,116,4,2,97,114,12382,12389,114,114,111,119,59,1,10229,105,103,104,116,97,114,114,111,119,59,1,10231,97,112,115,116,111,59,1,10236,105,103,104,116,97,114,114,111,119,59,1,10230,112,97,114,114,111,119,4,2,108,114,12433,12439,101,102,116,59,1,8619,105,103,104,116,59,1,8620,4,3,97,102,108,12454,12458,12462,114,59,1,10629,59,3,55349,56669,117,115,59,1,10797,105,109,101,115,59,1,10804,4,2,97,98,12480,12485,115,116,59,1,8727,97,114,59,1,95,4,3,59,101,102,12498,12500,12506,1,9674,110,103,101,59,1,9674,59,1,10731,97,114,4,2,59,108,12517,12519,1,40,116,59,1,10643,4,5,97,99,104,109,116,12535,12540,12548,12561,12564,114,114,59,1,8646,111,114,110,101,114,59,1,8991,97,114,4,2,59,100,12556,12558,1,8651,59,1,10605,59,1,8206,114,105,59,1,8895,4,6,97,99,104,105,113,116,12583,12589,12594,12597,12614,12635,113,117,111,59,1,8249,114,59,3,55349,56513,59,1,8624,109,4,3,59,101,103,12606,12608,12611,1,8818,59,1,10893,59,1,10895,4,2,98,117,12620,12623,59,1,91,111,4,2,59,114,12630,12632,1,8216,59,1,8218,114,111,107,59,1,322,5,60,8,59,99,100,104,105,108,113,114,12660,12662,12675,12680,12686,12692,12698,12705,1,60,4,2,99,105,12668,12671,59,1,10918,114,59,1,10873,111,116,59,1,8918,114,101,101,59,1,8907,109,101,115,59,1,8905,97,114,114,59,1,10614,117,101,115,116,59,1,10875,4,2,80,105,12711,12716,97,114,59,1,10646,4,3,59,101,102,12724,12726,12729,1,9667,59,1,8884,59,1,9666,114,4,2,100,117,12739,12746,115,104,97,114,59,1,10570,104,97,114,59,1,10598,4,2,101,110,12758,12768,114,116,110,101,113,113,59,3,8808,65024,69,59,3,8808,65024,4,14,68,97,99,100,101,102,104,105,108,110,111,112,115,117,12803,12809,12893,12908,12914,12928,12933,12937,13011,13025,13032,13049,13052,13069,68,111,116,59,1,8762,4,4,99,108,112,114,12819,12827,12849,12887,114,5,175,1,59,12825,1,175,4,2,101,116,12833,12836,59,1,9794,4,2,59,101,12842,12844,1,10016,115,101,59,1,10016,4,2,59,115,12855,12857,1,8614,116,111,4,4,59,100,108,117,12869,12871,12877,12883,1,8614,111,119,110,59,1,8615,101,102,116,59,1,8612,112,59,1,8613,107,101,114,59,1,9646,4,2,111,121,12899,12905,109,109,97,59,1,10793,59,1,1084,97,115,104,59,1,8212,97,115,117,114,101,100,97,110,103,108,101,59,1,8737,114,59,3,55349,56618,111,59,1,8487,4,3,99,100,110,12945,12954,12985,114,111,5,181,1,59,12952,1,181,4,4,59,97,99,100,12964,12966,12971,12976,1,8739,115,116,59,1,42,105,114,59,1,10992,111,116,5,183,1,59,12983,1,183,117,115,4,3,59,98,100,12995,12997,13e3,1,8722,59,1,8863,4,2,59,117,13006,13008,1,8760,59,1,10794,4,2,99,100,13017,13021,112,59,1,10971,114,59,1,8230,112,108,117,115,59,1,8723,4,2,100,112,13038,13044,101,108,115,59,1,8871,102,59,3,55349,56670,59,1,8723,4,2,99,116,13058,13063,114,59,3,55349,56514,112,111,115,59,1,8766,4,3,59,108,109,13077,13079,13087,1,956,116,105,109,97,112,59,1,8888,97,112,59,1,8888,4,24,71,76,82,86,97,98,99,100,101,102,103,104,105,106,108,109,111,112,114,115,116,117,118,119,13142,13165,13217,13229,13247,13330,13359,13414,13420,13508,13513,13579,13602,13626,13631,13762,13767,13855,13936,13995,14214,14285,14312,14432,4,2,103,116,13148,13152,59,3,8921,824,4,2,59,118,13158,13161,3,8811,8402,59,3,8811,824,4,3,101,108,116,13173,13200,13204,102,116,4,2,97,114,13181,13188,114,114,111,119,59,1,8653,105,103,104,116,97,114,114,111,119,59,1,8654,59,3,8920,824,4,2,59,118,13210,13213,3,8810,8402,59,3,8810,824,105,103,104,116,97,114,114,111,119,59,1,8655,4,2,68,100,13235,13241,97,115,104,59,1,8879,97,115,104,59,1,8878,4,5,98,99,110,112,116,13259,13264,13270,13275,13308,108,97,59,1,8711,117,116,101,59,1,324,103,59,3,8736,8402,4,5,59,69,105,111,112,13287,13289,13293,13298,13302,1,8777,59,3,10864,824,100,59,3,8779,824,115,59,1,329,114,111,120,59,1,8777,117,114,4,2,59,97,13316,13318,1,9838,108,4,2,59,115,13325,13327,1,9838,59,1,8469,4,2,115,117,13336,13344,112,5,160,1,59,13342,1,160,109,112,4,2,59,101,13352,13355,3,8782,824,59,3,8783,824,4,5,97,101,111,117,121,13371,13385,13391,13407,13411,4,2,112,114,13377,13380,59,1,10819,111,110,59,1,328,100,105,108,59,1,326,110,103,4,2,59,100,13399,13401,1,8775,111,116,59,3,10861,824,112,59,1,10818,59,1,1085,97,115,104,59,1,8211,4,7,59,65,97,100,113,115,120,13436,13438,13443,13466,13472,13478,13494,1,8800,114,114,59,1,8663,114,4,2,104,114,13450,13454,107,59,1,10532,4,2,59,111,13460,13462,1,8599,119,59,1,8599,111,116,59,3,8784,824,117,105,118,59,1,8802,4,2,101,105,13484,13489,97,114,59,1,10536,109,59,3,8770,824,105,115,116,4,2,59,115,13503,13505,1,8708,59,1,8708,114,59,3,55349,56619,4,4,69,101,115,116,13523,13527,13563,13568,59,3,8807,824,4,3,59,113,115,13535,13537,13559,1,8817,4,3,59,113,115,13545,13547,13551,1,8817,59,3,8807,824,108,97,110,116,59,3,10878,824,59,3,10878,824,105,109,59,1,8821,4,2,59,114,13574,13576,1,8815,59,1,8815,4,3,65,97,112,13587,13592,13597,114,114,59,1,8654,114,114,59,1,8622,97,114,59,1,10994,4,3,59,115,118,13610,13612,13623,1,8715,4,2,59,100,13618,13620,1,8956,59,1,8954,59,1,8715,99,121,59,1,1114,4,7,65,69,97,100,101,115,116,13647,13652,13656,13661,13665,13737,13742,114,114,59,1,8653,59,3,8806,824,114,114,59,1,8602,114,59,1,8229,4,4,59,102,113,115,13675,13677,13703,13725,1,8816,116,4,2,97,114,13684,13691,114,114,111,119,59,1,8602,105,103,104,116,97,114,114,111,119,59,1,8622,4,3,59,113,115,13711,13713,13717,1,8816,59,3,8806,824,108,97,110,116,59,3,10877,824,4,2,59,115,13731,13734,3,10877,824,59,1,8814,105,109,59,1,8820,4,2,59,114,13748,13750,1,8814,105,4,2,59,101,13757,13759,1,8938,59,1,8940,105,100,59,1,8740,4,2,112,116,13773,13778,102,59,3,55349,56671,5,172,3,59,105,110,13787,13789,13829,1,172,110,4,4,59,69,100,118,13800,13802,13806,13812,1,8713,59,3,8953,824,111,116,59,3,8949,824,4,3,97,98,99,13820,13823,13826,59,1,8713,59,1,8951,59,1,8950,105,4,2,59,118,13836,13838,1,8716,4,3,97,98,99,13846,13849,13852,59,1,8716,59,1,8958,59,1,8957,4,3,97,111,114,13863,13892,13899,114,4,4,59,97,115,116,13874,13876,13883,13888,1,8742,108,108,101,108,59,1,8742,108,59,3,11005,8421,59,3,8706,824,108,105,110,116,59,1,10772,4,3,59,99,101,13907,13909,13914,1,8832,117,101,59,1,8928,4,2,59,99,13920,13923,3,10927,824,4,2,59,101,13929,13931,1,8832,113,59,3,10927,824,4,4,65,97,105,116,13946,13951,13971,13982,114,114,59,1,8655,114,114,4,3,59,99,119,13961,13963,13967,1,8603,59,3,10547,824,59,3,8605,824,103,104,116,97,114,114,111,119,59,1,8603,114,105,4,2,59,101,13990,13992,1,8939,59,1,8941,4,7,99,104,105,109,112,113,117,14011,14036,14060,14080,14085,14090,14106,4,4,59,99,101,114,14021,14023,14028,14032,1,8833,117,101,59,1,8929,59,3,10928,824,59,3,55349,56515,111,114,116,4,2,109,112,14045,14050,105,100,59,1,8740,97,114,97,108,108,101,108,59,1,8742,109,4,2,59,101,14067,14069,1,8769,4,2,59,113,14075,14077,1,8772,59,1,8772,105,100,59,1,8740,97,114,59,1,8742,115,117,4,2,98,112,14098,14102,101,59,1,8930,101,59,1,8931,4,3,98,99,112,14114,14157,14171,4,4,59,69,101,115,14124,14126,14130,14133,1,8836,59,3,10949,824,59,1,8840,101,116,4,2,59,101,14141,14144,3,8834,8402,113,4,2,59,113,14151,14153,1,8840,59,3,10949,824,99,4,2,59,101,14164,14166,1,8833,113,59,3,10928,824,4,4,59,69,101,115,14181,14183,14187,14190,1,8837,59,3,10950,824,59,1,8841,101,116,4,2,59,101,14198,14201,3,8835,8402,113,4,2,59,113,14208,14210,1,8841,59,3,10950,824,4,4,103,105,108,114,14224,14228,14238,14242,108,59,1,8825,108,100,101,5,241,1,59,14236,1,241,103,59,1,8824,105,97,110,103,108,101,4,2,108,114,14254,14269,101,102,116,4,2,59,101,14263,14265,1,8938,113,59,1,8940,105,103,104,116,4,2,59,101,14279,14281,1,8939,113,59,1,8941,4,2,59,109,14291,14293,1,957,4,3,59,101,115,14301,14303,14308,1,35,114,111,59,1,8470,112,59,1,8199,4,9,68,72,97,100,103,105,108,114,115,14332,14338,14344,14349,14355,14369,14376,14408,14426,97,115,104,59,1,8877,97,114,114,59,1,10500,112,59,3,8781,8402,97,115,104,59,1,8876,4,2,101,116,14361,14365,59,3,8805,8402,59,3,62,8402,110,102,105,110,59,1,10718,4,3,65,101,116,14384,14389,14393,114,114,59,1,10498,59,3,8804,8402,4,2,59,114,14399,14402,3,60,8402,105,101,59,3,8884,8402,4,2,65,116,14414,14419,114,114,59,1,10499,114,105,101,59,3,8885,8402,105,109,59,3,8764,8402,4,3,65,97,110,14440,14445,14468,114,114,59,1,8662,114,4,2,104,114,14452,14456,107,59,1,10531,4,2,59,111,14462,14464,1,8598,119,59,1,8598,101,97,114,59,1,10535,4,18,83,97,99,100,101,102,103,104,105,108,109,111,112,114,115,116,117,118,14512,14515,14535,14560,14597,14603,14618,14643,14657,14662,14701,14741,14747,14769,14851,14877,14907,14916,59,1,9416,4,2,99,115,14521,14531,117,116,101,5,243,1,59,14529,1,243,116,59,1,8859,4,2,105,121,14541,14557,114,4,2,59,99,14548,14550,1,8858,5,244,1,59,14555,1,244,59,1,1086,4,5,97,98,105,111,115,14572,14577,14583,14587,14591,115,104,59,1,8861,108,97,99,59,1,337,118,59,1,10808,116,59,1,8857,111,108,100,59,1,10684,108,105,103,59,1,339,4,2,99,114,14609,14614,105,114,59,1,10687,59,3,55349,56620,4,3,111,114,116,14626,14630,14640,110,59,1,731,97,118,101,5,242,1,59,14638,1,242,59,1,10689,4,2,98,109,14649,14654,97,114,59,1,10677,59,1,937,110,116,59,1,8750,4,4,97,99,105,116,14672,14677,14693,14698,114,114,59,1,8634,4,2,105,114,14683,14687,114,59,1,10686,111,115,115,59,1,10683,110,101,59,1,8254,59,1,10688,4,3,97,101,105,14709,14714,14719,99,114,59,1,333,103,97,59,1,969,4,3,99,100,110,14727,14733,14736,114,111,110,59,1,959,59,1,10678,117,115,59,1,8854,112,102,59,3,55349,56672,4,3,97,101,108,14755,14759,14764,114,59,1,10679,114,112,59,1,10681,117,115,59,1,8853,4,7,59,97,100,105,111,115,118,14785,14787,14792,14831,14837,14841,14848,1,8744,114,114,59,1,8635,4,4,59,101,102,109,14802,14804,14817,14824,1,10845,114,4,2,59,111,14811,14813,1,8500,102,59,1,8500,5,170,1,59,14822,1,170,5,186,1,59,14829,1,186,103,111,102,59,1,8886,114,59,1,10838,108,111,112,101,59,1,10839,59,1,10843,4,3,99,108,111,14859,14863,14873,114,59,1,8500,97,115,104,5,248,1,59,14871,1,248,108,59,1,8856,105,4,2,108,109,14884,14893,100,101,5,245,1,59,14891,1,245,101,115,4,2,59,97,14901,14903,1,8855,115,59,1,10806,109,108,5,246,1,59,14914,1,246,98,97,114,59,1,9021,4,12,97,99,101,102,104,105,108,109,111,114,115,117,14948,14992,14996,15033,15038,15068,15090,15189,15192,15222,15427,15441,114,4,4,59,97,115,116,14959,14961,14976,14989,1,8741,5,182,2,59,108,14968,14970,1,182,108,101,108,59,1,8741,4,2,105,108,14982,14986,109,59,1,10995,59,1,11005,59,1,8706,121,59,1,1087,114,4,5,99,105,109,112,116,15009,15014,15019,15024,15027,110,116,59,1,37,111,100,59,1,46,105,108,59,1,8240,59,1,8869,101,110,107,59,1,8241,114,59,3,55349,56621,4,3,105,109,111,15046,15057,15063,4,2,59,118,15052,15054,1,966,59,1,981,109,97,116,59,1,8499,110,101,59,1,9742,4,3,59,116,118,15076,15078,15087,1,960,99,104,102,111,114,107,59,1,8916,59,1,982,4,2,97,117,15096,15119,110,4,2,99,107,15103,15115,107,4,2,59,104,15110,15112,1,8463,59,1,8462,118,59,1,8463,115,4,9,59,97,98,99,100,101,109,115,116,15140,15142,15148,15151,15156,15168,15171,15179,15184,1,43,99,105,114,59,1,10787,59,1,8862,105,114,59,1,10786,4,2,111,117,15162,15165,59,1,8724,59,1,10789,59,1,10866,110,5,177,1,59,15177,1,177,105,109,59,1,10790,119,111,59,1,10791,59,1,177,4,3,105,112,117,15200,15208,15213,110,116,105,110,116,59,1,10773,102,59,3,55349,56673,110,100,5,163,1,59,15220,1,163,4,10,59,69,97,99,101,105,110,111,115,117,15244,15246,15249,15253,15258,15334,15347,15367,15416,15421,1,8826,59,1,10931,112,59,1,10935,117,101,59,1,8828,4,2,59,99,15264,15266,1,10927,4,6,59,97,99,101,110,115,15280,15282,15290,15299,15303,15329,1,8826,112,112,114,111,120,59,1,10935,117,114,108,121,101,113,59,1,8828,113,59,1,10927,4,3,97,101,115,15311,15319,15324,112,112,114,111,120,59,1,10937,113,113,59,1,10933,105,109,59,1,8936,105,109,59,1,8830,109,101,4,2,59,115,15342,15344,1,8242,59,1,8473,4,3,69,97,115,15355,15358,15362,59,1,10933,112,59,1,10937,105,109,59,1,8936,4,3,100,102,112,15375,15378,15404,59,1,8719,4,3,97,108,115,15386,15392,15398,108,97,114,59,1,9006,105,110,101,59,1,8978,117,114,102,59,1,8979,4,2,59,116,15410,15412,1,8733,111,59,1,8733,105,109,59,1,8830,114,101,108,59,1,8880,4,2,99,105,15433,15438,114,59,3,55349,56517,59,1,968,110,99,115,112,59,1,8200,4,6,102,105,111,112,115,117,15462,15467,15472,15478,15485,15491,114,59,3,55349,56622,110,116,59,1,10764,112,102,59,3,55349,56674,114,105,109,101,59,1,8279,99,114,59,3,55349,56518,4,3,97,101,111,15499,15520,15534,116,4,2,101,105,15506,15515,114,110,105,111,110,115,59,1,8461,110,116,59,1,10774,115,116,4,2,59,101,15528,15530,1,63,113,59,1,8799,116,5,34,1,59,15540,1,34,4,21,65,66,72,97,98,99,100,101,102,104,105,108,109,110,111,112,114,115,116,117,120,15586,15609,15615,15620,15796,15855,15893,15931,15977,16001,16039,16183,16204,16222,16228,16285,16312,16318,16363,16408,16416,4,3,97,114,116,15594,15599,15603,114,114,59,1,8667,114,59,1,8658,97,105,108,59,1,10524,97,114,114,59,1,10511,97,114,59,1,10596,4,7,99,100,101,110,113,114,116,15636,15651,15656,15664,15687,15696,15770,4,2,101,117,15642,15646,59,3,8765,817,116,101,59,1,341,105,99,59,1,8730,109,112,116,121,118,59,1,10675,103,4,4,59,100,101,108,15675,15677,15680,15683,1,10217,59,1,10642,59,1,10661,101,59,1,10217,117,111,5,187,1,59,15694,1,187,114,4,11,59,97,98,99,102,104,108,112,115,116,119,15721,15723,15727,15739,15742,15746,15750,15754,15758,15763,15767,1,8594,112,59,1,10613,4,2,59,102,15733,15735,1,8677,115,59,1,10528,59,1,10547,115,59,1,10526,107,59,1,8618,112,59,1,8620,108,59,1,10565,105,109,59,1,10612,108,59,1,8611,59,1,8605,4,2,97,105,15776,15781,105,108,59,1,10522,111,4,2,59,110,15788,15790,1,8758,97,108,115,59,1,8474,4,3,97,98,114,15804,15809,15814,114,114,59,1,10509,114,107,59,1,10099,4,2,97,107,15820,15833,99,4,2,101,107,15827,15830,59,1,125,59,1,93,4,2,101,115,15839,15842,59,1,10636,108,4,2,100,117,15849,15852,59,1,10638,59,1,10640,4,4,97,101,117,121,15865,15871,15886,15890,114,111,110,59,1,345,4,2,100,105,15877,15882,105,108,59,1,343,108,59,1,8969,98,59,1,125,59,1,1088,4,4,99,108,113,115,15903,15907,15914,15927,97,59,1,10551,100,104,97,114,59,1,10601,117,111,4,2,59,114,15922,15924,1,8221,59,1,8221,104,59,1,8627,4,3,97,99,103,15939,15966,15970,108,4,4,59,105,112,115,15950,15952,15957,15963,1,8476,110,101,59,1,8475,97,114,116,59,1,8476,59,1,8477,116,59,1,9645,5,174,1,59,15975,1,174,4,3,105,108,114,15985,15991,15997,115,104,116,59,1,10621,111,111,114,59,1,8971,59,3,55349,56623,4,2,97,111,16007,16028,114,4,2,100,117,16014,16017,59,1,8641,4,2,59,108,16023,16025,1,8640,59,1,10604,4,2,59,118,16034,16036,1,961,59,1,1009,4,3,103,110,115,16047,16167,16171,104,116,4,6,97,104,108,114,115,116,16063,16081,16103,16130,16143,16155,114,114,111,119,4,2,59,116,16073,16075,1,8594,97,105,108,59,1,8611,97,114,112,111,111,110,4,2,100,117,16093,16099,111,119,110,59,1,8641,112,59,1,8640,101,102,116,4,2,97,104,16112,16120,114,114,111,119,115,59,1,8644,97,114,112,111,111,110,115,59,1,8652,105,103,104,116,97,114,114,111,119,115,59,1,8649,113,117,105,103,97,114,114,111,119,59,1,8605,104,114,101,101,116,105,109,101,115,59,1,8908,103,59,1,730,105,110,103,100,111,116,115,101,113,59,1,8787,4,3,97,104,109,16191,16196,16201,114,114,59,1,8644,97,114,59,1,8652,59,1,8207,111,117,115,116,4,2,59,97,16214,16216,1,9137,99,104,101,59,1,9137,109,105,100,59,1,10990,4,4,97,98,112,116,16238,16252,16257,16278,4,2,110,114,16244,16248,103,59,1,10221,114,59,1,8702,114,107,59,1,10215,4,3,97,102,108,16265,16269,16273,114,59,1,10630,59,3,55349,56675,117,115,59,1,10798,105,109,101,115,59,1,10805,4,2,97,112,16291,16304,114,4,2,59,103,16298,16300,1,41,116,59,1,10644,111,108,105,110,116,59,1,10770,97,114,114,59,1,8649,4,4,97,99,104,113,16328,16334,16339,16342,113,117,111,59,1,8250,114,59,3,55349,56519,59,1,8625,4,2,98,117,16348,16351,59,1,93,111,4,2,59,114,16358,16360,1,8217,59,1,8217,4,3,104,105,114,16371,16377,16383,114,101,101,59,1,8908,109,101,115,59,1,8906,105,4,4,59,101,102,108,16394,16396,16399,16402,1,9657,59,1,8885,59,1,9656,116,114,105,59,1,10702,108,117,104,97,114,59,1,10600,59,1,8478,4,19,97,98,99,100,101,102,104,105,108,109,111,112,113,114,115,116,117,119,122,16459,16466,16472,16572,16590,16672,16687,16746,16844,16850,16924,16963,16988,17115,17121,17154,17206,17614,17656,99,117,116,101,59,1,347,113,117,111,59,1,8218,4,10,59,69,97,99,101,105,110,112,115,121,16494,16496,16499,16513,16518,16531,16536,16556,16564,16569,1,8827,59,1,10932,4,2,112,114,16505,16508,59,1,10936,111,110,59,1,353,117,101,59,1,8829,4,2,59,100,16524,16526,1,10928,105,108,59,1,351,114,99,59,1,349,4,3,69,97,115,16544,16547,16551,59,1,10934,112,59,1,10938,105,109,59,1,8937,111,108,105,110,116,59,1,10771,105,109,59,1,8831,59,1,1089,111,116,4,3,59,98,101,16582,16584,16587,1,8901,59,1,8865,59,1,10854,4,7,65,97,99,109,115,116,120,16606,16611,16634,16642,16646,16652,16668,114,114,59,1,8664,114,4,2,104,114,16618,16622,107,59,1,10533,4,2,59,111,16628,16630,1,8600,119,59,1,8600,116,5,167,1,59,16640,1,167,105,59,1,59,119,97,114,59,1,10537,109,4,2,105,110,16659,16665,110,117,115,59,1,8726,59,1,8726,116,59,1,10038,114,4,2,59,111,16679,16682,3,55349,56624,119,110,59,1,8994,4,4,97,99,111,121,16697,16702,16716,16739,114,112,59,1,9839,4,2,104,121,16708,16713,99,121,59,1,1097,59,1,1096,114,116,4,2,109,112,16724,16729,105,100,59,1,8739,97,114,97,108,108,101,108,59,1,8741,5,173,1,59,16744,1,173,4,2,103,109,16752,16770,109,97,4,3,59,102,118,16762,16764,16767,1,963,59,1,962,59,1,962,4,8,59,100,101,103,108,110,112,114,16788,16790,16795,16806,16817,16828,16832,16838,1,8764,111,116,59,1,10858,4,2,59,113,16801,16803,1,8771,59,1,8771,4,2,59,69,16812,16814,1,10910,59,1,10912,4,2,59,69,16823,16825,1,10909,59,1,10911,101,59,1,8774,108,117,115,59,1,10788,97,114,114,59,1,10610,97,114,114,59,1,8592,4,4,97,101,105,116,16860,16883,16891,16904,4,2,108,115,16866,16878,108,115,101,116,109,105,110,117,115,59,1,8726,104,112,59,1,10803,112,97,114,115,108,59,1,10724,4,2,100,108,16897,16900,59,1,8739,101,59,1,8995,4,2,59,101,16910,16912,1,10922,4,2,59,115,16918,16920,1,10924,59,3,10924,65024,4,3,102,108,112,16932,16938,16958,116,99,121,59,1,1100,4,2,59,98,16944,16946,1,47,4,2,59,97,16952,16954,1,10692,114,59,1,9023,102,59,3,55349,56676,97,4,2,100,114,16970,16985,101,115,4,2,59,117,16978,16980,1,9824,105,116,59,1,9824,59,1,8741,4,3,99,115,117,16996,17028,17089,4,2,97,117,17002,17015,112,4,2,59,115,17009,17011,1,8851,59,3,8851,65024,112,4,2,59,115,17022,17024,1,8852,59,3,8852,65024,117,4,2,98,112,17035,17062,4,3,59,101,115,17043,17045,17048,1,8847,59,1,8849,101,116,4,2,59,101,17056,17058,1,8847,113,59,1,8849,4,3,59,101,115,17070,17072,17075,1,8848,59,1,8850,101,116,4,2,59,101,17083,17085,1,8848,113,59,1,8850,4,3,59,97,102,17097,17099,17112,1,9633,114,4,2,101,102,17106,17109,59,1,9633,59,1,9642,59,1,9642,97,114,114,59,1,8594,4,4,99,101,109,116,17131,17136,17142,17148,114,59,3,55349,56520,116,109,110,59,1,8726,105,108,101,59,1,8995,97,114,102,59,1,8902,4,2,97,114,17160,17172,114,4,2,59,102,17167,17169,1,9734,59,1,9733,4,2,97,110,17178,17202,105,103,104,116,4,2,101,112,17188,17197,112,115,105,108,111,110,59,1,1013,104,105,59,1,981,115,59,1,175,4,5,98,99,109,110,112,17218,17351,17420,17423,17427,4,9,59,69,100,101,109,110,112,114,115,17238,17240,17243,17248,17261,17267,17279,17285,17291,1,8834,59,1,10949,111,116,59,1,10941,4,2,59,100,17254,17256,1,8838,111,116,59,1,10947,117,108,116,59,1,10945,4,2,69,101,17273,17276,59,1,10955,59,1,8842,108,117,115,59,1,10943,97,114,114,59,1,10617,4,3,101,105,117,17299,17335,17339,116,4,3,59,101,110,17308,17310,17322,1,8834,113,4,2,59,113,17317,17319,1,8838,59,1,10949,101,113,4,2,59,113,17330,17332,1,8842,59,1,10955,109,59,1,10951,4,2,98,112,17345,17348,59,1,10965,59,1,10963,99,4,6,59,97,99,101,110,115,17366,17368,17376,17385,17389,17415,1,8827,112,112,114,111,120,59,1,10936,117,114,108,121,101,113,59,1,8829,113,59,1,10928,4,3,97,101,115,17397,17405,17410,112,112,114,111,120,59,1,10938,113,113,59,1,10934,105,109,59,1,8937,105,109,59,1,8831,59,1,8721,103,59,1,9834,4,13,49,50,51,59,69,100,101,104,108,109,110,112,115,17455,17462,17469,17476,17478,17481,17496,17509,17524,17530,17536,17548,17554,5,185,1,59,17460,1,185,5,178,1,59,17467,1,178,5,179,1,59,17474,1,179,1,8835,59,1,10950,4,2,111,115,17487,17491,116,59,1,10942,117,98,59,1,10968,4,2,59,100,17502,17504,1,8839,111,116,59,1,10948,115,4,2,111,117,17516,17520,108,59,1,10185,98,59,1,10967,97,114,114,59,1,10619,117,108,116,59,1,10946,4,2,69,101,17542,17545,59,1,10956,59,1,8843,108,117,115,59,1,10944,4,3,101,105,117,17562,17598,17602,116,4,3,59,101,110,17571,17573,17585,1,8835,113,4,2,59,113,17580,17582,1,8839,59,1,10950,101,113,4,2,59,113,17593,17595,1,8843,59,1,10956,109,59,1,10952,4,2,98,112,17608,17611,59,1,10964,59,1,10966,4,3,65,97,110,17622,17627,17650,114,114,59,1,8665,114,4,2,104,114,17634,17638,107,59,1,10534,4,2,59,111,17644,17646,1,8601,119,59,1,8601,119,97,114,59,1,10538,108,105,103,5,223,1,59,17664,1,223,4,13,97,98,99,100,101,102,104,105,111,112,114,115,119,17694,17709,17714,17737,17742,17749,17754,17860,17905,17957,17964,18090,18122,4,2,114,117,17700,17706,103,101,116,59,1,8982,59,1,964,114,107,59,1,9140,4,3,97,101,121,17722,17728,17734,114,111,110,59,1,357,100,105,108,59,1,355,59,1,1090,111,116,59,1,8411,108,114,101,99,59,1,8981,114,59,3,55349,56625,4,4,101,105,107,111,17764,17805,17836,17851,4,2,114,116,17770,17786,101,4,2,52,102,17777,17780,59,1,8756,111,114,101,59,1,8756,97,4,3,59,115,118,17795,17797,17802,1,952,121,109,59,1,977,59,1,977,4,2,99,110,17811,17831,107,4,2,97,115,17818,17826,112,112,114,111,120,59,1,8776,105,109,59,1,8764,115,112,59,1,8201,4,2,97,115,17842,17846,112,59,1,8776,105,109,59,1,8764,114,110,5,254,1,59,17858,1,254,4,3,108,109,110,17868,17873,17901,100,101,59,1,732,101,115,5,215,3,59,98,100,17884,17886,17898,1,215,4,2,59,97,17892,17894,1,8864,114,59,1,10801,59,1,10800,116,59,1,8749,4,3,101,112,115,17913,17917,17953,97,59,1,10536,4,4,59,98,99,102,17927,17929,17934,17939,1,8868,111,116,59,1,9014,105,114,59,1,10993,4,2,59,111,17945,17948,3,55349,56677,114,107,59,1,10970,97,59,1,10537,114,105,109,101,59,1,8244,4,3,97,105,112,17972,17977,18082,100,101,59,1,8482,4,7,97,100,101,109,112,115,116,17993,18051,18056,18059,18066,18072,18076,110,103,108,101,4,5,59,100,108,113,114,18009,18011,18017,18032,18035,1,9653,111,119,110,59,1,9663,101,102,116,4,2,59,101,18026,18028,1,9667,113,59,1,8884,59,1,8796,105,103,104,116,4,2,59,101,18045,18047,1,9657,113,59,1,8885,111,116,59,1,9708,59,1,8796,105,110,117,115,59,1,10810,108,117,115,59,1,10809,98,59,1,10701,105,109,101,59,1,10811,101,122,105,117,109,59,1,9186,4,3,99,104,116,18098,18111,18116,4,2,114,121,18104,18108,59,3,55349,56521,59,1,1094,99,121,59,1,1115,114,111,107,59,1,359,4,2,105,111,18128,18133,120,116,59,1,8812,104,101,97,100,4,2,108,114,18143,18154,101,102,116,97,114,114,111,119,59,1,8606,105,103,104,116,97,114,114,111,119,59,1,8608,4,18,65,72,97,98,99,100,102,103,104,108,109,111,112,114,115,116,117,119,18204,18209,18214,18234,18250,18268,18292,18308,18319,18343,18379,18397,18413,18504,18547,18553,18584,18603,114,114,59,1,8657,97,114,59,1,10595,4,2,99,114,18220,18230,117,116,101,5,250,1,59,18228,1,250,114,59,1,8593,114,4,2,99,101,18241,18245,121,59,1,1118,118,101,59,1,365,4,2,105,121,18256,18265,114,99,5,251,1,59,18263,1,251,59,1,1091,4,3,97,98,104,18276,18281,18287,114,114,59,1,8645,108,97,99,59,1,369,97,114,59,1,10606,4,2,105,114,18298,18304,115,104,116,59,1,10622,59,3,55349,56626,114,97,118,101,5,249,1,59,18317,1,249,4,2,97,98,18325,18338,114,4,2,108,114,18332,18335,59,1,8639,59,1,8638,108,107,59,1,9600,4,2,99,116,18349,18374,4,2,111,114,18355,18369,114,110,4,2,59,101,18363,18365,1,8988,114,59,1,8988,111,112,59,1,8975,114,105,59,1,9720,4,2,97,108,18385,18390,99,114,59,1,363,5,168,1,59,18395,1,168,4,2,103,112,18403,18408,111,110,59,1,371,102,59,3,55349,56678,4,6,97,100,104,108,115,117,18427,18434,18445,18470,18475,18494,114,114,111,119,59,1,8593,111,119,110,97,114,114,111,119,59,1,8597,97,114,112,111,111,110,4,2,108,114,18457,18463,101,102,116,59,1,8639,105,103,104,116,59,1,8638,117,115,59,1,8846,105,4,3,59,104,108,18484,18486,18489,1,965,59,1,978,111,110,59,1,965,112,97,114,114,111,119,115,59,1,8648,4,3,99,105,116,18512,18537,18542,4,2,111,114,18518,18532,114,110,4,2,59,101,18526,18528,1,8989,114,59,1,8989,111,112,59,1,8974,110,103,59,1,367,114,105,59,1,9721,99,114,59,3,55349,56522,4,3,100,105,114,18561,18566,18572,111,116,59,1,8944,108,100,101,59,1,361,105,4,2,59,102,18579,18581,1,9653,59,1,9652,4,2,97,109,18590,18595,114,114,59,1,8648,108,5,252,1,59,18601,1,252,97,110,103,108,101,59,1,10663,4,15,65,66,68,97,99,100,101,102,108,110,111,112,114,115,122,18643,18648,18661,18667,18847,18851,18857,18904,18909,18915,18931,18937,18943,18949,18996,114,114,59,1,8661,97,114,4,2,59,118,18656,18658,1,10984,59,1,10985,97,115,104,59,1,8872,4,2,110,114,18673,18679,103,114,116,59,1,10652,4,7,101,107,110,112,114,115,116,18695,18704,18711,18720,18742,18754,18810,112,115,105,108,111,110,59,1,1013,97,112,112,97,59,1,1008,111,116,104,105,110,103,59,1,8709,4,3,104,105,114,18728,18732,18735,105,59,1,981,59,1,982,111,112,116,111,59,1,8733,4,2,59,104,18748,18750,1,8597,111,59,1,1009,4,2,105,117,18760,18766,103,109,97,59,1,962,4,2,98,112,18772,18791,115,101,116,110,101,113,4,2,59,113,18784,18787,3,8842,65024,59,3,10955,65024,115,101,116,110,101,113,4,2,59,113,18803,18806,3,8843,65024,59,3,10956,65024,4,2,104,114,18816,18822,101,116,97,59,1,977,105,97,110,103,108,101,4,2,108,114,18834,18840,101,102,116,59,1,8882,105,103,104,116,59,1,8883,121,59,1,1074,97,115,104,59,1,8866,4,3,101,108,114,18865,18884,18890,4,3,59,98,101,18873,18875,18880,1,8744,97,114,59,1,8891,113,59,1,8794,108,105,112,59,1,8942,4,2,98,116,18896,18901,97,114,59,1,124,59,1,124,114,59,3,55349,56627,116,114,105,59,1,8882,115,117,4,2,98,112,18923,18927,59,3,8834,8402,59,3,8835,8402,112,102,59,3,55349,56679,114,111,112,59,1,8733,116,114,105,59,1,8883,4,2,99,117,18955,18960,114,59,3,55349,56523,4,2,98,112,18966,18981,110,4,2,69,101,18973,18977,59,3,10955,65024,59,3,8842,65024,110,4,2,69,101,18988,18992,59,3,10956,65024,59,3,8843,65024,105,103,122,97,103,59,1,10650,4,7,99,101,102,111,112,114,115,19020,19026,19061,19066,19072,19075,19089,105,114,99,59,1,373,4,2,100,105,19032,19055,4,2,98,103,19038,19043,97,114,59,1,10847,101,4,2,59,113,19050,19052,1,8743,59,1,8793,101,114,112,59,1,8472,114,59,3,55349,56628,112,102,59,3,55349,56680,59,1,8472,4,2,59,101,19081,19083,1,8768,97,116,104,59,1,8768,99,114,59,3,55349,56524,4,14,99,100,102,104,105,108,109,110,111,114,115,117,118,119,19125,19146,19152,19157,19173,19176,19192,19197,19202,19236,19252,19269,19286,19291,4,3,97,105,117,19133,19137,19142,112,59,1,8898,114,99,59,1,9711,112,59,1,8899,116,114,105,59,1,9661,114,59,3,55349,56629,4,2,65,97,19163,19168,114,114,59,1,10234,114,114,59,1,10231,59,1,958,4,2,65,97,19182,19187,114,114,59,1,10232,114,114,59,1,10229,97,112,59,1,10236,105,115,59,1,8955,4,3,100,112,116,19210,19215,19230,111,116,59,1,10752,4,2,102,108,19221,19225,59,3,55349,56681,117,115,59,1,10753,105,109,101,59,1,10754,4,2,65,97,19242,19247,114,114,59,1,10233,114,114,59,1,10230,4,2,99,113,19258,19263,114,59,3,55349,56525,99,117,112,59,1,10758,4,2,112,116,19275,19281,108,117,115,59,1,10756,114,105,59,1,9651,101,101,59,1,8897,101,100,103,101,59,1,8896,4,8,97,99,101,102,105,111,115,117,19316,19335,19349,19357,19362,19367,19373,19379,99,4,2,117,121,19323,19332,116,101,5,253,1,59,19330,1,253,59,1,1103,4,2,105,121,19341,19346,114,99,59,1,375,59,1,1099,110,5,165,1,59,19355,1,165,114,59,3,55349,56630,99,121,59,1,1111,112,102,59,3,55349,56682,99,114,59,3,55349,56526,4,2,99,109,19385,19389,121,59,1,1102,108,5,255,1,59,19395,1,255,4,10,97,99,100,101,102,104,105,111,115,119,19419,19426,19441,19446,19462,19467,19472,19480,19486,19492,99,117,116,101,59,1,378,4,2,97,121,19432,19438,114,111,110,59,1,382,59,1,1079,111,116,59,1,380,4,2,101,116,19452,19458,116,114,102,59,1,8488,97,59,1,950,114,59,3,55349,56631,99,121,59,1,1078,103,114,97,114,114,59,1,8669,112,102,59,3,55349,56683,99,114,59,3,55349,56527,4,2,106,110,19498,19501,59,1,8205,106,59,1,8204])},cpVT:function(e,t,n){"use strict";function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}n.d(t,"a",(function(){return o}))},dAEq:function(e,t,n){"use strict";var o=n("HtLg"),r=n("Vx/6"),i=n("fuKP"),a=n("/+k/"),s=n("Ig3s"),l=n("T0BQ"),c={name:"attention",tokenize:function(e,t){var n,o=i(this.previous);return function(t){return e.enter("attentionSequence"),n=t,r(t)};function r(a){var s,l,c,u;return a===n?(e.consume(a),r):(s=e.exit("attentionSequence"),c=!(l=i(a))||2===l&&o,u=!o||2===o&&l,s._open=42===n?c:c&&(o||!u),s._close=42===n?u:u&&(l||!c),t(a))}},resolveAll:function(e,t){var n,i,c,u,d,p,f,h,m=-1;for(;++m1&&e[m][1].end.offset-e[m][1].start.offset>1?2:1,u={type:p>1?"strongSequence":"emphasisSequence",start:a(l(e[n][1].end),-p),end:l(e[n][1].end)},d={type:p>1?"strongSequence":"emphasisSequence",start:l(e[m][1].start),end:a(l(e[m][1].start),p)},c={type:p>1?"strongText":"emphasisText",start:l(e[n][1].end),end:l(e[m][1].start)},i={type:p>1?"strong":"emphasis",start:l(u.start),end:l(d.end)},e[n][1].end=l(u.start),e[m][1].start=l(d.end),f=[],e[n][1].end.offset-e[n][1].start.offset&&(f=o(f,[["enter",e[n][1],t],["exit",e[n][1],t]])),f=o(f,[["enter",i,t],["enter",u,t],["exit",u,t],["enter",c,t]]),f=o(f,s(t.parser.constructs.insideSpan.null,e.slice(n+1,m),t)),f=o(f,[["exit",c,t],["enter",d,t],["exit",d,t],["exit",i,t]]),e[m][1].end.offset-e[m][1].start.offset?(h=2,f=o(f,[["enter",e[m][1],t],["exit",e[m][1],t]])):h=0,r(e,n-1,m-n+3,f),m=n+f.length-h-2;break}m=-1;for(;++m?\]}]+$/.exec(e);if(i)for(e=e.slice(0,i.index),t=(i=i[0]).indexOf(")"),n=o(e,"("),r=o(e,")");-1!==t&&n>r;)e+=i.slice(0,t+1),t=(i=i.slice(t+1)).indexOf(")"),r++;return[e,i]}(n+r))[0]&&(s={type:"link",title:null,url:l+t+a[0],children:[{type:"text",value:t+a[0]}]},a[1]&&(s=[s,{type:"text",value:a[1]}]),s)))}function c(e,t,n,o){return!(!u(o,!0)||/[_-]$/.test(n))&&{type:"link",title:null,url:"mailto:"+t+"@"+n,children:[{type:"text",value:t+"@"+n}]}}function u(e,t){var n=e.input.charCodeAt(e.index-1);return(n!==n||a(n)||i(n))&&(!t||47!==n)}t.transforms=[function(e){r(e,[[/(https?:\/\/|www(?=\.))([-.\w]+)([^ \t\r\n]*)/i,l],[/([-.\w+]+)@([-\w]+(?:\.[-\w]+)+)/,c]],{ignore:["link","linkReference"]})}],t.enter={literalAutolink:function(e){this.enter({type:"link",title:null,url:"",children:[]},e)},literalAutolinkEmail:s,literalAutolinkHttp:s,literalAutolinkWww:s},t.exit={literalAutolink:function(e){this.exit(e)},literalAutolinkEmail:function(e){this.config.exit.autolinkEmail.call(this,e)},literalAutolinkHttp:function(e){this.config.exit.autolinkProtocol.call(this,e)},literalAutolinkWww:function(e){this.config.exit.data.call(this,e),this.stack[this.stack.length-1].url="http://"+this.sliceSerialize(e)}}},ecSx:function(e,t,n){"use strict";var o=n("ek1N");e.exports=function(e,t){e&&!e.process&&(t=e,e=null);return e?function(e,t){return n;function n(n,r,i){function a(e){i(e)}e.run(o(n,t),r,a)}}(e,t):function(e){return t;function t(t){return o(t,e)}}(t)}},ek1N:function(e,t,n){"use strict";e.exports=n("FYh5")},escJ:function(e,t,n){"use strict";var o=n("yRGd"),r={name:"lineEnding",tokenize:function(e,t){return function(n){return e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),o(e,t,"linePrefix")}}};e.exports=r},f8fV:function(e,t,n){e.exports=function(e){var t=(e||{}).singleTilde,n={tokenize:function(e,n,r){var i=this.previous,a=this.events,s=0;return l;function l(t){return 126!==t||126===i&&"characterEscape"!==a[a.length-1][1].type?r(t):(e.enter("strikethroughSequenceTemporary"),c(t))}function c(a){var l,u,d=o(i);return 126===a?s>1?r(a):(e.consume(a),s++,c):s<2&&!t?r(a):(l=e.exit("strikethroughSequenceTemporary"),u=o(a),l._open=!u||2===u&&d,l._close=!d||2===d&&u,n(a))}},resolveAll:function(e,t){var n,o,s,l,c=-1;for(;++c-1)return o.QUIRKS;let e=null===t?a:i;if(d(n,e))return o.QUIRKS;if(e=null===t?l:c,d(n,e))return o.LIMITED_QUIRKS}return o.NO_QUIRKS},t.serializeContent=function(e,t,n){let o="!DOCTYPE ";return e&&(o+=e),t?o+=" PUBLIC "+u(t):n&&(o+=" SYSTEM"),null!==n&&(o+=" "+u(n)),o}},fFcG:function(e,t,n){"use strict";e.exports=function(e,t){return e.dangerous?e.augment(t,o("raw",t.value)):null};var o=n("vUGn")},fL8H:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{color:"#657b83",fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",fontSize:"1em",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none"},'pre[class*="language-"]':{color:"#657b83",fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",fontSize:"1em",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",padding:"1em",margin:".5em 0",overflow:"auto",borderRadius:"0.3em",backgroundColor:"#fdf6e3"},'pre[class*="language-"]::-moz-selection':{background:"#073642"},'pre[class*="language-"] ::-moz-selection':{background:"#073642"},'code[class*="language-"]::-moz-selection':{background:"#073642"},'code[class*="language-"] ::-moz-selection':{background:"#073642"},'pre[class*="language-"]::selection':{background:"#073642"},'pre[class*="language-"] ::selection':{background:"#073642"},'code[class*="language-"]::selection':{background:"#073642"},'code[class*="language-"] ::selection':{background:"#073642"},':not(pre) > code[class*="language-"]':{backgroundColor:"#fdf6e3",padding:".1em",borderRadius:".3em"},comment:{color:"#93a1a1"},prolog:{color:"#93a1a1"},doctype:{color:"#93a1a1"},cdata:{color:"#93a1a1"},punctuation:{color:"#586e75"},namespace:{Opacity:".7"},property:{color:"#268bd2"},tag:{color:"#268bd2"},boolean:{color:"#268bd2"},number:{color:"#268bd2"},constant:{color:"#268bd2"},symbol:{color:"#268bd2"},deleted:{color:"#268bd2"},selector:{color:"#2aa198"},"attr-name":{color:"#2aa198"},string:{color:"#2aa198"},char:{color:"#2aa198"},builtin:{color:"#2aa198"},url:{color:"#2aa198"},inserted:{color:"#2aa198"},entity:{color:"#657b83",background:"#eee8d5",cursor:"help"},atrule:{color:"#859900"},"attr-value":{color:"#859900"},keyword:{color:"#859900"},function:{color:"#b58900"},"class-name":{color:"#b58900"},regex:{color:"#cb4b16"},important:{color:"#cb4b16",fontWeight:"bold"},variable:{color:"#cb4b16"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"}}},fUUT:function(e,t,n){"use strict";e.exports=function(e){var t=this;this.Parser=function(n){return o(n,Object.assign({},t.data("settings"),e,{extensions:t.data("micromarkExtensions")||[],mdastExtensions:t.data("fromMarkdownExtensions")||[]}))}};var o=n("LLHA")},"fe/W":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",whiteSpace:"pre-wrap",wordBreak:"break-all",wordWrap:"break-word",fontFamily:'Menlo, Monaco, "Courier New", monospace',fontSize:"15px",lineHeight:"1.5",color:"#dccf8f",textShadow:"0"},'pre[class*="language-"]':{MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",whiteSpace:"pre-wrap",wordBreak:"break-all",wordWrap:"break-word",fontFamily:'Menlo, Monaco, "Courier New", monospace',fontSize:"15px",lineHeight:"1.5",color:"#DCCF8F",textShadow:"0",borderRadius:"5px",border:"1px solid #000",background:"#181914 url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAMAAA/+4ADkFkb2JlAGTAAAAAAf/bAIQACQYGBgcGCQcHCQ0IBwgNDwsJCQsPEQ4ODw4OERENDg4ODg0RERQUFhQUERoaHBwaGiYmJiYmKysrKysrKysrKwEJCAgJCgkMCgoMDwwODA8TDg4ODhMVDg4PDg4VGhMRERERExoXGhYWFhoXHR0aGh0dJCQjJCQrKysrKysrKysr/8AAEQgAjACMAwEiAAIRAQMRAf/EAF4AAQEBAAAAAAAAAAAAAAAAAAABBwEBAQAAAAAAAAAAAAAAAAAAAAIQAAEDAwIHAQEAAAAAAAAAAADwAREhYaExkUFRcYGxwdHh8REBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AyGFEjHaBS2fDDs2zkhKmBKktb7km+ZwwCnXPkLVmCTMItj6AXFxRS465/BTnkAJvkLkJe+7AKKoi2AtRS2zuAWsCb5GOlBN8gKfmuGHZ8MFqIth3ALmFoFwbwKWyAlTAp17uKqBvgBD8sM4fTjhvAhkzhaRkBMKBrfs7jGPIpzy7gFrAqnC0C0gB0EWwBDW2cBVQwm+QtPpa3wBO3sVvszCnLAhkzgL5/RLf13cLQd8/AGlu0Cb5HTx9KuAEieGJEdcehS3eRTp2ATdt3CpIm+QtZwAhROXFeb7swp/ahaM3kBE/jSIUBc/AWrgBN8uNFAl+b7sAXFxFn2YLUU5Ns7gFX8C4ib+hN8gFWXwK3bZglxEJm+gKdciLPsFV/TClsgJUwKJ5FVA7tvIFrfZhVfGJDcsCKaYgAqv6YRbE+RWOWBtu7+AL3yRalXLyKqAIIfk+zARbDgFyEsncYwJvlgFRW+GEWntIi2P0BooyFxcNr8Ep3+ANLbMO+QyhvbiqdgC0kVvgUUiLYgBS2QtPbiVI1/sgOmG9uO+Y8DW+7jS2zAOnj6O2BndwuIAUtkdRN8gFoK3wwXMQyZwHVbClsuNLd4E3yAUR6FVDBR+BafQGt93LVMxJTv8ABts4CVLhcfYWsCb5kC9/BHdU8CLYFY5bMAd+eX9MGthhpbA1vu4B7+RKkaW2Yq4AQtVBBFsAJU/AuIXBhN8gGWnstefhiZyWvLAEnbYS1uzSFP6Jvn4Baxx70JKkQojLib5AVTey1jjgkKJGO0AKWyOm7N7cSpgSpAdPH0Tfd/gp1z5C1ZgKqN9J2wFxcUUuAFLZAm+QC0Fb4YUVRFsAOvj4KW2dwtYE3yAWk/wS/PLMKfmuGHZ8MAXF/Ja32Yi5haAKWz4Ydm2cSpgU693Atb7km+Zwwh+WGcPpxw3gAkzCLY+iYUDW/Z3Adc/gpzyFrAqnALkJe+7DoItgAtRS2zuKqGE3yAx0oJvkdvYrfZmALURbDuL5/RLf13cAuDeBS2RpbtAm+QFVA3wR+3fUtFHoBDJnC0jIXH0HWsgMY8inPLuOkd9chp4z20ALQLSA8cI9jYAIa2zjzjBd8gRafS1vgiUho/kAKcsCGTOGWvoOpkAtB3z8Hm8x2Ff5ADp4+lXAlIvcmwH/2Q==') repeat left top",padding:"12px",overflow:"auto"},'pre > code[class*="language-"]':{fontSize:"1em"},':not(pre) > code[class*="language-"]':{borderRadius:"5px",border:"1px solid #000",color:"#DCCF8F",background:"#181914 url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAMAAA/+4ADkFkb2JlAGTAAAAAAf/bAIQACQYGBgcGCQcHCQ0IBwgNDwsJCQsPEQ4ODw4OERENDg4ODg0RERQUFhQUERoaHBwaGiYmJiYmKysrKysrKysrKwEJCAgJCgkMCgoMDwwODA8TDg4ODhMVDg4PDg4VGhMRERERExoXGhYWFhoXHR0aGh0dJCQjJCQrKysrKysrKysr/8AAEQgAjACMAwEiAAIRAQMRAf/EAF4AAQEBAAAAAAAAAAAAAAAAAAABBwEBAQAAAAAAAAAAAAAAAAAAAAIQAAEDAwIHAQEAAAAAAAAAAADwAREhYaExkUFRcYGxwdHh8REBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AyGFEjHaBS2fDDs2zkhKmBKktb7km+ZwwCnXPkLVmCTMItj6AXFxRS465/BTnkAJvkLkJe+7AKKoi2AtRS2zuAWsCb5GOlBN8gKfmuGHZ8MFqIth3ALmFoFwbwKWyAlTAp17uKqBvgBD8sM4fTjhvAhkzhaRkBMKBrfs7jGPIpzy7gFrAqnC0C0gB0EWwBDW2cBVQwm+QtPpa3wBO3sVvszCnLAhkzgL5/RLf13cLQd8/AGlu0Cb5HTx9KuAEieGJEdcehS3eRTp2ATdt3CpIm+QtZwAhROXFeb7swp/ahaM3kBE/jSIUBc/AWrgBN8uNFAl+b7sAXFxFn2YLUU5Ns7gFX8C4ib+hN8gFWXwK3bZglxEJm+gKdciLPsFV/TClsgJUwKJ5FVA7tvIFrfZhVfGJDcsCKaYgAqv6YRbE+RWOWBtu7+AL3yRalXLyKqAIIfk+zARbDgFyEsncYwJvlgFRW+GEWntIi2P0BooyFxcNr8Ep3+ANLbMO+QyhvbiqdgC0kVvgUUiLYgBS2QtPbiVI1/sgOmG9uO+Y8DW+7jS2zAOnj6O2BndwuIAUtkdRN8gFoK3wwXMQyZwHVbClsuNLd4E3yAUR6FVDBR+BafQGt93LVMxJTv8ABts4CVLhcfYWsCb5kC9/BHdU8CLYFY5bMAd+eX9MGthhpbA1vu4B7+RKkaW2Yq4AQtVBBFsAJU/AuIXBhN8gGWnstefhiZyWvLAEnbYS1uzSFP6Jvn4Baxx70JKkQojLib5AVTey1jjgkKJGO0AKWyOm7N7cSpgSpAdPH0Tfd/gp1z5C1ZgKqN9J2wFxcUUuAFLZAm+QC0Fb4YUVRFsAOvj4KW2dwtYE3yAWk/wS/PLMKfmuGHZ8MAXF/Ja32Yi5haAKWz4Ydm2cSpgU693Atb7km+Zwwh+WGcPpxw3gAkzCLY+iYUDW/Z3Adc/gpzyFrAqnALkJe+7DoItgAtRS2zuKqGE3yAx0oJvkdvYrfZmALURbDuL5/RLf13cAuDeBS2RpbtAm+QFVA3wR+3fUtFHoBDJnC0jIXH0HWsgMY8inPLuOkd9chp4z20ALQLSA8cI9jYAIa2zjzjBd8gRafS1vgiUho/kAKcsCGTOGWvoOpkAtB3z8Hm8x2Ff5ADp4+lXAlIvcmwH/2Q==') repeat left top",padding:"2px 6px"},namespace:{Opacity:".7"},comment:{color:"#586e75",fontStyle:"italic"},prolog:{color:"#586e75",fontStyle:"italic"},doctype:{color:"#586e75",fontStyle:"italic"},cdata:{color:"#586e75",fontStyle:"italic"},number:{color:"#b89859"},string:{color:"#468966"},char:{color:"#468966"},builtin:{color:"#468966"},inserted:{color:"#468966"},"attr-name":{color:"#b89859"},operator:{color:"#dccf8f"},entity:{color:"#dccf8f",cursor:"help"},url:{color:"#dccf8f"},".language-css .token.string":{color:"#dccf8f"},".style .token.string":{color:"#dccf8f"},selector:{color:"#859900"},regex:{color:"#859900"},atrule:{color:"#cb4b16"},keyword:{color:"#cb4b16"},"attr-value":{color:"#468966"},function:{color:"#b58900"},variable:{color:"#b58900"},placeholder:{color:"#b58900"},property:{color:"#b89859"},tag:{color:"#ffb03b"},boolean:{color:"#b89859"},constant:{color:"#b89859"},symbol:{color:"#b89859"},important:{color:"#dc322f"},statement:{color:"#dc322f"},deleted:{color:"#dc322f"},punctuation:{color:"#dccf8f"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"}}},fsL8:function(e,t,n){var o=n("cDf5").default;function r(){"use strict";e.exports=r=function(){return t},e.exports.__esModule=!0,e.exports.default=e.exports;var t={},n=Object.prototype,i=n.hasOwnProperty,a=Object.defineProperty||function(e,t,n){e[t]=n.value},s="function"==typeof Symbol?Symbol:{},l=s.iterator||"@@iterator",c=s.asyncIterator||"@@asyncIterator",u=s.toStringTag||"@@toStringTag";function d(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{d({},"")}catch(w){d=function(e,t,n){return e[t]=n}}function p(e,t,n,o){var r=t&&t.prototype instanceof m?t:m,i=Object.create(r.prototype),s=new O(o||[]);return a(i,"_invoke",{value:S(e,n,s)}),i}function f(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(w){return{type:"throw",arg:w}}}t.wrap=p;var h={};function m(){}function g(){}function T(){}var E={};d(E,l,(function(){return this}));var b=Object.getPrototypeOf,A=b&&b(b(N([])));A&&A!==n&&i.call(A,l)&&(E=A);var k=T.prototype=m.prototype=Object.create(E);function y(e){["next","throw","return"].forEach((function(t){d(e,t,(function(e){return this._invoke(t,e)}))}))}function _(e,t){function n(r,a,s,l){var c=f(e[r],e,a);if("throw"!==c.type){var u=c.arg,d=u.value;return d&&"object"==o(d)&&i.call(d,"__await")?t.resolve(d.__await).then((function(e){n("next",e,s,l)}),(function(e){n("throw",e,s,l)})):t.resolve(d).then((function(e){u.value=e,s(u)}),(function(e){return n("throw",e,s,l)}))}l(c.arg)}var r;a(this,"_invoke",{value:function(e,o){function i(){return new t((function(t,r){n(e,o,t,r)}))}return r=r?r.then(i,i):i()}})}function S(e,t,n){var o="suspendedStart";return function(r,i){if("executing"===o)throw new Error("Generator is already running");if("completed"===o){if("throw"===r)throw i;return M()}for(n.method=r,n.arg=i;;){var a=n.delegate;if(a){var s=C(a,n);if(s){if(s===h)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===o)throw o="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);o="executing";var l=f(e,t,n);if("normal"===l.type){if(o=n.done?"completed":"suspendedYield",l.arg===h)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(o="completed",n.method="throw",n.arg=l.arg)}}}function C(e,t){var n=t.method,o=e.iterator[n];if(void 0===o)return t.delegate=null,"throw"===n&&e.iterator.return&&(t.method="return",t.arg=void 0,C(e,t),"throw"===t.method)||"return"!==n&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+n+"' method")),h;var r=f(o,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,h;var i=r.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,h):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,h)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function v(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function O(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(x,this),this.reset(!0)}function N(e){if(e){var t=e[l];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,o=function t(){for(;++n=0;--o){var r=this.tryEntries[o],a=r.completion;if("root"===r.tryLoc)return n("end");if(r.tryLoc<=this.prev){var s=i.call(r,"catchLoc"),l=i.call(r,"finallyLoc");if(s&&l){if(this.prev=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&i.call(o,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),v(n),h}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var o=n.completion;if("throw"===o.type){var r=o.arg;v(n)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:N(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),h}},t}e.exports=r,e.exports.__esModule=!0,e.exports.default=e.exports},fuKP:function(e,t,n){"use strict";var o=n("Q3zd"),r=n("BjXi"),i=n("uDje");e.exports=function(e){return null===e||o(e)||i(e)?1:r(e)?2:void 0}},g4pe:function(e,t,n){e.exports=n("8Kt/")},gsvO:function(e,t,n){e.exports=r,r.peek=function(){return"`"};var o=n("7J+x");function r(e,t,n){for(var r,i,a,s,l=e.value||"",c="`",u=-1;new RegExp("(^|[^`])"+c+"([^`]|$)").test(l);)c+="`";for(/[^ \r\n]/.test(l)&&(/[ \r\n`]/.test(l.charAt(0))||/[ \r\n`]/.test(l.charAt(l.length-1)))&&(l=" "+l+" ");++up?n(i):(e.consume(i),T):41===i?f--?(e.consume(i),T):(e.exit("chunkString"),e.exit(u),e.exit(c),e.exit(a),t(i)):null===i||r(i)?f?n(i):(e.exit("chunkString"),e.exit(u),e.exit(c),e.exit(a),t(i)):o(i)?n(i):(e.consume(i),92===i?E:T)}function E(t){return 40===t||41===t||92===t?(e.consume(t),T):T(t)}}},hq1P:function(e,t,n){"use strict";var o=n("rm/B")(/[A-Za-z]/);e.exports=o},iX4R:function(e,t,n){"use strict";e.exports=function(e,t){return e(t,"blockquote",o(r(e,t),!0))};var o=n("Dvol"),r=n("WFsM")},iy38:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{color:"white",background:"none",fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",fontSize:"1em",textAlign:"left",textShadow:"0 -.1em .2em black",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none"},'pre[class*="language-"]':{color:"white",background:"hsl(0, 0%, 8%)",fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",fontSize:"1em",textAlign:"left",textShadow:"0 -.1em .2em black",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",borderRadius:".5em",border:".3em solid hsl(0, 0%, 33%)",boxShadow:"1px 1px .5em black inset",margin:".5em 0",overflow:"auto",padding:"1em"},':not(pre) > code[class*="language-"]':{background:"hsl(0, 0%, 8%)",borderRadius:".3em",border:".13em solid hsl(0, 0%, 33%)",boxShadow:"1px 1px .3em -.1em black inset",padding:".15em .2em .05em",whiteSpace:"normal"},'pre[class*="language-"]::-moz-selection':{background:"hsla(0, 0%, 93%, 0.15)",textShadow:"none"},'pre[class*="language-"]::selection':{background:"hsla(0, 0%, 93%, 0.15)",textShadow:"none"},'pre[class*="language-"] ::-moz-selection':{textShadow:"none",background:"hsla(0, 0%, 93%, 0.15)"},'code[class*="language-"]::-moz-selection':{textShadow:"none",background:"hsla(0, 0%, 93%, 0.15)"},'code[class*="language-"] ::-moz-selection':{textShadow:"none",background:"hsla(0, 0%, 93%, 0.15)"},'pre[class*="language-"] ::selection':{textShadow:"none",background:"hsla(0, 0%, 93%, 0.15)"},'code[class*="language-"]::selection':{textShadow:"none",background:"hsla(0, 0%, 93%, 0.15)"},'code[class*="language-"] ::selection':{textShadow:"none",background:"hsla(0, 0%, 93%, 0.15)"},comment:{color:"hsl(0, 0%, 47%)"},prolog:{color:"hsl(0, 0%, 47%)"},doctype:{color:"hsl(0, 0%, 47%)"},cdata:{color:"hsl(0, 0%, 47%)"},punctuation:{Opacity:".7"},namespace:{Opacity:".7"},tag:{color:"hsl(14, 58%, 55%)"},boolean:{color:"hsl(14, 58%, 55%)"},number:{color:"hsl(14, 58%, 55%)"},deleted:{color:"hsl(14, 58%, 55%)"},keyword:{color:"hsl(53, 89%, 79%)"},property:{color:"hsl(53, 89%, 79%)"},selector:{color:"hsl(53, 89%, 79%)"},constant:{color:"hsl(53, 89%, 79%)"},symbol:{color:"hsl(53, 89%, 79%)"},builtin:{color:"hsl(53, 89%, 79%)"},"attr-name":{color:"hsl(76, 21%, 52%)"},"attr-value":{color:"hsl(76, 21%, 52%)"},string:{color:"hsl(76, 21%, 52%)"},char:{color:"hsl(76, 21%, 52%)"},operator:{color:"hsl(76, 21%, 52%)"},entity:{color:"hsl(76, 21%, 52%)",cursor:"help"},url:{color:"hsl(76, 21%, 52%)"},".language-css .token.string":{color:"hsl(76, 21%, 52%)"},".style .token.string":{color:"hsl(76, 21%, 52%)"},variable:{color:"hsl(76, 21%, 52%)"},inserted:{color:"hsl(76, 21%, 52%)"},atrule:{color:"hsl(218, 22%, 55%)"},regex:{color:"hsl(42, 75%, 65%)"},important:{color:"hsl(42, 75%, 65%)",fontWeight:"bold"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},"pre[data-line]":{padding:"1em 0 1em 3em",position:"relative"},".language-markup .token.tag":{color:"hsl(33, 33%, 52%)"},".language-markup .token.attr-name":{color:"hsl(33, 33%, 52%)"},".language-markup .token.punctuation":{color:"hsl(33, 33%, 52%)"},"":{position:"relative",zIndex:"1"},".line-highlight":{background:"linear-gradient(to right, hsla(0, 0%, 33%, .1) 70%, hsla(0, 0%, 33%, 0))",borderBottom:"1px dashed hsl(0, 0%, 33%)",borderTop:"1px dashed hsl(0, 0%, 33%)",left:"0",lineHeight:"inherit",marginTop:"0.75em",padding:"inherit 0",pointerEvents:"none",position:"absolute",right:"0",whiteSpace:"pre",zIndex:"0"},".line-highlight:before":{backgroundColor:"hsl(215, 15%, 59%)",borderRadius:"999px",boxShadow:"0 1px white",color:"hsl(24, 20%, 95%)",content:"attr(data-start)",font:"bold 65%/1.5 sans-serif",left:".6em",minWidth:"1em",padding:"0 .5em",position:"absolute",textAlign:"center",textShadow:"none",top:".4em",verticalAlign:".3em"},".line-highlight[data-end]:after":{backgroundColor:"hsl(215, 15%, 59%)",borderRadius:"999px",boxShadow:"0 1px white",color:"hsl(24, 20%, 95%)",content:"attr(data-end)",font:"bold 65%/1.5 sans-serif",left:".6em",minWidth:"1em",padding:"0 .5em",position:"absolute",textAlign:"center",textShadow:"none",top:"auto",verticalAlign:".3em",bottom:".4em"}}},jO3g:function(e,t,n){"use strict";e.exports=function(e,t,n){var o,r=t&&t.type;if(!r)throw new Error("Expected node, got `"+t+"`");o=i.call(e.handlers,r)?e.handlers[r]:e.passThrough&&e.passThrough.indexOf(r)>-1?s:e.unknownHandler;return("function"===typeof o?o:a)(e,t,n)};var o=n("vUGn"),r=n("WFsM"),i={}.hasOwnProperty;function a(e,t){return function(e){var t=e.data||{};if(i.call(t,"hName")||i.call(t,"hProperties")||i.call(t,"hChildren"))return!1;return"value"in e}(t)?e.augment(t,o("text",t.value)):e(t,"div",r(e,t))}function s(e,t){var n;return t.children?((n=Object.assign({},t)).children=r(e,t),n):t}},jeK3:function(e,t,n){"use strict";e.exports=function(e){for(var t=-1,n=0;++t-1?void 0:4)}},exit:function(e){e.exit("blockQuote")}};e.exports=i},kViG:function(e,t,n){"use strict";var o=n("E/Jm"),r=n("2N74");e.exports=function(e,t,n,i,a,s){var l,c=this,u=0;return function(t){return e.enter(i),e.enter(a),e.consume(t),e.exit(a),e.enter(s),d};function d(r){return null===r||91===r||93===r&&!l||94===r&&!u&&"_hiddenFootnoteSupport"in c.parser.constructs||u>999?n(r):93===r?(e.exit(s),e.enter(a),e.consume(r),e.exit(a),e.exit(i),t):o(r)?(e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),d):(e.enter("chunkString",{contentType:"string"}),p(r))}function p(t){return null===t||91===t||93===t||o(t)||u++>999?(e.exit("chunkString"),d(t)):(e.consume(t),l=l||!r(t),92===t?f:p)}function f(t){return 91===t||92===t||93===t?(e.consume(t),u++,p):p(t)}}},kWEd:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{fontFamily:'Consolas, Menlo, Monaco, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace',fontSize:"14px",lineHeight:"1.375",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",background:"#322d29",color:"#88786d"},'pre[class*="language-"]':{fontFamily:'Consolas, Menlo, Monaco, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace',fontSize:"14px",lineHeight:"1.375",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",background:"#322d29",color:"#88786d",padding:"1em",margin:".5em 0",overflow:"auto"},'pre > code[class*="language-"]':{fontSize:"1em"},'pre[class*="language-"]::-moz-selection':{textShadow:"none",background:"#6f5849"},'pre[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#6f5849"},'code[class*="language-"]::-moz-selection':{textShadow:"none",background:"#6f5849"},'code[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#6f5849"},'pre[class*="language-"]::selection':{textShadow:"none",background:"#6f5849"},'pre[class*="language-"] ::selection':{textShadow:"none",background:"#6f5849"},'code[class*="language-"]::selection':{textShadow:"none",background:"#6f5849"},'code[class*="language-"] ::selection':{textShadow:"none",background:"#6f5849"},':not(pre) > code[class*="language-"]':{padding:".1em",borderRadius:".3em"},comment:{color:"#6a5f58"},prolog:{color:"#6a5f58"},doctype:{color:"#6a5f58"},cdata:{color:"#6a5f58"},punctuation:{color:"#6a5f58"},namespace:{Opacity:".7"},tag:{color:"#bfa05a"},operator:{color:"#bfa05a"},number:{color:"#bfa05a"},property:{color:"#88786d"},function:{color:"#88786d"},"tag-id":{color:"#fff3eb"},selector:{color:"#fff3eb"},"atrule-id":{color:"#fff3eb"},"code.language-javascript":{color:"#a48774"},"attr-name":{color:"#a48774"},"code.language-css":{color:"#fcc440"},"code.language-scss":{color:"#fcc440"},boolean:{color:"#fcc440"},string:{color:"#fcc440"},entity:{color:"#fcc440",cursor:"help"},url:{color:"#fcc440"},".language-css .token.string":{color:"#fcc440"},".language-scss .token.string":{color:"#fcc440"},".style .token.string":{color:"#fcc440"},"attr-value":{color:"#fcc440"},keyword:{color:"#fcc440"},control:{color:"#fcc440"},directive:{color:"#fcc440"},unit:{color:"#fcc440"},statement:{color:"#fcc440"},regex:{color:"#fcc440"},atrule:{color:"#fcc440"},placeholder:{color:"#fcc440"},variable:{color:"#fcc440"},deleted:{textDecoration:"line-through"},inserted:{borderBottom:"1px dotted #fff3eb",textDecoration:"none"},italic:{fontStyle:"italic"},important:{fontWeight:"bold",color:"#a48774"},bold:{fontWeight:"bold"},"pre > code.highlight":{Outline:".4em solid #816d5f",OutlineOffset:".4em"},".line-numbers .line-numbers-rows":{borderRightColor:"#35302b"},".line-numbers-rows > span:before":{color:"#46403d"},".line-highlight":{background:"linear-gradient(to right, rgba(191, 160, 90, 0.2) 70%, rgba(191, 160, 90, 0))"}}},ki31:function(e,t){t.canContainEols=["delete"],t.enter={strikethrough:function(e){this.enter({type:"delete",children:[]},e)}},t.exit={strikethrough:function(e){this.exit(e)}}},ktEA:function(e,t,n){"use strict";e.exports=function(e,t){return e(t,"em",o(e,t))};var o=n("WFsM")},lQDV:function(e,t,n){"use strict";e.exports=function(e,t){return e(t,"h"+t.depth,o(e,t))};var o=n("WFsM")},lVxK:function(e,t,n){"use strict";const o=n("zpDW"),r=n("UwWT"),i=r.TAG_NAMES,a=r.NAMESPACES,s=r.ATTRS,l="text/html",c="application/xhtml+xml",u={attributename:"attributeName",attributetype:"attributeType",basefrequency:"baseFrequency",baseprofile:"baseProfile",calcmode:"calcMode",clippathunits:"clipPathUnits",diffuseconstant:"diffuseConstant",edgemode:"edgeMode",filterunits:"filterUnits",glyphref:"glyphRef",gradienttransform:"gradientTransform",gradientunits:"gradientUnits",kernelmatrix:"kernelMatrix",kernelunitlength:"kernelUnitLength",keypoints:"keyPoints",keysplines:"keySplines",keytimes:"keyTimes",lengthadjust:"lengthAdjust",limitingconeangle:"limitingConeAngle",markerheight:"markerHeight",markerunits:"markerUnits",markerwidth:"markerWidth",maskcontentunits:"maskContentUnits",maskunits:"maskUnits",numoctaves:"numOctaves",pathlength:"pathLength",patterncontentunits:"patternContentUnits",patterntransform:"patternTransform",patternunits:"patternUnits",pointsatx:"pointsAtX",pointsaty:"pointsAtY",pointsatz:"pointsAtZ",preservealpha:"preserveAlpha",preserveaspectratio:"preserveAspectRatio",primitiveunits:"primitiveUnits",refx:"refX",refy:"refY",repeatcount:"repeatCount",repeatdur:"repeatDur",requiredextensions:"requiredExtensions",requiredfeatures:"requiredFeatures",specularconstant:"specularConstant",specularexponent:"specularExponent",spreadmethod:"spreadMethod",startoffset:"startOffset",stddeviation:"stdDeviation",stitchtiles:"stitchTiles",surfacescale:"surfaceScale",systemlanguage:"systemLanguage",tablevalues:"tableValues",targetx:"targetX",targety:"targetY",textlength:"textLength",viewbox:"viewBox",viewtarget:"viewTarget",xchannelselector:"xChannelSelector",ychannelselector:"yChannelSelector",zoomandpan:"zoomAndPan"},d={"xlink:actuate":{prefix:"xlink",name:"actuate",namespace:a.XLINK},"xlink:arcrole":{prefix:"xlink",name:"arcrole",namespace:a.XLINK},"xlink:href":{prefix:"xlink",name:"href",namespace:a.XLINK},"xlink:role":{prefix:"xlink",name:"role",namespace:a.XLINK},"xlink:show":{prefix:"xlink",name:"show",namespace:a.XLINK},"xlink:title":{prefix:"xlink",name:"title",namespace:a.XLINK},"xlink:type":{prefix:"xlink",name:"type",namespace:a.XLINK},"xml:base":{prefix:"xml",name:"base",namespace:a.XML},"xml:lang":{prefix:"xml",name:"lang",namespace:a.XML},"xml:space":{prefix:"xml",name:"space",namespace:a.XML},xmlns:{prefix:"",name:"xmlns",namespace:a.XMLNS},"xmlns:xlink":{prefix:"xmlns",name:"xlink",namespace:a.XMLNS}},p=t.SVG_TAG_NAMES_ADJUSTMENT_MAP={altglyph:"altGlyph",altglyphdef:"altGlyphDef",altglyphitem:"altGlyphItem",animatecolor:"animateColor",animatemotion:"animateMotion",animatetransform:"animateTransform",clippath:"clipPath",feblend:"feBlend",fecolormatrix:"feColorMatrix",fecomponenttransfer:"feComponentTransfer",fecomposite:"feComposite",feconvolvematrix:"feConvolveMatrix",fediffuselighting:"feDiffuseLighting",fedisplacementmap:"feDisplacementMap",fedistantlight:"feDistantLight",feflood:"feFlood",fefunca:"feFuncA",fefuncb:"feFuncB",fefuncg:"feFuncG",fefuncr:"feFuncR",fegaussianblur:"feGaussianBlur",feimage:"feImage",femerge:"feMerge",femergenode:"feMergeNode",femorphology:"feMorphology",feoffset:"feOffset",fepointlight:"fePointLight",fespecularlighting:"feSpecularLighting",fespotlight:"feSpotLight",fetile:"feTile",feturbulence:"feTurbulence",foreignobject:"foreignObject",glyphref:"glyphRef",lineargradient:"linearGradient",radialgradient:"radialGradient",textpath:"textPath"},f={[i.B]:!0,[i.BIG]:!0,[i.BLOCKQUOTE]:!0,[i.BODY]:!0,[i.BR]:!0,[i.CENTER]:!0,[i.CODE]:!0,[i.DD]:!0,[i.DIV]:!0,[i.DL]:!0,[i.DT]:!0,[i.EM]:!0,[i.EMBED]:!0,[i.H1]:!0,[i.H2]:!0,[i.H3]:!0,[i.H4]:!0,[i.H5]:!0,[i.H6]:!0,[i.HEAD]:!0,[i.HR]:!0,[i.I]:!0,[i.IMG]:!0,[i.LI]:!0,[i.LISTING]:!0,[i.MENU]:!0,[i.META]:!0,[i.NOBR]:!0,[i.OL]:!0,[i.P]:!0,[i.PRE]:!0,[i.RUBY]:!0,[i.S]:!0,[i.SMALL]:!0,[i.SPAN]:!0,[i.STRONG]:!0,[i.STRIKE]:!0,[i.SUB]:!0,[i.SUP]:!0,[i.TABLE]:!0,[i.TT]:!0,[i.U]:!0,[i.UL]:!0,[i.VAR]:!0};t.causesExit=function(e){const t=e.tagName;return!!(t===i.FONT&&(null!==o.getTokenAttr(e,s.COLOR)||null!==o.getTokenAttr(e,s.SIZE)||null!==o.getTokenAttr(e,s.FACE)))||f[t]},t.adjustTokenMathMLAttrs=function(e){for(let t=0;t{const i=r.MODE[o];n[i]=function(n){e.ctLoc=e._getCurrentLocation(),t[i].call(this,n)}})),n}}},ljYj:function(e,t,n){"use strict";var o=n("rm/B")(/\d/);e.exports=o},lwAK:function(e,t,n){"use strict";var o;t.__esModule=!0,t.AmpStateContext=void 0;var r=((o=n("q1tI"))&&o.__esModule?o:{default:o}).default.createContext({});t.AmpStateContext=r},lwsE:function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},e.exports.__esModule=!0,e.exports.default=e.exports},mAwW:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{fontFamily:'Consolas, Menlo, Monaco, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace',fontSize:"14px",lineHeight:"1.375",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",background:"#f5f7ff",color:"#5e6687"},'pre[class*="language-"]':{fontFamily:'Consolas, Menlo, Monaco, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace',fontSize:"14px",lineHeight:"1.375",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",background:"#f5f7ff",color:"#5e6687",padding:"1em",margin:".5em 0",overflow:"auto"},'pre > code[class*="language-"]':{fontSize:"1em"},'pre[class*="language-"]::-moz-selection':{textShadow:"none",background:"#dfe2f1"},'pre[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#dfe2f1"},'code[class*="language-"]::-moz-selection':{textShadow:"none",background:"#dfe2f1"},'code[class*="language-"] ::-moz-selection':{textShadow:"none",background:"#dfe2f1"},'pre[class*="language-"]::selection':{textShadow:"none",background:"#dfe2f1"},'pre[class*="language-"] ::selection':{textShadow:"none",background:"#dfe2f1"},'code[class*="language-"]::selection':{textShadow:"none",background:"#dfe2f1"},'code[class*="language-"] ::selection':{textShadow:"none",background:"#dfe2f1"},':not(pre) > code[class*="language-"]':{padding:".1em",borderRadius:".3em"},comment:{color:"#898ea4"},prolog:{color:"#898ea4"},doctype:{color:"#898ea4"},cdata:{color:"#898ea4"},punctuation:{color:"#5e6687"},namespace:{Opacity:".7"},operator:{color:"#c76b29"},boolean:{color:"#c76b29"},number:{color:"#c76b29"},property:{color:"#c08b30"},tag:{color:"#3d8fd1"},string:{color:"#22a2c9"},selector:{color:"#6679cc"},"attr-name":{color:"#c76b29"},entity:{color:"#22a2c9",cursor:"help"},url:{color:"#22a2c9"},".language-css .token.string":{color:"#22a2c9"},".style .token.string":{color:"#22a2c9"},"attr-value":{color:"#ac9739"},keyword:{color:"#ac9739"},control:{color:"#ac9739"},directive:{color:"#ac9739"},unit:{color:"#ac9739"},statement:{color:"#22a2c9"},regex:{color:"#22a2c9"},atrule:{color:"#22a2c9"},placeholder:{color:"#3d8fd1"},variable:{color:"#3d8fd1"},deleted:{textDecoration:"line-through"},inserted:{borderBottom:"1px dotted #202746",textDecoration:"none"},italic:{fontStyle:"italic"},important:{fontWeight:"bold",color:"#c94922"},bold:{fontWeight:"bold"},"pre > code.highlight":{Outline:"0.4em solid #c94922",OutlineOffset:".4em"},".line-numbers .line-numbers-rows":{borderRightColor:"#dfe2f1"},".line-numbers-rows > span:before":{color:"#979db4"},".line-highlight":{background:"linear-gradient(to right, rgba(107, 115, 148, 0.2) 70%, rgba(107, 115, 148, 0))"}}},mPvQ:function(e,t,n){var o=n("5fIB"),r=n("rlHP"),i=n("KckH"),a=n("kG2m");e.exports=function(e){return o(e)||r(e)||i(e)||a()}},nbFU:function(e,t,n){"use strict";e.exports=function(e,t){var n=e.footnoteById,r=e.footnoteOrder,i=1;for(;i in n;)i++;return i=String(i),r.push(i),n[i]={type:"footnoteDefinition",identifier:i,children:[{type:"paragraph",children:t.children}],position:t.position},o(e,{type:"footnoteReference",identifier:i,position:t.position})};var o=n("/BR8")},niEq:function(e,t,n){"use strict";const o=n("9kwo"),r=n("Ne21"),i=n("lb9w"),a=n("HwUZ");e.exports=class extends o{constructor(e,t){super(e,t),this.opts=t,this.ctLoc=null,this.locBeforeToken=!1}_setErrorLocation(e){this.ctLoc&&(e.startLine=this.ctLoc.startLine,e.startCol=this.ctLoc.startCol,e.startOffset=this.ctLoc.startOffset,e.endLine=this.locBeforeToken?this.ctLoc.startLine:this.ctLoc.endLine,e.endCol=this.locBeforeToken?this.ctLoc.startCol:this.ctLoc.endCol,e.endOffset=this.locBeforeToken?this.ctLoc.startOffset:this.ctLoc.endOffset)}_getOverriddenMethods(e,t){return{_bootstrap(n,o){t._bootstrap.call(this,n,o),a.install(this.tokenizer,r,e.opts),a.install(this.tokenizer,i)},_processInputToken(n){e.ctLoc=n.location,t._processInputToken.call(this,n)},_err(t,n){e.locBeforeToken=n&&n.beforeToken,e._reportError(t)}}}}},o0o1:function(e,t,n){var o=n("fsL8")();e.exports=o;try{regeneratorRuntime=o}catch(r){"object"===typeof globalThis?globalThis.regeneratorRuntime=o:Function("r","regeneratorRuntime = r")(o)}},o8bm:function(e,t,n){"use strict";var o=/[\0\t\n\r]/g;e.exports=function(){var e,t=!0,n=1,r="";return function(i,a,s){var l,c,u,d,p,f=[];i=r+i.toString(a),u=0,r="",t&&(65279===i.charCodeAt(0)&&u++,t=void 0);for(;u code[class*='language-']":{background:"#1e1e3f",padding:"0.1em",borderRadius:"0.3em"},"":{fontWeight:"400"},comment:{color:"#b362ff"},prolog:{color:"#b362ff"},cdata:{color:"#b362ff"},delimiter:{color:"#ff9d00"},keyword:{color:"#ff9d00"},selector:{color:"#ff9d00"},important:{color:"#ff9d00"},atrule:{color:"#ff9d00"},operator:{color:"rgb(255, 180, 84)",background:"none"},"attr-name":{color:"rgb(255, 180, 84)"},punctuation:{color:"#ffffff"},boolean:{color:"rgb(255, 98, 140)"},tag:{color:"rgb(255, 157, 0)"},"tag .punctuation":{color:"rgb(255, 157, 0)"},doctype:{color:"rgb(255, 157, 0)"},builtin:{color:"rgb(255, 157, 0)"},entity:{color:"#6897bb",background:"none"},symbol:{color:"#6897bb"},number:{color:"#ff628c"},property:{color:"#ff628c"},constant:{color:"#ff628c"},variable:{color:"#ff628c"},string:{color:"#a5ff90"},char:{color:"#a5ff90"},"attr-value":{color:"#a5c261"},"attr-value .punctuation":{color:"#a5c261"},"attr-value .punctuation:first-child":{color:"#a9b7c6"},url:{color:"#287bde",textDecoration:"underline",background:"none"},function:{color:"rgb(250, 208, 0)"},regex:{background:"#364135"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},inserted:{background:"#00ff00"},deleted:{background:"#ff000d"},"code.language-css .token.property":{color:"#a9b7c6"},"code.language-css .token.property + .token.punctuation":{color:"#a9b7c6"},"code.language-css .token.id":{color:"#ffc66d"},"code.language-css .token.selector > .token.class":{color:"#ffc66d"},"code.language-css .token.selector > .token.attribute":{color:"#ffc66d"},"code.language-css .token.selector > .token.pseudo-class":{color:"#ffc66d"},"code.language-css .token.selector > .token.pseudo-element":{color:"#ffc66d"},"class-name":{color:"#fb94ff"},".language-css .token.string":{background:"none"},".style .token.string":{background:"none"},"pre .line-highlight":{marginTop:"36px",background:"linear-gradient(to right, rgba(179, 98, 255, 0.17), transparent)"},"pre .line-highlight.line-highlight":{marginTop:"36px",background:"linear-gradient(to right, rgba(179, 98, 255, 0.17), transparent)"},"pre > code.line-highlight":{marginTop:"36px",background:"linear-gradient(to right, rgba(179, 98, 255, 0.17), transparent)"},"pre .line-highlight:before":{content:"''"},"pre > code.line-highlight:before":{content:"''"},"pre .line-highlight[data-end]:after":{content:"''"},"pre > code.line-highlight[data-end]:after":{content:"''"}}},pI64:function(e,t,n){"use strict";e.exports=function(e,t){var n,i,a={},s=t.ordered?"ol":"ul",l=-1;"number"===typeof t.start&&1!==t.start&&(a.start=t.start);n=r(e,t),i=n.length;for(;++l=55296&&e<=57343},t.isSurrogatePair=function(e){return e>=56320&&e<=57343},t.getSurrogatePairCodePoint=function(e,t){return 1024*(e-55296)+9216+t},t.isControlCodePoint=function(e){return 32!==e&&10!==e&&13!==e&&9!==e&&12!==e&&e>=1&&e<=31||e>=127&&e<=159},t.isUndefinedCodePoint=function(e){return e>=64976&&e<=65007||o.indexOf(e)>-1}},pe0m:function(e,t,n){"use strict";e.exports=function(e){return null===e||void 0===e?[]:"length"in e?e:[e]}},penn:function(e,t,n){e.exports=n("YK6v")},qD0n:function(e,t){function n(e){this.stack[this.stack.length-2].checked="taskListCheckValueChecked"===e.type}t.exit={taskListCheckValueChecked:n,taskListCheckValueUnchecked:n,paragraph:function(e){var t,n=this.stack[this.stack.length-2],o=this.stack[this.stack.length-1],r=n.children,i=o.children[0],a=-1;if(n&&"listItem"===n.type&&"boolean"===typeof n.checked&&i&&"text"===i.type){for(;++a-1||r(i.events,"linePrefix")<4?e.interrupt(i.parser.constructs.flow,n,t)(a):t(a)}},partial:!0};e.exports=s},rRyo:function(e,t,n){"use strict";e.exports=function(e,t){var n,i=e.definition(t.identifier);if(!i)return r(e,t);n={src:o(i.url||""),alt:t.alt},null!==i.title&&void 0!==i.title&&(n.title=i.title);return e(t,"img",n)};var o=n("xGQ6"),r=n("WniP")},rS7C:function(e,t,n){"use strict";var o=n("F6fn"),r=n("bAF5"),i=n("r3IV"),a=n("TTG4").parse,s=n("vfP8").parse;e.exports=function(e,t,n){var r=n?function(e){var t,n=e.length,o=-1,r={};for(;++o code[class*="language-"]':{background:"#282a36",padding:".1em",borderRadius:".3em",whiteSpace:"normal"},comment:{color:"#6272a4"},prolog:{color:"#6272a4"},doctype:{color:"#6272a4"},cdata:{color:"#6272a4"},punctuation:{color:"#f8f8f2"},".namespace":{Opacity:".7"},property:{color:"#ff79c6"},tag:{color:"#ff79c6"},constant:{color:"#ff79c6"},symbol:{color:"#ff79c6"},deleted:{color:"#ff79c6"},boolean:{color:"#bd93f9"},number:{color:"#bd93f9"},selector:{color:"#50fa7b"},"attr-name":{color:"#50fa7b"},string:{color:"#50fa7b"},char:{color:"#50fa7b"},builtin:{color:"#50fa7b"},inserted:{color:"#50fa7b"},operator:{color:"#f8f8f2"},entity:{color:"#f8f8f2",cursor:"help"},url:{color:"#f8f8f2"},".language-css .token.string":{color:"#f8f8f2"},".style .token.string":{color:"#f8f8f2"},variable:{color:"#f8f8f2"},atrule:{color:"#f1fa8c"},"attr-value":{color:"#f1fa8c"},function:{color:"#f1fa8c"},"class-name":{color:"#f1fa8c"},keyword:{color:"#8be9fd"},regex:{color:"#ffb86c"},important:{color:"#ffb86c",fontWeight:"bold"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"}}},srZV:function(e,t,n){"use strict";const o=n("9kwo"),r=n("CGnT"),i=n("HwUZ");e.exports=class extends o{constructor(e,t){super(e,t),this.posTracker=i.install(e,r),this.lastErrOffset=-1}_reportError(e){this.lastErrOffset!==this.posTracker.offset&&(this.lastErrOffset=this.posTracker.offset,super._reportError(e))}}},tCBg:function(e,t,n){var o=n("C+bE"),r=n("qXWd");e.exports=function(e,t){return!t||"object"!==o(t)&&"function"!==typeof t?r(e):t}},tgGP:function(e,t,n){"use strict";var o=n("ueQ+"),r=n("+OJB"),i=n("c6jy");e.exports=l;var a={}.hasOwnProperty,s=["history","path","basename","stem","extname","dirname"];function l(e){var t,n;if(e){if("string"===typeof e||i(e))e={contents:e};else if("message"in e&&"messages"in e)return e}else e={};if(!(this instanceof l))return new l(e);for(this.data={},this.messages=[],this.history=[],this.cwd=r.cwd(),n=-1;++n-1)throw new Error("`"+t+"` cannot be a path: did not expect `"+o.sep+"`")}function u(e,t){if(!e)throw new Error("`"+t+"` cannot be empty")}function d(e,t){if(!e)throw new Error("Setting `"+t+"` requires `path` to be set too")}l.prototype.toString=function(e){return(this.contents||"").toString(e)},Object.defineProperty(l.prototype,"path",{get:function(){return this.history[this.history.length-1]},set:function(e){u(e,"path"),this.path!==e&&this.history.push(e)}}),Object.defineProperty(l.prototype,"dirname",{get:function(){return"string"===typeof this.path?o.dirname(this.path):void 0},set:function(e){d(this.path,"dirname"),this.path=o.join(e||"",this.basename)}}),Object.defineProperty(l.prototype,"basename",{get:function(){return"string"===typeof this.path?o.basename(this.path):void 0},set:function(e){u(e,"basename"),c(e,"basename"),this.path=o.join(this.dirname||"",e)}}),Object.defineProperty(l.prototype,"extname",{get:function(){return"string"===typeof this.path?o.extname(this.path):void 0},set:function(e){if(c(e,"extname"),d(this.path,"extname"),e){if(46!==e.charCodeAt(0))throw new Error("`extname` must start with `.`");if(e.indexOf(".",1)>-1)throw new Error("`extname` cannot contain multiple dots")}this.path=o.join(this.dirname,this.stem+(e||""))}}),Object.defineProperty(l.prototype,"stem",{get:function(){return"string"===typeof this.path?o.basename(this.path,this.extname):void 0},set:function(e){u(e,"stem"),c(e,"stem"),this.path=o.join(this.dirname||"",e+(this.extname||""))}})},u0PD:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'pre[class*="language-"]':{color:"#d4d4d4",fontSize:"13px",textShadow:"none",fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",padding:"1em",margin:".5em 0",overflow:"auto",background:"#1e1e1e"},'code[class*="language-"]':{color:"#d4d4d4",fontSize:"13px",textShadow:"none",fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none"},'pre[class*="language-"]::selection':{textShadow:"none",background:"#b3d4fc"},'code[class*="language-"]::selection':{textShadow:"none",background:"#b3d4fc"},':not(pre) > code[class*="language-"]':{padding:".1em .3em",borderRadius:".3em",color:"#db4c69",background:"#f9f2f4"},".namespace":{Opacity:".7"},comment:{color:"#6a9955"},prolog:{color:"#6a9955"},doctype:{color:"#6a9955"},cdata:{color:"#6a9955"},punctuation:{color:"#d4d4d4"},property:{color:"#9cdcfe"},tag:{color:"#569cd6"},boolean:{color:"#569cd6"},number:{color:"#b5cea8"},constant:{color:"#9CDCFE"},symbol:{color:"#b5cea8"},deleted:{color:"#b5cea8"},selector:{color:"#d7ba7d"},"attr-name":{color:"#9cdcfe"},string:{color:"#ce9178"},char:{color:"#ce9178"},builtin:{color:"#ce9178"},inserted:{color:"#ce9178"},operator:{color:"#d4d4d4",background:"#1e1e1e"},entity:{color:"#4ec9b0",background:"#1e1e1e",cursor:"unset"},url:{color:"#d4d4d4",background:"#1e1e1e"},".language-css .token.string":{color:"#d4d4d4",background:"#1e1e1e"},".style .token.string":{color:"#d4d4d4",background:"#1e1e1e"},atrule:{color:"#c586c0"},"attr-value":{color:"#ce9178"},keyword:{color:"#c586c0"},function:{color:"#dcdcaa"},regex:{color:"#d16969"},important:{color:"#d16969",fontWeight:"bold"},variable:{color:"#d16969"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},"class-name":{color:"#4EC9B0"},parameter:{color:"#9CDCFE"},interpolation:{color:"#9CDCFE"},"punctuation.interpolation-punctuation":{color:"#569cd6"},namespace:{color:"#4ec9b0"},'pre[class*="language-javascript"]':{color:"#4ec9b0"},'code[class*="language-javascript"]':{color:"#4ec9b0"},'pre[class*="language-css"]':{color:"#CE9178"},'code[class*="language-css"]':{color:"#CE9178"},'pre[class*="language-html"]':{color:"#d4d4d4"},'code[class*="language-html"]':{color:"#d4d4d4"},".language-html .token.punctuation":{color:"#808080"},"pre[data-line]":{position:"relative"},'pre[class*="language-"] > code[class*="language-"]':{position:"relative",zIndex:"1"},".line-highlight":{position:"absolute",left:"0",right:"0",padding:"inherit 0",marginTop:"1em",background:"#f7ebc6",boxShadow:"inset 5px 0 0 #f7d87c",zIndex:"0",pointerEvents:"none",lineHeight:"inherit",whiteSpace:"pre"}}},uDje:function(e,t,n){"use strict";var o=n("rm/B")(/\s/);e.exports=o},uGmZ:function(e,t,n){e.exports=n("CGL2")},"ueQ+":function(e,t,n){"use strict";function o(e){var t,n;return r(e),t=47===e.charCodeAt(0),(n=function(e,t){var n,o,r="",i=0,a=-1,s=0,l=-1;for(;++l<=e.length;){if(l2){if((o=r.lastIndexOf("/"))!==r.length-1){o<0?(r="",i=0):i=(r=r.slice(0,o)).length-1-r.lastIndexOf("/"),a=l,s=0;continue}}else if(r.length){r="",i=0,a=l,s=0;continue}t&&(r=r.length?r+"/..":"..",i=2)}else r.length?r+="/"+e.slice(a+1,l):r=e.slice(a+1,l),i=l-a-1;a=l,s=0}else 46===n&&s>-1?s++:s=-1}return r}(e,!t)).length||t||(n="."),n.length&&47===e.charCodeAt(e.length-1)&&(n+="/"),t?"/"+n:n}function r(e){if("string"!==typeof e)throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}t.basename=function(e,t){var n,o,i,a,s=0,l=-1;if(void 0!==t&&"string"!==typeof t)throw new TypeError('"ext" argument must be a string');if(r(e),n=e.length,void 0===t||!t.length||t.length>e.length){for(;n--;)if(47===e.charCodeAt(n)){if(i){s=n+1;break}}else l<0&&(i=!0,l=n+1);return l<0?"":e.slice(s,l)}if(t===e)return"";o=-1,a=t.length-1;for(;n--;)if(47===e.charCodeAt(n)){if(i){s=n+1;break}}else o<0&&(i=!0,o=n+1),a>-1&&(e.charCodeAt(n)===t.charCodeAt(a--)?a<0&&(l=n):(a=-1,l=o));s===l?l=o:l<0&&(l=e.length);return e.slice(s,l)},t.dirname=function(e){var t,n,o;if(r(e),!e.length)return".";t=-1,o=e.length;for(;--o;)if(47===e.charCodeAt(o)){if(n){t=o;break}}else n||(n=!0);return t<0?47===e.charCodeAt(0)?"/":".":1===t&&47===e.charCodeAt(0)?"//":e.slice(0,t)},t.extname=function(e){var t,n,o,i=-1,a=0,s=-1,l=0;r(e),o=e.length;for(;o--;)if(47!==(n=e.charCodeAt(o)))s<0&&(t=!0,s=o+1),46===n?i<0?i=o:1!==l&&(l=1):i>-1&&(l=-1);else if(t){a=o+1;break}if(i<0||s<0||0===l||1===l&&i===s-1&&i===a+1)return"";return e.slice(i,s)},t.join=function(){var e,t=-1;for(;++t0&&("\r"===c||"\n"===c)&&"html"===i.type&&(s[s.length-1]=s[s.length-1].replace(/(\r?\n|\r)$/," "),c=" "),s.push(t.handle(i,e,t,{before:c,after:o})),c=s[s.length-1].slice(-1);return s.join("")}},uzq8:function(e,t,n){"use strict";e.exports=l;var o=n("Zasy"),r=n("AJTF"),i=!0,a="skip",s=!1;function l(e,t,n,l){var c,u;"function"===typeof t&&"function"!==typeof n&&(l=n,n=t,t=null),u=o(t),c=l?-1:1,function e(o,d,p){var f,h="object"===typeof o&&null!==o?o:{};"string"===typeof h.type&&(f="string"===typeof h.tagName?h.tagName:"string"===typeof h.name?h.name:void 0,m.displayName="node ("+r(h.type+(f?"<"+f+">":""))+")");return m;function m(){var r,f,h=p.concat(o),m=[];if((!t||u(o,d,p[p.length-1]||null))&&(m=function(e){if(null!==e&&"object"===typeof e&&"length"in e)return e;if("number"===typeof e)return[i,e];return[e]}(n(o,p)))[0]===s)return m;if(o.children&&m[0]!==a)for(f=(l?o.children.length:-1)+c;f>-1&&f code[class*="language-"]':{whiteSpace:"normal",borderRadius:"0.2em",padding:"0.1em"},".language-css > code":{color:"#fd9170"},".language-sass > code":{color:"#fd9170"},".language-scss > code":{color:"#fd9170"},'[class*="language-"] .namespace':{Opacity:"0.7"},atrule:{color:"#c792ea"},"attr-name":{color:"#ffcb6b"},"attr-value":{color:"#a5e844"},attribute:{color:"#a5e844"},boolean:{color:"#c792ea"},builtin:{color:"#ffcb6b"},cdata:{color:"#80cbc4"},char:{color:"#80cbc4"},class:{color:"#ffcb6b"},"class-name":{color:"#f2ff00"},comment:{color:"#616161"},constant:{color:"#c792ea"},deleted:{color:"#ff6666"},doctype:{color:"#616161"},entity:{color:"#ff6666"},function:{color:"#c792ea"},hexcode:{color:"#f2ff00"},id:{color:"#c792ea",fontWeight:"bold"},important:{color:"#c792ea",fontWeight:"bold"},inserted:{color:"#80cbc4"},keyword:{color:"#c792ea"},number:{color:"#fd9170"},operator:{color:"#89ddff"},prolog:{color:"#616161"},property:{color:"#80cbc4"},"pseudo-class":{color:"#a5e844"},"pseudo-element":{color:"#a5e844"},punctuation:{color:"#89ddff"},regex:{color:"#f2ff00"},selector:{color:"#ff6666"},string:{color:"#a5e844"},symbol:{color:"#c792ea"},tag:{color:"#ff6666"},unit:{color:"#fd9170"},url:{color:"#ff6666"},variable:{color:"#ff6666"}}},wGQB:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={'code[class*="language-"]':{color:"#ccc",background:"none",fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",fontSize:"1em",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none"},'pre[class*="language-"]':{color:"#ccc",background:"#2d2d2d",fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",fontSize:"1em",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",padding:"1em",margin:".5em 0",overflow:"auto"},':not(pre) > code[class*="language-"]':{background:"#2d2d2d",padding:".1em",borderRadius:".3em",whiteSpace:"normal"},comment:{color:"#999"},"block-comment":{color:"#999"},prolog:{color:"#999"},doctype:{color:"#999"},cdata:{color:"#999"},punctuation:{color:"#ccc"},tag:{color:"#e2777a"},"attr-name":{color:"#e2777a"},namespace:{color:"#e2777a"},deleted:{color:"#e2777a"},"function-name":{color:"#6196cc"},boolean:{color:"#f08d49"},number:{color:"#f08d49"},function:{color:"#f08d49"},property:{color:"#f8c555"},"class-name":{color:"#f8c555"},constant:{color:"#f8c555"},symbol:{color:"#f8c555"},selector:{color:"#cc99cd"},important:{color:"#cc99cd",fontWeight:"bold"},atrule:{color:"#cc99cd"},keyword:{color:"#cc99cd"},builtin:{color:"#cc99cd"},string:{color:"#7ec699"},char:{color:"#7ec699"},"attr-value":{color:"#7ec699"},regex:{color:"#7ec699"},variable:{color:"#7ec699"},operator:{color:"#67cdcc"},entity:{color:"#67cdcc",cursor:"help"},url:{color:"#67cdcc"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},inserted:{color:"green"}}},wH4i:function(e,t,n){"use strict";var o,r=n("penn"),i=n("jv5L"),a=n("ywEd");e.exports=function(e){var t=this.data();!o&&(this.Parser&&this.Parser.prototype&&this.Parser.prototype.blockTokenizers||this.Compiler&&this.Compiler.prototype&&this.Compiler.prototype.visitors)&&(o=!0,console.warn("[remark-gfm] Warning: please upgrade to remark 13 to use this plugin"));function n(e,n){t[e]?t[e].push(n):t[e]=[n]}n("micromarkExtensions",r(e)),n("fromMarkdownExtensions",i),n("toMarkdownExtensions",a(e))}},wJMj:function(e,t,n){"use strict";e.exports=function(e,t,n){"string"!==typeof t&&(n=t,t=void 0);return function(e){var t=e||{},n=function(e,t){var n=-1;for(;++n-1&&(D.call(this,e),F.call(this,e))}function z(){h("atHardBreak",!0)}function U(){var e=this.resume();this.stack[this.stack.length-1].value=e}function G(){var e=this.resume();this.stack[this.stack.length-1].value=e}function W(){var e=this.resume();this.stack[this.stack.length-1].value=e}function K(){var e=this.stack[this.stack.length-1];m("inReference")?(e.type+="Reference",e.referenceType=m("referenceType")||"shortcut",delete e.url,delete e.title):(delete e.identifier,delete e.label,delete e.referenceType),h("referenceType")}function j(){var e=this.stack[this.stack.length-1];m("inReference")?(e.type+="Reference",e.referenceType=m("referenceType")||"shortcut",delete e.url,delete e.title):(delete e.identifier,delete e.label,delete e.referenceType),h("referenceType")}function Y(e){this.stack[this.stack.length-2].identifier=a(this.sliceSerialize(e)).toLowerCase()}function Q(){var e=this.stack[this.stack.length-1],t=this.resume();this.stack[this.stack.length-1].label=t,h("inReference",!0),"link"===this.stack[this.stack.length-1].type?this.stack[this.stack.length-1].children=e.children:this.stack[this.stack.length-1].alt=t}function V(){var e=this.resume();this.stack[this.stack.length-1].url=e}function q(){var e=this.resume();this.stack[this.stack.length-1].title=e}function X(){h("inReference")}function J(){h("referenceType","collapsed")}function Z(e){var t=this.resume();this.stack[this.stack.length-1].label=t,this.stack[this.stack.length-1].identifier=a(this.sliceSerialize(e)).toLowerCase(),h("referenceType","full")}function $(e){h("characterReferenceType",e.type)}function ee(e){var t,n,o=this.sliceSerialize(e),r=m("characterReferenceType");r?(t=s(o,"characterReferenceMarkerNumeric"===r?10:16),h("characterReferenceType")):t=d(o),(n=this.stack.pop()).value+=t,n.position.end=g(e.end)}function te(e){F.call(this,e),this.stack[this.stack.length-1].url=this.sliceSerialize(e)}function ne(e){F.call(this,e),this.stack[this.stack.length-1].url="mailto:"+this.sliceSerialize(e)}function oe(){return{type:"blockquote",children:[]}}function re(){return{type:"code",lang:null,meta:null,value:""}}function ie(){return{type:"inlineCode",value:""}}function ae(){return{type:"definition",identifier:"",label:null,title:null,url:""}}function se(){return{type:"emphasis",children:[]}}function le(){return{type:"heading",depth:void 0,children:[]}}function ce(){return{type:"break"}}function ue(){return{type:"html",value:""}}function de(){return{type:"image",title:null,url:"",alt:null}}function pe(){return{type:"link",title:null,url:"",children:[]}}function fe(e){return{type:"list",ordered:"listOrdered"===e.type,start:null,spread:e._spread,children:[]}}function he(e){return{type:"listItem",spread:e._spread,checked:null,children:[]}}function me(){return{type:"paragraph",children:[]}}function ge(){return{type:"strong",children:[]}}function Te(){return{type:"text",value:""}}function Ee(){return{type:"thematicBreak"}}}(n)(u(l(n).document().write(c()(e,t,!0))))};var o=n("IW26"),r=n("NOby"),i=n("TDhK"),a=n("Bh6z"),s=n("Z0IX"),l=n("0RbX"),c=n("o8bm"),u=n("1mpw"),d=n("WtKE"),p=n("/qNp");function f(e,t){var n,o;for(n in t)o=i.call(e,n)?e[n]:e[n]={},"canContainEols"===n||"transforms"===n?e[n]=[].concat(o,t[n]):Object.assign(o,t[n])}},wYf1:function(e,t,n){var o=n("uzhd"),r=n("gsvO"),i=n("55fs");e.exports=function(e){var t=e||{},n=t.tableCellPadding,a=t.tablePipeAlign,s=t.stringLength,l=n?" ":"|";return{unsafe:[{character:"\r",inConstruct:"tableCell"},{character:"\n",inConstruct:"tableCell"},{atBreak:!0,character:"|",after:"[\t :-]"},{character:"|",inConstruct:"tableCell"},{atBreak:!0,character:":",after:"-"},{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{table:function(e,t,n){return u(function(e,t){var n=e.children,o=-1,r=n.length,i=[],a=t.enter("table");for(;++o=55296&&s<=57343){if(s>=55296&&s<=56319&&i+1=56320&&l<=57343){u+=encodeURIComponent(e[i]+e[i+1]),i++;continue}u+="%EF%BF%BD"}else u+=encodeURIComponent(e[i]);return u}r.defaultChars=";/?:@&=+$,-_.!~*'()#",r.componentChars="-_.!~*'()",e.exports=r},xkQk:function(e,t,n){"use strict";var o=n("EBzq");e.exports=i,i.wrap=o;var r=[].slice;function i(){var e=[],t={run:function(){var t=-1,n=r.call(arguments,0,-1),i=arguments[arguments.length-1];if("function"!==typeof i)throw new Error("Expected function as last argument, not "+i);function a(s){var l=e[++t],c=r.call(arguments,0),u=c.slice(1),d=n.length,p=-1;if(s)i(s);else{for(;++p code[class*="language-"]':{background:"#2b2b2b",padding:"0.1em",borderRadius:"0.3em",whiteSpace:"normal"},comment:{color:"#d4d0ab"},prolog:{color:"#d4d0ab"},doctype:{color:"#d4d0ab"},cdata:{color:"#d4d0ab"},punctuation:{color:"#fefefe"},property:{color:"#ffa07a"},tag:{color:"#ffa07a"},constant:{color:"#ffa07a"},symbol:{color:"#ffa07a"},deleted:{color:"#ffa07a"},boolean:{color:"#00e0e0"},number:{color:"#00e0e0"},selector:{color:"#abe338"},"attr-name":{color:"#abe338"},string:{color:"#abe338"},char:{color:"#abe338"},builtin:{color:"#abe338"},inserted:{color:"#abe338"},operator:{color:"#00e0e0"},entity:{color:"#00e0e0",cursor:"help"},url:{color:"#00e0e0"},".language-css .token.string":{color:"#00e0e0"},".style .token.string":{color:"#00e0e0"},variable:{color:"#00e0e0"},atrule:{color:"#ffd700"},"attr-value":{color:"#ffd700"},function:{color:"#ffd700"},keyword:{color:"#00e0e0"},regex:{color:"#ffd700"},important:{color:"#ffd700",fontWeight:"bold"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"}}},ywEd:function(e,t,n){var o=n("oDdY"),r=n("K/gC"),i=n("wYf1"),a=n("vSfO"),s=n("UhtW");e.exports=function(e){var t=s({handlers:{},join:[],unsafe:[],options:{}},{extensions:[o,r,i(e),a]});return Object.assign(t.options,{handlers:t.handlers,join:t.join,unsafe:t.unsafe})}},z2ZG:function(e,t,n){"use strict";var o=n("U6jy"),r=n("dKIx");e.exports=function(e){var t,n,i=e.length,a=[],s=[],l=-1;for(;++l=0;o--){const r=e.openElements.items[o];if(r===t.element)break;e._isSpecialElement(r)&&(n=r)}return n||(e.openElements.popUntilElementPopped(t.element),e.activeFormattingElements.removeEntry(t)),n}function q(e,t,n){let o=t,r=e.openElements.getCommonAncestor(t);for(let i=0,a=r;a!==n;i++,a=r){r=e.openElements.getCommonAncestor(a);const n=e.activeFormattingElements.getElementEntry(a),s=n&&i>=3;!n||s?(s&&e.activeFormattingElements.removeEntry(n),e.openElements.remove(a)):(a=X(e,n),o===t&&(e.activeFormattingElements.bookmark=n),e.treeAdapter.detachNode(o),e.treeAdapter.appendChild(a,o),o=a)}return o}function X(e,t){const n=e.treeAdapter.getNamespaceURI(t.element),o=e.treeAdapter.createElement(t.token.tagName,n,t.token.attrs);return e.openElements.replace(t.element,o),t.element=o,o}function J(e,t,n){if(e._isElementCausesFosterParenting(t))e._fosterParentElement(n);else{const o=e.treeAdapter.getTagName(t),r=e.treeAdapter.getNamespaceURI(t);o===g.TEMPLATE&&r===T.HTML&&(t=e.treeAdapter.getTemplateContent(t)),e.treeAdapter.appendChild(t,n)}}function Z(e,t,n){const o=e.treeAdapter.getNamespaceURI(n.element),r=n.token,i=e.treeAdapter.createElement(r.tagName,o,r.attrs);e._adoptNodes(t,i),e.treeAdapter.appendChild(t,i),e.activeFormattingElements.insertElementAfterBookmark(i,n.token),e.activeFormattingElements.removeEntry(n),e.openElements.remove(n.element),e.openElements.insertAfter(t,i)}function $(e,t){let n;for(let o=0;o<8&&(n=Q(e,t),n);o++){const t=V(e,n);if(!t)break;e.activeFormattingElements.bookmark=n;const o=q(e,t,n.element),r=e.openElements.getCommonAncestor(n.element);e.treeAdapter.detachNode(o),J(e,r,o),Z(e,t,n)}}function ee(){}function te(e){e._err(f.misplacedDoctype)}function ne(e,t){e._appendCommentNode(t,e.openElements.currentTmplContent||e.openElements.current)}function oe(e,t){e._appendCommentNode(t,e.document)}function re(e,t){e._insertCharacters(t)}function ie(e){e.stopped=!0}function ae(e,t){e._err(f.missingDoctype,{beforeToken:!0}),e.treeAdapter.setDocumentMode(e.document,m.DOCUMENT_MODE.QUIRKS),e.insertionMode=y,e._processToken(t)}function se(e,t){e._insertFakeRootElement(),e.insertionMode=_,e._processToken(t)}function le(e,t){e._insertFakeElement(g.HEAD),e.headElement=e.openElements.current,e.insertionMode=S,e._processToken(t)}function ce(e,t){const n=t.tagName;n===g.HTML?xe(e,t):n===g.BASE||n===g.BASEFONT||n===g.BGSOUND||n===g.LINK||n===g.META?(e._appendElement(t,T.HTML),t.ackSelfClosing=!0):n===g.TITLE?e._switchToTextParsing(t,o.MODE.RCDATA):n===g.NOSCRIPT?e.options.scriptingEnabled?e._switchToTextParsing(t,o.MODE.RAWTEXT):(e._insertElement(t,T.HTML),e.insertionMode=C):n===g.NOFRAMES||n===g.STYLE?e._switchToTextParsing(t,o.MODE.RAWTEXT):n===g.SCRIPT?e._switchToTextParsing(t,o.MODE.SCRIPT_DATA):n===g.TEMPLATE?(e._insertTemplate(t,T.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=!1,e.insertionMode=F,e._pushTmplInsertionMode(F)):n===g.HEAD?e._err(f.misplacedStartTagForHeadElement):de(e,t)}function ue(e,t){const n=t.tagName;n===g.HEAD?(e.openElements.pop(),e.insertionMode=x):n===g.BODY||n===g.BR||n===g.HTML?de(e,t):n===g.TEMPLATE&&e.openElements.tmplCount>0?(e.openElements.generateImpliedEndTagsThoroughly(),e.openElements.currentTagName!==g.TEMPLATE&&e._err(f.closingOfElementWithOpenChildElements),e.openElements.popUntilTagNamePopped(g.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e._popTmplInsertionMode(),e._resetInsertionMode()):e._err(f.endTagWithoutMatchingOpenElement)}function de(e,t){e.openElements.pop(),e.insertionMode=x,e._processToken(t)}function pe(e,t){const n=t.type===o.EOF_TOKEN?f.openElementsLeftAfterEof:f.disallowedContentInNoscriptInHead;e._err(n),e.openElements.pop(),e.insertionMode=S,e._processToken(t)}function fe(e,t){e._insertFakeElement(g.BODY),e.insertionMode=v,e._processToken(t)}function he(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t)}function me(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t),e.framesetOk=!1}function ge(e,t){e.openElements.hasInButtonScope(g.P)&&e._closePElement(),e._insertElement(t,T.HTML)}function Te(e,t){e.openElements.hasInButtonScope(g.P)&&e._closePElement(),e._insertElement(t,T.HTML),e.skipNextNewLine=!0,e.framesetOk=!1}function Ee(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,T.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}function be(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,T.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=!1}function Ae(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,T.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}function ke(e,t){e._appendElement(t,T.HTML),t.ackSelfClosing=!0}function ye(e,t){e._switchToTextParsing(t,o.MODE.RAWTEXT)}function _e(e,t){e.openElements.currentTagName===g.OPTION&&e.openElements.pop(),e._reconstructActiveFormattingElements(),e._insertElement(t,T.HTML)}function Se(e,t){e.openElements.hasInScope(g.RUBY)&&e.openElements.generateImpliedEndTags(),e._insertElement(t,T.HTML)}function Ce(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,T.HTML)}function xe(e,t){const n=t.tagName;switch(n.length){case 1:n===g.I||n===g.S||n===g.B||n===g.U?Ee(e,t):n===g.P?ge(e,t):n===g.A?function(e,t){const n=e.activeFormattingElements.getElementEntryInScopeWithTagName(g.A);n&&($(e,t),e.openElements.remove(n.element),e.activeFormattingElements.removeEntry(n)),e._reconstructActiveFormattingElements(),e._insertElement(t,T.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}(e,t):Ce(e,t);break;case 2:n===g.DL||n===g.OL||n===g.UL?ge(e,t):n===g.H1||n===g.H2||n===g.H3||n===g.H4||n===g.H5||n===g.H6?function(e,t){e.openElements.hasInButtonScope(g.P)&&e._closePElement();const n=e.openElements.currentTagName;n!==g.H1&&n!==g.H2&&n!==g.H3&&n!==g.H4&&n!==g.H5&&n!==g.H6||e.openElements.pop(),e._insertElement(t,T.HTML)}(e,t):n===g.LI||n===g.DD||n===g.DT?function(e,t){e.framesetOk=!1;const n=t.tagName;for(let o=e.openElements.stackTop;o>=0;o--){const t=e.openElements.items[o],r=e.treeAdapter.getTagName(t);let i=null;if(n===g.LI&&r===g.LI?i=g.LI:n!==g.DD&&n!==g.DT||r!==g.DD&&r!==g.DT||(i=r),i){e.openElements.generateImpliedEndTagsWithExclusion(i),e.openElements.popUntilTagNamePopped(i);break}if(r!==g.ADDRESS&&r!==g.DIV&&r!==g.P&&e._isSpecialElement(t))break}e.openElements.hasInButtonScope(g.P)&&e._closePElement(),e._insertElement(t,T.HTML)}(e,t):n===g.EM||n===g.TT?Ee(e,t):n===g.BR?Ae(e,t):n===g.HR?function(e,t){e.openElements.hasInButtonScope(g.P)&&e._closePElement(),e._appendElement(t,T.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}(e,t):n===g.RB?Se(e,t):n===g.RT||n===g.RP?function(e,t){e.openElements.hasInScope(g.RUBY)&&e.openElements.generateImpliedEndTagsWithExclusion(g.RTC),e._insertElement(t,T.HTML)}(e,t):n!==g.TH&&n!==g.TD&&n!==g.TR&&Ce(e,t);break;case 3:n===g.DIV||n===g.DIR||n===g.NAV?ge(e,t):n===g.PRE?Te(e,t):n===g.BIG?Ee(e,t):n===g.IMG||n===g.WBR?Ae(e,t):n===g.XMP?function(e,t){e.openElements.hasInButtonScope(g.P)&&e._closePElement(),e._reconstructActiveFormattingElements(),e.framesetOk=!1,e._switchToTextParsing(t,o.MODE.RAWTEXT)}(e,t):n===g.SVG?function(e,t){e._reconstructActiveFormattingElements(),p.adjustTokenSVGAttrs(t),p.adjustTokenXMLAttrs(t),t.selfClosing?e._appendElement(t,T.SVG):e._insertElement(t,T.SVG),t.ackSelfClosing=!0}(e,t):n===g.RTC?Se(e,t):n!==g.COL&&Ce(e,t);break;case 4:n===g.HTML?function(e,t){0===e.openElements.tmplCount&&e.treeAdapter.adoptAttributes(e.openElements.items[0],t.attrs)}(e,t):n===g.BASE||n===g.LINK||n===g.META?ce(e,t):n===g.BODY?function(e,t){const n=e.openElements.tryPeekProperlyNestedBodyElement();n&&0===e.openElements.tmplCount&&(e.framesetOk=!1,e.treeAdapter.adoptAttributes(n,t.attrs))}(e,t):n===g.MAIN||n===g.MENU?ge(e,t):n===g.FORM?function(e,t){const n=e.openElements.tmplCount>0;e.formElement&&!n||(e.openElements.hasInButtonScope(g.P)&&e._closePElement(),e._insertElement(t,T.HTML),n||(e.formElement=e.openElements.current))}(e,t):n===g.CODE||n===g.FONT?Ee(e,t):n===g.NOBR?function(e,t){e._reconstructActiveFormattingElements(),e.openElements.hasInScope(g.NOBR)&&($(e,t),e._reconstructActiveFormattingElements()),e._insertElement(t,T.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}(e,t):n===g.AREA?Ae(e,t):n===g.MATH?function(e,t){e._reconstructActiveFormattingElements(),p.adjustTokenMathMLAttrs(t),p.adjustTokenXMLAttrs(t),t.selfClosing?e._appendElement(t,T.MATHML):e._insertElement(t,T.MATHML),t.ackSelfClosing=!0}(e,t):n===g.MENU?function(e,t){e.openElements.hasInButtonScope(g.P)&&e._closePElement(),e._insertElement(t,T.HTML)}(e,t):n!==g.HEAD&&Ce(e,t);break;case 5:n===g.STYLE||n===g.TITLE?ce(e,t):n===g.ASIDE?ge(e,t):n===g.SMALL?Ee(e,t):n===g.TABLE?function(e,t){e.treeAdapter.getDocumentMode(e.document)!==m.DOCUMENT_MODE.QUIRKS&&e.openElements.hasInButtonScope(g.P)&&e._closePElement(),e._insertElement(t,T.HTML),e.framesetOk=!1,e.insertionMode=N}(e,t):n===g.EMBED?Ae(e,t):n===g.INPUT?function(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,T.HTML);const n=o.getTokenAttr(t,E.TYPE);n&&n.toLowerCase()===A||(e.framesetOk=!1),t.ackSelfClosing=!0}(e,t):n===g.PARAM||n===g.TRACK?ke(e,t):n===g.IMAGE?function(e,t){t.tagName=g.IMG,Ae(e,t)}(e,t):n!==g.FRAME&&n!==g.TBODY&&n!==g.TFOOT&&n!==g.THEAD&&Ce(e,t);break;case 6:n===g.SCRIPT?ce(e,t):n===g.CENTER||n===g.FIGURE||n===g.FOOTER||n===g.HEADER||n===g.HGROUP||n===g.DIALOG?ge(e,t):n===g.BUTTON?function(e,t){e.openElements.hasInScope(g.BUTTON)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(g.BUTTON)),e._reconstructActiveFormattingElements(),e._insertElement(t,T.HTML),e.framesetOk=!1}(e,t):n===g.STRIKE||n===g.STRONG?Ee(e,t):n===g.APPLET||n===g.OBJECT?be(e,t):n===g.KEYGEN?Ae(e,t):n===g.SOURCE?ke(e,t):n===g.IFRAME?function(e,t){e.framesetOk=!1,e._switchToTextParsing(t,o.MODE.RAWTEXT)}(e,t):n===g.SELECT?function(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,T.HTML),e.framesetOk=!1,e.insertionMode===N||e.insertionMode===w||e.insertionMode===I||e.insertionMode===L||e.insertionMode===P?e.insertionMode=D:e.insertionMode=H}(e,t):n===g.OPTION?_e(e,t):Ce(e,t);break;case 7:n===g.BGSOUND?ce(e,t):n===g.DETAILS||n===g.ADDRESS||n===g.ARTICLE||n===g.SECTION||n===g.SUMMARY?ge(e,t):n===g.LISTING?Te(e,t):n===g.MARQUEE?be(e,t):n===g.NOEMBED?ye(e,t):n!==g.CAPTION&&Ce(e,t);break;case 8:n===g.BASEFONT?ce(e,t):n===g.FRAMESET?function(e,t){const n=e.openElements.tryPeekProperlyNestedBodyElement();e.framesetOk&&n&&(e.treeAdapter.detachNode(n),e.openElements.popAllUpToHtmlElement(),e._insertElement(t,T.HTML),e.insertionMode=z)}(e,t):n===g.FIELDSET?ge(e,t):n===g.TEXTAREA?function(e,t){e._insertElement(t,T.HTML),e.skipNextNewLine=!0,e.tokenizer.state=o.MODE.RCDATA,e.originalInsertionMode=e.insertionMode,e.framesetOk=!1,e.insertionMode=O}(e,t):n===g.TEMPLATE?ce(e,t):n===g.NOSCRIPT?e.options.scriptingEnabled?ye(e,t):Ce(e,t):n===g.OPTGROUP?_e(e,t):n!==g.COLGROUP&&Ce(e,t);break;case 9:n===g.PLAINTEXT?function(e,t){e.openElements.hasInButtonScope(g.P)&&e._closePElement(),e._insertElement(t,T.HTML),e.tokenizer.state=o.MODE.PLAINTEXT}(e,t):Ce(e,t);break;case 10:n===g.BLOCKQUOTE||n===g.FIGCAPTION?ge(e,t):Ce(e,t);break;default:Ce(e,t)}}function ve(e,t){const n=t.tagName;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n))}function Oe(e,t){const n=t.tagName;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n),e.activeFormattingElements.clearToLastMarker())}function Ne(e,t){const n=t.tagName;for(let o=e.openElements.stackTop;o>0;o--){const t=e.openElements.items[o];if(e.treeAdapter.getTagName(t)===n){e.openElements.generateImpliedEndTagsWithExclusion(n),e.openElements.popUntilElementPopped(t);break}if(e._isSpecialElement(t))break}}function Me(e,t){const n=t.tagName;switch(n.length){case 1:n===g.A||n===g.B||n===g.I||n===g.S||n===g.U?$(e,t):n===g.P?function(e){e.openElements.hasInButtonScope(g.P)||e._insertFakeElement(g.P),e._closePElement()}(e):Ne(e,t);break;case 2:n===g.DL||n===g.UL||n===g.OL?ve(e,t):n===g.LI?function(e){e.openElements.hasInListItemScope(g.LI)&&(e.openElements.generateImpliedEndTagsWithExclusion(g.LI),e.openElements.popUntilTagNamePopped(g.LI))}(e):n===g.DD||n===g.DT?function(e,t){const n=t.tagName;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTagsWithExclusion(n),e.openElements.popUntilTagNamePopped(n))}(e,t):n===g.H1||n===g.H2||n===g.H3||n===g.H4||n===g.H5||n===g.H6?function(e){e.openElements.hasNumberedHeaderInScope()&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilNumberedHeaderPopped())}(e):n===g.BR?function(e){e._reconstructActiveFormattingElements(),e._insertFakeElement(g.BR),e.openElements.pop(),e.framesetOk=!1}(e):n===g.EM||n===g.TT?$(e,t):Ne(e,t);break;case 3:n===g.BIG?$(e,t):n===g.DIR||n===g.DIV||n===g.NAV||n===g.PRE?ve(e,t):Ne(e,t);break;case 4:n===g.BODY?function(e){e.openElements.hasInScope(g.BODY)&&(e.insertionMode=B)}(e):n===g.HTML?function(e,t){e.openElements.hasInScope(g.BODY)&&(e.insertionMode=B,e._processToken(t))}(e,t):n===g.FORM?function(e){const t=e.openElements.tmplCount>0,n=e.formElement;t||(e.formElement=null),(n||t)&&e.openElements.hasInScope(g.FORM)&&(e.openElements.generateImpliedEndTags(),t?e.openElements.popUntilTagNamePopped(g.FORM):e.openElements.remove(n))}(e):n===g.CODE||n===g.FONT||n===g.NOBR?$(e,t):n===g.MAIN||n===g.MENU?ve(e,t):Ne(e,t);break;case 5:n===g.ASIDE?ve(e,t):n===g.SMALL?$(e,t):Ne(e,t);break;case 6:n===g.CENTER||n===g.FIGURE||n===g.FOOTER||n===g.HEADER||n===g.HGROUP||n===g.DIALOG?ve(e,t):n===g.APPLET||n===g.OBJECT?Oe(e,t):n===g.STRIKE||n===g.STRONG?$(e,t):Ne(e,t);break;case 7:n===g.ADDRESS||n===g.ARTICLE||n===g.DETAILS||n===g.SECTION||n===g.SUMMARY||n===g.LISTING?ve(e,t):n===g.MARQUEE?Oe(e,t):Ne(e,t);break;case 8:n===g.FIELDSET?ve(e,t):n===g.TEMPLATE?ue(e,t):Ne(e,t);break;case 10:n===g.BLOCKQUOTE||n===g.FIGCAPTION?ve(e,t):Ne(e,t);break;default:Ne(e,t)}}function we(e,t){e.tmplInsertionModeStackTop>-1?ze(e,t):e.stopped=!0}function Re(e,t){const n=e.openElements.currentTagName;n===g.TABLE||n===g.TBODY||n===g.TFOOT||n===g.THEAD||n===g.TR?(e.pendingCharacterTokens=[],e.hasNonWhitespacePendingCharacterToken=!1,e.originalInsertionMode=e.insertionMode,e.insertionMode=M,e._processToken(t)):Pe(e,t)}function Ie(e,t){const n=t.tagName;switch(n.length){case 2:n===g.TD||n===g.TH||n===g.TR?function(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(g.TBODY),e.insertionMode=I,e._processToken(t)}(e,t):Pe(e,t);break;case 3:n===g.COL?function(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(g.COLGROUP),e.insertionMode=R,e._processToken(t)}(e,t):Pe(e,t);break;case 4:n===g.FORM?function(e,t){e.formElement||0!==e.openElements.tmplCount||(e._insertElement(t,T.HTML),e.formElement=e.openElements.current,e.openElements.pop())}(e,t):Pe(e,t);break;case 5:n===g.TABLE?function(e,t){e.openElements.hasInTableScope(g.TABLE)&&(e.openElements.popUntilTagNamePopped(g.TABLE),e._resetInsertionMode(),e._processToken(t))}(e,t):n===g.STYLE?ce(e,t):n===g.TBODY||n===g.TFOOT||n===g.THEAD?function(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,T.HTML),e.insertionMode=I}(e,t):n===g.INPUT?function(e,t){const n=o.getTokenAttr(t,E.TYPE);n&&n.toLowerCase()===A?e._appendElement(t,T.HTML):Pe(e,t),t.ackSelfClosing=!0}(e,t):Pe(e,t);break;case 6:n===g.SCRIPT?ce(e,t):Pe(e,t);break;case 7:n===g.CAPTION?function(e,t){e.openElements.clearBackToTableContext(),e.activeFormattingElements.insertMarker(),e._insertElement(t,T.HTML),e.insertionMode=w}(e,t):Pe(e,t);break;case 8:n===g.COLGROUP?function(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,T.HTML),e.insertionMode=R}(e,t):n===g.TEMPLATE?ce(e,t):Pe(e,t);break;default:Pe(e,t)}}function Le(e,t){const n=t.tagName;n===g.TABLE?e.openElements.hasInTableScope(g.TABLE)&&(e.openElements.popUntilTagNamePopped(g.TABLE),e._resetInsertionMode()):n===g.TEMPLATE?ue(e,t):n!==g.BODY&&n!==g.CAPTION&&n!==g.COL&&n!==g.COLGROUP&&n!==g.HTML&&n!==g.TBODY&&n!==g.TD&&n!==g.TFOOT&&n!==g.TH&&n!==g.THEAD&&n!==g.TR&&Pe(e,t)}function Pe(e,t){const n=e.fosterParentingEnabled;e.fosterParentingEnabled=!0,e._processTokenInBodyMode(t),e.fosterParentingEnabled=n}function He(e,t){let n=0;if(e.hasNonWhitespacePendingCharacterToken)for(;n0?(e.openElements.popUntilTagNamePopped(g.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e._popTmplInsertionMode(),e._resetInsertionMode(),e._processToken(t)):e.stopped=!0}function Ue(e,t){e.insertionMode=v,e._processToken(t)}function Ge(e,t){e.insertionMode=v,e._processToken(t)}e.exports=class{constructor(e){this.options=u(b,e),this.treeAdapter=this.options.treeAdapter,this.pendingScript=null,this.options.sourceCodeLocationInfo&&l.install(this,a),this.options.onParseError&&l.install(this,s,{onParseError:this.options.onParseError})}parse(e){const t=this.treeAdapter.createDocument();return this._bootstrap(t,null),this.tokenizer.write(e,!0),this._runParsingLoop(null),t}parseFragment(e,t){t||(t=this.treeAdapter.createElement(g.TEMPLATE,T.HTML,[]));const n=this.treeAdapter.createElement("documentmock",T.HTML,[]);this._bootstrap(n,t),this.treeAdapter.getTagName(t)===g.TEMPLATE&&this._pushTmplInsertionMode(F),this._initTokenizerForFragmentParsing(),this._insertFakeRootElement(),this._resetInsertionMode(),this._findFormInFragmentContext(),this.tokenizer.write(e,!0),this._runParsingLoop(null);const o=this.treeAdapter.getFirstChild(n),r=this.treeAdapter.createDocumentFragment();return this._adoptNodes(o,r),r}_bootstrap(e,t){this.tokenizer=new o(this.options),this.stopped=!1,this.insertionMode=k,this.originalInsertionMode="",this.document=e,this.fragmentContext=t,this.headElement=null,this.formElement=null,this.openElements=new r(this.document,this.treeAdapter),this.activeFormattingElements=new i(this.treeAdapter),this.tmplInsertionModeStack=[],this.tmplInsertionModeStackTop=-1,this.currentTmplInsertionMode=null,this.pendingCharacterTokens=[],this.hasNonWhitespacePendingCharacterToken=!1,this.framesetOk=!0,this.skipNextNewLine=!1,this.fosterParentingEnabled=!1}_err(){}_runParsingLoop(e){for(;!this.stopped;){this._setupTokenizerCDATAMode();const t=this.tokenizer.getNextToken();if(t.type===o.HIBERNATION_TOKEN)break;if(this.skipNextNewLine&&(this.skipNextNewLine=!1,t.type===o.WHITESPACE_CHARACTER_TOKEN&&"\n"===t.chars[0])){if(1===t.chars.length)continue;t.chars=t.chars.substr(1)}if(this._processInputToken(t),e&&this.pendingScript)break}}runParsingLoopForCurrentChunk(e,t){if(this._runParsingLoop(t),t&&this.pendingScript){const e=this.pendingScript;return this.pendingScript=null,void t(e)}e&&e()}_setupTokenizerCDATAMode(){const e=this._getAdjustedCurrentElement();this.tokenizer.allowCDATA=e&&e!==this.document&&this.treeAdapter.getNamespaceURI(e)!==T.HTML&&!this._isIntegrationPoint(e)}_switchToTextParsing(e,t){this._insertElement(e,T.HTML),this.tokenizer.state=t,this.originalInsertionMode=this.insertionMode,this.insertionMode=O}switchToPlaintextParsing(){this.insertionMode=O,this.originalInsertionMode=v,this.tokenizer.state=o.MODE.PLAINTEXT}_getAdjustedCurrentElement(){return 0===this.openElements.stackTop&&this.fragmentContext?this.fragmentContext:this.openElements.current}_findFormInFragmentContext(){let e=this.fragmentContext;do{if(this.treeAdapter.getTagName(e)===g.FORM){this.formElement=e;break}e=this.treeAdapter.getParentNode(e)}while(e)}_initTokenizerForFragmentParsing(){if(this.treeAdapter.getNamespaceURI(this.fragmentContext)===T.HTML){const e=this.treeAdapter.getTagName(this.fragmentContext);e===g.TITLE||e===g.TEXTAREA?this.tokenizer.state=o.MODE.RCDATA:e===g.STYLE||e===g.XMP||e===g.IFRAME||e===g.NOEMBED||e===g.NOFRAMES||e===g.NOSCRIPT?this.tokenizer.state=o.MODE.RAWTEXT:e===g.SCRIPT?this.tokenizer.state=o.MODE.SCRIPT_DATA:e===g.PLAINTEXT&&(this.tokenizer.state=o.MODE.PLAINTEXT)}}_setDocumentType(e){const t=e.name||"",n=e.publicId||"",o=e.systemId||"";this.treeAdapter.setDocumentType(this.document,t,n,o)}_attachElementToTree(e){if(this._shouldFosterParentOnInsertion())this._fosterParentElement(e);else{const t=this.openElements.currentTmplContent||this.openElements.current;this.treeAdapter.appendChild(t,e)}}_appendElement(e,t){const n=this.treeAdapter.createElement(e.tagName,t,e.attrs);this._attachElementToTree(n)}_insertElement(e,t){const n=this.treeAdapter.createElement(e.tagName,t,e.attrs);this._attachElementToTree(n),this.openElements.push(n)}_insertFakeElement(e){const t=this.treeAdapter.createElement(e,T.HTML,[]);this._attachElementToTree(t),this.openElements.push(t)}_insertTemplate(e){const t=this.treeAdapter.createElement(e.tagName,T.HTML,e.attrs),n=this.treeAdapter.createDocumentFragment();this.treeAdapter.setTemplateContent(t,n),this._attachElementToTree(t),this.openElements.push(t)}_insertFakeRootElement(){const e=this.treeAdapter.createElement(g.HTML,T.HTML,[]);this.treeAdapter.appendChild(this.openElements.current,e),this.openElements.push(e)}_appendCommentNode(e,t){const n=this.treeAdapter.createCommentNode(e.data);this.treeAdapter.appendChild(t,n)}_insertCharacters(e){if(this._shouldFosterParentOnInsertion())this._fosterParentText(e.chars);else{const t=this.openElements.currentTmplContent||this.openElements.current;this.treeAdapter.insertText(t,e.chars)}}_adoptNodes(e,t){for(let n=this.treeAdapter.getFirstChild(e);n;n=this.treeAdapter.getFirstChild(e))this.treeAdapter.detachNode(n),this.treeAdapter.appendChild(t,n)}_shouldProcessTokenInForeignContent(e){const t=this._getAdjustedCurrentElement();if(!t||t===this.document)return!1;const n=this.treeAdapter.getNamespaceURI(t);if(n===T.HTML)return!1;if(this.treeAdapter.getTagName(t)===g.ANNOTATION_XML&&n===T.MATHML&&e.type===o.START_TAG_TOKEN&&e.tagName===g.SVG)return!1;const r=e.type===o.CHARACTER_TOKEN||e.type===o.NULL_CHARACTER_TOKEN||e.type===o.WHITESPACE_CHARACTER_TOKEN;return(!(e.type===o.START_TAG_TOKEN&&e.tagName!==g.MGLYPH&&e.tagName!==g.MALIGNMARK)&&!r||!this._isIntegrationPoint(t,T.MATHML))&&((e.type!==o.START_TAG_TOKEN&&!r||!this._isIntegrationPoint(t,T.HTML))&&e.type!==o.EOF_TOKEN)}_processToken(e){Y[this.insertionMode][e.type](this,e)}_processTokenInBodyMode(e){Y.IN_BODY_MODE[e.type](this,e)}_processTokenInForeignContent(e){e.type===o.CHARACTER_TOKEN?function(e,t){e._insertCharacters(t),e.framesetOk=!1}(this,e):e.type===o.NULL_CHARACTER_TOKEN?function(e,t){t.chars=h.REPLACEMENT_CHARACTER,e._insertCharacters(t)}(this,e):e.type===o.WHITESPACE_CHARACTER_TOKEN?re(this,e):e.type===o.COMMENT_TOKEN?ne(this,e):e.type===o.START_TAG_TOKEN?function(e,t){if(p.causesExit(t)&&!e.fragmentContext){for(;e.treeAdapter.getNamespaceURI(e.openElements.current)!==T.HTML&&!e._isIntegrationPoint(e.openElements.current);)e.openElements.pop();e._processToken(t)}else{const n=e._getAdjustedCurrentElement(),o=e.treeAdapter.getNamespaceURI(n);o===T.MATHML?p.adjustTokenMathMLAttrs(t):o===T.SVG&&(p.adjustTokenSVGTagName(t),p.adjustTokenSVGAttrs(t)),p.adjustTokenXMLAttrs(t),t.selfClosing?e._appendElement(t,o):e._insertElement(t,o),t.ackSelfClosing=!0}}(this,e):e.type===o.END_TAG_TOKEN&&function(e,t){for(let n=e.openElements.stackTop;n>0;n--){const o=e.openElements.items[n];if(e.treeAdapter.getNamespaceURI(o)===T.HTML){e._processToken(t);break}if(e.treeAdapter.getTagName(o).toLowerCase()===t.tagName){e.openElements.popUntilElementPopped(o);break}}}(this,e)}_processInputToken(e){this._shouldProcessTokenInForeignContent(e)?this._processTokenInForeignContent(e):this._processToken(e),e.type===o.START_TAG_TOKEN&&e.selfClosing&&!e.ackSelfClosing&&this._err(f.nonVoidHtmlElementStartTagWithTrailingSolidus)}_isIntegrationPoint(e,t){const n=this.treeAdapter.getTagName(e),o=this.treeAdapter.getNamespaceURI(e),r=this.treeAdapter.getAttrList(e);return p.isIntegrationPoint(n,o,r,t)}_reconstructActiveFormattingElements(){const e=this.activeFormattingElements.length;if(e){let t=e,n=null;do{if(t--,n=this.activeFormattingElements.entries[t],n.type===i.MARKER_ENTRY||this.openElements.contains(n.element)){t++;break}}while(t>0);for(let o=t;o=0;e--){let n=this.openElements.items[e];0===e&&(t=!0,this.fragmentContext&&(n=this.fragmentContext));const o=this.treeAdapter.getTagName(n),r=K[o];if(r){this.insertionMode=r;break}if(!(t||o!==g.TD&&o!==g.TH)){this.insertionMode=P;break}if(!t&&o===g.HEAD){this.insertionMode=S;break}if(o===g.SELECT){this._resetInsertionModeForSelect(e);break}if(o===g.TEMPLATE){this.insertionMode=this.currentTmplInsertionMode;break}if(o===g.HTML){this.insertionMode=this.headElement?x:_;break}if(t){this.insertionMode=v;break}}}_resetInsertionModeForSelect(e){if(e>0)for(let t=e-1;t>0;t--){const e=this.openElements.items[t],n=this.treeAdapter.getTagName(e);if(n===g.TEMPLATE)break;if(n===g.TABLE)return void(this.insertionMode=D)}this.insertionMode=H}_pushTmplInsertionMode(e){this.tmplInsertionModeStack.push(e),this.tmplInsertionModeStackTop++,this.currentTmplInsertionMode=e}_popTmplInsertionMode(){this.tmplInsertionModeStack.pop(),this.tmplInsertionModeStackTop--,this.currentTmplInsertionMode=this.tmplInsertionModeStack[this.tmplInsertionModeStackTop]}_isElementCausesFosterParenting(e){const t=this.treeAdapter.getTagName(e);return t===g.TABLE||t===g.TBODY||t===g.TFOOT||t===g.THEAD||t===g.TR}_shouldFosterParentOnInsertion(){return this.fosterParentingEnabled&&this._isElementCausesFosterParenting(this.openElements.current)}_findFosterParentingLocation(){const e={parent:null,beforeElement:null};for(let t=this.openElements.stackTop;t>=0;t--){const n=this.openElements.items[t],o=this.treeAdapter.getTagName(n),r=this.treeAdapter.getNamespaceURI(n);if(o===g.TEMPLATE&&r===T.HTML){e.parent=this.treeAdapter.getTemplateContent(n);break}if(o===g.TABLE){e.parent=this.treeAdapter.getParentNode(n),e.parent?e.beforeElement=n:e.parent=this.openElements.items[t-1];break}}return e.parent||(e.parent=this.openElements.items[0]),e}_fosterParentElement(e){const t=this._findFosterParentingLocation();t.beforeElement?this.treeAdapter.insertBefore(t.parent,e,t.beforeElement):this.treeAdapter.appendChild(t.parent,e)}_fosterParentText(e){const t=this._findFosterParentingLocation();t.beforeElement?this.treeAdapter.insertTextBefore(t.parent,e,t.beforeElement):this.treeAdapter.insertText(t.parent,e)}_isSpecialElement(e){const t=this.treeAdapter.getTagName(e),n=this.treeAdapter.getNamespaceURI(e);return m.SPECIAL_ELEMENTS[n][t]}}},zktx:function(e,t,n){"use strict";var o=n("FWC9"),r=n("DUvi"),i=n("vGni"),a=o.boolean,s=o.number,l=o.spaceSeparated,c=o.commaSeparated,u=o.commaOrSpaceSeparated;e.exports=r({space:"svg",attributes:{accentHeight:"accent-height",alignmentBaseline:"alignment-baseline",arabicForm:"arabic-form",baselineShift:"baseline-shift",capHeight:"cap-height",className:"class",clipPath:"clip-path",clipRule:"clip-rule",colorInterpolation:"color-interpolation",colorInterpolationFilters:"color-interpolation-filters",colorProfile:"color-profile",colorRendering:"color-rendering",crossOrigin:"crossorigin",dataType:"datatype",dominantBaseline:"dominant-baseline",enableBackground:"enable-background",fillOpacity:"fill-opacity",fillRule:"fill-rule",floodColor:"flood-color",floodOpacity:"flood-opacity",fontFamily:"font-family",fontSize:"font-size",fontSizeAdjust:"font-size-adjust",fontStretch:"font-stretch",fontStyle:"font-style",fontVariant:"font-variant",fontWeight:"font-weight",glyphName:"glyph-name",glyphOrientationHorizontal:"glyph-orientation-horizontal",glyphOrientationVertical:"glyph-orientation-vertical",hrefLang:"hreflang",horizAdvX:"horiz-adv-x",horizOriginX:"horiz-origin-x",horizOriginY:"horiz-origin-y",imageRendering:"image-rendering",letterSpacing:"letter-spacing",lightingColor:"lighting-color",markerEnd:"marker-end",markerMid:"marker-mid",markerStart:"marker-start",navDown:"nav-down",navDownLeft:"nav-down-left",navDownRight:"nav-down-right",navLeft:"nav-left",navNext:"nav-next",navPrev:"nav-prev",navRight:"nav-right",navUp:"nav-up",navUpLeft:"nav-up-left",navUpRight:"nav-up-right",onAbort:"onabort",onActivate:"onactivate",onAfterPrint:"onafterprint",onBeforePrint:"onbeforeprint",onBegin:"onbegin",onCancel:"oncancel",onCanPlay:"oncanplay",onCanPlayThrough:"oncanplaythrough",onChange:"onchange",onClick:"onclick",onClose:"onclose",onCopy:"oncopy",onCueChange:"oncuechange",onCut:"oncut",onDblClick:"ondblclick",onDrag:"ondrag",onDragEnd:"ondragend",onDragEnter:"ondragenter",onDragExit:"ondragexit",onDragLeave:"ondragleave",onDragOver:"ondragover",onDragStart:"ondragstart",onDrop:"ondrop",onDurationChange:"ondurationchange",onEmptied:"onemptied",onEnd:"onend",onEnded:"onended",onError:"onerror",onFocus:"onfocus",onFocusIn:"onfocusin",onFocusOut:"onfocusout",onHashChange:"onhashchange",onInput:"oninput",onInvalid:"oninvalid",onKeyDown:"onkeydown",onKeyPress:"onkeypress",onKeyUp:"onkeyup",onLoad:"onload",onLoadedData:"onloadeddata",onLoadedMetadata:"onloadedmetadata",onLoadStart:"onloadstart",onMessage:"onmessage",onMouseDown:"onmousedown",onMouseEnter:"onmouseenter",onMouseLeave:"onmouseleave",onMouseMove:"onmousemove",onMouseOut:"onmouseout",onMouseOver:"onmouseover",onMouseUp:"onmouseup",onMouseWheel:"onmousewheel",onOffline:"onoffline",onOnline:"ononline",onPageHide:"onpagehide",onPageShow:"onpageshow",onPaste:"onpaste",onPause:"onpause",onPlay:"onplay",onPlaying:"onplaying",onPopState:"onpopstate",onProgress:"onprogress",onRateChange:"onratechange",onRepeat:"onrepeat",onReset:"onreset",onResize:"onresize",onScroll:"onscroll",onSeeked:"onseeked",onSeeking:"onseeking",onSelect:"onselect",onShow:"onshow",onStalled:"onstalled",onStorage:"onstorage",onSubmit:"onsubmit",onSuspend:"onsuspend",onTimeUpdate:"ontimeupdate",onToggle:"ontoggle",onUnload:"onunload",onVolumeChange:"onvolumechange",onWaiting:"onwaiting",onZoom:"onzoom",overlinePosition:"overline-position",overlineThickness:"overline-thickness",paintOrder:"paint-order",panose1:"panose-1",pointerEvents:"pointer-events",referrerPolicy:"referrerpolicy",renderingIntent:"rendering-intent",shapeRendering:"shape-rendering",stopColor:"stop-color",stopOpacity:"stop-opacity",strikethroughPosition:"strikethrough-position",strikethroughThickness:"strikethrough-thickness",strokeDashArray:"stroke-dasharray",strokeDashOffset:"stroke-dashoffset",strokeLineCap:"stroke-linecap",strokeLineJoin:"stroke-linejoin",strokeMiterLimit:"stroke-miterlimit",strokeOpacity:"stroke-opacity",strokeWidth:"stroke-width",tabIndex:"tabindex",textAnchor:"text-anchor",textDecoration:"text-decoration",textRendering:"text-rendering",typeOf:"typeof",underlinePosition:"underline-position",underlineThickness:"underline-thickness",unicodeBidi:"unicode-bidi",unicodeRange:"unicode-range",unitsPerEm:"units-per-em",vAlphabetic:"v-alphabetic",vHanging:"v-hanging",vIdeographic:"v-ideographic",vMathematical:"v-mathematical",vectorEffect:"vector-effect",vertAdvY:"vert-adv-y",vertOriginX:"vert-origin-x",vertOriginY:"vert-origin-y",wordSpacing:"word-spacing",writingMode:"writing-mode",xHeight:"x-height",playbackOrder:"playbackorder",timelineBegin:"timelinebegin"},transform:i,properties:{about:u,accentHeight:s,accumulate:null,additive:null,alignmentBaseline:null,alphabetic:s,amplitude:s,arabicForm:null,ascent:s,attributeName:null,attributeType:null,azimuth:s,bandwidth:null,baselineShift:null,baseFrequency:null,baseProfile:null,bbox:null,begin:null,bias:s,by:null,calcMode:null,capHeight:s,className:l,clip:null,clipPath:null,clipPathUnits:null,clipRule:null,color:null,colorInterpolation:null,colorInterpolationFilters:null,colorProfile:null,colorRendering:null,content:null,contentScriptType:null,contentStyleType:null,crossOrigin:null,cursor:null,cx:null,cy:null,d:null,dataType:null,defaultAction:null,descent:s,diffuseConstant:s,direction:null,display:null,dur:null,divisor:s,dominantBaseline:null,download:a,dx:null,dy:null,edgeMode:null,editable:null,elevation:s,enableBackground:null,end:null,event:null,exponent:s,externalResourcesRequired:null,fill:null,fillOpacity:s,fillRule:null,filter:null,filterRes:null,filterUnits:null,floodColor:null,floodOpacity:null,focusable:null,focusHighlight:null,fontFamily:null,fontSize:null,fontSizeAdjust:null,fontStretch:null,fontStyle:null,fontVariant:null,fontWeight:null,format:null,fr:null,from:null,fx:null,fy:null,g1:c,g2:c,glyphName:c,glyphOrientationHorizontal:null,glyphOrientationVertical:null,glyphRef:null,gradientTransform:null,gradientUnits:null,handler:null,hanging:s,hatchContentUnits:null,hatchUnits:null,height:null,href:null,hrefLang:null,horizAdvX:s,horizOriginX:s,horizOriginY:s,id:null,ideographic:s,imageRendering:null,initialVisibility:null,in:null,in2:null,intercept:s,k:s,k1:s,k2:s,k3:s,k4:s,kernelMatrix:u,kernelUnitLength:null,keyPoints:null,keySplines:null,keyTimes:null,kerning:null,lang:null,lengthAdjust:null,letterSpacing:null,lightingColor:null,limitingConeAngle:s,local:null,markerEnd:null,markerMid:null,markerStart:null,markerHeight:null,markerUnits:null,markerWidth:null,mask:null,maskContentUnits:null,maskUnits:null,mathematical:null,max:null,media:null,mediaCharacterEncoding:null,mediaContentEncodings:null,mediaSize:s,mediaTime:null,method:null,min:null,mode:null,name:null,navDown:null,navDownLeft:null,navDownRight:null,navLeft:null,navNext:null,navPrev:null,navRight:null,navUp:null,navUpLeft:null,navUpRight:null,numOctaves:null,observer:null,offset:null,onAbort:null,onActivate:null,onAfterPrint:null,onBeforePrint:null,onBegin:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnd:null,onEnded:null,onError:null,onFocus:null,onFocusIn:null,onFocusOut:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadStart:null,onMessage:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onMouseWheel:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRepeat:null,onReset:null,onResize:null,onScroll:null,onSeeked:null,onSeeking:null,onSelect:null,onShow:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnload:null,onVolumeChange:null,onWaiting:null,onZoom:null,opacity:null,operator:null,order:null,orient:null,orientation:null,origin:null,overflow:null,overlay:null,overlinePosition:s,overlineThickness:s,paintOrder:null,panose1:null,path:null,pathLength:s,patternContentUnits:null,patternTransform:null,patternUnits:null,phase:null,ping:l,pitch:null,playbackOrder:null,pointerEvents:null,points:null,pointsAtX:s,pointsAtY:s,pointsAtZ:s,preserveAlpha:null,preserveAspectRatio:null,primitiveUnits:null,propagate:null,property:u,r:null,radius:null,referrerPolicy:null,refX:null,refY:null,rel:u,rev:u,renderingIntent:null,repeatCount:null,repeatDur:null,requiredExtensions:u,requiredFeatures:u,requiredFonts:u,requiredFormats:u,resource:null,restart:null,result:null,rotate:null,rx:null,ry:null,scale:null,seed:null,shapeRendering:null,side:null,slope:null,snapshotTime:null,specularConstant:s,specularExponent:s,spreadMethod:null,spacing:null,startOffset:null,stdDeviation:null,stemh:null,stemv:null,stitchTiles:null,stopColor:null,stopOpacity:null,strikethroughPosition:s,strikethroughThickness:s,string:null,stroke:null,strokeDashArray:u,strokeDashOffset:null,strokeLineCap:null,strokeLineJoin:null,strokeMiterLimit:s,strokeOpacity:s,strokeWidth:null,style:null,surfaceScale:s,syncBehavior:null,syncBehaviorDefault:null,syncMaster:null,syncTolerance:null,syncToleranceDefault:null,systemLanguage:u,tabIndex:s,tableValues:null,target:null,targetX:s,targetY:s,textAnchor:null,textDecoration:null,textRendering:null,textLength:null,timelineBegin:null,title:null,transformBehavior:null,type:null,typeOf:u,to:null,transform:null,u1:null,u2:null,underlinePosition:s,underlineThickness:s,unicode:null,unicodeBidi:null,unicodeRange:null,unitsPerEm:s,values:null,vAlphabetic:s,vMathematical:s,vectorEffect:null,vHanging:s,vIdeographic:s,version:null,vertAdvY:s,vertOriginX:s,vertOriginY:s,viewBox:null,viewTarget:null,visibility:null,width:null,widths:null,wordSpacing:null,writingMode:null,x:null,x1:null,x2:null,xChannelSelector:null,xHeight:s,y:null,y1:null,y2:null,yChannelSelector:null,z:null,zoomAndPan:null}})},zpDW:function(e,t,n){"use strict";const o=n("YpxX"),r=n("pRQB"),i=n("cRLj"),a=n("2l2D"),s=r.CODE_POINTS,l=r.CODE_POINT_SEQUENCES,c={128:8364,130:8218,131:402,132:8222,133:8230,134:8224,135:8225,136:710,137:8240,138:352,139:8249,140:338,142:381,145:8216,146:8217,147:8220,148:8221,149:8226,150:8211,151:8212,152:732,153:8482,154:353,155:8250,156:339,158:382,159:376},u="DATA_STATE",d="RCDATA_STATE",p="RAWTEXT_STATE",f="SCRIPT_DATA_STATE",h="PLAINTEXT_STATE",m="TAG_OPEN_STATE",g="END_TAG_OPEN_STATE",T="TAG_NAME_STATE",E="RCDATA_LESS_THAN_SIGN_STATE",b="RCDATA_END_TAG_OPEN_STATE",A="RCDATA_END_TAG_NAME_STATE",k="RAWTEXT_LESS_THAN_SIGN_STATE",y="RAWTEXT_END_TAG_OPEN_STATE",_="RAWTEXT_END_TAG_NAME_STATE",S="SCRIPT_DATA_LESS_THAN_SIGN_STATE",C="SCRIPT_DATA_END_TAG_OPEN_STATE",x="SCRIPT_DATA_END_TAG_NAME_STATE",v="SCRIPT_DATA_ESCAPE_START_STATE",O="SCRIPT_DATA_ESCAPE_START_DASH_STATE",N="SCRIPT_DATA_ESCAPED_STATE",M="SCRIPT_DATA_ESCAPED_DASH_STATE",w="SCRIPT_DATA_ESCAPED_DASH_DASH_STATE",R="SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE",I="SCRIPT_DATA_ESCAPED_END_TAG_OPEN_STATE",L="SCRIPT_DATA_ESCAPED_END_TAG_NAME_STATE",P="SCRIPT_DATA_DOUBLE_ESCAPE_START_STATE",H="SCRIPT_DATA_DOUBLE_ESCAPED_STATE",D="SCRIPT_DATA_DOUBLE_ESCAPED_DASH_STATE",F="SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH_STATE",B="SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE",z="SCRIPT_DATA_DOUBLE_ESCAPE_END_STATE",U="BEFORE_ATTRIBUTE_NAME_STATE",G="ATTRIBUTE_NAME_STATE",W="AFTER_ATTRIBUTE_NAME_STATE",K="BEFORE_ATTRIBUTE_VALUE_STATE",j="ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE",Y="ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE",Q="ATTRIBUTE_VALUE_UNQUOTED_STATE",V="AFTER_ATTRIBUTE_VALUE_QUOTED_STATE",q="SELF_CLOSING_START_TAG_STATE",X="BOGUS_COMMENT_STATE",J="MARKUP_DECLARATION_OPEN_STATE",Z="COMMENT_START_STATE",$="COMMENT_START_DASH_STATE",ee="COMMENT_STATE",te="COMMENT_LESS_THAN_SIGN_STATE",ne="COMMENT_LESS_THAN_SIGN_BANG_STATE",oe="COMMENT_LESS_THAN_SIGN_BANG_DASH_STATE",re="COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH_STATE",ie="COMMENT_END_DASH_STATE",ae="COMMENT_END_STATE",se="COMMENT_END_BANG_STATE",le="DOCTYPE_STATE",ce="BEFORE_DOCTYPE_NAME_STATE",ue="DOCTYPE_NAME_STATE",de="AFTER_DOCTYPE_NAME_STATE",pe="AFTER_DOCTYPE_PUBLIC_KEYWORD_STATE",fe="BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE",he="DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE",me="DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE",ge="AFTER_DOCTYPE_PUBLIC_IDENTIFIER_STATE",Te="BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE",Ee="AFTER_DOCTYPE_SYSTEM_KEYWORD_STATE",be="BEFORE_DOCTYPE_SYSTEM_IDENTIFIER_STATE",Ae="DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE",ke="DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE",ye="AFTER_DOCTYPE_SYSTEM_IDENTIFIER_STATE",_e="BOGUS_DOCTYPE_STATE",Se="CDATA_SECTION_STATE",Ce="CDATA_SECTION_BRACKET_STATE",xe="CDATA_SECTION_END_STATE",ve="CHARACTER_REFERENCE_STATE",Oe="NAMED_CHARACTER_REFERENCE_STATE",Ne="AMBIGUOS_AMPERSAND_STATE",Me="NUMERIC_CHARACTER_REFERENCE_STATE",we="HEXADEMICAL_CHARACTER_REFERENCE_START_STATE",Re="DECIMAL_CHARACTER_REFERENCE_START_STATE",Ie="HEXADEMICAL_CHARACTER_REFERENCE_STATE",Le="DECIMAL_CHARACTER_REFERENCE_STATE",Pe="NUMERIC_CHARACTER_REFERENCE_END_STATE";function He(e){return e===s.SPACE||e===s.LINE_FEED||e===s.TABULATION||e===s.FORM_FEED}function De(e){return e>=s.DIGIT_0&&e<=s.DIGIT_9}function Fe(e){return e>=s.LATIN_CAPITAL_A&&e<=s.LATIN_CAPITAL_Z}function Be(e){return e>=s.LATIN_SMALL_A&&e<=s.LATIN_SMALL_Z}function ze(e){return Be(e)||Fe(e)}function Ue(e){return ze(e)||De(e)}function Ge(e){return e>=s.LATIN_CAPITAL_A&&e<=s.LATIN_CAPITAL_F}function We(e){return e>=s.LATIN_SMALL_A&&e<=s.LATIN_SMALL_F}function Ke(e){return e+32}function je(e){return e<=65535?String.fromCharCode(e):(e-=65536,String.fromCharCode(e>>>10&1023|55296)+String.fromCharCode(56320|1023&e))}function Ye(e){return String.fromCharCode(Ke(e))}function Qe(e,t){const n=i[++e];let o=++e,r=o+n-1;for(;o<=r;){const e=o+r>>>1,a=i[e];if(at))return i[e+n];r=e-1}}return-1}class Ve{constructor(){this.preprocessor=new o,this.tokenQueue=[],this.allowCDATA=!1,this.state=u,this.returnState="",this.charRefCode=-1,this.tempBuff=[],this.lastStartTagName="",this.consumedAfterSnapshot=-1,this.active=!1,this.currentCharacterToken=null,this.currentToken=null,this.currentAttr=null}_err(){}_errOnNextCodePoint(e){this._consume(),this._err(e),this._unconsume()}getNextToken(){for(;!this.tokenQueue.length&&this.active;){this.consumedAfterSnapshot=0;const e=this._consume();this._ensureHibernation()||this[this.state](e)}return this.tokenQueue.shift()}write(e,t){this.active=!0,this.preprocessor.write(e,t)}insertHtmlAtCurrentPos(e){this.active=!0,this.preprocessor.insertHtmlAtCurrentPos(e)}_ensureHibernation(){if(this.preprocessor.endOfChunkHit){for(;this.consumedAfterSnapshot>0;this.consumedAfterSnapshot--)this.preprocessor.retreat();return this.active=!1,this.tokenQueue.push({type:Ve.HIBERNATION_TOKEN}),!0}return!1}_consume(){return this.consumedAfterSnapshot++,this.preprocessor.advance()}_unconsume(){this.consumedAfterSnapshot--,this.preprocessor.retreat()}_reconsumeInState(e){this.state=e,this._unconsume()}_consumeSequenceIfMatch(e,t,n){let o=0,r=!0;const i=e.length;let a,l=0,c=t;for(;l0&&(c=this._consume(),o++),c===s.EOF){r=!1;break}if(a=e[l],c!==a&&(n||c!==Ke(a))){r=!1;break}}if(!r)for(;o--;)this._unconsume();return r}_isTempBufferEqualToScriptString(){if(this.tempBuff.length!==l.SCRIPT_STRING.length)return!1;for(let e=0;e0&&this._err(a.endTagWithAttributes),e.selfClosing&&this._err(a.endTagWithTrailingSolidus)),this.tokenQueue.push(e)}_emitCurrentCharacterToken(){this.currentCharacterToken&&(this.tokenQueue.push(this.currentCharacterToken),this.currentCharacterToken=null)}_emitEOFToken(){this._createEOFToken(),this._emitCurrentToken()}_appendCharToCurrentCharacterToken(e,t){this.currentCharacterToken&&this.currentCharacterToken.type!==e&&this._emitCurrentCharacterToken(),this.currentCharacterToken?this.currentCharacterToken.chars+=t:this._createCharacterToken(e,t)}_emitCodePoint(e){let t=Ve.CHARACTER_TOKEN;He(e)?t=Ve.WHITESPACE_CHARACTER_TOKEN:e===s.NULL&&(t=Ve.NULL_CHARACTER_TOKEN),this._appendCharToCurrentCharacterToken(t,je(e))}_emitSeveralCodePoints(e){for(let t=0;t-1;){const e=i[o],r=e<7;r&&1&e&&(t=2&e?[i[++o],i[++o]]:[i[++o]],n=0);const a=this._consume();if(this.tempBuff.push(a),n++,a===s.EOF)break;o=r?4&e?Qe(o,a):-1:a===e?++o:-1}for(;n--;)this.tempBuff.pop(),this._unconsume();return t}_isCharacterReferenceInAttribute(){return this.returnState===j||this.returnState===Y||this.returnState===Q}_isCharacterReferenceAttributeQuirk(e){if(!e&&this._isCharacterReferenceInAttribute()){const e=this._consume();return this._unconsume(),e===s.EQUALS_SIGN||Ue(e)}return!1}_flushCodePointsConsumedAsCharacterReference(){if(this._isCharacterReferenceInAttribute())for(let e=0;e")):e===s.NULL?(this._err(a.unexpectedNullCharacter),this.state=N,this._emitChars(r.REPLACEMENT_CHARACTER)):e===s.EOF?(this._err(a.eofInScriptHtmlCommentLikeText),this._emitEOFToken()):(this.state=N,this._emitCodePoint(e))}[R](e){e===s.SOLIDUS?(this.tempBuff=[],this.state=I):ze(e)?(this.tempBuff=[],this._emitChars("<"),this._reconsumeInState(P)):(this._emitChars("<"),this._reconsumeInState(N))}[I](e){ze(e)?(this._createEndTagToken(),this._reconsumeInState(L)):(this._emitChars("")):e===s.NULL?(this._err(a.unexpectedNullCharacter),this.state=H,this._emitChars(r.REPLACEMENT_CHARACTER)):e===s.EOF?(this._err(a.eofInScriptHtmlCommentLikeText),this._emitEOFToken()):(this.state=H,this._emitCodePoint(e))}[B](e){e===s.SOLIDUS?(this.tempBuff=[],this.state=z,this._emitChars("/")):this._reconsumeInState(H)}[z](e){He(e)||e===s.SOLIDUS||e===s.GREATER_THAN_SIGN?(this.state=this._isTempBufferEqualToScriptString()?N:H,this._emitCodePoint(e)):Fe(e)?(this.tempBuff.push(Ke(e)),this._emitCodePoint(e)):Be(e)?(this.tempBuff.push(e),this._emitCodePoint(e)):this._reconsumeInState(H)}[U](e){He(e)||(e===s.SOLIDUS||e===s.GREATER_THAN_SIGN||e===s.EOF?this._reconsumeInState(W):e===s.EQUALS_SIGN?(this._err(a.unexpectedEqualsSignBeforeAttributeName),this._createAttr("="),this.state=G):(this._createAttr(""),this._reconsumeInState(G)))}[G](e){He(e)||e===s.SOLIDUS||e===s.GREATER_THAN_SIGN||e===s.EOF?(this._leaveAttrName(W),this._unconsume()):e===s.EQUALS_SIGN?this._leaveAttrName(K):Fe(e)?this.currentAttr.name+=Ye(e):e===s.QUOTATION_MARK||e===s.APOSTROPHE||e===s.LESS_THAN_SIGN?(this._err(a.unexpectedCharacterInAttributeName),this.currentAttr.name+=je(e)):e===s.NULL?(this._err(a.unexpectedNullCharacter),this.currentAttr.name+=r.REPLACEMENT_CHARACTER):this.currentAttr.name+=je(e)}[W](e){He(e)||(e===s.SOLIDUS?this.state=q:e===s.EQUALS_SIGN?this.state=K:e===s.GREATER_THAN_SIGN?(this.state=u,this._emitCurrentToken()):e===s.EOF?(this._err(a.eofInTag),this._emitEOFToken()):(this._createAttr(""),this._reconsumeInState(G)))}[K](e){He(e)||(e===s.QUOTATION_MARK?this.state=j:e===s.APOSTROPHE?this.state=Y:e===s.GREATER_THAN_SIGN?(this._err(a.missingAttributeValue),this.state=u,this._emitCurrentToken()):this._reconsumeInState(Q))}[j](e){e===s.QUOTATION_MARK?this.state=V:e===s.AMPERSAND?(this.returnState=j,this.state=ve):e===s.NULL?(this._err(a.unexpectedNullCharacter),this.currentAttr.value+=r.REPLACEMENT_CHARACTER):e===s.EOF?(this._err(a.eofInTag),this._emitEOFToken()):this.currentAttr.value+=je(e)}[Y](e){e===s.APOSTROPHE?this.state=V:e===s.AMPERSAND?(this.returnState=Y,this.state=ve):e===s.NULL?(this._err(a.unexpectedNullCharacter),this.currentAttr.value+=r.REPLACEMENT_CHARACTER):e===s.EOF?(this._err(a.eofInTag),this._emitEOFToken()):this.currentAttr.value+=je(e)}[Q](e){He(e)?this._leaveAttrValue(U):e===s.AMPERSAND?(this.returnState=Q,this.state=ve):e===s.GREATER_THAN_SIGN?(this._leaveAttrValue(u),this._emitCurrentToken()):e===s.NULL?(this._err(a.unexpectedNullCharacter),this.currentAttr.value+=r.REPLACEMENT_CHARACTER):e===s.QUOTATION_MARK||e===s.APOSTROPHE||e===s.LESS_THAN_SIGN||e===s.EQUALS_SIGN||e===s.GRAVE_ACCENT?(this._err(a.unexpectedCharacterInUnquotedAttributeValue),this.currentAttr.value+=je(e)):e===s.EOF?(this._err(a.eofInTag),this._emitEOFToken()):this.currentAttr.value+=je(e)}[V](e){He(e)?this._leaveAttrValue(U):e===s.SOLIDUS?this._leaveAttrValue(q):e===s.GREATER_THAN_SIGN?(this._leaveAttrValue(u),this._emitCurrentToken()):e===s.EOF?(this._err(a.eofInTag),this._emitEOFToken()):(this._err(a.missingWhitespaceBetweenAttributes),this._reconsumeInState(U))}[q](e){e===s.GREATER_THAN_SIGN?(this.currentToken.selfClosing=!0,this.state=u,this._emitCurrentToken()):e===s.EOF?(this._err(a.eofInTag),this._emitEOFToken()):(this._err(a.unexpectedSolidusInTag),this._reconsumeInState(U))}[X](e){e===s.GREATER_THAN_SIGN?(this.state=u,this._emitCurrentToken()):e===s.EOF?(this._emitCurrentToken(),this._emitEOFToken()):e===s.NULL?(this._err(a.unexpectedNullCharacter),this.currentToken.data+=r.REPLACEMENT_CHARACTER):this.currentToken.data+=je(e)}[J](e){this._consumeSequenceIfMatch(l.DASH_DASH_STRING,e,!0)?(this._createCommentToken(),this.state=Z):this._consumeSequenceIfMatch(l.DOCTYPE_STRING,e,!1)?this.state=le:this._consumeSequenceIfMatch(l.CDATA_START_STRING,e,!0)?this.allowCDATA?this.state=Se:(this._err(a.cdataInHtmlContent),this._createCommentToken(),this.currentToken.data="[CDATA[",this.state=X):this._ensureHibernation()||(this._err(a.incorrectlyOpenedComment),this._createCommentToken(),this._reconsumeInState(X))}[Z](e){e===s.HYPHEN_MINUS?this.state=$:e===s.GREATER_THAN_SIGN?(this._err(a.abruptClosingOfEmptyComment),this.state=u,this._emitCurrentToken()):this._reconsumeInState(ee)}[$](e){e===s.HYPHEN_MINUS?this.state=ae:e===s.GREATER_THAN_SIGN?(this._err(a.abruptClosingOfEmptyComment),this.state=u,this._emitCurrentToken()):e===s.EOF?(this._err(a.eofInComment),this._emitCurrentToken(),this._emitEOFToken()):(this.currentToken.data+="-",this._reconsumeInState(ee))}[ee](e){e===s.HYPHEN_MINUS?this.state=ie:e===s.LESS_THAN_SIGN?(this.currentToken.data+="<",this.state=te):e===s.NULL?(this._err(a.unexpectedNullCharacter),this.currentToken.data+=r.REPLACEMENT_CHARACTER):e===s.EOF?(this._err(a.eofInComment),this._emitCurrentToken(),this._emitEOFToken()):this.currentToken.data+=je(e)}[te](e){e===s.EXCLAMATION_MARK?(this.currentToken.data+="!",this.state=ne):e===s.LESS_THAN_SIGN?this.currentToken.data+="!":this._reconsumeInState(ee)}[ne](e){e===s.HYPHEN_MINUS?this.state=oe:this._reconsumeInState(ee)}[oe](e){e===s.HYPHEN_MINUS?this.state=re:this._reconsumeInState(ie)}[re](e){e!==s.GREATER_THAN_SIGN&&e!==s.EOF&&this._err(a.nestedComment),this._reconsumeInState(ae)}[ie](e){e===s.HYPHEN_MINUS?this.state=ae:e===s.EOF?(this._err(a.eofInComment),this._emitCurrentToken(),this._emitEOFToken()):(this.currentToken.data+="-",this._reconsumeInState(ee))}[ae](e){e===s.GREATER_THAN_SIGN?(this.state=u,this._emitCurrentToken()):e===s.EXCLAMATION_MARK?this.state=se:e===s.HYPHEN_MINUS?this.currentToken.data+="-":e===s.EOF?(this._err(a.eofInComment),this._emitCurrentToken(),this._emitEOFToken()):(this.currentToken.data+="--",this._reconsumeInState(ee))}[se](e){e===s.HYPHEN_MINUS?(this.currentToken.data+="--!",this.state=ie):e===s.GREATER_THAN_SIGN?(this._err(a.incorrectlyClosedComment),this.state=u,this._emitCurrentToken()):e===s.EOF?(this._err(a.eofInComment),this._emitCurrentToken(),this._emitEOFToken()):(this.currentToken.data+="--!",this._reconsumeInState(ee))}[le](e){He(e)?this.state=ce:e===s.GREATER_THAN_SIGN?this._reconsumeInState(ce):e===s.EOF?(this._err(a.eofInDoctype),this._createDoctypeToken(null),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(a.missingWhitespaceBeforeDoctypeName),this._reconsumeInState(ce))}[ce](e){He(e)||(Fe(e)?(this._createDoctypeToken(Ye(e)),this.state=ue):e===s.NULL?(this._err(a.unexpectedNullCharacter),this._createDoctypeToken(r.REPLACEMENT_CHARACTER),this.state=ue):e===s.GREATER_THAN_SIGN?(this._err(a.missingDoctypeName),this._createDoctypeToken(null),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this.state=u):e===s.EOF?(this._err(a.eofInDoctype),this._createDoctypeToken(null),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._createDoctypeToken(je(e)),this.state=ue))}[ue](e){He(e)?this.state=de:e===s.GREATER_THAN_SIGN?(this.state=u,this._emitCurrentToken()):Fe(e)?this.currentToken.name+=Ye(e):e===s.NULL?(this._err(a.unexpectedNullCharacter),this.currentToken.name+=r.REPLACEMENT_CHARACTER):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):this.currentToken.name+=je(e)}[de](e){He(e)||(e===s.GREATER_THAN_SIGN?(this.state=u,this._emitCurrentToken()):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):this._consumeSequenceIfMatch(l.PUBLIC_STRING,e,!1)?this.state=pe:this._consumeSequenceIfMatch(l.SYSTEM_STRING,e,!1)?this.state=Ee:this._ensureHibernation()||(this._err(a.invalidCharacterSequenceAfterDoctypeName),this.currentToken.forceQuirks=!0,this._reconsumeInState(_e)))}[pe](e){He(e)?this.state=fe:e===s.QUOTATION_MARK?(this._err(a.missingWhitespaceAfterDoctypePublicKeyword),this.currentToken.publicId="",this.state=he):e===s.APOSTROPHE?(this._err(a.missingWhitespaceAfterDoctypePublicKeyword),this.currentToken.publicId="",this.state=me):e===s.GREATER_THAN_SIGN?(this._err(a.missingDoctypePublicIdentifier),this.currentToken.forceQuirks=!0,this.state=u,this._emitCurrentToken()):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(a.missingQuoteBeforeDoctypePublicIdentifier),this.currentToken.forceQuirks=!0,this._reconsumeInState(_e))}[fe](e){He(e)||(e===s.QUOTATION_MARK?(this.currentToken.publicId="",this.state=he):e===s.APOSTROPHE?(this.currentToken.publicId="",this.state=me):e===s.GREATER_THAN_SIGN?(this._err(a.missingDoctypePublicIdentifier),this.currentToken.forceQuirks=!0,this.state=u,this._emitCurrentToken()):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(a.missingQuoteBeforeDoctypePublicIdentifier),this.currentToken.forceQuirks=!0,this._reconsumeInState(_e)))}[he](e){e===s.QUOTATION_MARK?this.state=ge:e===s.NULL?(this._err(a.unexpectedNullCharacter),this.currentToken.publicId+=r.REPLACEMENT_CHARACTER):e===s.GREATER_THAN_SIGN?(this._err(a.abruptDoctypePublicIdentifier),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this.state=u):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):this.currentToken.publicId+=je(e)}[me](e){e===s.APOSTROPHE?this.state=ge:e===s.NULL?(this._err(a.unexpectedNullCharacter),this.currentToken.publicId+=r.REPLACEMENT_CHARACTER):e===s.GREATER_THAN_SIGN?(this._err(a.abruptDoctypePublicIdentifier),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this.state=u):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):this.currentToken.publicId+=je(e)}[ge](e){He(e)?this.state=Te:e===s.GREATER_THAN_SIGN?(this.state=u,this._emitCurrentToken()):e===s.QUOTATION_MARK?(this._err(a.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),this.currentToken.systemId="",this.state=Ae):e===s.APOSTROPHE?(this._err(a.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),this.currentToken.systemId="",this.state=ke):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(a.missingQuoteBeforeDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this._reconsumeInState(_e))}[Te](e){He(e)||(e===s.GREATER_THAN_SIGN?(this._emitCurrentToken(),this.state=u):e===s.QUOTATION_MARK?(this.currentToken.systemId="",this.state=Ae):e===s.APOSTROPHE?(this.currentToken.systemId="",this.state=ke):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(a.missingQuoteBeforeDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this._reconsumeInState(_e)))}[Ee](e){He(e)?this.state=be:e===s.QUOTATION_MARK?(this._err(a.missingWhitespaceAfterDoctypeSystemKeyword),this.currentToken.systemId="",this.state=Ae):e===s.APOSTROPHE?(this._err(a.missingWhitespaceAfterDoctypeSystemKeyword),this.currentToken.systemId="",this.state=ke):e===s.GREATER_THAN_SIGN?(this._err(a.missingDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this.state=u,this._emitCurrentToken()):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(a.missingQuoteBeforeDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this._reconsumeInState(_e))}[be](e){He(e)||(e===s.QUOTATION_MARK?(this.currentToken.systemId="",this.state=Ae):e===s.APOSTROPHE?(this.currentToken.systemId="",this.state=ke):e===s.GREATER_THAN_SIGN?(this._err(a.missingDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this.state=u,this._emitCurrentToken()):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(a.missingQuoteBeforeDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this._reconsumeInState(_e)))}[Ae](e){e===s.QUOTATION_MARK?this.state=ye:e===s.NULL?(this._err(a.unexpectedNullCharacter),this.currentToken.systemId+=r.REPLACEMENT_CHARACTER):e===s.GREATER_THAN_SIGN?(this._err(a.abruptDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this.state=u):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):this.currentToken.systemId+=je(e)}[ke](e){e===s.APOSTROPHE?this.state=ye:e===s.NULL?(this._err(a.unexpectedNullCharacter),this.currentToken.systemId+=r.REPLACEMENT_CHARACTER):e===s.GREATER_THAN_SIGN?(this._err(a.abruptDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this.state=u):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):this.currentToken.systemId+=je(e)}[ye](e){He(e)||(e===s.GREATER_THAN_SIGN?(this._emitCurrentToken(),this.state=u):e===s.EOF?(this._err(a.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(a.unexpectedCharacterAfterDoctypeSystemIdentifier),this._reconsumeInState(_e)))}[_e](e){e===s.GREATER_THAN_SIGN?(this._emitCurrentToken(),this.state=u):e===s.NULL?this._err(a.unexpectedNullCharacter):e===s.EOF&&(this._emitCurrentToken(),this._emitEOFToken())}[Se](e){e===s.RIGHT_SQUARE_BRACKET?this.state=Ce:e===s.EOF?(this._err(a.eofInCdata),this._emitEOFToken()):this._emitCodePoint(e)}[Ce](e){e===s.RIGHT_SQUARE_BRACKET?this.state=xe:(this._emitChars("]"),this._reconsumeInState(Se))}[xe](e){e===s.GREATER_THAN_SIGN?this.state=u:e===s.RIGHT_SQUARE_BRACKET?this._emitChars("]"):(this._emitChars("]]"),this._reconsumeInState(Se))}[ve](e){this.tempBuff=[s.AMPERSAND],e===s.NUMBER_SIGN?(this.tempBuff.push(e),this.state=Me):Ue(e)?this._reconsumeInState(Oe):(this._flushCodePointsConsumedAsCharacterReference(),this._reconsumeInState(this.returnState))}[Oe](e){const t=this._matchNamedCharacterReference(e);if(this._ensureHibernation())this.tempBuff=[s.AMPERSAND];else if(t){const e=this.tempBuff[this.tempBuff.length-1]===s.SEMICOLON;this._isCharacterReferenceAttributeQuirk(e)||(e||this._errOnNextCodePoint(a.missingSemicolonAfterCharacterReference),this.tempBuff=t),this._flushCodePointsConsumedAsCharacterReference(),this.state=this.returnState}else this._flushCodePointsConsumedAsCharacterReference(),this.state=Ne}[Ne](e){Ue(e)?this._isCharacterReferenceInAttribute()?this.currentAttr.value+=je(e):this._emitCodePoint(e):(e===s.SEMICOLON&&this._err(a.unknownNamedCharacterReference),this._reconsumeInState(this.returnState))}[Me](e){this.charRefCode=0,e===s.LATIN_SMALL_X||e===s.LATIN_CAPITAL_X?(this.tempBuff.push(e),this.state=we):this._reconsumeInState(Re)}[we](e){!function(e){return De(e)||Ge(e)||We(e)}(e)?(this._err(a.absenceOfDigitsInNumericCharacterReference),this._flushCodePointsConsumedAsCharacterReference(),this._reconsumeInState(this.returnState)):this._reconsumeInState(Ie)}[Re](e){De(e)?this._reconsumeInState(Le):(this._err(a.absenceOfDigitsInNumericCharacterReference),this._flushCodePointsConsumedAsCharacterReference(),this._reconsumeInState(this.returnState))}[Ie](e){Ge(e)?this.charRefCode=16*this.charRefCode+e-55:We(e)?this.charRefCode=16*this.charRefCode+e-87:De(e)?this.charRefCode=16*this.charRefCode+e-48:e===s.SEMICOLON?this.state=Pe:(this._err(a.missingSemicolonAfterCharacterReference),this._reconsumeInState(Pe))}[Le](e){De(e)?this.charRefCode=10*this.charRefCode+e-48:e===s.SEMICOLON?this.state=Pe:(this._err(a.missingSemicolonAfterCharacterReference),this._reconsumeInState(Pe))}[Pe](){if(this.charRefCode===s.NULL)this._err(a.nullCharacterReference),this.charRefCode=s.REPLACEMENT_CHARACTER;else if(this.charRefCode>1114111)this._err(a.characterReferenceOutsideUnicodeRange),this.charRefCode=s.REPLACEMENT_CHARACTER;else if(r.isSurrogate(this.charRefCode))this._err(a.surrogateCharacterReference),this.charRefCode=s.REPLACEMENT_CHARACTER;else if(r.isUndefinedCodePoint(this.charRefCode))this._err(a.noncharacterCharacterReference);else if(r.isControlCodePoint(this.charRefCode)||this.charRefCode===s.CARRIAGE_RETURN){this._err(a.controlCharacterReference);const e=c[this.charRefCode];e&&(this.charRefCode=e)}this.tempBuff=[this.charRefCode],this._flushCodePointsConsumedAsCharacterReference(),this._reconsumeInState(this.returnState)}}Ve.CHARACTER_TOKEN="CHARACTER_TOKEN",Ve.NULL_CHARACTER_TOKEN="NULL_CHARACTER_TOKEN",Ve.WHITESPACE_CHARACTER_TOKEN="WHITESPACE_CHARACTER_TOKEN",Ve.START_TAG_TOKEN="START_TAG_TOKEN",Ve.END_TAG_TOKEN="END_TAG_TOKEN",Ve.COMMENT_TOKEN="COMMENT_TOKEN",Ve.DOCTYPE_TOKEN="DOCTYPE_TOKEN",Ve.EOF_TOKEN="EOF_TOKEN",Ve.HIBERNATION_TOKEN="HIBERNATION_TOKEN",Ve.MODE={DATA:u,RCDATA:d,RAWTEXT:p,SCRIPT_DATA:f,PLAINTEXT:h},Ve.getTokenAttr=function(e,t){for(let n=e.attrs.length-1;n>=0;n--)if(e.attrs[n].name===t)return e.attrs[n].value;return null},e.exports=Ve}}]); \ No newline at end of file diff --git a/_next/static/chunks/pages/blog/[slug].js b/_next/static/chunks/pages/blog/[slug].js index ab42bd740..d23983046 100644 --- a/_next/static/chunks/pages/blog/[slug].js +++ b/_next/static/chunks/pages/blog/[slug].js @@ -9,7 +9,7 @@ _N_E = /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(module) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Markdown; });\n/* harmony import */ var _Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/esm/defineProperty */ \"./node_modules/next/node_modules/@babel/runtime/helpers/esm/defineProperty.js\");\n/* harmony import */ var _Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties */ \"./node_modules/next/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var _Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/esm/extends */ \"./node_modules/next/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var react_markdown__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-markdown */ \"./node_modules/react-markdown/src/react-markdown.js\");\n/* harmony import */ var react_markdown__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_markdown__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @vandebron/windmolen */ \"./node_modules/@vandebron/windmolen/dist/index.js\");\n/* harmony import */ var _vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var react_syntax_highlighter__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-syntax-highlighter */ \"./node_modules/react-syntax-highlighter/dist/esm/index.js\");\n/* harmony import */ var react_syntax_highlighter_dist_cjs_styles_prism__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react-syntax-highlighter/dist/cjs/styles/prism */ \"./node_modules/react-syntax-highlighter/dist/cjs/styles/prism/index.js\");\n/* harmony import */ var react_syntax_highlighter_dist_cjs_styles_prism__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react_syntax_highlighter_dist_cjs_styles_prism__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var rehype_raw__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! rehype-raw */ \"./node_modules/rehype-raw/index.js\");\n/* harmony import */ var rehype_raw__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(rehype_raw__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var remark_gfm__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! remark-gfm */ \"./node_modules/remark-gfm/index.js\");\n/* harmony import */ var remark_gfm__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(remark_gfm__WEBPACK_IMPORTED_MODULE_9__);\n\n\n\nvar _jsxFileName = \"/Users/john.fisher/workspace/vandebron/tech-blog/components/Markdown.jsx\";\n\nvar __jsx = react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement;\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\n\n\n\n\n\n\nfunction Markdown(_ref) {\n var _this = this;\n\n var children = _ref.children;\n return __jsx(react_markdown__WEBPACK_IMPORTED_MODULE_4___default.a, {\n children: children,\n rehypePlugins: [rehype_raw__WEBPACK_IMPORTED_MODULE_8___default.a, remark_gfm__WEBPACK_IMPORTED_MODULE_9___default.a],\n components: {\n hr: react__WEBPACK_IMPORTED_MODULE_3___default.a.Fragment,\n h1: function h1(_ref2) {\n var children = _ref2.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"H1\"], {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 16,\n columnNumber: 28\n }\n }, children);\n },\n h2: function h2(_ref3) {\n var children = _ref3.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"H2\"], {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 19,\n columnNumber: 28\n }\n }, children);\n },\n h3: function h3(_ref4) {\n var children = _ref4.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"H3\"], {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 22,\n columnNumber: 28\n }\n }, children);\n },\n h4: function h4(_ref5) {\n var children = _ref5.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"H4\"], {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 25,\n columnNumber: 28\n }\n }, children);\n },\n h5: function h5(_ref6) {\n var children = _ref6.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"H5\"], {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 28,\n columnNumber: 28\n }\n }, children);\n },\n p: function p(props) {\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Paragraph\"], Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, props, {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 30,\n columnNumber: 31\n }\n }));\n },\n ol: function ol(_ref7) {\n var children = _ref7.children;\n return __jsx(\"ol\", {\n style: {\n marginBlockStart: 0,\n marginBlockEnd: 30\n },\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 32,\n columnNumber: 21\n }\n }, children);\n },\n ul: function ul(_ref8) {\n var children = _ref8.children;\n return __jsx(\"ol\", {\n style: {\n marginBlockStart: 0,\n marginBlockEnd: 30\n },\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 37,\n columnNumber: 21\n }\n }, children);\n },\n li: function li(_ref9) {\n var children = _ref9.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Paragraph\"], {\n as: \"li\",\n style: {\n marginBottom: 0\n },\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 42,\n columnNumber: 21\n }\n }, children);\n },\n a: function a(_ref10) {\n var children = _ref10.children,\n props = Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_ref10, [\"children\"]);\n\n return __jsx(\"a\", Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, props, {\n style: {\n color: \"inherit\"\n },\n target: 'target' in props || props['href'].includes('#') ? undefined : '_blank',\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 47,\n columnNumber: 22\n }\n }), children);\n },\n code: function code(_ref11) {\n var node = _ref11.node,\n inline = _ref11.inline,\n className = _ref11.className,\n children = _ref11.children,\n props = Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_ref11, [\"node\", \"inline\", \"className\", \"children\"]);\n\n var match = /language-(\\w+)/.exec(className || '');\n return !inline && match ? __jsx(react_syntax_highlighter__WEBPACK_IMPORTED_MODULE_6__[\"PrismAsync\"], Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({\n style: react_syntax_highlighter_dist_cjs_styles_prism__WEBPACK_IMPORTED_MODULE_7__[\"okaidia\"],\n language: match[1],\n PreTag: \"div\",\n children: String(children).replace(/\\n$/, '')\n }, props, {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 55,\n columnNumber: 25\n }\n })) : __jsx(\"code\", Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({\n className: className\n }, props, {\n style: {\n background: \"rgb(0,0,0, 0.1)\",\n padding: \"2px 4px\",\n fontSize: \"80%\",\n color: \"#000\"\n },\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 58,\n columnNumber: 25\n }\n }), children);\n },\n img: function img(_ref12) {\n var src = _ref12.src,\n alt = _ref12.alt,\n props = Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_ref12, [\"src\", \"alt\"]);\n\n return __jsx(\"img\", Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({\n src: src,\n alt: alt,\n style: {\n width: \"100%\"\n }\n }, props, {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 68,\n columnNumber: 49\n }\n }));\n },\n table: function table(_ref13) {\n var children = _ref13.children,\n className = _ref13.className,\n style = _ref13.style;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Table\"], {\n tableStyle: \"solid-borders\",\n className: className,\n style: _objectSpread({\n 'borderCollapse': 'collapse',\n 'marginBottom': '5%',\n 'fontSize': '18px',\n 'border': 'none'\n }, style),\n align: \"center\",\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 71,\n columnNumber: 25\n }\n }, children);\n },\n thead: function thead(_ref14) {\n var children = _ref14.children,\n style = _ref14.style;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Table\"].Thead, {\n style: _objectSpread({\n 'color': 'black'\n }, style),\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 83,\n columnNumber: 48\n }\n }, children);\n },\n tbody: function tbody(_ref15) {\n var children = _ref15.children,\n style = _ref15.style;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Table\"].Tbody, {\n style: style,\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 84,\n columnNumber: 48\n }\n }, children);\n },\n tr: function tr(_ref16) {\n var children = _ref16.children,\n style = _ref16.style;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Table\"].Row, {\n style: _objectSpread({}, style),\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 85,\n columnNumber: 45\n }\n }, children);\n },\n td: function td(_ref17) {\n var children = _ref17.children,\n style = _ref17.style,\n rest = Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_ref17, [\"children\", \"style\"]);\n\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Table\"].Cell, Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, rest, {\n style: style,\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 86,\n columnNumber: 54\n }\n }), children);\n },\n th: function th(_ref18) {\n var children = _ref18.children,\n style = _ref18.style;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Table\"].Cell, {\n style: style,\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 87,\n columnNumber: 45\n }\n }, children);\n }\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 10,\n columnNumber: 9\n }\n });\n}\n_c = Markdown;\n\nvar _c;\n\n$RefreshReg$(_c, \"Markdown\");\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node_modules/next/dist/compiled/webpack/harmony-module.js */ \"./node_modules/next/dist/compiled/webpack/harmony-module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vY29tcG9uZW50cy9NYXJrZG93bi5qc3g/ZTQ2OCJdLCJuYW1lcyI6WyJNYXJrZG93biIsImNoaWxkcmVuIiwicmVoeXBlUmF3IiwicmVtYXJrR2ZtIiwiaHIiLCJSZWFjdCIsIkZyYWdtZW50IiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsInAiLCJwcm9wcyIsIm9sIiwibWFyZ2luQmxvY2tTdGFydCIsIm1hcmdpbkJsb2NrRW5kIiwidWwiLCJsaSIsIm1hcmdpbkJvdHRvbSIsImEiLCJjb2xvciIsImluY2x1ZGVzIiwidW5kZWZpbmVkIiwiY29kZSIsIm5vZGUiLCJpbmxpbmUiLCJjbGFzc05hbWUiLCJtYXRjaCIsImV4ZWMiLCJva2FpZGlhIiwiU3RyaW5nIiwicmVwbGFjZSIsImJhY2tncm91bmQiLCJwYWRkaW5nIiwiZm9udFNpemUiLCJpbWciLCJzcmMiLCJhbHQiLCJ3aWR0aCIsInRhYmxlIiwic3R5bGUiLCJ0aGVhZCIsInRib2R5IiwidHIiLCJ0ZCIsInJlc3QiLCJ0aCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFZSxTQUFTQSxRQUFULE9BQThCO0FBQUE7O0FBQUEsTUFBWEMsUUFBVyxRQUFYQSxRQUFXO0FBQ3pDLFNBQ0ksTUFBQyxxREFBRDtBQUNJLFlBQVEsRUFBRUEsUUFEZDtBQUVJLGlCQUFhLEVBQUUsQ0FBQ0MsaURBQUQsRUFBWUMsaURBQVosQ0FGbkI7QUFHSSxjQUFVLEVBQUU7QUFDUkMsUUFBRSxFQUFFQyw0Q0FBSyxDQUFDQyxRQURGO0FBRVJDLFFBQUUsRUFBRSxtQkFBZ0I7QUFBQSxZQUFkTixRQUFjLFNBQWRBLFFBQWM7QUFDaEIsZUFBTyxNQUFDLHVEQUFEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0FBS0EsUUFBTCxDQUFQO0FBQ0gsT0FKTztBQUtSTyxRQUFFLEVBQUUsbUJB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LEtBQTdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBcUN4QyxRQUFyQyxDQUFqQztBQUFBLE9BekVJO0FBMEVSOEMsUUFBRSxFQUFFO0FBQUEsWUFBRTlDLFFBQUYsVUFBRUEsUUFBRjtBQUFBLFlBQVl3QyxLQUFaLFVBQVlBLEtBQVo7QUFBQSxlQUF3QixNQUFDLDBEQUFELENBQU8sSUFBUDtBQUFZLGVBQUssRUFBRUEsS0FBbkI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQUEyQnhDLFFBQTNCLENBQXhCO0FBQUE7QUExRUksS0FIaEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQURKO0FBbUZIO0tBcEZ1QkQsUSIsImZpbGUiOiIuL2NvbXBvbmVudHMvTWFya2Rvd24uanN4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0TWFya2Rvd24gZnJvbSBcInJlYWN0LW1hcmtkb3duXCI7XG5pbXBvcnQgeyBIMSwgSDIsIEgzLCBINCwgSDUsIFRhYmxlLCBQYXJhZ3JhcGggfSBmcm9tIFwiQHZhbmRlYnJvbi93aW5kbW9sZW5cIjtcbmltcG9ydCB7IFByaXNtQXN5bmMgYXMgU3ludGF4SGlnaGxpZ2h0ZXIgfSBmcm9tIFwicmVhY3Qtc3ludGF4LWhpZ2hsaWdodGVyXCI7XG5pbXBvcnQgeyBva2FpZGlhIH0gZnJvbSBcInJlYWN0LXN5bnRheC1oaWdobGlnaHRlci9kaXN0L2Nqcy9zdHlsZXMvcHJpc21cIjtcbmltcG9ydCByZWh5cGVSYXcgZnJvbSAncmVoeXBlLXJhdydcbmltcG9ydCByZW1hcmtHZm0gZnJvbSAncmVtYXJrLWdmbSdcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTWFya2Rvd24oe2NoaWxkcmVufSkge1xuICAgIHJldHVybiAoXG4gICAgICAgIDxSZWFjdE1hcmtkb3duXG4gICAgICAgICAgICBjaGlsZHJlbj17Y2hpbGRyZW59XG4gICAgICAgICAgICByZWh5cGVQbHVnaW5zPXtbcmVoeXBlUmF3LCByZW1hcmtHZm1dfVxuICAgICAgICAgICAgY29tcG9uZW50cz17e1xuICAgICAgICAgICAgICAgIGhyOiBSZWFjdC5GcmFnbWVudCxcbiAgICAgICAgICAgICAgICBoMTogKHtjaGlsZHJlbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxIMT57Y2hpbGRyZW59PC9IMT47XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBoMjogKHtjaGlsZHJlbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxIMj57Y2hpbGRyZW59PC9IMj47XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBoMzogKHtjaGlsZHJlbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxIMz57Y2hpbGRyZW59PC9IMz47XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBoNDogKHtjaGlsZHJlbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxIND57Y2hpbGRyZW59PC9IND47XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBoNTogKHtjaGlsZHJlbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxINT57Y2hpbGRyZW59PC9INT47XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwOiAocHJvcHMpID0+IDxQYXJhZ3JhcGggey4uLnByb3BzfSAvPixcbiAgICAgICAgICAgICAgICBvbDogKHtjaGlsZHJlbn0pID0+IChcbiAgICAgICAgICAgICAgICAgICAgPG9sIHN0eWxlPXt7bWFyZ2luQmxvY2tTdGFydDogMCwgbWFyZ2luQmxvY2tFbmQ6IDMwfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgICAgICAgIDwvb2w+XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB1bDogKHtjaGlsZHJlbn0pID0+IChcbiAgICAgICAgICAgICAgICAgICAgPG9sIHN0eWxlPXt7bWFyZ2luQmxvY2tTdGFydDogMCwgbWFyZ2luQmxvY2tFbmQ6IDMwfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgICAgICAgIDwvb2w+XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBsaTogKHtjaGlsZHJlbn0pID0+IChcbiAgICAgICAgICAgICAgICAgICAgPFBhcmFncmFwaCBhcz1cImxpXCIgc3R5bGU9e3ttYXJnaW5Cb3R0b206IDB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgICAgICAgICAgPC9QYXJhZ3JhcGg+XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBhOiAoe2NoaWxkcmVuLCAuLi5wcm9wc30pID0+XG4gICAgICAgICAgICAgICAgICAgICg8YSB7Li4ucHJvcHN9IHN0eWxlPXt7Y29sb3I6IFwiaW5oZXJpdFwifX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD17J3RhcmdldCcgaW4gcHJvcHMgfHwgcHJvcHNbJ2hyZWYnXS5pbmNsdWRlcygnIycpID8gdW5kZWZpbmVkIDogJ19ibGFuayd9PlxuICAgICAgICAgICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgICA8L2E+KSxcblxuICAgICAgICAgICAgICAgIGNvZGU6ICh7bm9kZSwgaW5saW5lLCBjbGFzc05hbWUsIGNoaWxkcmVuLCAuLi5wcm9wc30pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSAvbGFuZ3VhZ2UtKFxcdyspLy5leGVjKGNsYXNzTmFtZSB8fCAnJylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFpbmxpbmUgJiYgbWF0Y2ggPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8U3ludGF4SGlnaGxpZ2h0ZXIgc3R5bGU9e29rYWlkaWF9IGxhbmd1YWdlPXttYXRjaFsxXX0gUHJlVGFnPVwiZGl2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbj17U3RyaW5nKGNoaWxkcmVuKS5yZXBsYWNlKC9cXG4kLywgJycpfSB7Li4ucHJvcHN9IC8+XG4gICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzc05hbWU9e2NsYXNzTmFtZX0gey4uLnByb3BzfSBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IFwicmdiKDAsMCwwLCAwLjEpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogXCIycHggNHB4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IFwiODAlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwiIzAwMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9jb2RlPlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBpbWc6ICh7c3JjLCBhbHQsIC4uLnByb3BzfSkgPT4gKDxpbWcgc3JjPXtzcmN9IGFsdD17YWx0fSBzdHlsZT17e3dpZHRoOiBcIjEwMCVcIn19IHsuLi5wcm9wc30vPiksXG4gICAgICAgICAgICAgICAgdGFibGU6ICh7Y2hpbGRyZW4sIGNsYXNzTmFtZSwgc3R5bGV9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGFibGUgdGFibGVTdHlsZT0nc29saWQtYm9yZGVycycgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlckNvbGxhcHNlJzogJ2NvbGxhcHNlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbkJvdHRvbSc6ICc1JScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb250U2l6ZSc6ICcxOHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlcic6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uc3R5bGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduPSdjZW50ZXInPntjaGlsZHJlbn1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGU+XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0aGVhZDogKHtjaGlsZHJlbiwgc3R5bGV9KSA9PiAoPFRhYmxlLlRoZWFkIHN0eWxlPXt7J2NvbG9yJzogJ2JsYWNrJywgLi4uc3R5bGV9fT57Y2hpbGRyZW59PC9UYWJsZS5UaGVhZD4pLFxuICAgICAgICAgICAgICAgIHRib2R5OiAoe2NoaWxkcmVuLCBzdHlsZX0pID0+ICg8VGFibGUuVGJvZHkgc3R5bGU9e3N0eWxlfT57Y2hpbGRyZW59PC9UYWJsZS5UYm9keT4pLFxuICAgICAgICAgICAgICAgIHRyOiAoe2NoaWxkcmVuLCBzdHlsZX0pID0+ICg8VGFibGUuUm93IHN0eWxlPXt7Li4uc3R5bGV9fT57Y2hpbGRyZW59PC9UYWJsZS5Sb3c+KSxcbiAgICAgICAgICAgICAgICB0ZDogKHtjaGlsZHJlbiwgc3R5bGUsIC4uLnJlc3R9KSA9PiAoPFRhYmxlLkNlbGwgey4uLnJlc3R9IHN0eWxlPXtzdHlsZX0+e2NoaWxkcmVufTwvVGFibGUuQ2VsbD4pLFxuICAgICAgICAgICAgICAgIHRoOiAoe2NoaWxkcmVuLCBzdHlsZX0pID0+ICg8VGFibGUuQ2VsbCBzdHlsZT17c3R5bGV9PntjaGlsZHJlbn08L1RhYmxlLkNlbGw+KSxcblxuICAgICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICApO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./components/Markdown.jsx\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(module) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Markdown; });\n/* harmony import */ var _Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/esm/defineProperty */ \"./node_modules/next/node_modules/@babel/runtime/helpers/esm/defineProperty.js\");\n/* harmony import */ var _Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties */ \"./node_modules/next/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var _Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/esm/extends */ \"./node_modules/next/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var react_markdown__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-markdown */ \"./node_modules/react-markdown/src/react-markdown.js\");\n/* harmony import */ var react_markdown__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_markdown__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @vandebron/windmolen */ \"./node_modules/@vandebron/windmolen/dist/index.js\");\n/* harmony import */ var _vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var react_syntax_highlighter__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-syntax-highlighter */ \"./node_modules/react-syntax-highlighter/dist/esm/index.js\");\n/* harmony import */ var react_syntax_highlighter_dist_cjs_styles_prism__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react-syntax-highlighter/dist/cjs/styles/prism */ \"./node_modules/react-syntax-highlighter/dist/cjs/styles/prism/index.js\");\n/* harmony import */ var react_syntax_highlighter_dist_cjs_styles_prism__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react_syntax_highlighter_dist_cjs_styles_prism__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var rehype_raw__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! rehype-raw */ \"./node_modules/rehype-raw/index.js\");\n/* harmony import */ var rehype_raw__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(rehype_raw__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var remark_gfm__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! remark-gfm */ \"./node_modules/remark-gfm/index.js\");\n/* harmony import */ var remark_gfm__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(remark_gfm__WEBPACK_IMPORTED_MODULE_9__);\n\n\n\nvar _jsxFileName = \"/Users/john.fisher/workspace/vandebron/tech-blog/components/Markdown.jsx\";\n\nvar __jsx = react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement;\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\n\n\n\n\n\n\n\nvar getNodeHeadingId = function getNodeHeadingId(node) {\n var _node$children$, _node$children$$value;\n\n return node === null || node === void 0 ? void 0 : (_node$children$ = node.children[0]) === null || _node$children$ === void 0 ? void 0 : (_node$children$$value = _node$children$.value) === null || _node$children$$value === void 0 ? void 0 : _node$children$$value.toLowerCase().replace(/\\s+/g, '-');\n};\n\nfunction Markdown(_ref) {\n var _this = this;\n\n var children = _ref.children;\n return __jsx(react_markdown__WEBPACK_IMPORTED_MODULE_4___default.a, {\n children: children,\n rehypePlugins: [rehype_raw__WEBPACK_IMPORTED_MODULE_8___default.a, remark_gfm__WEBPACK_IMPORTED_MODULE_9___default.a],\n components: {\n hr: react__WEBPACK_IMPORTED_MODULE_3___default.a.Fragment,\n h1: function h1(_ref2) {\n var children = _ref2.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"H1\"], {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 20,\n columnNumber: 28\n }\n }, children);\n },\n h2: function h2(_ref3) {\n var children = _ref3.children,\n node = _ref3.node;\n var id = getNodeHeadingId(node);\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"H2\"], {\n id: id,\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 24,\n columnNumber: 28\n }\n }, children);\n },\n h3: function h3(_ref4) {\n var children = _ref4.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"H3\"], {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 27,\n columnNumber: 28\n }\n }, children);\n },\n h4: function h4(_ref5) {\n var children = _ref5.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"H4\"], {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 30,\n columnNumber: 28\n }\n }, children);\n },\n h5: function h5(_ref6) {\n var children = _ref6.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"H5\"], {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 33,\n columnNumber: 28\n }\n }, children);\n },\n p: function p(props) {\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Paragraph\"], Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, props, {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 35,\n columnNumber: 31\n }\n }));\n },\n ol: function ol(_ref7) {\n var children = _ref7.children;\n return __jsx(\"ol\", {\n style: {\n marginBlockStart: 0,\n marginBlockEnd: 30\n },\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 37,\n columnNumber: 21\n }\n }, children);\n },\n ul: function ul(_ref8) {\n var children = _ref8.children;\n return __jsx(\"ol\", {\n style: {\n marginBlockStart: 0,\n marginBlockEnd: 30\n },\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 42,\n columnNumber: 21\n }\n }, children);\n },\n li: function li(_ref9) {\n var children = _ref9.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Paragraph\"], {\n as: \"li\",\n style: {\n marginBottom: 0\n },\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 47,\n columnNumber: 21\n }\n }, children);\n },\n a: function a(_ref10) {\n var children = _ref10.children,\n props = Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_ref10, [\"children\"]);\n\n return __jsx(\"a\", Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, props, {\n style: {\n color: \"inherit\"\n },\n target: 'target' in props || props['href'].includes('#') ? undefined : '_blank',\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 52,\n columnNumber: 22\n }\n }), children);\n },\n code: function code(_ref11) {\n var node = _ref11.node,\n inline = _ref11.inline,\n className = _ref11.className,\n children = _ref11.children,\n props = Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_ref11, [\"node\", \"inline\", \"className\", \"children\"]);\n\n var match = /language-(\\w+)/.exec(className || '');\n return !inline && match ? __jsx(react_syntax_highlighter__WEBPACK_IMPORTED_MODULE_6__[\"PrismAsync\"], Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({\n style: react_syntax_highlighter_dist_cjs_styles_prism__WEBPACK_IMPORTED_MODULE_7__[\"okaidia\"],\n language: match[1],\n PreTag: \"div\",\n children: String(children).replace(/\\n$/, '')\n }, props, {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 60,\n columnNumber: 25\n }\n })) : __jsx(\"code\", Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({\n className: className\n }, props, {\n style: {\n background: \"rgb(0,0,0, 0.1)\",\n padding: \"2px 4px\",\n fontSize: \"80%\",\n color: \"#000\"\n },\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 63,\n columnNumber: 25\n }\n }), children);\n },\n img: function img(_ref12) {\n var src = _ref12.src,\n alt = _ref12.alt,\n props = Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_ref12, [\"src\", \"alt\"]);\n\n return __jsx(\"img\", Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({\n src: src,\n alt: alt,\n style: {\n width: \"100%\"\n }\n }, props, {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 73,\n columnNumber: 49\n }\n }));\n },\n table: function table(_ref13) {\n var children = _ref13.children,\n className = _ref13.className,\n style = _ref13.style;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Table\"], {\n tableStyle: \"solid-borders\",\n className: className,\n style: _objectSpread({\n 'borderCollapse': 'collapse',\n 'marginBottom': '5%',\n 'fontSize': '18px',\n 'border': 'none'\n }, style),\n align: \"center\",\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 76,\n columnNumber: 25\n }\n }, children);\n },\n thead: function thead(_ref14) {\n var children = _ref14.children,\n style = _ref14.style;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Table\"].Thead, {\n style: _objectSpread({\n 'color': 'black'\n }, style),\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 88,\n columnNumber: 48\n }\n }, children);\n },\n tbody: function tbody(_ref15) {\n var children = _ref15.children,\n style = _ref15.style;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Table\"].Tbody, {\n style: style,\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 89,\n columnNumber: 48\n }\n }, children);\n },\n tr: function tr(_ref16) {\n var children = _ref16.children,\n style = _ref16.style;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Table\"].Row, {\n style: _objectSpread({}, style),\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 90,\n columnNumber: 45\n }\n }, children);\n },\n td: function td(_ref17) {\n var children = _ref17.children,\n style = _ref17.style,\n rest = Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_ref17, [\"children\", \"style\"]);\n\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Table\"].Cell, Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, rest, {\n style: style,\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 91,\n columnNumber: 54\n }\n }), children);\n },\n th: function th(_ref18) {\n var children = _ref18.children,\n style = _ref18.style;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Table\"].Cell, {\n style: style,\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 92,\n columnNumber: 45\n }\n }, children);\n }\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 14,\n columnNumber: 9\n }\n });\n}\n_c = Markdown;\n\nvar _c;\n\n$RefreshReg$(_c, \"Markdown\");\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node_modules/next/dist/compiled/webpack/harmony-module.js */ \"./node_modules/next/dist/compiled/webpack/harmony-module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vY29tcG9uZW50cy9NYXJrZG93bi5qc3g/ZTQ2OCJdLCJuYW1lcyI6WyJnZXROb2RlSGVhZGluZ0lkIiwibm9kZSIsImNoaWxkcmVuIiwidmFsdWUiLCJ0b0xvd2VyQ2FzZSIsInJlcGxhY2UiLCJNYXJrZG93biIsInJlaHlwZVJhdyIsInJlbWFya0dmbSIsImhyIiwiUmVhY3QiLCJGcmFnbWVudCIsImgxIiwiaDIiLCJpZCIsImgzIiwiaDQiLCJoNSIsInAiLCJwcm9wcyIsIm9sIiwibWFyZ2luQmxvY2tTdGFydCIsIm1hcmdpbkJsb2NrRW5kIiwidWwiLCJsaSIsIm1hcmdpbkJvdHRvbSIsImEiLCJjb2xvciIsImluY2x1ZGVzIiwidW5kZWZpbmVkIiwiY29kZSIsImlubGluZSIsImNsYXNzTmFtZSIsIm1hdGNoIiwiZXhlYyIsIm9rYWlkaWEiLCJTdHJpbmciLCJiYWNrZ3JvdW5kIiwicGFkZGluZyIsImZvbnRTaXplIiwiaW1nIiwic3JjIiwiYWx0Iiwid2lkdGgiLCJ0YWJsZSIsInN0eWxlIiwidGhlYWQiLCJ0Ym9keSIsInRyIiwidGQiLCJyZXN0IiwidGgiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLElBQU1BLGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBbUIsQ0FBQ0MsSUFBRCxFQUFVO0FBQUE7O0FBQy9CLFNBQU9BLElBQVAsYUFBT0EsSUFBUCwwQ0FBT0EsSUFBSSxDQUFFQyxRQUFOLENBQWUsQ0FBZixDQUFQLDZFQUFPLGdCQUFtQkMsS0FBMUIsMERBQU8sc0JBQTBCQyxXQUExQixHQUF3Q0MsT0FBeEMsQ0FBZ0QsTUFBaEQsRUFBd0QsR0FBeEQsQ0FBUDtBQUNILENBRkQ7O0FBSWUsU0FBU0MsUUFBVCxPQUE4QjtBQUFBOztBQUFBLE1BQVhKLFFBQVcsUUFBWEEsUUFBVztBQUN6QyxTQUNJLE1BQUMscURBQUQ7QUFD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QUF4QjtBQUFBLE9BeEVDO0FBeUVSOEMsUUFBRSxFQUFFO0FBQUEsWUFBRTlDLFFBQUYsVUFBRUEsUUFBRjtBQUFBLFlBQVkyQyxLQUFaLFVBQVlBLEtBQVo7QUFBQSxlQUF3QixNQUFDLDBEQUFELENBQU8sR0FBUDtBQUFXLGVBQUssb0JBQU1BLEtBQU4sQ0FBaEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQUErQjNDLFFBQS9CLENBQXhCO0FBQUEsT0F6RUk7QUEwRVIrQyxRQUFFLEVBQUU7QUFBQSxZQUFFL0MsUUFBRixVQUFFQSxRQUFGO0FBQUEsWUFBWTJDLEtBQVosVUFBWUEsS0FBWjtBQUFBLFlBQXNCSyxJQUF0Qjs7QUFBQSxlQUFpQyxNQUFDLDBEQUFELENBQU8sSUFBUCx3S0FBZ0JBLElBQWhCO0FBQXNCLGVBQUssRUFBRUwsS0FBN0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFxQzNDLFFBQXJDLENBQWpDO0FBQUEsT0ExRUk7QUEyRVJpRCxRQUFFLEVBQUU7QUFBQSxZQUFFakQsUUFBRixVQUFFQSxRQUFGO0FBQUEsWUFBWTJDLEtBQVosVUFBWUEsS0FBWjtBQUFBLGVBQXdCLE1BQUMsMERBQUQsQ0FBTyxJQUFQO0FBQVksZUFBSyxFQUFFQSxLQUFuQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFdBQTJCM0MsUUFBM0IsQ0FBeEI7QUFBQTtBQTNFSSxLQUhoQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBREo7QUFvRkg7S0FyRnVCSSxRIiwiZmlsZSI6Ii4vY29tcG9uZW50cy9NYXJrZG93bi5qc3guanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3RNYXJrZG93biBmcm9tIFwicmVhY3QtbWFya2Rvd25cIjtcbmltcG9ydCB7IEgxLCBIMiwgSDMsIEg0LCBINSwgVGFibGUsIFBhcmFncmFwaCB9IGZyb20gXCJAdmFuZGVicm9uL3dpbmRtb2xlblwiO1xuaW1wb3J0IHsgUHJpc21Bc3luYyBhcyBTeW50YXhIaWdobGlnaHRlciB9IGZyb20gXCJyZWFjdC1zeW50YXgtaGlnaGxpZ2h0ZXJcIjtcbmltcG9ydCB7IG9rYWlkaWEgfSBmcm9tIFwicmVhY3Qtc3ludGF4LWhpZ2hsaWdodGVyL2Rpc3QvY2pzL3N0eWxlcy9wcmlzbVwiO1xuaW1wb3J0IHJlaHlwZVJhdyBmcm9tICdyZWh5cGUtcmF3J1xuaW1wb3J0IHJlbWFya0dmbSBmcm9tICdyZW1hcmstZ2ZtJ1xuXG5jb25zdCBnZXROb2RlSGVhZGluZ0lkID0gKG5vZGUpID0+IHtcbiAgICByZXR1cm4gbm9kZT8uY2hpbGRyZW5bMF0/LnZhbHVlPy50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xccysvZywgJy0nKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTWFya2Rvd24oe2NoaWxkcmVufSkge1xuICAgIHJldHVybiAoXG4gICAgICAgIDxSZWFjdE1hcmtkb3duXG4gICAgICAgICAgICBjaGlsZHJlbj17Y2hpbGRyZW59XG4gICAgICAgICAgICByZWh5cGVQbHVnaW5zPXtbcmVoeXBlUmF3LCByZW1hcmtHZm1dfVxuICAgICAgICAgICAgY29tcG9uZW50cz17e1xuICAgICAgICAgICAgICAgIGhyOiBSZWFjdC5GcmFnbWVudCxcbiAgICAgICAgICAgICAgICBoMTogKHtjaGlsZHJlbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxIMT57Y2hpbGRyZW59PC9IMT47XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBoMjogKHtjaGlsZHJlbiwgbm9kZX0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWQgPSBnZXROb2RlSGVhZGluZ0lkKG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gPEgyIGlkPXtpZH0+e2NoaWxkcmVufTwvSDI+O1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaDM6ICh7Y2hpbGRyZW59KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA8SDM+e2NoaWxkcmVufTwvSDM+O1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaDQ6ICh7Y2hpbGRyZW59KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA8SDQ+e2NoaWxkcmVufTwvSDQ+O1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaDU6ICh7Y2hpbGRyZW59KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA8SDU+e2NoaWxkcmVufTwvSDU+O1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcDogKHByb3BzKSA9PiA8UGFyYWdyYXBoIHsuLi5wcm9wc30gLz4sXG4gICAgICAgICAgICAgICAgb2w6ICh7Y2hpbGRyZW59KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxvbCBzdHlsZT17e21hcmdpbkJsb2NrU3RhcnQ6IDAsIG1hcmdpbkJsb2NrRW5kOiAzMH19PlxuICAgICAgICAgICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgICA8L29sPlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgdWw6ICh7Y2hpbGRyZW59KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxvbCBzdHlsZT17e21hcmdpbkJsb2NrU3RhcnQ6IDAsIG1hcmdpbkJsb2NrRW5kOiAzMH19PlxuICAgICAgICAgICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgICA8L29sPlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgbGk6ICh7Y2hpbGRyZW59KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxQYXJhZ3JhcGggYXM9XCJsaVwiIHN0eWxlPXt7bWFyZ2luQm90dG9tOiAwfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgICAgICAgIDwvUGFyYWdyYXBoPlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYTogKHtjaGlsZHJlbiwgLi4ucHJvcHN9KSA9PlxuICAgICAgICAgICAgICAgICAgICAoPGEgey4uLnByb3BzfSBzdHlsZT17e2NvbG9yOiBcImluaGVyaXRcIn19XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9eyd0YXJnZXQnIGluIHByb3BzIHx8IHByb3BzWydocmVmJ10uaW5jbHVkZXMoJyMnKSA/IHVuZGVmaW5lZCA6ICdfYmxhbmsnfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgICAgICAgICAgPC9hPiksXG5cbiAgICAgICAgICAgICAgICBjb2RlOiAoe25vZGUsIGlubGluZSwgY2xhc3NOYW1lLCBjaGlsZHJlbiwgLi4ucHJvcHN9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gL2xhbmd1YWdlLShcXHcrKS8uZXhlYyhjbGFzc05hbWUgfHwgJycpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhaW5saW5lICYmIG1hdGNoID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFN5bnRheEhpZ2hsaWdodGVyIHN0eWxlPXtva2FpZGlhfSBsYW5ndWFnZT17bWF0Y2hbMV19IFByZVRhZz1cImRpdlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW49e1N0cmluZyhjaGlsZHJlbikucmVwbGFjZSgvXFxuJC8sICcnKX0gey4uLnByb3BzfSAvPlxuICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3NOYW1lPXtjbGFzc05hbWV9IHsuLi5wcm9wc30gc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBcInJnYigwLDAsMCwgMC4xKVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFwiMnB4IDRweFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBcIjgwJVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBcIiMwMDBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaW1nOiAoe3NyYywgYWx0LCAuLi5wcm9wc30pID0+ICg8aW1nIHNyYz17c3JjfSBhbHQ9e2FsdH0gc3R5bGU9e3t3aWR0aDogXCIxMDAlXCJ9fSB7Li4ucHJvcHN9Lz4pLFxuICAgICAgICAgICAgICAgIHRhYmxlOiAoe2NoaWxkcmVuLCBjbGFzc05hbWUsIHN0eWxlfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlIHRhYmxlU3R5bGU9J3NvbGlkLWJvcmRlcnMnIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXJDb2xsYXBzZSc6ICdjb2xsYXBzZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW5Cb3R0b20nOiAnNSUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9udFNpemUnOiAnMThweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXInOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnN0eWxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbj0nY2VudGVyJz57Y2hpbGRyZW59XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlPlxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGhlYWQ6ICh7Y2hpbGRyZW4sIHN0eWxlfSkgPT4gKDxUYWJsZS5UaGVhZCBzdHlsZT17eydjb2xvcic6ICdibGFjaycsIC4uLnN0eWxlfX0+e2NoaWxkcmVufTwvVGFibGUuVGhlYWQ+KSxcbiAgICAgICAgICAgICAgICB0Ym9keTogKHtjaGlsZHJlbiwgc3R5bGV9KSA9PiAoPFRhYmxlLlRib2R5IHN0eWxlPXtzdHlsZX0+e2NoaWxkcmVufTwvVGFibGUuVGJvZHk+KSxcbiAgICAgICAgICAgICAgICB0cjogKHtjaGlsZHJlbiwgc3R5bGV9KSA9PiAoPFRhYmxlLlJvdyBzdHlsZT17ey4uLnN0eWxlfX0+e2NoaWxkcmVufTwvVGFibGUuUm93PiksXG4gICAgICAgICAgICAgICAgdGQ6ICh7Y2hpbGRyZW4sIHN0eWxlLCAuLi5yZXN0fSkgPT4gKDxUYWJsZS5DZWxsIHsuLi5yZXN0fSBzdHlsZT17c3R5bGV9PntjaGlsZHJlbn08L1RhYmxlLkNlbGw+KSxcbiAgICAgICAgICAgICAgICB0aDogKHtjaGlsZHJlbiwgc3R5bGV9KSA9PiAoPFRhYmxlLkNlbGwgc3R5bGU9e3N0eWxlfT57Y2hpbGRyZW59PC9UYWJsZS5DZWxsPiksXG5cbiAgICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgKTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./components/Markdown.jsx\n"); /***/ }), diff --git a/_next/static/chunks/pages/index.js b/_next/static/chunks/pages/index.js deleted file mode 100644 index a466b04c4..000000000 --- a/_next/static/chunks/pages/index.js +++ /dev/null @@ -1,1089 +0,0 @@ -_N_E = -(window["webpackJsonp_N_E"] = window["webpackJsonp_N_E"] || []).push([["pages/index"],{ - -/***/ "./components/ProjectCard.jsx": -/*!************************************!*\ - !*** ./components/ProjectCard.jsx ***! - \************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(module) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ProjectCard; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _vandebron_windmolen__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @vandebron/windmolen */ \"./node_modules/@vandebron/windmolen/dist/index.js\");\n/* harmony import */ var _vandebron_windmolen__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_1__);\nvar _jsxFileName = \"/Users/john.fisher/workspace/vandebron/tech-blog/components/ProjectCard.jsx\";\nvar __jsx = react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement;\n\n\nfunction ProjectCard(_ref) {\n var title = _ref.title,\n icon = _ref.icon,\n href = _ref.href;\n return __jsx(\"a\", {\n href: href,\n target: \"_blank\",\n rel: \"noreferrer\",\n style: {\n textDecoration: 'none'\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 6,\n columnNumber: 5\n }\n }, __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_1__[\"BoxShadow\"], {\n style: {\n width: \"100%\",\n padding: 15,\n display: \"flex\",\n alignItems: \"center\",\n marginBottom: 20\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 7,\n columnNumber: 7\n }\n }, __jsx(\"div\", {\n style: {\n paddingRight: 10,\n borderRight: \"1px solid #000\",\n marginRight: 20\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 16,\n columnNumber: 9\n }\n }, __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_1__[\"Icon\"], {\n name: icon,\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 23,\n columnNumber: 11\n }\n })), __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_1__[\"H5\"], {\n style: {\n margin: 0\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 25,\n columnNumber: 9\n }\n }, title)));\n}\n_c = ProjectCard;\n\nvar _c;\n\n$RefreshReg$(_c, \"ProjectCard\");\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node_modules/next/dist/compiled/webpack/harmony-module.js */ \"./node_modules/next/dist/compiled/webpack/harmony-module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vY29tcG9uZW50cy9Qcm9qZWN0Q2FyZC5qc3g/NTM5MyJdLCJuYW1lcyI6WyJQcm9qZWN0Q2FyZCIsInRpdGxlIiwiaWNvbiIsImhyZWYiLCJ0ZXh0RGVjb3JhdGlvbiIsIndpZHRoIiwicGFkZGluZyIsImRpc3BsYXkiLCJhbGlnbkl0ZW1zIiwibWFyZ2luQm90dG9tIiwicGFkZGluZ1JpZ2h0IiwiYm9yZGVyUmlnaHQiLCJtYXJnaW5SaWdodCIsIm1hcmdpbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBRWUsU0FBU0EsV0FBVCxPQUE0QztBQUFBLE1BQXJCQyxLQUFxQixRQUFyQkEsS0FBcUI7QUFBQSxNQUFkQyxJQUFjLFFBQWRBLElBQWM7QUFBQSxNQUFSQyxJQUFRLFFBQVJBLElBQVE7QUFDekQsU0FDRTtBQUFHLFFBQUksRUFBRUEsSUFBVDtBQUFlLFVBQU0sRUFBQyxRQUF0QjtBQUErQixPQUFHLEVBQUMsWUFBbkM7QUFBZ0QsU0FBSyxFQUFFO0FBQUVDLG9CQUFjLEVBQUU7QUFBbEIsS0FBdkQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxLQUNFLE1BQUMsOERBQUQ7QUFDRSxTQUFLLEVBQUU7QUFDTEMsV0FBSyxFQUFFLE1BREY7QUFFTEMsYUFBTyxFQUFFLEVBRko7QUFHTEMsYUFBTyxFQUFFLE1BSEo7QUFJTEMsZ0JBQVUsRUFBRSxRQUpQO0FBS0xDLGtCQUFZLEVBQUU7QUFMVCxLQURUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsS0FTRTtBQUNFLFNBQUssRUFBRTtBQUNMQyxrQkFBWSxFQUFFLEVBRFQ7QUFFTEMsaUJBQVcsRUFBRSxnQkFGUjtBQUdMQyxpQkFBVyxFQUFFO0FBSFIsS0FEVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBT0UsTUFBQyx5REFBRDtBQUFNLFFBQUksRUFBRVYsSUFBWjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBUEYsQ0FURixFQWtCRSxNQUFDLHVEQUFEO0FBQUksU0FBSyxFQUFFO0FBQUVXLFlBQU0sRUFBRTtBQUFWLEtBQVg7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxLQUEyQlosS0FBM0IsQ0FsQkYsQ0FERixDQURGO0FBd0JEO0tBekJ1QkQsVyIsImZpbGUiOiIuL2NvbXBvbmVudHMvUHJvamVjdENhcmQuanN4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQm94U2hhZG93LCBJY29uLCBINSB9IGZyb20gXCJAdmFuZGVicm9uL3dpbmRtb2xlblwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBQcm9qZWN0Q2FyZCh7IHRpdGxlLCBpY29uLCBocmVmIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8YSBocmVmPXtocmVmfSB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub3JlZmVycmVyXCIgc3R5bGU9e3sgdGV4dERlY29yYXRpb246ICdub25lJyB9fT5cbiAgICAgIDxCb3hTaGFkb3dcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICAgICAgcGFkZGluZzogMTUsXG4gICAgICAgICAgZGlzcGxheTogXCJmbGV4XCIsXG4gICAgICAgICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICAgICAgICBtYXJnaW5Cb3R0b206IDIwLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIHBhZGRpbmdSaWdodDogMTAsXG4gICAgICAgICAgICBib3JkZXJSaWdodDogXCIxcHggc29saWQgIzAwMFwiLFxuICAgICAgICAgICAgbWFyZ2luUmlnaHQ6IDIwLFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8SWNvbiBuYW1lPXtpY29ufSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPEg1IHN0eWxlPXt7IG1hcmdpbjogMCB9fT57dGl0bGV9PC9INT5cbiAgICAgIDwvQm94U2hhZG93PlxuICAgIDwvYT5cbiAgKTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./components/ProjectCard.jsx\n"); - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/assertThisInitialized.js": -/*!**********************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/assertThisInitialized.js ***! - \**********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return self;\n}\nmodule.exports = _assertThisInitialized, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzPzNjOTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuICByZXR1cm4gc2VsZjtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2Fzc2VydFRoaXNJbml0aWFsaXplZCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/assertThisInitialized.js\n"); - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/defineProperty.js": -/*!***************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/defineProperty.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var toPropertyKey = __webpack_require__(/*! ./toPropertyKey.js */ \"./node_modules/@babel/runtime/helpers/toPropertyKey.js\");\nfunction _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanM/OTUyMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvQkFBb0IsbUJBQU8sQ0FBQyxrRkFBb0I7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKFwiLi90b1Byb3BlcnR5S2V5LmpzXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBrZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9kZWZpbmVQcm9wZXJ0eSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/defineProperty.js\n"); - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/extends.js": -/*!********************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/extends.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("function _extends() {\n module.exports = _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _extends.apply(this, arguments);\n}\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcz9hNTU5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzO1xuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2V4dGVuZHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/extends.js\n"); - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/inheritsLoose.js": -/*!**************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/inheritsLoose.js ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var setPrototypeOf = __webpack_require__(/*! ./setPrototypeOf.js */ \"./node_modules/@babel/runtime/helpers/setPrototypeOf.js\");\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}\nmodule.exports = _inheritsLoose, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHNMb29zZS5qcz81NWI1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFCQUFxQixtQkFBTyxDQUFDLG9GQUFxQjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbmhlcml0c0xvb3NlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZShcIi4vc2V0UHJvdG90eXBlT2YuanNcIik7XG5mdW5jdGlvbiBfaW5oZXJpdHNMb29zZShzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTtcbiAgc3ViQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gc3ViQ2xhc3M7XG4gIHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2luaGVyaXRzTG9vc2UsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/inheritsLoose.js\n"); - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js": -/*!*****************************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js ***! - \*****************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\nmodule.exports = _objectWithoutPropertiesLoose, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qcz9mMGU0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHVCQUF1QjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgdmFyIGtleSwgaTtcbiAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgfVxuICByZXR1cm4gdGFyZ2V0O1xufVxubW9kdWxlLmV4cG9ydHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js\n"); - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/setPrototypeOf.js": -/*!***************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/setPrototypeOf.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _setPrototypeOf(o, p);\n}\nmodule.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2V0UHJvdG90eXBlT2YuanM/NGE0YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXRQcm90b3R5cGVPZi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7XG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/setPrototypeOf.js\n"); - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/toPrimitive.js": -/*!************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/toPrimitive.js ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var _typeof = __webpack_require__(/*! ./typeof.js */ \"./node_modules/@babel/runtime/helpers/typeof.js\")[\"default\"];\nfunction _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}\nmodule.exports = _toPrimitive, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9QcmltaXRpdmUuanM/ZTUwZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsb0VBQWE7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJpbWl0aXZlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKGlucHV0LCBoaW50KSB7XG4gIGlmIChfdHlwZW9mKGlucHV0KSAhPT0gXCJvYmplY3RcIiB8fCBpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIGlucHV0O1xuICB2YXIgcHJpbSA9IGlucHV0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmIChwcmltICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgcmVzID0gcHJpbS5jYWxsKGlucHV0LCBoaW50IHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoX3R5cGVvZihyZXMpICE9PSBcIm9iamVjdFwiKSByZXR1cm4gcmVzO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKGhpbnQgPT09IFwic3RyaW5nXCIgPyBTdHJpbmcgOiBOdW1iZXIpKGlucHV0KTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3RvUHJpbWl0aXZlLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/toPrimitive.js\n"); - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/toPropertyKey.js": -/*!**************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/toPropertyKey.js ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var _typeof = __webpack_require__(/*! ./typeof.js */ \"./node_modules/@babel/runtime/helpers/typeof.js\")[\"default\"];\nvar toPrimitive = __webpack_require__(/*! ./toPrimitive.js */ \"./node_modules/@babel/runtime/helpers/toPrimitive.js\");\nfunction _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}\nmodule.exports = _toPropertyKey, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9Qcm9wZXJ0eUtleS5qcz9hMzk1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxvRUFBYTtBQUNuQyxrQkFBa0IsbUJBQU8sQ0FBQyw4RUFBa0I7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJvcGVydHlLZXkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKFwiLi90b1ByaW1pdGl2ZS5qc1wiKTtcbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KGFyZykge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJnLCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIF90eXBlb2Yoa2V5KSA9PT0gXCJzeW1ib2xcIiA/IGtleSA6IFN0cmluZyhrZXkpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdG9Qcm9wZXJ0eUtleSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/toPropertyKey.js\n"); - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/typeof.js": -/*!*******************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/typeof.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return (module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _typeof(obj);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzPzcwMzciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90eXBlb2YuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIChtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gIH0gOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzKSwgX3R5cGVvZihvYmopO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/typeof.js\n"); - -/***/ }), - -/***/ "./node_modules/@vandebron/windmolen/dist/index.js": -/*!*********************************************************!*\ - !*** ./node_modules/@vandebron/windmolen/dist/index.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("var _s2=$RefreshSig$(),_s3=$RefreshSig$(),_s4=$RefreshSig$(),_s5=$RefreshSig$(),_s6=$RefreshSig$(),_s7=$RefreshSig$(),_s8=$RefreshSig$(),_s9=$RefreshSig$(),_s10=$RefreshSig$(),_s11=$RefreshSig$(),_s12=$RefreshSig$(),_s13=$RefreshSig$();Object.defineProperty(exports,'__esModule',{value:true});function _interopDefault(ex){return ex&&typeof ex==='object'&&'default'in ex?ex['default']:ex;}var React=__webpack_require__(/*! react */ \"./node_modules/react/index.js\");var React__default=_interopDefault(React);_c=React__default;var reactDom=__webpack_require__(/*! react-dom */ \"./node_modules/react-dom/index.js\");var reactDom__default=_interopDefault(reactDom);var objectAssign=_interopDefault(__webpack_require__(/*! object-assign */ \"./node_modules/next/dist/build/polyfills/object-assign.js\"));var dbounce=_interopDefault(__webpack_require__(/*! lodash.debounce */ \"./node_modules/lodash.debounce/index.js\"));var arrays=_interopDefault(__webpack_require__(/*! shallow-equal/arrays */ \"./node_modules/shallow-equal/arrays/index.js\"));var _objectWithoutPropertiesLoose$1=_interopDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutPropertiesLoose */ \"./node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js\"));var _extends$2=_interopDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/extends.js\"));var _assertThisInitialized$1=_interopDefault(__webpack_require__(/*! @babel/runtime/helpers/assertThisInitialized */ \"./node_modules/@babel/runtime/helpers/assertThisInitialized.js\"));var _inheritsLoose$1=_interopDefault(__webpack_require__(/*! @babel/runtime/helpers/inheritsLoose */ \"./node_modules/@babel/runtime/helpers/inheritsLoose.js\"));var _defineProperty$1=_interopDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\"));var callBind=_interopDefault(__webpack_require__(/*! es-abstract/helpers/callBind */ \"./node_modules/es-abstract/helpers/callBind.js\"));function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}function _defineProperties(target,props){for(var i=0;i=0)continue;target[key]=source[key];}return target;}function _objectWithoutProperties(source,excluded){if(source==null)return{};var target=_objectWithoutPropertiesLoose(source,excluded);var key,i;if(Object.getOwnPropertySymbols){var sourceSymbolKeys=Object.getOwnPropertySymbols(source);for(i=0;i=0)continue;if(!Object.prototype.propertyIsEnumerable.call(source,key))continue;target[key]=source[key];}}return target;}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");}return self;}function _possibleConstructorReturn(self,call){if(call&&(typeof call===\"object\"||typeof call===\"function\")){return call;}return _assertThisInitialized(self);}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _slicedToArray(arr,i){return _arrayWithHoles(arr)||_iterableToArrayLimit(arr,i)||_unsupportedIterableToArray(arr,i)||_nonIterableRest();}function _arrayWithHoles(arr){if(Array.isArray(arr))return arr;}function _iterableToArrayLimit(arr,i){if(typeof Symbol===\"undefined\"||!(Symbol.iterator in Object(arr)))return;var _arr=[];var _n=true;var _d=false;var _e=undefined;try{for(var _i=arr[Symbol.iterator](),_s;!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break;}}catch(err){_d=true;_e=err;}finally{try{if(!_n&&_i[\"return\"]!=null)_i[\"return\"]();}finally{if(_d)throw _e;}}return _arr;}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o===\"string\")return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n===\"Object\"&&o.constructor)n=o.constructor.name;if(n===\"Map\"||n===\"Set\")return Array.from(o);if(n===\"Arguments\"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen);}function _arrayLikeToArray(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i1){printWarning$1('Invalid arguments supplied to oneOf, expected an array, got '+arguments.length+' arguments. '+'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).');}else{printWarning$1('Invalid argument supplied to oneOf, expected an array.');}}return emptyFunctionThatReturnsNull;}function validate(props,propName,componentName,location,propFullName){var propValue=props[propName];for(var i=0;i=0){timeout=setTimeout(later,wait-last);}else{timeout=null;if(!immediate){result=func.apply(context,args);if(!timeout){context=null;args=null;}}}};return function debounced(){context=this;args=arguments;timestamp=+new Date();var callNow=immediate&&!timeout;if(!timeout){timeout=setTimeout(later,wait);}if(callNow){result=func.apply(context,args);context=null;args=null;}return result;};}});unwrapExports(debounce_1);var throttle_1=createCommonjsModule(function(module,exports){Object.defineProperty(exports,\"__esModule\",{value:true});exports[\"default\"]=throttle;/*eslint-disable */function throttle(fn,threshhold,scope){threshhold||(threshhold=250);var last,deferTimer;return function(){var context=scope||this;var now=+new Date(),args=arguments;if(last&&now=0&&offsetLeft-offsets[0]<=intersectionWidth&&offsetLeft+width+offsets[1]>=0;};/**\n * Check if `component` is visible in document\n * @param {node} component React component\n * @return {bool}\n */var checkNormalVisible=function checkNormalVisible(component){var node=_reactDom2[\"default\"].findDOMNode(component);// const node = component.ref;\n// If this element is hidden by css rules somehow, it's definitely invisible\nif(!(node.offsetWidth||node.offsetHeight||node.getClientRects().length))return false;var top=void 0;var elementHeight=void 0;try{var _node$getBoundingClie2=node.getBoundingClientRect();top=_node$getBoundingClie2.top;elementHeight=_node$getBoundingClie2.height;}catch(e){top=defaultBoundingClientRect.top;elementHeight=defaultBoundingClientRect.height;}var windowInnerHeight=window.innerHeight||document.documentElement.clientHeight;var offsets=Array.isArray(component.props.offset)?component.props.offset:[component.props.offset,component.props.offset];// Be compatible with previous API\nreturn top-offsets[0]<=windowInnerHeight&&top+elementHeight+offsets[1]>=0;};/**\n * Detect if element is visible in viewport, if so, set `visible` state to true.\n * If `once` prop is provided true, remove component as listener after checkVisible\n *\n * @param {React} component React component that respond to scroll and resize\n */var checkVisible=function checkVisible(component){var node=_reactDom2[\"default\"].findDOMNode(component);// const node = component.ref;\nif(!(node instanceof HTMLElement)){return;}var parent=(0,_scrollParent2[\"default\"])(node);var isOverflow=component.props.overflow&&parent!==node.ownerDocument&&parent!==document&&parent!==document.documentElement;var visible=isOverflow?checkOverflowVisible(component,parent):checkNormalVisible(component);if(visible){// Avoid extra render if previously is visible\nif(!component.visible){if(component.props.once){pending.push(component);}component.visible=true;component.forceUpdate();}}else if(!(component.props.once&&component.visible)){component.visible=false;if(component.props.unmountIfInvisible){component.forceUpdate();}}};var purgePending=function purgePending(){pending.forEach(function(component){var index=listeners.indexOf(component);if(index!==-1){listeners.splice(index,1);}});pending=[];};var lazyLoadHandler=function lazyLoadHandler(){for(var i=0;i\n// {this.props.placeholder}\n// :\n//
;\n}}]);return LazyLoad;}(React__default.Component);LazyLoad.propTypes={once:_propTypes2[\"default\"].bool,height:_propTypes2[\"default\"].oneOfType([_propTypes2[\"default\"].number,_propTypes2[\"default\"].string]),offset:_propTypes2[\"default\"].oneOfType([_propTypes2[\"default\"].number,_propTypes2[\"default\"].arrayOf(_propTypes2[\"default\"].number)]),overflow:_propTypes2[\"default\"].bool,resize:_propTypes2[\"default\"].bool,scroll:_propTypes2[\"default\"].bool,children:_propTypes2[\"default\"].node,throttle:_propTypes2[\"default\"].oneOfType([_propTypes2[\"default\"].number,_propTypes2[\"default\"].bool]),debounce:_propTypes2[\"default\"].oneOfType([_propTypes2[\"default\"].number,_propTypes2[\"default\"].bool]),placeholder:_propTypes2[\"default\"].node,scrollContainer:_propTypes2[\"default\"].oneOfType([_propTypes2[\"default\"].string,_propTypes2[\"default\"].object]),unmountIfInvisible:_propTypes2[\"default\"].bool};LazyLoad.defaultProps={once:false,offset:0,overflow:false,resize:false,scroll:true,unmountIfInvisible:false};var getDisplayName=function getDisplayName(WrappedComponent){return WrappedComponent.displayName||WrappedComponent.name||'Component';};var decorator=function decorator(){var options=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};return function lazyload(WrappedComponent){return function(_Component2){_inherits(LazyLoadDecorated,_Component2);function LazyLoadDecorated(){_classCallCheck(this,LazyLoadDecorated);var _this2=_possibleConstructorReturn(this,(LazyLoadDecorated.__proto__||Object.getPrototypeOf(LazyLoadDecorated)).call(this));_this2.displayName='LazyLoad'+getDisplayName(WrappedComponent);return _this2;}_createClass(LazyLoadDecorated,[{key:'render',value:function render(){return _react2[\"default\"].createElement(LazyLoad,options,_react2[\"default\"].createElement(WrappedComponent,this.props));}}]);return LazyLoadDecorated;}(React__default.Component);};};exports.lazyload=decorator;exports[\"default\"]=LazyLoad;exports.forceCheck=lazyLoadHandler;exports.forceVisible=forceVisible;});var Lazyload=unwrapExports(lib);_c11=Lazyload;var lib_1=lib.forceVisible;var lib_2=lib.forceCheck;var lib_3=lib.lazyload;var styles$9={\"image-container\":\"Image-module__image-container\",\"image-ratio-16-9\":\"Image-module__image-ratio-16-9\",\"image-ratio-4-3\":\"Image-module__image-ratio-4-3\",\"image-ratio-1-1\":\"Image-module__image-ratio-1-1\",\"image-responsive\":\"Image-module__image-responsive\",\"image-container-image\":\"Image-module__image-container-image\"};var Image=/*#__PURE__*/function(_React$PureComponent){_inherits(Image,_React$PureComponent);var _super=_createSuper(Image);function Image(){var _this;_classCallCheck(this,Image);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key];}_this=_super.call.apply(_super,[this].concat(args));_defineProperty(_assertThisInitialized(_this),\"getComponent\",function(srcSet,lazyload,className,responsive,insideContainer,props){if(lazyload){return/*#__PURE__*/React.createElement(Lazyload,{offset:[50,50],height:200,resize:true,once:true},/*#__PURE__*/React.createElement(\"img\",_extends({className:[insideContainer&&styles$9['image-container-image'],responsive&&styles$9['image-responsive'],className].filter(Boolean).join(' '),srcSet:srcSet},props)));}else{return/*#__PURE__*/React.createElement(\"img\",_extends({className:[insideContainer&&styles$9['image-container-image'],responsive&&styles$9['image-responsive'],className].filter(Boolean).join(' '),srcSet:srcSet},props));}});return _this;}_createClass(Image,[{key:\"render\",value:function render(){var _this$props=this.props,className=_this$props.className,responsive=_this$props.responsive,aspectRatio=_this$props.aspectRatio,src2x=_this$props.src2x,lazyload=_this$props.lazyload,props=_objectWithoutProperties(_this$props,[\"className\",\"responsive\",\"aspectRatio\",\"src2x\",\"lazyload\"]);var srcSet=src2x?\"\".concat(this.props.src,\" 1x, \").concat(src2x,\" 2x\"):'';if(aspectRatio){var _aspectRatio$split$ma=aspectRatio.split(':').map(Number),_aspectRatio$split$ma2=_slicedToArray(_aspectRatio$split$ma,2),width=_aspectRatio$split$ma2[0],height=_aspectRatio$split$ma2[1];var paddingBottom=height/width*100;return/*#__PURE__*/React.createElement(\"div\",{className:styles$9['image-container'],style:{paddingBottom:\"\".concat(paddingBottom,\"%\")}},this.getComponent(srcSet,!!lazyload,className,!!responsive,true,props));}return this.getComponent(srcSet,!!lazyload,className,!!responsive,false,props);}}]);return Image;}(React.PureComponent);_defineProperty(Image,\"defaultProps\",{responsive:true,aspectRatio:undefined,src2x:undefined,lazyload:true});var styles$a={\"container\":\"Flex-module__container\",\"container-fluid\":\"Flex-module__container-fluid\",\"container-sm\":\"Flex-module__container-sm\",\"container-md\":\"Flex-module__container-md\",\"container-lg\":\"Flex-module__container-lg\",\"container-xl\":\"Flex-module__container-xl\",\"row\":\"Flex-module__row\",\"no-gutters\":\"Flex-module__no-gutters\",\"col\":\"Flex-module__col\",\"col-1\":\"Flex-module__col-1\",\"col-2\":\"Flex-module__col-2\",\"col-3\":\"Flex-module__col-3\",\"col-4\":\"Flex-module__col-4\",\"col-5\":\"Flex-module__col-5\",\"col-6\":\"Flex-module__col-6\",\"col-7\":\"Flex-module__col-7\",\"col-8\":\"Flex-module__col-8\",\"col-9\":\"Flex-module__col-9\",\"col-10\":\"Flex-module__col-10\",\"col-11\":\"Flex-module__col-11\",\"col-12\":\"Flex-module__col-12\",\"col-auto\":\"Flex-module__col-auto\",\"col-sm-1\":\"Flex-module__col-sm-1\",\"col-sm-2\":\"Flex-module__col-sm-2\",\"col-sm-3\":\"Flex-module__col-sm-3\",\"col-sm-4\":\"Flex-module__col-sm-4\",\"col-sm-5\":\"Flex-module__col-sm-5\",\"col-sm-6\":\"Flex-module__col-sm-6\",\"col-sm-7\":\"Flex-module__col-sm-7\",\"col-sm-8\":\"Flex-module__col-sm-8\",\"col-sm-9\":\"Flex-module__col-sm-9\",\"col-sm-10\":\"Flex-module__col-sm-10\",\"col-sm-11\":\"Flex-module__col-sm-11\",\"col-sm-12\":\"Flex-module__col-sm-12\",\"col-sm\":\"Flex-module__col-sm\",\"col-sm-auto\":\"Flex-module__col-sm-auto\",\"col-md-1\":\"Flex-module__col-md-1\",\"col-md-2\":\"Flex-module__col-md-2\",\"col-md-3\":\"Flex-module__col-md-3\",\"col-md-4\":\"Flex-module__col-md-4\",\"col-md-5\":\"Flex-module__col-md-5\",\"col-md-6\":\"Flex-module__col-md-6\",\"col-md-7\":\"Flex-module__col-md-7\",\"col-md-8\":\"Flex-module__col-md-8\",\"col-md-9\":\"Flex-module__col-md-9\",\"col-md-10\":\"Flex-module__col-md-10\",\"col-md-11\":\"Flex-module__col-md-11\",\"col-md-12\":\"Flex-module__col-md-12\",\"col-md\":\"Flex-module__col-md\",\"col-md-auto\":\"Flex-module__col-md-auto\",\"col-lg-1\":\"Flex-module__col-lg-1\",\"col-lg-2\":\"Flex-module__col-lg-2\",\"col-lg-3\":\"Flex-module__col-lg-3\",\"col-lg-4\":\"Flex-module__col-lg-4\",\"col-lg-5\":\"Flex-module__col-lg-5\",\"col-lg-6\":\"Flex-module__col-lg-6\",\"col-lg-7\":\"Flex-module__col-lg-7\",\"col-lg-8\":\"Flex-module__col-lg-8\",\"col-lg-9\":\"Flex-module__col-lg-9\",\"col-lg-10\":\"Flex-module__col-lg-10\",\"col-lg-11\":\"Flex-module__col-lg-11\",\"col-lg-12\":\"Flex-module__col-lg-12\",\"col-lg\":\"Flex-module__col-lg\",\"col-lg-auto\":\"Flex-module__col-lg-auto\",\"col-xl-1\":\"Flex-module__col-xl-1\",\"col-xl-2\":\"Flex-module__col-xl-2\",\"col-xl-3\":\"Flex-module__col-xl-3\",\"col-xl-4\":\"Flex-module__col-xl-4\",\"col-xl-5\":\"Flex-module__col-xl-5\",\"col-xl-6\":\"Flex-module__col-xl-6\",\"col-xl-7\":\"Flex-module__col-xl-7\",\"col-xl-8\":\"Flex-module__col-xl-8\",\"col-xl-9\":\"Flex-module__col-xl-9\",\"col-xl-10\":\"Flex-module__col-xl-10\",\"col-xl-11\":\"Flex-module__col-xl-11\",\"col-xl-12\":\"Flex-module__col-xl-12\",\"col-xl\":\"Flex-module__col-xl\",\"col-xl-auto\":\"Flex-module__col-xl-auto\",\"row-cols-1\":\"Flex-module__row-cols-1\",\"row-cols-2\":\"Flex-module__row-cols-2\",\"row-cols-3\":\"Flex-module__row-cols-3\",\"row-cols-4\":\"Flex-module__row-cols-4\",\"row-cols-5\":\"Flex-module__row-cols-5\",\"row-cols-6\":\"Flex-module__row-cols-6\",\"order-first\":\"Flex-module__order-first\",\"order-last\":\"Flex-module__order-last\",\"order-0\":\"Flex-module__order-0\",\"order-1\":\"Flex-module__order-1\",\"order-2\":\"Flex-module__order-2\",\"order-3\":\"Flex-module__order-3\",\"order-4\":\"Flex-module__order-4\",\"order-5\":\"Flex-module__order-5\",\"order-6\":\"Flex-module__order-6\",\"order-7\":\"Flex-module__order-7\",\"order-8\":\"Flex-module__order-8\",\"order-9\":\"Flex-module__order-9\",\"order-10\":\"Flex-module__order-10\",\"order-11\":\"Flex-module__order-11\",\"order-12\":\"Flex-module__order-12\",\"offset-1\":\"Flex-module__offset-1\",\"offset-2\":\"Flex-module__offset-2\",\"offset-3\":\"Flex-module__offset-3\",\"offset-4\":\"Flex-module__offset-4\",\"offset-5\":\"Flex-module__offset-5\",\"offset-6\":\"Flex-module__offset-6\",\"offset-7\":\"Flex-module__offset-7\",\"offset-8\":\"Flex-module__offset-8\",\"offset-9\":\"Flex-module__offset-9\",\"offset-10\":\"Flex-module__offset-10\",\"offset-11\":\"Flex-module__offset-11\",\"row-cols-sm-1\":\"Flex-module__row-cols-sm-1\",\"row-cols-sm-2\":\"Flex-module__row-cols-sm-2\",\"row-cols-sm-3\":\"Flex-module__row-cols-sm-3\",\"row-cols-sm-4\":\"Flex-module__row-cols-sm-4\",\"row-cols-sm-5\":\"Flex-module__row-cols-sm-5\",\"row-cols-sm-6\":\"Flex-module__row-cols-sm-6\",\"order-sm-first\":\"Flex-module__order-sm-first\",\"order-sm-last\":\"Flex-module__order-sm-last\",\"order-sm-0\":\"Flex-module__order-sm-0\",\"order-sm-1\":\"Flex-module__order-sm-1\",\"order-sm-2\":\"Flex-module__order-sm-2\",\"order-sm-3\":\"Flex-module__order-sm-3\",\"order-sm-4\":\"Flex-module__order-sm-4\",\"order-sm-5\":\"Flex-module__order-sm-5\",\"order-sm-6\":\"Flex-module__order-sm-6\",\"order-sm-7\":\"Flex-module__order-sm-7\",\"order-sm-8\":\"Flex-module__order-sm-8\",\"order-sm-9\":\"Flex-module__order-sm-9\",\"order-sm-10\":\"Flex-module__order-sm-10\",\"order-sm-11\":\"Flex-module__order-sm-11\",\"order-sm-12\":\"Flex-module__order-sm-12\",\"offset-sm-0\":\"Flex-module__offset-sm-0\",\"offset-sm-1\":\"Flex-module__offset-sm-1\",\"offset-sm-2\":\"Flex-module__offset-sm-2\",\"offset-sm-3\":\"Flex-module__offset-sm-3\",\"offset-sm-4\":\"Flex-module__offset-sm-4\",\"offset-sm-5\":\"Flex-module__offset-sm-5\",\"offset-sm-6\":\"Flex-module__offset-sm-6\",\"offset-sm-7\":\"Flex-module__offset-sm-7\",\"offset-sm-8\":\"Flex-module__offset-sm-8\",\"offset-sm-9\":\"Flex-module__offset-sm-9\",\"offset-sm-10\":\"Flex-module__offset-sm-10\",\"offset-sm-11\":\"Flex-module__offset-sm-11\",\"row-cols-md-1\":\"Flex-module__row-cols-md-1\",\"row-cols-md-2\":\"Flex-module__row-cols-md-2\",\"row-cols-md-3\":\"Flex-module__row-cols-md-3\",\"row-cols-md-4\":\"Flex-module__row-cols-md-4\",\"row-cols-md-5\":\"Flex-module__row-cols-md-5\",\"row-cols-md-6\":\"Flex-module__row-cols-md-6\",\"order-md-first\":\"Flex-module__order-md-first\",\"order-md-last\":\"Flex-module__order-md-last\",\"order-md-0\":\"Flex-module__order-md-0\",\"order-md-1\":\"Flex-module__order-md-1\",\"order-md-2\":\"Flex-module__order-md-2\",\"order-md-3\":\"Flex-module__order-md-3\",\"order-md-4\":\"Flex-module__order-md-4\",\"order-md-5\":\"Flex-module__order-md-5\",\"order-md-6\":\"Flex-module__order-md-6\",\"order-md-7\":\"Flex-module__order-md-7\",\"order-md-8\":\"Flex-module__order-md-8\",\"order-md-9\":\"Flex-module__order-md-9\",\"order-md-10\":\"Flex-module__order-md-10\",\"order-md-11\":\"Flex-module__order-md-11\",\"order-md-12\":\"Flex-module__order-md-12\",\"offset-md-0\":\"Flex-module__offset-md-0\",\"offset-md-1\":\"Flex-module__offset-md-1\",\"offset-md-2\":\"Flex-module__offset-md-2\",\"offset-md-3\":\"Flex-module__offset-md-3\",\"offset-md-4\":\"Flex-module__offset-md-4\",\"offset-md-5\":\"Flex-module__offset-md-5\",\"offset-md-6\":\"Flex-module__offset-md-6\",\"offset-md-7\":\"Flex-module__offset-md-7\",\"offset-md-8\":\"Flex-module__offset-md-8\",\"offset-md-9\":\"Flex-module__offset-md-9\",\"offset-md-10\":\"Flex-module__offset-md-10\",\"offset-md-11\":\"Flex-module__offset-md-11\",\"row-cols-lg-1\":\"Flex-module__row-cols-lg-1\",\"row-cols-lg-2\":\"Flex-module__row-cols-lg-2\",\"row-cols-lg-3\":\"Flex-module__row-cols-lg-3\",\"row-cols-lg-4\":\"Flex-module__row-cols-lg-4\",\"row-cols-lg-5\":\"Flex-module__row-cols-lg-5\",\"row-cols-lg-6\":\"Flex-module__row-cols-lg-6\",\"order-lg-first\":\"Flex-module__order-lg-first\",\"order-lg-last\":\"Flex-module__order-lg-last\",\"order-lg-0\":\"Flex-module__order-lg-0\",\"order-lg-1\":\"Flex-module__order-lg-1\",\"order-lg-2\":\"Flex-module__order-lg-2\",\"order-lg-3\":\"Flex-module__order-lg-3\",\"order-lg-4\":\"Flex-module__order-lg-4\",\"order-lg-5\":\"Flex-module__order-lg-5\",\"order-lg-6\":\"Flex-module__order-lg-6\",\"order-lg-7\":\"Flex-module__order-lg-7\",\"order-lg-8\":\"Flex-module__order-lg-8\",\"order-lg-9\":\"Flex-module__order-lg-9\",\"order-lg-10\":\"Flex-module__order-lg-10\",\"order-lg-11\":\"Flex-module__order-lg-11\",\"order-lg-12\":\"Flex-module__order-lg-12\",\"offset-lg-0\":\"Flex-module__offset-lg-0\",\"offset-lg-1\":\"Flex-module__offset-lg-1\",\"offset-lg-2\":\"Flex-module__offset-lg-2\",\"offset-lg-3\":\"Flex-module__offset-lg-3\",\"offset-lg-4\":\"Flex-module__offset-lg-4\",\"offset-lg-5\":\"Flex-module__offset-lg-5\",\"offset-lg-6\":\"Flex-module__offset-lg-6\",\"offset-lg-7\":\"Flex-module__offset-lg-7\",\"offset-lg-8\":\"Flex-module__offset-lg-8\",\"offset-lg-9\":\"Flex-module__offset-lg-9\",\"offset-lg-10\":\"Flex-module__offset-lg-10\",\"offset-lg-11\":\"Flex-module__offset-lg-11\",\"row-cols-xl-1\":\"Flex-module__row-cols-xl-1\",\"row-cols-xl-2\":\"Flex-module__row-cols-xl-2\",\"row-cols-xl-3\":\"Flex-module__row-cols-xl-3\",\"row-cols-xl-4\":\"Flex-module__row-cols-xl-4\",\"row-cols-xl-5\":\"Flex-module__row-cols-xl-5\",\"row-cols-xl-6\":\"Flex-module__row-cols-xl-6\",\"order-xl-first\":\"Flex-module__order-xl-first\",\"order-xl-last\":\"Flex-module__order-xl-last\",\"order-xl-0\":\"Flex-module__order-xl-0\",\"order-xl-1\":\"Flex-module__order-xl-1\",\"order-xl-2\":\"Flex-module__order-xl-2\",\"order-xl-3\":\"Flex-module__order-xl-3\",\"order-xl-4\":\"Flex-module__order-xl-4\",\"order-xl-5\":\"Flex-module__order-xl-5\",\"order-xl-6\":\"Flex-module__order-xl-6\",\"order-xl-7\":\"Flex-module__order-xl-7\",\"order-xl-8\":\"Flex-module__order-xl-8\",\"order-xl-9\":\"Flex-module__order-xl-9\",\"order-xl-10\":\"Flex-module__order-xl-10\",\"order-xl-11\":\"Flex-module__order-xl-11\",\"order-xl-12\":\"Flex-module__order-xl-12\",\"offset-xl-0\":\"Flex-module__offset-xl-0\",\"offset-xl-1\":\"Flex-module__offset-xl-1\",\"offset-xl-2\":\"Flex-module__offset-xl-2\",\"offset-xl-3\":\"Flex-module__offset-xl-3\",\"offset-xl-4\":\"Flex-module__offset-xl-4\",\"offset-xl-5\":\"Flex-module__offset-xl-5\",\"offset-xl-6\":\"Flex-module__offset-xl-6\",\"offset-xl-7\":\"Flex-module__offset-xl-7\",\"offset-xl-8\":\"Flex-module__offset-xl-8\",\"offset-xl-9\":\"Flex-module__offset-xl-9\",\"offset-xl-10\":\"Flex-module__offset-xl-10\",\"offset-xl-11\":\"Flex-module__offset-xl-11\",\"d-none\":\"Flex-module__d-none\",\"d-inline\":\"Flex-module__d-inline\",\"d-inline-block\":\"Flex-module__d-inline-block\",\"d-block\":\"Flex-module__d-block\",\"d-table\":\"Flex-module__d-table\",\"d-table-row\":\"Flex-module__d-table-row\",\"d-table-cell\":\"Flex-module__d-table-cell\",\"d-flex\":\"Flex-module__d-flex\",\"d-inline-flex\":\"Flex-module__d-inline-flex\",\"d-sm-none\":\"Flex-module__d-sm-none\",\"d-sm-inline\":\"Flex-module__d-sm-inline\",\"d-sm-inline-block\":\"Flex-module__d-sm-inline-block\",\"d-sm-block\":\"Flex-module__d-sm-block\",\"d-sm-table\":\"Flex-module__d-sm-table\",\"d-sm-table-row\":\"Flex-module__d-sm-table-row\",\"d-sm-table-cell\":\"Flex-module__d-sm-table-cell\",\"d-sm-flex\":\"Flex-module__d-sm-flex\",\"d-sm-inline-flex\":\"Flex-module__d-sm-inline-flex\",\"d-md-none\":\"Flex-module__d-md-none\",\"d-md-inline\":\"Flex-module__d-md-inline\",\"d-md-inline-block\":\"Flex-module__d-md-inline-block\",\"d-md-block\":\"Flex-module__d-md-block\",\"d-md-table\":\"Flex-module__d-md-table\",\"d-md-table-row\":\"Flex-module__d-md-table-row\",\"d-md-table-cell\":\"Flex-module__d-md-table-cell\",\"d-md-flex\":\"Flex-module__d-md-flex\",\"d-md-inline-flex\":\"Flex-module__d-md-inline-flex\",\"d-lg-none\":\"Flex-module__d-lg-none\",\"d-lg-inline\":\"Flex-module__d-lg-inline\",\"d-lg-inline-block\":\"Flex-module__d-lg-inline-block\",\"d-lg-block\":\"Flex-module__d-lg-block\",\"d-lg-table\":\"Flex-module__d-lg-table\",\"d-lg-table-row\":\"Flex-module__d-lg-table-row\",\"d-lg-table-cell\":\"Flex-module__d-lg-table-cell\",\"d-lg-flex\":\"Flex-module__d-lg-flex\",\"d-lg-inline-flex\":\"Flex-module__d-lg-inline-flex\",\"d-xl-none\":\"Flex-module__d-xl-none\",\"d-xl-inline\":\"Flex-module__d-xl-inline\",\"d-xl-inline-block\":\"Flex-module__d-xl-inline-block\",\"d-xl-block\":\"Flex-module__d-xl-block\",\"d-xl-table\":\"Flex-module__d-xl-table\",\"d-xl-table-row\":\"Flex-module__d-xl-table-row\",\"d-xl-table-cell\":\"Flex-module__d-xl-table-cell\",\"d-xl-flex\":\"Flex-module__d-xl-flex\",\"d-xl-inline-flex\":\"Flex-module__d-xl-inline-flex\",\"d-print-none\":\"Flex-module__d-print-none\",\"d-print-inline\":\"Flex-module__d-print-inline\",\"d-print-inline-block\":\"Flex-module__d-print-inline-block\",\"d-print-block\":\"Flex-module__d-print-block\",\"d-print-table\":\"Flex-module__d-print-table\",\"d-print-table-row\":\"Flex-module__d-print-table-row\",\"d-print-table-cell\":\"Flex-module__d-print-table-cell\",\"d-print-flex\":\"Flex-module__d-print-flex\",\"d-print-inline-flex\":\"Flex-module__d-print-inline-flex\",\"flex-row\":\"Flex-module__flex-row\",\"flex-column\":\"Flex-module__flex-column\",\"flex-row-reverse\":\"Flex-module__flex-row-reverse\",\"flex-column-reverse\":\"Flex-module__flex-column-reverse\",\"flex-wrap\":\"Flex-module__flex-wrap\",\"flex-nowrap\":\"Flex-module__flex-nowrap\",\"flex-wrap-reverse\":\"Flex-module__flex-wrap-reverse\",\"flex-fill\":\"Flex-module__flex-fill\",\"flex-grow-0\":\"Flex-module__flex-grow-0\",\"flex-grow-1\":\"Flex-module__flex-grow-1\",\"flex-shrink-0\":\"Flex-module__flex-shrink-0\",\"flex-shrink-1\":\"Flex-module__flex-shrink-1\",\"justify-content-start\":\"Flex-module__justify-content-start\",\"justify-content-end\":\"Flex-module__justify-content-end\",\"justify-content-center\":\"Flex-module__justify-content-center\",\"justify-content-between\":\"Flex-module__justify-content-between\",\"justify-content-around\":\"Flex-module__justify-content-around\",\"align-items-start\":\"Flex-module__align-items-start\",\"align-items-end\":\"Flex-module__align-items-end\",\"align-items-center\":\"Flex-module__align-items-center\",\"align-items-baseline\":\"Flex-module__align-items-baseline\",\"align-items-stretch\":\"Flex-module__align-items-stretch\",\"align-content-start\":\"Flex-module__align-content-start\",\"align-content-end\":\"Flex-module__align-content-end\",\"align-content-center\":\"Flex-module__align-content-center\",\"align-content-between\":\"Flex-module__align-content-between\",\"align-content-around\":\"Flex-module__align-content-around\",\"align-content-stretch\":\"Flex-module__align-content-stretch\",\"align-self-auto\":\"Flex-module__align-self-auto\",\"align-self-start\":\"Flex-module__align-self-start\",\"align-self-end\":\"Flex-module__align-self-end\",\"align-self-center\":\"Flex-module__align-self-center\",\"align-self-baseline\":\"Flex-module__align-self-baseline\",\"align-self-stretch\":\"Flex-module__align-self-stretch\",\"flex-sm-row\":\"Flex-module__flex-sm-row\",\"flex-sm-column\":\"Flex-module__flex-sm-column\",\"flex-sm-row-reverse\":\"Flex-module__flex-sm-row-reverse\",\"flex-sm-column-reverse\":\"Flex-module__flex-sm-column-reverse\",\"flex-sm-wrap\":\"Flex-module__flex-sm-wrap\",\"flex-sm-nowrap\":\"Flex-module__flex-sm-nowrap\",\"flex-sm-wrap-reverse\":\"Flex-module__flex-sm-wrap-reverse\",\"flex-sm-fill\":\"Flex-module__flex-sm-fill\",\"flex-sm-grow-0\":\"Flex-module__flex-sm-grow-0\",\"flex-sm-grow-1\":\"Flex-module__flex-sm-grow-1\",\"flex-sm-shrink-0\":\"Flex-module__flex-sm-shrink-0\",\"flex-sm-shrink-1\":\"Flex-module__flex-sm-shrink-1\",\"justify-content-sm-start\":\"Flex-module__justify-content-sm-start\",\"justify-content-sm-end\":\"Flex-module__justify-content-sm-end\",\"justify-content-sm-center\":\"Flex-module__justify-content-sm-center\",\"justify-content-sm-between\":\"Flex-module__justify-content-sm-between\",\"justify-content-sm-around\":\"Flex-module__justify-content-sm-around\",\"align-items-sm-start\":\"Flex-module__align-items-sm-start\",\"align-items-sm-end\":\"Flex-module__align-items-sm-end\",\"align-items-sm-center\":\"Flex-module__align-items-sm-center\",\"align-items-sm-baseline\":\"Flex-module__align-items-sm-baseline\",\"align-items-sm-stretch\":\"Flex-module__align-items-sm-stretch\",\"align-content-sm-start\":\"Flex-module__align-content-sm-start\",\"align-content-sm-end\":\"Flex-module__align-content-sm-end\",\"align-content-sm-center\":\"Flex-module__align-content-sm-center\",\"align-content-sm-between\":\"Flex-module__align-content-sm-between\",\"align-content-sm-around\":\"Flex-module__align-content-sm-around\",\"align-content-sm-stretch\":\"Flex-module__align-content-sm-stretch\",\"align-self-sm-auto\":\"Flex-module__align-self-sm-auto\",\"align-self-sm-start\":\"Flex-module__align-self-sm-start\",\"align-self-sm-end\":\"Flex-module__align-self-sm-end\",\"align-self-sm-center\":\"Flex-module__align-self-sm-center\",\"align-self-sm-baseline\":\"Flex-module__align-self-sm-baseline\",\"align-self-sm-stretch\":\"Flex-module__align-self-sm-stretch\",\"flex-md-row\":\"Flex-module__flex-md-row\",\"flex-md-column\":\"Flex-module__flex-md-column\",\"flex-md-row-reverse\":\"Flex-module__flex-md-row-reverse\",\"flex-md-column-reverse\":\"Flex-module__flex-md-column-reverse\",\"flex-md-wrap\":\"Flex-module__flex-md-wrap\",\"flex-md-nowrap\":\"Flex-module__flex-md-nowrap\",\"flex-md-wrap-reverse\":\"Flex-module__flex-md-wrap-reverse\",\"flex-md-fill\":\"Flex-module__flex-md-fill\",\"flex-md-grow-0\":\"Flex-module__flex-md-grow-0\",\"flex-md-grow-1\":\"Flex-module__flex-md-grow-1\",\"flex-md-shrink-0\":\"Flex-module__flex-md-shrink-0\",\"flex-md-shrink-1\":\"Flex-module__flex-md-shrink-1\",\"justify-content-md-start\":\"Flex-module__justify-content-md-start\",\"justify-content-md-end\":\"Flex-module__justify-content-md-end\",\"justify-content-md-center\":\"Flex-module__justify-content-md-center\",\"justify-content-md-between\":\"Flex-module__justify-content-md-between\",\"justify-content-md-around\":\"Flex-module__justify-content-md-around\",\"align-items-md-start\":\"Flex-module__align-items-md-start\",\"align-items-md-end\":\"Flex-module__align-items-md-end\",\"align-items-md-center\":\"Flex-module__align-items-md-center\",\"align-items-md-baseline\":\"Flex-module__align-items-md-baseline\",\"align-items-md-stretch\":\"Flex-module__align-items-md-stretch\",\"align-content-md-start\":\"Flex-module__align-content-md-start\",\"align-content-md-end\":\"Flex-module__align-content-md-end\",\"align-content-md-center\":\"Flex-module__align-content-md-center\",\"align-content-md-between\":\"Flex-module__align-content-md-between\",\"align-content-md-around\":\"Flex-module__align-content-md-around\",\"align-content-md-stretch\":\"Flex-module__align-content-md-stretch\",\"align-self-md-auto\":\"Flex-module__align-self-md-auto\",\"align-self-md-start\":\"Flex-module__align-self-md-start\",\"align-self-md-end\":\"Flex-module__align-self-md-end\",\"align-self-md-center\":\"Flex-module__align-self-md-center\",\"align-self-md-baseline\":\"Flex-module__align-self-md-baseline\",\"align-self-md-stretch\":\"Flex-module__align-self-md-stretch\",\"flex-lg-row\":\"Flex-module__flex-lg-row\",\"flex-lg-column\":\"Flex-module__flex-lg-column\",\"flex-lg-row-reverse\":\"Flex-module__flex-lg-row-reverse\",\"flex-lg-column-reverse\":\"Flex-module__flex-lg-column-reverse\",\"flex-lg-wrap\":\"Flex-module__flex-lg-wrap\",\"flex-lg-nowrap\":\"Flex-module__flex-lg-nowrap\",\"flex-lg-wrap-reverse\":\"Flex-module__flex-lg-wrap-reverse\",\"flex-lg-fill\":\"Flex-module__flex-lg-fill\",\"flex-lg-grow-0\":\"Flex-module__flex-lg-grow-0\",\"flex-lg-grow-1\":\"Flex-module__flex-lg-grow-1\",\"flex-lg-shrink-0\":\"Flex-module__flex-lg-shrink-0\",\"flex-lg-shrink-1\":\"Flex-module__flex-lg-shrink-1\",\"justify-content-lg-start\":\"Flex-module__justify-content-lg-start\",\"justify-content-lg-end\":\"Flex-module__justify-content-lg-end\",\"justify-content-lg-center\":\"Flex-module__justify-content-lg-center\",\"justify-content-lg-between\":\"Flex-module__justify-content-lg-between\",\"justify-content-lg-around\":\"Flex-module__justify-content-lg-around\",\"align-items-lg-start\":\"Flex-module__align-items-lg-start\",\"align-items-lg-end\":\"Flex-module__align-items-lg-end\",\"align-items-lg-center\":\"Flex-module__align-items-lg-center\",\"align-items-lg-baseline\":\"Flex-module__align-items-lg-baseline\",\"align-items-lg-stretch\":\"Flex-module__align-items-lg-stretch\",\"align-content-lg-start\":\"Flex-module__align-content-lg-start\",\"align-content-lg-end\":\"Flex-module__align-content-lg-end\",\"align-content-lg-center\":\"Flex-module__align-content-lg-center\",\"align-content-lg-between\":\"Flex-module__align-content-lg-between\",\"align-content-lg-around\":\"Flex-module__align-content-lg-around\",\"align-content-lg-stretch\":\"Flex-module__align-content-lg-stretch\",\"align-self-lg-auto\":\"Flex-module__align-self-lg-auto\",\"align-self-lg-start\":\"Flex-module__align-self-lg-start\",\"align-self-lg-end\":\"Flex-module__align-self-lg-end\",\"align-self-lg-center\":\"Flex-module__align-self-lg-center\",\"align-self-lg-baseline\":\"Flex-module__align-self-lg-baseline\",\"align-self-lg-stretch\":\"Flex-module__align-self-lg-stretch\",\"flex-xl-row\":\"Flex-module__flex-xl-row\",\"flex-xl-column\":\"Flex-module__flex-xl-column\",\"flex-xl-row-reverse\":\"Flex-module__flex-xl-row-reverse\",\"flex-xl-column-reverse\":\"Flex-module__flex-xl-column-reverse\",\"flex-xl-wrap\":\"Flex-module__flex-xl-wrap\",\"flex-xl-nowrap\":\"Flex-module__flex-xl-nowrap\",\"flex-xl-wrap-reverse\":\"Flex-module__flex-xl-wrap-reverse\",\"flex-xl-fill\":\"Flex-module__flex-xl-fill\",\"flex-xl-grow-0\":\"Flex-module__flex-xl-grow-0\",\"flex-xl-grow-1\":\"Flex-module__flex-xl-grow-1\",\"flex-xl-shrink-0\":\"Flex-module__flex-xl-shrink-0\",\"flex-xl-shrink-1\":\"Flex-module__flex-xl-shrink-1\",\"justify-content-xl-start\":\"Flex-module__justify-content-xl-start\",\"justify-content-xl-end\":\"Flex-module__justify-content-xl-end\",\"justify-content-xl-center\":\"Flex-module__justify-content-xl-center\",\"justify-content-xl-between\":\"Flex-module__justify-content-xl-between\",\"justify-content-xl-around\":\"Flex-module__justify-content-xl-around\",\"align-items-xl-start\":\"Flex-module__align-items-xl-start\",\"align-items-xl-end\":\"Flex-module__align-items-xl-end\",\"align-items-xl-center\":\"Flex-module__align-items-xl-center\",\"align-items-xl-baseline\":\"Flex-module__align-items-xl-baseline\",\"align-items-xl-stretch\":\"Flex-module__align-items-xl-stretch\",\"align-content-xl-start\":\"Flex-module__align-content-xl-start\",\"align-content-xl-end\":\"Flex-module__align-content-xl-end\",\"align-content-xl-center\":\"Flex-module__align-content-xl-center\",\"align-content-xl-between\":\"Flex-module__align-content-xl-between\",\"align-content-xl-around\":\"Flex-module__align-content-xl-around\",\"align-content-xl-stretch\":\"Flex-module__align-content-xl-stretch\",\"align-self-xl-auto\":\"Flex-module__align-self-xl-auto\",\"align-self-xl-start\":\"Flex-module__align-self-xl-start\",\"align-self-xl-end\":\"Flex-module__align-self-xl-end\",\"align-self-xl-center\":\"Flex-module__align-self-xl-center\",\"align-self-xl-baseline\":\"Flex-module__align-self-xl-baseline\",\"align-self-xl-stretch\":\"Flex-module__align-self-xl-stretch\",\"m-0\":\"Flex-module__m-0\",\"mt-0\":\"Flex-module__mt-0\",\"my-0\":\"Flex-module__my-0\",\"mr-0\":\"Flex-module__mr-0\",\"mx-0\":\"Flex-module__mx-0\",\"mb-0\":\"Flex-module__mb-0\",\"ml-0\":\"Flex-module__ml-0\",\"m-1\":\"Flex-module__m-1\",\"mt-1\":\"Flex-module__mt-1\",\"my-1\":\"Flex-module__my-1\",\"mr-1\":\"Flex-module__mr-1\",\"mx-1\":\"Flex-module__mx-1\",\"mb-1\":\"Flex-module__mb-1\",\"ml-1\":\"Flex-module__ml-1\",\"m-2\":\"Flex-module__m-2\",\"mt-2\":\"Flex-module__mt-2\",\"my-2\":\"Flex-module__my-2\",\"mr-2\":\"Flex-module__mr-2\",\"mx-2\":\"Flex-module__mx-2\",\"mb-2\":\"Flex-module__mb-2\",\"ml-2\":\"Flex-module__ml-2\",\"m-3\":\"Flex-module__m-3\",\"mt-3\":\"Flex-module__mt-3\",\"my-3\":\"Flex-module__my-3\",\"mr-3\":\"Flex-module__mr-3\",\"mx-3\":\"Flex-module__mx-3\",\"mb-3\":\"Flex-module__mb-3\",\"ml-3\":\"Flex-module__ml-3\",\"m-4\":\"Flex-module__m-4\",\"mt-4\":\"Flex-module__mt-4\",\"my-4\":\"Flex-module__my-4\",\"mr-4\":\"Flex-module__mr-4\",\"mx-4\":\"Flex-module__mx-4\",\"mb-4\":\"Flex-module__mb-4\",\"ml-4\":\"Flex-module__ml-4\",\"m-5\":\"Flex-module__m-5\",\"mt-5\":\"Flex-module__mt-5\",\"my-5\":\"Flex-module__my-5\",\"mr-5\":\"Flex-module__mr-5\",\"mx-5\":\"Flex-module__mx-5\",\"mb-5\":\"Flex-module__mb-5\",\"ml-5\":\"Flex-module__ml-5\",\"p-0\":\"Flex-module__p-0\",\"pt-0\":\"Flex-module__pt-0\",\"py-0\":\"Flex-module__py-0\",\"pr-0\":\"Flex-module__pr-0\",\"px-0\":\"Flex-module__px-0\",\"pb-0\":\"Flex-module__pb-0\",\"pl-0\":\"Flex-module__pl-0\",\"p-1\":\"Flex-module__p-1\",\"pt-1\":\"Flex-module__pt-1\",\"py-1\":\"Flex-module__py-1\",\"pr-1\":\"Flex-module__pr-1\",\"px-1\":\"Flex-module__px-1\",\"pb-1\":\"Flex-module__pb-1\",\"pl-1\":\"Flex-module__pl-1\",\"p-2\":\"Flex-module__p-2\",\"pt-2\":\"Flex-module__pt-2\",\"py-2\":\"Flex-module__py-2\",\"pr-2\":\"Flex-module__pr-2\",\"px-2\":\"Flex-module__px-2\",\"pb-2\":\"Flex-module__pb-2\",\"pl-2\":\"Flex-module__pl-2\",\"p-3\":\"Flex-module__p-3\",\"pt-3\":\"Flex-module__pt-3\",\"py-3\":\"Flex-module__py-3\",\"pr-3\":\"Flex-module__pr-3\",\"px-3\":\"Flex-module__px-3\",\"pb-3\":\"Flex-module__pb-3\",\"pl-3\":\"Flex-module__pl-3\",\"p-4\":\"Flex-module__p-4\",\"pt-4\":\"Flex-module__pt-4\",\"py-4\":\"Flex-module__py-4\",\"pr-4\":\"Flex-module__pr-4\",\"px-4\":\"Flex-module__px-4\",\"pb-4\":\"Flex-module__pb-4\",\"pl-4\":\"Flex-module__pl-4\",\"p-5\":\"Flex-module__p-5\",\"pt-5\":\"Flex-module__pt-5\",\"py-5\":\"Flex-module__py-5\",\"pr-5\":\"Flex-module__pr-5\",\"px-5\":\"Flex-module__px-5\",\"pb-5\":\"Flex-module__pb-5\",\"pl-5\":\"Flex-module__pl-5\",\"m-n1\":\"Flex-module__m-n1\",\"mt-n1\":\"Flex-module__mt-n1\",\"my-n1\":\"Flex-module__my-n1\",\"mr-n1\":\"Flex-module__mr-n1\",\"mx-n1\":\"Flex-module__mx-n1\",\"mb-n1\":\"Flex-module__mb-n1\",\"ml-n1\":\"Flex-module__ml-n1\",\"m-n2\":\"Flex-module__m-n2\",\"mt-n2\":\"Flex-module__mt-n2\",\"my-n2\":\"Flex-module__my-n2\",\"mr-n2\":\"Flex-module__mr-n2\",\"mx-n2\":\"Flex-module__mx-n2\",\"mb-n2\":\"Flex-module__mb-n2\",\"ml-n2\":\"Flex-module__ml-n2\",\"m-n3\":\"Flex-module__m-n3\",\"mt-n3\":\"Flex-module__mt-n3\",\"my-n3\":\"Flex-module__my-n3\",\"mr-n3\":\"Flex-module__mr-n3\",\"mx-n3\":\"Flex-module__mx-n3\",\"mb-n3\":\"Flex-module__mb-n3\",\"ml-n3\":\"Flex-module__ml-n3\",\"m-n4\":\"Flex-module__m-n4\",\"mt-n4\":\"Flex-module__mt-n4\",\"my-n4\":\"Flex-module__my-n4\",\"mr-n4\":\"Flex-module__mr-n4\",\"mx-n4\":\"Flex-module__mx-n4\",\"mb-n4\":\"Flex-module__mb-n4\",\"ml-n4\":\"Flex-module__ml-n4\",\"m-n5\":\"Flex-module__m-n5\",\"mt-n5\":\"Flex-module__mt-n5\",\"my-n5\":\"Flex-module__my-n5\",\"mr-n5\":\"Flex-module__mr-n5\",\"mx-n5\":\"Flex-module__mx-n5\",\"mb-n5\":\"Flex-module__mb-n5\",\"ml-n5\":\"Flex-module__ml-n5\",\"m-auto\":\"Flex-module__m-auto\",\"mt-auto\":\"Flex-module__mt-auto\",\"my-auto\":\"Flex-module__my-auto\",\"mr-auto\":\"Flex-module__mr-auto\",\"mx-auto\":\"Flex-module__mx-auto\",\"mb-auto\":\"Flex-module__mb-auto\",\"ml-auto\":\"Flex-module__ml-auto\",\"m-sm-0\":\"Flex-module__m-sm-0\",\"mt-sm-0\":\"Flex-module__mt-sm-0\",\"my-sm-0\":\"Flex-module__my-sm-0\",\"mr-sm-0\":\"Flex-module__mr-sm-0\",\"mx-sm-0\":\"Flex-module__mx-sm-0\",\"mb-sm-0\":\"Flex-module__mb-sm-0\",\"ml-sm-0\":\"Flex-module__ml-sm-0\",\"m-sm-1\":\"Flex-module__m-sm-1\",\"mt-sm-1\":\"Flex-module__mt-sm-1\",\"my-sm-1\":\"Flex-module__my-sm-1\",\"mr-sm-1\":\"Flex-module__mr-sm-1\",\"mx-sm-1\":\"Flex-module__mx-sm-1\",\"mb-sm-1\":\"Flex-module__mb-sm-1\",\"ml-sm-1\":\"Flex-module__ml-sm-1\",\"m-sm-2\":\"Flex-module__m-sm-2\",\"mt-sm-2\":\"Flex-module__mt-sm-2\",\"my-sm-2\":\"Flex-module__my-sm-2\",\"mr-sm-2\":\"Flex-module__mr-sm-2\",\"mx-sm-2\":\"Flex-module__mx-sm-2\",\"mb-sm-2\":\"Flex-module__mb-sm-2\",\"ml-sm-2\":\"Flex-module__ml-sm-2\",\"m-sm-3\":\"Flex-module__m-sm-3\",\"mt-sm-3\":\"Flex-module__mt-sm-3\",\"my-sm-3\":\"Flex-module__my-sm-3\",\"mr-sm-3\":\"Flex-module__mr-sm-3\",\"mx-sm-3\":\"Flex-module__mx-sm-3\",\"mb-sm-3\":\"Flex-module__mb-sm-3\",\"ml-sm-3\":\"Flex-module__ml-sm-3\",\"m-sm-4\":\"Flex-module__m-sm-4\",\"mt-sm-4\":\"Flex-module__mt-sm-4\",\"my-sm-4\":\"Flex-module__my-sm-4\",\"mr-sm-4\":\"Flex-module__mr-sm-4\",\"mx-sm-4\":\"Flex-module__mx-sm-4\",\"mb-sm-4\":\"Flex-module__mb-sm-4\",\"ml-sm-4\":\"Flex-module__ml-sm-4\",\"m-sm-5\":\"Flex-module__m-sm-5\",\"mt-sm-5\":\"Flex-module__mt-sm-5\",\"my-sm-5\":\"Flex-module__my-sm-5\",\"mr-sm-5\":\"Flex-module__mr-sm-5\",\"mx-sm-5\":\"Flex-module__mx-sm-5\",\"mb-sm-5\":\"Flex-module__mb-sm-5\",\"ml-sm-5\":\"Flex-module__ml-sm-5\",\"p-sm-0\":\"Flex-module__p-sm-0\",\"pt-sm-0\":\"Flex-module__pt-sm-0\",\"py-sm-0\":\"Flex-module__py-sm-0\",\"pr-sm-0\":\"Flex-module__pr-sm-0\",\"px-sm-0\":\"Flex-module__px-sm-0\",\"pb-sm-0\":\"Flex-module__pb-sm-0\",\"pl-sm-0\":\"Flex-module__pl-sm-0\",\"p-sm-1\":\"Flex-module__p-sm-1\",\"pt-sm-1\":\"Flex-module__pt-sm-1\",\"py-sm-1\":\"Flex-module__py-sm-1\",\"pr-sm-1\":\"Flex-module__pr-sm-1\",\"px-sm-1\":\"Flex-module__px-sm-1\",\"pb-sm-1\":\"Flex-module__pb-sm-1\",\"pl-sm-1\":\"Flex-module__pl-sm-1\",\"p-sm-2\":\"Flex-module__p-sm-2\",\"pt-sm-2\":\"Flex-module__pt-sm-2\",\"py-sm-2\":\"Flex-module__py-sm-2\",\"pr-sm-2\":\"Flex-module__pr-sm-2\",\"px-sm-2\":\"Flex-module__px-sm-2\",\"pb-sm-2\":\"Flex-module__pb-sm-2\",\"pl-sm-2\":\"Flex-module__pl-sm-2\",\"p-sm-3\":\"Flex-module__p-sm-3\",\"pt-sm-3\":\"Flex-module__pt-sm-3\",\"py-sm-3\":\"Flex-module__py-sm-3\",\"pr-sm-3\":\"Flex-module__pr-sm-3\",\"px-sm-3\":\"Flex-module__px-sm-3\",\"pb-sm-3\":\"Flex-module__pb-sm-3\",\"pl-sm-3\":\"Flex-module__pl-sm-3\",\"p-sm-4\":\"Flex-module__p-sm-4\",\"pt-sm-4\":\"Flex-module__pt-sm-4\",\"py-sm-4\":\"Flex-module__py-sm-4\",\"pr-sm-4\":\"Flex-module__pr-sm-4\",\"px-sm-4\":\"Flex-module__px-sm-4\",\"pb-sm-4\":\"Flex-module__pb-sm-4\",\"pl-sm-4\":\"Flex-module__pl-sm-4\",\"p-sm-5\":\"Flex-module__p-sm-5\",\"pt-sm-5\":\"Flex-module__pt-sm-5\",\"py-sm-5\":\"Flex-module__py-sm-5\",\"pr-sm-5\":\"Flex-module__pr-sm-5\",\"px-sm-5\":\"Flex-module__px-sm-5\",\"pb-sm-5\":\"Flex-module__pb-sm-5\",\"pl-sm-5\":\"Flex-module__pl-sm-5\",\"m-sm-n1\":\"Flex-module__m-sm-n1\",\"mt-sm-n1\":\"Flex-module__mt-sm-n1\",\"my-sm-n1\":\"Flex-module__my-sm-n1\",\"mr-sm-n1\":\"Flex-module__mr-sm-n1\",\"mx-sm-n1\":\"Flex-module__mx-sm-n1\",\"mb-sm-n1\":\"Flex-module__mb-sm-n1\",\"ml-sm-n1\":\"Flex-module__ml-sm-n1\",\"m-sm-n2\":\"Flex-module__m-sm-n2\",\"mt-sm-n2\":\"Flex-module__mt-sm-n2\",\"my-sm-n2\":\"Flex-module__my-sm-n2\",\"mr-sm-n2\":\"Flex-module__mr-sm-n2\",\"mx-sm-n2\":\"Flex-module__mx-sm-n2\",\"mb-sm-n2\":\"Flex-module__mb-sm-n2\",\"ml-sm-n2\":\"Flex-module__ml-sm-n2\",\"m-sm-n3\":\"Flex-module__m-sm-n3\",\"mt-sm-n3\":\"Flex-module__mt-sm-n3\",\"my-sm-n3\":\"Flex-module__my-sm-n3\",\"mr-sm-n3\":\"Flex-module__mr-sm-n3\",\"mx-sm-n3\":\"Flex-module__mx-sm-n3\",\"mb-sm-n3\":\"Flex-module__mb-sm-n3\",\"ml-sm-n3\":\"Flex-module__ml-sm-n3\",\"m-sm-n4\":\"Flex-module__m-sm-n4\",\"mt-sm-n4\":\"Flex-module__mt-sm-n4\",\"my-sm-n4\":\"Flex-module__my-sm-n4\",\"mr-sm-n4\":\"Flex-module__mr-sm-n4\",\"mx-sm-n4\":\"Flex-module__mx-sm-n4\",\"mb-sm-n4\":\"Flex-module__mb-sm-n4\",\"ml-sm-n4\":\"Flex-module__ml-sm-n4\",\"m-sm-n5\":\"Flex-module__m-sm-n5\",\"mt-sm-n5\":\"Flex-module__mt-sm-n5\",\"my-sm-n5\":\"Flex-module__my-sm-n5\",\"mr-sm-n5\":\"Flex-module__mr-sm-n5\",\"mx-sm-n5\":\"Flex-module__mx-sm-n5\",\"mb-sm-n5\":\"Flex-module__mb-sm-n5\",\"ml-sm-n5\":\"Flex-module__ml-sm-n5\",\"m-sm-auto\":\"Flex-module__m-sm-auto\",\"mt-sm-auto\":\"Flex-module__mt-sm-auto\",\"my-sm-auto\":\"Flex-module__my-sm-auto\",\"mr-sm-auto\":\"Flex-module__mr-sm-auto\",\"mx-sm-auto\":\"Flex-module__mx-sm-auto\",\"mb-sm-auto\":\"Flex-module__mb-sm-auto\",\"ml-sm-auto\":\"Flex-module__ml-sm-auto\",\"m-md-0\":\"Flex-module__m-md-0\",\"mt-md-0\":\"Flex-module__mt-md-0\",\"my-md-0\":\"Flex-module__my-md-0\",\"mr-md-0\":\"Flex-module__mr-md-0\",\"mx-md-0\":\"Flex-module__mx-md-0\",\"mb-md-0\":\"Flex-module__mb-md-0\",\"ml-md-0\":\"Flex-module__ml-md-0\",\"m-md-1\":\"Flex-module__m-md-1\",\"mt-md-1\":\"Flex-module__mt-md-1\",\"my-md-1\":\"Flex-module__my-md-1\",\"mr-md-1\":\"Flex-module__mr-md-1\",\"mx-md-1\":\"Flex-module__mx-md-1\",\"mb-md-1\":\"Flex-module__mb-md-1\",\"ml-md-1\":\"Flex-module__ml-md-1\",\"m-md-2\":\"Flex-module__m-md-2\",\"mt-md-2\":\"Flex-module__mt-md-2\",\"my-md-2\":\"Flex-module__my-md-2\",\"mr-md-2\":\"Flex-module__mr-md-2\",\"mx-md-2\":\"Flex-module__mx-md-2\",\"mb-md-2\":\"Flex-module__mb-md-2\",\"ml-md-2\":\"Flex-module__ml-md-2\",\"m-md-3\":\"Flex-module__m-md-3\",\"mt-md-3\":\"Flex-module__mt-md-3\",\"my-md-3\":\"Flex-module__my-md-3\",\"mr-md-3\":\"Flex-module__mr-md-3\",\"mx-md-3\":\"Flex-module__mx-md-3\",\"mb-md-3\":\"Flex-module__mb-md-3\",\"ml-md-3\":\"Flex-module__ml-md-3\",\"m-md-4\":\"Flex-module__m-md-4\",\"mt-md-4\":\"Flex-module__mt-md-4\",\"my-md-4\":\"Flex-module__my-md-4\",\"mr-md-4\":\"Flex-module__mr-md-4\",\"mx-md-4\":\"Flex-module__mx-md-4\",\"mb-md-4\":\"Flex-module__mb-md-4\",\"ml-md-4\":\"Flex-module__ml-md-4\",\"m-md-5\":\"Flex-module__m-md-5\",\"mt-md-5\":\"Flex-module__mt-md-5\",\"my-md-5\":\"Flex-module__my-md-5\",\"mr-md-5\":\"Flex-module__mr-md-5\",\"mx-md-5\":\"Flex-module__mx-md-5\",\"mb-md-5\":\"Flex-module__mb-md-5\",\"ml-md-5\":\"Flex-module__ml-md-5\",\"p-md-0\":\"Flex-module__p-md-0\",\"pt-md-0\":\"Flex-module__pt-md-0\",\"py-md-0\":\"Flex-module__py-md-0\",\"pr-md-0\":\"Flex-module__pr-md-0\",\"px-md-0\":\"Flex-module__px-md-0\",\"pb-md-0\":\"Flex-module__pb-md-0\",\"pl-md-0\":\"Flex-module__pl-md-0\",\"p-md-1\":\"Flex-module__p-md-1\",\"pt-md-1\":\"Flex-module__pt-md-1\",\"py-md-1\":\"Flex-module__py-md-1\",\"pr-md-1\":\"Flex-module__pr-md-1\",\"px-md-1\":\"Flex-module__px-md-1\",\"pb-md-1\":\"Flex-module__pb-md-1\",\"pl-md-1\":\"Flex-module__pl-md-1\",\"p-md-2\":\"Flex-module__p-md-2\",\"pt-md-2\":\"Flex-module__pt-md-2\",\"py-md-2\":\"Flex-module__py-md-2\",\"pr-md-2\":\"Flex-module__pr-md-2\",\"px-md-2\":\"Flex-module__px-md-2\",\"pb-md-2\":\"Flex-module__pb-md-2\",\"pl-md-2\":\"Flex-module__pl-md-2\",\"p-md-3\":\"Flex-module__p-md-3\",\"pt-md-3\":\"Flex-module__pt-md-3\",\"py-md-3\":\"Flex-module__py-md-3\",\"pr-md-3\":\"Flex-module__pr-md-3\",\"px-md-3\":\"Flex-module__px-md-3\",\"pb-md-3\":\"Flex-module__pb-md-3\",\"pl-md-3\":\"Flex-module__pl-md-3\",\"p-md-4\":\"Flex-module__p-md-4\",\"pt-md-4\":\"Flex-module__pt-md-4\",\"py-md-4\":\"Flex-module__py-md-4\",\"pr-md-4\":\"Flex-module__pr-md-4\",\"px-md-4\":\"Flex-module__px-md-4\",\"pb-md-4\":\"Flex-module__pb-md-4\",\"pl-md-4\":\"Flex-module__pl-md-4\",\"p-md-5\":\"Flex-module__p-md-5\",\"pt-md-5\":\"Flex-module__pt-md-5\",\"py-md-5\":\"Flex-module__py-md-5\",\"pr-md-5\":\"Flex-module__pr-md-5\",\"px-md-5\":\"Flex-module__px-md-5\",\"pb-md-5\":\"Flex-module__pb-md-5\",\"pl-md-5\":\"Flex-module__pl-md-5\",\"m-md-n1\":\"Flex-module__m-md-n1\",\"mt-md-n1\":\"Flex-module__mt-md-n1\",\"my-md-n1\":\"Flex-module__my-md-n1\",\"mr-md-n1\":\"Flex-module__mr-md-n1\",\"mx-md-n1\":\"Flex-module__mx-md-n1\",\"mb-md-n1\":\"Flex-module__mb-md-n1\",\"ml-md-n1\":\"Flex-module__ml-md-n1\",\"m-md-n2\":\"Flex-module__m-md-n2\",\"mt-md-n2\":\"Flex-module__mt-md-n2\",\"my-md-n2\":\"Flex-module__my-md-n2\",\"mr-md-n2\":\"Flex-module__mr-md-n2\",\"mx-md-n2\":\"Flex-module__mx-md-n2\",\"mb-md-n2\":\"Flex-module__mb-md-n2\",\"ml-md-n2\":\"Flex-module__ml-md-n2\",\"m-md-n3\":\"Flex-module__m-md-n3\",\"mt-md-n3\":\"Flex-module__mt-md-n3\",\"my-md-n3\":\"Flex-module__my-md-n3\",\"mr-md-n3\":\"Flex-module__mr-md-n3\",\"mx-md-n3\":\"Flex-module__mx-md-n3\",\"mb-md-n3\":\"Flex-module__mb-md-n3\",\"ml-md-n3\":\"Flex-module__ml-md-n3\",\"m-md-n4\":\"Flex-module__m-md-n4\",\"mt-md-n4\":\"Flex-module__mt-md-n4\",\"my-md-n4\":\"Flex-module__my-md-n4\",\"mr-md-n4\":\"Flex-module__mr-md-n4\",\"mx-md-n4\":\"Flex-module__mx-md-n4\",\"mb-md-n4\":\"Flex-module__mb-md-n4\",\"ml-md-n4\":\"Flex-module__ml-md-n4\",\"m-md-n5\":\"Flex-module__m-md-n5\",\"mt-md-n5\":\"Flex-module__mt-md-n5\",\"my-md-n5\":\"Flex-module__my-md-n5\",\"mr-md-n5\":\"Flex-module__mr-md-n5\",\"mx-md-n5\":\"Flex-module__mx-md-n5\",\"mb-md-n5\":\"Flex-module__mb-md-n5\",\"ml-md-n5\":\"Flex-module__ml-md-n5\",\"m-md-auto\":\"Flex-module__m-md-auto\",\"mt-md-auto\":\"Flex-module__mt-md-auto\",\"my-md-auto\":\"Flex-module__my-md-auto\",\"mr-md-auto\":\"Flex-module__mr-md-auto\",\"mx-md-auto\":\"Flex-module__mx-md-auto\",\"mb-md-auto\":\"Flex-module__mb-md-auto\",\"ml-md-auto\":\"Flex-module__ml-md-auto\",\"m-lg-0\":\"Flex-module__m-lg-0\",\"mt-lg-0\":\"Flex-module__mt-lg-0\",\"my-lg-0\":\"Flex-module__my-lg-0\",\"mr-lg-0\":\"Flex-module__mr-lg-0\",\"mx-lg-0\":\"Flex-module__mx-lg-0\",\"mb-lg-0\":\"Flex-module__mb-lg-0\",\"ml-lg-0\":\"Flex-module__ml-lg-0\",\"m-lg-1\":\"Flex-module__m-lg-1\",\"mt-lg-1\":\"Flex-module__mt-lg-1\",\"my-lg-1\":\"Flex-module__my-lg-1\",\"mr-lg-1\":\"Flex-module__mr-lg-1\",\"mx-lg-1\":\"Flex-module__mx-lg-1\",\"mb-lg-1\":\"Flex-module__mb-lg-1\",\"ml-lg-1\":\"Flex-module__ml-lg-1\",\"m-lg-2\":\"Flex-module__m-lg-2\",\"mt-lg-2\":\"Flex-module__mt-lg-2\",\"my-lg-2\":\"Flex-module__my-lg-2\",\"mr-lg-2\":\"Flex-module__mr-lg-2\",\"mx-lg-2\":\"Flex-module__mx-lg-2\",\"mb-lg-2\":\"Flex-module__mb-lg-2\",\"ml-lg-2\":\"Flex-module__ml-lg-2\",\"m-lg-3\":\"Flex-module__m-lg-3\",\"mt-lg-3\":\"Flex-module__mt-lg-3\",\"my-lg-3\":\"Flex-module__my-lg-3\",\"mr-lg-3\":\"Flex-module__mr-lg-3\",\"mx-lg-3\":\"Flex-module__mx-lg-3\",\"mb-lg-3\":\"Flex-module__mb-lg-3\",\"ml-lg-3\":\"Flex-module__ml-lg-3\",\"m-lg-4\":\"Flex-module__m-lg-4\",\"mt-lg-4\":\"Flex-module__mt-lg-4\",\"my-lg-4\":\"Flex-module__my-lg-4\",\"mr-lg-4\":\"Flex-module__mr-lg-4\",\"mx-lg-4\":\"Flex-module__mx-lg-4\",\"mb-lg-4\":\"Flex-module__mb-lg-4\",\"ml-lg-4\":\"Flex-module__ml-lg-4\",\"m-lg-5\":\"Flex-module__m-lg-5\",\"mt-lg-5\":\"Flex-module__mt-lg-5\",\"my-lg-5\":\"Flex-module__my-lg-5\",\"mr-lg-5\":\"Flex-module__mr-lg-5\",\"mx-lg-5\":\"Flex-module__mx-lg-5\",\"mb-lg-5\":\"Flex-module__mb-lg-5\",\"ml-lg-5\":\"Flex-module__ml-lg-5\",\"p-lg-0\":\"Flex-module__p-lg-0\",\"pt-lg-0\":\"Flex-module__pt-lg-0\",\"py-lg-0\":\"Flex-module__py-lg-0\",\"pr-lg-0\":\"Flex-module__pr-lg-0\",\"px-lg-0\":\"Flex-module__px-lg-0\",\"pb-lg-0\":\"Flex-module__pb-lg-0\",\"pl-lg-0\":\"Flex-module__pl-lg-0\",\"p-lg-1\":\"Flex-module__p-lg-1\",\"pt-lg-1\":\"Flex-module__pt-lg-1\",\"py-lg-1\":\"Flex-module__py-lg-1\",\"pr-lg-1\":\"Flex-module__pr-lg-1\",\"px-lg-1\":\"Flex-module__px-lg-1\",\"pb-lg-1\":\"Flex-module__pb-lg-1\",\"pl-lg-1\":\"Flex-module__pl-lg-1\",\"p-lg-2\":\"Flex-module__p-lg-2\",\"pt-lg-2\":\"Flex-module__pt-lg-2\",\"py-lg-2\":\"Flex-module__py-lg-2\",\"pr-lg-2\":\"Flex-module__pr-lg-2\",\"px-lg-2\":\"Flex-module__px-lg-2\",\"pb-lg-2\":\"Flex-module__pb-lg-2\",\"pl-lg-2\":\"Flex-module__pl-lg-2\",\"p-lg-3\":\"Flex-module__p-lg-3\",\"pt-lg-3\":\"Flex-module__pt-lg-3\",\"py-lg-3\":\"Flex-module__py-lg-3\",\"pr-lg-3\":\"Flex-module__pr-lg-3\",\"px-lg-3\":\"Flex-module__px-lg-3\",\"pb-lg-3\":\"Flex-module__pb-lg-3\",\"pl-lg-3\":\"Flex-module__pl-lg-3\",\"p-lg-4\":\"Flex-module__p-lg-4\",\"pt-lg-4\":\"Flex-module__pt-lg-4\",\"py-lg-4\":\"Flex-module__py-lg-4\",\"pr-lg-4\":\"Flex-module__pr-lg-4\",\"px-lg-4\":\"Flex-module__px-lg-4\",\"pb-lg-4\":\"Flex-module__pb-lg-4\",\"pl-lg-4\":\"Flex-module__pl-lg-4\",\"p-lg-5\":\"Flex-module__p-lg-5\",\"pt-lg-5\":\"Flex-module__pt-lg-5\",\"py-lg-5\":\"Flex-module__py-lg-5\",\"pr-lg-5\":\"Flex-module__pr-lg-5\",\"px-lg-5\":\"Flex-module__px-lg-5\",\"pb-lg-5\":\"Flex-module__pb-lg-5\",\"pl-lg-5\":\"Flex-module__pl-lg-5\",\"m-lg-n1\":\"Flex-module__m-lg-n1\",\"mt-lg-n1\":\"Flex-module__mt-lg-n1\",\"my-lg-n1\":\"Flex-module__my-lg-n1\",\"mr-lg-n1\":\"Flex-module__mr-lg-n1\",\"mx-lg-n1\":\"Flex-module__mx-lg-n1\",\"mb-lg-n1\":\"Flex-module__mb-lg-n1\",\"ml-lg-n1\":\"Flex-module__ml-lg-n1\",\"m-lg-n2\":\"Flex-module__m-lg-n2\",\"mt-lg-n2\":\"Flex-module__mt-lg-n2\",\"my-lg-n2\":\"Flex-module__my-lg-n2\",\"mr-lg-n2\":\"Flex-module__mr-lg-n2\",\"mx-lg-n2\":\"Flex-module__mx-lg-n2\",\"mb-lg-n2\":\"Flex-module__mb-lg-n2\",\"ml-lg-n2\":\"Flex-module__ml-lg-n2\",\"m-lg-n3\":\"Flex-module__m-lg-n3\",\"mt-lg-n3\":\"Flex-module__mt-lg-n3\",\"my-lg-n3\":\"Flex-module__my-lg-n3\",\"mr-lg-n3\":\"Flex-module__mr-lg-n3\",\"mx-lg-n3\":\"Flex-module__mx-lg-n3\",\"mb-lg-n3\":\"Flex-module__mb-lg-n3\",\"ml-lg-n3\":\"Flex-module__ml-lg-n3\",\"m-lg-n4\":\"Flex-module__m-lg-n4\",\"mt-lg-n4\":\"Flex-module__mt-lg-n4\",\"my-lg-n4\":\"Flex-module__my-lg-n4\",\"mr-lg-n4\":\"Flex-module__mr-lg-n4\",\"mx-lg-n4\":\"Flex-module__mx-lg-n4\",\"mb-lg-n4\":\"Flex-module__mb-lg-n4\",\"ml-lg-n4\":\"Flex-module__ml-lg-n4\",\"m-lg-n5\":\"Flex-module__m-lg-n5\",\"mt-lg-n5\":\"Flex-module__mt-lg-n5\",\"my-lg-n5\":\"Flex-module__my-lg-n5\",\"mr-lg-n5\":\"Flex-module__mr-lg-n5\",\"mx-lg-n5\":\"Flex-module__mx-lg-n5\",\"mb-lg-n5\":\"Flex-module__mb-lg-n5\",\"ml-lg-n5\":\"Flex-module__ml-lg-n5\",\"m-lg-auto\":\"Flex-module__m-lg-auto\",\"mt-lg-auto\":\"Flex-module__mt-lg-auto\",\"my-lg-auto\":\"Flex-module__my-lg-auto\",\"mr-lg-auto\":\"Flex-module__mr-lg-auto\",\"mx-lg-auto\":\"Flex-module__mx-lg-auto\",\"mb-lg-auto\":\"Flex-module__mb-lg-auto\",\"ml-lg-auto\":\"Flex-module__ml-lg-auto\",\"m-xl-0\":\"Flex-module__m-xl-0\",\"mt-xl-0\":\"Flex-module__mt-xl-0\",\"my-xl-0\":\"Flex-module__my-xl-0\",\"mr-xl-0\":\"Flex-module__mr-xl-0\",\"mx-xl-0\":\"Flex-module__mx-xl-0\",\"mb-xl-0\":\"Flex-module__mb-xl-0\",\"ml-xl-0\":\"Flex-module__ml-xl-0\",\"m-xl-1\":\"Flex-module__m-xl-1\",\"mt-xl-1\":\"Flex-module__mt-xl-1\",\"my-xl-1\":\"Flex-module__my-xl-1\",\"mr-xl-1\":\"Flex-module__mr-xl-1\",\"mx-xl-1\":\"Flex-module__mx-xl-1\",\"mb-xl-1\":\"Flex-module__mb-xl-1\",\"ml-xl-1\":\"Flex-module__ml-xl-1\",\"m-xl-2\":\"Flex-module__m-xl-2\",\"mt-xl-2\":\"Flex-module__mt-xl-2\",\"my-xl-2\":\"Flex-module__my-xl-2\",\"mr-xl-2\":\"Flex-module__mr-xl-2\",\"mx-xl-2\":\"Flex-module__mx-xl-2\",\"mb-xl-2\":\"Flex-module__mb-xl-2\",\"ml-xl-2\":\"Flex-module__ml-xl-2\",\"m-xl-3\":\"Flex-module__m-xl-3\",\"mt-xl-3\":\"Flex-module__mt-xl-3\",\"my-xl-3\":\"Flex-module__my-xl-3\",\"mr-xl-3\":\"Flex-module__mr-xl-3\",\"mx-xl-3\":\"Flex-module__mx-xl-3\",\"mb-xl-3\":\"Flex-module__mb-xl-3\",\"ml-xl-3\":\"Flex-module__ml-xl-3\",\"m-xl-4\":\"Flex-module__m-xl-4\",\"mt-xl-4\":\"Flex-module__mt-xl-4\",\"my-xl-4\":\"Flex-module__my-xl-4\",\"mr-xl-4\":\"Flex-module__mr-xl-4\",\"mx-xl-4\":\"Flex-module__mx-xl-4\",\"mb-xl-4\":\"Flex-module__mb-xl-4\",\"ml-xl-4\":\"Flex-module__ml-xl-4\",\"m-xl-5\":\"Flex-module__m-xl-5\",\"mt-xl-5\":\"Flex-module__mt-xl-5\",\"my-xl-5\":\"Flex-module__my-xl-5\",\"mr-xl-5\":\"Flex-module__mr-xl-5\",\"mx-xl-5\":\"Flex-module__mx-xl-5\",\"mb-xl-5\":\"Flex-module__mb-xl-5\",\"ml-xl-5\":\"Flex-module__ml-xl-5\",\"p-xl-0\":\"Flex-module__p-xl-0\",\"pt-xl-0\":\"Flex-module__pt-xl-0\",\"py-xl-0\":\"Flex-module__py-xl-0\",\"pr-xl-0\":\"Flex-module__pr-xl-0\",\"px-xl-0\":\"Flex-module__px-xl-0\",\"pb-xl-0\":\"Flex-module__pb-xl-0\",\"pl-xl-0\":\"Flex-module__pl-xl-0\",\"p-xl-1\":\"Flex-module__p-xl-1\",\"pt-xl-1\":\"Flex-module__pt-xl-1\",\"py-xl-1\":\"Flex-module__py-xl-1\",\"pr-xl-1\":\"Flex-module__pr-xl-1\",\"px-xl-1\":\"Flex-module__px-xl-1\",\"pb-xl-1\":\"Flex-module__pb-xl-1\",\"pl-xl-1\":\"Flex-module__pl-xl-1\",\"p-xl-2\":\"Flex-module__p-xl-2\",\"pt-xl-2\":\"Flex-module__pt-xl-2\",\"py-xl-2\":\"Flex-module__py-xl-2\",\"pr-xl-2\":\"Flex-module__pr-xl-2\",\"px-xl-2\":\"Flex-module__px-xl-2\",\"pb-xl-2\":\"Flex-module__pb-xl-2\",\"pl-xl-2\":\"Flex-module__pl-xl-2\",\"p-xl-3\":\"Flex-module__p-xl-3\",\"pt-xl-3\":\"Flex-module__pt-xl-3\",\"py-xl-3\":\"Flex-module__py-xl-3\",\"pr-xl-3\":\"Flex-module__pr-xl-3\",\"px-xl-3\":\"Flex-module__px-xl-3\",\"pb-xl-3\":\"Flex-module__pb-xl-3\",\"pl-xl-3\":\"Flex-module__pl-xl-3\",\"p-xl-4\":\"Flex-module__p-xl-4\",\"pt-xl-4\":\"Flex-module__pt-xl-4\",\"py-xl-4\":\"Flex-module__py-xl-4\",\"pr-xl-4\":\"Flex-module__pr-xl-4\",\"px-xl-4\":\"Flex-module__px-xl-4\",\"pb-xl-4\":\"Flex-module__pb-xl-4\",\"pl-xl-4\":\"Flex-module__pl-xl-4\",\"p-xl-5\":\"Flex-module__p-xl-5\",\"pt-xl-5\":\"Flex-module__pt-xl-5\",\"py-xl-5\":\"Flex-module__py-xl-5\",\"pr-xl-5\":\"Flex-module__pr-xl-5\",\"px-xl-5\":\"Flex-module__px-xl-5\",\"pb-xl-5\":\"Flex-module__pb-xl-5\",\"pl-xl-5\":\"Flex-module__pl-xl-5\",\"m-xl-n1\":\"Flex-module__m-xl-n1\",\"mt-xl-n1\":\"Flex-module__mt-xl-n1\",\"my-xl-n1\":\"Flex-module__my-xl-n1\",\"mr-xl-n1\":\"Flex-module__mr-xl-n1\",\"mx-xl-n1\":\"Flex-module__mx-xl-n1\",\"mb-xl-n1\":\"Flex-module__mb-xl-n1\",\"ml-xl-n1\":\"Flex-module__ml-xl-n1\",\"m-xl-n2\":\"Flex-module__m-xl-n2\",\"mt-xl-n2\":\"Flex-module__mt-xl-n2\",\"my-xl-n2\":\"Flex-module__my-xl-n2\",\"mr-xl-n2\":\"Flex-module__mr-xl-n2\",\"mx-xl-n2\":\"Flex-module__mx-xl-n2\",\"mb-xl-n2\":\"Flex-module__mb-xl-n2\",\"ml-xl-n2\":\"Flex-module__ml-xl-n2\",\"m-xl-n3\":\"Flex-module__m-xl-n3\",\"mt-xl-n3\":\"Flex-module__mt-xl-n3\",\"my-xl-n3\":\"Flex-module__my-xl-n3\",\"mr-xl-n3\":\"Flex-module__mr-xl-n3\",\"mx-xl-n3\":\"Flex-module__mx-xl-n3\",\"mb-xl-n3\":\"Flex-module__mb-xl-n3\",\"ml-xl-n3\":\"Flex-module__ml-xl-n3\",\"m-xl-n4\":\"Flex-module__m-xl-n4\",\"mt-xl-n4\":\"Flex-module__mt-xl-n4\",\"my-xl-n4\":\"Flex-module__my-xl-n4\",\"mr-xl-n4\":\"Flex-module__mr-xl-n4\",\"mx-xl-n4\":\"Flex-module__mx-xl-n4\",\"mb-xl-n4\":\"Flex-module__mb-xl-n4\",\"ml-xl-n4\":\"Flex-module__ml-xl-n4\",\"m-xl-n5\":\"Flex-module__m-xl-n5\",\"mt-xl-n5\":\"Flex-module__mt-xl-n5\",\"my-xl-n5\":\"Flex-module__my-xl-n5\",\"mr-xl-n5\":\"Flex-module__mr-xl-n5\",\"mx-xl-n5\":\"Flex-module__mx-xl-n5\",\"mb-xl-n5\":\"Flex-module__mb-xl-n5\",\"ml-xl-n5\":\"Flex-module__ml-xl-n5\",\"m-xl-auto\":\"Flex-module__m-xl-auto\",\"mt-xl-auto\":\"Flex-module__mt-xl-auto\",\"my-xl-auto\":\"Flex-module__my-xl-auto\",\"mr-xl-auto\":\"Flex-module__mr-xl-auto\",\"mx-xl-auto\":\"Flex-module__mx-xl-auto\",\"mb-xl-auto\":\"Flex-module__mb-xl-auto\",\"ml-xl-auto\":\"Flex-module__ml-xl-auto\"};function Flex(props){var _props$as=props.as,Component=_props$as===void 0?'div':_props$as,_props$flex=props.flex,flex=_props$flex===void 0?'flex':_props$flex,smFlex=props.smFlex,mdFlex=props.mdFlex,lgFlex=props.lgFlex,xlFlex=props.xlFlex,_props$direction=props.direction,direction=_props$direction===void 0?'row':_props$direction,smDirection=props.smDirection,mdDirection=props.mdDirection,lgDirection=props.lgDirection,xlDirection=props.xlDirection,_props$alignItems=props.alignItems,alignItems=_props$alignItems===void 0?'stretch':_props$alignItems,smAlignItems=props.smAlignItems,mdAlignItems=props.mdAlignItems,lgAlignItems=props.lgAlignItems,xlAlignItems=props.xlAlignItems,_props$justifyContent=props.justifyContent,justifyContent=_props$justifyContent===void 0?'start':_props$justifyContent,smJustifyContent=props.smJustifyContent,mdJustifyContent=props.mdJustifyContent,lgJustifyContent=props.lgJustifyContent,xlJustifyContent=props.xlJustifyContent,wrap=props.wrap,smWrap=props.smWrap,mdWrap=props.mdWrap,lgWrap=props.lgWrap,xlWrap=props.xlWrap,className=props.className,children=props.children,restProps=_objectWithoutProperties(props,[\"as\",\"flex\",\"smFlex\",\"mdFlex\",\"lgFlex\",\"xlFlex\",\"direction\",\"smDirection\",\"mdDirection\",\"lgDirection\",\"xlDirection\",\"alignItems\",\"smAlignItems\",\"mdAlignItems\",\"lgAlignItems\",\"xlAlignItems\",\"justifyContent\",\"smJustifyContent\",\"mdJustifyContent\",\"lgJustifyContent\",\"xlJustifyContent\",\"wrap\",\"smWrap\",\"mdWrap\",\"lgWrap\",\"xlWrap\",\"className\",\"children\"]);var classes=[className,flex&&styles$a[\"d-\".concat(flex)],smFlex&&styles$a[\"d-sm-\".concat(smFlex)],mdFlex&&styles$a[\"d-md-\".concat(mdFlex)],lgFlex&&styles$a[\"d-lg-\".concat(lgFlex)],xlFlex&&styles$a[\"d-xl-\".concat(xlFlex)],direction&&styles$a[\"flex-\".concat(direction)],smDirection&&styles$a[\"flex-sm-\".concat(smDirection)],mdDirection&&styles$a[\"flex-md-\".concat(mdDirection)],lgDirection&&styles$a[\"flex-lg-\".concat(lgDirection)],xlDirection&&styles$a[\"flex-xl-\".concat(xlDirection)],alignItems&&styles$a[\"align-items-\".concat(alignItems)],smAlignItems&&styles$a[\"align-items-sm-\".concat(smAlignItems)],mdAlignItems&&styles$a[\"align-items-md-\".concat(mdAlignItems)],lgAlignItems&&styles$a[\"align-items-lg-\".concat(lgAlignItems)],xlAlignItems&&styles$a[\"align-items-xl-\".concat(xlAlignItems)],justifyContent&&styles$a[\"justify-content-\".concat(justifyContent)],smJustifyContent&&styles$a[\"justify-content-sm-\".concat(smJustifyContent)],mdJustifyContent&&styles$a[\"justify-content-md-\".concat(mdJustifyContent)],lgJustifyContent&&styles$a[\"justify-content-lg-\".concat(lgJustifyContent)],xlJustifyContent&&styles$a[\"justify-content-xl-\".concat(xlJustifyContent)],wrap&&styles$a[\"flex-\".concat(wrap)],smWrap&&styles$a[\"flex-sm-\".concat(smWrap)],mdWrap&&styles$a[\"flex-md-\".concat(mdWrap)],lgWrap&&styles$a[\"flex-lg-\".concat(lgWrap)],xlWrap&&styles$a[\"flex-xl-\".concat(xlWrap)]].filter(Boolean).join(' ');return/*#__PURE__*/React__default.createElement(Component,_extends({className:classes},restProps),children);}_c12=Flex;var styles$b={\"d-none\":\"Label-module__d-none\",\"d-inline\":\"Label-module__d-inline\",\"d-inline-block\":\"Label-module__d-inline-block\",\"d-block\":\"Label-module__d-block\",\"d-table\":\"Label-module__d-table\",\"d-table-row\":\"Label-module__d-table-row\",\"d-table-cell\":\"Label-module__d-table-cell\",\"d-flex\":\"Label-module__d-flex\",\"d-inline-flex\":\"Label-module__d-inline-flex\",\"d-sm-none\":\"Label-module__d-sm-none\",\"d-sm-inline\":\"Label-module__d-sm-inline\",\"d-sm-inline-block\":\"Label-module__d-sm-inline-block\",\"d-sm-block\":\"Label-module__d-sm-block\",\"d-sm-table\":\"Label-module__d-sm-table\",\"d-sm-table-row\":\"Label-module__d-sm-table-row\",\"d-sm-table-cell\":\"Label-module__d-sm-table-cell\",\"d-sm-flex\":\"Label-module__d-sm-flex\",\"d-sm-inline-flex\":\"Label-module__d-sm-inline-flex\",\"d-md-none\":\"Label-module__d-md-none\",\"d-md-inline\":\"Label-module__d-md-inline\",\"d-md-inline-block\":\"Label-module__d-md-inline-block\",\"d-md-block\":\"Label-module__d-md-block\",\"d-md-table\":\"Label-module__d-md-table\",\"d-md-table-row\":\"Label-module__d-md-table-row\",\"d-md-table-cell\":\"Label-module__d-md-table-cell\",\"d-md-flex\":\"Label-module__d-md-flex\",\"d-md-inline-flex\":\"Label-module__d-md-inline-flex\",\"d-lg-none\":\"Label-module__d-lg-none\",\"d-lg-inline\":\"Label-module__d-lg-inline\",\"d-lg-inline-block\":\"Label-module__d-lg-inline-block\",\"d-lg-block\":\"Label-module__d-lg-block\",\"d-lg-table\":\"Label-module__d-lg-table\",\"d-lg-table-row\":\"Label-module__d-lg-table-row\",\"d-lg-table-cell\":\"Label-module__d-lg-table-cell\",\"d-lg-flex\":\"Label-module__d-lg-flex\",\"d-lg-inline-flex\":\"Label-module__d-lg-inline-flex\",\"d-xl-none\":\"Label-module__d-xl-none\",\"d-xl-inline\":\"Label-module__d-xl-inline\",\"d-xl-inline-block\":\"Label-module__d-xl-inline-block\",\"d-xl-block\":\"Label-module__d-xl-block\",\"d-xl-table\":\"Label-module__d-xl-table\",\"d-xl-table-row\":\"Label-module__d-xl-table-row\",\"d-xl-table-cell\":\"Label-module__d-xl-table-cell\",\"d-xl-flex\":\"Label-module__d-xl-flex\",\"d-xl-inline-flex\":\"Label-module__d-xl-inline-flex\",\"d-print-none\":\"Label-module__d-print-none\",\"d-print-inline\":\"Label-module__d-print-inline\",\"d-print-inline-block\":\"Label-module__d-print-inline-block\",\"d-print-block\":\"Label-module__d-print-block\",\"d-print-table\":\"Label-module__d-print-table\",\"d-print-table-row\":\"Label-module__d-print-table-row\",\"d-print-table-cell\":\"Label-module__d-print-table-cell\",\"d-print-flex\":\"Label-module__d-print-flex\",\"d-print-inline-flex\":\"Label-module__d-print-inline-flex\",\"label\":\"Label-module__label\"};function Label(_ref){var htmlFor=_ref.htmlFor,children=_ref.children,className=_ref.className,props=_objectWithoutProperties(_ref,[\"htmlFor\",\"children\",\"className\"]);var classes=[className,styles$b['label']].filter(Boolean).join(' ');return/*#__PURE__*/React__default.createElement(\"label\",_extends({className:classes,htmlFor:htmlFor},props),children);}_c13=Label;var styles$c={\"d-none\":\"Input-module__d-none\",\"d-inline\":\"Input-module__d-inline\",\"d-inline-block\":\"Input-module__d-inline-block\",\"d-block\":\"Input-module__d-block\",\"d-table\":\"Input-module__d-table\",\"d-table-row\":\"Input-module__d-table-row\",\"d-table-cell\":\"Input-module__d-table-cell\",\"d-flex\":\"Input-module__d-flex\",\"d-inline-flex\":\"Input-module__d-inline-flex\",\"d-sm-none\":\"Input-module__d-sm-none\",\"d-sm-inline\":\"Input-module__d-sm-inline\",\"d-sm-inline-block\":\"Input-module__d-sm-inline-block\",\"d-sm-block\":\"Input-module__d-sm-block\",\"d-sm-table\":\"Input-module__d-sm-table\",\"d-sm-table-row\":\"Input-module__d-sm-table-row\",\"d-sm-table-cell\":\"Input-module__d-sm-table-cell\",\"d-sm-flex\":\"Input-module__d-sm-flex\",\"d-sm-inline-flex\":\"Input-module__d-sm-inline-flex\",\"d-md-none\":\"Input-module__d-md-none\",\"d-md-inline\":\"Input-module__d-md-inline\",\"d-md-inline-block\":\"Input-module__d-md-inline-block\",\"d-md-block\":\"Input-module__d-md-block\",\"d-md-table\":\"Input-module__d-md-table\",\"d-md-table-row\":\"Input-module__d-md-table-row\",\"d-md-table-cell\":\"Input-module__d-md-table-cell\",\"d-md-flex\":\"Input-module__d-md-flex\",\"d-md-inline-flex\":\"Input-module__d-md-inline-flex\",\"d-lg-none\":\"Input-module__d-lg-none\",\"d-lg-inline\":\"Input-module__d-lg-inline\",\"d-lg-inline-block\":\"Input-module__d-lg-inline-block\",\"d-lg-block\":\"Input-module__d-lg-block\",\"d-lg-table\":\"Input-module__d-lg-table\",\"d-lg-table-row\":\"Input-module__d-lg-table-row\",\"d-lg-table-cell\":\"Input-module__d-lg-table-cell\",\"d-lg-flex\":\"Input-module__d-lg-flex\",\"d-lg-inline-flex\":\"Input-module__d-lg-inline-flex\",\"d-xl-none\":\"Input-module__d-xl-none\",\"d-xl-inline\":\"Input-module__d-xl-inline\",\"d-xl-inline-block\":\"Input-module__d-xl-inline-block\",\"d-xl-block\":\"Input-module__d-xl-block\",\"d-xl-table\":\"Input-module__d-xl-table\",\"d-xl-table-row\":\"Input-module__d-xl-table-row\",\"d-xl-table-cell\":\"Input-module__d-xl-table-cell\",\"d-xl-flex\":\"Input-module__d-xl-flex\",\"d-xl-inline-flex\":\"Input-module__d-xl-inline-flex\",\"d-print-none\":\"Input-module__d-print-none\",\"d-print-inline\":\"Input-module__d-print-inline\",\"d-print-inline-block\":\"Input-module__d-print-inline-block\",\"d-print-block\":\"Input-module__d-print-block\",\"d-print-table\":\"Input-module__d-print-table\",\"d-print-table-row\":\"Input-module__d-print-table-row\",\"d-print-table-cell\":\"Input-module__d-print-table-cell\",\"d-print-flex\":\"Input-module__d-print-flex\",\"d-print-inline-flex\":\"Input-module__d-print-inline-flex\",\"wrapper\":\"Input-module__wrapper\",\"auto-suggestion-wrapper\":\"Input-module__auto-suggestion-wrapper\",\"auto-suggestion\":\"Input-module__auto-suggestion\"};var styles$d={\"d-none\":\"InputBase-module__d-none\",\"d-inline\":\"InputBase-module__d-inline\",\"d-inline-block\":\"InputBase-module__d-inline-block\",\"d-block\":\"InputBase-module__d-block\",\"d-table\":\"InputBase-module__d-table\",\"d-table-row\":\"InputBase-module__d-table-row\",\"d-table-cell\":\"InputBase-module__d-table-cell\",\"d-flex\":\"InputBase-module__d-flex\",\"d-inline-flex\":\"InputBase-module__d-inline-flex\",\"d-sm-none\":\"InputBase-module__d-sm-none\",\"d-sm-inline\":\"InputBase-module__d-sm-inline\",\"d-sm-inline-block\":\"InputBase-module__d-sm-inline-block\",\"d-sm-block\":\"InputBase-module__d-sm-block\",\"d-sm-table\":\"InputBase-module__d-sm-table\",\"d-sm-table-row\":\"InputBase-module__d-sm-table-row\",\"d-sm-table-cell\":\"InputBase-module__d-sm-table-cell\",\"d-sm-flex\":\"InputBase-module__d-sm-flex\",\"d-sm-inline-flex\":\"InputBase-module__d-sm-inline-flex\",\"d-md-none\":\"InputBase-module__d-md-none\",\"d-md-inline\":\"InputBase-module__d-md-inline\",\"d-md-inline-block\":\"InputBase-module__d-md-inline-block\",\"d-md-block\":\"InputBase-module__d-md-block\",\"d-md-table\":\"InputBase-module__d-md-table\",\"d-md-table-row\":\"InputBase-module__d-md-table-row\",\"d-md-table-cell\":\"InputBase-module__d-md-table-cell\",\"d-md-flex\":\"InputBase-module__d-md-flex\",\"d-md-inline-flex\":\"InputBase-module__d-md-inline-flex\",\"d-lg-none\":\"InputBase-module__d-lg-none\",\"d-lg-inline\":\"InputBase-module__d-lg-inline\",\"d-lg-inline-block\":\"InputBase-module__d-lg-inline-block\",\"d-lg-block\":\"InputBase-module__d-lg-block\",\"d-lg-table\":\"InputBase-module__d-lg-table\",\"d-lg-table-row\":\"InputBase-module__d-lg-table-row\",\"d-lg-table-cell\":\"InputBase-module__d-lg-table-cell\",\"d-lg-flex\":\"InputBase-module__d-lg-flex\",\"d-lg-inline-flex\":\"InputBase-module__d-lg-inline-flex\",\"d-xl-none\":\"InputBase-module__d-xl-none\",\"d-xl-inline\":\"InputBase-module__d-xl-inline\",\"d-xl-inline-block\":\"InputBase-module__d-xl-inline-block\",\"d-xl-block\":\"InputBase-module__d-xl-block\",\"d-xl-table\":\"InputBase-module__d-xl-table\",\"d-xl-table-row\":\"InputBase-module__d-xl-table-row\",\"d-xl-table-cell\":\"InputBase-module__d-xl-table-cell\",\"d-xl-flex\":\"InputBase-module__d-xl-flex\",\"d-xl-inline-flex\":\"InputBase-module__d-xl-inline-flex\",\"d-print-none\":\"InputBase-module__d-print-none\",\"d-print-inline\":\"InputBase-module__d-print-inline\",\"d-print-inline-block\":\"InputBase-module__d-print-inline-block\",\"d-print-block\":\"InputBase-module__d-print-block\",\"d-print-table\":\"InputBase-module__d-print-table\",\"d-print-table-row\":\"InputBase-module__d-print-table-row\",\"d-print-table-cell\":\"InputBase-module__d-print-table-cell\",\"d-print-flex\":\"InputBase-module__d-print-flex\",\"d-print-inline-flex\":\"InputBase-module__d-print-inline-flex\",\"input-wrapper\":\"InputBase-module__input-wrapper\",\"input\":\"InputBase-module__input\",\"input-icon\":\"InputBase-module__input-icon\",\"input-placeholder-right\":\"InputBase-module__input-placeholder-right\",\"input-disabled\":\"InputBase-module__input-disabled\",\"right-placeholder\":\"InputBase-module__right-placeholder\",\"input-line\":\"InputBase-module__input-line\",\"input-line-touched\":\"InputBase-module__input-line-touched\",\"input-line-error\":\"InputBase-module__input-line-error\",\"input-line-valid\":\"InputBase-module__input-line-valid\",\"icon-wrapper\":\"InputBase-module__icon-wrapper\",\"icon-wrapper-white\":\"InputBase-module__icon-wrapper-white\"};// In order to tell React to let the event persist, we call e.persist\n// See https://reactjs.org/docs/events.html#event-pooling\nfunction persist(fn){return function(event){event.persist();return fn(event);};}var InputBase=/*#__PURE__*/React.forwardRef(_c14=function _c14(_ref,ref){var type=_ref.type,error=_ref.error,touched=_ref.touched,isValid=_ref.isValid,debounce=_ref.debounce,onChange=_ref.onChange,placeholder=_ref.placeholder,placeholderRight=_ref.placeholderRight,placeholderAlwaysVisible=_ref.placeholderAlwaysVisible,disabled=_ref.disabled,id=_ref.id,icon=_ref.icon,_ref$iconVariant=_ref.iconVariant,iconVariant=_ref$iconVariant===void 0?'primary':_ref$iconVariant,iconProps=_ref.iconProps,onIconClick=_ref.onIconClick,inputProps=_objectWithoutProperties(_ref,[\"type\",\"error\",\"touched\",\"isValid\",\"debounce\",\"onChange\",\"placeholder\",\"placeholderRight\",\"placeholderAlwaysVisible\",\"disabled\",\"id\",\"icon\",\"iconVariant\",\"iconProps\",\"onIconClick\"]);InputBase.displayName='InputBase';var handleChange=debounce&&onChange?persist(dbounce(onChange,debounce)):onChange;var inputClasses=[styles$d['input'],placeholderRight&&styles$d['input-placeholder-right'],disabled&&styles$d['input-disabled']].filter(Boolean).join(' ');var inputLineClasses=!disabled?[styles$d['input-line'],touched&&error&&styles$d['input-line-error'],touched&&isValid&&styles$d['input-line-valid'],touched&&styles$d['input-line-touched']].filter(Boolean).join(' '):'';var iconWrapperClass=[styles$d['icon-wrapper'],iconVariant==='alternate'&&styles$d['icon-wrapper-white']].filter(Boolean).join(' ');return/*#__PURE__*/React__default.createElement(\"div\",{className:styles$d['input-wrapper']},/*#__PURE__*/React__default.createElement(\"input\",_extends({},inputProps,{className:inputClasses,type:type,onChange:handleChange,placeholder:placeholderAlwaysVisible?'':placeholder,disabled:disabled,id:id,ref:ref})),placeholderAlwaysVisible&&/*#__PURE__*/React__default.createElement(\"span\",{className:styles$d['right-placeholder']},placeholder),/*#__PURE__*/React__default.createElement(\"div\",{className:inputLineClasses}),icon&&/*#__PURE__*/React__default.createElement(\"button\",{className:iconWrapperClass,onClick:onIconClick,type:\"button\"},/*#__PURE__*/React__default.createElement(Icon,_extends({variant:iconVariant==='primary'?1:0,name:icon,fontSize:\"16px\"},iconProps))));});_c15=InputBase;var _slicedToArray$1=function(){function sliceIterator(arr,i){var _arr=[];var _n=true;var _d=false;var _e=undefined;try{for(var _i=arr[Symbol.iterator](),_s;!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break;}}catch(err){_d=true;_e=err;}finally{try{if(!_n&&_i[\"return\"])_i[\"return\"]();}finally{if(_d)throw _e;}}return _arr;}return function(arr,i){if(Array.isArray(arr)){return arr;}else if(Symbol.iterator in Object(arr)){return sliceIterator(arr,i);}else{throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");}};}();var dist=function dist(_ref){var data=_ref.data;var multiSection=_ref.multiSection;function nextNonEmptySectionIndex(sectionIndex){if(sectionIndex===null){sectionIndex=0;}else{sectionIndex++;}while(sectionIndex=0&&data[sectionIndex]===0){sectionIndex--;}return sectionIndex===-1?null:sectionIndex;}function next(position){var _position=_slicedToArray$1(position,2);var sectionIndex=_position[0];var itemIndex=_position[1];if(multiSection){if(itemIndex===null||itemIndex===data[sectionIndex]-1){sectionIndex=nextNonEmptySectionIndex(sectionIndex);if(sectionIndex===null){return[null,null];}return[sectionIndex,0];}return[sectionIndex,itemIndex+1];}if(data===0||itemIndex===data-1){return[null,null];}if(itemIndex===null){return[null,0];}return[null,itemIndex+1];}function prev(position){var _position2=_slicedToArray$1(position,2);var sectionIndex=_position2[0];var itemIndex=_position2[1];if(multiSection){if(itemIndex===null||itemIndex===0){sectionIndex=prevNonEmptySectionIndex(sectionIndex);if(sectionIndex===null){return[null,null];}return[sectionIndex,data[sectionIndex]-1];}return[sectionIndex,itemIndex-1];}if(data===0||itemIndex===0){return[null,null];}if(itemIndex===null){return[null,data-1];}return[null,itemIndex-1];}function isLast(position){return next(position)[1]===null;}return{next:next,prev:prev,isLast:isLast};};var dist$1=createCommonjsModule(function(module,exports){Object.defineProperty(exports,'__esModule',{value:true});var _slicedToArray=function(){function sliceIterator(arr,i){var _arr=[];var _n=true;var _d=false;var _e=undefined;try{for(var _i=arr[Symbol.iterator](),_s;!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break;}}catch(err){_d=true;_e=err;}finally{try{if(!_n&&_i['return'])_i['return']();}finally{if(_d)throw _e;}}return _arr;}return function(arr,i){if(Array.isArray(arr)){return arr;}else if(Symbol.iterator in Object(arr)){return sliceIterator(arr,i);}else{throw new TypeError('Invalid attempt to destructure non-iterable instance');}};}();function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{'default':obj};}function _toConsumableArray(arr){if(Array.isArray(arr)){for(var i=0,arr2=Array(arr.length);i1?_len-1:0),_key=1;_key<_len;_key++){names[_key-1]=arguments[_key];}var styles=names.map(function(name){return theme[name];}).filter(truthy);return typeof styles[0]==='string'||typeof classNameDecorator==='function'?{key:key,className:classNameDecorator?classNameDecorator.apply(undefined,_toConsumableArray(styles)):styles.join(' ')}:{key:key,style:_objectAssign2['default'].apply(undefined,[{}].concat(_toConsumableArray(styles)))};};};module.exports=exports['default'];});unwrapExports(dist$1);var compareObjects_1=createCommonjsModule(function(module,exports){Object.defineProperty(exports,\"__esModule\",{value:true});var _typeof=typeof Symbol===\"function\"&&typeof Symbol.iterator===\"symbol\"?function(obj){return typeof obj;}:function(obj){return obj&&typeof Symbol===\"function\"&&obj.constructor===Symbol&&obj!==Symbol.prototype?\"symbol\":typeof obj;};exports[\"default\"]=compareObjects;function compareObjects(objA,objB){var keys=arguments.length>2&&arguments[2]!==undefined?arguments[2]:[];if(objA===objB){return false;}var aKeys=Object.keys(objA);var bKeys=Object.keys(objB);if(aKeys.length!==bKeys.length){return true;}var keysMap={};var i=void 0,len=void 0;for(i=0,len=keys.length;i=0)continue;if(!Object.prototype.hasOwnProperty.call(obj,i))continue;target[i]=obj[i];}return target;}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}function _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");}return call&&(typeof call===\"object\"||typeof call===\"function\")?call:self;}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;}var Item=function(_Component){_inherits(Item,_Component);function Item(){var _ref;var _temp,_this,_ret;_classCallCheck(this,Item);for(var _len=arguments.length,args=Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key];}return _ret=(_temp=(_this=_possibleConstructorReturn(this,(_ref=Item.__proto__||Object.getPrototypeOf(Item)).call.apply(_ref,[this].concat(args))),_this),_this.storeItemReference=function(item){if(item!==null){_this.item=item;}},_this.onMouseEnter=function(event){var _this$props=_this.props,sectionIndex=_this$props.sectionIndex,itemIndex=_this$props.itemIndex;_this.props.onMouseEnter(event,{sectionIndex:sectionIndex,itemIndex:itemIndex});},_this.onMouseLeave=function(event){var _this$props2=_this.props,sectionIndex=_this$props2.sectionIndex,itemIndex=_this$props2.itemIndex;_this.props.onMouseLeave(event,{sectionIndex:sectionIndex,itemIndex:itemIndex});},_this.onMouseDown=function(event){var _this$props3=_this.props,sectionIndex=_this$props3.sectionIndex,itemIndex=_this$props3.itemIndex;_this.props.onMouseDown(event,{sectionIndex:sectionIndex,itemIndex:itemIndex});},_this.onClick=function(event){var _this$props4=_this.props,sectionIndex=_this$props4.sectionIndex,itemIndex=_this$props4.itemIndex;_this.props.onClick(event,{sectionIndex:sectionIndex,itemIndex:itemIndex});},_temp),_possibleConstructorReturn(_this,_ret);}_createClass(Item,[{key:'shouldComponentUpdate',value:function shouldComponentUpdate(nextProps){return(0,_compareObjects2[\"default\"])(nextProps,this.props,['renderItemData']);}},{key:'render',value:function render(){var _props=this.props,isHighlighted=_props.isHighlighted,item=_props.item,renderItem=_props.renderItem,renderItemData=_props.renderItemData,restProps=_objectWithoutProperties(_props,['isHighlighted','item','renderItem','renderItemData']);delete restProps.sectionIndex;delete restProps.itemIndex;if(typeof restProps.onMouseEnter==='function'){restProps.onMouseEnter=this.onMouseEnter;}if(typeof restProps.onMouseLeave==='function'){restProps.onMouseLeave=this.onMouseLeave;}if(typeof restProps.onMouseDown==='function'){restProps.onMouseDown=this.onMouseDown;}if(typeof restProps.onClick==='function'){restProps.onClick=this.onClick;}return _react2[\"default\"].createElement('li',_extends({role:'option'},restProps,{ref:this.storeItemReference}),renderItem(item,_extends({isHighlighted:isHighlighted},renderItemData)));}}]);return Item;}(React__default.Component);Item.propTypes={sectionIndex:_propTypes2[\"default\"].number,isHighlighted:_propTypes2[\"default\"].bool.isRequired,itemIndex:_propTypes2[\"default\"].number.isRequired,item:_propTypes2[\"default\"].any.isRequired,renderItem:_propTypes2[\"default\"].func.isRequired,renderItemData:_propTypes2[\"default\"].object.isRequired,onMouseEnter:_propTypes2[\"default\"].func,onMouseLeave:_propTypes2[\"default\"].func,onMouseDown:_propTypes2[\"default\"].func,onClick:_propTypes2[\"default\"].func};exports[\"default\"]=Item;});_c19=Item_1;unwrapExports(Item_1);var ItemsList_1=createCommonjsModule(_c20=function _c20(module,exports){Object.defineProperty(exports,\"__esModule\",{value:true});var _extends=Object.assign||function(target){for(var i=1;iscrollTop+itemsContainer.offsetHeight){// Item is off the bottom of the visible area\nscrollTop=itemOffsetRelativeToContainer+highlightedItem.offsetHeight-itemsContainer.offsetHeight;}if(scrollTop!==itemsContainer.scrollTop){itemsContainer.scrollTop=scrollTop;}}},{key:'render',value:function render(){var theme=this.theme;var _props3=this.props,id=_props3.id,multiSection=_props3.multiSection,renderInputComponent=_props3.renderInputComponent,renderItemsContainer=_props3.renderItemsContainer,highlightedSectionIndex=_props3.highlightedSectionIndex,highlightedItemIndex=_props3.highlightedItemIndex;var isInputFocused=this.state.isInputFocused;var renderedItems=multiSection?this.renderSections():this.renderItems();var isOpen=renderedItems!==null;var ariaActivedescendant=this.getItemId(highlightedSectionIndex,highlightedItemIndex);var itemsContainerId='react-autowhatever-'+id;var containerProps=_extends({role:'combobox','aria-haspopup':'listbox','aria-owns':itemsContainerId,'aria-expanded':isOpen},theme('react-autowhatever-'+id+'-container','container',isOpen&&'containerOpen'),this.props.containerProps);var inputComponent=renderInputComponent(_extends({type:'text',value:'',autoComplete:'off','aria-autocomplete':'list','aria-controls':itemsContainerId,'aria-activedescendant':ariaActivedescendant},theme('react-autowhatever-'+id+'-input','input',isOpen&&'inputOpen',isInputFocused&&'inputFocused'),this.props.inputProps,{onFocus:this.onFocus,onBlur:this.onBlur,onKeyDown:this.props.inputProps.onKeyDown&&this.onKeyDown,ref:this.storeInputReference}));var itemsContainer=renderItemsContainer({containerProps:_extends({id:itemsContainerId,role:'listbox'},theme('react-autowhatever-'+id+'-items-container','itemsContainer',isOpen&&'itemsContainerOpen'),{ref:this.storeItemsContainerReference}),children:renderedItems});return _react2[\"default\"].createElement('div',containerProps,inputComponent,itemsContainer);}}]);return Autowhatever;}(React__default.Component);Autowhatever.propTypes={id:_propTypes2[\"default\"].string,// Used in aria-* attributes. If multiple Autowhatever's are rendered on a page, they must have unique ids.\nmultiSection:_propTypes2[\"default\"].bool,// Indicates whether a multi section layout should be rendered.\nrenderInputComponent:_propTypes2[\"default\"].func,// When specified, it is used to render the input element.\nrenderItemsContainer:_propTypes2[\"default\"].func,// Renders the items container.\nitems:_propTypes2[\"default\"].array.isRequired,// Array of items or sections to render.\nrenderItem:_propTypes2[\"default\"].func,// This function renders a single item.\nrenderItemData:_propTypes2[\"default\"].object,// Arbitrary data that will be passed to renderItem()\nrenderSectionTitle:_propTypes2[\"default\"].func,// This function gets a section and renders its title.\ngetSectionItems:_propTypes2[\"default\"].func,// This function gets a section and returns its items, which will be passed into `renderItem` for rendering.\ncontainerProps:_propTypes2[\"default\"].object,// Arbitrary container props\ninputProps:_propTypes2[\"default\"].object,// Arbitrary input props\nitemProps:_propTypes2[\"default\"].oneOfType([// Arbitrary item props\n_propTypes2[\"default\"].object,_propTypes2[\"default\"].func]),highlightedSectionIndex:_propTypes2[\"default\"].number,// Section index of the highlighted item\nhighlightedItemIndex:_propTypes2[\"default\"].number,// Highlighted item index (within a section)\ntheme:_propTypes2[\"default\"].oneOfType([// Styles. See: https://github.com/markdalgleish/react-themeable\n_propTypes2[\"default\"].object,_propTypes2[\"default\"].array])};Autowhatever.defaultProps={id:'1',multiSection:false,renderInputComponent:defaultRenderInputComponent,renderItemsContainer:defaultRenderItemsContainer,renderItem:function renderItem(){throw new Error('`renderItem` must be provided');},renderItemData:emptyObject,renderSectionTitle:function renderSectionTitle(){throw new Error('`renderSectionTitle` must be provided');},getSectionItems:function getSectionItems(){throw new Error('`getSectionItems` must be provided');},containerProps:emptyObject,inputProps:emptyObject,itemProps:emptyObject,highlightedSectionIndex:null,highlightedItemIndex:null,theme:defaultTheme};exports[\"default\"]=Autowhatever;});_c23=Autowhatever_1;unwrapExports(Autowhatever_1);var dist$2=Autowhatever_1[\"default\"];var theme=createCommonjsModule(function(module,exports){Object.defineProperty(exports,\"__esModule\",{value:true});var defaultTheme=exports.defaultTheme={container:'react-autosuggest__container',containerOpen:'react-autosuggest__container--open',input:'react-autosuggest__input',inputOpen:'react-autosuggest__input--open',inputFocused:'react-autosuggest__input--focused',suggestionsContainer:'react-autosuggest__suggestions-container',suggestionsContainerOpen:'react-autosuggest__suggestions-container--open',suggestionsList:'react-autosuggest__suggestions-list',suggestion:'react-autosuggest__suggestion',suggestionFirst:'react-autosuggest__suggestion--first',suggestionHighlighted:'react-autosuggest__suggestion--highlighted',sectionContainer:'react-autosuggest__section-container',sectionContainerFirst:'react-autosuggest__section-container--first',sectionTitle:'react-autosuggest__section-title'};var mapToAutowhateverTheme=exports.mapToAutowhateverTheme=function mapToAutowhateverTheme(theme){var result={};for(var key in theme){switch(key){case'suggestionsContainer':result['itemsContainer']=theme[key];break;case'suggestionsContainerOpen':result['itemsContainerOpen']=theme[key];break;case'suggestion':result['item']=theme[key];break;case'suggestionFirst':result['itemFirst']=theme[key];break;case'suggestionHighlighted':result['itemHighlighted']=theme[key];break;case'suggestionsList':result['itemsList']=theme[key];break;default:result[key]=theme[key];}}return result;};});unwrapExports(theme);var theme_1=theme.defaultTheme;var theme_2=theme.mapToAutowhateverTheme;var Autosuggest_1=createCommonjsModule(_c24=function _c24(module,exports){Object.defineProperty(exports,\"__esModule\",{value:true});var _extends=Object.assign||function(target){for(var i=1;i0;};var defaultRenderSuggestionsContainer=function defaultRenderSuggestionsContainer(_ref){var containerProps=_ref.containerProps,children=_ref.children;return _react2[\"default\"].createElement('div',containerProps,children);};var Autosuggest=function(_Component){_inherits(Autosuggest,_Component);function Autosuggest(_ref2){var alwaysRenderSuggestions=_ref2.alwaysRenderSuggestions;_classCallCheck(this,Autosuggest);var _this=_possibleConstructorReturn(this,(Autosuggest.__proto__||Object.getPrototypeOf(Autosuggest)).call(this));_initialiseProps.call(_this);_this.state={isFocused:false,isCollapsed:!alwaysRenderSuggestions,highlightedSectionIndex:null,highlightedSuggestionIndex:null,highlightedSuggestion:null,valueBeforeUpDown:null};_this.justPressedUpDown=false;_this.justMouseEntered=false;_this.pressedSuggestion=null;return _this;}_createClass(Autosuggest,[{key:'componentDidMount',value:function componentDidMount(){document.addEventListener('mousedown',this.onDocumentMouseDown);document.addEventListener('mouseup',this.onDocumentMouseUp);this.input=this.autowhatever.input;this.suggestionsContainer=this.autowhatever.itemsContainer;}},{key:'componentWillReceiveProps',value:function componentWillReceiveProps(nextProps){if((0,_arrays2[\"default\"])(nextProps.suggestions,this.props.suggestions)){if(nextProps.highlightFirstSuggestion&&nextProps.suggestions.length>0&&this.justPressedUpDown===false&&this.justMouseEntered===false){this.highlightFirstSuggestion();}}else{if(this.willRenderSuggestions(nextProps)){if(this.state.isCollapsed&&!this.justSelectedSuggestion){this.revealSuggestions();}}else{this.resetHighlightedSuggestion();}}}},{key:'componentDidUpdate',value:function componentDidUpdate(prevProps,prevState){var _props=this.props,suggestions=_props.suggestions,onSuggestionHighlighted=_props.onSuggestionHighlighted,highlightFirstSuggestion=_props.highlightFirstSuggestion;if(!(0,_arrays2[\"default\"])(suggestions,prevProps.suggestions)&&suggestions.length>0&&highlightFirstSuggestion){this.highlightFirstSuggestion();return;}if(onSuggestionHighlighted){var highlightedSuggestion=this.getHighlightedSuggestion();var prevHighlightedSuggestion=prevState.highlightedSuggestion;if(highlightedSuggestion!=prevHighlightedSuggestion){onSuggestionHighlighted({suggestion:highlightedSuggestion});}}}},{key:'componentWillUnmount',value:function componentWillUnmount(){document.removeEventListener('mousedown',this.onDocumentMouseDown);document.removeEventListener('mouseup',this.onDocumentMouseUp);}},{key:'updateHighlightedSuggestion',value:function updateHighlightedSuggestion(sectionIndex,suggestionIndex,prevValue){var _this2=this;this.setState(function(state){var valueBeforeUpDown=state.valueBeforeUpDown;if(suggestionIndex===null){valueBeforeUpDown=null;}else if(valueBeforeUpDown===null&&typeof prevValue!=='undefined'){valueBeforeUpDown=prevValue;}return{highlightedSectionIndex:sectionIndex,highlightedSuggestionIndex:suggestionIndex,highlightedSuggestion:suggestionIndex===null?null:_this2.getSuggestion(sectionIndex,suggestionIndex),valueBeforeUpDown:valueBeforeUpDown};});}},{key:'resetHighlightedSuggestion',value:function resetHighlightedSuggestion(){var shouldResetValueBeforeUpDown=arguments.length>0&&arguments[0]!==undefined?arguments[0]:true;this.setState(function(state){var valueBeforeUpDown=state.valueBeforeUpDown;return{highlightedSectionIndex:null,highlightedSuggestionIndex:null,highlightedSuggestion:null,valueBeforeUpDown:shouldResetValueBeforeUpDown?null:valueBeforeUpDown};});}},{key:'revealSuggestions',value:function revealSuggestions(){this.setState({isCollapsed:false});}},{key:'closeSuggestions',value:function closeSuggestions(){this.setState({highlightedSectionIndex:null,highlightedSuggestionIndex:null,highlightedSuggestion:null,valueBeforeUpDown:null,isCollapsed:true});}},{key:'getSuggestion',value:function getSuggestion(sectionIndex,suggestionIndex){var _props2=this.props,suggestions=_props2.suggestions,multiSection=_props2.multiSection,getSectionSuggestions=_props2.getSectionSuggestions;if(multiSection){return getSectionSuggestions(suggestions[sectionIndex])[suggestionIndex];}return suggestions[suggestionIndex];}},{key:'getHighlightedSuggestion',value:function getHighlightedSuggestion(){var _state=this.state,highlightedSectionIndex=_state.highlightedSectionIndex,highlightedSuggestionIndex=_state.highlightedSuggestionIndex;if(highlightedSuggestionIndex===null){return null;}return this.getSuggestion(highlightedSectionIndex,highlightedSuggestionIndex);}},{key:'getSuggestionValueByIndex',value:function getSuggestionValueByIndex(sectionIndex,suggestionIndex){var getSuggestionValue=this.props.getSuggestionValue;return getSuggestionValue(this.getSuggestion(sectionIndex,suggestionIndex));}},{key:'getSuggestionIndices',value:function getSuggestionIndices(suggestionElement){var sectionIndex=suggestionElement.getAttribute('data-section-index');var suggestionIndex=suggestionElement.getAttribute('data-suggestion-index');return{sectionIndex:typeof sectionIndex==='string'?parseInt(sectionIndex,10):null,suggestionIndex:parseInt(suggestionIndex,10)};}},{key:'findSuggestionElement',value:function findSuggestionElement(startNode){var node=startNode;do{if(node.getAttribute('data-suggestion-index')!==null){return node;}node=node.parentNode;}while(node!==null);console.error('Clicked element:',startNode);// eslint-disable-line no-console\nthrow new Error(\"Couldn't find suggestion element\");}},{key:'maybeCallOnChange',value:function maybeCallOnChange(event,newValue,method){var _props$inputProps=this.props.inputProps,value=_props$inputProps.value,onChange=_props$inputProps.onChange;if(newValue!==value){onChange(event,{newValue:newValue,method:method});}}},{key:'willRenderSuggestions',value:function willRenderSuggestions(props){var suggestions=props.suggestions,inputProps=props.inputProps,shouldRenderSuggestions=props.shouldRenderSuggestions;var value=inputProps.value;return suggestions.length>0&&shouldRenderSuggestions(value);}},{key:'getQuery',value:function getQuery(){var inputProps=this.props.inputProps;var value=inputProps.value;var valueBeforeUpDown=this.state.valueBeforeUpDown;return(valueBeforeUpDown===null?value:valueBeforeUpDown).trim();}},{key:'render',value:function render(){var _this3=this;var _props3=this.props,suggestions=_props3.suggestions,renderInputComponent=_props3.renderInputComponent,onSuggestionsFetchRequested=_props3.onSuggestionsFetchRequested,renderSuggestion=_props3.renderSuggestion,inputProps=_props3.inputProps,multiSection=_props3.multiSection,renderSectionTitle=_props3.renderSectionTitle,id=_props3.id,getSectionSuggestions=_props3.getSectionSuggestions,theme$1=_props3.theme,getSuggestionValue=_props3.getSuggestionValue,alwaysRenderSuggestions=_props3.alwaysRenderSuggestions,highlightFirstSuggestion=_props3.highlightFirstSuggestion;var _state2=this.state,isFocused=_state2.isFocused,isCollapsed=_state2.isCollapsed,highlightedSectionIndex=_state2.highlightedSectionIndex,highlightedSuggestionIndex=_state2.highlightedSuggestionIndex,valueBeforeUpDown=_state2.valueBeforeUpDown;var shouldRenderSuggestions=alwaysRenderSuggestions?alwaysTrue:this.props.shouldRenderSuggestions;var value=inputProps.value,_onFocus=inputProps.onFocus,_onKeyDown=inputProps.onKeyDown;var willRenderSuggestions=this.willRenderSuggestions(this.props);var isOpen=alwaysRenderSuggestions||isFocused&&!isCollapsed&&willRenderSuggestions;var items=isOpen?suggestions:[];var autowhateverInputProps=_extends({},inputProps,{onFocus:function onFocus(event){if(!_this3.justSelectedSuggestion&&!_this3.justClickedOnSuggestionsContainer){var shouldRender=shouldRenderSuggestions(value);_this3.setState({isFocused:true,isCollapsed:!shouldRender});_onFocus&&_onFocus(event);if(shouldRender){onSuggestionsFetchRequested({value:value,reason:'input-focused'});}}},onBlur:function onBlur(event){if(_this3.justClickedOnSuggestionsContainer){_this3.input.focus();return;}_this3.blurEvent=event;if(!_this3.justSelectedSuggestion){_this3.onBlur();_this3.onSuggestionsClearRequested();}},onChange:function onChange(event){var value=event.target.value;var shouldRender=shouldRenderSuggestions(value);_this3.maybeCallOnChange(event,value,'type');if(_this3.suggestionsContainer){_this3.suggestionsContainer.scrollTop=0;}_this3.setState(_extends({},highlightFirstSuggestion?{}:{highlightedSectionIndex:null,highlightedSuggestionIndex:null,highlightedSuggestion:null},{valueBeforeUpDown:null,isCollapsed:!shouldRender}));if(shouldRender){onSuggestionsFetchRequested({value:value,reason:'input-changed'});}else{_this3.onSuggestionsClearRequested();}},onKeyDown:function onKeyDown(event,data){var keyCode=event.keyCode;switch(keyCode){case 40:// ArrowDown\ncase 38:// ArrowUp\nif(isCollapsed){if(shouldRenderSuggestions(value)){onSuggestionsFetchRequested({value:value,reason:'suggestions-revealed'});_this3.revealSuggestions();}}else if(suggestions.length>0){var newHighlightedSectionIndex=data.newHighlightedSectionIndex,newHighlightedItemIndex=data.newHighlightedItemIndex;var newValue=void 0;if(newHighlightedItemIndex===null){// valueBeforeUpDown can be null if, for example, user\n// hovers on the first suggestion and then pressed Up.\n// If that happens, use the original input value.\nnewValue=valueBeforeUpDown===null?value:valueBeforeUpDown;}else{newValue=_this3.getSuggestionValueByIndex(newHighlightedSectionIndex,newHighlightedItemIndex);}_this3.updateHighlightedSuggestion(newHighlightedSectionIndex,newHighlightedItemIndex,value);_this3.maybeCallOnChange(event,newValue,keyCode===40?'down':'up');}event.preventDefault();// Prevents the cursor from moving\n_this3.justPressedUpDown=true;setTimeout(function(){_this3.justPressedUpDown=false;});break;// Enter\ncase 13:{// See #388\nif(event.keyCode===229){break;}var highlightedSuggestion=_this3.getHighlightedSuggestion();if(isOpen&&!alwaysRenderSuggestions){_this3.closeSuggestions();}if(highlightedSuggestion!=null){var _newValue=getSuggestionValue(highlightedSuggestion);_this3.maybeCallOnChange(event,_newValue,'enter');_this3.onSuggestionSelected(event,{suggestion:highlightedSuggestion,suggestionValue:_newValue,suggestionIndex:highlightedSuggestionIndex,sectionIndex:highlightedSectionIndex,method:'enter'});_this3.justSelectedSuggestion=true;setTimeout(function(){_this3.justSelectedSuggestion=false;});}break;}// Escape\ncase 27:{if(isOpen){// If input.type === 'search', the browser clears the input\n// when Escape is pressed. We want to disable this default\n// behaviour so that, when suggestions are shown, we just hide\n// them, without clearing the input.\nevent.preventDefault();}var willCloseSuggestions=isOpen&&!alwaysRenderSuggestions;if(valueBeforeUpDown===null){// Didn't interact with Up/Down\nif(!willCloseSuggestions){var _newValue2='';_this3.maybeCallOnChange(event,_newValue2,'escape');if(shouldRenderSuggestions(_newValue2)){onSuggestionsFetchRequested({value:_newValue2,reason:'escape-pressed'});}else{_this3.onSuggestionsClearRequested();}}}else{// Interacted with Up/Down\n_this3.maybeCallOnChange(event,valueBeforeUpDown,'escape');}if(willCloseSuggestions){_this3.onSuggestionsClearRequested();_this3.closeSuggestions();}else{_this3.resetHighlightedSuggestion();}break;}}_onKeyDown&&_onKeyDown(event);}});var renderSuggestionData={query:this.getQuery()};return _react2[\"default\"].createElement(_reactAutowhatever2[\"default\"],{multiSection:multiSection,items:items,renderInputComponent:renderInputComponent,renderItemsContainer:this.renderSuggestionsContainer,renderItem:renderSuggestion,renderItemData:renderSuggestionData,renderSectionTitle:renderSectionTitle,getSectionItems:getSectionSuggestions,highlightedSectionIndex:highlightedSectionIndex,highlightedItemIndex:highlightedSuggestionIndex,inputProps:autowhateverInputProps,itemProps:this.itemProps,theme:(0,theme.mapToAutowhateverTheme)(theme$1),id:id,ref:this.storeAutowhateverRef});}}]);return Autosuggest;}(React__default.Component);Autosuggest.propTypes={suggestions:_propTypes2[\"default\"].array.isRequired,onSuggestionsFetchRequested:function onSuggestionsFetchRequested(props,propName){var onSuggestionsFetchRequested=props[propName];if(typeof onSuggestionsFetchRequested!=='function'){throw new Error(\"'onSuggestionsFetchRequested' must be implemented. See: https://github.com/moroshko/react-autosuggest#onSuggestionsFetchRequestedProp\");}},onSuggestionsClearRequested:function onSuggestionsClearRequested(props,propName){var onSuggestionsClearRequested=props[propName];if(props.alwaysRenderSuggestions===false&&typeof onSuggestionsClearRequested!=='function'){throw new Error(\"'onSuggestionsClearRequested' must be implemented. See: https://github.com/moroshko/react-autosuggest#onSuggestionsClearRequestedProp\");}},onSuggestionSelected:_propTypes2[\"default\"].func,onSuggestionHighlighted:_propTypes2[\"default\"].func,renderInputComponent:_propTypes2[\"default\"].func,renderSuggestionsContainer:_propTypes2[\"default\"].func,getSuggestionValue:_propTypes2[\"default\"].func.isRequired,renderSuggestion:_propTypes2[\"default\"].func.isRequired,inputProps:function inputProps(props,propName){var inputProps=props[propName];if(!inputProps.hasOwnProperty('value')){throw new Error(\"'inputProps' must have 'value'.\");}if(!inputProps.hasOwnProperty('onChange')){throw new Error(\"'inputProps' must have 'onChange'.\");}},shouldRenderSuggestions:_propTypes2[\"default\"].func,alwaysRenderSuggestions:_propTypes2[\"default\"].bool,multiSection:_propTypes2[\"default\"].bool,renderSectionTitle:function renderSectionTitle(props,propName){var renderSectionTitle=props[propName];if(props.multiSection===true&&typeof renderSectionTitle!=='function'){throw new Error(\"'renderSectionTitle' must be implemented. See: https://github.com/moroshko/react-autosuggest#renderSectionTitleProp\");}},getSectionSuggestions:function getSectionSuggestions(props,propName){var getSectionSuggestions=props[propName];if(props.multiSection===true&&typeof getSectionSuggestions!=='function'){throw new Error(\"'getSectionSuggestions' must be implemented. See: https://github.com/moroshko/react-autosuggest#getSectionSuggestionsProp\");}},focusInputOnSuggestionClick:_propTypes2[\"default\"].bool,highlightFirstSuggestion:_propTypes2[\"default\"].bool,theme:_propTypes2[\"default\"].object,id:_propTypes2[\"default\"].string};Autosuggest.defaultProps={renderSuggestionsContainer:defaultRenderSuggestionsContainer,shouldRenderSuggestions:defaultShouldRenderSuggestions,alwaysRenderSuggestions:false,multiSection:false,focusInputOnSuggestionClick:true,highlightFirstSuggestion:false,theme:theme.defaultTheme,id:'1'};var _initialiseProps=function _initialiseProps(){var _this4=this;this.onDocumentMouseDown=function(event){_this4.justClickedOnSuggestionsContainer=false;var node=event.detail&&event.detail.target||// This is for testing only. Please show me a better way to emulate this.\nevent.target;while(node!==null&&node!==document){if(node.getAttribute('data-suggestion-index')!==null){// Suggestion was clicked\nreturn;}if(node===_this4.suggestionsContainer){// Something else inside suggestions container was clicked\n_this4.justClickedOnSuggestionsContainer=true;return;}node=node.parentNode;}};this.storeAutowhateverRef=function(autowhatever){if(autowhatever!==null){_this4.autowhatever=autowhatever;}};this.onSuggestionMouseEnter=function(event,_ref3){var sectionIndex=_ref3.sectionIndex,itemIndex=_ref3.itemIndex;_this4.updateHighlightedSuggestion(sectionIndex,itemIndex);if(event.target===_this4.pressedSuggestion){_this4.justSelectedSuggestion=true;}_this4.justMouseEntered=true;setTimeout(function(){_this4.justMouseEntered=false;});};this.highlightFirstSuggestion=function(){_this4.updateHighlightedSuggestion(_this4.props.multiSection?0:null,0);};this.onDocumentMouseUp=function(){if(_this4.pressedSuggestion&&!_this4.justSelectedSuggestion){_this4.input.focus();}_this4.pressedSuggestion=null;};this.onSuggestionMouseDown=function(event){// Checking if this.justSelectedSuggestion is already true to not duplicate touch events in chrome\n// See: https://github.com/facebook/react/issues/9809#issuecomment-413978405\nif(!_this4.justSelectedSuggestion){_this4.justSelectedSuggestion=true;_this4.pressedSuggestion=event.target;}};this.onSuggestionsClearRequested=function(){var onSuggestionsClearRequested=_this4.props.onSuggestionsClearRequested;onSuggestionsClearRequested&&onSuggestionsClearRequested();};this.onSuggestionSelected=function(event,data){var _props4=_this4.props,alwaysRenderSuggestions=_props4.alwaysRenderSuggestions,onSuggestionSelected=_props4.onSuggestionSelected,onSuggestionsFetchRequested=_props4.onSuggestionsFetchRequested;onSuggestionSelected&&onSuggestionSelected(event,data);if(alwaysRenderSuggestions){onSuggestionsFetchRequested({value:data.suggestionValue,reason:'suggestion-selected'});}else{_this4.onSuggestionsClearRequested();}_this4.resetHighlightedSuggestion();};this.onSuggestionClick=function(event){var _props5=_this4.props,alwaysRenderSuggestions=_props5.alwaysRenderSuggestions,focusInputOnSuggestionClick=_props5.focusInputOnSuggestionClick;var _getSuggestionIndices=_this4.getSuggestionIndices(_this4.findSuggestionElement(event.target)),sectionIndex=_getSuggestionIndices.sectionIndex,suggestionIndex=_getSuggestionIndices.suggestionIndex;var clickedSuggestion=_this4.getSuggestion(sectionIndex,suggestionIndex);var clickedSuggestionValue=_this4.props.getSuggestionValue(clickedSuggestion);_this4.maybeCallOnChange(event,clickedSuggestionValue,'click');_this4.onSuggestionSelected(event,{suggestion:clickedSuggestion,suggestionValue:clickedSuggestionValue,suggestionIndex:suggestionIndex,sectionIndex:sectionIndex,method:'click'});if(!alwaysRenderSuggestions){_this4.closeSuggestions();}if(focusInputOnSuggestionClick===true){_this4.input.focus();}else{_this4.onBlur();}setTimeout(function(){_this4.justSelectedSuggestion=false;});};this.onBlur=function(){var _props6=_this4.props,inputProps=_props6.inputProps,shouldRenderSuggestions=_props6.shouldRenderSuggestions;var value=inputProps.value,onBlur=inputProps.onBlur;var highlightedSuggestion=_this4.getHighlightedSuggestion();var shouldRender=shouldRenderSuggestions(value);_this4.setState({isFocused:false,highlightedSectionIndex:null,highlightedSuggestionIndex:null,highlightedSuggestion:null,valueBeforeUpDown:null,isCollapsed:!shouldRender});onBlur&&onBlur(_this4.blurEvent,{highlightedSuggestion:highlightedSuggestion});};this.onSuggestionMouseLeave=function(event){_this4.resetHighlightedSuggestion(false);// shouldResetValueBeforeUpDown\nif(_this4.justSelectedSuggestion&&event.target===_this4.pressedSuggestion){_this4.justSelectedSuggestion=false;}};this.onSuggestionTouchStart=function(){_this4.justSelectedSuggestion=true;// todo: event.preventDefault when https://github.com/facebook/react/issues/2043\n// todo: gets released so onSuggestionMouseDown won't fire in chrome\n};this.onSuggestionTouchMove=function(){_this4.justSelectedSuggestion=false;_this4.pressedSuggestion=null;_this4.input.focus();};this.itemProps=function(_ref4){var sectionIndex=_ref4.sectionIndex,itemIndex=_ref4.itemIndex;return{'data-section-index':sectionIndex,'data-suggestion-index':itemIndex,onMouseEnter:_this4.onSuggestionMouseEnter,onMouseLeave:_this4.onSuggestionMouseLeave,onMouseDown:_this4.onSuggestionMouseDown,onTouchStart:_this4.onSuggestionTouchStart,onTouchMove:_this4.onSuggestionTouchMove,onClick:_this4.onSuggestionClick};};this.renderSuggestionsContainer=function(_ref5){var containerProps=_ref5.containerProps,children=_ref5.children;var renderSuggestionsContainer=_this4.props.renderSuggestionsContainer;return renderSuggestionsContainer({containerProps:containerProps,children:children,query:_this4.getQuery()});};};exports[\"default\"]=Autosuggest;});_c25=Autosuggest_1;unwrapExports(Autosuggest_1);var dist$3=Autosuggest_1[\"default\"];var styles$e={\"d-none\":\"AutoSuggestInput-module__d-none\",\"d-inline\":\"AutoSuggestInput-module__d-inline\",\"d-inline-block\":\"AutoSuggestInput-module__d-inline-block\",\"d-block\":\"AutoSuggestInput-module__d-block\",\"d-table\":\"AutoSuggestInput-module__d-table\",\"d-table-row\":\"AutoSuggestInput-module__d-table-row\",\"d-table-cell\":\"AutoSuggestInput-module__d-table-cell\",\"d-flex\":\"AutoSuggestInput-module__d-flex\",\"d-inline-flex\":\"AutoSuggestInput-module__d-inline-flex\",\"d-sm-none\":\"AutoSuggestInput-module__d-sm-none\",\"d-sm-inline\":\"AutoSuggestInput-module__d-sm-inline\",\"d-sm-inline-block\":\"AutoSuggestInput-module__d-sm-inline-block\",\"d-sm-block\":\"AutoSuggestInput-module__d-sm-block\",\"d-sm-table\":\"AutoSuggestInput-module__d-sm-table\",\"d-sm-table-row\":\"AutoSuggestInput-module__d-sm-table-row\",\"d-sm-table-cell\":\"AutoSuggestInput-module__d-sm-table-cell\",\"d-sm-flex\":\"AutoSuggestInput-module__d-sm-flex\",\"d-sm-inline-flex\":\"AutoSuggestInput-module__d-sm-inline-flex\",\"d-md-none\":\"AutoSuggestInput-module__d-md-none\",\"d-md-inline\":\"AutoSuggestInput-module__d-md-inline\",\"d-md-inline-block\":\"AutoSuggestInput-module__d-md-inline-block\",\"d-md-block\":\"AutoSuggestInput-module__d-md-block\",\"d-md-table\":\"AutoSuggestInput-module__d-md-table\",\"d-md-table-row\":\"AutoSuggestInput-module__d-md-table-row\",\"d-md-table-cell\":\"AutoSuggestInput-module__d-md-table-cell\",\"d-md-flex\":\"AutoSuggestInput-module__d-md-flex\",\"d-md-inline-flex\":\"AutoSuggestInput-module__d-md-inline-flex\",\"d-lg-none\":\"AutoSuggestInput-module__d-lg-none\",\"d-lg-inline\":\"AutoSuggestInput-module__d-lg-inline\",\"d-lg-inline-block\":\"AutoSuggestInput-module__d-lg-inline-block\",\"d-lg-block\":\"AutoSuggestInput-module__d-lg-block\",\"d-lg-table\":\"AutoSuggestInput-module__d-lg-table\",\"d-lg-table-row\":\"AutoSuggestInput-module__d-lg-table-row\",\"d-lg-table-cell\":\"AutoSuggestInput-module__d-lg-table-cell\",\"d-lg-flex\":\"AutoSuggestInput-module__d-lg-flex\",\"d-lg-inline-flex\":\"AutoSuggestInput-module__d-lg-inline-flex\",\"d-xl-none\":\"AutoSuggestInput-module__d-xl-none\",\"d-xl-inline\":\"AutoSuggestInput-module__d-xl-inline\",\"d-xl-inline-block\":\"AutoSuggestInput-module__d-xl-inline-block\",\"d-xl-block\":\"AutoSuggestInput-module__d-xl-block\",\"d-xl-table\":\"AutoSuggestInput-module__d-xl-table\",\"d-xl-table-row\":\"AutoSuggestInput-module__d-xl-table-row\",\"d-xl-table-cell\":\"AutoSuggestInput-module__d-xl-table-cell\",\"d-xl-flex\":\"AutoSuggestInput-module__d-xl-flex\",\"d-xl-inline-flex\":\"AutoSuggestInput-module__d-xl-inline-flex\",\"d-print-none\":\"AutoSuggestInput-module__d-print-none\",\"d-print-inline\":\"AutoSuggestInput-module__d-print-inline\",\"d-print-inline-block\":\"AutoSuggestInput-module__d-print-inline-block\",\"d-print-block\":\"AutoSuggestInput-module__d-print-block\",\"d-print-table\":\"AutoSuggestInput-module__d-print-table\",\"d-print-table-row\":\"AutoSuggestInput-module__d-print-table-row\",\"d-print-table-cell\":\"AutoSuggestInput-module__d-print-table-cell\",\"d-print-flex\":\"AutoSuggestInput-module__d-print-flex\",\"d-print-inline-flex\":\"AutoSuggestInput-module__d-print-inline-flex\",\"container\":\"AutoSuggestInput-module__container\",\"suggestionsContainer\":\"AutoSuggestInput-module__suggestionsContainer\",\"suggestionsList\":\"AutoSuggestInput-module__suggestionsList\",\"suggestion\":\"AutoSuggestInput-module__suggestion\",\"suggestionHighlighted\":\"AutoSuggestInput-module__suggestionHighlighted\"};function findParts(input,text){if(!input||!text){return[];}// Look for case insensitive ('gi' flag) matches\nvar regex=new RegExp(input,'gi');var chunks=[];var match;while(match=regex.exec(text)){var start=match.index;var end=regex.lastIndex;// We do not return zero-length matches\nif(end>start){chunks.push({start:start,end:end});}// Prevent browsers like Firefox from getting stuck in an infinite loop\n// See http://www.regexguru.com/2008/04/watch-out-for-zero-length-matches/\nif(match.index===regex.lastIndex){regex.lastIndex++;}}return chunks;}function highlightInput(input,text){var parts=findParts(input,text);if(parts.length===0){return text;}// Where to start boldifying\nvar last=0;return parts.map(function(_ref,index){var start=_ref.start,end=_ref.end;var jsx=/*#__PURE__*/React__default.createElement(React__default.Fragment,null,text.slice(last,start),/*#__PURE__*/React__default.createElement(\"strong\",null,text.slice(start,end)),index===parts.length-1&&text.slice(end)/* Render the rest if it's the last chunk */);last=end;return jsx;});}var AutoSuggestInput=/*#__PURE__*/React.forwardRef(_c26=_s2(function(_ref2,ref){_s2();var suggestions=_ref2.suggestions,onSuggestionSelected=_ref2.onSuggestionSelected,onSuggestionHighlighted=_ref2.onSuggestionHighlighted,_ref2$value=_ref2.value,value=_ref2$value===void 0?'':_ref2$value,_ref2$onChange=_ref2.onChange,onChange=_ref2$onChange===void 0?function(){}:_ref2$onChange,inputProps=_objectWithoutProperties(_ref2,[\"suggestions\",\"onSuggestionSelected\",\"onSuggestionHighlighted\",\"value\",\"onChange\"]);AutoSuggestInput.displayName='AutoSuggestInput';var _useState=React.useState(suggestions),_useState2=_slicedToArray(_useState,2),filteredSuggestions=_useState2[0],setFilteredSuggestions=_useState2[1];return/*#__PURE__*/React__default.createElement(dist$3,{ref:ref,suggestions:filteredSuggestions,onSuggestionsFetchRequested:function onSuggestionsFetchRequested(_ref3){var value=_ref3.value;var v=value.toLowerCase();setFilteredSuggestions(suggestions.filter(function(s){return s.value.toString().toLowerCase().includes(v);}));},onSuggestionsClearRequested:function onSuggestionsClearRequested(){return setFilteredSuggestions([]);},getSuggestionValue:function getSuggestionValue(s){return s.value;},renderSuggestion:function renderSuggestion(s,_ref4){var query=_ref4.query;return highlightInput(query,s.value);},inputProps:{onChange:onChange,value:value.toString()}// eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n// @ts-ignore: The typing for the onChange and onBlur from the Autosuggest.InputProps is not correct :(\n,renderInputComponent:function renderInputComponent(autoSuggestInputProps){return/*#__PURE__*/React__default.createElement(InputBase,_extends({},inputProps,autoSuggestInputProps));},onSuggestionSelected:typeof onSuggestionSelected==='function'?function(event,_ref5){var suggestion=_ref5.suggestion;event.stopPropagation();event.preventDefault();onSuggestionSelected(suggestion);}:undefined,onSuggestionHighlighted:typeof onSuggestionHighlighted==='function'?function(stuff){return onSuggestionHighlighted(stuff.suggestion.value);}:undefined,shouldRenderSuggestions:function shouldRenderSuggestions(){return true;},theme:{container:styles$e['container'],suggestionsContainer:styles$e['suggestionsContainer'],suggestionsList:styles$e['suggestionsList'],suggestion:styles$e['suggestion'],suggestionHighlighted:styles$e['suggestionHighlighted']}});},\"ZGLdUx2aHZfAhJ6a0DoNGhBBbPs=\"));_c27=AutoSuggestInput;var Input=/*#__PURE__*/React.forwardRef(_c28=function _c28(props,ref){Input.displayName='Input';var id=props.id,label=props.label,className=props.className,hideErrorText=props.hideErrorText,error=props.error,touched=props.touched,onChange=props.onChange,value=props.value,suggestions=props.suggestions,onSuggestionSelected=props.onSuggestionSelected,onSuggestionHighlighted=props.onSuggestionHighlighted,inputProps=_objectWithoutProperties(props,[\"id\",\"label\",\"className\",\"hideErrorText\",\"error\",\"touched\",\"onChange\",\"value\",\"suggestions\",\"onSuggestionSelected\",\"onSuggestionHighlighted\"]);var wrapperClass=[className,styles$c['wrapper']].filter(Boolean).join(' ');var inputId=id||label&&\"\".concat(label.toString().split(' ').join('-'),\"-input\")||'';return/*#__PURE__*/React__default.createElement(Flex,{className:wrapperClass,direction:\"column\"},label&&/*#__PURE__*/React__default.createElement(Label,{htmlFor:inputId},label),suggestions?/*#__PURE__*/React__default.createElement(AutoSuggestInput,_extends({ref:ref,error:error,id:id,touched:touched,onChange:onChange,value:value,suggestions:suggestions,onSuggestionSelected:onSuggestionSelected,onSuggestionHighlighted:onSuggestionHighlighted},inputProps)):/*#__PURE__*/React__default.createElement(InputBase,_extends({ref:ref,error:error,id:id,touched:touched,onChange:onChange,value:value},inputProps)),error&&touched&&!hideErrorText&&/*#__PURE__*/React__default.createElement(Error$1,null,error));});_c29=Input;var Paragraph=/*#__PURE__*/function(_React$PureComponent){_inherits(Paragraph,_React$PureComponent);var _super=_createSuper(Paragraph);function Paragraph(){_classCallCheck(this,Paragraph);return _super.apply(this,arguments);}_createClass(Paragraph,[{key:\"render\",value:function render(){var _this$props=this.props,children=_this$props.children,as=_this$props.as,props=_objectWithoutProperties(_this$props,[\"children\",\"as\"]);return/*#__PURE__*/React.createElement(Text,_extends({as:as},props),children);}}]);return Paragraph;}(React.PureComponent);_defineProperty(Paragraph,\"defaultProps\",{as:'p',fontSize:'body'});var Span=/*#__PURE__*/function(_React$PureComponent){_inherits(Span,_React$PureComponent);var _super=_createSuper(Span);function Span(){_classCallCheck(this,Span);return _super.apply(this,arguments);}_createClass(Span,[{key:\"render\",value:function render(){var _this$props=this.props,children=_this$props.children,as=_this$props.as,props=_objectWithoutProperties(_this$props,[\"children\",\"as\"]);return/*#__PURE__*/React.createElement(Text,_extends({as:as},props),children);}}]);return Span;}(React.PureComponent);_defineProperty(Span,\"defaultProps\",{as:'span',fontSize:'body'});var styles$f={\"d-none\":\"RangeSlider-module__d-none\",\"d-inline\":\"RangeSlider-module__d-inline\",\"d-inline-block\":\"RangeSlider-module__d-inline-block\",\"d-block\":\"RangeSlider-module__d-block\",\"d-table\":\"RangeSlider-module__d-table\",\"d-table-row\":\"RangeSlider-module__d-table-row\",\"d-table-cell\":\"RangeSlider-module__d-table-cell\",\"d-flex\":\"RangeSlider-module__d-flex\",\"d-inline-flex\":\"RangeSlider-module__d-inline-flex\",\"d-sm-none\":\"RangeSlider-module__d-sm-none\",\"d-sm-inline\":\"RangeSlider-module__d-sm-inline\",\"d-sm-inline-block\":\"RangeSlider-module__d-sm-inline-block\",\"d-sm-block\":\"RangeSlider-module__d-sm-block\",\"d-sm-table\":\"RangeSlider-module__d-sm-table\",\"d-sm-table-row\":\"RangeSlider-module__d-sm-table-row\",\"d-sm-table-cell\":\"RangeSlider-module__d-sm-table-cell\",\"d-sm-flex\":\"RangeSlider-module__d-sm-flex\",\"d-sm-inline-flex\":\"RangeSlider-module__d-sm-inline-flex\",\"d-md-none\":\"RangeSlider-module__d-md-none\",\"d-md-inline\":\"RangeSlider-module__d-md-inline\",\"d-md-inline-block\":\"RangeSlider-module__d-md-inline-block\",\"d-md-block\":\"RangeSlider-module__d-md-block\",\"d-md-table\":\"RangeSlider-module__d-md-table\",\"d-md-table-row\":\"RangeSlider-module__d-md-table-row\",\"d-md-table-cell\":\"RangeSlider-module__d-md-table-cell\",\"d-md-flex\":\"RangeSlider-module__d-md-flex\",\"d-md-inline-flex\":\"RangeSlider-module__d-md-inline-flex\",\"d-lg-none\":\"RangeSlider-module__d-lg-none\",\"d-lg-inline\":\"RangeSlider-module__d-lg-inline\",\"d-lg-inline-block\":\"RangeSlider-module__d-lg-inline-block\",\"d-lg-block\":\"RangeSlider-module__d-lg-block\",\"d-lg-table\":\"RangeSlider-module__d-lg-table\",\"d-lg-table-row\":\"RangeSlider-module__d-lg-table-row\",\"d-lg-table-cell\":\"RangeSlider-module__d-lg-table-cell\",\"d-lg-flex\":\"RangeSlider-module__d-lg-flex\",\"d-lg-inline-flex\":\"RangeSlider-module__d-lg-inline-flex\",\"d-xl-none\":\"RangeSlider-module__d-xl-none\",\"d-xl-inline\":\"RangeSlider-module__d-xl-inline\",\"d-xl-inline-block\":\"RangeSlider-module__d-xl-inline-block\",\"d-xl-block\":\"RangeSlider-module__d-xl-block\",\"d-xl-table\":\"RangeSlider-module__d-xl-table\",\"d-xl-table-row\":\"RangeSlider-module__d-xl-table-row\",\"d-xl-table-cell\":\"RangeSlider-module__d-xl-table-cell\",\"d-xl-flex\":\"RangeSlider-module__d-xl-flex\",\"d-xl-inline-flex\":\"RangeSlider-module__d-xl-inline-flex\",\"d-print-none\":\"RangeSlider-module__d-print-none\",\"d-print-inline\":\"RangeSlider-module__d-print-inline\",\"d-print-inline-block\":\"RangeSlider-module__d-print-inline-block\",\"d-print-block\":\"RangeSlider-module__d-print-block\",\"d-print-table\":\"RangeSlider-module__d-print-table\",\"d-print-table-row\":\"RangeSlider-module__d-print-table-row\",\"d-print-table-cell\":\"RangeSlider-module__d-print-table-cell\",\"d-print-flex\":\"RangeSlider-module__d-print-flex\",\"d-print-inline-flex\":\"RangeSlider-module__d-print-inline-flex\",\"slider\":\"RangeSlider-module__slider\"};var RangeSlider=/*#__PURE__*/function(_React$PureComponent){_inherits(RangeSlider,_React$PureComponent);var _super=_createSuper(RangeSlider);function RangeSlider(){_classCallCheck(this,RangeSlider);return _super.apply(this,arguments);}_createClass(RangeSlider,[{key:\"render\",value:function render(){var _this$props=this.props,className=_this$props.className,props=_objectWithoutProperties(_this$props,[\"className\"]);return/*#__PURE__*/React.createElement(\"input\",_extends({},props,{type:\"range\",className:className?[styles$f.slider,className].join(' '):styles$f.slider}));}}]);return RangeSlider;}(React.PureComponent);var styles$g={\"row\":\"Row-module__row\",\"no-gutters\":\"Row-module__no-gutters\",\"col\":\"Row-module__col\",\"justify-content-start\":\"Row-module__justify-content-start\",\"justify-content-end\":\"Row-module__justify-content-end\",\"justify-content-center\":\"Row-module__justify-content-center\",\"justify-content-between\":\"Row-module__justify-content-between\",\"justify-content-around\":\"Row-module__justify-content-around\",\"justify-content-evenly\":\"Row-module__justify-content-evenly\",\"align-items-start\":\"Row-module__align-items-start\",\"align-items-end\":\"Row-module__align-items-end\",\"align-items-center\":\"Row-module__align-items-center\",\"align-items-baseline\":\"Row-module__align-items-baseline\",\"align-items-stretch\":\"Row-module__align-items-stretch\",\"align-content-start\":\"Row-module__align-content-start\",\"align-content-end\":\"Row-module__align-content-end\",\"align-content-center\":\"Row-module__align-content-center\",\"align-content-between\":\"Row-module__align-content-between\",\"align-content-around\":\"Row-module__align-content-around\",\"align-content-stretch\":\"Row-module__align-content-stretch\",\"justify-content-sm-start\":\"Row-module__justify-content-sm-start\",\"justify-content-sm-end\":\"Row-module__justify-content-sm-end\",\"justify-content-sm-center\":\"Row-module__justify-content-sm-center\",\"justify-content-sm-between\":\"Row-module__justify-content-sm-between\",\"justify-content-sm-around\":\"Row-module__justify-content-sm-around\",\"justify-content-sm-evenly\":\"Row-module__justify-content-sm-evenly\",\"align-items-sm-start\":\"Row-module__align-items-sm-start\",\"align-items-sm-end\":\"Row-module__align-items-sm-end\",\"align-items-sm-center\":\"Row-module__align-items-sm-center\",\"align-items-sm-baseline\":\"Row-module__align-items-sm-baseline\",\"align-items-sm-stretch\":\"Row-module__align-items-sm-stretch\",\"align-content-sm-start\":\"Row-module__align-content-sm-start\",\"align-content-sm-end\":\"Row-module__align-content-sm-end\",\"align-content-sm-center\":\"Row-module__align-content-sm-center\",\"align-content-sm-between\":\"Row-module__align-content-sm-between\",\"align-content-sm-around\":\"Row-module__align-content-sm-around\",\"align-content-sm-stretch\":\"Row-module__align-content-sm-stretch\",\"justify-content-md-start\":\"Row-module__justify-content-md-start\",\"justify-content-md-end\":\"Row-module__justify-content-md-end\",\"justify-content-md-center\":\"Row-module__justify-content-md-center\",\"justify-content-md-between\":\"Row-module__justify-content-md-between\",\"justify-content-md-around\":\"Row-module__justify-content-md-around\",\"justify-content-md-evenly\":\"Row-module__justify-content-md-evenly\",\"align-items-md-start\":\"Row-module__align-items-md-start\",\"align-items-md-end\":\"Row-module__align-items-md-end\",\"align-items-md-center\":\"Row-module__align-items-md-center\",\"align-items-md-baseline\":\"Row-module__align-items-md-baseline\",\"align-items-md-stretch\":\"Row-module__align-items-md-stretch\",\"align-content-md-start\":\"Row-module__align-content-md-start\",\"align-content-md-end\":\"Row-module__align-content-md-end\",\"align-content-md-center\":\"Row-module__align-content-md-center\",\"align-content-md-between\":\"Row-module__align-content-md-between\",\"align-content-md-around\":\"Row-module__align-content-md-around\",\"align-content-md-stretch\":\"Row-module__align-content-md-stretch\",\"justify-content-lg-start\":\"Row-module__justify-content-lg-start\",\"justify-content-lg-end\":\"Row-module__justify-content-lg-end\",\"justify-content-lg-center\":\"Row-module__justify-content-lg-center\",\"justify-content-lg-between\":\"Row-module__justify-content-lg-between\",\"justify-content-lg-around\":\"Row-module__justify-content-lg-around\",\"justify-content-lg-evenly\":\"Row-module__justify-content-lg-evenly\",\"align-items-lg-start\":\"Row-module__align-items-lg-start\",\"align-items-lg-end\":\"Row-module__align-items-lg-end\",\"align-items-lg-center\":\"Row-module__align-items-lg-center\",\"align-items-lg-baseline\":\"Row-module__align-items-lg-baseline\",\"align-items-lg-stretch\":\"Row-module__align-items-lg-stretch\",\"align-content-lg-start\":\"Row-module__align-content-lg-start\",\"align-content-lg-end\":\"Row-module__align-content-lg-end\",\"align-content-lg-center\":\"Row-module__align-content-lg-center\",\"align-content-lg-between\":\"Row-module__align-content-lg-between\",\"align-content-lg-around\":\"Row-module__align-content-lg-around\",\"align-content-lg-stretch\":\"Row-module__align-content-lg-stretch\",\"justify-content-xl-start\":\"Row-module__justify-content-xl-start\",\"justify-content-xl-end\":\"Row-module__justify-content-xl-end\",\"justify-content-xl-center\":\"Row-module__justify-content-xl-center\",\"justify-content-xl-between\":\"Row-module__justify-content-xl-between\",\"justify-content-xl-around\":\"Row-module__justify-content-xl-around\",\"justify-content-xl-evenly\":\"Row-module__justify-content-xl-evenly\",\"align-items-xl-start\":\"Row-module__align-items-xl-start\",\"align-items-xl-end\":\"Row-module__align-items-xl-end\",\"align-items-xl-center\":\"Row-module__align-items-xl-center\",\"align-items-xl-baseline\":\"Row-module__align-items-xl-baseline\",\"align-items-xl-stretch\":\"Row-module__align-items-xl-stretch\",\"align-content-xl-start\":\"Row-module__align-content-xl-start\",\"align-content-xl-end\":\"Row-module__align-content-xl-end\",\"align-content-xl-center\":\"Row-module__align-content-xl-center\",\"align-content-xl-between\":\"Row-module__align-content-xl-between\",\"align-content-xl-around\":\"Row-module__align-content-xl-around\",\"align-content-xl-stretch\":\"Row-module__align-content-xl-stretch\"};var Row=/*#__PURE__*/function(_React$PureComponent){_inherits(Row,_React$PureComponent);var _super=_createSuper(Row);function Row(){_classCallCheck(this,Row);return _super.apply(this,arguments);}_createClass(Row,[{key:\"render\",value:function render(){var _this$props=this.props,className=_this$props.className,children=_this$props.children,alignItems=_this$props.alignItems,smAlignItems=_this$props.smAlignItems,mdAlignItems=_this$props.mdAlignItems,lgAlignItems=_this$props.lgAlignItems,xlAlignItems=_this$props.xlAlignItems,justifyContent=_this$props.justifyContent,smJustifyContent=_this$props.smJustifyContent,mdJustifyContent=_this$props.mdJustifyContent,lgJustifyContent=_this$props.lgJustifyContent,xlJustifyContent=_this$props.xlJustifyContent,noGutters=_this$props.noGutters,props=_objectWithoutProperties(_this$props,[\"className\",\"children\",\"alignItems\",\"smAlignItems\",\"mdAlignItems\",\"lgAlignItems\",\"xlAlignItems\",\"justifyContent\",\"smJustifyContent\",\"mdJustifyContent\",\"lgJustifyContent\",\"xlJustifyContent\",\"noGutters\"]);return/*#__PURE__*/React.createElement(\"div\",_extends({className:[styles$g['row'],alignItems&&styles$g[\"align-items-\".concat(alignItems)],smAlignItems&&styles$g[\"align-items-sm-\".concat(smAlignItems)],mdAlignItems&&styles$g[\"align-items-md-\".concat(mdAlignItems)],lgAlignItems&&styles$g[\"align-items-lg-\".concat(lgAlignItems)],xlAlignItems&&styles$g[\"align-items-xl-\".concat(xlAlignItems)],justifyContent&&styles$g[\"justify-content-\".concat(justifyContent)],smJustifyContent&&styles$g[\"justify-content-sm-\".concat(smJustifyContent)],mdJustifyContent&&styles$g[\"justify-content-md-\".concat(mdJustifyContent)],lgJustifyContent&&styles$g[\"justify-content-lg-\".concat(lgJustifyContent)],xlJustifyContent&&styles$g[\"justify-content-xl-\".concat(xlJustifyContent)],noGutters&&styles$g['no-gutters'],className].filter(Boolean).join(' ')},props),children);}}]);return Row;}(React.PureComponent);var styles$h={\"d-none\":\"TextArea-module__d-none\",\"d-inline\":\"TextArea-module__d-inline\",\"d-inline-block\":\"TextArea-module__d-inline-block\",\"d-block\":\"TextArea-module__d-block\",\"d-table\":\"TextArea-module__d-table\",\"d-table-row\":\"TextArea-module__d-table-row\",\"d-table-cell\":\"TextArea-module__d-table-cell\",\"d-flex\":\"TextArea-module__d-flex\",\"d-inline-flex\":\"TextArea-module__d-inline-flex\",\"d-sm-none\":\"TextArea-module__d-sm-none\",\"d-sm-inline\":\"TextArea-module__d-sm-inline\",\"d-sm-inline-block\":\"TextArea-module__d-sm-inline-block\",\"d-sm-block\":\"TextArea-module__d-sm-block\",\"d-sm-table\":\"TextArea-module__d-sm-table\",\"d-sm-table-row\":\"TextArea-module__d-sm-table-row\",\"d-sm-table-cell\":\"TextArea-module__d-sm-table-cell\",\"d-sm-flex\":\"TextArea-module__d-sm-flex\",\"d-sm-inline-flex\":\"TextArea-module__d-sm-inline-flex\",\"d-md-none\":\"TextArea-module__d-md-none\",\"d-md-inline\":\"TextArea-module__d-md-inline\",\"d-md-inline-block\":\"TextArea-module__d-md-inline-block\",\"d-md-block\":\"TextArea-module__d-md-block\",\"d-md-table\":\"TextArea-module__d-md-table\",\"d-md-table-row\":\"TextArea-module__d-md-table-row\",\"d-md-table-cell\":\"TextArea-module__d-md-table-cell\",\"d-md-flex\":\"TextArea-module__d-md-flex\",\"d-md-inline-flex\":\"TextArea-module__d-md-inline-flex\",\"d-lg-none\":\"TextArea-module__d-lg-none\",\"d-lg-inline\":\"TextArea-module__d-lg-inline\",\"d-lg-inline-block\":\"TextArea-module__d-lg-inline-block\",\"d-lg-block\":\"TextArea-module__d-lg-block\",\"d-lg-table\":\"TextArea-module__d-lg-table\",\"d-lg-table-row\":\"TextArea-module__d-lg-table-row\",\"d-lg-table-cell\":\"TextArea-module__d-lg-table-cell\",\"d-lg-flex\":\"TextArea-module__d-lg-flex\",\"d-lg-inline-flex\":\"TextArea-module__d-lg-inline-flex\",\"d-xl-none\":\"TextArea-module__d-xl-none\",\"d-xl-inline\":\"TextArea-module__d-xl-inline\",\"d-xl-inline-block\":\"TextArea-module__d-xl-inline-block\",\"d-xl-block\":\"TextArea-module__d-xl-block\",\"d-xl-table\":\"TextArea-module__d-xl-table\",\"d-xl-table-row\":\"TextArea-module__d-xl-table-row\",\"d-xl-table-cell\":\"TextArea-module__d-xl-table-cell\",\"d-xl-flex\":\"TextArea-module__d-xl-flex\",\"d-xl-inline-flex\":\"TextArea-module__d-xl-inline-flex\",\"d-print-none\":\"TextArea-module__d-print-none\",\"d-print-inline\":\"TextArea-module__d-print-inline\",\"d-print-inline-block\":\"TextArea-module__d-print-inline-block\",\"d-print-block\":\"TextArea-module__d-print-block\",\"d-print-table\":\"TextArea-module__d-print-table\",\"d-print-table-row\":\"TextArea-module__d-print-table-row\",\"d-print-table-cell\":\"TextArea-module__d-print-table-cell\",\"d-print-flex\":\"TextArea-module__d-print-flex\",\"d-print-inline-flex\":\"TextArea-module__d-print-inline-flex\",\"vdb-textarea-container\":\"TextArea-module__vdb-textarea-container\",\"vdb-textarea\":\"TextArea-module__vdb-textarea\",\"vdb-textarea-icon\":\"TextArea-module__vdb-textarea-icon\",\"vdb-textarea-icon-focus\":\"TextArea-module__vdb-textarea-icon-focus\"};var TextArea=/*#__PURE__*/function(_React$PureComponent){_inherits(TextArea,_React$PureComponent);var _super=_createSuper(TextArea);function TextArea(props){var _this;_classCallCheck(this,TextArea);_this=_super.call(this,props);_defineProperty(_assertThisInitialized(_this),\"emitChangeDebounced\",void 0);_defineProperty(_assertThisInitialized(_this),\"state\",{isFocused:false});_defineProperty(_assertThisInitialized(_this),\"handleChange\",function(e){_this.emitChangeDebounced(e.target.value);if(_this.props.onChange){_this.props.onChange(e);}});_defineProperty(_assertThisInitialized(_this),\"onTextAreaFocus\",function(){_this.setState({isFocused:true});});_defineProperty(_assertThisInitialized(_this),\"onTextAreaBlur\",function(){_this.setState({isFocused:false});});_this.emitChangeDebounced=dbounce(_this.emitChange,_this.props.debounceTime||250);return _this;}_createClass(TextArea,[{key:\"componentWillUnmount\",value:function componentWillUnmount(){// eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n// @ts-ignore the debounce function from lodash isn't correctly typed\nthis.emitChangeDebounced.cancel();}},{key:\"render\",value:function render(){var isFocused=this.state.isFocused;var _this$props=this.props,className=_this$props.className,debounceTime=_this$props.debounceTime,onDebouncedChange=_this$props.onDebouncedChange,icon=_this$props.icon,props=_objectWithoutProperties(_this$props,[\"className\",\"debounceTime\",\"onDebouncedChange\",\"icon\"]);return/*#__PURE__*/React.createElement(\"div\",{className:[\"\".concat(className||''),styles$h['vdb-textarea-container']].join(' ')},/*#__PURE__*/React.createElement(\"textarea\",_extends({className:styles$h['vdb-textarea']},props,{onChange:this.handleChange,onFocus:this.onTextAreaFocus,onBlur:this.onTextAreaBlur})),icon?/*#__PURE__*/React.createElement(Icon,{name:icon,className:isFocused?styles$h['vdb-textarea-icon-focus']:styles$h['vdb-textarea-icon'],fontSize:\"16\"}):null);}},{key:\"emitChange\",value:function emitChange(value){if(this.props.onDebouncedChange){this.props.onDebouncedChange(value);}}}]);return TextArea;}(React.PureComponent);var styles$i={\"d-none\":\"Toggle-module__d-none\",\"d-inline\":\"Toggle-module__d-inline\",\"d-inline-block\":\"Toggle-module__d-inline-block\",\"d-block\":\"Toggle-module__d-block\",\"d-table\":\"Toggle-module__d-table\",\"d-table-row\":\"Toggle-module__d-table-row\",\"d-table-cell\":\"Toggle-module__d-table-cell\",\"d-flex\":\"Toggle-module__d-flex\",\"d-inline-flex\":\"Toggle-module__d-inline-flex\",\"d-sm-none\":\"Toggle-module__d-sm-none\",\"d-sm-inline\":\"Toggle-module__d-sm-inline\",\"d-sm-inline-block\":\"Toggle-module__d-sm-inline-block\",\"d-sm-block\":\"Toggle-module__d-sm-block\",\"d-sm-table\":\"Toggle-module__d-sm-table\",\"d-sm-table-row\":\"Toggle-module__d-sm-table-row\",\"d-sm-table-cell\":\"Toggle-module__d-sm-table-cell\",\"d-sm-flex\":\"Toggle-module__d-sm-flex\",\"d-sm-inline-flex\":\"Toggle-module__d-sm-inline-flex\",\"d-md-none\":\"Toggle-module__d-md-none\",\"d-md-inline\":\"Toggle-module__d-md-inline\",\"d-md-inline-block\":\"Toggle-module__d-md-inline-block\",\"d-md-block\":\"Toggle-module__d-md-block\",\"d-md-table\":\"Toggle-module__d-md-table\",\"d-md-table-row\":\"Toggle-module__d-md-table-row\",\"d-md-table-cell\":\"Toggle-module__d-md-table-cell\",\"d-md-flex\":\"Toggle-module__d-md-flex\",\"d-md-inline-flex\":\"Toggle-module__d-md-inline-flex\",\"d-lg-none\":\"Toggle-module__d-lg-none\",\"d-lg-inline\":\"Toggle-module__d-lg-inline\",\"d-lg-inline-block\":\"Toggle-module__d-lg-inline-block\",\"d-lg-block\":\"Toggle-module__d-lg-block\",\"d-lg-table\":\"Toggle-module__d-lg-table\",\"d-lg-table-row\":\"Toggle-module__d-lg-table-row\",\"d-lg-table-cell\":\"Toggle-module__d-lg-table-cell\",\"d-lg-flex\":\"Toggle-module__d-lg-flex\",\"d-lg-inline-flex\":\"Toggle-module__d-lg-inline-flex\",\"d-xl-none\":\"Toggle-module__d-xl-none\",\"d-xl-inline\":\"Toggle-module__d-xl-inline\",\"d-xl-inline-block\":\"Toggle-module__d-xl-inline-block\",\"d-xl-block\":\"Toggle-module__d-xl-block\",\"d-xl-table\":\"Toggle-module__d-xl-table\",\"d-xl-table-row\":\"Toggle-module__d-xl-table-row\",\"d-xl-table-cell\":\"Toggle-module__d-xl-table-cell\",\"d-xl-flex\":\"Toggle-module__d-xl-flex\",\"d-xl-inline-flex\":\"Toggle-module__d-xl-inline-flex\",\"d-print-none\":\"Toggle-module__d-print-none\",\"d-print-inline\":\"Toggle-module__d-print-inline\",\"d-print-inline-block\":\"Toggle-module__d-print-inline-block\",\"d-print-block\":\"Toggle-module__d-print-block\",\"d-print-table\":\"Toggle-module__d-print-table\",\"d-print-table-row\":\"Toggle-module__d-print-table-row\",\"d-print-table-cell\":\"Toggle-module__d-print-table-cell\",\"d-print-flex\":\"Toggle-module__d-print-flex\",\"d-print-inline-flex\":\"Toggle-module__d-print-inline-flex\",\"switch\":\"Toggle-module__switch\",\"switch-input\":\"Toggle-module__switch-input\",\"switch-wrapper\":\"Toggle-module__switch-wrapper\",\"switch-label--on\":\"Toggle-module__switch-label--on\",\"switch-toggle\":\"Toggle-module__switch-toggle\",\"switch-label\":\"Toggle-module__switch-label\",\"switch-label--off\":\"Toggle-module__switch-label--off\",\"switch-icon\":\"Toggle-module__switch-icon\",\"switch-icon-right\":\"Toggle-module__switch-icon-right\",\"dark\":\"Toggle-module__dark\",\"switchChecked\":\"Toggle-module__switchChecked\"};var Toggle=/*#__PURE__*/function(_React$Component){_inherits(Toggle,_React$Component);var _super=_createSuper(Toggle);function Toggle(props){var _this;_classCallCheck(this,Toggle);_this=_super.call(this,props);_this.state={checked:!!props.checked};return _this;}_createClass(Toggle,[{key:\"handleChange\",value:function handleChange(checked){this.setState({checked:checked});if(typeof this.props.onChange==='function'){this.props.onChange(checked);}}},{key:\"render\",value:function render(){var _this2=this;var _this$props=this.props,name=_this$props.name,customIcons=_this$props.customIcons,setCheckedByParent=_this$props.setCheckedByParent,theme=_this$props.theme,iconSize=_this$props.iconSize,props=_objectWithoutProperties(_this$props,[\"name\",\"customIcons\",\"setCheckedByParent\",\"theme\",\"iconSize\"]);var _ref=!setCheckedByParent?this.state:this.props,checked=_ref.checked;var switchClassName=checked?styles$i['switchChecked']:'';var iconVariant;if(theme==='dark'){iconVariant=checked?1:0;}else{iconVariant=2;}return/*#__PURE__*/React.createElement(\"div\",{className:[styles$i['switch'],styles$i[theme],switchClassName].filter(Boolean).join(' ')},/*#__PURE__*/React.createElement(\"input\",_extends({},props,{type:\"checkbox\",id:name,name:name,checked:checked,className:styles$i['switch-input'],onChange:function onChange(e){return _this2.handleChange(e.target.checked);}})),/*#__PURE__*/React.createElement(\"label\",{htmlFor:name,className:styles$i['switch-wrapper']},/*#__PURE__*/React.createElement(\"div\",{className:styles$i['switch-toggle']}),/*#__PURE__*/React.createElement(\"div\",{className:[styles$i['switch-label'],styles$i['switch-label--on']].join(' ')},/*#__PURE__*/React.createElement(Icon,{className:styles$i['switch-icon'],name:customIcons&&customIcons.left||'check',variant:iconVariant,fontSize:iconSize}),customIcons&&customIcons.right&&/*#__PURE__*/React.createElement(Icon,{className:styles$i['switch-icon-right'],name:customIcons.right,variant:iconVariant,fontSize:iconSize}))));}}]);return Toggle;}(React.Component);_defineProperty(Toggle,\"defaultProps\",{theme:'light',iconSize:'11px'});var styles$j={\"d-none\":\"Pressable-module__d-none\",\"d-inline\":\"Pressable-module__d-inline\",\"d-inline-block\":\"Pressable-module__d-inline-block\",\"d-block\":\"Pressable-module__d-block\",\"d-table\":\"Pressable-module__d-table\",\"d-table-row\":\"Pressable-module__d-table-row\",\"d-table-cell\":\"Pressable-module__d-table-cell\",\"d-flex\":\"Pressable-module__d-flex\",\"d-inline-flex\":\"Pressable-module__d-inline-flex\",\"d-sm-none\":\"Pressable-module__d-sm-none\",\"d-sm-inline\":\"Pressable-module__d-sm-inline\",\"d-sm-inline-block\":\"Pressable-module__d-sm-inline-block\",\"d-sm-block\":\"Pressable-module__d-sm-block\",\"d-sm-table\":\"Pressable-module__d-sm-table\",\"d-sm-table-row\":\"Pressable-module__d-sm-table-row\",\"d-sm-table-cell\":\"Pressable-module__d-sm-table-cell\",\"d-sm-flex\":\"Pressable-module__d-sm-flex\",\"d-sm-inline-flex\":\"Pressable-module__d-sm-inline-flex\",\"d-md-none\":\"Pressable-module__d-md-none\",\"d-md-inline\":\"Pressable-module__d-md-inline\",\"d-md-inline-block\":\"Pressable-module__d-md-inline-block\",\"d-md-block\":\"Pressable-module__d-md-block\",\"d-md-table\":\"Pressable-module__d-md-table\",\"d-md-table-row\":\"Pressable-module__d-md-table-row\",\"d-md-table-cell\":\"Pressable-module__d-md-table-cell\",\"d-md-flex\":\"Pressable-module__d-md-flex\",\"d-md-inline-flex\":\"Pressable-module__d-md-inline-flex\",\"d-lg-none\":\"Pressable-module__d-lg-none\",\"d-lg-inline\":\"Pressable-module__d-lg-inline\",\"d-lg-inline-block\":\"Pressable-module__d-lg-inline-block\",\"d-lg-block\":\"Pressable-module__d-lg-block\",\"d-lg-table\":\"Pressable-module__d-lg-table\",\"d-lg-table-row\":\"Pressable-module__d-lg-table-row\",\"d-lg-table-cell\":\"Pressable-module__d-lg-table-cell\",\"d-lg-flex\":\"Pressable-module__d-lg-flex\",\"d-lg-inline-flex\":\"Pressable-module__d-lg-inline-flex\",\"d-xl-none\":\"Pressable-module__d-xl-none\",\"d-xl-inline\":\"Pressable-module__d-xl-inline\",\"d-xl-inline-block\":\"Pressable-module__d-xl-inline-block\",\"d-xl-block\":\"Pressable-module__d-xl-block\",\"d-xl-table\":\"Pressable-module__d-xl-table\",\"d-xl-table-row\":\"Pressable-module__d-xl-table-row\",\"d-xl-table-cell\":\"Pressable-module__d-xl-table-cell\",\"d-xl-flex\":\"Pressable-module__d-xl-flex\",\"d-xl-inline-flex\":\"Pressable-module__d-xl-inline-flex\",\"d-print-none\":\"Pressable-module__d-print-none\",\"d-print-inline\":\"Pressable-module__d-print-inline\",\"d-print-inline-block\":\"Pressable-module__d-print-inline-block\",\"d-print-block\":\"Pressable-module__d-print-block\",\"d-print-table\":\"Pressable-module__d-print-table\",\"d-print-table-row\":\"Pressable-module__d-print-table-row\",\"d-print-table-cell\":\"Pressable-module__d-print-table-cell\",\"d-print-flex\":\"Pressable-module__d-print-flex\",\"d-print-inline-flex\":\"Pressable-module__d-print-inline-flex\",\"button\":\"Pressable-module__button\",\"button-speadIcon\":\"Pressable-module__button-speadIcon\",\"button-primary\":\"Pressable-module__button-primary\",\"icon-variant-1\":\"Pressable-module__icon-variant-1\",\"icon-variant-2\":\"Pressable-module__icon-variant-2\",\"icon-variant-3\":\"Pressable-module__icon-variant-3\",\"icon-variant-4\":\"Pressable-module__icon-variant-4\",\"button-alternate\":\"Pressable-module__button-alternate\",\"button-outline\":\"Pressable-module__button-outline\",\"button-red\":\"Pressable-module__button-red\",\"button-start\":\"Pressable-module__button-start\",\"button-icon\":\"Pressable-module__button-icon\",\"button-small\":\"Pressable-module__button-small\",\"button-end\":\"Pressable-module__button-end\",\"button-xsmall\":\"Pressable-module__button-xsmall\",\"button-icononly\":\"Pressable-module__button-icononly\",\"text\":\"Pressable-module__text\",\"text-with-icon\":\"Pressable-module__text-with-icon\",\"white\":\"Pressable-module__white\",\"charcoal-gray\":\"Pressable-module__charcoal-gray\",\"warm-gray\":\"Pressable-module__warm-gray\"};var renderIcon=function renderIcon(icon,hideicon,iconSize){return!hideicon&&/*#__PURE__*/React.createElement(React.Fragment,null,/*#__PURE__*/React.createElement(Icon,{name:icon,className:[styles$j['button-icon'],styles$j['icon-variant-1']].join(' '),variant:1,fontSize:iconSize}),/*#__PURE__*/React.createElement(Icon,{name:icon,className:[styles$j['button-icon'],styles$j['icon-variant-2']].join(' '),variant:2,fontSize:iconSize}),/*#__PURE__*/React.createElement(Icon,{name:icon,className:[styles$j['button-icon'],styles$j['icon-variant-3']].join(' '),variant:3,fontSize:iconSize}),/*#__PURE__*/React.createElement(Icon,{name:icon,className:[styles$j['button-icon'],styles$j['icon-variant-4']].join(' '),variant:4,fontSize:iconSize}));};var Pressable=/*#__PURE__*/function(_React$PureComponent){_inherits(Pressable,_React$PureComponent);var _super=_createSuper(Pressable);function Pressable(){_classCallCheck(this,Pressable);return _super.apply(this,arguments);}_createClass(Pressable,[{key:\"render\",value:function render(){var _this$props=this.props,children=_this$props.children,className=_this$props.className,variant=_this$props.variant,smallDeprecatedProp=_this$props.small,iconplacement=_this$props.iconplacement,icon=_this$props.icon,icononly=_this$props.icononly,color=_this$props.color,hideicon=_this$props.hideicon,size=_this$props.size,iconSize=_this$props.iconSize,as=_this$props.as,spreadIcon=_this$props.spreadIcon,props=_objectWithoutProperties(_this$props,[\"children\",\"className\",\"variant\",\"small\",\"iconplacement\",\"icon\",\"icononly\",\"color\",\"hideicon\",\"size\",\"iconSize\",\"as\",\"spreadIcon\"]);var isXSmall=size==='xsmall';var isSmall=size==='small'||smallDeprecatedProp;var iconSizeValue;if(iconSize){iconSizeValue=iconSize;}else{iconSizeValue=isSmall?'11px':'14px';}var shouldHideicon=variant==='text'||!!hideicon;// eslint-disable-next-line @typescript-eslint/no-explicit-any\nvar RenderedComponent=as;if(!variant){return null;}if(smallDeprecatedProp&&true){// eslint-disable-next-line\nconsole.warn('The `small` prop in Button/Link has been deprecated since v4.9.0, use `{ size: \"small\" }` instead');}var classNames=mergeClassNames(styles$j.button,styles$j[variant],isXSmall&&styles$j['button-xsmall'],isSmall&&styles$j['button-small'],styles$j[\"button-\".concat(iconplacement)],icononly&&styles$j['button-icononly'],color&&styles$j[color],spreadIcon&&styles$j['button-speadIcon'],className);return/*#__PURE__*/React.createElement(RenderedComponent,_extends({className:classNames},props),iconplacement==='start'&&icon&&renderIcon(icon,shouldHideicon,iconSizeValue),!icononly&&children,iconplacement==='end'&&icon&&renderIcon(icon,shouldHideicon,iconSizeValue));}}]);return Pressable;}(React.PureComponent);var Button=/*#__PURE__*/function(_React$PureComponent){_inherits(Button,_React$PureComponent);var _super=_createSuper(Button);function Button(){var _this;_classCallCheck(this,Button);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key];}_this=_super.call.apply(_super,[this].concat(args));_defineProperty(_assertThisInitialized(_this),\"render\",function(){return/*#__PURE__*/React.createElement(Pressable,_this.props);});return _this;}return Button;}(React.PureComponent);_defineProperty(Button,\"defaultProps\",{variant:'button-primary',iconplacement:'end',icon:'arrow-right',hideicon:false,icononly:false,as:'button'});var Link=/*#__PURE__*/function(_React$PureComponent){_inherits(Link,_React$PureComponent);var _super=_createSuper(Link);function Link(){var _this;_classCallCheck(this,Link);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key];}_this=_super.call.apply(_super,[this].concat(args));_defineProperty(_assertThisInitialized(_this),\"render\",function(){return/*#__PURE__*/React.createElement(Pressable,_this.props);});return _this;}return Link;}(React.PureComponent);_defineProperty(Link,\"defaultProps\",{variant:'text',as:'a'});var styles$k={\"loader\":\"Loader-module__loader\",\"loader-image\":\"Loader-module__loader-image\"};var Loader=/*#__PURE__*/function(_React$PureComponent){_inherits(Loader,_React$PureComponent);var _super=_createSuper(Loader);function Loader(){_classCallCheck(this,Loader);return _super.apply(this,arguments);}_createClass(Loader,[{key:\"render\",value:function render(){var _this$props=this.props,className=_this$props.className,height=_this$props.height,props=_objectWithoutProperties(_this$props,[\"className\",\"height\"]);return/*#__PURE__*/React.createElement(\"div\",_extends({className:[styles$k['loader'],className].filter(Boolean).join(' '),style:{height:height}},props),/*#__PURE__*/React.createElement(\"div\",{className:styles$k['loader-image']}));}}]);return Loader;}(React.PureComponent);var cardStyles={\"d-none\":\"Card-module__d-none\",\"d-inline\":\"Card-module__d-inline\",\"d-inline-block\":\"Card-module__d-inline-block\",\"d-block\":\"Card-module__d-block\",\"d-table\":\"Card-module__d-table\",\"d-table-row\":\"Card-module__d-table-row\",\"d-table-cell\":\"Card-module__d-table-cell\",\"d-flex\":\"Card-module__d-flex\",\"d-inline-flex\":\"Card-module__d-inline-flex\",\"d-sm-none\":\"Card-module__d-sm-none\",\"d-sm-inline\":\"Card-module__d-sm-inline\",\"d-sm-inline-block\":\"Card-module__d-sm-inline-block\",\"d-sm-block\":\"Card-module__d-sm-block\",\"d-sm-table\":\"Card-module__d-sm-table\",\"d-sm-table-row\":\"Card-module__d-sm-table-row\",\"d-sm-table-cell\":\"Card-module__d-sm-table-cell\",\"d-sm-flex\":\"Card-module__d-sm-flex\",\"d-sm-inline-flex\":\"Card-module__d-sm-inline-flex\",\"d-md-none\":\"Card-module__d-md-none\",\"d-md-inline\":\"Card-module__d-md-inline\",\"d-md-inline-block\":\"Card-module__d-md-inline-block\",\"d-md-block\":\"Card-module__d-md-block\",\"d-md-table\":\"Card-module__d-md-table\",\"d-md-table-row\":\"Card-module__d-md-table-row\",\"d-md-table-cell\":\"Card-module__d-md-table-cell\",\"d-md-flex\":\"Card-module__d-md-flex\",\"d-md-inline-flex\":\"Card-module__d-md-inline-flex\",\"d-lg-none\":\"Card-module__d-lg-none\",\"d-lg-inline\":\"Card-module__d-lg-inline\",\"d-lg-inline-block\":\"Card-module__d-lg-inline-block\",\"d-lg-block\":\"Card-module__d-lg-block\",\"d-lg-table\":\"Card-module__d-lg-table\",\"d-lg-table-row\":\"Card-module__d-lg-table-row\",\"d-lg-table-cell\":\"Card-module__d-lg-table-cell\",\"d-lg-flex\":\"Card-module__d-lg-flex\",\"d-lg-inline-flex\":\"Card-module__d-lg-inline-flex\",\"d-xl-none\":\"Card-module__d-xl-none\",\"d-xl-inline\":\"Card-module__d-xl-inline\",\"d-xl-inline-block\":\"Card-module__d-xl-inline-block\",\"d-xl-block\":\"Card-module__d-xl-block\",\"d-xl-table\":\"Card-module__d-xl-table\",\"d-xl-table-row\":\"Card-module__d-xl-table-row\",\"d-xl-table-cell\":\"Card-module__d-xl-table-cell\",\"d-xl-flex\":\"Card-module__d-xl-flex\",\"d-xl-inline-flex\":\"Card-module__d-xl-inline-flex\",\"d-print-none\":\"Card-module__d-print-none\",\"d-print-inline\":\"Card-module__d-print-inline\",\"d-print-inline-block\":\"Card-module__d-print-inline-block\",\"d-print-block\":\"Card-module__d-print-block\",\"d-print-table\":\"Card-module__d-print-table\",\"d-print-table-row\":\"Card-module__d-print-table-row\",\"d-print-table-cell\":\"Card-module__d-print-table-cell\",\"d-print-flex\":\"Card-module__d-print-flex\",\"d-print-inline-flex\":\"Card-module__d-print-inline-flex\",\"Card\":\"Card-module__Card\",\"imageContainer\":\"Card-module__imageContainer\",\"content\":\"Card-module__content\",\"contentInverted\":\"Card-module__contentInverted\",\"contentWithIconVertical\":\"Card-module__contentWithIconVertical\",\"contentWithIconHorizontal\":\"Card-module__contentWithIconHorizontal\",\"separatorIcon\":\"Card-module__separatorIcon\",\"separatorIconVertical\":\"Card-module__separatorIconVertical\",\"separatorIconHorizontal\":\"Card-module__separatorIconHorizontal\",\"separatorIconRight\":\"Card-module__separatorIconRight\"};var Card=/*#__PURE__*/function(_React$Component){_inherits(Card,_React$Component);var _super=_createSuper(Card);function Card(){_classCallCheck(this,Card);return _super.apply(this,arguments);}_createClass(Card,[{key:\"render\",value:function render(){var _this$props=this.props,image=_this$props.image,imageAsBackground=_this$props.imageAsBackground,className=_this$props.className,separatorIcon=_this$props.separatorIcon,horizontal=_this$props.horizontal,children=_this$props.children,imageProps=_this$props.imageProps,inverted=_this$props.inverted,iconRight=_this$props.iconRight;if(!image){return null;}var wrapperClassNames=mergeClassNames(cardStyles.Card,className);var contentClassNames=mergeClassNames(cardStyles.content,separatorIcon&&horizontal&&cardStyles.contentWithIconHorizontal,separatorIcon&&!horizontal&&cardStyles.contentWithIconVertical,inverted&&cardStyles.contentInverted);var iconClassNames=mergeClassNames(cardStyles.separatorIcon,separatorIcon&&horizontal&&cardStyles.separatorIconHorizontal,separatorIcon&&!horizontal&&cardStyles.separatorIconVertical,separatorIcon&&!horizontal&&iconRight&&cardStyles.separatorIconRight);var display=horizontal?'flex':'inline-block';var imageContainerStyle=imageAsBackground?{backgroundImage:\"url(\".concat(image,\")\")}:{};var imageStyle=imageAsBackground?{opacity:0}:{};return/*#__PURE__*/React.createElement(Block,{withShadow:true,small:true,className:wrapperClassNames,display:display},/*#__PURE__*/React.createElement(\"div\",{className:cardStyles.imageContainer,style:imageContainerStyle},/*#__PURE__*/React.createElement(Image,_extends({src:image},imageProps,{style:imageStyle}))),/*#__PURE__*/React.createElement(\"div\",{className:contentClassNames},separatorIcon&&/*#__PURE__*/React.createElement(\"div\",null,/*#__PURE__*/React.createElement(Block,{smallPadding:true,dark:true,withShadow:true,display:\"inline-block\",className:iconClassNames},/*#__PURE__*/React.createElement(Icon,{name:separatorIcon,variant:1}))),children));}}]);return Card;}(React.Component);_defineProperty(Card,\"defaultProps\",{imageProps:{},className:undefined,imageAsBackground:false});var styles$l={\"d-none\":\"BlogCard-module__d-none\",\"d-inline\":\"BlogCard-module__d-inline\",\"d-inline-block\":\"BlogCard-module__d-inline-block\",\"d-block\":\"BlogCard-module__d-block\",\"d-table\":\"BlogCard-module__d-table\",\"d-table-row\":\"BlogCard-module__d-table-row\",\"d-table-cell\":\"BlogCard-module__d-table-cell\",\"d-flex\":\"BlogCard-module__d-flex\",\"d-inline-flex\":\"BlogCard-module__d-inline-flex\",\"d-sm-none\":\"BlogCard-module__d-sm-none\",\"d-sm-inline\":\"BlogCard-module__d-sm-inline\",\"d-sm-inline-block\":\"BlogCard-module__d-sm-inline-block\",\"d-sm-block\":\"BlogCard-module__d-sm-block\",\"d-sm-table\":\"BlogCard-module__d-sm-table\",\"d-sm-table-row\":\"BlogCard-module__d-sm-table-row\",\"d-sm-table-cell\":\"BlogCard-module__d-sm-table-cell\",\"d-sm-flex\":\"BlogCard-module__d-sm-flex\",\"d-sm-inline-flex\":\"BlogCard-module__d-sm-inline-flex\",\"d-md-none\":\"BlogCard-module__d-md-none\",\"d-md-inline\":\"BlogCard-module__d-md-inline\",\"d-md-inline-block\":\"BlogCard-module__d-md-inline-block\",\"d-md-block\":\"BlogCard-module__d-md-block\",\"d-md-table\":\"BlogCard-module__d-md-table\",\"d-md-table-row\":\"BlogCard-module__d-md-table-row\",\"d-md-table-cell\":\"BlogCard-module__d-md-table-cell\",\"d-md-flex\":\"BlogCard-module__d-md-flex\",\"d-md-inline-flex\":\"BlogCard-module__d-md-inline-flex\",\"d-lg-none\":\"BlogCard-module__d-lg-none\",\"d-lg-inline\":\"BlogCard-module__d-lg-inline\",\"d-lg-inline-block\":\"BlogCard-module__d-lg-inline-block\",\"d-lg-block\":\"BlogCard-module__d-lg-block\",\"d-lg-table\":\"BlogCard-module__d-lg-table\",\"d-lg-table-row\":\"BlogCard-module__d-lg-table-row\",\"d-lg-table-cell\":\"BlogCard-module__d-lg-table-cell\",\"d-lg-flex\":\"BlogCard-module__d-lg-flex\",\"d-lg-inline-flex\":\"BlogCard-module__d-lg-inline-flex\",\"d-xl-none\":\"BlogCard-module__d-xl-none\",\"d-xl-inline\":\"BlogCard-module__d-xl-inline\",\"d-xl-inline-block\":\"BlogCard-module__d-xl-inline-block\",\"d-xl-block\":\"BlogCard-module__d-xl-block\",\"d-xl-table\":\"BlogCard-module__d-xl-table\",\"d-xl-table-row\":\"BlogCard-module__d-xl-table-row\",\"d-xl-table-cell\":\"BlogCard-module__d-xl-table-cell\",\"d-xl-flex\":\"BlogCard-module__d-xl-flex\",\"d-xl-inline-flex\":\"BlogCard-module__d-xl-inline-flex\",\"d-print-none\":\"BlogCard-module__d-print-none\",\"d-print-inline\":\"BlogCard-module__d-print-inline\",\"d-print-inline-block\":\"BlogCard-module__d-print-inline-block\",\"d-print-block\":\"BlogCard-module__d-print-block\",\"d-print-table\":\"BlogCard-module__d-print-table\",\"d-print-table-row\":\"BlogCard-module__d-print-table-row\",\"d-print-table-cell\":\"BlogCard-module__d-print-table-cell\",\"d-print-flex\":\"BlogCard-module__d-print-flex\",\"d-print-inline-flex\":\"BlogCard-module__d-print-inline-flex\",\"BlogCard\":\"BlogCard-module__BlogCard\",\"content\":\"BlogCard-module__content\",\"imageContainer\":\"BlogCard-module__imageContainer\",\"separator\":\"BlogCard-module__separator\"};var BlogCard=function BlogCard(_ref){var image=_ref.image,title=_ref.title,description=_ref.description,date=_ref.date,_ref$className=_ref.className,className=_ref$className===void 0?undefined:_ref$className,_ref$imageProps=_ref.imageProps,imageProps=_ref$imageProps===void 0?{aspectRatio:'4:3'}:_ref$imageProps,props=_objectWithoutProperties(_ref,[\"image\",\"title\",\"description\",\"date\",\"className\",\"imageProps\"]);var localeDay='';var localeMonth='';if(date){localeDay=date.toLocaleDateString('nl-NL',{day:'numeric'});localeMonth=date.toLocaleDateString('nl-NL',{month:'short'}).replace('.','');}var wrapperClassNames=mergeClassNames(styles$l.BlogCard,cardStyles.Card,className);var contentClassNames=mergeClassNames(styles$l.content,cardStyles.content);var seperatorClassNames=mergeClassNames(styles$l.separator,cardStyles.separatorIcon);var imageClassNames=mergeClassNames(styles$l.imageContainer,cardStyles.imageContainer);return/*#__PURE__*/React.createElement(Block,_extends({small:true,className:wrapperClassNames},props),/*#__PURE__*/React.createElement(\"div\",{className:imageClassNames},image&&/*#__PURE__*/React.createElement(Image,_extends({src:image},imageProps))),/*#__PURE__*/React.createElement(\"div\",{className:contentClassNames},localeDay&&localeMonth&&/*#__PURE__*/React.createElement(\"div\",null,/*#__PURE__*/React.createElement(Block,{smallPadding:true,withShadow:true,display:\"flex\",className:seperatorClassNames},/*#__PURE__*/React.createElement(H4,{as:\"p\"},localeDay),/*#__PURE__*/React.createElement(H5,{as:\"p\",fontWeight:600},localeMonth))),/*#__PURE__*/React.createElement(H4,{as:\"h3\"},title),/*#__PURE__*/React.createElement(Paragraph,null,description)));};_c30=BlogCard;var styles$m={\"image-stack\":\"ImageStack-module__image-stack\",\"first-image\":\"ImageStack-module__first-image\",\"flipped\":\"ImageStack-module__flipped\",\"no-shadow\":\"ImageStack-module__no-shadow\",\"second-image\":\"ImageStack-module__second-image\",\"small\":\"ImageStack-module__small\",\"large\":\"ImageStack-module__large\"};var ImageStack=function ImageStack(_ref){var className=_ref.className,images=_ref.images,flipped=_ref.flipped,noShadow=_ref.noShadow;return/*#__PURE__*/React.createElement(\"div\",{className:mergeClassNames(styles$m['image-stack'],className)},images.map(function(_ref2,index){var key=_ref2.key,src=_ref2.src,_ref2$size=_ref2.size,size=_ref2$size===void 0?'large':_ref2$size,imageProps=_objectWithoutProperties(_ref2,[\"key\",\"src\",\"size\"]);var classNames=[index===0?styles$m['first-image']:styles$m['second-image'],size==='large'?styles$m['large']:styles$m['small'],flipped&&styles$m['flipped']].filter(Boolean).join(' ');return/*#__PURE__*/React.createElement(\"div\",{className:classNames,key:key||src},/*#__PURE__*/React.createElement(Image,_extends({src:src,className:noShadow?styles$m['no-shadow']:''},imageProps)));}));};_c31=ImageStack;var styles$n={\"d-none\":\"ContentBlock-module__d-none\",\"d-inline\":\"ContentBlock-module__d-inline\",\"d-inline-block\":\"ContentBlock-module__d-inline-block\",\"d-block\":\"ContentBlock-module__d-block\",\"d-table\":\"ContentBlock-module__d-table\",\"d-table-row\":\"ContentBlock-module__d-table-row\",\"d-table-cell\":\"ContentBlock-module__d-table-cell\",\"d-flex\":\"ContentBlock-module__d-flex\",\"d-inline-flex\":\"ContentBlock-module__d-inline-flex\",\"d-sm-none\":\"ContentBlock-module__d-sm-none\",\"d-sm-inline\":\"ContentBlock-module__d-sm-inline\",\"d-sm-inline-block\":\"ContentBlock-module__d-sm-inline-block\",\"d-sm-block\":\"ContentBlock-module__d-sm-block\",\"d-sm-table\":\"ContentBlock-module__d-sm-table\",\"d-sm-table-row\":\"ContentBlock-module__d-sm-table-row\",\"d-sm-table-cell\":\"ContentBlock-module__d-sm-table-cell\",\"d-sm-flex\":\"ContentBlock-module__d-sm-flex\",\"d-sm-inline-flex\":\"ContentBlock-module__d-sm-inline-flex\",\"d-md-none\":\"ContentBlock-module__d-md-none\",\"d-md-inline\":\"ContentBlock-module__d-md-inline\",\"d-md-inline-block\":\"ContentBlock-module__d-md-inline-block\",\"d-md-block\":\"ContentBlock-module__d-md-block\",\"d-md-table\":\"ContentBlock-module__d-md-table\",\"d-md-table-row\":\"ContentBlock-module__d-md-table-row\",\"d-md-table-cell\":\"ContentBlock-module__d-md-table-cell\",\"d-md-flex\":\"ContentBlock-module__d-md-flex\",\"d-md-inline-flex\":\"ContentBlock-module__d-md-inline-flex\",\"d-lg-none\":\"ContentBlock-module__d-lg-none\",\"d-lg-inline\":\"ContentBlock-module__d-lg-inline\",\"d-lg-inline-block\":\"ContentBlock-module__d-lg-inline-block\",\"d-lg-block\":\"ContentBlock-module__d-lg-block\",\"d-lg-table\":\"ContentBlock-module__d-lg-table\",\"d-lg-table-row\":\"ContentBlock-module__d-lg-table-row\",\"d-lg-table-cell\":\"ContentBlock-module__d-lg-table-cell\",\"d-lg-flex\":\"ContentBlock-module__d-lg-flex\",\"d-lg-inline-flex\":\"ContentBlock-module__d-lg-inline-flex\",\"d-xl-none\":\"ContentBlock-module__d-xl-none\",\"d-xl-inline\":\"ContentBlock-module__d-xl-inline\",\"d-xl-inline-block\":\"ContentBlock-module__d-xl-inline-block\",\"d-xl-block\":\"ContentBlock-module__d-xl-block\",\"d-xl-table\":\"ContentBlock-module__d-xl-table\",\"d-xl-table-row\":\"ContentBlock-module__d-xl-table-row\",\"d-xl-table-cell\":\"ContentBlock-module__d-xl-table-cell\",\"d-xl-flex\":\"ContentBlock-module__d-xl-flex\",\"d-xl-inline-flex\":\"ContentBlock-module__d-xl-inline-flex\",\"d-print-none\":\"ContentBlock-module__d-print-none\",\"d-print-inline\":\"ContentBlock-module__d-print-inline\",\"d-print-inline-block\":\"ContentBlock-module__d-print-inline-block\",\"d-print-block\":\"ContentBlock-module__d-print-block\",\"d-print-table\":\"ContentBlock-module__d-print-table\",\"d-print-table-row\":\"ContentBlock-module__d-print-table-row\",\"d-print-table-cell\":\"ContentBlock-module__d-print-table-cell\",\"d-print-flex\":\"ContentBlock-module__d-print-flex\",\"d-print-inline-flex\":\"ContentBlock-module__d-print-inline-flex\",\"content-block\":\"ContentBlock-module__content-block\",\"image-container\":\"ContentBlock-module__image-container\",\"image-stack\":\"ContentBlock-module__image-stack\",\"tagContainer\":\"ContentBlock-module__tagContainer\",\"tag\":\"ContentBlock-module__tag\",\"withTag\":\"ContentBlock-module__withTag\",\"flipped\":\"ContentBlock-module__flipped\",\"single-image\":\"ContentBlock-module__single-image\",\"no-shadow\":\"ContentBlock-module__no-shadow\"};function ContentBlock(_ref){var children=_ref.children,flipped=_ref.flipped,images=_ref.images,imagesFlipped=_ref.imagesFlipped,className=_ref.className,noShadow=_ref.noShadow,tagContent=_ref.tagContent;if(images.length>1){// Image stack layout\nreturn/*#__PURE__*/React.createElement(Container,{className:[styles$n['content-block'],className].filter(Boolean).join(' ')},/*#__PURE__*/React.createElement(Row,{alignItems:\"center\"},/*#__PURE__*/React.createElement(\"div\",{className:[styles$n['image-container'],flipped&&styles$n['flipped']].filter(Boolean).join(' ')},/*#__PURE__*/React.createElement(ImageStack,{images:images,flipped:imagesFlipped,noShadow:noShadow,className:styles$n['image-stack']})),/*#__PURE__*/React.createElement(Col,{col:12,lg:5,lgOffset:flipped?7:0},children)));}return/*#__PURE__*/React.createElement(Flex,{alignItems:\"center\",wrap:\"wrap\",className:[styles$n['content-block'],className].filter(Boolean).join(' ')},/*#__PURE__*/React.createElement(\"div\",{className:[styles$n['image-container'],flipped&&styles$n['flipped'],tagContent&&styles$n.withTag].filter(Boolean).join(' ')},/*#__PURE__*/React.createElement(Image,_extends({},images[0],{className:[styles$n['single-image'],noShadow&&styles$n['no-shadow']].filter(Boolean).join(' ')})),tagContent&&/*#__PURE__*/React.createElement(\"div\",{className:styles$n.tagContainer},/*#__PURE__*/React.createElement(\"div\",{className:styles$n.tag},tagContent))),/*#__PURE__*/React.createElement(Container,null,/*#__PURE__*/React.createElement(Row,null,/*#__PURE__*/React.createElement(Col,{col:12,lg:5,lgOffset:flipped?7:0},children))));}_c32=ContentBlock;var styles$o={\"d-none\":\"Select-module__d-none\",\"d-inline\":\"Select-module__d-inline\",\"d-inline-block\":\"Select-module__d-inline-block\",\"d-block\":\"Select-module__d-block\",\"d-table\":\"Select-module__d-table\",\"d-table-row\":\"Select-module__d-table-row\",\"d-table-cell\":\"Select-module__d-table-cell\",\"d-flex\":\"Select-module__d-flex\",\"d-inline-flex\":\"Select-module__d-inline-flex\",\"d-sm-none\":\"Select-module__d-sm-none\",\"d-sm-inline\":\"Select-module__d-sm-inline\",\"d-sm-inline-block\":\"Select-module__d-sm-inline-block\",\"d-sm-block\":\"Select-module__d-sm-block\",\"d-sm-table\":\"Select-module__d-sm-table\",\"d-sm-table-row\":\"Select-module__d-sm-table-row\",\"d-sm-table-cell\":\"Select-module__d-sm-table-cell\",\"d-sm-flex\":\"Select-module__d-sm-flex\",\"d-sm-inline-flex\":\"Select-module__d-sm-inline-flex\",\"d-md-none\":\"Select-module__d-md-none\",\"d-md-inline\":\"Select-module__d-md-inline\",\"d-md-inline-block\":\"Select-module__d-md-inline-block\",\"d-md-block\":\"Select-module__d-md-block\",\"d-md-table\":\"Select-module__d-md-table\",\"d-md-table-row\":\"Select-module__d-md-table-row\",\"d-md-table-cell\":\"Select-module__d-md-table-cell\",\"d-md-flex\":\"Select-module__d-md-flex\",\"d-md-inline-flex\":\"Select-module__d-md-inline-flex\",\"d-lg-none\":\"Select-module__d-lg-none\",\"d-lg-inline\":\"Select-module__d-lg-inline\",\"d-lg-inline-block\":\"Select-module__d-lg-inline-block\",\"d-lg-block\":\"Select-module__d-lg-block\",\"d-lg-table\":\"Select-module__d-lg-table\",\"d-lg-table-row\":\"Select-module__d-lg-table-row\",\"d-lg-table-cell\":\"Select-module__d-lg-table-cell\",\"d-lg-flex\":\"Select-module__d-lg-flex\",\"d-lg-inline-flex\":\"Select-module__d-lg-inline-flex\",\"d-xl-none\":\"Select-module__d-xl-none\",\"d-xl-inline\":\"Select-module__d-xl-inline\",\"d-xl-inline-block\":\"Select-module__d-xl-inline-block\",\"d-xl-block\":\"Select-module__d-xl-block\",\"d-xl-table\":\"Select-module__d-xl-table\",\"d-xl-table-row\":\"Select-module__d-xl-table-row\",\"d-xl-table-cell\":\"Select-module__d-xl-table-cell\",\"d-xl-flex\":\"Select-module__d-xl-flex\",\"d-xl-inline-flex\":\"Select-module__d-xl-inline-flex\",\"d-print-none\":\"Select-module__d-print-none\",\"d-print-inline\":\"Select-module__d-print-inline\",\"d-print-inline-block\":\"Select-module__d-print-inline-block\",\"d-print-block\":\"Select-module__d-print-block\",\"d-print-table\":\"Select-module__d-print-table\",\"d-print-table-row\":\"Select-module__d-print-table-row\",\"d-print-table-cell\":\"Select-module__d-print-table-cell\",\"d-print-flex\":\"Select-module__d-print-flex\",\"d-print-inline-flex\":\"Select-module__d-print-inline-flex\",\"select\":\"Select-module__select\",\"select-element\":\"Select-module__select-element\",\"select-arrow\":\"Select-module__select-arrow\",\"error\":\"Select-module__error\",\"disabled\":\"Select-module__disabled\"};function Select(_ref){var className=_ref.className,children=_ref.children,label=_ref.label,id=_ref.id,style=_ref.style,error=_ref.error,props=_objectWithoutProperties(_ref,[\"className\",\"children\",\"label\",\"id\",\"style\",\"error\"]);var classNames=[styles$o.select,error&&styles$o.error,props.disabled&&styles$o.disabled].filter(Boolean).join(' ');return/*#__PURE__*/React__default.createElement(Flex,{direction:\"column\",className:className,style:style},label&&/*#__PURE__*/React__default.createElement(Label,{htmlFor:id||''},label),/*#__PURE__*/React__default.createElement(Flex,{alignItems:\"center\",className:classNames},/*#__PURE__*/React__default.createElement(\"select\",_extends({id:id,className:styles$o['select-element']},props),children),/*#__PURE__*/React__default.createElement(Icon,{className:styles$o['select-arrow'],name:\"arrow-right\",fontSize:\"16px\"})));}_c33=Select;var styles$p={\"d-none\":\"Navigation-module__d-none\",\"d-inline\":\"Navigation-module__d-inline\",\"d-inline-block\":\"Navigation-module__d-inline-block\",\"d-block\":\"Navigation-module__d-block\",\"d-table\":\"Navigation-module__d-table\",\"d-table-row\":\"Navigation-module__d-table-row\",\"d-table-cell\":\"Navigation-module__d-table-cell\",\"d-flex\":\"Navigation-module__d-flex\",\"d-inline-flex\":\"Navigation-module__d-inline-flex\",\"d-sm-none\":\"Navigation-module__d-sm-none\",\"d-sm-inline\":\"Navigation-module__d-sm-inline\",\"d-sm-inline-block\":\"Navigation-module__d-sm-inline-block\",\"d-sm-block\":\"Navigation-module__d-sm-block\",\"d-sm-table\":\"Navigation-module__d-sm-table\",\"d-sm-table-row\":\"Navigation-module__d-sm-table-row\",\"d-sm-table-cell\":\"Navigation-module__d-sm-table-cell\",\"d-sm-flex\":\"Navigation-module__d-sm-flex\",\"d-sm-inline-flex\":\"Navigation-module__d-sm-inline-flex\",\"d-md-none\":\"Navigation-module__d-md-none\",\"d-md-inline\":\"Navigation-module__d-md-inline\",\"d-md-inline-block\":\"Navigation-module__d-md-inline-block\",\"d-md-block\":\"Navigation-module__d-md-block\",\"d-md-table\":\"Navigation-module__d-md-table\",\"d-md-table-row\":\"Navigation-module__d-md-table-row\",\"d-md-table-cell\":\"Navigation-module__d-md-table-cell\",\"d-md-flex\":\"Navigation-module__d-md-flex\",\"d-md-inline-flex\":\"Navigation-module__d-md-inline-flex\",\"d-lg-none\":\"Navigation-module__d-lg-none\",\"d-lg-inline\":\"Navigation-module__d-lg-inline\",\"d-lg-inline-block\":\"Navigation-module__d-lg-inline-block\",\"d-lg-block\":\"Navigation-module__d-lg-block\",\"d-lg-table\":\"Navigation-module__d-lg-table\",\"d-lg-table-row\":\"Navigation-module__d-lg-table-row\",\"d-lg-table-cell\":\"Navigation-module__d-lg-table-cell\",\"d-lg-flex\":\"Navigation-module__d-lg-flex\",\"d-lg-inline-flex\":\"Navigation-module__d-lg-inline-flex\",\"d-xl-none\":\"Navigation-module__d-xl-none\",\"d-xl-inline\":\"Navigation-module__d-xl-inline\",\"d-xl-inline-block\":\"Navigation-module__d-xl-inline-block\",\"d-xl-block\":\"Navigation-module__d-xl-block\",\"d-xl-table\":\"Navigation-module__d-xl-table\",\"d-xl-table-row\":\"Navigation-module__d-xl-table-row\",\"d-xl-table-cell\":\"Navigation-module__d-xl-table-cell\",\"d-xl-flex\":\"Navigation-module__d-xl-flex\",\"d-xl-inline-flex\":\"Navigation-module__d-xl-inline-flex\",\"d-print-none\":\"Navigation-module__d-print-none\",\"d-print-inline\":\"Navigation-module__d-print-inline\",\"d-print-inline-block\":\"Navigation-module__d-print-inline-block\",\"d-print-block\":\"Navigation-module__d-print-block\",\"d-print-table\":\"Navigation-module__d-print-table\",\"d-print-table-row\":\"Navigation-module__d-print-table-row\",\"d-print-table-cell\":\"Navigation-module__d-print-table-cell\",\"d-print-flex\":\"Navigation-module__d-print-flex\",\"d-print-inline-flex\":\"Navigation-module__d-print-inline-flex\",\"navigation-wrapper\":\"Navigation-module__navigation-wrapper\",\"navigation-wrapper-small\":\"Navigation-module__navigation-wrapper-small\",\"navigation-link-wrapper\":\"Navigation-module__navigation-link-wrapper\",\"navigation-link-wrapper-small\":\"Navigation-module__navigation-link-wrapper-small\",\"navigation-link\":\"Navigation-module__navigation-link\",\"navigation-link-active\":\"Navigation-module__navigation-link-active\",\"navigation-link-small\":\"Navigation-module__navigation-link-small\",\"navigation-magic-line\":\"Navigation-module__navigation-magic-line\",\"navigation-magic-line-small\":\"Navigation-module__navigation-magic-line-small\"};var Navigation=/*#__PURE__*/function(_React$PureComponent){_inherits(Navigation,_React$PureComponent);var _super=_createSuper(Navigation);function Navigation(){var _this;_classCallCheck(this,Navigation);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key];}_this=_super.call.apply(_super,[this].concat(args));_defineProperty(_assertThisInitialized(_this),\"state\",{animate:false,currentPosition:{left:0,width:0},selected:_this.props.selected||0,selectedPosition:undefined});_defineProperty(_assertThisInitialized(_this),\"list\",_this.props.links.map(function(){return/*#__PURE__*/React__default.createRef();}));_defineProperty(_assertThisInitialized(_this),\"classNames\",{navigationWrapper:[styles$p['navigation-wrapper'],_this.props.small&&styles$p['navigation-wrapper-small']],navigationLinkWrapper:[styles$p['navigation-link-wrapper'],_this.props.small&&styles$p['navigation-link-wrapper-small']],navigationLink:[styles$p['navigation-link'],_this.props.small&&styles$p['navigation-link-small']],navigationMagicLine:[styles$p['navigation-magic-line'],_this.props.small&&styles$p['navigation-magic-line-small']]});_defineProperty(_assertThisInitialized(_this),\"onLeave\",function(){return _this.state.selectedPosition&&_this.setState({currentPosition:_this.state.selectedPosition});});_defineProperty(_assertThisInitialized(_this),\"onHover\",function(i){var position=_this.getPosition(_this.list[i].current);_this.setState({currentPosition:position});});_defineProperty(_assertThisInitialized(_this),\"onClick\",function(i){var position=_this.getPosition(_this.list[i].current);_this.setState({selected:i,currentPosition:position,selectedPosition:position});if(_this.props.onSelectLink){_this.props.onSelectLink(i);}});_defineProperty(_assertThisInitialized(_this),\"getPosition\",function(element){return{left:element.offsetLeft||0,width:element.offsetWidth};});_defineProperty(_assertThisInitialized(_this),\"setPosition\",function(){var node=_this.list[_this.state.selected].current;var position=_this.getPosition(node);_this.setState({currentPosition:position,selectedPosition:position});});_defineProperty(_assertThisInitialized(_this),\"render\",function(){var _this$props=_this.props,className=_this$props.className,links=_this$props.links,as=_this$props.as,props=_objectWithoutProperties(_this$props,[\"className\",\"links\",\"as\"]);return/*#__PURE__*/React__default.createElement(\"ul\",_extends({className:_this.classNames.navigationWrapper.concat(className).filter(Boolean).join(' '),id:\"styled-navigation\",onMouseLeave:_this.onLeave},props),links.map(function(link,i){return/*#__PURE__*/React__default.createElement(\"li\",{className:_this.classNames.navigationLinkWrapper.filter(Boolean).join(' '),key:link.name,ref:_this.list[i]},/*#__PURE__*/React__default.createElement(Link,_extends({className:_this.classNames.navigationLink.concat(link.className).concat(i===_this.state.selected&&styles$p['navigation-link-active']).filter(Boolean).join(' '),onMouseEnter:function onMouseEnter(){return _this.onHover(i);},onClick:function onClick(){return _this.onClick(i);},as:as},link),link.name.split(' ').map(function(n,i,arr){return/*#__PURE__*/React__default.createElement(\"span\",{key:i},n,arr.length!==i+1&&/*#__PURE__*/React__default.createElement(\"span\",null,\"\\xA0\"));})));}),/*#__PURE__*/React__default.createElement(\"div\",{className:_this.classNames.navigationMagicLine.filter(Boolean).join(' '),style:{transition:_this.state.animate?'left 0.3s ease, width 0.3s ease':'none',left:_this.state.currentPosition.left,width:_this.state.currentPosition.width}}));});return _this;}_createClass(Navigation,[{key:\"componentDidMount\",value:function componentDidMount(){var _this2=this;this.setPosition();setTimeout(function(){return _this2.setState({animate:true});},100);window.addEventListener('resize',this.setPosition);}},{key:\"componentWillUnmount\",value:function componentWillUnmount(){window.removeEventListener('resize',this.setPosition);}}]);return Navigation;}(React__default.PureComponent);_defineProperty(Navigation,\"defaultProps\",{as:'a',selected:undefined,onSelect:undefined});function Logo(_ref){var inverted=_ref.inverted,_ref$width=_ref.width,width=_ref$width===void 0?140:_ref$width,props=_objectWithoutProperties(_ref,[\"inverted\",\"width\"]);return/*#__PURE__*/React__default.createElement(\"svg\",_extends({},props,{width:width,viewBox:\"0 0 140 22\",xmlns:\"http://www.w3.org/2000/svg\"}),/*#__PURE__*/React__default.createElement(\"path\",{d:\"M9.569 21.109h-4.25L0 6.274h4.597l2.86 9.249 2.86-9.249h4.598L9.57 21.11m13.234-4.258a3.159 3.159 0 0 1 0-6.316 3.156 3.156 0 0 1 3.144 2.884v.543a3.157 3.157 0 0 1-3.144 2.889m3.2-9.81a7.38 7.38 0 1 0 0 13.3c.136.425.537.73 1.003.73h3.174V6.313h-3.174c-.466 0-.867.304-1.003.728m64.522 3.567a3.155 3.155 0 0 0-3.141 2.888v.542a3.155 3.155 0 0 0 3.14 2.885 3.16 3.16 0 0 0 3.165-3.157 3.163 3.163 0 0 0-3.164-3.158m0 10.536a7.337 7.337 0 0 1-3.195-.727 1.056 1.056 0 0 1-1.006.727h-3.171V0h4.23v7.09a7.377 7.377 0 0 1 10.522 6.676c.001 4.074-3.298 7.378-7.38 7.378m26.406-4.22a3.155 3.155 0 0 1-3.141-2.886v-.542a3.155 3.155 0 0 1 3.141-2.888 3.163 3.163 0 0 1 3.164 3.159 3.161 3.161 0 0 1-3.164 3.156m.012-10.511c-5.054 0-7.481 3.978-7.481 7.356v.025c0 3.402 2.427 7.38 7.48 7.38 5.054 0 7.48-3.978 7.48-7.38 0-3.403-2.426-7.381-7.48-7.381m-60.448 4.196a3.155 3.155 0 0 1 3.141 2.888v.542a3.156 3.156 0 0 1-3.141 2.885 3.16 3.16 0 0 1-3.165-3.157 3.163 3.163 0 0 1 3.165-3.158m0 10.536a7.377 7.377 0 0 1-7.381-7.378A7.377 7.377 0 0 1 59.635 7.09V0h4.23v21.144h-3.17c-.473 0-.866-.303-1.006-.727a7.342 7.342 0 0 1-3.195.727zm51.349-14.856v4.222a3.074 3.074 0 0 0-.244-.013c-1.64 0-3.138 1.057-3.138 2.585v8.025h-4.234V6.276h3.17c.473 0 .867.303 1.006.727a7.353 7.353 0 0 1 3.196-.727c.082 0 .162.01.244.012zm25.525 4.21c-1.467 0-2.348.886-2.348 2.584v8.09h-4.285V6.277h3.172c.472 0 .865.304 1.005.727a7.347 7.347 0 0 1 3.195-.727s1.239-.059 2.514.343c3.027.904 3.379 3.962 3.379 5.599v8.955h-4.284v-8.091c0-.883-.205-2.585-2.348-2.585zm-93.333 0c-1.467 0-2.348.886-2.348 2.584v8.09h-4.284V6.277h3.17c.474 0 .866.304 1.006.727a7.354 7.354 0 0 1 3.196-.727s1.239-.059 2.514.343c3.028.904 3.378 3.962 3.378 5.599v8.955h-4.284v-8.091c0-.883-.204-2.585-2.348-2.585zm36.24 1.755h-5.453c-.116-.003-.55-.055-.325-.637a3.336 3.336 0 0 1 6.134.093c.147.495-.246.541-.356.544m2.55-3.796c-1.308-1.384-3.145-2.214-5.284-2.214-4.254 0-7.324 3.598-7.324 7.5 0 4.15 3.398 7.398 7.399 7.398a6.789 6.789 0 0 0 3.976-1.258c1.183-.806 2.165-2.013 2.844-3.574h-4.278c-.503.73-1.208 1.31-2.542 1.31-1.635 0-3.045-.983-3.22-2.468h10.393c.327-2.566-.202-4.806-1.964-6.694\",fill:inverted?'#ffffff':'#333D47',fillRule:\"evenodd\"}));}_c34=Logo;function Portal$1(_ref){var node=_ref.node,children=_ref.children;var domNode=node||document.querySelector('body');if(!domNode){return/*#__PURE__*/React__default.createElement(React__default.Fragment,null,children);}return/*#__PURE__*/reactDom.createPortal(children,domNode);}_c35=Portal$1;var styles$q={\"modal-backdrop\":\"Modal-module__modal-backdrop\",\"fadeIn\":\"Modal-module__fadeIn\",\"modal\":\"Modal-module__modal\",\"slideIn\":\"Modal-module__slideIn\",\"close-button\":\"Modal-module__close-button\",\"modal-content\":\"Modal-module__modal-content\",\"modal-header\":\"Modal-module__modal-header\",\"modal-header-logo\":\"Modal-module__modal-header-logo\",\"modal-footer\":\"Modal-module__modal-footer\",\"no-scroll\":\"Modal-module__no-scroll\"};var ModalContent=/*#__PURE__*/React.forwardRef(_c36=function _c36(_ref,ref){var children=_ref.children,className=_ref.className,props=_objectWithoutProperties(_ref,[\"children\",\"className\"]);var classes=[styles$q['modal-content'],className].filter(Boolean).join(' ');return/*#__PURE__*/React__default.createElement(\"div\",_extends({className:classes,ref:ref},props),children);});_c37=ModalContent;ModalContent.displayName='ModalContent';function ModalHeader(_ref){var children=_ref.children,className=_ref.className;var classes=[styles$q['modal-header'],className].filter(Boolean).join(' ');return/*#__PURE__*/React__default.createElement(\"div\",{className:classes},!children&&/*#__PURE__*/React__default.createElement(Logo,{className:styles$q['modal-header-logo']}),children&&children);}_c38=ModalHeader;function ModalFooter(_ref){var children=_ref.children,className=_ref.className;var classes=[styles$q['modal-footer'],className].filter(Boolean).join(' ');return/*#__PURE__*/React__default.createElement(\"div\",{className:classes},children);}_c39=ModalFooter;var BACKDROP_ID='modal-backdrop';function addNoScroll(){if(!document.body||!document.body.classList){return;}if(typeof document.body.classList.add==='function'){document.body.classList.add(styles$q['no-scroll']);}}function removeNoScroll(){if(!document.body||!document.body.classList){return;}if(typeof document.body.classList.remove==='function'){document.body.classList.remove(styles$q['no-scroll']);}}function Modal(_ref){_s3();var children=_ref.children,className=_ref.className,style=_ref.style,isOpenControlled=_ref.isOpen,_ref$allowBodyScroll=_ref.allowBodyScroll,allowBodyScroll=_ref$allowBodyScroll===void 0?false:_ref$allowBodyScroll,_ref$closeOnBackdropC=_ref.closeOnBackdropClick,closeOnBackdropClick=_ref$closeOnBackdropC===void 0?false:_ref$closeOnBackdropC,_ref$onClose=_ref.onClose,onClose=_ref$onClose===void 0?function(){}:_ref$onClose,locationInDom=_ref.locationInDom;var _useState=React.useState(true),_useState2=_slicedToArray(_useState,2),isOpen=_useState2[0],setIsOpen=_useState2[1];// If the component is controlled, we don't watch the local `isOpen` state\nvar isControlled=isOpenControlled!==undefined;var modalIsOpen=isControlled?isOpenControlled:isOpen;React.useEffect(function(){function handleEscape(_ref2){var key=_ref2.key;if(key==='Esc'||key==='Escape'){if(!isControlled){setIsOpen(false);}onClose();}}if(modalIsOpen){document.addEventListener('keydown',handleEscape);}return function(){document.removeEventListener('keydown',handleEscape);};},[isOpenControlled,onClose,modalIsOpen,isControlled]);React.useEffect(function(){if(modalIsOpen&&!allowBodyScroll){addNoScroll();}else{removeNoScroll();}// Always remove it in case the component unmounts unexpectedly\nreturn function(){removeNoScroll();};},[modalIsOpen,allowBodyScroll]);function handleClose(){if(!isControlled){setIsOpen(false);}onClose();}function onBackdropClick(event){if(!closeOnBackdropClick){return;}// Make sure that if you have a modal in a modal it won't close all modals on backdrop click, but rather only the top one.\nevent.stopPropagation();// @ts-ignore: id exists, just not on the type for some reason\nif(event.target&&event.target.id===BACKDROP_ID){handleClose();}}if(!modalIsOpen){return null;}return/*#__PURE__*/React__default.createElement(Portal$1,{node:locationInDom},/*#__PURE__*/React__default.createElement(\"div\",{className:styles$q['modal-backdrop'],id:BACKDROP_ID,tabIndex:-1,role:\"dialog\",onClick:onBackdropClick},/*#__PURE__*/React__default.createElement(\"div\",{className:\"\".concat(styles$q['modal'],\" \").concat(className||''),style:style,role:\"document\"},children,/*#__PURE__*/React__default.createElement(Pressable,{as:\"button\",variant:\"text\",onClick:handleClose,className:styles$q['close-button']},/*#__PURE__*/React__default.createElement(Icon,{name:\"close\"})))));}_s3(Modal,\"MPhxlpHnsG1kU7j9F90b1I/4obY=\");_c40=Modal;Modal.Content=ModalContent;Modal.Header=ModalHeader;Modal.Footer=ModalFooter;var styles$r={\"d-none\":\"ProgressBar-module__d-none\",\"d-inline\":\"ProgressBar-module__d-inline\",\"d-inline-block\":\"ProgressBar-module__d-inline-block\",\"d-block\":\"ProgressBar-module__d-block\",\"d-table\":\"ProgressBar-module__d-table\",\"d-table-row\":\"ProgressBar-module__d-table-row\",\"d-table-cell\":\"ProgressBar-module__d-table-cell\",\"d-flex\":\"ProgressBar-module__d-flex\",\"d-inline-flex\":\"ProgressBar-module__d-inline-flex\",\"d-sm-none\":\"ProgressBar-module__d-sm-none\",\"d-sm-inline\":\"ProgressBar-module__d-sm-inline\",\"d-sm-inline-block\":\"ProgressBar-module__d-sm-inline-block\",\"d-sm-block\":\"ProgressBar-module__d-sm-block\",\"d-sm-table\":\"ProgressBar-module__d-sm-table\",\"d-sm-table-row\":\"ProgressBar-module__d-sm-table-row\",\"d-sm-table-cell\":\"ProgressBar-module__d-sm-table-cell\",\"d-sm-flex\":\"ProgressBar-module__d-sm-flex\",\"d-sm-inline-flex\":\"ProgressBar-module__d-sm-inline-flex\",\"d-md-none\":\"ProgressBar-module__d-md-none\",\"d-md-inline\":\"ProgressBar-module__d-md-inline\",\"d-md-inline-block\":\"ProgressBar-module__d-md-inline-block\",\"d-md-block\":\"ProgressBar-module__d-md-block\",\"d-md-table\":\"ProgressBar-module__d-md-table\",\"d-md-table-row\":\"ProgressBar-module__d-md-table-row\",\"d-md-table-cell\":\"ProgressBar-module__d-md-table-cell\",\"d-md-flex\":\"ProgressBar-module__d-md-flex\",\"d-md-inline-flex\":\"ProgressBar-module__d-md-inline-flex\",\"d-lg-none\":\"ProgressBar-module__d-lg-none\",\"d-lg-inline\":\"ProgressBar-module__d-lg-inline\",\"d-lg-inline-block\":\"ProgressBar-module__d-lg-inline-block\",\"d-lg-block\":\"ProgressBar-module__d-lg-block\",\"d-lg-table\":\"ProgressBar-module__d-lg-table\",\"d-lg-table-row\":\"ProgressBar-module__d-lg-table-row\",\"d-lg-table-cell\":\"ProgressBar-module__d-lg-table-cell\",\"d-lg-flex\":\"ProgressBar-module__d-lg-flex\",\"d-lg-inline-flex\":\"ProgressBar-module__d-lg-inline-flex\",\"d-xl-none\":\"ProgressBar-module__d-xl-none\",\"d-xl-inline\":\"ProgressBar-module__d-xl-inline\",\"d-xl-inline-block\":\"ProgressBar-module__d-xl-inline-block\",\"d-xl-block\":\"ProgressBar-module__d-xl-block\",\"d-xl-table\":\"ProgressBar-module__d-xl-table\",\"d-xl-table-row\":\"ProgressBar-module__d-xl-table-row\",\"d-xl-table-cell\":\"ProgressBar-module__d-xl-table-cell\",\"d-xl-flex\":\"ProgressBar-module__d-xl-flex\",\"d-xl-inline-flex\":\"ProgressBar-module__d-xl-inline-flex\",\"d-print-none\":\"ProgressBar-module__d-print-none\",\"d-print-inline\":\"ProgressBar-module__d-print-inline\",\"d-print-inline-block\":\"ProgressBar-module__d-print-inline-block\",\"d-print-block\":\"ProgressBar-module__d-print-block\",\"d-print-table\":\"ProgressBar-module__d-print-table\",\"d-print-table-row\":\"ProgressBar-module__d-print-table-row\",\"d-print-table-cell\":\"ProgressBar-module__d-print-table-cell\",\"d-print-flex\":\"ProgressBar-module__d-print-flex\",\"d-print-inline-flex\":\"ProgressBar-module__d-print-inline-flex\",\"progress-bar\":\"ProgressBar-module__progress-bar\",\"progress-bar-progress\":\"ProgressBar-module__progress-bar-progress\",\"progress-bar-progress-neutral\":\"ProgressBar-module__progress-bar-progress-neutral\",\"progress-bar-progress-success\":\"ProgressBar-module__progress-bar-progress-success\",\"progress-bar-progress-danger\":\"ProgressBar-module__progress-bar-progress-danger\",\"progress-bar-progress-warning\":\"ProgressBar-module__progress-bar-progress-warning\"};function ProgressBar(_ref){var className=_ref.className,progress=_ref.progress,_ref$variant=_ref.variant,variant=_ref$variant===void 0?'neutral':_ref$variant,props=_objectWithoutProperties(_ref,[\"className\",\"progress\",\"variant\"]);var wrapperClasses=[styles$r['progress-bar'],className].filter(Boolean).join(' ');var progressClasses=[styles$r['progress-bar-progress'],styles$r[\"progress-bar-progress-\".concat(variant)]].filter(Boolean).join(' ');return/*#__PURE__*/React__default.createElement(\"div\",_extends({className:wrapperClasses},props),/*#__PURE__*/React__default.createElement(\"div\",{className:progressClasses,style:{width:\"\".concat(progress,\"%\")}}));}_c41=ProgressBar;var classnames=createCommonjsModule(function(module){/*!\n Copyright (c) 2017 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/ /* global define */(function(){var hasOwn={}.hasOwnProperty;function classNames(){var classes=[];for(var i=0;i1?'s':'')+' required, but only '+args.length+' present');}}/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {*} value - the value to check\n * @returns {boolean} true if the given value is a date\n * @throws {TypeError} 1 arguments required\n *\n * @example\n * // For a valid date:\n * var result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * var result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * var result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * var result = isDate({})\n * //=> false\n */function isDate(value){requiredArgs(1,arguments);return value instanceof Date||typeof value==='object'&&Object.prototype.toString.call(value)==='[object Date]';}/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @param {Date|Number} argument - the value to convert\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */function toDate(argument){requiredArgs(1,arguments);var argStr=Object.prototype.toString.call(argument);// Clone the date\nif(argument instanceof Date||typeof argument==='object'&&argStr==='[object Date]'){// Prevent the date to lose the milliseconds when passed to new Date() in IE10\nreturn new Date(argument.getTime());}else if(typeof argument==='number'||argStr==='[object Number]'){return new Date(argument);}else{if((typeof argument==='string'||argStr==='[object String]')&&typeof console!=='undefined'){// eslint-disable-next-line no-console\nconsole.warn(\"Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule\");// eslint-disable-next-line no-console\nconsole.warn(new Error().stack);}return new Date(NaN);}}/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - Now `isValid` doesn't throw an exception\n * if the first argument is not an instance of Date.\n * Instead, argument is converted beforehand using `toDate`.\n *\n * Examples:\n *\n * | `isValid` argument | Before v2.0.0 | v2.0.0 onward |\n * |---------------------------|---------------|---------------|\n * | `new Date()` | `true` | `true` |\n * | `new Date('2016-01-01')` | `true` | `true` |\n * | `new Date('')` | `false` | `false` |\n * | `new Date(1488370835081)` | `true` | `true` |\n * | `new Date(NaN)` | `false` | `false` |\n * | `'2016-01-01'` | `TypeError` | `false` |\n * | `''` | `TypeError` | `false` |\n * | `1488370835081` | `TypeError` | `true` |\n * | `NaN` | `TypeError` | `false` |\n *\n * We introduce this change to make *date-fns* consistent with ECMAScript behavior\n * that try to coerce arguments to the expected type\n * (which is also the case with other *date-fns* functions).\n *\n * @param {*} date - the date to check\n * @returns {Boolean} the date is valid\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // For the valid date:\n * var result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertable into a date:\n * var result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * var result = isValid(new Date(''))\n * //=> false\n */function isValid(dirtyDate){requiredArgs(1,arguments);var date=toDate(dirtyDate);return!isNaN(date);}var formatDistanceLocale={lessThanXSeconds:{one:'less than a second',other:'less than {{count}} seconds'},xSeconds:{one:'1 second',other:'{{count}} seconds'},halfAMinute:'half a minute',lessThanXMinutes:{one:'less than a minute',other:'less than {{count}} minutes'},xMinutes:{one:'1 minute',other:'{{count}} minutes'},aboutXHours:{one:'about 1 hour',other:'about {{count}} hours'},xHours:{one:'1 hour',other:'{{count}} hours'},xDays:{one:'1 day',other:'{{count}} days'},aboutXWeeks:{one:'about 1 week',other:'about {{count}} weeks'},xWeeks:{one:'1 week',other:'{{count}} weeks'},aboutXMonths:{one:'about 1 month',other:'about {{count}} months'},xMonths:{one:'1 month',other:'{{count}} months'},aboutXYears:{one:'about 1 year',other:'about {{count}} years'},xYears:{one:'1 year',other:'{{count}} years'},overXYears:{one:'over 1 year',other:'over {{count}} years'},almostXYears:{one:'almost 1 year',other:'almost {{count}} years'}};function formatDistance(token,count,options){options=options||{};var result;if(typeof formatDistanceLocale[token]==='string'){result=formatDistanceLocale[token];}else if(count===1){result=formatDistanceLocale[token].one;}else{result=formatDistanceLocale[token].other.replace('{{count}}',count);}if(options.addSuffix){if(options.comparison>0){return'in '+result;}else{return result+' ago';}}return result;}function buildFormatLongFn(args){return function(dirtyOptions){var options=dirtyOptions||{};var width=options.width?String(options.width):args.defaultWidth;var format=args.formats[width]||args.formats[args.defaultWidth];return format;};}var dateFormats={full:'EEEE, MMMM do, y',\"long\":'MMMM do, y',medium:'MMM d, y',\"short\":'MM/dd/yyyy'};var timeFormats={full:'h:mm:ss a zzzz',\"long\":'h:mm:ss a z',medium:'h:mm:ss a',\"short\":'h:mm a'};var dateTimeFormats={full:\"{{date}} 'at' {{time}}\",\"long\":\"{{date}} 'at' {{time}}\",medium:'{{date}}, {{time}}',\"short\":'{{date}}, {{time}}'};var formatLong={date:buildFormatLongFn({formats:dateFormats,defaultWidth:'full'}),time:buildFormatLongFn({formats:timeFormats,defaultWidth:'full'}),dateTime:buildFormatLongFn({formats:dateTimeFormats,defaultWidth:'full'})};var formatRelativeLocale={lastWeek:\"'last' eeee 'at' p\",yesterday:\"'yesterday at' p\",today:\"'today at' p\",tomorrow:\"'tomorrow at' p\",nextWeek:\"eeee 'at' p\",other:'P'};function formatRelative(token,_date,_baseDate,_options){return formatRelativeLocale[token];}function buildLocalizeFn(args){return function(dirtyIndex,dirtyOptions){var options=dirtyOptions||{};var context=options.context?String(options.context):'standalone';var valuesArray;if(context==='formatting'&&args.formattingValues){var defaultWidth=args.defaultFormattingWidth||args.defaultWidth;var width=options.width?String(options.width):defaultWidth;valuesArray=args.formattingValues[width]||args.formattingValues[defaultWidth];}else{var _defaultWidth=args.defaultWidth;var _width=options.width?String(options.width):args.defaultWidth;valuesArray=args.values[_width]||args.values[_defaultWidth];}var index=args.argumentCallback?args.argumentCallback(dirtyIndex):dirtyIndex;return valuesArray[index];};}var eraValues={narrow:['B','A'],abbreviated:['BC','AD'],wide:['Before Christ','Anno Domini']};var quarterValues={narrow:['1','2','3','4'],abbreviated:['Q1','Q2','Q3','Q4'],wide:['1st quarter','2nd quarter','3rd quarter','4th quarter']// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\n};var monthValues={narrow:['J','F','M','A','M','J','J','A','S','O','N','D'],abbreviated:['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'],wide:['January','February','March','April','May','June','July','August','September','October','November','December']};var dayValues={narrow:['S','M','T','W','T','F','S'],\"short\":['Su','Mo','Tu','We','Th','Fr','Sa'],abbreviated:['Sun','Mon','Tue','Wed','Thu','Fri','Sat'],wide:['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday']};var dayPeriodValues={narrow:{am:'a',pm:'p',midnight:'mi',noon:'n',morning:'morning',afternoon:'afternoon',evening:'evening',night:'night'},abbreviated:{am:'AM',pm:'PM',midnight:'midnight',noon:'noon',morning:'morning',afternoon:'afternoon',evening:'evening',night:'night'},wide:{am:'a.m.',pm:'p.m.',midnight:'midnight',noon:'noon',morning:'morning',afternoon:'afternoon',evening:'evening',night:'night'}};var formattingDayPeriodValues={narrow:{am:'a',pm:'p',midnight:'mi',noon:'n',morning:'in the morning',afternoon:'in the afternoon',evening:'in the evening',night:'at night'},abbreviated:{am:'AM',pm:'PM',midnight:'midnight',noon:'noon',morning:'in the morning',afternoon:'in the afternoon',evening:'in the evening',night:'at night'},wide:{am:'a.m.',pm:'p.m.',midnight:'midnight',noon:'noon',morning:'in the morning',afternoon:'in the afternoon',evening:'in the evening',night:'at night'}};function ordinalNumber(dirtyNumber,_dirtyOptions){var number=Number(dirtyNumber);// If ordinal numbers depend on context, for example,\n// if they are different for different grammatical genders,\n// use `options.unit`:\n//\n// var options = dirtyOptions || {}\n// var unit = String(options.unit)\n//\n// where `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n// 'day', 'hour', 'minute', 'second'\nvar rem100=number%100;if(rem100>20||rem100<10){switch(rem100%10){case 1:return number+'st';case 2:return number+'nd';case 3:return number+'rd';}}return number+'th';}var localize={ordinalNumber:ordinalNumber,era:buildLocalizeFn({values:eraValues,defaultWidth:'wide'}),quarter:buildLocalizeFn({values:quarterValues,defaultWidth:'wide',argumentCallback:function argumentCallback(quarter){return Number(quarter)-1;}}),month:buildLocalizeFn({values:monthValues,defaultWidth:'wide'}),day:buildLocalizeFn({values:dayValues,defaultWidth:'wide'}),dayPeriod:buildLocalizeFn({values:dayPeriodValues,defaultWidth:'wide',formattingValues:formattingDayPeriodValues,defaultFormattingWidth:'wide'})};function buildMatchPatternFn(args){return function(dirtyString,dirtyOptions){var string=String(dirtyString);var options=dirtyOptions||{};var matchResult=string.match(args.matchPattern);if(!matchResult){return null;}var matchedString=matchResult[0];var parseResult=string.match(args.parsePattern);if(!parseResult){return null;}var value=args.valueCallback?args.valueCallback(parseResult[0]):parseResult[0];value=options.valueCallback?options.valueCallback(value):value;return{value:value,rest:string.slice(matchedString.length)};};}function buildMatchFn(args){return function(dirtyString,dirtyOptions){var string=String(dirtyString);var options=dirtyOptions||{};var width=options.width;var matchPattern=width&&args.matchPatterns[width]||args.matchPatterns[args.defaultMatchWidth];var matchResult=string.match(matchPattern);if(!matchResult){return null;}var matchedString=matchResult[0];var parsePatterns=width&&args.parsePatterns[width]||args.parsePatterns[args.defaultParseWidth];var value;if(Object.prototype.toString.call(parsePatterns)==='[object Array]'){value=findIndex(parsePatterns,function(pattern){return pattern.test(matchedString);});}else{value=findKey(parsePatterns,function(pattern){return pattern.test(matchedString);});}value=args.valueCallback?args.valueCallback(value):value;value=options.valueCallback?options.valueCallback(value):value;return{value:value,rest:string.slice(matchedString.length)};};}function findKey(object,predicate){for(var key in object){if(object.hasOwnProperty(key)&&predicate(object[key])){return key;}}}function findIndex(array,predicate){for(var key=0;key Thu Jul 10 2014 12:45:30.750\n */function addMilliseconds(dirtyDate,dirtyAmount){requiredArgs(2,arguments);var timestamp=toDate(dirtyDate).getTime();var amount=toInteger(dirtyAmount);return new Date(timestamp+amount);}/**\n * @name subMilliseconds\n * @category Millisecond Helpers\n * @summary Subtract the specified number of milliseconds from the given date.\n *\n * @description\n * Subtract the specified number of milliseconds from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 750 milliseconds from 10 July 2014 12:45:30.000:\n * var result = subMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:29.250\n */function subMilliseconds(dirtyDate,dirtyAmount){requiredArgs(2,arguments);var amount=toInteger(dirtyAmount);return addMilliseconds(dirtyDate,-amount);}function addLeadingZeros(number,targetLength){var sign=number<0?'-':'';var output=Math.abs(number).toString();while(output.length0?signedYear:1-signedYear;return addLeadingZeros(token==='yy'?year%100:year,token.length);},// Month\nM:function M(date,token){var month=date.getUTCMonth();return token==='M'?String(month+1):addLeadingZeros(month+1,2);},// Day of the month\nd:function d(date,token){return addLeadingZeros(date.getUTCDate(),token.length);},// AM or PM\na:function a(date,token){var dayPeriodEnumValue=date.getUTCHours()/12>=1?'pm':'am';switch(token){case'a':case'aa':case'aaa':return dayPeriodEnumValue.toUpperCase();case'aaaaa':return dayPeriodEnumValue[0];case'aaaa':default:return dayPeriodEnumValue==='am'?'a.m.':'p.m.';}},// Hour [1-12]\nh:function h(date,token){return addLeadingZeros(date.getUTCHours()%12||12,token.length);},// Hour [0-23]\nH:function H(date,token){return addLeadingZeros(date.getUTCHours(),token.length);},// Minute\nm:function m(date,token){return addLeadingZeros(date.getUTCMinutes(),token.length);},// Second\ns:function s(date,token){return addLeadingZeros(date.getUTCSeconds(),token.length);},// Fraction of second\nS:function S(date,token){var numberOfDigits=token.length;var milliseconds=date.getUTCMilliseconds();var fractionalSeconds=Math.floor(milliseconds*Math.pow(10,numberOfDigits-3));return addLeadingZeros(fractionalSeconds,token.length);}};var MILLISECONDS_IN_DAY=86400000;// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nfunction getUTCDayOfYear(dirtyDate){requiredArgs(1,arguments);var date=toDate(dirtyDate);var timestamp=date.getTime();date.setUTCMonth(0,1);date.setUTCHours(0,0,0,0);var startOfYearTimestamp=date.getTime();var difference=timestamp-startOfYearTimestamp;return Math.floor(difference/MILLISECONDS_IN_DAY)+1;}// See issue: https://github.com/date-fns/date-fns/issues/376\nfunction startOfUTCISOWeek(dirtyDate){requiredArgs(1,arguments);var weekStartsOn=1;var date=toDate(dirtyDate);var day=date.getUTCDay();var diff=(day=startOfNextYear.getTime()){return year+1;}else if(date.getTime()>=startOfThisYear.getTime()){return year;}else{return year-1;}}// See issue: https://github.com/date-fns/date-fns/issues/376\nfunction startOfUTCISOWeekYear(dirtyDate){requiredArgs(1,arguments);var year=getUTCISOWeekYear(dirtyDate);var fourthOfJanuary=new Date(0);fourthOfJanuary.setUTCFullYear(year,0,4);fourthOfJanuary.setUTCHours(0,0,0,0);var date=startOfUTCISOWeek(fourthOfJanuary);return date;}var MILLISECONDS_IN_WEEK=604800000;// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nfunction getUTCISOWeek(dirtyDate){requiredArgs(1,arguments);var date=toDate(dirtyDate);var diff=startOfUTCISOWeek(date).getTime()-startOfUTCISOWeekYear(date).getTime();// Round the number of days to the nearest integer\n// because the number of milliseconds in a week is not constant\n// (e.g. it's different in the week of the daylight saving time clock shift)\nreturn Math.round(diff/MILLISECONDS_IN_WEEK)+1;}// See issue: https://github.com/date-fns/date-fns/issues/376\nfunction startOfUTCWeek(dirtyDate,dirtyOptions){requiredArgs(1,arguments);var options=dirtyOptions||{};var locale=options.locale;var localeWeekStartsOn=locale&&locale.options&&locale.options.weekStartsOn;var defaultWeekStartsOn=localeWeekStartsOn==null?0:toInteger(localeWeekStartsOn);var weekStartsOn=options.weekStartsOn==null?defaultWeekStartsOn:toInteger(options.weekStartsOn);// Test if weekStartsOn is between 0 and 6 _and_ is not NaN\nif(!(weekStartsOn>=0&&weekStartsOn<=6)){throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');}var date=toDate(dirtyDate);var day=date.getUTCDay();var diff=(day=1&&firstWeekContainsDate<=7)){throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');}var firstWeekOfNextYear=new Date(0);firstWeekOfNextYear.setUTCFullYear(year+1,0,firstWeekContainsDate);firstWeekOfNextYear.setUTCHours(0,0,0,0);var startOfNextYear=startOfUTCWeek(firstWeekOfNextYear,dirtyOptions);var firstWeekOfThisYear=new Date(0);firstWeekOfThisYear.setUTCFullYear(year,0,firstWeekContainsDate);firstWeekOfThisYear.setUTCHours(0,0,0,0);var startOfThisYear=startOfUTCWeek(firstWeekOfThisYear,dirtyOptions);if(date.getTime()>=startOfNextYear.getTime()){return year+1;}else if(date.getTime()>=startOfThisYear.getTime()){return year;}else{return year-1;}}// See issue: https://github.com/date-fns/date-fns/issues/376\nfunction startOfUTCWeekYear(dirtyDate,dirtyOptions){requiredArgs(1,arguments);var options=dirtyOptions||{};var locale=options.locale;var localeFirstWeekContainsDate=locale&&locale.options&&locale.options.firstWeekContainsDate;var defaultFirstWeekContainsDate=localeFirstWeekContainsDate==null?1:toInteger(localeFirstWeekContainsDate);var firstWeekContainsDate=options.firstWeekContainsDate==null?defaultFirstWeekContainsDate:toInteger(options.firstWeekContainsDate);var year=getUTCWeekYear(dirtyDate,dirtyOptions);var firstWeek=new Date(0);firstWeek.setUTCFullYear(year,0,firstWeekContainsDate);firstWeek.setUTCHours(0,0,0,0);var date=startOfUTCWeek(firstWeek,dirtyOptions);return date;}var MILLISECONDS_IN_WEEK$1=604800000;// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nfunction getUTCWeek(dirtyDate,options){requiredArgs(1,arguments);var date=toDate(dirtyDate);var diff=startOfUTCWeek(date,options).getTime()-startOfUTCWeekYear(date,options).getTime();// Round the number of days to the nearest integer\n// because the number of milliseconds in a week is not constant\n// (e.g. it's different in the week of the daylight saving time clock shift)\nreturn Math.round(diff/MILLISECONDS_IN_WEEK$1)+1;}var dayPeriodEnum={am:'am',pm:'pm',midnight:'midnight',noon:'noon',morning:'morning',afternoon:'afternoon',evening:'evening',night:'night'/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O | Timezone (GMT) |\n * | p! | Long localized time | P! | Long localized date |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */};var formatters$1={// Era\nG:function G(date,token,localize){var era=date.getUTCFullYear()>0?1:0;switch(token){// AD, BC\ncase'G':case'GG':case'GGG':return localize.era(era,{width:'abbreviated'});// A, B\ncase'GGGGG':return localize.era(era,{width:'narrow'});// Anno Domini, Before Christ\ncase'GGGG':default:return localize.era(era,{width:'wide'});}},// Year\ny:function y(date,token,localize){// Ordinal number\nif(token==='yo'){var signedYear=date.getUTCFullYear();// Returns 1 for 1 BC (which is year 0 in JavaScript)\nvar year=signedYear>0?signedYear:1-signedYear;return localize.ordinalNumber(year,{unit:'year'});}return formatters.y(date,token);},// Local week-numbering year\nY:function Y(date,token,localize,options){var signedWeekYear=getUTCWeekYear(date,options);// Returns 1 for 1 BC (which is year 0 in JavaScript)\nvar weekYear=signedWeekYear>0?signedWeekYear:1-signedWeekYear;// Two digit year\nif(token==='YY'){var twoDigitYear=weekYear%100;return addLeadingZeros(twoDigitYear,2);}// Ordinal number\nif(token==='Yo'){return localize.ordinalNumber(weekYear,{unit:'year'});}// Padding\nreturn addLeadingZeros(weekYear,token.length);},// ISO week-numbering year\nR:function R(date,token){var isoWeekYear=getUTCISOWeekYear(date);// Padding\nreturn addLeadingZeros(isoWeekYear,token.length);},// Extended year. This is a single number designating the year of this calendar system.\n// The main difference between `y` and `u` localizers are B.C. years:\n// | Year | `y` | `u` |\n// |------|-----|-----|\n// | AC 1 | 1 | 1 |\n// | BC 1 | 1 | 0 |\n// | BC 2 | 2 | -1 |\n// Also `yy` always returns the last two digits of a year,\n// while `uu` pads single digit years to 2 characters and returns other years unchanged.\nu:function u(date,token){var year=date.getUTCFullYear();return addLeadingZeros(year,token.length);},// Quarter\nQ:function Q(date,token,localize){var quarter=Math.ceil((date.getUTCMonth()+1)/3);switch(token){// 1, 2, 3, 4\ncase'Q':return String(quarter);// 01, 02, 03, 04\ncase'QQ':return addLeadingZeros(quarter,2);// 1st, 2nd, 3rd, 4th\ncase'Qo':return localize.ordinalNumber(quarter,{unit:'quarter'});// Q1, Q2, Q3, Q4\ncase'QQQ':return localize.quarter(quarter,{width:'abbreviated',context:'formatting'});// 1, 2, 3, 4 (narrow quarter; could be not numerical)\ncase'QQQQQ':return localize.quarter(quarter,{width:'narrow',context:'formatting'});// 1st quarter, 2nd quarter, ...\ncase'QQQQ':default:return localize.quarter(quarter,{width:'wide',context:'formatting'});}},// Stand-alone quarter\nq:function q(date,token,localize){var quarter=Math.ceil((date.getUTCMonth()+1)/3);switch(token){// 1, 2, 3, 4\ncase'q':return String(quarter);// 01, 02, 03, 04\ncase'qq':return addLeadingZeros(quarter,2);// 1st, 2nd, 3rd, 4th\ncase'qo':return localize.ordinalNumber(quarter,{unit:'quarter'});// Q1, Q2, Q3, Q4\ncase'qqq':return localize.quarter(quarter,{width:'abbreviated',context:'standalone'});// 1, 2, 3, 4 (narrow quarter; could be not numerical)\ncase'qqqqq':return localize.quarter(quarter,{width:'narrow',context:'standalone'});// 1st quarter, 2nd quarter, ...\ncase'qqqq':default:return localize.quarter(quarter,{width:'wide',context:'standalone'});}},// Month\nM:function M(date,token,localize){var month=date.getUTCMonth();switch(token){case'M':case'MM':return formatters.M(date,token);// 1st, 2nd, ..., 12th\ncase'Mo':return localize.ordinalNumber(month+1,{unit:'month'});// Jan, Feb, ..., Dec\ncase'MMM':return localize.month(month,{width:'abbreviated',context:'formatting'});// J, F, ..., D\ncase'MMMMM':return localize.month(month,{width:'narrow',context:'formatting'});// January, February, ..., December\ncase'MMMM':default:return localize.month(month,{width:'wide',context:'formatting'});}},// Stand-alone month\nL:function L(date,token,localize){var month=date.getUTCMonth();switch(token){// 1, 2, ..., 12\ncase'L':return String(month+1);// 01, 02, ..., 12\ncase'LL':return addLeadingZeros(month+1,2);// 1st, 2nd, ..., 12th\ncase'Lo':return localize.ordinalNumber(month+1,{unit:'month'});// Jan, Feb, ..., Dec\ncase'LLL':return localize.month(month,{width:'abbreviated',context:'standalone'});// J, F, ..., D\ncase'LLLLL':return localize.month(month,{width:'narrow',context:'standalone'});// January, February, ..., December\ncase'LLLL':default:return localize.month(month,{width:'wide',context:'standalone'});}},// Local week of year\nw:function w(date,token,localize,options){var week=getUTCWeek(date,options);if(token==='wo'){return localize.ordinalNumber(week,{unit:'week'});}return addLeadingZeros(week,token.length);},// ISO week of year\nI:function I(date,token,localize){var isoWeek=getUTCISOWeek(date);if(token==='Io'){return localize.ordinalNumber(isoWeek,{unit:'week'});}return addLeadingZeros(isoWeek,token.length);},// Day of the month\nd:function d(date,token,localize){if(token==='do'){return localize.ordinalNumber(date.getUTCDate(),{unit:'date'});}return formatters.d(date,token);},// Day of year\nD:function D(date,token,localize){var dayOfYear=getUTCDayOfYear(date);if(token==='Do'){return localize.ordinalNumber(dayOfYear,{unit:'dayOfYear'});}return addLeadingZeros(dayOfYear,token.length);},// Day of week\nE:function E(date,token,localize){var dayOfWeek=date.getUTCDay();switch(token){// Tue\ncase'E':case'EE':case'EEE':return localize.day(dayOfWeek,{width:'abbreviated',context:'formatting'});// T\ncase'EEEEE':return localize.day(dayOfWeek,{width:'narrow',context:'formatting'});// Tu\ncase'EEEEEE':return localize.day(dayOfWeek,{width:'short',context:'formatting'});// Tuesday\ncase'EEEE':default:return localize.day(dayOfWeek,{width:'wide',context:'formatting'});}},// Local day of week\ne:function e(date,token,localize,options){var dayOfWeek=date.getUTCDay();var localDayOfWeek=(dayOfWeek-options.weekStartsOn+8)%7||7;switch(token){// Numerical value (Nth day of week with current locale or weekStartsOn)\ncase'e':return String(localDayOfWeek);// Padded numerical value\ncase'ee':return addLeadingZeros(localDayOfWeek,2);// 1st, 2nd, ..., 7th\ncase'eo':return localize.ordinalNumber(localDayOfWeek,{unit:'day'});case'eee':return localize.day(dayOfWeek,{width:'abbreviated',context:'formatting'});// T\ncase'eeeee':return localize.day(dayOfWeek,{width:'narrow',context:'formatting'});// Tu\ncase'eeeeee':return localize.day(dayOfWeek,{width:'short',context:'formatting'});// Tuesday\ncase'eeee':default:return localize.day(dayOfWeek,{width:'wide',context:'formatting'});}},// Stand-alone local day of week\nc:function c(date,token,localize,options){var dayOfWeek=date.getUTCDay();var localDayOfWeek=(dayOfWeek-options.weekStartsOn+8)%7||7;switch(token){// Numerical value (same as in `e`)\ncase'c':return String(localDayOfWeek);// Padded numerical value\ncase'cc':return addLeadingZeros(localDayOfWeek,token.length);// 1st, 2nd, ..., 7th\ncase'co':return localize.ordinalNumber(localDayOfWeek,{unit:'day'});case'ccc':return localize.day(dayOfWeek,{width:'abbreviated',context:'standalone'});// T\ncase'ccccc':return localize.day(dayOfWeek,{width:'narrow',context:'standalone'});// Tu\ncase'cccccc':return localize.day(dayOfWeek,{width:'short',context:'standalone'});// Tuesday\ncase'cccc':default:return localize.day(dayOfWeek,{width:'wide',context:'standalone'});}},// ISO day of week\ni:function i(date,token,localize){var dayOfWeek=date.getUTCDay();var isoDayOfWeek=dayOfWeek===0?7:dayOfWeek;switch(token){// 2\ncase'i':return String(isoDayOfWeek);// 02\ncase'ii':return addLeadingZeros(isoDayOfWeek,token.length);// 2nd\ncase'io':return localize.ordinalNumber(isoDayOfWeek,{unit:'day'});// Tue\ncase'iii':return localize.day(dayOfWeek,{width:'abbreviated',context:'formatting'});// T\ncase'iiiii':return localize.day(dayOfWeek,{width:'narrow',context:'formatting'});// Tu\ncase'iiiiii':return localize.day(dayOfWeek,{width:'short',context:'formatting'});// Tuesday\ncase'iiii':default:return localize.day(dayOfWeek,{width:'wide',context:'formatting'});}},// AM or PM\na:function a(date,token,localize){var hours=date.getUTCHours();var dayPeriodEnumValue=hours/12>=1?'pm':'am';switch(token){case'a':case'aa':case'aaa':return localize.dayPeriod(dayPeriodEnumValue,{width:'abbreviated',context:'formatting'});case'aaaaa':return localize.dayPeriod(dayPeriodEnumValue,{width:'narrow',context:'formatting'});case'aaaa':default:return localize.dayPeriod(dayPeriodEnumValue,{width:'wide',context:'formatting'});}},// AM, PM, midnight, noon\nb:function b(date,token,localize){var hours=date.getUTCHours();var dayPeriodEnumValue;if(hours===12){dayPeriodEnumValue=dayPeriodEnum.noon;}else if(hours===0){dayPeriodEnumValue=dayPeriodEnum.midnight;}else{dayPeriodEnumValue=hours/12>=1?'pm':'am';}switch(token){case'b':case'bb':case'bbb':return localize.dayPeriod(dayPeriodEnumValue,{width:'abbreviated',context:'formatting'});case'bbbbb':return localize.dayPeriod(dayPeriodEnumValue,{width:'narrow',context:'formatting'});case'bbbb':default:return localize.dayPeriod(dayPeriodEnumValue,{width:'wide',context:'formatting'});}},// in the morning, in the afternoon, in the evening, at night\nB:function B(date,token,localize){var hours=date.getUTCHours();var dayPeriodEnumValue;if(hours>=17){dayPeriodEnumValue=dayPeriodEnum.evening;}else if(hours>=12){dayPeriodEnumValue=dayPeriodEnum.afternoon;}else if(hours>=4){dayPeriodEnumValue=dayPeriodEnum.morning;}else{dayPeriodEnumValue=dayPeriodEnum.night;}switch(token){case'B':case'BB':case'BBB':return localize.dayPeriod(dayPeriodEnumValue,{width:'abbreviated',context:'formatting'});case'BBBBB':return localize.dayPeriod(dayPeriodEnumValue,{width:'narrow',context:'formatting'});case'BBBB':default:return localize.dayPeriod(dayPeriodEnumValue,{width:'wide',context:'formatting'});}},// Hour [1-12]\nh:function h(date,token,localize){if(token==='ho'){var hours=date.getUTCHours()%12;if(hours===0)hours=12;return localize.ordinalNumber(hours,{unit:'hour'});}return formatters.h(date,token);},// Hour [0-23]\nH:function H(date,token,localize){if(token==='Ho'){return localize.ordinalNumber(date.getUTCHours(),{unit:'hour'});}return formatters.H(date,token);},// Hour [0-11]\nK:function K(date,token,localize){var hours=date.getUTCHours()%12;if(token==='Ko'){return localize.ordinalNumber(hours,{unit:'hour'});}return addLeadingZeros(hours,token.length);},// Hour [1-24]\nk:function k(date,token,localize){var hours=date.getUTCHours();if(hours===0)hours=24;if(token==='ko'){return localize.ordinalNumber(hours,{unit:'hour'});}return addLeadingZeros(hours,token.length);},// Minute\nm:function m(date,token,localize){if(token==='mo'){return localize.ordinalNumber(date.getUTCMinutes(),{unit:'minute'});}return formatters.m(date,token);},// Second\ns:function s(date,token,localize){if(token==='so'){return localize.ordinalNumber(date.getUTCSeconds(),{unit:'second'});}return formatters.s(date,token);},// Fraction of second\nS:function S(date,token){return formatters.S(date,token);},// Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\nX:function X(date,token,_localize,options){var originalDate=options._originalDate||date;var timezoneOffset=originalDate.getTimezoneOffset();if(timezoneOffset===0){return'Z';}switch(token){// Hours and optional minutes\ncase'X':return formatTimezoneWithOptionalMinutes(timezoneOffset);// Hours, minutes and optional seconds without `:` delimiter\n// Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n// so this token always has the same output as `XX`\ncase'XXXX':case'XX':// Hours and minutes without `:` delimiter\nreturn formatTimezone(timezoneOffset);// Hours, minutes and optional seconds with `:` delimiter\n// Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n// so this token always has the same output as `XXX`\ncase'XXXXX':case'XXX':// Hours and minutes with `:` delimiter\ndefault:return formatTimezone(timezoneOffset,':');}},// Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\nx:function x(date,token,_localize,options){var originalDate=options._originalDate||date;var timezoneOffset=originalDate.getTimezoneOffset();switch(token){// Hours and optional minutes\ncase'x':return formatTimezoneWithOptionalMinutes(timezoneOffset);// Hours, minutes and optional seconds without `:` delimiter\n// Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n// so this token always has the same output as `xx`\ncase'xxxx':case'xx':// Hours and minutes without `:` delimiter\nreturn formatTimezone(timezoneOffset);// Hours, minutes and optional seconds with `:` delimiter\n// Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n// so this token always has the same output as `xxx`\ncase'xxxxx':case'xxx':// Hours and minutes with `:` delimiter\ndefault:return formatTimezone(timezoneOffset,':');}},// Timezone (GMT)\nO:function O(date,token,_localize,options){var originalDate=options._originalDate||date;var timezoneOffset=originalDate.getTimezoneOffset();switch(token){// Short\ncase'O':case'OO':case'OOO':return'GMT'+formatTimezoneShort(timezoneOffset,':');// Long\ncase'OOOO':default:return'GMT'+formatTimezone(timezoneOffset,':');}},// Timezone (specific non-location)\nz:function z(date,token,_localize,options){var originalDate=options._originalDate||date;var timezoneOffset=originalDate.getTimezoneOffset();switch(token){// Short\ncase'z':case'zz':case'zzz':return'GMT'+formatTimezoneShort(timezoneOffset,':');// Long\ncase'zzzz':default:return'GMT'+formatTimezone(timezoneOffset,':');}},// Seconds timestamp\nt:function t(date,token,_localize,options){var originalDate=options._originalDate||date;var timestamp=Math.floor(originalDate.getTime()/1000);return addLeadingZeros(timestamp,token.length);},// Milliseconds timestamp\nT:function T(date,token,_localize,options){var originalDate=options._originalDate||date;var timestamp=originalDate.getTime();return addLeadingZeros(timestamp,token.length);}};function formatTimezoneShort(offset,dirtyDelimiter){var sign=offset>0?'-':'+';var absOffset=Math.abs(offset);var hours=Math.floor(absOffset/60);var minutes=absOffset%60;if(minutes===0){return sign+String(hours);}var delimiter=dirtyDelimiter||'';return sign+String(hours)+delimiter+addLeadingZeros(minutes,2);}function formatTimezoneWithOptionalMinutes(offset,dirtyDelimiter){if(offset%60===0){var sign=offset>0?'-':'+';return sign+addLeadingZeros(Math.abs(offset)/60,2);}return formatTimezone(offset,dirtyDelimiter);}function formatTimezone(offset,dirtyDelimiter){var delimiter=dirtyDelimiter||'';var sign=offset>0?'-':'+';var absOffset=Math.abs(offset);var hours=addLeadingZeros(Math.floor(absOffset/60),2);var minutes=addLeadingZeros(absOffset%60,2);return sign+hours+delimiter+minutes;}function dateLongFormatter(pattern,formatLong){switch(pattern){case'P':return formatLong.date({width:'short'});case'PP':return formatLong.date({width:'medium'});case'PPP':return formatLong.date({width:'long'});case'PPPP':default:return formatLong.date({width:'full'});}}function timeLongFormatter(pattern,formatLong){switch(pattern){case'p':return formatLong.time({width:'short'});case'pp':return formatLong.time({width:'medium'});case'ppp':return formatLong.time({width:'long'});case'pppp':default:return formatLong.time({width:'full'});}}function dateTimeLongFormatter(pattern,formatLong){var matchResult=pattern.match(/(P+)(p+)?/);var datePattern=matchResult[1];var timePattern=matchResult[2];if(!timePattern){return dateLongFormatter(pattern,formatLong);}var dateTimeFormat;switch(datePattern){case'P':dateTimeFormat=formatLong.dateTime({width:'short'});break;case'PP':dateTimeFormat=formatLong.dateTime({width:'medium'});break;case'PPP':dateTimeFormat=formatLong.dateTime({width:'long'});break;case'PPPP':default:dateTimeFormat=formatLong.dateTime({width:'full'});break;}return dateTimeFormat.replace('{{date}}',dateLongFormatter(datePattern,formatLong)).replace('{{time}}',timeLongFormatter(timePattern,formatLong));}var longFormatters={p:timeLongFormatter,P:dateTimeLongFormatter};var MILLISECONDS_IN_MINUTE=60000;function getDateMillisecondsPart(date){return date.getTime()%MILLISECONDS_IN_MINUTE;}/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */function getTimezoneOffsetInMilliseconds(dirtyDate){var date=new Date(dirtyDate.getTime());var baseTimezoneOffset=Math.ceil(date.getTimezoneOffset());date.setSeconds(0,0);var hasNegativeUTCOffset=baseTimezoneOffset>0;var millisecondsPartOfTimezoneOffset=hasNegativeUTCOffset?(MILLISECONDS_IN_MINUTE+getDateMillisecondsPart(date))%MILLISECONDS_IN_MINUTE:getDateMillisecondsPart(date);return baseTimezoneOffset*MILLISECONDS_IN_MINUTE+millisecondsPartOfTimezoneOffset;}var protectedDayOfYearTokens=['D','DD'];var protectedWeekYearTokens=['YY','YYYY'];function isProtectedDayOfYearToken(token){return protectedDayOfYearTokens.indexOf(token)!==-1;}function isProtectedWeekYearToken(token){return protectedWeekYearTokens.indexOf(token)!==-1;}function throwProtectedError(token,format,input){if(token==='YYYY'){throw new RangeError(\"Use `yyyy` instead of `YYYY` (in `\".concat(format,\"`) for formatting years to the input `\").concat(input,\"`; see: https://git.io/fxCyr\"));}else if(token==='YY'){throw new RangeError(\"Use `yy` instead of `YY` (in `\".concat(format,\"`) for formatting years to the input `\").concat(input,\"`; see: https://git.io/fxCyr\"));}else if(token==='D'){throw new RangeError(\"Use `d` instead of `D` (in `\".concat(format,\"`) for formatting days of the month to the input `\").concat(input,\"`; see: https://git.io/fxCyr\"));}else if(token==='DD'){throw new RangeError(\"Use `dd` instead of `DD` (in `\".concat(format,\"`) for formatting days of the month to the input `\").concat(input,\"`; see: https://git.io/fxCyr\"));}}// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nvar formattingTokensRegExp=/[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nvar longFormattingTokensRegExp=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;var escapedStringRegExp=/^'([^]*?)'?$/;var doubleQuoteRegExp=/''/g;var unescapedLatinCharacterRegExp=/[a-zA-Z]/;/**\n * @name format\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://git.io/fxCyr\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit | Pattern | Result examples | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era | G..GGG | AD, BC | |\n * | | GGGG | Anno Domini, Before Christ | 2 |\n * | | GGGGG | A, B | |\n * | Calendar year | y | 44, 1, 1900, 2017 | 5 |\n * | | yo | 44th, 1st, 0th, 17th | 5,7 |\n * | | yy | 44, 01, 00, 17 | 5 |\n * | | yyy | 044, 001, 1900, 2017 | 5 |\n * | | yyyy | 0044, 0001, 1900, 2017 | 5 |\n * | | yyyyy | ... | 3,5 |\n * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 |\n * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 |\n * | | YY | 44, 01, 00, 17 | 5,8 |\n * | | YYY | 044, 001, 1900, 2017 | 5 |\n * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 |\n * | | YYYYY | ... | 3,5 |\n * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 |\n * | | RR | -43, 00, 01, 1900, 2017 | 5,7 |\n * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 |\n * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 |\n * | | RRRRR | ... | 3,5,7 |\n * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 |\n * | | uu | -43, 01, 1900, 2017 | 5 |\n * | | uuu | -043, 001, 1900, 2017 | 5 |\n * | | uuuu | -0043, 0001, 1900, 2017 | 5 |\n * | | uuuuu | ... | 3,5 |\n * | Quarter (formatting) | Q | 1, 2, 3, 4 | |\n * | | Qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | QQ | 01, 02, 03, 04 | |\n * | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | q | 1, 2, 3, 4 | |\n * | | qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | qq | 01, 02, 03, 04 | |\n * | | qqq | Q1, Q2, Q3, Q4 | |\n * | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | qqqqq | 1, 2, 3, 4 | 4 |\n * | Month (formatting) | M | 1, 2, ..., 12 | |\n * | | Mo | 1st, 2nd, ..., 12th | 7 |\n * | | MM | 01, 02, ..., 12 | |\n * | | MMM | Jan, Feb, ..., Dec | |\n * | | MMMM | January, February, ..., December | 2 |\n * | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | L | 1, 2, ..., 12 | |\n * | | Lo | 1st, 2nd, ..., 12th | 7 |\n * | | LL | 01, 02, ..., 12 | |\n * | | LLL | Jan, Feb, ..., Dec | |\n * | | LLLL | January, February, ..., December | 2 |\n * | | LLLLL | J, F, ..., D | |\n * | Local week of year | w | 1, 2, ..., 53 | |\n * | | wo | 1st, 2nd, ..., 53th | 7 |\n * | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | I | 1, 2, ..., 53 | 7 |\n * | | Io | 1st, 2nd, ..., 53th | 7 |\n * | | II | 01, 02, ..., 53 | 7 |\n * | Day of month | d | 1, 2, ..., 31 | |\n * | | do | 1st, 2nd, ..., 31st | 7 |\n * | | dd | 01, 02, ..., 31 | |\n * | Day of year | D | 1, 2, ..., 365, 366 | 9 |\n * | | Do | 1st, 2nd, ..., 365th, 366th | 7 |\n * | | DD | 01, 02, ..., 365, 366 | 9 |\n * | | DDD | 001, 002, ..., 365, 366 | |\n * | | DDDD | ... | 3 |\n * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | EEEEE | M, T, W, T, F, S, S | |\n * | | EEEEEE | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 |\n * | | io | 1st, 2nd, ..., 7th | 7 |\n * | | ii | 01, 02, ..., 07 | 7 |\n * | | iii | Mon, Tue, Wed, ..., Sun | 7 |\n * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 |\n * | | iiiii | M, T, W, T, F, S, S | 7 |\n * | | iiiiii | Mo, Tu, We, Th, Fr, Su, Sa | 7 |\n * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | |\n * | | eo | 2nd, 3rd, ..., 1st | 7 |\n * | | ee | 02, 03, ..., 01 | |\n * | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | eeeee | M, T, W, T, F, S, S | |\n * | | eeeeee | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | |\n * | | co | 2nd, 3rd, ..., 1st | 7 |\n * | | cc | 02, 03, ..., 01 | |\n * | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | ccccc | M, T, W, T, F, S, S | |\n * | | cccccc | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | AM, PM | a..aaa | AM, PM | |\n * | | aaaa | a.m., p.m. | 2 |\n * | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | b..bbb | AM, PM, noon, midnight | |\n * | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | bbbbb | a, p, n, mi | |\n * | Flexible day period | B..BBB | at night, in the morning, ... | |\n * | | BBBB | at night, in the morning, ... | 2 |\n * | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | h | 1, 2, ..., 11, 12 | |\n * | | ho | 1st, 2nd, ..., 11th, 12th | 7 |\n * | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | H | 0, 1, 2, ..., 23 | |\n * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 |\n * | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | K | 1, 2, ..., 11, 0 | |\n * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 |\n * | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | k | 24, 1, 2, ..., 23 | |\n * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 |\n * | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | m | 0, 1, ..., 59 | |\n * | | mo | 0th, 1st, ..., 59th | 7 |\n * | | mm | 00, 01, ..., 59 | |\n * | Second | s | 0, 1, ..., 59 | |\n * | | so | 0th, 1st, ..., 59th | 7 |\n * | | ss | 00, 01, ..., 59 | |\n * | Fraction of second | S | 0, 1, ..., 9 | |\n * | | SS | 00, 01, ..., 99 | |\n * | | SSS | 000, 0001, ..., 999 | |\n * | | SSSS | ... | 3 |\n * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | |\n * | | XX | -0800, +0530, Z | |\n * | | XXX | -08:00, +05:30, Z | |\n * | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | |\n * | | xx | -0800, +0530, +0000 | |\n * | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | |\n * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 |\n * | Timezone (specific non-locat.) | z...zzz | GMT-8, GMT+5:30, GMT+0 | 6 |\n * | | zzzz | GMT-08:00, GMT+05:30, GMT+00:00 | 2,6 |\n * | Seconds timestamp | t | 512969520 | 7 |\n * | | tt | ... | 3,7 |\n * | Milliseconds timestamp | T | 512969520900 | 7 |\n * | | TT | ... | 3,7 |\n * | Long localized date | P | 05/29/1453 | 7 |\n * | | PP | May 29, 1453 | 7 |\n * | | PPP | May 29th, 1453 | 7 |\n * | | PPPP | Sunday, May 29th, 1453 | 2,7 |\n * | Long localized time | p | 12:00 AM | 7 |\n * | | pp | 12:00:00 AM | 7 |\n * | | ppp | 12:00:00 AM GMT+2 | 7 |\n * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 |\n * | Combination of date and time | Pp | 05/29/1453, 12:00 AM | 7 |\n * | | PPpp | May 29, 1453, 12:00:00 AM | 7 |\n * | | PPPppp | May 29th, 1453 at ... | 7 |\n * | | PPPPpppp| Sunday, May 29th, 1453 at ... | 2,7 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n * the output will be the same as default pattern for this unit, usually\n * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n * are marked with \"2\" in the last column of the table.\n *\n * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n * The output will be padded with zeros to match the length of the pattern.\n *\n * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` always returns the last two digits of a year,\n * while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n * | Year | `yy` | `uu` |\n * |------|------|------|\n * | 1 | 01 | 01 |\n * | 14 | 14 | 14 |\n * | 376 | 76 | 376 |\n * | 1453 | 53 | 1453 |\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [getISOWeekYear]{@link https://date-fns.org/docs/getISOWeekYear}\n * and [getWeekYear]{@link https://date-fns.org/docs/getWeekYear}).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n * so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `t`: seconds timestamp\n * - `T`: milliseconds timestamp\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://git.io/fxCyr\n *\n * 9. `D` and `DD` tokens represent days of the year but they are ofthen confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://git.io/fxCyr\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The second argument is now required for the sake of explicitness.\n *\n * ```javascript\n * // Before v2.0.0\n * format(new Date(2016, 0, 1))\n *\n * // v2.0.0 onward\n * format(new Date(2016, 0, 1), \"yyyy-MM-dd'T'HH:mm:ss.SSSxxx\")\n * ```\n *\n * - New format string API for `format` function\n * which is based on [Unicode Technical Standard #35](https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table).\n * See [this post](https://blog.date-fns.org/post/unicode-tokens-in-date-fns-v2-sreatyki91jg) for more details.\n *\n * - Characters are now escaped using single quote symbols (`'`) instead of square brackets.\n *\n * @param {Date|Number} date - the original date\n * @param {String} format - the string of tokens\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Number} [options.firstWeekContainsDate=1] - the day of January, which is\n * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`;\n * see: https://git.io/fxCyr\n * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`;\n * see: https://git.io/fxCyr\n * @returns {String} the formatted date string\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `options.locale` must contain `localize` property\n * @throws {RangeError} `options.locale` must contain `formatLong` property\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * var result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * var result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n * locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * var result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */function format(dirtyDate,dirtyFormatStr,dirtyOptions){requiredArgs(2,arguments);var formatStr=String(dirtyFormatStr);var options=dirtyOptions||{};var locale$1=options.locale||locale;var localeFirstWeekContainsDate=locale$1.options&&locale$1.options.firstWeekContainsDate;var defaultFirstWeekContainsDate=localeFirstWeekContainsDate==null?1:toInteger(localeFirstWeekContainsDate);var firstWeekContainsDate=options.firstWeekContainsDate==null?defaultFirstWeekContainsDate:toInteger(options.firstWeekContainsDate);// Test if weekStartsOn is between 1 and 7 _and_ is not NaN\nif(!(firstWeekContainsDate>=1&&firstWeekContainsDate<=7)){throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');}var localeWeekStartsOn=locale$1.options&&locale$1.options.weekStartsOn;var defaultWeekStartsOn=localeWeekStartsOn==null?0:toInteger(localeWeekStartsOn);var weekStartsOn=options.weekStartsOn==null?defaultWeekStartsOn:toInteger(options.weekStartsOn);// Test if weekStartsOn is between 0 and 6 _and_ is not NaN\nif(!(weekStartsOn>=0&&weekStartsOn<=6)){throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');}if(!locale$1.localize){throw new RangeError('locale must contain localize property');}if(!locale$1.formatLong){throw new RangeError('locale must contain formatLong property');}var originalDate=toDate(dirtyDate);if(!isValid(originalDate)){throw new RangeError('Invalid time value');}// Convert the date in system timezone to the same date in UTC+00:00 timezone.\n// This ensures that when UTC functions will be implemented, locales will be compatible with them.\n// See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/376\nvar timezoneOffset=getTimezoneOffsetInMilliseconds(originalDate);var utcDate=subMilliseconds(originalDate,timezoneOffset);var formatterOptions={firstWeekContainsDate:firstWeekContainsDate,weekStartsOn:weekStartsOn,locale:locale$1,_originalDate:originalDate};var result=formatStr.match(longFormattingTokensRegExp).map(function(substring){var firstCharacter=substring[0];if(firstCharacter==='p'||firstCharacter==='P'){var longFormatter=longFormatters[firstCharacter];return longFormatter(substring,locale$1.formatLong,formatterOptions);}return substring;}).join('').match(formattingTokensRegExp).map(function(substring){// Replace two single quote characters with one single quote character\nif(substring===\"''\"){return\"'\";}var firstCharacter=substring[0];if(firstCharacter===\"'\"){return cleanEscapedString(substring);}var formatter=formatters$1[firstCharacter];if(formatter){if(!options.useAdditionalWeekYearTokens&&isProtectedWeekYearToken(substring)){throwProtectedError(substring,dirtyFormatStr,dirtyDate);}if(!options.useAdditionalDayOfYearTokens&&isProtectedDayOfYearToken(substring)){throwProtectedError(substring,dirtyFormatStr,dirtyDate);}return formatter(utcDate,substring,locale$1.localize,formatterOptions);}if(firstCharacter.match(unescapedLatinCharacterRegExp)){throw new RangeError('Format string contains an unescaped latin alphabet character `'+firstCharacter+'`');}return substring;}).join('');return result;}function cleanEscapedString(input){return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp,\"'\");}var MILLISECONDS_IN_MINUTE$1=60000;/**\n * @name addMinutes\n * @category Minute Helpers\n * @summary Add the specified number of minutes to the given date.\n *\n * @description\n * Add the specified number of minutes to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of minutes to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the minutes added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 30 minutes to 10 July 2014 12:00:00:\n * var result = addMinutes(new Date(2014, 6, 10, 12, 0), 30)\n * //=> Thu Jul 10 2014 12:30:00\n */function addMinutes(dirtyDate,dirtyAmount){requiredArgs(2,arguments);var amount=toInteger(dirtyAmount);return addMilliseconds(dirtyDate,amount*MILLISECONDS_IN_MINUTE$1);}var MILLISECONDS_IN_HOUR=3600000;/**\n * @name addHours\n * @category Hour Helpers\n * @summary Add the specified number of hours to the given date.\n *\n * @description\n * Add the specified number of hours to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of hours to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the hours added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 2 hours to 10 July 2014 23:00:00:\n * var result = addHours(new Date(2014, 6, 10, 23, 0), 2)\n * //=> Fri Jul 11 2014 01:00:00\n */function addHours(dirtyDate,dirtyAmount){requiredArgs(2,arguments);var amount=toInteger(dirtyAmount);return addMilliseconds(dirtyDate,amount*MILLISECONDS_IN_HOUR);}/**\n * @name addDays\n * @category Day Helpers\n * @summary Add the specified number of days to the given date.\n *\n * @description\n * Add the specified number of days to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of days to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the days added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 10 days to 1 September 2014:\n * var result = addDays(new Date(2014, 8, 1), 10)\n * //=> Thu Sep 11 2014 00:00:00\n */function addDays(dirtyDate,dirtyAmount){requiredArgs(2,arguments);var date=toDate(dirtyDate);var amount=toInteger(dirtyAmount);if(isNaN(amount)){return new Date(NaN);}if(!amount){// If 0 days, no-op to avoid changing times in the hour before end of DST\nreturn date;}date.setDate(date.getDate()+amount);return date;}/**\n * @name addWeeks\n * @category Week Helpers\n * @summary Add the specified number of weeks to the given date.\n *\n * @description\n * Add the specified number of week to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of weeks to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the weeks added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 4 weeks to 1 September 2014:\n * var result = addWeeks(new Date(2014, 8, 1), 4)\n * //=> Mon Sep 29 2014 00:00:00\n */function addWeeks(dirtyDate,dirtyAmount){requiredArgs(2,arguments);var amount=toInteger(dirtyAmount);var days=amount*7;return addDays(dirtyDate,days);}/**\n * @name addMonths\n * @category Month Helpers\n * @summary Add the specified number of months to the given date.\n *\n * @description\n * Add the specified number of months to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of months to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the months added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 months to 1 September 2014:\n * var result = addMonths(new Date(2014, 8, 1), 5)\n * //=> Sun Feb 01 2015 00:00:00\n */function addMonths(dirtyDate,dirtyAmount){requiredArgs(2,arguments);var date=toDate(dirtyDate);var amount=toInteger(dirtyAmount);if(isNaN(amount)){return new Date(NaN);}if(!amount){// If 0 months, no-op to avoid changing times in the hour before end of DST\nreturn date;}var dayOfMonth=date.getDate();// The JS Date object supports date math by accepting out-of-bounds values for\n// month, day, etc. For example, new Date(2020, 1, 0) returns 31 Dec 2019 and\n// new Date(2020, 13, 1) returns 1 Feb 2021. This is *almost* the behavior we\n// want except that dates will wrap around the end of a month, meaning that\n// new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So\n// we'll default to the end of the desired month by adding 1 to the desired\n// month and using a date of 0 to back up one day to the end of the desired\n// month.\nvar endOfDesiredMonth=new Date(date.getTime());endOfDesiredMonth.setMonth(date.getMonth()+amount+1,0);var daysInMonth=endOfDesiredMonth.getDate();if(dayOfMonth>=daysInMonth){// If we're already at the end of the month, then this is the correct date\n// and we're done.\nreturn endOfDesiredMonth;}else{// Otherwise, we now know that setting the original day-of-month value won't\n// cause an overflow, so set the desired day-of-month. Note that we can't\n// just set the date of `endOfDesiredMonth` because that object may have had\n// its time changed in the unusual case where where a DST transition was on\n// the last day of the month and its local time was in the hour skipped or\n// repeated next to a DST transition. So we use `date` instead which is\n// guaranteed to still have the original time.\ndate.setFullYear(endOfDesiredMonth.getFullYear(),endOfDesiredMonth.getMonth(),dayOfMonth);return date;}}/**\n * @name addYears\n * @category Year Helpers\n * @summary Add the specified number of years to the given date.\n *\n * @description\n * Add the specified number of years to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of years to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the years added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 years to 1 September 2014:\n * var result = addYears(new Date(2014, 8, 1), 5)\n * //=> Sun Sep 01 2019 00:00:00\n */function addYears(dirtyDate,dirtyAmount){requiredArgs(2,arguments);var amount=toInteger(dirtyAmount);return addMonths(dirtyDate,amount*12);}/**\n * @name subDays\n * @category Day Helpers\n * @summary Subtract the specified number of days from the given date.\n *\n * @description\n * Subtract the specified number of days from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of days to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the days subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 10 days from 1 September 2014:\n * var result = subDays(new Date(2014, 8, 1), 10)\n * //=> Fri Aug 22 2014 00:00:00\n */function subDays(dirtyDate,dirtyAmount){requiredArgs(2,arguments);var amount=toInteger(dirtyAmount);return addDays(dirtyDate,-amount);}/**\n * @name subWeeks\n * @category Week Helpers\n * @summary Subtract the specified number of weeks from the given date.\n *\n * @description\n * Subtract the specified number of weeks from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of weeks to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the weeks subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 4 weeks from 1 September 2014:\n * var result = subWeeks(new Date(2014, 8, 1), 4)\n * //=> Mon Aug 04 2014 00:00:00\n */function subWeeks(dirtyDate,dirtyAmount){requiredArgs(2,arguments);var amount=toInteger(dirtyAmount);return addWeeks(dirtyDate,-amount);}/**\n * @name subMonths\n * @category Month Helpers\n * @summary Subtract the specified number of months from the given date.\n *\n * @description\n * Subtract the specified number of months from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of months to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the months subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 months from 1 February 2015:\n * var result = subMonths(new Date(2015, 1, 1), 5)\n * //=> Mon Sep 01 2014 00:00:00\n */function subMonths(dirtyDate,dirtyAmount){requiredArgs(2,arguments);var amount=toInteger(dirtyAmount);return addMonths(dirtyDate,-amount);}/**\n * @name subYears\n * @category Year Helpers\n * @summary Subtract the specified number of years from the given date.\n *\n * @description\n * Subtract the specified number of years from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of years to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the years subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 years from 1 September 2014:\n * var result = subYears(new Date(2014, 8, 1), 5)\n * //=> Tue Sep 01 2009 00:00:00\n */function subYears(dirtyDate,dirtyAmount){requiredArgs(2,arguments);var amount=toInteger(dirtyAmount);return addYears(dirtyDate,-amount);}/**\n * @name getSeconds\n * @category Second Helpers\n * @summary Get the seconds of the given date.\n *\n * @description\n * Get the seconds of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the seconds\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the seconds of 29 February 2012 11:45:05.123:\n * var result = getSeconds(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 5\n */function getSeconds(dirtyDate){requiredArgs(1,arguments);var date=toDate(dirtyDate);var seconds=date.getSeconds();return seconds;}/**\n * @name getMinutes\n * @category Minute Helpers\n * @summary Get the minutes of the given date.\n *\n * @description\n * Get the minutes of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the minutes\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the minutes of 29 February 2012 11:45:05:\n * var result = getMinutes(new Date(2012, 1, 29, 11, 45, 5))\n * //=> 45\n */function getMinutes(dirtyDate){requiredArgs(1,arguments);var date=toDate(dirtyDate);var minutes=date.getMinutes();return minutes;}/**\n * @name getHours\n * @category Hour Helpers\n * @summary Get the hours of the given date.\n *\n * @description\n * Get the hours of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the hours\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the hours of 29 February 2012 11:45:00:\n * var result = getHours(new Date(2012, 1, 29, 11, 45))\n * //=> 11\n */function getHours(dirtyDate){requiredArgs(1,arguments);var date=toDate(dirtyDate);var hours=date.getHours();return hours;}/**\n * @name getDay\n * @category Weekday Helpers\n * @summary Get the day of the week of the given date.\n *\n * @description\n * Get the day of the week of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {0|1|2|3|4|5|6} the day of week, 0 represents Sunday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which day of the week is 29 February 2012?\n * var result = getDay(new Date(2012, 1, 29))\n * //=> 3\n */function getDay(dirtyDate){requiredArgs(1,arguments);var date=toDate(dirtyDate);var day=date.getDay();return day;}/**\n * @name getDate\n * @category Day Helpers\n * @summary Get the day of the month of the given date.\n *\n * @description\n * Get the day of the month of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the day of month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which day of the month is 29 February 2012?\n * var result = getDate(new Date(2012, 1, 29))\n * //=> 29\n */function getDate(dirtyDate){requiredArgs(1,arguments);var date=toDate(dirtyDate);var dayOfMonth=date.getDate();return dayOfMonth;}/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Date} the start of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * var result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * var result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */function startOfWeek(dirtyDate,dirtyOptions){requiredArgs(1,arguments);var options=dirtyOptions||{};var locale=options.locale;var localeWeekStartsOn=locale&&locale.options&&locale.options.weekStartsOn;var defaultWeekStartsOn=localeWeekStartsOn==null?0:toInteger(localeWeekStartsOn);var weekStartsOn=options.weekStartsOn==null?defaultWeekStartsOn:toInteger(options.weekStartsOn);// Test if weekStartsOn is between 0 and 6 _and_ is not NaN\nif(!(weekStartsOn>=0&&weekStartsOn<=6)){throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');}var date=toDate(dirtyDate);var day=date.getDay();var diff=(day 2005\n *\n * @example\n * // Which week numbering year is 26 December 2004 if week starts on Saturday?\n * var result = getWeekYear(new Date(2004, 11, 26), { weekStartsOn: 6 })\n * //=> 2004\n *\n * @example\n * // Which week numbering year is 26 December 2004 if the first week contains 4 January?\n * var result = getWeekYear(new Date(2004, 11, 26), { firstWeekContainsDate: 4 })\n * //=> 2004\n */function getWeekYear(dirtyDate,dirtyOptions){requiredArgs(1,arguments);var date=toDate(dirtyDate);var year=date.getFullYear();var options=dirtyOptions||{};var locale=options.locale;var localeFirstWeekContainsDate=locale&&locale.options&&locale.options.firstWeekContainsDate;var defaultFirstWeekContainsDate=localeFirstWeekContainsDate==null?1:toInteger(localeFirstWeekContainsDate);var firstWeekContainsDate=options.firstWeekContainsDate==null?defaultFirstWeekContainsDate:toInteger(options.firstWeekContainsDate);// Test if weekStartsOn is between 1 and 7 _and_ is not NaN\nif(!(firstWeekContainsDate>=1&&firstWeekContainsDate<=7)){throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');}var firstWeekOfNextYear=new Date(0);firstWeekOfNextYear.setFullYear(year+1,0,firstWeekContainsDate);firstWeekOfNextYear.setHours(0,0,0,0);var startOfNextYear=startOfWeek(firstWeekOfNextYear,dirtyOptions);var firstWeekOfThisYear=new Date(0);firstWeekOfThisYear.setFullYear(year,0,firstWeekContainsDate);firstWeekOfThisYear.setHours(0,0,0,0);var startOfThisYear=startOfWeek(firstWeekOfThisYear,dirtyOptions);if(date.getTime()>=startOfNextYear.getTime()){return year+1;}else if(date.getTime()>=startOfThisYear.getTime()){return year;}else{return year-1;}}/**\n * @name startOfWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Return the start of a local week-numbering year for the given date.\n *\n * @description\n * Return the start of a local week-numbering year.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @returns {Date} the start of a week-numbering year\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n *\n * @example\n * // The start of an a week-numbering year for 2 July 2005 with default settings:\n * var result = startOfWeekYear(new Date(2005, 6, 2))\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // The start of a week-numbering year for 2 July 2005\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * var result = startOfWeekYear(new Date(2005, 6, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> Mon Jan 03 2005 00:00:00\n */function startOfWeekYear(dirtyDate,dirtyOptions){requiredArgs(1,arguments);var options=dirtyOptions||{};var locale=options.locale;var localeFirstWeekContainsDate=locale&&locale.options&&locale.options.firstWeekContainsDate;var defaultFirstWeekContainsDate=localeFirstWeekContainsDate==null?1:toInteger(localeFirstWeekContainsDate);var firstWeekContainsDate=options.firstWeekContainsDate==null?defaultFirstWeekContainsDate:toInteger(options.firstWeekContainsDate);var year=getWeekYear(dirtyDate,dirtyOptions);var firstWeek=new Date(0);firstWeek.setFullYear(year,0,firstWeekContainsDate);firstWeek.setHours(0,0,0,0);var date=startOfWeek(firstWeek,dirtyOptions);return date;}var MILLISECONDS_IN_WEEK$2=604800000;/**\n * @name getWeek\n * @category Week Helpers\n * @summary Get the local week index of the given date.\n *\n * @description\n * Get the local week index of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @returns {Number} the week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005 with default options?\n * var result = getISOWeek(new Date(2005, 0, 2))\n * //=> 2\n *\n * // Which week of the local week numbering year is 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January?\n * var result = getISOWeek(new Date(2005, 0, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> 53\n */function getWeek(dirtyDate,options){requiredArgs(1,arguments);var date=toDate(dirtyDate);var diff=startOfWeek(date,options).getTime()-startOfWeekYear(date,options).getTime();// Round the number of days to the nearest integer\n// because the number of milliseconds in a week is not constant\n// (e.g. it's different in the week of the daylight saving time clock shift)\nreturn Math.round(diff/MILLISECONDS_IN_WEEK$2)+1;}/**\n * @name getMonth\n * @category Month Helpers\n * @summary Get the month of the given date.\n *\n * @description\n * Get the month of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which month is 29 February 2012?\n * var result = getMonth(new Date(2012, 1, 29))\n * //=> 1\n */function getMonth(dirtyDate){requiredArgs(1,arguments);var date=toDate(dirtyDate);var month=date.getMonth();return month;}/**\n * @name getQuarter\n * @category Quarter Helpers\n * @summary Get the year quarter of the given date.\n *\n * @description\n * Get the year quarter of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the quarter\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which quarter is 2 July 2014?\n * var result = getQuarter(new Date(2014, 6, 2))\n * //=> 3\n */function getQuarter(dirtyDate){requiredArgs(1,arguments);var date=toDate(dirtyDate);var quarter=Math.floor(date.getMonth()/3)+1;return quarter;}/**\n * @name getYear\n * @category Year Helpers\n * @summary Get the year of the given date.\n *\n * @description\n * Get the year of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which year is 2 July 2014?\n * var result = getYear(new Date(2014, 6, 2))\n * //=> 2014\n */function getYear(dirtyDate){requiredArgs(1,arguments);var date=toDate(dirtyDate);var year=date.getFullYear();return year;}/**\n * @name getTime\n * @category Timestamp Helpers\n * @summary Get the milliseconds timestamp of the given date.\n *\n * @description\n * Get the milliseconds timestamp of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the timestamp\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the timestamp of 29 February 2012 11:45:05.123:\n * var result = getTime(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 1330515905123\n */function getTime(dirtyDate){requiredArgs(1,arguments);var date=toDate(dirtyDate);var timestamp=date.getTime();return timestamp;}/**\n * @name setSeconds\n * @category Second Helpers\n * @summary Set the seconds to the given date.\n *\n * @description\n * Set the seconds to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} seconds - the seconds of the new date\n * @returns {Date} the new date with the seconds set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 45 seconds to 1 September 2014 11:30:40:\n * var result = setSeconds(new Date(2014, 8, 1, 11, 30, 40), 45)\n * //=> Mon Sep 01 2014 11:30:45\n */function setSeconds(dirtyDate,dirtySeconds){requiredArgs(2,arguments);var date=toDate(dirtyDate);var seconds=toInteger(dirtySeconds);date.setSeconds(seconds);return date;}/**\n * @name setMinutes\n * @category Minute Helpers\n * @summary Set the minutes to the given date.\n *\n * @description\n * Set the minutes to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} minutes - the minutes of the new date\n * @returns {Date} the new date with the minutes set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 45 minutes to 1 September 2014 11:30:40:\n * var result = setMinutes(new Date(2014, 8, 1, 11, 30, 40), 45)\n * //=> Mon Sep 01 2014 11:45:40\n */function setMinutes(dirtyDate,dirtyMinutes){requiredArgs(2,arguments);var date=toDate(dirtyDate);var minutes=toInteger(dirtyMinutes);date.setMinutes(minutes);return date;}/**\n * @name setHours\n * @category Hour Helpers\n * @summary Set the hours to the given date.\n *\n * @description\n * Set the hours to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} hours - the hours of the new date\n * @returns {Date} the new date with the hours set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 4 hours to 1 September 2014 11:30:00:\n * var result = setHours(new Date(2014, 8, 1, 11, 30), 4)\n * //=> Mon Sep 01 2014 04:30:00\n */function setHours(dirtyDate,dirtyHours){requiredArgs(2,arguments);var date=toDate(dirtyDate);var hours=toInteger(dirtyHours);date.setHours(hours);return date;}/**\n * @name getDaysInMonth\n * @category Month Helpers\n * @summary Get the number of days in a month of the given date.\n *\n * @description\n * Get the number of days in a month of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the number of days in a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // How many days are in February 2000?\n * var result = getDaysInMonth(new Date(2000, 1))\n * //=> 29\n */function getDaysInMonth(dirtyDate){requiredArgs(1,arguments);var date=toDate(dirtyDate);var year=date.getFullYear();var monthIndex=date.getMonth();var lastDayOfMonth=new Date(0);lastDayOfMonth.setFullYear(year,monthIndex+1,0);lastDayOfMonth.setHours(0,0,0,0);return lastDayOfMonth.getDate();}/**\n * @name setMonth\n * @category Month Helpers\n * @summary Set the month to the given date.\n *\n * @description\n * Set the month to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} month - the month of the new date\n * @returns {Date} the new date with the month set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set February to 1 September 2014:\n * var result = setMonth(new Date(2014, 8, 1), 1)\n * //=> Sat Feb 01 2014 00:00:00\n */function setMonth(dirtyDate,dirtyMonth){requiredArgs(2,arguments);var date=toDate(dirtyDate);var month=toInteger(dirtyMonth);var year=date.getFullYear();var day=date.getDate();var dateWithDesiredMonth=new Date(0);dateWithDesiredMonth.setFullYear(year,month,15);dateWithDesiredMonth.setHours(0,0,0,0);var daysInMonth=getDaysInMonth(dateWithDesiredMonth);// Set the last day of the new month\n// if the original date was the last day of the longer month\ndate.setMonth(month,Math.min(day,daysInMonth));return date;}/**\n * @name setQuarter\n * @category Quarter Helpers\n * @summary Set the year quarter to the given date.\n *\n * @description\n * Set the year quarter to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} quarter - the quarter of the new date\n * @returns {Date} the new date with the quarter set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set the 2nd quarter to 2 July 2014:\n * var result = setQuarter(new Date(2014, 6, 2), 2)\n * //=> Wed Apr 02 2014 00:00:00\n */function setQuarter(dirtyDate,dirtyQuarter){requiredArgs(2,arguments);var date=toDate(dirtyDate);var quarter=toInteger(dirtyQuarter);var oldQuarter=Math.floor(date.getMonth()/3)+1;var diff=quarter-oldQuarter;return setMonth(date,date.getMonth()+diff*3);}/**\n * @name setYear\n * @category Year Helpers\n * @summary Set the year to the given date.\n *\n * @description\n * Set the year to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} year - the year of the new date\n * @returns {Date} the new date with the year set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set year 2013 to 1 September 2014:\n * var result = setYear(new Date(2014, 8, 1), 2013)\n * //=> Sun Sep 01 2013 00:00:00\n */function setYear(dirtyDate,dirtyYear){requiredArgs(2,arguments);var date=toDate(dirtyDate);var year=toInteger(dirtyYear);// Check if date is Invalid Date because Date.prototype.setFullYear ignores the value of Invalid Date\nif(isNaN(date)){return new Date(NaN);}date.setFullYear(year);return date;}/**\n * @name min\n * @category Common Helpers\n * @summary Return the earliest of the given dates.\n *\n * @description\n * Return the earliest of the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - `min` function now accepts an array of dates rather than spread arguments.\n *\n * ```javascript\n * // Before v2.0.0\n * var date1 = new Date(1989, 6, 10)\n * var date2 = new Date(1987, 1, 11)\n * var minDate = min(date1, date2)\n *\n * // v2.0.0 onward:\n * var dates = [new Date(1989, 6, 10), new Date(1987, 1, 11)]\n * var minDate = min(dates)\n * ```\n *\n * @param {Date[]|Number[]} datesArray - the dates to compare\n * @returns {Date} the earliest of the dates\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which of these dates is the earliest?\n * var result = min([\n * new Date(1989, 6, 10),\n * new Date(1987, 1, 11),\n * new Date(1995, 6, 2),\n * new Date(1990, 0, 1)\n * ])\n * //=> Wed Feb 11 1987 00:00:00\n */function min(dirtyDatesArray){requiredArgs(1,arguments);var datesArray;// `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method\nif(dirtyDatesArray&&typeof dirtyDatesArray.forEach==='function'){datesArray=dirtyDatesArray;// If `dirtyDatesArray` is Array-like Object, convert to Array.\n}else if(typeof dirtyDatesArray==='object'&&dirtyDatesArray!==null){datesArray=Array.prototype.slice.call(dirtyDatesArray);}else{// `dirtyDatesArray` is non-iterable, return Invalid Date\nreturn new Date(NaN);}var result;datesArray.forEach(function(dirtyDate){var currentDate=toDate(dirtyDate);if(result===undefined||result>currentDate||isNaN(currentDate)){result=currentDate;}});return result||new Date(NaN);}/**\n * @name max\n * @category Common Helpers\n * @summary Return the latest of the given dates.\n *\n * @description\n * Return the latest of the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - `max` function now accepts an array of dates rather than spread arguments.\n *\n * ```javascript\n * // Before v2.0.0\n * var date1 = new Date(1989, 6, 10)\n * var date2 = new Date(1987, 1, 11)\n * var maxDate = max(date1, date2)\n *\n * // v2.0.0 onward:\n * var dates = [new Date(1989, 6, 10), new Date(1987, 1, 11)]\n * var maxDate = max(dates)\n * ```\n *\n * @param {Date[]|Number[]} datesArray - the dates to compare\n * @returns {Date} the latest of the dates\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which of these dates is the latest?\n * var result = max([\n * new Date(1989, 6, 10),\n * new Date(1987, 1, 11),\n * new Date(1995, 6, 2),\n * new Date(1990, 0, 1)\n * ])\n * //=> Sun Jul 02 1995 00:00:00\n */function max(dirtyDatesArray){requiredArgs(1,arguments);var datesArray;// `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method\nif(dirtyDatesArray&&typeof dirtyDatesArray.forEach==='function'){datesArray=dirtyDatesArray;// If `dirtyDatesArray` is Array-like Object, convert to Array.\n}else if(typeof dirtyDatesArray==='object'&&dirtyDatesArray!==null){datesArray=Array.prototype.slice.call(dirtyDatesArray);}else{// `dirtyDatesArray` is non-iterable, return Invalid Date\nreturn new Date(NaN);}var result;datesArray.forEach(function(dirtyDate){var currentDate=toDate(dirtyDate);if(result===undefined||result Tue Sep 02 2014 00:00:00\n */function startOfDay(dirtyDate){requiredArgs(1,arguments);var date=toDate(dirtyDate);date.setHours(0,0,0,0);return date;}var MILLISECONDS_IN_DAY$1=86400000;/**\n * @name differenceInCalendarDays\n * @category Day Helpers\n * @summary Get the number of calendar days between the given dates.\n *\n * @description\n * Get the number of calendar days between the given dates. This means that the times are removed\n * from the dates and then the difference in days is calculated.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar days\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * var result = differenceInCalendarDays(\n * new Date(2012, 6, 2, 0, 0),\n * new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 366\n * // How many calendar days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * var result = differenceInCalendarDays(\n * new Date(2011, 6, 3, 0, 1),\n * new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 1\n */function differenceInCalendarDays(dirtyDateLeft,dirtyDateRight){requiredArgs(2,arguments);var startOfDayLeft=startOfDay(dirtyDateLeft);var startOfDayRight=startOfDay(dirtyDateRight);var timestampLeft=startOfDayLeft.getTime()-getTimezoneOffsetInMilliseconds(startOfDayLeft);var timestampRight=startOfDayRight.getTime()-getTimezoneOffsetInMilliseconds(startOfDayRight);// Round the number of days to the nearest integer\n// because the number of milliseconds in a day is not constant\n// (e.g. it's different in the day of the daylight saving time clock shift)\nreturn Math.round((timestampLeft-timestampRight)/MILLISECONDS_IN_DAY$1);}/**\n * @name differenceInCalendarMonths\n * @category Month Helpers\n * @summary Get the number of calendar months between the given dates.\n *\n * @description\n * Get the number of calendar months between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar months\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar months are between 31 January 2014 and 1 September 2014?\n * var result = differenceInCalendarMonths(\n * new Date(2014, 8, 1),\n * new Date(2014, 0, 31)\n * )\n * //=> 8\n */function differenceInCalendarMonths(dirtyDateLeft,dirtyDateRight){requiredArgs(2,arguments);var dateLeft=toDate(dirtyDateLeft);var dateRight=toDate(dirtyDateRight);var yearDiff=dateLeft.getFullYear()-dateRight.getFullYear();var monthDiff=dateLeft.getMonth()-dateRight.getMonth();return yearDiff*12+monthDiff;}/**\n * @name differenceInCalendarYears\n * @category Year Helpers\n * @summary Get the number of calendar years between the given dates.\n *\n * @description\n * Get the number of calendar years between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar years\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar years are between 31 December 2013 and 11 February 2015?\n * var result = differenceInCalendarYears(\n * new Date(2015, 1, 11),\n * new Date(2013, 11, 31)\n * )\n * //=> 2\n */function differenceInCalendarYears(dirtyDateLeft,dirtyDateRight){requiredArgs(2,arguments);var dateLeft=toDate(dirtyDateLeft);var dateRight=toDate(dirtyDateRight);return dateLeft.getFullYear()-dateRight.getFullYear();}/**\n * @name startOfMonth\n * @category Month Helpers\n * @summary Return the start of a month for the given date.\n *\n * @description\n * Return the start of a month for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a month for 2 September 2014 11:55:00:\n * var result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */function startOfMonth(dirtyDate){requiredArgs(1,arguments);var date=toDate(dirtyDate);date.setDate(1);date.setHours(0,0,0,0);return date;}/**\n * @name startOfQuarter\n * @category Quarter Helpers\n * @summary Return the start of a year quarter for the given date.\n *\n * @description\n * Return the start of a year quarter for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a quarter\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a quarter for 2 September 2014 11:55:00:\n * var result = startOfQuarter(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Jul 01 2014 00:00:00\n */function startOfQuarter(dirtyDate){requiredArgs(1,arguments);var date=toDate(dirtyDate);var currentMonth=date.getMonth();var month=currentMonth-currentMonth%3;date.setMonth(month,1);date.setHours(0,0,0,0);return date;}/**\n * @name startOfYear\n * @category Year Helpers\n * @summary Return the start of a year for the given date.\n *\n * @description\n * Return the start of a year for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a year for 2 September 2014 11:55:00:\n * var result = startOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Jan 01 2014 00:00:00\n */function startOfYear(dirtyDate){requiredArgs(1,arguments);var cleanDate=toDate(dirtyDate);var date=new Date(0);date.setFullYear(cleanDate.getFullYear(),0,1);date.setHours(0,0,0,0);return date;}/**\n * @name endOfDay\n * @category Day Helpers\n * @summary Return the end of a day for the given date.\n *\n * @description\n * Return the end of a day for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a day\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a day for 2 September 2014 11:55:00:\n * var result = endOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 23:59:59.999\n */function endOfDay(dirtyDate){requiredArgs(1,arguments);var date=toDate(dirtyDate);date.setHours(23,59,59,999);return date;}/**\n * @name isEqual\n * @category Common Helpers\n * @summary Are the given dates equal?\n *\n * @description\n * Are the given dates equal?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to compare\n * @param {Date|Number} dateRight - the second date to compare\n * @returns {Boolean} the dates are equal\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 July 2014 06:30:45.000 and 2 July 2014 06:30:45.500 equal?\n * var result = isEqual(\n * new Date(2014, 6, 2, 6, 30, 45, 0),\n * new Date(2014, 6, 2, 6, 30, 45, 500)\n * )\n * //=> false\n */function isEqual(dirtyLeftDate,dirtyRightDate){requiredArgs(2,arguments);var dateLeft=toDate(dirtyLeftDate);var dateRight=toDate(dirtyRightDate);return dateLeft.getTime()===dateRight.getTime();}/**\n * @name isSameDay\n * @category Day Helpers\n * @summary Are the given dates in the same day?\n *\n * @description\n * Are the given dates in the same day?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same day\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 06:00:00 and 4 September 18:00:00 in the same day?\n * var result = isSameDay(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 18, 0))\n * //=> true\n */function isSameDay(dirtyDateLeft,dirtyDateRight){requiredArgs(2,arguments);var dateLeftStartOfDay=startOfDay(dirtyDateLeft);var dateRightStartOfDay=startOfDay(dirtyDateRight);return dateLeftStartOfDay.getTime()===dateRightStartOfDay.getTime();}/**\n * @name isSameMonth\n * @category Month Helpers\n * @summary Are the given dates in the same month?\n *\n * @description\n * Are the given dates in the same month?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same month\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same month?\n * var result = isSameMonth(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n */function isSameMonth(dirtyDateLeft,dirtyDateRight){requiredArgs(2,arguments);var dateLeft=toDate(dirtyDateLeft);var dateRight=toDate(dirtyDateRight);return dateLeft.getFullYear()===dateRight.getFullYear()&&dateLeft.getMonth()===dateRight.getMonth();}/**\n * @name isSameYear\n * @category Year Helpers\n * @summary Are the given dates in the same year?\n *\n * @description\n * Are the given dates in the same year?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same year\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same year?\n * var result = isSameYear(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n */function isSameYear(dirtyDateLeft,dirtyDateRight){requiredArgs(2,arguments);var dateLeft=toDate(dirtyDateLeft);var dateRight=toDate(dirtyDateRight);return dateLeft.getFullYear()===dateRight.getFullYear();}/**\n * @name isSameQuarter\n * @category Quarter Helpers\n * @summary Are the given dates in the same year quarter?\n *\n * @description\n * Are the given dates in the same year quarter?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same quarter\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 1 January 2014 and 8 March 2014 in the same quarter?\n * var result = isSameQuarter(new Date(2014, 0, 1), new Date(2014, 2, 8))\n * //=> true\n */function isSameQuarter(dirtyDateLeft,dirtyDateRight){requiredArgs(2,arguments);var dateLeftStartOfQuarter=startOfQuarter(dirtyDateLeft);var dateRightStartOfQuarter=startOfQuarter(dirtyDateRight);return dateLeftStartOfQuarter.getTime()===dateRightStartOfQuarter.getTime();}/**\n * @name isAfter\n * @category Common Helpers\n * @summary Is the first date after the second one?\n *\n * @description\n * Is the first date after the second one?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date that should be after the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is after the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 after 11 February 1987?\n * var result = isAfter(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> true\n */function isAfter(dirtyDate,dirtyDateToCompare){requiredArgs(2,arguments);var date=toDate(dirtyDate);var dateToCompare=toDate(dirtyDateToCompare);return date.getTime()>dateToCompare.getTime();}/**\n * @name isBefore\n * @category Common Helpers\n * @summary Is the first date before the second one?\n *\n * @description\n * Is the first date before the second one?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date that should be before the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is before the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 before 11 February 1987?\n * var result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> false\n */function isBefore(dirtyDate,dirtyDateToCompare){requiredArgs(2,arguments);var date=toDate(dirtyDate);var dateToCompare=toDate(dirtyDateToCompare);return date.getTime() true\n *\n * @example\n * // For the date outside of the interval:\n * isWithinInterval(new Date(2014, 0, 10), {\n * start: new Date(2014, 0, 1),\n * end: new Date(2014, 0, 7)\n * })\n * //=> false\n *\n * @example\n * // For date equal to interval start:\n * isWithinInterval(date, { start, end: date }) // => true\n *\n * @example\n * // For date equal to interval end:\n * isWithinInterval(date, { start: date, end }) // => true\n */function isWithinInterval(dirtyDate,dirtyInterval){requiredArgs(2,arguments);var interval=dirtyInterval||{};var time=toDate(dirtyDate).getTime();var startTime=toDate(interval.start).getTime();var endTime=toDate(interval.end).getTime();// Throw an exception if start date is after end date or if any date is `Invalid Date`\nif(!(startTime<=endTime)){throw new RangeError('Invalid interval');}return time>=startTime&&time<=endTime;}function assign(target,dirtyObject){if(target==null){throw new TypeError('assign requires that input parameter not be null or undefined');}dirtyObject=dirtyObject||{};for(var property in dirtyObject){if(dirtyObject.hasOwnProperty(property)){target[property]=dirtyObject[property];}}return target;}// See issue: https://github.com/date-fns/date-fns/issues/376\nfunction setUTCDay(dirtyDate,dirtyDay,dirtyOptions){requiredArgs(2,arguments);var options=dirtyOptions||{};var locale=options.locale;var localeWeekStartsOn=locale&&locale.options&&locale.options.weekStartsOn;var defaultWeekStartsOn=localeWeekStartsOn==null?0:toInteger(localeWeekStartsOn);var weekStartsOn=options.weekStartsOn==null?defaultWeekStartsOn:toInteger(options.weekStartsOn);// Test if weekStartsOn is between 0 and 6 _and_ is not NaN\nif(!(weekStartsOn>=0&&weekStartsOn<=6)){throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');}var date=toDate(dirtyDate);var day=toInteger(dirtyDay);var currentDay=date.getUTCDay();var remainder=day%7;var dayIndex=(remainder+7)%7;var diff=(dayIndex0;// Absolute number of the current year:\n// 1 -> 1 AC\n// 0 -> 1 BC\n// -1 -> 2 BC\nvar absCurrentYear=isCommonEra?currentYear:1-currentYear;var result;if(absCurrentYear<=50){result=twoDigitYear||100;}else{var rangeEnd=absCurrentYear+50;var rangeEndCentury=Math.floor(rangeEnd/100)*100;var isPreviousCentury=twoDigitYear>=rangeEnd%100;result=twoDigitYear+rangeEndCentury-(isPreviousCentury?100:0);}return isCommonEra?result:1-result;}var DAYS_IN_MONTH=[31,28,31,30,31,30,31,31,30,31,30,31];var DAYS_IN_MONTH_LEAP_YEAR=[31,29,31,30,31,30,31,31,30,31,30,31];// User for validation\nfunction isLeapYearIndex(year){return year%400===0||year%4===0&&year%100!==0;}/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O* | Timezone (GMT) |\n * | p | | P | |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z* | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `parse` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n */var parsers={// Era\nG:{priority:140,parse:function parse(string,token,match,_options){switch(token){// AD, BC\ncase'G':case'GG':case'GGG':return match.era(string,{width:'abbreviated'})||match.era(string,{width:'narrow'});// A, B\ncase'GGGGG':return match.era(string,{width:'narrow'});// Anno Domini, Before Christ\ncase'GGGG':default:return match.era(string,{width:'wide'})||match.era(string,{width:'abbreviated'})||match.era(string,{width:'narrow'});}},set:function set(date,flags,value,_options){flags.era=value;date.setUTCFullYear(value,0,1);date.setUTCHours(0,0,0,0);return date;},incompatibleTokens:['R','u','t','T']},// Year\ny:{// From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns\n// | Year | y | yy | yyy | yyyy | yyyyy |\n// |----------|-------|----|-------|-------|-------|\n// | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n// | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n// | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n// | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n// | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\npriority:130,parse:function parse(string,token,match,_options){var valueCallback=function valueCallback(year){return{year:year,isTwoDigitYear:token==='yy'};};switch(token){case'y':return parseNDigits(4,string,valueCallback);case'yo':return match.ordinalNumber(string,{unit:'year',valueCallback:valueCallback});default:return parseNDigits(token.length,string,valueCallback);}},validate:function validate(_date,value,_options){return value.isTwoDigitYear||value.year>0;},set:function set(date,flags,value,_options){var currentYear=date.getUTCFullYear();if(value.isTwoDigitYear){var normalizedTwoDigitYear=normalizeTwoDigitYear(value.year,currentYear);date.setUTCFullYear(normalizedTwoDigitYear,0,1);date.setUTCHours(0,0,0,0);return date;}var year=!('era'in flags)||flags.era===1?value.year:1-value.year;date.setUTCFullYear(year,0,1);date.setUTCHours(0,0,0,0);return date;},incompatibleTokens:['Y','R','u','w','I','i','e','c','t','T']},// Local week-numbering year\nY:{priority:130,parse:function parse(string,token,match,_options){var valueCallback=function valueCallback(year){return{year:year,isTwoDigitYear:token==='YY'};};switch(token){case'Y':return parseNDigits(4,string,valueCallback);case'Yo':return match.ordinalNumber(string,{unit:'year',valueCallback:valueCallback});default:return parseNDigits(token.length,string,valueCallback);}},validate:function validate(_date,value,_options){return value.isTwoDigitYear||value.year>0;},set:function set(date,flags,value,options){var currentYear=getUTCWeekYear(date,options);if(value.isTwoDigitYear){var normalizedTwoDigitYear=normalizeTwoDigitYear(value.year,currentYear);date.setUTCFullYear(normalizedTwoDigitYear,0,options.firstWeekContainsDate);date.setUTCHours(0,0,0,0);return startOfUTCWeek(date,options);}var year=!('era'in flags)||flags.era===1?value.year:1-value.year;date.setUTCFullYear(year,0,options.firstWeekContainsDate);date.setUTCHours(0,0,0,0);return startOfUTCWeek(date,options);},incompatibleTokens:['y','R','u','Q','q','M','L','I','d','D','i','t','T']},// ISO week-numbering year\nR:{priority:130,parse:function parse(string,token,_match,_options){if(token==='R'){return parseNDigitsSigned(4,string);}return parseNDigitsSigned(token.length,string);},set:function set(_date,_flags,value,_options){var firstWeekOfYear=new Date(0);firstWeekOfYear.setUTCFullYear(value,0,4);firstWeekOfYear.setUTCHours(0,0,0,0);return startOfUTCISOWeek(firstWeekOfYear);},incompatibleTokens:['G','y','Y','u','Q','q','M','L','w','d','D','e','c','t','T']},// Extended year\nu:{priority:130,parse:function parse(string,token,_match,_options){if(token==='u'){return parseNDigitsSigned(4,string);}return parseNDigitsSigned(token.length,string);},set:function set(date,_flags,value,_options){date.setUTCFullYear(value,0,1);date.setUTCHours(0,0,0,0);return date;},incompatibleTokens:['G','y','Y','R','w','I','i','e','c','t','T']},// Quarter\nQ:{priority:120,parse:function parse(string,token,match,_options){switch(token){// 1, 2, 3, 4\ncase'Q':case'QQ':// 01, 02, 03, 04\nreturn parseNDigits(token.length,string);// 1st, 2nd, 3rd, 4th\ncase'Qo':return match.ordinalNumber(string,{unit:'quarter'});// Q1, Q2, Q3, Q4\ncase'QQQ':return match.quarter(string,{width:'abbreviated',context:'formatting'})||match.quarter(string,{width:'narrow',context:'formatting'});// 1, 2, 3, 4 (narrow quarter; could be not numerical)\ncase'QQQQQ':return match.quarter(string,{width:'narrow',context:'formatting'});// 1st quarter, 2nd quarter, ...\ncase'QQQQ':default:return match.quarter(string,{width:'wide',context:'formatting'})||match.quarter(string,{width:'abbreviated',context:'formatting'})||match.quarter(string,{width:'narrow',context:'formatting'});}},validate:function validate(_date,value,_options){return value>=1&&value<=4;},set:function set(date,_flags,value,_options){date.setUTCMonth((value-1)*3,1);date.setUTCHours(0,0,0,0);return date;},incompatibleTokens:['Y','R','q','M','L','w','I','d','D','i','e','c','t','T']},// Stand-alone quarter\nq:{priority:120,parse:function parse(string,token,match,_options){switch(token){// 1, 2, 3, 4\ncase'q':case'qq':// 01, 02, 03, 04\nreturn parseNDigits(token.length,string);// 1st, 2nd, 3rd, 4th\ncase'qo':return match.ordinalNumber(string,{unit:'quarter'});// Q1, Q2, Q3, Q4\ncase'qqq':return match.quarter(string,{width:'abbreviated',context:'standalone'})||match.quarter(string,{width:'narrow',context:'standalone'});// 1, 2, 3, 4 (narrow quarter; could be not numerical)\ncase'qqqqq':return match.quarter(string,{width:'narrow',context:'standalone'});// 1st quarter, 2nd quarter, ...\ncase'qqqq':default:return match.quarter(string,{width:'wide',context:'standalone'})||match.quarter(string,{width:'abbreviated',context:'standalone'})||match.quarter(string,{width:'narrow',context:'standalone'});}},validate:function validate(_date,value,_options){return value>=1&&value<=4;},set:function set(date,_flags,value,_options){date.setUTCMonth((value-1)*3,1);date.setUTCHours(0,0,0,0);return date;},incompatibleTokens:['Y','R','Q','M','L','w','I','d','D','i','e','c','t','T']},// Month\nM:{priority:110,parse:function parse(string,token,match,_options){var valueCallback=function valueCallback(value){return value-1;};switch(token){// 1, 2, ..., 12\ncase'M':return parseNumericPattern(numericPatterns.month,string,valueCallback);// 01, 02, ..., 12\ncase'MM':return parseNDigits(2,string,valueCallback);// 1st, 2nd, ..., 12th\ncase'Mo':return match.ordinalNumber(string,{unit:'month',valueCallback:valueCallback});// Jan, Feb, ..., Dec\ncase'MMM':return match.month(string,{width:'abbreviated',context:'formatting'})||match.month(string,{width:'narrow',context:'formatting'});// J, F, ..., D\ncase'MMMMM':return match.month(string,{width:'narrow',context:'formatting'});// January, February, ..., December\ncase'MMMM':default:return match.month(string,{width:'wide',context:'formatting'})||match.month(string,{width:'abbreviated',context:'formatting'})||match.month(string,{width:'narrow',context:'formatting'});}},validate:function validate(_date,value,_options){return value>=0&&value<=11;},set:function set(date,_flags,value,_options){date.setUTCMonth(value,1);date.setUTCHours(0,0,0,0);return date;},incompatibleTokens:['Y','R','q','Q','L','w','I','D','i','e','c','t','T']},// Stand-alone month\nL:{priority:110,parse:function parse(string,token,match,_options){var valueCallback=function valueCallback(value){return value-1;};switch(token){// 1, 2, ..., 12\ncase'L':return parseNumericPattern(numericPatterns.month,string,valueCallback);// 01, 02, ..., 12\ncase'LL':return parseNDigits(2,string,valueCallback);// 1st, 2nd, ..., 12th\ncase'Lo':return match.ordinalNumber(string,{unit:'month',valueCallback:valueCallback});// Jan, Feb, ..., Dec\ncase'LLL':return match.month(string,{width:'abbreviated',context:'standalone'})||match.month(string,{width:'narrow',context:'standalone'});// J, F, ..., D\ncase'LLLLL':return match.month(string,{width:'narrow',context:'standalone'});// January, February, ..., December\ncase'LLLL':default:return match.month(string,{width:'wide',context:'standalone'})||match.month(string,{width:'abbreviated',context:'standalone'})||match.month(string,{width:'narrow',context:'standalone'});}},validate:function validate(_date,value,_options){return value>=0&&value<=11;},set:function set(date,_flags,value,_options){date.setUTCMonth(value,1);date.setUTCHours(0,0,0,0);return date;},incompatibleTokens:['Y','R','q','Q','M','w','I','D','i','e','c','t','T']},// Local week of year\nw:{priority:100,parse:function parse(string,token,match,_options){switch(token){case'w':return parseNumericPattern(numericPatterns.week,string);case'wo':return match.ordinalNumber(string,{unit:'week'});default:return parseNDigits(token.length,string);}},validate:function validate(_date,value,_options){return value>=1&&value<=53;},set:function set(date,_flags,value,options){return startOfUTCWeek(setUTCWeek(date,value,options),options);},incompatibleTokens:['y','R','u','q','Q','M','L','I','d','D','i','t','T']},// ISO week of year\nI:{priority:100,parse:function parse(string,token,match,_options){switch(token){case'I':return parseNumericPattern(numericPatterns.week,string);case'Io':return match.ordinalNumber(string,{unit:'week'});default:return parseNDigits(token.length,string);}},validate:function validate(_date,value,_options){return value>=1&&value<=53;},set:function set(date,_flags,value,options){return startOfUTCISOWeek(setUTCISOWeek(date,value,options),options);},incompatibleTokens:['y','Y','u','q','Q','M','L','w','d','D','e','c','t','T']},// Day of the month\nd:{priority:90,subPriority:1,parse:function parse(string,token,match,_options){switch(token){case'd':return parseNumericPattern(numericPatterns.date,string);case'do':return match.ordinalNumber(string,{unit:'date'});default:return parseNDigits(token.length,string);}},validate:function validate(date,value,_options){var year=date.getUTCFullYear();var isLeapYear=isLeapYearIndex(year);var month=date.getUTCMonth();if(isLeapYear){return value>=1&&value<=DAYS_IN_MONTH_LEAP_YEAR[month];}else{return value>=1&&value<=DAYS_IN_MONTH[month];}},set:function set(date,_flags,value,_options){date.setUTCDate(value);date.setUTCHours(0,0,0,0);return date;},incompatibleTokens:['Y','R','q','Q','w','I','D','i','e','c','t','T']},// Day of year\nD:{priority:90,subPriority:1,parse:function parse(string,token,match,_options){switch(token){case'D':case'DD':return parseNumericPattern(numericPatterns.dayOfYear,string);case'Do':return match.ordinalNumber(string,{unit:'date'});default:return parseNDigits(token.length,string);}},validate:function validate(date,value,_options){var year=date.getUTCFullYear();var isLeapYear=isLeapYearIndex(year);if(isLeapYear){return value>=1&&value<=366;}else{return value>=1&&value<=365;}},set:function set(date,_flags,value,_options){date.setUTCMonth(0,value);date.setUTCHours(0,0,0,0);return date;},incompatibleTokens:['Y','R','q','Q','M','L','w','I','d','E','i','e','c','t','T']},// Day of week\nE:{priority:90,parse:function parse(string,token,match,_options){switch(token){// Tue\ncase'E':case'EE':case'EEE':return match.day(string,{width:'abbreviated',context:'formatting'})||match.day(string,{width:'short',context:'formatting'})||match.day(string,{width:'narrow',context:'formatting'});// T\ncase'EEEEE':return match.day(string,{width:'narrow',context:'formatting'});// Tu\ncase'EEEEEE':return match.day(string,{width:'short',context:'formatting'})||match.day(string,{width:'narrow',context:'formatting'});// Tuesday\ncase'EEEE':default:return match.day(string,{width:'wide',context:'formatting'})||match.day(string,{width:'abbreviated',context:'formatting'})||match.day(string,{width:'short',context:'formatting'})||match.day(string,{width:'narrow',context:'formatting'});}},validate:function validate(_date,value,_options){return value>=0&&value<=6;},set:function set(date,_flags,value,options){date=setUTCDay(date,value,options);date.setUTCHours(0,0,0,0);return date;},incompatibleTokens:['D','i','e','c','t','T']},// Local day of week\ne:{priority:90,parse:function parse(string,token,match,options){var valueCallback=function valueCallback(value){var wholeWeekDays=Math.floor((value-1)/7)*7;return(value+options.weekStartsOn+6)%7+wholeWeekDays;};switch(token){// 3\ncase'e':case'ee':// 03\nreturn parseNDigits(token.length,string,valueCallback);// 3rd\ncase'eo':return match.ordinalNumber(string,{unit:'day',valueCallback:valueCallback});// Tue\ncase'eee':return match.day(string,{width:'abbreviated',context:'formatting'})||match.day(string,{width:'short',context:'formatting'})||match.day(string,{width:'narrow',context:'formatting'});// T\ncase'eeeee':return match.day(string,{width:'narrow',context:'formatting'});// Tu\ncase'eeeeee':return match.day(string,{width:'short',context:'formatting'})||match.day(string,{width:'narrow',context:'formatting'});// Tuesday\ncase'eeee':default:return match.day(string,{width:'wide',context:'formatting'})||match.day(string,{width:'abbreviated',context:'formatting'})||match.day(string,{width:'short',context:'formatting'})||match.day(string,{width:'narrow',context:'formatting'});}},validate:function validate(_date,value,_options){return value>=0&&value<=6;},set:function set(date,_flags,value,options){date=setUTCDay(date,value,options);date.setUTCHours(0,0,0,0);return date;},incompatibleTokens:['y','R','u','q','Q','M','L','I','d','D','E','i','c','t','T']},// Stand-alone local day of week\nc:{priority:90,parse:function parse(string,token,match,options){var valueCallback=function valueCallback(value){var wholeWeekDays=Math.floor((value-1)/7)*7;return(value+options.weekStartsOn+6)%7+wholeWeekDays;};switch(token){// 3\ncase'c':case'cc':// 03\nreturn parseNDigits(token.length,string,valueCallback);// 3rd\ncase'co':return match.ordinalNumber(string,{unit:'day',valueCallback:valueCallback});// Tue\ncase'ccc':return match.day(string,{width:'abbreviated',context:'standalone'})||match.day(string,{width:'short',context:'standalone'})||match.day(string,{width:'narrow',context:'standalone'});// T\ncase'ccccc':return match.day(string,{width:'narrow',context:'standalone'});// Tu\ncase'cccccc':return match.day(string,{width:'short',context:'standalone'})||match.day(string,{width:'narrow',context:'standalone'});// Tuesday\ncase'cccc':default:return match.day(string,{width:'wide',context:'standalone'})||match.day(string,{width:'abbreviated',context:'standalone'})||match.day(string,{width:'short',context:'standalone'})||match.day(string,{width:'narrow',context:'standalone'});}},validate:function validate(_date,value,_options){return value>=0&&value<=6;},set:function set(date,_flags,value,options){date=setUTCDay(date,value,options);date.setUTCHours(0,0,0,0);return date;},incompatibleTokens:['y','R','u','q','Q','M','L','I','d','D','E','i','e','t','T']},// ISO day of week\ni:{priority:90,parse:function parse(string,token,match,_options){var valueCallback=function valueCallback(value){if(value===0){return 7;}return value;};switch(token){// 2\ncase'i':case'ii':// 02\nreturn parseNDigits(token.length,string);// 2nd\ncase'io':return match.ordinalNumber(string,{unit:'day'});// Tue\ncase'iii':return match.day(string,{width:'abbreviated',context:'formatting',valueCallback:valueCallback})||match.day(string,{width:'short',context:'formatting',valueCallback:valueCallback})||match.day(string,{width:'narrow',context:'formatting',valueCallback:valueCallback});// T\ncase'iiiii':return match.day(string,{width:'narrow',context:'formatting',valueCallback:valueCallback});// Tu\ncase'iiiiii':return match.day(string,{width:'short',context:'formatting',valueCallback:valueCallback})||match.day(string,{width:'narrow',context:'formatting',valueCallback:valueCallback});// Tuesday\ncase'iiii':default:return match.day(string,{width:'wide',context:'formatting',valueCallback:valueCallback})||match.day(string,{width:'abbreviated',context:'formatting',valueCallback:valueCallback})||match.day(string,{width:'short',context:'formatting',valueCallback:valueCallback})||match.day(string,{width:'narrow',context:'formatting',valueCallback:valueCallback});}},validate:function validate(_date,value,_options){return value>=1&&value<=7;},set:function set(date,_flags,value,options){date=setUTCISODay(date,value,options);date.setUTCHours(0,0,0,0);return date;},incompatibleTokens:['y','Y','u','q','Q','M','L','w','d','D','E','e','c','t','T']},// AM or PM\na:{priority:80,parse:function parse(string,token,match,_options){switch(token){case'a':case'aa':case'aaa':return match.dayPeriod(string,{width:'abbreviated',context:'formatting'})||match.dayPeriod(string,{width:'narrow',context:'formatting'});case'aaaaa':return match.dayPeriod(string,{width:'narrow',context:'formatting'});case'aaaa':default:return match.dayPeriod(string,{width:'wide',context:'formatting'})||match.dayPeriod(string,{width:'abbreviated',context:'formatting'})||match.dayPeriod(string,{width:'narrow',context:'formatting'});}},set:function set(date,_flags,value,_options){date.setUTCHours(dayPeriodEnumToHours(value),0,0,0);return date;},incompatibleTokens:['b','B','H','K','k','t','T']},// AM, PM, midnight\nb:{priority:80,parse:function parse(string,token,match,_options){switch(token){case'b':case'bb':case'bbb':return match.dayPeriod(string,{width:'abbreviated',context:'formatting'})||match.dayPeriod(string,{width:'narrow',context:'formatting'});case'bbbbb':return match.dayPeriod(string,{width:'narrow',context:'formatting'});case'bbbb':default:return match.dayPeriod(string,{width:'wide',context:'formatting'})||match.dayPeriod(string,{width:'abbreviated',context:'formatting'})||match.dayPeriod(string,{width:'narrow',context:'formatting'});}},set:function set(date,_flags,value,_options){date.setUTCHours(dayPeriodEnumToHours(value),0,0,0);return date;},incompatibleTokens:['a','B','H','K','k','t','T']},// in the morning, in the afternoon, in the evening, at night\nB:{priority:80,parse:function parse(string,token,match,_options){switch(token){case'B':case'BB':case'BBB':return match.dayPeriod(string,{width:'abbreviated',context:'formatting'})||match.dayPeriod(string,{width:'narrow',context:'formatting'});case'BBBBB':return match.dayPeriod(string,{width:'narrow',context:'formatting'});case'BBBB':default:return match.dayPeriod(string,{width:'wide',context:'formatting'})||match.dayPeriod(string,{width:'abbreviated',context:'formatting'})||match.dayPeriod(string,{width:'narrow',context:'formatting'});}},set:function set(date,_flags,value,_options){date.setUTCHours(dayPeriodEnumToHours(value),0,0,0);return date;},incompatibleTokens:['a','b','t','T']},// Hour [1-12]\nh:{priority:70,parse:function parse(string,token,match,_options){switch(token){case'h':return parseNumericPattern(numericPatterns.hour12h,string);case'ho':return match.ordinalNumber(string,{unit:'hour'});default:return parseNDigits(token.length,string);}},validate:function validate(_date,value,_options){return value>=1&&value<=12;},set:function set(date,_flags,value,_options){var isPM=date.getUTCHours()>=12;if(isPM&&value<12){date.setUTCHours(value+12,0,0,0);}else if(!isPM&&value===12){date.setUTCHours(0,0,0,0);}else{date.setUTCHours(value,0,0,0);}return date;},incompatibleTokens:['H','K','k','t','T']},// Hour [0-23]\nH:{priority:70,parse:function parse(string,token,match,_options){switch(token){case'H':return parseNumericPattern(numericPatterns.hour23h,string);case'Ho':return match.ordinalNumber(string,{unit:'hour'});default:return parseNDigits(token.length,string);}},validate:function validate(_date,value,_options){return value>=0&&value<=23;},set:function set(date,_flags,value,_options){date.setUTCHours(value,0,0,0);return date;},incompatibleTokens:['a','b','h','K','k','t','T']},// Hour [0-11]\nK:{priority:70,parse:function parse(string,token,match,_options){switch(token){case'K':return parseNumericPattern(numericPatterns.hour11h,string);case'Ko':return match.ordinalNumber(string,{unit:'hour'});default:return parseNDigits(token.length,string);}},validate:function validate(_date,value,_options){return value>=0&&value<=11;},set:function set(date,_flags,value,_options){var isPM=date.getUTCHours()>=12;if(isPM&&value<12){date.setUTCHours(value+12,0,0,0);}else{date.setUTCHours(value,0,0,0);}return date;},incompatibleTokens:['a','b','h','H','k','t','T']},// Hour [1-24]\nk:{priority:70,parse:function parse(string,token,match,_options){switch(token){case'k':return parseNumericPattern(numericPatterns.hour24h,string);case'ko':return match.ordinalNumber(string,{unit:'hour'});default:return parseNDigits(token.length,string);}},validate:function validate(_date,value,_options){return value>=1&&value<=24;},set:function set(date,_flags,value,_options){var hours=value<=24?value%24:value;date.setUTCHours(hours,0,0,0);return date;},incompatibleTokens:['a','b','h','H','K','t','T']},// Minute\nm:{priority:60,parse:function parse(string,token,match,_options){switch(token){case'm':return parseNumericPattern(numericPatterns.minute,string);case'mo':return match.ordinalNumber(string,{unit:'minute'});default:return parseNDigits(token.length,string);}},validate:function validate(_date,value,_options){return value>=0&&value<=59;},set:function set(date,_flags,value,_options){date.setUTCMinutes(value,0,0);return date;},incompatibleTokens:['t','T']},// Second\ns:{priority:50,parse:function parse(string,token,match,_options){switch(token){case's':return parseNumericPattern(numericPatterns.second,string);case'so':return match.ordinalNumber(string,{unit:'second'});default:return parseNDigits(token.length,string);}},validate:function validate(_date,value,_options){return value>=0&&value<=59;},set:function set(date,_flags,value,_options){date.setUTCSeconds(value,0);return date;},incompatibleTokens:['t','T']},// Fraction of second\nS:{priority:30,parse:function parse(string,token,_match,_options){var valueCallback=function valueCallback(value){return Math.floor(value*Math.pow(10,-token.length+3));};return parseNDigits(token.length,string,valueCallback);},set:function set(date,_flags,value,_options){date.setUTCMilliseconds(value);return date;},incompatibleTokens:['t','T']},// Timezone (ISO-8601. +00:00 is `'Z'`)\nX:{priority:10,parse:function parse(string,token,_match,_options){switch(token){case'X':return parseTimezonePattern(timezonePatterns.basicOptionalMinutes,string);case'XX':return parseTimezonePattern(timezonePatterns.basic,string);case'XXXX':return parseTimezonePattern(timezonePatterns.basicOptionalSeconds,string);case'XXXXX':return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds,string);case'XXX':default:return parseTimezonePattern(timezonePatterns.extended,string);}},set:function set(date,flags,value,_options){if(flags.timestampIsSet){return date;}return new Date(date.getTime()-value);},incompatibleTokens:['t','T','x']},// Timezone (ISO-8601)\nx:{priority:10,parse:function parse(string,token,_match,_options){switch(token){case'x':return parseTimezonePattern(timezonePatterns.basicOptionalMinutes,string);case'xx':return parseTimezonePattern(timezonePatterns.basic,string);case'xxxx':return parseTimezonePattern(timezonePatterns.basicOptionalSeconds,string);case'xxxxx':return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds,string);case'xxx':default:return parseTimezonePattern(timezonePatterns.extended,string);}},set:function set(date,flags,value,_options){if(flags.timestampIsSet){return date;}return new Date(date.getTime()-value);},incompatibleTokens:['t','T','X']},// Seconds timestamp\nt:{priority:40,parse:function parse(string,_token,_match,_options){return parseAnyDigitsSigned(string);},set:function set(_date,_flags,value,_options){return[new Date(value*1000),{timestampIsSet:true}];},incompatibleTokens:'*'},// Milliseconds timestamp\nT:{priority:20,parse:function parse(string,_token,_match,_options){return parseAnyDigitsSigned(string);},set:function set(_date,_flags,value,_options){return[new Date(value),{timestampIsSet:true}];},incompatibleTokens:'*'}};var TIMEZONE_UNIT_PRIORITY=10;// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nvar formattingTokensRegExp$1=/[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nvar longFormattingTokensRegExp$1=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;var escapedStringRegExp$1=/^'([^]*?)'?$/;var doubleQuoteRegExp$1=/''/g;var notWhitespaceRegExp=/\\S/;var unescapedLatinCharacterRegExp$1=/[a-zA-Z]/;/**\n * @name parse\n * @category Common Helpers\n * @summary Parse the date.\n *\n * @description\n * Return the date parsed from string using the given format string.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://git.io/fxCyr\n *\n * The characters in the format string wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n *\n * Format of the format string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 5 below the table).\n *\n * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited\n * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception:\n *\n * ```javascript\n * parse('23 AM', 'HH a', new Date())\n * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time\n * ```\n *\n * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true\n *\n * Accepted format string patterns:\n * | Unit |Prior| Pattern | Result examples | Notes |\n * |---------------------------------|-----|---------|-----------------------------------|-------|\n * | Era | 140 | G..GGG | AD, BC | |\n * | | | GGGG | Anno Domini, Before Christ | 2 |\n * | | | GGGGG | A, B | |\n * | Calendar year | 130 | y | 44, 1, 1900, 2017, 9999 | 4 |\n * | | | yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | yy | 44, 01, 00, 17 | 4 |\n * | | | yyy | 044, 001, 123, 999 | 4 |\n * | | | yyyy | 0044, 0001, 1900, 2017 | 4 |\n * | | | yyyyy | ... | 2,4 |\n * | Local week-numbering year | 130 | Y | 44, 1, 1900, 2017, 9000 | 4 |\n * | | | Yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | YY | 44, 01, 00, 17 | 4,6 |\n * | | | YYY | 044, 001, 123, 999 | 4 |\n * | | | YYYY | 0044, 0001, 1900, 2017 | 4,6 |\n * | | | YYYYY | ... | 2,4 |\n * | ISO week-numbering year | 130 | R | -43, 1, 1900, 2017, 9999, -9999 | 4,5 |\n * | | | RR | -43, 01, 00, 17 | 4,5 |\n * | | | RRR | -043, 001, 123, 999, -999 | 4,5 |\n * | | | RRRR | -0043, 0001, 2017, 9999, -9999 | 4,5 |\n * | | | RRRRR | ... | 2,4,5 |\n * | Extended year | 130 | u | -43, 1, 1900, 2017, 9999, -999 | 4 |\n * | | | uu | -43, 01, 99, -99 | 4 |\n * | | | uuu | -043, 001, 123, 999, -999 | 4 |\n * | | | uuuu | -0043, 0001, 2017, 9999, -9999 | 4 |\n * | | | uuuuu | ... | 2,4 |\n * | Quarter (formatting) | 120 | Q | 1, 2, 3, 4 | |\n * | | | Qo | 1st, 2nd, 3rd, 4th | 5 |\n * | | | QQ | 01, 02, 03, 04 | |\n * | | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | 120 | q | 1, 2, 3, 4 | |\n * | | | qo | 1st, 2nd, 3rd, 4th | 5 |\n * | | | qq | 01, 02, 03, 04 | |\n * | | | qqq | Q1, Q2, Q3, Q4 | |\n * | | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | | qqqqq | 1, 2, 3, 4 | 3 |\n * | Month (formatting) | 110 | M | 1, 2, ..., 12 | |\n * | | | Mo | 1st, 2nd, ..., 12th | 5 |\n * | | | MM | 01, 02, ..., 12 | |\n * | | | MMM | Jan, Feb, ..., Dec | |\n * | | | MMMM | January, February, ..., December | 2 |\n * | | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | 110 | L | 1, 2, ..., 12 | |\n * | | | Lo | 1st, 2nd, ..., 12th | 5 |\n * | | | LL | 01, 02, ..., 12 | |\n * | | | LLL | Jan, Feb, ..., Dec | |\n * | | | LLLL | January, February, ..., December | 2 |\n * | | | LLLLL | J, F, ..., D | |\n * | Local week of year | 100 | w | 1, 2, ..., 53 | |\n * | | | wo | 1st, 2nd, ..., 53th | 5 |\n * | | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | 100 | I | 1, 2, ..., 53 | 5 |\n * | | | Io | 1st, 2nd, ..., 53th | 5 |\n * | | | II | 01, 02, ..., 53 | 5 |\n * | Day of month | 90 | d | 1, 2, ..., 31 | |\n * | | | do | 1st, 2nd, ..., 31st | 5 |\n * | | | dd | 01, 02, ..., 31 | |\n * | Day of year | 90 | D | 1, 2, ..., 365, 366 | 7 |\n * | | | Do | 1st, 2nd, ..., 365th, 366th | 5 |\n * | | | DD | 01, 02, ..., 365, 366 | 7 |\n * | | | DDD | 001, 002, ..., 365, 366 | |\n * | | | DDDD | ... | 2 |\n * | Day of week (formatting) | 90 | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | | EEEEE | M, T, W, T, F, S, S | |\n * | | | EEEEEE | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | ISO day of week (formatting) | 90 | i | 1, 2, 3, ..., 7 | 5 |\n * | | | io | 1st, 2nd, ..., 7th | 5 |\n * | | | ii | 01, 02, ..., 07 | 5 |\n * | | | iii | Mon, Tue, Wed, ..., Sun | 5 |\n * | | | iiii | Monday, Tuesday, ..., Sunday | 2,5 |\n * | | | iiiii | M, T, W, T, F, S, S | 5 |\n * | | | iiiiii | Mo, Tu, We, Th, Fr, Su, Sa | 5 |\n * | Local day of week (formatting) | 90 | e | 2, 3, 4, ..., 1 | |\n * | | | eo | 2nd, 3rd, ..., 1st | 5 |\n * | | | ee | 02, 03, ..., 01 | |\n * | | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | | eeeee | M, T, W, T, F, S, S | |\n * | | | eeeeee | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | Local day of week (stand-alone) | 90 | c | 2, 3, 4, ..., 1 | |\n * | | | co | 2nd, 3rd, ..., 1st | 5 |\n * | | | cc | 02, 03, ..., 01 | |\n * | | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | | ccccc | M, T, W, T, F, S, S | |\n * | | | cccccc | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | AM, PM | 80 | a..aaa | AM, PM | |\n * | | | aaaa | a.m., p.m. | 2 |\n * | | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | 80 | b..bbb | AM, PM, noon, midnight | |\n * | | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | | bbbbb | a, p, n, mi | |\n * | Flexible day period | 80 | B..BBB | at night, in the morning, ... | |\n * | | | BBBB | at night, in the morning, ... | 2 |\n * | | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | 70 | h | 1, 2, ..., 11, 12 | |\n * | | | ho | 1st, 2nd, ..., 11th, 12th | 5 |\n * | | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | 70 | H | 0, 1, 2, ..., 23 | |\n * | | | Ho | 0th, 1st, 2nd, ..., 23rd | 5 |\n * | | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | 70 | K | 1, 2, ..., 11, 0 | |\n * | | | Ko | 1st, 2nd, ..., 11th, 0th | 5 |\n * | | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | 70 | k | 24, 1, 2, ..., 23 | |\n * | | | ko | 24th, 1st, 2nd, ..., 23rd | 5 |\n * | | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | 60 | m | 0, 1, ..., 59 | |\n * | | | mo | 0th, 1st, ..., 59th | 5 |\n * | | | mm | 00, 01, ..., 59 | |\n * | Second | 50 | s | 0, 1, ..., 59 | |\n * | | | so | 0th, 1st, ..., 59th | 5 |\n * | | | ss | 00, 01, ..., 59 | |\n * | Seconds timestamp | 40 | t | 512969520 | |\n * | | | tt | ... | 2 |\n * | Fraction of second | 30 | S | 0, 1, ..., 9 | |\n * | | | SS | 00, 01, ..., 99 | |\n * | | | SSS | 000, 0001, ..., 999 | |\n * | | | SSSS | ... | 2 |\n * | Milliseconds timestamp | 20 | T | 512969520900 | |\n * | | | TT | ... | 2 |\n * | Timezone (ISO-8601 w/ Z) | 10 | X | -08, +0530, Z | |\n * | | | XX | -0800, +0530, Z | |\n * | | | XXX | -08:00, +05:30, Z | |\n * | | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | 10 | x | -08, +0530, +00 | |\n * | | | xx | -0800, +0530, +0000 | |\n * | | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Long localized date | NA | P | 05/29/1453 | 5,8 |\n * | | | PP | May 29, 1453 | |\n * | | | PPP | May 29th, 1453 | |\n * | | | PPPP | Sunday, May 29th, 1453 | 2,5,8 |\n * | Long localized time | NA | p | 12:00 AM | 5,8 |\n * | | | pp | 12:00:00 AM | |\n * | Combination of date and time | NA | Pp | 05/29/1453, 12:00 AM | |\n * | | | PPpp | May 29, 1453, 12:00:00 AM | |\n * | | | PPPpp | May 29th, 1453 at ... | |\n * | | | PPPPpp | Sunday, May 29th, 1453 at ... | 2,5,8 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular.\n * In `format` function, they will produce different result:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * `parse` will try to match both formatting and stand-alone units interchangably.\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table:\n * - for numerical units (`yyyyyyyy`) `parse` will try to match a number\n * as wide as the sequence\n * - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit.\n * These variations are marked with \"2\" in the last column of the table.\n *\n * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 4. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` will try to guess the century of two digit year by proximity with `referenceDate`:\n *\n * `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00`\n *\n * `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00`\n *\n * while `uu` will just assign the year as is:\n *\n * `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00`\n *\n * `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00`\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [setISOWeekYear]{@link https://date-fns.org/docs/setISOWeekYear}\n * and [setWeekYear]{@link https://date-fns.org/docs/setWeekYear}).\n *\n * 5. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 6. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://git.io/fxCyr\n *\n * 7. `D` and `DD` tokens represent days of the year but they are ofthen confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://git.io/fxCyr\n *\n * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based\n * on the given locale.\n *\n * using `en-US` locale: `P` => `MM/dd/yyyy`\n * using `en-US` locale: `p` => `hh:mm a`\n * using `pt-BR` locale: `P` => `dd/MM/yyyy`\n * using `pt-BR` locale: `p` => `HH:mm`\n *\n * Values will be assigned to the date in the descending order of its unit's priority.\n * Units of an equal priority overwrite each other in the order of appearance.\n *\n * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year),\n * the values will be taken from 3rd argument `referenceDate` which works as a context of parsing.\n *\n * `referenceDate` must be passed for correct work of the function.\n * If you're not sure which `referenceDate` to supply, create a new instance of Date:\n * `parse('02/11/2014', 'MM/dd/yyyy', new Date())`\n * In this case parsing will be done in the context of the current date.\n * If `referenceDate` is `Invalid Date` or a value not convertible to valid `Date`,\n * then `Invalid Date` will be returned.\n *\n * The result may vary by locale.\n *\n * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned.\n *\n * If parsing failed, `Invalid Date` will be returned.\n * Invalid Date is a Date, whose time value is NaN.\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - Old `parse` was renamed to `toDate`.\n * Now `parse` is a new function which parses a string using a provided format.\n *\n * ```javascript\n * // Before v2.0.0\n * parse('2016-01-01')\n *\n * // v2.0.0 onward\n * toDate('2016-01-01')\n * parse('2016-01-01', 'yyyy-MM-dd', new Date())\n * ```\n *\n * @param {String} dateString - the string to parse\n * @param {String} formatString - the string of tokens\n * @param {Date|Number} referenceDate - defines values missing from the parsed dateString\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`;\n * see: https://git.io/fxCyr\n * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`;\n * see: https://git.io/fxCyr\n * @returns {Date} the parsed date\n * @throws {TypeError} 3 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} `options.locale` must contain `match` property\n * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} format string contains an unescaped latin alphabet character\n *\n * @example\n * // Parse 11 February 2014 from middle-endian format:\n * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date())\n * //=> Tue Feb 11 2014 00:00:00\n *\n * @example\n * // Parse 28th of February in Esperanto locale in the context of 2010 year:\n * import eo from 'date-fns/locale/eo'\n * var result = parse('28-a de februaro', \"do 'de' MMMM\", new Date(2010, 0, 1), {\n * locale: eo\n * })\n * //=> Sun Feb 28 2010 00:00:00\n */function parse(dirtyDateString,dirtyFormatString,dirtyReferenceDate,dirtyOptions){requiredArgs(3,arguments);var dateString=String(dirtyDateString);var formatString=String(dirtyFormatString);var options=dirtyOptions||{};var locale$1=options.locale||locale;if(!locale$1.match){throw new RangeError('locale must contain match property');}var localeFirstWeekContainsDate=locale$1.options&&locale$1.options.firstWeekContainsDate;var defaultFirstWeekContainsDate=localeFirstWeekContainsDate==null?1:toInteger(localeFirstWeekContainsDate);var firstWeekContainsDate=options.firstWeekContainsDate==null?defaultFirstWeekContainsDate:toInteger(options.firstWeekContainsDate);// Test if weekStartsOn is between 1 and 7 _and_ is not NaN\nif(!(firstWeekContainsDate>=1&&firstWeekContainsDate<=7)){throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');}var localeWeekStartsOn=locale$1.options&&locale$1.options.weekStartsOn;var defaultWeekStartsOn=localeWeekStartsOn==null?0:toInteger(localeWeekStartsOn);var weekStartsOn=options.weekStartsOn==null?defaultWeekStartsOn:toInteger(options.weekStartsOn);// Test if weekStartsOn is between 0 and 6 _and_ is not NaN\nif(!(weekStartsOn>=0&&weekStartsOn<=6)){throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');}if(formatString===''){if(dateString===''){return toDate(dirtyReferenceDate);}else{return new Date(NaN);}}var subFnOptions={firstWeekContainsDate:firstWeekContainsDate,weekStartsOn:weekStartsOn,locale:locale$1// If timezone isn't specified, it will be set to the system timezone\n};var setters=[{priority:TIMEZONE_UNIT_PRIORITY,subPriority:-1,set:dateToSystemTimezone,index:0}];var i;var tokens=formatString.match(longFormattingTokensRegExp$1).map(function(substring){var firstCharacter=substring[0];if(firstCharacter==='p'||firstCharacter==='P'){var longFormatter=longFormatters[firstCharacter];return longFormatter(substring,locale$1.formatLong,subFnOptions);}return substring;}).join('').match(formattingTokensRegExp$1);var usedTokens=[];for(i=0;i0&¬WhitespaceRegExp.test(dateString)){return new Date(NaN);}var uniquePrioritySetters=setters.map(function(setter){return setter.priority;}).sort(function(a,b){return b-a;}).filter(function(priority,index,array){return array.indexOf(priority)===index;}).map(function(priority){return setters.filter(function(setter){return setter.priority===priority;}).sort(function(a,b){return b.subPriority-a.subPriority;});}).map(function(setterArray){return setterArray[0];});var date=toDate(dirtyReferenceDate);if(isNaN(date)){return new Date(NaN);}// Convert the date in system timezone to the same date in UTC+00:00 timezone.\n// This ensures that when UTC functions will be implemented, locales will be compatible with them.\n// See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/37\nvar utcDate=subMilliseconds(date,getTimezoneOffsetInMilliseconds(date));var flags={};for(i=0;i Invalid Date\n * ```\n *\n * - `parseISO` now doesn't fall back to `new Date` constructor\n * if it fails to parse a string argument. Instead, it returns `Invalid Date`.\n *\n * @param {String} argument - the value to convert\n * @param {Object} [options] - an object with options.\n * @param {0|1|2} [options.additionalDigits=2] - the additional number of digits in the extended year format\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * var result = parseISO('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * var result = parseISO('+02014101', { additionalDigits: 1 })\n * //=> Fri Apr 11 2014 00:00:00\n */function parseISO(argument,dirtyOptions){requiredArgs(1,arguments);var options=dirtyOptions||{};var additionalDigits=options.additionalDigits==null?DEFAULT_ADDITIONAL_DIGITS:toInteger(options.additionalDigits);if(additionalDigits!==2&&additionalDigits!==1&&additionalDigits!==0){throw new RangeError('additionalDigits must be 0, 1 or 2');}if(!(typeof argument==='string'||Object.prototype.toString.call(argument)==='[object String]')){return new Date(NaN);}var dateStrings=splitDateString(argument);var date;if(dateStrings.date){var parseYearResult=parseYear(dateStrings.date,additionalDigits);date=parseDate(parseYearResult.restDateString,parseYearResult.year);}if(isNaN(date)||!date){return new Date(NaN);}var timestamp=date.getTime();var time=0;var offset;if(dateStrings.time){time=parseTime(dateStrings.time);if(isNaN(time)||time===null){return new Date(NaN);}}if(dateStrings.timezone){offset=parseTimezone(dateStrings.timezone);if(isNaN(offset)){return new Date(NaN);}}else{var dirtyDate=new Date(timestamp+time);// js parsed string assuming it's in UTC timezone\n// but we need it to be parsed in our timezone\n// so we use utc values to build date in our timezone.\n// Year values from 0 to 99 map to the years 1900 to 1999\n// so set year explicitly with setFullYear.\nvar result=new Date(dirtyDate.getUTCFullYear(),dirtyDate.getUTCMonth(),dirtyDate.getUTCDate(),dirtyDate.getUTCHours(),dirtyDate.getUTCMinutes(),dirtyDate.getUTCSeconds(),dirtyDate.getUTCMilliseconds());result.setFullYear(dirtyDate.getUTCFullYear());return result;}return new Date(timestamp+time+offset);}function splitDateString(dateString){var dateStrings={};var array=dateString.split(patterns.dateTimeDelimiter);var timeString;// The regex match should only return at maximum two array elements.\n// [date], [time], or [date, time].\nif(array.length>2){return dateStrings;}if(/:/.test(array[0])){dateStrings.date=null;timeString=array[0];}else{dateStrings.date=array[0];timeString=array[1];if(patterns.timeZoneDelimiter.test(dateStrings.date)){dateStrings.date=dateString.split(patterns.timeZoneDelimiter)[0];timeString=dateString.substr(dateStrings.date.length,dateString.length);}}if(timeString){var token=patterns.timezone.exec(timeString);if(token){dateStrings.time=timeString.replace(token[1],'');dateStrings.timezone=token[1];}else{dateStrings.time=timeString;}}return dateStrings;}function parseYear(dateString,additionalDigits){var regex=new RegExp('^(?:(\\\\d{4}|[+-]\\\\d{'+(4+additionalDigits)+'})|(\\\\d{2}|[+-]\\\\d{'+(2+additionalDigits)+'})$)');var captures=dateString.match(regex);// Invalid ISO-formatted year\nif(!captures)return{year:null};var year=captures[1]&&parseInt(captures[1]);var century=captures[2]&&parseInt(captures[2]);return{year:century==null?year:century*100,restDateString:dateString.slice((captures[1]||captures[2]).length)};}function parseDate(dateString,year){// Invalid ISO-formatted year\nif(year===null)return null;var captures=dateString.match(dateRegex);// Invalid ISO-formatted string\nif(!captures)return null;var isWeekDate=!!captures[4];var dayOfYear=parseDateUnit(captures[1]);var month=parseDateUnit(captures[2])-1;var day=parseDateUnit(captures[3]);var week=parseDateUnit(captures[4]);var dayOfWeek=parseDateUnit(captures[5])-1;if(isWeekDate){if(!validateWeekDate(year,week,dayOfWeek)){return new Date(NaN);}return dayOfISOWeekYear(year,week,dayOfWeek);}else{var date=new Date(0);if(!validateDate(year,month,day)||!validateDayOfYearDate(year,dayOfYear)){return new Date(NaN);}date.setUTCFullYear(year,month,Math.max(dayOfYear,day));return date;}}function parseDateUnit(value){return value?parseInt(value):1;}function parseTime(timeString){var captures=timeString.match(timeRegex);if(!captures)return null;// Invalid ISO-formatted time\nvar hours=parseTimeUnit(captures[1]);var minutes=parseTimeUnit(captures[2]);var seconds=parseTimeUnit(captures[3]);if(!validateTime(hours,minutes,seconds)){return NaN;}return hours*MILLISECONDS_IN_HOUR$2+minutes*MILLISECONDS_IN_MINUTE$3+seconds*1000;}function parseTimeUnit(value){return value&&parseFloat(value.replace(',','.'))||0;}function parseTimezone(timezoneString){if(timezoneString==='Z')return 0;var captures=timezoneString.match(timezoneRegex);if(!captures)return 0;var sign=captures[1]==='+'?-1:1;var hours=parseInt(captures[2]);var minutes=captures[3]&&parseInt(captures[3])||0;if(!validateTimezone(hours,minutes)){return NaN;}return sign*(hours*MILLISECONDS_IN_HOUR$2+minutes*MILLISECONDS_IN_MINUTE$3);}function dayOfISOWeekYear(isoWeekYear,week,day){var date=new Date(0);date.setUTCFullYear(isoWeekYear,0,4);var fourthOfJanuaryDay=date.getUTCDay()||7;var diff=(week-1)*7+day+1-fourthOfJanuaryDay;date.setUTCDate(date.getUTCDate()+diff);return date;}// Validation functions\n// February is null to handle the leap year (using ||)\nvar daysInMonths=[31,null,31,30,31,30,31,31,30,31,30,31];function isLeapYearIndex$1(year){return year%400===0||year%4===0&&year%100;}function validateDate(year,month,date){return month>=0&&month<=11&&date>=1&&date<=(daysInMonths[month]||(isLeapYearIndex$1(year)?29:28));}function validateDayOfYearDate(year,dayOfYear){return dayOfYear>=1&&dayOfYear<=(isLeapYearIndex$1(year)?366:365);}function validateWeekDate(_year,week,day){return week>=1&&week<=53&&day>=0&&day<=6;}function validateTime(hours,minutes,seconds){if(hours===24){return minutes===0&&seconds===0;}return seconds>=0&&seconds<60&&minutes>=0&&minutes<60&&hours>=0&&hours<25;}function validateTimezone(_hours,minutes){return minutes>=0&&minutes<=59;}function _inheritsLoose(subClass,superClass){subClass.prototype=Object.create(superClass.prototype);subClass.prototype.constructor=subClass;subClass.__proto__=superClass;}function _objectWithoutProperties$1(source,excluded){if(source==null)return{};var target={};var sourceKeys=Object.keys(source);var key,i;for(i=0;i=0)continue;target[key]=source[key];}if(Object.getOwnPropertySymbols){var sourceSymbolKeys=Object.getOwnPropertySymbols(source);for(i=0;i=0)continue;if(!Object.prototype.propertyIsEnumerable.call(source,key))continue;target[key]=source[key];}}return target;}/**\n * Check whether some DOM node is our Component's node.\n */function isNodeFound(current,componentNode,ignoreClass){if(current===componentNode){return true;}// SVG elements do not technically reside in the rendered DOM, so\n// they do not have classList directly, but they offer a link to their\n// corresponding element, which can have classList. This extra check is for\n// that case.\n// See: http://www.w3.org/TR/SVG11/struct.html#InterfaceSVGUseElement\n// Discussion: https://github.com/Pomax/react-onclickoutside/pull/17\nif(current.correspondingElement){return current.correspondingElement.classList.contains(ignoreClass);}return current.classList.contains(ignoreClass);}/**\n * Try to find our node in a hierarchy of nodes, returning the document\n * node as highest node if our node is not found in the path up.\n */function findHighest(current,componentNode,ignoreClass){if(current===componentNode){return true;}// If source=local then this event came from 'somewhere'\n// inside and should be ignored. We could handle this with\n// a layered approach, too, but that requires going back to\n// thinking in terms of Dom node nesting, running counter\n// to React's 'you shouldn't care about the DOM' philosophy.\nwhile(current.parentNode){if(isNodeFound(current,componentNode,ignoreClass)){return true;}current=current.parentNode;}return current;}/**\n * Check if the browser scrollbar was clicked\n */function clickedScrollbar(evt){return document.documentElement.clientWidth<=evt.clientX||document.documentElement.clientHeight<=evt.clientY;}// ideally will get replaced with external dep\n// when rafrex/detect-passive-events#4 and rafrex/detect-passive-events#5 get merged in\nvar testPassiveEventSupport=function testPassiveEventSupport(){if( false||typeof window.addEventListener!=='function'){return;}var passive=false;var options=Object.defineProperty({},'passive',{get:function get(){passive=true;}});var noop=function noop(){};window.addEventListener('testPassiveEventSupport',noop,options);window.removeEventListener('testPassiveEventSupport',noop,options);return passive;};function autoInc(seed){if(seed===void 0){seed=0;}return function(){return++seed;};}var uid=autoInc();var passiveEventSupport;var handlersMap={};var enabledInstances={};var touchEvents=['touchstart','touchmove'];var IGNORE_CLASS_NAME='ignore-react-onclickoutside';/**\n * Options for addEventHandler and removeEventHandler\n */function getEventHandlerOptions(instance,eventName){var handlerOptions=null;var isTouchEvent=touchEvents.indexOf(eventName)!==-1;if(isTouchEvent&&passiveEventSupport){handlerOptions={passive:!instance.props.preventDefault};}return handlerOptions;}/**\n * This function generates the HOC function that you'll use\n * in order to impart onOutsideClick listening to an\n * arbitrary component. It gets called at the end of the\n * bootstrapping code to yield an instance of the\n * onClickOutsideHOC function defined inside setupHOC().\n */function onClickOutsideHOC(WrappedComponent,config){var _class,_temp;var componentName=WrappedComponent.displayName||WrappedComponent.name||'Component';return _temp=_class=/*#__PURE__*/function(_Component){_inheritsLoose(onClickOutside,_Component);function onClickOutside(props){var _this;_this=_Component.call(this,props)||this;_this.__outsideClickHandler=function(event){if(typeof _this.__clickOutsideHandlerProp==='function'){_this.__clickOutsideHandlerProp(event);return;}var instance=_this.getInstance();if(typeof instance.props.handleClickOutside==='function'){instance.props.handleClickOutside(event);return;}if(typeof instance.handleClickOutside==='function'){instance.handleClickOutside(event);return;}throw new Error(\"WrappedComponent: \"+componentName+\" lacks a handleClickOutside(event) function for processing outside click events.\");};_this.__getComponentNode=function(){var instance=_this.getInstance();if(config&&typeof config.setClickOutsideRef==='function'){return config.setClickOutsideRef()(instance);}if(typeof instance.setClickOutsideRef==='function'){return instance.setClickOutsideRef();}return reactDom.findDOMNode(instance);};_this.enableOnClickOutside=function(){if(typeof document==='undefined'||enabledInstances[_this._uid]){return;}if(typeof passiveEventSupport==='undefined'){passiveEventSupport=testPassiveEventSupport();}enabledInstances[_this._uid]=true;var events=_this.props.eventTypes;if(!events.forEach){events=[events];}handlersMap[_this._uid]=function(event){if(_this.componentNode===null)return;if(_this.props.preventDefault){event.preventDefault();}if(_this.props.stopPropagation){event.stopPropagation();}if(_this.props.excludeScrollbar&&clickedScrollbar(event))return;var current=event.target;if(findHighest(current,_this.componentNode,_this.props.outsideClickIgnoreClass)!==document){return;}_this.__outsideClickHandler(event);};events.forEach(function(eventName){document.addEventListener(eventName,handlersMap[_this._uid],getEventHandlerOptions(_this,eventName));});};_this.disableOnClickOutside=function(){delete enabledInstances[_this._uid];var fn=handlersMap[_this._uid];if(fn&&typeof document!=='undefined'){var events=_this.props.eventTypes;if(!events.forEach){events=[events];}events.forEach(function(eventName){return document.removeEventListener(eventName,fn,getEventHandlerOptions(_this,eventName));});delete handlersMap[_this._uid];}};_this.getRef=function(ref){return _this.instanceRef=ref;};_this._uid=uid();return _this;}/**\n * Access the WrappedComponent's instance.\n */var _proto=onClickOutside.prototype;_proto.getInstance=function getInstance(){if(!WrappedComponent.prototype.isReactComponent){return this;}var ref=this.instanceRef;return ref.getInstance?ref.getInstance():ref;};/**\n * Add click listeners to the current document,\n * linked to this component's state.\n */_proto.componentDidMount=function componentDidMount(){// If we are in an environment without a DOM such\n// as shallow rendering or snapshots then we exit\n// early to prevent any unhandled errors being thrown.\nif(typeof document==='undefined'||!document.createElement){return;}var instance=this.getInstance();if(config&&typeof config.handleClickOutside==='function'){this.__clickOutsideHandlerProp=config.handleClickOutside(instance);if(typeof this.__clickOutsideHandlerProp!=='function'){throw new Error(\"WrappedComponent: \"+componentName+\" lacks a function for processing outside click events specified by the handleClickOutside config option.\");}}this.componentNode=this.__getComponentNode();// return early so we dont initiate onClickOutside\nif(this.props.disableOnClickOutside)return;this.enableOnClickOutside();};_proto.componentDidUpdate=function componentDidUpdate(){this.componentNode=this.__getComponentNode();};/**\n * Remove all document's event listeners for this component\n */_proto.componentWillUnmount=function componentWillUnmount(){this.disableOnClickOutside();};/**\n * Can be called to explicitly enable event listening\n * for clicks and touches outside of this element.\n */ /**\n * Pass-through render\n */_proto.render=function render(){// eslint-disable-next-line no-unused-vars\nvar _props=this.props,excludeScrollbar=_props.excludeScrollbar,props=_objectWithoutProperties$1(_props,[\"excludeScrollbar\"]);if(WrappedComponent.prototype.isReactComponent){props.ref=this.getRef;}else{props.wrappedRef=this.getRef;}props.disableOnClickOutside=this.disableOnClickOutside;props.enableOnClickOutside=this.enableOnClickOutside;return React.createElement(WrappedComponent,props);};return onClickOutside;}(React.Component),_class.displayName=\"OnClickOutside(\"+componentName+\")\",_class.defaultProps={eventTypes:['mousedown','touchstart'],excludeScrollbar:config&&config.excludeScrollbar||false,outsideClickIgnoreClass:IGNORE_CLASS_NAME,preventDefault:false,stopPropagation:false},_class.getClass=function(){return WrappedComponent.getClass?WrappedComponent.getClass():WrappedComponent;},_temp;}var toStr=Object.prototype.toString;var isArguments=function isArguments(value){var str=toStr.call(value);var isArgs=str==='[object Arguments]';if(!isArgs){isArgs=str!=='[object Array]'&&value!==null&&typeof value==='object'&&typeof value.length==='number'&&value.length>=0&&toStr.call(value.callee)==='[object Function]';}return isArgs;};var keysShim;if(!Object.keys){// modified from https://github.com/es-shims/es5-shim\nvar has$2=Object.prototype.hasOwnProperty;var toStr$1=Object.prototype.toString;var isArgs=isArguments;// eslint-disable-line global-require\nvar isEnumerable=Object.prototype.propertyIsEnumerable;var hasDontEnumBug=!isEnumerable.call({toString:null},'toString');var hasProtoEnumBug=isEnumerable.call(function(){},'prototype');var dontEnums=['toString','toLocaleString','valueOf','hasOwnProperty','isPrototypeOf','propertyIsEnumerable','constructor'];var equalsConstructorPrototype=function equalsConstructorPrototype(o){var ctor=o.constructor;return ctor&&ctor.prototype===o;};var excludedKeys={$applicationCache:true,$console:true,$external:true,$frame:true,$frameElement:true,$frames:true,$innerHeight:true,$innerWidth:true,$onmozfullscreenchange:true,$onmozfullscreenerror:true,$outerHeight:true,$outerWidth:true,$pageXOffset:true,$pageYOffset:true,$parent:true,$scrollLeft:true,$scrollTop:true,$scrollX:true,$scrollY:true,$self:true,$webkitIndexedDB:true,$webkitStorageInfo:true,$window:true};var hasAutomationEqualityBug=function(){/* global window */if(false){}for(var k in window){try{if(!excludedKeys['$'+k]&&has$2.call(window,k)&&window[k]!==null&&typeof window[k]==='object'){try{equalsConstructorPrototype(window[k]);}catch(e){return true;}}}catch(e){return true;}}return false;}();var equalsConstructorPrototypeIfNotBuggy=function equalsConstructorPrototypeIfNotBuggy(o){/* global window */if( false||!hasAutomationEqualityBug){return equalsConstructorPrototype(o);}try{return equalsConstructorPrototype(o);}catch(e){return false;}};keysShim=function keys(object){var isObject=object!==null&&typeof object==='object';var isFunction=toStr$1.call(object)==='[object Function]';var isArguments=isArgs(object);var isString=isObject&&toStr$1.call(object)==='[object String]';var theKeys=[];if(!isObject&&!isFunction&&!isArguments){throw new TypeError('Object.keys called on a non-object');}var skipProto=hasProtoEnumBug&&isFunction;if(isString&&object.length>0&&!has$2.call(object,0)){for(var i=0;i0){for(var j=0;j=0&&toStr$2.call(value)!=='[object Array]'&&toStr$2.call(value.callee)==='[object Function]';};var supportsStandardArguments=function(){return isStandardArguments(arguments);}();isStandardArguments.isLegacyArguments=isLegacyArguments;// for tests\nvar isArguments$1=supportsStandardArguments?isStandardArguments:isLegacyArguments;var hasSymbols=typeof Symbol==='function'&&typeof Symbol('foo')==='symbol';var toStr$3=Object.prototype.toString;var concat=Array.prototype.concat;var origDefineProperty=Object.defineProperty;var isFunction=function isFunction(fn){return typeof fn==='function'&&toStr$3.call(fn)==='[object Function]';};var arePropertyDescriptorsSupported=function arePropertyDescriptorsSupported(){var obj={};try{origDefineProperty(obj,'x',{enumerable:false,value:obj});// eslint-disable-next-line no-unused-vars, no-restricted-syntax\nfor(var _ in obj){// jscs:ignore disallowUnusedVariables\nreturn false;}return obj.x===obj;}catch(e){/* this is IE 8. */return false;}};var supportsDescriptors=origDefineProperty&&arePropertyDescriptorsSupported();var defineProperty=function defineProperty(object,name,value,predicate){if(name in object&&(!isFunction(predicate)||!predicate())){return;}if(supportsDescriptors){origDefineProperty(object,name,{configurable:true,enumerable:false,value:value,writable:true});}else{object[name]=value;}};var defineProperties=function defineProperties(object,map){var predicates=arguments.length>2?arguments[2]:{};var props=objectKeys(map);if(hasSymbols){props=concat.call(props,Object.getOwnPropertySymbols(map));}for(var i=0;i0&&typeof x[0]!=='number'){return false;}return true;}function objEquiv(a,b,opts){/* eslint max-statements: [2, 50] */var i,key;if(typeof a!==typeof b){return false;}if(isUndefinedOrNull(a)||isUndefinedOrNull(b)){return false;}// an identical 'prototype' property.\nif(a.prototype!==b.prototype){return false;}if(isArguments$1(a)!==isArguments$1(b)){return false;}var aIsRegex=isRegex(a);var bIsRegex=isRegex(b);if(aIsRegex!==bIsRegex){return false;}if(aIsRegex||bIsRegex){return a.source===b.source&®exp_prototype_flags(a)===regexp_prototype_flags(b);}if(isDateObject(a)&&isDateObject(b)){return getTime$1.call(a)===getTime$1.call(b);}var aIsBuffer=isBuffer(a);var bIsBuffer=isBuffer(b);if(aIsBuffer!==bIsBuffer){return false;}if(aIsBuffer||bIsBuffer){// && would work too, because both are true or both false here\nif(a.length!==b.length){return false;}for(i=0;i=0;i--){if(ka[i]!=kb[i]){return false;}}// equivalent values for every corresponding key, and ~~~possibly expensive deep test\nfor(i=ka.length-1;i>=0;i--){key=ka[i];if(!deepEqual(a[key],b[key],opts)){return false;}}return true;}var deepEqual_1=deepEqual;/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.16.1\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */var isBrowser= true&&typeof document!=='undefined'&&typeof navigator!=='undefined';var timeoutDuration=function(){var longerTimeoutBrowsers=['Edge','Trident','Firefox'];for(var i=0;i=0){return 1;}}return 0;}();function microtaskDebounce(fn){var called=false;return function(){if(called){return;}called=true;window.Promise.resolve().then(function(){called=false;fn();});};}function taskDebounce(fn){var scheduled=false;return function(){if(!scheduled){scheduled=true;setTimeout(function(){scheduled=false;fn();},timeoutDuration);}};}var supportsMicroTasks=isBrowser&&window.Promise;/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/var debounce=supportsMicroTasks?microtaskDebounce:taskDebounce;/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */function isFunction$1(functionToCheck){var getType={};return functionToCheck&&getType.toString.call(functionToCheck)==='[object Function]';}/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */function getStyleComputedProperty(element,property){if(element.nodeType!==1){return[];}// NOTE: 1 DOM access here\nvar window=element.ownerDocument.defaultView;var css=window.getComputedStyle(element,null);return property?css[property]:css;}/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */function getParentNode(element){if(element.nodeName==='HTML'){return element;}return element.parentNode||element.host;}/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */function getScrollParent(element){// Return body, `getScroll` will take care to get the correct `scrollTop` from it\nif(!element){return document.body;}switch(element.nodeName){case'HTML':case'BODY':return element.ownerDocument.body;case'#document':return element.body;}// Firefox want us to check `-x` and `-y` variations as well\nvar _getStyleComputedProp=getStyleComputedProperty(element),overflow=_getStyleComputedProp.overflow,overflowX=_getStyleComputedProp.overflowX,overflowY=_getStyleComputedProp.overflowY;if(/(auto|scroll|overlay)/.test(overflow+overflowY+overflowX)){return element;}return getScrollParent(getParentNode(element));}/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */function getReferenceNode(reference){return reference&&reference.referenceNode?reference.referenceNode:reference;}var isIE11=isBrowser&&!!(window.MSInputMethodContext&&document.documentMode);var isIE10=isBrowser&&/MSIE 10/.test(navigator.userAgent);/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */function isIE(version){if(version===11){return isIE11;}if(version===10){return isIE10;}return isIE11||isIE10;}/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */function getOffsetParent(element){if(!element){return document.documentElement;}var noOffsetParent=isIE(10)?document.body:null;// NOTE: 1 DOM access here\nvar offsetParent=element.offsetParent||null;// Skip hidden elements which don't have an offsetParent\nwhile(offsetParent===noOffsetParent&&element.nextElementSibling){offsetParent=(element=element.nextElementSibling).offsetParent;}var nodeName=offsetParent&&offsetParent.nodeName;if(!nodeName||nodeName==='BODY'||nodeName==='HTML'){return element?element.ownerDocument.documentElement:document.documentElement;}// .offsetParent will return the closest TH, TD or TABLE in case\n// no offsetParent is present, I hate this job...\nif(['TH','TD','TABLE'].indexOf(offsetParent.nodeName)!==-1&&getStyleComputedProperty(offsetParent,'position')==='static'){return getOffsetParent(offsetParent);}return offsetParent;}function isOffsetContainer(element){var nodeName=element.nodeName;if(nodeName==='BODY'){return false;}return nodeName==='HTML'||getOffsetParent(element.firstElementChild)===element;}/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */function getRoot(node){if(node.parentNode!==null){return getRoot(node.parentNode);}return node;}/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */function findCommonOffsetParent(element1,element2){// This check is needed to avoid errors in case one of the elements isn't defined for any reason\nif(!element1||!element1.nodeType||!element2||!element2.nodeType){return document.documentElement;}// Here we make sure to give as \"start\" the element that comes first in the DOM\nvar order=element1.compareDocumentPosition(element2)&Node.DOCUMENT_POSITION_FOLLOWING;var start=order?element1:element2;var end=order?element2:element1;// Get common ancestor container\nvar range=document.createRange();range.setStart(start,0);range.setEnd(end,0);var commonAncestorContainer=range.commonAncestorContainer;// Both nodes are inside #document\nif(element1!==commonAncestorContainer&&element2!==commonAncestorContainer||start.contains(end)){if(isOffsetContainer(commonAncestorContainer)){return commonAncestorContainer;}return getOffsetParent(commonAncestorContainer);}// one of the nodes is inside shadowDOM, find which one\nvar element1root=getRoot(element1);if(element1root.host){return findCommonOffsetParent(element1root.host,element2);}else{return findCommonOffsetParent(element1,getRoot(element2).host);}}/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */function getScroll(element){var side=arguments.length>1&&arguments[1]!==undefined?arguments[1]:'top';var upperSide=side==='top'?'scrollTop':'scrollLeft';var nodeName=element.nodeName;if(nodeName==='BODY'||nodeName==='HTML'){var html=element.ownerDocument.documentElement;var scrollingElement=element.ownerDocument.scrollingElement||html;return scrollingElement[upperSide];}return element[upperSide];}/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */function includeScroll(rect,element){var subtract=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;var scrollTop=getScroll(element,'top');var scrollLeft=getScroll(element,'left');var modifier=subtract?-1:1;rect.top+=scrollTop*modifier;rect.bottom+=scrollTop*modifier;rect.left+=scrollLeft*modifier;rect.right+=scrollLeft*modifier;return rect;}/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */function getBordersSize(styles,axis){var sideA=axis==='x'?'Left':'Top';var sideB=sideA==='Left'?'Right':'Bottom';return parseFloat(styles['border'+sideA+'Width'])+parseFloat(styles['border'+sideB+'Width']);}function getSize(axis,body,html,computedStyle){return Math.max(body['offset'+axis],body['scroll'+axis],html['client'+axis],html['offset'+axis],html['scroll'+axis],isIE(10)?parseInt(html['offset'+axis])+parseInt(computedStyle['margin'+(axis==='Height'?'Top':'Left')])+parseInt(computedStyle['margin'+(axis==='Height'?'Bottom':'Right')]):0);}function getWindowSizes(document){var body=document.body;var html=document.documentElement;var computedStyle=isIE(10)&&getComputedStyle(html);return{height:getSize('Height',body,html,computedStyle),width:getSize('Width',body,html,computedStyle)};}var classCallCheck=function classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}};var createClass=function(){function defineProperties(target,props){for(var i=0;i2&&arguments[2]!==undefined?arguments[2]:false;var isIE10=isIE(10);var isHTML=parent.nodeName==='HTML';var childrenRect=getBoundingClientRect(children);var parentRect=getBoundingClientRect(parent);var scrollParent=getScrollParent(children);var styles=getStyleComputedProperty(parent);var borderTopWidth=parseFloat(styles.borderTopWidth);var borderLeftWidth=parseFloat(styles.borderLeftWidth);// In cases where the parent is fixed, we must ignore negative scroll in offset calc\nif(fixedPosition&&isHTML){parentRect.top=Math.max(parentRect.top,0);parentRect.left=Math.max(parentRect.left,0);}var offsets=getClientRect({top:childrenRect.top-parentRect.top-borderTopWidth,left:childrenRect.left-parentRect.left-borderLeftWidth,width:childrenRect.width,height:childrenRect.height});offsets.marginTop=0;offsets.marginLeft=0;// Subtract margins of documentElement in case it's being used as parent\n// we do this only on HTML because it's the only element that behaves\n// differently when margins are applied to it. The margins are included in\n// the box of the documentElement, in the other cases not.\nif(!isIE10&&isHTML){var marginTop=parseFloat(styles.marginTop);var marginLeft=parseFloat(styles.marginLeft);offsets.top-=borderTopWidth-marginTop;offsets.bottom-=borderTopWidth-marginTop;offsets.left-=borderLeftWidth-marginLeft;offsets.right-=borderLeftWidth-marginLeft;// Attach marginTop and marginLeft because in some circumstances we may need them\noffsets.marginTop=marginTop;offsets.marginLeft=marginLeft;}if(isIE10&&!fixedPosition?parent.contains(scrollParent):parent===scrollParent&&scrollParent.nodeName!=='BODY'){offsets=includeScroll(offsets,parent);}return offsets;}function getViewportOffsetRectRelativeToArtbitraryNode(element){var excludeScroll=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;var html=element.ownerDocument.documentElement;var relativeOffset=getOffsetRectRelativeToArbitraryNode(element,html);var width=Math.max(html.clientWidth,window.innerWidth||0);var height=Math.max(html.clientHeight,window.innerHeight||0);var scrollTop=!excludeScroll?getScroll(html):0;var scrollLeft=!excludeScroll?getScroll(html,'left'):0;var offset={top:scrollTop-relativeOffset.top+relativeOffset.marginTop,left:scrollLeft-relativeOffset.left+relativeOffset.marginLeft,width:width,height:height};return getClientRect(offset);}/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */function isFixed(element){var nodeName=element.nodeName;if(nodeName==='BODY'||nodeName==='HTML'){return false;}if(getStyleComputedProperty(element,'position')==='fixed'){return true;}var parentNode=getParentNode(element);if(!parentNode){return false;}return isFixed(parentNode);}/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */function getFixedPositionOffsetParent(element){// This check is needed to avoid errors in case one of the elements isn't defined for any reason\nif(!element||!element.parentElement||isIE()){return document.documentElement;}var el=element.parentElement;while(el&&getStyleComputedProperty(el,'transform')==='none'){el=el.parentElement;}return el||document.documentElement;}/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */function getBoundaries(popper,reference,padding,boundariesElement){var fixedPosition=arguments.length>4&&arguments[4]!==undefined?arguments[4]:false;// NOTE: 1 DOM access here\nvar boundaries={top:0,left:0};var offsetParent=fixedPosition?getFixedPositionOffsetParent(popper):findCommonOffsetParent(popper,getReferenceNode(reference));// Handle viewport case\nif(boundariesElement==='viewport'){boundaries=getViewportOffsetRectRelativeToArtbitraryNode(offsetParent,fixedPosition);}else{// Handle other cases based on DOM element used as boundaries\nvar boundariesNode=void 0;if(boundariesElement==='scrollParent'){boundariesNode=getScrollParent(getParentNode(reference));if(boundariesNode.nodeName==='BODY'){boundariesNode=popper.ownerDocument.documentElement;}}else if(boundariesElement==='window'){boundariesNode=popper.ownerDocument.documentElement;}else{boundariesNode=boundariesElement;}var offsets=getOffsetRectRelativeToArbitraryNode(boundariesNode,offsetParent,fixedPosition);// In case of HTML, we need a different computation\nif(boundariesNode.nodeName==='HTML'&&!isFixed(offsetParent)){var _getWindowSizes=getWindowSizes(popper.ownerDocument),height=_getWindowSizes.height,width=_getWindowSizes.width;boundaries.top+=offsets.top-offsets.marginTop;boundaries.bottom=height+offsets.top;boundaries.left+=offsets.left-offsets.marginLeft;boundaries.right=width+offsets.left;}else{// for all the other DOM elements, this one is good\nboundaries=offsets;}}// Add paddings\npadding=padding||0;var isPaddingNumber=typeof padding==='number';boundaries.left+=isPaddingNumber?padding:padding.left||0;boundaries.top+=isPaddingNumber?padding:padding.top||0;boundaries.right-=isPaddingNumber?padding:padding.right||0;boundaries.bottom-=isPaddingNumber?padding:padding.bottom||0;return boundaries;}function getArea(_ref){var width=_ref.width,height=_ref.height;return width*height;}/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */function computeAutoPlacement(placement,refRect,popper,reference,boundariesElement){var padding=arguments.length>5&&arguments[5]!==undefined?arguments[5]:0;if(placement.indexOf('auto')===-1){return placement;}var boundaries=getBoundaries(popper,reference,padding,boundariesElement);var rects={top:{width:boundaries.width,height:refRect.top-boundaries.top},right:{width:boundaries.right-refRect.right,height:boundaries.height},bottom:{width:boundaries.width,height:boundaries.bottom-refRect.bottom},left:{width:refRect.left-boundaries.left,height:boundaries.height}};var sortedAreas=Object.keys(rects).map(function(key){return _extends$1({key:key},rects[key],{area:getArea(rects[key])});}).sort(function(a,b){return b.area-a.area;});var filteredAreas=sortedAreas.filter(function(_ref2){var width=_ref2.width,height=_ref2.height;return width>=popper.clientWidth&&height>=popper.clientHeight;});var computedPlacement=filteredAreas.length>0?filteredAreas[0].key:sortedAreas[0].key;var variation=placement.split('-')[1];return computedPlacement+(variation?'-'+variation:'');}/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */function getReferenceOffsets(state,popper,reference){var fixedPosition=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;var commonOffsetParent=fixedPosition?getFixedPositionOffsetParent(popper):findCommonOffsetParent(popper,getReferenceNode(reference));return getOffsetRectRelativeToArbitraryNode(reference,commonOffsetParent,fixedPosition);}/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */function getOuterSizes(element){var window=element.ownerDocument.defaultView;var styles=window.getComputedStyle(element);var x=parseFloat(styles.marginTop||0)+parseFloat(styles.marginBottom||0);var y=parseFloat(styles.marginLeft||0)+parseFloat(styles.marginRight||0);var result={width:element.offsetWidth+y,height:element.offsetHeight+x};return result;}/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */function getOppositePlacement(placement){var hash={left:'right',right:'left',bottom:'top',top:'bottom'};return placement.replace(/left|right|bottom|top/g,function(matched){return hash[matched];});}/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */function getPopperOffsets(popper,referenceOffsets,placement){placement=placement.split('-')[0];// Get popper node sizes\nvar popperRect=getOuterSizes(popper);// Add position, width and height to our offsets object\nvar popperOffsets={width:popperRect.width,height:popperRect.height};// depending by the popper placement we have to compute its offsets slightly differently\nvar isHoriz=['right','left'].indexOf(placement)!==-1;var mainSide=isHoriz?'top':'left';var secondarySide=isHoriz?'left':'top';var measurement=isHoriz?'height':'width';var secondaryMeasurement=!isHoriz?'height':'width';popperOffsets[mainSide]=referenceOffsets[mainSide]+referenceOffsets[measurement]/2-popperRect[measurement]/2;if(placement===secondarySide){popperOffsets[secondarySide]=referenceOffsets[secondarySide]-popperRect[secondaryMeasurement];}else{popperOffsets[secondarySide]=referenceOffsets[getOppositePlacement(secondarySide)];}return popperOffsets;}/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */function find(arr,check){// use native find if supported\nif(Array.prototype.find){return arr.find(check);}// use `filter` to obtain the same behavior of `find`\nreturn arr.filter(check)[0];}/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */function findIndex$1(arr,prop,value){// use native findIndex if supported\nif(Array.prototype.findIndex){return arr.findIndex(function(cur){return cur[prop]===value;});}// use `find` + `indexOf` if `findIndex` isn't supported\nvar match=find(arr,function(obj){return obj[prop]===value;});return arr.indexOf(match);}/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */function runModifiers(modifiers,data,ends){var modifiersToRun=ends===undefined?modifiers:modifiers.slice(0,findIndex$1(modifiers,'name',ends));modifiersToRun.forEach(function(modifier){if(modifier['function']){// eslint-disable-line dot-notation\nconsole.warn('`modifier.function` is deprecated, use `modifier.fn`!');}var fn=modifier['function']||modifier.fn;// eslint-disable-line dot-notation\nif(modifier.enabled&&isFunction$1(fn)){// Add properties to offsets to make them a complete clientRect object\n// we do this before each modifier to make sure the previous one doesn't\n// mess with these values\ndata.offsets.popper=getClientRect(data.offsets.popper);data.offsets.reference=getClientRect(data.offsets.reference);data=fn(data,modifier);}});return data;}/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.
\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */function update(){// if popper is destroyed, don't perform any further update\nif(this.state.isDestroyed){return;}var data={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:false,offsets:{}};// compute reference element offsets\ndata.offsets.reference=getReferenceOffsets(this.state,this.popper,this.reference,this.options.positionFixed);// compute auto placement, store placement inside the data object,\n// modifiers will be able to edit `placement` if needed\n// and refer to originalPlacement to know the original value\ndata.placement=computeAutoPlacement(this.options.placement,data.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding);// store the computed placement inside `originalPlacement`\ndata.originalPlacement=data.placement;data.positionFixed=this.options.positionFixed;// compute the popper offsets\ndata.offsets.popper=getPopperOffsets(this.popper,data.offsets.reference,data.placement);data.offsets.popper.position=this.options.positionFixed?'fixed':'absolute';// run the modifiers\ndata=runModifiers(this.modifiers,data);// the first `update` will call `onCreate` callback\n// the other ones will call `onUpdate` callback\nif(!this.state.isCreated){this.state.isCreated=true;this.options.onCreate(data);}else{this.options.onUpdate(data);}}/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */function isModifierEnabled(modifiers,modifierName){return modifiers.some(function(_ref){var name=_ref.name,enabled=_ref.enabled;return enabled&&name===modifierName;});}/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */function getSupportedPropertyName(property){var prefixes=[false,'ms','Webkit','Moz','O'];var upperProp=property.charAt(0).toUpperCase()+property.slice(1);for(var i=0;i the positioning is relative to the bottom of the screen (excluding the scrollbar)\n// and not the bottom of the html element\nif(offsetParent.nodeName==='HTML'){top=-offsetParent.clientHeight+offsets.bottom;}else{top=-offsetParentRect.height+offsets.bottom;}}else{top=offsets.top;}if(sideB==='right'){if(offsetParent.nodeName==='HTML'){left=-offsetParent.clientWidth+offsets.right;}else{left=-offsetParentRect.width+offsets.right;}}else{left=offsets.left;}if(gpuAcceleration&&prefixedProperty){styles[prefixedProperty]='translate3d('+left+'px, '+top+'px, 0)';styles[sideA]=0;styles[sideB]=0;styles.willChange='transform';}else{// othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\nvar invertTop=sideA==='bottom'?-1:1;var invertLeft=sideB==='right'?-1:1;styles[sideA]=top*invertTop;styles[sideB]=left*invertLeft;styles.willChange=sideA+', '+sideB;}// Attributes\nvar attributes={'x-placement':data.placement};// Update `data` attributes, styles and arrowStyles\ndata.attributes=_extends$1({},attributes,data.attributes);data.styles=_extends$1({},styles,data.styles);data.arrowStyles=_extends$1({},data.offsets.arrow,data.arrowStyles);return data;}/**\n * Helper used to know if the given modifier depends from another one.
\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */function isModifierRequired(modifiers,requestingName,requestedName){var requesting=find(modifiers,function(_ref){var name=_ref.name;return name===requestingName;});var isRequired=!!requesting&&modifiers.some(function(modifier){return modifier.name===requestedName&&modifier.enabled&&modifier.orderpopper[opSide]){data.offsets.popper[side]+=reference[side]+arrowElementSize-popper[opSide];}data.offsets.popper=getClientRect(data.offsets.popper);// compute center of the popper\nvar center=reference[side]+reference[len]/2-arrowElementSize/2;// Compute the sideValue using the updated popper offsets\n// take popper margin in account because we don't have this info available\nvar css=getStyleComputedProperty(data.instance.popper);var popperMarginSide=parseFloat(css['margin'+sideCapitalized]);var popperBorderSide=parseFloat(css['border'+sideCapitalized+'Width']);var sideValue=center-data.offsets.popper[side]-popperMarginSide-popperBorderSide;// prevent arrowElement from being placed not contiguously to its popper\nsideValue=Math.max(Math.min(popper[len]-arrowElementSize,sideValue),0);data.arrowElement=arrowElement;data.offsets.arrow=(_data$offsets$arrow={},defineProperty$2(_data$offsets$arrow,side,Math.round(sideValue)),defineProperty$2(_data$offsets$arrow,altSide,''),_data$offsets$arrow);return data;}/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */function getOppositeVariation(variation){if(variation==='end'){return'start';}else if(variation==='start'){return'end';}return variation;}/**\n * List of accepted placements to use as values of the `placement` option.
\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.
\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */var placements=['auto-start','auto','auto-end','top-start','top','top-end','right-start','right','right-end','bottom-end','bottom','bottom-start','left-end','left','left-start'];// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements=placements.slice(3);/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */function clockwise(placement){var counter=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;var index=validPlacements.indexOf(placement);var arr=validPlacements.slice(index+1).concat(validPlacements.slice(0,index));return counter?arr.reverse():arr;}var BEHAVIORS={FLIP:'flip',CLOCKWISE:'clockwise',COUNTERCLOCKWISE:'counterclockwise'};/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */function flip(data,options){// if `inner` modifier is enabled, we can't use the `flip` modifier\nif(isModifierEnabled(data.instance.modifiers,'inner')){return data;}if(data.flipped&&data.placement===data.originalPlacement){// seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\nreturn data;}var boundaries=getBoundaries(data.instance.popper,data.instance.reference,options.padding,options.boundariesElement,data.positionFixed);var placement=data.placement.split('-')[0];var placementOpposite=getOppositePlacement(placement);var variation=data.placement.split('-')[1]||'';var flipOrder=[];switch(options.behavior){case BEHAVIORS.FLIP:flipOrder=[placement,placementOpposite];break;case BEHAVIORS.CLOCKWISE:flipOrder=clockwise(placement);break;case BEHAVIORS.COUNTERCLOCKWISE:flipOrder=clockwise(placement,true);break;default:flipOrder=options.behavior;}flipOrder.forEach(function(step,index){if(placement!==step||flipOrder.length===index+1){return data;}placement=data.placement.split('-')[0];placementOpposite=getOppositePlacement(placement);var popperOffsets=data.offsets.popper;var refOffsets=data.offsets.reference;// using floor because the reference offsets may contain decimals we are not going to consider here\nvar floor=Math.floor;var overlapsRef=placement==='left'&&floor(popperOffsets.right)>floor(refOffsets.left)||placement==='right'&&floor(popperOffsets.left)floor(refOffsets.top)||placement==='bottom'&&floor(popperOffsets.top)floor(boundaries.right);var overflowsTop=floor(popperOffsets.top)floor(boundaries.bottom);var overflowsBoundaries=placement==='left'&&overflowsLeft||placement==='right'&&overflowsRight||placement==='top'&&overflowsTop||placement==='bottom'&&overflowsBottom;// flip the variation if required\nvar isVertical=['top','bottom'].indexOf(placement)!==-1;// flips variation if reference element overflows boundaries\nvar flippedVariationByRef=!!options.flipVariations&&(isVertical&&variation==='start'&&overflowsLeft||isVertical&&variation==='end'&&overflowsRight||!isVertical&&variation==='start'&&overflowsTop||!isVertical&&variation==='end'&&overflowsBottom);// flips variation if popper content overflows boundaries\nvar flippedVariationByContent=!!options.flipVariationsByContent&&(isVertical&&variation==='start'&&overflowsRight||isVertical&&variation==='end'&&overflowsLeft||!isVertical&&variation==='start'&&overflowsBottom||!isVertical&&variation==='end'&&overflowsTop);var flippedVariation=flippedVariationByRef||flippedVariationByContent;if(overlapsRef||overflowsBoundaries||flippedVariation){// this boolean to detect any flip loop\ndata.flipped=true;if(overlapsRef||overflowsBoundaries){placement=flipOrder[index+1];}if(flippedVariation){variation=getOppositeVariation(variation);}data.placement=placement+(variation?'-'+variation:'');// this object contains `position`, we want to preserve it along with\n// any additional property we may add in the future\ndata.offsets.popper=_extends$1({},data.offsets.popper,getPopperOffsets(data.instance.popper,data.offsets.reference,data.placement));data=runModifiers(data.instance.modifiers,data,'flip');}});return data;}/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */function keepTogether(data){var _data$offsets=data.offsets,popper=_data$offsets.popper,reference=_data$offsets.reference;var placement=data.placement.split('-')[0];var floor=Math.floor;var isVertical=['top','bottom'].indexOf(placement)!==-1;var side=isVertical?'right':'bottom';var opSide=isVertical?'left':'top';var measurement=isVertical?'width':'height';if(popper[side]floor(reference[side])){data.offsets.popper[opSide]=floor(reference[side]);}return data;}/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */function toValue(str,measurement,popperOffsets,referenceOffsets){// separate value from unit\nvar split=str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);var value=+split[1];var unit=split[2];// If it's not a number it's an operator, I guess\nif(!value){return str;}if(unit.indexOf('%')===0){var element=void 0;switch(unit){case'%p':element=popperOffsets;break;case'%':case'%r':default:element=referenceOffsets;}var rect=getClientRect(element);return rect[measurement]/100*value;}else if(unit==='vh'||unit==='vw'){// if is a vh or vw, we calculate the size based on the viewport\nvar size=void 0;if(unit==='vh'){size=Math.max(document.documentElement.clientHeight,window.innerHeight||0);}else{size=Math.max(document.documentElement.clientWidth,window.innerWidth||0);}return size/100*value;}else{// if is an explicit pixel unit, we get rid of the unit and keep the value\n// if is an implicit unit, it's px, and we return just the value\nreturn value;}}/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */function parseOffset(offset,popperOffsets,referenceOffsets,basePlacement){var offsets=[0,0];// Use height if placement is left or right and index is 0 otherwise use width\n// in this way the first offset will use an axis and the second one\n// will use the other one\nvar useHeight=['right','left'].indexOf(basePlacement)!==-1;// Split the offset string to obtain a list of values and operands\n// The regex addresses values with the plus or minus sign in front (+10, -20, etc)\nvar fragments=offset.split(/(\\+|\\-)/).map(function(frag){return frag.trim();});// Detect if the offset string contains a pair of values or a single one\n// they could be separated by comma or space\nvar divider=fragments.indexOf(find(fragments,function(frag){return frag.search(/,|\\s/)!==-1;}));if(fragments[divider]&&fragments[divider].indexOf(',')===-1){console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');}// If divider is found, we divide the list of values and operands to divide\n// them by ofset X and Y.\nvar splitRegex=/\\s*,\\s*|\\s+/;var ops=divider!==-1?[fragments.slice(0,divider).concat([fragments[divider].split(splitRegex)[0]]),[fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider+1))]:[fragments];// Convert the values with units to absolute pixels to allow our computations\nops=ops.map(function(op,index){// Most of the units rely on the orientation of the popper\nvar measurement=(index===1?!useHeight:useHeight)?'height':'width';var mergeWithPrevious=false;return op// This aggregates any `+` or `-` sign that aren't considered operators\n// e.g.: 10 + +5 => [10, +, +5]\n.reduce(function(a,b){if(a[a.length-1]===''&&['+','-'].indexOf(b)!==-1){a[a.length-1]=b;mergeWithPrevious=true;return a;}else if(mergeWithPrevious){a[a.length-1]+=b;mergeWithPrevious=false;return a;}else{return a.concat(b);}},[])// Here we convert the string values into number values (in px)\n.map(function(str){return toValue(str,measurement,popperOffsets,referenceOffsets);});});// Loop trough the offsets arrays and execute the operations\nops.forEach(function(op,index){op.forEach(function(frag,index2){if(isNumeric(frag)){offsets[index]+=frag*(op[index2-1]==='-'?-1:1);}});});return offsets;}/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */function offset(data,_ref){var offset=_ref.offset;var placement=data.placement,_data$offsets=data.offsets,popper=_data$offsets.popper,reference=_data$offsets.reference;var basePlacement=placement.split('-')[0];var offsets=void 0;if(isNumeric(+offset)){offsets=[+offset,0];}else{offsets=parseOffset(offset,popper,reference,basePlacement);}if(basePlacement==='left'){popper.top+=offsets[0];popper.left-=offsets[1];}else if(basePlacement==='right'){popper.top+=offsets[0];popper.left+=offsets[1];}else if(basePlacement==='top'){popper.left+=offsets[0];popper.top-=offsets[1];}else if(basePlacement==='bottom'){popper.left+=offsets[0];popper.top+=offsets[1];}data.popper=popper;return data;}/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */function preventOverflow(data,options){var boundariesElement=options.boundariesElement||getOffsetParent(data.instance.popper);// If offsetParent is the reference element, we really want to\n// go one step up and use the next offsetParent as reference to\n// avoid to make this modifier completely useless and look like broken\nif(data.instance.reference===boundariesElement){boundariesElement=getOffsetParent(boundariesElement);}// NOTE: DOM access here\n// resets the popper's position so that the document size can be calculated excluding\n// the size of the popper element itself\nvar transformProp=getSupportedPropertyName('transform');var popperStyles=data.instance.popper.style;// assignment to help minification\nvar top=popperStyles.top,left=popperStyles.left,transform=popperStyles[transformProp];popperStyles.top='';popperStyles.left='';popperStyles[transformProp]='';var boundaries=getBoundaries(data.instance.popper,data.instance.reference,options.padding,boundariesElement,data.positionFixed);// NOTE: DOM access here\n// restores the original style properties after the offsets have been computed\npopperStyles.top=top;popperStyles.left=left;popperStyles[transformProp]=transform;options.boundaries=boundaries;var order=options.priority;var popper=data.offsets.popper;var check={primary:function primary(placement){var value=popper[placement];if(popper[placement]boundaries[placement]&&!options.escapeWithReference){value=Math.min(popper[mainSide],boundaries[placement]-(placement==='right'?popper.width:popper.height));}return defineProperty$2({},mainSide,value);}};order.forEach(function(placement){var side=['left','top'].indexOf(placement)!==-1?'primary':'secondary';popper=_extends$1({},popper,check[side](placement));});data.offsets.popper=popper;return data;}/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */function shift(data){var placement=data.placement;var basePlacement=placement.split('-')[0];var shiftvariation=placement.split('-')[1];// if shift shiftvariation is specified, run the modifier\nif(shiftvariation){var _data$offsets=data.offsets,reference=_data$offsets.reference,popper=_data$offsets.popper;var isVertical=['bottom','top'].indexOf(basePlacement)!==-1;var side=isVertical?'left':'top';var measurement=isVertical?'width':'height';var shiftOffsets={start:defineProperty$2({},side,reference[side]),end:defineProperty$2({},side,reference[side]+reference[measurement]-popper[measurement])};data.offsets.popper=_extends$1({},popper,shiftOffsets[shiftvariation]);}return data;}/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */function hide(data){if(!isModifierRequired(data.instance.modifiers,'hide','preventOverflow')){return data;}var refRect=data.offsets.reference;var bound=find(data.instance.modifiers,function(modifier){return modifier.name==='preventOverflow';}).boundaries;if(refRect.bottombound.right||refRect.top>bound.bottom||refRect.right\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */ /**\n * Modifiers are plugins used to alter the behavior of your poppers.
\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */var modifiers={/**\n * Modifier used to shift the popper on the start or end of its reference\n * element.
\n * It will read the variation of the `placement` property.
\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */shift:{/** @prop {number} order=100 - Index used to define the order of execution */order:100,/** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */enabled:true,/** @prop {ModifierFn} */fn:shift},/**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.
\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.
\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.
\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */offset:{/** @prop {number} order=200 - Index used to define the order of execution */order:200,/** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */enabled:true,/** @prop {ModifierFn} */fn:offset,/** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */offset:0},/**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.
\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".
\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */preventOverflow:{/** @prop {number} order=300 - Index used to define the order of execution */order:300,/** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */enabled:true,/** @prop {ModifierFn} */fn:preventOverflow,/**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */priority:['left','right','top','bottom'],/**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */padding:5,/**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */boundariesElement:'scrollParent'},/**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */keepTogether:{/** @prop {number} order=400 - Index used to define the order of execution */order:400,/** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */enabled:true,/** @prop {ModifierFn} */fn:keepTogether},/**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */arrow:{/** @prop {number} order=500 - Index used to define the order of execution */order:500,/** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */enabled:true,/** @prop {ModifierFn} */fn:arrow,/** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */element:'[x-arrow]'},/**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */flip:{/** @prop {number} order=600 - Index used to define the order of execution */order:600,/** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */enabled:true,/** @prop {ModifierFn} */fn:flip,/**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */behavior:'flip',/**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */padding:5,/**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */boundariesElement:'viewport',/**\n * @prop {Boolean} flipVariations=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the reference element overlaps its boundaries.\n *\n * The original placement should have a set variation.\n */flipVariations:false,/**\n * @prop {Boolean} flipVariationsByContent=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the popper element overlaps its reference boundaries.\n *\n * The original placement should have a set variation.\n */flipVariationsByContent:false},/**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */inner:{/** @prop {number} order=700 - Index used to define the order of execution */order:700,/** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */enabled:false,/** @prop {ModifierFn} */fn:inner},/**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */hide:{/** @prop {number} order=800 - Index used to define the order of execution */order:800,/** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */enabled:true,/** @prop {ModifierFn} */fn:hide},/**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */computeStyle:{/** @prop {number} order=850 - Index used to define the order of execution */order:850,/** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */enabled:true,/** @prop {ModifierFn} */fn:computeStyle,/**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */gpuAcceleration:true,/**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */x:'bottom',/**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */y:'right'},/**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */applyStyle:{/** @prop {number} order=900 - Index used to define the order of execution */order:900,/** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */enabled:true,/** @prop {ModifierFn} */fn:applyStyle,/** @prop {Function} */onLoad:applyStyleOnLoad,/**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */gpuAcceleration:undefined}};/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */ /**\n * Default options provided to Popper.js constructor.
\n * These can be overridden using the `options` argument of Popper.js.
\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */var Defaults={/**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */placement:'bottom',/**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */positionFixed:false,/**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */eventsEnabled:true,/**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */removeOnDestroy:false,/**\n * Callback called when the popper is created.
\n * By default, it is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */onCreate:function onCreate(){},/**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.
\n * By default, it is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */onUpdate:function onUpdate(){},/**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */modifiers:modifiers};/**\n * @callback onCreate\n * @param {dataObject} data\n */ /**\n * @callback onUpdate\n * @param {dataObject} data\n */ // Utils\n// Methods\nvar Popper=function(){/**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {Element|referenceObject} reference - The reference element used to position the popper\n * @param {Element} popper - The HTML / XML element used as the popper\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */function Popper(reference,popper){var _this=this;var options=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{};classCallCheck(this,Popper);this.scheduleUpdate=function(){return requestAnimationFrame(_this.update);};// make update() debounced, so that it only runs at most once-per-tick\nthis.update=debounce(this.update.bind(this));// with {} we create a new object with the options inside it\nthis.options=_extends$1({},Popper.Defaults,options);// init state\nthis.state={isDestroyed:false,isCreated:false,scrollParents:[]};// get reference and popper elements (allow jQuery wrappers)\nthis.reference=reference&&reference.jquery?reference[0]:reference;this.popper=popper&&popper.jquery?popper[0]:popper;// Deep merge modifiers options\nthis.options.modifiers={};Object.keys(_extends$1({},Popper.Defaults.modifiers,options.modifiers)).forEach(function(name){_this.options.modifiers[name]=_extends$1({},Popper.Defaults.modifiers[name]||{},options.modifiers?options.modifiers[name]:{});});// Refactoring modifiers' list (Object => Array)\nthis.modifiers=Object.keys(this.options.modifiers).map(function(name){return _extends$1({name:name},_this.options.modifiers[name]);})// sort the modifiers by order\n.sort(function(a,b){return a.order-b.order;});// modifiers have the ability to execute arbitrary code when Popper.js get inited\n// such code is executed in the same order of its modifier\n// they could add new properties to their options configuration\n// BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\nthis.modifiers.forEach(function(modifierOptions){if(modifierOptions.enabled&&isFunction$1(modifierOptions.onLoad)){modifierOptions.onLoad(_this.reference,_this.popper,_this.options,modifierOptions,_this.state);}});// fire the first update to position the popper in the right place\nthis.update();var eventsEnabled=this.options.eventsEnabled;if(eventsEnabled){// setup event listeners, they will take care of update the position in specific situations\nthis.enableEventListeners();}this.state.eventsEnabled=eventsEnabled;}// We can't use class properties because they don't get listed in the\n// class prototype and break stuff like Sinon stubs\ncreateClass(Popper,[{key:'update',value:function update$$1(){return update.call(this);}},{key:'destroy',value:function destroy$$1(){return destroy.call(this);}},{key:'enableEventListeners',value:function enableEventListeners$$1(){return enableEventListeners.call(this);}},{key:'disableEventListeners',value:function disableEventListeners$$1(){return disableEventListeners.call(this);}/**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */ /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */}]);return Popper;}();/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.
\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */Popper.Utils=(true?window:undefined).PopperUtils;Popper.placements=placements;Popper.Defaults=Defaults;var key='__global_unique_id__';var gud=function gud(){return commonjsGlobal[key]=(commonjsGlobal[key]||0)+1;};/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */ /**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */var __DEV__=true;var warning=function warning(){};if(__DEV__){var printWarning$2=function printWarning(format,args){var len=arguments.length;args=new Array(len>1?len-1:0);for(var key=1;key2?len-2:0);for(var key=2;key1?_len-1:0),_key=1;_key<_len;_key++){args[_key-1]=arguments[_key];}return fn.apply(void 0,args);}};/**\n * Does a shallow equality check of two objects by comparing the reference\n * equality of each value.\n */var shallowEqual=function shallowEqual(objA,objB){var aKeys=Object.keys(objA);var bKeys=Object.keys(objB);if(bKeys.length!==aKeys.length){return false;}for(var i=0;i0&&(a=parse(e,t.slice(0,e.length),new Date())),Ce(a)||(a=new Date(e))),Ce(a)&&p?a:null);}function Ce(e){return isValid(e)&&isAfter(e,new Date(\"1/1/1000\"));}_c45=Ce;function _e(e,t,r){if(\"en\"===r)return format(e,t,{awareOfUnicodeTokens:!0});var n=je(r);return r&&!n&&console.warn('A locale object was not found for the provided string [\"'.concat(r,'\"].')),!n&&Be()&&je(Be())&&(n=je(Be())),format(e,t,{locale:n||null,awareOfUnicodeTokens:!0});}function Se(e,t){var r=t.hour,n=void 0===r?0:r,o=t.minute,a=void 0===o?0:o,s=t.second;return setHours(setMinutes(setSeconds(e,void 0===s?0:s),a),n);}_c46=Se;function Me(e,t){var r=t&&je(t)||Be()&&je(Be());return getWeek(e,r?{locale:r}:null);}_c47=Me;function Pe(e,t){return _e(e,\"ddd\",t);}_c48=Pe;function Ee(e){return startOfDay(e);}_c49=Ee;function Ne(e,t){var r=je(t||Be());return startOfWeek(e,{locale:r});}_c50=Ne;function Oe(e){return startOfMonth(e);}_c51=Oe;function xe(e){return startOfQuarter(e);}function Ye(e,t){return e&&t?isSameYear(e,t):!e&&!t;}_c52=Ye;function Te(e,t){return e&&t?isSameMonth(e,t):!e&&!t;}_c53=Te;function Le(e,t){return e&&t?isSameQuarter(e,t):!e&&!t;}_c54=Le;function Ie(e,t){return e&&t?isSameDay(e,t):!e&&!t;}_c55=Ie;function Fe(e,t){return e&&t?isEqual(e,t):!e&&!t;}_c56=Fe;function Re(e,t,r){var n,o=startOfDay(t),a=endOfDay(r);try{n=isWithinInterval(e,{start:o,end:a});}catch(e){n=!1;}return n;}_c57=Re;function We(e,t){var r=true?window:undefined;r.__localeData__||(r.__localeData__={}),r.__localeData__[e]=t;}_c58=We;function Ae(e){(true?window:undefined).__localeId__=e;}_c59=Ae;function Be(){return(true?window:undefined).__localeId__;}_c60=Be;function je(e){if(\"string\"==typeof e){var t=true?window:undefined;return t.__localeData__?t.__localeData__[e]:null;}return e;}function Ke(e,t){return _e(setMonth(ge(),e),\"LLLL\",t);}_c61=Ke;function He(e,t){return _e(setMonth(ge(),e),\"LLL\",t);}_c62=He;function Qe(e,t){return _e(setQuarter(ge(),e),\"QQQ\",t);}_c63=Qe;function Ve(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.minDate,n=t.maxDate,o=t.excludeDates,a=t.includeDates,s=t.filterDate;return Je(e,{minDate:r,maxDate:n})||o&&o.some(function(t){return Ie(e,t);})||a&&!a.some(function(t){return Ie(e,t);})||s&&!s(ge(e))||!1;}_c64=Ve;function qe(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.excludeDates;return r&&r.some(function(t){return Ie(e,t);})||!1;}function Ue(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.minDate,n=t.maxDate,o=t.excludeDates,a=t.includeDates,s=t.filterDate;return Je(e,{minDate:r,maxDate:n})||o&&o.some(function(t){return Te(e,t);})||a&&!a.some(function(t){return Te(e,t);})||s&&!s(ge(e))||!1;}_c65=Ue;function $e(e,t,r,n){var o=getYear(e),a=getMonth(e),s=getYear(t),p=getMonth(t),i=getYear(n);return o===s&&o===i?a<=r&&r<=p:o=r||io:void 0;}function ze(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.minDate,n=t.maxDate,o=t.excludeDates,a=t.includeDates,s=t.filterDate;return Je(e,{minDate:r,maxDate:n})||o&&o.some(function(t){return Le(e,t);})||a&&!a.some(function(t){return Le(e,t);})||s&&!s(ge(e))||!1;}function Ge(e,t,r,n){var o=getYear(e),a=getQuarter(e),s=getYear(t),p=getQuarter(t),i=getYear(n);return o===s&&o===i?a<=r&&r<=p:o=r||io:void 0;}_c66=Ge;function Je(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.minDate,n=t.maxDate;return r&&differenceInCalendarDays(e,r)<0||n&&differenceInCalendarDays(e,n)>0;}_c67=Je;function Xe(e,t){for(var r=t.length,n=0;n1&&void 0!==arguments[1]?arguments[1]:{},r=t.minDate,n=t.includeDates,o=subMonths(e,1);return r&&differenceInCalendarMonths(r,o)>0||n&&n.every(function(e){return differenceInCalendarMonths(e,o)>0;})||!1;}function tt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.maxDate,n=t.includeDates,o=addMonths(e,1);return r&&differenceInCalendarMonths(o,r)>0||n&&n.every(function(e){return differenceInCalendarMonths(o,e)>0;})||!1;}function rt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.minDate,n=t.includeDates,o=subYears(e,1);return r&&differenceInCalendarYears(r,o)>0||n&&n.every(function(e){return differenceInCalendarYears(e,o)>0;})||!1;}function nt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.maxDate,n=t.includeDates,o=addYears(e,1);return r&&differenceInCalendarYears(o,r)>0||n&&n.every(function(e){return differenceInCalendarYears(o,e)>0;})||!1;}function ot(e){var t=e.minDate,r=e.includeDates;if(r&&t){var n=r.filter(function(e){return differenceInCalendarDays(e,t)>=0;});return min(n);}return r?min(r):t;}function at(e){var t=e.maxDate,r=e.includeDates;if(r&&t){var n=r.filter(function(e){return differenceInCalendarDays(e,t)<=0;});return max(n);}return r?max(r):t;}function st(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"react-datepicker__day--highlighted\",n=new Map(),o=0,a=e.length;o=s),p&&o.push(s);}return o;}var lt=onClickOutsideHOC(function(r){de(o,React__default.Component);var n=ve(o);function o(t){var r;oe(this,o),pe(me(r=n.call(this,t)),\"renderOptions\",function(){var t=r.props.year,n=r.state.yearsList.map(function(n){return React__default.createElement(\"div\",{className:t===n?\"react-datepicker__year-option react-datepicker__year-option--selected_year\":\"react-datepicker__year-option\",key:n,onClick:r.onChange.bind(me(r),n)},t===n?React__default.createElement(\"span\",{className:\"react-datepicker__year-option--selected\"},\"✓\"):\"\",n);}),o=r.props.minDate?getYear(r.props.minDate):null,a=r.props.maxDate?getYear(r.props.maxDate):null;return a&&r.state.yearsList.find(function(e){return e===a;})||n.unshift(React__default.createElement(\"div\",{className:\"react-datepicker__year-option\",key:\"upcoming\",onClick:r.incrementYears},React__default.createElement(\"a\",{className:\"react-datepicker__navigation react-datepicker__navigation--years react-datepicker__navigation--years-upcoming\"}))),o&&r.state.yearsList.find(function(e){return e===o;})||n.push(React__default.createElement(\"div\",{className:\"react-datepicker__year-option\",key:\"previous\",onClick:r.decrementYears},React__default.createElement(\"a\",{className:\"react-datepicker__navigation react-datepicker__navigation--years react-datepicker__navigation--years-previous\"}))),n;}),pe(me(r),\"onChange\",function(e){r.props.onChange(e);}),pe(me(r),\"handleClickOutside\",function(){r.props.onCancel();}),pe(me(r),\"shiftYears\",function(e){var t=r.state.yearsList.map(function(t){return t+e;});r.setState({yearsList:t});}),pe(me(r),\"incrementYears\",function(){return r.shiftYears(1);}),pe(me(r),\"decrementYears\",function(){return r.shiftYears(-1);});var a=t.yearDropdownItemNumber,s=t.scrollableYearDropdown,p=a||(s?10:5);return r.state={yearsList:ct(r.props.year,p,r.props.minDate,r.props.maxDate)},r;}return se(o,[{key:\"render\",value:function value(){var r=classnames({\"react-datepicker__year-dropdown\":!0,\"react-datepicker__year-dropdown--scrollable\":this.props.scrollableYearDropdown});return React__default.createElement(\"div\",{className:r},this.renderOptions());}}]),o;}()),dt=function(t){de(n,React__default.Component);var r=ve(n);function n(){var t;oe(this,n);for(var o=arguments.length,a=new Array(o),s=0;s0&&void 0!==arguments[0]?arguments[0]:{},t=!1;0===r.getTabIndex()&&!e.isInputFocused&&r.isSameDay(r.props.preSelection)&&(document.activeElement&&document.activeElement!==document.body||(t=!0),r.props.containerRef&&r.props.containerRef.current&&r.props.containerRef.current.contains(document.activeElement)&&document.activeElement.classList.contains(\"react-datepicker__day\")&&(t=!0)),t&&r.dayEl.current.focus();}),pe(me(r),\"render\",function(){return React__default.createElement(\"div\",{ref:r.dayEl,className:r.getClassNames(r.props.day),onKeyDown:r.handleOnKeyDown,onClick:r.handleClick,onMouseEnter:r.handleMouseEnter,tabIndex:r.getTabIndex(),\"aria-label\":r.getAriaLabel(),role:\"button\",\"aria-disabled\":r.isDisabled()},r.props.renderDayContents?r.props.renderDayContents(getDate(r.props.day),r.props.day):getDate(r.props.day));}),r;}return se(o,[{key:\"componentDidMount\",value:function value(){this.handleFocusDay();}},{key:\"componentDidUpdate\",value:function value(e){this.handleFocusDay(e);}}]),o;}(),Dt=function(r){de(o,React__default.Component);var n=ve(o);function o(){var e;oe(this,o);for(var t=arguments.length,r=new Array(t),a=0;a=6,c=!n&&!r.isWeekInMonth(o);if(p||c){if(!r.props.peekNextMonth)break;s=!0;}}return t;}),pe(me(r),\"onMonthClick\",function(e,t){r.handleDayClick(Oe(setMonth(r.props.day,t)),e);}),pe(me(r),\"onQuarterClick\",function(e,t){r.handleDayClick(xe(setQuarter(r.props.day,t)),e);}),pe(me(r),\"getMonthClassNames\",function(e){var n=r.props,o=n.day,a=n.startDate,s=n.endDate,p=n.selected,i=n.minDate,c=n.maxDate;return classnames(\"react-datepicker__month-text\",\"react-datepicker__month-\".concat(e),{\"react-datepicker__month--disabled\":(i||c)&&Ue(setMonth(o,e),r.props),\"react-datepicker__month--selected\":getMonth(o)===e&&getYear(o)===getYear(p),\"react-datepicker__month--in-range\":$e(a,s,e,o),\"react-datepicker__month--range-start\":r.isRangeStartMonth(e),\"react-datepicker__month--range-end\":r.isRangeEndMonth(e)});}),pe(me(r),\"getQuarterClassNames\",function(e){var n=r.props,o=n.day,a=n.startDate,s=n.endDate,p=n.selected,i=n.minDate,c=n.maxDate;return classnames(\"react-datepicker__quarter-text\",\"react-datepicker__quarter-\".concat(e),{\"react-datepicker__quarter--disabled\":(i||c)&&ze(setQuarter(o,e),r.props),\"react-datepicker__quarter--selected\":getQuarter(o)===e&&getYear(o)===getYear(p),\"react-datepicker__quarter--in-range\":Ge(a,s,e,o),\"react-datepicker__quarter--range-start\":r.isRangeStartQuarter(e),\"react-datepicker__quarter--range-end\":r.isRangeEndQuarter(e)});}),pe(me(r),\"renderMonths\",function(){var t=r.props,n=t.showFullMonthYearPicker,o=t.locale;return[[0,1,2],[3,4,5],[6,7,8],[9,10,11]].map(function(t,a){return React__default.createElement(\"div\",{className:\"react-datepicker__month-wrapper\",key:a},t.map(function(t,a){return React__default.createElement(\"div\",{key:a,onClick:function onClick(e){r.onMonthClick(e,t);},className:r.getMonthClassNames(t)},n?Ke(t,o):He(t,o));}));});}),pe(me(r),\"renderQuarters\",function(){return React__default.createElement(\"div\",{className:\"react-datepicker__quarter-wrapper\"},[1,2,3,4].map(function(t,n){return React__default.createElement(\"div\",{key:n,onClick:function onClick(e){r.onQuarterClick(e,t);},className:r.getQuarterClassNames(t)},Qe(t,r.props.locale));}));}),pe(me(r),\"getClassNames\",function(){var e=r.props,n=e.selectingDate,o=e.selectsStart,a=e.selectsEnd,s=e.showMonthYearPicker,p=e.showQuarterYearPicker;return classnames(\"react-datepicker__month\",{\"react-datepicker__month--selecting-range\":n&&(o||a)},{\"react-datepicker__monthPicker\":s},{\"react-datepicker__quarterPicker\":p});}),r;}return se(o,[{key:\"render\",value:function value(){var t=this.props,r=t.showMonthYearPicker,n=t.showQuarterYearPicker,o=t.day,a=t.ariaLabelPrefix,s=void 0===a?\"month \":a;return React__default.createElement(\"div\",{className:this.getClassNames(),onMouseLeave:this.handleMouseLeave,\"aria-label\":\"\".concat(s,\" \").concat(_e(o,\"yyyy-MM\"))},r?this.renderMonths():n?this.renderQuarters():this.renderWeeks());}}]),o;}(),gt=function(t){de(n,React__default.Component);var r=ve(n);function n(){var t;oe(this,n);for(var o=arguments.length,s=new Array(o),p=0;p=getMinutes(r)&&(t.centerLi=e);}},_e(r,n,t.props.locale));});}),t;}return se(n,[{key:\"componentDidMount\",value:function value(){this.list.scrollTop=n.calcCenterPosition(this.props.monthRef?this.props.monthRef.clientHeight-this.header.clientHeight:this.list.clientHeight,this.centerLi),this.props.monthRef&&this.header&&this.setState({height:this.props.monthRef.clientHeight-this.header.clientHeight});}},{key:\"render\",value:function value(){var t=this,r=this.state.height;return React__default.createElement(\"div\",{className:\"react-datepicker__time-container \".concat(this.props.todayButton?\"react-datepicker__time-container--with-today-button\":\"\")},React__default.createElement(\"div\",{className:\"react-datepicker__header react-datepicker__header--time\",ref:function ref(e){t.header=e;}},React__default.createElement(\"div\",{className:\"react-datepicker-time__header\"},this.props.timeCaption)),React__default.createElement(\"div\",{className:\"react-datepicker__time\"},React__default.createElement(\"div\",{className:\"react-datepicker__time-box\"},React__default.createElement(\"ul\",{className:\"react-datepicker__time-list\",ref:function ref(e){t.list=e;},style:r?{height:r}:{}},this.renderTimes()))));}}],[{key:\"defaultProps\",get:function get(){return{intervals:30,onTimeChange:function onTimeChange(){},todayButton:null,timeCaption:\"Time\"};}}]),n;}();pe(gt,\"calcCenterPosition\",function(e,t){return t.offsetTop-(e/2-t.clientHeight/2);});var bt=function(t){de(n,React__default.Component);var r=ve(n);function n(e){var t;return oe(this,n),pe(me(t=r.call(this,e)),\"handleYearClick\",function(e,r){t.props.onDayClick&&t.props.onDayClick(e,r);}),pe(me(t),\"onYearClick\",function(e,r){var n;t.handleYearClick((n=setYear(t.props.date,r),startOfYear(n)),e);}),t;}return se(n,[{key:\"render\",value:function value(){for(var t=this,r=[],n=this.props.date,o=function o(n,_o){r.push(React__default.createElement(\"div\",{onClick:function onClick(e){t.onYearClick(e,n);},className:\"react-datepicker__year-container-text\",key:n},n));},a=getYear(n)-11,s=0;a<=getYear(n);a++,s++){o(a);}return React__default.createElement(\"div\",{className:\"react-datepicker__year-container\"},r);}}]),n;}(),Ct=function(t){de(n,React__default.Component);var r=ve(n);function n(t){var o;return oe(this,n),pe(me(o=r.call(this,t)),\"onTimeChange\",function(e){o.setState({time:e});var t=new Date();t.setHours(e.split(\":\")[0]),t.setMinutes(e.split(\":\")[1]),o.props.onChange(t);}),pe(me(o),\"renderTimeInput\",function(){var t=o.state.time,r=o.props,n=r.timeString,a=r.customTimeInput;return a?React__default.cloneElement(a,{value:t,onChange:o.onTimeChange}):React__default.createElement(\"input\",{type:\"time\",className:\"react-datepicker-time__input\",placeholder:\"Time\",name:\"time-input\",required:!0,value:t,onChange:function onChange(e){o.onTimeChange(e.target.value||n);}});}),o.state={time:o.props.timeString},o;}return se(n,[{key:\"render\",value:function value(){return React__default.createElement(\"div\",{className:\"react-datepicker__input-time-container\"},React__default.createElement(\"div\",{className:\"react-datepicker-time__caption\"},this.props.timeInputLabel),React__default.createElement(\"div\",{className:\"react-datepicker-time__input-container\"},React__default.createElement(\"div\",{className:\"react-datepicker-time__input\"},this.renderTimeInput())));}}]),n;}();function _t(t){var r=t.className,n=t.children,o=t.showPopperArrow,a=t.arrowProps,s=void 0===a?{}:a;return React__default.createElement(\"div\",{className:r},o&&React__default.createElement(\"div\",ie({className:\"react-datepicker__triangle\"},s)),n);}var St=[\"react-datepicker__year-select\",\"react-datepicker__month-select\",\"react-datepicker__month-year-select\"],Mt=function(r){de(o,React__default.Component);var n=ve(o);function o(r){var a;return oe(this,o),pe(me(a=n.call(this,r)),\"handleClickOutside\",function(e){a.props.onClickOutside(e);}),pe(me(a),\"setClickOutsideRef\",function(){return a.containerRef.current;}),pe(me(a),\"handleDropdownFocus\",function(e){(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=(e.className||\"\").split(/\\s+/);return St.some(function(e){return t.indexOf(e)>=0;});})(e.target)&&a.props.onDropdownFocus();}),pe(me(a),\"getDateInView\",function(){var e=a.props,t=e.preSelection,r=e.selected,n=e.openToDate,o=ot(a.props),s=at(a.props),p=ge(),i=n||r||t;return i||(o&&isBefore(p,o)?o:s&&isAfter(p,s)?s:p);}),pe(me(a),\"increaseMonth\",function(){a.setState(function(e){var t=e.date;return{date:addMonths(t,1)};},function(){return a.handleMonthChange(a.state.date);});}),pe(me(a),\"decreaseMonth\",function(){a.setState(function(e){var t=e.date;return{date:subMonths(t,1)};},function(){return a.handleMonthChange(a.state.date);});}),pe(me(a),\"handleDayClick\",function(e,t,r){return a.props.onSelect(e,t,r);}),pe(me(a),\"handleDayMouseEnter\",function(e){a.setState({selectingDate:e}),a.props.onDayMouseEnter&&a.props.onDayMouseEnter(e);}),pe(me(a),\"handleMonthMouseLeave\",function(){a.setState({selectingDate:null}),a.props.onMonthMouseLeave&&a.props.onMonthMouseLeave();}),pe(me(a),\"handleYearChange\",function(e){a.props.onYearChange&&a.props.onYearChange(e);}),pe(me(a),\"handleMonthChange\",function(e){a.props.onMonthChange&&a.props.onMonthChange(e),a.props.adjustDateOnChange&&(a.props.onSelect&&a.props.onSelect(e),a.props.setOpen&&a.props.setOpen(!0)),a.props.setPreSelection&&a.props.setPreSelection(e);}),pe(me(a),\"handleMonthYearChange\",function(e){a.handleYearChange(e),a.handleMonthChange(e);}),pe(me(a),\"changeYear\",function(e){a.setState(function(t){var r=t.date;return{date:setYear(r,e)};},function(){return a.handleYearChange(a.state.date);});}),pe(me(a),\"changeMonth\",function(e){a.setState(function(t){var r=t.date;return{date:setMonth(r,e)};},function(){return a.handleMonthChange(a.state.date);});}),pe(me(a),\"changeMonthYear\",function(e){a.setState(function(t){var r=t.date;return{date:setYear(setMonth(r,getMonth(e)),getYear(e))};},function(){return a.handleMonthYearChange(a.state.date);});}),pe(me(a),\"header\",function(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:a.state.date,n=Ne(r,a.props.locale),o=[];return a.props.showWeekNumbers&&o.push(React__default.createElement(\"div\",{key:\"W\",className:\"react-datepicker__day-name\"},a.props.weekLabel||\"#\")),o.concat([0,1,2,3,4,5,6].map(function(r){var o=addDays(n,r),s=a.formatWeekday(o,a.props.locale),i=a.props.weekDayClassName?a.props.weekDayClassName(o):void 0;return React__default.createElement(\"div\",{key:r,className:classnames(\"react-datepicker__day-name\",i)},s);}));}),pe(me(a),\"formatWeekday\",function(e,t){return a.props.formatWeekDay?function(e,t,r){return t(_e(e,\"EEEE\",r));}(e,a.props.formatWeekDay,t):a.props.useWeekdaysShort?function(e,t){return _e(e,\"EEE\",t);}(e,t):function(e,t){return _e(e,\"EEEEEE\",t);}(e,t);}),pe(me(a),\"decreaseYear\",function(){a.setState(function(e){var t=e.date;return{date:subYears(t,a.props.showYearPicker?11:1)};},function(){return a.handleYearChange(a.state.date);});}),pe(me(a),\"renderPreviousButton\",function(){if(!a.props.renderCustomHeader){var t=a.props.showMonthYearPicker?rt(a.state.date,a.props):et(a.state.date,a.props);if((a.props.forceShowMonthNavigation||a.props.showDisabledMonthNavigation||!t)&&!a.props.showTimeSelectOnly){var r=[\"react-datepicker__navigation\",\"react-datepicker__navigation--previous\"],n=a.decreaseMonth;(a.props.showMonthYearPicker||a.props.showQuarterYearPicker||a.props.showYearPicker)&&(n=a.decreaseYear),t&&a.props.showDisabledMonthNavigation&&(r.push(\"react-datepicker__navigation--previous--disabled\"),n=null);var o=a.props.showMonthYearPicker||a.props.showQuarterYearPicker,s=a.props,p=s.previousMonthAriaLabel,i=void 0===p?\"Previous Month\":p,c=s.previousYearAriaLabel,l=void 0===c?\"Previous Year\":c;return React__default.createElement(\"button\",{type:\"button\",className:r.join(\" \"),onClick:n,\"aria-label\":o?l:i},o?a.props.previousYearButtonLabel:a.props.previousMonthButtonLabel);}}}),pe(me(a),\"increaseYear\",function(){a.setState(function(e){var t=e.date;return{date:addYears(t,a.props.showYearPicker?11:1)};},function(){return a.handleYearChange(a.state.date);});}),pe(me(a),\"renderNextButton\",function(){if(!a.props.renderCustomHeader){var t=a.props.showMonthYearPicker?nt(a.state.date,a.props):tt(a.state.date,a.props);if((a.props.forceShowMonthNavigation||a.props.showDisabledMonthNavigation||!t)&&!a.props.showTimeSelectOnly){var r=[\"react-datepicker__navigation\",\"react-datepicker__navigation--next\"];a.props.showTimeSelect&&r.push(\"react-datepicker__navigation--next--with-time\"),a.props.todayButton&&r.push(\"react-datepicker__navigation--next--with-today-button\");var n=a.increaseMonth;(a.props.showMonthYearPicker||a.props.showQuarterYearPicker||a.props.showYearPicker)&&(n=a.increaseYear),t&&a.props.showDisabledMonthNavigation&&(r.push(\"react-datepicker__navigation--next--disabled\"),n=null);var o=a.props.showMonthYearPicker||a.props.showQuarterYearPicker,s=a.props,p=s.nextMonthAriaLabel,i=void 0===p?\"Next Month\":p,c=s.nextYearAriaLabel,l=void 0===c?\"Next Year\":c;return React__default.createElement(\"button\",{type:\"button\",className:r.join(\" \"),onClick:n,\"aria-label\":o?l:i},o?a.props.nextYearButtonLabel:a.props.nextMonthButtonLabel);}}}),pe(me(a),\"renderCurrentMonth\",function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:a.state.date,r=[\"react-datepicker__current-month\"];return a.props.showYearDropdown&&r.push(\"react-datepicker__current-month--hasYearDropdown\"),a.props.showMonthDropdown&&r.push(\"react-datepicker__current-month--hasMonthDropdown\"),a.props.showMonthYearDropdown&&r.push(\"react-datepicker__current-month--hasMonthYearDropdown\"),React__default.createElement(\"div\",{className:r.join(\" \")},_e(t,a.props.dateFormat,a.props.locale));}),pe(me(a),\"renderYearDropdown\",function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(a.props.showYearDropdown&&!t)return React__default.createElement(dt,{adjustDateOnChange:a.props.adjustDateOnChange,date:a.state.date,onSelect:a.props.onSelect,setOpen:a.props.setOpen,dropdownMode:a.props.dropdownMode,onChange:a.changeYear,minDate:a.props.minDate,maxDate:a.props.maxDate,year:getYear(a.state.date),scrollableYearDropdown:a.props.scrollableYearDropdown,yearDropdownItemNumber:a.props.yearDropdownItemNumber});}),pe(me(a),\"renderMonthDropdown\",function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(a.props.showMonthDropdown&&!t)return React__default.createElement(ht,{dropdownMode:a.props.dropdownMode,locale:a.props.locale,onChange:a.changeMonth,month:getMonth(a.state.date),useShortMonthInDropdown:a.props.useShortMonthInDropdown});}),pe(me(a),\"renderMonthYearDropdown\",function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(a.props.showMonthYearDropdown&&!t)return React__default.createElement(vt,{dropdownMode:a.props.dropdownMode,locale:a.props.locale,dateFormat:a.props.dateFormat,onChange:a.changeMonthYear,minDate:a.props.minDate,maxDate:a.props.maxDate,date:a.state.date,scrollableMonthYearDropdown:a.props.scrollableMonthYearDropdown});}),pe(me(a),\"renderTodayButton\",function(){if(a.props.todayButton&&!a.props.showTimeSelectOnly)return React__default.createElement(\"div\",{className:\"react-datepicker__today-button\",onClick:function onClick(e){return a.props.onSelect(startOfDay(ge()),e);}},a.props.todayButton);}),pe(me(a),\"renderDefaultHeader\",function(t){var r=t.monthDate,n=t.i;return React__default.createElement(\"div\",{className:\"react-datepicker__header\"},a.renderCurrentMonth(r),React__default.createElement(\"div\",{className:\"react-datepicker__header__dropdown react-datepicker__header__dropdown--\".concat(a.props.dropdownMode),onFocus:a.handleDropdownFocus},a.renderMonthDropdown(0!==n),a.renderMonthYearDropdown(0!==n),a.renderYearDropdown(0!==n)),React__default.createElement(\"div\",{className:\"react-datepicker__day-names\"},a.header(r)));}),pe(me(a),\"renderCustomHeader\",function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=t.monthDate,n=t.i;if(0!==n&&void 0!==n)return null;var o=et(a.state.date,a.props),s=tt(a.state.date,a.props),p=rt(a.state.date,a.props),i=nt(a.state.date,a.props),c=!a.props.showMonthYearPicker&&!a.props.showQuarterYearPicker&&!a.props.showYearPicker;return React__default.createElement(\"div\",{className:\"react-datepicker__header react-datepicker__header--custom\",onFocus:a.props.onDropdownFocus},a.props.renderCustomHeader(le(le({},a.state),{},{changeMonth:a.changeMonth,changeYear:a.changeYear,decreaseMonth:a.decreaseMonth,increaseMonth:a.increaseMonth,decreaseYear:a.decreaseYear,increaseYear:a.increaseYear,prevMonthButtonDisabled:o,nextMonthButtonDisabled:s,prevYearButtonDisabled:p,nextYearButtonDisabled:i})),c&&React__default.createElement(\"div\",{className:\"react-datepicker__day-names\"},a.header(r)));}),pe(me(a),\"renderYearHeader\",function(){return React__default.createElement(\"div\",{className:\"react-datepicker__header react-datepicker-year-header\"},a.props.showYearPicker?\"\".concat(getYear(a.state.date)-11,\" - \").concat(getYear(a.state.date)):getYear(a.state.date));}),pe(me(a),\"renderHeader\",function(e){switch(!0){case void 0!==a.props.renderCustomHeader:return a.renderCustomHeader(e);case a.props.showMonthYearPicker||a.props.showQuarterYearPicker||a.props.showYearPicker:return a.renderYearHeader(e);default:return a.renderDefaultHeader(e);}}),pe(me(a),\"renderMonths\",function(){if(!a.props.showTimeSelectOnly&&!a.props.showYearPicker){for(var t=[],r=a.props.showPreviousMonths?a.props.monthsShown-1:0,n=subMonths(a.state.date,r),o=0;o1&&t[t.length-1].focus();}),pe(me(o),\"handleFocusEnd\",function(e){var t=o.getTabChildren();t&&t.length>1&&t[0].focus();}),o.tabLoopRef=React__default.createRef(),o;}return se(n,null,[{key:\"defaultProps\",get:function get(){return{enableTabLoop:!0};}}]),se(n,[{key:\"render\",value:function value(){return this.props.enableTabLoop?React__default.createElement(\"div\",{className:\"react-datepicker__tab-loop\",ref:this.tabLoopRef},React__default.createElement(\"div\",{className:\"react-datepicker__tab-loop__start\",tabIndex:\"0\",onFocus:this.handleFocusStart}),this.props.children,React__default.createElement(\"div\",{className:\"react-datepicker__tab-loop__end\",tabIndex:\"0\",onFocus:this.handleFocusEnd})):this.props.children;}}]),n;}(),Nt=function(r){de(o,React__default.Component);var n=ve(o);function o(){return oe(this,o),n.apply(this,arguments);}return se(o,[{key:\"render\",value:function value(){var r,n=this.props,o=n.className,a=n.wrapperClassName,s=n.hidePopper,p=n.popperComponent,i=n.popperModifiers,c=n.popperPlacement,l=n.popperProps,d=n.targetComponent,u=n.enableTabLoop,h=n.popperOnKeyDown;if(!s){var m=classnames(\"react-datepicker-popper\",o);r=React__default.createElement(Popper$1,ie({modifiers:i,placement:c},l),function(t){var r=t.ref,n=t.style,o=t.placement,a=t.arrowProps;return React__default.createElement(Et,{enableTabLoop:u},React__default.createElement(\"div\",ie({ref:r,style:n},{className:m,\"data-placement\":o,onKeyDown:h}),React__default.cloneElement(p,{arrowProps:a})));});}this.props.popperContainer&&(r=React__default.createElement(this.props.popperContainer,{},r));var f=classnames(\"react-datepicker-wrapper\",a);return React__default.createElement(Manager,{className:\"react-datepicker-manager\"},React__default.createElement(Reference,null,function(t){var r=t.ref;return React__default.createElement(\"div\",{ref:r,className:f},d);}),r);}}],[{key:\"defaultProps\",get:function get(){return{hidePopper:!0,popperModifiers:{preventOverflow:{enabled:!0,escapeWithReference:!0,boundariesElement:\"viewport\"}},popperProps:{},popperPlacement:\"bottom-start\"};}}]),o;}(),Ot=onClickOutsideHOC(Mt);var xt=function(n){de(a,React__default.Component);var o=ve(a);function a(n){var s;return oe(this,a),pe(me(s=o.call(this,n)),\"getPreSelection\",function(){return s.props.openToDate?s.props.openToDate:s.props.selectsEnd&&s.props.startDate?s.props.startDate:s.props.selectsStart&&s.props.endDate?s.props.endDate:ge();}),pe(me(s),\"calcInitialState\",function(){var e=s.getPreSelection(),t=ot(s.props),r=at(s.props),n=t&&isBefore(e,t)?t:r&&isAfter(e,r)?r:e;return{open:s.props.startOpen||!1,preventFocus:!1,preSelection:s.props.selected?s.props.selected:n,highlightDates:st(s.props.highlightDates),focused:!1};}),pe(me(s),\"clearPreventFocusTimeout\",function(){s.preventFocusTimeout&&clearTimeout(s.preventFocusTimeout);}),pe(me(s),\"setFocus\",function(){s.input&&s.input.focus&&s.input.focus();}),pe(me(s),\"setBlur\",function(){s.input&&s.input.blur&&s.input.blur(),s.cancelFocusInput();}),pe(me(s),\"setOpen\",function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];s.setState({open:e,preSelection:e&&s.state.open?s.state.preSelection:s.calcInitialState().preSelection,lastPreSelectChange:Tt},function(){e||s.setState(function(e){return{focused:!!t&&e.focused};},function(){!t&&s.setBlur(),s.setState({inputValue:null});});});}),pe(me(s),\"inputOk\",function(){return isDate(s.state.preSelection);}),pe(me(s),\"isCalendarOpen\",function(){return void 0===s.props.open?s.state.open&&!s.props.disabled&&!s.props.readOnly:s.props.open;}),pe(me(s),\"handleFocus\",function(e){s.state.preventFocus||(s.props.onFocus(e),s.props.preventOpenOnFocus||s.props.readOnly||s.setOpen(!0)),s.setState({focused:!0});}),pe(me(s),\"cancelFocusInput\",function(){clearTimeout(s.inputFocusTimeout),s.inputFocusTimeout=null;}),pe(me(s),\"deferFocusInput\",function(){s.cancelFocusInput(),s.inputFocusTimeout=setTimeout(function(){return s.setFocus();},1);}),pe(me(s),\"handleDropdownFocus\",function(){s.cancelFocusInput();}),pe(me(s),\"handleBlur\",function(e){(!s.state.open||s.props.withPortal||s.props.showTimeInput)&&s.props.onBlur(e),s.setState({focused:!1});}),pe(me(s),\"handleCalendarClickOutside\",function(e){s.props.inline||s.setOpen(!1),s.props.onClickOutside(e),s.props.withPortal&&e.preventDefault();}),pe(me(s),\"handleChange\",function(){for(var e=arguments.length,t=new Array(e),r=0;r1&&!s.props.inlineFocusSelectedMonth&&s.setState({monthSelectedIn:n})),s.props.onChange(o,t)),s.props.onSelect(o,t),r||s.setState({inputValue:null}));}),pe(me(s),\"setPreSelection\",function(e){var t=void 0!==s.props.minDate,r=void 0!==s.props.maxDate,n=!0;e&&(t&&r?n=Re(e,s.props.minDate,s.props.maxDate):t?n=isAfter(e,s.props.minDate):r&&(n=isBefore(e,s.props.maxDate))),n&&s.setState({preSelection:e});}),pe(me(s),\"handleTimeChange\",function(e){var t=Se(s.props.selected?s.props.selected:s.getPreSelection(),{hour:getHours(e),minute:getMinutes(e)});s.setState({preSelection:t}),s.props.onChange(t),s.props.shouldCloseOnSelect&&s.setOpen(!1),s.props.showTimeInput&&s.setOpen(!0),s.setState({inputValue:null});}),pe(me(s),\"onInputClick\",function(){s.props.disabled||s.props.readOnly||s.setOpen(!0),s.props.onInputClick();}),pe(me(s),\"onInputKeyDown\",function(e){s.props.onKeyDown(e);var t=e.key;if(s.state.open||s.props.inline||s.props.preventOpenOnFocus){if(s.state.open){if(\"ArrowDown\"===t||\"ArrowUp\"===t){e.preventDefault();var r=s.calendar.componentNode&&s.calendar.componentNode.querySelector('.react-datepicker__day[tabindex=\"0\"]');return void(r&&r.focus());}var n=ge(s.state.preSelection);\"Enter\"===t?(e.preventDefault(),s.inputOk()&&s.state.lastPreSelectChange===Tt?(s.handleSelect(n,e),!s.props.shouldCloseOnSelect&&s.setPreSelection(n)):s.setOpen(!1)):\"Escape\"===t&&(e.preventDefault(),s.setOpen(!1)),s.inputOk()||s.props.onInputError({code:1,msg:\"Date input not valid.\"});}}else\"ArrowDown\"!==t&&\"ArrowUp\"!==t&&\"Enter\"!==t||s.onInputClick();}),pe(me(s),\"onDayKeyDown\",function(e){s.props.onKeyDown(e);var t=e.key,r=ge(s.state.preSelection);if(\"Enter\"===t)e.preventDefault(),s.handleSelect(r,e),!s.props.shouldCloseOnSelect&&s.setPreSelection(r);else if(\"Escape\"===t)e.preventDefault(),s.setOpen(!1),s.inputOk()||s.props.onInputError({code:1,msg:\"Date input not valid.\"});else if(!s.props.disabledKeyboardNavigation){var n;switch(t){case\"ArrowLeft\":n=subDays(r,1);break;case\"ArrowRight\":n=addDays(r,1);break;case\"ArrowUp\":n=subWeeks(r,1);break;case\"ArrowDown\":n=addWeeks(r,1);break;case\"PageUp\":n=subMonths(r,1);break;case\"PageDown\":n=addMonths(r,1);break;case\"Home\":n=subYears(r,1);break;case\"End\":n=addYears(r,1);}if(!n)return void(s.props.onInputError&&s.props.onInputError({code:1,msg:\"Date input not valid.\"}));e.preventDefault(),s.setState({lastPreSelectChange:Tt}),s.props.adjustDateOnChange&&s.setSelected(n),s.setPreSelection(n);}}),pe(me(s),\"onPopperKeyDown\",function(e){\"Escape\"===e.key&&(e.preventDefault(),s.setState({preventFocus:!0},function(){s.setOpen(!1),setTimeout(function(){s.setFocus(),s.setState({preventFocus:!1});});}));}),pe(me(s),\"onClearClick\",function(e){e&&e.preventDefault&&e.preventDefault(),s.props.onChange(null,e),s.setState({inputValue:null});}),pe(me(s),\"clear\",function(){s.onClearClick();}),pe(me(s),\"renderCalendar\",function(){return s.props.inline||s.isCalendarOpen()?React__default.createElement(Ot,{ref:function ref(e){s.calendar=e;},locale:s.props.locale,chooseDayAriaLabelPrefix:s.props.chooseDayAriaLabelPrefix,disabledDayAriaLabelPrefix:s.props.disabledDayAriaLabelPrefix,weekAriaLabelPrefix:s.props.weekAriaLabelPrefix,adjustDateOnChange:s.props.adjustDateOnChange,setOpen:s.setOpen,shouldCloseOnSelect:s.props.shouldCloseOnSelect,dateFormat:s.props.dateFormatCalendar,useWeekdaysShort:s.props.useWeekdaysShort,formatWeekDay:s.props.formatWeekDay,dropdownMode:s.props.dropdownMode,selected:s.props.selected,preSelection:s.state.preSelection,onSelect:s.handleSelect,onWeekSelect:s.props.onWeekSelect,openToDate:s.props.openToDate,minDate:s.props.minDate,maxDate:s.props.maxDate,selectsStart:s.props.selectsStart,selectsEnd:s.props.selectsEnd,startDate:s.props.startDate,endDate:s.props.endDate,excludeDates:s.props.excludeDates,filterDate:s.props.filterDate,onClickOutside:s.handleCalendarClickOutside,formatWeekNumber:s.props.formatWeekNumber,highlightDates:s.state.highlightDates,includeDates:s.props.includeDates,includeTimes:s.props.includeTimes,injectTimes:s.props.injectTimes,inline:s.props.inline,peekNextMonth:s.props.peekNextMonth,showMonthDropdown:s.props.showMonthDropdown,showPreviousMonths:s.props.showPreviousMonths,useShortMonthInDropdown:s.props.useShortMonthInDropdown,showMonthYearDropdown:s.props.showMonthYearDropdown,showWeekNumbers:s.props.showWeekNumbers,showYearDropdown:s.props.showYearDropdown,withPortal:s.props.withPortal,forceShowMonthNavigation:s.props.forceShowMonthNavigation,showDisabledMonthNavigation:s.props.showDisabledMonthNavigation,scrollableYearDropdown:s.props.scrollableYearDropdown,scrollableMonthYearDropdown:s.props.scrollableMonthYearDropdown,todayButton:s.props.todayButton,weekLabel:s.props.weekLabel,outsideClickIgnoreClass:\"react-datepicker-ignore-onclickoutside\",fixedHeight:s.props.fixedHeight,monthsShown:s.props.monthsShown,monthSelectedIn:s.state.monthSelectedIn,onDropdownFocus:s.handleDropdownFocus,onMonthChange:s.props.onMonthChange,onYearChange:s.props.onYearChange,dayClassName:s.props.dayClassName,weekDayClassName:s.props.weekDayClassName,monthClassName:s.props.monthClassName,timeClassName:s.props.timeClassName,showTimeSelect:s.props.showTimeSelect,showTimeSelectOnly:s.props.showTimeSelectOnly,onTimeChange:s.handleTimeChange,timeFormat:s.props.timeFormat,timeIntervals:s.props.timeIntervals,minTime:s.props.minTime,maxTime:s.props.maxTime,excludeTimes:s.props.excludeTimes,timeCaption:s.props.timeCaption,className:s.props.calendarClassName,container:s.props.calendarContainer,yearDropdownItemNumber:s.props.yearDropdownItemNumber,previousMonthButtonLabel:s.props.previousMonthButtonLabel,nextMonthButtonLabel:s.props.nextMonthButtonLabel,previousYearButtonLabel:s.props.previousYearButtonLabel,nextYearButtonLabel:s.props.nextYearButtonLabel,timeInputLabel:s.props.timeInputLabel,disabledKeyboardNavigation:s.props.disabledKeyboardNavigation,renderCustomHeader:s.props.renderCustomHeader,popperProps:s.props.popperProps,renderDayContents:s.props.renderDayContents,onDayMouseEnter:s.props.onDayMouseEnter,onMonthMouseLeave:s.props.onMonthMouseLeave,showTimeInput:s.props.showTimeInput,showMonthYearPicker:s.props.showMonthYearPicker,showFullMonthYearPicker:s.props.showFullMonthYearPicker,showYearPicker:s.props.showYearPicker,showQuarterYearPicker:s.props.showQuarterYearPicker,showPopperArrow:s.props.showPopperArrow,excludeScrollbar:s.props.excludeScrollbar,handleOnKeyDown:s.onDayKeyDown,isInputFocused:s.state.focused,customTimeInput:s.props.customTimeInput,setPreSelection:s.setPreSelection},s.props.children):null;}),pe(me(s),\"renderDateInput\",function(){var r,n,o,a,p,i=classnames(s.props.className,pe({},\"react-datepicker-ignore-onclickoutside\",s.state.open)),c=s.props.customInput||React__default.createElement(\"input\",{type:\"text\"}),l=s.props.customInputRef||\"ref\",d=\"string\"==typeof s.props.value?s.props.value:\"string\"==typeof s.state.inputValue?s.state.inputValue:(n=s.props.selected,o=s.props,a=o.dateFormat,p=o.locale,n&&_e(n,Array.isArray(a)?a[0]:a,p)||\"\");return React__default.cloneElement(c,(pe(r={},l,function(e){s.input=e;}),pe(r,\"value\",d),pe(r,\"onBlur\",s.handleBlur),pe(r,\"onChange\",s.handleChange),pe(r,\"onClick\",s.onInputClick),pe(r,\"onFocus\",s.handleFocus),pe(r,\"onKeyDown\",s.onInputKeyDown),pe(r,\"id\",s.props.id),pe(r,\"name\",s.props.name),pe(r,\"autoFocus\",s.props.autoFocus),pe(r,\"placeholder\",s.props.placeholderText),pe(r,\"disabled\",s.props.disabled),pe(r,\"autoComplete\",s.props.autoComplete),pe(r,\"className\",classnames(c.props.className,i)),pe(r,\"title\",s.props.title),pe(r,\"readOnly\",s.props.readOnly),pe(r,\"required\",s.props.required),pe(r,\"tabIndex\",s.props.tabIndex),pe(r,\"aria-labelledby\",s.props.ariaLabelledBy),r));}),pe(me(s),\"renderClearButton\",function(){var t=s.props,r=t.isClearable,n=t.selected,o=t.clearButtonTitle,a=t.ariaLabelClose,p=void 0===a?\"Close\":a;return r&&null!=n?React__default.createElement(\"button\",{type:\"button\",className:\"react-datepicker__close-icon\",\"aria-label\":p,onClick:s.onClearClick,title:o,tabIndex:-1}):null;}),s.state=s.calcInitialState(),s;}return se(a,null,[{key:\"defaultProps\",get:function get(){return{allowSameDay:!1,dateFormat:\"MM/dd/yyyy\",dateFormatCalendar:\"LLLL yyyy\",onChange:function onChange(){},disabled:!1,disabledKeyboardNavigation:!1,dropdownMode:\"scroll\",onFocus:function onFocus(){},onBlur:function onBlur(){},onKeyDown:function onKeyDown(){},onInputClick:function onInputClick(){},onSelect:function onSelect(){},onClickOutside:function onClickOutside(){},onMonthChange:function onMonthChange(){},onCalendarOpen:function onCalendarOpen(){},onCalendarClose:function onCalendarClose(){},preventOpenOnFocus:!1,onYearChange:function onYearChange(){},onInputError:function onInputError(){},monthsShown:1,readOnly:!1,withPortal:!1,shouldCloseOnSelect:!0,showTimeSelect:!1,showTimeInput:!1,showPreviousMonths:!1,showMonthYearPicker:!1,showFullMonthYearPicker:!1,showYearPicker:!1,showQuarterYearPicker:!1,strictParsing:!1,timeIntervals:30,timeCaption:\"Time\",previousMonthButtonLabel:\"Previous Month\",nextMonthButtonLabel:\"Next Month\",previousYearButtonLabel:\"Previous Year\",nextYearButtonLabel:\"Next Year\",timeInputLabel:\"Time\",enableTabLoop:!0,renderDayContents:function renderDayContents(e){return e;},inlineFocusSelectedMonth:!1,showPopperArrow:!0,excludeScrollbar:!0,customTimeInput:null};}}]),se(a,[{key:\"componentDidUpdate\",value:function value(e,t){var r,n;e.inline&&(r=e.selected,n=this.props.selected,r&&n?getMonth(r)!==getMonth(n)||getYear(r)!==getYear(n):r!==n)&&this.setPreSelection(this.props.selected),void 0!==this.state.monthSelectedIn&&e.monthsShown!==this.props.monthsShown&&this.setState({monthSelectedIn:0}),e.highlightDates!==this.props.highlightDates&&this.setState({highlightDates:st(this.props.highlightDates)}),t.focused||Fe(e.selected,this.props.selected)||this.setState({inputValue:null}),t.open!==this.state.open&&(!1===t.open&&!0===this.state.open&&this.props.onCalendarOpen(),!0===t.open&&!1===this.state.open&&this.props.onCalendarClose());}},{key:\"componentWillUnmount\",value:function value(){this.clearPreventFocusTimeout();}},{key:\"render\",value:function value(){var t=this.renderCalendar();return this.props.inline&&!this.props.withPortal?t:this.props.withPortal?React__default.createElement(\"div\",null,this.props.inline?null:React__default.createElement(\"div\",{className:\"react-datepicker__input-container\"},this.renderDateInput(),this.renderClearButton()),this.state.open||this.props.inline?React__default.createElement(\"div\",{className:\"react-datepicker__portal\"},t):null):React__default.createElement(Nt,{className:this.props.popperClassName,wrapperClassName:this.props.wrapperClassName,hidePopper:!this.isCalendarOpen(),popperModifiers:this.props.popperModifiers,targetComponent:React__default.createElement(\"div\",{className:\"react-datepicker__input-container\"},this.renderDateInput(),this.renderClearButton()),popperContainer:this.props.popperContainer,popperComponent:t,popperPlacement:this.props.popperPlacement,popperProps:this.props.popperProps,popperOnKeyDown:this.onPopperKeyDown,enableTabLoop:this.props.enableTabLoop});}}]),a;}(),Yt=\"input\",Tt=\"navigate\";var styles$s={\"d-none\":\"DatePicker-module__d-none\",\"d-inline\":\"DatePicker-module__d-inline\",\"d-inline-block\":\"DatePicker-module__d-inline-block\",\"d-block\":\"DatePicker-module__d-block\",\"d-table\":\"DatePicker-module__d-table\",\"d-table-row\":\"DatePicker-module__d-table-row\",\"d-table-cell\":\"DatePicker-module__d-table-cell\",\"d-flex\":\"DatePicker-module__d-flex\",\"d-inline-flex\":\"DatePicker-module__d-inline-flex\",\"d-sm-none\":\"DatePicker-module__d-sm-none\",\"d-sm-inline\":\"DatePicker-module__d-sm-inline\",\"d-sm-inline-block\":\"DatePicker-module__d-sm-inline-block\",\"d-sm-block\":\"DatePicker-module__d-sm-block\",\"d-sm-table\":\"DatePicker-module__d-sm-table\",\"d-sm-table-row\":\"DatePicker-module__d-sm-table-row\",\"d-sm-table-cell\":\"DatePicker-module__d-sm-table-cell\",\"d-sm-flex\":\"DatePicker-module__d-sm-flex\",\"d-sm-inline-flex\":\"DatePicker-module__d-sm-inline-flex\",\"d-md-none\":\"DatePicker-module__d-md-none\",\"d-md-inline\":\"DatePicker-module__d-md-inline\",\"d-md-inline-block\":\"DatePicker-module__d-md-inline-block\",\"d-md-block\":\"DatePicker-module__d-md-block\",\"d-md-table\":\"DatePicker-module__d-md-table\",\"d-md-table-row\":\"DatePicker-module__d-md-table-row\",\"d-md-table-cell\":\"DatePicker-module__d-md-table-cell\",\"d-md-flex\":\"DatePicker-module__d-md-flex\",\"d-md-inline-flex\":\"DatePicker-module__d-md-inline-flex\",\"d-lg-none\":\"DatePicker-module__d-lg-none\",\"d-lg-inline\":\"DatePicker-module__d-lg-inline\",\"d-lg-inline-block\":\"DatePicker-module__d-lg-inline-block\",\"d-lg-block\":\"DatePicker-module__d-lg-block\",\"d-lg-table\":\"DatePicker-module__d-lg-table\",\"d-lg-table-row\":\"DatePicker-module__d-lg-table-row\",\"d-lg-table-cell\":\"DatePicker-module__d-lg-table-cell\",\"d-lg-flex\":\"DatePicker-module__d-lg-flex\",\"d-lg-inline-flex\":\"DatePicker-module__d-lg-inline-flex\",\"d-xl-none\":\"DatePicker-module__d-xl-none\",\"d-xl-inline\":\"DatePicker-module__d-xl-inline\",\"d-xl-inline-block\":\"DatePicker-module__d-xl-inline-block\",\"d-xl-block\":\"DatePicker-module__d-xl-block\",\"d-xl-table\":\"DatePicker-module__d-xl-table\",\"d-xl-table-row\":\"DatePicker-module__d-xl-table-row\",\"d-xl-table-cell\":\"DatePicker-module__d-xl-table-cell\",\"d-xl-flex\":\"DatePicker-module__d-xl-flex\",\"d-xl-inline-flex\":\"DatePicker-module__d-xl-inline-flex\",\"d-print-none\":\"DatePicker-module__d-print-none\",\"d-print-inline\":\"DatePicker-module__d-print-inline\",\"d-print-inline-block\":\"DatePicker-module__d-print-inline-block\",\"d-print-block\":\"DatePicker-module__d-print-block\",\"d-print-table\":\"DatePicker-module__d-print-table\",\"d-print-table-row\":\"DatePicker-module__d-print-table-row\",\"d-print-table-cell\":\"DatePicker-module__d-print-table-cell\",\"d-print-flex\":\"DatePicker-module__d-print-flex\",\"d-print-inline-flex\":\"DatePicker-module__d-print-inline-flex\",\"Calendar\":\"DatePicker-module__Calendar\"};var DatePicker=function DatePicker(props){_s4();var ref=React__default.useRef(null);var calendarClassName=[styles$s.Calendar,props.className].filter(Boolean).join(' ');return/*#__PURE__*/React__default.createElement(xt,_extends({customInput:/*#__PURE__*/React__default.createElement(Input,_extends({iconProps:{fontSize:'25px'},icon:\"calendar\",iconVariant:\"alternate\",onIconClick:function onIconClick(){return ref.current&&ref.current.setOpen(true);}},props.inputProps)),calendarClassName:calendarClassName,ref:ref// all props are overwritable\n},props));};_s4(DatePicker,\"QMBuJFIdzLIeqBcFwhMf246mjOM=\");_c70=DatePicker;var styles$t={\"d-none\":\"Collapsible-module__d-none\",\"d-inline\":\"Collapsible-module__d-inline\",\"d-inline-block\":\"Collapsible-module__d-inline-block\",\"d-block\":\"Collapsible-module__d-block\",\"d-table\":\"Collapsible-module__d-table\",\"d-table-row\":\"Collapsible-module__d-table-row\",\"d-table-cell\":\"Collapsible-module__d-table-cell\",\"d-flex\":\"Collapsible-module__d-flex\",\"d-inline-flex\":\"Collapsible-module__d-inline-flex\",\"d-sm-none\":\"Collapsible-module__d-sm-none\",\"d-sm-inline\":\"Collapsible-module__d-sm-inline\",\"d-sm-inline-block\":\"Collapsible-module__d-sm-inline-block\",\"d-sm-block\":\"Collapsible-module__d-sm-block\",\"d-sm-table\":\"Collapsible-module__d-sm-table\",\"d-sm-table-row\":\"Collapsible-module__d-sm-table-row\",\"d-sm-table-cell\":\"Collapsible-module__d-sm-table-cell\",\"d-sm-flex\":\"Collapsible-module__d-sm-flex\",\"d-sm-inline-flex\":\"Collapsible-module__d-sm-inline-flex\",\"d-md-none\":\"Collapsible-module__d-md-none\",\"d-md-inline\":\"Collapsible-module__d-md-inline\",\"d-md-inline-block\":\"Collapsible-module__d-md-inline-block\",\"d-md-block\":\"Collapsible-module__d-md-block\",\"d-md-table\":\"Collapsible-module__d-md-table\",\"d-md-table-row\":\"Collapsible-module__d-md-table-row\",\"d-md-table-cell\":\"Collapsible-module__d-md-table-cell\",\"d-md-flex\":\"Collapsible-module__d-md-flex\",\"d-md-inline-flex\":\"Collapsible-module__d-md-inline-flex\",\"d-lg-none\":\"Collapsible-module__d-lg-none\",\"d-lg-inline\":\"Collapsible-module__d-lg-inline\",\"d-lg-inline-block\":\"Collapsible-module__d-lg-inline-block\",\"d-lg-block\":\"Collapsible-module__d-lg-block\",\"d-lg-table\":\"Collapsible-module__d-lg-table\",\"d-lg-table-row\":\"Collapsible-module__d-lg-table-row\",\"d-lg-table-cell\":\"Collapsible-module__d-lg-table-cell\",\"d-lg-flex\":\"Collapsible-module__d-lg-flex\",\"d-lg-inline-flex\":\"Collapsible-module__d-lg-inline-flex\",\"d-xl-none\":\"Collapsible-module__d-xl-none\",\"d-xl-inline\":\"Collapsible-module__d-xl-inline\",\"d-xl-inline-block\":\"Collapsible-module__d-xl-inline-block\",\"d-xl-block\":\"Collapsible-module__d-xl-block\",\"d-xl-table\":\"Collapsible-module__d-xl-table\",\"d-xl-table-row\":\"Collapsible-module__d-xl-table-row\",\"d-xl-table-cell\":\"Collapsible-module__d-xl-table-cell\",\"d-xl-flex\":\"Collapsible-module__d-xl-flex\",\"d-xl-inline-flex\":\"Collapsible-module__d-xl-inline-flex\",\"d-print-none\":\"Collapsible-module__d-print-none\",\"d-print-inline\":\"Collapsible-module__d-print-inline\",\"d-print-inline-block\":\"Collapsible-module__d-print-inline-block\",\"d-print-block\":\"Collapsible-module__d-print-block\",\"d-print-table\":\"Collapsible-module__d-print-table\",\"d-print-table-row\":\"Collapsible-module__d-print-table-row\",\"d-print-table-cell\":\"Collapsible-module__d-print-table-cell\",\"d-print-flex\":\"Collapsible-module__d-print-flex\",\"d-print-inline-flex\":\"Collapsible-module__d-print-inline-flex\",\"container\":\"Collapsible-module__container\",\"buttonOnBottom\":\"Collapsible-module__buttonOnBottom\",\"button\":\"Collapsible-module__button\",\"content\":\"Collapsible-module__content\",\"chevron\":\"Collapsible-module__chevron\",\"chevronCollapsed\":\"Collapsible-module__chevronCollapsed\",\"title\":\"Collapsible-module__title\",\"small\":\"Collapsible-module__small\",\"buttonRight\":\"Collapsible-module__buttonRight\",\"contentCollapsed\":\"Collapsible-module__contentCollapsed\"};var getIconSize=function getIconSize(style){if(style==='small'){return 10;}return 15;};var Collapsible=function Collapsible(props){_s5();var _useState=React.useState(props.defaultCollapsed),_useState2=_slicedToArray(_useState,2),isCollapsed=_useState2[0],setIsCollapsed=_useState2[1];var contentClassName=[styles$t.content,isCollapsed&&styles$t.contentCollapsed].filter(Boolean).join(' ');var iconClassName=[styles$t.chevron,isCollapsed&&styles$t.chevronCollapsed,styles$t.buttonRight].filter(Boolean).join(' ');var containerClassName=[styles$t.container,props.className,props.buttonOnBottom&&styles$t.buttonOnBottom,props.style&&styles$t[props.style]].filter(Boolean).join(' ');var buttonClassName=[styles$t.button,styles$t.buttonRight,'button'].filter(Boolean).join(' ');var title=isCollapsed?props.expandTitle:props.collapseTitle;var iconSize=getIconSize(props.style);return/*#__PURE__*/React__default.createElement(\"div\",{className:containerClassName},/*#__PURE__*/React__default.createElement(\"div\",{className:buttonClassName,onClick:function onClick(){return setIsCollapsed(!isCollapsed);}},/*#__PURE__*/React__default.createElement(Icon,{name:\"chevron\",className:iconClassName,fontSize:\"\".concat(iconSize,\"px\")}),/*#__PURE__*/React__default.createElement(\"div\",{className:styles$t.title},title)),/*#__PURE__*/React__default.createElement(\"main\",{className:contentClassName},props.children));};_s5(Collapsible,\"dyVPgmjFSOo5Q4l6mzpdkhQaOMY=\");_c71=Collapsible;var styles$u={\"d-none\":\"Switch-module__d-none\",\"d-inline\":\"Switch-module__d-inline\",\"d-inline-block\":\"Switch-module__d-inline-block\",\"d-block\":\"Switch-module__d-block\",\"d-table\":\"Switch-module__d-table\",\"d-table-row\":\"Switch-module__d-table-row\",\"d-table-cell\":\"Switch-module__d-table-cell\",\"d-flex\":\"Switch-module__d-flex\",\"d-inline-flex\":\"Switch-module__d-inline-flex\",\"d-sm-none\":\"Switch-module__d-sm-none\",\"d-sm-inline\":\"Switch-module__d-sm-inline\",\"d-sm-inline-block\":\"Switch-module__d-sm-inline-block\",\"d-sm-block\":\"Switch-module__d-sm-block\",\"d-sm-table\":\"Switch-module__d-sm-table\",\"d-sm-table-row\":\"Switch-module__d-sm-table-row\",\"d-sm-table-cell\":\"Switch-module__d-sm-table-cell\",\"d-sm-flex\":\"Switch-module__d-sm-flex\",\"d-sm-inline-flex\":\"Switch-module__d-sm-inline-flex\",\"d-md-none\":\"Switch-module__d-md-none\",\"d-md-inline\":\"Switch-module__d-md-inline\",\"d-md-inline-block\":\"Switch-module__d-md-inline-block\",\"d-md-block\":\"Switch-module__d-md-block\",\"d-md-table\":\"Switch-module__d-md-table\",\"d-md-table-row\":\"Switch-module__d-md-table-row\",\"d-md-table-cell\":\"Switch-module__d-md-table-cell\",\"d-md-flex\":\"Switch-module__d-md-flex\",\"d-md-inline-flex\":\"Switch-module__d-md-inline-flex\",\"d-lg-none\":\"Switch-module__d-lg-none\",\"d-lg-inline\":\"Switch-module__d-lg-inline\",\"d-lg-inline-block\":\"Switch-module__d-lg-inline-block\",\"d-lg-block\":\"Switch-module__d-lg-block\",\"d-lg-table\":\"Switch-module__d-lg-table\",\"d-lg-table-row\":\"Switch-module__d-lg-table-row\",\"d-lg-table-cell\":\"Switch-module__d-lg-table-cell\",\"d-lg-flex\":\"Switch-module__d-lg-flex\",\"d-lg-inline-flex\":\"Switch-module__d-lg-inline-flex\",\"d-xl-none\":\"Switch-module__d-xl-none\",\"d-xl-inline\":\"Switch-module__d-xl-inline\",\"d-xl-inline-block\":\"Switch-module__d-xl-inline-block\",\"d-xl-block\":\"Switch-module__d-xl-block\",\"d-xl-table\":\"Switch-module__d-xl-table\",\"d-xl-table-row\":\"Switch-module__d-xl-table-row\",\"d-xl-table-cell\":\"Switch-module__d-xl-table-cell\",\"d-xl-flex\":\"Switch-module__d-xl-flex\",\"d-xl-inline-flex\":\"Switch-module__d-xl-inline-flex\",\"d-print-none\":\"Switch-module__d-print-none\",\"d-print-inline\":\"Switch-module__d-print-inline\",\"d-print-inline-block\":\"Switch-module__d-print-inline-block\",\"d-print-block\":\"Switch-module__d-print-block\",\"d-print-table\":\"Switch-module__d-print-table\",\"d-print-table-row\":\"Switch-module__d-print-table-row\",\"d-print-table-cell\":\"Switch-module__d-print-table-cell\",\"d-print-flex\":\"Switch-module__d-print-flex\",\"d-print-inline-flex\":\"Switch-module__d-print-inline-flex\",\"switch\":\"Switch-module__switch\",\"button\":\"Switch-module__button\",\"button-always-small\":\"Switch-module__button-always-small\",\"label-end\":\"Switch-module__label-end\",\"label-start\":\"Switch-module__label-start\",\"button-large\":\"Switch-module__button-large\",\"button-small\":\"Switch-module__button-small\",\"unchecked\":\"Switch-module__unchecked\",\"checked\":\"Switch-module__checked\",\"disabled\":\"Switch-module__disabled\",\"label\":\"Switch-module__label\",\"icon\":\"Switch-module__icon\",\"icon-end\":\"Switch-module__icon-end\",\"input\":\"Switch-module__input\"};function Switch(_ref){var value=_ref.value,type=_ref.type,name=_ref.name,className=_ref.className,_ref$checked=_ref.checked,checked=_ref$checked===void 0?false:_ref$checked,disabled=_ref.disabled,_ref$variant=_ref.variant,variant=_ref$variant===void 0?'default':_ref$variant,onChange=_ref.onChange,idProp=_ref.id,_ref$inputProps=_ref.inputProps,inputProps=_ref$inputProps===void 0?{}:_ref$inputProps,_ref$icon=_ref.icon,icon=_ref$icon===void 0?'checkbox-unchecked':_ref$icon,_ref$iconChecked=_ref.iconChecked,iconChecked=_ref$iconChecked===void 0?'checkbox-checked':_ref$iconChecked,_ref$iconVariant=_ref.iconVariant,iconVariant=_ref$iconVariant===void 0?0:_ref$iconVariant,_ref$iconVariantCheck=_ref.iconVariantChecked,iconVariantChecked=_ref$iconVariantCheck===void 0?0:_ref$iconVariantCheck,_ref$iconFontSize=_ref.iconFontSize,iconFontSize=_ref$iconFontSize===void 0?'16px':_ref$iconFontSize,label=_ref.label,_ref$labelPlacement=_ref.labelPlacement,labelPlacement=_ref$labelPlacement===void 0?'end':_ref$labelPlacement,labelProps=_ref.labelProps,customIcon=_ref.customIcon,customIconChecked=_ref.customIconChecked,props=_objectWithoutProperties(_ref,[\"value\",\"type\",\"name\",\"className\",\"checked\",\"disabled\",\"variant\",\"onChange\",\"id\",\"inputProps\",\"icon\",\"iconChecked\",\"iconVariant\",\"iconVariantChecked\",\"iconFontSize\",\"label\",\"labelPlacement\",\"labelProps\",\"customIcon\",\"customIconChecked\"]);var id=idProp||\"\".concat(type||'switch',\"-\").concat(name,\"-\").concat(value);var checkboxClasses=[styles$u['switch'],checked?styles$u['checked']:styles$u['unchecked'],disabled?styles$u['disabled']:'',variant!=='default'&&styles$u['button'],variant!=='default'&&styles$u[variant],className].filter(Boolean).join(' ');var iconClasses=[styles$u['icon'],labelPlacement==='start'&&styles$u['icon-end']].filter(Boolean).join(' ');var labelClasses=[styles$u['label'],styles$u[\"label-\".concat(labelPlacement)]].filter(Boolean).join(' ');var Label=typeof label==='string'||typeof label==='number'?/*#__PURE__*/React__default.createElement(Text,_extends({className:labelClasses,fontSize:\"body-xsmall\"},labelProps),label):label;return/*#__PURE__*/React__default.createElement(\"label\",_extends({},props,{htmlFor:id,className:checkboxClasses}),customIcon?checked&&customIconChecked?customIconChecked:customIcon:/*#__PURE__*/React__default.createElement(Icon,{className:iconClasses,name:checked?iconChecked:icon,variant:checked?iconVariantChecked:iconVariant,fontSize:iconFontSize}),(variant==='default'||variant==='button-large')&&Label,/*#__PURE__*/React__default.createElement(\"input\",_extends({},inputProps,{className:styles$u['input'],value:value,id:id,onChange:onChange,name:name,checked:checked,disabled:disabled,type:type})));}_c72=Switch;function Radio(_ref){var _ref$icon=_ref.icon,icon=_ref$icon===void 0?'radio-unchecked':_ref$icon,_ref$iconChecked=_ref.iconChecked,iconChecked=_ref$iconChecked===void 0?'radio-checked':_ref$iconChecked,customIcon=_ref.customIcon,customIconChecked=_ref.customIconChecked,customRadioIcon=_ref.customRadioIcon,customRadioIconChecked=_ref.customRadioIconChecked,props=_objectWithoutProperties(_ref,[\"icon\",\"iconChecked\",\"customIcon\",\"customIconChecked\",\"customRadioIcon\",\"customRadioIconChecked\"]);if( true&&(customRadioIcon||customRadioIconChecked)){// eslint-disable-next-line\nconsole.warn('Deprecation warning: Please do not use the props customRadioIcon and customRadioIconChecked. Instead, use the props customIcon and customIconChecked.');}return/*#__PURE__*/React__default.createElement(Switch,_extends({},props,{type:\"radio\",icon:icon,iconChecked:iconChecked,customIcon:customIcon||customRadioIcon,customIconChecked:customIconChecked||customRadioIconChecked}));}_c73=Radio;var styles$v={\"d-none\":\"RadioGroup-module__d-none\",\"d-inline\":\"RadioGroup-module__d-inline\",\"d-inline-block\":\"RadioGroup-module__d-inline-block\",\"d-block\":\"RadioGroup-module__d-block\",\"d-table\":\"RadioGroup-module__d-table\",\"d-table-row\":\"RadioGroup-module__d-table-row\",\"d-table-cell\":\"RadioGroup-module__d-table-cell\",\"d-flex\":\"RadioGroup-module__d-flex\",\"d-inline-flex\":\"RadioGroup-module__d-inline-flex\",\"d-sm-none\":\"RadioGroup-module__d-sm-none\",\"d-sm-inline\":\"RadioGroup-module__d-sm-inline\",\"d-sm-inline-block\":\"RadioGroup-module__d-sm-inline-block\",\"d-sm-block\":\"RadioGroup-module__d-sm-block\",\"d-sm-table\":\"RadioGroup-module__d-sm-table\",\"d-sm-table-row\":\"RadioGroup-module__d-sm-table-row\",\"d-sm-table-cell\":\"RadioGroup-module__d-sm-table-cell\",\"d-sm-flex\":\"RadioGroup-module__d-sm-flex\",\"d-sm-inline-flex\":\"RadioGroup-module__d-sm-inline-flex\",\"d-md-none\":\"RadioGroup-module__d-md-none\",\"d-md-inline\":\"RadioGroup-module__d-md-inline\",\"d-md-inline-block\":\"RadioGroup-module__d-md-inline-block\",\"d-md-block\":\"RadioGroup-module__d-md-block\",\"d-md-table\":\"RadioGroup-module__d-md-table\",\"d-md-table-row\":\"RadioGroup-module__d-md-table-row\",\"d-md-table-cell\":\"RadioGroup-module__d-md-table-cell\",\"d-md-flex\":\"RadioGroup-module__d-md-flex\",\"d-md-inline-flex\":\"RadioGroup-module__d-md-inline-flex\",\"d-lg-none\":\"RadioGroup-module__d-lg-none\",\"d-lg-inline\":\"RadioGroup-module__d-lg-inline\",\"d-lg-inline-block\":\"RadioGroup-module__d-lg-inline-block\",\"d-lg-block\":\"RadioGroup-module__d-lg-block\",\"d-lg-table\":\"RadioGroup-module__d-lg-table\",\"d-lg-table-row\":\"RadioGroup-module__d-lg-table-row\",\"d-lg-table-cell\":\"RadioGroup-module__d-lg-table-cell\",\"d-lg-flex\":\"RadioGroup-module__d-lg-flex\",\"d-lg-inline-flex\":\"RadioGroup-module__d-lg-inline-flex\",\"d-xl-none\":\"RadioGroup-module__d-xl-none\",\"d-xl-inline\":\"RadioGroup-module__d-xl-inline\",\"d-xl-inline-block\":\"RadioGroup-module__d-xl-inline-block\",\"d-xl-block\":\"RadioGroup-module__d-xl-block\",\"d-xl-table\":\"RadioGroup-module__d-xl-table\",\"d-xl-table-row\":\"RadioGroup-module__d-xl-table-row\",\"d-xl-table-cell\":\"RadioGroup-module__d-xl-table-cell\",\"d-xl-flex\":\"RadioGroup-module__d-xl-flex\",\"d-xl-inline-flex\":\"RadioGroup-module__d-xl-inline-flex\",\"d-print-none\":\"RadioGroup-module__d-print-none\",\"d-print-inline\":\"RadioGroup-module__d-print-inline\",\"d-print-inline-block\":\"RadioGroup-module__d-print-inline-block\",\"d-print-block\":\"RadioGroup-module__d-print-block\",\"d-print-table\":\"RadioGroup-module__d-print-table\",\"d-print-table-row\":\"RadioGroup-module__d-print-table-row\",\"d-print-table-cell\":\"RadioGroup-module__d-print-table-cell\",\"d-print-flex\":\"RadioGroup-module__d-print-flex\",\"d-print-inline-flex\":\"RadioGroup-module__d-print-inline-flex\",\"radio-wrapper\":\"RadioGroup-module__radio-wrapper\",\"button-large-wrapper\":\"RadioGroup-module__button-large-wrapper\",\"button-small-wrapper\":\"RadioGroup-module__button-small-wrapper\",\"button-always-small-wrapper\":\"RadioGroup-module__button-always-small-wrapper\"};/**\n * @deprecated Please do not use this component. Use directly instead\n */function RadioGroup(_ref){var children=_ref.children,name=_ref.name,_ref$variant=_ref.variant,variant=_ref$variant===void 0?'default':_ref$variant,iconVariant=_ref.iconVariant,iconVariantChecked=_ref.iconVariantChecked,iconFontSize=_ref.iconFontSize,value=_ref.value,_onChange=_ref.onChange;if(true){// eslint-disable-next-line\nconsole.warn('Deprecation warning: Please do not use RadioGroup. Use directly');}return/*#__PURE__*/React__default.createElement(\"div\",null,React__default.Children.map(children,function(child){if(!/*#__PURE__*/React__default.isValidElement(child)){return null;}return/*#__PURE__*/React__default.createElement(\"span\",{className:styles$v[\"\".concat(variant,\"-wrapper\")]},/*#__PURE__*/React__default.cloneElement(child,{name:name,variant:variant,iconVariant:iconVariant,iconVariantChecked:iconVariantChecked,iconFontSize:iconFontSize,checked:value===child.props.value,onChange:function onChange(){_onChange(child.props.value);}}));}));}_c74=RadioGroup;function Thead(props){return/*#__PURE__*/React__default.createElement(\"thead\",props);}_c75=Thead;function Tbody(props){return/*#__PURE__*/React__default.createElement(\"tbody\",props);}_c76=Tbody;var styles$w={\"d-none\":\"Table-module__d-none\",\"d-inline\":\"Table-module__d-inline\",\"d-inline-block\":\"Table-module__d-inline-block\",\"d-block\":\"Table-module__d-block\",\"d-table\":\"Table-module__d-table\",\"d-table-row\":\"Table-module__d-table-row\",\"d-table-cell\":\"Table-module__d-table-cell\",\"d-flex\":\"Table-module__d-flex\",\"d-inline-flex\":\"Table-module__d-inline-flex\",\"d-sm-none\":\"Table-module__d-sm-none\",\"d-sm-inline\":\"Table-module__d-sm-inline\",\"d-sm-inline-block\":\"Table-module__d-sm-inline-block\",\"d-sm-block\":\"Table-module__d-sm-block\",\"d-sm-table\":\"Table-module__d-sm-table\",\"d-sm-table-row\":\"Table-module__d-sm-table-row\",\"d-sm-table-cell\":\"Table-module__d-sm-table-cell\",\"d-sm-flex\":\"Table-module__d-sm-flex\",\"d-sm-inline-flex\":\"Table-module__d-sm-inline-flex\",\"d-md-none\":\"Table-module__d-md-none\",\"d-md-inline\":\"Table-module__d-md-inline\",\"d-md-inline-block\":\"Table-module__d-md-inline-block\",\"d-md-block\":\"Table-module__d-md-block\",\"d-md-table\":\"Table-module__d-md-table\",\"d-md-table-row\":\"Table-module__d-md-table-row\",\"d-md-table-cell\":\"Table-module__d-md-table-cell\",\"d-md-flex\":\"Table-module__d-md-flex\",\"d-md-inline-flex\":\"Table-module__d-md-inline-flex\",\"d-lg-none\":\"Table-module__d-lg-none\",\"d-lg-inline\":\"Table-module__d-lg-inline\",\"d-lg-inline-block\":\"Table-module__d-lg-inline-block\",\"d-lg-block\":\"Table-module__d-lg-block\",\"d-lg-table\":\"Table-module__d-lg-table\",\"d-lg-table-row\":\"Table-module__d-lg-table-row\",\"d-lg-table-cell\":\"Table-module__d-lg-table-cell\",\"d-lg-flex\":\"Table-module__d-lg-flex\",\"d-lg-inline-flex\":\"Table-module__d-lg-inline-flex\",\"d-xl-none\":\"Table-module__d-xl-none\",\"d-xl-inline\":\"Table-module__d-xl-inline\",\"d-xl-inline-block\":\"Table-module__d-xl-inline-block\",\"d-xl-block\":\"Table-module__d-xl-block\",\"d-xl-table\":\"Table-module__d-xl-table\",\"d-xl-table-row\":\"Table-module__d-xl-table-row\",\"d-xl-table-cell\":\"Table-module__d-xl-table-cell\",\"d-xl-flex\":\"Table-module__d-xl-flex\",\"d-xl-inline-flex\":\"Table-module__d-xl-inline-flex\",\"d-print-none\":\"Table-module__d-print-none\",\"d-print-inline\":\"Table-module__d-print-inline\",\"d-print-inline-block\":\"Table-module__d-print-inline-block\",\"d-print-block\":\"Table-module__d-print-block\",\"d-print-table\":\"Table-module__d-print-table\",\"d-print-table-row\":\"Table-module__d-print-table-row\",\"d-print-table-cell\":\"Table-module__d-print-table-cell\",\"d-print-flex\":\"Table-module__d-print-flex\",\"d-print-inline-flex\":\"Table-module__d-print-inline-flex\",\"Table\":\"Table-module__Table\",\"Th\":\"Table-module__Th\",\"sort-icon\":\"Table-module__sort-icon\",\"clickable\":\"Table-module__clickable\",\"sorted\":\"Table-module__sorted\",\"asc\":\"Table-module__asc\",\"desc\":\"Table-module__desc\",\"Row\":\"Table-module__Row\",\"solid-borders\":\"Table-module__solid-borders\",\"dashed-borders\":\"Table-module__dashed-borders\",\"Cell\":\"Table-module__Cell\"};function Row$1(props){var className=props.className,children=props.children,rest=_objectWithoutProperties(props,[\"className\",\"children\"]);var classNames=mergeClassNames(styles$w.Row,className);return/*#__PURE__*/React__default.createElement(\"tr\",_extends({},rest,{className:classNames}),children);}_c77=Row$1;function Th(props){var className=props.className,sort=props.sort,onClick=props.onClick,children=props.children,rest=_objectWithoutProperties(props,[\"className\",\"sort\",\"onClick\",\"children\"]);var classNames=mergeClassNames(styles$w.Th,className,sort&&styles$w[sort],sort&&styles$w['sorted'],onClick&&styles$w['clickable']);return/*#__PURE__*/React__default.createElement(\"th\",_extends({},rest,{className:classNames}),typeof onClick==='function'?/*#__PURE__*/React__default.createElement(\"button\",{onClick:onClick},typeof children==='string'?/*#__PURE__*/React__default.createElement(\"span\",null,children):children,/*#__PURE__*/React__default.createElement(Icon,{className:styles$w['sort-icon'],name:\"arrow-left\",fontSize:\"inherit\"})):children);}_c78=Th;function Cell(props){var className=props.className,children=props.children,rest=_objectWithoutProperties(props,[\"className\",\"children\"]);var classNames=mergeClassNames(styles$w.Cell,className);return/*#__PURE__*/React__default.createElement(\"td\",_extends({},rest,{className:classNames}),children);}_c79=Cell;function Tfoot(props){return/*#__PURE__*/React__default.createElement(\"tfoot\",props);}_c80=Tfoot;function Table(props){var className=props.className,_props$tableStyle=props.tableStyle,tableStyle=_props$tableStyle===void 0?'solid-borders':_props$tableStyle,children=props.children,rest=_objectWithoutProperties(props,[\"className\",\"tableStyle\",\"children\"]);var classNames=mergeClassNames(styles$w.Table,className,styles$w[tableStyle]);return/*#__PURE__*/React__default.createElement(\"table\",_extends({},rest,{className:classNames}),children);}_c81=Table;Table.Thead=Thead;Table.Tfoot=Tfoot;Table.Tbody=Tbody;Table.Cell=Cell;Table.Row=Row$1;Table.Th=Th;// @TODO for completeness' sake, we can still add , & \nvar styles$x={\"d-none\":\"Tabs-module__d-none\",\"d-inline\":\"Tabs-module__d-inline\",\"d-inline-block\":\"Tabs-module__d-inline-block\",\"d-block\":\"Tabs-module__d-block\",\"d-table\":\"Tabs-module__d-table\",\"d-table-row\":\"Tabs-module__d-table-row\",\"d-table-cell\":\"Tabs-module__d-table-cell\",\"d-flex\":\"Tabs-module__d-flex\",\"d-inline-flex\":\"Tabs-module__d-inline-flex\",\"d-sm-none\":\"Tabs-module__d-sm-none\",\"d-sm-inline\":\"Tabs-module__d-sm-inline\",\"d-sm-inline-block\":\"Tabs-module__d-sm-inline-block\",\"d-sm-block\":\"Tabs-module__d-sm-block\",\"d-sm-table\":\"Tabs-module__d-sm-table\",\"d-sm-table-row\":\"Tabs-module__d-sm-table-row\",\"d-sm-table-cell\":\"Tabs-module__d-sm-table-cell\",\"d-sm-flex\":\"Tabs-module__d-sm-flex\",\"d-sm-inline-flex\":\"Tabs-module__d-sm-inline-flex\",\"d-md-none\":\"Tabs-module__d-md-none\",\"d-md-inline\":\"Tabs-module__d-md-inline\",\"d-md-inline-block\":\"Tabs-module__d-md-inline-block\",\"d-md-block\":\"Tabs-module__d-md-block\",\"d-md-table\":\"Tabs-module__d-md-table\",\"d-md-table-row\":\"Tabs-module__d-md-table-row\",\"d-md-table-cell\":\"Tabs-module__d-md-table-cell\",\"d-md-flex\":\"Tabs-module__d-md-flex\",\"d-md-inline-flex\":\"Tabs-module__d-md-inline-flex\",\"d-lg-none\":\"Tabs-module__d-lg-none\",\"d-lg-inline\":\"Tabs-module__d-lg-inline\",\"d-lg-inline-block\":\"Tabs-module__d-lg-inline-block\",\"d-lg-block\":\"Tabs-module__d-lg-block\",\"d-lg-table\":\"Tabs-module__d-lg-table\",\"d-lg-table-row\":\"Tabs-module__d-lg-table-row\",\"d-lg-table-cell\":\"Tabs-module__d-lg-table-cell\",\"d-lg-flex\":\"Tabs-module__d-lg-flex\",\"d-lg-inline-flex\":\"Tabs-module__d-lg-inline-flex\",\"d-xl-none\":\"Tabs-module__d-xl-none\",\"d-xl-inline\":\"Tabs-module__d-xl-inline\",\"d-xl-inline-block\":\"Tabs-module__d-xl-inline-block\",\"d-xl-block\":\"Tabs-module__d-xl-block\",\"d-xl-table\":\"Tabs-module__d-xl-table\",\"d-xl-table-row\":\"Tabs-module__d-xl-table-row\",\"d-xl-table-cell\":\"Tabs-module__d-xl-table-cell\",\"d-xl-flex\":\"Tabs-module__d-xl-flex\",\"d-xl-inline-flex\":\"Tabs-module__d-xl-inline-flex\",\"d-print-none\":\"Tabs-module__d-print-none\",\"d-print-inline\":\"Tabs-module__d-print-inline\",\"d-print-inline-block\":\"Tabs-module__d-print-inline-block\",\"d-print-block\":\"Tabs-module__d-print-block\",\"d-print-table\":\"Tabs-module__d-print-table\",\"d-print-table-row\":\"Tabs-module__d-print-table-row\",\"d-print-table-cell\":\"Tabs-module__d-print-table-cell\",\"d-print-flex\":\"Tabs-module__d-print-flex\",\"d-print-inline-flex\":\"Tabs-module__d-print-inline-flex\",\"Tab\":\"Tabs-module__Tab\",\"isActive\":\"Tabs-module__isActive\"};function Tab(_ref){var className=_ref.className,children=_ref.children,isActive=_ref.isActive,_onClick=_ref.onClick,_ref$role=_ref.role,role=_ref$role===void 0?'tab':_ref$role,as=_ref.as,props=_objectWithoutProperties(_ref,[\"className\",\"children\",\"isActive\",\"onClick\",\"role\",\"as\"]);var classNames=mergeClassNames(className,styles$x.Tab,isActive&&styles$x.isActive);var defaultAsProps=as===undefined?{href:'#',onClick:function onClick(e){// Prevent navigation to hash after URL\ne.preventDefault();if(typeof _onClick==='function'){e.persist();_onClick(e);}}}:{onClick:_onClick};var Component=as||'a';return/*#__PURE__*/React__default.createElement(Component,_extends({},defaultAsProps,{className:classNames,role:role,\"aria-selected\":isActive},props),children);}_c82=Tab;function Tabs(_ref2){var children=_ref2.children,_ref2$role=_ref2.role,role=_ref2$role===void 0?'tablist':_ref2$role,props=_objectWithoutProperties(_ref2,[\"children\",\"role\"]);return/*#__PURE__*/React__default.createElement(Flex,_extends({role:role},props),children);}_c83=Tabs;Tabs.Tab=Tab;var styles$y={\"d-none\":\"HighlightedHeader-module__d-none\",\"d-inline\":\"HighlightedHeader-module__d-inline\",\"d-inline-block\":\"HighlightedHeader-module__d-inline-block\",\"d-block\":\"HighlightedHeader-module__d-block\",\"d-table\":\"HighlightedHeader-module__d-table\",\"d-table-row\":\"HighlightedHeader-module__d-table-row\",\"d-table-cell\":\"HighlightedHeader-module__d-table-cell\",\"d-flex\":\"HighlightedHeader-module__d-flex\",\"d-inline-flex\":\"HighlightedHeader-module__d-inline-flex\",\"d-sm-none\":\"HighlightedHeader-module__d-sm-none\",\"d-sm-inline\":\"HighlightedHeader-module__d-sm-inline\",\"d-sm-inline-block\":\"HighlightedHeader-module__d-sm-inline-block\",\"d-sm-block\":\"HighlightedHeader-module__d-sm-block\",\"d-sm-table\":\"HighlightedHeader-module__d-sm-table\",\"d-sm-table-row\":\"HighlightedHeader-module__d-sm-table-row\",\"d-sm-table-cell\":\"HighlightedHeader-module__d-sm-table-cell\",\"d-sm-flex\":\"HighlightedHeader-module__d-sm-flex\",\"d-sm-inline-flex\":\"HighlightedHeader-module__d-sm-inline-flex\",\"d-md-none\":\"HighlightedHeader-module__d-md-none\",\"d-md-inline\":\"HighlightedHeader-module__d-md-inline\",\"d-md-inline-block\":\"HighlightedHeader-module__d-md-inline-block\",\"d-md-block\":\"HighlightedHeader-module__d-md-block\",\"d-md-table\":\"HighlightedHeader-module__d-md-table\",\"d-md-table-row\":\"HighlightedHeader-module__d-md-table-row\",\"d-md-table-cell\":\"HighlightedHeader-module__d-md-table-cell\",\"d-md-flex\":\"HighlightedHeader-module__d-md-flex\",\"d-md-inline-flex\":\"HighlightedHeader-module__d-md-inline-flex\",\"d-lg-none\":\"HighlightedHeader-module__d-lg-none\",\"d-lg-inline\":\"HighlightedHeader-module__d-lg-inline\",\"d-lg-inline-block\":\"HighlightedHeader-module__d-lg-inline-block\",\"d-lg-block\":\"HighlightedHeader-module__d-lg-block\",\"d-lg-table\":\"HighlightedHeader-module__d-lg-table\",\"d-lg-table-row\":\"HighlightedHeader-module__d-lg-table-row\",\"d-lg-table-cell\":\"HighlightedHeader-module__d-lg-table-cell\",\"d-lg-flex\":\"HighlightedHeader-module__d-lg-flex\",\"d-lg-inline-flex\":\"HighlightedHeader-module__d-lg-inline-flex\",\"d-xl-none\":\"HighlightedHeader-module__d-xl-none\",\"d-xl-inline\":\"HighlightedHeader-module__d-xl-inline\",\"d-xl-inline-block\":\"HighlightedHeader-module__d-xl-inline-block\",\"d-xl-block\":\"HighlightedHeader-module__d-xl-block\",\"d-xl-table\":\"HighlightedHeader-module__d-xl-table\",\"d-xl-table-row\":\"HighlightedHeader-module__d-xl-table-row\",\"d-xl-table-cell\":\"HighlightedHeader-module__d-xl-table-cell\",\"d-xl-flex\":\"HighlightedHeader-module__d-xl-flex\",\"d-xl-inline-flex\":\"HighlightedHeader-module__d-xl-inline-flex\",\"d-print-none\":\"HighlightedHeader-module__d-print-none\",\"d-print-inline\":\"HighlightedHeader-module__d-print-inline\",\"d-print-inline-block\":\"HighlightedHeader-module__d-print-inline-block\",\"d-print-block\":\"HighlightedHeader-module__d-print-block\",\"d-print-table\":\"HighlightedHeader-module__d-print-table\",\"d-print-table-row\":\"HighlightedHeader-module__d-print-table-row\",\"d-print-table-cell\":\"HighlightedHeader-module__d-print-table-cell\",\"d-print-flex\":\"HighlightedHeader-module__d-print-flex\",\"d-print-inline-flex\":\"HighlightedHeader-module__d-print-inline-flex\",\"HighlightedHeader\":\"HighlightedHeader-module__HighlightedHeader\"};var HighlightedHeader=/*#__PURE__*/function(_React$PureComponent){_inherits(HighlightedHeader,_React$PureComponent);var _super=_createSuper(HighlightedHeader);function HighlightedHeader(){_classCallCheck(this,HighlightedHeader);return _super.apply(this,arguments);}_createClass(HighlightedHeader,[{key:\"render\",value:function render(){var _this$props=this.props,className=_this$props.className,children=_this$props.children,props=_objectWithoutProperties(_this$props,[\"className\",\"children\"]);return/*#__PURE__*/React.createElement(\"div\",_extends({className:mergeClassNames(styles$y['HighlightedHeader'],className)},props),children);}}]);return HighlightedHeader;}(React.PureComponent);function Checkbox(_ref){var _ref$icon=_ref.icon,icon=_ref$icon===void 0?'checkbox-unchecked':_ref$icon,_ref$iconChecked=_ref.iconChecked,iconChecked=_ref$iconChecked===void 0?'checkbox-checked':_ref$iconChecked,props=_objectWithoutProperties(_ref,[\"icon\",\"iconChecked\"]);return/*#__PURE__*/React__default.createElement(Switch,_extends({},props,{type:\"checkbox\",icon:icon,iconChecked:iconChecked}));}_c84=Checkbox;var styles$z={\"d-none\":\"Menu-module__d-none\",\"d-inline\":\"Menu-module__d-inline\",\"d-inline-block\":\"Menu-module__d-inline-block\",\"d-block\":\"Menu-module__d-block\",\"d-table\":\"Menu-module__d-table\",\"d-table-row\":\"Menu-module__d-table-row\",\"d-table-cell\":\"Menu-module__d-table-cell\",\"d-flex\":\"Menu-module__d-flex\",\"d-inline-flex\":\"Menu-module__d-inline-flex\",\"d-sm-none\":\"Menu-module__d-sm-none\",\"d-sm-inline\":\"Menu-module__d-sm-inline\",\"d-sm-inline-block\":\"Menu-module__d-sm-inline-block\",\"d-sm-block\":\"Menu-module__d-sm-block\",\"d-sm-table\":\"Menu-module__d-sm-table\",\"d-sm-table-row\":\"Menu-module__d-sm-table-row\",\"d-sm-table-cell\":\"Menu-module__d-sm-table-cell\",\"d-sm-flex\":\"Menu-module__d-sm-flex\",\"d-sm-inline-flex\":\"Menu-module__d-sm-inline-flex\",\"d-md-none\":\"Menu-module__d-md-none\",\"d-md-inline\":\"Menu-module__d-md-inline\",\"d-md-inline-block\":\"Menu-module__d-md-inline-block\",\"d-md-block\":\"Menu-module__d-md-block\",\"d-md-table\":\"Menu-module__d-md-table\",\"d-md-table-row\":\"Menu-module__d-md-table-row\",\"d-md-table-cell\":\"Menu-module__d-md-table-cell\",\"d-md-flex\":\"Menu-module__d-md-flex\",\"d-md-inline-flex\":\"Menu-module__d-md-inline-flex\",\"d-lg-none\":\"Menu-module__d-lg-none\",\"d-lg-inline\":\"Menu-module__d-lg-inline\",\"d-lg-inline-block\":\"Menu-module__d-lg-inline-block\",\"d-lg-block\":\"Menu-module__d-lg-block\",\"d-lg-table\":\"Menu-module__d-lg-table\",\"d-lg-table-row\":\"Menu-module__d-lg-table-row\",\"d-lg-table-cell\":\"Menu-module__d-lg-table-cell\",\"d-lg-flex\":\"Menu-module__d-lg-flex\",\"d-lg-inline-flex\":\"Menu-module__d-lg-inline-flex\",\"d-xl-none\":\"Menu-module__d-xl-none\",\"d-xl-inline\":\"Menu-module__d-xl-inline\",\"d-xl-inline-block\":\"Menu-module__d-xl-inline-block\",\"d-xl-block\":\"Menu-module__d-xl-block\",\"d-xl-table\":\"Menu-module__d-xl-table\",\"d-xl-table-row\":\"Menu-module__d-xl-table-row\",\"d-xl-table-cell\":\"Menu-module__d-xl-table-cell\",\"d-xl-flex\":\"Menu-module__d-xl-flex\",\"d-xl-inline-flex\":\"Menu-module__d-xl-inline-flex\",\"d-print-none\":\"Menu-module__d-print-none\",\"d-print-inline\":\"Menu-module__d-print-inline\",\"d-print-inline-block\":\"Menu-module__d-print-inline-block\",\"d-print-block\":\"Menu-module__d-print-block\",\"d-print-table\":\"Menu-module__d-print-table\",\"d-print-table-row\":\"Menu-module__d-print-table-row\",\"d-print-table-cell\":\"Menu-module__d-print-table-cell\",\"d-print-flex\":\"Menu-module__d-print-flex\",\"d-print-inline-flex\":\"Menu-module__d-print-inline-flex\",\"Menu\":\"Menu-module__Menu\",\"Menu-nav\":\"Menu-module__Menu-nav\",\"Menu-item\":\"Menu-module__Menu-item\",\"Menu-item--active\":\"Menu-module__Menu-item--active\",\"Menu--startShadow\":\"Menu-module__Menu--startShadow\",\"Menu--endShadow\":\"Menu-module__Menu--endShadow\"};function Item(_ref){_s6();var _ref$isActive=_ref.isActive,isActive=_ref$isActive===void 0?false:_ref$isActive,amount=_ref.amount,item=_ref.item,onScrollIntoView=_ref.onScrollIntoView,render=_ref.render,props=_objectWithoutProperties(_ref,[\"isActive\",\"amount\",\"item\",\"onScrollIntoView\",\"render\"]);var ref=React.useRef(null);var activeClassName=styles$z['Menu-item--active'];var itemClassNames=mergeClassNames(styles$z['Menu-item'],isActive&&activeClassName);React.useEffect(function(){var li=ref.current;if(isActive&&li){li.scrollIntoView({block:'end',inline:'center'});onScrollIntoView();}},[amount,isActive,onScrollIntoView]);return/*#__PURE__*/React__default.createElement(\"li\",_extends({className:itemClassNames,role:\"presentation\",ref:ref,tabIndex:1},props),render(activeClassName,item));}_s6(Item,\"8uVE59eA/r6b92xF80p7sH8rXLk=\");_c85=Item;function Menu(_ref){_s7();var className=_ref.className,menuItems=_ref.menuItems,isActiveItem=_ref.isActiveItem,renderItem=_ref.renderItem,props=_objectWithoutProperties(_ref,[\"className\",\"menuItems\",\"isActiveItem\",\"renderItem\"]);var navRef=React.useRef(null);var _useState=React.useState(false),_useState2=_slicedToArray(_useState,2),isStartShadowVisible=_useState2[0],setStartShadowVisible=_useState2[1];var _useState3=React.useState(false),_useState4=_slicedToArray(_useState3,2),isEndShadowVisible=_useState4[0],setEndShadowVisible=_useState4[1];var setShadows=React.useCallback(function(){var nav=navRef.current;if(!nav){return;}var isStartShadowVisible=nav.scrollLeft>1;var isEndShadowVisible=nav.scrollLeft0&&/*#__PURE__*/React__default.createElement(\"div\",null,Array.from(Array(linesOfText)).map(function(_,i){return/*#__PURE__*/React__default.createElement(Block$1,{animation:animation,width:i%2?'63%':'90%',key:i,className:styles$C.Variant2__text});})));}_c89=Variant2;function Placeholder(props){switch(props.variant){case 1:return/*#__PURE__*/React__default.createElement(Variant1,props);case 2:return/*#__PURE__*/React__default.createElement(Variant2,props);default:return null;}}_c90=Placeholder;Placeholder.Block=Block$1;var styles$D={\"d-none\":\"NotificationPopup-module__d-none\",\"d-inline\":\"NotificationPopup-module__d-inline\",\"d-inline-block\":\"NotificationPopup-module__d-inline-block\",\"d-block\":\"NotificationPopup-module__d-block\",\"d-table\":\"NotificationPopup-module__d-table\",\"d-table-row\":\"NotificationPopup-module__d-table-row\",\"d-table-cell\":\"NotificationPopup-module__d-table-cell\",\"d-flex\":\"NotificationPopup-module__d-flex\",\"d-inline-flex\":\"NotificationPopup-module__d-inline-flex\",\"d-sm-none\":\"NotificationPopup-module__d-sm-none\",\"d-sm-inline\":\"NotificationPopup-module__d-sm-inline\",\"d-sm-inline-block\":\"NotificationPopup-module__d-sm-inline-block\",\"d-sm-block\":\"NotificationPopup-module__d-sm-block\",\"d-sm-table\":\"NotificationPopup-module__d-sm-table\",\"d-sm-table-row\":\"NotificationPopup-module__d-sm-table-row\",\"d-sm-table-cell\":\"NotificationPopup-module__d-sm-table-cell\",\"d-sm-flex\":\"NotificationPopup-module__d-sm-flex\",\"d-sm-inline-flex\":\"NotificationPopup-module__d-sm-inline-flex\",\"d-md-none\":\"NotificationPopup-module__d-md-none\",\"d-md-inline\":\"NotificationPopup-module__d-md-inline\",\"d-md-inline-block\":\"NotificationPopup-module__d-md-inline-block\",\"d-md-block\":\"NotificationPopup-module__d-md-block\",\"d-md-table\":\"NotificationPopup-module__d-md-table\",\"d-md-table-row\":\"NotificationPopup-module__d-md-table-row\",\"d-md-table-cell\":\"NotificationPopup-module__d-md-table-cell\",\"d-md-flex\":\"NotificationPopup-module__d-md-flex\",\"d-md-inline-flex\":\"NotificationPopup-module__d-md-inline-flex\",\"d-lg-none\":\"NotificationPopup-module__d-lg-none\",\"d-lg-inline\":\"NotificationPopup-module__d-lg-inline\",\"d-lg-inline-block\":\"NotificationPopup-module__d-lg-inline-block\",\"d-lg-block\":\"NotificationPopup-module__d-lg-block\",\"d-lg-table\":\"NotificationPopup-module__d-lg-table\",\"d-lg-table-row\":\"NotificationPopup-module__d-lg-table-row\",\"d-lg-table-cell\":\"NotificationPopup-module__d-lg-table-cell\",\"d-lg-flex\":\"NotificationPopup-module__d-lg-flex\",\"d-lg-inline-flex\":\"NotificationPopup-module__d-lg-inline-flex\",\"d-xl-none\":\"NotificationPopup-module__d-xl-none\",\"d-xl-inline\":\"NotificationPopup-module__d-xl-inline\",\"d-xl-inline-block\":\"NotificationPopup-module__d-xl-inline-block\",\"d-xl-block\":\"NotificationPopup-module__d-xl-block\",\"d-xl-table\":\"NotificationPopup-module__d-xl-table\",\"d-xl-table-row\":\"NotificationPopup-module__d-xl-table-row\",\"d-xl-table-cell\":\"NotificationPopup-module__d-xl-table-cell\",\"d-xl-flex\":\"NotificationPopup-module__d-xl-flex\",\"d-xl-inline-flex\":\"NotificationPopup-module__d-xl-inline-flex\",\"d-print-none\":\"NotificationPopup-module__d-print-none\",\"d-print-inline\":\"NotificationPopup-module__d-print-inline\",\"d-print-inline-block\":\"NotificationPopup-module__d-print-inline-block\",\"d-print-block\":\"NotificationPopup-module__d-print-block\",\"d-print-table\":\"NotificationPopup-module__d-print-table\",\"d-print-table-row\":\"NotificationPopup-module__d-print-table-row\",\"d-print-table-cell\":\"NotificationPopup-module__d-print-table-cell\",\"d-print-flex\":\"NotificationPopup-module__d-print-flex\",\"d-print-inline-flex\":\"NotificationPopup-module__d-print-inline-flex\",\"notificationsWrapper\":\"NotificationPopup-module__notificationsWrapper\",\"title\":\"NotificationPopup-module__title\",\"notificationsContainer\":\"NotificationPopup-module__notificationsContainer\",\"notificationsTrigger\":\"NotificationPopup-module__notificationsTrigger\",\"notificationsBullet\":\"NotificationPopup-module__notificationsBullet\",\"notificationsBell\":\"NotificationPopup-module__notificationsBell\",\"close\":\"NotificationPopup-module__close\"};var NotificationPopup=function NotificationPopup(props){_s8();var title=props.title,openCallback=props.openCallback,children=props.children,className=props.className;var _useState=React.useState(!!props.activeByDefault),_useState2=_slicedToArray(_useState,2),isActive=_useState2[0],setIsActive=_useState2[1];var notifications=React__default.Children.count(children);var classes=mergeClassNames(styles$D.notificationsWrapper,className);var wrapperRef=React.useRef(null);function handleClickOutside(event){if(event.target instanceof Node&&wrapperRef.current&&!wrapperRef.current.contains(event.target)&&isActive){setIsActive(false);}}React.useEffect(function(){document.addEventListener('mousedown',handleClickOutside);return function(){document.removeEventListener('mousedown',handleClickOutside);};});React.useEffect(function(){if(isActive&&typeof openCallback==='function'){openCallback();}},[isActive,openCallback]);return/*#__PURE__*/React__default.createElement(\"div\",{className:classes,ref:wrapperRef},/*#__PURE__*/React__default.createElement(\"div\",{className:styles$D.notificationsTrigger,onClick:function onClick(){setIsActive(!isActive);}},notifications>0&&/*#__PURE__*/React__default.createElement(Icon,{name:\"bullet\",fontSize:\"11px\",className:styles$D.notificationsBullet}),/*#__PURE__*/React__default.createElement(Icon,{name:\"bell-small\",fontSize:\"18px\",className:styles$D.notificationsBell})),notifications>0&&isActive&&/*#__PURE__*/React__default.createElement(\"div\",{className:styles$D.notificationsContainer},/*#__PURE__*/React__default.createElement(\"div\",{className:styles$D.close,onClick:function onClick(){setIsActive(false);}},/*#__PURE__*/React__default.createElement(Icon,{name:\"close\",fontSize:\"12px\"})),title&&/*#__PURE__*/React__default.createElement(H5,{className:styles$D.title},title),/*#__PURE__*/React__default.createElement(\"div\",{onMouseDown:function onMouseDown(ev){return ev.preventDefault();}},children)));};_s8(NotificationPopup,\"r1jYcXthdbSMcftkvTiRGFPxZBo=\");_c91=NotificationPopup;var reactConfetti_min=createCommonjsModule(function(module,exports){!function(t,e){module.exports=e(React__default);}(\"undefined\"!=typeof self?self:commonjsGlobal,function(t){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports;}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r});},n.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0});},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var i in t){n.d(r,i,function(e){return t[e];}.bind(null,i));}return r;},n.n=function(t){var e=t&&t.__esModule?function(){return t[\"default\"];}:function(){return t;};return n.d(e,\"a\",e),e;},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e);},n.p=\"\",n(n.s=2);}([function(e,n){e.exports=t;},function(t,e,n){var r={linear:function linear(t,e,n,r){return(n-e)*t/r+e;},easeInQuad:function easeInQuad(t,e,n,r){return(n-e)*(t/=r)*t+e;},easeOutQuad:function easeOutQuad(t,e,n,r){return-(n-e)*(t/=r)*(t-2)+e;},easeInOutQuad:function easeInOutQuad(t,e,n,r){var i=n-e;return(t/=r/2)<1?i/2*t*t+e:-i/2*(--t*(t-2)-1)+e;},easeInCubic:function easeInCubic(t,e,n,r){return(n-e)*(t/=r)*t*t+e;},easeOutCubic:function easeOutCubic(t,e,n,r){return(n-e)*((t=t/r-1)*t*t+1)+e;},easeInOutCubic:function easeInOutCubic(t,e,n,r){var i=n-e;return(t/=r/2)<1?i/2*t*t*t+e:i/2*((t-=2)*t*t+2)+e;},easeInQuart:function easeInQuart(t,e,n,r){return(n-e)*(t/=r)*t*t*t+e;},easeOutQuart:function easeOutQuart(t,e,n,r){return-(n-e)*((t=t/r-1)*t*t*t-1)+e;},easeInOutQuart:function easeInOutQuart(t,e,n,r){var i=n-e;return(t/=r/2)<1?i/2*t*t*t*t+e:-i/2*((t-=2)*t*t*t-2)+e;},easeInQuint:function easeInQuint(t,e,n,r){return(n-e)*(t/=r)*t*t*t*t+e;},easeOutQuint:function easeOutQuint(t,e,n,r){return(n-e)*((t=t/r-1)*t*t*t*t+1)+e;},easeInOutQuint:function easeInOutQuint(t,e,n,r){var i=n-e;return(t/=r/2)<1?i/2*t*t*t*t*t+e:i/2*((t-=2)*t*t*t*t+2)+e;},easeInSine:function easeInSine(t,e,n,r){var i=n-e;return-i*Math.cos(t/r*(Math.PI/2))+i+e;},easeOutSine:function easeOutSine(t,e,n,r){return(n-e)*Math.sin(t/r*(Math.PI/2))+e;},easeInOutSine:function easeInOutSine(t,e,n,r){return-(n-e)/2*(Math.cos(Math.PI*t/r)-1)+e;},easeInExpo:function easeInExpo(t,e,n,r){return 0==t?e:(n-e)*Math.pow(2,10*(t/r-1))+e;},easeOutExpo:function easeOutExpo(t,e,n,r){var i=n-e;return t==r?e+i:i*(1-Math.pow(2,-10*t/r))+e;},easeInOutExpo:function easeInOutExpo(t,e,n,r){var i=n-e;return 0===t?e:t===r?e+i:(t/=r/2)<1?i/2*Math.pow(2,10*(t-1))+e:i/2*(2-Math.pow(2,-10*--t))+e;},easeInCirc:function easeInCirc(t,e,n,r){return-(n-e)*(Math.sqrt(1-(t/=r)*t)-1)+e;},easeOutCirc:function easeOutCirc(t,e,n,r){return(n-e)*Math.sqrt(1-(t=t/r-1)*t)+e;},easeInOutCirc:function easeInOutCirc(t,e,n,r){var i=n-e;return(t/=r/2)<1?-i/2*(Math.sqrt(1-t*t)-1)+e:i/2*(Math.sqrt(1-(t-=2)*t)+1)+e;},easeInElastic:function easeInElastic(t,e,n,r){var i,o,a,c=n-e;return a=1.70158,0===t?e:1==(t/=r)?e+c:((o=0)||(o=.3*r),(i=c)=1&&this.rotationDirection===i.Positive?this.rotationDirection=i.Negative:this.rotateY<=-1&&this.rotationDirection===i.Negative&&(this.rotationDirection=i.Positive);var s=.1*this.rotationDirection;if(this.rotateY+=s,this.angle+=this.angularSpin,this.context.save(),this.context.translate(this.x,this.y),this.context.rotate(this.angle),this.context.scale(1,this.rotateY),this.context.rotate(this.angle),this.context.beginPath(),this.context.fillStyle=this.color,this.context.strokeStyle=this.color,this.context.globalAlpha=a,this.context.lineCap=\"round\",this.context.lineWidth=2,c&&\"function\"==typeof c)c.call(this,this.context);else switch(this.shape){case r.Circle:this.context.beginPath(),this.context.arc(0,0,this.radius,0,2*Math.PI),this.context.fill();break;case r.Square:this.context.fillRect(-this.w/2,-this.h/2,this.w,this.h);break;case r.Strip:this.context.fillRect(-this.w/6,-this.h/2,this.w/3,this.h);}this.context.closePath(),this.context.restore();}}])&&f(e.prototype,n),t;}();function p(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t;}var v=function t(e,n){var r=this;!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\");}(this,t),p(this,\"canvas\",void 0),p(this,\"context\",void 0),p(this,\"getOptions\",void 0),p(this,\"x\",0),p(this,\"y\",0),p(this,\"w\",0),p(this,\"h\",0),p(this,\"lastNumberOfPieces\",0),p(this,\"tweenInitTime\",Date.now()),p(this,\"particles\",[]),p(this,\"particlesGenerated\",0),p(this,\"removeParticleAt\",function(t){r.particles.splice(t,1);}),p(this,\"getParticle\",function(){var t=u(r.x,r.w+r.x),e=u(r.y,r.h+r.y);return new l(r.context,r.getOptions,t,e);}),p(this,\"animate\",function(){var t=r.canvas,e=r.context,n=r.particlesGenerated,i=r.lastNumberOfPieces,o=r.getOptions(),a=o.run,c=o.recycle,s=o.numberOfPieces,u=o.debug,f=o.tweenFunction,h=o.tweenDuration;if(!a)return!1;var l=r.particles.length,p=c?l:n,v=Date.now();if(ph?h:Math.max(0,v-y),p,s,h),b=Math.round(d-p),g=0;gt.height||e.y<-100||e.x>t.width+100||e.x<-100)&&(c&&p<=s?r.particles[n]=r.getParticle():r.removeParticleAt(n));}),l>0||p0&&n.call(r,r),r._options.run=!1);}),b(this,\"reset\",function(){r.generator&&r.generator.particlesGenerated>0&&(r.generator.particlesGenerated=0,r.generator.particles=[],r.generator.lastNumberOfPieces=0);}),b(this,\"stop\",function(){r.options={run:!1},r.rafId&&(cancelAnimationFrame(r.rafId),r.rafId=void 0);}),this.canvas=e;var i=this.canvas.getContext(\"2d\");if(!i)throw new Error(\"Could not get canvas context\");this.context=i,this.generator=new v(this.canvas,function(){return r.options;}),this.options=n,this.update();}var e,n;return e=t,(n=[{key:\"options\",get:function get(){return this._options;},set:function set(t){var e=this._options&&this._options.run,n=this._options&&this._options.recycle;this.setOptionsWithDefaults(t),this.generator&&(Object.assign(this.generator,this.options.confettiSource),\"boolean\"==typeof t.recycle&&t.recycle&&!1===n&&(this.generator.lastNumberOfPieces=this.generator.particles.length)),\"boolean\"==typeof t.run&&t.run&&!1===e&&this.update();}}])&&d(e.prototype,n),t;}();function w(t){return function(t){if(Array.isArray(t)){for(var e=0,n=new Array(t.length);e1?i-1:0),c=1;c0){decrease=setTimeout(function(){return setHowHardToParty(numberOfPieces/2);},easeOutMs*0.6);decreaseFurther=setTimeout(function(){return setHowHardToParty(numberOfPieces/4);},easeOutMs*0.8);cancelPartyTime=setTimeout(function(){return setHowHardToParty(0);},easeOutMs);}return function(){if(easeOutMs>0){clearTimeout(decrease);clearTimeout(decreaseFurther);clearTimeout(cancelPartyTime);}};},[easeOutMs,numberOfPieces]);return/*#__PURE__*/React__default.createElement(Portal$1,null,/*#__PURE__*/React__default.createElement(ReactConfetti,_extends({style:{position:'fixed'},height:innerHeight,width:innerWidth,numberOfPieces:howHardToParty,drawShape:supportsPath2D?function(ctx){var shape=paths[this.shape];if(shape){ctx.fill(shape);}}:undefined},props)));}_s10(Confetti,\"GwE+D3iYFww192nkBMWdNLfRt+k=\",false,function(){return[useWindowSize];});_c93=Confetti;function useMedia(query){_s11();var _useState=React.useState(window.matchMedia(query).matches),_useState2=_slicedToArray(_useState,2),matches=_useState2[0],setMatches=_useState2[1];React.useEffect(function(){var media=window.matchMedia(query);if(media.matches!==matches){setMatches(media.matches);}var listener=function listener(){return setMatches(media.matches);};media.addListener(listener);return function(){return media.removeListener(listener);};},[matches,query]);return matches;}_s11(useMedia,\"SUByY7C9/JkNex5f6wmEqdXqpZ4=\");var styles$E={\"CollapsibleTable\":\"CollapsibleTable-module__CollapsibleTable\",\"CollapsibleTable__IconHeader\":\"CollapsibleTable-module__CollapsibleTable__IconHeader\",\"TableRow__Icon\":\"CollapsibleTable-module__TableRow__Icon\",\"TableRow__Collapsible--expanded\":\"CollapsibleTable-module__TableRow__Collapsible--expanded\",\"TableRow__Collapsible--collapsed\":\"CollapsibleTable-module__TableRow__Collapsible--collapsed\",\"TableRow__Collapsible__Chevron--expanded\":\"CollapsibleTable-module__TableRow__Collapsible__Chevron--expanded\"};var Row$2=Table.Row,Cell$1=Table.Cell;function TableRow(_ref){_s12();var isUnderBreakpoint=_ref.isUnderBreakpoint,cols=_ref.cols,collapsibleRow=_ref.collapsibleRow,_ref$collapseStyle=_ref.collapseStyle,collapseStyle=_ref$collapseStyle===void 0?'plus':_ref$collapseStyle;var _useState=React.useState(false),_useState2=_slicedToArray(_useState,2),isExpanded=_useState2[0],toggleExpanded=_useState2[1];// the 'collapse' icon is off-center and needs to be corrected\nvar iconStyle={textAlign:'center',position:'relative',top:isExpanded?5:0};var collapsibleRowClass=mergeClassNames(styles$E['TableRow__Collapsible'],isExpanded?styles$E['TableRow__Collapsible--expanded']:styles$E['TableRow__Collapsible--collapsed']);var collapsibleRowChevronClass=isExpanded?styles$E['TableRow__Collapsible__Chevron--expanded']:styles$E['TableRow__Collapsible__Chevron--collapsed'];var collapsible=function collapsible(){switch(collapseStyle){case'chevron':return/*#__PURE__*/React__default.createElement(\"div\",{style:iconStyle},/*#__PURE__*/React__default.createElement(Icon,{name:'chevron-light',className:collapsibleRowChevronClass,fontSize:\"13px\",variant:4}));case'plus':default:return/*#__PURE__*/React__default.createElement(\"div\",{style:iconStyle},/*#__PURE__*/React__default.createElement(Icon,{name:isExpanded?'collapse':'add',fontSize:\"13px\"}));}};return/*#__PURE__*/React__default.createElement(React__default.Fragment,null,/*#__PURE__*/React__default.createElement(Row$2,null,cols.map(function(renderFn,i){return/*#__PURE__*/React__default.createElement(Cell$1,{key:i},renderFn());}),isUnderBreakpoint&&/*#__PURE__*/React__default.createElement(Cell$1,{onClick:function onClick(){return toggleExpanded(!isExpanded);},className:styles$E.TableRow__Icon},collapsible())),isUnderBreakpoint&&/*#__PURE__*/React__default.createElement(Row$2,null,/*#__PURE__*/React__default.createElement(Cell$1,{colSpan:cols.length+1,className:collapsibleRowClass},collapsibleRow())));}_s12(TableRow,\"GH2udnDFCwOymihpi1Aydex4hN0=\");_c94=TableRow;var Thead$1=Table.Thead,Tbody$1=Table.Tbody,Row$3=Table.Row,Th$1=Table.Th;function CollapsibleTable(props){_s13();var isUnderBreakpoint=useMedia(\"(max-width: \".concat(props.breakpoint,\"px)\"));if(!props.data){return null;}var classes=mergeClassNames(styles$E.CollapsibleTable,props.className);var headers=isUnderBreakpoint?props.headersCollapsed:props.headers;return/*#__PURE__*/React__default.createElement(Table,{className:classes},/*#__PURE__*/React__default.createElement(Thead$1,null,/*#__PURE__*/React__default.createElement(Row$3,null,headers.map(function(h){var thProps=typeof props.getHeaderProps==='function'?props.getHeaderProps(h):{};return/*#__PURE__*/React__default.createElement(Th$1,_extends({key:h},thProps),h);}),isUnderBreakpoint&&/*#__PURE__*/React__default.createElement(Th$1,{className:styles$E.CollapsibleTable__IconHeader}))),/*#__PURE__*/React__default.createElement(Tbody$1,null,props.data.map(function(datum,i){return/*#__PURE__*/React__default.createElement(TableRow,{key:typeof props.getRowKey==='function'?props.getRowKey(datum):i,isUnderBreakpoint:isUnderBreakpoint,cols:headers.map(function(field){return function(){return props.renderCell(datum,field);};}),collapsibleRow:function collapsibleRow(){return props.renderCollapsibleRow(datum);},collapseStyle:props.collapsibleStyle});})));}_s13(CollapsibleTable,\"AytEXE7AL6rQVMYVAnnihjyqI/g=\",false,function(){return[useMedia];});_c95=CollapsibleTable;var styles$F={\"d-none\":\"ProgressTracker-module__d-none\",\"d-inline\":\"ProgressTracker-module__d-inline\",\"d-inline-block\":\"ProgressTracker-module__d-inline-block\",\"d-block\":\"ProgressTracker-module__d-block\",\"d-table\":\"ProgressTracker-module__d-table\",\"d-table-row\":\"ProgressTracker-module__d-table-row\",\"d-table-cell\":\"ProgressTracker-module__d-table-cell\",\"d-flex\":\"ProgressTracker-module__d-flex\",\"d-inline-flex\":\"ProgressTracker-module__d-inline-flex\",\"d-sm-none\":\"ProgressTracker-module__d-sm-none\",\"d-sm-inline\":\"ProgressTracker-module__d-sm-inline\",\"d-sm-inline-block\":\"ProgressTracker-module__d-sm-inline-block\",\"d-sm-block\":\"ProgressTracker-module__d-sm-block\",\"d-sm-table\":\"ProgressTracker-module__d-sm-table\",\"d-sm-table-row\":\"ProgressTracker-module__d-sm-table-row\",\"d-sm-table-cell\":\"ProgressTracker-module__d-sm-table-cell\",\"d-sm-flex\":\"ProgressTracker-module__d-sm-flex\",\"d-sm-inline-flex\":\"ProgressTracker-module__d-sm-inline-flex\",\"d-md-none\":\"ProgressTracker-module__d-md-none\",\"d-md-inline\":\"ProgressTracker-module__d-md-inline\",\"d-md-inline-block\":\"ProgressTracker-module__d-md-inline-block\",\"d-md-block\":\"ProgressTracker-module__d-md-block\",\"d-md-table\":\"ProgressTracker-module__d-md-table\",\"d-md-table-row\":\"ProgressTracker-module__d-md-table-row\",\"d-md-table-cell\":\"ProgressTracker-module__d-md-table-cell\",\"d-md-flex\":\"ProgressTracker-module__d-md-flex\",\"d-md-inline-flex\":\"ProgressTracker-module__d-md-inline-flex\",\"d-lg-none\":\"ProgressTracker-module__d-lg-none\",\"d-lg-inline\":\"ProgressTracker-module__d-lg-inline\",\"d-lg-inline-block\":\"ProgressTracker-module__d-lg-inline-block\",\"d-lg-block\":\"ProgressTracker-module__d-lg-block\",\"d-lg-table\":\"ProgressTracker-module__d-lg-table\",\"d-lg-table-row\":\"ProgressTracker-module__d-lg-table-row\",\"d-lg-table-cell\":\"ProgressTracker-module__d-lg-table-cell\",\"d-lg-flex\":\"ProgressTracker-module__d-lg-flex\",\"d-lg-inline-flex\":\"ProgressTracker-module__d-lg-inline-flex\",\"d-xl-none\":\"ProgressTracker-module__d-xl-none\",\"d-xl-inline\":\"ProgressTracker-module__d-xl-inline\",\"d-xl-inline-block\":\"ProgressTracker-module__d-xl-inline-block\",\"d-xl-block\":\"ProgressTracker-module__d-xl-block\",\"d-xl-table\":\"ProgressTracker-module__d-xl-table\",\"d-xl-table-row\":\"ProgressTracker-module__d-xl-table-row\",\"d-xl-table-cell\":\"ProgressTracker-module__d-xl-table-cell\",\"d-xl-flex\":\"ProgressTracker-module__d-xl-flex\",\"d-xl-inline-flex\":\"ProgressTracker-module__d-xl-inline-flex\",\"d-print-none\":\"ProgressTracker-module__d-print-none\",\"d-print-inline\":\"ProgressTracker-module__d-print-inline\",\"d-print-inline-block\":\"ProgressTracker-module__d-print-inline-block\",\"d-print-block\":\"ProgressTracker-module__d-print-block\",\"d-print-table\":\"ProgressTracker-module__d-print-table\",\"d-print-table-row\":\"ProgressTracker-module__d-print-table-row\",\"d-print-table-cell\":\"ProgressTracker-module__d-print-table-cell\",\"d-print-flex\":\"ProgressTracker-module__d-print-flex\",\"d-print-inline-flex\":\"ProgressTracker-module__d-print-inline-flex\",\"container\":\"ProgressTracker-module__container\",\"text\":\"ProgressTracker-module__text\",\"circle\":\"ProgressTracker-module__circle\",\"current\":\"ProgressTracker-module__current\"};var ProgressTracker=function ProgressTracker(_ref){var steps=_ref.steps,currentStepIndex=_ref.currentStepIndex;var stepClassName=function stepClassName(stepName){var isCurrentStep=currentStepIndex===steps.indexOf(stepName);return[styles$F.text,isCurrentStep&&styles$F['current']].filter(Boolean).join(' ');};return/*#__PURE__*/React__default.createElement(\"div\",{className:styles$F.container},steps.map(function(stepName){return/*#__PURE__*/React__default.createElement(Text,{key:stepName,as:\"div\",fontSize:\"body-xxsmall\",fontWeight:600,className:stepClassName(stepName)},stepName,/*#__PURE__*/React__default.createElement(\"div\",{className:styles$F.circle}));}));};_c96=ProgressTracker;var styles$G={\"d-none\":\"Wizard-module__d-none\",\"d-inline\":\"Wizard-module__d-inline\",\"d-inline-block\":\"Wizard-module__d-inline-block\",\"d-block\":\"Wizard-module__d-block\",\"d-table\":\"Wizard-module__d-table\",\"d-table-row\":\"Wizard-module__d-table-row\",\"d-table-cell\":\"Wizard-module__d-table-cell\",\"d-flex\":\"Wizard-module__d-flex\",\"d-inline-flex\":\"Wizard-module__d-inline-flex\",\"d-sm-none\":\"Wizard-module__d-sm-none\",\"d-sm-inline\":\"Wizard-module__d-sm-inline\",\"d-sm-inline-block\":\"Wizard-module__d-sm-inline-block\",\"d-sm-block\":\"Wizard-module__d-sm-block\",\"d-sm-table\":\"Wizard-module__d-sm-table\",\"d-sm-table-row\":\"Wizard-module__d-sm-table-row\",\"d-sm-table-cell\":\"Wizard-module__d-sm-table-cell\",\"d-sm-flex\":\"Wizard-module__d-sm-flex\",\"d-sm-inline-flex\":\"Wizard-module__d-sm-inline-flex\",\"d-md-none\":\"Wizard-module__d-md-none\",\"d-md-inline\":\"Wizard-module__d-md-inline\",\"d-md-inline-block\":\"Wizard-module__d-md-inline-block\",\"d-md-block\":\"Wizard-module__d-md-block\",\"d-md-table\":\"Wizard-module__d-md-table\",\"d-md-table-row\":\"Wizard-module__d-md-table-row\",\"d-md-table-cell\":\"Wizard-module__d-md-table-cell\",\"d-md-flex\":\"Wizard-module__d-md-flex\",\"d-md-inline-flex\":\"Wizard-module__d-md-inline-flex\",\"d-lg-none\":\"Wizard-module__d-lg-none\",\"d-lg-inline\":\"Wizard-module__d-lg-inline\",\"d-lg-inline-block\":\"Wizard-module__d-lg-inline-block\",\"d-lg-block\":\"Wizard-module__d-lg-block\",\"d-lg-table\":\"Wizard-module__d-lg-table\",\"d-lg-table-row\":\"Wizard-module__d-lg-table-row\",\"d-lg-table-cell\":\"Wizard-module__d-lg-table-cell\",\"d-lg-flex\":\"Wizard-module__d-lg-flex\",\"d-lg-inline-flex\":\"Wizard-module__d-lg-inline-flex\",\"d-xl-none\":\"Wizard-module__d-xl-none\",\"d-xl-inline\":\"Wizard-module__d-xl-inline\",\"d-xl-inline-block\":\"Wizard-module__d-xl-inline-block\",\"d-xl-block\":\"Wizard-module__d-xl-block\",\"d-xl-table\":\"Wizard-module__d-xl-table\",\"d-xl-table-row\":\"Wizard-module__d-xl-table-row\",\"d-xl-table-cell\":\"Wizard-module__d-xl-table-cell\",\"d-xl-flex\":\"Wizard-module__d-xl-flex\",\"d-xl-inline-flex\":\"Wizard-module__d-xl-inline-flex\",\"d-print-none\":\"Wizard-module__d-print-none\",\"d-print-inline\":\"Wizard-module__d-print-inline\",\"d-print-inline-block\":\"Wizard-module__d-print-inline-block\",\"d-print-block\":\"Wizard-module__d-print-block\",\"d-print-table\":\"Wizard-module__d-print-table\",\"d-print-table-row\":\"Wizard-module__d-print-table-row\",\"d-print-table-cell\":\"Wizard-module__d-print-table-cell\",\"d-print-flex\":\"Wizard-module__d-print-flex\",\"d-print-inline-flex\":\"Wizard-module__d-print-inline-flex\",\"block\":\"Wizard-module__block\",\"header\":\"Wizard-module__header\",\"controls\":\"Wizard-module__controls\",\"back-button\":\"Wizard-module__back-button\",\"main-controls\":\"Wizard-module__main-controls\",\"back-button-mobile-container\":\"Wizard-module__back-button-mobile-container\"};var BackButton=function BackButton(_ref){var buttonLabel=_ref.buttonLabel,onClick=_ref.onClick;return/*#__PURE__*/React__default.createElement(Link,{icon:\"arrow-left\",color:\"warm-gray\",iconplacement:\"start\",onClick:onClick,variant:\"text-with-icon\",className:styles$G['back-button']},buttonLabel);};_c97=BackButton;var Wizard=function Wizard(_ref2){var steps=_ref2.steps,currentStepIndex=_ref2.currentStepIndex,title=_ref2.title,subtitle=_ref2.subtitle,children=_ref2.children,backButtonLabel=_ref2.backButtonLabel,onBackButtonClick=_ref2.onBackButtonClick,mainControlsComponent=_ref2.mainControlsComponent;return/*#__PURE__*/React__default.createElement(React__default.Fragment,null,/*#__PURE__*/React__default.createElement(ProgressTracker,{steps:steps,currentStepIndex:currentStepIndex}),/*#__PURE__*/React__default.createElement(Block,{withShadow:true,small:true,className:styles$G.block},/*#__PURE__*/React__default.createElement(\"div\",{className:styles$G.header},/*#__PURE__*/React__default.createElement(Text,{as:\"div\",fontSize:\"h4\"},title),subtitle&&/*#__PURE__*/React__default.createElement(\"div\",null,subtitle)),children,/*#__PURE__*/React__default.createElement(\"div\",{className:styles$G.controls},backButtonLabel&&onBackButtonClick&&/*#__PURE__*/React__default.createElement(BackButton,{buttonLabel:backButtonLabel,onClick:onBackButtonClick}),mainControlsComponent&&/*#__PURE__*/React__default.createElement(\"div\",{className:styles$G['main-controls']},mainControlsComponent()))),backButtonLabel&&onBackButtonClick&&/*#__PURE__*/React__default.createElement(\"div\",{className:styles$G['back-button-mobile-container']},/*#__PURE__*/React__default.createElement(BackButton,{buttonLabel:backButtonLabel,onClick:onBackButtonClick})));};_c98=Wizard;var styles$H={\"d-none\":\"Pagination-module__d-none\",\"d-inline\":\"Pagination-module__d-inline\",\"d-inline-block\":\"Pagination-module__d-inline-block\",\"d-block\":\"Pagination-module__d-block\",\"d-table\":\"Pagination-module__d-table\",\"d-table-row\":\"Pagination-module__d-table-row\",\"d-table-cell\":\"Pagination-module__d-table-cell\",\"d-flex\":\"Pagination-module__d-flex\",\"d-inline-flex\":\"Pagination-module__d-inline-flex\",\"d-sm-none\":\"Pagination-module__d-sm-none\",\"d-sm-inline\":\"Pagination-module__d-sm-inline\",\"d-sm-inline-block\":\"Pagination-module__d-sm-inline-block\",\"d-sm-block\":\"Pagination-module__d-sm-block\",\"d-sm-table\":\"Pagination-module__d-sm-table\",\"d-sm-table-row\":\"Pagination-module__d-sm-table-row\",\"d-sm-table-cell\":\"Pagination-module__d-sm-table-cell\",\"d-sm-flex\":\"Pagination-module__d-sm-flex\",\"d-sm-inline-flex\":\"Pagination-module__d-sm-inline-flex\",\"d-md-none\":\"Pagination-module__d-md-none\",\"d-md-inline\":\"Pagination-module__d-md-inline\",\"d-md-inline-block\":\"Pagination-module__d-md-inline-block\",\"d-md-block\":\"Pagination-module__d-md-block\",\"d-md-table\":\"Pagination-module__d-md-table\",\"d-md-table-row\":\"Pagination-module__d-md-table-row\",\"d-md-table-cell\":\"Pagination-module__d-md-table-cell\",\"d-md-flex\":\"Pagination-module__d-md-flex\",\"d-md-inline-flex\":\"Pagination-module__d-md-inline-flex\",\"d-lg-none\":\"Pagination-module__d-lg-none\",\"d-lg-inline\":\"Pagination-module__d-lg-inline\",\"d-lg-inline-block\":\"Pagination-module__d-lg-inline-block\",\"d-lg-block\":\"Pagination-module__d-lg-block\",\"d-lg-table\":\"Pagination-module__d-lg-table\",\"d-lg-table-row\":\"Pagination-module__d-lg-table-row\",\"d-lg-table-cell\":\"Pagination-module__d-lg-table-cell\",\"d-lg-flex\":\"Pagination-module__d-lg-flex\",\"d-lg-inline-flex\":\"Pagination-module__d-lg-inline-flex\",\"d-xl-none\":\"Pagination-module__d-xl-none\",\"d-xl-inline\":\"Pagination-module__d-xl-inline\",\"d-xl-inline-block\":\"Pagination-module__d-xl-inline-block\",\"d-xl-block\":\"Pagination-module__d-xl-block\",\"d-xl-table\":\"Pagination-module__d-xl-table\",\"d-xl-table-row\":\"Pagination-module__d-xl-table-row\",\"d-xl-table-cell\":\"Pagination-module__d-xl-table-cell\",\"d-xl-flex\":\"Pagination-module__d-xl-flex\",\"d-xl-inline-flex\":\"Pagination-module__d-xl-inline-flex\",\"d-print-none\":\"Pagination-module__d-print-none\",\"d-print-inline\":\"Pagination-module__d-print-inline\",\"d-print-inline-block\":\"Pagination-module__d-print-inline-block\",\"d-print-block\":\"Pagination-module__d-print-block\",\"d-print-table\":\"Pagination-module__d-print-table\",\"d-print-table-row\":\"Pagination-module__d-print-table-row\",\"d-print-table-cell\":\"Pagination-module__d-print-table-cell\",\"d-print-flex\":\"Pagination-module__d-print-flex\",\"d-print-inline-flex\":\"Pagination-module__d-print-inline-flex\",\"pagination\":\"Pagination-module__pagination\",\"pageButton\":\"Pagination-module__pageButton\",\"active\":\"Pagination-module__active\",\"clickable\":\"Pagination-module__clickable\",\"small\":\"Pagination-module__small\",\"large\":\"Pagination-module__large\"};var defaultButton=function defaultButton(_ref){var children=_ref.children,props=_objectWithoutProperties(_ref,[\"children\"]);return/*#__PURE__*/React.createElement(\"button\",props,children);};var getVisiblePages=function getVisiblePages(page,pages){if(pages<6){return Array.from(Array(pages).keys());}if(page===2){return[0,1,2,'...',pages-1];}if(page===pages-3){return[0,'...',pages-3,pages-2,pages-1];}if(page>2&&page0;var changePage=function changePage(newPage){if(newPage===page){return;}onPageChange(newPage);};return/*#__PURE__*/React.createElement(\"div\",{className:classNames},/*#__PURE__*/React.createElement(PageButtonComponent,{className:styles$H.pageButton,onClick:function onClick(){if(isFirstPage){return;}changePage(page-1);},disabled:isFirstPage||!hasPages},/*#__PURE__*/React.createElement(\"span\",null,/*#__PURE__*/React.createElement(Icon,{name:\"arrow-left\",fontSize:\"100%\"}))),visiblePages.map(function(pageIndex,index){if(typeof pageIndex==='string'){return/*#__PURE__*/React.createElement(\"div\",{key:\"\".concat(pageIndex,\"-\").concat(index),className:styles$H.pageButton},/*#__PURE__*/React.createElement(\"span\",null,pageIndex));}return/*#__PURE__*/React.createElement(PageButtonComponent,{key:pageIndex,className:mergeClassNames(styles$H.pageButton,pageIndex===page&&styles$H.active),onClick:function onClick(){return changePage(pageIndex);}},/*#__PURE__*/React.createElement(\"span\",null,pageIndex+1));}),/*#__PURE__*/React.createElement(PageButtonComponent,{className:styles$H.pageButton,onClick:function onClick(){if(isLastPage){return;}changePage(page+1);},disabled:isLastPage||!hasPages},/*#__PURE__*/React.createElement(\"span\",null,/*#__PURE__*/React.createElement(Icon,{name:\"arrow-right\",fontSize:\"100%\"}))));};_c99=Pagination;exports.Block=Block;exports.BlogCard=BlogCard;exports.BoxShadow=BoxShadow;exports.Button=Button;exports.Card=Card;exports.Checkbox=Checkbox;exports.Col=Col;exports.Collapsible=Collapsible;exports.CollapsibleTable=CollapsibleTable;exports.Confetti=Confetti;exports.Confirmation=Confirmation;exports.Container=Container;exports.ContentBlock=ContentBlock;exports.DatePicker=DatePicker;exports.Error=Error$1;exports.Flex=Flex;exports.FloatingInfoBlock=FloatingInfoBlock;exports.H1=H1;exports.H2=H2;exports.H3=H3;exports.H4=H4;exports.H5=H5;exports.H6=H6;exports.HighlightedHeader=HighlightedHeader;exports.Icon=Icon;exports.Image=Image;exports.ImageStack=ImageStack;exports.Input=Input;exports.Label=Label;exports.Link=Link;exports.Loader=Loader;exports.Logo=Logo;exports.Menu=Menu;exports.Modal=Modal;exports.Navigation=Navigation;exports.NotificationPopup=NotificationPopup;exports.Pagination=Pagination;exports.Paragraph=Paragraph;exports.Placeholder=Placeholder;exports.ProgressBar=ProgressBar;exports.ProgressTracker=ProgressTracker;exports.Radio=Radio;exports.RadioGroup=RadioGroup;exports.RangeSlider=RangeSlider;exports.Row=Row;exports.Select=Select;exports.Span=Span;exports.Table=Table;exports.Tabs=Tabs;exports.Text=Text;exports.TextArea=TextArea;exports.Toggle=Toggle;exports.Wizard=Wizard;exports.registerLocale=We;exports.setDefaultLocale=Ae;var _c,_c2,_c3,_c4,_c5,_c6,_c7,_c8,_c9,_c10,_c11,_c12,_c13,_c14,_c15,_c16,_c17,_c18,_c19,_c20,_c21,_c22,_c23,_c24,_c25,_c26,_c27,_c28,_c29,_c30,_c31,_c32,_c33,_c34,_c35,_c36,_c37,_c38,_c39,_c40,_c41,_c42,_c43,_c44,_c45,_c46,_c47,_c48,_c49,_c50,_c51,_c52,_c53,_c54,_c55,_c56,_c57,_c58,_c59,_c60,_c61,_c62,_c63,_c64,_c65,_c66,_c67,_c68,_c69,_c70,_c71,_c72,_c73,_c74,_c75,_c76,_c77,_c78,_c79,_c80,_c81,_c82,_c83,_c84,_c85,_c86,_c87,_c88,_c89,_c90,_c91,_c92,_c93,_c94,_c95,_c96,_c97,_c98,_c99;$RefreshReg$(_c,\"React__default\");$RefreshReg$(_c2,\"Col$React.forwardRef\");$RefreshReg$(_c3,\"Col\");$RefreshReg$(_c4,\"H1\");$RefreshReg$(_c5,\"H2\");$RefreshReg$(_c6,\"H3\");$RefreshReg$(_c7,\"H4\");$RefreshReg$(_c8,\"H5\");$RefreshReg$(_c9,\"H6\");$RefreshReg$(_c10,\"A\");$RefreshReg$(_c11,\"Lazyload\");$RefreshReg$(_c12,\"Flex\");$RefreshReg$(_c13,\"Label\");$RefreshReg$(_c14,\"InputBase$React.forwardRef\");$RefreshReg$(_c15,\"InputBase\");$RefreshReg$(_c16,\"SectionTitle_1$createCommonjsModule\");$RefreshReg$(_c17,\"SectionTitle_1\");$RefreshReg$(_c18,\"Item_1$createCommonjsModule\");$RefreshReg$(_c19,\"Item_1\");$RefreshReg$(_c20,\"ItemsList_1$createCommonjsModule\");$RefreshReg$(_c21,\"ItemsList_1\");$RefreshReg$(_c22,\"Autowhatever_1$createCommonjsModule\");$RefreshReg$(_c23,\"Autowhatever_1\");$RefreshReg$(_c24,\"Autosuggest_1$createCommonjsModule\");$RefreshReg$(_c25,\"Autosuggest_1\");$RefreshReg$(_c26,\"AutoSuggestInput$React.forwardRef\");$RefreshReg$(_c27,\"AutoSuggestInput\");$RefreshReg$(_c28,\"Input$React.forwardRef\");$RefreshReg$(_c29,\"Input\");$RefreshReg$(_c30,\"BlogCard\");$RefreshReg$(_c31,\"ImageStack\");$RefreshReg$(_c32,\"ContentBlock\");$RefreshReg$(_c33,\"Select\");$RefreshReg$(_c34,\"Logo\");$RefreshReg$(_c35,\"Portal$1\");$RefreshReg$(_c36,\"ModalContent$React.forwardRef\");$RefreshReg$(_c37,\"ModalContent\");$RefreshReg$(_c38,\"ModalHeader\");$RefreshReg$(_c39,\"ModalFooter\");$RefreshReg$(_c40,\"Modal\");$RefreshReg$(_c41,\"ProgressBar\");$RefreshReg$(_c42,\"Popper$1\");$RefreshReg$(_c43,\"Reference\");$RefreshReg$(_c44,\"De\");$RefreshReg$(_c45,\"Ce\");$RefreshReg$(_c46,\"Se\");$RefreshReg$(_c47,\"Me\");$RefreshReg$(_c48,\"Pe\");$RefreshReg$(_c49,\"Ee\");$RefreshReg$(_c50,\"Ne\");$RefreshReg$(_c51,\"Oe\");$RefreshReg$(_c52,\"Ye\");$RefreshReg$(_c53,\"Te\");$RefreshReg$(_c54,\"Le\");$RefreshReg$(_c55,\"Ie\");$RefreshReg$(_c56,\"Fe\");$RefreshReg$(_c57,\"Re\");$RefreshReg$(_c58,\"We\");$RefreshReg$(_c59,\"Ae\");$RefreshReg$(_c60,\"Be\");$RefreshReg$(_c61,\"Ke\");$RefreshReg$(_c62,\"He\");$RefreshReg$(_c63,\"Qe\");$RefreshReg$(_c64,\"Ve\");$RefreshReg$(_c65,\"Ue\");$RefreshReg$(_c66,\"Ge\");$RefreshReg$(_c67,\"Je\");$RefreshReg$(_c68,\"Xe\");$RefreshReg$(_c69,\"Ze\");$RefreshReg$(_c70,\"DatePicker\");$RefreshReg$(_c71,\"Collapsible\");$RefreshReg$(_c72,\"Switch\");$RefreshReg$(_c73,\"Radio\");$RefreshReg$(_c74,\"RadioGroup\");$RefreshReg$(_c75,\"Thead\");$RefreshReg$(_c76,\"Tbody\");$RefreshReg$(_c77,\"Row$1\");$RefreshReg$(_c78,\"Th\");$RefreshReg$(_c79,\"Cell\");$RefreshReg$(_c80,\"Tfoot\");$RefreshReg$(_c81,\"Table\");$RefreshReg$(_c82,\"Tab\");$RefreshReg$(_c83,\"Tabs\");$RefreshReg$(_c84,\"Checkbox\");$RefreshReg$(_c85,\"Item\");$RefreshReg$(_c86,\"Menu\");$RefreshReg$(_c87,\"Block$1\");$RefreshReg$(_c88,\"Variant1\");$RefreshReg$(_c89,\"Variant2\");$RefreshReg$(_c90,\"Placeholder\");$RefreshReg$(_c91,\"NotificationPopup\");$RefreshReg$(_c92,\"ReactConfetti\");$RefreshReg$(_c93,\"Confetti\");$RefreshReg$(_c94,\"TableRow\");$RefreshReg$(_c95,\"CollapsibleTable\");$RefreshReg$(_c96,\"ProgressTracker\");$RefreshReg$(_c97,\"BackButton\");$RefreshReg$(_c98,\"Wizard\");$RefreshReg$(_c99,\"Pagination\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL0B2YW5kZWJyb24vd2luZG1vbGVuL2Rpc3QvaW5kZXguanM/OGRhMyJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIl9pbnRlcm9wRGVmYXVsdCIsImV4IiwiUmVhY3QiLCJyZXF1aXJlIiwiUmVhY3RfX2RlZmF1bHQiLCJyZWFjdERvbSIsInJlYWN0RG9tX19kZWZhdWx0Iiwib2JqZWN0QXNzaWduIiwiZGJvdW5jZSIsImFycmF5cyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlJDEiLCJfZXh0ZW5kcyQyIiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCQxIiwiX2luaGVyaXRzTG9vc2UkMSIsIl9kZWZpbmVQcm9wZXJ0eSQxIiwiY2FsbEJpbmQiLCJfY2xhc3NDYWxsQ2hlY2siLCJpbnN0YW5jZSIsIkNvbnN0cnVjdG9yIiwiVHlwZUVycm9yIiwiX2RlZmluZVByb3BlcnRpZXMiLCJ0YXJnZXQiLCJwcm9wcyIsImkiLCJsZW5ndGgiLCJkZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwia2V5IiwiX2NyZWF0ZUNsYXNzIiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwicHJvdG90eXBlIiwiX2RlZmluZVByb3BlcnR5Iiwib2JqIiwiX2V4dGVuZHMiLCJhc3NpZ24iLCJhcmd1bWVudHMiLCJzb3VyY2UiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJhcHBseSIsIm93bktleXMiLCJvYmplY3QiLCJlbnVtZXJhYmxlT25seSIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJzeW1ib2xzIiwiZmlsdGVyIiwic3ltIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwicHVzaCIsIl9vYmplY3RTcHJlYWQyIiwiZm9yRWFjaCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX2luaGVyaXRzIiwic3ViQ2xhc3MiLCJzdXBlckNsYXNzIiwiY3JlYXRlIiwiY29uc3RydWN0b3IiLCJfc2V0UHJvdG90eXBlT2YiLCJfZ2V0UHJvdG90eXBlT2YiLCJvIiwic2V0UHJvdG90eXBlT2YiLCJnZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsInAiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsInNoYW0iLCJQcm94eSIsIkRhdGUiLCJ0b1N0cmluZyIsImUiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsImV4Y2x1ZGVkIiwic291cmNlS2V5cyIsImluZGV4T2YiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJzb3VyY2VTeW1ib2xLZXlzIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwic2VsZiIsIlJlZmVyZW5jZUVycm9yIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJfY3JlYXRlU3VwZXIiLCJEZXJpdmVkIiwiaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIl9jcmVhdGVTdXBlckludGVybmFsIiwiU3VwZXIiLCJyZXN1bHQiLCJOZXdUYXJnZXQiLCJfc2xpY2VkVG9BcnJheSIsImFyciIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVJlc3QiLCJBcnJheSIsImlzQXJyYXkiLCJTeW1ib2wiLCJpdGVyYXRvciIsIl9hcnIiLCJfbiIsIl9kIiwiX2UiLCJ1bmRlZmluZWQiLCJfaSIsIl9zIiwibmV4dCIsImRvbmUiLCJlcnIiLCJtaW5MZW4iLCJfYXJyYXlMaWtlVG9BcnJheSIsIm4iLCJzbGljZSIsIm5hbWUiLCJmcm9tIiwidGVzdCIsImxlbiIsImFycjIiLCJzdHlsZXMiLCJCb3hTaGFkb3ciLCJfUmVhY3QkUHVyZUNvbXBvbmVudCIsIl9zdXBlciIsInJlbmRlciIsIl90aGlzJHByb3BzIiwiY2hpbGRyZW4iLCJkaXNwbGF5IiwiY2xhc3NOYW1lIiwic21hbGwiLCJkYXJrIiwic3R5IiwiY3JlYXRlRWxlbWVudCIsIkJvb2xlYW4iLCJqb2luIiwic3R5bGUiLCJQdXJlQ29tcG9uZW50Iiwic3R5bGVzJDEiLCJCbG9jayIsIndpdGhTaGFkb3ciLCJ3aXRoQm9yZGVyIiwic21hbGxQYWRkaW5nIiwiY2xhc3NOYW1lcyIsImJsb2NrIiwiYm9yZGVyIiwiRnJhZ21lbnQiLCJzdHlsZXMkMiIsIkNvbCIsImZvcndhcmRSZWYiLCJyZWYiLCJkaXNwbGF5TmFtZSIsImNvbCIsIm9mZnNldCIsInNtT2Zmc2V0IiwibWRPZmZzZXQiLCJsZ09mZnNldCIsInhsT2Zmc2V0IiwiYXV0byIsInNtQXV0byIsIm1kQXV0byIsImxnQXV0byIsInhsQXV0byIsImFsaWduU2VsZiIsInNtQWxpZ25TZWxmIiwibWRBbGlnblNlbGYiLCJsZ0FsaWduU2VsZiIsInhsQWxpZ25TZWxmIiwib3JkZXIiLCJzbU9yZGVyIiwibWRPcmRlciIsImxnT3JkZXIiLCJ4bE9yZGVyIiwic20iLCJtZCIsImxnIiwieGwiLCJ2aXNpYmxlIiwiaW52aXNpYmxlIiwicmVzdFByb3BzIiwiY29uY2F0IiwiUmVuZGVyQXMiLCJhcyIsIlRhZ05hbWUiLCJzdHlsZXMkMyIsImdldEZvbnRTaXplIiwiZm9udFNpemUiLCJUZXh0IiwiZm9udFdlaWdodCIsImNvbG9yIiwibWFyZ2luIiwic3R5bGVzJDQiLCJDb25maXJtYXRpb24iLCJjb25maXJtYXRpb24iLCJzdHlsZXMkNSIsIkNvbnRhaW5lciIsImZsdWlkIiwibWVkaXVtIiwibWVyZ2VDbGFzc05hbWVzIiwiX2xlbiIsIl9rZXkiLCJzdHlsZXMkNiIsIkVycm9yJDEiLCJFcnJvciIsInRleHRDb2xvciIsInRleHRGb250U2l6ZSIsImVycm9yIiwiU3ZnQ29tcG9uZW50Iiwidmlld0JveCIsIndpZHRoIiwiaGVpZ2h0IiwiZCIsImZpbGxSdWxlIiwiU3ZnQ29tcG9uZW50JDEiLCJTdmdDb21wb25lbnQkMiIsIlN2Z0NvbXBvbmVudCQzIiwiU3ZnQ29tcG9uZW50JDQiLCJTdmdDb21wb25lbnQkNSIsIlN2Z0NvbXBvbmVudCQ2IiwiU3ZnQ29tcG9uZW50JDciLCJTdmdDb21wb25lbnQkOCIsImlkIiwieCIsInkiLCJmaWx0ZXJVbml0cyIsImNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMiLCJmbG9vZE9wYWNpdHkiLCJ2YWx1ZXMiLCJkeCIsImR5Iiwic3RkRGV2aWF0aW9uIiwiaW4yIiwiU3ZnQ29tcG9uZW50JDkiLCJTdmdDb21wb25lbnQkYSIsIlN2Z0NvbXBvbmVudCRiIiwiY3giLCJjeSIsInIiLCJ0cmFuc2Zvcm0iLCJTdmdDb21wb25lbnQkYyIsIlN2Z0NvbXBvbmVudCRkIiwiU3ZnQ29tcG9uZW50JGUiLCJTdmdDb21wb25lbnQkZiIsImZpbGwiLCJTdmdDb21wb25lbnQkZyIsIlN2Z0NvbXBvbmVudCRoIiwiU3ZnQ29tcG9uZW50JGkiLCJTdmdDb21wb25lbnQkaiIsIlN2Z0NvbXBvbmVudCRrIiwiU3ZnQ29tcG9uZW50JGwiLCJTdmdDb21wb25lbnQkbSIsIlN2Z0NvbXBvbmVudCRuIiwiU3ZnQ29tcG9uZW50JG8iLCJTdmdDb21wb25lbnQkcCIsIlN2Z0NvbXBvbmVudCRxIiwiU3ZnQ29tcG9uZW50JHIiLCJTdmdDb21wb25lbnQkcyIsIlN2Z0NvbXBvbmVudCR0IiwiU3ZnQ29tcG9uZW50JHUiLCJTdmdDb21wb25lbnQkdiIsIlN2Z0NvbXBvbmVudCR3IiwiU3ZnQ29tcG9uZW50JHgiLCJTdmdDb21wb25lbnQkeSIsIlN2Z0NvbXBvbmVudCR6IiwiU3ZnQ29tcG9uZW50JEEiLCJTdmdDb21wb25lbnQkQiIsIlN2Z0NvbXBvbmVudCRDIiwiU3ZnQ29tcG9uZW50JEQiLCJTdmdDb21wb25lbnQkRSIsIlN2Z0NvbXBvbmVudCRGIiwiU3ZnQ29tcG9uZW50JEciLCJTdmdDb21wb25lbnQkSCIsIlN2Z0NvbXBvbmVudCRJIiwiU3ZnQ29tcG9uZW50JEoiLCJTdmdDb21wb25lbnQkSyIsIlN2Z0NvbXBvbmVudCRMIiwiU3ZnQ29tcG9uZW50JE0iLCJTdmdDb21wb25lbnQkTiIsIlN2Z0NvbXBvbmVudCRPIiwiU3ZnQ29tcG9uZW50JFAiLCJTdmdDb21wb25lbnQkUSIsIlN2Z0NvbXBvbmVudCRSIiwiU3ZnQ29tcG9uZW50JFMiLCJTdmdDb21wb25lbnQkVCIsIlN2Z0NvbXBvbmVudCRVIiwiU3ZnQ29tcG9uZW50JFYiLCJTdmdDb21wb25lbnQkVyIsIlN2Z0NvbXBvbmVudCRYIiwiU3ZnQ29tcG9uZW50JFkiLCJTdmdDb21wb25lbnQkWiIsImNsaXBSdWxlIiwiU3ZnQ29tcG9uZW50JF8iLCJyb2xlIiwiU3ZnQ29tcG9uZW50JCQiLCJTdmdDb21wb25lbnQkMTAiLCJTdmdDb21wb25lbnQkMTEiLCJTdmdDb21wb25lbnQkMTIiLCJTdmdDb21wb25lbnQkMTMiLCJTdmdDb21wb25lbnQkMTQiLCJTdmdDb21wb25lbnQkMTUiLCJTdmdDb21wb25lbnQkMTYiLCJTdmdDb21wb25lbnQkMTciLCJTdmdDb21wb25lbnQkMTgiLCJTdmdDb21wb25lbnQkMTkiLCJTdmdDb21wb25lbnQkMWEiLCJTdmdDb21wb25lbnQkMWIiLCJTdmdDb21wb25lbnQkMWMiLCJTdmdDb21wb25lbnQkMWQiLCJ4bGlua0hyZWYiLCJtYXNrIiwiU3ZnQ29tcG9uZW50JDFlIiwiU3ZnQ29tcG9uZW50JDFmIiwiU3ZnQ29tcG9uZW50JDFnIiwiU3ZnQ29tcG9uZW50JDFoIiwic3Ryb2tlIiwic3Ryb2tlV2lkdGgiLCJTdmdDb21wb25lbnQkMWkiLCJTdmdDb21wb25lbnQkMWoiLCJTdmdDb21wb25lbnQkMWsiLCJTdmdDb21wb25lbnQkMWwiLCJTdmdDb21wb25lbnQkMW0iLCJTdmdDb21wb25lbnQkMW4iLCJTdmdDb21wb25lbnQkMW8iLCJTdmdDb21wb25lbnQkMXAiLCJTdmdDb21wb25lbnQkMXEiLCJTdmdDb21wb25lbnQkMXIiLCJTdmdDb21wb25lbnQkMXMiLCJTdmdDb21wb25lbnQkMXQiLCJwb2ludHMiLCJTdmdDb21wb25lbnQkMXUiLCJTdmdDb21wb25lbnQkMXYiLCJTdmdDb21wb25lbnQkMXciLCJTdmdDb21wb25lbnQkMXgiLCJTdmdDb21wb25lbnQkMXkiLCJTdmdDb21wb25lbnQkMXoiLCJTdmdDb21wb25lbnQkMUEiLCJTdmdDb21wb25lbnQkMUIiLCJTdmdDb21wb25lbnQkMUMiLCJTdmdDb21wb25lbnQkMUQiLCJTdmdDb21wb25lbnQkMUUiLCJTdmdDb21wb25lbnQkMUYiLCJTdmdDb21wb25lbnQkMUciLCJTdmdDb21wb25lbnQkMUgiLCJTdmdDb21wb25lbnQkMUkiLCJTdmdDb21wb25lbnQkMUoiLCJTdmdDb21wb25lbnQkMUsiLCJTdmdDb21wb25lbnQkMUwiLCJTdmdDb21wb25lbnQkMU0iLCJmaWxsT3BhY2l0eSIsIlN2Z0NvbXBvbmVudCQxTiIsIlN2Z0NvbXBvbmVudCQxTyIsIlN2Z0NvbXBvbmVudCQxUCIsIlN2Z0NvbXBvbmVudCQxUSIsIlN2Z0NvbXBvbmVudCQxUiIsIlN2Z0NvbXBvbmVudCQxUyIsIlN2Z0NvbXBvbmVudCQxVCIsIlN2Z0NvbXBvbmVudCQxVSIsIlN2Z0NvbXBvbmVudCQxViIsIlN2Z0NvbXBvbmVudCQxVyIsIlN2Z0NvbXBvbmVudCQxWCIsIlN2Z0NvbXBvbmVudCQxWSIsIlN2Z0NvbXBvbmVudCQxWiIsIlN2Z0NvbXBvbmVudCQxXyIsInJ4IiwiU3ZnQ29tcG9uZW50JDEkIiwiU3ZnQ29tcG9uZW50JDIwIiwiU3ZnQ29tcG9uZW50JDIxIiwiU3ZnQ29tcG9uZW50JDIyIiwiU3ZnQ29tcG9uZW50JDIzIiwiU3ZnQ29tcG9uZW50JDI0IiwiU3ZnQ29tcG9uZW50JDI1IiwiU3ZnQ29tcG9uZW50JDI2IiwiU3ZnQ29tcG9uZW50JDI3IiwiU3ZnQ29tcG9uZW50JDI4IiwiU3ZnQ29tcG9uZW50JDI5IiwiU3ZnQ29tcG9uZW50JDJhIiwiU3ZnQ29tcG9uZW50JDJiIiwiU3ZnQ29tcG9uZW50JDJjIiwiU3ZnQ29tcG9uZW50JDJkIiwiU3ZnQ29tcG9uZW50JDJlIiwiU3ZnQ29tcG9uZW50JDJmIiwiU3ZnQ29tcG9uZW50JDJnIiwiU3ZnQ29tcG9uZW50JDJoIiwiU3ZnQ29tcG9uZW50JDJpIiwiU3ZnQ29tcG9uZW50JDJqIiwiU3ZnQ29tcG9uZW50JDJrIiwiU3ZnQ29tcG9uZW50JDJsIiwiU3ZnQ29tcG9uZW50JDJtIiwiU3ZnQ29tcG9uZW50JDJuIiwiU3ZnQ29tcG9uZW50JDJvIiwiU3ZnQ29tcG9uZW50JDJwIiwiSWNvbnMiLCJhZGQiLCJhbXBlcmFnZSIsImFwYXJ0bWVudCIsImJhdHRlcnkiLCJiaW8iLCJidWxsZXQiLCJjYWxlbmRhciIsImNhciIsImNhcmQiLCJjaGFyZ2Vwb2ludCIsImNoZWNrIiwiY2hldnJvbiIsImNsb3NlIiwiY2xvY2siLCJjb2xsYXBzZSIsImRlbnkiLCJkZXZ0byIsImRvY3VtZW50IiwiZHVwbGV4IiwiZWxlY3RyaWNpdHkiLCJlbmVyZ2llIiwiZW5sYXJnZSIsImV1cm8iLCJleGNsYW1hdGlvbiIsImZhY2Vib29rIiwiZmxhZyIsImZsZXgiLCJmcmllbmQiLCJnYXMiLCJnaXRodWIiLCJnbWFpbCIsImhhbWJ1cmdlciIsImhvdXNlIiwiaW5maW5pdGUiLCJpbmZvIiwiaW5zdGFncmFtIiwibGFwdG9wIiwibGluayIsImxpbmtlZGluIiwibGlzdCIsImxvY2F0aW9uIiwibWFpbCIsIm1pbmltaXplIiwibWVzc2VuZ2VyIiwibXV0ZSIsIm5hdmlnYXRpb24iLCJwYXVzZSIsInBob25lIiwicGxheSIsInBsdXMiLCJwcm9maWxlIiwicmVwZWF0Iiwic3BhcmtsZSIsInNlYXJjaCIsInNlbmQiLCJzb2xhciIsInN0YXIiLCJzdG9wIiwidGh1bWJzdXAiLCJ0b3BvZ3JhcGh5IiwidG93bmhvdXNlIiwidHdpdHRlciIsInZpc2liaWxpdHkiLCJ3YWxsZXQiLCJ3aGF0c2FwcCIsIndpbmQiLCJ3aW5kZGlyZWN0aW9uIiwid3JlbmNoIiwieW91dHViZSIsImd1YXJhbnRlZSIsImdpZnQiLCJzdHlsZXMkNyIsImljb25NYXAiLCJhcHBhcnRlbWVudCIsImFwcCIsImNoZWNrbWFyayIsImNoZWNrYm94IiwiY2hhdCIsImdlbGR6YWtlbiIsImhvZWt3b25pbmciLCJoeXBlcmxpbmsiLCJrZXljaGFpbiIsImxhYWRwYXMiLCJsYWFkcGFhbCIsImxlYWYiLCJub3RlcyIsIm9uZGVyd2VnIiwib3V0YWdlIiwicGVuY2lsIiwicmFkaW8iLCJyZXBhaXIiLCJzY2hvb24iLCJzbGltbGFkZW4iLCJzdW4iLCJ0aHVuZGVyc3RyaWtlIiwidHVzc2Vud29uaW5nIiwidXNlciIsIndpbmRtaWxsIiwidnJpanN0YWFuZCIsIkljb24iLCJnZXRWYXJpYW50Q29sb3IiLCJ2YXJpYW50IiwiSWNvbkNvbXBvbmVudCIsImNvbnNvbGUiLCJ3YXJuIiwicG5nb25seSIsInN0eWxlcyQ4IiwiRmxvYXRpbmdJbmZvQmxvY2siLCJpY29uUHJvcHMiLCJpY29uQmFja2dyb3VuZENvbG9yIiwiYmFja2dyb3VuZENvbG9yIiwiSGVhZGluZyIsInNpemUiLCJIMSIsIkgyIiwiSDMiLCJINCIsIkg1IiwiSDYiLCJjb21tb25qc0dsb2JhbCIsImdsb2JhbFRoaXMiLCJ3aW5kb3ciLCJ1bndyYXBFeHBvcnRzIiwiX19lc01vZHVsZSIsImNyZWF0ZUNvbW1vbmpzTW9kdWxlIiwiZm4iLCJtb2R1bGUiLCJiIiwiYyIsImYiLCJnIiwiaCIsImsiLCJsIiwibSIsInEiLCJ0IiwidiIsInciLCJ6IiwiYSIsInUiLCIkJHR5cGVvZiIsInR5cGUiLCJBIiwiQXN5bmNNb2RlIiwiQ29uY3VycmVudE1vZGUiLCJDb250ZXh0Q29uc3VtZXIiLCJDb250ZXh0UHJvdmlkZXIiLCJFbGVtZW50IiwiRm9yd2FyZFJlZiIsIkxhenkiLCJNZW1vIiwiUG9ydGFsIiwiUHJvZmlsZXIiLCJTdHJpY3RNb2RlIiwiU3VzcGVuc2UiLCJpc0FzeW5jTW9kZSIsImlzQ29uY3VycmVudE1vZGUiLCJpc0NvbnRleHRDb25zdW1lciIsImlzQ29udGV4dFByb3ZpZGVyIiwiaXNFbGVtZW50IiwiaXNGb3J3YXJkUmVmIiwiaXNGcmFnbWVudCIsImlzTGF6eSIsImlzTWVtbyIsImlzUG9ydGFsIiwiaXNQcm9maWxlciIsImlzU3RyaWN0TW9kZSIsImlzU3VzcGVuc2UiLCJpc1ZhbGlkRWxlbWVudFR5cGUiLCJ0eXBlT2YiLCJyZWFjdElzX3Byb2R1Y3Rpb25fbWluIiwicmVhY3RJc19kZXZlbG9wbWVudCIsImhhc1N5bWJvbCIsIlJFQUNUX0VMRU1FTlRfVFlQRSIsIlJFQUNUX1BPUlRBTF9UWVBFIiwiUkVBQ1RfRlJBR01FTlRfVFlQRSIsIlJFQUNUX1NUUklDVF9NT0RFX1RZUEUiLCJSRUFDVF9QUk9GSUxFUl9UWVBFIiwiUkVBQ1RfUFJPVklERVJfVFlQRSIsIlJFQUNUX0NPTlRFWFRfVFlQRSIsIlJFQUNUX0FTWU5DX01PREVfVFlQRSIsIlJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFIiwiUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSIsIlJFQUNUX1NVU1BFTlNFX1RZUEUiLCJSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUiLCJSRUFDVF9NRU1PX1RZUEUiLCJSRUFDVF9MQVpZX1RZUEUiLCJSRUFDVF9CTE9DS19UWVBFIiwiUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSIsIlJFQUNUX1JFU1BPTkRFUl9UWVBFIiwiUkVBQ1RfU0NPUEVfVFlQRSIsIiQkdHlwZW9mVHlwZSIsImhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlIiwicmVhY3RJc19kZXZlbG9wbWVudF8xIiwicmVhY3RJc19kZXZlbG9wbWVudF8yIiwicmVhY3RJc19kZXZlbG9wbWVudF8zIiwicmVhY3RJc19kZXZlbG9wbWVudF80IiwicmVhY3RJc19kZXZlbG9wbWVudF81IiwicmVhY3RJc19kZXZlbG9wbWVudF82IiwicmVhY3RJc19kZXZlbG9wbWVudF83IiwicmVhY3RJc19kZXZlbG9wbWVudF84IiwicmVhY3RJc19kZXZlbG9wbWVudF85IiwicmVhY3RJc19kZXZlbG9wbWVudF8xMCIsInJlYWN0SXNfZGV2ZWxvcG1lbnRfMTEiLCJyZWFjdElzX2RldmVsb3BtZW50XzEyIiwicmVhY3RJc19kZXZlbG9wbWVudF8xMyIsInJlYWN0SXNfZGV2ZWxvcG1lbnRfMTQiLCJyZWFjdElzX2RldmVsb3BtZW50XzE1IiwicmVhY3RJc19kZXZlbG9wbWVudF8xNiIsInJlYWN0SXNfZGV2ZWxvcG1lbnRfMTciLCJyZWFjdElzX2RldmVsb3BtZW50XzE4IiwicmVhY3RJc19kZXZlbG9wbWVudF8xOSIsInJlYWN0SXNfZGV2ZWxvcG1lbnRfMjAiLCJyZWFjdElzX2RldmVsb3BtZW50XzIxIiwicmVhY3RJc19kZXZlbG9wbWVudF8yMiIsInJlYWN0SXNfZGV2ZWxvcG1lbnRfMjMiLCJyZWFjdElzX2RldmVsb3BtZW50XzI0IiwicmVhY3RJc19kZXZlbG9wbWVudF8yNSIsInJlYWN0SXNfZGV2ZWxvcG1lbnRfMjYiLCJyZWFjdElzX2RldmVsb3BtZW50XzI3IiwicmVhY3RJc19kZXZlbG9wbWVudF8yOCIsInJlYWN0SXMiLCJSZWFjdFByb3BUeXBlc1NlY3JldCIsIlJlYWN0UHJvcFR5cGVzU2VjcmV0XzEiLCJwcmludFdhcm5pbmciLCJSZWFjdFByb3BUeXBlc1NlY3JldCQxIiwibG9nZ2VkVHlwZUZhaWx1cmVzIiwiaGFzIiwiRnVuY3Rpb24iLCJiaW5kIiwidGV4dCIsIm1lc3NhZ2UiLCJjaGVja1Byb3BUeXBlcyIsInR5cGVTcGVjcyIsImNvbXBvbmVudE5hbWUiLCJnZXRTdGFjayIsInR5cGVTcGVjTmFtZSIsInN0YWNrIiwicmVzZXRXYXJuaW5nQ2FjaGUiLCJjaGVja1Byb3BUeXBlc18xIiwiaGFzJDEiLCJwcmludFdhcm5pbmckMSIsImVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGwiLCJmYWN0b3J5V2l0aFR5cGVDaGVja2VycyIsImlzVmFsaWRFbGVtZW50IiwidGhyb3dPbkRpcmVjdEFjY2VzcyIsIklURVJBVE9SX1NZTUJPTCIsIkZBVVhfSVRFUkFUT1JfU1lNQk9MIiwiZ2V0SXRlcmF0b3JGbiIsIm1heWJlSXRlcmFibGUiLCJpdGVyYXRvckZuIiwiQU5PTllNT1VTIiwiUmVhY3RQcm9wVHlwZXMiLCJhcnJheSIsImNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyIiwiYm9vbCIsImZ1bmMiLCJudW1iZXIiLCJzdHJpbmciLCJzeW1ib2wiLCJhbnkiLCJjcmVhdGVBbnlUeXBlQ2hlY2tlciIsImFycmF5T2YiLCJjcmVhdGVBcnJheU9mVHlwZUNoZWNrZXIiLCJlbGVtZW50IiwiY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyIiwiZWxlbWVudFR5cGUiLCJjcmVhdGVFbGVtZW50VHlwZVR5cGVDaGVja2VyIiwiaW5zdGFuY2VPZiIsImNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIiLCJub2RlIiwiY3JlYXRlTm9kZUNoZWNrZXIiLCJvYmplY3RPZiIsImNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIiLCJvbmVPZiIsImNyZWF0ZUVudW1UeXBlQ2hlY2tlciIsIm9uZU9mVHlwZSIsImNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIiLCJzaGFwZSIsImNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIiLCJleGFjdCIsImNyZWF0ZVN0cmljdFNoYXBlVHlwZUNoZWNrZXIiLCJpcyIsIlByb3BUeXBlRXJyb3IiLCJjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlciIsInZhbGlkYXRlIiwibWFudWFsUHJvcFR5cGVDYWxsQ2FjaGUiLCJtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCIsImNoZWNrVHlwZSIsImlzUmVxdWlyZWQiLCJwcm9wTmFtZSIsInByb3BGdWxsTmFtZSIsInNlY3JldCIsImNhY2hlS2V5IiwiY2hhaW5lZENoZWNrVHlwZSIsImV4cGVjdGVkVHlwZSIsInByb3BWYWx1ZSIsInByb3BUeXBlIiwiZ2V0UHJvcFR5cGUiLCJwcmVjaXNlVHlwZSIsImdldFByZWNpc2VUeXBlIiwidHlwZUNoZWNrZXIiLCJleHBlY3RlZENsYXNzIiwiZXhwZWN0ZWRDbGFzc05hbWUiLCJhY3R1YWxDbGFzc05hbWUiLCJnZXRDbGFzc05hbWUiLCJleHBlY3RlZFZhbHVlcyIsInZhbHVlc1N0cmluZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZXBsYWNlciIsIlN0cmluZyIsImFycmF5T2ZUeXBlQ2hlY2tlcnMiLCJjaGVja2VyIiwiZ2V0UG9zdGZpeEZvclR5cGVXYXJuaW5nIiwiaXNOb2RlIiwic2hhcGVUeXBlcyIsImFsbEtleXMiLCJldmVyeSIsInN0ZXAiLCJlbnRyaWVzIiwiZW50cnkiLCJpc1N5bWJvbCIsIlJlZ0V4cCIsIlByb3BUeXBlcyIsImVtcHR5RnVuY3Rpb24iLCJlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0IiwiZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zIiwic2hpbSIsImdldFNoaW0iLCJwcm9wVHlwZXMiLCJSZWFjdElzIiwiZXZlbnQiLCJvbiIsIm9mZiIsImVsIiwiZXZlbnROYW1lIiwiY2FsbGJhY2siLCJvcHRzIiwiYWRkRXZlbnRMaXN0ZW5lciIsImF0dGFjaEV2ZW50IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImRldGFjaEV2ZW50IiwiZXZlbnRfMSIsImV2ZW50XzIiLCJzY3JvbGxQYXJlbnQiLCJIVE1MRWxlbWVudCIsImRvY3VtZW50RWxlbWVudCIsImV4Y2x1ZGVTdGF0aWNQYXJlbnQiLCJwb3NpdGlvbiIsIm92ZXJmbG93UmVnZXgiLCJwYXJlbnQiLCJwYXJlbnROb2RlIiwib3duZXJEb2N1bWVudCIsImdldENvbXB1dGVkU3R5bGUiLCJvdmVyZmxvdyIsIm92ZXJmbG93WCIsIm92ZXJmbG93WSIsImRlYm91bmNlXzEiLCJkZWJvdW5jZSIsIndhaXQiLCJpbW1lZGlhdGUiLCJ0aW1lb3V0IiwiYXJncyIsImNvbnRleHQiLCJ0aW1lc3RhbXAiLCJsYXRlciIsImxhc3QiLCJzZXRUaW1lb3V0IiwiZGVib3VuY2VkIiwiY2FsbE5vdyIsInRocm90dGxlXzEiLCJ0aHJvdHRsZSIsInRocmVzaGhvbGQiLCJzY29wZSIsImRlZmVyVGltZXIiLCJub3ciLCJjbGVhclRpbWVvdXQiLCJsaWIiLCJmb3JjZVZpc2libGUiLCJmb3JjZUNoZWNrIiwibGF6eWxvYWQiLCJfcmVhY3QyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9yZWFjdERvbTIiLCJfcHJvcFR5cGVzMiIsIl9zY3JvbGxQYXJlbnQyIiwiX2RlYm91bmNlMiIsIl90aHJvdHRsZTIiLCJkZWZhdWx0Qm91bmRpbmdDbGllbnRSZWN0IiwidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0IiwiTElTVEVOX0ZMQUciLCJsaXN0ZW5lcnMiLCJwZW5kaW5nIiwicGFzc2l2ZUV2ZW50U3VwcG9ydGVkIiwiZ2V0IiwicGFzc2l2ZUV2ZW50IiwiY2FwdHVyZSIsInBhc3NpdmUiLCJjaGVja092ZXJmbG93VmlzaWJsZSIsImNvbXBvbmVudCIsImZpbmRET01Ob2RlIiwicGFyZW50VG9wIiwicGFyZW50TGVmdCIsInBhcmVudEhlaWdodCIsInBhcmVudFdpZHRoIiwiX3BhcmVudCRnZXRCb3VuZGluZ0NsIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwid2luZG93SW5uZXJIZWlnaHQiLCJpbm5lckhlaWdodCIsImNsaWVudEhlaWdodCIsIndpbmRvd0lubmVyV2lkdGgiLCJpbm5lcldpZHRoIiwiY2xpZW50V2lkdGgiLCJpbnRlcnNlY3Rpb25Ub3AiLCJNYXRoIiwibWF4IiwiaW50ZXJzZWN0aW9uTGVmdCIsImludGVyc2VjdGlvbkhlaWdodCIsIm1pbiIsImludGVyc2VjdGlvbldpZHRoIiwiX25vZGUkZ2V0Qm91bmRpbmdDbGllIiwib2Zmc2V0VG9wIiwib2Zmc2V0TGVmdCIsIm9mZnNldHMiLCJjaGVja05vcm1hbFZpc2libGUiLCJvZmZzZXRXaWR0aCIsIm9mZnNldEhlaWdodCIsImdldENsaWVudFJlY3RzIiwiZWxlbWVudEhlaWdodCIsIl9ub2RlJGdldEJvdW5kaW5nQ2xpZTIiLCJjaGVja1Zpc2libGUiLCJpc092ZXJmbG93Iiwib25jZSIsImZvcmNlVXBkYXRlIiwidW5tb3VudElmSW52aXNpYmxlIiwicHVyZ2VQZW5kaW5nIiwiaW5kZXgiLCJzcGxpY2UiLCJsYXp5TG9hZEhhbmRsZXIiLCJsaXN0ZW5lciIsImRlbGF5VHlwZSIsImZpbmFsTGF6eUxvYWRIYW5kbGVyIiwiaXNTdHJpbmciLCJMYXp5TG9hZCIsIl9Db21wb25lbnQiLCJfdGhpcyIsImNvbXBvbmVudERpZE1vdW50Iiwic2Nyb2xscG9ydCIsInNjcm9sbENvbnRhaW5lciIsInF1ZXJ5U2VsZWN0b3IiLCJuZWVkUmVzZXRGaW5hbExhenlMb2FkSGFuZGxlciIsImdldEF0dHJpYnV0ZSIsImxpc3RlbmVyQ291bnQiLCJzZXRBdHRyaWJ1dGUiLCJfcHJvcHMiLCJzY3JvbGwiLCJyZXNpemUiLCJzaG91bGRDb21wb25lbnRVcGRhdGUiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsInJlbW92ZUF0dHJpYnV0ZSIsInBsYWNlaG9sZGVyIiwiQ29tcG9uZW50IiwiZGVmYXVsdFByb3BzIiwiZ2V0RGlzcGxheU5hbWUiLCJXcmFwcGVkQ29tcG9uZW50IiwiZGVjb3JhdG9yIiwib3B0aW9ucyIsIl9Db21wb25lbnQyIiwiTGF6eUxvYWREZWNvcmF0ZWQiLCJfdGhpczIiLCJMYXp5bG9hZCIsImxpYl8xIiwibGliXzIiLCJsaWJfMyIsInN0eWxlcyQ5IiwiSW1hZ2UiLCJzcmNTZXQiLCJyZXNwb25zaXZlIiwiaW5zaWRlQ29udGFpbmVyIiwiYXNwZWN0UmF0aW8iLCJzcmMyeCIsInNyYyIsIl9hc3BlY3RSYXRpbyRzcGxpdCRtYSIsInNwbGl0IiwibWFwIiwiTnVtYmVyIiwiX2FzcGVjdFJhdGlvJHNwbGl0JG1hMiIsInBhZGRpbmdCb3R0b20iLCJnZXRDb21wb25lbnQiLCJzdHlsZXMkYSIsIkZsZXgiLCJfcHJvcHMkYXMiLCJfcHJvcHMkZmxleCIsInNtRmxleCIsIm1kRmxleCIsImxnRmxleCIsInhsRmxleCIsIl9wcm9wcyRkaXJlY3Rpb24iLCJkaXJlY3Rpb24iLCJzbURpcmVjdGlvbiIsIm1kRGlyZWN0aW9uIiwibGdEaXJlY3Rpb24iLCJ4bERpcmVjdGlvbiIsIl9wcm9wcyRhbGlnbkl0ZW1zIiwiYWxpZ25JdGVtcyIsInNtQWxpZ25JdGVtcyIsIm1kQWxpZ25JdGVtcyIsImxnQWxpZ25JdGVtcyIsInhsQWxpZ25JdGVtcyIsIl9wcm9wcyRqdXN0aWZ5Q29udGVudCIsImp1c3RpZnlDb250ZW50Iiwic21KdXN0aWZ5Q29udGVudCIsIm1kSnVzdGlmeUNvbnRlbnQiLCJsZ0p1c3RpZnlDb250ZW50IiwieGxKdXN0aWZ5Q29udGVudCIsIndyYXAiLCJzbVdyYXAiLCJtZFdyYXAiLCJsZ1dyYXAiLCJ4bFdyYXAiLCJjbGFzc2VzIiwic3R5bGVzJGIiLCJMYWJlbCIsIl9yZWYiLCJodG1sRm9yIiwic3R5bGVzJGMiLCJzdHlsZXMkZCIsInBlcnNpc3QiLCJJbnB1dEJhc2UiLCJ0b3VjaGVkIiwiaXNWYWxpZCIsIm9uQ2hhbmdlIiwicGxhY2Vob2xkZXJSaWdodCIsInBsYWNlaG9sZGVyQWx3YXlzVmlzaWJsZSIsImRpc2FibGVkIiwiaWNvbiIsIl9yZWYkaWNvblZhcmlhbnQiLCJpY29uVmFyaWFudCIsIm9uSWNvbkNsaWNrIiwiaW5wdXRQcm9wcyIsImhhbmRsZUNoYW5nZSIsImlucHV0Q2xhc3NlcyIsImlucHV0TGluZUNsYXNzZXMiLCJpY29uV3JhcHBlckNsYXNzIiwib25DbGljayIsIl9zbGljZWRUb0FycmF5JDEiLCJzbGljZUl0ZXJhdG9yIiwiZGlzdCIsImRhdGEiLCJtdWx0aVNlY3Rpb24iLCJuZXh0Tm9uRW1wdHlTZWN0aW9uSW5kZXgiLCJzZWN0aW9uSW5kZXgiLCJwcmV2Tm9uRW1wdHlTZWN0aW9uSW5kZXgiLCJfcG9zaXRpb24iLCJpdGVtSW5kZXgiLCJwcmV2IiwiX3Bvc2l0aW9uMiIsImlzTGFzdCIsImRpc3QkMSIsIl90b0NvbnN1bWFibGVBcnJheSIsIl9vYmplY3RBc3NpZ24yIiwidHJ1dGh5IiwiaW5wdXQiLCJfcmVmMiIsInRoZW1lIiwiY2xhc3NOYW1lRGVjb3JhdG9yIiwibmFtZXMiLCJjb21wYXJlT2JqZWN0c18xIiwiX3R5cGVvZiIsImNvbXBhcmVPYmplY3RzIiwib2JqQSIsIm9iakIiLCJhS2V5cyIsImJLZXlzIiwia2V5c01hcCIsImFWYWx1ZSIsImJWYWx1ZSIsImFWYWx1ZUtleXMiLCJiVmFsdWVLZXlzIiwiYVZhbHVlS2V5IiwiU2VjdGlvblRpdGxlXzEiLCJfY29tcGFyZU9iamVjdHMyIiwiU2VjdGlvblRpdGxlIiwibmV4dFByb3BzIiwic2VjdGlvbiIsInJlbmRlclNlY3Rpb25UaXRsZSIsInNlY3Rpb25LZXlQcmVmaXgiLCJzZWN0aW9uVGl0bGUiLCJJdGVtXzEiLCJJdGVtIiwiX3RlbXAiLCJfcmV0Iiwic3RvcmVJdGVtUmVmZXJlbmNlIiwiaXRlbSIsIm9uTW91c2VFbnRlciIsIm9uTW91c2VMZWF2ZSIsIl90aGlzJHByb3BzMiIsIm9uTW91c2VEb3duIiwiX3RoaXMkcHJvcHMzIiwiX3RoaXMkcHJvcHM0IiwiaXNIaWdobGlnaHRlZCIsInJlbmRlckl0ZW0iLCJyZW5kZXJJdGVtRGF0YSIsIkl0ZW1zTGlzdF8xIiwiX0l0ZW0yIiwiSXRlbXNMaXN0Iiwic3RvcmVIaWdobGlnaHRlZEl0ZW1SZWZlcmVuY2UiLCJoaWdobGlnaHRlZEl0ZW0iLCJvbkhpZ2hsaWdodGVkSXRlbUNoYW5nZSIsIml0ZW1zIiwiaXRlbVByb3BzIiwiaGlnaGxpZ2h0ZWRJdGVtSW5kZXgiLCJnZXRJdGVtSWQiLCJrZXlQcmVmaXgiLCJzZWN0aW9uUHJlZml4IiwiaXNJdGVtUHJvcHNGdW5jdGlvbiIsImlzRmlyc3QiLCJpdGVtS2V5IiwiaXRlbVByb3BzT2JqIiwiYWxsSXRlbVByb3BzIiwiQXV0b3doYXRldmVyXzEiLCJfc2VjdGlvbkl0ZXJhdG9yMiIsIl9yZWFjdFRoZW1lYWJsZTIiLCJfU2VjdGlvblRpdGxlMiIsIl9JdGVtc0xpc3QyIiwiZW1wdHlPYmplY3QiLCJkZWZhdWx0UmVuZGVySW5wdXRDb21wb25lbnQiLCJkZWZhdWx0UmVuZGVySXRlbXNDb250YWluZXIiLCJjb250YWluZXJQcm9wcyIsImRlZmF1bHRUaGVtZSIsImNvbnRhaW5lciIsImNvbnRhaW5lck9wZW4iLCJpbnB1dE9wZW4iLCJpbnB1dEZvY3VzZWQiLCJpdGVtc0NvbnRhaW5lciIsIml0ZW1zQ29udGFpbmVyT3BlbiIsIml0ZW1zTGlzdCIsIml0ZW1GaXJzdCIsIml0ZW1IaWdobGlnaHRlZCIsInNlY3Rpb25Db250YWluZXIiLCJzZWN0aW9uQ29udGFpbmVyRmlyc3QiLCJBdXRvd2hhdGV2ZXIiLCJzdG9yZUlucHV0UmVmZXJlbmNlIiwic3RvcmVJdGVtc0NvbnRhaW5lclJlZmVyZW5jZSIsIm9uRm9jdXMiLCJzZXRTdGF0ZSIsImlzSW5wdXRGb2N1c2VkIiwib25CbHVyIiwib25LZXlEb3duIiwiaGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXgiLCJuZXh0UHJldiIsIl90aGlzJHNlY3Rpb25JdGVyYXRvciIsInNlY3Rpb25JdGVyYXRvciIsIl90aGlzJHNlY3Rpb25JdGVyYXRvcjIiLCJuZXdIaWdobGlnaHRlZFNlY3Rpb25JbmRleCIsIm5ld0hpZ2hsaWdodGVkSXRlbUluZGV4Iiwic3RhdGUiLCJzZXRTZWN0aW9uc0l0ZW1zIiwic2V0U2VjdGlvbkl0ZXJhdG9yIiwic2V0VGhlbWUiLCJlbnN1cmVIaWdobGlnaHRlZEl0ZW1Jc1Zpc2libGUiLCJVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsImNvbXBvbmVudERpZFVwZGF0ZSIsInNlY3Rpb25zSXRlbXMiLCJnZXRTZWN0aW9uSXRlbXMiLCJzZWN0aW9uc0xlbmd0aHMiLCJhbGxTZWN0aW9uc0FyZUVtcHR5IiwiaXRlbXNDb3VudCIsInJlbmRlclNlY3Rpb25zIiwiaXNGaXJzdFNlY3Rpb24iLCJzdG9yZUl0ZW1zTGlzdFJlZmVyZW5jZSIsInJlbmRlckl0ZW1zIiwiX3Byb3BzMiIsIml0ZW1PZmZzZXRSZWxhdGl2ZVRvQ29udGFpbmVyIiwib2Zmc2V0UGFyZW50Iiwic2Nyb2xsVG9wIiwiX3Byb3BzMyIsInJlbmRlcklucHV0Q29tcG9uZW50IiwicmVuZGVySXRlbXNDb250YWluZXIiLCJyZW5kZXJlZEl0ZW1zIiwiaXNPcGVuIiwiYXJpYUFjdGl2ZWRlc2NlbmRhbnQiLCJpdGVtc0NvbnRhaW5lcklkIiwiaW5wdXRDb21wb25lbnQiLCJhdXRvQ29tcGxldGUiLCJkaXN0JDIiLCJzdWdnZXN0aW9uc0NvbnRhaW5lciIsInN1Z2dlc3Rpb25zQ29udGFpbmVyT3BlbiIsInN1Z2dlc3Rpb25zTGlzdCIsInN1Z2dlc3Rpb24iLCJzdWdnZXN0aW9uRmlyc3QiLCJzdWdnZXN0aW9uSGlnaGxpZ2h0ZWQiLCJtYXBUb0F1dG93aGF0ZXZlclRoZW1lIiwidGhlbWVfMSIsInRoZW1lXzIiLCJBdXRvc3VnZ2VzdF8xIiwiX2FycmF5czIiLCJfcmVhY3RBdXRvd2hhdGV2ZXIyIiwiYWx3YXlzVHJ1ZSIsImRlZmF1bHRTaG91bGRSZW5kZXJTdWdnZXN0aW9ucyIsInRyaW0iLCJkZWZhdWx0UmVuZGVyU3VnZ2VzdGlvbnNDb250YWluZXIiLCJBdXRvc3VnZ2VzdCIsImFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zIiwiX2luaXRpYWxpc2VQcm9wcyIsImlzRm9jdXNlZCIsImlzQ29sbGFwc2VkIiwiaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXgiLCJoaWdobGlnaHRlZFN1Z2dlc3Rpb24iLCJ2YWx1ZUJlZm9yZVVwRG93biIsImp1c3RQcmVzc2VkVXBEb3duIiwianVzdE1vdXNlRW50ZXJlZCIsInByZXNzZWRTdWdnZXN0aW9uIiwib25Eb2N1bWVudE1vdXNlRG93biIsIm9uRG9jdW1lbnRNb3VzZVVwIiwiYXV0b3doYXRldmVyIiwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsInN1Z2dlc3Rpb25zIiwiaGlnaGxpZ2h0Rmlyc3RTdWdnZXN0aW9uIiwid2lsbFJlbmRlclN1Z2dlc3Rpb25zIiwianVzdFNlbGVjdGVkU3VnZ2VzdGlvbiIsInJldmVhbFN1Z2dlc3Rpb25zIiwicmVzZXRIaWdobGlnaHRlZFN1Z2dlc3Rpb24iLCJwcmV2UHJvcHMiLCJwcmV2U3RhdGUiLCJvblN1Z2dlc3Rpb25IaWdobGlnaHRlZCIsImdldEhpZ2hsaWdodGVkU3VnZ2VzdGlvbiIsInByZXZIaWdobGlnaHRlZFN1Z2dlc3Rpb24iLCJ1cGRhdGVIaWdobGlnaHRlZFN1Z2dlc3Rpb24iLCJzdWdnZXN0aW9uSW5kZXgiLCJwcmV2VmFsdWUiLCJnZXRTdWdnZXN0aW9uIiwic2hvdWxkUmVzZXRWYWx1ZUJlZm9yZVVwRG93biIsImNsb3NlU3VnZ2VzdGlvbnMiLCJnZXRTZWN0aW9uU3VnZ2VzdGlvbnMiLCJfc3RhdGUiLCJnZXRTdWdnZXN0aW9uVmFsdWVCeUluZGV4IiwiZ2V0U3VnZ2VzdGlvblZhbHVlIiwiZ2V0U3VnZ2VzdGlvbkluZGljZXMiLCJzdWdnZXN0aW9uRWxlbWVudCIsInBhcnNlSW50IiwiZmluZFN1Z2dlc3Rpb25FbGVtZW50Iiwic3RhcnROb2RlIiwibWF5YmVDYWxsT25DaGFuZ2UiLCJuZXdWYWx1ZSIsIm1ldGhvZCIsIl9wcm9wcyRpbnB1dFByb3BzIiwic2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnMiLCJnZXRRdWVyeSIsIl90aGlzMyIsIm9uU3VnZ2VzdGlvbnNGZXRjaFJlcXVlc3RlZCIsInJlbmRlclN1Z2dlc3Rpb24iLCJ0aGVtZSQxIiwiX3N0YXRlMiIsIl9vbkZvY3VzIiwiX29uS2V5RG93biIsImF1dG93aGF0ZXZlcklucHV0UHJvcHMiLCJqdXN0Q2xpY2tlZE9uU3VnZ2VzdGlvbnNDb250YWluZXIiLCJzaG91bGRSZW5kZXIiLCJyZWFzb24iLCJmb2N1cyIsImJsdXJFdmVudCIsIm9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZCIsImtleUNvZGUiLCJwcmV2ZW50RGVmYXVsdCIsIl9uZXdWYWx1ZSIsIm9uU3VnZ2VzdGlvblNlbGVjdGVkIiwic3VnZ2VzdGlvblZhbHVlIiwid2lsbENsb3NlU3VnZ2VzdGlvbnMiLCJfbmV3VmFsdWUyIiwicmVuZGVyU3VnZ2VzdGlvbkRhdGEiLCJxdWVyeSIsInJlbmRlclN1Z2dlc3Rpb25zQ29udGFpbmVyIiwic3RvcmVBdXRvd2hhdGV2ZXJSZWYiLCJmb2N1c0lucHV0T25TdWdnZXN0aW9uQ2xpY2siLCJfdGhpczQiLCJkZXRhaWwiLCJvblN1Z2dlc3Rpb25Nb3VzZUVudGVyIiwiX3JlZjMiLCJvblN1Z2dlc3Rpb25Nb3VzZURvd24iLCJfcHJvcHM0Iiwib25TdWdnZXN0aW9uQ2xpY2siLCJfcHJvcHM1IiwiX2dldFN1Z2dlc3Rpb25JbmRpY2VzIiwiY2xpY2tlZFN1Z2dlc3Rpb24iLCJjbGlja2VkU3VnZ2VzdGlvblZhbHVlIiwiX3Byb3BzNiIsIm9uU3VnZ2VzdGlvbk1vdXNlTGVhdmUiLCJvblN1Z2dlc3Rpb25Ub3VjaFN0YXJ0Iiwib25TdWdnZXN0aW9uVG91Y2hNb3ZlIiwiX3JlZjQiLCJvblRvdWNoU3RhcnQiLCJvblRvdWNoTW92ZSIsIl9yZWY1IiwiZGlzdCQzIiwic3R5bGVzJGUiLCJmaW5kUGFydHMiLCJyZWdleCIsImNodW5rcyIsIm1hdGNoIiwiZXhlYyIsInN0YXJ0IiwiZW5kIiwibGFzdEluZGV4IiwiaGlnaGxpZ2h0SW5wdXQiLCJwYXJ0cyIsImpzeCIsIkF1dG9TdWdnZXN0SW5wdXQiLCJfcmVmMiR2YWx1ZSIsIl9yZWYyJG9uQ2hhbmdlIiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiZmlsdGVyZWRTdWdnZXN0aW9ucyIsInNldEZpbHRlcmVkU3VnZ2VzdGlvbnMiLCJ0b0xvd2VyQ2FzZSIsInMiLCJpbmNsdWRlcyIsImF1dG9TdWdnZXN0SW5wdXRQcm9wcyIsInN0b3BQcm9wYWdhdGlvbiIsInN0dWZmIiwiSW5wdXQiLCJsYWJlbCIsImhpZGVFcnJvclRleHQiLCJ3cmFwcGVyQ2xhc3MiLCJpbnB1dElkIiwiUGFyYWdyYXBoIiwiU3BhbiIsInN0eWxlcyRmIiwiUmFuZ2VTbGlkZXIiLCJzbGlkZXIiLCJzdHlsZXMkZyIsIlJvdyIsIm5vR3V0dGVycyIsInN0eWxlcyRoIiwiVGV4dEFyZWEiLCJlbWl0Q2hhbmdlRGVib3VuY2VkIiwiZW1pdENoYW5nZSIsImRlYm91bmNlVGltZSIsImNhbmNlbCIsIm9uRGVib3VuY2VkQ2hhbmdlIiwib25UZXh0QXJlYUZvY3VzIiwib25UZXh0QXJlYUJsdXIiLCJzdHlsZXMkaSIsIlRvZ2dsZSIsIl9SZWFjdCRDb21wb25lbnQiLCJjaGVja2VkIiwiY3VzdG9tSWNvbnMiLCJzZXRDaGVja2VkQnlQYXJlbnQiLCJpY29uU2l6ZSIsInN3aXRjaENsYXNzTmFtZSIsInN0eWxlcyRqIiwicmVuZGVySWNvbiIsImhpZGVpY29uIiwiUHJlc3NhYmxlIiwic21hbGxEZXByZWNhdGVkUHJvcCIsImljb25wbGFjZW1lbnQiLCJpY29ub25seSIsInNwcmVhZEljb24iLCJpc1hTbWFsbCIsImlzU21hbGwiLCJpY29uU2l6ZVZhbHVlIiwic2hvdWxkSGlkZWljb24iLCJSZW5kZXJlZENvbXBvbmVudCIsImJ1dHRvbiIsIkJ1dHRvbiIsIkxpbmsiLCJzdHlsZXMkayIsIkxvYWRlciIsImNhcmRTdHlsZXMiLCJDYXJkIiwiaW1hZ2UiLCJpbWFnZUFzQmFja2dyb3VuZCIsInNlcGFyYXRvckljb24iLCJob3Jpem9udGFsIiwiaW1hZ2VQcm9wcyIsImludmVydGVkIiwiaWNvblJpZ2h0Iiwid3JhcHBlckNsYXNzTmFtZXMiLCJjb250ZW50Q2xhc3NOYW1lcyIsImNvbnRlbnQiLCJjb250ZW50V2l0aEljb25Ib3Jpem9udGFsIiwiY29udGVudFdpdGhJY29uVmVydGljYWwiLCJjb250ZW50SW52ZXJ0ZWQiLCJpY29uQ2xhc3NOYW1lcyIsInNlcGFyYXRvckljb25Ib3Jpem9udGFsIiwic2VwYXJhdG9ySWNvblZlcnRpY2FsIiwic2VwYXJhdG9ySWNvblJpZ2h0IiwiaW1hZ2VDb250YWluZXJTdHlsZSIsImJhY2tncm91bmRJbWFnZSIsImltYWdlU3R5bGUiLCJvcGFjaXR5IiwiaW1hZ2VDb250YWluZXIiLCJzdHlsZXMkbCIsIkJsb2dDYXJkIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsImRhdGUiLCJfcmVmJGNsYXNzTmFtZSIsIl9yZWYkaW1hZ2VQcm9wcyIsImxvY2FsZURheSIsImxvY2FsZU1vbnRoIiwidG9Mb2NhbGVEYXRlU3RyaW5nIiwiZGF5IiwibW9udGgiLCJyZXBsYWNlIiwic2VwZXJhdG9yQ2xhc3NOYW1lcyIsInNlcGFyYXRvciIsImltYWdlQ2xhc3NOYW1lcyIsInN0eWxlcyRtIiwiSW1hZ2VTdGFjayIsImltYWdlcyIsImZsaXBwZWQiLCJub1NoYWRvdyIsIl9yZWYyJHNpemUiLCJzdHlsZXMkbiIsIkNvbnRlbnRCbG9jayIsImltYWdlc0ZsaXBwZWQiLCJ0YWdDb250ZW50Iiwid2l0aFRhZyIsInRhZ0NvbnRhaW5lciIsInRhZyIsInN0eWxlcyRvIiwiU2VsZWN0Iiwic2VsZWN0Iiwic3R5bGVzJHAiLCJOYXZpZ2F0aW9uIiwiYW5pbWF0ZSIsImN1cnJlbnRQb3NpdGlvbiIsInNlbGVjdGVkIiwic2VsZWN0ZWRQb3NpdGlvbiIsImxpbmtzIiwiY3JlYXRlUmVmIiwibmF2aWdhdGlvbldyYXBwZXIiLCJuYXZpZ2F0aW9uTGlua1dyYXBwZXIiLCJuYXZpZ2F0aW9uTGluayIsIm5hdmlnYXRpb25NYWdpY0xpbmUiLCJnZXRQb3NpdGlvbiIsImN1cnJlbnQiLCJvblNlbGVjdExpbmsiLCJvbkxlYXZlIiwib25Ib3ZlciIsInRyYW5zaXRpb24iLCJzZXRQb3NpdGlvbiIsIm9uU2VsZWN0IiwiTG9nbyIsIl9yZWYkd2lkdGgiLCJ4bWxucyIsIlBvcnRhbCQxIiwiZG9tTm9kZSIsImNyZWF0ZVBvcnRhbCIsInN0eWxlcyRxIiwiTW9kYWxDb250ZW50IiwiTW9kYWxIZWFkZXIiLCJNb2RhbEZvb3RlciIsIkJBQ0tEUk9QX0lEIiwiYWRkTm9TY3JvbGwiLCJib2R5IiwiY2xhc3NMaXN0IiwicmVtb3ZlTm9TY3JvbGwiLCJyZW1vdmUiLCJNb2RhbCIsImlzT3BlbkNvbnRyb2xsZWQiLCJfcmVmJGFsbG93Qm9keVNjcm9sbCIsImFsbG93Qm9keVNjcm9sbCIsIl9yZWYkY2xvc2VPbkJhY2tkcm9wQyIsImNsb3NlT25CYWNrZHJvcENsaWNrIiwiX3JlZiRvbkNsb3NlIiwib25DbG9zZSIsImxvY2F0aW9uSW5Eb20iLCJzZXRJc09wZW4iLCJpc0NvbnRyb2xsZWQiLCJtb2RhbElzT3BlbiIsInVzZUVmZmVjdCIsImhhbmRsZUVzY2FwZSIsImhhbmRsZUNsb3NlIiwib25CYWNrZHJvcENsaWNrIiwidGFiSW5kZXgiLCJDb250ZW50IiwiSGVhZGVyIiwiRm9vdGVyIiwic3R5bGVzJHIiLCJQcm9ncmVzc0JhciIsInByb2dyZXNzIiwiX3JlZiR2YXJpYW50Iiwid3JhcHBlckNsYXNzZXMiLCJwcm9ncmVzc0NsYXNzZXMiLCJjbGFzc25hbWVzIiwiaGFzT3duIiwiYXJnIiwiYXJnVHlwZSIsImlubmVyIiwicmVxdWlyZWRBcmdzIiwicmVxdWlyZWQiLCJpc0RhdGUiLCJ0b0RhdGUiLCJhcmd1bWVudCIsImFyZ1N0ciIsImdldFRpbWUiLCJOYU4iLCJkaXJ0eURhdGUiLCJpc05hTiIsImZvcm1hdERpc3RhbmNlTG9jYWxlIiwibGVzc1RoYW5YU2Vjb25kcyIsIm9uZSIsIm90aGVyIiwieFNlY29uZHMiLCJoYWxmQU1pbnV0ZSIsImxlc3NUaGFuWE1pbnV0ZXMiLCJ4TWludXRlcyIsImFib3V0WEhvdXJzIiwieEhvdXJzIiwieERheXMiLCJhYm91dFhXZWVrcyIsInhXZWVrcyIsImFib3V0WE1vbnRocyIsInhNb250aHMiLCJhYm91dFhZZWFycyIsInhZZWFycyIsIm92ZXJYWWVhcnMiLCJhbG1vc3RYWWVhcnMiLCJmb3JtYXREaXN0YW5jZSIsInRva2VuIiwiY291bnQiLCJhZGRTdWZmaXgiLCJjb21wYXJpc29uIiwiYnVpbGRGb3JtYXRMb25nRm4iLCJkaXJ0eU9wdGlvbnMiLCJkZWZhdWx0V2lkdGgiLCJmb3JtYXQiLCJmb3JtYXRzIiwiZGF0ZUZvcm1hdHMiLCJmdWxsIiwidGltZUZvcm1hdHMiLCJkYXRlVGltZUZvcm1hdHMiLCJmb3JtYXRMb25nIiwidGltZSIsImRhdGVUaW1lIiwiZm9ybWF0UmVsYXRpdmVMb2NhbGUiLCJsYXN0V2VlayIsInllc3RlcmRheSIsInRvZGF5IiwidG9tb3Jyb3ciLCJuZXh0V2VlayIsImZvcm1hdFJlbGF0aXZlIiwiX2RhdGUiLCJfYmFzZURhdGUiLCJfb3B0aW9ucyIsImJ1aWxkTG9jYWxpemVGbiIsImRpcnR5SW5kZXgiLCJ2YWx1ZXNBcnJheSIsImZvcm1hdHRpbmdWYWx1ZXMiLCJkZWZhdWx0Rm9ybWF0dGluZ1dpZHRoIiwiX2RlZmF1bHRXaWR0aCIsIl93aWR0aCIsImFyZ3VtZW50Q2FsbGJhY2siLCJlcmFWYWx1ZXMiLCJuYXJyb3ciLCJhYmJyZXZpYXRlZCIsIndpZGUiLCJxdWFydGVyVmFsdWVzIiwibW9udGhWYWx1ZXMiLCJkYXlWYWx1ZXMiLCJkYXlQZXJpb2RWYWx1ZXMiLCJhbSIsInBtIiwibWlkbmlnaHQiLCJub29uIiwibW9ybmluZyIsImFmdGVybm9vbiIsImV2ZW5pbmciLCJuaWdodCIsImZvcm1hdHRpbmdEYXlQZXJpb2RWYWx1ZXMiLCJvcmRpbmFsTnVtYmVyIiwiZGlydHlOdW1iZXIiLCJfZGlydHlPcHRpb25zIiwicmVtMTAwIiwibG9jYWxpemUiLCJlcmEiLCJxdWFydGVyIiwiZGF5UGVyaW9kIiwiYnVpbGRNYXRjaFBhdHRlcm5GbiIsImRpcnR5U3RyaW5nIiwibWF0Y2hSZXN1bHQiLCJtYXRjaFBhdHRlcm4iLCJtYXRjaGVkU3RyaW5nIiwicGFyc2VSZXN1bHQiLCJwYXJzZVBhdHRlcm4iLCJ2YWx1ZUNhbGxiYWNrIiwicmVzdCIsImJ1aWxkTWF0Y2hGbiIsIm1hdGNoUGF0dGVybnMiLCJkZWZhdWx0TWF0Y2hXaWR0aCIsInBhcnNlUGF0dGVybnMiLCJkZWZhdWx0UGFyc2VXaWR0aCIsImZpbmRJbmRleCIsInBhdHRlcm4iLCJmaW5kS2V5IiwicHJlZGljYXRlIiwibWF0Y2hPcmRpbmFsTnVtYmVyUGF0dGVybiIsInBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4iLCJtYXRjaEVyYVBhdHRlcm5zIiwicGFyc2VFcmFQYXR0ZXJucyIsIm1hdGNoUXVhcnRlclBhdHRlcm5zIiwicGFyc2VRdWFydGVyUGF0dGVybnMiLCJtYXRjaE1vbnRoUGF0dGVybnMiLCJwYXJzZU1vbnRoUGF0dGVybnMiLCJtYXRjaERheVBhdHRlcm5zIiwicGFyc2VEYXlQYXR0ZXJucyIsIm1hdGNoRGF5UGVyaW9kUGF0dGVybnMiLCJwYXJzZURheVBlcmlvZFBhdHRlcm5zIiwibG9jYWxlIiwiY29kZSIsIndlZWtTdGFydHNPbiIsImZpcnN0V2Vla0NvbnRhaW5zRGF0ZSIsInRvSW50ZWdlciIsImNlaWwiLCJmbG9vciIsImFkZE1pbGxpc2Vjb25kcyIsImRpcnR5QW1vdW50IiwiYW1vdW50Iiwic3ViTWlsbGlzZWNvbmRzIiwiYWRkTGVhZGluZ1plcm9zIiwidGFyZ2V0TGVuZ3RoIiwic2lnbiIsIm91dHB1dCIsImFicyIsImZvcm1hdHRlcnMiLCJzaWduZWRZZWFyIiwiZ2V0VVRDRnVsbFllYXIiLCJ5ZWFyIiwiTSIsImdldFVUQ01vbnRoIiwiZ2V0VVRDRGF0ZSIsImRheVBlcmlvZEVudW1WYWx1ZSIsImdldFVUQ0hvdXJzIiwidG9VcHBlckNhc2UiLCJIIiwiZ2V0VVRDTWludXRlcyIsImdldFVUQ1NlY29uZHMiLCJTIiwibnVtYmVyT2ZEaWdpdHMiLCJtaWxsaXNlY29uZHMiLCJnZXRVVENNaWxsaXNlY29uZHMiLCJmcmFjdGlvbmFsU2Vjb25kcyIsInBvdyIsIk1JTExJU0VDT05EU19JTl9EQVkiLCJnZXRVVENEYXlPZlllYXIiLCJzZXRVVENNb250aCIsInNldFVUQ0hvdXJzIiwic3RhcnRPZlllYXJUaW1lc3RhbXAiLCJkaWZmZXJlbmNlIiwic3RhcnRPZlVUQ0lTT1dlZWsiLCJnZXRVVENEYXkiLCJkaWZmIiwic2V0VVRDRGF0ZSIsImdldFVUQ0lTT1dlZWtZZWFyIiwiZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhciIsInNldFVUQ0Z1bGxZZWFyIiwic3RhcnRPZk5leHRZZWFyIiwiZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhciIsInN0YXJ0T2ZUaGlzWWVhciIsInN0YXJ0T2ZVVENJU09XZWVrWWVhciIsImZvdXJ0aE9mSmFudWFyeSIsIk1JTExJU0VDT05EU19JTl9XRUVLIiwiZ2V0VVRDSVNPV2VlayIsInJvdW5kIiwic3RhcnRPZlVUQ1dlZWsiLCJsb2NhbGVXZWVrU3RhcnRzT24iLCJkZWZhdWx0V2Vla1N0YXJ0c09uIiwiUmFuZ2VFcnJvciIsImdldFVUQ1dlZWtZZWFyIiwibG9jYWxlRmlyc3RXZWVrQ29udGFpbnNEYXRlIiwiZGVmYXVsdEZpcnN0V2Vla0NvbnRhaW5zRGF0ZSIsImZpcnN0V2Vla09mTmV4dFllYXIiLCJmaXJzdFdlZWtPZlRoaXNZZWFyIiwic3RhcnRPZlVUQ1dlZWtZZWFyIiwiZmlyc3RXZWVrIiwiTUlMTElTRUNPTkRTX0lOX1dFRUskMSIsImdldFVUQ1dlZWsiLCJkYXlQZXJpb2RFbnVtIiwiZm9ybWF0dGVycyQxIiwiRyIsInVuaXQiLCJZIiwic2lnbmVkV2Vla1llYXIiLCJ3ZWVrWWVhciIsInR3b0RpZ2l0WWVhciIsIlIiLCJpc29XZWVrWWVhciIsIlEiLCJMIiwid2VlayIsIkkiLCJpc29XZWVrIiwiRCIsImRheU9mWWVhciIsIkUiLCJkYXlPZldlZWsiLCJsb2NhbERheU9mV2VlayIsImlzb0RheU9mV2VlayIsImhvdXJzIiwiQiIsIksiLCJYIiwiX2xvY2FsaXplIiwib3JpZ2luYWxEYXRlIiwiX29yaWdpbmFsRGF0ZSIsInRpbWV6b25lT2Zmc2V0IiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXMiLCJmb3JtYXRUaW1lem9uZSIsIk8iLCJmb3JtYXRUaW1lem9uZVNob3J0IiwiVCIsImRpcnR5RGVsaW1pdGVyIiwiYWJzT2Zmc2V0IiwibWludXRlcyIsImRlbGltaXRlciIsImRhdGVMb25nRm9ybWF0dGVyIiwidGltZUxvbmdGb3JtYXR0ZXIiLCJkYXRlVGltZUxvbmdGb3JtYXR0ZXIiLCJkYXRlUGF0dGVybiIsInRpbWVQYXR0ZXJuIiwiZGF0ZVRpbWVGb3JtYXQiLCJsb25nRm9ybWF0dGVycyIsIlAiLCJNSUxMSVNFQ09ORFNfSU5fTUlOVVRFIiwiZ2V0RGF0ZU1pbGxpc2Vjb25kc1BhcnQiLCJnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzIiwiYmFzZVRpbWV6b25lT2Zmc2V0Iiwic2V0U2Vjb25kcyIsImhhc05lZ2F0aXZlVVRDT2Zmc2V0IiwibWlsbGlzZWNvbmRzUGFydE9mVGltZXpvbmVPZmZzZXQiLCJwcm90ZWN0ZWREYXlPZlllYXJUb2tlbnMiLCJwcm90ZWN0ZWRXZWVrWWVhclRva2VucyIsImlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4iLCJpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4iLCJ0aHJvd1Byb3RlY3RlZEVycm9yIiwiZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCIsImxvbmdGb3JtYXR0aW5nVG9rZW5zUmVnRXhwIiwiZXNjYXBlZFN0cmluZ1JlZ0V4cCIsImRvdWJsZVF1b3RlUmVnRXhwIiwidW5lc2NhcGVkTGF0aW5DaGFyYWN0ZXJSZWdFeHAiLCJkaXJ0eUZvcm1hdFN0ciIsImZvcm1hdFN0ciIsImxvY2FsZSQxIiwidXRjRGF0ZSIsImZvcm1hdHRlck9wdGlvbnMiLCJzdWJzdHJpbmciLCJmaXJzdENoYXJhY3RlciIsImxvbmdGb3JtYXR0ZXIiLCJjbGVhbkVzY2FwZWRTdHJpbmciLCJmb3JtYXR0ZXIiLCJ1c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnMiLCJ1c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zIiwiTUlMTElTRUNPTkRTX0lOX01JTlVURSQxIiwiYWRkTWludXRlcyIsIk1JTExJU0VDT05EU19JTl9IT1VSIiwiYWRkSG91cnMiLCJhZGREYXlzIiwic2V0RGF0ZSIsImdldERhdGUiLCJhZGRXZWVrcyIsImRheXMiLCJhZGRNb250aHMiLCJkYXlPZk1vbnRoIiwiZW5kT2ZEZXNpcmVkTW9udGgiLCJzZXRNb250aCIsImdldE1vbnRoIiwiZGF5c0luTW9udGgiLCJzZXRGdWxsWWVhciIsImdldEZ1bGxZZWFyIiwiYWRkWWVhcnMiLCJzdWJEYXlzIiwic3ViV2Vla3MiLCJzdWJNb250aHMiLCJzdWJZZWFycyIsImdldFNlY29uZHMiLCJzZWNvbmRzIiwiZ2V0TWludXRlcyIsImdldEhvdXJzIiwiZ2V0RGF5Iiwic3RhcnRPZldlZWsiLCJzZXRIb3VycyIsImdldFdlZWtZZWFyIiwic3RhcnRPZldlZWtZZWFyIiwiTUlMTElTRUNPTkRTX0lOX1dFRUskMiIsImdldFdlZWsiLCJnZXRRdWFydGVyIiwiZ2V0WWVhciIsImRpcnR5U2Vjb25kcyIsInNldE1pbnV0ZXMiLCJkaXJ0eU1pbnV0ZXMiLCJkaXJ0eUhvdXJzIiwiZ2V0RGF5c0luTW9udGgiLCJtb250aEluZGV4IiwibGFzdERheU9mTW9udGgiLCJkaXJ0eU1vbnRoIiwiZGF0ZVdpdGhEZXNpcmVkTW9udGgiLCJzZXRRdWFydGVyIiwiZGlydHlRdWFydGVyIiwib2xkUXVhcnRlciIsInNldFllYXIiLCJkaXJ0eVllYXIiLCJkaXJ0eURhdGVzQXJyYXkiLCJkYXRlc0FycmF5IiwiY3VycmVudERhdGUiLCJzdGFydE9mRGF5IiwiTUlMTElTRUNPTkRTX0lOX0RBWSQxIiwiZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzIiwiZGlydHlEYXRlTGVmdCIsImRpcnR5RGF0ZVJpZ2h0Iiwic3RhcnRPZkRheUxlZnQiLCJzdGFydE9mRGF5UmlnaHQiLCJ0aW1lc3RhbXBMZWZ0IiwidGltZXN0YW1wUmlnaHQiLCJkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocyIsImRhdGVMZWZ0IiwiZGF0ZVJpZ2h0IiwieWVhckRpZmYiLCJtb250aERpZmYiLCJkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzIiwic3RhcnRPZk1vbnRoIiwic3RhcnRPZlF1YXJ0ZXIiLCJjdXJyZW50TW9udGgiLCJzdGFydE9mWWVhciIsImNsZWFuRGF0ZSIsImVuZE9mRGF5IiwiaXNFcXVhbCIsImRpcnR5TGVmdERhdGUiLCJkaXJ0eVJpZ2h0RGF0ZSIsImlzU2FtZURheSIsImRhdGVMZWZ0U3RhcnRPZkRheSIsImRhdGVSaWdodFN0YXJ0T2ZEYXkiLCJpc1NhbWVNb250aCIsImlzU2FtZVllYXIiLCJpc1NhbWVRdWFydGVyIiwiZGF0ZUxlZnRTdGFydE9mUXVhcnRlciIsImRhdGVSaWdodFN0YXJ0T2ZRdWFydGVyIiwiaXNBZnRlciIsImRpcnR5RGF0ZVRvQ29tcGFyZSIsImRhdGVUb0NvbXBhcmUiLCJpc0JlZm9yZSIsImlzV2l0aGluSW50ZXJ2YWwiLCJkaXJ0eUludGVydmFsIiwiaW50ZXJ2YWwiLCJzdGFydFRpbWUiLCJlbmRUaW1lIiwiZGlydHlPYmplY3QiLCJwcm9wZXJ0eSIsInNldFVUQ0RheSIsImRpcnR5RGF5IiwiY3VycmVudERheSIsInJlbWFpbmRlciIsImRheUluZGV4Iiwic2V0VVRDSVNPRGF5Iiwic2V0VVRDSVNPV2VlayIsImRpcnR5SVNPV2VlayIsInNldFVUQ1dlZWsiLCJkaXJ0eVdlZWsiLCJNSUxMSVNFQ09ORFNfSU5fSE9VUiQxIiwiTUlMTElTRUNPTkRTX0lOX01JTlVURSQyIiwiTUlMTElTRUNPTkRTX0lOX1NFQ09ORCIsIm51bWVyaWNQYXR0ZXJucyIsImhvdXIyM2giLCJob3VyMjRoIiwiaG91cjExaCIsImhvdXIxMmgiLCJtaW51dGUiLCJzZWNvbmQiLCJzaW5nbGVEaWdpdCIsInR3b0RpZ2l0cyIsInRocmVlRGlnaXRzIiwiZm91ckRpZ2l0cyIsImFueURpZ2l0c1NpZ25lZCIsInNpbmdsZURpZ2l0U2lnbmVkIiwidHdvRGlnaXRzU2lnbmVkIiwidGhyZWVEaWdpdHNTaWduZWQiLCJmb3VyRGlnaXRzU2lnbmVkIiwidGltZXpvbmVQYXR0ZXJucyIsImJhc2ljT3B0aW9uYWxNaW51dGVzIiwiYmFzaWMiLCJiYXNpY09wdGlvbmFsU2Vjb25kcyIsImV4dGVuZGVkIiwiZXh0ZW5kZWRPcHRpb25hbFNlY29uZHMiLCJwYXJzZU51bWVyaWNQYXR0ZXJuIiwicGFyc2VUaW1lem9uZVBhdHRlcm4iLCJwYXJzZUFueURpZ2l0c1NpZ25lZCIsInBhcnNlTkRpZ2l0cyIsInBhcnNlTkRpZ2l0c1NpZ25lZCIsImRheVBlcmlvZEVudW1Ub0hvdXJzIiwiZW51bVZhbHVlIiwibm9ybWFsaXplVHdvRGlnaXRZZWFyIiwiY3VycmVudFllYXIiLCJpc0NvbW1vbkVyYSIsImFic0N1cnJlbnRZZWFyIiwicmFuZ2VFbmQiLCJyYW5nZUVuZENlbnR1cnkiLCJpc1ByZXZpb3VzQ2VudHVyeSIsIkRBWVNfSU5fTU9OVEgiLCJEQVlTX0lOX01PTlRIX0xFQVBfWUVBUiIsImlzTGVhcFllYXJJbmRleCIsInBhcnNlcnMiLCJwcmlvcml0eSIsInBhcnNlIiwic2V0IiwiZmxhZ3MiLCJpbmNvbXBhdGlibGVUb2tlbnMiLCJpc1R3b0RpZ2l0WWVhciIsIm5vcm1hbGl6ZWRUd29EaWdpdFllYXIiLCJfbWF0Y2giLCJfZmxhZ3MiLCJmaXJzdFdlZWtPZlllYXIiLCJzdWJQcmlvcml0eSIsImlzTGVhcFllYXIiLCJ3aG9sZVdlZWtEYXlzIiwiaXNQTSIsInNldFVUQ01pbnV0ZXMiLCJzZXRVVENTZWNvbmRzIiwic2V0VVRDTWlsbGlzZWNvbmRzIiwidGltZXN0YW1wSXNTZXQiLCJfdG9rZW4iLCJUSU1FWk9ORV9VTklUX1BSSU9SSVRZIiwiZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCQxIiwibG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHAkMSIsImVzY2FwZWRTdHJpbmdSZWdFeHAkMSIsImRvdWJsZVF1b3RlUmVnRXhwJDEiLCJub3RXaGl0ZXNwYWNlUmVnRXhwIiwidW5lc2NhcGVkTGF0aW5DaGFyYWN0ZXJSZWdFeHAkMSIsImRpcnR5RGF0ZVN0cmluZyIsImRpcnR5Rm9ybWF0U3RyaW5nIiwiZGlydHlSZWZlcmVuY2VEYXRlIiwiZGF0ZVN0cmluZyIsImZvcm1hdFN0cmluZyIsInN1YkZuT3B0aW9ucyIsInNldHRlcnMiLCJkYXRlVG9TeXN0ZW1UaW1lem9uZSIsInRva2VucyIsInVzZWRUb2tlbnMiLCJwYXJzZXIiLCJpbmNvbXBhdGlibGVUb2tlbiIsInVzZWRUb2tlbiIsImZ1bGxUb2tlbiIsImNsZWFuRXNjYXBlZFN0cmluZyQxIiwidW5pcXVlUHJpb3JpdHlTZXR0ZXJzIiwic2V0dGVyIiwic29ydCIsInNldHRlckFycmF5IiwiY29udmVydGVkRGF0ZSIsIk1JTExJU0VDT05EU19JTl9IT1VSJDIiLCJNSUxMSVNFQ09ORFNfSU5fTUlOVVRFJDMiLCJERUZBVUxUX0FERElUSU9OQUxfRElHSVRTIiwicGF0dGVybnMiLCJkYXRlVGltZURlbGltaXRlciIsInRpbWVab25lRGVsaW1pdGVyIiwidGltZXpvbmUiLCJkYXRlUmVnZXgiLCJ0aW1lUmVnZXgiLCJ0aW1lem9uZVJlZ2V4IiwicGFyc2VJU08iLCJhZGRpdGlvbmFsRGlnaXRzIiwiZGF0ZVN0cmluZ3MiLCJzcGxpdERhdGVTdHJpbmciLCJwYXJzZVllYXJSZXN1bHQiLCJwYXJzZVllYXIiLCJwYXJzZURhdGUiLCJyZXN0RGF0ZVN0cmluZyIsInBhcnNlVGltZSIsInBhcnNlVGltZXpvbmUiLCJ0aW1lU3RyaW5nIiwic3Vic3RyIiwiY2FwdHVyZXMiLCJjZW50dXJ5IiwiaXNXZWVrRGF0ZSIsInBhcnNlRGF0ZVVuaXQiLCJ2YWxpZGF0ZVdlZWtEYXRlIiwiZGF5T2ZJU09XZWVrWWVhciIsInZhbGlkYXRlRGF0ZSIsInZhbGlkYXRlRGF5T2ZZZWFyRGF0ZSIsInBhcnNlVGltZVVuaXQiLCJ2YWxpZGF0ZVRpbWUiLCJwYXJzZUZsb2F0IiwidGltZXpvbmVTdHJpbmciLCJ2YWxpZGF0ZVRpbWV6b25lIiwiZm91cnRoT2ZKYW51YXJ5RGF5IiwiZGF5c0luTW9udGhzIiwiaXNMZWFwWWVhckluZGV4JDEiLCJfeWVhciIsIl9ob3VycyIsIl9pbmhlcml0c0xvb3NlIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzJDEiLCJpc05vZGVGb3VuZCIsImNvbXBvbmVudE5vZGUiLCJpZ25vcmVDbGFzcyIsImNvcnJlc3BvbmRpbmdFbGVtZW50IiwiY29udGFpbnMiLCJmaW5kSGlnaGVzdCIsImNsaWNrZWRTY3JvbGxiYXIiLCJldnQiLCJjbGllbnRYIiwiY2xpZW50WSIsInRlc3RQYXNzaXZlRXZlbnRTdXBwb3J0Iiwibm9vcCIsImF1dG9JbmMiLCJzZWVkIiwidWlkIiwicGFzc2l2ZUV2ZW50U3VwcG9ydCIsImhhbmRsZXJzTWFwIiwiZW5hYmxlZEluc3RhbmNlcyIsInRvdWNoRXZlbnRzIiwiSUdOT1JFX0NMQVNTX05BTUUiLCJnZXRFdmVudEhhbmRsZXJPcHRpb25zIiwiaGFuZGxlck9wdGlvbnMiLCJpc1RvdWNoRXZlbnQiLCJvbkNsaWNrT3V0c2lkZUhPQyIsImNvbmZpZyIsIl9jbGFzcyIsIm9uQ2xpY2tPdXRzaWRlIiwiX19vdXRzaWRlQ2xpY2tIYW5kbGVyIiwiX19jbGlja091dHNpZGVIYW5kbGVyUHJvcCIsImdldEluc3RhbmNlIiwiaGFuZGxlQ2xpY2tPdXRzaWRlIiwiX19nZXRDb21wb25lbnROb2RlIiwic2V0Q2xpY2tPdXRzaWRlUmVmIiwiZW5hYmxlT25DbGlja091dHNpZGUiLCJfdWlkIiwiZXZlbnRzIiwiZXZlbnRUeXBlcyIsImV4Y2x1ZGVTY3JvbGxiYXIiLCJvdXRzaWRlQ2xpY2tJZ25vcmVDbGFzcyIsImRpc2FibGVPbkNsaWNrT3V0c2lkZSIsImdldFJlZiIsImluc3RhbmNlUmVmIiwiX3Byb3RvIiwiaXNSZWFjdENvbXBvbmVudCIsIndyYXBwZWRSZWYiLCJnZXRDbGFzcyIsInRvU3RyIiwiaXNBcmd1bWVudHMiLCJzdHIiLCJpc0FyZ3MiLCJjYWxsZWUiLCJrZXlzU2hpbSIsImhhcyQyIiwidG9TdHIkMSIsImlzRW51bWVyYWJsZSIsImhhc0RvbnRFbnVtQnVnIiwiaGFzUHJvdG9FbnVtQnVnIiwiZG9udEVudW1zIiwiZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUiLCJjdG9yIiwiZXhjbHVkZWRLZXlzIiwiJGFwcGxpY2F0aW9uQ2FjaGUiLCIkY29uc29sZSIsIiRleHRlcm5hbCIsIiRmcmFtZSIsIiRmcmFtZUVsZW1lbnQiLCIkZnJhbWVzIiwiJGlubmVySGVpZ2h0IiwiJGlubmVyV2lkdGgiLCIkb25tb3pmdWxsc2NyZWVuY2hhbmdlIiwiJG9ubW96ZnVsbHNjcmVlbmVycm9yIiwiJG91dGVySGVpZ2h0IiwiJG91dGVyV2lkdGgiLCIkcGFnZVhPZmZzZXQiLCIkcGFnZVlPZmZzZXQiLCIkcGFyZW50IiwiJHNjcm9sbExlZnQiLCIkc2Nyb2xsVG9wIiwiJHNjcm9sbFgiLCIkc2Nyb2xsWSIsIiRzZWxmIiwiJHdlYmtpdEluZGV4ZWREQiIsIiR3ZWJraXRTdG9yYWdlSW5mbyIsIiR3aW5kb3ciLCJoYXNBdXRvbWF0aW9uRXF1YWxpdHlCdWciLCJlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kiLCJpc09iamVjdCIsImlzRnVuY3Rpb24iLCJ0aGVLZXlzIiwic2tpcFByb3RvIiwiaiIsInNraXBDb25zdHJ1Y3RvciIsImltcGxlbWVudGF0aW9uIiwib3JpZ0tleXMiLCJrZXlzU2hpbSQxIiwib3JpZ2luYWxLZXlzIiwic2hpbU9iamVjdEtleXMiLCJrZXlzV29ya3NXaXRoQXJndW1lbnRzIiwib2JqZWN0S2V5cyIsImhhc1RvU3RyaW5nVGFnIiwidG9TdHJpbmdUYWciLCJ0b1N0ciQyIiwiaXNTdGFuZGFyZEFyZ3VtZW50cyIsImlzTGVnYWN5QXJndW1lbnRzIiwic3VwcG9ydHNTdGFuZGFyZEFyZ3VtZW50cyIsImlzQXJndW1lbnRzJDEiLCJoYXNTeW1ib2xzIiwidG9TdHIkMyIsIm9yaWdEZWZpbmVQcm9wZXJ0eSIsImFyZVByb3BlcnR5RGVzY3JpcHRvcnNTdXBwb3J0ZWQiLCJfIiwic3VwcG9ydHNEZXNjcmlwdG9ycyIsInByZWRpY2F0ZXMiLCJkZWZpbmVQcm9wZXJ0aWVzXzEiLCJudW1iZXJJc05hTiIsImltcGxlbWVudGF0aW9uJDEiLCJwb2x5ZmlsbCIsImdldFBvbHlmaWxsIiwic2hpbU9iamVjdElzIiwicG9seWZpbGwkMSIsInRlc3RPYmplY3RJcyIsIm9iamVjdElzIiwic2hhbXMiLCJzeW1PYmoiLCJzeW1WYWwiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwic3ltcyIsIm9yaWdTeW1ib2wiLCJoYXNTeW1ib2xzJDEiLCJoYXNOYXRpdmVTeW1ib2xzIiwiaGFzU3ltYm9scyQyIiwiaGFzVG9TdHJpbmdUYWckMSIsInJlZ2V4RXhlYyIsImlzUmVnZXhNYXJrZXIiLCJiYWRTdHJpbmdpZmllciIsInRocm93UmVnZXhNYXJrZXIiLCJ2YWx1ZU9mIiwidG9QcmltaXRpdmUiLCJ0b1N0ciQ0IiwiZ09QRCIsInJlZ2V4Q2xhc3MiLCJpc1JlZ2V4IiwiaGFzTGFzdEluZGV4RGF0YVByb3BlcnR5IiwiJE9iamVjdCIsIiRUeXBlRXJyb3IiLCJpbXBsZW1lbnRhdGlvbiQyIiwiZ2xvYmFsIiwiaWdub3JlQ2FzZSIsIm11bHRpbGluZSIsImRvdEFsbCIsInVuaWNvZGUiLCJzdGlja3kiLCJzdXBwb3J0c0Rlc2NyaXB0b3JzJDEiLCIkZ09QRCIsIiRUeXBlRXJyb3IkMSIsInBvbHlmaWxsJDIiLCJzdXBwb3J0c0Rlc2NyaXB0b3JzJDIiLCJnT1BEJDEiLCJkZWZpbmVQcm9wZXJ0eSQxIiwiVHlwZUVyciIsImdldFByb3RvIiwic2hpbSQxIiwic2hpbUZsYWdzIiwicHJvdG8iLCJmbGFnc0JvdW5kIiwicmVnZXhwX3Byb3RvdHlwZV9mbGFncyIsImdldERheSQxIiwidHJ5RGF0ZU9iamVjdCIsInRyeURhdGVHZXREYXlDYWxsIiwidG9TdHIkNSIsImRhdGVDbGFzcyIsImhhc1RvU3RyaW5nVGFnJDIiLCJpc0RhdGVPYmplY3QiLCJnZXRUaW1lJDEiLCJkZWVwRXF1YWwiLCJhY3R1YWwiLCJleHBlY3RlZCIsInN0cmljdCIsIm9iakVxdWl2IiwiaXNVbmRlZmluZWRPck51bGwiLCJpc0J1ZmZlciIsImNvcHkiLCJhSXNSZWdleCIsImJJc1JlZ2V4IiwiYUlzQnVmZmVyIiwiYklzQnVmZmVyIiwia2EiLCJrYiIsImRlZXBFcXVhbF8xIiwiaXNCcm93c2VyIiwibmF2aWdhdG9yIiwidGltZW91dER1cmF0aW9uIiwibG9uZ2VyVGltZW91dEJyb3dzZXJzIiwidXNlckFnZW50IiwibWljcm90YXNrRGVib3VuY2UiLCJjYWxsZWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJ0YXNrRGVib3VuY2UiLCJzY2hlZHVsZWQiLCJzdXBwb3J0c01pY3JvVGFza3MiLCJpc0Z1bmN0aW9uJDEiLCJmdW5jdGlvblRvQ2hlY2siLCJnZXRUeXBlIiwiZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5Iiwibm9kZVR5cGUiLCJkZWZhdWx0VmlldyIsImNzcyIsImdldFBhcmVudE5vZGUiLCJub2RlTmFtZSIsImhvc3QiLCJnZXRTY3JvbGxQYXJlbnQiLCJfZ2V0U3R5bGVDb21wdXRlZFByb3AiLCJnZXRSZWZlcmVuY2VOb2RlIiwicmVmZXJlbmNlIiwicmVmZXJlbmNlTm9kZSIsImlzSUUxMSIsIk1TSW5wdXRNZXRob2RDb250ZXh0IiwiZG9jdW1lbnRNb2RlIiwiaXNJRTEwIiwiaXNJRSIsInZlcnNpb24iLCJnZXRPZmZzZXRQYXJlbnQiLCJub09mZnNldFBhcmVudCIsIm5leHRFbGVtZW50U2libGluZyIsImlzT2Zmc2V0Q29udGFpbmVyIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJnZXRSb290IiwiZmluZENvbW1vbk9mZnNldFBhcmVudCIsImVsZW1lbnQxIiwiZWxlbWVudDIiLCJjb21wYXJlRG9jdW1lbnRQb3NpdGlvbiIsIk5vZGUiLCJET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkciLCJyYW5nZSIsImNyZWF0ZVJhbmdlIiwic2V0U3RhcnQiLCJzZXRFbmQiLCJjb21tb25BbmNlc3RvckNvbnRhaW5lciIsImVsZW1lbnQxcm9vdCIsImdldFNjcm9sbCIsInNpZGUiLCJ1cHBlclNpZGUiLCJodG1sIiwic2Nyb2xsaW5nRWxlbWVudCIsImluY2x1ZGVTY3JvbGwiLCJyZWN0Iiwic3VidHJhY3QiLCJzY3JvbGxMZWZ0IiwibW9kaWZpZXIiLCJnZXRCb3JkZXJzU2l6ZSIsImF4aXMiLCJzaWRlQSIsInNpZGVCIiwiZ2V0U2l6ZSIsImNvbXB1dGVkU3R5bGUiLCJnZXRXaW5kb3dTaXplcyIsImNsYXNzQ2FsbENoZWNrIiwiY3JlYXRlQ2xhc3MiLCJkZWZpbmVQcm9wZXJ0eSQyIiwiX2V4dGVuZHMkMSIsImdldENsaWVudFJlY3QiLCJzaXplcyIsImhvcml6U2Nyb2xsYmFyIiwidmVydFNjcm9sbGJhciIsImdldE9mZnNldFJlY3RSZWxhdGl2ZVRvQXJiaXRyYXJ5Tm9kZSIsImZpeGVkUG9zaXRpb24iLCJpc0hUTUwiLCJjaGlsZHJlblJlY3QiLCJwYXJlbnRSZWN0IiwiYm9yZGVyVG9wV2lkdGgiLCJib3JkZXJMZWZ0V2lkdGgiLCJtYXJnaW5Ub3AiLCJtYXJnaW5MZWZ0IiwiZ2V0Vmlld3BvcnRPZmZzZXRSZWN0UmVsYXRpdmVUb0FydGJpdHJhcnlOb2RlIiwiZXhjbHVkZVNjcm9sbCIsInJlbGF0aXZlT2Zmc2V0IiwiaXNGaXhlZCIsImdldEZpeGVkUG9zaXRpb25PZmZzZXRQYXJlbnQiLCJwYXJlbnRFbGVtZW50IiwiZ2V0Qm91bmRhcmllcyIsInBvcHBlciIsInBhZGRpbmciLCJib3VuZGFyaWVzRWxlbWVudCIsImJvdW5kYXJpZXMiLCJib3VuZGFyaWVzTm9kZSIsIl9nZXRXaW5kb3dTaXplcyIsImlzUGFkZGluZ051bWJlciIsImdldEFyZWEiLCJjb21wdXRlQXV0b1BsYWNlbWVudCIsInBsYWNlbWVudCIsInJlZlJlY3QiLCJyZWN0cyIsInNvcnRlZEFyZWFzIiwiYXJlYSIsImZpbHRlcmVkQXJlYXMiLCJjb21wdXRlZFBsYWNlbWVudCIsInZhcmlhdGlvbiIsImdldFJlZmVyZW5jZU9mZnNldHMiLCJjb21tb25PZmZzZXRQYXJlbnQiLCJnZXRPdXRlclNpemVzIiwibWFyZ2luQm90dG9tIiwibWFyZ2luUmlnaHQiLCJnZXRPcHBvc2l0ZVBsYWNlbWVudCIsImhhc2giLCJtYXRjaGVkIiwiZ2V0UG9wcGVyT2Zmc2V0cyIsInJlZmVyZW5jZU9mZnNldHMiLCJwb3BwZXJSZWN0IiwicG9wcGVyT2Zmc2V0cyIsImlzSG9yaXoiLCJtYWluU2lkZSIsInNlY29uZGFyeVNpZGUiLCJtZWFzdXJlbWVudCIsInNlY29uZGFyeU1lYXN1cmVtZW50IiwiZmluZCIsImZpbmRJbmRleCQxIiwicHJvcCIsImN1ciIsInJ1bk1vZGlmaWVycyIsIm1vZGlmaWVycyIsImVuZHMiLCJtb2RpZmllcnNUb1J1biIsImVuYWJsZWQiLCJ1cGRhdGUiLCJpc0Rlc3Ryb3llZCIsImFycm93U3R5bGVzIiwiYXR0cmlidXRlcyIsInBvc2l0aW9uRml4ZWQiLCJmbGlwIiwib3JpZ2luYWxQbGFjZW1lbnQiLCJpc0NyZWF0ZWQiLCJvbkNyZWF0ZSIsIm9uVXBkYXRlIiwiaXNNb2RpZmllckVuYWJsZWQiLCJtb2RpZmllck5hbWUiLCJzb21lIiwiZ2V0U3VwcG9ydGVkUHJvcGVydHlOYW1lIiwicHJlZml4ZXMiLCJ1cHBlclByb3AiLCJjaGFyQXQiLCJwcmVmaXgiLCJ0b0NoZWNrIiwiZGVzdHJveSIsIndpbGxDaGFuZ2UiLCJkaXNhYmxlRXZlbnRMaXN0ZW5lcnMiLCJyZW1vdmVPbkRlc3Ryb3kiLCJyZW1vdmVDaGlsZCIsImdldFdpbmRvdyIsImF0dGFjaFRvU2Nyb2xsUGFyZW50cyIsInNjcm9sbFBhcmVudHMiLCJpc0JvZHkiLCJzZXR1cEV2ZW50TGlzdGVuZXJzIiwidXBkYXRlQm91bmQiLCJzY3JvbGxFbGVtZW50IiwiZXZlbnRzRW5hYmxlZCIsImVuYWJsZUV2ZW50TGlzdGVuZXJzIiwic2NoZWR1bGVVcGRhdGUiLCJyZW1vdmVFdmVudExpc3RlbmVycyIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiaXNOdW1lcmljIiwiaXNGaW5pdGUiLCJzZXRTdHlsZXMiLCJzZXRBdHRyaWJ1dGVzIiwiYXBwbHlTdHlsZSIsImFycm93RWxlbWVudCIsImFwcGx5U3R5bGVPbkxvYWQiLCJtb2RpZmllck9wdGlvbnMiLCJnZXRSb3VuZGVkT2Zmc2V0cyIsInNob3VsZFJvdW5kIiwiX2RhdGEkb2Zmc2V0cyIsIm5vUm91bmQiLCJyZWZlcmVuY2VXaWR0aCIsInBvcHBlcldpZHRoIiwiaXNWZXJ0aWNhbCIsImlzVmFyaWF0aW9uIiwic2FtZVdpZHRoUGFyaXR5IiwiYm90aE9kZFdpZHRoIiwiaG9yaXpvbnRhbFRvSW50ZWdlciIsInZlcnRpY2FsVG9JbnRlZ2VyIiwiaXNGaXJlZm94IiwiY29tcHV0ZVN0eWxlIiwibGVnYWN5R3B1QWNjZWxlcmF0aW9uT3B0aW9uIiwiZ3B1QWNjZWxlcmF0aW9uIiwib2Zmc2V0UGFyZW50UmVjdCIsImRldmljZVBpeGVsUmF0aW8iLCJwcmVmaXhlZFByb3BlcnR5IiwiaW52ZXJ0VG9wIiwiaW52ZXJ0TGVmdCIsImFycm93IiwiaXNNb2RpZmllclJlcXVpcmVkIiwicmVxdWVzdGluZ05hbWUiLCJyZXF1ZXN0ZWROYW1lIiwicmVxdWVzdGluZyIsIl9yZXF1ZXN0aW5nIiwicmVxdWVzdGVkIiwiX2RhdGEkb2Zmc2V0cyRhcnJvdyIsInNpZGVDYXBpdGFsaXplZCIsImFsdFNpZGUiLCJvcFNpZGUiLCJhcnJvd0VsZW1lbnRTaXplIiwiY2VudGVyIiwicG9wcGVyTWFyZ2luU2lkZSIsInBvcHBlckJvcmRlclNpZGUiLCJzaWRlVmFsdWUiLCJnZXRPcHBvc2l0ZVZhcmlhdGlvbiIsInBsYWNlbWVudHMiLCJ2YWxpZFBsYWNlbWVudHMiLCJjbG9ja3dpc2UiLCJjb3VudGVyIiwicmV2ZXJzZSIsIkJFSEFWSU9SUyIsIkZMSVAiLCJDTE9DS1dJU0UiLCJDT1VOVEVSQ0xPQ0tXSVNFIiwicGxhY2VtZW50T3Bwb3NpdGUiLCJmbGlwT3JkZXIiLCJiZWhhdmlvciIsInJlZk9mZnNldHMiLCJvdmVybGFwc1JlZiIsIm92ZXJmbG93c0xlZnQiLCJvdmVyZmxvd3NSaWdodCIsIm92ZXJmbG93c1RvcCIsIm92ZXJmbG93c0JvdHRvbSIsIm92ZXJmbG93c0JvdW5kYXJpZXMiLCJmbGlwcGVkVmFyaWF0aW9uQnlSZWYiLCJmbGlwVmFyaWF0aW9ucyIsImZsaXBwZWRWYXJpYXRpb25CeUNvbnRlbnQiLCJmbGlwVmFyaWF0aW9uc0J5Q29udGVudCIsImZsaXBwZWRWYXJpYXRpb24iLCJrZWVwVG9nZXRoZXIiLCJ0b1ZhbHVlIiwicGFyc2VPZmZzZXQiLCJiYXNlUGxhY2VtZW50IiwidXNlSGVpZ2h0IiwiZnJhZ21lbnRzIiwiZnJhZyIsImRpdmlkZXIiLCJzcGxpdFJlZ2V4Iiwib3BzIiwib3AiLCJtZXJnZVdpdGhQcmV2aW91cyIsInJlZHVjZSIsImluZGV4MiIsInByZXZlbnRPdmVyZmxvdyIsInRyYW5zZm9ybVByb3AiLCJwb3BwZXJTdHlsZXMiLCJwcmltYXJ5IiwiZXNjYXBlV2l0aFJlZmVyZW5jZSIsInNlY29uZGFyeSIsInNoaWZ0Iiwic2hpZnR2YXJpYXRpb24iLCJzaGlmdE9mZnNldHMiLCJoaWRlIiwiYm91bmQiLCJzdWJ0cmFjdExlbmd0aCIsIm9uTG9hZCIsIkRlZmF1bHRzIiwiUG9wcGVyIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwianF1ZXJ5IiwidXBkYXRlJCQxIiwiZGVzdHJveSQkMSIsImVuYWJsZUV2ZW50TGlzdGVuZXJzJCQxIiwiZGlzYWJsZUV2ZW50TGlzdGVuZXJzJCQxIiwiVXRpbHMiLCJQb3BwZXJVdGlscyIsImd1ZCIsIl9fREVWX18iLCJ3YXJuaW5nIiwicHJpbnRXYXJuaW5nJDIiLCJhcmdJbmRleCIsImNvbmRpdGlvbiIsIndhcm5pbmdfMSIsImltcGxlbWVudGF0aW9uJDMiLCJfZ3VkMiIsIl93YXJuaW5nMiIsIk1BWF9TSUdORURfMzFfQklUX0lOVCIsImNyZWF0ZUV2ZW50RW1pdHRlciIsImhhbmRsZXJzIiwiaGFuZGxlciIsImNoYW5nZWRCaXRzIiwib25seUNoaWxkIiwiY3JlYXRlUmVhY3RDb250ZXh0IiwiZGVmYXVsdFZhbHVlIiwiY2FsY3VsYXRlQ2hhbmdlZEJpdHMiLCJfUHJvdmlkZXIkY2hpbGRDb250ZXgiLCJfQ29uc3VtZXIkY29udGV4dFR5cGUiLCJjb250ZXh0UHJvcCIsIlByb3ZpZGVyIiwiZW1pdHRlciIsImdldENoaWxkQ29udGV4dCIsIm9sZFZhbHVlIiwiY2hpbGRDb250ZXh0VHlwZXMiLCJDb25zdW1lciIsIl90ZW1wMiIsIl9yZXQyIiwiX2xlbjIiLCJfa2V5MiIsImdldFZhbHVlIiwib2JzZXJ2ZWRCaXRzIiwiY29udGV4dFR5cGVzIiwibGliJDEiLCJfaW1wbGVtZW50YXRpb24yIiwiY3JlYXRlQ29udGV4dCIsIk1hbmFnZXJSZWZlcmVuY2VOb2RlQ29udGV4dCIsIk1hbmFnZXJSZWZlcmVuY2VOb2RlU2V0dGVyQ29udGV4dCIsIk1hbmFnZXIiLCJuZXdSZWZlcmVuY2VOb2RlIiwic2V0UmVmZXJlbmNlTm9kZSIsInVud3JhcEFycmF5Iiwic2FmZUludm9rZSIsInNoYWxsb3dFcXVhbCIsInNldFJlZiIsImluaXRpYWxTdHlsZSIsInBvaW50ZXJFdmVudHMiLCJpbml0aWFsQXJyb3dTdHlsZSIsIklubmVyUG9wcGVyIiwicG9wcGVyTm9kZSIsImlubmVyUmVmIiwidXBkYXRlUG9wcGVySW5zdGFuY2UiLCJhcnJvd05vZGUiLCJ1cGRhdGVTdGF0ZU1vZGlmaWVyIiwicG9wcGVySW5zdGFuY2UiLCJkZXN0cm95UG9wcGVySW5zdGFuY2UiLCJfYXNzZXJ0VGhpc0luaXRpYWxpemUiLCJyZWZlcmVuY2VFbGVtZW50IiwiZ2V0T3B0aW9ucyIsInNldFBvcHBlck5vZGUiLCJnZXRQb3BwZXJTdHlsZSIsImdldFBvcHBlclBsYWNlbWVudCIsIm91dE9mQm91bmRhcmllcyIsImdldE91dE9mQm91bmRhcmllc1N0YXRlIiwiYXJyb3dQcm9wcyIsInNldEFycm93Tm9kZSIsImdldEFycm93U3R5bGUiLCJQb3BwZXIkMSIsIklubmVyUmVmZXJlbmNlIiwicmVmSGFuZGxlciIsIlJlZmVyZW5jZSIsIm5lIiwib2UiLCJhZSIsInNlIiwicGUiLCJpZSIsImNlIiwibGUiLCJkZSIsImhlIiwidWUiLCJtZSIsImZlIiwidmUiLCJ5ZSIsIkRlIiwid2UiLCJrZSIsImdlIiwiQ2UiLCJiZSIsImplIiwiQmUiLCJhd2FyZU9mVW5pY29kZVRva2VucyIsIlNlIiwiaG91ciIsIk1lIiwiUGUiLCJFZSIsIk5lIiwiT2UiLCJ4ZSIsIlllIiwiVGUiLCJMZSIsIkllIiwiRmUiLCJSZSIsIldlIiwiX19sb2NhbGVEYXRhX18iLCJBZSIsIl9fbG9jYWxlSWRfXyIsIktlIiwiSGUiLCJRZSIsIlZlIiwibWluRGF0ZSIsIm1heERhdGUiLCJleGNsdWRlRGF0ZXMiLCJpbmNsdWRlRGF0ZXMiLCJmaWx0ZXJEYXRlIiwiSmUiLCJxZSIsIlVlIiwiJGUiLCJ6ZSIsIkdlIiwiWGUiLCJaZSIsIm1pblRpbWUiLCJtYXhUaW1lIiwiZXQiLCJ0dCIsInJ0IiwibnQiLCJvdCIsImF0Iiwic3QiLCJNYXAiLCJwdCIsIml0IiwiY3QiLCJsdCIsInllYXJzTGlzdCIsInVuc2hpZnQiLCJpbmNyZW1lbnRZZWFycyIsImRlY3JlbWVudFllYXJzIiwib25DYW5jZWwiLCJzaGlmdFllYXJzIiwieWVhckRyb3Bkb3duSXRlbU51bWJlciIsInNjcm9sbGFibGVZZWFyRHJvcGRvd24iLCJyZW5kZXJPcHRpb25zIiwiZHQiLCJkcm9wZG93blZpc2libGUiLCJvblNlbGVjdENoYW5nZSIsInJlbmRlclNlbGVjdE9wdGlvbnMiLCJ0b2dnbGVEcm9wZG93biIsInJlbmRlclJlYWRWaWV3IiwicmVuZGVyRHJvcGRvd24iLCJhZGp1c3REYXRlT25DaGFuZ2UiLCJoYW5kbGVZZWFyQ2hhbmdlIiwic2V0T3BlbiIsImRyb3Bkb3duTW9kZSIsInJlbmRlclNjcm9sbE1vZGUiLCJyZW5kZXJTZWxlY3RNb2RlIiwidXQiLCJtb250aE5hbWVzIiwiaHQiLCJ1c2VTaG9ydE1vbnRoSW5Ecm9wZG93biIsIm10IiwiZnQiLCJtb250aFllYXJzTGlzdCIsImRhdGVGb3JtYXQiLCJzY3JvbGxhYmxlTW9udGhZZWFyRHJvcGRvd24iLCJ2dCIsInl0IiwiaXNEaXNhYmxlZCIsImhhbmRsZU9uS2V5RG93biIsImRpc2FibGVkS2V5Ym9hcmROYXZpZ2F0aW9uIiwiaW5saW5lIiwicHJlU2VsZWN0aW9uIiwiaGlnaGxpZ2h0RGF0ZXMiLCJzdGFydERhdGUiLCJlbmREYXRlIiwic2VsZWN0c1N0YXJ0Iiwic2VsZWN0c0VuZCIsInNlbGVjdGluZ0RhdGUiLCJpc0luU2VsZWN0aW5nUmFuZ2UiLCJkYXlDbGFzc05hbWUiLCJpc0V4Y2x1ZGVkIiwiaXNLZXlib2FyZFNlbGVjdGVkIiwiaXNSYW5nZVN0YXJ0IiwiaXNSYW5nZUVuZCIsImlzSW5SYW5nZSIsImlzU2VsZWN0aW5nUmFuZ2VTdGFydCIsImlzU2VsZWN0aW5nUmFuZ2VFbmQiLCJpc1dlZWtlbmQiLCJpc091dHNpZGVNb250aCIsImdldEhpZ2hMaWdodGVkQ2xhc3MiLCJhcmlhTGFiZWxQcmVmaXhXaGVuRW5hYmxlZCIsImFyaWFMYWJlbFByZWZpeFdoZW5EaXNhYmxlZCIsImdldFRhYkluZGV4IiwiYWN0aXZlRWxlbWVudCIsImNvbnRhaW5lclJlZiIsImRheUVsIiwiZ2V0Q2xhc3NOYW1lcyIsImhhbmRsZUNsaWNrIiwiaGFuZGxlTW91c2VFbnRlciIsImdldEFyaWFMYWJlbCIsInJlbmRlckRheUNvbnRlbnRzIiwiaGFuZGxlRm9jdXNEYXkiLCJEdCIsIndlZWtOdW1iZXIiLCJhcmlhTGFiZWxQcmVmaXgiLCJ3dCIsIm9uRGF5Q2xpY2siLCJvbkRheU1vdXNlRW50ZXIiLCJvbldlZWtTZWxlY3QiLCJzaG91bGRDbG9zZU9uU2VsZWN0IiwiZm9ybWF0V2Vla051bWJlciIsInNob3dXZWVrTnVtYmVyIiwiaGFuZGxlV2Vla0NsaWNrIiwiY2hvb3NlRGF5QXJpYUxhYmVsUHJlZml4IiwiZGlzYWJsZWREYXlBcmlhTGFiZWxQcmVmaXgiLCJoYW5kbGVEYXlDbGljayIsImhhbmRsZURheU1vdXNlRW50ZXIiLCJyZW5kZXJEYXlzIiwia3QiLCJvcmRlckluRGlzcGxheSIsImZpeGVkSGVpZ2h0Iiwid2Vla0FyaWFMYWJlbFByZWZpeCIsInNob3dXZWVrTnVtYmVycyIsImlzV2Vla0luTW9udGgiLCJwZWVrTmV4dE1vbnRoIiwiaXNSYW5nZVN0YXJ0TW9udGgiLCJpc1JhbmdlRW5kTW9udGgiLCJpc1JhbmdlU3RhcnRRdWFydGVyIiwiaXNSYW5nZUVuZFF1YXJ0ZXIiLCJzaG93RnVsbE1vbnRoWWVhclBpY2tlciIsIm9uTW9udGhDbGljayIsImdldE1vbnRoQ2xhc3NOYW1lcyIsIm9uUXVhcnRlckNsaWNrIiwiZ2V0UXVhcnRlckNsYXNzTmFtZXMiLCJzaG93TW9udGhZZWFyUGlja2VyIiwic2hvd1F1YXJ0ZXJZZWFyUGlja2VyIiwiaGFuZGxlTW91c2VMZWF2ZSIsInJlbmRlck1vbnRocyIsInJlbmRlclF1YXJ0ZXJzIiwicmVuZGVyV2Vla3MiLCJndCIsImV4Y2x1ZGVUaW1lcyIsImluY2x1ZGVUaW1lcyIsInRpbWVDbGFzc05hbWUiLCJpbmplY3RUaW1lcyIsImludGVydmFscyIsIm9wZW5Ub0RhdGUiLCJsaUNsYXNzZXMiLCJjZW50ZXJMaSIsImNhbGNDZW50ZXJQb3NpdGlvbiIsIm1vbnRoUmVmIiwiaGVhZGVyIiwidG9kYXlCdXR0b24iLCJ0aW1lQ2FwdGlvbiIsInJlbmRlclRpbWVzIiwib25UaW1lQ2hhbmdlIiwiYnQiLCJoYW5kbGVZZWFyQ2xpY2siLCJvblllYXJDbGljayIsIkN0IiwiY3VzdG9tVGltZUlucHV0IiwiY2xvbmVFbGVtZW50IiwidGltZUlucHV0TGFiZWwiLCJyZW5kZXJUaW1lSW5wdXQiLCJfdCIsInNob3dQb3BwZXJBcnJvdyIsIlN0IiwiTXQiLCJvbkRyb3Bkb3duRm9jdXMiLCJoYW5kbGVNb250aENoYW5nZSIsIm9uTW9udGhNb3VzZUxlYXZlIiwib25ZZWFyQ2hhbmdlIiwib25Nb250aENoYW5nZSIsInNldFByZVNlbGVjdGlvbiIsImhhbmRsZU1vbnRoWWVhckNoYW5nZSIsIndlZWtMYWJlbCIsImZvcm1hdFdlZWtkYXkiLCJ3ZWVrRGF5Q2xhc3NOYW1lIiwiZm9ybWF0V2Vla0RheSIsInVzZVdlZWtkYXlzU2hvcnQiLCJzaG93WWVhclBpY2tlciIsInJlbmRlckN1c3RvbUhlYWRlciIsImZvcmNlU2hvd01vbnRoTmF2aWdhdGlvbiIsInNob3dEaXNhYmxlZE1vbnRoTmF2aWdhdGlvbiIsInNob3dUaW1lU2VsZWN0T25seSIsImRlY3JlYXNlTW9udGgiLCJkZWNyZWFzZVllYXIiLCJwcmV2aW91c01vbnRoQXJpYUxhYmVsIiwicHJldmlvdXNZZWFyQXJpYUxhYmVsIiwicHJldmlvdXNZZWFyQnV0dG9uTGFiZWwiLCJwcmV2aW91c01vbnRoQnV0dG9uTGFiZWwiLCJzaG93VGltZVNlbGVjdCIsImluY3JlYXNlTW9udGgiLCJpbmNyZWFzZVllYXIiLCJuZXh0TW9udGhBcmlhTGFiZWwiLCJuZXh0WWVhckFyaWFMYWJlbCIsIm5leHRZZWFyQnV0dG9uTGFiZWwiLCJuZXh0TW9udGhCdXR0b25MYWJlbCIsInNob3dZZWFyRHJvcGRvd24iLCJzaG93TW9udGhEcm9wZG93biIsInNob3dNb250aFllYXJEcm9wZG93biIsImNoYW5nZVllYXIiLCJjaGFuZ2VNb250aCIsImNoYW5nZU1vbnRoWWVhciIsIm1vbnRoRGF0ZSIsInJlbmRlckN1cnJlbnRNb250aCIsImhhbmRsZURyb3Bkb3duRm9jdXMiLCJyZW5kZXJNb250aERyb3Bkb3duIiwicmVuZGVyTW9udGhZZWFyRHJvcGRvd24iLCJyZW5kZXJZZWFyRHJvcGRvd24iLCJwcmV2TW9udGhCdXR0b25EaXNhYmxlZCIsIm5leHRNb250aEJ1dHRvbkRpc2FibGVkIiwicHJldlllYXJCdXR0b25EaXNhYmxlZCIsIm5leHRZZWFyQnV0dG9uRGlzYWJsZWQiLCJyZW5kZXJZZWFySGVhZGVyIiwicmVuZGVyRGVmYXVsdEhlYWRlciIsInNob3dQcmV2aW91c01vbnRocyIsIm1vbnRoc1Nob3duIiwibW9udGhTZWxlY3RlZEluIiwibW9udGhDb250YWluZXIiLCJyZW5kZXJIZWFkZXIiLCJtb250aENsYXNzTmFtZSIsImhhbmRsZU1vbnRoTW91c2VMZWF2ZSIsInRpbWVGb3JtYXQiLCJ0aW1lSW50ZXJ2YWxzIiwid2l0aFBvcnRhbCIsInNob3dUaW1lSW5wdXQiLCJnZXREYXRlSW5WaWV3IiwiYXNzaWduTW9udGhDb250YWluZXIiLCJyZW5kZXJQcmV2aW91c0J1dHRvbiIsInJlbmRlck5leHRCdXR0b24iLCJyZW5kZXJZZWFycyIsInJlbmRlclRvZGF5QnV0dG9uIiwicmVuZGVyVGltZVNlY3Rpb24iLCJyZW5kZXJJbnB1dFRpbWVTZWN0aW9uIiwiUHQiLCJFdCIsInRhYkxvb3BSZWYiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZ2V0VGFiQ2hpbGRyZW4iLCJlbmFibGVUYWJMb29wIiwiaGFuZGxlRm9jdXNTdGFydCIsImhhbmRsZUZvY3VzRW5kIiwiTnQiLCJ3cmFwcGVyQ2xhc3NOYW1lIiwiaGlkZVBvcHBlciIsInBvcHBlckNvbXBvbmVudCIsInBvcHBlck1vZGlmaWVycyIsInBvcHBlclBsYWNlbWVudCIsInBvcHBlclByb3BzIiwidGFyZ2V0Q29tcG9uZW50IiwicG9wcGVyT25LZXlEb3duIiwicG9wcGVyQ29udGFpbmVyIiwiT3QiLCJ4dCIsImdldFByZVNlbGVjdGlvbiIsIm9wZW4iLCJzdGFydE9wZW4iLCJwcmV2ZW50Rm9jdXMiLCJmb2N1c2VkIiwicHJldmVudEZvY3VzVGltZW91dCIsImJsdXIiLCJjYW5jZWxGb2N1c0lucHV0IiwiY2FsY0luaXRpYWxTdGF0ZSIsImxhc3RQcmVTZWxlY3RDaGFuZ2UiLCJUdCIsInNldEJsdXIiLCJpbnB1dFZhbHVlIiwicmVhZE9ubHkiLCJwcmV2ZW50T3Blbk9uRm9jdXMiLCJpbnB1dEZvY3VzVGltZW91dCIsInNldEZvY3VzIiwib25DaGFuZ2VSYXciLCJpc0RlZmF1bHRQcmV2ZW50ZWQiLCJZdCIsInN0cmljdFBhcnNpbmciLCJzZXRTZWxlY3RlZCIsImFsbG93U2FtZURheSIsImlubGluZUZvY3VzU2VsZWN0ZWRNb250aCIsIm9uSW5wdXRDbGljayIsImlucHV0T2siLCJoYW5kbGVTZWxlY3QiLCJvbklucHV0RXJyb3IiLCJtc2ciLCJvbkNsZWFyQ2xpY2siLCJpc0NhbGVuZGFyT3BlbiIsImRhdGVGb3JtYXRDYWxlbmRhciIsImhhbmRsZUNhbGVuZGFyQ2xpY2tPdXRzaWRlIiwiaGFuZGxlVGltZUNoYW5nZSIsImNhbGVuZGFyQ2xhc3NOYW1lIiwiY2FsZW5kYXJDb250YWluZXIiLCJvbkRheUtleURvd24iLCJjdXN0b21JbnB1dCIsImN1c3RvbUlucHV0UmVmIiwiaGFuZGxlQmx1ciIsImhhbmRsZUZvY3VzIiwib25JbnB1dEtleURvd24iLCJhdXRvRm9jdXMiLCJwbGFjZWhvbGRlclRleHQiLCJhcmlhTGFiZWxsZWRCeSIsImlzQ2xlYXJhYmxlIiwiY2xlYXJCdXR0b25UaXRsZSIsImFyaWFMYWJlbENsb3NlIiwib25DYWxlbmRhck9wZW4iLCJvbkNhbGVuZGFyQ2xvc2UiLCJjbGVhclByZXZlbnRGb2N1c1RpbWVvdXQiLCJyZW5kZXJDYWxlbmRhciIsInJlbmRlckRhdGVJbnB1dCIsInJlbmRlckNsZWFyQnV0dG9uIiwicG9wcGVyQ2xhc3NOYW1lIiwib25Qb3BwZXJLZXlEb3duIiwic3R5bGVzJHMiLCJEYXRlUGlja2VyIiwidXNlUmVmIiwiQ2FsZW5kYXIiLCJzdHlsZXMkdCIsImdldEljb25TaXplIiwiQ29sbGFwc2libGUiLCJkZWZhdWx0Q29sbGFwc2VkIiwic2V0SXNDb2xsYXBzZWQiLCJjb250ZW50Q2xhc3NOYW1lIiwiY29udGVudENvbGxhcHNlZCIsImljb25DbGFzc05hbWUiLCJjaGV2cm9uQ29sbGFwc2VkIiwiYnV0dG9uUmlnaHQiLCJjb250YWluZXJDbGFzc05hbWUiLCJidXR0b25PbkJvdHRvbSIsImJ1dHRvbkNsYXNzTmFtZSIsImV4cGFuZFRpdGxlIiwiY29sbGFwc2VUaXRsZSIsInN0eWxlcyR1IiwiU3dpdGNoIiwiX3JlZiRjaGVja2VkIiwiaWRQcm9wIiwiX3JlZiRpbnB1dFByb3BzIiwiX3JlZiRpY29uIiwiX3JlZiRpY29uQ2hlY2tlZCIsImljb25DaGVja2VkIiwiX3JlZiRpY29uVmFyaWFudENoZWNrIiwiaWNvblZhcmlhbnRDaGVja2VkIiwiX3JlZiRpY29uRm9udFNpemUiLCJpY29uRm9udFNpemUiLCJfcmVmJGxhYmVsUGxhY2VtZW50IiwibGFiZWxQbGFjZW1lbnQiLCJsYWJlbFByb3BzIiwiY3VzdG9tSWNvbiIsImN1c3RvbUljb25DaGVja2VkIiwiY2hlY2tib3hDbGFzc2VzIiwiaWNvbkNsYXNzZXMiLCJsYWJlbENsYXNzZXMiLCJSYWRpbyIsImN1c3RvbVJhZGlvSWNvbiIsImN1c3RvbVJhZGlvSWNvbkNoZWNrZWQiLCJzdHlsZXMkdiIsIlJhZGlvR3JvdXAiLCJfb25DaGFuZ2UiLCJDaGlsZHJlbiIsImNoaWxkIiwiVGhlYWQiLCJUYm9keSIsInN0eWxlcyR3IiwiUm93JDEiLCJUaCIsIkNlbGwiLCJUZm9vdCIsIlRhYmxlIiwiX3Byb3BzJHRhYmxlU3R5bGUiLCJ0YWJsZVN0eWxlIiwic3R5bGVzJHgiLCJUYWIiLCJpc0FjdGl2ZSIsIl9vbkNsaWNrIiwiX3JlZiRyb2xlIiwiZGVmYXVsdEFzUHJvcHMiLCJocmVmIiwiVGFicyIsIl9yZWYyJHJvbGUiLCJzdHlsZXMkeSIsIkhpZ2hsaWdodGVkSGVhZGVyIiwiQ2hlY2tib3giLCJzdHlsZXMkeiIsIl9yZWYkaXNBY3RpdmUiLCJvblNjcm9sbEludG9WaWV3IiwiYWN0aXZlQ2xhc3NOYW1lIiwiaXRlbUNsYXNzTmFtZXMiLCJsaSIsInNjcm9sbEludG9WaWV3IiwiTWVudSIsIm1lbnVJdGVtcyIsImlzQWN0aXZlSXRlbSIsIm5hdlJlZiIsImlzU3RhcnRTaGFkb3dWaXNpYmxlIiwic2V0U3RhcnRTaGFkb3dWaXNpYmxlIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJpc0VuZFNoYWRvd1Zpc2libGUiLCJzZXRFbmRTaGFkb3dWaXNpYmxlIiwic2V0U2hhZG93cyIsInVzZUNhbGxiYWNrIiwibmF2Iiwic2Nyb2xsV2lkdGgiLCJoYW5kbGVTY3JvbGwiLCJoYW5kbGVSZWYiLCJ1bEVsZW1lbnQiLCJtZW51Q2xhc3NOYW1lcyIsIm9uU2Nyb2xsIiwidXJsIiwic3R5bGVzJEEiLCJhbmltYXRpb25zIiwiQW5pbWF0aW9uIiwiQmxvY2skMSIsIl9wcm9wcyRhbmltYXRpb24iLCJhbmltYXRpb24iLCJGbGFzaCIsIlBsYWNlaG9sZGVyIiwic3R5bGVzJEIiLCJWYXJpYW50MSIsIlZhcmlhbnQxX19jb250ZW50IiwiVmFyaWFudDFfX2Zvb3RlciIsInN0eWxlcyRDIiwiVmFyaWFudDIiLCJsaW5lc09mVGV4dCIsIlZhcmlhbnQyX190ZXh0Iiwic3R5bGVzJEQiLCJOb3RpZmljYXRpb25Qb3B1cCIsIm9wZW5DYWxsYmFjayIsImFjdGl2ZUJ5RGVmYXVsdCIsInNldElzQWN0aXZlIiwibm90aWZpY2F0aW9ucyIsIm5vdGlmaWNhdGlvbnNXcmFwcGVyIiwid3JhcHBlclJlZiIsIm5vdGlmaWNhdGlvbnNUcmlnZ2VyIiwibm90aWZpY2F0aW9uc0J1bGxldCIsIm5vdGlmaWNhdGlvbnNCZWxsIiwibm90aWZpY2F0aW9uc0NvbnRhaW5lciIsImV2IiwicmVhY3RDb25mZXR0aV9taW4iLCJsaW5lYXIiLCJlYXNlSW5RdWFkIiwiZWFzZU91dFF1YWQiLCJlYXNlSW5PdXRRdWFkIiwiZWFzZUluQ3ViaWMiLCJlYXNlT3V0Q3ViaWMiLCJlYXNlSW5PdXRDdWJpYyIsImVhc2VJblF1YXJ0IiwiZWFzZU91dFF1YXJ0IiwiZWFzZUluT3V0UXVhcnQiLCJlYXNlSW5RdWludCIsImVhc2VPdXRRdWludCIsImVhc2VJbk91dFF1aW50IiwiZWFzZUluU2luZSIsImNvcyIsIlBJIiwiZWFzZU91dFNpbmUiLCJzaW4iLCJlYXNlSW5PdXRTaW5lIiwiZWFzZUluRXhwbyIsImVhc2VPdXRFeHBvIiwiZWFzZUluT3V0RXhwbyIsImVhc2VJbkNpcmMiLCJzcXJ0IiwiZWFzZU91dENpcmMiLCJlYXNlSW5PdXRDaXJjIiwiZWFzZUluRWxhc3RpYyIsImFzaW4iLCJlYXNlT3V0RWxhc3RpYyIsImVhc2VJbk91dEVsYXN0aWMiLCJlYXNlSW5CYWNrIiwiZWFzZU91dEJhY2siLCJlYXNlSW5PdXRCYWNrIiwiZWFzZUluQm91bmNlIiwiZWFzZU91dEJvdW5jZSIsImVhc2VJbk91dEJvdW5jZSIsInJhbmRvbSIsIkNpcmNsZSIsIlNxdWFyZSIsIlN0cmlwIiwiUG9zaXRpdmUiLCJOZWdhdGl2ZSIsImNvbG9ycyIsImluaXRpYWxWZWxvY2l0eVgiLCJpbml0aWFsVmVsb2NpdHlZIiwicmFkaXVzIiwidngiLCJ2eSIsImFuZ2xlIiwiYW5ndWxhclNwaW4iLCJyb3RhdGVZIiwicm90YXRpb25EaXJlY3Rpb24iLCJncmF2aXR5IiwiZnJpY3Rpb24iLCJkcmF3U2hhcGUiLCJzYXZlIiwidHJhbnNsYXRlIiwicm90YXRlIiwic2NhbGUiLCJiZWdpblBhdGgiLCJmaWxsU3R5bGUiLCJzdHJva2VTdHlsZSIsImdsb2JhbEFscGhhIiwibGluZUNhcCIsImxpbmVXaWR0aCIsImFyYyIsImZpbGxSZWN0IiwiY2xvc2VQYXRoIiwicmVzdG9yZSIsInBhcnRpY2xlcyIsImNhbnZhcyIsInBhcnRpY2xlc0dlbmVyYXRlZCIsImxhc3ROdW1iZXJPZlBpZWNlcyIsInJ1biIsInJlY3ljbGUiLCJudW1iZXJPZlBpZWNlcyIsImRlYnVnIiwidHdlZW5GdW5jdGlvbiIsInR3ZWVuRHVyYXRpb24iLCJ0d2VlbkluaXRUaW1lIiwiZ2V0UGFydGljbGUiLCJmb250IiwidGV4dEFsaWduIiwiZmlsbFRleHQiLCJyZW1vdmVQYXJ0aWNsZUF0IiwiZ2V0Q29udGV4dCIsImNvbmZldHRpU291cmNlIiwib25Db25mZXR0aUNvbXBsZXRlIiwiY2xlYXJSZWN0IiwiZ2VuZXJhdG9yIiwicmFmSWQiLCJzZXRPcHRpb25zV2l0aERlZmF1bHRzIiwiQyIsImNhbnZhc1JlZiIsImNvbmZldHRpIiwiekluZGV4IiwiUmVhY3RDb25mZXR0aSIsInJlYWN0Q29uZmV0dGlfbWluXzEiLCJnZXRTaXplJDEiLCJvdXRlckhlaWdodCIsIm91dGVyV2lkdGgiLCJ1c2VXaW5kb3dTaXplIiwid2luZG93U2l6ZSIsInNldFdpbmRvd1NpemUiLCJoYW5kbGVSZXNpemUiLCJzdXBwb3J0c1BhdGgyRCIsIlBhdGgyRCIsIm1ha2VQYXRoIiwicGF0aCIsInBhdGhzIiwiQ29uZmV0dGkiLCJfcmVmJGVhc2VPdXRNcyIsImVhc2VPdXRNcyIsIl9yZWYkbnVtYmVyT2ZQaWVjZXMiLCJfdXNlV2luZG93U2l6ZSIsImhvd0hhcmRUb1BhcnR5Iiwic2V0SG93SGFyZFRvUGFydHkiLCJkZWNyZWFzZSIsImRlY3JlYXNlRnVydGhlciIsImNhbmNlbFBhcnR5VGltZSIsImN0eCIsInVzZU1lZGlhIiwibWF0Y2hNZWRpYSIsIm1hdGNoZXMiLCJzZXRNYXRjaGVzIiwibWVkaWEiLCJhZGRMaXN0ZW5lciIsInJlbW92ZUxpc3RlbmVyIiwic3R5bGVzJEUiLCJSb3ckMiIsIkNlbGwkMSIsIlRhYmxlUm93IiwiaXNVbmRlckJyZWFrcG9pbnQiLCJjb2xzIiwiY29sbGFwc2libGVSb3ciLCJfcmVmJGNvbGxhcHNlU3R5bGUiLCJjb2xsYXBzZVN0eWxlIiwiaXNFeHBhbmRlZCIsInRvZ2dsZUV4cGFuZGVkIiwiaWNvblN0eWxlIiwiY29sbGFwc2libGVSb3dDbGFzcyIsImNvbGxhcHNpYmxlUm93Q2hldnJvbkNsYXNzIiwiY29sbGFwc2libGUiLCJyZW5kZXJGbiIsIlRhYmxlUm93X19JY29uIiwiY29sU3BhbiIsIlRoZWFkJDEiLCJUYm9keSQxIiwiUm93JDMiLCJUaCQxIiwiQ29sbGFwc2libGVUYWJsZSIsImJyZWFrcG9pbnQiLCJoZWFkZXJzIiwiaGVhZGVyc0NvbGxhcHNlZCIsInRoUHJvcHMiLCJnZXRIZWFkZXJQcm9wcyIsIkNvbGxhcHNpYmxlVGFibGVfX0ljb25IZWFkZXIiLCJkYXR1bSIsImdldFJvd0tleSIsImZpZWxkIiwicmVuZGVyQ2VsbCIsInJlbmRlckNvbGxhcHNpYmxlUm93IiwiY29sbGFwc2libGVTdHlsZSIsInN0eWxlcyRGIiwiUHJvZ3Jlc3NUcmFja2VyIiwic3RlcHMiLCJjdXJyZW50U3RlcEluZGV4Iiwic3RlcENsYXNzTmFtZSIsInN0ZXBOYW1lIiwiaXNDdXJyZW50U3RlcCIsImNpcmNsZSIsInN0eWxlcyRHIiwiQmFja0J1dHRvbiIsImJ1dHRvbkxhYmVsIiwiV2l6YXJkIiwic3VidGl0bGUiLCJiYWNrQnV0dG9uTGFiZWwiLCJvbkJhY2tCdXR0b25DbGljayIsIm1haW5Db250cm9sc0NvbXBvbmVudCIsImNvbnRyb2xzIiwic3R5bGVzJEgiLCJkZWZhdWx0QnV0dG9uIiwiZ2V0VmlzaWJsZVBhZ2VzIiwicGFnZSIsInBhZ2VzIiwiUGFnaW5hdGlvbiIsIm9uUGFnZUNoYW5nZSIsIl9yZWYyJFBhZ2VCdXR0b25Db21wbyIsIlBhZ2VCdXR0b25Db21wb25lbnQiLCJwYWdpbmF0aW9uIiwidmlzaWJsZVBhZ2VzIiwiaXNGaXJzdFBhZ2UiLCJpc0xhc3RQYWdlIiwiaGFzUGFnZXMiLCJjaGFuZ2VQYWdlIiwibmV3UGFnZSIsInBhZ2VCdXR0b24iLCJwYWdlSW5kZXgiLCJhY3RpdmUiLCJyZWdpc3RlckxvY2FsZSIsInNldERlZmF1bHRMb2NhbGUiXSwibWFwcGluZ3MiOiI0T0FFQUEsTUFBTSxDQUFDQyxjQUFQLENBQXNCQyxPQUF0QixDQUErQixZQUEvQixDQUE2QyxDQUFFQyxLQUFLLENBQUUsSUFBVCxDQUE3QyxFQUVBLFFBQVNDLGdCQUFULENBQTBCQyxFQUExQixDQUE4QixDQUFFLE1BQVFBLEdBQUUsRUFBSyxNQUFPQSxHQUFQLEdBQWMsUUFBckIsRUFBa0MsV0FBYUEsR0FBaEQsQ0FBc0RBLEVBQUUsQ0FBQyxTQUFELENBQXhELENBQXNFQSxFQUE3RSxDQUFrRixDQUVsSCxHQUFJQyxNQUFLLENBQUdDLG1CQUFPLENBQUMsNENBQUQsQ0FBbkIsQ0FDQSxHQUFJQyxlQUFjLENBQUdKLGVBQWUsQ0FBQ0UsS0FBRCxDQUFwQyxDLEdBQUlFLGMsQ0FDSixHQUFJQyxTQUFRLENBQUdGLG1CQUFPLENBQUMsb0RBQUQsQ0FBdEIsQ0FDQSxHQUFJRyxrQkFBaUIsQ0FBR04sZUFBZSxDQUFDSyxRQUFELENBQXZDLENBQ0EsR0FBSUUsYUFBWSxDQUFHUCxlQUFlLENBQUNHLG1CQUFPLENBQUMsZ0ZBQUQsQ0FBUixDQUFsQyxDQUNBLEdBQUlLLFFBQU8sQ0FBR1IsZUFBZSxDQUFDRyxtQkFBTyxDQUFDLGdFQUFELENBQVIsQ0FBN0IsQ0FDQSxHQUFJTSxPQUFNLENBQUdULGVBQWUsQ0FBQ0csbUJBQU8sQ0FBQywwRUFBRCxDQUFSLENBQTVCLENBQ0EsR0FBSU8sZ0NBQStCLENBQUdWLGVBQWUsQ0FBQ0csbUJBQU8sQ0FBQyxrSUFBRCxDQUFSLENBQXJELENBQ0EsR0FBSVEsV0FB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBRUEsUUFBU3ROLE9BQVQsQ0FBZ0I3QixTQUFoQixDQUEyQm9QLGNB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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Q0FBQ3l3RixLQUFSLENBQWdCQSxLQUFoQixDQUNBendGLE9BQU8sQ0FBQzZ3RixVQUFSLENBQXFCQSxVQUFyQixDQUNBN3dGLE9BQU8sQ0FBQ2d0QyxXQUFSLENBQXNCQSxXQUF0QixDQUNBaHRDLE9BQU8sQ0FBQ210QyxHQUFSLENBQWNBLEdBQWQsQ0FDQW50QyxPQUFPLENBQUM4eUMsTUFBUixDQUFpQkEsTUFBakIsQ0FDQTl5QyxPQUFPLENBQUM4c0MsSUFBUixDQUFlQSxJQUFmLENBQ0E5c0MsT0FBTyxDQUFDd3hGLEtBQVIsQ0FBZ0JBLEtBQWhCLENBQ0F4eEYsT0FBTyxDQUFDa3lGLElBQVIsQ0FBZUEsSUFBZixDQUNBbHlGLE9BQU8sQ0FBQ2dNLElBQVIsQ0FBZUEsSUFBZixDQUNBaE0sT0FBTyxDQUFDc3RDLFFBQVIsQ0FBbUJBLFFBQW5CLENBQ0F0dEMsT0FBTyxDQUFDK3RDLE1BQVIsQ0FBaUJBLE1BQWpCLENBQ0EvdEMsT0FBTyxDQUFDOGdHLE1BQVIsQ0FBaUJBLE1BQWpCLENBQ0E5Z0csT0FBTyxDQUFDdWlHLGNBQVIsQ0FBeUI3bkIsRUFBekIsQ0FDQTE2RSxPQUFPLENBQUN3aUcsZ0JBQVIsQ0FBMkI1bkIsRUFBM0IsQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AdmFuZGVicm9uL3dpbmRtb2xlbi9kaXN0L2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcERlZmF1bHQgKGV4KSB7IHJldHVybiAoZXggJiYgKHR5cGVvZiBleCA9PT0gJ29iamVjdCcpICYmICdkZWZhdWx0JyBpbiBleCkgPyBleFsnZGVmYXVsdCddIDogZXg7IH1cblxudmFyIFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbnZhciBSZWFjdF9fZGVmYXVsdCA9IF9pbnRlcm9wRGVmYXVsdChSZWFjdCk7XG52YXIgcmVhY3REb20gPSByZXF1aXJlKCdyZWFjdC1kb20nKTtcbnZhciByZWFjdERvbV9fZGVmYXVsdCA9IF9pbnRlcm9wRGVmYXVsdChyZWFjdERvbSk7XG52YXIgb2JqZWN0QXNzaWduID0gX2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKSk7XG52YXIgZGJvdW5jZSA9IF9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKCdsb2Rhc2guZGVib3VuY2UnKSk7XG52YXIgYXJyYXlzID0gX2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoJ3NoYWxsb3ctZXF1YWwvYXJyYXlzJykpO1xudmFyIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlJDEgPSBfaW50ZXJvcERlZmF1bHQocmVxdWlyZSgnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlJykpO1xudmFyIF9leHRlbmRzJDIgPSBfaW50ZXJvcERlZmF1bHQocmVxdWlyZSgnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9leHRlbmRzJykpO1xudmFyIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQkMSA9IF9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKCdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2Fzc2VydFRoaXNJbml0aWFsaXplZCcpKTtcbnZhciBfaW5oZXJpdHNMb29zZSQxID0gX2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHNMb29zZScpKTtcbnZhciBfZGVmaW5lUHJvcGVydHkkMSA9IF9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKCdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5JykpO1xudmFyIGNhbGxCaW5kID0gX2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoJ2VzLWFic3RyYWN0L2hlbHBlcnMvY2FsbEJpbmQnKSk7XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTtcbiAgICBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTtcbiAgICB9KTtcbiAgICBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7XG4gIH1cblxuICByZXR1cm4ga2V5cztcbn1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZDIodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307XG5cbiAgICBpZiAoaSAlIDIpIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG5cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgfTtcbiAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuXG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcblxuICB0cnkge1xuICAgIERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoRGF0ZSwgW10sIGZ1bmN0aW9uICgpIHt9KSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIHZhciBrZXksIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuXG4gIHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTtcblxuICB2YXIga2V5LCBpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTtcbiAgICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlO1xuICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9XG5cbiAgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7XG4gIHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpO1xuXG4gIHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHtcbiAgICB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksXG4gICAgICAgIHJlc3VsdDtcblxuICAgIGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7XG4gICAgICB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yO1xuXG4gICAgICByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTtcbn1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sID09PSBcInVuZGVmaW5lZFwiIHx8ICEoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChhcnIpKSkgcmV0dXJuO1xuICB2YXIgX2FyciA9IFtdO1xuICB2YXIgX24gPSB0cnVlO1xuICB2YXIgX2QgPSBmYWxzZTtcbiAgdmFyIF9lID0gdW5kZWZpbmVkO1xuXG4gIHRyeSB7XG4gICAgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkge1xuICAgICAgX2Fyci5wdXNoKF9zLnZhbHVlKTtcblxuICAgICAgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgX2QgPSB0cnVlO1xuICAgIF9lID0gZXJyO1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIF9hcnI7XG59XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgaWYgKCFvKSByZXR1cm47XG4gIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSBhcnIyW2ldID0gYXJyW2ldO1xuXG4gIHJldHVybiBhcnIyO1xufVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxuXG52YXIgc3R5bGVzID0ge1wiZC1ub25lXCI6XCJCb3hTaGFkb3ctbW9kdWxlX19kLW5vbmVcIixcImQtaW5saW5lXCI6XCJCb3hTaGFkb3ctbW9kdWxlX19kLWlubGluZVwiLFwiZC1pbmxpbmUtYmxvY2tcIjpcIkJveFNoYWRvdy1tb2R1bGVfX2QtaW5saW5lLWJsb2NrXCIsXCJkLWJsb2NrXCI6XCJCb3hTaGFkb3ctbW9kdWxlX19kLWJsb2NrXCIsXCJkLXRhYmxlXCI6XCJCb3hTaGFkb3ctbW9kdWxlX19kLXRhYmxlXCIsXCJkLXRhYmxlLXJvd1wiOlwiQm94U2hhZG93LW1vZHVsZV9fZC10YWJsZS1yb3dcIixcImQtdGFibGUtY2VsbFwiOlwiQm94U2hhZG93LW1vZHVsZV9fZC10YWJsZS1jZWxsXCIsXCJkLWZsZXhcIjpcIkJveFNoYWRvdy1tb2R1bGVfX2QtZmxleFwiLFwiZC1pbmxpbmUtZmxleFwiOlwiQm94U2hhZG93LW1vZHVsZV9fZC1pbmxpbmUtZmxleFwiLFwiZC1zbS1ub25lXCI6XCJCb3hTaGFkb3ctbW9kdWxlX19kLXNtLW5vbmVcIixcImQtc20taW5saW5lXCI6XCJCb3hTaGFkb3ctbW9kdWxlX19kLXNtLWlubGluZVwiLFwiZC1zbS1pbmxpbmUtYmxvY2tcIjpcIkJveFNoYWRvdy1tb2R1bGVfX2Qtc20taW5saW5lLWJsb2NrXCIsXCJkLXNtLWJsb2NrXCI6XCJCb3hTaGFkb3ctbW9kdWxlX19kLXNtLWJsb2NrXCIsXCJkLXNtLXRhYmxlXCI6XCJCb3hTaGFkb3ctbW9kdWxlX19kLXNtLXRhYmxlXCIsXCJkLXNtLXRhYmxlLXJvd1wiOlwiQm94U2hhZG93LW1vZHVsZV9fZC1zbS10YWJsZS1yb3dcIixcImQtc20tdGFibGUtY2VsbFwiOlwiQm94U2hhZG93LW1vZHVsZV9fZC1zbS10YWJsZS1jZWxsXCIsXCJkLXNtLWZsZXhcIjpcIkJveFNoYWRvdy1tb2R1bGVfX2Qtc20tZmxleFwiLFwiZC1zbS1pbmxpbmUtZmxleFwiOlwiQm94U2hhZG93LW1vZHVsZV9fZC1zbS1pbmxpbmUtZmxleFwiLFwiZC1tZC1ub25lXCI6XCJCb3hTaGFkb3ctbW9kdWxlX19kLW1kLW5vbmVcIixcImQtbWQtaW5saW5lXCI6XCJCb3hTaGFkb3ctbW9kdWxlX19kLW1kLWlubGluZVwiLFwiZC1tZC1pbmxpbmUtYmxvY2tcIjpcIkJveFNoYWRvdy1tb2R1bGVfX2QtbWQtaW5saW5lLWJsb2NrXCIsXCJkLW1kLWJsb2NrXCI6XCJCb3hTaGFkb3ctbW9kdWxlX19kLW1kLWJsb2NrXCIsXCJkLW1kLXRhYmxlXCI6XCJCb3hTaGFkb3ctbW9kdWxlX19kLW1kLXRhYmxlXCIsXCJkLW1kLXRhYmxlLXJvd1wiOlwiQm94U2hhZG93LW1vZHVsZV9fZC1tZC10YWJsZS1yb3dcIixcImQtbWQtdGFibGUtY2VsbFwiOlwiQm94U2hhZG93LW1vZHVsZV9fZC1tZC10YWJsZS1jZWxsXCIsXCJkLW1kLWZsZXhcIjpcIkJveFNoYWRvdy1tb2R1bGVfX2QtbWQtZmxleFwiLFwiZC1tZC1pbmxpbmUtZmxleFwiOlwiQm94U2hhZG93LW1vZHVsZV9fZC1tZC1pbmxpbmUtZmxleFwiLFwiZC1sZy1ub25lXCI6XCJCb3hTaGFkb3ctbW9kdWxlX19kLWxnLW5vbmVcIixcImQtbGctaW5saW5lXCI6XCJCb3hTaGFkb3ctbW9kdWxlX19kLWxnLWlubGluZVwiLFwiZC1sZy1pbmxpbmUtYmxvY2tcIjpcIkJveFNoYWRvdy1tb2R1bGVfX2QtbGctaW5saW5lLWJsb2NrXCIsXCJkLWxnLWJsb2NrXCI6XCJCb3hTaGFkb3ctbW9kdWxlX19kLWxnLWJsb2NrXCIsXCJkLWxnLXRhYmxlXCI6XCJCb3hTaGFkb3ctbW9kdWxlX19kLWxnLXRhYmxlXCIsXCJkLWxnLXRhYmxlLXJvd1wiOlwiQm94U2hhZG93LW1vZHVsZV9fZC1sZy10YWJsZS1yb3dcIixcImQtbGctdGFibGUtY2VsbFwiOlwiQm94U2hhZG93LW1vZHVsZV9fZC1sZy10YWJsZS1jZWxsXCIsXCJkLWxnLWZsZXhcIjpcIkJveFNoYWRvdy1tb2R1bGVfX2QtbGctZmxleFwiLFwiZC1sZy1pbmxpbmUtZmxleFwiOlwiQm94U2hhZG93LW1vZHVsZV9fZC1sZy1pbmxpbmUtZmxleFwiLFwiZC14bC1ub25lXCI6XCJCb3hTaGFkb3ctbW9kdWxlX19kLXhsLW5vbmVcIixcImQteGwtaW5saW5lXCI6XCJCb3hTaGFkb3ctbW9kdWxlX19kLXhsLWlubGluZVwiLFwiZC14bC1pbmxpbmUtYmxvY2tcIjpcIkJveFNoYWRvdy1tb2R1bGVfX2QteGwtaW5saW5lLWJsb2NrXCIsXCJkLXhsLWJsb2NrXCI6XCJCb3hTaGFkb3ctbW9kdWxlX19kLXhsLWJsb2NrXCIsXCJkLXhsLXRhYmxlXCI6XCJCb3hTaGFkb3ctbW9kdWxlX19kLXhsLXRhYmxlXCIsXCJkLXhsLXRhYmxlLXJvd1wiOlwiQm94U2hhZG93LW1vZHVsZV9fZC14bC10YWJsZS1yb3dcIixcImQteGwtdGFibGUtY2VsbFwiOlwiQm94U2hhZG93LW1vZHVsZV9fZC14bC10YWJsZS1jZWxsXCIsXCJkLXhsLWZsZXhcIjpcIkJveFNoYWRvdy1tb2R1bGVfX2QteGwtZmxleFwiLFwiZC14bC1pbmxpbmUtZmxleFwiOlwiQm94U2hhZG93LW1vZHVsZV9fZC14bC1pbmxpbmUtZmxleFwiLFwiZC1wcmludC1ub25lXCI6XCJCb3hTaGFkb3ctbW9kdWxlX19kLXByaW50LW5vbmVcIixcImQtcHJpbnQtaW5saW5lXCI6XCJCb3hTaGFkb3ctbW9kdWxlX19kLXByaW50LWlubGluZVwiLFwiZC1wcmludC1pbmxpbmUtYmxvY2tcIjpcIkJveFNoYWRvdy1tb2R1bGVfX2QtcHJpbnQtaW5saW5lLWJsb2NrXCIsXCJkLXByaW50LWJsb2NrXCI6XCJCb3hTaGFkb3ctbW9kdWxlX19kLXByaW50LWJsb2NrXCIsXCJkLXByaW50LXRhYmxlXCI6XCJCb3hTaGFkb3ctbW9kdWxlX19kLXByaW50LXRhYmxlXCIsXCJkLXByaW50LXRhYmxlLXJvd1wiOlwiQm94U2hhZG93LW1vZHVsZV9fZC1wcmludC10YWJsZS1yb3dcIixcImQtcHJpbnQtdGFibGUtY2VsbFwiOlwiQm94U2hhZG93LW1vZHVsZV9fZC1wcmludC10YWJsZS1jZWxsXCIsXCJkLXByaW50LWZsZXhcIjpcIkJveFNoYWRvdy1tb2R1bGVfX2QtcHJpbnQtZmxleFwiLFwiZC1wcmludC1pbmxpbmUtZmxleFwiOlwiQm94U2hhZG93LW1vZHVsZV9fZC1wcmludC1pbmxpbmUtZmxleFwiLFwiYm94LXNoYWRvd1wiOlwiQm94U2hhZG93LW1vZHVsZV9fYm94LXNoYWRvd1wiLFwiYm94LXNoYWRvdy1kYXJrXCI6XCJCb3hTaGFkb3ctbW9kdWxlX19ib3gtc2hhZG93LWRhcmtcIixcImJveC1zaGFkb3ctc21hbGxcIjpcIkJveFNoYWRvdy1tb2R1bGVfX2JveC1zaGFkb3ctc21hbGxcIixcImJveC1zaGFkb3ctZGVmYXVsdFwiOlwiQm94U2hhZG93LW1vZHVsZV9fYm94LXNoYWRvdy1kZWZhdWx0XCJ9O1xuXG52YXIgQm94U2hhZG93ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoQm94U2hhZG93LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihCb3hTaGFkb3cpO1xuXG4gIGZ1bmN0aW9uIEJveFNoYWRvdygpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQm94U2hhZG93KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhCb3hTaGFkb3csIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgZGlzcGxheSA9IF90aGlzJHByb3BzLmRpc3BsYXksXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIHNtYWxsID0gX3RoaXMkcHJvcHMuc21hbGwsXG4gICAgICAgICAgZGFyayA9IF90aGlzJHByb3BzLmRhcmssXG4gICAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIFtcImNoaWxkcmVuXCIsIFwiZGlzcGxheVwiLCBcImNsYXNzTmFtZVwiLCBcInNtYWxsXCIsIFwiZGFya1wiXSk7XG5cbiAgICAgIHZhciBzdHkgPSB7fTtcblxuICAgICAgaWYgKGRpc3BsYXkpIHtcbiAgICAgICAgc3R5WydkaXNwbGF5J10gPSBkaXNwbGF5O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IFtzdHlsZXNbJ2JveC1zaGFkb3cnXSwgZGFyayAmJiBzdHlsZXNbJ2JveC1zaGFkb3ctZGFyayddLCBzbWFsbCAmJiBzdHlsZXNbJ2JveC1zaGFkb3ctc21hbGwnXSwgIXNtYWxsICYmIHN0eWxlc1snYm94LXNoYWRvdy1kZWZhdWx0J10sIGNsYXNzTmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKSxcbiAgICAgICAgc3R5bGU6IHN0eVxuICAgICAgfSwgcHJvcHMpLCBjaGlsZHJlbik7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEJveFNoYWRvdztcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBzdHlsZXMkMSA9IHtcImQtbm9uZVwiOlwiQmxvY2stbW9kdWxlX19kLW5vbmVcIixcImQtaW5saW5lXCI6XCJCbG9jay1tb2R1bGVfX2QtaW5saW5lXCIsXCJkLWlubGluZS1ibG9ja1wiOlwiQmxvY2stbW9kdWxlX19kLWlubGluZS1ibG9ja1wiLFwiZC1ibG9ja1wiOlwiQmxvY2stbW9kdWxlX19kLWJsb2NrXCIsXCJkLXRhYmxlXCI6XCJCbG9jay1tb2R1bGVfX2QtdGFibGVcIixcImQtdGFibGUtcm93XCI6XCJCbG9jay1tb2R1bGVfX2QtdGFibGUtcm93XCIsXCJkLXRhYmxlLWNlbGxcIjpcIkJsb2NrLW1vZHVsZV9fZC10YWJsZS1jZWxsXCIsXCJkLWZsZXhcIjpcIkJsb2NrLW1vZHVsZV9fZC1mbGV4XCIsXCJkLWlubGluZS1mbGV4XCI6XCJCbG9jay1tb2R1bGVfX2QtaW5saW5lLWZsZXhcIixcImQtc20tbm9uZVwiOlwiQmxvY2stbW9kdWxlX19kLXNtLW5vbmVcIixcImQtc20taW5saW5lXCI6XCJCbG9jay1tb2R1bGVfX2Qtc20taW5saW5lXCIsXCJkLXNtLWlubGluZS1ibG9ja1wiOlwiQmxvY2stbW9kdWxlX19kLXNtLWlubGluZS1ibG9ja1wiLFwiZC1zbS1ibG9ja1wiOlwiQmxvY2stbW9kdWxlX19kLXNtLWJsb2NrXCIsXCJkLXNtLXRhYmxlXCI6XCJCbG9jay1tb2R1bGVfX2Qtc20tdGFibGVcIixcImQtc20tdGFibGUtcm93XCI6XCJCbG9jay1tb2R1bGVfX2Qtc20tdGFibGUtcm93XCIsXCJkLXNtLXRhYmxlLWNlbGxcIjpcIkJsb2NrLW1vZHVsZV9fZC1zbS10YWJsZS1jZWxsXCIsXCJkLXNtLWZsZXhcIjpcIkJsb2NrLW1vZHVsZV9fZC1zbS1mbGV4XCIsXCJkLXNtLWlubGluZS1mbGV4XCI6XCJCbG9jay1tb2R1bGVfX2Qtc20taW5saW5lLWZsZXhcIixcImQtbWQtbm9uZVwiOlwiQmxvY2stbW9kdWxlX19kLW1kLW5vbmVcIixcImQtbWQtaW5saW5lXCI6XCJCbG9jay1tb2R1bGVfX2QtbWQtaW5saW5lXCIsXCJkLW1kLWlubGluZS1ibG9ja1wiOlwiQmxvY2stbW9kdWxlX19kLW1kLWlubGluZS1ibG9ja1wiLFwiZC1tZC1ibG9ja1wiOlwiQmxvY2stbW9kdWxlX19kLW1kLWJsb2NrXCIsXCJkLW1kLXRhYmxlXCI6XCJCbG9jay1tb2R1bGVfX2QtbWQtdGFibGVcIixcImQtbWQtdGFibGUtcm93XCI6XCJCbG9jay1tb2R1bGVfX2QtbWQtdGFibGUtcm93XCIsXCJkLW1kLXRhYmxlLWNlbGxcIjpcIkJsb2NrLW1vZHVsZV9fZC1tZC10YWJsZS1jZWxsXCIsXCJkLW1kLWZsZXhcIjpcIkJsb2NrLW1vZHVsZV9fZC1tZC1mbGV4XCIsXCJkLW1kLWlubGluZS1mbGV4XCI6XCJCbG9jay1tb2R1bGVfX2QtbWQtaW5saW5lLWZsZXhcIixcImQtbGctbm9uZVwiOlwiQmxvY2stbW9kdWxlX19kLWxnLW5vbmVcIixcImQtbGctaW5saW5lXCI6XCJCbG9jay1tb2R1bGVfX2QtbGctaW5saW5lXCIsXCJkLWxnLWlubGluZS1ibG9ja1wiOlwiQmxvY2stbW9kdWxlX19kLWxnLWlubGluZS1ibG9ja1wiLFwiZC1sZy1ibG9ja1wiOlwiQmxvY2stbW9kdWxlX19kLWxnLWJsb2NrXCIsXCJkLWxnLXRhYmxlXCI6XCJCbG9jay1tb2R1bGVfX2QtbGctdGFibGVcIixcImQtbGctdGFibGUtcm93XCI6XCJCbG9jay1tb2R1bGVfX2QtbGctdGFibGUtcm93XCIsXCJkLWxnLXRhYmxlLWNlbGxcIjpcIkJsb2NrLW1vZHVsZV9fZC1sZy10YWJsZS1jZWxsXCIsXCJkLWxnLWZsZXhcIjpcIkJsb2NrLW1vZHVsZV9fZC1sZy1mbGV4XCIsXCJkLWxnLWlubGluZS1mbGV4XCI6XCJCbG9jay1tb2R1bGVfX2QtbGctaW5saW5lLWZsZXhcIixcImQteGwtbm9uZVwiOlwiQmxvY2stbW9kdWxlX19kLXhsLW5vbmVcIixcImQteGwtaW5saW5lXCI6XCJCbG9jay1tb2R1bGVfX2QteGwtaW5saW5lXCIsXCJkLXhsLWlubGluZS1ibG9ja1wiOlwiQmxvY2stbW9kdWxlX19kLXhsLWlubGluZS1ibG9ja1wiLFwiZC14bC1ibG9ja1wiOlwiQmxvY2stbW9kdWxlX19kLXhsLWJsb2NrXCIsXCJkLXhsLXRhYmxlXCI6XCJCbG9jay1tb2R1bGVfX2QteGwtdGFibGVcIixcImQteGwtdGFibGUtcm93XCI6XCJCbG9jay1tb2R1bGVfX2QteGwtdGFibGUtcm93XCIsXCJkLXhsLXRhYmxlLWNlbGxcIjpcIkJsb2NrLW1vZHVsZV9fZC14bC10YWJsZS1jZWxsXCIsXCJkLXhsLWZsZXhcIjpcIkJsb2NrLW1vZHVsZV9fZC14bC1mbGV4XCIsXCJkLXhsLWlubGluZS1mbGV4XCI6XCJCbG9jay1tb2R1bGVfX2QteGwtaW5saW5lLWZsZXhcIixcImQtcHJpbnQtbm9uZVwiOlwiQmxvY2stbW9kdWxlX19kLXByaW50LW5vbmVcIixcImQtcHJpbnQtaW5saW5lXCI6XCJCbG9jay1tb2R1bGVfX2QtcHJpbnQtaW5saW5lXCIsXCJkLXByaW50LWlubGluZS1ibG9ja1wiOlwiQmxvY2stbW9kdWxlX19kLXByaW50LWlubGluZS1ibG9ja1wiLFwiZC1wcmludC1ibG9ja1wiOlwiQmxvY2stbW9kdWxlX19kLXByaW50LWJsb2NrXCIsXCJkLXByaW50LXRhYmxlXCI6XCJCbG9jay1tb2R1bGVfX2QtcHJpbnQtdGFibGVcIixcImQtcHJpbnQtdGFibGUtcm93XCI6XCJCbG9jay1tb2R1bGVfX2QtcHJpbnQtdGFibGUtcm93XCIsXCJkLXByaW50LXRhYmxlLWNlbGxcIjpcIkJsb2NrLW1vZHVsZV9fZC1wcmludC10YWJsZS1jZWxsXCIsXCJkLXByaW50LWZsZXhcIjpcIkJsb2NrLW1vZHVsZV9fZC1wcmludC1mbGV4XCIsXCJkLXByaW50LWlubGluZS1mbGV4XCI6XCJCbG9jay1tb2R1bGVfX2QtcHJpbnQtaW5saW5lLWZsZXhcIixcImJsb2NrXCI6XCJCbG9jay1tb2R1bGVfX2Jsb2NrXCIsXCJkYXJrXCI6XCJCbG9jay1tb2R1bGVfX2RhcmtcIixcImJvcmRlclwiOlwiQmxvY2stbW9kdWxlX19ib3JkZXJcIixcInNtYWxsXCI6XCJCbG9jay1tb2R1bGVfX3NtYWxsXCJ9O1xuXG52YXIgQmxvY2sgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhCbG9jaywgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoQmxvY2spO1xuXG4gIGZ1bmN0aW9uIEJsb2NrKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBCbG9jayk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoQmxvY2ssIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIHdpdGhTaGFkb3cgPSBfdGhpcyRwcm9wcy53aXRoU2hhZG93LFxuICAgICAgICAgIGRhcmsgPSBfdGhpcyRwcm9wcy5kYXJrLFxuICAgICAgICAgIHdpdGhCb3JkZXIgPSBfdGhpcyRwcm9wcy53aXRoQm9yZGVyLFxuICAgICAgICAgIHNtYWxsUGFkZGluZyA9IF90aGlzJHByb3BzLnNtYWxsUGFkZGluZyxcbiAgICAgICAgICBkaXNwbGF5ID0gX3RoaXMkcHJvcHMuZGlzcGxheSxcbiAgICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJ3aXRoU2hhZG93XCIsIFwiZGFya1wiLCBcIndpdGhCb3JkZXJcIiwgXCJzbWFsbFBhZGRpbmdcIiwgXCJkaXNwbGF5XCJdKTtcblxuICAgICAgdmFyIGNsYXNzTmFtZXMgPSBbc3R5bGVzJDEuYmxvY2ssIGNsYXNzTmFtZSwgZGFyayAmJiBzdHlsZXMkMS5kYXJrLCB3aXRoQm9yZGVyICYmIHN0eWxlcyQxLmJvcmRlciwgc21hbGxQYWRkaW5nICYmIHN0eWxlcyQxLnNtYWxsXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpO1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCB3aXRoU2hhZG93ID8gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQm94U2hhZG93LCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyxcbiAgICAgICAgZGlzcGxheTogZGlzcGxheSxcbiAgICAgICAgZGFyazogZGFya1xuICAgICAgfSwgcHJvcHMpLCBjaGlsZHJlbikgOiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lc1xuICAgICAgfSwgcHJvcHMpLCBjaGlsZHJlbikpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBCbG9jaztcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShCbG9jaywgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBkaXNwbGF5OiAnYmxvY2snLFxuICBkYXJrOiBmYWxzZVxufSk7XG5cbnZhciBzdHlsZXMkMiA9IHtcInZpc2libGVcIjpcIkNvbC1tb2R1bGVfX3Zpc2libGVcIixcImludmlzaWJsZVwiOlwiQ29sLW1vZHVsZV9faW52aXNpYmxlXCIsXCJjb2wtYm94LXNpemluZ1wiOlwiQ29sLW1vZHVsZV9fY29sLWJveC1zaXppbmdcIixcImNvbC0xXCI6XCJDb2wtbW9kdWxlX19jb2wtMVwiLFwiY29sLTJcIjpcIkNvbC1tb2R1bGVfX2NvbC0yXCIsXCJjb2wtM1wiOlwiQ29sLW1vZHVsZV9fY29sLTNcIixcImNvbC00XCI6XCJDb2wtbW9kdWxlX19jb2wtNFwiLFwiY29sLTVcIjpcIkNvbC1tb2R1bGVfX2NvbC01XCIsXCJjb2wtNlwiOlwiQ29sLW1vZHVsZV9fY29sLTZcIixcImNvbC03XCI6XCJDb2wtbW9kdWxlX19jb2wtN1wiLFwiY29sLThcIjpcIkNvbC1tb2R1bGVfX2NvbC04XCIsXCJjb2wtOVwiOlwiQ29sLW1vZHVsZV9fY29sLTlcIixcImNvbC0xMFwiOlwiQ29sLW1vZHVsZV9fY29sLTEwXCIsXCJjb2wtMTFcIjpcIkNvbC1tb2R1bGVfX2NvbC0xMVwiLFwiY29sLTEyXCI6XCJDb2wtbW9kdWxlX19jb2wtMTJcIixcImNvbFwiOlwiQ29sLW1vZHVsZV9fY29sXCIsXCJjb2wtYXV0b1wiOlwiQ29sLW1vZHVsZV9fY29sLWF1dG9cIixcImNvbC1zbS0xXCI6XCJDb2wtbW9kdWxlX19jb2wtc20tMVwiLFwiY29sLXNtLTJcIjpcIkNvbC1tb2R1bGVfX2NvbC1zbS0yXCIsXCJjb2wtc20tM1wiOlwiQ29sLW1vZHVsZV9fY29sLXNtLTNcIixcImNvbC1zbS00XCI6XCJDb2wtbW9kdWxlX19jb2wtc20tNFwiLFwiY29sLXNtLTVcIjpcIkNvbC1tb2R1bGVfX2NvbC1zbS01XCIsXCJjb2wtc20tNlwiOlwiQ29sLW1vZHVsZV9fY29sLXNtLTZcIixcImNvbC1zbS03XCI6XCJDb2wtbW9kdWxlX19jb2wtc20tN1wiLFwiY29sLXNtLThcIjpcIkNvbC1tb2R1bGVfX2NvbC1zbS04XCIsXCJjb2wtc20tOVwiOlwiQ29sLW1vZHVsZV9fY29sLXNtLTlcIixcImNvbC1zbS0xMFwiOlwiQ29sLW1vZHVsZV9fY29sLXNtLTEwXCIsXCJjb2wtc20tMTFcIjpcIkNvbC1tb2R1bGVfX2NvbC1zbS0xMVwiLFwiY29sLXNtLTEyXCI6XCJDb2wtbW9kdWxlX19jb2wtc20tMTJcIixcImNvbC1zbVwiOlwiQ29sLW1vZHVsZV9fY29sLXNtXCIsXCJjb2wtc20tYXV0b1wiOlwiQ29sLW1vZHVsZV9fY29sLXNtLWF1dG9cIixcImNvbC1tZC0xXCI6XCJDb2wtbW9kdWxlX19jb2wtbWQtMVwiLFwiY29sLW1kLTJcIjpcIkNvbC1tb2R1bGVfX2NvbC1tZC0yXCIsXCJjb2wtbWQtM1wiOlwiQ29sLW1vZHVsZV9fY29sLW1kLTNcIixcImNvbC1tZC00XCI6XCJDb2wtbW9kdWxlX19jb2wtbWQtNFwiLFwiY29sLW1kLTVcIjpcIkNvbC1tb2R1bGVfX2NvbC1tZC01XCIsXCJjb2wtbWQtNlwiOlwiQ29sLW1vZHVsZV9fY29sLW1kLTZcIixcImNvbC1tZC03XCI6XCJDb2wtbW9kdWxlX19jb2wtbWQtN1wiLFwiY29sLW1kLThcIjpcIkNvbC1tb2R1bGVfX2NvbC1tZC04XCIsXCJjb2wtbWQtOVwiOlwiQ29sLW1vZHVsZV9fY29sLW1kLTlcIixcImNvbC1tZC0xMFwiOlwiQ29sLW1vZHVsZV9fY29sLW1kLTEwXCIsXCJjb2wtbWQtMTFcIjpcIkNvbC1tb2R1bGVfX2NvbC1tZC0xMVwiLFwiY29sLW1kLTEyXCI6XCJDb2wtbW9kdWxlX19jb2wtbWQtMTJcIixcImNvbC1tZFwiOlwiQ29sLW1vZHVsZV9fY29sLW1kXCIsXCJjb2wtbWQtYXV0b1wiOlwiQ29sLW1vZHVsZV9fY29sLW1kLWF1dG9cIixcImNvbC1sZy0xXCI6XCJDb2wtbW9kdWxlX19jb2wtbGctMVwiLFwiY29sLWxnLTJcIjpcIkNvbC1tb2R1bGVfX2NvbC1sZy0yXCIsXCJjb2wtbGctM1wiOlwiQ29sLW1vZHVsZV9fY29sLWxnLTNcIixcImNvbC1sZy00XCI6XCJDb2wtbW9kdWxlX19jb2wtbGctNFwiLFwiY29sLWxnLTVcIjpcIkNvbC1tb2R1bGVfX2NvbC1sZy01XCIsXCJjb2wtbGctNlwiOlwiQ29sLW1vZHVsZV9fY29sLWxnLTZcIixcImNvbC1sZy03XCI6XCJDb2wtbW9kdWxlX19jb2wtbGctN1wiLFwiY29sLWxnLThcIjpcIkNvbC1tb2R1bGVfX2NvbC1sZy04XCIsXCJjb2wtbGctOVwiOlwiQ29sLW1vZHVsZV9fY29sLWxnLTlcIixcImNvbC1sZy0xMFwiOlwiQ29sLW1vZHVsZV9fY29sLWxnLTEwXCIsXCJjb2wtbGctMTFcIjpcIkNvbC1tb2R1bGVfX2NvbC1sZy0xMVwiLFwiY29sLWxnLTEyXCI6XCJDb2wtbW9kdWxlX19jb2wtbGctMTJcIixcImNvbC1sZ1wiOlwiQ29sLW1vZHVsZV9fY29sLWxnXCIsXCJjb2wtbGctYXV0b1wiOlwiQ29sLW1vZHVsZV9fY29sLWxnLWF1dG9cIixcImNvbC14bC0xXCI6XCJDb2wtbW9kdWxlX19jb2wteGwtMVwiLFwiY29sLXhsLTJcIjpcIkNvbC1tb2R1bGVfX2NvbC14bC0yXCIsXCJjb2wteGwtM1wiOlwiQ29sLW1vZHVsZV9fY29sLXhsLTNcIixcImNvbC14bC00XCI6XCJDb2wtbW9kdWxlX19jb2wteGwtNFwiLFwiY29sLXhsLTVcIjpcIkNvbC1tb2R1bGVfX2NvbC14bC01XCIsXCJjb2wteGwtNlwiOlwiQ29sLW1vZHVsZV9fY29sLXhsLTZcIixcImNvbC14bC03XCI6XCJDb2wtbW9kdWxlX19jb2wteGwtN1wiLFwiY29sLXhsLThcIjpcIkNvbC1tb2R1bGVfX2NvbC14bC04XCIsXCJjb2wteGwtOVwiOlwiQ29sLW1vZHVsZV9fY29sLXhsLTlcIixcImNvbC14bC0xMFwiOlwiQ29sLW1vZHVsZV9fY29sLXhsLTEwXCIsXCJjb2wteGwtMTFcIjpcIkNvbC1tb2R1bGVfX2NvbC14bC0xMVwiLFwiY29sLXhsLTEyXCI6XCJDb2wtbW9kdWxlX19jb2wteGwtMTJcIixcImNvbC14bFwiOlwiQ29sLW1vZHVsZV9fY29sLXhsXCIsXCJjb2wteGwtYXV0b1wiOlwiQ29sLW1vZHVsZV9fY29sLXhsLWF1dG9cIixcInJvdy1jb2xzLTFcIjpcIkNvbC1tb2R1bGVfX3Jvdy1jb2xzLTFcIixcInJvdy1jb2xzLTJcIjpcIkNvbC1tb2R1bGVfX3Jvdy1jb2xzLTJcIixcInJvdy1jb2xzLTNcIjpcIkNvbC1tb2R1bGVfX3Jvdy1jb2xzLTNcIixcInJvdy1jb2xzLTRcIjpcIkNvbC1tb2R1bGVfX3Jvdy1jb2xzLTRcIixcInJvdy1jb2xzLTVcIjpcIkNvbC1tb2R1bGVfX3Jvdy1jb2xzLTVcIixcInJvdy1jb2xzLTZcIjpcIkNvbC1tb2R1bGVfX3Jvdy1jb2xzLTZcIixcIm9yZGVyLWZpcnN0XCI6XCJDb2wtbW9kdWxlX19vcmRlci1maXJzdFwiLFwib3JkZXItbGFzdFwiOlwiQ29sLW1vZHVsZV9fb3JkZXItbGFzdFwiLFwib3JkZXItMFwiOlwiQ29sLW1vZHVsZV9fb3JkZXItMFwiLFwib3JkZXItMVwiOlwiQ29sLW1vZHVsZV9fb3JkZXItMVwiLFwib3JkZXItMlwiOlwiQ29sLW1vZHVsZV9fb3JkZXItMlwiLFwib3JkZXItM1wiOlwiQ29sLW1vZHVsZV9fb3JkZXItM1wiLFwib3JkZXItNFwiOlwiQ29sLW1vZHVsZV9fb3JkZXItNFwiLFwib3JkZXItNVwiOlwiQ29sLW1vZHVsZV9fb3JkZXItNVwiLFwib3JkZXItNlwiOlwiQ29sLW1vZHVsZV9fb3JkZXItNlwiLFwib3JkZXItN1wiOlwiQ29sLW1vZHVsZV9fb3JkZXItN1wiLFwib3JkZXItOFwiOlwiQ29sLW1vZHVsZV9fb3JkZXItOFwiLFwib3JkZXItOVwiOlwiQ29sLW1vZHVsZV9fb3JkZXItOVwiLFwib3JkZXItMTBcIjpcIkNvbC1tb2R1bGVfX29yZGVyLTEwXCIsXCJvcmRlci0xMVwiOlwiQ29sLW1vZHVsZV9fb3JkZXItMTFcIixcIm9yZGVyLTEyXCI6XCJDb2wtbW9kdWxlX19vcmRlci0xMlwiLFwib2Zmc2V0LTFcIjpcIkNvbC1tb2R1bGVfX29mZnNldC0xXCIsXCJvZmZzZXQtMlwiOlwiQ29sLW1vZHVsZV9fb2Zmc2V0LTJcIixcIm9mZnNldC0zXCI6XCJDb2wtbW9kdWxlX19vZmZzZXQtM1wiLFwib2Zmc2V0LTRcIjpcIkNvbC1tb2R1bGVfX29mZnNldC00XCIsXCJvZmZzZXQtNVwiOlwiQ29sLW1vZHVsZV9fb2Zmc2V0LTVcIixcIm9mZnNldC02XCI6XCJDb2wtbW9kdWxlX19vZmZzZXQtNlwiLFwib2Zmc2V0LTdcIjpcIkNvbC1tb2R1bGVfX29mZnNldC03XCIsXCJvZmZzZXQtOFwiOlwiQ29sLW1vZHVsZV9fb2Zmc2V0LThcIixcIm9mZnNldC05XCI6XCJDb2wtbW9kdWxlX19vZmZzZXQtOVwiLFwib2Zmc2V0LTEwXCI6XCJDb2wtbW9kdWxlX19vZmZzZXQtMTBcIixcIm9mZnNldC0xMVwiOlwiQ29sLW1vZHVsZV9fb2Zmc2V0LTExXCIsXCJyb3ctY29scy1zbS0xXCI6XCJDb2wtbW9kdWxlX19yb3ctY29scy1zbS0xXCIsXCJyb3ctY29scy1zbS0yXCI6XCJDb2wtbW9kdWxlX19yb3ctY29scy1zbS0yXCIsXCJyb3ctY29scy1zbS0zXCI6XCJDb2wtbW9kdWxlX19yb3ctY29scy1zbS0zXCIsXCJyb3ctY29scy1zbS00XCI6XCJDb2wtbW9kdWxlX19yb3ctY29scy1zbS00XCIsXCJyb3ctY29scy1zbS01XCI6XCJDb2wtbW9kdWxlX19yb3ctY29scy1zbS01XCIsXCJyb3ctY29scy1zbS02XCI6XCJDb2wtbW9kdWxlX19yb3ctY29scy1zbS02XCIsXCJvcmRlci1zbS1maXJzdFwiOlwiQ29sLW1vZHVsZV9fb3JkZXItc20tZmlyc3RcIixcIm9yZGVyLXNtLWxhc3RcIjpcIkNvbC1tb2R1bGVfX29yZGVyLXNtLWxhc3RcIixcIm9yZGVyLXNtLTBcIjpcIkNvbC1tb2R1bGVfX29yZGVyLXNtLTBcIixcIm9yZGVyLXNtLTFcIjpcIkNvbC1tb2R1bGVfX29yZGVyLXNtLTFcIixcIm9yZGVyLXNtLTJcIjpcIkNvbC1tb2R1bGVfX29yZGVyLXNtLTJcIixcIm9yZGVyLXNtLTNcIjpcIkNvbC1tb2R1bGVfX29yZGVyLXNtLTNcIixcIm9yZGVyLXNtLTRcIjpcIkNvbC1tb2R1bGVfX29yZGVyLXNtLTRcIixcIm9yZGVyLXNtLTVcIjpcIkNvbC1tb2R1bGVfX29yZGVyLXNtLTVcIixcIm9yZGVyLXNtLTZcIjpcIkNvbC1tb2R1bGVfX29yZGVyLXNtLTZcIixcIm9yZGVyLXNtLTdcIjpcIkNvbC1tb2R1bGVfX29yZGVyLXNtLTdcIixcIm9yZGVyLXNtLThcIjpcIkNvbC1tb2R1bGVfX29yZGVyLXNtLThcIixcIm9yZGVyLXNtLTlcIjpcIkNvbC1tb2R1bGVfX29yZGVyLXNtLTlcIixcIm9yZGVyLXNtLTEwXCI6XCJDb2wtbW9kdWxlX19vcmRlci1zbS0xMFwiLFwib3JkZXItc20tMTFcIjpcIkNvbC1tb2R1bGVfX29yZGVyLXNtLTExXCIsXCJvcmRlci1zbS0xMlwiOlwiQ29sLW1vZHVsZV9fb3JkZXItc20tMTJcIixcIm9mZnNldC1zbS0wXCI6XCJDb2wtbW9kdWxlX19vZmZzZXQtc20tMFwiLFwib2Zmc2V0LXNtLTFcIjpcIkNvbC1tb2R1bGVfX29mZnNldC1zbS0xXCIsXCJvZmZzZXQtc20tMlwiOlwiQ29sLW1vZHVsZV9fb2Zmc2V0LXNtLTJcIixcIm9mZnNldC1zbS0zXCI6XCJDb2wtbW9kdWxlX19vZmZzZXQtc20tM1wiLFwib2Zmc2V0LXNtLTRcIjpcIkNvbC1tb2R1bGVfX29mZnNldC1zbS00XCIsXCJvZmZzZXQtc20tNVwiOlwiQ29sLW1vZHVsZV9fb2Zmc2V0LXNtLTVcIixcIm9mZnNldC1zbS02XCI6XCJDb2wtbW9kdWxlX19vZmZzZXQtc20tNlwiLFwib2Zmc2V0LXNtLTdcIjpcIkNvbC1tb2R1bGVfX29mZnNldC1zbS03XCIsXCJvZmZzZXQtc20tOFwiOlwiQ29sLW1vZHVsZV9fb2Zmc2V0LXNtLThcIixcIm9mZnNldC1zbS05XCI6XCJDb2wtbW9kdWxlX19vZmZzZXQtc20tOVwiLFwib2Zmc2V0LXNtLTEwXCI6XCJDb2wtbW9kdWxlX19vZmZzZXQtc20tMTBcIixcIm9mZnNldC1zbS0xMVwiOlwiQ29sLW1vZHVsZV9fb2Zmc2V0LXNtLTExXCIsXCJyb3ctY29scy1tZC0xXCI6XCJDb2wtbW9kdWxlX19yb3ctY29scy1tZC0xXCIsXCJyb3ctY29scy1tZC0yXCI6XCJDb2wtbW9kdWxlX19yb3ctY29scy1tZC0yXCIsXCJyb3ctY29scy1tZC0zXCI6XCJDb2wtbW9kdWxlX19yb3ctY29scy1tZC0zXCIsXCJyb3ctY29scy1tZC00XCI6XCJDb2wtbW9kdWxlX19yb3ctY29scy1tZC00XCIsXCJyb3ctY29scy1tZC01XCI6XCJDb2wtbW9kdWxlX19yb3ctY29scy1tZC01XCIsXCJyb3ctY29scy1tZC02XCI6XCJDb2wtbW9kdWxlX19yb3ctY29scy1tZC02XCIsXCJvcmRlci1tZC1maXJzdFwiOlwiQ29sLW1vZHVsZV9fb3JkZXItbWQtZmlyc3RcIixcIm9yZGVyLW1kLWxhc3RcIjpcIkNvbC1tb2R1bGVfX29yZGVyLW1kLWxhc3RcIixcIm9yZGVyLW1kLTBcIjpcIkNvbC1tb2R1bGVfX29yZGVyLW1kLTBcIixcIm9yZGVyLW1kLTFcIjpcIkNvbC1tb2R1bGVfX29yZGVyLW1kLTFcIixcIm9yZGVyLW1kLTJcIjpcIkNvbC1tb2R1bGVfX29yZGVyLW1kLTJcIixcIm9yZGVyLW1kLTNcIjpcIkNvbC1tb2R1bGVfX29yZGVyLW1kLTNcIixcIm9yZGVyLW1kLTRcIjpcIkNvbC1tb2R1bGVfX29yZGVyLW1kLTRcIixcIm9yZGVyLW1kLTVcIjpcIkNvbC1tb2R1bGVfX29yZGVyLW1kLTVcIixcIm9yZGVyLW1kLTZcIjpcIkNvbC1tb2R1bGVfX29yZGVyLW1kLTZcIixcIm9yZGVyLW1kLTdcIjpcIkNvbC1tb2R1bGVfX29yZGVyLW1kLTdcIixcIm9yZGVyLW1kLThcIjpcIkNvbC1tb2R1bGVfX29yZGVyLW1kLThcIixcIm9yZGVyLW1kLTlcIjpcIkNvbC1tb2R1bGVfX29yZGVyLW1kLTlcIixcIm9yZGVyLW1kLTEwXCI6XCJDb2wtbW9kdWxlX19vcmRlci1tZC0xMFwiLFwib3JkZXItbWQtMTFcIjpcIkNvbC1tb2R1bGVfX29yZGVyLW1kLTExXCIsXCJvcmRlci1tZC0xMlwiOlwiQ29sLW1vZHVsZV9fb3JkZXItbWQtMTJcIixcIm9mZnNldC1tZC0wXCI6XCJDb2wtbW9kdWxlX19vZmZzZXQtbWQtMFwiLFwib2Zmc2V0LW1kLTFcIjpcIkNvbC1tb2R1bGVfX29mZnNldC1tZC0xXCIsXCJvZmZzZXQtbWQtMlwiOlwiQ29sLW1vZHVsZV9fb2Zmc2V0LW1kLTJcIixcIm9mZnNldC1tZC0zXCI6XCJDb2wtbW9kdWxlX19vZmZzZXQtbWQtM1wiLFwib2Zmc2V0LW1kLTRcIjpcIkNvbC1tb2R1bGVfX29mZnNldC1tZC00XCIsXCJvZmZzZXQtbWQtNVwiOlwiQ29sLW1vZHVsZV9fb2Zmc2V0LW1kLTVcIixcIm9mZnNldC1tZC02XCI6XCJDb2wtbW9kdWxlX19vZmZzZXQtbWQtNlwiLFwib2Zmc2V0LW1kLTdcIjpcIkNvbC1tb2R1bGVfX29mZnNldC1tZC03XCIsXCJvZmZzZXQtbWQtOFwiOlwiQ29sLW1vZHVsZV9fb2Zmc2V0LW1kLThcIixcIm9mZnNldC1tZC05XCI6XCJDb2wtbW9kdWxlX19vZmZzZXQtbWQtOVwiLFwib2Zmc2V0LW1kLTEwXCI6XCJDb2wtbW9kdWxlX19vZmZzZXQtbWQtMTBcIixcIm9mZnNldC1tZC0xMVwiOlwiQ29sLW1vZHVsZV9fb2Zmc2V0LW1kLTExXCIsXCJyb3ctY29scy1sZy0xXCI6XCJDb2wtbW9kdWxlX19yb3ctY29scy1sZy0xXCIsXCJyb3ctY29scy1sZy0yXCI6XCJDb2wtbW9kdWxlX19yb3ctY29scy1sZy0yXCIsXCJyb3ctY29scy1sZy0zXCI6XCJDb2wtbW9kdWxlX19yb3ctY29scy1sZy0zXCIsXCJyb3ctY29scy1sZy00XCI6XCJDb2wtbW9kdWxlX19yb3ctY29scy1sZy00XCIsXCJyb3ctY29scy1sZy01XCI6XCJDb2wtbW9kdWxlX19yb3ctY29scy1sZy01XCIsXCJyb3ctY29scy1sZy02XCI6XCJDb2wtbW9kdWxlX19yb3ctY29scy1sZy02XCIsXCJvcmRlci1sZy1maXJzdFwiOlwiQ29sLW1vZHVsZV9fb3JkZXItbGctZmlyc3RcIixcIm9yZGVyLWxnLWxhc3RcIjpcIkNvbC1tb2R1bGVfX29yZGVyLWxnLWxhc3RcIixcIm9yZGVyLWxnLTBcIjpcIkNvbC1tb2R1bGVfX29yZGVyLWxnLTBcIixcIm9yZGVyLWxnLTFcIjpcIkNvbC1tb2R1bGVfX29yZGVyLWxnLTFcIixcIm9yZGVyLWxnLTJcIjpcIkNvbC1tb2R1bGVfX29yZGVyLWxnLTJcIixcIm9yZGVyLWxnLTNcIjpcIkNvbC1tb2R1bGVfX29yZGVyLWxnLTNcIixcIm9yZGVyLWxnLTRcIjpcIkNvbC1tb2R1bGVfX29yZGVyLWxnLTRcIixcIm9yZGVyLWxnLTVcIjpcIkNvbC1tb2R1bGVfX29yZGVyLWxnLTVcIixcIm9yZGVyLWxnLTZcIjpcIkNvbC1tb2R1bGVfX29yZGVyLWxnLTZcIixcIm9yZGVyLWxnLTdcIjpcIkNvbC1tb2R1bGVfX29yZGVyLWxnLTdcIixcIm9yZGVyLWxnLThcIjpcIkNvbC1tb2R1bGVfX29yZGVyLWxnLThcIixcIm9yZGVyLWxnLTlcIjpcIkNvbC1tb2R1bGVfX29yZGVyLWxnLTlcIixcIm9yZGVyLWxnLTEwXCI6XCJDb2wtbW9kdWxlX19vcmRlci1sZy0xMFwiLFwib3JkZXItbGctMTFcIjpcIkNvbC1tb2R1bGVfX29yZGVyLWxnLTExXCIsXCJvcmRlci1sZy0xMlwiOlwiQ29sLW1vZHVsZV9fb3JkZXItbGctMTJcIixcIm9mZnNldC1sZy0wXCI6XCJDb2wtbW9kdWxlX19vZmZzZXQtbGctMFwiLFwib2Zmc2V0LWxnLTFcIjpcIkNvbC1tb2R1bGVfX29mZnNldC1sZy0xXCIsXCJvZmZzZXQtbGctMlwiOlwiQ29sLW1vZHVsZV9fb2Zmc2V0LWxnLTJcIixcIm9mZnNldC1sZy0zXCI6XCJDb2wtbW9kdWxlX19vZmZzZXQtbGctM1wiLFwib2Zmc2V0LWxnLTRcIjpcIkNvbC1tb2R1bGVfX29mZnNldC1sZy00XCIsXCJvZmZzZXQtbGctNVwiOlwiQ29sLW1vZHVsZV9fb2Zmc2V0LWxnLTVcIixcIm9mZnNldC1sZy02XCI6XCJDb2wtbW9kdWxlX19vZmZzZXQtbGctNlwiLFwib2Zmc2V0LWxnLTdcIjpcIkNvbC1tb2R1bGVfX29mZnNldC1sZy03XCIsXCJvZmZzZXQtbGctOFwiOlwiQ29sLW1vZHVsZV9fb2Zmc2V0LWxnLThcIixcIm9mZnNldC1sZy05XCI6XCJDb2wtbW9kdWxlX19vZmZzZXQtbGctOVwiLFwib2Zmc2V0LWxnLTEwXCI6XCJDb2wtbW9kdWxlX19vZmZzZXQtbGctMTBcIixcIm9mZnNldC1sZy0xMVwiOlwiQ29sLW1vZHVsZV9fb2Zmc2V0LWxnLTExXCIsXCJyb3ctY29scy14bC0xXCI6XCJDb2wtbW9kdWxlX19yb3ctY29scy14bC0xXCIsXCJyb3ctY29scy14bC0yXCI6XCJDb2wtbW9kdWxlX19yb3ctY29scy14bC0yXCIsXCJyb3ctY29scy14bC0zXCI6XCJDb2wtbW9kdWxlX19yb3ctY29scy14bC0zXCIsXCJyb3ctY29scy14bC00XCI6XCJDb2wtbW9kdWxlX19yb3ctY29scy14bC00XCIsXCJyb3ctY29scy14bC01XCI6XCJDb2wtbW9kdWxlX19yb3ctY29scy14bC01XCIsXCJyb3ctY29scy14bC02XCI6XCJDb2wtbW9kdWxlX19yb3ctY29scy14bC02XCIsXCJvcmRlci14bC1maXJzdFwiOlwiQ29sLW1vZHVsZV9fb3JkZXIteGwtZmlyc3RcIixcIm9yZGVyLXhsLWxhc3RcIjpcIkNvbC1tb2R1bGVfX29yZGVyLXhsLWxhc3RcIixcIm9yZGVyLXhsLTBcIjpcIkNvbC1tb2R1bGVfX29yZGVyLXhsLTBcIixcIm9yZGVyLXhsLTFcIjpcIkNvbC1tb2R1bGVfX29yZGVyLXhsLTFcIixcIm9yZGVyLXhsLTJcIjpcIkNvbC1tb2R1bGVfX29yZGVyLXhsLTJcIixcIm9yZGVyLXhsLTNcIjpcIkNvbC1tb2R1bGVfX29yZGVyLXhsLTNcIixcIm9yZGVyLXhsLTRcIjpcIkNvbC1tb2R1bGVfX29yZGVyLXhsLTRcIixcIm9yZGVyLXhsLTVcIjpcIkNvbC1tb2R1bGVfX29yZGVyLXhsLTVcIixcIm9yZGVyLXhsLTZcIjpcIkNvbC1tb2R1bGVfX29yZGVyLXhsLTZcIixcIm9yZGVyLXhsLTdcIjpcIkNvbC1tb2R1bGVfX29yZGVyLXhsLTdcIixcIm9yZGVyLXhsLThcIjpcIkNvbC1tb2R1bGVfX29yZGVyLXhsLThcIixcIm9yZGVyLXhsLTlcIjpcIkNvbC1tb2R1bGVfX29yZGVyLXhsLTlcIixcIm9yZGVyLXhsLTEwXCI6XCJDb2wtbW9kdWxlX19vcmRlci14bC0xMFwiLFwib3JkZXIteGwtMTFcIjpcIkNvbC1tb2R1bGVfX29yZGVyLXhsLTExXCIsXCJvcmRlci14bC0xMlwiOlwiQ29sLW1vZHVsZV9fb3JkZXIteGwtMTJcIixcIm9mZnNldC14bC0wXCI6XCJDb2wtbW9kdWxlX19vZmZzZXQteGwtMFwiLFwib2Zmc2V0LXhsLTFcIjpcIkNvbC1tb2R1bGVfX29mZnNldC14bC0xXCIsXCJvZmZzZXQteGwtMlwiOlwiQ29sLW1vZHVsZV9fb2Zmc2V0LXhsLTJcIixcIm9mZnNldC14bC0zXCI6XCJDb2wtbW9kdWxlX19vZmZzZXQteGwtM1wiLFwib2Zmc2V0LXhsLTRcIjpcIkNvbC1tb2R1bGVfX29mZnNldC14bC00XCIsXCJvZmZzZXQteGwtNVwiOlwiQ29sLW1vZHVsZV9fb2Zmc2V0LXhsLTVcIixcIm9mZnNldC14bC02XCI6XCJDb2wtbW9kdWxlX19vZmZzZXQteGwtNlwiLFwib2Zmc2V0LXhsLTdcIjpcIkNvbC1tb2R1bGVfX29mZnNldC14bC03XCIsXCJvZmZzZXQteGwtOFwiOlwiQ29sLW1vZHVsZV9fb2Zmc2V0LXhsLThcIixcIm9mZnNldC14bC05XCI6XCJDb2wtbW9kdWxlX19vZmZzZXQteGwtOVwiLFwib2Zmc2V0LXhsLTEwXCI6XCJDb2wtbW9kdWxlX19vZmZzZXQteGwtMTBcIixcIm9mZnNldC14bC0xMVwiOlwiQ29sLW1vZHVsZV9fb2Zmc2V0LXhsLTExXCIsXCJhbGlnbi1zZWxmLWF1dG9cIjpcIkNvbC1tb2R1bGVfX2FsaWduLXNlbGYtYXV0b1wiLFwiYWxpZ24tc2VsZi1zdGFydFwiOlwiQ29sLW1vZHVsZV9fYWxpZ24tc2VsZi1zdGFydFwiLFwiYWxpZ24tc2VsZi1lbmRcIjpcIkNvbC1tb2R1bGVfX2FsaWduLXNlbGYtZW5kXCIsXCJhbGlnbi1zZWxmLWNlbnRlclwiOlwiQ29sLW1vZHVsZV9fYWxpZ24tc2VsZi1jZW50ZXJcIixcImFsaWduLXNlbGYtYmFzZWxpbmVcIjpcIkNvbC1tb2R1bGVfX2FsaWduLXNlbGYtYmFzZWxpbmVcIixcImFsaWduLXNlbGYtc3RyZXRjaFwiOlwiQ29sLW1vZHVsZV9fYWxpZ24tc2VsZi1zdHJldGNoXCIsXCJhbGlnbi1zZWxmLXNtLWF1dG9cIjpcIkNvbC1tb2R1bGVfX2FsaWduLXNlbGYtc20tYXV0b1wiLFwiYWxpZ24tc2VsZi1zbS1zdGFydFwiOlwiQ29sLW1vZHVsZV9fYWxpZ24tc2VsZi1zbS1zdGFydFwiLFwiYWxpZ24tc2VsZi1zbS1lbmRcIjpcIkNvbC1tb2R1bGVfX2FsaWduLXNlbGYtc20tZW5kXCIsXCJhbGlnbi1zZWxmLXNtLWNlbnRlclwiOlwiQ29sLW1vZHVsZV9fYWxpZ24tc2VsZi1zbS1jZW50ZXJcIixcImFsaWduLXNlbGYtc20tYmFzZWxpbmVcIjpcIkNvbC1tb2R1bGVfX2FsaWduLXNlbGYtc20tYmFzZWxpbmVcIixcImFsaWduLXNlbGYtc20tc3RyZXRjaFwiOlwiQ29sLW1vZHVsZV9fYWxpZ24tc2VsZi1zbS1zdHJldGNoXCIsXCJhbGlnbi1zZWxmLW1kLWF1dG9cIjpcIkNvbC1tb2R1bGVfX2FsaWduLXNlbGYtbWQtYXV0b1wiLFwiYWxpZ24tc2VsZi1tZC1zdGFydFwiOlwiQ29sLW1vZHVsZV9fYWxpZ24tc2VsZi1tZC1zdGFydFwiLFwiYWxpZ24tc2VsZi1tZC1lbmRcIjpcIkNvbC1tb2R1bGVfX2FsaWduLXNlbGYtbWQtZW5kXCIsXCJhbGlnbi1zZWxmLW1kLWNlbnRlclwiOlwiQ29sLW1vZHVsZV9fYWxpZ24tc2VsZi1tZC1jZW50ZXJcIixcImFsaWduLXNlbGYtbWQtYmFzZWxpbmVcIjpcIkNvbC1tb2R1bGVfX2FsaWduLXNlbGYtbWQtYmFzZWxpbmVcIixcImFsaWduLXNlbGYtbWQtc3RyZXRjaFwiOlwiQ29sLW1vZHVsZV9fYWxpZ24tc2VsZi1tZC1zdHJldGNoXCIsXCJhbGlnbi1zZWxmLWxnLWF1dG9cIjpcIkNvbC1tb2R1bGVfX2FsaWduLXNlbGYtbGctYXV0b1wiLFwiYWxpZ24tc2VsZi1sZy1zdGFydFwiOlwiQ29sLW1vZHVsZV9fYWxpZ24tc2VsZi1sZy1zdGFydFwiLFwiYWxpZ24tc2VsZi1sZy1lbmRcIjpcIkNvbC1tb2R1bGVfX2FsaWduLXNlbGYtbGctZW5kXCIsXCJhbGlnbi1zZWxmLWxnLWNlbnRlclwiOlwiQ29sLW1vZHVsZV9fYWxpZ24tc2VsZi1sZy1jZW50ZXJcIixcImFsaWduLXNlbGYtbGctYmFzZWxpbmVcIjpcIkNvbC1tb2R1bGVfX2FsaWduLXNlbGYtbGctYmFzZWxpbmVcIixcImFsaWduLXNlbGYtbGctc3RyZXRjaFwiOlwiQ29sLW1vZHVsZV9fYWxpZ24tc2VsZi1sZy1zdHJldGNoXCIsXCJhbGlnbi1zZWxmLXhsLWF1dG9cIjpcIkNvbC1tb2R1bGVfX2FsaWduLXNlbGYteGwtYXV0b1wiLFwiYWxpZ24tc2VsZi14bC1zdGFydFwiOlwiQ29sLW1vZHVsZV9fYWxpZ24tc2VsZi14bC1zdGFydFwiLFwiYWxpZ24tc2VsZi14bC1lbmRcIjpcIkNvbC1tb2R1bGVfX2FsaWduLXNlbGYteGwtZW5kXCIsXCJhbGlnbi1zZWxmLXhsLWNlbnRlclwiOlwiQ29sLW1vZHVsZV9fYWxpZ24tc2VsZi14bC1jZW50ZXJcIixcImFsaWduLXNlbGYteGwtYmFzZWxpbmVcIjpcIkNvbC1tb2R1bGVfX2FsaWduLXNlbGYteGwtYmFzZWxpbmVcIixcImFsaWduLXNlbGYteGwtc3RyZXRjaFwiOlwiQ29sLW1vZHVsZV9fYWxpZ24tc2VsZi14bC1zdHJldGNoXCJ9O1xuXG52YXIgQ29sID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgQ29sLmRpc3BsYXlOYW1lID0gJ0NvbCc7XG5cbiAgdmFyIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICAgIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgICBjb2wgPSBwcm9wcy5jb2wsXG4gICAgICBvZmZzZXQgPSBwcm9wcy5vZmZzZXQsXG4gICAgICBzbU9mZnNldCA9IHByb3BzLnNtT2Zmc2V0LFxuICAgICAgbWRPZmZzZXQgPSBwcm9wcy5tZE9mZnNldCxcbiAgICAgIGxnT2Zmc2V0ID0gcHJvcHMubGdPZmZzZXQsXG4gICAgICB4bE9mZnNldCA9IHByb3BzLnhsT2Zmc2V0LFxuICAgICAgYXV0byA9IHByb3BzLmF1dG8sXG4gICAgICBzbUF1dG8gPSBwcm9wcy5zbUF1dG8sXG4gICAgICBtZEF1dG8gPSBwcm9wcy5tZEF1dG8sXG4gICAgICBsZ0F1dG8gPSBwcm9wcy5sZ0F1dG8sXG4gICAgICB4bEF1dG8gPSBwcm9wcy54bEF1dG8sXG4gICAgICBhbGlnblNlbGYgPSBwcm9wcy5hbGlnblNlbGYsXG4gICAgICBzbUFsaWduU2VsZiA9IHByb3BzLnNtQWxpZ25TZWxmLFxuICAgICAgbWRBbGlnblNlbGYgPSBwcm9wcy5tZEFsaWduU2VsZixcbiAgICAgIGxnQWxpZ25TZWxmID0gcHJvcHMubGdBbGlnblNlbGYsXG4gICAgICB4bEFsaWduU2VsZiA9IHByb3BzLnhsQWxpZ25TZWxmLFxuICAgICAgb3JkZXIgPSBwcm9wcy5vcmRlcixcbiAgICAgIHNtT3JkZXIgPSBwcm9wcy5zbU9yZGVyLFxuICAgICAgbWRPcmRlciA9IHByb3BzLm1kT3JkZXIsXG4gICAgICBsZ09yZGVyID0gcHJvcHMubGdPcmRlcixcbiAgICAgIHhsT3JkZXIgPSBwcm9wcy54bE9yZGVyLFxuICAgICAgc20gPSBwcm9wcy5zbSxcbiAgICAgIG1kID0gcHJvcHMubWQsXG4gICAgICBsZyA9IHByb3BzLmxnLFxuICAgICAgeGwgPSBwcm9wcy54bCxcbiAgICAgIHZpc2libGUgPSBwcm9wcy52aXNpYmxlLFxuICAgICAgaW52aXNpYmxlID0gcHJvcHMuaW52aXNpYmxlLFxuICAgICAgcmVzdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHByb3BzLCBbXCJjbGFzc05hbWVcIiwgXCJjaGlsZHJlblwiLCBcImNvbFwiLCBcIm9mZnNldFwiLCBcInNtT2Zmc2V0XCIsIFwibWRPZmZzZXRcIiwgXCJsZ09mZnNldFwiLCBcInhsT2Zmc2V0XCIsIFwiYXV0b1wiLCBcInNtQXV0b1wiLCBcIm1kQXV0b1wiLCBcImxnQXV0b1wiLCBcInhsQXV0b1wiLCBcImFsaWduU2VsZlwiLCBcInNtQWxpZ25TZWxmXCIsIFwibWRBbGlnblNlbGZcIiwgXCJsZ0FsaWduU2VsZlwiLCBcInhsQWxpZ25TZWxmXCIsIFwib3JkZXJcIiwgXCJzbU9yZGVyXCIsIFwibWRPcmRlclwiLCBcImxnT3JkZXJcIiwgXCJ4bE9yZGVyXCIsIFwic21cIiwgXCJtZFwiLCBcImxnXCIsIFwieGxcIiwgXCJ2aXNpYmxlXCIsIFwiaW52aXNpYmxlXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogW3N0eWxlcyQyWydjb2wtYm94LXNpemluZyddLCBzdHlsZXMkMlsnY29sJ10sIGNvbCAmJiBzdHlsZXMkMltcImNvbC1cIi5jb25jYXQoY29sKV0sIGF1dG8gJiYgc3R5bGVzJDJbJ2NvbC1hdXRvJ10sIHNtQXV0byAmJiBzdHlsZXMkMlsnY29sLXNtLWF1dG8nXSwgbWRBdXRvICYmIHN0eWxlcyQyWydjb2wtbWQtYXV0byddLCBsZ0F1dG8gJiYgc3R5bGVzJDJbJ2NvbC1sZy1hdXRvJ10sIHhsQXV0byAmJiBzdHlsZXMkMlsnY29sLXhsLWF1dG8nXSwgb2Zmc2V0ICYmIHN0eWxlcyQyW1wib2Zmc2V0LVwiLmNvbmNhdChvZmZzZXQpXSwgc21PZmZzZXQgJiYgc3R5bGVzJDJbXCJvZmZzZXQtc20tXCIuY29uY2F0KHNtT2Zmc2V0KV0sIG1kT2Zmc2V0ICYmIHN0eWxlcyQyW1wib2Zmc2V0LW1kLVwiLmNvbmNhdChtZE9mZnNldCldLCBsZ09mZnNldCAmJiBzdHlsZXMkMltcIm9mZnNldC1sZy1cIi5jb25jYXQobGdPZmZzZXQpXSwgeGxPZmZzZXQgJiYgc3R5bGVzJDJbXCJvZmZzZXQteGwtXCIuY29uY2F0KHhsT2Zmc2V0KV0sIGFsaWduU2VsZiAmJiBzdHlsZXMkMltcImFsaWduLXNlbGYtXCIuY29uY2F0KGFsaWduU2VsZildLCBzbUFsaWduU2VsZiAmJiBzdHlsZXMkMltcImFsaWduLXNlbGYtc20tXCIuY29uY2F0KHNtQWxpZ25TZWxmKV0sIG1kQWxpZ25TZWxmICYmIHN0eWxlcyQyW1wiYWxpZ24tc2VsZi1tZC1cIi5jb25jYXQobWRBbGlnblNlbGYpXSwgbGdBbGlnblNlbGYgJiYgc3R5bGVzJDJbXCJhbGlnbi1zZWxmLWxnLVwiLmNvbmNhdChsZ0FsaWduU2VsZildLCB4bEFsaWduU2VsZiAmJiBzdHlsZXMkMltcImFsaWduLXNlbGYteGwtXCIuY29uY2F0KHhsQWxpZ25TZWxmKV0sIG9yZGVyICYmIHN0eWxlcyQyW1wib3JkZXItXCIuY29uY2F0KG9yZGVyKV0sIHNtT3JkZXIgJiYgc3R5bGVzJDJbXCJvcmRlci1zbS1cIi5jb25jYXQoc21PcmRlcildLCBtZE9yZGVyICYmIHN0eWxlcyQyW1wib3JkZXItbWQtXCIuY29uY2F0KG1kT3JkZXIpXSwgbGdPcmRlciAmJiBzdHlsZXMkMltcIm9yZGVyLWxnLVwiLmNvbmNhdChsZ09yZGVyKV0sIHhsT3JkZXIgJiYgc3R5bGVzJDJbXCJvcmRlci14bC1cIi5jb25jYXQoeGxPcmRlcildLCBzbSAmJiBzdHlsZXMkMltcImNvbC1zbS1cIi5jb25jYXQoc20pXSwgbWQgJiYgc3R5bGVzJDJbXCJjb2wtbWQtXCIuY29uY2F0KG1kKV0sIGxnICYmIHN0eWxlcyQyW1wiY29sLWxnLVwiLmNvbmNhdChsZyldLCB4bCAmJiBzdHlsZXMkMltcImNvbC14bC1cIi5jb25jYXQoeGwpXSwgdmlzaWJsZSAmJiBzdHlsZXMkMlsndmlzaWJsZSddLCBpbnZpc2libGUgJiYgc3R5bGVzJDJbJ2ludmlzaWJsZSddLCBjbGFzc05hbWVdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJylcbiAgfSwgcmVzdFByb3BzLCB7XG4gICAgcmVmOiByZWZcbiAgfSksIGNoaWxkcmVuKTtcbn0pO1xuXG52YXIgUmVuZGVyQXMgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhSZW5kZXJBcywgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoUmVuZGVyQXMpO1xuXG4gIGZ1bmN0aW9uIFJlbmRlckFzKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBSZW5kZXJBcyk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoUmVuZGVyQXMsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGFzID0gX3RoaXMkcHJvcHMuYXMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgW1wiYXNcIiwgXCJjaGlsZHJlblwiXSk7XG5cbiAgICAgIHZhciBUYWdOYW1lID0gYXM7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGFnTmFtZSwgcHJvcHMsIGNoaWxkcmVuKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gUmVuZGVyQXM7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgc3R5bGVzJDMgPSB7XCJkLW5vbmVcIjpcIlRleHQtbW9kdWxlX19kLW5vbmVcIixcImQtaW5saW5lXCI6XCJUZXh0LW1vZHVsZV9fZC1pbmxpbmVcIixcImQtaW5saW5lLWJsb2NrXCI6XCJUZXh0LW1vZHVsZV9fZC1pbmxpbmUtYmxvY2tcIixcImQtYmxvY2tcIjpcIlRleHQtbW9kdWxlX19kLWJsb2NrXCIsXCJkLXRhYmxlXCI6XCJUZXh0LW1vZHVsZV9fZC10YWJsZVwiLFwiZC10YWJsZS1yb3dcIjpcIlRleHQtbW9kdWxlX19kLXRhYmxlLXJvd1wiLFwiZC10YWJsZS1jZWxsXCI6XCJUZXh0LW1vZHVsZV9fZC10YWJsZS1jZWxsXCIsXCJkLWZsZXhcIjpcIlRleHQtbW9kdWxlX19kLWZsZXhcIixcImQtaW5saW5lLWZsZXhcIjpcIlRleHQtbW9kdWxlX19kLWlubGluZS1mbGV4XCIsXCJkLXNtLW5vbmVcIjpcIlRleHQtbW9kdWxlX19kLXNtLW5vbmVcIixcImQtc20taW5saW5lXCI6XCJUZXh0LW1vZHVsZV9fZC1zbS1pbmxpbmVcIixcImQtc20taW5saW5lLWJsb2NrXCI6XCJUZXh0LW1vZHVsZV9fZC1zbS1pbmxpbmUtYmxvY2tcIixcImQtc20tYmxvY2tcIjpcIlRleHQtbW9kdWxlX19kLXNtLWJsb2NrXCIsXCJkLXNtLXRhYmxlXCI6XCJUZXh0LW1vZHVsZV9fZC1zbS10YWJsZVwiLFwiZC1zbS10YWJsZS1yb3dcIjpcIlRleHQtbW9kdWxlX19kLXNtLXRhYmxlLXJvd1wiLFwiZC1zbS10YWJsZS1jZWxsXCI6XCJUZXh0LW1vZHVsZV9fZC1zbS10YWJsZS1jZWxsXCIsXCJkLXNtLWZsZXhcIjpcIlRleHQtbW9kdWxlX19kLXNtLWZsZXhcIixcImQtc20taW5saW5lLWZsZXhcIjpcIlRleHQtbW9kdWxlX19kLXNtLWlubGluZS1mbGV4XCIsXCJkLW1kLW5vbmVcIjpcIlRleHQtbW9kdWxlX19kLW1kLW5vbmVcIixcImQtbWQtaW5saW5lXCI6XCJUZXh0LW1vZHVsZV9fZC1tZC1pbmxpbmVcIixcImQtbWQtaW5saW5lLWJsb2NrXCI6XCJUZXh0LW1vZHVsZV9fZC1tZC1pbmxpbmUtYmxvY2tcIixcImQtbWQtYmxvY2tcIjpcIlRleHQtbW9kdWxlX19kLW1kLWJsb2NrXCIsXCJkLW1kLXRhYmxlXCI6XCJUZXh0LW1vZHVsZV9fZC1tZC10YWJsZVwiLFwiZC1tZC10YWJsZS1yb3dcIjpcIlRleHQtbW9kdWxlX19kLW1kLXRhYmxlLXJvd1wiLFwiZC1tZC10YWJsZS1jZWxsXCI6XCJUZXh0LW1vZHVsZV9fZC1tZC10YWJsZS1jZWxsXCIsXCJkLW1kLWZsZXhcIjpcIlRleHQtbW9kdWxlX19kLW1kLWZsZXhcIixcImQtbWQtaW5saW5lLWZsZXhcIjpcIlRleHQtbW9kdWxlX19kLW1kLWlubGluZS1mbGV4XCIsXCJkLWxnLW5vbmVcIjpcIlRleHQtbW9kdWxlX19kLWxnLW5vbmVcIixcImQtbGctaW5saW5lXCI6XCJUZXh0LW1vZHVsZV9fZC1sZy1pbmxpbmVcIixcImQtbGctaW5saW5lLWJsb2NrXCI6XCJUZXh0LW1vZHVsZV9fZC1sZy1pbmxpbmUtYmxvY2tcIixcImQtbGctYmxvY2tcIjpcIlRleHQtbW9kdWxlX19kLWxnLWJsb2NrXCIsXCJkLWxnLXRhYmxlXCI6XCJUZXh0LW1vZHVsZV9fZC1sZy10YWJsZVwiLFwiZC1sZy10YWJsZS1yb3dcIjpcIlRleHQtbW9kdWxlX19kLWxnLXRhYmxlLXJvd1wiLFwiZC1sZy10YWJsZS1jZWxsXCI6XCJUZXh0LW1vZHVsZV9fZC1sZy10YWJsZS1jZWxsXCIsXCJkLWxnLWZsZXhcIjpcIlRleHQtbW9kdWxlX19kLWxnLWZsZXhcIixcImQtbGctaW5saW5lLWZsZXhcIjpcIlRleHQtbW9kdWxlX19kLWxnLWlubGluZS1mbGV4XCIsXCJkLXhsLW5vbmVcIjpcIlRleHQtbW9kdWxlX19kLXhsLW5vbmVcIixcImQteGwtaW5saW5lXCI6XCJUZXh0LW1vZHVsZV9fZC14bC1pbmxpbmVcIixcImQteGwtaW5saW5lLWJsb2NrXCI6XCJUZXh0LW1vZHVsZV9fZC14bC1pbmxpbmUtYmxvY2tcIixcImQteGwtYmxvY2tcIjpcIlRleHQtbW9kdWxlX19kLXhsLWJsb2NrXCIsXCJkLXhsLXRhYmxlXCI6XCJUZXh0LW1vZHVsZV9fZC14bC10YWJsZVwiLFwiZC14bC10YWJsZS1yb3dcIjpcIlRleHQtbW9kdWxlX19kLXhsLXRhYmxlLXJvd1wiLFwiZC14bC10YWJsZS1jZWxsXCI6XCJUZXh0LW1vZHVsZV9fZC14bC10YWJsZS1jZWxsXCIsXCJkLXhsLWZsZXhcIjpcIlRleHQtbW9kdWxlX19kLXhsLWZsZXhcIixcImQteGwtaW5saW5lLWZsZXhcIjpcIlRleHQtbW9kdWxlX19kLXhsLWlubGluZS1mbGV4XCIsXCJkLXByaW50LW5vbmVcIjpcIlRleHQtbW9kdWxlX19kLXByaW50LW5vbmVcIixcImQtcHJpbnQtaW5saW5lXCI6XCJUZXh0LW1vZHVsZV9fZC1wcmludC1pbmxpbmVcIixcImQtcHJpbnQtaW5saW5lLWJsb2NrXCI6XCJUZXh0LW1vZHVsZV9fZC1wcmludC1pbmxpbmUtYmxvY2tcIixcImQtcHJpbnQtYmxvY2tcIjpcIlRleHQtbW9kdWxlX19kLXByaW50LWJsb2NrXCIsXCJkLXByaW50LXRhYmxlXCI6XCJUZXh0LW1vZHVsZV9fZC1wcmludC10YWJsZVwiLFwiZC1wcmludC10YWJsZS1yb3dcIjpcIlRleHQtbW9kdWxlX19kLXByaW50LXRhYmxlLXJvd1wiLFwiZC1wcmludC10YWJsZS1jZWxsXCI6XCJUZXh0LW1vZHVsZV9fZC1wcmludC10YWJsZS1jZWxsXCIsXCJkLXByaW50LWZsZXhcIjpcIlRleHQtbW9kdWxlX19kLXByaW50LWZsZXhcIixcImQtcHJpbnQtaW5saW5lLWZsZXhcIjpcIlRleHQtbW9kdWxlX19kLXByaW50LWlubGluZS1mbGV4XCIsXCJ0ZXh0LWRlZmF1bHRcIjpcIlRleHQtbW9kdWxlX190ZXh0LWRlZmF1bHRcIixcInRleHQtZGVmYXVsdC1zaXplXCI6XCJUZXh0LW1vZHVsZV9fdGV4dC1kZWZhdWx0LXNpemVcIixcInUtZm9udC1saW5rXCI6XCJUZXh0LW1vZHVsZV9fdS1mb250LWxpbmtcIixcInUtZm9udC1ib2R5XCI6XCJUZXh0LW1vZHVsZV9fdS1mb250LWJvZHlcIixcInUtZm9udC1ib2R5LWFsdFwiOlwiVGV4dC1tb2R1bGVfX3UtZm9udC1ib2R5LWFsdFwiLFwidS1mb250LWgxXCI6XCJUZXh0LW1vZHVsZV9fdS1mb250LWgxXCIsXCJ1LWZvbnQtaDJcIjpcIlRleHQtbW9kdWxlX191LWZvbnQtaDJcIixcInUtZm9udC1oM1wiOlwiVGV4dC1tb2R1bGVfX3UtZm9udC1oM1wiLFwidS1mb250LWg0XCI6XCJUZXh0LW1vZHVsZV9fdS1mb250LWg0XCIsXCJ1LWZvbnQtaDVcIjpcIlRleHQtbW9kdWxlX191LWZvbnQtaDVcIixcInUtZm9udC1oNlwiOlwiVGV4dC1tb2R1bGVfX3UtZm9udC1oNlwiLFwidS1mb250LWJvZHkteHhzbWFsbFwiOlwiVGV4dC1tb2R1bGVfX3UtZm9udC1ib2R5LXh4c21hbGxcIixcInUtZm9udC1idXR0b24tc21hbGxcIjpcIlRleHQtbW9kdWxlX191LWZvbnQtYnV0dG9uLXNtYWxsXCIsXCJ1LWZvbnQtYm9keS14c21hbGxcIjpcIlRleHQtbW9kdWxlX191LWZvbnQtYm9keS14c21hbGxcIixcInUtZm9udC1idXR0b25cIjpcIlRleHQtbW9kdWxlX191LWZvbnQtYnV0dG9uXCIsXCJ1LWZvbnQtYm9keS1zbWFsbFwiOlwiVGV4dC1tb2R1bGVfX3UtZm9udC1ib2R5LXNtYWxsXCIsXCJ1LWZvbnQtbGVhZFwiOlwiVGV4dC1tb2R1bGVfX3UtZm9udC1sZWFkXCIsXCJ1LWZvbnQtc3VwZXItaHVnZVwiOlwiVGV4dC1tb2R1bGVfX3UtZm9udC1zdXBlci1odWdlXCIsXCJ1LWZvbnQtd2VpZ2h0LTEwMFwiOlwiVGV4dC1tb2R1bGVfX3UtZm9udC13ZWlnaHQtMTAwXCIsXCJ1LWZvbnQtd2VpZ2h0LTMwMFwiOlwiVGV4dC1tb2R1bGVfX3UtZm9udC13ZWlnaHQtMzAwXCIsXCJ1LWZvbnQtd2VpZ2h0LTQwMFwiOlwiVGV4dC1tb2R1bGVfX3UtZm9udC13ZWlnaHQtNDAwXCIsXCJ1LWZvbnQtd2VpZ2h0LTYwMFwiOlwiVGV4dC1tb2R1bGVfX3UtZm9udC13ZWlnaHQtNjAwXCIsXCJ1LWZvbnQtd2VpZ2h0LTcwMFwiOlwiVGV4dC1tb2R1bGVfX3UtZm9udC13ZWlnaHQtNzAwXCIsXCJ1LWZvbnQtd2VpZ2h0LTgwMFwiOlwiVGV4dC1tb2R1bGVfX3UtZm9udC13ZWlnaHQtODAwXCIsXCJ1LWZvbnQtd2VpZ2h0LTkwMFwiOlwiVGV4dC1tb2R1bGVfX3UtZm9udC13ZWlnaHQtOTAwXCIsXCJ1LWZvbnQtY29sb3ItYWxhYmFzdGVyXCI6XCJUZXh0LW1vZHVsZV9fdS1mb250LWNvbG9yLWFsYWJhc3RlclwiLFwidS1mb250LWNvbG9yLWFwcmljb3RcIjpcIlRleHQtbW9kdWxlX191LWZvbnQtY29sb3ItYXByaWNvdFwiLFwidS1mb250LWNvbG9yLWJlcm11ZGEtZ3JheVwiOlwiVGV4dC1tb2R1bGVfX3UtZm9udC1jb2xvci1iZXJtdWRhLWdyYXlcIixcInUtZm9udC1jb2xvci1ibGFja1wiOlwiVGV4dC1tb2R1bGVfX3UtZm9udC1jb2xvci1ibGFja1wiLFwidS1mb250LWNvbG9yLWJsdWUtbmVwYWxcIjpcIlRleHQtbW9kdWxlX191LWZvbnQtY29sb3ItYmx1ZS1uZXBhbFwiLFwidS1mb250LWNvbG9yLWNoYXJjb2FsLWdyYXlcIjpcIlRleHQtbW9kdWxlX191LWZvbnQtY29sb3ItY2hhcmNvYWwtZ3JheVwiLFwidS1mb250LWNvbG9yLWRpc2NvdW50LWdyZWVuXCI6XCJUZXh0LW1vZHVsZV9fdS1mb250LWNvbG9yLWRpc2NvdW50LWdyZWVuXCIsXCJ1LWZvbnQtY29sb3ItZmFpbnQtZ3JheVwiOlwiVGV4dC1tb2R1bGVfX3UtZm9udC1jb2xvci1mYWludC1ncmF5XCIsXCJ1LWZvbnQtY29sb3ItZ2FsbGVyeVwiOlwiVGV4dC1tb2R1bGVfX3UtZm9udC1jb2xvci1nYWxsZXJ5XCIsXCJ1LWZvbnQtY29sb3ItZ3JheS1nZXlzZXJcIjpcIlRleHQtbW9kdWxlX191LWZvbnQtY29sb3ItZ3JheS1nZXlzZXJcIixcInUtZm9udC1jb2xvci1ncmVlbi1iYXktbGVhZlwiOlwiVGV4dC1tb2R1bGVfX3UtZm9udC1jb2xvci1ncmVlbi1iYXktbGVhZlwiLFwidS1mb250LWNvbG9yLWdyZWVuXCI6XCJUZXh0LW1vZHVsZV9fdS1mb250LWNvbG9yLWdyZWVuXCIsXCJ1LWZvbnQtY29sb3ItZ3JleS1icmlnaHRcIjpcIlRleHQtbW9kdWxlX191LWZvbnQtY29sb3ItZ3JleS1icmlnaHRcIixcInUtZm9udC1jb2xvci1saWdodC1ncmV5XCI6XCJUZXh0LW1vZHVsZV9fdS1mb250LWNvbG9yLWxpZ2h0LWdyZXlcIixcInUtZm9udC1jb2xvci1waW5rLXNlYVwiOlwiVGV4dC1tb2R1bGVfX3UtZm9udC1jb2xvci1waW5rLXNlYVwiLFwidS1mb250LWNvbG9yLXBpbmstc3VuZ2xvXCI6XCJUZXh0LW1vZHVsZV9fdS1mb250LWNvbG9yLXBpbmstc3VuZ2xvXCIsXCJ1LWZvbnQtY29sb3ItcGluay1zd2VldFwiOlwiVGV4dC1tb2R1bGVfX3UtZm9udC1jb2xvci1waW5rLXN3ZWV0XCIsXCJ1LWZvbnQtY29sb3ItcmVkXCI6XCJUZXh0LW1vZHVsZV9fdS1mb250LWNvbG9yLXJlZFwiLFwidS1mb250LWNvbG9yLXNhbmR5LWJyb3duXCI6XCJUZXh0LW1vZHVsZV9fdS1mb250LWNvbG9yLXNhbmR5LWJyb3duXCIsXCJ1LWZvbnQtY29sb3Itc2Vhc2hlbGxcIjpcIlRleHQtbW9kdWxlX191LWZvbnQtY29sb3Itc2Vhc2hlbGxcIixcInUtZm9udC1jb2xvci1zaHV0dGxlLWdyYXlcIjpcIlRleHQtbW9kdWxlX191LWZvbnQtY29sb3Itc2h1dHRsZS1ncmF5XCIsXCJ1LWZvbnQtY29sb3Itc2lsdmVyXCI6XCJUZXh0LW1vZHVsZV9fdS1mb250LWNvbG9yLXNpbHZlclwiLFwidS1mb250LWNvbG9yLXZlcnktbGlnaHQtZ3JleVwiOlwiVGV4dC1tb2R1bGVfX3UtZm9udC1jb2xvci12ZXJ5LWxpZ2h0LWdyZXlcIixcInUtZm9udC1jb2xvci13YXJtLWdyYXlcIjpcIlRleHQtbW9kdWxlX191LWZvbnQtY29sb3Itd2FybS1ncmF5XCIsXCJ1LWZvbnQtY29sb3Itd2hpdGUtc21va2VcIjpcIlRleHQtbW9kdWxlX191LWZvbnQtY29sb3Itd2hpdGUtc21va2VcIixcInUtZm9udC1jb2xvci13aGl0ZVwiOlwiVGV4dC1tb2R1bGVfX3UtZm9udC1jb2xvci13aGl0ZVwiLFwidS1mb250LWNvbG9yLXdpbGQtc2FuZC1ncmF5XCI6XCJUZXh0LW1vZHVsZV9fdS1mb250LWNvbG9yLXdpbGQtc2FuZC1ncmF5XCIsXCJ1LWZvbnQtY29sb3IteGFuZHUtZ3JlZW5cIjpcIlRleHQtbW9kdWxlX191LWZvbnQtY29sb3IteGFuZHUtZ3JlZW5cIixcInUtZm9udC1jb2xvci15ZWxsb3ctYWNjZW50XCI6XCJUZXh0LW1vZHVsZV9fdS1mb250LWNvbG9yLXllbGxvdy1hY2NlbnRcIixcInUtZm9udC1jb2xvci15ZWxsb3ctY2FzYWJsYW5jYVwiOlwiVGV4dC1tb2R1bGVfX3UtZm9udC1jb2xvci15ZWxsb3ctY2FzYWJsYW5jYVwiLFwidS1mb250LWNvbG9yLXllbGxvdy1jaGFtcGFnbmVcIjpcIlRleHQtbW9kdWxlX191LWZvbnQtY29sb3IteWVsbG93LWNoYW1wYWduZVwiLFwidS1mb250LWNvbG9yLXllbGxvdy1jaGVyb2tlZVwiOlwiVGV4dC1tb2R1bGVfX3UtZm9udC1jb2xvci15ZWxsb3ctY2hlcm9rZWVcIixcInUtZm9udC1jb2xvci15ZWxsb3ctZ29sZGVuXCI6XCJUZXh0LW1vZHVsZV9fdS1mb250LWNvbG9yLXllbGxvdy1nb2xkZW5cIixcInUtZm9udC1jb2xvci15ZWxsb3ctbW9jY2FzaW5cIjpcIlRleHQtbW9kdWxlX191LWZvbnQtY29sb3IteWVsbG93LW1vY2Nhc2luXCIsXCJ1LWZvbnQtY29sb3ItdHJhbnNwYXJlbnRcIjpcIlRleHQtbW9kdWxlX191LWZvbnQtY29sb3ItdHJhbnNwYXJlbnRcIn07XG5cbnZhciBnZXRGb250U2l6ZSA9IGZ1bmN0aW9uIGdldEZvbnRTaXplKGZvbnRTaXplKSB7XG4gIHN3aXRjaCAoZm9udFNpemUpIHtcbiAgICBjYXNlICdoMSc6XG4gICAgICByZXR1cm4gJ3UtZm9udC1oMSc7XG5cbiAgICBjYXNlICdoMic6XG4gICAgICByZXR1cm4gJ3UtZm9udC1oMic7XG5cbiAgICBjYXNlICdoMyc6XG4gICAgICByZXR1cm4gJ3UtZm9udC1oMyc7XG5cbiAgICBjYXNlICdoNCc6XG4gICAgICByZXR1cm4gJ3UtZm9udC1oNCc7XG5cbiAgICBjYXNlICdoNSc6XG4gICAgICByZXR1cm4gJ3UtZm9udC1oNSc7XG5cbiAgICBjYXNlICdoNic6XG4gICAgICByZXR1cm4gJ3UtZm9udC1oNic7XG5cbiAgICBjYXNlICdidXR0b24tc21hbGwnOlxuICAgIGNhc2UgJ2JvZHkteHNtYWxsJzpcbiAgICAgIHJldHVybiAndS1mb250LWJ1dHRvbi1zbWFsbCc7XG5cbiAgICBjYXNlICdib2R5LXh4c21hbGwnOlxuICAgICAgcmV0dXJuICd1LWZvbnQtYm9keS14eHNtYWxsJztcblxuICAgIGNhc2UgJ2J1dHRvbic6XG4gICAgY2FzZSAnYm9keS1zbWFsbCc6XG4gICAgICByZXR1cm4gJ3UtZm9udC1idXR0b24nO1xuXG4gICAgY2FzZSAnbGVhZCc6XG4gICAgICByZXR1cm4gJ3UtZm9udC1sZWFkJztcblxuICAgIGNhc2UgJ3N1cGVyLWh1Z2UnOlxuICAgICAgcmV0dXJuICd1LWZvbnQtc3VwZXItaHVnZSc7XG5cbiAgICBjYXNlICdsaW5rJzpcbiAgICAgIHJldHVybiAndS1mb250LWxpbmsnO1xuXG4gICAgY2FzZSAnYm9keSc6XG4gICAgY2FzZSAncmVndWxhcic6XG4gICAgICByZXR1cm4gJ3UtZm9udC1ib2R5JztcblxuICAgIGNhc2UgJ2JvZHktYWx0JzpcbiAgICAgIHJldHVybiAndS1mb250LWJvZHktYWx0JztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJ3RleHQtZGVmYXVsdC1zaXplJztcbiAgfVxufTtcblxudmFyIFRleHQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhUZXh0LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihUZXh0KTtcblxuICBmdW5jdGlvbiBUZXh0KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUZXh0KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhUZXh0LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICBhcyA9IF90aGlzJHByb3BzLmFzLFxuICAgICAgICAgIGZvbnRTaXplID0gX3RoaXMkcHJvcHMuZm9udFNpemUsXG4gICAgICAgICAgZm9udFdlaWdodCA9IF90aGlzJHByb3BzLmZvbnRXZWlnaHQsXG4gICAgICAgICAgY29sb3IgPSBfdGhpcyRwcm9wcy5jb2xvcixcbiAgICAgICAgICBtYXJnaW4gPSBfdGhpcyRwcm9wcy5tYXJnaW4sXG4gICAgICAgICAgc3R5bGUgPSBfdGhpcyRwcm9wcy5zdHlsZSxcbiAgICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgW1wiY2xhc3NOYW1lXCIsIFwiY2hpbGRyZW5cIiwgXCJhc1wiLCBcImZvbnRTaXplXCIsIFwiZm9udFdlaWdodFwiLCBcImNvbG9yXCIsIFwibWFyZ2luXCIsIFwic3R5bGVcIl0pO1xuXG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVuZGVyQXMsIF9leHRlbmRzKHtcbiAgICAgICAgYXM6IGFzLFxuICAgICAgICBjbGFzc05hbWU6IFtzdHlsZXMkM1sndGV4dC1kZWZhdWx0J10sIGZvbnRTaXplICYmIHN0eWxlcyQzW2dldEZvbnRTaXplKGZvbnRTaXplKV0sIGZvbnRXZWlnaHQgJiYgc3R5bGVzJDNbXCJ1LWZvbnQtd2VpZ2h0LVwiLmNvbmNhdChmb250V2VpZ2h0KV0sIGNvbG9yICYmIHN0eWxlcyQzW1widS1mb250LWNvbG9yLVwiLmNvbmNhdChjb2xvcildLCBjbGFzc05hbWVdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyksXG4gICAgICAgIHN0eWxlOiBtYXJnaW4gIT09IHVuZGVmaW5lZCA/IF9vYmplY3RTcHJlYWQyKHtcbiAgICAgICAgICBtYXJnaW46IG1hcmdpblxuICAgICAgICB9LCBzdHlsZSkgOiBzdHlsZVxuICAgICAgfSwgcHJvcHMpLCBjaGlsZHJlbik7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFRleHQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoVGV4dCwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBhczogJ3NwYW4nLFxuICBtYXJnaW46IHVuZGVmaW5lZFxufSk7XG5cbnZhciBzdHlsZXMkNCA9IHtcImNvbmZpcm1hdGlvblwiOlwiQ29uZmlybWF0aW9uLW1vZHVsZV9fY29uZmlybWF0aW9uXCJ9O1xuXG52YXIgQ29uZmlybWF0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoQ29uZmlybWF0aW9uLCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihDb25maXJtYXRpb24pO1xuXG4gIGZ1bmN0aW9uIENvbmZpcm1hdGlvbigpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29uZmlybWF0aW9uKTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhDb25maXJtYXRpb24sIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIFtcImNoaWxkcmVuXCJdKTtcblxuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRleHQsIF9leHRlbmRzKHtcbiAgICAgICAgYXM6IFwicFwiLFxuICAgICAgICBjb2xvcjogXCJ4YW5kdS1ncmVlblwiLFxuICAgICAgICBmb250U2l6ZTogXCJib2R5LXNtYWxsXCIsXG4gICAgICAgIGNsYXNzTmFtZTogc3R5bGVzJDQuY29uZmlybWF0aW9uXG4gICAgICB9LCBwcm9wcyksIGNoaWxkcmVuKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQ29uZmlybWF0aW9uO1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIHN0eWxlcyQ1ID0ge1wiY29udGFpbmVyXCI6XCJDb250YWluZXItbW9kdWxlX19jb250YWluZXJcIixcImNvbnRhaW5lci1mbHVpZFwiOlwiQ29udGFpbmVyLW1vZHVsZV9fY29udGFpbmVyLWZsdWlkXCIsXCJjb250YWluZXItc21hbGxcIjpcIkNvbnRhaW5lci1tb2R1bGVfX2NvbnRhaW5lci1zbWFsbFwiLFwiY29udGFpbmVyLW1lZGl1bVwiOlwiQ29udGFpbmVyLW1vZHVsZV9fY29udGFpbmVyLW1lZGl1bVwifTtcblxudmFyIENvbnRhaW5lciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKENvbnRhaW5lciwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoQ29udGFpbmVyKTtcblxuICBmdW5jdGlvbiBDb250YWluZXIoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENvbnRhaW5lcik7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoQ29udGFpbmVyLCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICBmbHVpZCA9IF90aGlzJHByb3BzLmZsdWlkLFxuICAgICAgICAgIHNtYWxsID0gX3RoaXMkcHJvcHMuc21hbGwsXG4gICAgICAgICAgbWVkaXVtID0gX3RoaXMkcHJvcHMubWVkaXVtLFxuICAgICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBbXCJjbGFzc05hbWVcIiwgXCJjaGlsZHJlblwiLCBcImZsdWlkXCIsIFwic21hbGxcIiwgXCJtZWRpdW1cIl0pO1xuXG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IFshZmx1aWQgJiYgc3R5bGVzJDVbJ2NvbnRhaW5lciddLCBmbHVpZCAmJiBzdHlsZXMkNVsnY29udGFpbmVyLWZsdWlkJ10sIHNtYWxsICYmIHN0eWxlcyQ1Wydjb250YWluZXItc21hbGwnXSwgbWVkaXVtICYmIHN0eWxlcyQ1Wydjb250YWluZXItbWVkaXVtJ10sIGNsYXNzTmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKVxuICAgICAgfSwgcHJvcHMpLCBjaGlsZHJlbik7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIENvbnRhaW5lcjtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbmZ1bmN0aW9uIG1lcmdlQ2xhc3NOYW1lcygpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGNsYXNzTmFtZXMgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgY2xhc3NOYW1lc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiBjbGFzc05hbWVzLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyk7XG59XG5cbnZhciBzdHlsZXMkNiA9IHtcImVycm9yXCI6XCJFcnJvci1tb2R1bGVfX2Vycm9yXCJ9O1xuXG52YXIgRXJyb3IkMSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEVycm9yLCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFcnJvcik7XG5cbiAgZnVuY3Rpb24gRXJyb3IoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEVycm9yKTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFcnJvciwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICBjb2xvciA9IF90aGlzJHByb3BzLmNvbG9yLFxuICAgICAgICAgIGZvbnRTaXplID0gX3RoaXMkcHJvcHMuZm9udFNpemUsXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBbXCJjaGlsZHJlblwiLCBcImNvbG9yXCIsIFwiZm9udFNpemVcIiwgXCJjbGFzc05hbWVcIl0pO1xuXG4gICAgICB2YXIgdGV4dENvbG9yID0gY29sb3IgfHwgJ3JlZCc7XG4gICAgICB2YXIgdGV4dEZvbnRTaXplID0gZm9udFNpemUgfHwgJ2JvZHkteHNtYWxsJztcbiAgICAgIHZhciBjbGFzc05hbWVzID0gbWVyZ2VDbGFzc05hbWVzKHN0eWxlcyQ2LmVycm9yLCBjbGFzc05hbWUpO1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRleHQsIF9leHRlbmRzKHtcbiAgICAgICAgY29sb3I6IHRleHRDb2xvcixcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzLFxuICAgICAgICBmb250U2l6ZTogdGV4dEZvbnRTaXplXG4gICAgICB9LCBwcm9wcyksIGNoaWxkcmVuKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXJyb3I7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAxMiAxM1wiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNNS40MjUgNS44MjVWMS4wMjZhLjY3NS42NzUgMCAxIDEgMS4zNSAwdjQuNzk5SDExYS42NzUuNjc1IDAgMCAxIDAgMS4zNUg2Ljc3NXY0LjMyN2EuNjc1LjY3NSAwIDAgMS0xLjM1IDBWNy4xNzVIMWEuNjc1LjY3NSAwIDEgMSAwLTEuMzVoNC40MjV6XCIsXG4gICAgICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JDEgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDMyIDI0XCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xMS4xOS4xYTEuMDY0IDEuMDY0IDAgMDAtLjkyOS43MzVMNy4xNzYgMTEuODE0SDEuNzE1Yy0uNTQzLS4wMTItMS4wMzcuNDgyLTEuMDM3IDEuMDI0IDAgLjUzLjQ5NCAxLjAyNSAxLjAzNyAxLjAxMmg2LjIzMmMuNDM0LjAxMi44NjgtLjMxMy45ODktLjczNUwxMS4xMyA1LjI3bDQuMDUgMTcuODQ4Yy4xMDkuNDMzLjUzLjc3MS45NzYuNzgzLjQ0Ny4wMTIuODgtLjMxMyAxLjAwMS0uNzQ3bDQuMTQ3LTE0Ljk5MiAyLjE1OCA1LjA3M2MuMTU2LjM2Mi41NDIuNjE1Ljk0LjYxNWg1Ljg5NWMuNTMuMDEyIDEuMDI1LS40ODIgMS4wMjUtMS4wMTIgMC0uNTQyLS40OTQtMS4wMzYtMS4wMjUtMS4wMjRoLTUuMjJsLTMuMDI2LTcuMTU5YTEuMDYxIDEuMDYxIDAgMDAtMS4wMTItLjYxNGMtLjQxLjAyNC0uNzk1LjMzNy0uOTE3Ljc0N2wtMy44NDUgMTMuOTJMMTIuMjM4Ljg4M0MxMi4xMy40MjYgMTEuNjYuMDc2IDExLjE5LjF6XCJcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCQyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAxNCAyMlwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNNS4wMyAxNi45OTV2My41MzNhLjUuNSAwIDAgMS0uNS41SDFhLjUuNSAwIDAgMS0uNS0uNVYxQS41LjUgMCAwIDEgMSAuNWgxMmEuNS41IDAgMCAxIC41LjV2MTkuNTI4YS41LjUgMCAwIDEtLjUuNUg5LjU3NmEuNS41IDAgMCAxLS41LS41di0zLjUzM2MtLjAwMi4wMDItLjAwNy4wMDMtLjAxNi4wMDNINS4wNDZjLS4wMDggMC0uMDEzIDAtLjAxNi0uMDAzem01LjA0Ni0uMDgzdjMuMTE2SDEyLjVWMS41aC0xMXYxOC41MjhoMi41M3YtMy4xMTZjMC0uNTMyLjQ3Ni0uOTE0IDEuMDE2LS45MTRIOS4wNmMuNTQgMCAxLjAxNi4zODIgMS4wMTYuOTE0ek05LjQxMSAxMS41Yy42MDEgMCAxLjA4OS40ODggMS4wODkgMS4wOXYuODJjMCAuNjAzLS40ODcgMS4wOS0xLjA5IDEuMDloLS44MmMtLjYwMyAwLTEuMDktLjQ4Ny0xLjA5LTEuMDl2LS44MmMwLS42MDIuNDg4LTEuMDkgMS4wOS0xLjA5aC44MnptMCAxaC0uODIyYS4wOS4wOSAwIDAgMC0uMDg5LjA5di44MmMwIC4wNS4wNC4wOS4wOS4wOWguODJjLjA1IDAgLjA5LS4wNC4wOS0uMDl2LS44MmEuMDkuMDkgMCAwIDAtLjA5LS4wOXptLTQtMWMuNjAxIDAgMS4wODkuNDg4IDEuMDg5IDEuMDl2LjgyYzAgLjYwMy0uNDg3IDEuMDktMS4wOSAxLjA5aC0uODJjLS42MDMgMC0xLjA5LS40ODctMS4wOS0xLjA5di0uODJjMC0uNjAyLjQ4OC0xLjA5IDEuMDktMS4wOWguODJ6bTAgMWgtLjgyMmEuMDkuMDkgMCAwIDAtLjA4OS4wOXYuODJjMCAuMDUuMDQuMDkuMDkuMDloLjgyYy4wNSAwIC4wOS0uMDQuMDktLjA5di0uODJhLjA5LjA5IDAgMCAwLS4wOS0uMDl6bTQtNWMuNjAxIDAgMS4wODkuNDg4IDEuMDg5IDEuMDl2LjgyYzAgLjYwMy0uNDg3IDEuMDktMS4wOSAxLjA5aC0uODJjLS42MDMgMC0xLjA5LS40ODctMS4wOS0xLjA5di0uODJjMC0uNjAyLjQ4OC0xLjA5IDEuMDktMS4wOWguODJ6bTAgMWgtLjgyMmEuMDkuMDkgMCAwIDAtLjA4OS4wOXYuODJjMCAuMDUuMDQuMDkuMDkuMDloLjgyYy4wNSAwIC4wOS0uMDQuMDktLjA5di0uODJhLjA5LjA5IDAgMCAwLS4wOS0uMDl6bS00LTFjLjYwMSAwIDEuMDg5LjQ4OCAxLjA4OSAxLjA5di44MmMwIC42MDMtLjQ4NyAxLjA5LTEuMDkgMS4wOWgtLjgyYy0uNjAzIDAtMS4wOS0uNDg3LTEuMDktMS4wOXYtLjgyYzAtLjYwMi40ODgtMS4wOSAxLjA5LTEuMDloLjgyem0wIDFoLS44MjJhLjA5LjA5IDAgMCAwLS4wODkuMDl2LjgyYzAgLjA1LjA0LjA5LjA5LjA5aC44MmMuMDUgMCAuMDktLjA0LjA5LS4wOXYtLjgyYS4wOS4wOSAwIDAgMC0uMDktLjA5em00LjA1LTVjLjYxMyAwIDEuMTEuNDk3IDEuMTEgMS4xMXYuODUxYTEuMTEgMS4xMSAwIDAgMS0xLjExIDEuMTFoLS44NUExLjExIDEuMTEgMCAwIDEgNy41IDUuNDYxdi0uODVjMC0uNjE0LjQ5Ny0xLjExMSAxLjExLTEuMTExaC44NTF6bTAgMWgtLjg1YS4xMS4xMSAwIDAgMC0uMTExLjExdi44NTFjMCAuMDYxLjA1LjExLjExLjExaC44NTFhLjExLjExIDAgMCAwIC4xMS0uMTF2LS44NWEuMTEuMTEgMCAwIDAtLjExLS4xMTF6bS00LjA1LTFjLjYwMSAwIDEuMDg5LjQ4OCAxLjA4OSAxLjA5di44MmMwIC42MDMtLjQ4NyAxLjA5LTEuMDkgMS4wOWgtLjgyYy0uNjAzIDAtMS4wOS0uNDg3LTEuMDktMS4wOXYtLjgyYzAtLjYwMi40ODgtMS4wOSAxLjA5LTEuMDloLjgyem0wIDFoLS44MjJhLjA5LjA5IDAgMCAwLS4wODkuMDl2LjgyYzAgLjA1LjA0LjA5LjA5LjA5aC44MmMuMDUgMCAuMDktLjA0LjA5LS4wOXYtLjgyYS4wOS4wOSAwIDAgMC0uMDktLjA5elwiLFxuICAgICAgICBmaWxsUnVsZTogXCJub256ZXJvXCJcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCQzID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAxNCAyMlwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk04LjgyNiAxNy4yNDh2My4yOGMwIC40MTQuMzM2Ljc1Ljc1Ljc1SDEzYS43NS43NSAwIDAgMCAuNzUtLjc1VjFBLjc1Ljc1IDAgMCAwIDEzIC4yNUgxQS43NS43NSAwIDAgMCAuMjUgMXYxOS41MjhjMCAuNDE0LjMzNi43NS43NS43NWgzLjUzYS43NS43NSAwIDAgMCAuNzUtLjc1di0zLjI4aDMuNTQ2em0xLjUtLjMzNmMwLS42ODQtLjU5OC0xLjE2NC0xLjI2Ni0xLjE2NEg1LjA0NmMtLjY2OCAwLTEuMjY2LjQ4LTEuMjY2IDEuMTY0djIuODY2SDEuNzVWMS43NWgxMC41djE4LjAyOGgtMS45MjR2LTIuODY2elwiLFxuICAgICAgICBmaWxsUnVsZTogXCJub256ZXJvXCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk05LjQxIDEyaC0uODJhLjU5LjU5IDAgMCAwLS41OS41OXYuODJjMCAuMzI2LjI2NC41OS41OS41OWguODJhLjU5LjU5IDAgMCAwIC41OS0uNTl2LS44MmEuNTkuNTkgMCAwIDAtLjU5LS41OXptLTQgMGgtLjgyYS41OS41OSAwIDAgMC0uNTkuNTl2LjgyYzAgLjMyNi4yNjQuNTkuNTkuNTloLjgyYS41OS41OSAwIDAgMCAuNTktLjU5di0uODJhLjU5LjU5IDAgMCAwLS41OS0uNTl6bTQtNGgtLjgyYS41OS41OSAwIDAgMC0uNTkuNTl2LjgyYzAgLjMyNi4yNjQuNTkuNTkuNTloLjgyYS41OS41OSAwIDAgMCAuNTktLjU5di0uODJBLjU5LjU5IDAgMCAwIDkuNDEgOHptLTQgMGgtLjgyYS41OS41OSAwIDAgMC0uNTkuNTl2LjgyYzAgLjMyNi4yNjQuNTkuNTkuNTloLjgyQS41OS41OSAwIDAgMCA2IDkuNDF2LS44MkEuNTkuNTkgMCAwIDAgNS40MSA4em00LjA1MS00aC0uODVBLjYxLjYxIDAgMCAwIDggNC42MXYuODUxYzAgLjMzNy4yNzMuNjEuNjEuNjFoLjg1MWEuNjEuNjEgMCAwIDAgLjYxLS42MXYtLjg1QS42MS42MSAwIDAgMCA5LjQ2MSA0ek01LjQxIDRoLS44MmEuNTkuNTkgMCAwIDAtLjU5LjU5di44MmMwIC4zMjYuMjY0LjU5LjU5LjU5aC44MkEuNTkuNTkgMCAwIDAgNiA1LjQxdi0uODJBLjU5LjU5IDAgMCAwIDUuNDEgNHpcIlxuICAgICAgfSkpKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCQ0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAxNCAxMFwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMTMuMTgyIDQuMzkySDIuNTk5bDIuOTE1LTIuOTE1YS42NzkuNjc5IDAgMCAwLS45Ni0uOTZMLjQ4IDQuNTlhLjY4MS42ODEgMCAwIDAtLjE5Ny40NzNjMCAuMDAyLS4wMDIuMDA0IDAgLjAwN2wuMDAxLjAxYzAgLjA4Ni4wMTguMTcuMDUxLjI1YS42NjYuNjY2IDAgMCAwIC4xNDMuMjE4bDQuMDc2IDQuMDc3YS42NzkuNjc5IDAgMSAwIC45Ni0uOTZMMi42IDUuNzVoMTAuNTgyYS42OC42OCAwIDEgMCAwLTEuMzU4elwiLFxuICAgICAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCQ1ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAxNCAxMFwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNLjk2IDQuMzkyaDEwLjU4M0w4LjYyOCAxLjQ3N2EuNjc5LjY3OSAwIDAgMSAuOTYtLjk2bDQuMDc0IDQuMDc0YS42ODEuNjgxIDAgMCAxIC4xOTcuNDczYzAgLjAwMi4wMDIuMDA0IDAgLjAwN2wtLjAwMS4wMWEuNjY2LjY2NiAwIDAgMS0uMTk0LjQ2OUw5LjU4OCA5LjYyNWEuNjc5LjY3OSAwIDEgMS0uOTYtLjk2bDIuOTE1LTIuOTE2SC45NmEuNjguNjggMCAxIDEgMC0xLjM1OHpcIixcbiAgICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkNiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMTIgMThcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCB7XG4gICAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICAgICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNNy43MTQgNy40OTZhLjUuNSAwIDEgMSAwIDFINC4yODZhLjUuNSAwIDEgMSAwLTFoMy40Mjh6TTcuNzE0IDEyLjc0M2EuNS41IDAgMSAxIDAgMUg0LjI4NmEuNS41IDAgMSAxIDAtMWgzLjQyOHpNMy45MjkgMS41di44MTJoLTF2LS44NzVjMC0uNTE0LjQxNC0uOTM3LjkyOC0uOTM3aDQuMjg2Yy41MTQgMCAuOTI4LjQyMy45MjguOTM3di44NzVoLTFWMS41SDMuOTN6XCIsXG4gICAgICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIlxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTYuNSA5Ljc0NWEuNS41IDAgMCAxLTEgMFY2LjI0N2EuNS41IDAgMSAxIDEgMHYzLjQ5OHpcIixcbiAgICAgICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMTEuNTcxIDEuODc0SC40M0EuNDM0LjQzNCAwIDAgMCAwIDIuMzEydjE0Ljg2NmMwIC4yNC4xOTIuNDM3LjQyOS40MzdIMTEuNTdhLjQzNC40MzQgMCAwIDAgLjQyOS0uNDM3VjIuMzEyYS40MzQuNDM0IDAgMCAwLS40MjktLjQzOHpNLjg1NyAxNi43NDFoMTAuMjg2VjIuNzQ5SC44NTdWMTYuNzR6XCJcbiAgICAgIH0pKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkNyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMTYgMThcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTcgMXYyYTEgMSAwIDEgMCAyIDBWMWExIDEgMCAxIDAtMiAwelwiXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNNS4zNTQgMTUuNzVIMWMtLjcyMSAwLTEuMDI3LS45MTktLjQ1LTEuMzUgMS41OTMtMS4xOTIgMi43LTQuMDQzIDIuNy02LjRWN2E0Ljc1IDQuNzUgMCAwIDEgOS41IDB2MWMwIDIuMzU3IDEuMTA3IDUuMjA4IDIuNyA2LjQuNTc3LjQzMS4yNzEgMS4zNS0uNDUgMS4zNWgtNC4zNTRhMi43NTIgMi43NTIgMCAwIDEtNS4yOTIgMHpNMTEuMjUgOFY3YTMuMjUgMy4yNSAwIDAgMC02LjUgMHYxYzAgMi4xMjYtLjc0NCA0LjU0OS0xLjk5MiA2LjI1SDZhLjc1Ljc1IDAgMCAxIC43NS43NSAxLjI1IDEuMjUgMCAwIDAgMi41IDAgLjc1Ljc1IDAgMCAxIC43NS0uNzVoMy4yNDJDMTEuOTk0IDEyLjU0OSAxMS4yNSAxMC4xMjYgMTEuMjUgOHpcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JDggPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xNi42MjUgMjIuMTM4Yy0uMTI1LjM5MjctLjM3MDkuNzM1OS0uNzAyNi45ODA1LS4zMzE3LjI0NDYtLjczMjMuMzc4MS0xLjE0NDQuMzgxNVYyMmguMDFsLjAwNCAxLjVjLS40MTAzLjAwMi0uODEwMi0uMTI4OC0xLjE0LS4zNzNsLTEuODkyLTEuMzg2LTEuOTAwOTkgMS4zOWMtLjI0NzAzLjE3ODctLjUzMzMzLjI5NTYtLjgzNDg2LjM0MDgtLjMwMTU0LjA0NTMtLjYwOTUzLjAxNzUtLjg5ODE0LS4wODA4LS4yODc1Ny0uMTAwMi0uNTQ4MTUtLjI2NTQtLjc2MTQ4LS40ODI3LS4yMTMzMy0uMjE3My0uMzczNjYtLjQ4MDktLjQ2ODUyLS43NzAzbC0uNzY0LTIuMzE2LTIuMzQ2LS4wNDRjLS4zMDY0My0uMDA3OC0uNjA2NjUtLjA4OC0uODc2MDgtLjIzNDItLjI2OTQyLS4xNDYyLS41MDAzNy0uMzU0MS0uNjczOTItLjYwNjgtLjE3MzUxLS4yNTE0LS4yODg4NS0uNTM4Mi0uMzM3NjMtLjgzOTctLjA0ODc4LS4zMDE1LS4wMjk3Ny0uNjEwMS4wNTU2My0uOTAzM2wuNjktMi4zN0wuNzYzMDEzIDEzLjMzYy0uMjM4OTgxLS4xOTA1LS40MzE3NjQtLjQzMjUtLjU2MzkwMi0uNzA4LS4xMzIxMzc0LS4yNzU2LS4yMDAyMDM2OC0uNTc3NC0uMTk5MDk3NzQtLjg4MyAwLS42MjIuMjc5OTk5NzQtMS4yMS43NjA5OTk3NC0xLjU5TDIuNjQ0MDEgOC42NTM5OWwtLjY5NC0yLjM4NzAxYy0uMDc5MDktLjI5MDY3LS4wOTMyMS0uNTk1MTktLjA0MTM2LS44OTE5My4wNTE4NS0uMjk2NzUuMTY4MzktLjU3ODQzLjM0MTM2LS44MjUwNy4xNzM2MS0uMjQ4ODIuNDAzMjMtLjQ1MzM4LjY3MDM3LS41OTcyLjI2NzE1LS4xNDM4Mi41NjQzNC0uMjIyODcuODY3NjMtLjIzMDhsMi4zMjctLjA0NC43ODEtMi4zMTdjLjA5NDQtLjI5MTM3LjI1NTE4LS41NTY4NS40Njk2Ny0uNzc1NTAyLjIxNDQ5LS4yMTg2NTMuNDc2ODItLjM4NDUwNy43NjYzMy0uNDg0NDk0LjU5LS4xOTk5OTk1IDEuMjM3LS4wOTk5OTk1NyAxLjc0Ny4yNzRMMTEuNzY0IDEuNzc0OTggMTMuNjU5LjM4Njk4NGMuNS0uMzYyOTk5NSAxLjE0LS40NjQ5OTk1IDEuNzI0LS4yNy4yODg3LjA5Nzc1OC41NTA5LjI2MDc2MS43NjYzLjQ3NjM0Mi4yMTU0LjIxNTU4LjM3ODIuNDc3OTM0LjQ3NTcuNzY2NjU0bC43NjQgMi4zMTYgMi4zMjUuMDQ1Yy4zMDY0LjAwNzY1LjYwNjUuMDg3NzYuODc1OS4yMzM3Ny4yNjk1LjE0Ni41MDA1LjM1Mzc1LjY3NDEuNjA2MjMuMzUxLjUwNi40NTUgMS4xNDkuMjgyIDEuNzQzbC0uNjkgMi4zNyAxLjg4MSAxLjQ5NDAyYy40ODIuMzgxLjc2My45Ny43NjMgMS41OTEgMCAuNjIyLS4yOCAxLjIxLS43NjEgMS41OWwtMS44ODMgMS40OTUuNjk0IDIuMzgzYy4xNTkuNTgzLjA1MyAxLjIxLS4yODkgMS43MDUtLjE3MTQuMjQ5OS0uMzk4OC40NTY1LS42NjQxLjYwMzItLjI2NTIuMTQ2Ny0uNTYxLjIyOTUtLjg2MzkuMjQxOGwtMi4zMjcuMDQ0LS43ODEgMi4zMTZ2LjAwMXptLTEuNDIzLS40NzRsMS4xMi0zLjMyMi41MjgtLjAxIDIuODM2LS4wNTRjLjA2ODItLjAwNDIuMTM0NS0uMDI0MS4xOTM3LS4wNTgzLjA1OTItLjAzNDIuMTA5Ni0uMDgxNy4xNDczLS4xMzg3LjA0NDEtLjA2NDUuMDczOS0uMTM3Ni4wODc2LS4yMTQ1LjAxMzYtLjA3NjkuMDEwNy0uMTU1OC0uMDA4Ni0uMjMxNWwtLjk3MS0zLjMzOC4zOTQtLjMxMyAyLjI3OS0xLjgxYy4wNjExLS4wNTAyLjExLS4xMTM0LjE0MzMtLjE4NTEuMDMzMi0uMDcxNy4wNDk5LS4xNDk5LjA0ODctLjIyODkuMDAwOC0uMDc5Mi0uMDE2Mi0uMTU3NS0uMDQ5OC0uMjI5MS0uMDMzNS0uMDcxNy0uMDgyOC0uMTM0OS0uMTQ0Mi0uMTg0OWwtMi42NzEtMi4xMjIwMi4xNC0uNDg0LjgzLTIuODU0Yy4wMjMxLS4wNzg1Ny4wMjg1LS4xNjEyNi4wMTU4LS4yNDIxNi0uMDEyNi0uMDgwOS0uMDQyOS0uMTU4MDItLjA4ODgtLjIyNTg0LS4wMzgzLS4wNTc5OS0uMDg5OC0uMTA2MDctLjE1MDMtLjE0MDMxLS4wNjA1LS4wMzQyNS0uMTI4Mi0uMDUzNjctLjE5NzctLjA1NjY5bC0zLjM4Ni0uMDY0LS4xNjctLjUwNS0uOTI2LTIuODFjLS4wMjI3LS4wNjkwMi0uMDYxLS4xMzE5My0uMTExOC0uMTgzOTItLjA1MDctLjA1MTk5LS4xMTI3LS4wOTE3LS4xODEyLS4xMTYwOC0uMDYxOC0uMDIwNjYtLjEyNzctLjAyNjE4LS4xOTIxLS4wMTYwOC0uMDY0My4wMTAwOS0uMTI1NC4wMzU1LS4xNzc5LjA3NDA4bC0yLjc4NSAyLjAzOC0uNDQ0LS4zMy0yLjMyMjk5LTEuNzI2Yy0uMDUzMDMtLjAzOTg5LS4xMTUwMS0uMDY2MjItLjE4MDU1LS4wNzY2OC0uMDY1NTMtLjAxMDQ1LS4xMzI2My0uMDA0NzMtLjE5NTQ1LjAxNjY4LS4wNjk5LjAyNTg0LS4xMzI4NC4wNjc1Ni0uMTgzODYuMTIxODctLjA1MTAzLjA1NDMyLS4wODg3My4xMTk3NS0uMTEwMTQuMTkxMTNsLTEuMTIgMy4zMjItLjUyOC4wMS0yLjg1Mi4wNTRjLS4wNjg0Ny4wMDI4Ny0uMTM1My4wMjE4NS0uMTk1MDcuMDU1MzgtLjA1OTc3LjAzMzUzLS4xMTA3OS4wODA2OC0uMTQ4OTMuMTM3NjItLjA0NDY4LjA2NDM4LS4wNzQ5Ni4xMzc2My0uMDg4NzcuMjE0NzgtLjAxMzgxLjA3NzE0LS4wMTA4MS4xNTYzNS4wMDg3Ny4yMzIyMmwuOTcgMy4zNDEtLjM5NC4zMTMwMS0yLjI3OSAxLjgxMDAxYy0uMDYxMDQuMDUwMS0uMTA5OTkuMTEzNC0uMTQzMjMuMTg1MS0uMDMzMjQuMDcxNy0uMDQ5OTEuMTQ5OS0uMDQ4NzcuMjI4OSAwIC4xNjYuMDczLjMxOS4xOTQuNDE0bDIuNjcxIDIuMTIyLS4xNC40ODQtLjgzIDIuODU0Yy0uMDIzMDQuMDc4Ni0uMDI4NDQuMTYxMi0uMDE1ODMuMjQyMS4wMTI2Mi4wODA5LjA0Mjk2LjE1ODEuMDg4ODMuMjI1OS4wMzgzMy4wNTguMDg5ODQuMTA2MS4xNTAzMy4xNDAzLjA2MDQ5LjAzNDIuMTI4MjMuMDUzNy4xOTc2Ny4wNTY3bDMuNDA3LjA2NC4xNjcuNTA1LjkzIDIuODE4Yy4wNS4xNS4xNTkuMjYxLjI5LjMwNi4wNjExOC4wMjExLjEyNjU1LjAyNzMuMTkwNTkuMDE3OS4wNjQwNC0uMDA5NC4xMjQ4OS0uMDM0MS4xNzc0MS0uMDcxOWwyLjc4Mjk5LTIuMDM1LjQ0My4zMjQgMi4zMzggMS43MTNjLjA2ODkuMDUyMS4xNTI3LjA4MDUuMjM5LjA4MS4xODMtLjAwMS4zNTMtLjEzLjQyMS0uMzM2aC0uMDAxem0tLjQxNCAxLjA4NnYuNzVoLS4wMVYyMmguMDAzbC4wMDcuNzV6bS00LjQ5NC0xMC4zOTJsMy4yOTUtMy42MTIwMWMuMDk1NS0uMTAyNzUuMjExMi0uMTg0NjUuMzM5OS0uMjQwNTYuMTI4Ny0uMDU1OTEuMjY3NS0uMDg0NjIuNDA3OC0uMDg0MzQuMTQwMy4wMDAyOC4yNzkuMDI5NTUuNDA3NC4wODU5OC4xMjg0LjA1NjQyLjI0MzguMTM4NzguMzM4OS4yNDE5MS4xOTQuMjEuMzAyLjQ5Mi4zMDIuNzg2IDAgLjI5NC0uMTA4LjU3NzAyLS4zLjc4NTAybC00LjAxNyA0LjQwOWMtLjA5NTQuMTA4OC0uMjEyNi4xOTYzLS4zNDQxLjI1NjgtLjEzMTUuMDYwNS0uMjc0Mi4wOTI2LS40MTg5LjA5NDItLjE0MDItLjAwMDEtLjI3ODktLjAzLS40MDY3Ny0uMDg3NS0uMTI3ODktLjA1NzYtLjI0MjE0LS4xNDE2LS4zMzUyMi0uMjQ2NWwtMS45OC0yLjE2NmMtLjE0ODkxLS4xNTk2LS4yNTAyNy0uMzU3Ny0uMjkyNjgtLjU3MTgtLjA0MjQtLjIxNDItLjAyNDE2LS40MzU5LjA1MjY4LS42NDAyLjE2LS40MjYuNTQ4LS43MDYuOTc1LS42OTguMTQwMjUuMDAwMi4yNzg4Ni4wMy40MDY3NS4wODc2LjEyNzg4LjA1NzUuMjQyMTQuMTQxNS4zMzUyNS4yNDY0bDEuMjMzOTkgMS4zNTR6XCIsXG4gICAgICAgIGZpbHRlcjogXCJ1cmwoI2ZpbHRlcjBfZClcIlxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGVmc1wiLCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImZpbHRlclwiLCB7XG4gICAgICAgIGlkOiBcImZpbHRlcjBfZFwiLFxuICAgICAgICB4OiAtODAsXG4gICAgICAgIHk6IC0xMixcbiAgICAgICAgd2lkdGg6IDEwMy41LFxuICAgICAgICBoZWlnaHQ6IDEwMy41LFxuICAgICAgICBmaWx0ZXJVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICBjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiBcInNSR0JcIlxuICAgICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmZUZsb29kXCIsIHtcbiAgICAgICAgZmxvb2RPcGFjaXR5OiAwLFxuICAgICAgICByZXN1bHQ6IFwiQmFja2dyb3VuZEltYWdlRml4XCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImZlQ29sb3JNYXRyaXhcIiwge1xuICAgICAgICBcImluXCI6IFwiU291cmNlQWxwaGFcIixcbiAgICAgICAgdmFsdWVzOiBcIjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwXCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImZlT2Zmc2V0XCIsIHtcbiAgICAgICAgZHg6IC00MCxcbiAgICAgICAgZHk6IDI4XG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmZUdhdXNzaWFuQmx1clwiLCB7XG4gICAgICAgIHN0ZERldmlhdGlvbjogMjBcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImZlQ29sb3JNYXRyaXhcIiwge1xuICAgICAgICB2YWx1ZXM6IFwiMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4xOCAwXCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImZlQmxlbmRcIiwge1xuICAgICAgICBpbjI6IFwiQmFja2dyb3VuZEltYWdlRml4XCIsXG4gICAgICAgIHJlc3VsdDogXCJlZmZlY3QxX2Ryb3BTaGFkb3dcIlxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZmVCbGVuZFwiLCB7XG4gICAgICAgIFwiaW5cIjogXCJTb3VyY2VHcmFwaGljXCIsXG4gICAgICAgIGluMjogXCJlZmZlY3QxX2Ryb3BTaGFkb3dcIixcbiAgICAgICAgcmVzdWx0OiBcInNoYXBlXCJcbiAgICAgIH0pKSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JDkgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDIzIDE4XCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICAgICAgICBmaWxsUnVsZTogXCJub256ZXJvXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTEuNDM0IDE3LjIzNWEuNS41IDAgMSAxLS44NjgtLjQ5N0MyLjkzOCAxMi42MDQgNy42NCA4LjMzMiAxNS4wOTggNS4yMWEuNS41IDAgMSAxIC4zODYuOTIyQzguMjM0IDkuMTY4IDMuNjk4IDEzLjI5IDEuNDM0IDE3LjIzNXpcIlxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTkuNyA1LjU2MmEuNS41IDAgMCAxIC45NzYuMjJMMTAgOC43N2EuNS41IDAgMCAxLS45NzYtLjIyTDkuNyA1LjU2MnpcIlxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTMuNjQzIDQuNDQ3Yy0xLjYyIDEuNjIyLTEuNjg5IDMuNjQ3LS45NiA1LjU1MWEuNS41IDAgMCAxLS45MzMuMzU4Qy44OTUgOC4xMjQuOTc4IDUuNzAyIDIuOTM1IDMuNzQgNS43NS45MTggMTEuOTY3LS4xOTIgMjIuNDI0LjkyNmEuNS41IDAgMCAxIC40NC41NzMgMTIuMjMgMTIuMjMgMCAwIDEtLjEwNi41NzFjLS4wOTIuNDQ2LS4yMTEuOTQtLjM2IDEuNDczYTIyLjU3MSAyMi41NzEgMCAwIDEtMS43NSA0LjQ3Yy0yLjY5NCA1LjEwNS02Ljg5NSA3LjY3Ny0xMi44MjcgNi4yMzJhLjUuNSAwIDEgMSAuMjM2LS45NzJjNS40MjkgMS4zMjMgOS4yMDctLjk5IDExLjcwNi01LjcyN2EyMS41ODggMjEuNTg4IDAgMCAwIDEuNjcyLTQuMjdjLjE0Mi0uNTExLjI1Ni0uOTg0LjM0My0xLjQwOC05Ljg1NS0uOTk4LTE1LjYzMy4wNy0xOC4xMzUgMi41Nzl6XCJcbiAgICAgIH0pKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkYSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMjQgMThcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTEuNjUgMTcuMzZjMi4yMzgtMy45IDYuNzMyLTcuOTg0IDEzLjkzLTEwLjk5NmEuNzUuNzUgMCAxIDAtLjU3OC0xLjM4NEM3LjQ5MiA4LjEyMyAyLjc0OCAxMi40MzMuMzQ5IDE2LjYxM2EuNzUuNzUgMCAwIDAgMS4zMDEuNzQ3elwiXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNOS40NTYgNS41MDZsLS42NzUgMi45ODdhLjc1Ljc1IDAgMCAwIDEuNDYzLjMzMWwuNjc2LTIuOTg3YS43NS43NSAwIDEgMC0xLjQ2NC0uMzN6XCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0yMS4xOTQgMy4yMDhhMjEuMzQyIDIxLjM0MiAwIDAgMS0xLjY1MiA0LjIyMWMtMi40NSA0LjY0NS02LjEyMyA2Ljg5My0xMS40MjYgNS42MDFhLjc1Ljc1IDAgMSAwLS4zNTUgMS40NThjNi4wNTggMS40NzYgMTAuMzY1LTEuMTYxIDEzLjEwOC02LjM1OWEyMi44MTcgMjIuODE3IDAgMCAwIDEuNzctNC41MTljLjE1LS41MzguMjctMS4wMzguMzY0LTEuNDg5LjA1Ni0uMjc0LjA5Mi0uNDczLjEwOS0uNTg0YS43NS43NSAwIDAgMC0uNjYyLS44NkMxMS45MjYtLjQ0OCA1LjY0LjY3NCAyLjc1OCAzLjU2NC43MTYgNS42MS42MyA4LjEzIDEuNTE3IDEwLjQ0NmEuNzUuNzUgMCAwIDAgMS40LS41MzdjLS42OTgtMS44MjItLjYzMi0zLjc0OC45MDMtNS4yODYgMi40MTMtMi40MiA4LjAzOC0zLjQ3OCAxNy42NTYtMi41MzgtLjA3Ny4zNDctLjE3LjcyNC0uMjgyIDEuMTIzelwiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkYiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMTAgMTBcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICAgICAgY3g6IDE1LFxuICAgICAgICBjeTogMjIsXG4gICAgICAgIHI6IDUsXG4gICAgICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoLTEwIC0xNylcIixcbiAgICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkYyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMjAgMTZcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCB7XG4gICAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICAgICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMTkuNSAySC41Yy0uMjc1IDAtLjUuMjI1LS41LjV2MTNjMCAuMjc1LjIyNS41LjUuNWgxOWMuMjc0IDAgLjUtLjIyNS41LS41di0xM2MwLS4yNzUtLjIyNi0uNS0uNS0uNXpNMSAxNWgxOFYzSDF2MTJ6XCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0zLjUgMWEuNS41IDAgMCAxIDEgMHYzYS41LjUgMCAwIDEtMSAwVjF6TTkuNSAxYS41LjUgMCAwIDEgMSAwdjNhLjUuNSAwIDEgMS0xIDBWMXpNMTUuNSAxYS41LjUgMCAxIDEgMSAwdjNhLjUuNSAwIDEgMS0xIDBWMXpcIixcbiAgICAgICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiXG4gICAgICB9KSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JGQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDI1IDEyXCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xNS45ODQgMS45MWMuMjE4LjEzOC4zODguMjU0Ljc2LjUxNWwuMDEzLjAxYy43ODIuNTQ4IDEuMTM1Ljc2NCAxLjU2LjkyNS4yNjUuMS41MDkuMTU3IDEuMDM0LjI1N2wuMDMuMDA1Yy4xNjIuMDMuMjM2LjA0NS4zMjguMDY0IDEuMjE2LjI0NSAyLjMzNS42NDUgMy4zNiAxLjIyNC40ODUuMjc0LjgwOC41MjMgMS4wODcuOTA2LjMyLjQ0LjQ1MSAxLjAwMS40NjcgMS42NzIuMDIzLjkyNy0xLjAxMyAyLjUwMy0xLjc5IDIuNjUyLS4zNzkuMDczLTEuMDQ0LjA4My0xLjY0My4wNTNhMi41NyAyLjU3IDAgMCAxLTQuMDE2LS4xODdsLTguNzkzLS4zN2EyLjU3MyAyLjU3MyAwIDAgMS00LjY5NS0uMTgzbC0uMjY3LjAwNWMtLjM2My4wMDktLjUyMy4wMS0uNzMyLjAwM2E0LjYgNC42IDAgMCAxLTEuMTY2LS4xNzJDLjk5IDkuMTM0LjYyMyA4LjkwMi40IDguMzk5LjIyNiA4LjAwMi4yMiA3LjQ3My4yOTYgNi44NzNsLjAzNi0uMjk4LjA0OC0uMzg2Yy4wNDQtLjM2MS4wNjYtLjY3NS4xMDYtMS40LjA0Mi0uNzU5LjA2NS0xLjA5My4xMTUtMS41YS43NS43NSAwIDAgMSAuNy0uNjU3Yy44MjYtLjA1IDIuMDMzLS4zODYgMi44NzctLjc5NCA0LjI5Ni0yLjA3OCA4LjI1Ni0yLjE5IDExLjgwNi4wNzF6TTYuMSA5LjdhMS4yIDEuMiAwIDEgMCAwLTIuNCAxLjIgMS4yIDAgMCAwIDAgMi40em0xMy4yIDBhMS4yIDEuMiAwIDEgMCAwLTIuNCAxLjIgMS4yIDAgMCAwIDAgMi40ek00LjgzMSAzLjE4OGMtLjgxNS4zOTQtMS44NzcuNzIyLTIuNzk3Ljg2OC0uMDE2LjIxLS4wMy40NjUtLjA1LjgxNmEyMC43MSAyMC43MSAwIDAgMS0uMTE1IDEuNWwtLjA0OC4zODYtLjAzNy4yOThjLS4wNC4zMy0uMDM4LjY3Ny0uMDExLjczN2ExIDEgMCAwIDAgLjE2Ny4wNTZjLjIzOC4wNjkuNDg4LjEwMy43OTUuMTEzLjE3My4wMDYuMzE1LjAwNC42NS0uMDAzbC4xNzUtLjAwNGEyLjU3NCAyLjU3NCAwIDAgMSA1LjA2NC4xOWw4LjA2LjMzOC4wMDUtLjE1YTIuNTczIDIuNTczIDAgMSAxIDUuMTMzLjM3NWMuMjIyIDAgLjQyNS0uMDA2LjU3Ny0uMDJsLjA4LS4wMS0uMDEzLS4wMDFjLS4wMDctLjAwNC4wMDQtLjAxNS4wMjEtLjAzMy4wOTQtLjA5NS4yMDMtLjIzMy4zMDQtLjM4OC4yMDYtLjMxMy4zMzUtLjYyOC4zMzMtLjczMi0uMDEtLjM5My0uMDc3LS42ODMtLjE4LS44MjQtLjEyNy0uMTc0LS4yOTgtLjMwNi0uNjEzLS40ODQtLjg4MS0uNDk4LTEuODUxLS44NDQtMi45MTktMS4wNmEyMy4yOCAyMy4yOCAwIDAgMC0uMzEtLjA2bC0uMDMtLjAwNmMtLjYwOC0uMTE1LS45MTItLjE4Ny0xLjI4My0uMzI3LS41ODQtLjIyLTEuMDA2LS40NzktMS44OTMtMS4xbC0uMDEzLS4wMWExNy45NzYgMTcuOTc2IDAgMCAwLS43MDUtLjQ3OGMtMy4wNjQtMS45NTMtNi40ODMtMS44NTYtMTAuMzQ3LjAxM3pcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDIwIDE0XCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICAgICAgICBmaWxsUnVsZTogXCJub256ZXJvXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTE5IDFIMXYxMmgxOFYxem0uNS0xYy4yNzQgMCAuNS4yMjUuNS41djEzYzAgLjI3NS0uMjI2LjUtLjUuNUguNWEuNTAxLjUwMSAwIDAgMS0uNS0uNVYuNUMwIC4yMjUuMjI1IDAgLjUgMGgxOXpcIlxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTEgOS4zNzVhLjM3NS4zNzUgMCAwIDEgMC0uNzVoMThhLjM3NS4zNzUgMCAxIDEgMCAuNzVIMXpcIlxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTEgOS41YS41LjUgMCAwIDEgMC0xaDE4YS41LjUgMCAxIDEgMCAxSDF6TTUgNS41YS41LjUgMCAwIDEgMC0xaDRhLjUuNSAwIDAgMSAwIDFINXpcIlxuICAgICAgfSkpKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCRmID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAxNiAyMFwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk04LjUgMTlhLjUuNSAwIDEgMS0xIDB2LTlhLjUuNSAwIDAgMSAxIDB2OXptMC0xMWEuNS41IDAgMCAxLTEgMFY3YS41LjUgMCAwIDEgMSAwdjF6XCIsXG4gICAgICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIlxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTEgMTloMTR2LjM3NUgxelwiXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMSAxOS41YS41LjUgMCAxIDEgMC0xaDE0YS41LjUgMCAxIDEgMCAxSDF6TTQuNSA1YS41LjUgMCAwIDEgMC0xaDdhLjUuNSAwIDEgMSAwIDFoLTd6XCIsXG4gICAgICAgIGZpbGw6IFwiIzJDM0I0NVwiLFxuICAgICAgICBmaWxsUnVsZTogXCJub256ZXJvXCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk00LjUgMTAuNUEuNS41IDAgMCAxIDQgMTBWMWEuNS41IDAgMCAxIC41LS41aDdhLjUuNSAwIDAgMSAuNS41djlhLjUuNSAwIDAgMS0uNS41aC03em0uNS0xaDZ2LThINXY4elwiLFxuICAgICAgICBmaWxsUnVsZTogXCJub256ZXJvXCJcbiAgICAgIH0pKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkZyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMTQgMjBcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTkuOS4yNWEuNzUuNzUgMCAwIDEgLjc1Ljc1djlhLjc1Ljc1IDAgMCAxLS43NS43NUg3Ljc1djcuNjY2SDEzYS43NS43NSAwIDAgMSAuNzQzLjY0OWwuMDA3LjEwMmEuNzUuNzUgMCAwIDEtLjY0OC43NDNsLS4xMDIuMDA3SDFhLjc1Ljc1IDAgMCAxLS4xMDItMS40OTNMMSAxOC40MTdsNS4yNS0uMDAxVjEwLjc1SDMuOWEuNzUuNzUgMCAwIDEtLjc0My0uNjQ4TDMuMTUgMTBWMUEuNzUuNzUgMCAwIDEgMy45LjI1em0tLjc1IDEuNWgtNC41djcuNWg0LjV2LTcuNXpNNyA1LjI1YS43NS43NSAwIDAgMSAuNzQzLjY0OEw3Ljc1IDZ2MWEuNzUuNzUgMCAwIDEtMS40OTMuMTAyTDYuMjUgN1Y2QS43NS43NSAwIDAgMSA3IDUuMjV6XCJcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCRoID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAyMiAyMlwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMTEgMGM2LjA3NSAwIDExIDQuOTI1IDExIDExcy00LjkyNSAxMS0xMSAxMVMwIDE3LjA3NSAwIDExIDQuOTI1IDAgMTEgMHptMCAxQzUuNDc3IDEgMSA1LjQ3NyAxIDExczQuNDc3IDEwIDEwIDEwIDEwLTQuNDc3IDEwLTEwUzE2LjUyMyAxIDExIDF6bTAgMTJhMyAzIDAgMTEwIDYgMyAzIDAgMDEwLTZ6bS0uMDAxIDMuMzUzbC0xLjU4MSAxLjU4M2MuNDMxLjM1Mi45ODIuNTY0IDEuNTgyLjU2NC42IDAgMS4xNTEtLjIxMiAxLjU4Mi0uNTY0bC0xLjU4My0xLjU4M3ptLTEuOTM1LTEuOTM1QTIuNDkgMi40OSAwIDAwOC41IDE2YzAgLjYuMjEyIDEuMTUxLjU2NCAxLjU4MkwxMC42NDYgMTZsLTEuNTgyLTEuNTgyem0zLjg3MiAwbC0xLjU4MyAxLjU4MSAxLjU4MyAxLjU4M0EyLjQ5IDIuNDkgMCAwMDEzLjUgMTZjMC0uNi0uMjEyLTEuMTUxLS41NjQtMS41ODJ6TTExIDEzLjVjLS42IDAtMS4xNTEuMjEyLTEuNTgyLjU2NEwxMSAxNS42NDZsMS41ODItMS41ODJBMi40OSAyLjQ5IDAgMDAxMSAxMy41ek0xNiA4YTMgMyAwIDExMCA2IDMgMyAwIDAxMC02ek02IDhhMyAzIDAgMTEwIDYgMyAzIDAgMDEwLTZ6bTEwIDFhMiAyIDAgMTAwIDQgMiAyIDAgMDAwLTR6TTYgOWEyIDIgMCAxMDAgNCAyIDIgMCAwMDAtNHptNS02YTMgMyAwIDExMCA2IDMgMyAwIDAxMC02em0tLjAwMSAzLjM1M0w5LjQxOCA3LjkzNmMuNDMxLjM1Mi45ODIuNTY0IDEuNTgyLjU2NC42IDAgMS4xNTEtLjIxMiAxLjU4Mi0uNTY0bC0xLjU4My0xLjU4M3pNOS4wNjQgNC40MThBMi40OSAyLjQ5IDAgMDA4LjUgNmMwIC42LjIxMiAxLjE1MS41NjQgMS41ODJMMTAuNjQ2IDYgOS4wNjQgNC40MTh6bTMuODcyIDBsLTEuNTgzIDEuNTgxIDEuNTgzIDEuNTgzQTIuNDkgMi40OSAwIDAwMTMuNSA2YzAtLjYtLjIxMi0xLjE1MS0uNTY0LTEuNTgyek0xMSAzLjVjLS42IDAtMS4xNTEuMjEyLTEuNTgyLjU2NEwxMSA1LjY0NmwxLjU4Mi0xLjU4MkEyLjQ5IDIuNDkgMCAwMDExIDMuNXpcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JGkgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDIwIDIzXCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xNSAwYzMuMDc0IDEuNzE4IDUgMy43OCA1IDcuNTcxIDAgMi44MzUtMS4xNjMgNC45ODEtMy4wMzUgNi40MDRBNSA1IDAgMDExNCAyM0g2YTUgNSAwIDAxLTIuOTY2LTkuMDI2QzEuMTYzIDEyLjU1MiAwIDEwLjQwNiAwIDcuNTcxIDAgMy43OCAxLjkyNiAxLjcyMiA1IC4wMDRMMTUgMHptLS4yNjQgMWwtOS40NzIuMDA0QzIuMjcgMi43MyAxIDQuNTY2IDEgNy41N2MwIDIuNDEzLjkzIDQuMzA5IDIuNjQgNS42MDdsMS4wNjIuODA4LTEuMDc0Ljc5M0E0IDQgMCAwMDYgMjJoOGE0IDQgMCAwMDIuMzcyLTcuMjJsLTEuMDc1LS43OTMgMS4wNjMtLjgwOEMxOC4wNyAxMS44NzkgMTkgOS45ODQgMTkgNy41N2MwLTMuMDA2LTEuMjctNC44NDYtNC4yNjQtNi41N3pNNyAxNmEyIDIgMCAxMTAgNCAyIDIgMCAwMTAtNHptNiAwYTIgMiAwIDExMCA0IDIgMiAwIDAxMC00em0tNiAxYTEgMSAwIDEwMCAyIDEgMSAwIDAwMC0yem02IDBhMSAxIDAgMTAwIDIgMSAxIDAgMDAwLTJ6TTcgOWEyIDIgMCAxMTAgNCAyIDIgMCAwMTAtNHptNiAwYTIgMiAwIDExMCA0IDIgMiAwIDAxMC00em0tNiAuNWExLjUgMS41IDAgMTAwIDMgMS41IDEuNSAwIDAwMC0zem02IDBhMS41IDEuNSAwIDEwMCAzIDEuNSAxLjUgMCAwMDAtM3pNNSA1YTIgMiAwIDExMCA0IDIgMiAwIDAxMC00em01IDBhMiAyIDAgMTEwIDQgMiAyIDAgMDEwLTR6bTUgMGEyIDIgMCAxMTAgNCAyIDIgMCAwMTAtNHpNNSA1LjVhMS41IDEuNSAwIDEwMCAzIDEuNSAxLjUgMCAwMDAtM3ptNSAwYTEuNSAxLjUgMCAxMDAgMyAxLjUgMS41IDAgMDAwLTN6bTUgMGExLjUgMS41IDAgMTAwIDMgMS41IDEuNSAwIDAwMC0zem0tOC0zYTEgMSAwIDExMCAyIDEgMSAwIDAxMC0yem02IDBhMSAxIDAgMTEwIDIgMSAxIDAgMDEwLTJ6TTcgM2EuNS41IDAgMTAwIDEgLjUuNSAwIDAwMC0xem02IDBhLjUuNSAwIDEwMCAxIC41LjUgMCAwMDAtMXpcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JGogPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDIyIDE5XCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xOSAwYzEuNzQyIDEuOTQ2IDMgNS4xODMgMyA4IDAgNi4wNzUtNC45MjUgMTEtMTEgMTFTMCAxNC4wNzUgMCA4QzAgNS4yOTEgMS4xNjMgMi4xOTQgMi44MDEuMjNMMyAwaDE2em0tLjQ2MyAxSDMuNDYzQzIuMDEgMi44MTcgMSA1LjYyIDEgOGMwIDUuNTIzIDQuNDc3IDEwIDEwIDEwczEwLTQuNDc3IDEwLTEwYzAtMi4zOC0xLjAwOS01LjE4My0yLjQ2My03ek0xNCAxMWEyIDIgMCAxMTAgNCAyIDIgMCAwMTAtNHptLTYgMGEyIDIgMCAxMTAgNCAyIDIgMCAwMTAtNHptNiAxYTEgMSAwIDEwMCAyIDEgMSAwIDAwMC0yem0tNiAwYTEgMSAwIDEwMCAyIDEgMSAwIDAwMC0yem05LTZhMiAyIDAgMTEwIDQgMiAyIDAgMDEwLTR6bS02IDBhMiAyIDAgMTEwIDQgMiAyIDAgMDEwLTR6TTUgNmEyIDIgMCAxMTAgNCAyIDIgMCAwMTAtNHptMTIgMWExIDEgMCAxMDAgMiAxIDEgMCAwMDAtMnptLTYgMGExIDEgMCAxMDAgMiAxIDEgMCAwMDAtMnpNNSA3YTEgMSAwIDEwMCAyIDEgMSAwIDAwMC0yem0zLTRhMSAxIDAgMTEwIDIgMSAxIDAgMDEwLTJ6bTYgMGExIDEgMCAxMTAgMiAxIDEgMCAwMTAtMnptLTYgLjVhLjUuNSAwIDEwMCAxIC41LjUgMCAwMDAtMXptNiAwYS41LjUgMCAxMDAgMSAuNS41IDAgMDAwLTF6XCJcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCRrID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAyOCAxOFwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xNi41IDE3LjAzOGgtNmEuNS41IDAgMCAxLS41LS41di02LjVIN3Y2LjVhLjUuNSAwIDAgMS0uNS41aC00YS41LjUgMCAwIDEtLjUtLjV2LTEwYS41LjUgMCAxIDEgMSAwdjkuNWgzdi02LjVhLjUuNSAwIDAgMSAuNS0uNWg0YS41LjUgMCAwIDEgLjUuNXY2LjVoNVY2YS41LjUgMCAxIDEgMSAwdjEwLjUzOGEuNS41IDAgMCAxLS41LjVcIlxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTE4Ljg4NiA3LjgyMWEuNDkyLjQ5MiAwIDAgMS0uMzA0LS4xMDRMOS44NzkgMS4wMjJjLS4wMzctLjAyOC0uMTQtLjAyNy0uMTc2LjAwMUwxLjE5NSA3LjcxNGEuNS41IDAgMSAxLS42MTgtLjc4Nkw5LjA4NS4yMzdhMS4xNzIgMS4xNzIgMCAwIDEgMS40MDQtLjAwOGw4LjcwMiA2LjY5NmEuNS41IDAgMCAxLS4zMDUuODk2TTIxLjU0MyAxNy4wMzhIMTYuNWEuNS41IDAgMSAxIDAtMWg0LjU0M1Y2YS41LjUgMCAxIDEgMSAwdjEwLjUzOGEuNS41IDAgMCAxLS41LjVcIlxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTIzLjM0NSA3LjgyMWEuNDkyLjQ5MiAwIDAgMS0uMzA0LS4xMDRsLTguNzAzLTYuNjk1Yy0uMDM4LS4wMjgtLjE0LS4wMjgtLjE3Ni4wMDFMMTIuNTYgMi4yODRhLjUuNSAwIDAgMS0uNjE4LS43ODZMMTMuNTQ0LjIzN2ExLjE3NSAxLjE3NSAwIDAgMSAxLjQwMy0uMDA4bDguNzAzIDYuNjk2YS41LjUgMCAwIDEtLjMwNS44OTZNMjUuNTQzIDE3LjAzOEgyMC41YS41LjUgMCAxIDEgMC0xaDQuNTQzVjZhLjUuNSAwIDEgMSAxIDB2MTAuNTM4YS41LjUgMCAwIDEtLjUuNVwiXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMjcuMzQ1IDcuODIxYS40OTIuNDkyIDAgMCAxLS4zMDQtLjEwNGwtOC43MDMtNi42OTVjLS4wMzgtLjAyOC0uMTQtLjAyOC0uMTc2LjAwMUwxNi41NiAyLjI4NGEuNS41IDAgMCAxLS42MTgtLjc4NkwxNy41NDQuMjM3YTEuMTc1IDEuMTc1IDAgMCAxIDEuNDAzLS4wMDhsOC43MDMgNi42OTZhLjUuNSAwIDAgMS0uMzA1Ljg5NlwiXG4gICAgICB9KSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JGwgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDI5IDE5XCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xMC41MjM0OTUzLjk1MDkzNzc5bC4xMTc3MDYuMDgwNjI0NDEgMS4zOTQ3Nzc2IDEuMDcyNDQyOTggMS4zNTM3NDA2LTEuMDYzNzE3ODNjLjQ1MTUyODYtLjM1MzE5ODIzIDEuMTA2OTQ2Mi0uMzgzNjE2MTggMS41OTIzNzY1LS4wODkxMjI5MWwuMTE3NTk5OC4wODAzOTM1MyAxLjE2MzI4MzEuODk0NDQ3MjEgMS4xMjY3NDA2LS44ODU3MTc4M2MuNDUxNTI4Ni0uMzUzMTk4MjMgMS4xMDY5NDYyLS4zODM2MTYxOCAxLjU5MjM3NjUtLjA4OTEyMjkxbC4xMTc1OTk4LjA4MDM5MzUzIDguNzAyMDAwNiA2LjY5NTExNjc3Yy4zMjkxMTMzLjI1MTg5NTM4LjM5MDYwNDIuNzIyOTM4ODYuMTM4MTgwOCAxLjA1MTk5MDM1LS4xMTk3ODYzLjE1NTY2MTQ3LS4yOTI2MzkzLjI1NTAzNjQtLjQ4MDczOTguMjgzODM3NDVMMjcuMzQ0NzUgOS4wNzEybC0uMDk4MTk2MS0uMDA2Mzk2MzVjLS4wOTcyNTU0LS4wMTI3NTIwOS0uMTkxMDk4Ni0uMDQ0NDQ5Ni0uMjc2MjE5OC0uMDkzOTk2MmwtLjA4MjAxNzMtLjA1NTQ1NTY4LS41OTYzMzc5LS40NTkzNDY1OUwyNi4yOTI1IDE3LjUzODVjMCAuMzc5Njg4Mi0uMjgxOTY2LjY5MzQ4OTctLjY0ODE4MjUuNzQzMTUzMkwyNS41NDI1IDE4LjI4ODVIMTAuNWMtLjM3OTkwMDggMC0uNjkzNTI1MTMtLjI4MjE2MDgtLjc0MzE1NzY2LS42NDgyMzEyTDkuNzUgMTcuNTM4NVYxMS4yODhoLTIuNXY2LjI1MDVjMCAuMzc5Njg4Mi0uMjgxOTY1OTUuNjkzNDg5Ny0uNjQ4MTgyNDYuNzQzMTUzMkw2LjUgMTguMjg4NWgtNGMtLjM3OTkwMDc4IDAtLjY5MzUyNTEzLS4yODIxNjA4LS43NDMxNTc2Ni0uNjQ4MjMxMkwxLjc1IDE3LjUzODVsLS4wMDAwMjExMi04Ljk0MzQ5NDgyLS40MDAyMTM2NC4zMTU3MjczNmMtLjI5NjI5MzMuMjMyOTQ3ODQtLjcxMjY4MjE4LjIwNzM1OTg3LS45NzgwNjIyLS4wNDM3MzY0NWwtLjA3NDgxMjYzLS4wODIwNjExMmMtLjIzMzI5OTQzLS4yOTYwNTgzNC0uMjA3ODgyMTgtLjcxMzA2MDE4LjA0MzYxMjcyLS45Nzg0NDYzN2wuMDgyMTk4MTYtLjA3NDc5NDgyIDguNTA3NTkzMzItNi42OTEwNzMzNkM5LjM4MTQ3NzIzLjY4NjExOTc5IDEwLjAzNzYxNDUuNjU1NTk5MzggMTAuNTIzNDk1My45NTA5Mzc3OXpNMTguMjUxIDIuMjcxbC0uNzYyMDIxMS41OTkwMDUxOCA2LjMxMjcxNzUgNC44NTY2Njk1NmMuMzI5MTEzMy4yNTE4OTUzOC4zOTA2MDQyLjcyMjkzODg2LjEzODE4MDggMS4wNTE5OTAzNS0uMTE5Nzg2My4xNTU2NjE0Ny0uMjkyNjM5My4yNTUwMzY0LS40ODA3Mzk4LjI4MzgzNzQ1TDIzLjM0NDc1IDkuMDcxMmwtLjA5ODE5NjEtLjAwNjM5NjM1Yy0uMDk3MjU1NC0uMDEyNzUyMDktLjE5MTA5ODYtLjA0NDQ0OTYtLjI3NjIxOTgtLjA5Mzk5NjJsLS4wODIwMTczLS4wNTU0NTU2OC0uNTk2MzM3OS0uNDU5MzQ2NTl2OC4zMzIwMDAwMkgyNC43OTJWNy4zMDIwMDUxOEwxOC4yNTEgMi4yNzF6bS00IDBsLS45ODkwMjExLjc3NzAwNTE4IDYuMDgwNzE3NSA0LjY3ODY2OTU2Yy4zMjkxMTMzLjI1MTg5NTM4LjM5MDYwNDIuNzIyOTM4ODYuMTM4MTgwOCAxLjA1MTk5MDM1LS4xMTk3ODYzLjE1NTY2MTQ3LS4yOTI2MzkzLjI1NTAzNjQtLjQ4MDczOTguMjgzODM3NDVMMTguODg1NzUgOS4wNzEybC0uMDk4MTk2MS0uMDA2Mzk2MzVjLS4wOTcyNTU0LS4wMTI3NTIwOS0uMTkxMDk4Ni0uMDQ0NDQ5Ni0uMjc2MjE5OC0uMDkzOTk2MmwtLjA4MjAxNzMtLjA1NTQ1NTY4LTEuMTc5MzM3OS0uOTA3MzQ2NTl2OC43ODAwMDAwMkgyMC43OTJWNy4zMDIwMDUxOGwtNC44NDQxMDY1LTMuNzI0MjkyMjVjLS4wNzcwNzM0LS4wMzM4MTY4OS0uMTQ5MjM1My0uMDgwOTczNzEtLjIxMjc4OTktLjE0MTAxNzk1bC0uMDc0OTMzMi0uMDgyMDM5NTlMMTQuMjUxIDIuMjcxem0tNC40NTkgMEwzLjI0MTIyNjMzIDcuNDIzMzg4NjQgMy4yNSA3LjUzODV2OS4yNDk1aDIuNXYtNi4yNDk1YzAtLjM3OTY4ODIuMjgxOTY1OTUtLjY5MzQ4OTcuNjQ4MTgyNDYtLjc0MzE1MzIzTDYuNSA5Ljc4ODVoNGMuMzc5OTAwOCAwIC42OTM1MjUxLjI4MjE2MDguNzQzMTU3Ny42NDgyMzEyTDExLjI1IDEwLjUzODV2Ni4yNDk1aDQuNVY3YzAtLjA0NjQ5MjQzLjAwNDIyNzctLjA5MTk5Njk4LjAxMjMyMDItLjEzNjE0OTY1TDkuNzkyIDIuMjcxelwiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkbSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMjQgMThcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCB7XG4gICAgICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIlxuICAgICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMTMuMiA3LjFoOC42YzEuMTYgMCAyLjEuOTQgMi4xIDIuMXY0LjFsLS4wMDUuMTVhMi4xMDEgMi4xMDEgMCAwMS0xLjUxNCAxLjg2OGwtLjA1Mi4wMTN2MS42N2wtLjAwNy4xMWMtLjA4My43MTctLjk3IDEuMDYtMS41MTUuNTRMMTguNDUyIDE1LjRIMTMuMmEyLjEgMi4xIDAgMDEtMi4xLTIuMVY5LjJjMC0xLjE2Ljk0LTIuMSAyLjEtMi4xem04LjYgMS44aC04LjZhLjMuMyAwIDAwLS4zLjN2NC4xYS4zLjMgMCAwMC4zLjNoNS42MTFsLjExNS4wMDdhLjkuOSAwIDAxLjUwNy4yNDJsMS4wOTcgMS4wNDctLjAwMS0uMzk2YS45LjkgMCAwMS45LS45aC4zNzFhLjMuMyAwIDAwLjMtLjNWOS4yYS4zLjMgMCAwMC0uMy0uM3pNMTMuNSA0LjEyNWEuNzUuNzUgMCAwMS4xMDIgMS40OTNsLS4xMDIuMDA3SDVhLjc1Ljc1IDAgMDEtLjEwMi0xLjQ5M0w1IDQuMTI1aDguNXpcIlxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTE2LjguMUgyLjJBMi4xIDIuMSAwIDAwLjEgMi4ydjhsLjAwNS4xNUEyLjEgMi4xIDAgMDAyLjIgMTIuM2wuNDUtLjAwMVYxNWwuMDA2LjExYy4wODMuNzE1Ljk2NCAxLjA2IDEuNTEuNTQ1TDcuNzMyIDEyLjNoNC4yN2EuOS45IDAgMDAuODk5LS45VjkuMmEuMy4zIDAgMDEuMy0uM0gxOGEuOS45IDAgMDAuOS0uOVYyLjJBMi4xIDIuMSAwIDAwMTYuOC4xem0wIDEuOGwuMDY5LjAwOGEuMy4zIDAgMDEuMjMxLjI5MnY0Ljg5OWwtMy45LjAwMS0uMTUuMDA1QTIuMSAyLjEgMCAwMDExLjEgOS4ydjEuMjk5bC0zLjcyNi4wMDEtLjExNC4wMDdhLjkuOSAwIDAwLS41MDMuMjM4TDQuNDUgMTIuOTE2VjExLjRhLjkuOSAwIDAwLS45LS45SDIuMmEuMy4zIDAgMDEtLjMtLjN2LThhLjMuMyAwIDAxLjMtLjNoMTQuNnpcIlxuICAgICAgfSkpKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCRuID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAxNCAxMlwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMS43MDcgNi4yOTNBMSAxIDAgMSAwIC4yOTMgNy43MDdsNCA0YTEgMSAwIDAgMCAxLjQ4OC0uMDgybDgtMTBhMSAxIDAgMSAwLTEuNTYyLTEuMjVMNC45MTcgOS41MDNsLTMuMjEtMy4yMXpcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JG8gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDIwIDIwXCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk01LjEyOCAwaDkuNzQ0YzEuNzgzIDAgMi40My4xODYgMy4wODIuNTM0LjY1Mi4zNDkgMS4xNjMuODYgMS41MTIgMS41MTIuMzQ4LjY1Mi41MzQgMS4yOTkuNTM0IDMuMDgydjkuNzQ0YzAgMS43ODMtLjE4NiAyLjQzLS41MzQgMy4wODJhMy42MzUgMy42MzUgMCAwIDEtMS41MTIgMS41MTJjLS42NTIuMzQ4LTEuMjk5LjUzNC0zLjA4Mi41MzRINS4xMjhjLTEuNzgzIDAtMi40My0uMTg2LTMuMDgyLS41MzRhMy42MzUgMy42MzUgMCAwIDEtMS41MTItMS41MTJDLjE4NiAxNy4zMDIgMCAxNi42NTUgMCAxNC44NzJWNS4xMjhjMC0xLjc4My4xODYtMi40My41MzQtMy4wODJBMy42MzUgMy42MzUgMCAwIDEgMi4wNDYuNTM0QzIuNjk4LjE4NiAzLjM0NSAwIDUuMTI4IDB6XCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk02LjYzNSAxMC42NjZhMSAxIDAgMSAwLTEuMjcgMS41NDVsMy4xMTUgMi41NjFhMSAxIDAgMCAwIDEuNC0uMTI5bDUuODg1LTdhMSAxIDAgMCAwLTEuNTMtMS4yODZsLTUuMjQ5IDYuMjQyLTIuMzUtMS45MzN6XCIsXG4gICAgICAgIGZpbGw6IFwiI0ZGRlwiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkcCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMjIgMjJcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTYuMTI4LjVoOS43NDRjMS43MDEgMCAyLjQ5NC4xNTMgMy4zMTcuNTkzYTQuMTM0IDQuMTM0IDAgMCAxIDEuNzE4IDEuNzE4Yy40NC44MjMuNTkzIDEuNjE2LjU5MyAzLjMxN3Y5Ljc0NGMwIDEuNzAxLS4xNTMgMi40OTQtLjU5MyAzLjMxN2E0LjEzNCA0LjEzNCAwIDAgMS0xLjcxOCAxLjcxOGMtLjgyMy40NC0xLjYxNi41OTMtMy4zMTcuNTkzSDYuMTI4Yy0xLjcwMSAwLTIuNDk0LS4xNTMtMy4zMTctLjU5M2E0LjEzNCA0LjEzNCAwIDAgMS0xLjcxOC0xLjcxOEMuNjUzIDE4LjM2Ni41IDE3LjU3My41IDE1Ljg3MlY2LjEyOGMwLTEuNzAxLjE1My0yLjQ5NC41OTMtMy4zMTdhNC4xMzQgNC4xMzQgMCAwIDEgMS43MTgtMS43MThDMy42MzQuNjUzIDQuNDI3LjUgNi4xMjguNXptMCAxYy0xLjU1IDAtMi4xODcuMTIzLTIuODQ2LjQ3NWEzLjEzNSAzLjEzNSAwIDAgMC0xLjMwNyAxLjMwN2MtLjM1Mi42NTktLjQ3NSAxLjI5Ni0uNDc1IDIuODQ2djkuNzQ0YzAgMS41NS4xMjMgMi4xODcuNDc1IDIuODQ2YTMuMTM1IDMuMTM1IDAgMCAwIDEuMzA3IDEuMzA3Yy42NTkuMzUyIDEuMjk2LjQ3NSAyLjg0Ni40NzVoOS43NDRjMS41NSAwIDIuMTg3LS4xMjMgMi44NDYtLjQ3NWEzLjEzNSAzLjEzNSAwIDAgMCAxLjMwNy0xLjMwN2MuMzUyLS42NTkuNDc1LTEuMjk2LjQ3NS0yLjg0NlY2LjEyOGMwLTEuNTUtLjEyMy0yLjE4Ny0uNDc1LTIuODQ2YTMuMTM1IDMuMTM1IDAgMCAwLTEuMzA3LTEuMzA3Yy0uNjU5LS4zNTItMS4yOTYtLjQ3NS0yLjg0Ni0uNDc1SDYuMTI4elwiLFxuICAgICAgICBmaWxsUnVsZTogXCJub256ZXJvXCJcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCRxID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCA4IDEyXCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICAgICAgICBmaWxsUnVsZTogXCJub256ZXJvXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTYuNTM2IDQuNTg2TDcuOTUgNmwtNS42NTcgNS42NTctMS40MTQtMS40MTR6XCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk03Ljk1IDZMNi41MzYgNy40MTQuODc5IDEuNzU3IDIuMjkzLjM0M3pcIlxuICAgICAgfSkpKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCRyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAxMiA3XCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xMS44NTYxIDAuMjM4NjM0QzEyLjA3MjggMC41MjMwNDMgMTIuMDQxMiAwLjk0ODk3OSAxMS43ODU1IDEuMTg5OTlMNi40ODE4IDYuMTg5OTlDNi4yNTgzMiA2LjQwMDY3IDUuOTMxNDUgNi40MDM2NCA1LjcwNDkxIDYuMTk3MDVMMC4yMjIxMTQgMS4xOTcwNUMtMC4wMzcwMzc4IDAuOTYwNzE0IC0wLjA3NDkxMTEgMC41MzU0MSAwLjEzNzUyMSAwLjI0NzEwM0MwLjM0OTk1NSAtMC4wNDEyMDQ2IDAuNzMyMjUgLTAuMDgzMzM4OSAwLjk5MTQwMiAwLjE1Mjk5M0w2LjA4MzEgNC43OTYzNEwxMS4wMDEgMC4xNjAwNTJDMTEuMjU2NiAtMC4wODA5NTc3IDExLjYzOTUgLTAuMDQ1Nzc1MSAxMS44NTYxIDAuMjM4NjM0WlwiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkcyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMjMgMjNcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCB7XG4gICAgICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIlxuICAgICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMTkuNzA5LjAyM2wyLjg3IDIuODdMMi44OTQgMjIuNTguMDIzIDE5LjcxelwiXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMjIuNTggMTkuNzA5bC0yLjg3MSAyLjg3TC4wMjMgMi44OTQgMi44OTMuMDIzelwiXG4gICAgICB9KSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JHQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDExIDExXCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk01LjI1LjI1bC4xNDcuMDAyQTUuMDA1IDUuMDA1IDAgMDExMC4yNSA1LjI1YzAgMi43NTgtMi4yNDIgNS01IDVzLTUtMi4yNDItNS01QTUuMDA1IDUuMDA1IDAgMDE1LjEwMy4yNTJMNS4yNS4yNXptMCAuODU3bC0uMTM3LjAwMkE0LjE0OCA0LjE0OCAwIDAwMS4xMDcgNS4yNWMwIDIuMjg0IDEuODU5IDQuMTQzIDQuMTQzIDQuMTQzUzkuMzkzIDcuNTM0IDkuMzkzIDUuMjVhNC4xNDggNC4xNDggMCAwMC00LjAwNi00LjE0bC0uMTM3LS4wMDN6bS4wNzEuODU3Yy4yNTQgMCAuNDYzLjE2Mi40OTYuMzdsLjAwNC4wNTl2Mi44MjFsLjg3NS44NzZhLjQyOS40MjkgMCAwMS0uNTU4LjY0N2wtLjA0OC0uMDQxLTEuMTQzLTEuMTQzYS40MjcuNDI3IDAgMDEtLjEyLS4yMzRsLS4wMDEtLjAxLS4wMDUtLjA1OVYyLjM5M2MwLS4yMzcuMjI0LS40MjkuNS0uNDI5elwiLFxuICAgICAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCR1ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMSAyLjE3NWEuNjc1LjY3NSAwIDExMC0xLjM1aDEwYS42NzUuNjc1IDAgMDEwIDEuMzVIMXpcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JHYgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDUwIDUwXCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk01LjU1NiAzMy4zMzNWNTBIMFYzMy4zMzNoNS41NTZ6bTguODctMTEuMTFWNTBIOC44NzJWMjIuMjIyaDUuNTU2ek0yMy4yOTggMHY1MGgtNS41NTVWMGg1LjU1NXptOC44NzEgMjcuNzc4VjUwaC01LjU1NVYyNy43NzhoNS41NTV6bTguODcxLTExLjExMVY1MGgtNS41NTVWMTYuNjY3aDUuNTU1em04Ljg3MSAyMS42NjZWNTBoLTUuNTU1VjM4LjMzM2g1LjU1NXpcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JHcgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDM1IDM1XCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xNy41IDBDMjcuMTY0OTgzMSAwIDM1IDcuODM1MDE2ODggMzUgMTcuNWMwIDQuNTk1MzM3OS0xLjc3MTIyMDUgOC43NzY5ODUxLTQuNjY4MjA3IDExLjg5OTQ4NjlsLS45MzIxODk5LjkzMjkzQzI2LjI3Njk4NTEgMzMuMjI4Nzc5NSAyMi4wOTUzMzc5IDM1IDE3LjUgMzUgNy44MzUwMTY4OCAzNSAwIDI3LjE2NDk4MzEgMCAxNy41IDAgNy44MzUwMTY4OCA3LjgzNTAxNjg4IDAgMTcuNSAwek01Ljg1NDc0NzA4IDcuMjcwNDIyMzhDMy40NTUxNTE1NSA5Ljk5OTk0MTAzIDIgMTMuNTgwMDM2MSAyIDE3LjUgMiAyNi4wNjA0MTM2IDguOTM5NTg2MzggMzMgMTcuNSAzM2MzLjkyMDQ0NjUgMCA3LjUwMDk0MDQtMS40NTU1MDk4IDEwLjIzMDU4NTctMy44NTU2MzMzTDUuODU0NzQ3MDggNy4yNzA0MjIzOHpNMTcuNSAyQzEzLjU4MDAzNjEgMiA5Ljk5OTk0MTAzIDMuNDU1MTUxNTUgNy4yNzA0MjIzOCA1Ljg1NDc0NzA4TDI5LjE0NDM2NjcgMjcuNzMwNTg1N0MzMS41NDQ0OTAyIDI1LjAwMDk0MDQgMzMgMjEuNDIwNDQ2NSAzMyAxNy41IDMzIDguOTM5NTg2MzggMjYuMDYwNDEzNiAyIDE3LjUgMnpcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JHggPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDIwIDIwXCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xMCAwYzUuNTIyODQ3NSAwIDEwIDQuNDc3MTUyNSAxMCAxMHMtNC40NzcxNTI1IDEwLTEwIDEwUzAgMTUuNTIyODQ3NSAwIDEwIDQuNDc3MTUyNSAwIDEwIDB6TTMuNjA2OTkzMjQgNC44OTM0NzY2OEMyLjQ4NzU1NDcyIDYuMjkzMTA1ODQgMS44MTgxODE4MiA4LjA2ODM4MjcxIDEuODE4MTgxODIgMTBjMCA0LjUxODY5MzQgMy42NjMxMjQ3NyA4LjE4MTgxODIgOC4xODE4MTgxOCA4LjE4MTgxODIgMS45MzE2MTczIDAgMy43MDY4OTQyLS42NjkzNzI5IDUuMTA2NTIzMy0xLjc4ODgxMTRMMy42MDY5OTMyNCA0Ljg5MzQ3NjY4ek0xMCAxLjgxODE4MTgyYy0xLjkzMTYxNzI5IDAtMy43MDY4OTQxNi42NjkzNzI5LTUuMTA2NTIzMzIgMS43ODg4MTE0MkwxNi4zOTMwMDY4IDE1LjEwNjUyMzNDMTcuNTEyNDQ1MyAxMy43MDY4OTQyIDE4LjE4MTgxODIgMTEuOTMxNjE3MyAxOC4xODE4MTgyIDEwYzAtNC41MTg2OTM0MS0zLjY2MzEyNDgtOC4xODE4MTgxOC04LjE4MTgxODItOC4xODE4MTgxOHpcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JHkgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDQ0OCA1MTJcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTEyMC4xMiAyMDguMjljLTMuODgtMi45LTcuNzctNC4zNS0xMS42NS00LjM1SDkxLjAzdjEwNC40N2gxNy40NWMzLjg4IDAgNy43Ny0xLjQ1IDExLjY1LTQuMzUgMy44OC0yLjkgNS44Mi03LjI1IDUuODItMTMuMDZ2LTY5LjY1Yy0uMDEtNS44LTEuOTYtMTAuMTYtNS44My0xMy4wNnpNNDA0LjEgMzJINDMuOUMxOS43IDMyIC4wNiA1MS41OSAwIDc1Ljh2MzYwLjRDLjA2IDQ2MC40MSAxOS43IDQ4MCA0My45IDQ4MGgzNjAuMmMyNC4yMSAwIDQzLjg0LTE5LjU5IDQzLjktNDMuOFY3NS44Yy0uMDYtMjQuMjEtMTkuNy00My44LTQzLjktNDMuOHpNMTU0LjIgMjkxLjE5YzAgMTguODEtMTEuNjEgNDcuMzEtNDguMzYgNDcuMjVoLTQ2LjRWMTcyLjk4aDQ3LjM4YzM1LjQ0IDAgNDcuMzYgMjguNDYgNDcuMzcgNDcuMjhsLjAxIDcwLjkzem0xMDAuNjgtODguNjZIMjAxLjZ2MzguNDJoMzIuNTd2MjkuNTdIMjAxLjZ2MzguNDFoNTMuMjl2MjkuNTdoLTYyLjE4Yy0xMS4xNi4yOS0yMC40NC04LjUzLTIwLjcyLTE5LjY5VjE5My43Yy0uMjctMTEuMTUgOC41Ni0yMC40MSAxOS43MS0yMC42OWg2My4xOWwtLjAxIDI5LjUyem0xMDMuNjQgMTE1LjI5Yy0xMy4yIDMwLjc1LTM2Ljg1IDI0LjYzLTQ3LjQ0IDBsLTM4LjUzLTE0NC44aDMyLjU3bDI5LjcxIDExMy43MiAyOS41Ny0xMTMuNzJoMzIuNThsLTM4LjQ2IDE0NC44elwiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkeiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMTMgMTdcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCB7XG4gICAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICAgICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMCAwdjE3aDEzVjQuNzIyTDguMzU3IDBIMHptLjkyOS45NDRoNy4wNDRsNC4wOTggNC4xN3YxMC45NDJILjkzVi45NDR6XCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk02IDEwLjVhLjUuNSAwIDEgMSAwIDFIM2EuNS41IDAgMSAxIDAtMWgzem0xLTJhLjUuNSAwIDAgMSAwIDFIM2EuNS41IDAgMCAxIDAtMWg0em0wIDRhLjUuNSAwIDEgMSAwIDFIM2EuNS41IDAgMSAxIDAtMWg0em0zLTZhLjUuNSAwIDEgMSAwIDFIM2EuNS41IDAgMCAxIDAtMWg3elwiLFxuICAgICAgICBmaWxsUnVsZTogXCJub256ZXJvXCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk04IC40MjlWNWg0LjQ2MXpcIlxuICAgICAgfSkpKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCRBID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAxNCAxOFwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgICAgICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiXG4gICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0wIDB2MThoMTRWNUw5IDBIMHptMS41IDEuNWg2Ljg3OUwxMi41IDUuNjIxVjE2LjVoLTExdi0xNXpcIlxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTYgMTEuMjVhLjc1Ljc1IDAgMSAxIDAgMS41SDRhLjc1Ljc1IDAgMSAxIDAtMS41aDJ6bTItM2EuNzUuNzUgMCAwIDEgMCAxLjVINGEuNzUuNzUgMCAwIDEgMC0xLjVoNHpNOCAxbDUuMTc3IDQuOTdIOFYxelwiXG4gICAgICB9KSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JEIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDEyIDE2XCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk03LjcxNCAwTDEyIDQuMzE0djIuNzQ1aC0xLjI4NlY1LjE1SDYuODU3VjEuMjk1SDEuMjg2djEyLjk0MWgyLjI0M3YxLjI5NEgwVjBoNy43MTR6bS0uNzk2IDcuMDU5YTMuMzkyIDMuMzkyIDAgMDEzLjM4OCAzLjM4OGMwIC42NzUtLjE5OCAxLjMwNC0uNTQgMS44MzNsLS4wOTYuMTQyIDIuMTcgMi4xNy4wNDguMDU2YS41NDguNTQ4IDAgMDEtLjc2NC43NzRsLS4wNjItLjA1NC0yLjE3LTIuMTY5YTMuMzcgMy4zNyAwIDAxLTEuOTc0LjYzNiAzLjM5MyAzLjM5MyAwIDAxLTMuMzg5LTMuMzg4IDMuMzkyIDMuMzkyIDAgMDEzLjM4OS0zLjM4OHptMCAxLjIzMmEyLjE1NyAyLjE1NyAwIDEwMCA0LjMxNCAyLjE1NyAyLjE1NyAwIDAwMC00LjMxNHpcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JEMgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDQzIDQyXCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk00MyAyMWMwIDExLjEzMS04LjU3MSAyMC4yOTgtMjAgMjF2LTcuMTU2YzcuMTQzLS43MDEgMTIuODU3LTYuNzM1IDEyLjg1Ny0xNC4xMjVTMzAuMTQzIDcuMzQzIDIzIDYuNjQxVjBjMTEuNDI5LjcwMiAyMCA5Ljg2OSAyMCAyMXptLTM1Ljg1Ny0uMDE5YzAtMS45NDQuMzgtMy44NDIgMS4xNDMtNS41NTVMMi4xOSAxMkEyMC42ODIgMjAuNjgyIDAgMDAwIDIxLjIxM0MwIDMyLjIzMSA4LjU3MSA0MS4zMDYgMjAgNDJ2LTcuMDgzQzEyLjg1NyAzNC4yMjIgNy4xNDMgMjguMjUgNy4xNDMgMjAuOTh6TTIwIDYuODExVjBDMTMuNTA3LjQzMiA3LjYxNyAzLjk4MiA0IDkuNDk4TDkuODkgMTNDMTIuMTYyIDkuNTk0IDE1LjgyNiA3LjI0NCAyMCA2LjgxMnpcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JEQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDE4IDE1XCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xNyA1LjI1Yy4zNzk2OTU4IDAgLjY5MzQ5MS4yODIxNTM4OC43NDMxNTM0LjY0ODIyOTQ0TDE3Ljc1IDZ2Ny41NTU1NTU2YzAgLjU5OTIxNTktLjQzMzQwMTcgMS4xMjAzODkyLTEuMDIxNjcyOSAxLjE4NzIxNThMMTYuNiAxNC43NUgxLjRjLS42MDk3MDIyNyAwLTEuMDgzMDcxNDEtLjQ4MTEzNDQtMS4xNDM0Nzc1MS0xLjA2NzM1NDVMLjI1IDEzLjU1NTU1NTZWNmMwLS40MTQyMTM1Ni4zMzU3ODY0NC0uNzUuNzUtLjc1LjM3OTY5NTc3IDAgLjY5MzQ5MDk2LjI4MjE1Mzg4Ljc0MzE1MzM4LjY0ODIyOTQ0TDEuNzUgNnY3LjI1aDE0LjVWNmMwLS4zNzk2OTU3Ny4yODIxNTM5LS42OTM0OTA5Ni42NDgyMjk0LS43NDMxNTMzOEwxNyA1LjI1ek05IC43NWMuMzc5Njk1NzcgMCAuNjkzNDkwOTYuMjgyMTUzODguNzQzMTUzMzguNjQ4MjI5NDRMOS43NSAxLjVsLS4wMDAwMDE5OCA2Ljg4NiAyLjg4MDU4ODA4LTIuOTc5ODY0MzJjLjI2Mzg0NzQtLjI3MzA0NDcxLjY4NDgwMi0uMzAyNjMzLjk4MjU2MjItLjA4Mzk2MzExbC4wNzc5NDI0LjA2NTc5NjAxYy4yNzMwNDQ3LjI2Mzg0NzQxLjMwMjYzMy42ODQ4MDIwMS4wODM5NjMxLjk4MjU2MjI0bC0uMDY1Nzk2LjA3Nzk0MjMzLTQuMTY5OTYxNjMgNC4zMTUzMTk3NWMtLjI3MDI2MTc3LjI3OTY4MjctLjcwMzY4NzUyLjMwMjk4OTYtMS4wMDExNDMyOC4wNjk5MjA3bC0uMDc3NTI4NC0uMDY5OTIwNy00LjE2OTk2MTYyLTQuMzE1MzE5NzVjLS4yODc4MzM1NC0uMjk3ODY2OTYtLjI3OTY5OTg1LS43NzI2NzEwMy4wMTgxNjcxLTEuMDYwNTA0NTcuMjczMDQ0NzItLjI2Mzg0NzQyLjY5NDc2NTc1LS4yNzkwMDAxNS45ODQ4NjE1Ny0uMDUwMjU5OTJsLjA3NTY0MzAxLjA2ODQyNzAyTDguMjQ5OTk4MDIgOC4zODggOC4yNSAxLjVjMC0uNDE0MjEzNTYuMzM1Nzg2NDQtLjc1Ljc1LS43NXpcIixcbiAgICAgICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkRSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMjAgMThcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTkuNSAyLjIyM2wtNiA0LjgyNnY5LjkzNGg2LjAxNmEuNTAxLjUwMSAwIDAgMS0uMDE2LS4xMjVWMi4yMjN6bTEtLjAxMXYxNC42NDZhLjUwMS41MDEgMCAwIDEtLjAxNi4xMjVIMTYuNVY2LjkzM2wtNi00LjcyMXptNyA1LjUwOHY5Ljc2M2EuNS41IDAgMCAxLS41LjVIM2EuNS41IDAgMCAxLS41LS41di05LjYzTDEuMjEzIDguODg4QS41MDMuNTAzIDAgMCAxIC40OTYgOC44YS41My41MyAwIDAgMSAuMDg2LS43MzRMOS4yNzkgMS4wN2ExLjE3NyAxLjE3NyAwIDAgMSAxLjQzNi0uMDA4bDguODk2IDcuMDAyYS41My41MyAwIDAgMSAuMDk0LjczMy41MDcuNTA3IDAgMCAxLS43MTcuMDk1TDE3LjUgNy43MnpcIixcbiAgICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkRiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMjEgMTlcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTEwLjc0OTA3MDguNzgwODM0N2wuMTIwMDgxOS4wODQxMTI1IDguODk1OTgxOCA3LjAwMTE1NTIyYy4zMzE2NjIxLjI1OTY0NjQ3LjM5MzI0MzMuNzQyMTYwOTcuMTM5NzIzMiAxLjA4MDE5MzUtLjEyNDc4NzIuMTY1ODY1MzctLjMwNzI3NjMuMjcwNDUzNzEtLjUwNTQ0OTIuMjk2OTUxMDhsLS4xMDAxOTg5LjAwNjY2MzI3LS4xMDAyNjI0LS4wMDY2NzEyM2MtLjA5OTI3NTMtLjAxMzI5NzQ4LS4xOTQ5ODI0LS4wNDYzMzg3OC0uMjgxNjYtLjA5NzkwOTVsLS4wODM0NjU1LS4wNTc3MDIyMi0xLjA4MzgzNzQtLjg1MjQxNzg2TDE3Ljc1IDE3LjQ4MzM5ODRjMCAuMzc5Njg4Mi0uMjgxOTY2LjY5MzQ4OTctLjY0ODE4MjUuNzQzMTUzM0wxNyAxOC4yMzMzOTg0SDNjLS4zNzk5MDA3OCAwLS42OTM1MjUxMy0uMjgyMTYwOC0uNzQzMTU3NjYtLjY0ODIzMTFMMi4yNSAxNy40ODMzOTg0bC0uMDAwMDE1NzEtOS4xMDkxODg5NC0uODc5OTc5NDcuNzA4NjI5OTljLS4zMDQxMDM1Mi4yNDQ1NTEzOC0uNzMzNzgwNDkuMjE1MjY5MjItMS4wMDMxMzEzLS4wNTE0NzU5NWwtLjA2OTI2OTQ4LS4wNzg2MDg4NkMuMDYzMjYyOTEgOC42NDg1NzkzMi4wODg2NTEgOC4yMjEzNjU0Ny4zNDIwMDc2MSA3Ljk0ODMxMjA1bC4wODI4MTQyOC0uMDc3MDE0MDFMOS4xMjI1NTMxMy44NzQzNzg1OUM5LjU4MjcwOTgxLjUwNDU2NTU2IDEwLjI1MzI4NTQuNDcyNzE5NDIgMTAuNzQ5MDcwOC43ODA4MzQ3em0uMDAwOTEzNSAxLjk0NTM3NDc2VjE2LjczMjIwOTVMMTYuMjUgMTYuNzMzVjcuMDU0MjA5NDZsLTUuNTAwMDE1Ny00LjMyOHptLTEuNTAwMDAwMDEuMDE4bC01LjUgNC40MjRWMTYuNzMzbDUuNS0uMDAwNzkwNVYyLjc0NDIwOTQ2elwiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkRyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgNDUgMzdcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTE4LjU5NyA4LjI1bC42MTYtMi43MThhMSAxIDAgMCAxIDEuOTUuNDRsLS4yMTIuOTRjMS4wNzctLjU4OCAyLjMzLTEuMjQ2IDMuODgxLTIuMDQ2YTEuMDAxIDEuMDAxIDAgMCAxIDEuMzQ4LjQyOC45OTYuOTk2IDAgMCAxLS40MyAxLjM0NGMtNS40NCAyLjgwNS03LjEgMy44LTEwLjQ4OCA2LjIzNWExLjAwMiAxLjAwMiAwIDAgMS0xLjM5Ni0uMjI2Ljk5Ni45OTYgMCAwIDEgLjIyNy0xLjM5MmMxLjctMS4yMjIgMi45ODYtMi4wOTcgNC41MDQtMy4wMDV6bTcuNDQ0IDE2LjMyMmMuMzA4LS4wNjQuODAzLS4yOTcgMS4yNzctLjYxNC41OTMtLjM5Ni45NS0xLjA1NC45NS0xLjc2MSAwLTEuMTc2LS45Ny0yLjEyNi0yLjE1Ny0yLjEyNmwtMTIuMTU4LS4wMDVjLS4wNjggMC0uMTM2IDAtLjIzLjAwMkExOC4yMjkgMTguMjI5IDAgMCAwIDMuNDMgMjMuMzcyTC43NSAyNS4yNXYtMi40MDdsMS40OTctMS4wNWEyMC4yNzYgMjAuMjc2IDAgMCAxIDExLjcwNC0zLjY3NmwxMi4xNi4wMDVhNC4xOSA0LjE5IDAgMCAxIDMuNjc3IDIuMTVsLjQ3Mi44NTcuNzA2LS42NzggNS41ODctNS4zNzNhNC41NiA0LjU2IDAgMCAxIDMuMjE2LTEuMjcgNC41NDIgNC41NDIgMCAwIDEgMy4xOSAxLjMyOSA0LjMzMyA0LjMzMyAwIDAgMSAxLjI5MSAzLjEzMiA0LjMzNiA0LjMzNiAwIDAgMS0xLjM1IDMuMTA3TDI5Ljg1NCAzMy45MmE4LjM1MyA4LjM1MyAwIDAgMS01LjgyNSAyLjMzMkguNzV2LTEuOTQ4aDIzLjI3OWE2LjMyIDYuMzIgMCAwIDAgNC40MDMtMS43NjVsMTMuMDQ2LTEyLjU0M2EyLjQ0MSAyLjQ0MSAwIDAgMCAuMDM0LTMuNTAzIDIuNTEyIDIuNTEyIDAgMCAwLTEuNzU4LS43MzUgMi41MSAyLjUxIDAgMCAwLTEuNzguNzAybC03LjkwNCA3LjYtLjEtLjEtLjUyMi42NzljLS4yNzYuMzU5LS42MDcuNjctLjk4NC45MjItLjY3Ny40NTItMS40MjEuODEzLTIuMDg2LjkzMi0uMzkuMDctNS45NDIuNjU4LTEzLjA4NyAxLjM5OWwtLjIxLTEuOTM4YzYuNTM2LS42NzcgMTIuMzM1LTEuMjkxIDEyLjk2LTEuMzgyem00LjkxMy0yMS4zNDRjLjA4LS4yOS4xNTItLjU2OS4yMTUtLjgzMi05LjM3Ny0uODgzLTE0Ljg0Ny4xNjItMTcuMTcyIDIuNDg2LTEuNDUgMS40NS0xLjUxMyAzLjI3Mi0uODQ2IDUuMDA3YTEgMSAwIDAgMS0xLjg2OC43MTRjLS45MTgtMi4zOS0uODI4LTUuMDA0IDEuMjk4LTcuMTNDMTUuNTMuNTI1IDIxLjg4NC0uNjA3IDMyLjQ3Ny41MjNjLjU2Ny4wNi45NjguNTguODgyIDEuMTQyYTEyLjYyIDEyLjYyIDAgMCAxLS4xMTIuNTk2Yy0uMDk0LjQ1NS0uMjE1Ljk2LS4zNjcgMS41MDJhMjIuOTY4IDIyLjk2OCAwIDAgMS0xLjc5IDQuNTU3Yy0yLjc5MSA1LjI3Ni03LjIwNCA3Ljk3LTEzLjM4OCA2LjQ2OGEuOTk3Ljk5NyAwIDEgMSAuNDc0LTEuOTM4YzUuMTc2IDEuMjU4IDguNzQzLS45MiAxMS4xNDUtNS40NjFhMjEuMDEgMjEuMDEgMCAwIDAgMS42MzMtNC4xNnpcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JEggPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDMwIDIyXCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0yMi4xNCAyMS4zNzlhNy41MTMgNy41MTMgMCAwIDEtNy42NC03LjUxMmMwLTEuNjY1LjU0OC0zLjI0OCAxLjU0MS00LjU1YS41MS41MSAwIDAgMSAuMDY1LS4wODlsLjAxNS0uMDE3Yy4wMTItLjAxNS4wMTItLjAxNS4wMTItLjAxM2E3LjE3IDcuMTcgMCAwIDEgLjM0MS0uMzk2YzEuOTE4LTIuMjEgMy4yOC00LjE4MiA0LjE4MS01Ljg5LjMxMi0uNTkuNTQ1LTEuMTA1LjcwOS0xLjUzOC4wOTUtLjI1Mi4xNDYtLjQxNy4xNjQtLjQ5YS41LjUgMCAwIDEgLjgyNS0uMjUxYy4wNTguMDUzLjE2My4xNTQuMzEuMjk3YTMzIDMzIDAgMCAxIDMuMjE0IDMuN2MxLjc4IDIuMzk2IDMuMDAzIDQuNzc0IDMuNDEyIDcuMDI3YTkuMjI2IDkuMjI2IDAgMCAxIC4xMTguODljLjA4LjQ0NS4xMi44ODMuMTIgMS4zMmE3LjUxNCA3LjUxNCAwIDAgMS03LjM4NiA3LjUxMnptMy4yOTMtMS45NjhhNi41MSA2LjUxIDAgMCAwIDMuMDk1LTUuNTQ0YzAtLjM5My0uMDQtLjc5MS0uMTE2LTEuMmEuNTA4LjUwOCAwIDAgMS0uMDA4LS4xMSA4LjI4IDguMjggMCAwIDAtLjEtLjcyMmMtLjM3Ni0yLjA3NC0xLjUzNC00LjMyNS0zLjIzLTYuNjA4YTMyLjAxIDMyLjAxIDAgMCAwLTIuODQzLTMuMzEzYy0uMTU4LjM5My0uMzg0Ljg4NC0uNjkyIDEuNDY2LS45MzcgMS43NzUtMi4zNDMgMy44MS00LjMxOCA2LjA4Ny0uMTI2LjEzNy0uMjE2LjI0LS4zMTUuMzY0YS41MTcuNTE3IDAgMCAxLS4wMjguMDQgNi40NzUgNi40NzUgMCAwIDAtMS4zNzggMy45OTYgNi41MSA2LjUxIDAgMCAwIDMuMTc4IDUuNTk1IDQuNTQgNC41NCAwIDAgMS0uMTM1LS4yNDJjLS40NzgtLjkzLS43MjgtMi4wMjYtLjU5NC0yLjkyM2E2LjY4MyA2LjY4MyAwIDAgMSAuNjc0LTIuMDk0Yy4wMTktLjAzNi4yMDMtLjMzMi4xNzItLjI4MmwuMDA1LS4wMDdhNC40NSA0LjQ1IDAgMCAwIC4xMDMtLjE3NWMtLjAxNy0uMDAzLS4wMjUtLjAwNS0uMDE1LjA3NC0uMDcyLS4zMTkuNTg1LS42NDkuODk3LS4xNzQuMzQ0LjUyMy44NC45NDYgMS40MTEgMS4yMDQuNDYyLS40OTIuNzk3LTEuMTMzLjk3Mi0xLjg0NC4xNzctLjcxMS4xOTgtMS40OTMuMDc3LTIuMzA5YS41LjUgMCAwIDEgLjgyOS0uNDQ1YzEuMjg4IDEuMTU3IDIuMjQgMi41NTQgMi43MTIgNC4wNjYuNTQ3IDEuNzUyLjQzOCAzLjY5NC0uMzUzIDUuMXptLTMuMzEzLjk2OGEzLjExNCAzLjExNCAwIDAgMCAxLjA4OC0uMjE3Yy4xMTQtLjA0Ni4yMjMtLjEuMzI4LS4xNjIgMS40OTItLjg4IDEuOTUzLTMuMjg1IDEuMjk2LTUuMzkxLS4yOTgtLjk1Mi0uODE3LTEuODYxLTEuNTE0LTIuNjg0YTYuMzEzIDYuMzEzIDAgMCAxLS4xNzkgMS4zMTRjLS4yMy45MzItLjY5IDEuNzc3LTEuMzM1IDIuNDEyYS43MzEuNzMxIDAgMCAxLS4zOC4yMjdjLS4xODMuMDQyLS4zMS4wMTMtLjQ4LS4wNTZhNC4zNSA0LjM1IDAgMCAxLTEuNTAzLTEuMDE5IDUuNzEgNS43MSAwIDAgMC0uNTAzIDEuNjRjLS4xLjY2Ny4xMDQgMS41NjIuNDk0IDIuMzE5LjM0NS42NjguODc3IDEuMTgzIDEuNDg4IDEuNDE4YTMuMTMzIDMuMTMzIDAgMCAwIDEuMi4yek03LjY3IDcuM0gxM2EuNS41IDAgMCAxIC40MTEuNzg0bC05LjEyIDEzLjJjLS4zMS40NDktMS4wMTIuMTQ4LS45LS4zODZMNS4xODQgMTIuM0gxYS41LjUgMCAwIDEtLjQ4My0uNjI5bDIuODgtMTAuOEEuNS41IDAgMCAxIDMuODguNWg3LjJhLjUuNSAwIDAgMSAuNDIyLjc2OEw3LjY3IDcuM3ptNC4zNzcgMUg2Ljc2YS41LjUgMCAwIDEtLjQyMi0uNzY4TDEwLjE3IDEuNUg0LjI2NGwtMi42MTMgOS44SDUuOGEuNS41IDAgMCAxIC40OS42MDJMNC44NzQgMTguNjggMTIuMDQ3IDguM3pcIixcbiAgICAgICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkSSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMjUgMjJcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTExLjA4LjI1Yy41NTY3NDE4IDAgLjkwNzI0MTUuNTc4MjY5MTMuNjgyMTI0NSAxLjA2MjU4NzgxbC0uMDQ5MDQ1MS4wODk1NDQ2NUw4LjEyNSA3LjA1IDEzIDcuMDUxYy41MzM1NDYgMCAuODczNTQ2Ny41Mjg1MjguNzEwMDI4OS45OTQ2MzM1MmwtLjAzOTUwOS4wOTIyMTM3MS0uMDUzNDg3My4wODk0OTg1M0w0LjQ5NzAzMjY1IDIxLjQyNjM0NThjLS40NDU2ODA3Ny42NDUwMTU0LTEuNDMxNjA3OTcuMjU2OTU3My0xLjM2NTg3OTYtLjQ4MTM1MTFsLjAxNDY2ODEyLS4wOTgyMzEzTDQuODc2IDEyLjU1MUgxYy0uNDI0NTM3MTIgMC0uNzQ5NjkwNTQtLjM0NjcwMzgtLjc1MDQwODM5LS43NDcxODgybC4wMDY3MDk4NS0uMTAxMDcyLjAxOTAxNzg4LS4wOTQ5NzAxIDIuODgtMTAuODAwOTk5OThjLjA3NzgxNzU4LS4yOTE4NDI5My4zMjE0MDA0Mi0uNTA0NzcwOC42MTMyMTc3My0uNTQ4NDg1MUwzLjg4LjI1aDcuMnptNy43OTUxOTE0IDYuMjgzNDkxN2MuNjUxNjk5NC42MDk4MTc3NiAxLjU2MjE5NTYgMS41OTAyODI4OSAyLjQ2OTAzNiAyLjgxMTk0NzIxIDEuNDIwODY0OCAxLjkxNDE0MDE5IDIuMzY1NzM2NSAzLjgyNDkxODM5IDIuNTk0NzcyNCA1LjYwNzE4OTI5bC4wMzI5Mzg0LjMxMzE1ODljLjA2MTg2NjMuMzU3MDE5Mi4wOTM4NTEzLjcwODk2MDYuMDkzODUxMyAxLjA1MDI3OSAwIDIuMTc1MDkwOS0xLjE2OTUyODcgNC4xNDgzMjY2LTMuMDE2Nzk4MyA1LjE5ODkxMDktLjcwODgzMjcuNDA0Mjk3MS0xLjU0MjExNTUtLjI0NjM4ODctMS4zNTkzOTA5LTEuMDEwODY3OGwuMDI5Njg5Mi0uMTAwMjgyN2MuMjQ0NDgxOC0uNjkxNDUxNS4yMzYzNjM5LTEuNjExNzYzNC4wMDM0NjY4LTIuMzY2ODI1MS0uMDc1NjY5Ny0uMjQ1MDMyOC0uMTc0MjY3MS0uNDg2MzU1OS0uMjk0MTQxOS0uNzIyMTIwMUwxOS4zMTUgMTcuMTA3bC0uMDUwNTk0OS4xODY1MTE3Yy0uMTY3NzQ3Ny41NDkxODQ2LS40NDAyNDIzIDEuMDUyNzUxLS44MDQyNjU2IDEuNDY3NDAzNGwtLjE2MTU3NTMuMTcyMTM4M2MtLjEzNTA2ODguMTM1MTM5Mi0uMjQ3OTk4Mi4yMTgwOTE5LS40NTE1ODIuMjYzNzcyMS0uMjM3MDkyNS4wNTY5MzY0LS4zOTIyNDIyLjAyMjE1NTktLjU4Mjk2NjgtLjA1Njc3NjktLjIxODc0MjgtLjA4OTIxMzctLjQyMjc4NjgtLjE5NzI3ODUtLjYxMTg5OC0uMzI0MjMxNkwxNi41MzggMTguNzMzbC0uMDE5NTIyNy4wNjQyNzY3Yy0uMDYyODMxNS4yMTcwNjQ5LS4wOTIwMjI1LjQwOTE5NzItLjA4NjY5MjQuNTc5MDI1N2wuMDEwNDg0LjEyMzIzMDRjLjA0NDI1NzUuMzEzNTk3Ny4xMzYxMjA0LjY0NTU1NDIuMjkyOTY1NSAxLjA4OTY0MjguMjU3MTEwNC43Mjk1MjIxLS41MDEzNzU3IDEuNDIzMTM4My0xLjIwODM0NTEgMS4wNjc4NTkyQzEzLjUzNjY5MTQgMjAuNjUzMTYyMyAxMi4yNSAxOC41OTc2NTYgMTIuMjUgMTYuMzE2MDY2MWMwLTEuMjIxNTU2OS4zNjIyMjYtMi4zODc4ODQyIDEuMDQ5MzAwMS0zLjM4NzkyMDlsLjE5NDE1MzItLjI3NDAyNTIuMDIyNjk1NC0uMDI2MTY2NGMuMDk2NzU2OS0uMTIwOTU0LjE4MzUxMzEtLjIyMTg5OTcuMjc2NDI2OS0uMzI0MDEwMSAxLjI3MDkxOTMtMS40ODE5MDM2IDIuMTc1MDU3OC0yLjgwMDk0ODYgMi43NzQ3MzQtMy45MzgxOTMxOS4zNDkwNzM2LS42NjE5OTQwOS41MjIzOTAyLTEuMTE2Mjg0MDguNTY3Njg0NS0xLjMwNTI2OTkyLjA4NjI3MjctLjM2MjczMzM4LjM1NzA4ODUtLjY1MzU1MjI5LjcxNjI1OTEtLjc2NDY3NjU0LjM1OTQwMDUtLjEwOTgwODA3Ljc0ODExNTMtLjAxODg2Nzg3IDEuMDIzOTM4Mi4yMzc2ODc4NXptLS4zNTYxMjM2IDEuNzY1MTE5OTNMMTguMzQ2IDguMTE3bC0uMDEwMDQ5OC4wMjYxODIyNmMtLjExMTE5MzIuMjYyNTgxOTMtLjI1NzAzMjEuNTcxODA3LS40NDE4MDUzLjkyMjIxNjU3LS42MDI1OTc4IDEuMTQyNzg1MzctMS40NzMzNzU3IDIuNDMzNDQxODctMi42NzA0MjQxIDMuODY4NjI1NDdsLS41MzI1NTk3LjYyNDExMjEuMDMwNjY1MS0uMDQ5MjQ2OS0uMDYyMDUzOS4wOTY1Njg1Yy0uNTk2MzU2MS43ODgxNDYxLS45MDk3NzIzIDEuNzIxODE0Ny0uOTA5NzcyMyAyLjcxMDYwODEgMCAxLjExNTgyOTEuNDEwMDExNyAyLjE1ODk0MjUgMS4xMDc4MzkyIDIuOTU3NzEwNUwxNC45MzIgMTkuMzU1bC0uMDAxMDkwMy0uMDgyMTU0NWMuMDA3Mzg3My0uMzY2MzcuMDg2MTMzNy0uNzM5NDA2Mi4yMjMxMzM4LTEuMTMzMjk4OWwuMDg5MDg1Ni0uMjM4OTUxOGMuMDQyMDU0Ny0uMTA2NDczNi4wODc5MzU2LS4yMTA0ODg4LjEzNzA0NDUtLjMxMDU0NjJsLjEwNjM0NTYtLjIwMTc0MzcuMTY1MzI1NC0uMjY5NjYyMS4wMzk4MTc2LS4wNTU2NTkzLjA2NTU5NTYtLjA4MzY4LjA0MTY0NzctLjAzNzc2MzNjLjAzNjUzNjYtLjAyODE4MzQuMDk2NzA1Ni0uMDY3MDc5Ny4yMTcwNDM3LS4xNDQ4NzI0LjI3MzExODktLjEyMjI0MDguNTgxOTMxMS0uMDg0MDM2My44MTM5OTc4LjA5MjUxNDIuMDkwMDYzMS4wNjg1MTc4LjE0ODA2ODQuMTM1MTc4My4xOTYyNjQzLjIxMDY3TDE3LjA2MyAxNy4xNjRsLjA4NzM2MTguMTA4NjQzNmMuMDc0MDUyMi4wODQ1MTQ1LjE1NDE1MTQuMTYwMjIwNS4yNDEyNTAyLjIyNzgzNjlMMTcuNDg5IDE3LjU2OGwuMDg5MzQyMi0uMTM3Mzc3OWMuMDk3MjQ1My0uMTY0NTAwMy4xNzc4MDI5LS4zNDQ5ODE2LjIzOTQwMTQtLjUzNjc0ODdsLjA1NTE5NDYtLjE5NTM1NTJjLjA4MDE5MjEtLjMyNzMzMzQuMTA4NzU1Ny0uNjgyOTc4OC4wODczODg4LTEuMDU4OTM5NS0uMDQ4Njc4MS0uODUxMzUyNC45ODY0NDA3LTEuMzIyMzI3OSAxLjU4NzU1LS42OTgwODIuNzUxMjc3Ljc4MDYyMTggMS4zMDg1ODUgMS42ODMwMzc3IDEuNjA4MTY5IDIuNjUzMTQ2Ni4xNjE5Mzc5LjUyNTAwOS4yNDU2NTk1IDEuMDk5NTgxMy4yNDQyMTQ2IDEuNjY5MjcyN0wyMS4zOTggMTkuMzM2bC4xMDkxMTI0LS4xMjE1ODU1Yy42MjE1NjY5LS43MzUyMjg4IDEuMDAxNjM0Mi0xLjY2NjU5NjQgMS4wNTI3NTgyLTIuNjY2NDU0M2wuMDA1OTE4OS0uMjMxODk0MWMwLS4xNjgwMzIzLS4wMTA2ODMyLS4zNDE1OTMzLS4wMzE5NDcxLS41MTg0MzkybC0uMDM5ODE4NS0uMjY3NDUyMi0uMDExNTA0MS0uMTMwODU4MS4wMDE5NTUuMDUwMjk4OWMtLjEzMjE4NzEtMS41OTYyNjk0LS45OTE4NDE5LTMuMzg3NjIwMy0yLjM0NDY4NDctNS4yMTAxMjM3LS41NjQwOTU1LS43NTk5Mjk5Ny0xLjEzMDg3NjQtMS40MjEwOTQ3OS0xLjYyMDcyMjMtMS45NDA4ODAxN3pNOS43MTQgMS43NUg0LjQ1NWwtMi40NzkgOS4zIDMuODI0LjAwMWMuNDA3ODY5ODkgMCAuNzI3MzYwMTkuMzIxMzc0NS43NDkwOTQxOS43MDY1MzRsLS4wMDA4OTA5My4wOTc0Njk2LS4wMTQwMjQ0My4wOTkyMzNMNS4zNzMgMTcuNTE4bDYuMTk2LTguOTY4LTQuODA5LjAwMWMtLjUyMTk0NTQ2IDAtLjg2MjYyMzM5LS41MDgyNDQzNS0uNzE3Njc4Ni0uOTcwODQxMTlsLjAzNTU1NDExLS4wOTE3NDY2Mi4wNDkwNDUxMi0uMDg5NTQ0NjVMOS43MTQgMS43NXpcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JEogPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDE0IDIyXCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk03LjY3IDcuMzAxSDEzYS41LjUgMCAwIDEgLjQxMS43ODRsLTkuMTIgMTMuMmMtLjMxLjQ0OC0xLjAxMi4xNDctLjktLjM4N0w1LjE4NSAxMi4zSDFhLjUuNSAwIDAgMS0uNDgzLS42MjlsMi44OC0xMC44QS41LjUgMCAwIDEgMy44OC41aDcuMmEuNS41IDAgMCAxIC40MjIuNzY4TDcuNjcgNy4zMDF6bS0uOTEgMWEuNS41IDAgMCAxLS40MjItLjc2OEwxMC4xNyAxLjVINC4yNjRsLTIuNjEzIDkuODAxSDUuOGEuNS41IDAgMCAxIC40OS42MDJsLTEuNDE1IDYuNzc4TDEyLjA0NyA4LjNINi43NnpcIixcbiAgICAgICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkSyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMTQgMjJcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTguMTI1IDcuMDVsMy41ODgtNS42NDhBLjc1Ljc1IDAgMCAwIDExLjA4LjI0OWgtNy4yYS43NS43NSAwIDAgMC0uNzI1LjU1N0wuMjc1IDExLjYwN0EuNzUuNzUgMCAwIDAgMSAxMi41NWgzLjg3N2wtMS43MzEgOC4yOTZjLS4xNjcuODAxLjg4NiAxLjI1MyAxLjM1LjU4bDkuMTItMTMuMkEuNzUuNzUgMCAwIDAgMTMgNy4wNUg4LjEyNXptMy40NDUgMS41bC02LjE5OCA4Ljk3IDEuMTYyLTUuNTY2YS43NS43NSAwIDAgMC0uNzM0LS45MDRIMS45NzZsMi40OC05LjNoNS4yNTlMNi4xMjcgNy4zOTdBLjc1Ljc1IDAgMCAwIDYuNzYgOC41NWg0LjgxelwiLFxuICAgICAgICBmaWxsUnVsZTogXCJub256ZXJvXCJcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCRMID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAxNCAyMlwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNNy42NyA3LjMwMWwzLjgzMi02LjAzM0EuNS41IDAgMCAwIDExLjA4LjVoLTcuMmEuNS41IDAgMCAwLS40ODMuMzcxTC41MTcgMTEuNjcyYS41LjUgMCAwIDAgLjQ4My42MjloNC4xODVMMy4zOSAyMC44OThjLS4xMTIuNTM0LjU5LjgzNS45LjM4Nmw5LjEyLTEzLjE5OUEuNS41IDAgMCAwIDEzIDcuMzAxSDcuNjd6bS0yLjc5NSAxMS4zOGwxLjQxNC02Ljc3OGEuNS41IDAgMCAwLS40ODktLjYwMkgxLjY1TDQuMjY1IDEuNWg1LjkwNkw2LjMzOCA3LjUzM2EuNS41IDAgMCAwIC40MjIuNzY4aDUuMjg3bC03LjE3MiAxMC4zOHpcIixcbiAgICAgICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkTSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMjkgMjhcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTEuMDUgMTYuODk3Yy4wODMtLjc3My41OS0uOTYgMS4xNC0uNDFsMi41MDYgMi41MDcgNC43MDktNC43MTEgNC4zNyA0LjM2OC00LjcxMSA0LjcxMiAyLjUwMyAyLjVjLjU1LjU0OC4zNjMgMS4wNi0uNDE1IDEuMTRsLTkuODg1Ljk5MmMtLjc3OC4wOC0xLjM0MS0uNDgyLTEuMjYtMS4yNmwxLjA0NC05LjgzOHptMjYuMDEtNS43OTNjLS4wODIuNzczLS41OTEuOTYtMS4xNDEuNDA5bC0yLjUwMy0yLjUwNC00LjcxIDQuNzEtNC4zNy00LjM3IDQuNzEtNC43MDgtMi41MDMtMi41MDZjLS41NDgtLjU0Ny0uMzYyLTEuMDU0LjQxNS0xLjEzNGw5Ljg4Ny0uOTkzYy43NzgtLjA4IDEuMzQyLjQ4MyAxLjI1OSAxLjI1OWwtMS4wNDMgOS44Mzd6XCIsXG4gICAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JE4gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDE1IDE1XCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0zLjQ5IDYuNWE1Ljc3NyA1Ljc3NyAwIDAgMCAwIDEuNWg2LjI2YS43NS43NSAwIDAgMSAwIDEuNUgzLjlBNS43NiA1Ljc2IDAgMCAwIDkuMTkxIDEzYzEuNyAwIDMuMzA0LS43NDkgNC40MDEtMi4wNTRhLjc1MS43NTEgMCAwIDEgMS4xNS45NjYgNy4yMzggNy4yMzggMCAwIDEtNS41NSAyLjU4OCA3LjI2IDcuMjYgMCAwIDEtNi44OTMtNUguNzVhLjc1Ljc1IDAgMCAxIDAtMS41aDEuMjNhNy4zMDMgNy4zMDMgMCAwIDEgMC0xLjVILjc1YS43NS43NSAwIDAgMSAwLTEuNWgxLjU0OWMuOTQ4LTIuOSAzLjY4LTUgNi44OTItNSAyLjE0NCAwIDQuMTY2Ljk0MyA1LjU1IDIuNTg4YS43NTEuNzUxIDAgMCAxLTEuMTQ5Ljk2NiA1LjczOSA1LjczOSAwIDAgMC00LjQtMi4wNTRBNS43NiA1Ljc2IDAgMCAwIDMuOSA1aDUuODVhLjc1Ljc1IDAgMCAxIDAgMS41SDMuNDl6XCIsXG4gICAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JE8gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDQgMTRcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTIgMTAuNWExLjUgMS41IDAgMTEwIDMgMS41IDEuNSAwIDAxMC0zek0zIDBhMSAxIDAgMDEuOTkgMS4xNDFsLTEgN2MtLjE2MyAxLjE0NS0xLjgxNiAxLjE0NS0xLjk4IDBsLTEtN0ExIDEgMCAwMTEgMHpcIixcbiAgICAgICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkUCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTUuOTMzIDEuOTg3YS43NS43NSAwIDAxMCAxLjVoLTQuMjZhLjE3My4xNzMgMCAwMC0uMTczLjE3M3YxMC4xNTRjMCAuMDk2LjA3Ny4xNzMuMTczLjE3M2gxMC4xNTRhLjE3My4xNzMgMCAwMC4xNzMtLjE3M1Y5LjQ5YS43NS43NSAwIDExMS41IDB2NC4zMjRjMCAuOTI0LS43NDkgMS42NzMtMS42NzMgMS42NzNIMS42NzNBMS42NzMgMS42NzMgMCAwMTAgMTMuODE0VjMuNjZjMC0uOTIzLjc0OS0xLjY3MyAxLjY3My0xLjY3M2g0LjI2ek04LjY4MyAwbDYgLjA2YS43Mi43MiAwIDAxLjQ5Ni4yMS43MTguNzE4IDAgMDEuMTYuMjM1LjY5LjY5IDAgMDEuMDYuMjY3bC4wNiA2LjAwNGEuNjkuNjkgMCAwMS0uNy43LjcyNy43MjcgMCAwMS0uNzE2LS43MTVsLS4wNDItNC4yOTQtNi43MTQgNi43MTZhLjcwNy43MDcgMCAwMS0xLS4wMS43MDkuNzA5IDAgMDEtLjAxMi0xbDYuNzE2LTYuNzE2LTQuMjk1LS4wNDJBLjcyNS43MjUgMCAwMTcuOTgyLjdhLjY5Mi42OTIgMCAwMS43LS43elwiLFxuICAgICAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCRRID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCA4IDE0XCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk03LjI1NSAyLjU5MWwtMS4yNDMuMDAxYy0uOTc0IDAtMS4xNjMuNDYzLTEuMTYzIDEuMTQydjEuNDk4aDIuMzI0TDYuODcgNy41NzlINC44NVYxMy42SDIuNDI1VjcuNThILjRWNS4yMzFoMi4wMjZ2LTEuNzNDMi40MjYgMS40OTMgMy42NTMuNCA1LjQ0NC40Yy44NTggMCAxLjU5Ni4wNjQgMS44MS4wOTJ2Mi4xelwiLFxuICAgICAgICBmaWxsUnVsZTogXCJub256ZXJvXCJcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCRSID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAxOCAxMlwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0wIDBoMTh2Mkgwek0zIDVoMTJ2Mkgzek03IDEwaDR2Mkg3elwiXG4gICAgICB9KSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JFMgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDE0IDIxXCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xLjc1IDIwYS43NS43NSAwIDExLTEuNSAwVjFBLjc1Ljc1IDAgMDExIC4yNWg1YS43NS43NSAwIDAxLjY1NC4zODNMNy41NiAyLjI1aDQuODI2YS43NS43NSAwIDAxLjc1Ljc1djlhLjc1Ljc1IDAgMDEtLjc1NC43NWwtNS4yNjUtLjAyOWEuNzUuNzUgMCAwMS0uNjQ4LS4zNzlsLS45MDUtMS41OTItMy44MTQtLjAwMXpNNS41NiAxLjc1SDEuNzV2Ny41SDZhLjc1Ljc1IDAgMDEuNjUyLjM4bC45MDcgMS41OTQgNC4wNzcuMDIyVjMuNzVINy4xMmEuNzUuNzUgMCAwMS0uNjU0LS4zODNMNS41NiAxLjc1elwiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkVCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMTM1IDIwNVwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNNjkuODYyIDE1My41NjJjLjA5MS4yNTguMTM4LjUzLjEzOC44MDV2NDguMjY3YzAgMS4zMDctMS4wMzggMi4zNjYtMi4zMTggMi4zNjYtLjI2OSAwLS41MzUtLjA0OC0uNzg4LS4xNDFMMS41MyAxODAuNzI1Yy0xLjIwNC0uNDQ0LTEuODI3LTEuOC0xLjM5MS0zLjAzYTIuMzQzIDIuMzQzIDAgMDExLjM5MS0xLjQybDY1LjM2NC0yNC4xMzNjMS4yMDQtLjQ0NSAyLjUzMi4xOTEgMi45NjggMS40MnptNjQuOTk5LTg5Ljk3OGMuMDkyLjI2Mi4xMzkuNTM5LjEzOS44MTh2NDAuNzQzYzAgMS4wMTItLjYxNSAxLjkxNi0xLjUzOCAyLjI1OUwzLjExNyAxNTUuODU3Yy0xLjIxLjQ1LTIuNTQzLS4xOTctMi45OC0xLjQ0NWEyLjQ2OSAyLjQ2OSAwIDAxLS4xMzctLjgxNHYtNDAuNTJjMC0xLjAxLjYxNC0xLjkxMyAxLjUzNS0yLjI1N0wxMzEuODggNjIuMTQ0YzEuMjA5LS40NTEgMi41NDMuMTkzIDIuOTgxIDEuNDR6bTAtNjJjLjA5Mi4yNjIuMTM5LjUzOS4xMzkuODE4djQwLjc0M2MwIDEuMDEyLS42MTUgMS45MTYtMS41MzggMi4yNTlMMy4xMTcgOTMuODU3Yy0xLjIxLjQ1LTIuNTQzLS4xOTctMi45OC0xLjQ0NUEyLjQ2OSAyLjQ2OSAwIDAxMCA5MS41OThWNzIuMjA1YzAtMTMuNjkgOC4zMTMtMjUuOTE1IDIwLjc5My0zMC41NzZMMTMxLjg4LjE0NGMxLjIwOS0uNDUxIDIuNTQzLjE5MyAyLjk4MSAxLjQ0elwiLFxuICAgICAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCRVID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAyMSAxOFwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMTQuNjc1LjUxNWMyLjAxNyAwIDMuNjUxIDEuNjQ0IDMuNjUxIDMuNjcyIDAgMi4wMjctMS42MzQgMy42NzEtMy42NSAzLjY3MS0yLjAxNyAwLTMuNjUxLTEuNjQ0LTMuNjUxLTMuNjcxIDAtMi4wMjggMS42MzQtMy42NzIgMy42NS0zLjY3MnptMCAxLjAzYTIuNjM3IDIuNjM3IDAgMCAwLTIuNjI2IDIuNjQyIDIuNjM3IDIuNjM3IDAgMCAwIDIuNjI2IDIuNjQgMi42MzYgMi42MzYgMCAwIDAgMi42MjctMi42NCAyLjYzNyAyLjYzNyAwIDAgMC0yLjYyNy0yLjY0MXptNS4zMTQgMTQuNTA5VjExLjIyYzAtLjc1NS0uNjA4LTEuMzY2LTEuMzU2LTEuMzY2aC01LjMxNWEuNS41IDAgMSAxIDAtMWg1LjMxNWEyLjM2MSAyLjM2MSAwIDAgMSAyLjM1NiAyLjM2NnY1LjMzNGEuNS41IDAgMCAxLS41LjVoLTYuNTU1YS41LjUgMCAxIDEgMC0xaDYuMDU1ek02LjI1OC41MTVjMi4wMTYgMCAzLjY1IDEuNjQ0IDMuNjUgMy42NzIgMCAyLjAyNy0xLjYzNCAzLjY3MS0zLjY1IDMuNjcxcy0zLjY1LTEuNjQ0LTMuNjUtMy42NzFjMC0yLjAyOCAxLjYzNC0zLjY3MiAzLjY1LTMuNjcyem0wIDEuMDNhMi42MzcgMi42MzcgMCAwIDAtMi42MjYgMi42NDIgMi42MzYgMi42MzYgMCAwIDAgMi42MjYgMi42NCAyLjYzNiAyLjYzNiAwIDAgMCAyLjYyNi0yLjY0IDIuNjM3IDIuNjM3IDAgMCAwLTIuNjI2LTIuNjQxem00LjE3MiA3LjM2M2MxLjE1MiAwIDIuMDg2LjkzOSAyLjA4NiAyLjA5OFYxN0gwdi01Ljk5NGMwLTEuMTYuOTM0LTIuMDk4IDIuMDg2LTIuMDk4aDguMzQ0em0wIDEuMDNIMi4wODZjLS41ODYgMC0xLjA2MS40NzktMS4wNjEgMS4wNjh2NC45NjRoMTAuNDY3di00Ljk2NGMwLS41OS0uNDc2LTEuMDY4LTEuMDYyLTEuMDY4elwiLFxuICAgICAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCRWID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAyOSAzOFwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMTMuNzQ1OTc3Mi4wNzcyNTY2N2MuNjA2MTg0OS0uMTg1MjA4NDMgMS4yNjE2NDctLjAzMTg2MjQ1IDEuNzI3MjA2OS40MDExNzQ4NmwuNDAwOTQ2Ni4zODQwOTY0OGMuNDQ1NTY4NC40MzUzMzAwMiAxLjAyMDYwNjcgMS4wMjE5MzQ2NiAxLjY4NTU1MjYgMS43Mzc5Nzk3MiAxLjQxMjUzNDIgMS41MjEwODMyNSAyLjgyMzYwOSAzLjE5NTQ2NjAxIDQuMTUxMjk3NCA0Ljk4NDA4MjIxIDMuNjU2NzYzOCA0LjkyNjI2NjU2IDYuMDQ5MjM2NCA5LjgyNzUyODc2IDYuNTQ0MzgzOSAxNC4zODE2MzA1NkwyOC4zMDQgMjIuNDdsLjA3NTEzODIuNDY3ODEzM2MuMDczMjY2Mi41MTI3OTExLjExOTQyMDUgMS4wMjEzMTM3LjEzNzkxODUgMS41MjEwOTAxbC4wMDkyNTkxLjQ5NjY5NTJjMCA1LjI1NjI0NTUtMi44MjU2MDEgMTAuMDIzNjE2My03LjI4ODk2NjcgMTIuNTYyMDM0Ny0xLjE1NjMwOTMuNjU5NTI0Ni0yLjUyOTQwNDEtLjQ4MDg2MjctMi4wODM3MTcyLTEuNzQxMTA4MS42OTg1OTQtMS45NzU3ODcuNjc1OTI4Ny00LjU0NTMyNjEuMDIwNjg0NC02LjY2OTY1MzctLjQ3MTQ2NDUtMS41MjY2OTA0LTEuMjU5MzEzMy0yLjk5MzIyNjItMi4zMTAyMTMzLTQuMzQ0MzMwNUwxNi42OCAyNC41MzNsLS4wMjIxNzY5LjM1MTI2NTRjLS4wMzc1NzMxLjQ0OTEyMzEtLjA5OTY5NDQuODkwNDMxOC0uMTg3MTAyNiAxLjMyMjYwNDdsLS4wOTU4NjQ1LjQyOTA3ODhjLS40MTU2MzkgMS42OTYxOTk2LTEuMjQxODc4NiAzLjIzMjM0NjgtMi40MDY3NDY4IDQuMzkyNjE3NC0uMjI4NDE3OS4yMjg1MzcxLS40MTAwNDA2LjM2MTk0ODYtLjcyMTI2NzMuNDMxNzk3Ny0uMzYwMDk4Ni4wODY0NzU2LS42MDg0OTY0LjAzMDc5MTMtLjkzMTU1OTMtLjEwMjkwNjgtLjkyODY1OTItLjM3ODc1MTUtMS43MzgwNTEtLjkwMjA5NjYtMi40Mjk4NTYzNy0xLjU3NDE3OTdMOS43MSAyOS42MDVsLS4wOTQ0NjU2MS4yMDQ4MjM2LS4xMjQyMjI4OS4yOTc0NzM4Yy0uNDg3MzY1MDcgMS4yMjg2NjQ4LS42ODc4MDY5NyAyLjI2MjIxNjQtLjU1OTIyMjkzIDMuMTY0MTIwNC4xMjQwNDU4Ljg3ODk1NzIuMzc1MTMxMSAxLjc4NjI4MTQuNzk3MDI3MzggMi45ODA4MzEuMzg2OTQ2MzUgMS4wOTc5MTcyLS43NTM0Mzk4NiAyLjE0MDc3MTMtMS44MTMyMDk1NyAxLjYwODE5NjlDMy4xMDg4NjMyMyAzNS40MzU3MzI3IDAgMzAuNDY5MjgzMyAwIDI0Ljk1NTU5ODZjMC0zLjA0MjIyODcuOTI3OTMyOTgtNS45Mzg4MTcyIDIuNjg3NTIyMy04LjQwMzc4MjRMMi44OTIgMTYuMjcybC4wMTA1OTA3My0uMDE2MjIzOGMuMDM2MDg1MzctLjA1ODcwMDkuMDczMTE0MTMtLjExMTg1MDguMTA1NDU4ODgtLjE1MjY4MjJsLjA0NDMwMDctLjA1MTE2MjJjLjIzNTkzMDYxLS4yOTQ5MzI1LjQ0Njg2NjI1LS41NDAzNjguNjkwNTU2OTgtLjgwODcxNzNDNy4wNTUzNTIwNSAxMS4zODA4NzMxIDkuNDE5NTM2NiA3LjkzMTc3MTYgMTAuOTk0NDU2MSA0Ljk0NTA0NTExYy41NDY4NDQ4LTEuMDM3MDUzNi45NTU5MjEyLTEuOTQwMTY0NTEgMS4yNDcwMTI2LTIuNzAzMTYwNzlsLjExMzk5NjMtLjMwODE3MTkzYy4wNjY4NzM5LS4xODcwNzE0NC4xMTU2MTA5LS4zMzYyNjM3Mi4xNDY4NzQ4LS40NDA4MTk5OWwuMDMzODczOS0uMTIyNTEyODFjLjE0NjAzNi0uNjE0MDA3NTQuNjAzODc2Mi0xLjEwNTY2NDk0IDEuMjA5NzYzNS0xLjI5MzEyMjkyek0yNi4yNzM1MiAyMi4yMzIzMzMxYy0uNDY0OTE5OS00LjE5OTU5MTQtMi43MTExMTI5LTguNzk4MDU5MS02LjE2ODQ1NTctMTMuNDU1NjcyNi0xLjI4MTAyODgtMS43MjU3NTc5OC0yLjY0NTU4ODEtMy4zNDQ5NDUzMy00LjAxMDkyMDEtNC44MTUxOTg5N2wtLjY3OTg3Ny0uNzIwMDcwNWMtLjI4MzQ3MjUtLjI5NTAyNjQxLS41NDA3NDYyLS41NTU5ODc4My0uNzY2NzMxOS0uNzc5OTgzODVMMTQuMzggMi4ybC0uMDE2NDMzNS4wNTUxNzAxNmMtLjIzMTYwNjcuNzM4MDczMjYtLjY5MTY2MDkgMS44NjQxNDQxNC0xLjQzNjEwMDcgMy4zMDg0MDkzNmwtLjE2Mzg5Ni4zMTQzMzAyOGMtMS42NDU3NzA0IDMuMTIxMDkwNC00LjA5NDUwNzk1IDYuNjkzNTQ2MS03LjUyMDU5MzAxIDEwLjY4NzgxODlsLS4yNjYxNTI2NS4yOTk3MzEzYy0uMDg1NjI1OTkuMDk4NzQ5LS4xNzA3MDQxOC4xOTkzODAyLS4yNjI4NjU4Ny4zMTEwMjU0TDQuNTg5IDE3LjMyOWwtLjA2MTQ5ODM3LjA5NjE3MDhjLTEuNTc2Njk5MjQgMi4wODM3NzA2LTIuNDQyNjgwMzIgNC41MzkwOTM5LTIuNTIxNTc5NDIgNy4xMzkzMzMzTDIgMjQuOTU1NTk4NmMwIDQuMTA0NzA0MSAxLjk5Nzg3MDUxIDcuODU2MDYwNyA1LjIwNzQzOTEgMTAuMTQ2OTI2TDcuMjg3IDM1LjE1N2wtLjA1NTU3MjU3LS4yMDY2MzA4Yy0uMDkyMDQxMjEtLjM2MDkxODgtLjE2Njc3MjE1LS43MDg0MDg3LS4yMjU3NDIwOS0xLjA1MzQ0MjdsLS4wNTM3NzM2Ni0uMzQ0NjIxOGMtLjE4NjI0NDU2LTEuMzA2MzMxNi4wNzYxNDMzNC0yLjY1OTI5OTMuNjc5Nzc4NzQtNC4xODEwODI5LjE0ODQ5MTc0LS4zNzU5NDg5LjMxNjgwMzgtLjczNzkyMjcuNTAxODQzMzgtMS4wNzczNTMxbC4xMjg5NjYyMi0uMjI3MDg2Ni4yMTgyMDUxMS0uMzU5NTM4NS4xMDc2MTE1LS4xNjc4MzY2Yy4wNDMyNDIwNy0uMDYzOTY3NC4wODQ5MDgyNS0uMTIwOTk0LjEyOTY5NzQzLS4xNzQ5MjEzLjExODcxOTE3LS4xNDI5NDEuMjIyNzIwOTctLjI0MDQ2MDEuNDE2NjI1NzUtLjMyNTUwMjEuNjk3MjM4NTMtLjMxMjA2NTUgMS4xNjk3Mzk4OS0uMDA1MjU0OSAxLjQ2MTI2NjU5LjQ3NDM2NzFMMTAuNjc1IDI3LjY1NGwuMTQ4NjIxNS4xOTQ0NjczYy40NzkzMzYuNTk0MzE5NiAxLjA0ODMwMSAxLjA2MTEwOTUgMS43MjQzMTM1IDEuNDE0NzY4N0wxMi43NzggMjkuMzc2bC4xNzI4Mjk0LS4xOTY0OTVjLjYyOTU2OTEtLjc1ODA3MTIgMS4xMDcxMDYzLTEuNjg3NjIyNCAxLjM5OTM4OTctMi43MTAwNjQ1bC4wODIwOTQyLS4zMDk0NDA4Yy4yMjkwNTA0LS45MzQ5NTQxLjMwOTg2OTgtMS45NDEyMzQ0LjI0OTg3MDUtMi45OTY5NDY4LS4wNzY1MDM0LTEuMzM4MDAxNSAxLjU0NDg0MTUtMi4wNzU3MDc4IDIuNDg2MTYtMS4wOTgxNTc5IDEuODM1MjkzIDEuOTA2OTc5IDMuMTkxNjM5NyA0LjEwMzIzMTEgMy45MTcwMjU0IDYuNDUyMTY1Ny42MjEyMzkzIDIuMDE0MDgyMS43NjI0NjE2IDQuMzQxMjYyNC4zNTkyOTY3IDYuNDIxMjk5TDIxLjQyOCAzNS4wMTVsLjE2MTMzMDQtLjExODE3ODhjMi45NzUzNDE4LTIuMjQ3MzkyOCA0LjgzMTgxNDYtNS43NjExOTYgNC45MzI2NTYyLTkuNjEwNDgzOGwuMDA0MzI5Mi0uMzMwNzM4OGMwLS41NjI3MDk2LS4wNDI3MDcxLTEuMTQ1MTcxMy0uMTI3NDAxMy0xLjczNzIxMTVsLS4wNzEzODItLjQ0NTY2Ny0uMDU0MDEyNS0uNTQwMzg3elwiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkVyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMTUgMjBcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTYuNTYzIDE2LjQxYy4yMDcuMDg2LjM3Mi4xMjMuNjE5LjA2My4yMTMtLjA0Ny4zMzMtLjEzNi40NzktLjI4Mi42MTYtLjYxMyAxLjA1LTEuNDIyIDEuMjctMi4zMTQuMDM1LS4xNDcuMDY2LS4yOTcuMDktLjQ0OC4zNjYuNTQuNjQ2IDEuMTEuODI3IDEuNjk4LjMxMyAxLjAxMy4zMjQgMi4yNDMtLjAwNyAzLjE3OC0uMy44NDkuNjIzIDEuNjE1IDEuNDAyIDEuMTcxYTcuNDY4IDcuNDY4IDAgMCAwIDMuNjUyLTcuODE0Yy0uMTk0LTIuMzc0LTEuNDI2LTQuOTQyLTMuMzM5LTcuNTE5QTI5LjkyMiAyOS45MjIgMCAwIDAgOS40NjMgMS42MyAyMi42MyAyMi42MyAwIDAgMCA4LjQwNy41NTdhMS4xMzYgMS4xMzYgMCAwIDAtMS44ODIuNTcgNC4yOTEgNC4yOTEgMCAwIDEtLjEzOC40MDUgMTIuNCAxMi40IDAgMCAxLS42MSAxLjMyNGMtLjc4IDEuNDc2LTEuOTUxIDMuMTg2LTMuNTk1IDUuMTAzLS4xMi4xMzItLjIzLjI1OS0uMzUxLjQxYS43NzguNzc4IDAgMCAwLS4wOTEuMTI1IDcuNDMzIDcuNDMzIDAgMCAwLTEuNDkgNC40ODQgNy40NzIgNy40NzIgMCAwIDAgNC4wOTUgNi42NzVjLjczNC4zNyAxLjUyMy0uMzUyIDEuMjU1LTEuMTEtLjIwNi0uNTgzLS4zMjctMS4wMjItLjM4Ni0xLjQ0Mi0uMDU1LS4zOC4wMjYtLjgzLjIzLTEuMzcuMzI5LjI4My43MDIuNTA5IDEuMTIuNjh6bS0uNTY2LTIuMjg1bC4wMTkuMDI0LjAxLjAxNC0uNjA2LjQ0Mi41NzctLjQ4em0uMDUuMDYzYS44NS44NSAwIDAgMC0uMjUzLS4zMDMuODEyLjgxMiAwIDAgMC0uODI5LS4wOTRjLS4xOTkuMDg3LS4yNS4xNS0uMzc4LjMzOWwtLjAyNC4wMzdhMy40NTkgMy40NTkgMCAwIDAtLjA2Ny4xMDhsLS4wMTYuMDI2YTUuMDk3IDUuMDk3IDAgMCAwLS4zOTcuNzkzYy0uMzE2Ljc5Ny0uNDU1IDEuNTE0LS4zNTUgMi4yMTdsLjAyMS4xMzhhNS45ODUgNS45ODUgMCAwIDEtMS45OTktNC40NzFjMC0xLjMxOC40MTgtMi41NjQgMS4yMTMtMy42MTVsLjA2Mi0uMDk2YS4zOTIuMzkyIDAgMCAxLS4wNTYuMDc5Yy4xMzQtLjE2NS4yMjMtLjI2OS4zMzgtLjM5NSAxLjczLTIuMDE2IDIuOTY0LTMuODE4IDMuNzk2LTUuMzk1LjMyLS42MDYuNTQ2LTEuMTEzLjY5NC0xLjUwMmEyNy41MjMgMjcuNTIzIDAgMCAxIDIuNTU1IDIuOTgzYzEuNzYgMi4zNzMgMi44ODIgNC43MDkgMy4wNTYgNi44MS0uMDAzLS4wMzctLjAwMy0uMDM3LS4wMDItLjA0OGwuMDEyLjEzMWE1Ljk3NSA1Ljk3NSAwIDAgMS0xLjg2MyA1LjQ3OCA3LjExOSA3LjExOSAwIDAgMC0uMjczLTIuNzIzYy0uMzc1LTEuMjE0LTEuMDc0LTIuMzQ1LTIuMDE4LTMuMzI2LS42MzMtLjY1OC0xLjcyNC0uMTYxLTEuNjczLjczNy4wMy41MDQtLjAxLjk4Mi0uMTE4IDEuNDI1YTMuNTQzIDMuNTQzIDAgMCAxLS42NDYgMS4zNTUgMi40NTUgMi40NTUgMCAwIDEtLjc4LS42ODh6XCJcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCRYID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAyMSAyMFwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMTguOTE2NiAxMC4wMzg5QzE4LjkxNjYgMTAuMTI0OCAxOC44NDM1IDEwLjE5NzIgMTguNzU2NyAxMC4xOTcySDIuMzMwNDhDMi4yNDM2OCAxMC4xOTcyIDIuMTcwNTggMTAuMTI0OCAyLjE3MDU4IDEwLjAzODlWNy41MjkxM0MyLjE3MDU4IDcuNDQyMjggMi4yNDM2OCA3LjM2OTkgMi4zMzA0OCA3LjM2OTlIMTguNzU2N0MxOC44NDM1IDcuMzY5OSAxOC45MTY2IDcuNDQyMjggMTguOTE2NiA3LjUyOTEzVjEwLjAzODlaTTE3LjE5NzcgMTguNTczMkMxNy4xOTc3IDE4LjYwOTQgMTcuMTYzOSAxOC42NDI5IDE3LjEyNzQgMTguNjQyOUgxMS4yMjgzVjExLjU1NDNIMTcuMTk3N1YxOC41NzMyWk05Ljg1NzgzIDE4LjY0MjlIMy45NTk2OEMzLjkyMjIyIDE4LjY0MjkgMy44ODkzMyAxOC42MDk0IDMuODg5MzMgMTguNTczMlYxMS41NTQzSDkuODU3ODNWMTguNjQyOVpNNy41NDUyOSAxLjM1NzE2QzguNzg5NzkgMS4zNTcxNiA5LjgwMTI5IDIuMzU5NjEgOS44MDEyOSAzLjU5MDk1VjUuODI0NzNINy41NDUyOUM2LjMwMTcgNS44MjQ3MyA1LjI4OTI4IDQuODIyMjkgNS4yODkyOCAzLjU5MDk1QzUuMjg5MjggMi4zNTk2MSA2LjMwMTcgMS4zNTcxNiA3LjU0NTI5IDEuMzU3MTZaTTExLjIyODMgNC45MzQ0QzExLjIyODMgMy44NTE0MyAxMi4xMTgzIDIuOTcxMTMgMTMuMjEyIDIuOTcxMTNDMTQuMzA2NyAyLjk3MTEzIDE1LjE5NTggMy44NTE0MyAxNS4xOTU4IDQuOTM0NEMxNS4xOTU4IDUuMzM1MTkgMTUuMDY5NyA1LjcwMzQyIDE0Ljg1OTUgNi4wMTI4NEgxMS4yMjgzVjQuOTM0NFpNMTguNzU2NyA2LjAxMjg1SDE2LjM3MTlDMTYuNDkyNSA1LjY3NDQ4IDE2LjU2NjUgNS4zMTQzOSAxNi41NjY1IDQuOTM0NDFDMTYuNTY2NSAzLjEwMzIzIDE1LjA2MTYgMS42MTMxNCAxMy4yMTIyIDEuNjEzMTRDMTIuMzQ5NiAxLjYxMzE0IDExLjU3MDIgMS45NDY5OCAxMC45NzU0IDIuNDc4OTdDMTAuNDk5MyAxLjA0NDk3IDkuMTUwNjUgMCA3LjU0NTIyIDBDNS41NDU5OCAwIDMuOTE4NjIgMS42MTEzMyAzLjkxODYyIDMuNTkwODhDMy45MTg2MiA0LjUzMDkgNC4yOTUwOCA1LjM3NjgyIDQuODk2MzEgNi4wMTI4NUgyLjMzMDU1QzEuNDg2MjYgNi4wMTI4NSAwLjgwMDA0OSA2LjY5MzIxIDAuODAwMDQ5IDcuNTI5MThWMTAuMDM4OUMwLjgwMDA0OSAxMC44NzQ5IDEuNDg2MjYgMTEuNTU0MyAyLjMzMDU1IDExLjU1NDNIMi41MTg3OFYxOC41NzMyQzIuNTE4NzggMTkuMzYwNCAzLjE2NDc5IDIwIDMuOTU5NzQgMjBIMTcuMTI3NUMxNy45MjI1IDIwIDE4LjU2ODUgMTkuMzYwNCAxOC41Njg1IDE4LjU3MzJWMTEuNTU0M0gxOC43NTY3QzE5LjYwMSAxMS41NTQzIDIwLjI4NzIgMTAuODc0OSAyMC4yODcyIDEwLjAzODlWNy41MjkxOEMyMC4yODcyIDYuNjkzMjEgMTkuNjAxIDYuMDEyODUgMTguNzU2NyA2LjAxMjg1WlwiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkWSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMjEgMTdcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCB7XG4gICAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICAgICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMS4xIDZ2MTBoMThWNmgtMTh6bTE4LTFjLjU0OSAwIDEgLjQ1IDEgMXYxMGMwIC41NS0uNDUxIDEtMSAxaC0xOGMtLjU1MSAwLTEtLjQ1LTEtMVY2YzAtLjU1LjQ0OS0xIDEtMWgxOHpcIixcbiAgICAgICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMTMuNSAxMS41YS41LjUgMCAxIDEgMC0xaDdhLjUuNSAwIDEgMSAwIDFoLTd6XCIsXG4gICAgICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIlxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTMuOCA1SDFMMTMuNjY0LjQ3N0ExIDEgMCAwIDEgMTUgMS40MlY1aC0xdi42MzdMMSA2bDIuOC0xelwiXG4gICAgICB9KSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JFogPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDIwIDE2XCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgICAgZDogXCJNMTIuMjguMDhMLjgyIDQuMThoLjA2YS45LjkgMCAwMC0uODguOXY5LjA1YzAgLjUuNC45LjkuOWgxNi4zYy41IDAgLjktLjQuOS0uOXYtMy44NWguMzdhLjY4LjY4IDAgMTAwLTEuMzVoLS4zNlY1LjA4YzAtLjUtLjQxLS45LS45LS45aC0zLjcyVi45MmEuOS45IDAgMDAtMS4yLS44NXpNMS4zNiA1LjUzdjguMTVoMTUuMzl2LTMuNGgtNC42MmEuNjguNjggMCAwMTAtMS4zNWg0LjYydi0zLjRIMS4zNXpcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JF8gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHJvbGU6IFwiaW1nXCIsXG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInRpdGxlXCIsIG51bGwsICdHaXRIdWIgaWNvbicpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xMiAuMjk3Yy02LjYzIDAtMTIgNS4zNzMtMTIgMTIgMCA1LjMwMyAzLjQzOCA5LjggOC4yMDUgMTEuMzg1LjYuMTEzLjgyLS4yNTguODItLjU3NyAwLS4yODUtLjAxLTEuMDQtLjAxNS0yLjA0LTMuMzM4LjcyNC00LjA0Mi0xLjYxLTQuMDQyLTEuNjFDNC40MjIgMTguMDcgMy42MzMgMTcuNyAzLjYzMyAxNy43Yy0xLjA4Ny0uNzQ0LjA4NC0uNzI5LjA4NC0uNzI5IDEuMjA1LjA4NCAxLjgzOCAxLjIzNiAxLjgzOCAxLjIzNiAxLjA3IDEuODM1IDIuODA5IDEuMzA1IDMuNDk1Ljk5OC4xMDgtLjc3Ni40MTctMS4zMDUuNzYtMS42MDUtMi42NjUtLjMtNS40NjYtMS4zMzItNS40NjYtNS45MyAwLTEuMzEuNDY1LTIuMzggMS4yMzUtMy4yMi0uMTM1LS4zMDMtLjU0LTEuNTIzLjEwNS0zLjE3NiAwIDAgMS4wMDUtLjMyMiAzLjMgMS4yMy45Ni0uMjY3IDEuOTgtLjM5OSAzLS40MDUgMS4wMi4wMDYgMi4wNC4xMzggMyAuNDA1IDIuMjgtMS41NTIgMy4yODUtMS4yMyAzLjI4NS0xLjIzLjY0NSAxLjY1My4yNCAyLjg3My4xMiAzLjE3Ni43NjUuODQgMS4yMyAxLjkxIDEuMjMgMy4yMiAwIDQuNjEtMi44MDUgNS42MjUtNS40NzUgNS45Mi40Mi4zNi44MSAxLjA5Ni44MSAyLjIyIDAgMS42MDYtLjAxNSAyLjg5Ni0uMDE1IDMuMjg2IDAgLjMxNS4yMS42OS44MjUuNTdDMjAuNTY1IDIyLjA5MiAyNCAxNy41OTIgMjQgMTIuMjk3YzAtNi42MjctNS4zNzMtMTItMTItMTJcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JCQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDE5IDEzXCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0uNDIzIDEuNzEyQS45MjcuOTI3IDAgMCAxIC4wNDEuNjY0Ljk0OC45NDggMCAwIDEgLjk1MSAwSDE4LjA1YS45NS45NSAwIDAgMSAuOTA5LjY2My45MjQuOTI0IDAgMCAxLS4zODMgMS4wNDhsLTguNTQgNS42MDVhLjk2Ljk2IDAgMCAxLTEuMDUzIDBMLjQyMyAxLjcxM3ptMTQuMzggNC45MjljLjIzNyAwIC4zOTcuMTk1LjM5Ny41NDJ2NC44ODNhLjk0NS45NDUgMCAwIDEtLjk1LjkzNGgtOS41YS45NDUuOTQ1IDAgMCAxLS45NS0uOTM0VjcuMjM0YzAtLjM0NS4xNTgtLjUzOC4zOS0uNTM4LjExNCAwIC4yNDYuMDQ2LjM4NS4xNDNsNC4wNTYgMi44MTljLjIxNC4xNS41LjIyNS43ODMuMjI1LjI4IDAgLjU2LS4wNzMuNzczLS4yMThsNC4yMzItMi44ODRhLjcuNyAwIDAgMSAuMzg0LS4xNHptMy44LTIuNTljLjIzNyAwIC4zOTcuMTk0LjM5Ny41NDJ2Ny40NzJhLjk0NC45NDQgMCAwIDEtLjk1LjkzNS45NDUuOTQ1IDAgMCAxLS45NS0uOTM1VjYuMTExYzAtLjUxNC0uMDEtMS4wMzItLjAyLTEuMDY3LS4wMTItLjAzNS4zMzEtLjMwMi43Ni0uNTk1bC4zOC0uMjU4Yy4xNC0uMDk1LjI3LS4xNC4zODMtLjE0ek0xLjE2IDQuNDY1Yy40MjYuMjk2Ljc1OS42MjMuNzUyLjY1NS0uMDA2LjAzLS4wMTIuNDc3LS4wMTIuOTl2NS45NTVBLjk0NC45NDQgMCAwIDEgLjk1IDEzYS45NDUuOTQ1IDAgMCAxLS45NS0uOTM0VjQuNTkzYzAtLjM0NS4xNTgtLjUzOC4zOS0uNTM4LjExNSAwIC4yNDYuMDQ1LjM4Ni4xNDNsLjM4NC4yNjd6XCIsXG4gICAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JDEwID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAyMCAxN1wiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMCAwaDIwdjNIMFYwem0wIDdoMjB2M0gwVjd6bTAgN2gyMHYzSDB2LTN6XCJcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCQxMSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMTcgMTZcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTkuMTg4IDEzLjQ5MWEyOS4xOTYgMjkuMTk2IDAgMDAyLjUxMy0yLjM4MmMxLjk0Mi0yLjA4MyAzLjIwOC00LjEzNSAzLjQ5LTUuOTc3YTQuOTYgNC45NiAwIDAwLjA1OS0uNzUyYzAtMS40MzQtMS4zMjctMi42My0zLTIuNjMtMS42NzQgMC0zIDEuMTk1LTMgMi42MyAwIDEtMS41IDEtMS41IDAgMC0xLjQzNC0xLjMyNy0yLjYzLTMtMi42My0xLjY3NCAwLTMgMS4xOTUtMyAyLjYzIDAgLjI0NC4wMi40OTMuMDU4Ljc0OC4yODEgMS44NDQgMS41NDcgMy44OTcgMy40OSA1Ljk4MUEyOS4xODYgMjkuMTg2IDAgMDA4LjUgMTQuMDU0Yy4yMTItLjE2Ny40NDMtLjM1Ni42ODgtLjU2M3pNMTYuNzUgNC4zOGMwIC4zMjMtLjAyNi42NDktLjA3Ni45NzktLjMzOCAyLjIwNi0xLjc0NyA0LjQ5LTMuODc1IDYuNzczYTMwLjY3NiAzMC42NzYgMCAwMS0zLjg1NyAzLjQ3NC43NS43NSAwIDAxLS44ODQgMCAyOC42NjYgMjguNjY2IDAgMDEtMS4yMTQtLjk2OGMtLjktLjc2LTEuOC0xLjYwMi0yLjY0My0yLjUwNkMyLjA3MSA5Ljg0Ny42NjIgNy41NjIuMzI2IDUuMzU0QTYuNDU4IDYuNDU4IDAgMDEuMjUgNC4zOGMwLTIuMyAyLjAzLTQuMTMgNC41LTQuMTMgMS41NTggMCAyLjk0LjcyOSAzLjc1IDEuODQ0QzkuMzA5Ljk3OCAxMC42OTIuMjUgMTIuMjUuMjVjMi40NjkgMCA0LjUgMS44MyA0LjUgNC4xM3pcIixcbiAgICAgICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkMTIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDIwIDE4XCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICAgICAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTE2LjUgMTcuMDM4aC02YS41LjUgMCAwIDEtLjUtLjV2LTYuNUg3djYuNWEuNS41IDAgMCAxLS41LjVoLTRhLjUuNSAwIDAgMS0uNS0uNXYtMTBhLjUuNSAwIDEgMSAxIDB2OS41aDN2LTYuNWEuNS41IDAgMCAxIC41LS41aDRhLjUuNSAwIDAgMSAuNS41djYuNWg1VjZhLjUuNSAwIDEgMSAxIDB2MTAuNTM4YS41LjUgMCAwIDEtLjUuNVwiXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMTguODg2IDcuODIxYS40OTIuNDkyIDAgMCAxLS4zMDQtLjEwNEw5Ljg3OSAxLjAyMmMtLjAzNy0uMDI4LS4xNC0uMDI3LS4xNzYuMDAxTDEuMTk1IDcuNzE0YS41LjUgMCAxIDEtLjYxOC0uNzg2TDkuMDg1LjIzN2ExLjE3MiAxLjE3MiAwIDAgMSAxLjQwNC0uMDA4bDguNzAyIDYuNjk2YS41LjUgMCAwIDEtLjMwNS44OTZcIlxuICAgICAgfSkpKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCQxMyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMjAgMTlcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTEwLjUyMzQ5NTMuOTUwOTM3NzlsLjExNzcwNi4wODA2MjQ0MSA4LjcwMTQ5NTEgNi42OTUxMTI1NGMuMzI5MTEzMy4yNTE4OTUzOC4zOTA2MDQyLjcyMjkzODg2LjEzODE4MDggMS4wNTE5OTAzNS0uMTE5Nzg2My4xNTU2NjE0Ny0uMjkyNjM5My4yNTUwMzY0LS40ODA3Mzk4LjI4MzgzNzQ1TDE4Ljg4NTc1IDkuMDcxMmwtLjA5ODE5NjEtLjAwNjM5NjM1Yy0uMDk3MjU1NC0uMDEyNzUyMDktLjE5MTA5ODYtLjA0NDQ0OTYtLjI3NjIxOTgtLjA5Mzk5NjJsLS4wODIwMTczLS4wNTU0NTU2OC0xLjE3OTMzNzktLjkwNzM0NjU5TDE3LjI1IDE3LjUzODVjMCAuMzc5Njg4Mi0uMjgxOTY2LjY5MzQ4OTctLjY0ODE4MjUuNzQzMTUzMkwxNi41IDE4LjI4ODVoLTZjLS4zNzk5MDA4IDAtLjY5MzUyNTEzLS4yODIxNjA4LS43NDMxNTc2Ni0uNjQ4MjMxMkw5Ljc1IDE3LjUzODVWMTEuMjg4aC0yLjV2Ni4yNTA1YzAgLjM3OTY4ODItLjI4MTk2NTk1LjY5MzQ4OTctLjY0ODE4MjQ2Ljc0MzE1MzJMNi41IDE4LjI4ODVoLTRjLS4zNzk5MDA3OCAwLS42OTM1MjUxMy0uMjgyMTYwOC0uNzQzMTU3NjYtLjY0ODIzMTJMMS43NSAxNy41Mzg1bC0uMDAwMDIxMTItOC45NDM0OTQ4Mi0uNDAwMjEzNjQuMzE1NzI3MzZjLS4yOTYyOTMzLjIzMjk0Nzg0LS43MTI2ODIxOC4yMDczNTk4Ny0uOTc4MDYyMi0uMDQzNzM2NDVsLS4wNzQ4MTI2My0uMDgyMDYxMTJjLS4yMzMyOTk0My0uMjk2MDU4MzQtLjIwNzg4MjE4LS43MTMwNjAxOC4wNDM2MTI3Mi0uOTc4NDQ2MzdsLjA4MjE5ODE2LS4wNzQ3OTQ4MiA4LjUwNzU5MzMyLTYuNjkxMDczMzZDOS4zODE0NzcyMy42ODYxMTk3OSAxMC4wMzc2MTQ1LjY1NTU5OTM4IDEwLjUyMzQ5NTMuOTUwOTM3Nzl6TTkuNzkyIDIuMjcxTDMuMjQxMjI2MzMgNy40MjMzODg2NCAzLjI1IDcuNTM4NXY5LjI0OTVoMi41di02LjI0OTVjMC0uMzc5Njg4Mi4yODE5NjU5NS0uNjkzNDg5Ny42NDgxODI0Ni0uNzQzMTUzMjNMNi41IDkuNzg4NWg0Yy4zNzk5MDA4IDAgLjY5MzUyNTEuMjgyMTYwOC43NDMxNTc3LjY0ODIzMTJMMTEuMjUgMTAuNTM4NXY2LjI0OTVoNC41VjdjMC0uMDQ2NDkyNDMuMDA0MjI3Ny0uMDkxOTk2OTguMDEyMzIwMi0uMTM2MTQ5NjVMOS43OTIgMi4yNzF6XCJcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCQxNCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMTYgMTlcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTguMTMxLjQ0NGEuNzEzLjcxMyAwIDAxMCAuOTczTDYuODA3IDIuNzhIOGM0LjI3MiAwIDcuNzUgMy41NzMgNy43NSA3Ljk3NSAwIDQuNDA2LTMuNDgyIDcuOTk0LTcuNzUgNy45OTRTLjI1IDE1LjE2Mi4yNSAxMC43NTZjMC0xLjkyLjY5Ni0zLjgwMyAxLjk0LTUuMjZhLjY0Ny42NDcgMCAwMS45MjItLjA2Yy4yNzEuMjUuMjk4LjY5Ny4wNTguOTc0YTYuNzQgNi43NCAwIDAwLTEuNTk1IDQuMzY2YzAgMy42NDUgMi44NzQgNi42MTMgNi40MjUgNi42MTMgMy41MzggMCA2LjQyNS0yLjk3NSA2LjQyNS02LjYxMyAwLTMuNjM5LTIuODg3LTYuNjE0LTYuNDI1LTYuNjE0SDYuODI3TDguMTUgNS41MjdhLjcxMy43MTMgMCAwMTAgLjk3Mi42NTEuNjUxIDAgMDEtLjQ2Mi4yMDUuNjUxLjY1MSAwIDAxLS40NjEtLjIwNUw0Ljc2MiAzLjk2YS43MDYuNzA2IDAgMDEtLjIwMS0uNDg3YzAtLjE3Ny4wNzItLjM1NC4yMDItLjQ4N0w3LjIwOS40NDRhLjY0NS42NDUgMCAwMS45MjIgMHptMi4xMDUgNy4xMTRsMS4yMDYgMS4yMDYtMi4yMzcgMi4yMzUgMi4yMzcgMi4yMzctMS4yMDYgMS4yMDZMOCAxMi4yMDVsLTIuMjM1IDIuMjM3LTEuMjA2LTEuMjA2TDYuNzk0IDExIDQuNTU4IDguNzY0bDEuMjA2LTEuMjA2IDIuMjM1IDIuMjM2IDIuMjM3LTIuMjM2elwiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkMTUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDQ3IDIyXCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0yOS4wMzkgMy42MDNsLS4wMjcuMDEtMy4wMiAyLjkwOGMtLjM5Ny4zNzQtLjU2LjkzOC0uNDI0IDEuNDcuMTM3LjUzMi41NTIuOTQ4IDEuMDg0IDEuMDlhMS41MyAxLjUzIDAgMCAwIDEuNDgzLS40MDdsMy4wMTgtMi45MDZjMS41Mi0xLjQ4OSAzLjI1NC0yLjIzOSA1LjAyNS0yLjIzOSAxLjc2NyAwIDMuNDg2Ljc0NyA1LjAwNyAyLjIzNiAzLjA0OCAyLjk4NSAzLjA0OCA3Ljc4IDAgMTAuNzY0LTIuOTYzIDIuOTAxLTcuMzE3IDIuNjM0LTEwLjU0LS41MjNsLTUuNTY0LTUuNDM4LTEuMDIxLTEuMDEzLTUuNTY2LTUuNDRDMTQuMjA3LS4wODQgNy43OTctLjQyNyAzLjY3NyAzLjYwOGExMC41MTYgMTAuNTE2IDAgMCAwIDAgMTUuMDYzYzIuMDY2IDIuMDIzIDQuNTgxIDMuMTIzIDcuMTQ1IDMuMTIzIDIuNTU5IDAgNS4wODQtMS4wOTcgNy4xNDQtMy4xMDdsLjAxNS0uMDE1LS4wMS4wMDkgMy4wMzctMi45MjNjLjM5Ny0uMzc1LjU2MS0uOTM5LjQyNC0xLjQ3MWExLjUxOSAxLjUxOSAwIDAgMC0xLjA4NC0xLjA5IDEuNTMgMS41MyAwIDAgMC0xLjQ4My40MDhsLTMuMDE4IDIuOTA2Yy0xLjUyNyAxLjQ5NS0zLjI2NSAyLjI1NC01LjAyNSAyLjI1NC0xLjc1NyAwLTMuNDgtLjc1Ni01LjAwNy0yLjI1Mi0zLjA0OC0yLjk4NS0zLjA0Ny03Ljc2MyAwLTEwLjc0OCAyLjk2Ni0yLjkwNCA3LjMyMS0yLjY0NSAxMC41NC41MDdsNS41NjQgNS40MzkgMS4wMjEgMS4wMTIgNS41NjYgNS40NGM0LjI5IDQuMjAyIDEwLjcgNC41NTUgMTQuODE3LjUyNGExMC41MzUgMTAuNTM1IDAgMCAwIDAtMTUuMDhDNDEuMjYzIDEuNTkyIDM4Ljc1LjUgMzYuMTc4LjVjLTIuNTYzIDAtNS4wOCAxLjA5My03LjE0IDMuMTAzelwiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkMTYgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDE1IDE1XCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk04LjQyMSA0LjE1N2EuOTk0Ljk5NCAwIDAgMS0uMjEuMzE5Yy0uMS4wOS0uMjEuMTctLjMzLjIyMWEuOTk0Ljk5NCAwIDAgMS0uMzguMDc5Ljk5OS45OTkgMCAwIDEtLjkyLS42MTkuODg1Ljg4NSAwIDAgMS0uMDgtLjM4MWMwLS4xNC4wMjEtLjI2OS4wOC0uMzkuMDUtLjEyLjEyLS4yMjkuMjEtLjMyLjA5LS4wOTkuMi0uMTcuMzMtLjIyYTEuMDEgMS4wMSAwIDAgMSAxLjA5LjIyYy4wOS4wOTEuMTYuMi4yMS4zMmEuOTc4Ljk3OCAwIDAgMSAwIC43NzF6bS4wOCA3LjA3MmExIDEgMCAxIDEtMiAwVjcuMTY3YTEgMSAwIDEgMSAyIDB2NC4wNjJ6TTcuNSAwYTcuNSA3LjUgMCAxIDAgLjAwMiAxNS4wMDJBNy41IDcuNSAwIDAgMCA3LjUgMHpcIixcbiAgICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkMTcgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDE1IDE1XCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0gNi45NjQ4NDQgNC4wMjczNDQgTCA2Ljk2NDg0NCA1LjQxNzk2OSBMIDguMzU1NDY5IDUuNDE3OTY5IEwgOC4zNTU0NjkgNC4wMjczNDQgWiBNIDYuOTY0ODQ0IDYuODA0Njg4IEwgNi45NjQ4NDQgMTAuOTcyNjU2IEwgOC4zNTU0NjkgMTAuOTcyNjU2IEwgOC4zNTU0NjkgNi44MDQ2ODggWiBNIDE0LjYwNTQ2OSA3LjUgQyAxNC42MDU0NjkgMTEuMzMyMDMxIDExLjUgMTQuNDQ1MzEyIDcuNjY3OTY5IDE0LjQ0NTMxMiBDIDMuODI4MTI1IDE0LjQ0NTMxMiAwLjcxNDg0NCAxMS4zMzIwMzEgMC43MTQ4NDQgNy41IEMgMC43MTQ4NDQgMy42Njc5NjkgMy44MjgxMjUgMC41NTQ2ODggNy42Njc5NjkgMC41NTQ2ODggQyAxMS41IDAuNTU0Njg4IDE0LjYwNTQ2OSAzLjY2Nzk2OSAxNC42MDU0NjkgNy41IFogTSAxMy4yMTQ4NDQgNy41IEMgMTMuMjE0ODQ0IDQuNDI5Njg4IDEwLjczMDQ2OSAxLjk0NTMxMiA3LjY2MDE1NiAxLjk0NTMxMiBDIDQuNTg5ODQ0IDEuOTQ1MzEyIDIuMTA1NDY5IDQuNDI5Njg4IDIuMTA1NDY5IDcuNSBDIDIuMTA1NDY5IDEwLjU3MDMxMiA0LjU4OTg0NCAxMy4wNTQ2ODggNy42NjAxNTYgMTMuMDU0Njg4IEMgMTAuNzMwNDY5IDEzLjA1NDY4OCAxMy4yMTQ4NDQgMTAuNTcwMzEyIDEzLjIxNDg0NCA3LjUgWiBNIDEzLjIxNDg0NCA3LjUgXCIsXG4gICAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JDE4ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAxMiAxMlwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNNi4wMTggMy41NjdDNC42NTMgMy41NjUgMy41NTQgNC42NDUgMy41NTMgNS45OWMtLjAwMSAxLjM1NCAxLjA4NCAyLjQ1MiAyLjQyMiAyLjQ1M2EyLjQzNSAyLjQzNSAwIDAgMCAyLjQ0NS0yLjQzYzAtMS4zNDEtMS4wODQtMi40NDUtMi40MDItMi40NDZtMy44ODQtMi4zNTRhLjg3Mi44NzIgMCAwIDAtLjg5Ljg3Ljg3Ljg3IDAgMCAwIC44NTUuODkuODY5Ljg2OSAwIDAgMCAuOTAyLS44NjguODcuODcgMCAwIDAtLjg2Ny0uODkyTTkuNzQ0IDYuMDJjMC0yLjA4MS0xLjY2OC0zLjc3Ny0zLjcxNy0zLjc4LTIuMTA0LS4wMDItMy43OTYgMS42NjMtMy43OTggMy43MzctLjAwMSAyLjEwMiAxLjY2NiAzLjc5MiAzLjc0MiAzLjc5MkEzLjc1NSAzLjc1NSAwIDAgMCA5Ljc0NCA2LjAyTTEyIDYuMDExYy0uMDI1IDEuMDQ4LS4wNDQgMi4wOTUtLjA3OCAzLjE0Mi0uMDE1LjQ2NS0uMTA3LjkyLS4zMTEgMS4zNDMtLjM2Ljc0Ni0uOTY1IDEuMTk0LTEuNzY0IDEuMzQ4YTcuOTMgNy45MyAwIDAgMS0xLjM4OC4xMzRjLTEuNTA3LjAyMS0zLjAxNi4wMjctNC41MjQuMDE4LS41OTgtLjAwMy0xLjItLjAxMi0xLjc5Mi0uMTQtMS4wOS0uMjM3LTEuODQtMS0yLjAxMi0yLjExYTEwLjE4NiAxMC4xODYgMCAwIDEtLjExNS0xLjQ4MiAyMTguMzIgMjE4LjMyIDAgMCAxLS4wMS00LjI5M2MuMDA1LS41OTYuMDA3LTEuMTk1LjEzNS0xLjc4M0MuMzk3IDEuMDEgMS4xOTMuMjU1IDIuMzkyLjExM2ExNy40OTQgMTcuNDk0IDAgMCAxIDEuODYtLjEwNCAxNjYuNjUgMTY2LjY1IDAgMCAxIDMuODA1LjAwNEM4LjY0LjAyIDkuMjI1LjAyIDkuOC4xNDhjMS4xOC4yNjIgMS45MjYgMS4wNTQgMi4wNjggMi4yNTcuMDcxLjYwNS4wODYgMS4yMTYuMTA0IDEuODI1LjAxNi41OTMuMDAzIDEuMTg3LjAwMyAxLjc4bC4wMjUuMDAxXCIsXG4gICAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JDE5ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAxMSAxNlwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgICAgICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgxIDEpXCIsXG4gICAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICAgICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNNy45MDUgMS4xN0M3LjM0NC0uMDEzIDYuMjg1LS43MDYgNC42MTQtLjc0OGMtMS41OTItLjA0LTIuNzQuNzYzLTMuMjg1IDEuODFhMy41NjQgMy41NjQgMCAwIDAtLjExNi4yNDggNy43ODggNy43ODggMCAwIDAtLjIuNTM0IDE1LjgyNiAxNS44MjYgMCAwIDAtLjI5Ljk1NSAxNjkuMjMgMTY5LjIzIDAgMCAwLS43MTYgMi43MDRsLS4wODcuMzQxYy0uNDE1IDEuNjQ0LS42MzggMi42NDktLjY1IDMuMWEzLjg4IDMuODggMCAwIDAtLjAyLjUwMWMwIDIuOTM3IDIuMzkgNS4zMDUgNS4zNDUgNS4zMDUgMi45NTIgMCA1LjM0NC0yLjM4NSA1LjM0NC01LjMyNGE2LjY1MyA2LjY1MyAwIDAgMC0uMTUzLTEuMTc1Yy0uMzgtMS45NDUtMS41MjMtNi4zNjMtMS44ODEtNy4wOHptLjQxNyA3LjQwOGMuMDYyLjI2Ny4wOTkuNTQ4LjExOC44OS0uMDAxIDIuMDY3LTEuNzIgMy43ODEtMy44NDUgMy43ODEtMi4xMyAwLTMuODQ1LTEuNy0zLjg0NS0zLjgwNSAwLS4xOTcuMDAzLS4yNzYuMDEyLS4zNDJMLjc3IDguOTVjLS4wMS0uMTU0LjIzNS0xLjI3Mi42MDUtMi43NGwuMDg2LS4zMzZhMTY3Ljc2NiAxNjcuNzY2IDAgMCAxIC43ODctMi45NTVjLjA2LS4yMDMuMTIyLS40MDYuMTg2LS41OTMuMDU3LS4xNjguMTExLS4zMTQuMTYtLjQzYTIuMTEgMi4xMSAwIDAgMSAuMDY3LS4xNDJDMi45NTggMS4xOCAzLjYwNy43MjcgNC41NzYuNzVjMS4xMDMuMDI3IDEuNjU0LjM4OCAxLjk4IDEuMDc2LjI4Mi41NjUgMS40MSA0LjkyNyAxLjc2IDYuNzIzbC4wMDYuMDI4elwiLFxuICAgICAgICBmaWxsUnVsZTogXCJub256ZXJvXCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgICAgIGN4OiA0Ljc1LFxuICAgICAgICBjeTogMy43NSxcbiAgICAgICAgcjogMVxuICAgICAgfSkpKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCQxYSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMTQgMjJcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTEgMTFjLS41NSAwLTEgLjQ1LTEgMXYzYzAgLjU1LjM3NCAxLjI1LjgzMiAxLjU1NWwxLjMzNi44OUMyLjYyNiAxNy43NSAzIDE4LjQ1IDMgMTl2MmMwIC41NS40NSAxIDEgMWg2Yy41NSAwIDEtLjQ1IDEtMXYtMmMwLS41NS4zNzQtMS4yNS44MzItMS41NTVsMS4zMzYtLjg5QzEzLjYyNiAxNi4yNSAxNCAxNS41NSAxNCAxNXYtM2MwLS41NS0uNDUtMS0xLTFIMXptLjUgMS41aDExVjE1YS44OS44OSAwIDAgMS0uMTYzLjMwN2wtMS4zMzcuODljLS44NzUuNTgzLTEuNSAxLjc1MS0xLjUgMi44MDN2MS41aC01VjE5YzAtMS4wNTItLjYyNS0yLjIyLTEuNS0yLjgwM2wtMS4zMzYtLjg5QS44ODkuODg5IDAgMCAxIDEuNSAxNXYtMi41elwiXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMy43NSAxLjc1aDYuNVYxMWEuNzUuNzUgMCAxIDAgMS41IDBWMS4wMDhjLS4yOTQtLjY5NC0uMjk0LS42OTQtLjc2LS43NThIMy4wMWMtLjQ2Ni4wNjQtLjQ2Ni4wNjQtLjc2Ljc1OFYxMWEuNzUuNzUgMCAxIDAgMS41IDBWMS43NXpcIlxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTcuNzUgMTFWMS4xNTNhLjc1Ljc1IDAgMCAwLTEuNSAwVjExYS43NS43NSAwIDEgMCAxLjUgMHpcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JDFiID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAyMCAxM1wiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgICAgICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiXG4gICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0zLjAwMyAxLjAyM3Y4Ljk5SDE3LjAydi04Ljk5SDMuMDAzem0tLjUzMi0xaDE1LjA4Yy4yNTggMCAuNDY5LjIwNi40NjkuNDU4djEwLjA3M2MwIC4yNTMtLjIxMS40NTktLjQ3LjQ1OUgyLjQ3MmEuNDY1LjQ2NSAwIDAgMS0uNDY4LS40NTlWLjQ4MWMwLS4yNTIuMjEtLjQ1OC40NjgtLjQ1OHpcIlxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTEgMTJoMTh2LTFIMXYxem0tLjUyNC0yaDE5LjA0OGEuNDkuNDkgMCAwIDEgLjQ3Ni41djJhLjQ5LjQ5IDAgMCAxLS40NzYuNUguNDc2QS40OS40OSAwIDAgMSAwIDEyLjV2LTJjMC0uMjc1LjIxNC0uNS40NzYtLjV6XCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk04LjUgMTEuNWEuNS41IDAgMSAxIDAtMWgzYS41LjUgMCAxIDEgMCAxaC0zelwiXG4gICAgICB9KSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JDFjID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCA4IDE5XCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICAgICAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTIuNTYgMGEyLjEzMSAyLjEzMSAwIDEgMCAuMDAxIDQuMjYzIDIuMTMxIDIuMTMxIDAgMCAwIDAtNC4yNjNtMCAxLjA5NGExLjA0IDEuMDQgMCAwIDEgMCAyLjA3NiAxLjAzOSAxLjAzOSAwIDAgMSAwLTIuMDc2XCIsXG4gICAgICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMS41OTQgLjUpXCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xLjIxOS40OTdhMS4yMiAxLjIyIDAgMCAwLTEuMjIgMS4yMTl2NS42OWg3LjMxdi01LjY5QTEuMjIgMS4yMiAwIDAgMCA2LjA5MS40OTdIMS4yMTl6TTYuMDkgMS41OTFjLjA2OSAwIC4xMjQuMDU2LjEyNC4xMjV2NC41OTZIMS4wOTNWMS43MTZjMC0uMDY5LjA1Ny0uMTI1LjEyNi0uMTI1SDYuMDlcIixcbiAgICAgICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSguNSA0Ljg3NSlcIlxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTUuMjk1IDE3LjVIMy4wMTR2LTUuNTcyYS41LjUgMCAxIDAtMSAwVjE4YS41LjUgMCAwIDAgLjUuNWgzLjI4YS41LjUgMCAwIDAgLjUtLjV2LTYuMDcyYS41LjUgMCAxIDAtMSAwVjE3LjV6XCIsXG4gICAgICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIlxuICAgICAgfSkpKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCQxZCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMTMgMTlcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGVmc1wiLCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBpZDogXCJhXCIsXG4gICAgICAgIGQ6IFwiTTAgLjQ5NWg3LjI3MnY2Ljg3NEgwelwiXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgaWQ6IFwiY1wiLFxuICAgICAgICBkOiBcIk0uMzAyLjAxaDQuMjQydjQuMjQySC4zMDJ6XCJcbiAgICAgIH0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0zLjYzNi41NzhhMi4xMiAyLjEyIDAgMSAwIDAgNC4yNDEgMi4xMiAyLjEyIDAgMCAwIDAtNC4yNDFtMCAxLjA4OGExLjAzNCAxLjAzNCAwIDAgMSAwIDIuMDY2IDEuMDMzIDEuMDMzIDAgMCAxIDAtMi4wNjZcIlxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCB7XG4gICAgICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMCA0LjkzKVwiXG4gICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcIm1hc2tcIiwge1xuICAgICAgICBpZDogXCJiXCIsXG4gICAgICAgIGZpbGw6IFwiI2ZmZlwiXG4gICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInVzZVwiLCB7XG4gICAgICAgIHhsaW5rSHJlZjogXCIjYVwiXG4gICAgICB9KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTYuMDYuNDk1SDEuMjEyQy41NDIuNDk1IDAgMS4wMzggMCAxLjcwN1Y3LjM3aDcuMjcyVjEuNzA3YzAtLjY2OS0uNTQzLTEuMjEyLTEuMjEyLTEuMjEybTAgMS4wODhjLjA2OSAwIC4xMjQuMDU2LjEyNC4xMjR2NC41NzRIMS4wODhWMS43MDdjMC0uMDY4LjA1Ni0uMTI0LjEyNC0uMTI0SDYuMDZcIixcbiAgICAgICAgbWFzazogXCJ1cmwoI2IpXCJcbiAgICAgIH0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMi41MDMgMTcuNDl2LTUuNTQyYS41LjUgMCAxIDAtMSAwdjYuMDQyYS41LjUgMCAwIDAgLjUuNWgzLjI2NWEuNS41IDAgMCAwIC41LS41di02LjA0MmEuNS41IDAgMSAwLTEgMHY1LjU0MkgyLjUwM3pcIixcbiAgICAgICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgICAgICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSg1Ljk4NSAuNTM0KVwiXG4gICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcIm1hc2tcIiwge1xuICAgICAgICBpZDogXCJkXCIsXG4gICAgICAgIGZpbGw6IFwiI2ZmZlwiXG4gICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInVzZVwiLCB7XG4gICAgICAgIHhsaW5rSHJlZjogXCIjY1wiXG4gICAgICB9KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTIuNDIzLjAxYTIuMTIgMi4xMiAwIDEgMCAwIDQuMjQyIDIuMTIgMi4xMiAwIDAgMCAwLTQuMjQybTAgMS4wODlhMS4wMzMgMS4wMzMgMCAwIDEgMCAyLjA2NSAxLjAzNCAxLjAzNCAwIDAgMSAwLTIuMDY1XCIsXG4gICAgICAgIG1hc2s6IFwidXJsKCNkKVwiXG4gICAgICB9KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTYuNzc2IDE3LjQ1NnYxaDMuMjY1YS41LjUgMCAwIDAgLjUtLjV2LTYuMDQyaC0xdjUuNTQySDYuNzc2elwiLFxuICAgICAgICBmaWxsUnVsZTogXCJub256ZXJvXCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xMC44MzIgNS4zOTJIOC4xNlY2LjQ4aDIuNjczYy4wNjkgMCAuMTI0LjA1Ni4xMjQuMTI0djQuNTc0SDguMTZ2MS4wODhoMy44ODVWNi42MDRjMC0uNjctLjU0My0xLjIxMi0xLjIxMi0xLjIxMlwiXG4gICAgICB9KSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JDFlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAxOCAxOVwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkZWZzXCIsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGlkOiBcImFcIixcbiAgICAgICAgZDogXCJNLjMxNS4wMWg0LjI0MXY0LjI0MkguMzE1elwiXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgaWQ6IFwiY1wiLFxuICAgICAgICBkOiBcIk0uMjAzLjAxaDQuMjQxdjQuMjQySC4yMDN6XCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBpZDogXCJlXCIsXG4gICAgICAgIGQ6IFwiTS40NDEuNDYxaDMuODg2djYuODc0SC40NHpcIlxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGlkOiBcImdcIixcbiAgICAgICAgZDogXCJNLjQyNy4wMWg0LjI0MXY0LjI0MkguNDI4elwiXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgaWQ6IFwiaVwiLFxuICAgICAgICBkOiBcIk0wIC40NjFoMy44ODV2Ni44NzRIMHpcIlxuICAgICAgfSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICAgICAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCB7XG4gICAgICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoNi40ODUgLjUzNClcIlxuICAgICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJtYXNrXCIsIHtcbiAgICAgICAgaWQ6IFwiYlwiLFxuICAgICAgICBmaWxsOiBcIiNmZmZcIlxuICAgICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1c2VcIiwge1xuICAgICAgICB4bGlua0hyZWY6IFwiI2FcIlxuICAgICAgfSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0yLjQzNS4wMWEyLjEyIDIuMTIgMCAxIDAgMCA0LjI0MSAyLjEyIDIuMTIgMCAwIDAgMC00LjI0bTAgMS4wODhhMS4wMzQgMS4wMzQgMCAwIDEgMCAyLjA2NSAxLjAzNCAxLjAzNCAwIDAgMSAwLTIuMDY1XCIsXG4gICAgICAgIG1hc2s6IFwidXJsKCNiKVwiXG4gICAgICB9KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTExLjM0NSA1LjM5Mkg2LjQ5N2MtLjY3IDAtMS4yMTMuNTQzLTEuMjEzIDEuMjEydjUuNjYyaDcuMjczVjYuNjA0YzAtLjY3LS41NDQtMS4yMTItMS4yMTItMS4yMTJtMCAxLjA4OGMuMDY4IDAgLjEyNC4wNTYuMTI0LjEyNHY0LjU3NEg2LjM3M1Y2LjYwNGMwLS4wNjguMDU2LS4xMjQuMTI0LS4xMjRoNC44NDhcIlxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTcuNzg4IDE3LjQ5di01LjU0MmEuNS41IDAgMSAwLTEgMHY2LjA0MmEuNS41IDAgMCAwIC41LjVoMy4yNjVhLjUuNSAwIDAgMCAuNS0uNXYtNi4wNDJhLjUuNSAwIDEgMC0xIDB2NS41NDJINy43ODh6XCIsXG4gICAgICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIlxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCB7XG4gICAgICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMTEuMzgyIC41MzQpXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibWFza1wiLCB7XG4gICAgICAgIGlkOiBcImRcIixcbiAgICAgICAgZmlsbDogXCIjZmZmXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwidXNlXCIsIHtcbiAgICAgICAgeGxpbmtIcmVmOiBcIiNjXCJcbiAgICAgIH0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMi4zMjMuMDFhMi4xMiAyLjEyIDAgMSAwIDAgNC4yNDIgMi4xMiAyLjEyIDAgMCAwIDAtNC4yNDJtMCAxLjA4OWExLjAzNCAxLjAzNCAwIDAgMSAwIDIuMDY1IDEuMDM0IDEuMDM0IDAgMCAxIDAtMi4wNjVcIixcbiAgICAgICAgbWFzazogXCJ1cmwoI2QpXCJcbiAgICAgIH0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMTIuMDczIDE3LjQ1NnYxaDMuMjY1YS41LjUgMCAwIDAgLjUtLjV2LTYuMDQyaC0xdjUuNTQyaC0yLjc2NXpcIixcbiAgICAgICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgICAgICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgxMy4wMTUgNC45MylcIlxuICAgICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJtYXNrXCIsIHtcbiAgICAgICAgaWQ6IFwiZlwiLFxuICAgICAgICBmaWxsOiBcIiNmZmZcIlxuICAgICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1c2VcIiwge1xuICAgICAgICB4bGlua0hyZWY6IFwiI2VcIlxuICAgICAgfSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0zLjExNS40NjFILjQ0MVYxLjU1aDIuNjc0Yy4wNjggMCAuMTI0LjA1Ni4xMjQuMTI0djQuNTc0SC40NDF2MS4wODhoMy44ODZWMS42NzNjMC0uNjctLjU0My0xLjIxMi0xLjIxMi0xLjIxMlwiLFxuICAgICAgICBtYXNrOiBcInVybCgjZilcIlxuICAgICAgfSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICAgICAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDEuNTg4IC41MzQpXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibWFza1wiLCB7XG4gICAgICAgIGlkOiBcImhcIixcbiAgICAgICAgZmlsbDogXCIjZmZmXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwidXNlXCIsIHtcbiAgICAgICAgeGxpbmtIcmVmOiBcIiNnXCJcbiAgICAgIH0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMi41NDguMDFhMi4xMiAyLjEyIDAgMSAwIDAgNC4yNDIgMi4xMiAyLjEyIDAgMCAwIDAtNC4yNDJtMCAxLjA4OWExLjAzNCAxLjAzNCAwIDAgMSAwIDIuMDY1IDEuMDM0IDEuMDM0IDAgMCAxIDAtMi4wNjVcIixcbiAgICAgICAgbWFzazogXCJ1cmwoI2gpXCJcbiAgICAgIH0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMy4wMDMgMTcuNDU2di01LjU0MmgtMXY2LjA0MmEuNS41IDAgMCAwIC41LjVoMy4yNjV2LTFIMy4wMDN6XCIsXG4gICAgICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIlxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCB7XG4gICAgICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoLjUgNC45MylcIlxuICAgICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJtYXNrXCIsIHtcbiAgICAgICAgaWQ6IFwialwiLFxuICAgICAgICBmaWxsOiBcIiNmZmZcIlxuICAgICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1c2VcIiwge1xuICAgICAgICB4bGlua0hyZWY6IFwiI2lcIlxuICAgICAgfSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xLjIxMi40NjFoMi42NzNWMS41NUgxLjIxMmEuMTI0LjEyNCAwIDAgMC0uMTI0LjEyNHY0LjU3NGgyLjc5N3YxLjA4OEgwVjEuNjczQzAgMS4wMDMuNTQzLjQ2MSAxLjIxMi40NjFcIixcbiAgICAgICAgbWFzazogXCJ1cmwoI2opXCJcbiAgICAgIH0pKSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JDFmID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAyMiAxOVwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkZWZzXCIsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGlkOiBcImFcIixcbiAgICAgICAgZDogXCJNLjE0LjAxaDQuMjQydjQuMjQySC4xNHpcIlxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGlkOiBcImNcIixcbiAgICAgICAgZDogXCJNLjMxNS4wMWg0LjI0MnY0LjI0MkguMzE1elwiXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgaWQ6IFwiZVwiLFxuICAgICAgICBkOiBcIk0uMjAyLjAxaDQuMjQydjQuMjQySC4yMDJ6XCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBpZDogXCJnXCIsXG4gICAgICAgIGQ6IFwiTS40MjcuMDFoNC4yNDF2NC4yNDJILjQyN3pcIlxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGlkOiBcImlcIixcbiAgICAgICAgZDogXCJNMCAuNDYxaDMuODg2djYuODc0SDB6XCJcbiAgICAgIH0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICAgICAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDE1Ljc4IC41MzQpXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibWFza1wiLCB7XG4gICAgICAgIGlkOiBcImJcIixcbiAgICAgICAgZmlsbDogXCIjZmZmXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwidXNlXCIsIHtcbiAgICAgICAgeGxpbmtIcmVmOiBcIiNhXCJcbiAgICAgIH0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMi4yNjEuMDFhMi4xMiAyLjEyIDAgMSAwIDAgNC4yNDIgMi4xMiAyLjEyIDAgMCAwIDAtNC4yNDJtMCAxLjA4OWExLjAzMyAxLjAzMyAwIDAgMSAwIDIuMDY1IDEuMDM0IDEuMDM0IDAgMCAxIDAtMi4wNjVcIixcbiAgICAgICAgbWFzazogXCJ1cmwoI2IpXCJcbiAgICAgIH0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMTYuNDA4IDE3LjQ1NnYxaDMuMjY1YS41LjUgMCAwIDAgLjUtLjV2LTYuMDQyaC0xdjUuNTQyaC0yLjc2NXpcIixcbiAgICAgICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMjAuNDY0IDUuMzkyaC0yLjY3M1Y2LjQ4aDIuNjczYy4wNjkgMCAuMTI0LjA1Ni4xMjQuMTI0djQuNTc0aC0yLjc5N3YxLjA4OGgzLjg4NlY2LjYwNGMwLS42Ny0uNTQzLTEuMjEyLTEuMjEzLTEuMjEyXCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICAgICAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDUuOTg1IC41MzQpXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibWFza1wiLCB7XG4gICAgICAgIGlkOiBcImRcIixcbiAgICAgICAgZmlsbDogXCIjZmZmXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwidXNlXCIsIHtcbiAgICAgICAgeGxpbmtIcmVmOiBcIiNjXCJcbiAgICAgIH0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMi40MzYuMDFhMi4xMjEgMi4xMjEgMCAxIDAgMCA0LjI0MyAyLjEyMSAyLjEyMSAwIDAgMCAwLTQuMjQzbTAgMS4wODlhMS4wMzQgMS4wMzQgMCAwIDEgMCAyLjA2NSAxLjAzNCAxLjAzNCAwIDAgMSAwLTIuMDY1XCIsXG4gICAgICAgIG1hc2s6IFwidXJsKCNkKVwiXG4gICAgICB9KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTEwLjg0NSA1LjM5Mkg1Ljk5N2MtLjY3IDAtMS4yMTIuNTQzLTEuMjEyIDEuMjEydjUuNjYyaDcuMjcyVjYuNjA0YzAtLjY3LS41NDMtMS4yMTItMS4yMTItMS4yMTJtMCAxLjA4OGMuMDY4IDAgLjEyMy4wNTYuMTIzLjEyNHY0LjU3NEg1Ljg3M1Y2LjYwNGMwLS4wNjguMDU2LS4xMjQuMTI0LS4xMjRoNC44NDhcIlxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTkuNTUzIDE3LjQ5SDcuMjl2LTUuNTQyYS41LjUgMCAxIDAtMSAwdjYuMDQyYS41LjUgMCAwIDAgLjUuNWgzLjI2NGEuNS41IDAgMCAwIC41LS41di02LjA0MmEuNS41IDAgMCAwLTEgMHY1LjU0MnpcIixcbiAgICAgICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgICAgICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgxMC44ODIgLjUzNClcIlxuICAgICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJtYXNrXCIsIHtcbiAgICAgICAgaWQ6IFwiZlwiLFxuICAgICAgICBmaWxsOiBcIiNmZmZcIlxuICAgICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1c2VcIiwge1xuICAgICAgICB4bGlua0hyZWY6IFwiI2VcIlxuICAgICAgfSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0yLjMyMy4wMWEyLjEyIDIuMTIgMCAxIDAgMCA0LjI0MiAyLjEyIDIuMTIgMCAwIDAgMC00LjI0Mm0wIDEuMDg5YTEuMDMzIDEuMDMzIDAgMCAxIDAgMi4wNjUgMS4wMzQgMS4wMzQgMCAwIDEgMC0yLjA2NVwiLFxuICAgICAgICBtYXNrOiBcInVybCgjZilcIlxuICAgICAgfSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xMS41NzMgMTcuNDU2djFoMy4yNjVhLjUuNSAwIDAgMCAuNS0uNXYtNi4wNDJoLTF2NS41NDJoLTIuNzY1elwiLFxuICAgICAgICBmaWxsUnVsZTogXCJub256ZXJvXCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xNS42MyA1LjM5MmgtMi42NzRWNi40OGgyLjY3M2MuMDY5IDAgLjEyNC4wNTYuMTI0LjEyNHY0LjU3NGgtMi43OTd2MS4wODhoMy44ODZWNi42MDRjMC0uNjctLjU0My0xLjIxMi0xLjIxMy0xLjIxMlwiXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgICAgICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgxLjA4OCAuNTM0KVwiXG4gICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcIm1hc2tcIiwge1xuICAgICAgICBpZDogXCJoXCIsXG4gICAgICAgIGZpbGw6IFwiI2ZmZlwiXG4gICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInVzZVwiLCB7XG4gICAgICAgIHhsaW5rSHJlZjogXCIjZ1wiXG4gICAgICB9KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTIuNTQ4LjAxYTIuMTIgMi4xMiAwIDEgMCAwIDQuMjQyIDIuMTIgMi4xMiAwIDAgMCAwLTQuMjQybTAgMS4wODlhMS4wMzMgMS4wMzMgMCAwIDEgMCAyLjA2NSAxLjAzNCAxLjAzNCAwIDAgMSAwLTIuMDY1XCIsXG4gICAgICAgIG1hc2s6IFwidXJsKCNoKVwiXG4gICAgICB9KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTIuNTA0IDE3LjQ1NnYtNS41NDJoLTF2Ni4wNDJhLjUuNSAwIDAgMCAuNS41aDMuMjY0di0xSDIuNTA0elwiLFxuICAgICAgICBmaWxsUnVsZTogXCJub256ZXJvXCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICAgICAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDAgNC45MylcIlxuICAgICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJtYXNrXCIsIHtcbiAgICAgICAgaWQ6IFwialwiLFxuICAgICAgICBmaWxsOiBcIiNmZmZcIlxuICAgICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1c2VcIiwge1xuICAgICAgICB4bGlua0hyZWY6IFwiI2lcIlxuICAgICAgfSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xLjIxMi40NjFoMi42NzRWMS41NUgxLjIxMmEuMTI0LjEyNCAwIDAgMC0uMTI0LjEyNHY0LjU3NGgyLjc5OHYxLjA4OEgwVjEuNjczQzAgMS4wMDMuNTQzLjQ2MSAxLjIxMi40NjFcIixcbiAgICAgICAgbWFzazogXCJ1cmwoI2opXCJcbiAgICAgIH0pKSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JDFnID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAyNyAxOVwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkZWZzXCIsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGlkOiBcImFcIixcbiAgICAgICAgZDogXCJNLjAzNS4wMWg0LjI0MXY0LjI0MkguMDM1elwiXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgaWQ6IFwiY1wiLFxuICAgICAgICBkOiBcIk0uNDI3LjAxaDQuMjQxdjQuMjQySC40Mjd6XCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBpZDogXCJlXCIsXG4gICAgICAgIGQ6IFwiTTAgLjQ2MWgzLjg4NnY2Ljg3NEgwelwiXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgaWQ6IFwiZ1wiLFxuICAgICAgICBkOiBcIk0uMjA5LjAxSDQuNDV2NC4yNDJILjIxelwiXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgaWQ6IFwiaVwiLFxuICAgICAgICBkOiBcIk0uMDk3LjAxaDQuMjQxdjQuMjQySC4wOTd6XCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBpZDogXCJrXCIsXG4gICAgICAgIGQ6IFwiTS4zMjEuMDFoNC4yNDF2NC4yNDJILjMyMnpcIlxuICAgICAgfSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICAgICAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCB7XG4gICAgICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMjEuMTc2IC41MzQpXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibWFza1wiLCB7XG4gICAgICAgIGlkOiBcImJcIixcbiAgICAgICAgZmlsbDogXCIjZmZmXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwidXNlXCIsIHtcbiAgICAgICAgeGxpbmtIcmVmOiBcIiNhXCJcbiAgICAgIH0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMi4xNTUuMDFhMi4xMiAyLjEyIDAgMSAwIDAgNC4yNDIgMi4xMiAyLjEyIDAgMCAwIDAtNC4yNDJtMCAxLjA4OWExLjAzNCAxLjAzNCAwIDAgMSAwIDIuMDY1IDEuMDM0IDEuMDM0IDAgMCAxIDAtMi4wNjVcIixcbiAgICAgICAgbWFzazogXCJ1cmwoI2IpXCJcbiAgICAgIH0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMjEuNyAxNy40NTZ2MWgzLjI2NGEuNS41IDAgMCAwIC41LS41di02LjA0MmgtMXY1LjU0MmgtMi43NjV6XCIsXG4gICAgICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIlxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTI1Ljc1NSA1LjM5MmgtMi42NzNWNi40OGgyLjY3M2MuMDY5IDAgLjEyNC4wNTYuMTI0LjEyNHY0LjU3NGgtMi43OTd2MS4wODhoMy44ODVWNi42MDRjMC0uNjctLjU0My0xLjIxMi0xLjIxMi0xLjIxMlwiXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgICAgICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgxLjU4OCAuNTM0KVwiXG4gICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcIm1hc2tcIiwge1xuICAgICAgICBpZDogXCJkXCIsXG4gICAgICAgIGZpbGw6IFwiI2ZmZlwiXG4gICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInVzZVwiLCB7XG4gICAgICAgIHhsaW5rSHJlZjogXCIjY1wiXG4gICAgICB9KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTIuNTQ4LjAxYTIuMTIgMi4xMiAwIDEgMCAwIDQuMjQyIDIuMTIgMi4xMiAwIDAgMCAwLTQuMjQybTAgMS4wODlhMS4wMzMgMS4wMzMgMCAwIDEgMCAyLjA2NSAxLjAzNCAxLjAzNCAwIDAgMSAwLTIuMDY1XCIsXG4gICAgICAgIG1hc2s6IFwidXJsKCNkKVwiXG4gICAgICB9KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTMuMDA0IDE3LjQ1NnYtNS41NDJoLTF2Ni4wNDJhLjUuNSAwIDAgMCAuNS41aDMuMjY0di0xSDMuMDA0elwiLFxuICAgICAgICBmaWxsUnVsZTogXCJub256ZXJvXCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICAgICAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKC41IDQuOTMpXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibWFza1wiLCB7XG4gICAgICAgIGlkOiBcImZcIixcbiAgICAgICAgZmlsbDogXCIjZmZmXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwidXNlXCIsIHtcbiAgICAgICAgeGxpbmtIcmVmOiBcIiNlXCJcbiAgICAgIH0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMS4yMTIuNDYxaDIuNjc0VjEuNTVIMS4yMTJhLjEyNC4xMjQgMCAwIDAtLjEyNC4xMjR2NC41NzRoMi43OTh2MS4wODhIMFYxLjY3M0MwIDEuMDAzLjU0My40NjEgMS4yMTIuNDYxXCIsXG4gICAgICAgIG1hc2s6IFwidXJsKCNmKVwiXG4gICAgICB9KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCB7XG4gICAgICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMTEuMzgyIC41MzQpXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibWFza1wiLCB7XG4gICAgICAgIGlkOiBcImhcIixcbiAgICAgICAgZmlsbDogXCIjZmZmXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwidXNlXCIsIHtcbiAgICAgICAgeGxpbmtIcmVmOiBcIiNnXCJcbiAgICAgIH0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMi4zMy4wMWEyLjEyIDIuMTIgMCAxIDAgMCA0LjI0MSAyLjEyIDIuMTIgMCAwIDAgMC00LjI0bTAgMS4wODhhMS4wMzQgMS4wMzQgMCAwIDEgMCAyLjA2NSAxLjAzNCAxLjAzNCAwIDAgMSAwLTIuMDY1XCIsXG4gICAgICAgIG1hc2s6IFwidXJsKCNoKVwiXG4gICAgICB9KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTE2LjEzNiA1LjM5MmgtNC44NDhjLS42NyAwLTEuMjEzLjU0My0xLjIxMyAxLjIxMnY1LjY2Mmg3LjI3M1Y2LjYwNGMwLS42Ny0uNTQzLTEuMjEyLTEuMjEyLTEuMjEybTAgMS4wODhjLjA2OCAwIC4xMjQuMDU2LjEyNC4xMjR2NC41NzRoLTUuMDk2VjYuNjA0YzAtLjA2OC4wNTYtLjEyNC4xMjQtLjEyNGg0Ljg0OFwiXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMTIuNTggMTcuNDl2LTUuNTQyYS41LjUgMCAwIDAtMSAwdjYuMDQyYS41LjUgMCAwIDAgLjUuNWgzLjI2NGEuNS41IDAgMCAwIC41LS41di02LjA0MmEuNS41IDAgMSAwLTEgMHY1LjU0MkgxMi41OHpcIixcbiAgICAgICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgICAgICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgxNi4yOCAuNTM0KVwiXG4gICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcIm1hc2tcIiwge1xuICAgICAgICBpZDogXCJqXCIsXG4gICAgICAgIGZpbGw6IFwiI2ZmZlwiXG4gICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInVzZVwiLCB7XG4gICAgICAgIHhsaW5rSHJlZjogXCIjaVwiXG4gICAgICB9KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTIuMjE3LjAxYTIuMTIgMi4xMiAwIDEgMCAwIDQuMjQyIDIuMTIgMi4xMiAwIDAgMCAwLTQuMjQybTAgMS4wODlhMS4wMzQgMS4wMzQgMCAwIDEgMCAyLjA2NSAxLjAzNCAxLjAzNCAwIDAgMSAwLTIuMDY1XCIsXG4gICAgICAgIG1hc2s6IFwidXJsKCNqKVwiXG4gICAgICB9KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTE2Ljg2NCAxNy40NTZ2MWgzLjI2NWEuNS41IDAgMCAwIC41LS41di02LjA0MmgtMXY1LjU0MmgtMi43NjV6XCIsXG4gICAgICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIlxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTIwLjkyIDUuMzkyaC0yLjY3M1Y2LjQ4aDIuNjc0Yy4wNjggMCAuMTI0LjA1Ni4xMjQuMTI0djQuNTc0aC0yLjc5OHYxLjA4OGgzLjg4NlY2LjYwNGMwLS42Ny0uNTQzLTEuMjEyLTEuMjEyLTEuMjEyXCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICAgICAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDYuNDg1IC41MzQpXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibWFza1wiLCB7XG4gICAgICAgIGlkOiBcImxcIixcbiAgICAgICAgZmlsbDogXCIjZmZmXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwidXNlXCIsIHtcbiAgICAgICAgeGxpbmtIcmVmOiBcIiNrXCJcbiAgICAgIH0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMi40NDIuMDFhMi4xMiAyLjEyIDAgMSAwIDAgNC4yNDIgMi4xMiAyLjEyIDAgMCAwIDAtNC4yNDJtMCAxLjA4OWExLjAzNCAxLjAzNCAwIDAgMSAwIDIuMDY1IDEuMDM0IDEuMDM0IDAgMCAxIDAtMi4wNjVcIixcbiAgICAgICAgbWFzazogXCJ1cmwoI2wpXCJcbiAgICAgIH0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNNy43OTQgMTEuOTE0aC0xdjYuMDQyYS41LjUgMCAwIDAgLjUuNWgzLjI2NXYtMUg3Ljc5NHYtNS41NDJ6XCIsXG4gICAgICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIlxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTYuNTAzIDUuMzkyaDIuNjc0VjYuNDhINi41MDNhLjEyNC4xMjQgMCAwIDAtLjEyNC4xMjR2NC41NzRoMi43OTh2MS4wODhINS4yOVY2LjYwNGMwLS42Ny41NDMtMS4yMTIgMS4yMTItMS4yMTJcIlxuICAgICAgfSkpKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCQxaCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgOSAyMVwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk00LjY1NCAxYTIuMTMyIDIuMTMyIDAgMSAxIDAgNC4yNjMgMi4xMzIgMi4xMzIgMCAwIDEgMC00LjI2M3ptMCAxLjA5NGExLjA0IDEuMDQgMCAwIDAgMCAyLjA3NiAxLjAzOSAxLjAzOSAwIDAgMCAwLTIuMDc2ek0yLjIyIDYuODcySDcuMDlhMS4yMiAxLjIyIDAgMCAxIDEuMjE4IDEuMjE5djUuNjlIMXYtNS42OWMwLS42NzMuNTQ2LTEuMjE5IDEuMjItMS4yMTl6TTcuMDkgNy45NjZIMi4yMTlhLjEyNS4xMjUgMCAwIDAtLjEyNi4xMjV2NC41OTZoNS4xMjJWOC4wOTFhLjEyNS4xMjUgMCAwIDAtLjEyNC0uMTI1elwiLFxuICAgICAgICBzdHJva2U6IFwiIzMzM0Q0N1wiLFxuICAgICAgICBzdHJva2VXaWR0aDogMC41XG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNNS41NDUgMTguNzVIMy43NjR2LTUuMzIyYS43NS43NSAwIDEgMC0xLjUgMFYxOS41YzAgLjQxNC4zMzUuNzUuNzUuNzVoMy4yOGEuNzUuNzUgMCAwIDAgLjc1LS43NXYtNi4wNzJhLjc1Ljc1IDAgMSAwLTEuNSAwdjUuMzIyelwiLFxuICAgICAgICBmaWxsUnVsZTogXCJub256ZXJvXCJcbiAgICAgIH0pKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkMWkgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDE1IDIxXCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICAgICAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTQuNjM2IDEuMDc4YTIuMTIgMi4xMiAwIDEgMSAwIDQuMjQyIDIuMTIgMi4xMiAwIDAgMSAwLTQuMjQyem0wIDEuMDg4YTEuMDM0IDEuMDM0IDAgMCAwIDAgMi4wNjYgMS4wMzQgMS4wMzQgMCAwIDAgMC0yLjA2NnptMi40MjQgNC43NmMuNjY5IDAgMS4yMTIuNTQzIDEuMjEyIDEuMjEyVjEzLjhIMVY4LjEzOGMwLS42Ny41NDMtMS4yMTIgMS4yMTItMS4yMTJINy4wNnptMCAxLjA4OEgyLjIxMmEuMTI0LjEyNCAwIDAgMC0uMTI0LjEyNHY0LjU3M2g1LjA5NlY4LjEzOGEuMTI0LjEyNCAwIDAgMC0uMTI0LS4xMjR6bTMuMzQ5LTYuOTdhMi4xMiAyLjEyIDAgMSAxLS4wMDEgNC4yNDIgMi4xMiAyLjEyIDAgMCAxIDAtNC4yNDJ6bTAgMS4wODhhMS4wMzQgMS4wMzQgMCAwIDAgMCAyLjA2NiAxLjAzNCAxLjAzNCAwIDAgMCAwLTIuMDY2em0yLjQyMyA0Ljc2Yy42NyAwIDEuMjEyLjU0MyAxLjIxMiAxLjIxMnY1LjY2MkgxMC4xNnYtMS4wODhoMi43OTdWOC4xMDRhLjEyNC4xMjQgMCAwIDAtLjEyNC0uMTI0SDEwLjE2VjYuODkyaDIuNjczelwiLFxuICAgICAgICBzdHJva2U6IFwiIzMzM0Q0N1wiLFxuICAgICAgICBzdHJva2VXaWR0aDogMC41XG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNNS41MTggMTguNzR2LTUuMjkyYS43NS43NSAwIDEgMSAxLjUgMHY2LjA0MmEuNzUuNzUgMCAwIDEtLjc1Ljc1SDMuMDAzYS43NS43NSAwIDAgMS0uNzUtLjc1di02LjA0MmEuNzUuNzUgMCAxIDEgMS41IDB2NS4yOTJoMS43NjV6bTMuMjU4LS4wMzRoMi41MTV2LTUuMjkyaDEuNXY2LjA0MmEuNzUuNzUgMCAwIDEtLjc1Ljc1SDguNzc2di0xLjV6XCIsXG4gICAgICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIlxuICAgICAgfSkpKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCQxaiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMjEgMjFcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCB7XG4gICAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICAgICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMTAuNDIgMS4wNDRhMi4xMiAyLjEyIDAgMSAxIC4wMDEgNC4yNDIgMi4xMiAyLjEyIDAgMCAxIDAtNC4yNDJ6bTAgMS4wODhhMS4wMzMgMS4wMzMgMCAwIDAgMCAyLjA2NiAxLjAzNCAxLjAzNCAwIDAgMCAwLTIuMDY2em0yLjQyNSA0Ljc2Yy42NjggMCAxLjIxMi41NDMgMS4yMTIgMS4yMTJ2NS42NjJINi43ODRWOC4xMDRjMC0uNjcuNTQzLTEuMjEyIDEuMjEzLTEuMjEyaDQuODQ4em0wIDEuMDg4SDcuOTk3YS4xMjQuMTI0IDAgMCAwLS4xMjQuMTI0djQuNTc0aDUuMDk2VjguMTA0YS4xMjQuMTI0IDAgMCAwLS4xMjQtLjEyNHptMy4zNi02LjkzNmEyLjEyIDIuMTIgMCAxIDEgMCA0LjI0MiAyLjEyIDIuMTIgMCAwIDEgMC00LjI0MnptMCAxLjA4OGExLjAzMyAxLjAzMyAwIDAgMCAwIDIuMDY2IDEuMDM0IDEuMDM0IDAgMCAwIDAtMi4wNjZ6bTIuNDI1IDQuNzZjLjY2OSAwIDEuMjEyLjU0MyAxLjIxMiAxLjIxMnY1LjY2MmgtMy44ODZ2LTEuMDg4aDIuNzk4VjguMTA0YS4xMjQuMTI0IDAgMCAwLS4xMjQtLjEyNGgtMi42NzRWNi44OTJoMi42NzR6TTQuNjM2IDEuMDQ0YTIuMTIgMi4xMiAwIDEgMSAwIDQuMjQyIDIuMTIgMi4xMiAwIDAgMSAwLTQuMjQyem0wIDEuMDg4YTEuMDMzIDEuMDMzIDAgMCAwIDAgMi4wNjYgMS4wMzQgMS4wMzQgMCAwIDAgMC0yLjA2NnptLTIuNDI0IDQuNzZoMi42NzNWNy45OEgyLjIxMmEuMTI0LjEyNCAwIDAgMC0uMTI0LjEyNHY0LjU3NGgyLjc5N3YxLjA4OEgxVjguMTA0YzAtLjY3LjU0My0xLjIxMiAxLjIxMi0xLjIxMnpcIixcbiAgICAgICAgc3Ryb2tlOiBcIiMzMzNENDdcIixcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDAuNVxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTkuNTM4IDE4Ljc0aDEuNzY1di01LjI5MmEuNzUuNzUgMCAwIDEgMS41IDB2Ni4wNDJhLjc1Ljc1IDAgMCAxLS43NS43NUg4Ljc4OGEuNzUuNzUgMCAwIDEtLjc1LS43NXYtNi4wNDJhLjc1Ljc1IDAgMSAxIDEuNSAwdjUuMjkyem01LjAzNS0uMDM0aDIuNTE1di01LjI5MmgxLjV2Ni4wNDJhLjc1Ljc1IDAgMCAxLS43NS43NWgtMy4yNjV2LTEuNXptLTEwLjgyLTUuMjkydjUuMjkyaDIuNTE1djEuNUgzLjAwM2EuNzUuNzUgMCAwIDEtLjc1LS43NXYtNi4wNDJoMS41elwiLFxuICAgICAgICBmaWxsUnVsZTogXCJub256ZXJvXCJcbiAgICAgIH0pKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkMWsgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDI2IDIxXCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICAgICAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTIyLjA0IDEuMDQ0YTIuMTIgMi4xMiAwIDEgMSAwIDQuMjQyIDIuMTIgMi4xMiAwIDAgMSAwLTQuMjQyem0wIDEuMDg4YTEuMDM0IDEuMDM0IDAgMCAwIDAgMi4wNjYgMS4wMzQgMS4wMzQgMCAwIDAgMC0yLjA2NnptMi40MjQgNC43NmMuNjcgMCAxLjIxMy41NDMgMS4yMTMgMS4yMTJ2NS42NjJIMjEuNzl2LTEuMDg4aDIuNzk3VjguMTA0YS4xMjQuMTI0IDAgMCAwLS4xMjQtLjEyNGgtMi42NzNWNi44OTJoMi42NzN6TTEwLjQyMSAxLjA0NGEyLjEyMSAyLjEyMSAwIDEgMSAwIDQuMjQzIDIuMTIxIDIuMTIxIDAgMCAxIDAtNC4yNDN6bTAgMS4wODhhMS4wMzQgMS4wMzQgMCAwIDAgMCAyLjA2NiAxLjAzNCAxLjAzNCAwIDAgMCAwLTIuMDY2em0yLjQyNCA0Ljc2Yy42NyAwIDEuMjEyLjU0MyAxLjIxMiAxLjIxMnY1LjY2Mkg2Ljc4NVY4LjEwNGMwLS42Ny41NDItMS4yMTIgMS4yMTItMS4yMTJoNC44NDh6bTAgMS4wODhINy45OTdhLjEyNC4xMjQgMCAwIDAtLjEyNC4xMjR2NC41NzRoNS4wOTVWOC4xMDRhLjEyNC4xMjQgMCAwIDAtLjEyMy0uMTI0em0zLjM2LTYuOTM2YTIuMTIgMi4xMiAwIDEgMSAwIDQuMjQyIDIuMTIgMi4xMiAwIDAgMSAwLTQuMjQyem0wIDEuMDg4YTEuMDM0IDEuMDM0IDAgMCAwIDAgMi4wNjYgMS4wMzQgMS4wMzQgMCAwIDAgMC0yLjA2NnptMi40MjQgNC43NmMuNjcgMCAxLjIxMy41NDMgMS4yMTMgMS4yMTJ2NS42NjJoLTMuODg2di0xLjA4OGgyLjc5N1Y4LjEwNGEuMTI0LjEyNCAwIDAgMC0uMTI0LS4xMjRoLTIuNjczVjYuODkyaDIuNjczek00LjYzNiAxLjA0NGEyLjEyIDIuMTIgMCAxIDEgMCA0LjI0MiAyLjEyIDIuMTIgMCAwIDEgMC00LjI0MnptMCAxLjA4OGExLjAzNCAxLjAzNCAwIDAgMCAwIDIuMDY2IDEuMDM0IDEuMDM0IDAgMCAwIDAtMi4wNjZ6bS0yLjQyNCA0Ljc2aDIuNjc0VjcuOThIMi4yMTJhLjEyNC4xMjQgMCAwIDAtLjEyNC4xMjR2NC41NzRoMi43OTh2MS4wODhIMVY4LjEwNGMwLS42Ny41NDMtMS4yMTIgMS4yMTItMS4yMTJ6XCIsXG4gICAgICAgIHN0cm9rZTogXCIjMzMzRDQ3XCIsXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjVcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0yMC40MDggMTguNzA2aDIuNTE1di01LjI5MmgxLjV2Ni4wNDJhLjc1Ljc1IDAgMCAxLS43NS43NWgtMy4yNjV2LTEuNXptLTEwLjg3LjAzNGgxLjc2NXYtNS4yOTJhLjc1Ljc1IDAgMSAxIDEuNSAwdjYuMDQyYS43NS43NSAwIDAgMS0uNzUuNzVIOC43OWEuNzUuNzUgMCAwIDEtLjc1LS43NXYtNi4wNDJhLjc1Ljc1IDAgMSAxIDEuNSAwdjUuMjkyem01LjAzNS0uMDM0aDIuNTE1di01LjI5MmgxLjV2Ni4wNDJhLjc1Ljc1IDAgMCAxLS43NS43NWgtMy4yNjV2LTEuNXptLTEwLjgyIDBoMi41MTV2MS41SDMuMDA0YS43NS43NSAwIDAgMS0uNzUtLjc1di02LjA0MmgxLjV2NS4yOTJ6XCIsXG4gICAgICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIlxuICAgICAgfSkpKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCQxbCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMjggMjFcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCB7XG4gICAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICAgICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMjQuMTIgMWEyLjEyIDIuMTIgMCAxIDEgMCA0LjI0MiAyLjEyIDIuMTIgMCAwIDEgMC00LjI0MnptMCAxLjA4OGExLjAzMyAxLjAzMyAwIDAgMCAwIDIuMDY2IDEuMDM0IDEuMDM0IDAgMCAwIDAtMi4wNjZ6bS0uMDM0IDQuODA0aDIuMTdjLjY2OCAwIDEuMjExLjU0MyAxLjIxMSAxLjIxMnY1LjY2MmgtMy4zOHYtMS4wODhoMi4yOTJWOC4xMDRhLjEyNC4xMjQgMCAwIDAtLjEyNC0uMTI0aC0yLjE2OVY2Ljg5MnpNNC4xMjEgMWEyLjEyIDIuMTIgMCAxIDEgMCA0LjI0MUEyLjEyIDIuMTIgMCAwIDEgNC4xMiAxem0wIDEuMDg4YTEuMDM0IDEuMDM0IDAgMCAwIDAgMi4wNjYgMS4wMzQgMS4wMzQgMCAwIDAgMC0yLjA2NnptLjE2MyA0LjgwNFY3Ljk4SDIuMjEyYS4xMjQuMTI0IDAgMCAwLS4xMjQuMTI0djQuNTc0aDIuMTk2djEuMDg4SDFWOC4xMDRjMC0uNjcuNTQzLTEuMjEyIDEuMjEyLTEuMjEyaDIuMDcyem05LjgzNi01Ljg0OGEyLjEyIDIuMTIgMCAxIDEgMCA0LjI0MiAyLjEyIDIuMTIgMCAwIDEgMC00LjI0MnptMCAxLjA4OGExLjAzMyAxLjAzMyAwIDAgMCAwIDIuMDY2IDEuMDM0IDEuMDM0IDAgMCAwIDAtMi4wNjZ6bTIuNTE2IDQuNzZjLjY2OSAwIDEuMjEyLjU0MyAxLjIxMiAxLjIxMnY1LjY2MmgtNy4yNzNWOC4xMDRjMC0uNjcuNTQ0LTEuMjEyIDEuMjEzLTEuMjEyaDQuODQ4em0wIDEuMDg4aC00Ljg0OGEuMTI0LjEyNCAwIDAgMC0uMTI0LjEyNHY0LjU3NGg1LjA5NlY4LjEwNGEuMTI0LjEyNCAwIDAgMC0uMTI0LS4xMjR6bTIuNDg0LTYuOTQ2YTIuMTIgMi4xMiAwIDEgMSAwIDQuMjQyIDIuMTIgMi4xMiAwIDAgMSAwLTQuMjQyem0wIDEuMDg4YTEuMDMzIDEuMDMzIDAgMCAwIDAgMi4wNjYgMS4wMzQgMS4wMzQgMCAwIDAgMC0yLjA2NnptLS4wNCA0Ljc3aDIuMzRjLjY3IDAgMS4yMTMuNTQzIDEuMjEzIDEuMjEydjUuNjYySDE5LjA4di0xLjA4OGgyLjQ2NlY4LjEwNGEuMTI0LjEyNCAwIDAgMC0uMTI0LS4xMjRoLTIuMzQyVjYuODkyek05LjEyIDEuMDQ0YTIuMTIgMi4xMiAwIDEgMSAwIDQuMjQyIDIuMTIgMi4xMiAwIDAgMSAwLTQuMjQyem0wIDEuMDg4YTEuMDMzIDEuMDMzIDAgMCAwIDAgMi4wNjYgMS4wMzQgMS4wMzQgMCAwIDAgMC0yLjA2NnptLjEzNiA0Ljc2VjcuOThINy4wMDNhLjEyNC4xMjQgMCAwIDAtLjEyNC4xMjR2NC41NzRoMi4zNzd2MS4wODhINS43OVY4LjEwNGMwLS42Ny41NDMtMS4yMTIgMS4yMTItMS4yMTJoMi4yNTN6XCIsXG4gICAgICAgIHN0cm9rZTogXCIjMzMzRDQ3XCIsXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjVcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0yMi41NiAxOC43MDZoMi4xNTR2LTUuMjkyaDEuNXY2LjA0MmEuNzUuNzUgMCAwIDEtLjc1Ljc1aC0yLjkwNXYtMS41ek0zLjc1MyAxMy40MTR2NS4yOTJINS41MnYxLjVIMy4wMDRhLjc1Ljc1IDAgMCAxLS43NS0uNzV2LTYuMDQyaDEuNXptOS41NzUgNS4zMjZoMS43NjV2LTUuMjkyYS43NS43NSAwIDAgMSAxLjUgMHY2LjA0MmEuNzUuNzUgMCAwIDEtLjc1Ljc1SDEyLjU4YS43NS43NSAwIDAgMS0uNzUtLjc1di02LjA0MmEuNzUuNzUgMCAxIDEgMS41IDB2NS4yOTJ6bTQuNTU0LS4wMzRoMS45OTZ2LTUuMjkyaDEuNXY2LjA0MmEuNzUuNzUgMCAwIDEtLjc1Ljc1aC0yLjc0NnYtMS41em0tOS4zMzktNS4yOTJ2NS4yOTJoMS45OTZ2MS41SDcuNzk0YS43NS43NSAwIDAgMS0uNzUtLjc1di02LjA0MmgxLjV6XCIsXG4gICAgICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIlxuICAgICAgfSkpKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCQxbSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMjAgMTRcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCB7XG4gICAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICAgICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMTMuNDQgN2ExLjUzOSAxLjUzOSAwIDEgMS0zLjA4IDAgMS41NCAxLjU0IDAgMSAxIDMuMDggMFwiXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMSAwQy40NSAwIDAgLjQ1IDAgMXYxMmMwIC41NS40NSAxIDEgMWgxMmMuNTUgMCAxLjE2MSAwIDEuNjUtLjc1OWw0LjctNS40ODJjLjM1Ny0uNDE3LjM1Ny0xLjEwMSAwLTEuNTE4TDE0LjY1Ljc1OUMxNC4yMzEuMjUzIDEzLjY4MSAwIDEzIDBIMXptLjUgMS41SDEzYy4yNCAwIC4zNjQuMDU4LjQ5NS4yMTZMMTguMDI1IDdsLTQuNTEzIDUuMjY1LS4xMjIuMTYzYy0uMDUuMDc4LS4wMTMuMDU1LS4wNDQuMDYtLjA2LjAwOS0uMTM4LjAxMi0uMzQ1LjAxMkgxLjV2LTExelwiLFxuICAgICAgICBmaWxsUnVsZTogXCJub256ZXJvXCJcbiAgICAgIH0pKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkMW4gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk03Ljg0NSA2LjkxNkw2LjQ1MSA1LjUyMmEuODc4Ljg3OCAwIDAgMSAwLTEuMjRMMTAuNDc4LjI1N2EuODcxLjg3MSAwIDAgMSAuNjItLjI1NmMuMjI0IDAgLjQ1LjA4NS42Mi4yNTZsNC4wMjYgNC4wMjdhLjg3OC44NzggMCAwIDEgMCAxLjIzOUwxMS43MTcgOS41NWEuODcxLjg3MSAwIDAgMS0uNjIuMjU2Ljg3MS44NzEgMCAwIDEtLjYxOS0uMjU2TDkuMDg0IDguMTU1bC0uOTMuOTMgMS4zOTUgMS4zOTNjLjM0LjM0MS4zNC44OTggMCAxLjI0bC00LjAyNyA0LjAyNmEuODcxLjg3MSAwIDAgMS0uNjIuMjU2Ljg3MS44NzEgMCAwIDEtLjYyLS4yNTZMLjI1NyAxMS43MTdhLjg3OC44NzggMCAwIDEgMC0xLjIzOWw0LjAyNy00LjAyN2EuODcxLjg3MSAwIDAgMSAuNjItLjI1NmMuMjIzIDAgLjQ0OS4wODUuNjE5LjI1NmwxLjM5NCAxLjM5NC45My0uOTN6bTMuMjUzLTQuODAyTDguMzEgNC45MDJsMi43ODggMi43ODggMi43ODgtMi43ODgtMi43ODgtMi43ODh6bS42Mi0uNjJoLjAwNC0uMDA1ek00LjkwMSA4LjMxbC0yLjc4OCAyLjc4OCAyLjc4OCAyLjc4OCAyLjc4OC0yLjc4OEw0LjkwMiA4LjMxem0uNjItLjYyaC4wMDQtLjAwNHpcIixcbiAgICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkMW8gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDEzIDEzXCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xMi4wMzggMGMuNTMgMCAuOTYyLjQyLjk2Mi45Mzd2MTEuMTI1YS45NS45NSAwIDAgMS0uOTYyLjkzOEguOTZhLjk1Ljk1IDAgMCAxLS45Ni0uOTM4Vi45MzdDMCAuNDE5LjQzIDAgLjk2IDBoMTEuMDc4ek0xLjkyOCAxMS4wNzhoMS45MjhWNC44NzNIMS45Mjh2Ni4yMDV6bS45NjQtNy4wNTJhMS4xMTggMS4xMTggMCAxIDAtLjAwMi0yLjIzNyAxLjExOCAxLjExOCAwIDAgMCAuMDAyIDIuMjM3em04LjE4NiA3LjA1MlY3LjY3NWMwLTEuNjctLjM2MS0yLjk1Ni0yLjMxMy0yLjk1Ni0uOTM4IDAtMS41NjcuNTE0LTEuODI1IDEuMDAzaC0uMDI2di0uODQ5SDUuMDY1djYuMjA1aDEuOTI3di0zLjA3YzAtLjgwOC4xNTMtMS41OTIgMS4xNTctMS41OTIuOTg4IDAgMS4wMDEuOTI1IDEuMDAxIDEuNjQ1djMuMDE3aDEuOTI4elwiLFxuICAgICAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCQxcCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTMgMjFoMTh2LTJIM3Yyem0wLTRoMTh2LTJIM3Yyem0wLTRoMTh2LTJIM3Yyem0wLTRoMThWN0gzdjJ6bTAtNnYyaDE4VjNIM3pcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JDFxID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAxNiAyMFwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgICAgIGQ6IFwiTTEuNzUgOGE2LjI1IDYuMjUgMCAwMTEyLjUgMGMwIDIuMzgtMS41OSA0Ljk1LTMuMzIgNy4wMmEyOC45MyAyOC45MyAwIDAxLTIuOTMgMyAyNy4zMyAyNy4zMyAwIDAxLTIuOTMtM0MzLjM0IDEyLjk1IDEuNzUgMTAuMzggMS43NSA4ek04IC4yNUE3Ljc1IDcuNzUgMCAwMTE1Ljc1IDhjMCAyLjk1LTEuOTEgNS44OC0zLjY4IDcuOThhMzAuNDQgMzAuNDQgMCAwMS0zLjU3IDMuNThsLS4wMi4wMkw4IDE5bC0uNDcuNTgtLjAzLS4wMmE3LjY0IDcuNjQgMCAwMS0uMy0uMjVsLS44LS43M2EzMC40NCAzMC40NCAwIDAxLTIuNDctMi42QzIuMTYgMTMuODguMjUgMTAuOTUuMjUgOEE3Ljc1IDcuNzUgMCAwMTggLjI1ek04IDE5bC40Ny41OGEuNzUuNzUgMCAwMS0uOTQgMEw4IDE5ek01Ljc1IDhhMi4yNSAyLjI1IDAgMTE0LjUgMCAyLjI1IDIuMjUgMCAwMS00LjUgMHpNOCA0LjI1YTMuNzUgMy43NSAwIDEwMCA3LjUgMy43NSAzLjc1IDAgMDAwLTcuNXpcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JDFyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAyNSAzMFwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMTIuNDg0LjAwMkwxMi42MSAwYzMuNDgzIDAgNi4zNCAyLjY2MSA3LjIwNSA2LjA5NC4wMzYuMTQ1LjA1LjI5LjA0Mi40MzJBOC4yIDguMiAwIDAgMSAyMCA4LjA1M3YyLjk4MmwtLjAwMy4wNDFoMS44NzhjMS42NiAwIDMuMDI4IDEuMzI0IDMuMTIgMi45NzZsLjAwNS4xNzl2MTIuNjE1YzAgMS42NzYtMS4zMSAzLjA1Ni0yLjk0OCAzLjE0OWwtLjE3Ny4wMDVIMy4xMjVjLTEuNjYgMC0zLjAyOC0xLjMyMi0zLjEyLTIuOTc1TDAgMjYuODQ2VjE0LjIzMWMwLTEuNjc1IDEuMzEtMy4wNTYgMi45NDgtMy4xNWwuMTc3LS4wMDQgMS44NzYtLjAwMS0uMDAxLS4wNFY3LjgzMWMwLS42MzUuMDc0LTEuMjUzLjIxMi0xLjg0NWwuMDU3LS4yMjItLjAyMS4wNzkuMDM3LS4xNGMuMDE1LS4wNTcuMDMtLjExMy4wNDctLjE2OWwuMDM3LS4xMTdDNi4zNTcgMi4yMjYgOS4wNjMgMCAxMi4zODkgMGwuMDk1LjAwMkwxMi42MSAwem05LjM5MSAxMy40NEgzLjEyNWEuNzk2Ljc5NiAwIDAgMC0uNzc0LjY4M2wtLjAwNy4xMDZ2MTIuNjE1YzAgLjM5Mi4zLjcyOC42NzcuNzgxbC4xMDQuMDA4aDE4Ljc1YS43OTYuNzk2IDAgMCAwIC43NzQtLjY4NGwuMDA3LS4xMDVWMTQuMjMxYS43OTUuNzk1IDAgMCAwLS43ODEtLjc4OXptLTkuNjAyIDQuMDk2Yy43MDkgMCAxLjI5MS41NiAxLjM1NyAxLjI3OGwuMDA2LjEzNnYzLjE3M2MwIC43OC0uNjEgMS40MTMtMS4zNjMgMS40MTMtLjcxIDAtMS4yOTItLjU2LTEuMzU4LTEuMjc3bC0uMDA2LS4xMzZ2LTMuMTczYzAtLjc4LjYxLTEuNDE0IDEuMzY0LTEuNDE0em0uMjI2LTE0LjY4NGMtMi4xNzQuMDUtMy45OTMgMS41NzYtNC41NSAzLjY0MS0uMDkzLjM0LS4xNS42OTYtLjE3IDEuMDYxbC0uMDA3LjI3NnYzLjIwM2wtLjAwMy4wNDFoOS40NlY4LjA1NGMwLTIuNzEyLTIuMTA5LTUuMTMzLTQuNzMtNS4xOTl6bS00LjU1IDMuNjQxYS42MS42MSAwIDAgMC0uMDE3LjA2MWwuMDE2LS4wNnpcIixcbiAgICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkMXMgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDI1IDMwXCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xMi42MSAwYzMuNDgzIDAgNi40ODEgMi40NCA3LjM0NSA1Ljg3My4xOTIuNzYzLS4yNTMgMS41NDEtLjk5NCAxLjczOS0uNzQuMTk3LTEuNDk3LS4yNjEtMS42ODktMS4wMjQtLjU1LTIuMTg2LTIuNDU0LTMuNzM1LTQuNjYyLTMuNzM1LTIuNjcyIDAtNC44MzggMi4yMy00LjgzOCA0Ljk4djMuMjQzaDE0LjEwM2MxLjY2IDAgMy4wMjggMS4zMjMgMy4xMiAyLjk3NWwuMDA1LjE3OXYxMi42MTVjMCAxLjY3Ni0xLjMxIDMuMDU2LTIuOTQ4IDMuMTQ5bC0uMTc3LjAwNUgzLjEyNWMtMS42NiAwLTMuMDI4LTEuMzIyLTMuMTItMi45NzVMMCAyNi44NDZWMTQuMjMxYzAtMS42NzUgMS4zMS0zLjA1NiAyLjk0OC0zLjE1bC4xNzctLjAwNCAxLjg3Ny0uMDAxLS4wMDItLjA0VjcuODMxQzUgMy41MDcgOC40MDcgMCAxMi42MSAwem05LjI2NSAxMy40NDJIMy4xMjVhLjc5Ni43OTYgMCAwIDAtLjc3NC42ODNsLS4wMDcuMTA2djEyLjYxNWMwIC4zOTIuMy43MjguNjc3Ljc4MWwuMTA0LjAwOGgxOC43NWEuNzk2Ljc5NiAwIDAgMCAuNzc0LS42ODRsLjAwNy0uMTA1VjE0LjIzMWEuNzk1Ljc5NSAwIDAgMC0uNzgxLS43ODl6bS05LjYwMiA0LjA5NmMuNzA5IDAgMS4yOTEuNTYgMS4zNTcgMS4yNzhsLjAwNi4xMzZ2My4xNzNjMCAuNzgtLjYxIDEuNDEzLTEuMzYzIDEuNDEzLS43MSAwLTEuMjkyLS41Ni0xLjM1OC0xLjI3N2wtLjAwNi0uMTM2di0zLjE3M2MwLS43OC42MS0xLjQxNCAxLjM2NC0xLjQxNHpcIixcbiAgICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkMXQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDQxIDI4XCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRlZnNcIiwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICAgICAgaWQ6IFwicGF0aC0xXCIsXG4gICAgICAgIHBvaW50czogXCIwLjAwMDUxMjE5NTEyMiAwIDQwLjk3NTYwOTggMCA0MC45NzU2MDk4IDI4IDAuMDAwNTEyMTk1MTIyIDI4XCJcbiAgICAgIH0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgICAgICAgc3Ryb2tlOiBcIm5vbmVcIixcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICAgICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgICAgICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgtNTc1LjAwMDAwMCwgLTE2MDguMDAwMDAwKVwiXG4gICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICAgICAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDU2NS4wMDAwMDAsIDE1OTIuMDAwMDAwKVwiXG4gICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICAgICAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDEwLjAwMDAwMCwgMTYuMDAwMDAwKVwiXG4gICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJtYXNrXCIsIHtcbiAgICAgICAgaWQ6IFwibWFzay0yXCIsXG4gICAgICAgIGZpbGw6IFwid2hpdGVcIlxuICAgICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1c2VcIiwge1xuICAgICAgICB4bGlua0hyZWY6IFwiI3BhdGgtMVwiXG4gICAgICB9KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCBudWxsKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMzkuOTUxNzMxNywwIEwxLjAyNDkwMjQ0LDAgQzAuNDYwNDYzNDE1LDAgMC4wMDA1MTIxOTUxMjIsMC40NSAwLjAwMDUxMjE5NTEyMiwxIEwwLjAwMDUxMjE5NTEyMiwyNyBDMC4wMDA1MTIxOTUxMjIsMjcuNTUgMC40NjA0NjM0MTUsMjggMS4wMjQ5MDI0NCwyOCBMMzkuOTUxNzMxNywyOCBDNDAuNTE0MTIyLDI4IDQwLjk3NjEyMiwyNy41NSA0MC45NzYxMjIsMjcgTDQwLjk3NjEyMiwxIEM0MC45NzYxMjIsMC40NSA0MC41MTQxMjIsMCAzOS45NTE3MzE3LDAgTDM5Ljk1MTczMTcsMCBaIE0yLjA0OTI5MjY4LDI2IEwzOC45MjczNDE1LDI2IEwzOC45MjczNDE1LDIgTDIuMDQ5MjkyNjgsMiBMMi4wNDkyOTI2OCwyNiBaXCIsXG4gICAgICAgIGlkOiBcIkZpbGwtMVwiLFxuICAgICAgICBtYXNrOiBcInVybCgjbWFzay0yKVwiXG4gICAgICB9KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTIuNTkzMjc3NDQsMS4zMjgwNjk5IEMyLjEzMDIyNTI4LDEuMDI3MDY5NjYgMS41MTA4Mzg0MywxLjE1ODQzODcgMS4yMDk4MzgxOSwxLjYyMTQ5MDg2IEMwLjkwODgzNzk1NCwyLjA4NDU0MzAyIDEuMDQwMjA2OTksMi43MDM5Mjk4NiAxLjUwMzI1OTE1LDMuMDA0OTMwMSBMMTkuOTYzNzk1NywxNS4wMDQ5MzAxIEMyMC4yOTU1Mjc1LDE1LjIyMDU2NzUgMjAuNzIzMjA2NSwxNS4yMjAzMzk0IDIxLjA1NDcwODEsMTUuMDA0MzQ4MiBMMzkuNDcyMjIwMywzLjAwNDM0ODI1IEMzOS45MzQ5NTExLDIuNzAyODU0MjMgNDAuMDY1NjU5MywyLjA4MzMyNzYgMzkuNzY0MTY1MywxLjYyMDU5Njc5IEMzOS40NjI2NzEzLDEuMTU3ODY1OTggMzguODQzMTQ0NywxLjAyNzE1NzczIDM4LjM4MDQxMzksMS4zMjg2NTE3NSBMMjAuNTA4MTY4NSwxMi45NzMzODExIEwyLjU5MzI3NzQ0LDEuMzI4MDY5OSBaXCIsXG4gICAgICAgIGlkOiBcIlN0cm9rZS00XCIsXG4gICAgICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIlxuICAgICAgfSkpKSkpKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCQxdSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMjAgMTRcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgICBkOiBcIk0xIDBoMThhMSAxIDAgMDExIDF2MTJhMSAxIDAgMDEtMSAxSDFhMSAxIDAgMDEtMS0xVjFhMSAxIDAgMDExLTF6bTE3LjUgMTIuNWgtMTdWMi4zMkw5LjYgNy43Yy4yNS4xNy41OC4xNy44MyAwbDguMDctNS40djEwLjJ6bS0xLjQ4LTExbC03LjAxIDQuNjhMMi45OCAxLjVoMTQuMDR6XCJcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCQxdiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMTkgMTNcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTE4LjYwNCA0LjA2OWMuMjM2IDAgLjM5Ni4xOTUuMzk2LjU0MnY3LjQ1N2EuOTQ0Ljk0NCAwIDAgMS0uOTUuOTMySC45NWEuOTQ1Ljk0NSAwIDAgMS0uOTUtLjkzMlY0LjYxYzAtLjM0NS4xNTgtLjUzOC4zOS0uNTM4LjExNCAwIC4yNDYuMDQ2LjM4NS4xNDNsNy44NTYgNS40NDljLjIxNS4xNS41LjIyNC43ODMuMjI0LjI4IDAgLjU2LS4wNzIuNzczLS4yMTdMMTguMjIgNC4yMWEuNy43IDAgMCAxIC4zODQtLjE0ek0uNDM3IDEuNzY1Qy0uMzU3IDEuMjQ3LjAwNyAwIC45NTEgMGgxNy4xYy45NDQgMCAxLjMwNyAxLjI0Ni41MTQgMS43NjVsLTguNTQgNS41OTNhLjkzOC45MzggMCAwIDEtMS4wMjkgMEwuNDM3IDEuNzY1elwiLFxuICAgICAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCQxdyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgNDQ4IDUxMlwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMCAzMnY0NDhoNDQ4VjMySDB6bTM3Mi4yIDEwNi4xbC0yNCAyM2MtMi4xIDEuNi0zLjEgNC4yLTIuNyA2Ljd2MTY5LjNjLS40IDIuNi42IDUuMiAyLjcgNi43bDIzLjUgMjN2NS4xaC0xMThWMzY3bDI0LjMtMjMuNmMyLjQtMi40IDIuNC0zLjEgMi40LTYuN1YxOTkuOGwtNjcuNiAxNzEuNmgtOS4xTDEyNSAxOTkuOHYxMTVjLS43IDQuOCAxIDkuNyA0LjQgMTMuMmwzMS42IDM4LjN2NS4xSDcxLjJ2LTUuMWwzMS42LTM4LjNjMy40LTMuNSA0LjktOC40IDQuMS0xMy4ydi0xMzNjLjQtMy43LTEtNy4zLTMuOC05LjhMNzUgMTM4LjFWMTMzaDg3LjNsNjcuNCAxNDhMMjg5IDEzMy4xaDgzLjJ2NXpcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JDF4ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAxNCAxNFwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNNyAwYzMuODY2IDAgNyAyLjkwMiA3IDYuNDgycy0zLjEzNCA2LjQ4MS03IDYuNDgxYTcuNTI4IDcuNTI4IDAgMCAxLTIuMDA4LS4yNzFMMi42MDggMTR2LTIuNDcyQzEuMDE4IDEwLjM0IDAgOC41MjEgMCA2LjQ4MSAwIDIuOTAxIDMuMTM0IDAgNyAwem0uNjk2IDguNzI4bDMuODI2LTQuMDYyLTMuNDM0IDEuOTAyLTEuODI2LTEuOTAyLTMuODI3IDQuMDYyIDMuNDc4LTEuOTAxIDEuNzgzIDEuOTAxelwiLFxuICAgICAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCQxeSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMjAgMjJcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGVmc1wiLCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBpZDogXCJhXCIsXG4gICAgICAgIGQ6IFwiTTAgMGgyMHYxNEgwelwiXG4gICAgICB9KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCB7XG4gICAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICAgICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgICAgICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgwIDQpXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTEgMEMuNDUgMCAwIC40NSAwIDF2MTJjMCAuNTUuNDUgMSAxIDFoMThjLjU1IDAgMS0uNDUgMS0xVjFjMC0uNTUtLjQ1LTEtMS0xSDF6bTE3LjUgMS41djExaC0xN3YtMTFoMTd6XCIsXG4gICAgICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICAgICAgbWFzazogXCJ1cmwoI2IpXCJcbiAgICAgIH0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMTUuNzUgMjF2LTNhLjc1Ljc1IDAgMSAwLTEuNSAwdjNhLjc1Ljc1IDAgMSAwIDEuNSAwek01Ljc1IDRWMWEuNzUuNzUgMCAwIDAtMS41IDB2M2EuNzUuNzUgMCAwIDAgMS41IDB6TTUuNzUgMTN2LTFhLjc1Ljc1IDAgMSAwLTEuNSAwdjFhLjc1Ljc1IDAgMSAwIDEuNSAwek0xMC43NSAxM3YtMWEuNzUuNzUgMCAxIDAtMS41IDB2MWEuNzUuNzUgMCAxIDAgMS41IDB6TTE1Ljc1IDEzdi0xYS43NS43NSAwIDEgMC0xLjUgMHYxYS43NS43NSAwIDEgMCAxLjUgMHpcIixcbiAgICAgICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiXG4gICAgICB9KSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JDF6ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAyOSAyOFwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMTIuNzIzIDI1LjM4NWMtLjA4My43NzMtLjU5Mi45NTgtMS4xNDEuNDA4TDkuMDc5IDIzLjI5IDQuMzY5IDI4IDAgMjMuNjMxbDQuNzA5LTQuNzA5LTIuNTAzLTIuNTA0Yy0uNTQ4LS41NDctLjM2Mi0xLjA1Ni40MTYtMS4xMzRsOS44ODYtLjk5NmMuNzc3LS4wNzggMS4zNC40ODUgMS4yNTkgMS4yNTlsLTEuMDQ0IDkuODM4em0yLjY2NS0yMi43N2MuMDgyLS43NzQuNTkxLS45NTggMS4xNDEtLjQwOWwyLjUwMyAyLjUwM0wyMy43NDEgMGw0LjM3IDQuMzY5LTQuNzA5IDQuNzA5IDIuNTAyIDIuNTA0Yy41NDguNTQ3LjM2MyAxLjA1Ni0uNDE1IDEuMTM0bC05Ljg4Ni45OTZjLS43NzcuMDc4LTEuMzQxLS40ODUtMS4yNTktMS4yNTlsMS4wNDQtOS44Mzh6XCIsXG4gICAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JDFBID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAyNyAxOVwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMjIuMTE0IDExLjE5NWwtMi42MDggMi42MWExLjA0MyAxLjA0MyAwIDAgMS0xLjQ3NS0xLjQ3NkwyMC42NCA5LjcybC0yLjYxLTIuNjFhMS4wNDQgMS4wNDQgMCAwIDEgMS40NzUtMS40NzRsMi42MSAyLjYxIDIuNjA5LTIuNjFhMS4wNDIgMS4wNDIgMCAwIDEgMS40NzQgMS40NzRsLTIuNjEgMi42MSAyLjYwOSAyLjYwOWExLjA0MyAxLjA0MyAwIDEgMS0xLjQ3NCAxLjQ3NmwtMi42MDktMi42MXptLTE1LjU5NyAzLjUydi0uMDAxSDIuMDhBMi4wODcgMi4wODcgMCAwIDEgMCAxMi42MjRWNi4zNzhjMC0xLjE1OC45MzItMi4wOSAyLjA4LTIuMDloNC40MzdMMTEuNDA2LjM3N2MuOTA1LS43MjQgMS42MjctLjM3MiAxLjYyNy43NzR2MTYuNzAyYzAgMS4xMzktLjcyOCAxLjQ5My0xLjYyNy43NzNsLTQuODg5LTMuOTExelwiLFxuICAgICAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCQxQiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMTAgMTBcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTkuMTY0LjA0N0wuMzY3IDMuNzI4Yy0uNDk3LjIxLS40ODUuOTE3LjAxMiAxLjExbDMuMiAxLjI0YS42LjYgMCAwIDEgLjM0Mi4zNDJsMS4yMzQgMy4xOTVhLjYwMS42MDEgMCAwIDAgMS4xMTUuMDE4TDkuOTU2LjgzOGMuMTk3LS40OTctLjMtLjk5NS0uNzkyLS43OTF6XCJcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCQxQyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMTggMjJcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTE0LjA4LjI1YS43NS43NSAwIDAxLjYzMyAxLjE1MkwxMS4xMjQgNy4wNUgxNmEuNzUuNzUgMCAwMS42NyAxLjA4N2wtLjA1My4wOS0zLjIwNSA0LjYzNyA0LjA4MiAzLjU3MmEuNzUuNzUgMCAwMS0uOSAxLjE5NWwtLjA4OC0uMDY3LTMuOTUzLTMuNDU4LTUuMDU2IDcuMzJjLS40NDYuNjQ1LTEuNDMyLjI1Ny0xLjM2Ni0uNDgybC4wMTUtLjA5OCAxLjczMS04LjI5Nkg0YS43NS43NSAwIDAxLS43NDQtLjg0OGwuMDItLjA5NUw0LjQ5IDcuMDUuNTA2IDMuNTY0YS43NS43NSAwIDAxLjktMS4xOTVsLjA4OC4wNjdMNC45MiA1LjQzNCA2LjE1NS44MDZhLjc1Ljc1IDAgMDEuNjEzLS41NDhMNi44OC4yNDl6TTkuMzkgMTEuMzM2YS43NDYuNzQ2IDAgMDEuMTU4LjUxN2wtLjAxNC4xLTEuMTYyIDUuNTY1IDMuMDQ1LTQuNDA4em0zLjMyNS05LjU4OGgtNS4yNkw2LjE3OSA2LjUzNWw2LjA5NiA1LjMzNCAyLjI5NC0zLjMxOWgtNC44MWEuNzUuNzUgMCAwMS0uNjgxLTEuMDYybC4wNDktLjA5IDMuNTg4LTUuNjQ5ek01Ljc0OCA4LjE1MWwtLjc3MyAyLjg5OUg4LjhjLjE0IDAgLjI3LjAzOC4zOC4xMDNMNS43NDggOC4xNTF6XCJcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCQxRCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMjUgMjhcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTIyLjgyOCAwaC01LjU2Yy0uNjc5IDAtMS4yMjkuNDk2LTEuMjI5IDEuMTA4djI1Ljc4NGMwIC42MTIuNTUgMS4xMDggMS4yMjkgMS4xMDhoNS41NmMuNjc5IDAgMS4yMjktLjQ5NiAxLjIyOS0xLjEwOFYxLjEwOGMwLS42MTItLjU1LTEuMTA4LTEuMjI5LTEuMTA4ek0xLjIyOSAwQy41NTEgMCAwIC40OTYgMCAxLjEwOHYyNS43ODRDMCAyNy41MDQuNTUgMjggMS4yMjkgMjhINi43OWMuNjc4IDAgMS4yMjktLjQ5NiAxLjIyOS0xLjEwOFYxLjEwOEM4LjAxOS40OTYgNy40NjggMCA2Ljc5IDBIMS4yMjl6XCIsXG4gICAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JDFFID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAxOCAxOFwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xNS4wNDQgNC4xMmMtLjAwMiAwLS4wMDIuMDAyLS4wMDEuMDAxbC0uNzA3LjcwN2ExIDEgMCAxIDAgMS40MTQgMS40MTVsLjcwOC0uNzA4Yy43OC0uNzgyLjc4LTIuMDUgMC0yLjgyOUwxNC4zMzguNTg0YTIuMDAzIDIuMDAzIDAgMCAwLTIuODMgMGwtLjcwNy43MDhhMSAxIDAgMSAwIDEuNDE0IDEuNDE1bC43MDgtLjcwOCAyLjEyIDIuMTIxelwiLFxuICAgICAgICBmaWxsUnVsZTogXCJub256ZXJvXCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xMS41MDkgMWEuOTk0Ljk5NCAwIDAgMC0uNzA3LjI5MWwtOS4xOTMgOS4xOTJjLS4zOS4zOS0uNzg2IDEuMTUxLS44ODEgMS42OTNsLS43MTMgNC4wNDFjLS4wODUuNDgzLjE5Ny44MjYuNjQzLjgyNmEuODkyLjg5MiAwIDAgMCAuMTY4LS4wMTZsNC4wNC0uNzEzYy41NDMtLjA5NSAxLjMwNC0uNDkyIDEuNjkzLS44OGw5LjE5Mi05LjE5M2ExLjAwMyAxLjAwMyAwIDAgMCAwLTEuNDE0bC0zLjUzNS0zLjUzNmEuOTk4Ljk5OCAwIDAgMC0uNzA3LS4yOW0wIDIuNDExbDIuMTIgMi4xMjItOC40ODEgOC40ODNhMS45NCAxLjk0IDAgMCAxLS42My4zMjhsLTIuMjEuMzkuMzg4LTIuMjA4Yy4wMzUtLjE1OS4yMTktLjUxMy4zMjctLjYzbDguNDg2LTguNDg1XCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xLjgxOCAxMS42OWwzLjUzNSAzLjUzNWExIDEgMCAxIDAgMS40MTUtMS40MTRsLTMuNTM1LTMuNTM1YTEgMSAwIDAgMC0xLjQxNSAxLjQxNHpcIixcbiAgICAgICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiXG4gICAgICB9KSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JDFGID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAxNyAxN1wiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMTAuNTk3IDMuODk3bC03LjMyIDcuMzIgMi41MDcgMi41MDYgNy40ODMtNy40ODMtMi41MDItMi41MDQtLjE2OC4xNjJ6bS0uNTgzLTEuNTM5bC4xMDktLjExTDExLjY4Ni43NjFhMS43NTMgMS43NTMgMCAwIDEgMi40NzQgMGwyLjEyMSAyLjEyMmMuNjgyLjY4Mi42ODIgMS43OTIuMDA0IDIuNDcybC0xLjUxIDEuNDk1YS45MzMuOTMzIDAgMCAxLS4wNDguMDVsLTguNTk0IDguNTk2Yy0uMzY0LjM2My0xLjA3Ni43MzQtMS41ODMuODIzbC0zLjc3OC42NjZBLjgzNC44MzQgMCAwIDEgLjYxNSAxN2MtLjQxNyAwLS42OC0uMzItLjYtLjc3MkwuNjggMTIuNDVjLjA4OS0uNTA3LjQ2LTEuMjE5LjgyMy0xLjU4M2w4LjUxLTguNTA5ek0xNC4zNCA1LjE5bC44OC0uODkyYS4yNTMuMjUzIDAgMCAwIC4wMDEtLjM1NEwxMy4xIDEuODIyYS4yNTQuMjU0IDAgMCAwLS4zNTcuMDA0bC0uOS44NjhMMTQuMzQgNS4xOXptLTkuNjkyIDkuNTE4bC0yLjM1NS0yLjM1NWExLjUyNSAxLjUyNSAwIDAgMC0uMTM0LjM1N0wxLjcgMTUuMjk4bDIuNTktLjQ1N2MuMDktLjAxNS4yMjItLjA2Ny4zNTYtLjEzM3pcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JDFHID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAxMiAyM1wiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xMS41IDZILjVjLS4yNzUgMC0uNS4yNDUtLjUuNTQ1djQuMzY0YzAgLjMuMS43NjUuMjI0IDEuMDM0bDEuNTUyIDMuMzg3Yy4xMjMuMjY4LjIyNC43MzMuMjI0IDEuMDM0djEuMDljMCAuMy4yMjQuNTQ2LjUuNTQ2aDdjLjI3NSAwIC41LS4yNDUuNS0uNTQ1di0xLjA5MWMwLS4zLjEtLjc2Ni4yMjMtMS4wMzRsMS41NTMtMy4zODdjLjEyMy0uMjcuMjI0LS43MzQuMjI0LTEuMDM0VjYuNTQ1YzAtLjMtLjIyNS0uNTQ1LS41LS41NDVNMTEgNy4wOXYzLjgyYzAgLjEzLS4wNjQuNDI2LS4xMTguNTQ1bC0xLjU1MyAzLjM4N0E0LjA4MyA0LjA4MyAwIDAgMCA5IDE2LjM2NHYuNTQ1SDN2LS41NDVjMC0uNDczLS4xMzUtMS4xLS4zMjktMS41MjJsLTEuNTUzLTMuMzg4QTEuODcyIDEuODcyIDAgMCAxIDEgMTAuOTA5VjcuMDkxaDEwXCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk04LjUgMWEuNS41IDAgMCAxIDEgMHY1LjQ4OGEuNS41IDAgMCAxLTEgMFYxek01LjUgMTcuNWEuNS41IDAgMSAxIDEgMHY1YS41LjUgMCAxIDEtMSAwdi01ek0zLjUgNi40ODhhLjUuNSAwIDAgMS0xIDBWMWEuNS41IDAgMCAxIDEgMHY1LjQ4OHpNNC41IDE0LjQxNWEuNS41IDAgMSAxLTEgMHYtMS44M2EuNS41IDAgMSAxIDEgMHYxLjgzek02LjUgMTQuNDE1YS41LjUgMCAxIDEtMSAwdi0xLjgzYS41LjUgMCAxIDEgMSAwdjEuODN6TTguNSAxNC40MTVhLjUuNSAwIDEgMS0xIDB2LTEuODNhLjUuNSAwIDEgMSAxIDB2MS44M3pcIixcbiAgICAgICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiXG4gICAgICB9KSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JDFIID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAxOCAxOVwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMTMuMTI1IDE0LjA3NGMtMy40NyAzLjU2OC03LjU4OCA1LjI2LTEwLjEyIDQuMDMyYTEuNzE1IDEuNzE1IDAgMCAxLS4yMS0uMTA4Yy0uMDMzLS4wMTYtLjAzMy0uMDE2LS4wNzYtLjA0YS43MzUuNzM1IDAgMCAxLS4xNDctLjA5NGwtLjExMy0uMDc0LS4yMy0uMTUyQTQuMDY1IDQuMDY1IDAgMCAxIC41IDE0LjMyNmExLjY1MSAxLjY1MSAwIDAgMSAuNDItMS4xMjVjLjE2OC0uMTkuMzc1LS4zNC42MTQtLjQ0MmwzLjEzLTEuMjkyYTIuNTU1IDIuNTU1IDAgMCAxIDIuNDg0LjMyNGwuMjExLjE2M2EuNTkuNTkgMCAwIDAgLjY1Ni4wNDUgOC43NTYgOC43NTYgMCAwIDAgMy4zOTEtMy44MS41NTYuNTU2IDAgMCAwLS4xMzctLjYyMmwtLjE5Ny0uMTkxYTIuNDc4IDIuNDc4IDAgMCAxLS42NDUtMi40bC44ODctMy4yMjUuNDgyLjEzMy0uNDgtLjEzOUExLjY5NyAxLjY5NyAwIDAgMSAxMi43NDQuNTMyYTQuMTUgNC4xNSAwIDAgMSAzLjUzNyAxLjI3Yy4wNDguMDUyLjE1MS4xNzQuMTUzLjE3NmwuMTIxLjEwOWMuMDYxLjA2NC4xMTcuMTMzLjE1OC4xOS4wNDIuMDUuMDgyLjEwNy4xNDQuMTk4IDEuNTczIDIuMzMzLjQxIDYuNTg4LTIuNjk0IDEwLjQzYS40NjMuNDYzIDAgMCAxLS4wODcuMTAxbC0uMzc2LjQyNC0uMTI4LjE0M2ExMDYuMDIzIDEwNi4wMjMgMCAwIDAtLjQ0Ny41MDF6bS0xLjczMy04LjgzNmMtLjEzNy41MS4wMSAxLjA1NC4zODIgMS40MjVsLjE4Ny4xODJjLjQ3Mi40NDYuNjE4IDEuMTM2LjM2IDEuNzQ1YTkuNzcxIDkuNzcxIDAgMCAxLTMuNzkgNC4yNjUgMS41OTMgMS41OTMgMCAwIDEtMS43ODMtLjExbC0uMjA1LS4xNTdhMS41NSAxLjU1IDAgMCAwLTEuNTAxLS4xOTVsLTMuMTIgMS4yODhhLjcxOC43MTggMCAwIDAtLjI1NS4xODQuNjU4LjY1OCAwIDAgMC0uMTY3LjQ1M2MuMDAxLjk5My40ODcgMS45MjQgMS4yOTMgMi40OTRsLjIxNi4xNDMuMTY0LjExMi4wMjQuMDEzLjA4Ni4wNDZjLjAzOC4wMjMuMDguMDQ1LjE0MS4wNzIgMi4wNjMgMSA1Ljc4LS41MjcgOS4wMS0zLjg0Ni0uMDA2LjAwNS0uMDA4LjAwOC4wMTUtLjAyLjE4Ny0uMjEyLjI3LS4zMDYuMzc3LS40MjVsLjEyNy0uMTQyYy4xODktLjIxMy4yOC0uMzE3LjQyOC0uNDc1LS4wMTcuMDE1LS4wMjUuMDIzLS4wMTIuMDA3IDIuODc2LTMuNTYgMy45MjMtNy4zODkgMi42NjQtOS4yNTVhMi40NTcgMi40NTcgMCAwIDAtLjExLS4xNTJjLS4wMzQtLjA0Ny0uMDY0LS4wODQtLjA2LS4wODNsLS4wODMtLjA3MmEzLjE1OSAzLjE1OSAwIDAgMS0uMjI5LS4yNSAzLjE1IDMuMTUgMCAwIDAtMi42ODYtLjk2LjcuNyAwIDAgMC0uNTg3LjQ5NWwtLjg4NiAzLjIxOHpcIixcbiAgICAgICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkMUkgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDIyIDI4XCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0yMC4yMDcgMTIuMzg4TDMuMjQxLjM4QTIuMDc5IDIuMDc5IDAgMCAwIDEuMTE4LjIxNyAxLjk4NyAxLjk4NyAwIDAgMCAwIDEuOTkydjI0LjAxNmExLjk4IDEuOTggMCAwIDAgMS4xMTggMS43NzQgMi4wNzggMi4wNzggMCAwIDAgMi4xMjQtLjE2M2wxNi45NjUtMTIuMDFhMS45OCAxLjk4IDAgMCAwIC44NDMtMS42MTEgMS45OSAxLjk5IDAgMCAwLS44NDMtMS42MXpcIixcbiAgICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkMUogPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDEyIDEzXCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xIDcuMTc1YS42NzUuNjc1IDAgMSAxIDAtMS4zNWgxMGEuNjc1LjY3NSAwIDAgMSAwIDEuMzVIMXpcIlxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTYuNzc1IDExLjUwMmEuNjc1LjY3NSAwIDAgMS0xLjM1IDBWMS4wMjZhLjY3NS42NzUgMCAxIDEgMS4zNSAwdjEwLjQ3NnpcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JDFLID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAxNCAxOVwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNNyAuMjVhNC4yNSA0LjI1IDAgMSAwIDAgOC41IDQuMjUgNC4yNSAwIDAgMCAwLTguNXYxLjVhMi43NSAyLjc1IDAgMSAxIDAgNS41IDIuNzUgMi43NSAwIDAgMSAwLTUuNVYuMjV6TTIuODk1IDkuNTgzYTIuODAyIDIuODAyIDAgMCAwLTIuODAxIDIuODAydjYuMzY1aDEzLjgxMnYtNi4zNjVhMi44MDIgMi44MDIgMCAwIDAtMi44MDItMi44MDJIMi44OTV6bTkuNTExIDcuNjY3SDEuNTk0di00Ljg2NWMwLS43MTkuNTgzLTEuMzAyIDEuMzAxLTEuMzAyaDguMjA5Yy43MiAwIDEuMzAyLjU4MyAxLjMwMiAxLjMwMnY0Ljg2NXpcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JDFMID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAzMSAyOVwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMTEuMjUgNS45NThDNS4wMzcgNS45NTggMCAxMC45OTUgMCAxNy4yMDhzNS4wMzcgMTEuMjUgMTEuMjUgMTEuMjUgMTEuMjUtNS4wMzcgMTEuMjUtMTEuMjUtNS4wMzctMTEuMjUtMTEuMjUtMTEuMjV6bTAgMS41YzUuMzg1IDAgOS43NSA0LjM2NSA5Ljc1IDkuNzVzLTQuMzY1IDkuNzUtOS43NSA5Ljc1LTkuNzUtNC4zNjUtOS43NS05Ljc1IDQuMzY1LTkuNzUgOS43NS05Ljc1em0zLjA0IDEyLjE1N2EuNzUuNzUgMCAwMS45MiAxLjE4NCA2LjQ1MSA2LjQ1MSAwIDAxLTcuOTIgMCAuNzUuNzUgMCAwMS45Mi0xLjE4NCA0Ljk1MSA0Ljk1MSAwIDAwNi4wOCAwem0tNS44NC01LjMwN2ExLjUgMS41IDAgMTAwIDMgMS41IDEuNSAwIDAwMC0zem0wIDFhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXptNS42LTFhMS41IDEuNSAwIDEwMCAzIDEuNSAxLjUgMCAwMDAtM3ptMCAxYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6bTguNjUtMTEuNjlDMjIuNjgyIDEuNDQgMjQuMjY2IDAgMjYuNjI0IDBjMi4zNTggMCAzLjk3OCAxLjQyMiAzLjk3OCAzLjcwOCAwIDIuNjI4LTEuODE4IDMuNzA4LTQuMzM4IDMuNzA4bC0uMDMyIDFhLjczMy43MzMgMCAwMS0uNzMzLjcxLjcyOS43MjkgMCAwMS0uNzI5LS43MWwtLjA1NC0yLjEzNGguNTIyYzIuMDUyIDAgMy43OTgtLjM5NiAzLjc5OC0yLjU3NCAwLTEuNDQtLjkzNi0yLjM0LTIuMzk0LTIuMzQtMS40NzYgMC0yLjM5NC44NDYtMi4zOTQgMi4yNUgyMi43em0zLjg3IDguMDgyYzAgLjYzLS40ODYgMS4xMTYtMS4wOCAxLjExNi0uNjMgMC0xLjExNi0uNDg2LTEuMTE2LTEuMTE2IDAtLjYzLjQ4Ni0xLjExNiAxLjExNi0xLjExNi41OTQgMCAxLjA4LjQ4NiAxLjA4IDEuMTE2elwiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkMU0gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xNiwzMiBDNy4xNjM0NDQsMzIgMCwyNC44MzY1NTYgMCwxNiBDMCw3LjE2MzQ0NCA3LjE2MzQ0NCwwIDE2LDAgQzI0LjgzNjU1NiwwIDMyLDcuMTYzNDQ0IDMyLDE2IEMzMiwyNC44MzY1NTYgMjQuODM2NTU2LDMyIDE2LDMyIFogTTE2LDMxIEMyNC4yODQyNzEyLDMxIDMxLDI0LjI4NDI3MTIgMzEsMTYgQzMxLDcuNzE1NzI4NzUgMjQuMjg0MjcxMiwxIDE2LDEgQzcuNzE1NzI4NzUsMSAxLDcuNzE1NzI4NzUgMSwxNiBDMSwyNC4yODQyNzEyIDcuNzE1NzI4NzUsMzEgMTYsMzEgWlwiLFxuICAgICAgICBmaWxsT3BhY2l0eTogMC4zLFxuICAgICAgICBmaWxsUnVsZTogXCJub256ZXJvXCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xNiwyNCBDMTEuNTgxNzIyLDI0IDgsMjAuNDE4Mjc4IDgsMTYgQzgsMTEuNTgxNzIyIDExLjU4MTcyMiw4IDE2LDggQzIwLjQxODI3OCw4IDI0LDExLjU4MTcyMiAyNCwxNiBDMjQsMjAuNDE4Mjc4IDIwLjQxODI3OCwyNCAxNiwyNCBaXCIsXG4gICAgICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JDFOID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMTYsMzIgQzcuMTYzNDQ0LDMyIDAsMjQuODM2NTU2IDAsMTYgQzAsNy4xNjM0NDQgNy4xNjM0NDQsMCAxNiwwIEMyNC44MzY1NTYsMCAzMiw3LjE2MzQ0NCAzMiwxNiBDMzIsMjQuODM2NTU2IDI0LjgzNjU1NiwzMiAxNiwzMiBaIE0xNiwzMSBDMjQuMjg0MjcxMiwzMSAzMSwyNC4yODQyNzEyIDMxLDE2IEMzMSw3LjcxNTcyODc1IDI0LjI4NDI3MTIsMSAxNiwxIEM3LjcxNTcyODc1LDEgMSw3LjcxNTcyODc1IDEsMTYgQzEsMjQuMjg0MjcxMiA3LjcxNTcyODc1LDMxIDE2LDMxIFpcIixcbiAgICAgICAgZmlsbE9wYWNpdHk6IDAuMyxcbiAgICAgICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkMU8gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDE4IDE4XCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk00LjIxMiA4LjExMVY2LjMzM2E0LjU4NCA0LjU4NCAwIDAgMSA5LjE2NiAwIC43NS43NSAwIDAgMCAxLjUgMCA2LjA4NCA2LjA4NCAwIDAgMC0xMi4xNjYgMHYxLjc3OGEuNzUuNzUgMCAwIDAgMS41IDB6bTkuMTY2IDEuNzc4djEuNzc4YTQuNTg0IDQuNTg0IDAgMCAxLTkuMTY2IDAgLjc1Ljc1IDAgMSAwLTEuNSAwIDYuMDg0IDYuMDg0IDAgMCAwIDEyLjE2NiAwVjkuODg5YS43NS43NSAwIDEgMC0xLjUgMHpcIlxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTE2LjA2IDEyLjg4YS43NS43NSAwIDAgMCAxLjA2LTEuMDZsLTIuNDYtMi40NjJhLjc1Ljc1IDAgMCAwLTEuMDYxIDBsLTIuNDYzIDIuNDYyYS43NS43NSAwIDEgMCAxLjA2MSAxLjA2MWwxLjkzMi0xLjkzMiAxLjkzIDEuOTMyek0zLjQ2MiA3LjA1TDEuNTMgNS4xMkEuNzUuNzUgMCAwIDAgLjQ3IDYuMThsMi40NiAyLjQ2MmEuNzUuNzUgMCAwIDAgMS4wNiAwTDYuNDU1IDYuMThhLjc1Ljc1IDAgMSAwLTEuMDYtMS4wNjFMMy40NjEgNy4wNTF6XCJcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCQxUCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMzAgNDBcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTE3LjMwMiA5LjQ2NGEuNzk4Ljc5OCAwIDAgMC0uNDY5LjQ4MWwtMS41NTggNC41MTdjLS4yNDcuNzE3LTEuMzAzLjcxNy0xLjU1IDBsLTEuNTU4LTQuNTE3YS43OTguNzk4IDAgMCAwLS40NjktLjQ4TDguNTExIDguMjI2YS43NzMuNzczIDAgMCAxIDAtMS40NTRsMy4xODctMS4yMzhhLjc5OC43OTggMCAwIDAgLjQ3LS40OEwxMy43MjQuNTM4Yy4yNDctLjcxNyAxLjMwMy0uNzE3IDEuNTUgMGwxLjU1OCA0LjUxN2EuNzk4Ljc5OCAwIDAgMCAuNDcuNDhsMy4xODYgMS4yMzhhLjc3My43NzMgMCAwIDEgMCAxLjQ1NGwtMy4xODcgMS4yMzd6bS0zLjI0NC0uMTcxbC40NDIgMS4yODIuNDQzLTEuMjgyYy4yNjgtLjc4Ljg3LTEuMzk2IDEuNjM1LTEuNjkzbC4yNTgtLjEtLjI1OC0uMWEyLjc5OCAyLjc5OCAwIDAgMS0xLjYzNi0xLjY5M0wxNC41IDQuNDI1bC0uNDQyIDEuMjgyQTIuNzk3IDIuNzk3IDAgMCAxIDEyLjQyMiA3LjRsLS4yNTguMS4yNTcuMWEyLjc5OCAyLjc5OCAwIDAgMSAxLjYzNyAxLjY5M3pNOS4zMDIgMzQuNDY0YS43OTguNzk4IDAgMCAwLS40Ny40ODFsLTEuNTU3IDQuNTE3Yy0uMjQ4LjcxNy0xLjMwMi43MTctMS41NSAwbC0xLjU1OC00LjUxN2EuNzk4Ljc5OCAwIDAgMC0uNDctLjQ4TC41MTIgMzMuMjI2YS43NzMuNzczIDAgMCAxIDAtMS40NTRsMy4xODctMS4yMzhhLjc5OC43OTggMCAwIDAgLjQ3LS40OGwxLjU1Ny00LjUxN2MuMjQ4LS43MTcgMS4zMDItLjcxNyAxLjU1IDBsMS41NTggNC41MTdhLjc5OC43OTggMCAwIDAgLjQ3LjQ4bDMuMTg2IDEuMjM4YS43NzMuNzczIDAgMCAxIDAgMS40NTRsLTMuMTg3IDEuMjM3em0tMy4yNDQtLjE3MWwuNDQyIDEuMjgyLjQ0Mi0xLjI4MkEyLjggMi44IDAgMCAxIDguNTc3IDMyLjZoLjAwMWwuMjU4LS4xLS4yNTUtLjFhMi43OTggMi43OTggMCAwIDEtMS42MzktMS42OTNMNi41IDI5LjQyNWwtLjQ0MyAxLjI4M0EyLjc5NiAyLjc5NiAwIDAgMSA0LjQyMiAzMi40bC0uMjU4LjEuMjU5LjFhMi43OTggMi43OTggMCAwIDEgMS42MzUgMS42OTN6bTIxLjI0NC04LjgyOWEuNzk4Ljc5OCAwIDAgMC0uNDcuNDgxbC0xLjU1NyA0LjUxN2MtLjI0OC43MTctMS4zMDIuNzE3LTEuNTUgMGwtMS41NTgtNC41MTdhLjc5OC43OTggMCAwIDAtLjQ3LS40OGwtMy4xODYtMS4yMzhhLjc3My43NzMgMCAwIDEgMC0xLjQ1NGwzLjE4Ny0xLjIzOGEuNzk4Ljc5OCAwIDAgMCAuNDctLjQ4bDEuNTU3LTQuNTE3Yy4yNDgtLjcxNyAxLjMwMi0uNzE3IDEuNTUgMGwxLjU1OCA0LjUxN2EuNzk4Ljc5OCAwIDAgMCAuNDcuNDhsMy4xODYgMS4yMzhhLjc3My43NzMgMCAwIDEgMCAxLjQ1NGwtMy4xODcgMS4yMzd6bS0zLjI0NC0uMTcxbC40NDIgMS4yODIuNDQyLTEuMjgyYTIuOCAyLjggMCAwIDEgMS42MzUtMS42OTNoLjAwMWwuMjU4LS4xLS4yNTUtLjFhMi43OTggMi43OTggMCAwIDEtMS42MzktMS42OTNsLS40NDItMS4yODItLjQ0MyAxLjI4M2EyLjc5NiAyLjc5NiAwIDAgMS0xLjYzNSAxLjY5MmwtLjI1OC4xLjI1OS4xYTIuNzk4IDIuNzk4IDAgMCAxIDEuNjM1IDEuNjkzelwiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkMVEgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDEzIDEzXCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICAgICAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTEuNjM2IDEyLjYzNmwzLjc1LTMuNzVhLjkuOSAwIDEgMC0xLjI3Mi0xLjI3MmwtMy43NSAzLjc1YS45LjkgMCAxIDAgMS4yNzIgMS4yNzJ6XCIsXG4gICAgICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIlxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTcuNTA5IDBDNC43NDcgMCAyLjUgMi4yOTMgMi41IDUuMTExYzAgMi44MTggMi4yNDcgNS4xMTIgNS4wMDkgNS4xMTIgMi43NjEgMCA1LjAwOS0yLjI5NCA1LjAwOS01LjExMlMxMC4yNyAwIDcuNTA4IDBtMCAxLjg1OWMxLjc2IDAgMy4xODggMS40NTUgMy4xODggMy4yNTIgMCAxLjc5Ny0xLjQyOCAzLjI1My0zLjE4NyAzLjI1My0xLjc2MSAwLTMuMTg4LTEuNDU2LTMuMTg4LTMuMjUzIDAtMS43OTcgMS40MjctMy4yNTIgMy4xODgtMy4yNTJcIlxuICAgICAgfSkpKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCQxUiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMTQgMTRcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCB7XG4gICAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICAgICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNNS4zNjEgMTAuMDQ0bC44NjEgMS43NjIgMy45MDQtNi45NTItNC43NjUgNS4xOXptLjgzIDMuNDM1aC0uMDE2YS41MjkuNTI5IDAgMCAxLS40NTktLjI5N2wtMS40NjQtMi45OTVhLjUzNy41MzcgMCAwIDEgLjA4Ny0uNTk4TDEyLjQzOC43NjZhLjUyNS41MjUgMCAwIDEgLjctLjA2OGMuMjE2LjE2LjI4LjQ1OC4xNDcuNjkzTDYuNjUgMTMuMjA4YS41MjYuNTI2IDAgMCAxLS40Ni4yN3pcIlxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTExLjEzMiAxMy4yOTRhLjUyNC41MjQgMCAwIDEtLjIzOC0uMDU3bC0zLjgyMi0xLjkzOS40NzUtLjk1MiAzLjE2OCAxLjYwNyAxLjQxMy05LjcwMy05LjQ3MiA2LjQ3OSAyLjIzLjcxNC0uMzIgMS4wMTYtMy4yNjgtMS4wNDZhLjUzNS41MzUgMCAwIDEtLjEzNy0uOTVMMTIuNTI5LjY4N2EuNTI1LjUyNSAwIDAgMSAuNTc4LS4wMWMuMTc3LjExMi4yNzIuMzIuMjQyLjUyOWwtMS42OTQgMTEuNjMyYS41MzQuNTM0IDAgMCAxLS41MjMuNDU2XCJcbiAgICAgIH0pKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkMVMgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE5XCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk04LjEzMS40NDRhLjcxMy43MTMgMCAwMTAgLjk3M0w2LjgwNyAyLjc4SDhjNC4yNzIgMCA3Ljc1IDMuNTczIDcuNzUgNy45NzUgMCA0LjQwNi0zLjQ4MiA3Ljk5NC03Ljc1IDcuOTk0Uy4yNSAxNS4xNjIuMjUgMTAuNzU2YzAtMS45Mi42OTYtMy44MDMgMS45NC01LjI2YS42NDcuNjQ3IDAgMDEuOTIyLS4wNmMuMjcxLjI1LjI5OC42OTcuMDU4Ljk3NGE2Ljc0IDYuNzQgMCAwMC0xLjU5NSA0LjM2NmMwIDMuNjQ1IDIuODc0IDYuNjEzIDYuNDI1IDYuNjEzIDMuNTM4IDAgNi40MjUtMi45NzUgNi40MjUtNi42MTMgMC0zLjYzOS0yLjg4Ny02LjYxNC02LjQyNS02LjYxNEg2LjgyN0w4LjE1IDUuNTI3YS43MTMuNzEzIDAgMDEwIC45NzIuNjUxLjY1MSAwIDAxLS40NjIuMjA1LjY1MS42NTEgMCAwMS0uNDYxLS4yMDVMNC43NjIgMy45NmEuNzA2LjcwNiAwIDAxLS4yMDEtLjQ4N2MwLS4xNzcuMDcyLS4zNTQuMjAyLS40ODdMNy4yMDkuNDQ0YS42NDUuNjQ1IDAgMDEuOTIyIDB6TTggOWEyIDIgMCAxMTAgNCAyIDIgMCAwMTAtNHpcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JDFUID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAyMyAyM1wiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgICAgICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiXG4gICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xMi4xOCAzLjI0OGEuNS41IDAgMCAxLTEgMFYxYS41LjUgMCAxIDEgMSAwdjIuMjQ4ek02LjA3MSA1LjM2NGEuNS41IDAgMSAxLS43MDcuNzA3bC0xLjU5LTEuNTg5YS41LjUgMCAwIDEgLjcwNy0uNzA3bDEuNTkgMS41ODl6TTMuMjQ4IDExLjE4YS41LjUgMCAwIDEgMCAxSDFhLjUuNSAwIDEgMSAwLTFoMi4yNDh6TTUuMzY0IDE3LjI4OGEuNS41IDAgMCAxIC43MDcuNzA3bC0xLjU5IDEuNTlhLjUuNSAwIDAgMS0uNzA3LS43MDdsMS41OS0xLjU5ek0xMS4xOCAyMC4xMTFhLjUuNSAwIDAgMSAxIDB2Mi4yNDhhLjUuNSAwIDAgMS0xIDBWMjAuMTF6TTE3LjI4OCAxNy45OTVhLjUuNSAwIDAgMSAuNzA3LS43MDdsMS41OSAxLjU5YS41LjUgMCAwIDEtLjcwNy43MDdsLTEuNTktMS41OXpNMjAuMTEgMTIuMThhLjUuNSAwIDEgMSAwLTFoMi4yNWEuNS41IDAgMCAxIDAgMWgtMi4yNXpNMTcuOTk1IDYuMDcxYS41LjUgMCAxIDEtLjcwNy0uNzA3bDEuNTktMS41OWEuNS41IDAgMCAxIC43MDcuNzA4bC0xLjU5IDEuNTl6TTE2LjI1IDE2LjI0OWE2LjQ2MiA2LjQ2MiAwIDEgMS05LjE0LTkuMTQgNi40NjIgNi40NjIgMCAwIDEgOS4xNCA5LjE0em0tLjcwOC0uNzA3YTUuNDYyIDUuNDYyIDAgMSAwLTcuNzI1LTcuNzI1IDUuNDYyIDUuNDYyIDAgMCAwIDcuNzI1IDcuNzI1elwiXG4gICAgICB9KSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JDFVID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgICAgICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiXG4gICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xMi40MyAzLjI0OFYxYS43NS43NSAwIDAgMC0xLjUgMHYyLjI0OGEuNzUuNzUgMCAwIDAgMS41IDB6TTYuMjQ4IDUuMTg3bC0xLjU5LTEuNTg5YS43NS43NSAwIDAgMC0xLjA2IDEuMDZsMS41OSAxLjU5YS43NS43NSAwIDAgMCAxLjA2LTEuMDZ6TTMuMjQ4IDEwLjkzSDFhLjc1Ljc1IDAgMCAwIDAgMS41aDIuMjQ4YS43NS43NSAwIDEgMCAwLTEuNXpNNS4xODcgMTcuMTExbC0xLjU5IDEuNTlhLjc1Ljc1IDAgMCAwIDEuMDYxIDEuMDZsMS41OS0xLjU5YS43NS43NSAwIDAgMC0xLjA2LTEuMDZ6TTEwLjkzIDIwLjExMXYyLjI0OGEuNzUuNzUgMCAxIDAgMS41IDBWMjAuMTFhLjc1Ljc1IDAgMCAwLTEuNSAwek0xNy4xMTEgMTguMTcybDEuNTkgMS41OWEuNzUuNzUgMCAwIDAgMS4wNi0xLjA2MWwtMS41OS0xLjU5YS43NS43NSAwIDAgMC0xLjA2IDEuMDZ6TTIwLjExIDEyLjQzaDIuMjVhLjc1Ljc1IDAgMSAwIDAtMS41aC0yLjI1YS43NS43NSAwIDEgMCAwIDEuNXpNMTguMTcyIDYuMjQ4bDEuNTktMS41OWEuNzUuNzUgMCAxIDAtMS4wNi0xLjA2bC0xLjU5IDEuNTlhLjc1Ljc1IDAgMSAwIDEuMDYgMS4wNnpNMTYuNDI2IDE2LjQyNmE2LjcxMiA2LjcxMiAwIDEgMC05LjQ5My05LjQ5MyA2LjcxMiA2LjcxMiAwIDAgMCA5LjQ5MyA5LjQ5M3ptLTguNDMyLTEuMDZhNS4yMTIgNS4yMTIgMCAxIDEgNy4zNzItNy4zNzIgNS4yMTIgNS4yMTIgMCAwIDEtNy4zNzIgNy4zNzF6XCJcbiAgICAgIH0pKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkMVYgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDIyIDE3XCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICAgICAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTIuMTQzIDYuMjUxaDE2Ljg3NWEuNzUuNzUgMCAxIDAgMC0xLjVIMi4xNDNhLjc1Ljc1IDAgMCAwIDAgMS41elwiLFxuICAgICAgICBmaWxsUnVsZTogXCJub256ZXJvXCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk04LjUgMTQuNTk3aDQuMzc1di0zLjc1SDguNXpcIlxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTEzLjA1NyAxMy4zMDhIOC42MDVBMi41OTcgMi41OTcgMCAwIDAgNiAxNS44OTh2LjE1M2g5LjY2MnYtLjE1M2MwLTEuNDMtMS4xNjYtMi41OS0yLjYwNS0yLjU5elwiXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMTguMTUxLjI1SDMuMzM4YS43NS43NSAwIDAgMC0uNzI4LjU3TC4yNzIgMTAuMzA4YS43NS43NSAwIDAgMCAuNzI4LjkzaDE5LjQ5YS43NS43NSAwIDAgMCAuNzI4LS45M0wxOC44NzkuODIxYS43NS43NSAwIDAgMC0uNzI4LS41NzF6bS0uNTg3IDEuNWwxLjk2OCA3Ljk4NkgxLjk1N0wzLjkyNiAxLjc1aDEzLjYzOHpcIixcbiAgICAgICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNOC42MDUgMTAuNTQ4bC43NzktOS40ODdBLjc1Ljc1IDAgMCAwIDcuODg5Ljk0bC0uNzggOS40ODZhLjc1Ljc1IDAgMCAwIDEuNDk2LjEyM3ptNi40OTMtLjEyM2wtLjc4LTkuNDg2YS43NS43NSAwIDEgMC0xLjQ5NC4xMjJsLjc4IDkuNDg3YS43NS43NSAwIDAgMCAxLjQ5NC0uMTIzelwiLFxuICAgICAgICBmaWxsUnVsZTogXCJub256ZXJvXCJcbiAgICAgIH0pKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkMVcgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDE0IDIwXCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICAgICAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTEzIDBIMUMuNDUgMCAwIC40NSAwIDF2MThjMCAuNTUuNDUgMSAxIDFoMTJjLjU1IDAgMS0uNDUgMS0xVjFjMC0uNTUtLjQ1LTEtMS0xbS0uMjQgMWMuMTMgMCAuMjQuMTExLjI0LjI0M3YxNy41MTRjMCAuMTMyLS4xMS4yNDMtLjI0LjI0M0gxLjI0YS4yNDUuMjQ1IDAgMCAxLS4yNC0uMjQzVjEuMjQzQzEgMS4xMTEgMS4xMSAxIDEuMjQgMWgxMS41MlwiXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMCAxNmgxNFY0SDB2MTJ6bTEtMWgxMlY1SDF2MTB6XCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk04IDEuNXYxSDYuNXYtMUg4em0wIDFINi41Yy0uNjY3IDAtLjY2Ny0xIDAtMUg4Yy42NjcgMCAuNjY3IDEgMCAxelwiLFxuICAgICAgICBmaWxsUnVsZTogXCJub256ZXJvXCJcbiAgICAgIH0pKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkMVggPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDE3IDE5XCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICAgICAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTQgM2MtLjU1IDAtMSAuNDUtMSAxdjE0YzAgLjU1LjQ1IDEgMSAxaDEyYy41NSAwIDEtLjQ1IDEtMVY0YzAtLjU1LS40NS0xLTEtMUg0em0xMS41IDEuNXYxM2gtMTF2LTEzaDExelwiLFxuICAgICAgICBmaWxsUnVsZTogXCJub256ZXJvXCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xLjc1IDE2VjJjMC0uMTM2LjExNC0uMjUuMjUtLjI1aDEyYS43NS43NSAwIDEgMCAwLTEuNUgyQzEuMDM2LjI1LjI1IDEuMDM2LjI1IDJ2MTRhLjc1Ljc1IDAgMSAwIDEuNSAwelwiLFxuICAgICAgICBmaWxsUnVsZTogXCJub256ZXJvXCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xMiAxNWExIDEgMCAxIDEgMC0yIDEgMSAwIDAgMSAwIDJ6XCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk00IDExaDYuMWExIDEgMCAwIDAgMS0xVjhhMSAxIDAgMCAwLTEtMUg0YTEgMSAwIDAgMC0xIDF2MmExIDEgMCAwIDAgMSAxem0wLTJsMSAxVjhMNCA5aDYuMWwtMS0xdjJsMS0xSDR6XCIsXG4gICAgICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIlxuICAgICAgfSkpKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCQxWSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMzAgMjhcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTE1IDIyLjVsLTguODE3IDQuNjM1IDEuNjg0LTkuODE3LTcuMTMzLTYuOTUzIDkuODU4LTEuNDMzTDE1IDBsNC40MDggOC45MzIgOS44NTggMS40MzMtNy4xMzMgNi45NTMgMS42ODQgOS44MTd6XCJcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCQxWiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMTggMTdcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTYuMDMzIDUuMjUxTDguMzMuNjY0YS43NS43NSAwIDAgMSAxLjM0MiAwbDIuMjk2IDQuNTg3IDUuMTQuNzM1YS43NS43NSAwIDAgMSAuNDEzIDEuMjg0bC0zLjcxMyAzLjU2Ny44NzYgNS4wMzRhLjc1Ljc1IDAgMCAxLTEuMDg0Ljc5NUw5IDE0LjI4M2wtNC41OTkgMi4zODNhLjc1Ljc1IDAgMCAxLTEuMDg0LS43OTVsLjg3Ni01LjAzNEwuNDggNy4yN2EuNzUuNzUgMCAwIDEgLjQxNC0xLjI4NGw1LjE0LS43MzV6TTcuMiA2LjI3NGEuNzUuNzUgMCAwIDEtLjU2NS40MDZsLTQuMDA2LjU3NCAyLjg5MiAyLjc3OGEuNzUuNzUgMCAwIDEgLjIxOS42N2wtLjY4NSAzLjkzNiAzLjYtMS44NjZhLjc1Ljc1IDAgMCAxIC42OTEgMGwzLjYgMS44NjYtLjY4NC0zLjkzNmEuNzUuNzUgMCAwIDEgLjIyLS42N2wyLjg5LTIuNzc4LTQuMDA1LS41NzRhLjc1Ljc1IDAgMCAxLS41NjUtLjQwNkw5IDIuNjc1IDcuMTk5IDYuMjc0elwiLFxuICAgICAgICBmaWxsUnVsZTogXCJub256ZXJvXCJcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCQxXyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMTUgMTVcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgICAgIHg6IDE0LFxuICAgICAgICB5OiA5LFxuICAgICAgICB3aWR0aDogMTUsXG4gICAgICAgIGhlaWdodDogMTUsXG4gICAgICAgIHJ4OiAyLFxuICAgICAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKC0xNCAtOSlcIixcbiAgICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkMSQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDQ2IDQ3XCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk04Ljc4NiAzNC44NzFsLjIwNC4xMDEuMzU2LjMwNS40MDguNDU3LjQ1OS41NTguNDU5LjYwOS40MDguODYzIDEuMDIgMS4zMi41MDkuNjA4LjUxLjU1OC41MS41MDhoLjEwMmwuNTEuNDA2LjE1Mi0uMTAyLjA1MS4wNTEuNTEuMzU1LjEwMi4xMDIuNTEuMjU0aC4xMDJsLjUxLjIwM2guMTAxbC41MS4xMDFoLjEwMmwuNTEuMDVoLjcxNGwuNTEtLjFoLjEwMWwuNTEtLjEwMi41MS0uMTUyaC4xMDJsLjUxLS4yMDMuNTYtLjIwMy41NjEtLjI1NC41NjEtLjI1NC41Ni0uMjU0LjU2Mi0uMjUzLjUxLS4yNTQuNTYtLjI1NC41Ni0uMjU0IDEuMTIyLS40MDYuNTEtLjIwMy41NjEtLjE1Mi42MTItLjI1NC41MS0uMTAxLjU2LS4xMDIuNTYxLS4xMDEuNTEtLjA1aDEuNjMxbC41Ni4wNS41NjIuMDUuNTYuMTAyLjU2MS4xMDIuNjEyLjEwMSAxLjgzNS40NTcuNjEyLjIwMyAxLjgzNS42MDkuNjEyLjIwMy42NjMuMjAzIDEuMzI1LjUwNy42NjMuMjU0LjM1Ny4yMDMuNjYyLjI1NC42NjMuMjU0LjY2My4yNTMuNjYzLjI1NC4wNS4wNWMuMzA2LjIwNC44MTYuMjU1IDEuMTczLjM1NnYzLjI5OWMtLjM1Ny0uMTUyLTEuMjIzLS40MDYtMS4yMjMtLjQwNmwtLjEwMi0uMDUxLS42NjMtLjI1NC0uNjYzLS4yMDMtLjY2My0uMjUzLS42NjItLjIwMy0uNjEyLS4yNTQtLjY2My0uMjAzLTEuMzI1LS40MDYtLjY2My0uMjAzLS42NjMtLjIwMy0xLjIyMy0uMzA1LS42MTItLjE1Mi0uNjEyLS4xNTJoLS4xMDJsLS42MTEtLjEwMi0uNjEyLS4xMDEtLjYxMi0uMTAyLS42MTItLjEwMWgtMS4yNzRsLS42MTItLjA1LS42MTIuMWgtMS4zNzZsLS41Ni4xMDItLjU2MS4xMDJoLS4xMDJsLS41NjEuMTUyaC0uMTAybC0uNTYuMTUyLTEuMTIyLjQwNi0uNTYxLjI1NC0uNTYxLjI1NC0xLjEyMi41MDctLjU2LjIwMy0uNTYxLjMwNS0uNTYuMzA0LS41MS4zMDUtLjU2MS4zMDQtLjYxMi4zNTUtLjUxLjI1NC0uNDU5LjIwMy0uOTE3LjMwNS0uNDYuMDVMMTcuMyA0N2gtLjM1N2wtLjQwOC0uMTAxLS40MDctLjE1My0uNDA4LS4yMDMtLjQwOC0uMjUzLS40MDgtLjM1Ni0uNDU5LS40MDYtLjQ1OS0uNTA3LS40NTgtLjU1OC0uNDYtLjYxLS40NTgtLjY2LS40NTktLjcxLS41MS0uNjYtLjQ1OC0uNjA4di0uMTAybC0uNDYtLjU1OC0uMDUtLjA1LS4wNTEtLjA1Mi0uNDU5LS40NTYtLjEwMi0uMDUxLS4xMDItLjA1LS40NTktLjI1NS0uMTAyLS4wNS0uMTUzLS4wNTEtLjQ1OC0uMTAyLS4yNTUtLjA1LS4yNTUuMDUtLjQ1OS4xNTMtLjE1My4wNS0uMTUzLjEwMi0uNDU5LjM1NS0uMTAyLjEwMi0uMTAyLjEwMS0uNDU4LjYxLS4wNTEuMDUtLjA1MS4wNS0uMjU1LjUwOC4yMDQtLjgxMi40NTktMS42MjQuNDU4LTEuNDIuNDYtMS4xNjguNDA3LS44NjMuMzU3LS41NTguMjU1LS4yMDNoLjE1M3ptLTEuMTEtMTMuNjQ1bC40Ni4yMDkuNDYuNDcuNDYuNjc5LjQ2MS44MzUuNDYuOTQuNDYxIDEuMDQ1LjQ2IDEuMDk2LjQ2MSAxLjA5Ny40NiAxLjA0NC41MTIgMS4wNDUuNTEyLjk5Mi41MTIuODg4LjUxMi43ODMuNTExLjY3OS41MTIuNTc0LjUxMi40Ny41MTEuNDE4LjUxMi4zMTQuNTEyLjIwOC41MTEuMTU3aDEuMDI0bC41MTEtLjEwNC41MTItLjE1Ny41NjMtLjE1Ny41NjMtLjIwOSAxLjEyNS0uNTIyLjU2My0uMzEzLjU2My0uMzEzLjU2My0uMzE0LjYxNC0uMzY1IDEuMTI2LS42MjcuNTYyLS4zMTMgMS42ODktLjc4NC41NjMtLjIwOS41NjMtLjIwOC42MTQtLjIxLjYxNC0uMTU2IDEuMjI4LS4zMTMuNjE0LS4xMDUuNjE0LS4xMDQuNjE0LS4wNTIuNjE0LS4xMDUuNjE0LS4wNTIuNjE0LS4wNTJoMS44NDJsLjYxNC4wNTIuNjY1LjA1MiAxLjk5Ni4xNTcuNjY1LjA1Mi42NjUuMDUyIDEuOTk2LjE1Ny42NjUuMTA0LjY2NS4xMDUuNjY1LjA1Mi44Ny4xMDR2OC4wNDNsLS45MjEtLjI2MS0zLjMyNi0xLjMwNi0uNjY1LS4yNjEtMi42Ni0xLjA0NS0uNTY0LS4xNTYtLjYxNC0uMjEtLjYxNC0uMjA4LS42MTQtLjIwOS0uNzE2LS4xNTctLjYxNC0uMTU2LS42MTQtLjEwNS0uNjE0LS4xNTYtLjYxNC0uMTA1LS42MTQtLjA1Mi0uNjE0LS4wNTItLjYxNC0uMDUyaC0xLjg0MmwtLjUxMi4xMDQtMS4xMjYuMjA5LS42MTQuMTA0LS41NjIuMTU3LS41NjMuMTU3LS42MTQuMjA5LS41NjMuMjA4LS41NjMuMjYyLS41NjMuMjYtMS4xMjYuNTIzLS41MTEuMzEzLS41NjMuMjYxLS41NjMuMjYxLS41NjMuMjYyLS41NjMuMjA4LS41MTEuMjEtLjUxMi4xNTYtLjUxMi4xMDQtLjUxMS4xMDVoLS41MTJsLS41MTItLjA1Mi0uNTExLS4xMDUtLjUxMi0uMjA5LS41MTItLjI2LS41MTEtLjM2Ni0uNTEyLS40MTgtLjUxMi0uNTIyLS41MTItLjU3NS0uNTExLS42MjYtLjUxMi0uNjgtLjUxMi0uNjc4LS40Ni0uNjgtLjQ2LS42NzgtLjQ2MS0uNjI3LS40Ni0uNTIyLS40NjEtLjQxOC0uNDYtLjI2LS40NjEtLjA1My0uNTEyLjIwOS0uNDYuNDE4LS40Ni43My0uNDYxLjk5My0uNDYgMS4yNTMtLjUxMyAxLjUxNS0uNDYgMS42Ny0uNDYgMS43NzYtLjQ2MSAxLjc3Ni0uNDYgMS42MTktLjQ2MSAxLjM1OC0uNDYuODM1LS40NjEuMzY2LS40Ni0uMzY2LS40MS0xLjA5Ni0uNDEtMS44OC0uNDA5LTIuNTA3TDAgMzYuMDU3bC4wNTEtNi40MjMuNDEgMi4wMzYuNDA5IDEuNjcxLjQxIDEuMTUuNDA5LjQ3LjQ2LS4xNTcuNDYtLjczMi40NjEtMS4yLjQ2LTEuNTY3LjQ2MS0xLjcyNC40Ni0xLjc3NS40NjEtMS42NzEuNDYtMS41MTUuNDYxLTEuMzA1LjQ2LS45OTMuNDYxLS42NzguNDYtLjM2Ni40NjEtLjA1MnptMjMuNzIxLTkuMDk3bC41Mi4wNTMuNTcyLjEwNS41NzEuMTA2LjU3Mi4xNTguNjIzLjIxMS41NzIuMTU4LjYyNC4yNjQuNjIzLjI2NC43MjguMzE2LjYyMy4zMTcuNjI0LjMxNi42MjQuMzcuNjIzLjMxNi42MjQuMzcgMS4zNTEuNzM4LjY3Ni40MjIuNjc1LjM3Ljc4LjQyMS42NzUuNDIyLjY3Ni4zNy4xNTYuMDUyIDEuMDkxLjM3djkuMTc4bC0xLjE0My0uMTU4LS4zMTItLjA1My0uNjc2LS4xMDUtLjY3NS0uMTA2LS42NzYtLjA1Mi0uNjc1LS4wNTMtLjY3Ni0uMDUzLTEuMzUxLS4xMDVoLS4xMDRsLS42MjQtLjA1My0uNjIzLS4wNTMtLjY3Ni0uMDUzLS42NzUtLjA1MkgzMy44NGwtLjYyNC4wNTJoLS4xMDRsLS4yMDguMDUzaC0uNDY3Yy0uMzEyIDAtLjY3Ni4xMDYtLjk4OC4yMTFsLS4yNi4wNTMtLjYyMy4xMDUtLjYyNC4xNTktLjYyMy4xNThoLS4xMDRsLS42MjQuMTU4LS42MjQuMjExLS43NzkuMjY0LS41NzIuMjFoLS4xMDRsLS41NzEuMjY1LS41NzIuMjYzLS41NzIuMjY0LS41NzEuMzE3LS41NzIuMzE2LS41NzEuMzE3LS41NzIuMzE2LS41NzIuMzE3LS41NzEuMzE2LS41NzIuMzE3LTEuMDQuNTI3LS40NjcuMjExLS40NjguMTU5LS40NjcuMTA1LS40MTYuMDUzaC0uODMybC0uMzYzLS4xMDYtLjQxNi0uMTU4LS40MTYtLjIxMS0uNDE2LS4zMTctLjQxNS0uNDIyLS40NjgtLjUyNy0uNDY4LS42MzMtLjQ2Ny0uNzkxLS40NjgtLjg0NC0uNDY4LS45NS0uNDY4LTEuMDAyLS4yMDctLjQyMi4zMTEuMjEuMTA0LjA1NC4yNi0uMDUzLjUyLjE1OC4xNTYuMDUzaC44ODNsLjUyLS4xMDZoLjEwNGwuMTA0LS4wNTIuNTItLjIxMS4xMDMtLjA1My4wNTItLjA1My41Mi0uMzcuMDUyLS4wNTIuMDUyLS4wNTMuNTItLjQ3NC41Mi0uNTI4LjUxOS0uNTh2LS4xMDZsMS4wNC0xLjM3MS41Ny0uNzM5LjUyLS43OTEuNTcyLS43OTEuNTItLjc5Mi41NzEtLjczOC41NzItLjczOS41NzItLjczOC41NzEtLjY4Ni41Mi0uNjMzLjUyLS41OC42NzUtLjUyOC41Mi0uNDc1IDEuMDQtLjg0NC41MTktLjMxNi41Mi0uMzE3LjUyLS4yNjMuNTE5LS4yMTEuNTItLjE1OS41Mi0uMTA1LjUxOS0uMDUzaDEuMDkxem0tMjUuNTYgMS41MTZsLjI1Ni4yNTIuMjU2LjU1NC40MS43NTYuNDYuOTU4LjQ2MiAxLjA1OC40NiAxLjEwOS4xNTQuMzAyLS4yNTYtLjEtLjI1Ni0uMTAyLS4yNTYuMDUtLjQ2LjA1MS0uMjU3LjA1LS4yMDUuMTUyLS40Ni4zNTItLjEwMy4xMDEtLjEwMi4xNTEtLjQ2MS42NTUtLjA1MS4wNS0uMDUyLjA1MS0uNDYuOTU4di4xbC0uNDYxIDEuMjYtLjQ2MSAxLjQ2Mi0uNDYgMS42NjMtLjQ2MiAxLjcxMy0uNDYgMS42NjMtLjQ2MSAxLjQ2MS0uMzA4LjcwNi0uMTAyLS4yNTItLjQxLTEuNTYyTC44MiAyNy4xcy0uNDEtMS4xNi0uNTEyLTEuNTEyQTEuODk2IDEuODk2IDAgMDAwIDI0LjkzM2wuMDUxLTQuNzM3Yy4zNTkuMS45MjIuMjUyLjk3My4yNTIuMDUxIDAgLjMwNy0uMDUuMzA3LS4wNWwuNDYxLS4yMDIuMTU0LS4xLjEwMi0uMTUyLjQ2MS0uNDUzLjA1MS0uMTAxLjEwMy0uMTAxLjQ2LS43MDV2LS4xMDFsLjQ2MS0uOTA3LjQ2MS0uOTU4LjQ2MS0uOTU3LjQxLS44NTcuNDEtLjY1NS4zMDYtLjQwMy4xNTQtLjFoLjA1MXpNMi4zNTQgMGwuNDYuMTU3LjQ2LjczMi40MSAxLjIwMi40NiAxLjQ2NC40MSAxLjY3M2MuNjY1IDEuNTY4IDEuMTc3IDIuMDkxIDIuMjUxIDIuODc1LjkyMS42MjggMi4zMDMuNTc2IDMuMzI2LS4zMTMgMS4wMjQtLjg4OSAyLjQ1Ni0zLjQ1IDIuNDU2LTMuNDVsLjUxMi0uNjI4LjUxMi0uNTc1LjUxMS0uNTIzLjUxMi0uNDE4LjUxMi0uMzE0LjUxMS0uMjYxLjUxMi0uMTU3LjUxMi0uMTA1aC41MTFsLjUxMi4wNTMuNTEyLjEwNC41MTEuMTU3LjUxMi4xNTcuNTEyLjIwOS41MTIuMjYxLjU2Mi4yNjIuNTYzLjI2MS41NjMuMzE0LjU2My4zMTQuNTYzLjMxMyAxLjEyNS41MjMuNTYzLjI2MS41NjMuMjYyLjU2My4yMDkuNTYzLjIwOS41NjMuMjEuNTYzLjE1NiAxLjEyNS4yMS41NjMuMTA0LjYxNC4wNTJoMi40NTZsLjYxNC0uMDUyLjYxNC0uMTA1IDEuMjI4LS4yMDkuNjE0LS4xMDUgMS4yMjgtLjMxMy42MTQtLjIxIDEuOTk2LS42MjcuNjY1LS4yNjEgMS4zMy0uNDE4LjY2Ni0uMjYyLjY2NS0uMjA5LjY2NS0uMjYxLjcxNi0uNTc1LjY2NS0uMjYyLjY2Ni0uMjYxLjcxNi0uMjYydjEzLjE3NWwtLjc2OC0uNDE4LS42NjUtLjM2Ni0uNzE2LS4zNjYtLjY2NS0uNDE4LS42NjUtLjM2Ni0uNjY2LS40MTktMS4zMy0uNzMxLS42NjUtLjM2Ni0uNjE0LS4zMTQtLjY2NS0uMzY2LS42NjYtLjMxNC0xLjIyOC0uNjI3LS42NjUtLjI2Mi0uNjE0LS4yNi0uNjE0LS4yMS0uNjE0LS4yMS0uNjE0LS4xNTYtLjYxNC0uMTA1LS42MTQtLjEwNC0uNjE0LS4wNTJoLTEuMjI4bC0uNTYzLjA1Mi0uNjE0LjEwNC0uNjE0LjE1Ny0uNTYzLjI2Mi0uNTYyLjI2MS0uNTYzLjMxNC0uNTYzLjM2Ni0uNTYzLjQxOC0uNTYzLjQ3LS41NjMuNTIzLTEuMTI1IDEuMTUtLjU2My42OC0uNjE0LjczMi0uNTYzLjczMi0uNTYzLjczMi0uNTYzLjc4NC0xLjY4OCAyLjM1My0uNTEyLjczMi0uNTEyLjY4LS41MTEuNjc5LS41MTIuNTc1LS41MTIuNTIzLS41MTEuNDctLjUxMi4zNjYtLjUxMi4yMS0uNTExLjEwNGgtLjUxMmwtLjUxMi0uMTU3LS41MTItLjMxNC0uNTExLS40Ny0uNTEyLS42MjctLjQ2LS43ODUtLjQ2LS44ODgtLjQ2MS0uOTk0LS40Ni0xLjA5OC0uNDYxLTEuMTUtLjQ2LTEuMTUtLjUxMy0xLjA5OC0uNDYtMS4wOTgtLjQ2LTEuMDQ1LS40NjEtLjgzNy0uNDYtLjY4LS40NjEtLjQ3LS40Ni0uMjEtLjQ2MS4wNTMtLjQ2LjMxNC0uNDYxLjU3NS0uNDYuODM2LS40NjEuOTQxLS40NiAxLjA0Ni0uNDYxLjk5My0uNDYuOTQxLS40NjEuNzMyLS40Ni40Ny0uNDYxLjIxaC0uNDFMMCAxNi41NzJsLjA1MS02LjkuNDYtMy4wODUuNDYxLTIuNzE4LjUxMi0yLjA0LjQxLTEuMzA2LjQ2LS41MjN6XCJcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCQyMCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMTggMTZcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCB7XG4gICAgICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIlxuICAgICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNLjUgMTUuOTloMy45OTVhLjUuNSAwIDAgMCAuNS0uNVY3LjVhLjUuNSAwIDAgMC0uNS0uNUguNWEuNS41IDAgMCAwLS41LjV2Ny45OWEuNS41IDAgMCAwIC41LjV6bS41LTFWOGgyLjk5NXY2Ljk5SDF6XCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk04Ljk5NSAxaC40OThjLjgyNyAwIDEuNDk4LjY3IDEuNDk4IDEuNDk4djMuOTk0YS41LjUgMCAwIDAgLjUuNWgzLjk4YS41LjUgMCAxIDAgMC0xaC0zLjQ4VjIuNDk4QTIuNDk3IDIuNDk3IDAgMCAwIDkuNDkyIDBoLS45OThhLjUuNSAwIDAgMC0uNS41djIuOTk2QTMuNDk1IDMuNDk1IDAgMCAxIDQuNSA2Ljk5MWEuNS41IDAgMCAwIDAgMSA0LjQ5NSA0LjQ5NSAwIDAgMCA0LjQ5NS00LjQ5NVYxelwiXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNNC43MjQgMTQuMDQzYS41LjUgMCAxIDAtLjQ0OC44OTRsMS45OTcgMWEuNS41IDAgMCAwIC4yMjQuMDUyaDguMjFjLjMzMi4wMTUuNzEtLjA0NSAxLjA5Ni0uMjUzLjU3NC0uMzEuOTg4LS44OCAxLjE3LTEuNzIzYTQwMC44MDMgNDAwLjgwMyAwIDAgMCAuNTIyLTIuNzU1bC4wMjItLjExN2MuMjI3LTEuMjE3LjM4OS0yLjExNS40Ni0yLjU2NUMxOC4yMDcgNy4xMyAxNi45NjcgNiAxNS40ODYgNmEuNS41IDAgMSAwIDAgMWMuOTE4IDAgMS42MjcuNjQ2IDEuNTA0IDEuNDE5LS4wNy40MzgtLjIzIDEuMzMtLjQ1NiAyLjUzOWwtLjAyMi4xMTZhNjAxLjU1IDYwMS41NSAwIDAgMS0uNTE4IDIuNzRjLS4yMDQuOTQtLjY4OCAxLjItMS4yNjUgMS4xNzVINi42MTVsLTEuODkxLS45NDZ6XCJcbiAgICAgIH0pKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkMjEgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0yMC41IDNsLS4xNi4wM0wxNSA1LjEgOSAzIDMuMzYgNC45Yy0uMjEuMDctLjM2LjI1LS4zNi40OFYyMC41YzAgLjI4LjIyLjUuNS41bC4xNi0uMDNMOSAxOC45bDYgMi4xIDUuNjQtMS45Yy4yMS0uMDcuMzYtLjI1LjM2LS40OFYzLjVjMC0uMjgtLjIyLS41LS41LS41ek0xNSAxOWwtNi0yLjExVjVsNiAyLjExVjE5elwiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkMjIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDI4IDE4XCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICAgICAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTIwLjUgMTcuMDM4aC02YS41LjUgMCAwIDEtLjUtLjV2LTYuNWgtM3Y2LjVhLjUuNSAwIDAgMS0uNS41aC00YS41LjUgMCAwIDEtLjUtLjV2LTEwYS41LjUgMCAxIDEgMSAwdjkuNWgzdi02LjVhLjUuNSAwIDAgMSAuNS0uNWg0YS41LjUgMCAwIDEgLjUuNXY2LjVoNVY2YS41LjUgMCAxIDEgMSAwdjEwLjUzOGEuNS41IDAgMCAxLS41LjVcIlxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTIyLjg4NiA3LjgyMWEuNDkyLjQ5MiAwIDAgMS0uMzA0LS4xMDRsLTguNzAzLTYuNjk1Yy0uMDM3LS4wMjgtLjE0LS4wMjctLjE3Ni4wMDFMNS4xOTUgNy43MTRhLjUuNSAwIDEgMS0uNjE4LS43ODZMMTMuMDg1LjIzN2ExLjE3MiAxLjE3MiAwIDAgMSAxLjQwNC0uMDA4bDguNzAyIDYuNjk2YS41LjUgMCAwIDEtLjMwNS44OTZNMjUuNTQzIDE3LjAzOEgyMC41YS41LjUgMCAxIDEgMC0xaDQuNTQzVjZhLjUuNSAwIDEgMSAxIDB2MTAuNTM4YS41LjUgMCAwIDEtLjUuNVwiXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMjcuMzQ1IDcuODIxYS40OTIuNDkyIDAgMCAxLS4zMDQtLjEwNGwtOC43MDMtNi42OTVjLS4wMzgtLjAyOC0uMTQtLjAyOC0uMTc2LjAwMUwxNi41NiAyLjI4NGEuNS41IDAgMCAxLS42MTgtLjc4NkwxNy41NDQuMjM3YTEuMTc1IDEuMTc1IDAgMCAxIDEuNDAzLS4wMDhsOC43MDMgNi42OTZhLjUuNSAwIDAgMS0uMzA1Ljg5Nk03LjU0MyAxNy4wMzhIMi41YS41LjUgMCAwIDEtLjUtLjVWNmEuNS41IDAgMSAxIDEgMHYxMC4wMzhoNC41NDNhLjUuNSAwIDEgMSAwIDFcIlxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTS41IDcuODIxYS41LjUgMCAwIDEtLjMwNC0uODk2TDguODk4LjIyOWExLjE3IDEuMTcgMCAwIDEgMS40MDQuMDA5bDEuNjAzIDEuMjZhLjUuNSAwIDEgMS0uNjE5Ljc4Nkw5LjY4MyAxLjAyM2MtLjAzNS0uMDI4LS4xMzktLjAyOS0uMTc1LS4wMDFMLjgwNCA3LjcxN2EuNDkyLjQ5MiAwIDAgMS0uMzA0LjEwNFwiXG4gICAgICB9KSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JDIzID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAzMCAxOVwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMTUuNTIzNDk1My45NTA5Mzc3OWwuMTE3NzA2LjA4MDYyNDQxIDEuMzk0NzA1OCAxLjA3MjQ0Mjk4IDEuMzUzODEyNC0xLjA2MzcxNzgzYy40NTE1Mjg2LS4zNTMxOTgyMyAxLjEwNjk0NjItLjM4MzYxNjE4IDEuNTkyMzc2NS0uMDg5MTIyOTFsLjExNzU5OTguMDgwMzkzNTMgOC43MDIwMDA2IDYuNjk1MTE2NzdjLjMyOTExMzMuMjUxODk1MzguMzkwNjA0Mi43MjI5Mzg4Ni4xMzgxODA4IDEuMDUxOTkwMzUtLjExOTc4NjMuMTU1NjYxNDctLjI5MjYzOTMuMjU1MDM2NC0uNDgwNzM5OC4yODM4Mzc0NUwyOC4zNDQ3NSA5LjA3MTJsLS4wOTgxOTYxLS4wMDYzOTYzNWMtLjA5NzI1NTQtLjAxMjc1MjA5LS4xOTEwOTg2LS4wNDQ0NDk2LS4yNzYyMTk4LS4wOTM5OTYybC0uMDgyMDE3My0uMDU1NDU1NjgtLjU5NjQwOTctLjQ1OTM0NjU5TDI3LjI5MjUgMTcuNTM4NWMwIC4zNzk2ODgyLS4yODE5NjYuNjkzNDg5Ny0uNjQ4MTgyNS43NDMxNTMyTDI2LjU0MjUgMTguMjg4NUgxNS41Yy0uMzc5OTAwOCAwLS42OTM1MjUxLS4yODIxNjA4LS43NDMxNTc3LS42NDgyMzEyTDE0Ljc1IDE3LjUzODVWMTEuMjg4aC0yLjV2Ni4yNTA1YzAgLjM3OTY4ODItLjI4MTk2Ni42OTM0ODk3LS42NDgxODI1Ljc0MzE1MzJMMTEuNSAxOC4yODg1aC04Yy0uMzc5OTAwNzggMC0uNjkzNTI1MTMtLjI4MjE2MDgtLjc0MzE1NzY2LS42NDgyMzEyTDIuNzUgMTcuNTM4NWwtLjAwMDA5Mjg3LTkuMjMzNDk0ODItLjc5MTc3MTE1LjYwOTQxNTQ3Yy0uMTA1OTE3NjguMDgyNTEwNDYtLjIyOTcxNzk1LjEzMzM0Mjk3LS4zNTk0MzAyNy4xNTAzNzU1NUwxLjUwMDUgOS4wNzEybC0uMTE0Mzg4NS0uMDA4Njk4ODVjLS4xODgxMDU4MS0uMDI4ODA4LS4zNjA5OTA3OS0uMTI4MjI0NjEtLjQ4MDk2OTM1LS4yODQxMzYyMy0uMjI5MjY2MTgtLjI5ODg2NDg0LS4xOTkyODk2NC0uNzE1MzI2NS4wNTQ5NTIwMy0uOTc3NTQ0ODNsLjA4Mjk2NTQ4LS4wNzM3NjYzNSA4LjcwMjcyNjItNi42OTUyODkwNkMxMC4xOTk0NDAyLjY4MTc1NDE5IDEwLjg1Njk0NjkuNjU4MjQyNzIgMTEuMzM5MzA4OS45NTkxODU5bC4xMTY3MjIzLjA4MTk5NDA5IDEuMjM2ODc1OS45NzE4MjUxOSAxLjIzNzM4NzUtLjk3MjM4NDc2Yy40NTExODI2LS4zNTQ1MDA2MyAxLjEwNzMxOTktLjM4NTAyMTA0IDEuNTkzMjAwNy0uMDg5NjgyNjN6TTEwLjU5NCAyLjI3MUw0LjI0OTkwNzEzIDcuMTUxMDA1MTggNC4yNSAxNi43ODgwMDUyaDIuNDk5OTA3MTNWOC41OTUwMDUxOGwtLjQwMDE0MTg5LjMxNTcyNzM2Yy0uMjk2MjkzMy4yMzI5NDc4NC0uNzEyNjgyMTguMjA3MzU5ODctLjk3ODA2MjE5LS4wNDM3MzY0NWwtLjA3NDgxMjY0LS4wODIwNjExMmMtLjIzMzI5OTQzLS4yOTYwNTgzNC0uMjA3ODgyMTgtLjcxMzA2MDE4LjA0MzYxMjcyLS45Nzg0NDYzN2wuMDgyMTk4MTYtLjA3NDc5NDgyIDYuMDU3MjA1ODEtNC43NjQ2ODg2TDEwLjU5NCAyLjI3MXptOC42NTcgMGwtLjk4OTA5MjkuNzc3MDA1MTggNi4wODA3ODkzIDQuNjc4NjY5NTZjLjMyOTExMzMuMjUxODk1MzguMzkwNjA0Mi43MjI5Mzg4Ni4xMzgxODA4IDEuMDUxOTkwMzUtLjExOTc4NjMuMTU1NjYxNDctLjI5MjYzOTMuMjU1MDM2NC0uNDgwNzM5OC4yODM4Mzc0NUwyMy44ODU3NSA5LjA3MTJsLS4wOTgxOTYxLS4wMDYzOTYzNWMtLjA5NzI1NTQtLjAxMjc1MjA5LS4xOTEwOTg2LS4wNDQ0NDk2LS4yNzYyMTk4LS4wOTM5OTYybC0uMDgyMDE3My0uMDU1NDU1NjgtMS4xNzk0MDk3LS45MDczNDY1OXY4Ljc4MDAwMDAySDI1Ljc5MmwtLjAwMDA5MjktOS40ODYwMDAwMkwxOS4yNTEgMi4yNzF6bS00LjQ1OSAwTDguMjQxMjI2MzMgNy40MjMzODg2NCA4LjI1IDcuNTM4NXY5LjI0OTVoMi41di02LjI0OTVjMC0uMzc5Njg4Mi4yODE5NjYtLjY5MzQ4OTcuNjQ4MTgyNS0uNzQzMTUzMjNMMTEuNSA5Ljc4ODVoNGMuMzc5OTAwOCAwIC42OTM1MjUxLjI4MjE2MDguNzQzMTU3Ny42NDgyMzEyTDE2LjI1IDEwLjUzODV2Ni4yNDk1aDQuNVY3YzAtLjA0NjQ5MjQzLjAwNDIyNzctLjA5MTk5Njk4LjAxMjMyMDItLjEzNjE0OTY1TDE0Ljc5MiAyLjI3MXpcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JDI0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAxMiAxMVwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMTIgMS40MDdhNC43NiA0Ljc2IDAgMCAxLTEuNDE0LjQwNkEyLjU2NSAyLjU2NSAwIDAgMCAxMS42NjkuMzg4YTQuODA4IDQuODA4IDAgMCAxLTEuNTY0LjYyNUEyLjQxIDIuNDEgMCAwIDAgOC4zMDguMmMtMS4zNiAwLTIuNDYyIDEuMTUzLTIuNDYyIDIuNTc1IDAgLjIwMi4wMjIuMzk4LjA2NC41ODdDMy44NjQgMy4yNTQgMi4wNSAyLjIyOS44MzUuNjcyYy0uMjExLjM4LS4zMzMuODIyLS4zMzMgMS4yOTQgMCAuODkzLjQzNSAxLjY4MSAxLjA5NSAyLjE0M2EyLjM2OCAyLjM2OCAwIDAgMS0xLjExNS0uMzIydi4wMzNjMCAxLjI0Ny44NDkgMi4yODggMS45NzUgMi41MjRhMi4zNjUgMi4zNjUgMCAwIDEtMS4xMTIuMDQ1Yy4zMTMgMS4wMjMgMS4yMjMgMS43NjcgMi4zIDEuNzg4QTQuODA0IDQuODA0IDAgMCAxIDAgOS4yNDMgNi43NSA2Ljc1IDAgMCAwIDMuNzc0IDEwLjRjNC41MjggMCA3LjAwNS0zLjkyNCA3LjAwNS03LjMyNyAwLS4xMTEtLjAwMy0uMjIyLS4wMDgtLjMzM0E1LjEyNiA1LjEyNiAwIDAgMCAxMiAxLjQwN1wiLFxuICAgICAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCQyNSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMjAgMTlcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTEzLjUxIDYuODI4aC0yLjc0Nmw0LjgzIDguNzk2Yy4zODEuNjA0LS4wNTkgMS4zODgtLjc4IDEuMzg4SDcuMDJhMy44NjYgMy44NjYgMCAwIDEtMy4xNjQgMS42M0MxLjcyNiAxOC42NDIgMCAxNi45MzggMCAxNC44MzZjMC0yLjEwMiAxLjcyNy0zLjgwNiAzLjg1Ni0zLjgwNiAxLjM0NCAwIDIuNTI3LjY3OCAzLjIxNyAxLjcwNmgyLjIyMmwtNC44LTguNjIyYy0uMzc5LS42LjA1OS0xLjM3OC43NzYtMS4zNzhoOC4yMzRsLjI0LTEuOTA2aC4wMWEuNDk1LjQ5NSAwIDAgMSAuNzkzLS4zNDhsNS4xNSAzLjkxYS40ODYuNDg2IDAgMCAxIDAgLjc3N2wtNS4xNSAzLjkxYS40OTcuNDk3IDAgMCAxLS43OTktLjM4OHYtLjAwNWgtLjAwNGwtLjIzNC0xLjg1OHpcIixcbiAgICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkMjYgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDE3IDEyXCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk04LjMwOCAxLjZjMi44NjIgMCA1LjQxNSAxLjcwNCA2LjY2MSA0LjQtMS4yNDYgMi42OTYtMy43OTkgNC40LTYuNjYxIDQuNC0yLjg2MyAwLTUuNDE1LTEuNzA0LTYuNjYyLTQuNCAxLjI0Ny0yLjY5NiAzLjgtNC40IDYuNjYyLTQuNHptMC0xLjZDNC41MyAwIDEuMzA3IDIuNDg4IDAgNmMxLjMwNyAzLjUxMiA0LjUzMSA2IDguMzA4IDYgMy43NzYgMCA3LTIuNDg4IDguMzA3LTYtMS4zMDYtMy41MTItNC41MzEtNi04LjMwNy02em0wIDRjMS4wNDIgMCAxLjg4OC44OTYgMS44ODggMlM5LjM1IDggOC4zMDggOEM3LjI2NSA4IDYuNDIgNy4xMDQgNi40MiA2cy44NDUtMiAxLjg4OC0yem0wLTEuNkM2LjQzNSAyLjQgNC45MDkgNC4wMTYgNC45MDkgNnMxLjUyNiAzLjYgMy4zOTkgMy42IDMuMzk4LTEuNjE2IDMuMzk4LTMuNi0xLjUyNS0zLjYtMy4zOTgtMy42elwiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkMjcgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDE4IDE2XCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk05IDMuNWE3LjMyOCA3LjMyOCAwIDAgMSA2LjYxNSA0LjEyNSA3LjIzNSA3LjIzNSAwIDAgMS0xLjgwOCAyLjM0bDEuMDU4IDEuMDU4YTguODUxIDguODUxIDAgMCAwIDIuMzg1LTMuMzk4QzE1Ljk1MyA0LjMzMiAxMi43NSAyIDkgMmMtLjk1MyAwLTEuODY3LjE1LTIuNzMuNDI4bDEuMjM4IDEuMjM3QTcuNTgxIDcuNTgxIDAgMCAxIDkgMy41em0tLjgwMy44NTVMOS43NSA1LjkwN2MuNDI4LjE4OC43NzMuNTMzLjk2Ljk2bDEuNTUyIDEuNTUzYTMuNTEgMy41MSAwIDAgMCAuMTA2LS44MDNBMy4zNjMgMy4zNjMgMCAwIDAgOSA0LjI1Yy0uMjc3IDAtLjU0LjAzNy0uODAzLjEwNXptLTYuNjktMi40NTNsMi4wMSAyLjAxQTguODAzIDguODAzIDAgMCAwIC43NSA3LjYyNUMyLjA0NyAxMC45MTggNS4yNSAxMy4yNSA5IDEzLjI1YzEuMTQgMCAyLjIzNS0uMjE3IDMuMjQtLjYxNWwyLjU2NSAyLjU2NSAxLjA1OC0xLjA1N0wyLjU2NS44MzcgMS41MDggMS45MDN6bTUuNjI2IDUuNjI1TDkuMDkgOS40ODZBLjM3Ni4zNzYgMCAwIDEgOSA5LjVhMS44NzYgMS44NzYgMCAwIDEtMS44NzUtMS44NzVjMC0uMDM3LjAwOC0uMDYuMDA4LS4wOTh6bS0yLjU1LTIuNTVMNS44OTQgNi4yOWEzLjM4IDMuMzggMCAwIDAgNC40MzMgNC40NGwuNzM1LjczNWMtLjY2LjE4LTEuMzUuMjg1LTIuMDYzLjI4NWE3LjMyOCA3LjMyOCAwIDAgMS02LjYxNS00LjEyNSA3LjQyNiA3LjQyNiAwIDAgMSAyLjE5Ny0yLjY0N3pcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JDI4ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAyMCAxOVwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNNi41MTcgMTQuNzE1SDIuMDc5QTIuMDg1IDIuMDg1IDAgMCAxIDAgMTIuNjI0VjYuMzc3YzAtMS4xNTguOTMxLTIuMDkgMi4wNzktMi4wOWg0LjQzOGw0Ljg4OS0zLjkxYy45MDUtLjcyNSAxLjYyOC0uMzc0IDEuNjI4Ljc3M3YxNi43MDJjMCAxLjEzOC0uNzMgMS40OTMtMS42MjguNzc0bC00Ljg4OS0zLjkxMnptMTEuMjA4LTEuMDQzYTEuMDQyIDEuMDQyIDAgMCAxLS43MzctMS43OGMuMDIxLS4wMi43MzctLjgwOC43MzctMi4zOSAwLTEuNTg0LS43MTktMi4zNy0uNzQ5LTIuNDA0YTEuMDUzIDEuMDUzIDAgMCAxIC4wMy0xLjQ2OCAxLjAzNSAxLjAzNSAwIDAgMSAxLjQ1Ni4wMDZjLjEzOS4xMzggMS4zNDkgMS40MTggMS4zNDkgMy44NjUgMCAyLjQ0Ni0xLjIxIDMuNzI4LTEuMzQ5IDMuODY0YTEuMDM3IDEuMDM3IDAgMCAxLS43MzcuMzA3elwiLFxuICAgICAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCQyOSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMjUgMTlcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTYuNTE3IDE0LjcxNkgyLjA3OUEyLjA4OCAyLjA4OCAwIDAgMSAwIDEyLjYyN1Y2LjM4YzAtMS4xNi45MzEtMi4wOTEgMi4wNzktMi4wOTFoNC40MzhsNC44OS0zLjkxMWMuOTA0LS43MjUgMS42MjctLjM3MyAxLjYyNy43NzN2MTYuNzAyYzAgMS4xMzktLjcyOSAxLjQ5My0xLjYyNy43NzNsLTQuODktMy45MXptMTEuMjA5LTEuMDQzYTEuMDQ0IDEuMDQ0IDAgMCAxLS43MzctMS43ODFjLjAxOS0uMDIxLjczNy0uODA4LjczNy0yLjM5MXMtLjcxOS0yLjM3LS43NS0yLjQwMmExLjA1IDEuMDUgMCAwIDEgLjAzMS0xLjQ2OCAxLjAzNiAxLjAzNiAwIDAgMSAxLjQ1Ni4wMDVjLjEzOC4xMzggMS4zNDggMS40MTggMS4zNDggMy44NjVzLTEuMjEgMy43MjgtMS4zNDggMy44NjVjLS4yMDMuMjA1LS40Ny4zMDctLjczNy4zMDd6bTQuMTY5IDMuMTI4Yy0uMjE4IDAtLjQzNy0uMDY4LS42MjQtLjIxYTEuMDQgMS4wNCAwIDAgMS0uMjA4LTEuNDU4Yy4wMDgtLjAxMiAxLjM1NC0xLjkxMyAxLjM1NC01LjYzMSAwLTMuNzItMS4zNDItNS42MTItMS4zNTQtNS42M2ExLjA0IDEuMDQgMCAwIDEgLjIwOC0xLjQ2IDEuMDQgMS4wNCAwIDAgMSAxLjQ1OS4yMDljLjA3Mi4wOTcgMS43NzMgMi40MTUgMS43NzMgNi44OCAwIDQuNDY3LTEuNzAxIDYuNzg2LTEuNzczIDYuODgyYTEuMDM2IDEuMDM2IDAgMCAxLS44MzUuNDE4elwiLFxuICAgICAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCQyYSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMjggMTlcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTYuMjUgMTQuNTAxSDEuOTk0QTIuMDAyIDIuMDAyIDAgMCAxIDAgMTIuNDk2VjYuNTA1QzAgNS4zOTUuODkyIDQuNSAxLjk5NCA0LjVINi4yNUwxMC45MzkuNzVDMTEuODA3LjA1MyAxMi41LjM5IDEyLjUgMS40OXYxNi4wMmMwIDEuMDkyLS43IDEuNDMtMS41NjEuNzQxbC00LjY4OS0zLjc1em0xMC43NS0xYS45OTkuOTk5IDAgMCAxLS43MDctMS43MDdjLjAxOC0uMDIuNzA3LS43NzQuNzA3LTIuMjk0IDAtMS41MTktLjY4OS0yLjI3My0uNzE5LTIuMzA0YTEuMDEgMS4wMSAwIDAgMSAuMDI5LTEuNDA4Ljk5My45OTMgMCAwIDEgMS4zOTYuMDA1Yy4xMzMuMTMyIDEuMjkzIDEuMzYgMS4yOTMgMy43MDcgMCAyLjM0OC0xLjE2IDMuNTc2LTEuMjkzIDMuNzA4YS45OTMuOTkzIDAgMCAxLS43MDYuMjkzem0zLjk5OSAzYS45OTguOTk4IDAgMCAxLS43OTktMS41OTljLjAwOC0uMDEyIDEuMy0xLjgzNSAxLjMtNS40IDAtMy41NjgtMS4yODctNS4zODQtMS4zLTUuNGExIDEgMCAxIDEgMS41OTktMS4yYy4wNjkuMDkyIDEuNyAyLjMxNSAxLjcgNi42IDAgNC4yODQtMS42MzEgNi41MDgtMS43IDYuNmEuOTk1Ljk5NSAwIDAgMS0uOC40em00IDIuNWExLjAwMSAxLjAwMSAwIDAgMS0uODE2LTEuNTc4QzI0LjE5OSAxNy40MDMgMjYgMTQuNzI4IDI2IDkuNWMwLTUuMjI4LTEuODAyLTcuOS0xLjgyLTcuOTI4YTEuMDAzIDEuMDAzIDAgMCAxIC4yNS0xLjM5Ljk5Ny45OTcgMCAwIDEgMS4zODguMjQxQzI1LjkwNi41NSAyOCAzLjU4NCAyOCA5LjVjMCA1LjkxNy0yLjA5NCA4Ljk1MS0yLjE4MyA5LjA3OGEuOTk5Ljk5OSAwIDAgMS0uODE4LjQyM3pcIixcbiAgICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkMmIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0yOS44ODMgMTQuMzVhLjUuNSAwIDAxLjQyNC43NjRsLTMuMDM5IDQuODc3aDQuMTc2YS41LjUgMCAwMS40NTUuNzA4bC0uMDQuMDczLTcuNDIgMTAuOTUzYy0uMzA3LjQ1My0xLjAxMy4xNTUtLjkwNC0uMzhsMS40MzktNy4wMzVoLTMuMjkyYS41LjUgMCAwMS0uNDk4LS41NGwuMDE1LS4wODYgMi4zNDItOC45NjFhLjUuNSAwIDAxLjQ4NC0uMzc0em0tLjkwMi45OTlIMjQuNDFsLTIuMDggNy45NjFoMy4yNTdhLjUuNSAwIDAxLjUuNTE3bC0uMDEuMDg0LTEuMDYgNS4xNzcgNS40ODUtOC4wOTdoLTQuMTM0YS41LjUgMCAwMS0uNDYyLS42OTFsLjAzOC0uMDczIDMuMDM3LTQuODc4ek0xMi45NjYgMS40MzlhMSAxIDAgMDEuMDU4LjMzN3YyLjc0OGgzLjQxNmMuNDIzIDAgLjc3NS4zMi44MjcuNzI5bC4wMDcuMTA0LS4wMDEgMy42NjZoMS4zMzRhLjUuNSAwIDAxLjA5Ljk5M2wtLjA5LjAwOC0xLjMzNC0uMDAxdjMuNjY3YzAgLjQyNC0uMzIuNzc1LS43MjkuODI3bC0uMTA0LjAwN2gtMTVhLjgzNS44MzUgMCAwMS0uODI3LS43M2wtLjAwNi0uMTA0VjUuMzU3YzAtLjQyMy4zMTktLjc3NS43MjktLjgyN2wuMTA0LS4wMDZoLS4wODNsMTAuMzMtMy42OWExIDEgMCAwMTEuMjc5LjYwNnptMy4zMDcgNC4wODRIMS42MDd2OGgxNC42NjZsLS4wMDEtMy41aC0zLjQ5OGEuNS41IDAgMDEtLjA5LS45OTFsLjA5LS4wMDggMy40OTgtLjAwMXYtMy41elwiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkMmMgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDU3IDQ3XCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk01Ni40MjQgMjIuODg3bC0uNTY0LTIuMzNjLS4xODgtLjc1NS0uNTY0LTIuMzMtLjg3OC0zLjc3OGE2OC4wMTIgNjguMDEyIDAgMDAtMS4wNjUtNC4wMjljLS4zNzctMS4zMjItLjc1My0yLjMzLTEuMTI5LTMuMDg1LS41MDEtMS4wMDctLjk0LTEuNjM3LTEuNTA1LTIuMDE1LS44MTUtLjU2Ni0xLjgxOC0uNDQtMi42MzMuMzE1LS41MDEuNTA0LS45NCAxLjE5Ni0xLjM3OSAyLjMzLS4zNzYuOTQ0LS43NTIgMi4xNC0xLjEyOCAzLjY1MS0uMzE0IDEuMzIyLS42OSAyLjg5Ni0xLjA2NiA0Ljc4NS0uMTI2LjUwNC0uMTg4Ljk0NS0uMzE0IDEuNTc0aC0xMy43M2MtLjI1IDAtLjUwMS0uODE4LS44MTUtMS4xOTYtLjM3Ni0uNDQtLjc1Mi0uODgxLTEuMTktMS4yNi0uMzc3LS4zNzctLjgxNi0uNjI5LTEuMTMtLjk0NC0uMzEzLS4yNTEtLjY4OS0uNTAzLTEuMDAyLS43NTVsLS45NC0uOTQ1YTEyLjAxIDEyLjAxIDAgMDEtLjk0MS0xLjMyMiAxNS44NjcgMTUuODY3IDAgMDEtMS4wMDMtMS44MjZjLS4zMTQtLjYzLS42MjctMS4zODUtMS4wNjYtMi4zMjktLjMxNC0uNjkzLS41NjQtMS40NDgtLjg3OC0yLjE0bC0uMTg4LS40NDFhNDQuODcyIDQ0Ljg3MiAwIDAwLTEuMDY2LTIuNTgyQzIwLjM3NSAzLjYyMSAyMCAyLjkyOCAxOS42ODYgMi4zYy0uNDM5LS43NTYtLjg3OC0xLjMyMi0xLjM4LTEuNy0uOTQtLjc1Ni0xLjgxOC0uNjMtMi4yNTYtLjUwNC0uNjI3LjE5LTEuMTkyLjY5My0xLjc1NiAxLjUxMS0uMzc2LjYzLS44MTUgMS41MTEtMS4xOTEgMi41ODItLjM3NiAxLjAwNy0uNjkgMi4yMDMtMS4xMjggMy42NTEtLjMxNCAxLjI2LS42OSAyLjc3LTEuMDY2IDQuNTMzLS4zNzYgMS42MzctLjY5IDMuMzM3LTEuMDY2IDUuMDM3di40NGMtLjE4OC44Mi0uMzE0IDEuODktLjUwMiAyLjUySDBsLjUwMiAyLjI2NmMuMTg4LjY5Mi41MDEgMi4zMy44NzcgMy44NC40NCAxLjU3NC44MTUgMi44OTYgMS4xMjkgMy45NjcuMzc2IDEuMjU5Ljc1MiAyLjIwMyAxLjE5IDIuODk2LjU2NS45NDQgMS4xMyAxLjUxIDEuODE5IDEuNy4xMjUuMDYzLjMxNC4wNjMuNTAyLjA2My41MDEgMCAxLjE5LS4xOSAxLjg4LTEuMDcuNDQtLjU2Ny44MTUtMS4zODYgMS4yNTQtMi41MTkuMzc2LS45NDQuNjktMi4yMDQgMS4xMjktMy43MTUuMzEzLTEuMjU5LjY5LTIuNzA3IDEuMDY2LTQuNTk2IDAtLjEyNi4wNjItLjMxNC4wNjItLjMxNGgxOC4xODFjLjI1MS42My40NC45NDQuNjkgMS41MS4zMTQuODE5LjY5IDEuNzYzIDEuMDY2IDIuODk3LjMxMyAxLjAwNy42OSAyLjE0IDEuMDY2IDMuNTI1LjMxMyAxLjE5Ny42OSAyLjQ1NiAxLjAwMyAzLjY1MmwuMDYyLjE4OWMuMzc3IDEuMjYuNjkgMi42NDQgMS4wNjYgMy45MDMuNDQgMS40NDguNzUzIDIuNTgyIDEuMDY2IDMuNTI2LjM3NiAxLjEzMy43NTIgMi4wNzggMS4xMjkgMi43Ny41MDEuOTQ1IDEuMDAzIDEuNTExIDEuNTY3IDEuODI2LjMxMy4xOS42OS4zMTUgMS4wNjYuMzE1LjUwMSAwIDEuMDAzLS4xODkgMS41MDQtLjYzLjUwMi0uNDQuOTQtMS4xMzMgMS4zOC0yLjIwMy4zNzYtLjg4Mi43NTItMi4wMTUgMS4xMjgtMy40NjMuMzE0LTEuMjYuNjktMi43NyAxLjA2Ni00LjY1OS4zMTMtMS40NDguNjI3LTMuMjEgMS4wNjYtNS40NzcuMTg4LTEuMTM0LjQzOS0yLjI2Ny42MjctMy40bC40MzgtMi4zOTMuMzc3LTEuODg4aDkuNDY2ek03Ljg3IDI3LjM3NWE1My44NCA1My44NCAwIDAxLTEuMDIyIDMuNDk5Yy0uMzIuODktLjYzOSAxLjQtLjc2NyAxLjcxNy0uMDY0LS4wNjMtLjEyOC0uMTI3LS4xMjgtLjI1NC0uMzE5LS41NzMtLjYzOC0xLjQtLjk1OC0yLjQ4MS0uMzItMS4wMTgtLjcwMy0yLjIyNy0xLjA4Ni0zLjgxNy0uMzgzLTEuMDgyLS42MzktMS43ODEtLjgzLTMuMDU0SDguODlhNjkuMjUgNjkuMjUgMCAwMS0xLjAyMiA0LjM5em0zNi4yMTMtMi45NDZsLS40MzcgMi4zMjFjLS4xODcgMS4xMy0uNDM2IDIuMjU5LS42MjMgMy4zODgtLjQzNyAyLjE5Ni0uNzQ4IDMuOTUzLTEuMDYgNS4zOTYtLjM3NCAxLjgyLS42ODYgMy4yNjMtMS4wNiA0LjUxOC0uMzc0IDEuMzE3LS42ODUgMi4zODQtLjk5NyAzLjEzN2E3LjAzIDcuMDMgMCAwMS0uNTYxIDEuMDY2Yy0uMTI1LS4xMjUtLjI1LS4zMTMtLjM3NC0uNjI3LS4zMTItLjU2NS0uNjI0LTEuMzgtLjk5OC0yLjM4NC0uMzExLS44NzktLjYyMy0xLjk0NS0xLjA2LTMuMzg4LS4zNzMtMS4yNTUtLjY4NS0yLjU3My0xLjA1OS0zLjgyOHYtLjE4OGMtLjMxMi0xLjI1NS0uNjg2LTIuNTEtLjk5Ny0zLjcwMi0uMzc0LTEuMzgtLjc0OC0yLjU3Mi0xLjA2LTMuNTc2LS4zNzQtMS4xMy0uNzQ4LTIuMTMzLTEuMDYtMy4wMTItLjA2Mi0uMTg4LS4xODctLjU2NS0uMjUtLjU2NWgxMS45N2MtLjE4Ny42MjgtLjI1Ljk0Mi0uMzc0IDEuNDQ0elwiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkMmQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDEzIDEzXCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk02LjUwMiAwQTYuNTA2IDYuNTA2IDAgMCAxIDEzIDYuNWMwIDMuNTg0LTIuOTE0IDYuNS02LjQ5OCA2LjVhNi40NDQgNi40NDQgMCAwIDEtMy41NzYtMS4wNzRsLTIuNDk5Ljc5OS44MS0yLjQxNUE2LjQ1MiA2LjQ1MiAwIDAgMSAwIDYuNUMwIDIuOTE1IDIuOTE0IDAgNi40OTggMGguMDA0em0zLjU5NiA5LjA0OGMuMTQ5LS40MjIuMTQ5LS43OC4xMDYtLjg1OC0uMDQ0LS4wNzYtLjE2My0uMTE5LS4zNDUtLjIxLS4xODItLjA5LTEuMDY0LS41MjYtMS4yMy0uNTg0LS4xNjQtLjA2Mi0uMzItLjA0LS40NDMuMTM0LS4xNzQuMjQ0LS4zNDUuNDktLjQ4My42NC0uMTA5LjExNS0uMjg2LjEzLS40MzYuMDY4LS4yLS4wODMtLjc1OC0uMjgtMS40NDctLjg5My0uNTM0LS40NzYtLjg5Ny0xLjA2OC0xLjAwMi0xLjI0NS0uMTA1LS4xODEtLjAxLS4yODYuMDcyLS4zODQuMDkxLS4xMTMuNDExLS40NTguNDY5LS41ODEuMDYyLS4xMi4wMTgtLjI0NC0uMDI2LS4zMzUtLjA0My0uMDkxLS40MDYtLjk3OC0uNTU1LTEuMzM2LS4xMi0uMjg3LS41MjItLjMxMi0uNi0uMzEyLS4yMzUgMC0uNDgxLjA3LS42My4yMjItLjE4Mi4xODUtLjYzMi42MTctLjYzMiAxLjUwMiAwIC44ODcuNjQ2IDEuNzQzLjczMyAxLjg2My4wOTEuMTIgMS4yNiAxLjk2MyAzLjA3NSAyLjcxNiAxLjQxOS41ODggMS44NC41MzMgMi4xNjIuNDY0LjQ3Mi0uMTAyIDEuMDY0LS40NSAxLjIxMi0uODcxelwiLFxuICAgICAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCQyZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMjQgMjJcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCB7XG4gICAgICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIlxuICAgICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNOS43ODUgMTUuMjVhLjUuNSAwIDAgMSAuNS44NjVsLTguOTM2IDUuMTZhLjUuNSAwIDAgMS0uNzM4LS4zMjIgNi44OCA2Ljg4IDAgMCAxIC43MzMtNC41NzVjMS4yMzItMi4yMzQgMy43MjgtMy43NjEgNy43MjktNC4yODRhLjUuNSAwIDEgMSAuMTMuOTkxYy0zLjcwMi40ODQtNS45MTUgMS44MzgtNi45ODQgMy43NzZhNS44NzUgNS44NzUgMCAwIDAtLjcxNSAzLjE3bDguMjgxLTQuNzgyek0xMC41MzYgMTEuMzQ0YS41LjUgMCAwIDEtMSAwVjFhLjUuNSAwIDAgMSAuNjQ3LS40NzhjLjE1OC4wNDkuNDE1LjE1Ljc0LjMxMmE3LjI1NCA3LjI1NCAwIDAgMSAxLjU2MyAxLjA2MWMyLjM5MyAyLjEyOSAzLjExNyA1LjQ4IDEuMjE3IDEwLjE5M2EuNS41IDAgMCAxLS45MjctLjM3NGMxLjc0NC00LjMyOCAxLjExOC03LjIyOC0uOTU0LTkuMDcxYTYuMjYgNi4yNiAwIDAgMC0xLjI4Ni0uODgzdjkuNTg0ek0xMy4yODkgMTMuNTNhLjUuNSAwIDAgMSAuNS0uODY2TDIzIDE3Ljk4MmEuNS41IDAgMCAxIC4wOS44Yy0uMjM1LjIxNy0uNjU1LjUyOC0xLjIzNi44MzYtMy4yMzcgMS43MS02Ljk2IDEuMDM0LTEwLjU3OC0zLjYxOWEuNS41IDAgMSAxIC43OS0uNjE0YzMuMzEgNC4yNTkgNi41MDIgNC44MzggOS4zMiAzLjM0OC4xNjMtLjA4NS4zMTUtLjE3NC40NTYtLjI2NWwtOC41NTQtNC45Mzh6XCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xMy45NDkgMTMuNDk5YTIuNjU2IDIuNjU2IDAgMSAxLTUuMzEyLS4wMDIgMi42NTYgMi42NTYgMCAwIDEgNS4zMTIuMDAyem0tMSAwYTEuNjU1IDEuNjU1IDAgMSAwLTMuMzEgMCAxLjY1NSAxLjY1NSAwIDAgMCAzLjMxIDB6XCJcbiAgICAgIH0pKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkMmYgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDI0IDIyXCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0yLjQzOCAxNi45ODFjMS4wMjgtMS44NjQgMy4xNy0zLjE3NCA2Ljc5Ny0zLjY0OGEuNzUuNzUgMCAwIDAtLjE5NC0xLjQ4N2MtNC4wNzYuNTMyLTYuNjQzIDIuMTAzLTcuOTE2IDQuNDExYTcuMTI0IDcuMTI0IDAgMCAwLS43NTggNC43NTIuNzUuNzUgMCAwIDAgMS4xMDcuNDgzbDguOTM2LTUuMTZhLjc1Ljc1IDAgMCAwLS43NS0xLjNsLTcuOTE0IDQuNTdhNS42IDUuNiAwIDAgMSAuNjkyLTIuNjJ6XCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xMS42NTUgMi44M2MxLjk5MiAxLjc3MSAyLjU5NSA0LjU1OS44ODkgOC43OWEuNzUuNzUgMCAxIDAgMS4zOTEuNTYxYzEuOTM5LTQuODEgMS4xOS04LjI3Mi0xLjI4My0xMC40NzJDMTEuNzY3LjkyIDEwLjg4MS40NzYgMTAuMjU3LjI4M0EuNzUuNzUgMCAwIDAgOS4yODYgMXYxMC4zNDRhLjc1Ljc1IDAgMCAwIDEuNSAwVjIuMTg3YTYgNiAwIDAgMSAuODcuNjQyelwiXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMjEuMjcgMTguNTEyYy0yLjcxNCAxLjQzNS01Ljc3Mi44OC05LjAwNi0zLjI4YS43NS43NSAwIDEgMC0xLjE4NS45MmMzLjY5NSA0Ljc1MiA3LjU1MiA1LjQ1MiAxMC44OTIgMy42ODcuNjAzLS4zMTkgMS4wNC0uNjQyIDEuMjktLjg3NGEuNzUuNzUgMCAwIDAtLjEzNS0xLjJsLTkuMjEyLTUuMzE4YS43NS43NSAwIDEgMC0uNzUgMS4zbDguMTg0IDQuNzI0LS4wNzcuMDQxelwiXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMTQuMTk5IDEzLjQ5OWEyLjkwNSAyLjkwNSAwIDEgMC01LjgxIDAgMi45MDUgMi45MDUgMCAwIDAgNS44MSAwem0tMS41IDBhMS40MDYgMS40MDYgMCAxIDEtMi44MTItLjAwMiAxLjQwNiAxLjQwNiAwIDAgMSAyLjgxMi4wMDJ6XCJcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCQyZyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMjAgMjZcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTE4LjIwNCAyNS4xOWEuNzUuNzUgMCAwIDAgMS4wMzctLjkyMWwtMi4yMy02LjM3MmEuNzUuNzUgMCAwIDAtMS40MTYuNDk2bDEuNjI3IDQuNjQ3LTYuNjkyLTMuMjcyYS43NS43NSAwIDAgMC0uNjQtLjAxbC02LjU1NCAyLjk4NSAxLjUxNi00LjI0NmEuNzUuNzUgMCAwIDAtMS40MTMtLjUwNWwtMi4xMTEgNS45MTZhLjc1Ljc1IDAgMCAwIDEuMDE3LjkzNWw3Ljg0NC0zLjU3MiA4LjAxNSAzLjkyek0xMC40MDIgMy41NmEuNzUuNzUgMCAwIDAgMS40MTUtLjQ5NWwtLjgxLTIuMzEzQzEwLjc3NS4wODUgOS44MzIuMDgyIDkuNTk0Ljc0OGwtLjc5NSAyLjIyOWEuNzUuNzUgMCAwIDAgMS40MTMuNTA0bC4wODItLjIzLjEwOS4zMXpcIlxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTkuNTUgMXYxLjU1NWEuNzUuNzUgMCAwIDAgMS41LjAwMVYxYS43NS43NSAwIDAgMC0xLjUgMHpcIlxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTE5LjY4IDExLjkwM2MwIDUuMTMzLTQuMjMxIDkuMjg4LTkuNDQ0IDkuMjg4LTUuMjEyIDAtOS40NDMtNC4xNTUtOS40NDMtOS4yODhzNC4yMy05LjI5IDkuNDQzLTkuMjljNS4yMTMgMCA5LjQ0NCA0LjE1NyA5LjQ0NCA5LjI5em0tMS41IDBjMC00LjI5OS0zLjU1NC03Ljc5LTcuOTQ0LTcuNzktNC4zOSAwLTcuOTQzIDMuNDkxLTcuOTQzIDcuNzkgMCA0LjI5OCAzLjU1MyA3Ljc4OCA3Ljk0MyA3Ljc4OHM3Ljk0NC0zLjQ5IDcuOTQ0LTcuNzg4elwiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkMmggPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDE3IDIwXCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICAgICAgICBmaWxsUnVsZTogXCJub256ZXJvXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTMuODYzIDE4LjI2bDQuNzM4LTcuMDYzYS41LjUgMCAwIDEgLjgzLjU1N2wtNS4wMTMgNy40NzNhLjUuNSAwIDAgMS0uNjkuMTRMLjcyNyAxNy40YS41LjUgMCAwIDEtLjE0MS0uNjk3bDUuMDQxLTcuNTE1YS41LjUgMCAwIDEgLjgzLjU1N2wtNC43NiA3LjA5NSAyLjE2NyAxLjQyelwiXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMTEuNDM2IDYuMzg0bDIuNTU0LTMuODA3YS41LjUgMCAwIDEgLjc5NC0uMDQ4IDUuNzQzIDUuNzQzIDAgMCAxIC40MyA2Ljk2NmMtMS4zNjcgMi4wMzctMy44NTkgMi45ODgtNi4yMjUgMi40MzdhNS45MDkgNS45MDkgMCAwIDEtMS44OS0uODFDNC40MDEgOS4zNTQgMy42NjMgNS43NTYgNS40NTMgMy4wODcgNi45MDcuOTIgOS42MjgtLjAwNSAxMi4xLjc2OWEuNS41IDAgMCAxIC4yNjYuNzU2TDkuODE0IDUuMzI4bC40NDEgMS4wNyAxLjE4MS0uMDE0em0yLjk0NyAyLjU1NGE0Ljc0IDQuNzQgMCAwIDAgLjA0Ni01LjIyTDEyLjEyIDcuMTZhLjUuNSAwIDAgMS0uNDEuMjIxbC0xLjc4Mi4wMjNhLjUuNSAwIDAgMS0uNDY5LS4zMWwtLjY3My0xLjYzYS41LjUgMCAwIDEgLjA0Ny0uNDdsMi4zLTMuNDI4Yy0xLjg2LS4zMDgtMy43NzUuNDc2LTQuODUgMi4wNzlhNC43NTYgNC43NTYgMCAwIDAgMS4zNjMgNi42NCA0Ljg5IDQuODkgMCAwIDAgNi43MzctMS4zNDd6XCJcbiAgICAgIH0pKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkMmkgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDEyIDEwXCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk00Ljc2MSA2LjU0OVYzLjE5M2wzLjI0MiAxLjY4NEw0Ljc2IDYuNTQ5em03LjExOS0zLjkzN3MtLjExNy0uODIzLS40NzctMS4xODVDMTAuOTQ3Ljk1IDEwLjQzNS45NDkgMTAuMjAxLjkyIDguNTIuOCA2LjAwMy44IDYuMDAzLjhoLS4wMDZTMy40OC44IDEuOC45MmMtLjIzNC4wMjktLjc0Ni4wMy0xLjIwMi41MDdDLjIzNyAxLjc4OS4xMiAyLjYxMi4xMiAyLjYxMlMwIDMuNTc5IDAgNC41NDV2LjkwNmMwIC45NjcuMTIgMS45MzMuMTIgMS45MzNzLjExNy44MjMuNDc3IDEuMTg1Yy40NTYuNDc2IDEuMDU2LjQ2MSAxLjMyMy41MUMyLjg4IDkuMTczIDYgOS4yIDYgOS4yczIuNTIxLS4wMDQgNC4yLS4xMjVjLjIzNS0uMDI4Ljc0Ny0uMDMgMS4yMDMtLjUwNi4zNi0uMzYyLjQ3Ny0xLjE4NS40NzctMS4xODVTMTIgNi40MTggMTIgNS40NXYtLjkwNmMwLS45NjYtLjEyLTEuOTMzLS4xMi0xLjkzM3pcIixcbiAgICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkMmogPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDI0IDE4XCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xMC4yMS41NDdsLjE0LjEgNy42MTUgNi4wMTMtLjkzIDEuMTc4LS42Mi0uNDl2NC4xNzdoNC4zMDdsLTEuNDktMS41MzEgMS4wNzQtMS4wNDcgMi43NSAyLjgyNGEuNzUuNzUgMCAwMS4wNzcuOTU0bC0uMDc3LjA5Mi0yLjc1IDIuODI0LTEuMDc0LTEuMDQ3IDEuNTI3LTEuNTdoLTQuMzQzdjMuNjM3YS43NS43NSAwIDAxLS42NDguNzQzbC0uMTAxLjAwN0gyLjgzM2EuNzUuNzUgMCAwMS0uNzQzLS42NDlsLS4wMDctLjEwMVY3LjMzOGwtLjYxMi40OTRMLjUzIDYuNjY1IDcuOTY3LjY2QzguNTkyLjE1NSA5LjU0LjExNiAxMC4yMTEuNTQ3ek04Ljk4MyAxLjc4NGwtLjA3Mi4wNDItNS41NSA0LjQ4LjIyMy4wMDJ2OS42MDJoMTEuMzMzdi0yLjg4NUgxMnYtMS41aDIuOTE2VjYuMTYzbC01LjQ5Ny00LjM0Yy0uMTAzLS4wODItLjMwMi0uMDk1LS40MzctLjAzOXpcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JDJrID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAxNiAxOFwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMTAuNzk1IDIuNDRBNy43NDcgNy43NDcgMCAwMTE1LjUgOS41NjZjMCA0LjI3My0zLjQ3NyA3Ljc1LTcuNzUgNy43NVMwIDEzLjg0IDAgOS41NjdBNy43NDUgNy43NDUgMCAwMTQuNzA1IDIuNDRhLjc1MS43NTEgMCAwMS41OSAxLjM4QTYuMjQ1IDYuMjQ1IDAgMDAxLjUgOS41NjZhNi4yNTcgNi4yNTcgMCAwMDYuMjUgNi4yNUE2LjI1NyA2LjI1NyAwIDAwMTQgOS41NjdhNi4yNDYgNi4yNDYgMCAwMC0zLjc5NS01Ljc0OS43NS43NSAwIDAxLjU5LTEuMzc5ek03Ljc1IDBjLjQyOCAwIC43NzUuMzQ4Ljc3NS43NzZ2OC43OTJjMCAuNDIyLS4zNC43NjgtLjc2Mi43NzVsLS4wMjYtLjAwMS0uMDkyLS4wMDZhLjc3Ni43NzYgMCAwMS0uNjctLjc2OFYuNzc2YzAtLjQyOC4zNDctLjc3Ni43NzUtLjc3NnpcIixcbiAgICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN2Z0NvbXBvbmVudDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTdmdDb21wb25lbnQkMmwgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdmdDb21wb25lbnQsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN2Z0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3ZnQ29tcG9uZW50KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdmdDb21wb25lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN2Z0NvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDIzIDIzXCIsXG4gICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMWVtXCJcbiAgICAgIH0sIHRoaXMucHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xMS41LjI1QzUuMjg3LjI1LjI1IDUuMjg3LjI1IDExLjVTNS4yODcgMjIuNzUgMTEuNSAyMi43NXMxMS4yNS01LjAzNyAxMS4yNS0xMS4yNVMxNy43MTMuMjUgMTEuNS4yNXptMCAxLjVjNS4zODUgMCA5Ljc1IDQuMzY1IDkuNzUgOS43NXMtNC4zNjUgOS43NS05Ljc1IDkuNzUtOS43NS00LjM2NS05Ljc1LTkuNzUgNC4zNjUtOS43NSA5Ljc1LTkuNzV6XCJcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBkOiBcIk0xNS40NiAxNS4wOTFhNi40NSA2LjQ1IDAgMDEtNy45MiAwIC43NS43NSAwIDAxLjkyLTEuMTg0IDQuOTUgNC45NSAwIDAwNi4wOCAwIC43NS43NSAwIDAxLjkyIDEuMTg0ek04LjcgOC45YTEuMiAxLjIgMCAxMDAgMi40IDEuMiAxLjIgMCAwMDAtMi40em01LjYgMGExLjIgMS4yIDAgMTAwIDIuNCAxLjIgMS4yIDAgMDAwLTIuNHpcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JDJtID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMS4yNSAwbDE4LjA3NyAxNy43NDguNTAxLjUwMi4wMDktLjAwMSAxLjU3NyAxLjU0OHYuMDM5bDIuNDE0IDIuNDE0LTEuNDE0IDEuNDE0TDIwIDIxLjI1SDIuNDE0di0zSDE3bC0yLTJIMy40MTRjLS41MSAwLS45MzUtLjM4OC0uOTkzLS44ODRsLS4wMDctLjExNnYtNmMwLS41MS4zODgtLjkzNS44ODQtLjk5M2wuMTE2LS4wMDdIN2wtMi0ySDIuNDE0VjMuNjY0TDAgMS4yNSAxLjI1IDB6bTExLjI1NyA4LjI0OWw3LjkwNy4wMDFjLjUxIDAgLjkzNS4zODguOTkzLjg4NGwuMDA3LjExNnY2YzAgLjQ3NS0uMzM2Ljg3Ni0uNzgyLjk3NkwxMi41MDcgOC4yNXptLTUuMDkzLTVsMTQgLjAwMXYzTDEwLjQ3IDYuMjVsLTMuMDU2LTN6XCIsXG4gICAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JDJuID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCAxOSAxOFwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNMCAxOGgxOXYtM0gwdjN6TTE4IDVIMWMtLjU1IDAtMSAuNDUtMSAxdjZjMCAuNTUuNDUgMSAxIDFoMTdjLjU1IDAgMS0uNDUgMS0xVjZjMC0uNTUtLjQ1LTEtMS0xek0wIDB2M2gxOVYwSDB6XCIsXG4gICAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgU3ZnQ29tcG9uZW50JDJvID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3ZnQ29tcG9uZW50LCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTdmdDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN2Z0NvbXBvbmVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3ZnQ29tcG9uZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdmdDb21wb25lbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCA2OSAzOFwiLFxuICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgaGVpZ2h0OiBcIjFlbVwiXG4gICAgICB9LCB0aGlzLnByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZDogXCJNNjMuNTQ2IDBhNS40MzEgNS40MzEgMCAwMC01LjQ1NCA1LjQ1M2MwIDEuMDM5LjM0NiAyLjA3OC44NjUgMi44NTdMNDguMzk1IDE5LjU2M2MtLjg2Ni0uNTItMS44MTgtLjg2Ni0yLjk0My0uODY2LTEuNzMyIDAtMy4zNzcuODY2LTQuMzI5IDIuMTY0bC0xMy4yNDYtNi4yMzJjLjA4Ny0uMzQ3LjA4Ny0uNjA2LjA4Ny0uOTUyYTUuNDMxIDUuNDMxIDAgMDAtNS40NTUtNS40NTQgNS40MzEgNS40MzEgMCAwMC01LjQ1NCA1LjQ1NGMwIDEuMjExLjM0NyAyLjI1IDEuMDQgMy4yMDJMNy45NjQgMjcuN2MtLjc4LS40MzItMS42NDUtLjYwNi0yLjUxLS42MDZBNS40MzEgNS40MzEgMCAwMDAgMzIuNTQ3IDUuNDMxIDUuNDMxIDAgMDA1LjQ1NCAzOGE1LjQzMSA1LjQzMSAwIDAwNS40NTQtNS40NTNjMC0xLjEyNi0uMzQ2LTIuMjUtLjk1Mi0zLjExNmwxMC4xMy0xMC44MmMuNjkyLjM0NiAxLjU1OC42MDUgMi40MjMuNjA1IDEuNzMyIDAgMy4yOS0uODY1IDQuMzMtMi4wNzdsMTMuMjQ1IDYuMTQ2Yy0uMDg3LjI2LS4wODcuNjA2LS4wODcuODY1YTUuNDMxIDUuNDMxIDAgMDA1LjQ1NSA1LjQ1NCA1LjQzMSA1LjQzMSAwIDAwNS40NTQtNS40NTRjMC0uOTUyLS4yNi0xLjkwNC0uNzgtMi42ODNsMTAuNjUtMTEuMzRjLjc3OS41MiAxLjczLjc4IDIuNzcuNzhBNS40MzEgNS40MzEgMCAwMDY5IDUuNDUzIDUuNDMxIDUuNDMxIDAgMDA2My41NDYgMHpNNS40NTQgMzUuMzE3Yy0xLjU1OCAwLTIuODU3LTEuMjk5LTIuODU3LTIuODU3IDAtMS41NTggMS4yOTktMi44NTYgMi44NTctMi44NTYgMS41NTkgMCAyLjg1NyAxLjI5OCAyLjg1NyAyLjg1NiAwIDEuNjQ1LTEuMjk4IDIuODU3LTIuODU3IDIuODU3ek0yMi41MSAxNi42MmMtMS41NTggMC0yLjg1Ny0xLjI5OS0yLjg1Ny0yLjg1NyAwLTEuNTU4IDEuMy0yLjg1NiAyLjg1Ny0yLjg1NiAxLjU1OSAwIDIuODU3IDEuMjk4IDIuODU3IDIuODU2IDAgMS41NTgtMS4yOTggMi44NTctMi44NTcgMi44NTd6bTIyLjk0MyAxMC40NzNjLTEuNTU5IDAtMi44NTctMS4yOTgtMi44NTctMi44NTYgMC0xLjU1OCAxLjI5OC0yLjg1NyAyLjg1Ny0yLjg1NyAxLjU1OCAwIDIuODU3IDEuMjk5IDIuODU3IDIuODU3IDAgMS41NTgtMS4yOTkgMi44NTYtMi44NTcgMi44NTZ6TTYzLjU0NiA4LjMxYy0xLjU1OSAwLTIuODU3LTEuMjk5LTIuODU3LTIuODU3czEuMjk4LTIuODU2IDIuODU3LTIuODU2YzEuNTU4IDAgMi44NTcgMS4yOTggMi44NTcgMi44NTZTNjUuMTA0IDguMzEgNjMuNTQ2IDguMzF6XCJcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3ZnQ29tcG9uZW50O1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIFN2Z0NvbXBvbmVudCQycCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN2Z0NvbXBvbmVudCwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3ZnQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdmdDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN2Z0NvbXBvbmVudCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3ZnQ29tcG9uZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdmlld0JveDogXCIwIDAgMTUgMTlcIixcbiAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgIGhlaWdodDogXCIxZW1cIlxuICAgICAgfSwgdGhpcy5wcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGQ6IFwiTTYuNzYuMjlhLjc1Ljc1IDAgMDEuMzYtLjAzbC4xMi4wMyA2IDJjLjI3LjA5LjQ2LjMzLjUuNmwuMDEuMTF2NC4zMmMwIDMuMDgtMS4zMiA2LTMuNjIgOC4wNGwtLjI1LjIxLTIuNCAyYy0uMjUuMjEtLjYuMjQtLjg2LjA3bC0uMS0uMDYtMi40LTJBMTAuNzUgMTAuNzUgMCAwMS4yNiA3LjY0bC0uMDEtLjMzVjNjMC0uMjkuMTYtLjU1LjQxLS42N2wuMS0uMDQgNi0yek03IDEuNzlMMS43NSAzLjU0djMuNzhBOS4yNSA5LjI1IDAgMDA0LjYxIDE0bC4yMy4yMi4yNC4yTDcgMTYuMDJsMS45Mi0xLjZhOS4yNSA5LjI1IDAgMDAzLjMtNi40N2wuMDItLjMyLjAxLS4zMVYzLjU0TDcgMS43OXpcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdmdDb21wb25lbnQ7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgSWNvbnMgPSB7XG4gIGFkZDogU3ZnQ29tcG9uZW50LFxuICBhbXBlcmFnZTogU3ZnQ29tcG9uZW50JDEsXG4gIGFwYXJ0bWVudDogU3ZnQ29tcG9uZW50JDIsXG4gICdhcGFydG1lbnQtc21hbGwnOiBTdmdDb21wb25lbnQkMyxcbiAgJ2Fycm93LWxlZnQnOiBTdmdDb21wb25lbnQkNCxcbiAgJ2Fycm93LXJpZ2h0JzogU3ZnQ29tcG9uZW50JDUsXG4gIGJhdHRlcnk6IFN2Z0NvbXBvbmVudCQ2LFxuICAnYmVsbC1zbWFsbCc6IFN2Z0NvbXBvbmVudCQ3LFxuICAnYmVzdC1kZWFsLXNtYWxsJzogU3ZnQ29tcG9uZW50JDgsXG4gIGJpbzogU3ZnQ29tcG9uZW50JDksXG4gICdiaW8tc21hbGwnOiBTdmdDb21wb25lbnQkYSxcbiAgYnVsbGV0OiBTdmdDb21wb25lbnQkYixcbiAgY2FsZW5kYXI6IFN2Z0NvbXBvbmVudCRjLFxuICBjYXI6IFN2Z0NvbXBvbmVudCRkLFxuICBjYXJkOiBTdmdDb21wb25lbnQkZSxcbiAgY2hhcmdlcG9pbnQ6IFN2Z0NvbXBvbmVudCRmLFxuICAnY2hhcmdlcG9pbnQtc21hbGwnOiBTdmdDb21wb25lbnQkZyxcbiAgJ2Nvbm5lY3Rvci1jaGFkZW1vJzogU3ZnQ29tcG9uZW50JGgsXG4gICdjb25uZWN0b3ItY29tYm8nOiBTdmdDb21wb25lbnQkaSxcbiAgJ2Nvbm5lY3Rvci10eXBlLTInOiBTdmdDb21wb25lbnQkaixcbiAgJ2Nvcm5lci1ob3VzZSc6IFN2Z0NvbXBvbmVudCRrLFxuICAnY29ybmVyLWhvdXNlLXNtYWxsJzogU3ZnQ29tcG9uZW50JGwsXG4gIGNoZWNrOiBTdmdDb21wb25lbnQkbixcbiAgJ2NoYXQtc21hbGwnOiBTdmdDb21wb25lbnQkbSxcbiAgJ2NoZWNrYm94LWNoZWNrZWQnOiBTdmdDb21wb25lbnQkbyxcbiAgJ2NoZWNrYm94LXVuY2hlY2tlZCc6IFN2Z0NvbXBvbmVudCRwLFxuICBjaGV2cm9uOiBTdmdDb21wb25lbnQkcSxcbiAgJ2NoZXZyb24tbGlnaHQnOiBTdmdDb21wb25lbnQkcixcbiAgY2xvc2U6IFN2Z0NvbXBvbmVudCRzLFxuICBjbG9jazogU3ZnQ29tcG9uZW50JHQsXG4gIGNvbGxhcHNlOiBTdmdDb21wb25lbnQkdSxcbiAgJ2NvbHVtbi1jaGFydCc6IFN2Z0NvbXBvbmVudCR2LFxuICBkZW55OiBTdmdDb21wb25lbnQkdyxcbiAgJ2Rlbnktc21hbGwnOiBTdmdDb21wb25lbnQkeCxcbiAgZGV2dG86IFN2Z0NvbXBvbmVudCR5LFxuICBkb2N1bWVudDogU3ZnQ29tcG9uZW50JHosXG4gICdkb2N1bWVudC1zbWFsbCc6IFN2Z0NvbXBvbmVudCRBLFxuICAnZG9jdW1lbnQtaW5zcGVjdC1zbWFsbCc6IFN2Z0NvbXBvbmVudCRCLFxuICAnZG9udXQtY2hhcnQnOiBTdmdDb21wb25lbnQkQyxcbiAgJ2Rvd25sb2FkLXNtYWxsJzogU3ZnQ29tcG9uZW50JEQsXG4gIGR1cGxleDogU3ZnQ29tcG9uZW50JEUsXG4gICdkdXBsZXgtc21hbGwnOiBTdmdDb21wb25lbnQkRixcbiAgJ2Vjby1mcmllbmRseSc6IFN2Z0NvbXBvbmVudCRHLFxuICAnZWxlY3RyaWNpdHktZ2FzLXNtYWxsJzogU3ZnQ29tcG9uZW50JEksXG4gICdlbGVjdHJpY2l0eS1nYXMnOiBTdmdDb21wb25lbnQkSCxcbiAgZWxlY3RyaWNpdHk6IFN2Z0NvbXBvbmVudCRKLFxuICAnZWxlY3RyaWNpdHktc21hbGwnOiBTdmdDb21wb25lbnQkSyxcbiAgZW5lcmdpZTogU3ZnQ29tcG9uZW50JEwsXG4gIGVubGFyZ2U6IFN2Z0NvbXBvbmVudCRNLFxuICBldXJvOiBTdmdDb21wb25lbnQkTixcbiAgZXhjbGFtYXRpb246IFN2Z0NvbXBvbmVudCRPLFxuICAnZXh0ZXJuYWwtbGluayc6IFN2Z0NvbXBvbmVudCRQLFxuICBmYWNlYm9vazogU3ZnQ29tcG9uZW50JFEsXG4gIGZpbHRlcjogU3ZnQ29tcG9uZW50JFIsXG4gIGZsYWc6IFN2Z0NvbXBvbmVudCRTLFxuICBmbGV4OiBTdmdDb21wb25lbnQkVCxcbiAgZnJpZW5kOiBTdmdDb21wb25lbnQkVSxcbiAgZ2FzOiBTdmdDb21wb25lbnQkVixcbiAgJ2dhcy1zbWFsbCc6IFN2Z0NvbXBvbmVudCRXLFxuICBnaXRodWI6IFN2Z0NvbXBvbmVudCRfLFxuICBnbWFpbDogU3ZnQ29tcG9uZW50JCQsXG4gIGhhbWJ1cmdlcjogU3ZnQ29tcG9uZW50JDEwLFxuICAnaGVhcnQtc21hbGwnOiBTdmdDb21wb25lbnQkMTEsXG4gIGhvdXNlOiBTdmdDb21wb25lbnQkMTIsXG4gICdob3VzZS1zbWFsbCc6IFN2Z0NvbXBvbmVudCQxMyxcbiAgJ2hhcmQtcmVzZXQnOiBTdmdDb21wb25lbnQkMTQsXG4gIGluZmluaXRlOiBTdmdDb21wb25lbnQkMTUsXG4gIGluZm86IFN2Z0NvbXBvbmVudCQxNixcbiAgJ2luZm8tdHJhbnNwYXJlbnQnOiBTdmdDb21wb25lbnQkMTcsXG4gICdpbmZvLWNpcmNsZSc6IFN2Z0NvbXBvbmVudCQxNixcbiAgaW5zdGFncmFtOiBTdmdDb21wb25lbnQkMTgsXG4gICdrZXlmb2Itc21hbGwnOiBTdmdDb21wb25lbnQkMTksXG4gICdsYWJlbC1zbWFsbCc6IFN2Z0NvbXBvbmVudCQxbSxcbiAgJ2xpZ2h0YnVsYi1zbWFsbCc6IFN2Z0NvbXBvbmVudCQxYSxcbiAgbGFwdG9wOiBTdmdDb21wb25lbnQkMWIsXG4gIGxpbms6IFN2Z0NvbXBvbmVudCQxbixcbiAgbGlua2VkaW46IFN2Z0NvbXBvbmVudCQxbyxcbiAgbGlzdDogU3ZnQ29tcG9uZW50JDFwLFxuICBsb2NhdGlvbjogU3ZnQ29tcG9uZW50JDFxLFxuICAnbG9jay1jbG9zZWQnOiBTdmdDb21wb25lbnQkMXIsXG4gICdsb2NrLW9wZW4nOiBTdmdDb21wb25lbnQkMXMsXG4gIG1haWw6IFN2Z0NvbXBvbmVudCQxdixcbiAgJ21haWwtb3V0bGluZSc6IFN2Z0NvbXBvbmVudCQxdCxcbiAgJ21haWwtb3V0bGluZS1zbWFsbCc6IFN2Z0NvbXBvbmVudCQxdSxcbiAgbWluaW1pemU6IFN2Z0NvbXBvbmVudCQxeixcbiAgbWVkaXVtOiBTdmdDb21wb25lbnQkMXcsXG4gIG1lc3NlbmdlcjogU3ZnQ29tcG9uZW50JDF4LFxuICAnbWV0ZXItc21hbGwnOiBTdmdDb21wb25lbnQkMXksXG4gIG11dGU6IFN2Z0NvbXBvbmVudCQxQSxcbiAgbmF2aWdhdGlvbjogU3ZnQ29tcG9uZW50JDFCLFxuICAnb3V0YWdlLXNtYWxsJzogU3ZnQ29tcG9uZW50JDFDLFxuICBwYXVzZTogU3ZnQ29tcG9uZW50JDFELFxuICAncGVuY2lsLXNtYWxsJzogU3ZnQ29tcG9uZW50JDFFLFxuICAncGVuY2lsLW91dGxpbmUtc21hbGwnOiBTdmdDb21wb25lbnQkMUYsXG4gICdwZW9wbGUtMSc6IFN2Z0NvbXBvbmVudCQxYyxcbiAgJ3Blb3BsZS0yJzogU3ZnQ29tcG9uZW50JDFkLFxuICAncGVvcGxlLTMnOiBTdmdDb21wb25lbnQkMWUsXG4gICdwZW9wbGUtNCc6IFN2Z0NvbXBvbmVudCQxZixcbiAgJ3Blb3BsZS01JzogU3ZnQ29tcG9uZW50JDFnLFxuICAncGVvcGxlLTEtc21hbGwnOiBTdmdDb21wb25lbnQkMWgsXG4gICdwZW9wbGUtMi1zbWFsbCc6IFN2Z0NvbXBvbmVudCQxaSxcbiAgJ3Blb3BsZS0zLXNtYWxsJzogU3ZnQ29tcG9uZW50JDFqLFxuICAncGVvcGxlLTQtc21hbGwnOiBTdmdDb21wb25lbnQkMWssXG4gICdwZW9wbGUtNS1zbWFsbCc6IFN2Z0NvbXBvbmVudCQxbCxcbiAgJ3Bvd2VyLXBsdWcnOiBTdmdDb21wb25lbnQkMUcsXG4gIHBob25lOiBTdmdDb21wb25lbnQkMUgsXG4gIHBsYXk6IFN2Z0NvbXBvbmVudCQxSSxcbiAgcGx1czogU3ZnQ29tcG9uZW50JDFKLFxuICBwcm9maWxlOiBTdmdDb21wb25lbnQkMUssXG4gICdxdWVzdGlvbi1mYWNlJzogU3ZnQ29tcG9uZW50JDFMLFxuICAncmFkaW8tY2hlY2tlZCc6IFN2Z0NvbXBvbmVudCQxTSxcbiAgJ3JhZGlvLXVuY2hlY2tlZCc6IFN2Z0NvbXBvbmVudCQxTixcbiAgcmVwZWF0OiBTdmdDb21wb25lbnQkMU8sXG4gIHNwYXJrbGU6IFN2Z0NvbXBvbmVudCQxUCxcbiAgc2VhcmNoOiBTdmdDb21wb25lbnQkMVEsXG4gIHNlbmQ6IFN2Z0NvbXBvbmVudCQxUixcbiAgJ3NvZnQtcmVzZXQnOiBTdmdDb21wb25lbnQkMVMsXG4gIHNvbGFyOiBTdmdDb21wb25lbnQkMVQsXG4gICdzb2xhci1zbWFsbCc6IFN2Z0NvbXBvbmVudCQxVSxcbiAgJ3NvbGFyLXBhbmVsJzogU3ZnQ29tcG9uZW50JDFWLFxuICAnc21hcnQtcGhvbmUnOiBTdmdDb21wb25lbnQkMVcsXG4gICdzbWFydC1tZXRlci1zbWFsbCc6IFN2Z0NvbXBvbmVudCQxWCxcbiAgc3RhcjogU3ZnQ29tcG9uZW50JDFZLFxuICAnc3Rhci1vdXRsaW5lJzogU3ZnQ29tcG9uZW50JDFaLFxuICBzdG9wOiBTdmdDb21wb25lbnQkMV8sXG4gICdzdHJlYW0tY2hhcnQnOiBTdmdDb21wb25lbnQkMSQsXG4gIHRodW1ic3VwOiBTdmdDb21wb25lbnQkMjAsXG4gIHRvcG9ncmFwaHk6IFN2Z0NvbXBvbmVudCQyMSxcbiAgdG93bmhvdXNlOiBTdmdDb21wb25lbnQkMjIsXG4gICd0b3duaG91c2Utc21hbGwnOiBTdmdDb21wb25lbnQkMjMsXG4gIHR3aXR0ZXI6IFN2Z0NvbXBvbmVudCQyNCxcbiAgJ3ZkYi1sb2dvJzogU3ZnQ29tcG9uZW50JDI1LFxuICB2aXNpYmlsaXR5OiBTdmdDb21wb25lbnQkMjYsXG4gICd2aXNpYmlsaXR5LW9mZic6IFN2Z0NvbXBvbmVudCQyNyxcbiAgJ3ZvbC0xJzogU3ZnQ29tcG9uZW50JDI4LFxuICAndm9sLTInOiBTdmdDb21wb25lbnQkMjksXG4gICd2b2wtMyc6IFN2Z0NvbXBvbmVudCQyYSxcbiAgd2FsbGV0OiBTdmdDb21wb25lbnQkWSxcbiAgJ3dhbGxldC1zbWFsbCc6IFN2Z0NvbXBvbmVudCRaLFxuICAnd2FsbGV0LWVsZWN0cmljaXR5JzogU3ZnQ29tcG9uZW50JDJiLFxuICAnd2F2ZS1jaGFydCc6IFN2Z0NvbXBvbmVudCQyYyxcbiAgd2hhdHNhcHA6IFN2Z0NvbXBvbmVudCQyZCxcbiAgd2luZDogU3ZnQ29tcG9uZW50JDJlLFxuICAnd2luZC1zbWFsbCc6IFN2Z0NvbXBvbmVudCQyZixcbiAgd2luZGRpcmVjdGlvbjogU3ZnQ29tcG9uZW50JDJnLFxuICB3cmVuY2g6IFN2Z0NvbXBvbmVudCQyaCxcbiAgeW91dHViZTogU3ZnQ29tcG9uZW50JDJpLFxuICAnbW92aW5nLWhvdXNlJzogU3ZnQ29tcG9uZW50JDJqLFxuICAncG93ZXItYnV0dG9uJzogU3ZnQ29tcG9uZW50JDJrLFxuICAnaGFwcHktZmFjZSc6IFN2Z0NvbXBvbmVudCQybCxcbiAgJ2xheW91dC1sb2NrZWQnOiBTdmdDb21wb25lbnQkMm0sXG4gICdsYXlvdXQtdW5sb2NrZWQnOiBTdmdDb21wb25lbnQkMm4sXG4gICdsaW5lLWNoYXJ0JzogU3ZnQ29tcG9uZW50JDJvLFxuICBndWFyYW50ZWU6IFN2Z0NvbXBvbmVudCQycCxcbiAgZ2lmdDogU3ZnQ29tcG9uZW50JFhcbn07XG5cbnZhciBzdHlsZXMkNyA9IHtcImQtbm9uZVwiOlwiSWNvbi1tb2R1bGVfX2Qtbm9uZVwiLFwiZC1pbmxpbmVcIjpcIkljb24tbW9kdWxlX19kLWlubGluZVwiLFwiZC1pbmxpbmUtYmxvY2tcIjpcIkljb24tbW9kdWxlX19kLWlubGluZS1ibG9ja1wiLFwiZC1ibG9ja1wiOlwiSWNvbi1tb2R1bGVfX2QtYmxvY2tcIixcImQtdGFibGVcIjpcIkljb24tbW9kdWxlX19kLXRhYmxlXCIsXCJkLXRhYmxlLXJvd1wiOlwiSWNvbi1tb2R1bGVfX2QtdGFibGUtcm93XCIsXCJkLXRhYmxlLWNlbGxcIjpcIkljb24tbW9kdWxlX19kLXRhYmxlLWNlbGxcIixcImQtZmxleFwiOlwiSWNvbi1tb2R1bGVfX2QtZmxleFwiLFwiZC1pbmxpbmUtZmxleFwiOlwiSWNvbi1tb2R1bGVfX2QtaW5saW5lLWZsZXhcIixcImQtc20tbm9uZVwiOlwiSWNvbi1tb2R1bGVfX2Qtc20tbm9uZVwiLFwiZC1zbS1pbmxpbmVcIjpcIkljb24tbW9kdWxlX19kLXNtLWlubGluZVwiLFwiZC1zbS1pbmxpbmUtYmxvY2tcIjpcIkljb24tbW9kdWxlX19kLXNtLWlubGluZS1ibG9ja1wiLFwiZC1zbS1ibG9ja1wiOlwiSWNvbi1tb2R1bGVfX2Qtc20tYmxvY2tcIixcImQtc20tdGFibGVcIjpcIkljb24tbW9kdWxlX19kLXNtLXRhYmxlXCIsXCJkLXNtLXRhYmxlLXJvd1wiOlwiSWNvbi1tb2R1bGVfX2Qtc20tdGFibGUtcm93XCIsXCJkLXNtLXRhYmxlLWNlbGxcIjpcIkljb24tbW9kdWxlX19kLXNtLXRhYmxlLWNlbGxcIixcImQtc20tZmxleFwiOlwiSWNvbi1tb2R1bGVfX2Qtc20tZmxleFwiLFwiZC1zbS1pbmxpbmUtZmxleFwiOlwiSWNvbi1tb2R1bGVfX2Qtc20taW5saW5lLWZsZXhcIixcImQtbWQtbm9uZVwiOlwiSWNvbi1tb2R1bGVfX2QtbWQtbm9uZVwiLFwiZC1tZC1pbmxpbmVcIjpcIkljb24tbW9kdWxlX19kLW1kLWlubGluZVwiLFwiZC1tZC1pbmxpbmUtYmxvY2tcIjpcIkljb24tbW9kdWxlX19kLW1kLWlubGluZS1ibG9ja1wiLFwiZC1tZC1ibG9ja1wiOlwiSWNvbi1tb2R1bGVfX2QtbWQtYmxvY2tcIixcImQtbWQtdGFibGVcIjpcIkljb24tbW9kdWxlX19kLW1kLXRhYmxlXCIsXCJkLW1kLXRhYmxlLXJvd1wiOlwiSWNvbi1tb2R1bGVfX2QtbWQtdGFibGUtcm93XCIsXCJkLW1kLXRhYmxlLWNlbGxcIjpcIkljb24tbW9kdWxlX19kLW1kLXRhYmxlLWNlbGxcIixcImQtbWQtZmxleFwiOlwiSWNvbi1tb2R1bGVfX2QtbWQtZmxleFwiLFwiZC1tZC1pbmxpbmUtZmxleFwiOlwiSWNvbi1tb2R1bGVfX2QtbWQtaW5saW5lLWZsZXhcIixcImQtbGctbm9uZVwiOlwiSWNvbi1tb2R1bGVfX2QtbGctbm9uZVwiLFwiZC1sZy1pbmxpbmVcIjpcIkljb24tbW9kdWxlX19kLWxnLWlubGluZVwiLFwiZC1sZy1pbmxpbmUtYmxvY2tcIjpcIkljb24tbW9kdWxlX19kLWxnLWlubGluZS1ibG9ja1wiLFwiZC1sZy1ibG9ja1wiOlwiSWNvbi1tb2R1bGVfX2QtbGctYmxvY2tcIixcImQtbGctdGFibGVcIjpcIkljb24tbW9kdWxlX19kLWxnLXRhYmxlXCIsXCJkLWxnLXRhYmxlLXJvd1wiOlwiSWNvbi1tb2R1bGVfX2QtbGctdGFibGUtcm93XCIsXCJkLWxnLXRhYmxlLWNlbGxcIjpcIkljb24tbW9kdWxlX19kLWxnLXRhYmxlLWNlbGxcIixcImQtbGctZmxleFwiOlwiSWNvbi1tb2R1bGVfX2QtbGctZmxleFwiLFwiZC1sZy1pbmxpbmUtZmxleFwiOlwiSWNvbi1tb2R1bGVfX2QtbGctaW5saW5lLWZsZXhcIixcImQteGwtbm9uZVwiOlwiSWNvbi1tb2R1bGVfX2QteGwtbm9uZVwiLFwiZC14bC1pbmxpbmVcIjpcIkljb24tbW9kdWxlX19kLXhsLWlubGluZVwiLFwiZC14bC1pbmxpbmUtYmxvY2tcIjpcIkljb24tbW9kdWxlX19kLXhsLWlubGluZS1ibG9ja1wiLFwiZC14bC1ibG9ja1wiOlwiSWNvbi1tb2R1bGVfX2QteGwtYmxvY2tcIixcImQteGwtdGFibGVcIjpcIkljb24tbW9kdWxlX19kLXhsLXRhYmxlXCIsXCJkLXhsLXRhYmxlLXJvd1wiOlwiSWNvbi1tb2R1bGVfX2QteGwtdGFibGUtcm93XCIsXCJkLXhsLXRhYmxlLWNlbGxcIjpcIkljb24tbW9kdWxlX19kLXhsLXRhYmxlLWNlbGxcIixcImQteGwtZmxleFwiOlwiSWNvbi1tb2R1bGVfX2QteGwtZmxleFwiLFwiZC14bC1pbmxpbmUtZmxleFwiOlwiSWNvbi1tb2R1bGVfX2QteGwtaW5saW5lLWZsZXhcIixcImQtcHJpbnQtbm9uZVwiOlwiSWNvbi1tb2R1bGVfX2QtcHJpbnQtbm9uZVwiLFwiZC1wcmludC1pbmxpbmVcIjpcIkljb24tbW9kdWxlX19kLXByaW50LWlubGluZVwiLFwiZC1wcmludC1pbmxpbmUtYmxvY2tcIjpcIkljb24tbW9kdWxlX19kLXByaW50LWlubGluZS1ibG9ja1wiLFwiZC1wcmludC1ibG9ja1wiOlwiSWNvbi1tb2R1bGVfX2QtcHJpbnQtYmxvY2tcIixcImQtcHJpbnQtdGFibGVcIjpcIkljb24tbW9kdWxlX19kLXByaW50LXRhYmxlXCIsXCJkLXByaW50LXRhYmxlLXJvd1wiOlwiSWNvbi1tb2R1bGVfX2QtcHJpbnQtdGFibGUtcm93XCIsXCJkLXByaW50LXRhYmxlLWNlbGxcIjpcIkljb24tbW9kdWxlX19kLXByaW50LXRhYmxlLWNlbGxcIixcImQtcHJpbnQtZmxleFwiOlwiSWNvbi1tb2R1bGVfX2QtcHJpbnQtZmxleFwiLFwiZC1wcmludC1pbmxpbmUtZmxleFwiOlwiSWNvbi1tb2R1bGVfX2QtcHJpbnQtaW5saW5lLWZsZXhcIixcInRleHQtZGVmYXVsdFwiOlwiSWNvbi1tb2R1bGVfX3RleHQtZGVmYXVsdFwiLFwidGV4dC1kZWZhdWx0LXNpemVcIjpcIkljb24tbW9kdWxlX190ZXh0LWRlZmF1bHQtc2l6ZVwiLFwidS1mb250LWxpbmtcIjpcIkljb24tbW9kdWxlX191LWZvbnQtbGlua1wiLFwidS1mb250LWJvZHlcIjpcIkljb24tbW9kdWxlX191LWZvbnQtYm9keVwiLFwidS1mb250LWJvZHktYWx0XCI6XCJJY29uLW1vZHVsZV9fdS1mb250LWJvZHktYWx0XCIsXCJ1LWZvbnQtaDFcIjpcIkljb24tbW9kdWxlX191LWZvbnQtaDFcIixcInUtZm9udC1oMlwiOlwiSWNvbi1tb2R1bGVfX3UtZm9udC1oMlwiLFwidS1mb250LWgzXCI6XCJJY29uLW1vZHVsZV9fdS1mb250LWgzXCIsXCJ1LWZvbnQtaDRcIjpcIkljb24tbW9kdWxlX191LWZvbnQtaDRcIixcInUtZm9udC1oNVwiOlwiSWNvbi1tb2R1bGVfX3UtZm9udC1oNVwiLFwidS1mb250LWg2XCI6XCJJY29uLW1vZHVsZV9fdS1mb250LWg2XCIsXCJ1LWZvbnQtYm9keS14eHNtYWxsXCI6XCJJY29uLW1vZHVsZV9fdS1mb250LWJvZHkteHhzbWFsbFwiLFwidS1mb250LWJ1dHRvbi1zbWFsbFwiOlwiSWNvbi1tb2R1bGVfX3UtZm9udC1idXR0b24tc21hbGxcIixcInUtZm9udC1ib2R5LXhzbWFsbFwiOlwiSWNvbi1tb2R1bGVfX3UtZm9udC1ib2R5LXhzbWFsbFwiLFwidS1mb250LWJ1dHRvblwiOlwiSWNvbi1tb2R1bGVfX3UtZm9udC1idXR0b25cIixcInUtZm9udC1ib2R5LXNtYWxsXCI6XCJJY29uLW1vZHVsZV9fdS1mb250LWJvZHktc21hbGxcIixcInUtZm9udC1sZWFkXCI6XCJJY29uLW1vZHVsZV9fdS1mb250LWxlYWRcIixcInUtZm9udC1zdXBlci1odWdlXCI6XCJJY29uLW1vZHVsZV9fdS1mb250LXN1cGVyLWh1Z2VcIixcInUtZm9udC13ZWlnaHQtMTAwXCI6XCJJY29uLW1vZHVsZV9fdS1mb250LXdlaWdodC0xMDBcIixcInUtZm9udC13ZWlnaHQtMzAwXCI6XCJJY29uLW1vZHVsZV9fdS1mb250LXdlaWdodC0zMDBcIixcInUtZm9udC13ZWlnaHQtNDAwXCI6XCJJY29uLW1vZHVsZV9fdS1mb250LXdlaWdodC00MDBcIixcInUtZm9udC13ZWlnaHQtNjAwXCI6XCJJY29uLW1vZHVsZV9fdS1mb250LXdlaWdodC02MDBcIixcInUtZm9udC13ZWlnaHQtNzAwXCI6XCJJY29uLW1vZHVsZV9fdS1mb250LXdlaWdodC03MDBcIixcInUtZm9udC13ZWlnaHQtODAwXCI6XCJJY29uLW1vZHVsZV9fdS1mb250LXdlaWdodC04MDBcIixcInUtZm9udC13ZWlnaHQtOTAwXCI6XCJJY29uLW1vZHVsZV9fdS1mb250LXdlaWdodC05MDBcIixcInUtZm9udC1jb2xvci1hbGFiYXN0ZXJcIjpcIkljb24tbW9kdWxlX191LWZvbnQtY29sb3ItYWxhYmFzdGVyXCIsXCJ1LWZvbnQtY29sb3ItYXByaWNvdFwiOlwiSWNvbi1tb2R1bGVfX3UtZm9udC1jb2xvci1hcHJpY290XCIsXCJ1LWZvbnQtY29sb3ItYmVybXVkYS1ncmF5XCI6XCJJY29uLW1vZHVsZV9fdS1mb250LWNvbG9yLWJlcm11ZGEtZ3JheVwiLFwidS1mb250LWNvbG9yLWJsYWNrXCI6XCJJY29uLW1vZHVsZV9fdS1mb250LWNvbG9yLWJsYWNrXCIsXCJ1LWZvbnQtY29sb3ItYmx1ZS1uZXBhbFwiOlwiSWNvbi1tb2R1bGVfX3UtZm9udC1jb2xvci1ibHVlLW5lcGFsXCIsXCJ1LWZvbnQtY29sb3ItY2hhcmNvYWwtZ3JheVwiOlwiSWNvbi1tb2R1bGVfX3UtZm9udC1jb2xvci1jaGFyY29hbC1ncmF5XCIsXCJ1LWZvbnQtY29sb3ItZGlzY291bnQtZ3JlZW5cIjpcIkljb24tbW9kdWxlX191LWZvbnQtY29sb3ItZGlzY291bnQtZ3JlZW5cIixcInUtZm9udC1jb2xvci1mYWludC1ncmF5XCI6XCJJY29uLW1vZHVsZV9fdS1mb250LWNvbG9yLWZhaW50LWdyYXlcIixcInUtZm9udC1jb2xvci1nYWxsZXJ5XCI6XCJJY29uLW1vZHVsZV9fdS1mb250LWNvbG9yLWdhbGxlcnlcIixcInUtZm9udC1jb2xvci1ncmF5LWdleXNlclwiOlwiSWNvbi1tb2R1bGVfX3UtZm9udC1jb2xvci1ncmF5LWdleXNlclwiLFwidS1mb250LWNvbG9yLWdyZWVuLWJheS1sZWFmXCI6XCJJY29uLW1vZHVsZV9fdS1mb250LWNvbG9yLWdyZWVuLWJheS1sZWFmXCIsXCJ1LWZvbnQtY29sb3ItZ3JlZW5cIjpcIkljb24tbW9kdWxlX191LWZvbnQtY29sb3ItZ3JlZW5cIixcInUtZm9udC1jb2xvci1ncmV5LWJyaWdodFwiOlwiSWNvbi1tb2R1bGVfX3UtZm9udC1jb2xvci1ncmV5LWJyaWdodFwiLFwidS1mb250LWNvbG9yLWxpZ2h0LWdyZXlcIjpcIkljb24tbW9kdWxlX191LWZvbnQtY29sb3ItbGlnaHQtZ3JleVwiLFwidS1mb250LWNvbG9yLXBpbmstc2VhXCI6XCJJY29uLW1vZHVsZV9fdS1mb250LWNvbG9yLXBpbmstc2VhXCIsXCJ1LWZvbnQtY29sb3ItcGluay1zdW5nbG9cIjpcIkljb24tbW9kdWxlX191LWZvbnQtY29sb3ItcGluay1zdW5nbG9cIixcInUtZm9udC1jb2xvci1waW5rLXN3ZWV0XCI6XCJJY29uLW1vZHVsZV9fdS1mb250LWNvbG9yLXBpbmstc3dlZXRcIixcInUtZm9udC1jb2xvci1yZWRcIjpcIkljb24tbW9kdWxlX191LWZvbnQtY29sb3ItcmVkXCIsXCJ1LWZvbnQtY29sb3Itc2FuZHktYnJvd25cIjpcIkljb24tbW9kdWxlX191LWZvbnQtY29sb3Itc2FuZHktYnJvd25cIixcInUtZm9udC1jb2xvci1zZWFzaGVsbFwiOlwiSWNvbi1tb2R1bGVfX3UtZm9udC1jb2xvci1zZWFzaGVsbFwiLFwidS1mb250LWNvbG9yLXNodXR0bGUtZ3JheVwiOlwiSWNvbi1tb2R1bGVfX3UtZm9udC1jb2xvci1zaHV0dGxlLWdyYXlcIixcInUtZm9udC1jb2xvci1zaWx2ZXJcIjpcIkljb24tbW9kdWxlX191LWZvbnQtY29sb3Itc2lsdmVyXCIsXCJ1LWZvbnQtY29sb3ItdmVyeS1saWdodC1ncmV5XCI6XCJJY29uLW1vZHVsZV9fdS1mb250LWNvbG9yLXZlcnktbGlnaHQtZ3JleVwiLFwidS1mb250LWNvbG9yLXdhcm0tZ3JheVwiOlwiSWNvbi1tb2R1bGVfX3UtZm9udC1jb2xvci13YXJtLWdyYXlcIixcInUtZm9udC1jb2xvci13aGl0ZS1zbW9rZVwiOlwiSWNvbi1tb2R1bGVfX3UtZm9udC1jb2xvci13aGl0ZS1zbW9rZVwiLFwidS1mb250LWNvbG9yLXdoaXRlXCI6XCJJY29uLW1vZHVsZV9fdS1mb250LWNvbG9yLXdoaXRlXCIsXCJ1LWZvbnQtY29sb3Itd2lsZC1zYW5kLWdyYXlcIjpcIkljb24tbW9kdWxlX191LWZvbnQtY29sb3Itd2lsZC1zYW5kLWdyYXlcIixcInUtZm9udC1jb2xvci14YW5kdS1ncmVlblwiOlwiSWNvbi1tb2R1bGVfX3UtZm9udC1jb2xvci14YW5kdS1ncmVlblwiLFwidS1mb250LWNvbG9yLXllbGxvdy1hY2NlbnRcIjpcIkljb24tbW9kdWxlX191LWZvbnQtY29sb3IteWVsbG93LWFjY2VudFwiLFwidS1mb250LWNvbG9yLXllbGxvdy1jYXNhYmxhbmNhXCI6XCJJY29uLW1vZHVsZV9fdS1mb250LWNvbG9yLXllbGxvdy1jYXNhYmxhbmNhXCIsXCJ1LWZvbnQtY29sb3IteWVsbG93LWNoYW1wYWduZVwiOlwiSWNvbi1tb2R1bGVfX3UtZm9udC1jb2xvci15ZWxsb3ctY2hhbXBhZ25lXCIsXCJ1LWZvbnQtY29sb3IteWVsbG93LWNoZXJva2VlXCI6XCJJY29uLW1vZHVsZV9fdS1mb250LWNvbG9yLXllbGxvdy1jaGVyb2tlZVwiLFwidS1mb250LWNvbG9yLXllbGxvdy1nb2xkZW5cIjpcIkljb24tbW9kdWxlX191LWZvbnQtY29sb3IteWVsbG93LWdvbGRlblwiLFwidS1mb250LWNvbG9yLXllbGxvdy1tb2NjYXNpblwiOlwiSWNvbi1tb2R1bGVfX3UtZm9udC1jb2xvci15ZWxsb3ctbW9jY2FzaW5cIixcInUtZm9udC1jb2xvci10cmFuc3BhcmVudFwiOlwiSWNvbi1tb2R1bGVfX3UtZm9udC1jb2xvci10cmFuc3BhcmVudFwiLFwiaWNvblwiOlwiSWNvbi1tb2R1bGVfX2ljb25cIn07XG5cbi8vIENvbnN0YW50IHRvIG1hcCBvbGQga2V5cyB0byB0aGUgbmV3IG9uZXNcbnZhciBpY29uTWFwID0ge1xuICAnMi1vbmRlci0xLWthcCc6ICdkdXBsZXgnLFxuICBhcHBhcnRlbWVudDogJ2FwYXJ0bWVudCcsXG4gIGFwcDogJ29uZGVyd2VnJyxcbiAgJ2FwcC0tdGhpY2snOiAnb25kZXJ3ZWcnLFxuICAnYXBwLS1sZWZ0JzogJ29uZGVyd2VnJyxcbiAgJ2FwYXJ0bWVudC0tdGhpY2snOiAnYXBhcnRtZW50LXNtYWxsJyxcbiAgJ2JlbGwtLXRoaWNrJzogJ2JlbGwtc21hbGwnLFxuICAnYmVzdC1kZWFsJzogJ2Jlc3QtZGVhbC1zbWFsbCcsXG4gICdjYXJldC1yaWdodCc6ICdjaGV2cm9uJyxcbiAgY2hlY2ttYXJrOiAnY2hlY2snLFxuICBjaGVja2JveDogJ2NoZWNrYm94LXVuY2hlY2tlZCcsXG4gICdjaGFyZ2Vwb2ludC1jb25uZWN0b3ItY2hhZGVtbyc6ICdjb25uZWN0b3ItY2hhZGVtbycsXG4gICdjaGFyZ2Vwb2ludC1jb25uZWN0b3ItY29tYm8nOiAnY29ubmVjdG9yLWNvbWJvJyxcbiAgJ2NoYXJnZXBvaW50LWNvbm5lY3Rvci10eXBlLTInOiAnY29ubmVjdG9yLXR5cGUtMicsXG4gIGNoYXQ6ICdjaGF0LXNtYWxsJyxcbiAgJ2NoZWNrYm94LS1jaGVja2VkJzogJ2NoZWNrYm94LWNoZWNrZWQnLFxuICAnZmFxLWNvbnRyYWN0JzogJ2RvY3VtZW50LXNtYWxsJyxcbiAgJ2ZhcS1sb2dvJzogJ3ZkYi1sb2dvJyxcbiAgJ2ZhcS1wb3B1bGFpcic6ICdzdGFyLW91dGxpbmUnLFxuICAnZmFxLXpvbm5lcGFuZWxlbic6ICdzb2xhci1wYW5lbCcsXG4gICdmYXEtYmVzcGFyaW5nJzogJ2xpZ2h0YnVsYi1zbWFsbCcsXG4gICdmYXEtaW5jaWRlbnRlbic6ICdiZWxsLXNtYWxsJyxcbiAgJ2ZhcS1tZXRlcnN0YW5kZW4nOiAnbWV0ZXItc21hbGwnLFxuICAnZmFxLW1ldGVyd2lzc2VsJzogJ3NtYXJ0LW1ldGVyLXNtYWxsJyxcbiAgJ2ZhcS10YXJpZXZlbic6ICdsYWJlbC1zbWFsbCcsXG4gICdmYXEtb3ZlcnN0YXBwZW4nOiAncmVwZWF0JyxcbiAgZ2VsZHpha2VuOiAnd2FsbGV0JyxcbiAgaG9la3dvbmluZzogJ2Nvcm5lci1ob3VzZScsXG4gICdlbGVjdHJpY2l0eS1nYXMnOiAnZWxlY3RyaWNpdHktZ2FzJyxcbiAgJ2VsZWN0cmljaXR5LWdhcy0tdGhpY2snOiAnZWxlY3RyaWNpdHktZ2FzLXNtYWxsJyxcbiAgJ2VsZWN0cmljaXR5LWdhcy10aGljayc6ICdlbGVjdHJpY2l0eS1nYXMtc21hbGwnLFxuICAnZWxlY3RyaWNpdHktdGhpY2snOiAnZWxlY3RyaWNpdHktc21hbGwnLFxuICAnZW50ZXItZnVsbHNjcmVlbic6ICdlbmxhcmdlJyxcbiAgJ2V4aXQtZnVsbHNjcmVlbic6ICdtaW5pbWl6ZScsXG4gICdob3VzZS0tdHVzc2Vud29uaW5nJzogJ3Rvd25ob3VzZScsXG4gICdob3VzZS0taG9la3dvbmluZyc6ICdjb3JuZXItaG91c2UnLFxuICAnaG91c2UtLTItb25kZXItMS1rYXAnOiAnZHVwbGV4JyxcbiAgJ2hvdXNlLS12cmlqc3RhYW5kJzogJ2hvdXNlJyxcbiAgJ2hvdXNlLS10dXNzZW53b25pbmctLXRoaWNrJzogJ3Rvd25ob3VzZS1zbWFsbCcsXG4gICdob3VzZS0taG9la3dvbmluZy0tdGhpY2snOiAnY29ybmVyLWhvdXNlLXNtYWxsJyxcbiAgJ2hvdXNlLS0yLW9uZGVyLTEta2FwLS10aGljayc6ICdkdXBsZXgtc21hbGwnLFxuICAnaG91c2UtLXZyaWpzdGFhbmQtLXRoaWNrJzogJ2hvdXNlLXNtYWxsJyxcbiAgaHlwZXJsaW5rOiAnbGluaycsXG4gIGtleWNoYWluOiAna2V5Zm9iLXNtYWxsJyxcbiAgJ2xhYWRwYXMtLWxlZnQnOiAnY2FyZCcsXG4gIGxhYWRwYXM6ICdjYXJkJyxcbiAgJ2xhYWRwYWFsLS1sZWZ0JzogJ2NoYXJnZXBvaW50JyxcbiAgbGFhZHBhYWw6ICdjaGFyZ2Vwb2ludCcsXG4gICdsYWJlbC0tdGhpY2snOiAnbGFiZWwtc21hbGwnLFxuICAnbGFhZHBhcy0tdGhpY2snOiAnY2FyZCcsXG4gICdsYWFkcGFhbC0tdGhpY2snOiAnY2hhcmdlcG9pbnQtc21hbGwnLFxuICAnbGFyZ2UtMSc6ICdwZW9wbGUtMScsXG4gICdsYXJnZS0yJzogJ3Blb3BsZS0yJyxcbiAgJ2xhcmdlLTMnOiAncGVvcGxlLTMnLFxuICAnbGFyZ2UtNCc6ICdwZW9wbGUtNCcsXG4gICdsYXJnZS01JzogJ3Blb3BsZS01JyxcbiAgJ2xhbXAtLXRoaWNrJzogJ2xpZ2h0YnVsYi1zbWFsbCcsXG4gIGxlYWY6ICdiaW8tc21hbGwnLFxuICAnbWV0ZXItLXRoaWNrJzogJ21ldGVyLXNtYWxsJyxcbiAgJ21ldGVyLXN3aXRjaC0tdGhpY2snOiAnc21hcnQtbWV0ZXItc21hbGwnLFxuICBub3RlczogJ2RvY3VtZW50JyxcbiAgb25kZXJ3ZWc6ICdzbWFydC1waG9uZScsXG4gIG91dGFnZTogJ291dGFnZS1zbWFsbCcsXG4gICdwYXBlci0tdGhpY2snOiAnZG9jdW1lbnQtc21hbGwnLFxuICAncGVvcGxlLS1vbmUnOiAncGVvcGxlLTEnLFxuICAncGVvcGxlLS10d28nOiAncGVvcGxlLTInLFxuICAncGVvcGxlLS10aHJlZSc6ICdwZW9wbGUtMycsXG4gICdwZW9wbGUtLWZvdXInOiAncGVvcGxlLTQnLFxuICAncGVvcGxlLS1maXZlJzogJ3Blb3BsZS01JyxcbiAgJ3Blb3BsZS0tb25lLS10aGljayc6ICdwZW9wbGUtMS1zbWFsbCcsXG4gICdwZW9wbGUtLXR3by0tdGhpY2snOiAncGVvcGxlLTItc21hbGwnLFxuICAncGVvcGxlLS10aHJlZS0tdGhpY2snOiAncGVvcGxlLTMtc21hbGwnLFxuICAncGVvcGxlLS1mb3VyLS10aGljayc6ICdwZW9wbGUtNC1zbWFsbCcsXG4gICdwZW9wbGUtLWZpdmUtLXRoaWNrJzogJ3Blb3BsZS01LXNtYWxsJyxcbiAgJ3Bob25lLXRoaW4nOiAncGhvbmUnLFxuICBwZW5jaWw6ICdwZW5jaWwtc21hbGwnLFxuICAncGVuY2lsLWhvbGxvdyc6ICdwZW5jaWwtb3V0bGluZS1zbWFsbCcsXG4gIHJhZGlvOiAncmFkaW8tdW5jaGVja2VkJyxcbiAgJ3JhZGlvLS1jaGVja2VkJzogJ3JhZGlvLWNoZWNrZWQnLFxuICByZXBhaXI6ICd3cmVuY2gnLFxuICBzY2hvb246ICdzcGFya2xlJyxcbiAgJ3NtYWxsLTEnOiAncGVvcGxlLTEtc21hbGwnLFxuICAnc21hbGwtMic6ICdwZW9wbGUtMi1zbWFsbCcsXG4gICdzbWFsbC0zJzogJ3Blb3BsZS0zLXNtYWxsJyxcbiAgJ3NtYWxsLTQnOiAncGVvcGxlLTQtc21hbGwnLFxuICAnc21hbGwtNSc6ICdwZW9wbGUtNS1zbWFsbCcsXG4gIHNsaW1sYWRlbjogJ3Bvd2VyLXBsdWcnLFxuICAnc2xpbS1sYWRlbic6ICdwb3dlci1wbHVnJyxcbiAgJ3NsaW0tbGFkZW4tLWxlZnQnOiAncG93ZXItcGx1ZycsXG4gICdzdGFyLW91dGxpbmUtLXRoaWNrJzogJ3N0YXItb3V0bGluZScsXG4gICdzd2l0Y2gtLXRoaWNrJzogJ3JlcGVhdCcsXG4gICdzb2xhcnBhbmVsLS10aGljayc6ICdzb2xhci1wYW5lbCcsXG4gIHN1bjogJ3NvbGFyLXNtYWxsJyxcbiAgJ3RodW1iLXVwJzogJ3RodW1ic3VwJyxcbiAgJ3RodW5kZXJzdHJpa2UtLXRoaWNrJzogJ2VsZWN0cmljaXR5LXNtYWxsJyxcbiAgdGh1bmRlcnN0cmlrZTogJ2VsZWN0cmljaXR5JyxcbiAgdHVzc2Vud29uaW5nOiAndG93bmhvdXNlJyxcbiAgdXNlcjogJ3Byb2ZpbGUnLFxuICAndXNlci0tdGhpY2snOiAncHJvZmlsZScsXG4gICd3YWxsZXQtLXRoaWNrJzogJ3dhbGxldCcsXG4gIHdpbmRtaWxsOiAnd2luZCcsXG4gICd3aW5kbWlsbC0tdGhpY2snOiAnd2luZC1zbWFsbCcsXG4gICd3aW5kLWluZGljYXRpb24nOiAnd2luZGRpcmVjdGlvbicsXG4gICd2aWRlby1jbG9zZSc6ICdtaW5pbWl6ZScsXG4gICd2b2x1bWUtbXV0ZWQnOiAnbXV0ZScsXG4gICd2b2x1bWUtbG93JzogJ3ZvbC0xJyxcbiAgJ3ZvbHVtZS1taWQnOiAndm9sLTInLFxuICAndm9sdW1lLWhpZ2gnOiAndm9sLTMnLFxuICB2cmlqc3RhYW5kOiAnaG91c2UnXG59O1xuXG52YXIgSWNvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEljb24sIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEljb24pO1xuXG4gIGZ1bmN0aW9uIEljb24oKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEljb24pO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEljb24sIFt7XG4gICAga2V5OiBcImdldFZhcmlhbnRDb2xvclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWYXJpYW50Q29sb3IoKSB7XG4gICAgICB2YXIgdmFyaWFudCA9IHRoaXMucHJvcHMudmFyaWFudDtcbiAgICAgIHZhciBjb2xvcjtcblxuICAgICAgc3dpdGNoICh2YXJpYW50KSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBjb2xvciA9ICdjaGFyY29hbC1ncmF5JztcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgY29sb3IgPSAnd2hpdGUnO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBjb2xvciA9ICdiZXJtdWRhLWdyYXknO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBjb2xvciA9ICd3YXJtLWdyYXknO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBjb2xvciA9ICdzaWx2ZXInO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29sb3IgPSAnY2hhcmNvYWwtZ3JheSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdHlsZXMkN1tcInUtZm9udC1jb2xvci1cIi5jb25jYXQoY29sb3IpXTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIGZvbnRTaXplID0gX3RoaXMkcHJvcHMuZm9udFNpemUsXG4gICAgICAgICAgbmFtZSA9IF90aGlzJHByb3BzLm5hbWUsXG4gICAgICAgICAgdmFyaWFudCA9IF90aGlzJHByb3BzLnZhcmlhbnQsXG4gICAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIFtcImNsYXNzTmFtZVwiLCBcImZvbnRTaXplXCIsIFwibmFtZVwiLCBcInZhcmlhbnRcIl0pO1xuXG4gICAgICB2YXIgc3R5bGUgPSB7XG4gICAgICAgIGZvbnRTaXplOiBmb250U2l6ZVxuICAgICAgfTtcbiAgICAgIHZhciBJY29uQ29tcG9uZW50ID0gSWNvbnNbaWNvbk1hcFtuYW1lXSA/IGljb25NYXBbbmFtZV0gOiBuYW1lXTtcblxuICAgICAgaWYgKCFJY29uQ29tcG9uZW50KSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICBjb25zb2xlLmVycm9yKFwiW1dpbmRtb2xlbl06IENhbid0IGZpbmQgaWNvbiBcXFwiXCIuY29uY2F0KG5hbWUsIFwiXFxcIlwiKSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAoaWNvbk1hcFtuYW1lXSAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgY29uc29sZS53YXJuKFwiW1dpbmRtb2xlbl06IFwiLmNvbmNhdChuYW1lLCBcIiB3aWxsIGJlIGRlcHJlY2F0ZWQsIHVzZSBcIikuY29uY2F0KGljb25NYXBbbmFtZV0sIFwiIGluc3RlYWQuXCIpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEljb25Db21wb25lbnQsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBbc3R5bGVzJDdbJ2ljb24nXSwgdGhpcy5nZXRWYXJpYW50Q29sb3IoKSwgY2xhc3NOYW1lXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpLFxuICAgICAgICBzdHlsZTogc3R5bGVcbiAgICAgIH0sIHByb3BzKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEljb247XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoSWNvbiwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBmb250U2l6ZTogJzE1MCUnLFxuICB2YXJpYW50OiAwLFxuICBjbGFzc05hbWU6ICcnLFxuICBwbmdvbmx5OiB1bmRlZmluZWQsXG4gIG5hbWU6ICcnXG59KTtcblxudmFyIHN0eWxlcyQ4ID0ge1wiZC1ub25lXCI6XCJGbG9hdGluZ0luZm9CbG9jay1tb2R1bGVfX2Qtbm9uZVwiLFwiZC1pbmxpbmVcIjpcIkZsb2F0aW5nSW5mb0Jsb2NrLW1vZHVsZV9fZC1pbmxpbmVcIixcImQtaW5saW5lLWJsb2NrXCI6XCJGbG9hdGluZ0luZm9CbG9jay1tb2R1bGVfX2QtaW5saW5lLWJsb2NrXCIsXCJkLWJsb2NrXCI6XCJGbG9hdGluZ0luZm9CbG9jay1tb2R1bGVfX2QtYmxvY2tcIixcImQtdGFibGVcIjpcIkZsb2F0aW5nSW5mb0Jsb2NrLW1vZHVsZV9fZC10YWJsZVwiLFwiZC10YWJsZS1yb3dcIjpcIkZsb2F0aW5nSW5mb0Jsb2NrLW1vZHVsZV9fZC10YWJsZS1yb3dcIixcImQtdGFibGUtY2VsbFwiOlwiRmxvYXRpbmdJbmZvQmxvY2stbW9kdWxlX19kLXRhYmxlLWNlbGxcIixcImQtZmxleFwiOlwiRmxvYXRpbmdJbmZvQmxvY2stbW9kdWxlX19kLWZsZXhcIixcImQtaW5saW5lLWZsZXhcIjpcIkZsb2F0aW5nSW5mb0Jsb2NrLW1vZHVsZV9fZC1pbmxpbmUtZmxleFwiLFwiZC1zbS1ub25lXCI6XCJGbG9hdGluZ0luZm9CbG9jay1tb2R1bGVfX2Qtc20tbm9uZVwiLFwiZC1zbS1pbmxpbmVcIjpcIkZsb2F0aW5nSW5mb0Jsb2NrLW1vZHVsZV9fZC1zbS1pbmxpbmVcIixcImQtc20taW5saW5lLWJsb2NrXCI6XCJGbG9hdGluZ0luZm9CbG9jay1tb2R1bGVfX2Qtc20taW5saW5lLWJsb2NrXCIsXCJkLXNtLWJsb2NrXCI6XCJGbG9hdGluZ0luZm9CbG9jay1tb2R1bGVfX2Qtc20tYmxvY2tcIixcImQtc20tdGFibGVcIjpcIkZsb2F0aW5nSW5mb0Jsb2NrLW1vZHVsZV9fZC1zbS10YWJsZVwiLFwiZC1zbS10YWJsZS1yb3dcIjpcIkZsb2F0aW5nSW5mb0Jsb2NrLW1vZHVsZV9fZC1zbS10YWJsZS1yb3dcIixcImQtc20tdGFibGUtY2VsbFwiOlwiRmxvYXRpbmdJbmZvQmxvY2stbW9kdWxlX19kLXNtLXRhYmxlLWNlbGxcIixcImQtc20tZmxleFwiOlwiRmxvYXRpbmdJbmZvQmxvY2stbW9kdWxlX19kLXNtLWZsZXhcIixcImQtc20taW5saW5lLWZsZXhcIjpcIkZsb2F0aW5nSW5mb0Jsb2NrLW1vZHVsZV9fZC1zbS1pbmxpbmUtZmxleFwiLFwiZC1tZC1ub25lXCI6XCJGbG9hdGluZ0luZm9CbG9jay1tb2R1bGVfX2QtbWQtbm9uZVwiLFwiZC1tZC1pbmxpbmVcIjpcIkZsb2F0aW5nSW5mb0Jsb2NrLW1vZHVsZV9fZC1tZC1pbmxpbmVcIixcImQtbWQtaW5saW5lLWJsb2NrXCI6XCJGbG9hdGluZ0luZm9CbG9jay1tb2R1bGVfX2QtbWQtaW5saW5lLWJsb2NrXCIsXCJkLW1kLWJsb2NrXCI6XCJGbG9hdGluZ0luZm9CbG9jay1tb2R1bGVfX2QtbWQtYmxvY2tcIixcImQtbWQtdGFibGVcIjpcIkZsb2F0aW5nSW5mb0Jsb2NrLW1vZHVsZV9fZC1tZC10YWJsZVwiLFwiZC1tZC10YWJsZS1yb3dcIjpcIkZsb2F0aW5nSW5mb0Jsb2NrLW1vZHVsZV9fZC1tZC10YWJsZS1yb3dcIixcImQtbWQtdGFibGUtY2VsbFwiOlwiRmxvYXRpbmdJbmZvQmxvY2stbW9kdWxlX19kLW1kLXRhYmxlLWNlbGxcIixcImQtbWQtZmxleFwiOlwiRmxvYXRpbmdJbmZvQmxvY2stbW9kdWxlX19kLW1kLWZsZXhcIixcImQtbWQtaW5saW5lLWZsZXhcIjpcIkZsb2F0aW5nSW5mb0Jsb2NrLW1vZHVsZV9fZC1tZC1pbmxpbmUtZmxleFwiLFwiZC1sZy1ub25lXCI6XCJGbG9hdGluZ0luZm9CbG9jay1tb2R1bGVfX2QtbGctbm9uZVwiLFwiZC1sZy1pbmxpbmVcIjpcIkZsb2F0aW5nSW5mb0Jsb2NrLW1vZHVsZV9fZC1sZy1pbmxpbmVcIixcImQtbGctaW5saW5lLWJsb2NrXCI6XCJGbG9hdGluZ0luZm9CbG9jay1tb2R1bGVfX2QtbGctaW5saW5lLWJsb2NrXCIsXCJkLWxnLWJsb2NrXCI6XCJGbG9hdGluZ0luZm9CbG9jay1tb2R1bGVfX2QtbGctYmxvY2tcIixcImQtbGctdGFibGVcIjpcIkZsb2F0aW5nSW5mb0Jsb2NrLW1vZHVsZV9fZC1sZy10YWJsZVwiLFwiZC1sZy10YWJsZS1yb3dcIjpcIkZsb2F0aW5nSW5mb0Jsb2NrLW1vZHVsZV9fZC1sZy10YWJsZS1yb3dcIixcImQtbGctdGFibGUtY2VsbFwiOlwiRmxvYXRpbmdJbmZvQmxvY2stbW9kdWxlX19kLWxnLXRhYmxlLWNlbGxcIixcImQtbGctZmxleFwiOlwiRmxvYXRpbmdJbmZvQmxvY2stbW9kdWxlX19kLWxnLWZsZXhcIixcImQtbGctaW5saW5lLWZsZXhcIjpcIkZsb2F0aW5nSW5mb0Jsb2NrLW1vZHVsZV9fZC1sZy1pbmxpbmUtZmxleFwiLFwiZC14bC1ub25lXCI6XCJGbG9hdGluZ0luZm9CbG9jay1tb2R1bGVfX2QteGwtbm9uZVwiLFwiZC14bC1pbmxpbmVcIjpcIkZsb2F0aW5nSW5mb0Jsb2NrLW1vZHVsZV9fZC14bC1pbmxpbmVcIixcImQteGwtaW5saW5lLWJsb2NrXCI6XCJGbG9hdGluZ0luZm9CbG9jay1tb2R1bGVfX2QteGwtaW5saW5lLWJsb2NrXCIsXCJkLXhsLWJsb2NrXCI6XCJGbG9hdGluZ0luZm9CbG9jay1tb2R1bGVfX2QteGwtYmxvY2tcIixcImQteGwtdGFibGVcIjpcIkZsb2F0aW5nSW5mb0Jsb2NrLW1vZHVsZV9fZC14bC10YWJsZVwiLFwiZC14bC10YWJsZS1yb3dcIjpcIkZsb2F0aW5nSW5mb0Jsb2NrLW1vZHVsZV9fZC14bC10YWJsZS1yb3dcIixcImQteGwtdGFibGUtY2VsbFwiOlwiRmxvYXRpbmdJbmZvQmxvY2stbW9kdWxlX19kLXhsLXRhYmxlLWNlbGxcIixcImQteGwtZmxleFwiOlwiRmxvYXRpbmdJbmZvQmxvY2stbW9kdWxlX19kLXhsLWZsZXhcIixcImQteGwtaW5saW5lLWZsZXhcIjpcIkZsb2F0aW5nSW5mb0Jsb2NrLW1vZHVsZV9fZC14bC1pbmxpbmUtZmxleFwiLFwiZC1wcmludC1ub25lXCI6XCJGbG9hdGluZ0luZm9CbG9jay1tb2R1bGVfX2QtcHJpbnQtbm9uZVwiLFwiZC1wcmludC1pbmxpbmVcIjpcIkZsb2F0aW5nSW5mb0Jsb2NrLW1vZHVsZV9fZC1wcmludC1pbmxpbmVcIixcImQtcHJpbnQtaW5saW5lLWJsb2NrXCI6XCJGbG9hdGluZ0luZm9CbG9jay1tb2R1bGVfX2QtcHJpbnQtaW5saW5lLWJsb2NrXCIsXCJkLXByaW50LWJsb2NrXCI6XCJGbG9hdGluZ0luZm9CbG9jay1tb2R1bGVfX2QtcHJpbnQtYmxvY2tcIixcImQtcHJpbnQtdGFibGVcIjpcIkZsb2F0aW5nSW5mb0Jsb2NrLW1vZHVsZV9fZC1wcmludC10YWJsZVwiLFwiZC1wcmludC10YWJsZS1yb3dcIjpcIkZsb2F0aW5nSW5mb0Jsb2NrLW1vZHVsZV9fZC1wcmludC10YWJsZS1yb3dcIixcImQtcHJpbnQtdGFibGUtY2VsbFwiOlwiRmxvYXRpbmdJbmZvQmxvY2stbW9kdWxlX19kLXByaW50LXRhYmxlLWNlbGxcIixcImQtcHJpbnQtZmxleFwiOlwiRmxvYXRpbmdJbmZvQmxvY2stbW9kdWxlX19kLXByaW50LWZsZXhcIixcImQtcHJpbnQtaW5saW5lLWZsZXhcIjpcIkZsb2F0aW5nSW5mb0Jsb2NrLW1vZHVsZV9fZC1wcmludC1pbmxpbmUtZmxleFwiLFwiZmxvYXRpbmctaW5mby1ibG9ja1wiOlwiRmxvYXRpbmdJbmZvQmxvY2stbW9kdWxlX19mbG9hdGluZy1pbmZvLWJsb2NrXCIsXCJmbG9hdGluZy1pbmZvLWJsb2NrLWljb24tY29udGFpbmVyXCI6XCJGbG9hdGluZ0luZm9CbG9jay1tb2R1bGVfX2Zsb2F0aW5nLWluZm8tYmxvY2staWNvbi1jb250YWluZXJcIixcImZsb2F0aW5nLWluZm8tYmxvY2staW5uZXItY29udGFpbmVyXCI6XCJGbG9hdGluZ0luZm9CbG9jay1tb2R1bGVfX2Zsb2F0aW5nLWluZm8tYmxvY2staW5uZXItY29udGFpbmVyXCJ9O1xuXG52YXIgRmxvYXRpbmdJbmZvQmxvY2sgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhGbG9hdGluZ0luZm9CbG9jaywgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRmxvYXRpbmdJbmZvQmxvY2spO1xuXG4gIGZ1bmN0aW9uIEZsb2F0aW5nSW5mb0Jsb2NrKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGbG9hdGluZ0luZm9CbG9jayk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRmxvYXRpbmdJbmZvQmxvY2ssIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgaWNvblByb3BzID0gX3RoaXMkcHJvcHMuaWNvblByb3BzLFxuICAgICAgICAgIGljb25CYWNrZ3JvdW5kQ29sb3IgPSBfdGhpcyRwcm9wcy5pY29uQmFja2dyb3VuZENvbG9yLFxuICAgICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBbXCJjaGlsZHJlblwiLCBcImljb25Qcm9wc1wiLCBcImljb25CYWNrZ3JvdW5kQ29sb3JcIl0pO1xuXG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IHN0eWxlcyQ4WydmbG9hdGluZy1pbmZvLWJsb2NrJ11cbiAgICAgIH0sIHByb3BzKSwgaWNvblByb3BzICYmIGljb25Qcm9wcy5uYW1lICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBzdHlsZXMkOFsnZmxvYXRpbmctaW5mby1ibG9jay1pY29uLWNvbnRhaW5lciddLFxuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogaWNvbkJhY2tncm91bmRDb2xvclxuICAgICAgICB9XG4gICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJY29uLCBfZXh0ZW5kcyh7XG4gICAgICAgIHZhcmlhbnQ6IDEsXG4gICAgICAgIGZvbnRTaXplOiBcIjQwcHhcIlxuICAgICAgfSwgaWNvblByb3BzKSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogc3R5bGVzJDhbJ2Zsb2F0aW5nLWluZm8tYmxvY2staW5uZXItY29udGFpbmVyJ11cbiAgICAgIH0sIGNoaWxkcmVuKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEZsb2F0aW5nSW5mb0Jsb2NrO1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxuX2RlZmluZVByb3BlcnR5KEZsb2F0aW5nSW5mb0Jsb2NrLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIGljb25Qcm9wczogdW5kZWZpbmVkLFxuICBpY29uQmFja2dyb3VuZENvbG9yOiAnIzMzM2Q0Nydcbn0pO1xuXG52YXIgSGVhZGluZyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEhlYWRpbmcsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEhlYWRpbmcpO1xuXG4gIGZ1bmN0aW9uIEhlYWRpbmcoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEhlYWRpbmcpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEhlYWRpbmcsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgc2l6ZSA9IF90aGlzJHByb3BzLnNpemUsXG4gICAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIFtcImNoaWxkcmVuXCIsIFwic2l6ZVwiXSk7XG5cbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUZXh0LCBfZXh0ZW5kcyh7XG4gICAgICAgIGFzOiBzaXplLFxuICAgICAgICBmb250U2l6ZTogc2l6ZVxuICAgICAgfSwgcHJvcHMpLCBjaGlsZHJlbik7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEhlYWRpbmc7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoSGVhZGluZywgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBzaXplOiAnaDEnXG59KTtcblxudmFyIEgxID0gZnVuY3Rpb24gSDEocHJvcHMpIHtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEhlYWRpbmcsIF9leHRlbmRzKHtcbiAgICBzaXplOiBcImgxXCJcbiAgfSwgcHJvcHMpKTtcbn07XG52YXIgSDIgPSBmdW5jdGlvbiBIMihwcm9wcykge1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSGVhZGluZywgX2V4dGVuZHMoe1xuICAgIHNpemU6IFwiaDJcIlxuICB9LCBwcm9wcykpO1xufTtcbnZhciBIMyA9IGZ1bmN0aW9uIEgzKHByb3BzKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChIZWFkaW5nLCBfZXh0ZW5kcyh7XG4gICAgc2l6ZTogXCJoM1wiXG4gIH0sIHByb3BzKSk7XG59O1xudmFyIEg0ID0gZnVuY3Rpb24gSDQocHJvcHMpIHtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEhlYWRpbmcsIF9leHRlbmRzKHtcbiAgICBzaXplOiBcImg0XCJcbiAgfSwgcHJvcHMpKTtcbn07XG52YXIgSDUgPSBmdW5jdGlvbiBINShwcm9wcykge1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSGVhZGluZywgX2V4dGVuZHMoe1xuICAgIHNpemU6IFwiaDVcIlxuICB9LCBwcm9wcykpO1xufTtcbnZhciBINiA9IGZ1bmN0aW9uIEg2KHByb3BzKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChIZWFkaW5nLCBfZXh0ZW5kcyh7XG4gICAgc2l6ZTogXCJoNlwiXG4gIH0sIHByb3BzKSk7XG59O1xuXG52YXIgY29tbW9uanNHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB7fTtcblxuZnVuY3Rpb24gdW53cmFwRXhwb3J0cyAoeCkge1xuXHRyZXR1cm4geCAmJiB4Ll9fZXNNb2R1bGUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsICdkZWZhdWx0JykgPyB4WydkZWZhdWx0J10gOiB4O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDb21tb25qc01vZHVsZShmbiwgbW9kdWxlKSB7XG5cdHJldHVybiBtb2R1bGUgPSB7IGV4cG9ydHM6IHt9IH0sIGZuKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMpLCBtb2R1bGUuZXhwb3J0cztcbn1cblxuLyoqIEBsaWNlbnNlIFJlYWN0IHYxNi4xMy4xXG4gKiByZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG52YXIgYj1cImZ1bmN0aW9uXCI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yLGM9Yj9TeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKTo2MDEwMyxkPWI/U3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKTo2MDEwNixlPWI/U3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpOjYwMTA3LGY9Yj9TeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIik6NjAxMDgsZz1iP1N5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKTo2MDExNCxoPWI/U3ltYm9sLmZvcihcInJlYWN0LnByb3ZpZGVyXCIpOjYwMTA5LGs9Yj9TeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKTo2MDExMCxsPWI/U3ltYm9sLmZvcihcInJlYWN0LmFzeW5jX21vZGVcIik6NjAxMTEsbT1iP1N5bWJvbC5mb3IoXCJyZWFjdC5jb25jdXJyZW50X21vZGVcIik6NjAxMTEsbj1iP1N5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKTo2MDExMixwPWI/U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpOjYwMTEzLHE9Yj9cblN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpOjYwMTIwLHI9Yj9TeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKTo2MDExNSx0PWI/U3ltYm9sLmZvcihcInJlYWN0LmxhenlcIik6NjAxMTYsdj1iP1N5bWJvbC5mb3IoXCJyZWFjdC5ibG9ja1wiKTo2MDEyMSx3PWI/U3ltYm9sLmZvcihcInJlYWN0LmZ1bmRhbWVudGFsXCIpOjYwMTE3LHg9Yj9TeW1ib2wuZm9yKFwicmVhY3QucmVzcG9uZGVyXCIpOjYwMTE4LHk9Yj9TeW1ib2wuZm9yKFwicmVhY3Quc2NvcGVcIik6NjAxMTk7XG5mdW5jdGlvbiB6KGEpe2lmKFwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEpe3ZhciB1PWEuJCR0eXBlb2Y7c3dpdGNoKHUpe2Nhc2UgYzpzd2l0Y2goYT1hLnR5cGUsYSl7Y2FzZSBsOmNhc2UgbTpjYXNlIGU6Y2FzZSBnOmNhc2UgZjpjYXNlIHA6cmV0dXJuIGE7ZGVmYXVsdDpzd2l0Y2goYT1hJiZhLiQkdHlwZW9mLGEpe2Nhc2UgazpjYXNlIG46Y2FzZSB0OmNhc2UgcjpjYXNlIGg6cmV0dXJuIGE7ZGVmYXVsdDpyZXR1cm4gdX19Y2FzZSBkOnJldHVybiB1fX19ZnVuY3Rpb24gQShhKXtyZXR1cm4geihhKT09PW19dmFyIEFzeW5jTW9kZT1sO3ZhciBDb25jdXJyZW50TW9kZT1tO3ZhciBDb250ZXh0Q29uc3VtZXI9azt2YXIgQ29udGV4dFByb3ZpZGVyPWg7dmFyIEVsZW1lbnQ9Yzt2YXIgRm9yd2FyZFJlZj1uO3ZhciBGcmFnbWVudD1lO3ZhciBMYXp5PXQ7dmFyIE1lbW89cjt2YXIgUG9ydGFsPWQ7XG52YXIgUHJvZmlsZXI9Zzt2YXIgU3RyaWN0TW9kZT1mO3ZhciBTdXNwZW5zZT1wO3ZhciBpc0FzeW5jTW9kZT1mdW5jdGlvbihhKXtyZXR1cm4gQShhKXx8eihhKT09PWx9O3ZhciBpc0NvbmN1cnJlbnRNb2RlPUE7dmFyIGlzQ29udGV4dENvbnN1bWVyPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09a307dmFyIGlzQ29udGV4dFByb3ZpZGVyPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09aH07dmFyIGlzRWxlbWVudD1mdW5jdGlvbihhKXtyZXR1cm4gXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmYS4kJHR5cGVvZj09PWN9O3ZhciBpc0ZvcndhcmRSZWY9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1ufTt2YXIgaXNGcmFnbWVudD1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWV9O3ZhciBpc0xhenk9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT10fTtcbnZhciBpc01lbW89ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1yfTt2YXIgaXNQb3J0YWw9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1kfTt2YXIgaXNQcm9maWxlcj1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWd9O3ZhciBpc1N0cmljdE1vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1mfTt2YXIgaXNTdXNwZW5zZT1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PXB9O1xudmFyIGlzVmFsaWRFbGVtZW50VHlwZT1mdW5jdGlvbihhKXtyZXR1cm4gXCJzdHJpbmdcIj09PXR5cGVvZiBhfHxcImZ1bmN0aW9uXCI9PT10eXBlb2YgYXx8YT09PWV8fGE9PT1tfHxhPT09Z3x8YT09PWZ8fGE9PT1wfHxhPT09cXx8XCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmKGEuJCR0eXBlb2Y9PT10fHxhLiQkdHlwZW9mPT09cnx8YS4kJHR5cGVvZj09PWh8fGEuJCR0eXBlb2Y9PT1rfHxhLiQkdHlwZW9mPT09bnx8YS4kJHR5cGVvZj09PXd8fGEuJCR0eXBlb2Y9PT14fHxhLiQkdHlwZW9mPT09eXx8YS4kJHR5cGVvZj09PXYpfTt2YXIgdHlwZU9mPXo7XG5cbnZhciByZWFjdElzX3Byb2R1Y3Rpb25fbWluID0ge1xuXHRBc3luY01vZGU6IEFzeW5jTW9kZSxcblx0Q29uY3VycmVudE1vZGU6IENvbmN1cnJlbnRNb2RlLFxuXHRDb250ZXh0Q29uc3VtZXI6IENvbnRleHRDb25zdW1lcixcblx0Q29udGV4dFByb3ZpZGVyOiBDb250ZXh0UHJvdmlkZXIsXG5cdEVsZW1lbnQ6IEVsZW1lbnQsXG5cdEZvcndhcmRSZWY6IEZvcndhcmRSZWYsXG5cdEZyYWdtZW50OiBGcmFnbWVudCxcblx0TGF6eTogTGF6eSxcblx0TWVtbzogTWVtbyxcblx0UG9ydGFsOiBQb3J0YWwsXG5cdFByb2ZpbGVyOiBQcm9maWxlcixcblx0U3RyaWN0TW9kZTogU3RyaWN0TW9kZSxcblx0U3VzcGVuc2U6IFN1c3BlbnNlLFxuXHRpc0FzeW5jTW9kZTogaXNBc3luY01vZGUsXG5cdGlzQ29uY3VycmVudE1vZGU6IGlzQ29uY3VycmVudE1vZGUsXG5cdGlzQ29udGV4dENvbnN1bWVyOiBpc0NvbnRleHRDb25zdW1lcixcblx0aXNDb250ZXh0UHJvdmlkZXI6IGlzQ29udGV4dFByb3ZpZGVyLFxuXHRpc0VsZW1lbnQ6IGlzRWxlbWVudCxcblx0aXNGb3J3YXJkUmVmOiBpc0ZvcndhcmRSZWYsXG5cdGlzRnJhZ21lbnQ6IGlzRnJhZ21lbnQsXG5cdGlzTGF6eTogaXNMYXp5LFxuXHRpc01lbW86IGlzTWVtbyxcblx0aXNQb3J0YWw6IGlzUG9ydGFsLFxuXHRpc1Byb2ZpbGVyOiBpc1Byb2ZpbGVyLFxuXHRpc1N0cmljdE1vZGU6IGlzU3RyaWN0TW9kZSxcblx0aXNTdXNwZW5zZTogaXNTdXNwZW5zZSxcblx0aXNWYWxpZEVsZW1lbnRUeXBlOiBpc1ZhbGlkRWxlbWVudFR5cGUsXG5cdHR5cGVPZjogdHlwZU9mXG59O1xuXG52YXIgcmVhY3RJc19kZXZlbG9wbWVudCA9IGNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZ1bmN0aW9uIChtb2R1bGUsIGV4cG9ydHMpIHtcblxuXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxudmFyIGhhc1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcjtcbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgOiAweGVhYzc7XG52YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wb3J0YWwnKSA6IDB4ZWFjYTtcbnZhciBSRUFDVF9GUkFHTUVOVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZnJhZ21lbnQnKSA6IDB4ZWFjYjtcbnZhciBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3RyaWN0X21vZGUnKSA6IDB4ZWFjYztcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucHJvZmlsZXInKSA6IDB4ZWFkMjtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucHJvdmlkZXInKSA6IDB4ZWFjZDtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5jb250ZXh0JykgOiAweGVhY2U7IC8vIFRPRE86IFdlIGRvbid0IHVzZSBBc3luY01vZGUgb3IgQ29uY3VycmVudE1vZGUgYW55bW9yZS4gVGhleSB3ZXJlIHRlbXBvcmFyeVxuLy8gKHVuc3RhYmxlKSBBUElzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQuIENhbiB3ZSByZW1vdmUgdGhlIHN5bWJvbHM/XG5cbnZhciBSRUFDVF9BU1lOQ19NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5hc3luY19tb2RlJykgOiAweGVhY2Y7XG52YXIgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5jb25jdXJyZW50X21vZGUnKSA6IDB4ZWFjZjtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKSA6IDB4ZWFkMDtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2UnKSA6IDB4ZWFkMTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0JykgOiAweGVhZDg7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubWVtbycpIDogMHhlYWQzO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmxhenknKSA6IDB4ZWFkNDtcbnZhciBSRUFDVF9CTE9DS19UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuYmxvY2snKSA6IDB4ZWFkOTtcbnZhciBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZnVuZGFtZW50YWwnKSA6IDB4ZWFkNTtcbnZhciBSRUFDVF9SRVNQT05ERVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnJlc3BvbmRlcicpIDogMHhlYWQ2O1xudmFyIFJFQUNUX1NDT1BFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zY29wZScpIDogMHhlYWQ3O1xuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkge1xuICByZXR1cm4gdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nIHx8IC8vIE5vdGU6IGl0cyB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyBpZiBpdCdzIGEgcG9seWZpbGwuXG4gIHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9SRVNQT05ERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9TQ09QRV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0JMT0NLX1RZUEUpO1xufVxuXG5mdW5jdGlvbiB0eXBlT2Yob2JqZWN0KSB7XG4gIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwpIHtcbiAgICB2YXIgJCR0eXBlb2YgPSBvYmplY3QuJCR0eXBlb2Y7XG5cbiAgICBzd2l0Y2ggKCQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgdmFyIHR5cGUgPSBvYmplY3QudHlwZTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0FTWU5DX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiB0eXBlO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHZhciAkJHR5cGVvZlR5cGUgPSB0eXBlICYmIHR5cGUuJCR0eXBlb2Y7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoJCR0eXBlb2ZUeXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZlR5cGU7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn0gLy8gQXN5bmNNb2RlIGlzIGRlcHJlY2F0ZWQgYWxvbmcgd2l0aCBpc0FzeW5jTW9kZVxuXG52YXIgQXN5bmNNb2RlID0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xudmFyIENvbmN1cnJlbnRNb2RlID0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU7XG52YXIgQ29udGV4dENvbnN1bWVyID0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xudmFyIENvbnRleHRQcm92aWRlciA9IFJFQUNUX1BST1ZJREVSX1RZUEU7XG52YXIgRWxlbWVudCA9IFJFQUNUX0VMRU1FTlRfVFlQRTtcbnZhciBGb3J3YXJkUmVmID0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbnZhciBGcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG52YXIgTGF6eSA9IFJFQUNUX0xBWllfVFlQRTtcbnZhciBNZW1vID0gUkVBQ1RfTUVNT19UWVBFO1xudmFyIFBvcnRhbCA9IFJFQUNUX1BPUlRBTF9UWVBFO1xudmFyIFByb2ZpbGVyID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbnZhciBTdHJpY3RNb2RlID0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbnZhciBTdXNwZW5zZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG52YXIgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSBmYWxzZTsgLy8gQXN5bmNNb2RlIHNob3VsZCBiZSBkZXByZWNhdGVkXG5cbmZ1bmN0aW9uIGlzQXN5bmNNb2RlKG9iamVjdCkge1xuICB7XG4gICAgaWYgKCFoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSkge1xuICAgICAgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSB0cnVlOyAvLyBVc2luZyBjb25zb2xlWyd3YXJuJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuXG4gICAgICBjb25zb2xlWyd3YXJuJ10oJ1RoZSBSZWFjdElzLmlzQXN5bmNNb2RlKCkgYWxpYXMgaGFzIGJlZW4gZGVwcmVjYXRlZCwgJyArICdhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJlYWN0IDE3Ky4gVXBkYXRlIHlvdXIgY29kZSB0byB1c2UgJyArICdSZWFjdElzLmlzQ29uY3VycmVudE1vZGUoKSBpbnN0ZWFkLiBJdCBoYXMgdGhlIGV4YWN0IHNhbWUgQVBJLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpc0NvbmN1cnJlbnRNb2RlKG9iamVjdCkgfHwgdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0FTWU5DX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRDb25zdW1lcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05URVhUX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRQcm92aWRlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9WSURFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNFbGVtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsICYmIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNGb3J3YXJkUmVmKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZyYWdtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0xhenkob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTEFaWV9UWVBFO1xufVxuZnVuY3Rpb24gaXNNZW1vKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX01FTU9fVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUG9ydGFsKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BPUlRBTF9UWVBFO1xufVxuZnVuY3Rpb24gaXNQcm9maWxlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdHJpY3RNb2RlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N1c3BlbnNlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG59XG5cbmV4cG9ydHMuQXN5bmNNb2RlID0gQXN5bmNNb2RlO1xuZXhwb3J0cy5Db25jdXJyZW50TW9kZSA9IENvbmN1cnJlbnRNb2RlO1xuZXhwb3J0cy5Db250ZXh0Q29uc3VtZXIgPSBDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLkNvbnRleHRQcm92aWRlciA9IENvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuRWxlbWVudCA9IEVsZW1lbnQ7XG5leHBvcnRzLkZvcndhcmRSZWYgPSBGb3J3YXJkUmVmO1xuZXhwb3J0cy5GcmFnbWVudCA9IEZyYWdtZW50O1xuZXhwb3J0cy5MYXp5ID0gTGF6eTtcbmV4cG9ydHMuTWVtbyA9IE1lbW87XG5leHBvcnRzLlBvcnRhbCA9IFBvcnRhbDtcbmV4cG9ydHMuUHJvZmlsZXIgPSBQcm9maWxlcjtcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IFN0cmljdE1vZGU7XG5leHBvcnRzLlN1c3BlbnNlID0gU3VzcGVuc2U7XG5leHBvcnRzLmlzQXN5bmNNb2RlID0gaXNBc3luY01vZGU7XG5leHBvcnRzLmlzQ29uY3VycmVudE1vZGUgPSBpc0NvbmN1cnJlbnRNb2RlO1xuZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lciA9IGlzQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5pc0NvbnRleHRQcm92aWRlciA9IGlzQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5pc0VsZW1lbnQgPSBpc0VsZW1lbnQ7XG5leHBvcnRzLmlzRm9yd2FyZFJlZiA9IGlzRm9yd2FyZFJlZjtcbmV4cG9ydHMuaXNGcmFnbWVudCA9IGlzRnJhZ21lbnQ7XG5leHBvcnRzLmlzTGF6eSA9IGlzTGF6eTtcbmV4cG9ydHMuaXNNZW1vID0gaXNNZW1vO1xuZXhwb3J0cy5pc1BvcnRhbCA9IGlzUG9ydGFsO1xuZXhwb3J0cy5pc1Byb2ZpbGVyID0gaXNQcm9maWxlcjtcbmV4cG9ydHMuaXNTdHJpY3RNb2RlID0gaXNTdHJpY3RNb2RlO1xuZXhwb3J0cy5pc1N1c3BlbnNlID0gaXNTdXNwZW5zZTtcbmV4cG9ydHMuaXNWYWxpZEVsZW1lbnRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlO1xuZXhwb3J0cy50eXBlT2YgPSB0eXBlT2Y7XG4gIH0pKCk7XG59XG59KTtcbnZhciByZWFjdElzX2RldmVsb3BtZW50XzEgPSByZWFjdElzX2RldmVsb3BtZW50LkFzeW5jTW9kZTtcbnZhciByZWFjdElzX2RldmVsb3BtZW50XzIgPSByZWFjdElzX2RldmVsb3BtZW50LkNvbmN1cnJlbnRNb2RlO1xudmFyIHJlYWN0SXNfZGV2ZWxvcG1lbnRfMyA9IHJlYWN0SXNfZGV2ZWxvcG1lbnQuQ29udGV4dENvbnN1bWVyO1xudmFyIHJlYWN0SXNfZGV2ZWxvcG1lbnRfNCA9IHJlYWN0SXNfZGV2ZWxvcG1lbnQuQ29udGV4dFByb3ZpZGVyO1xudmFyIHJlYWN0SXNfZGV2ZWxvcG1lbnRfNSA9IHJlYWN0SXNfZGV2ZWxvcG1lbnQuRWxlbWVudDtcbnZhciByZWFjdElzX2RldmVsb3BtZW50XzYgPSByZWFjdElzX2RldmVsb3BtZW50LkZvcndhcmRSZWY7XG52YXIgcmVhY3RJc19kZXZlbG9wbWVudF83ID0gcmVhY3RJc19kZXZlbG9wbWVudC5GcmFnbWVudDtcbnZhciByZWFjdElzX2RldmVsb3BtZW50XzggPSByZWFjdElzX2RldmVsb3BtZW50Lkxhenk7XG52YXIgcmVhY3RJc19kZXZlbG9wbWVudF85ID0gcmVhY3RJc19kZXZlbG9wbWVudC5NZW1vO1xudmFyIHJlYWN0SXNfZGV2ZWxvcG1lbnRfMTAgPSByZWFjdElzX2RldmVsb3BtZW50LlBvcnRhbDtcbnZhciByZWFjdElzX2RldmVsb3BtZW50XzExID0gcmVhY3RJc19kZXZlbG9wbWVudC5Qcm9maWxlcjtcbnZhciByZWFjdElzX2RldmVsb3BtZW50XzEyID0gcmVhY3RJc19kZXZlbG9wbWVudC5TdHJpY3RNb2RlO1xudmFyIHJlYWN0SXNfZGV2ZWxvcG1lbnRfMTMgPSByZWFjdElzX2RldmVsb3BtZW50LlN1c3BlbnNlO1xudmFyIHJlYWN0SXNfZGV2ZWxvcG1lbnRfMTQgPSByZWFjdElzX2RldmVsb3BtZW50LmlzQXN5bmNNb2RlO1xudmFyIHJlYWN0SXNfZGV2ZWxvcG1lbnRfMTUgPSByZWFjdElzX2RldmVsb3BtZW50LmlzQ29uY3VycmVudE1vZGU7XG52YXIgcmVhY3RJc19kZXZlbG9wbWVudF8xNiA9IHJlYWN0SXNfZGV2ZWxvcG1lbnQuaXNDb250ZXh0Q29uc3VtZXI7XG52YXIgcmVhY3RJc19kZXZlbG9wbWVudF8xNyA9IHJlYWN0SXNfZGV2ZWxvcG1lbnQuaXNDb250ZXh0UHJvdmlkZXI7XG52YXIgcmVhY3RJc19kZXZlbG9wbWVudF8xOCA9IHJlYWN0SXNfZGV2ZWxvcG1lbnQuaXNFbGVtZW50O1xudmFyIHJlYWN0SXNfZGV2ZWxvcG1lbnRfMTkgPSByZWFjdElzX2RldmVsb3BtZW50LmlzRm9yd2FyZFJlZjtcbnZhciByZWFjdElzX2RldmVsb3BtZW50XzIwID0gcmVhY3RJc19kZXZlbG9wbWVudC5pc0ZyYWdtZW50O1xudmFyIHJlYWN0SXNfZGV2ZWxvcG1lbnRfMjEgPSByZWFjdElzX2RldmVsb3BtZW50LmlzTGF6eTtcbnZhciByZWFjdElzX2RldmVsb3BtZW50XzIyID0gcmVhY3RJc19kZXZlbG9wbWVudC5pc01lbW87XG52YXIgcmVhY3RJc19kZXZlbG9wbWVudF8yMyA9IHJlYWN0SXNfZGV2ZWxvcG1lbnQuaXNQb3J0YWw7XG52YXIgcmVhY3RJc19kZXZlbG9wbWVudF8yNCA9IHJlYWN0SXNfZGV2ZWxvcG1lbnQuaXNQcm9maWxlcjtcbnZhciByZWFjdElzX2RldmVsb3BtZW50XzI1ID0gcmVhY3RJc19kZXZlbG9wbWVudC5pc1N0cmljdE1vZGU7XG52YXIgcmVhY3RJc19kZXZlbG9wbWVudF8yNiA9IHJlYWN0SXNfZGV2ZWxvcG1lbnQuaXNTdXNwZW5zZTtcbnZhciByZWFjdElzX2RldmVsb3BtZW50XzI3ID0gcmVhY3RJc19kZXZlbG9wbWVudC5pc1ZhbGlkRWxlbWVudFR5cGU7XG52YXIgcmVhY3RJc19kZXZlbG9wbWVudF8yOCA9IHJlYWN0SXNfZGV2ZWxvcG1lbnQudHlwZU9mO1xuXG52YXIgcmVhY3RJcyA9IGNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZ1bmN0aW9uIChtb2R1bGUpIHtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZWFjdElzX3Byb2R1Y3Rpb25fbWluO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZWFjdElzX2RldmVsb3BtZW50O1xufVxufSk7XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0XzEgPSBSZWFjdFByb3BUeXBlc1NlY3JldDtcblxudmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKCkge307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdFByb3BUeXBlc1NlY3JldCQxID0gUmVhY3RQcm9wVHlwZXNTZWNyZXRfMTtcbiAgdmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xuICB2YXIgaGFzID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuXG4gIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgdGV4dDtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9IGNhdGNoICh4KSB7fVxuICB9O1xufVxuXG4vKipcbiAqIEFzc2VydCB0aGF0IHRoZSB2YWx1ZXMgbWF0Y2ggd2l0aCB0aGUgdHlwZSBzcGVjcy5cbiAqIEVycm9yIG1lc3NhZ2VzIGFyZSBtZW1vcml6ZWQgYW5kIHdpbGwgb25seSBiZSBzaG93biBvbmNlLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSB0eXBlU3BlY3MgTWFwIG9mIG5hbWUgdG8gYSBSZWFjdFByb3BUeXBlXG4gKiBAcGFyYW0ge29iamVjdH0gdmFsdWVzIFJ1bnRpbWUgdmFsdWVzIHRoYXQgbmVlZCB0byBiZSB0eXBlLWNoZWNrZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhdGlvbiBlLmcuIFwicHJvcFwiLCBcImNvbnRleHRcIiwgXCJjaGlsZCBjb250ZXh0XCJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21wb25lbnROYW1lIE5hbWUgb2YgdGhlIGNvbXBvbmVudCBmb3IgZXJyb3IgbWVzc2FnZXMuXG4gKiBAcGFyYW0gez9GdW5jdGlvbn0gZ2V0U3RhY2sgUmV0dXJucyB0aGUgY29tcG9uZW50IHN0YWNrLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXModHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBjb21wb25lbnROYW1lLCBnZXRTdGFjaykge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcbiAgICAgIGlmIChoYXModHlwZVNwZWNzLCB0eXBlU3BlY05hbWUpKSB7XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcihcbiAgICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICtcbiAgICAgICAgICAgICAgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICsgJ2AuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlcnJvciA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgUmVhY3RQcm9wVHlwZXNTZWNyZXQkMSk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IgPSBleDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IgJiYgIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICcgK1xuICAgICAgICAgICAgbG9jYXRpb24gKyAnIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICtcbiAgICAgICAgICAgICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAnICsgdHlwZW9mIGVycm9yICsgJy4gJyArXG4gICAgICAgICAgICAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArXG4gICAgICAgICAgICAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICtcbiAgICAgICAgICAgICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvci5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHtcbiAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcbiAgICAgICAgICAvLyBzYW1lIGVycm9yLlxuICAgICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvci5tZXNzYWdlXSA9IHRydWU7XG5cbiAgICAgICAgICB2YXIgc3RhY2sgPSBnZXRTdGFjayA/IGdldFN0YWNrKCkgOiAnJztcblxuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICdGYWlsZWQgJyArIGxvY2F0aW9uICsgJyB0eXBlOiAnICsgZXJyb3IubWVzc2FnZSArIChzdGFjayAhPSBudWxsID8gc3RhY2sgOiAnJylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVzZXRzIHdhcm5pbmcgY2FjaGUgd2hlbiB0ZXN0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNoZWNrUHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlID0gZnVuY3Rpb24oKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG4gIH1cbn07XG5cbnZhciBjaGVja1Byb3BUeXBlc18xID0gY2hlY2tQcm9wVHlwZXM7XG5cbnZhciBoYXMkMSA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbnZhciBwcmludFdhcm5pbmckMSA9IGZ1bmN0aW9uKCkge307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHByaW50V2FybmluZyQxID0gZnVuY3Rpb24odGV4dCkge1xuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyB0ZXh0O1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKHgpIHt9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGwoKSB7XG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMgPSBmdW5jdGlvbihpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcykge1xuICAvKiBnbG9iYWwgU3ltYm9sICovXG4gIHZhciBJVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbiAgdmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InOyAvLyBCZWZvcmUgU3ltYm9sIHNwZWMuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIG1ldGhvZCBmdW5jdGlvbiBjb250YWluZWQgb24gdGhlIGl0ZXJhYmxlIG9iamVjdC5cbiAgICpcbiAgICogQmUgc3VyZSB0byBpbnZva2UgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGl0ZXJhYmxlIGFzIGNvbnRleHQ6XG4gICAqXG4gICAqICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obXlJdGVyYWJsZSk7XG4gICAqICAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgKiAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobXlJdGVyYWJsZSk7XG4gICAqICAgICAgIC4uLlxuICAgKiAgICAgfVxuICAgKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG1heWJlSXRlcmFibGVcbiAgICogQHJldHVybiB7P2Z1bmN0aW9ufVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBtYXliZUl0ZXJhYmxlICYmIChJVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtJVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdKTtcbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBpdGVyYXRvckZuO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0aW9uIG9mIG1ldGhvZHMgdGhhdCBhbGxvdyBkZWNsYXJhdGlvbiBhbmQgdmFsaWRhdGlvbiBvZiBwcm9wcyB0aGF0IGFyZVxuICAgKiBzdXBwbGllZCB0byBSZWFjdCBjb21wb25lbnRzLiBFeGFtcGxlIHVzYWdlOlxuICAgKlxuICAgKiAgIHZhciBQcm9wcyA9IHJlcXVpcmUoJ1JlYWN0UHJvcFR5cGVzJyk7XG4gICAqICAgdmFyIE15QXJ0aWNsZSA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgICogICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgcHJvcCBuYW1lZCBcImRlc2NyaXB0aW9uXCIuXG4gICAqICAgICAgIGRlc2NyaXB0aW9uOiBQcm9wcy5zdHJpbmcsXG4gICAqXG4gICAqICAgICAgIC8vIEEgcmVxdWlyZWQgZW51bSBwcm9wIG5hbWVkIFwiY2F0ZWdvcnlcIi5cbiAgICogICAgICAgY2F0ZWdvcnk6IFByb3BzLm9uZU9mKFsnTmV3cycsJ1Bob3RvcyddKS5pc1JlcXVpcmVkLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHByb3AgbmFtZWQgXCJkaWFsb2dcIiB0aGF0IHJlcXVpcmVzIGFuIGluc3RhbmNlIG9mIERpYWxvZy5cbiAgICogICAgICAgZGlhbG9nOiBQcm9wcy5pbnN0YW5jZU9mKERpYWxvZykuaXNSZXF1aXJlZFxuICAgKiAgICAgfSxcbiAgICogICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7IC4uLiB9XG4gICAqICAgfSk7XG4gICAqXG4gICAqIEEgbW9yZSBmb3JtYWwgc3BlY2lmaWNhdGlvbiBvZiBob3cgdGhlc2UgbWV0aG9kcyBhcmUgdXNlZDpcbiAgICpcbiAgICogICB0eXBlIDo9IGFycmF5fGJvb2x8ZnVuY3xvYmplY3R8bnVtYmVyfHN0cmluZ3xvbmVPZihbLi4uXSl8aW5zdGFuY2VPZiguLi4pXG4gICAqICAgZGVjbCA6PSBSZWFjdFByb3BUeXBlcy57dHlwZX0oLmlzUmVxdWlyZWQpP1xuICAgKlxuICAgKiBFYWNoIGFuZCBldmVyeSBkZWNsYXJhdGlvbiBwcm9kdWNlcyBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgc2lnbmF0dXJlLiBUaGlzXG4gICAqIGFsbG93cyB0aGUgY3JlYXRpb24gb2YgY3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb25zLiBGb3IgZXhhbXBsZTpcbiAgICpcbiAgICogIHZhciBNeUxpbmsgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBvciBVUkkgcHJvcCBuYW1lZCBcImhyZWZcIi5cbiAgICogICAgICBocmVmOiBmdW5jdGlvbihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICogICAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAqICAgICAgICBpZiAocHJvcFZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHByb3BWYWx1ZSAhPT0gJ3N0cmluZycgJiZcbiAgICogICAgICAgICAgICAhKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFVSSSkpIHtcbiAgICogICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICogICAgICAgICAgICAnRXhwZWN0ZWQgYSBzdHJpbmcgb3IgYW4gVVJJIGZvciAnICsgcHJvcE5hbWUgKyAnIGluICcgK1xuICAgKiAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICogICAgICAgICAgKTtcbiAgICogICAgICAgIH1cbiAgICogICAgICB9XG4gICAqICAgIH0sXG4gICAqICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7Li4ufVxuICAgKiAgfSk7XG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cblxuICB2YXIgQU5PTllNT1VTID0gJzw8YW5vbnltb3VzPj4nO1xuXG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdhcnJheScpLFxuICAgIGJvb2w6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdib29sZWFuJyksXG4gICAgZnVuYzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Z1bmN0aW9uJyksXG4gICAgbnVtYmVyOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignbnVtYmVyJyksXG4gICAgb2JqZWN0OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignb2JqZWN0JyksXG4gICAgc3RyaW5nOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3RyaW5nJyksXG4gICAgc3ltYm9sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3ltYm9sJyksXG5cbiAgICBhbnk6IGNyZWF0ZUFueVR5cGVDaGVja2VyKCksXG4gICAgYXJyYXlPZjogY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyLFxuICAgIGVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpLFxuICAgIGVsZW1lbnRUeXBlOiBjcmVhdGVFbGVtZW50VHlwZVR5cGVDaGVja2VyKCksXG4gICAgaW5zdGFuY2VPZjogY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcixcbiAgICBub2RlOiBjcmVhdGVOb2RlQ2hlY2tlcigpLFxuICAgIG9iamVjdE9mOiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyLFxuICAgIG9uZU9mOiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIsXG4gICAgb25lT2ZUeXBlOiBjcmVhdGVVbmlvblR5cGVDaGVja2VyLFxuICAgIHNoYXBlOiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyLFxuICAgIGV4YWN0OiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyLFxuICB9O1xuXG4gIC8qKlxuICAgKiBpbmxpbmVkIE9iamVjdC5pcyBwb2x5ZmlsbCB0byBhdm9pZCByZXF1aXJpbmcgY29uc3VtZXJzIHNoaXAgdGhlaXIgb3duXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9pc1xuICAgKi9cbiAgLyplc2xpbnQtZGlzYWJsZSBuby1zZWxmLWNvbXBhcmUqL1xuICBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gICAgLy8gU2FtZVZhbHVlIGFsZ29yaXRobVxuICAgIGlmICh4ID09PSB5KSB7XG4gICAgICAvLyBTdGVwcyAxLTUsIDctMTBcbiAgICAgIC8vIFN0ZXBzIDYuYi02LmU6ICswICE9IC0wXG4gICAgICByZXR1cm4geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0ZXAgNi5hOiBOYU4gPT0gTmFOXG4gICAgICByZXR1cm4geCAhPT0geCAmJiB5ICE9PSB5O1xuICAgIH1cbiAgfVxuICAvKmVzbGludC1lbmFibGUgbm8tc2VsZi1jb21wYXJlKi9cblxuICAvKipcbiAgICogV2UgdXNlIGFuIEVycm9yLWxpa2Ugb2JqZWN0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFzIHBlb3BsZSBtYXkgY2FsbFxuICAgKiBQcm9wVHlwZXMgZGlyZWN0bHkgYW5kIGluc3BlY3QgdGhlaXIgb3V0cHV0LiBIb3dldmVyLCB3ZSBkb24ndCB1c2UgcmVhbFxuICAgKiBFcnJvcnMgYW55bW9yZS4gV2UgZG9uJ3QgaW5zcGVjdCB0aGVpciBzdGFjayBhbnl3YXksIGFuZCBjcmVhdGluZyB0aGVtXG4gICAqIGlzIHByb2hpYml0aXZlbHkgZXhwZW5zaXZlIGlmIHRoZXkgYXJlIGNyZWF0ZWQgdG9vIG9mdGVuLCBzdWNoIGFzIHdoYXRcbiAgICogaGFwcGVucyBpbiBvbmVPZlR5cGUoKSBmb3IgYW55IHR5cGUgYmVmb3JlIHRoZSBvbmUgdGhhdCBtYXRjaGVkLlxuICAgKi9cbiAgZnVuY3Rpb24gUHJvcFR5cGVFcnJvcihtZXNzYWdlKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB0aGlzLnN0YWNrID0gJyc7XG4gIH1cbiAgLy8gTWFrZSBgaW5zdGFuY2VvZiBFcnJvcmAgc3RpbGwgd29yayBmb3IgcmV0dXJuZWQgZXJyb3JzLlxuICBQcm9wVHlwZUVycm9yLnByb3RvdHlwZSA9IEVycm9yLnByb3RvdHlwZTtcblxuICBmdW5jdGlvbiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGUgPSB7fTtcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA9IDA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrVHlwZShpc1JlcXVpcmVkLCBwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgcHJvcEZ1bGxOYW1lID0gcHJvcEZ1bGxOYW1lIHx8IHByb3BOYW1lO1xuXG4gICAgICBpZiAoc2VjcmV0ICE9PSBSZWFjdFByb3BUeXBlc1NlY3JldF8xKSB7XG4gICAgICAgIGlmICh0aHJvd09uRGlyZWN0QWNjZXNzKSB7XG4gICAgICAgICAgLy8gTmV3IGJlaGF2aW9yIG9ubHkgZm9yIHVzZXJzIG9mIGBwcm9wLXR5cGVzYCBwYWNrYWdlXG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICdVc2UgYFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpYCB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAvLyBPbGQgYmVoYXZpb3IgZm9yIHBlb3BsZSB1c2luZyBSZWFjdC5Qcm9wVHlwZXNcbiAgICAgICAgICB2YXIgY2FjaGVLZXkgPSBjb21wb25lbnROYW1lICsgJzonICsgcHJvcE5hbWU7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIW1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSAmJlxuICAgICAgICAgICAgLy8gQXZvaWQgc3BhbW1pbmcgdGhlIGNvbnNvbGUgYmVjYXVzZSB0aGV5IGFyZSBvZnRlbiBub3QgYWN0aW9uYWJsZSBleGNlcHQgZm9yIGxpYiBhdXRob3JzXG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA8IDNcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZyQxKFxuICAgICAgICAgICAgICAnWW91IGFyZSBtYW51YWxseSBjYWxsaW5nIGEgUmVhY3QuUHJvcFR5cGVzIHZhbGlkYXRpb24gJyArXG4gICAgICAgICAgICAgICdmdW5jdGlvbiBmb3IgdGhlIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgcHJvcCBvbiBgJyArIGNvbXBvbmVudE5hbWUgICsgJ2AuIFRoaXMgaXMgZGVwcmVjYXRlZCAnICtcbiAgICAgICAgICAgICAgJ2FuZCB3aWxsIHRocm93IGluIHRoZSBzdGFuZGFsb25lIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICAgJ1lvdSBtYXkgYmUgc2VlaW5nIHRoaXMgd2FybmluZyBkdWUgdG8gYSB0aGlyZC1wYXJ0eSBQcm9wVHlwZXMgJyArXG4gICAgICAgICAgICAgICdsaWJyYXJ5LiBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWRvbnQtY2FsbC1wcm9wdHlwZXMgJyArICdmb3IgZGV0YWlscy4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50Kys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICAgICAgaWYgKGlzUmVxdWlyZWQpIHtcbiAgICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkICcgKyAoJ2luIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGBudWxsYC4nKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYHVuZGVmaW5lZGAuJykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNoYWluZWRDaGVja1R5cGUgPSBjaGVja1R5cGUuYmluZChudWxsLCBmYWxzZSk7XG4gICAgY2hhaW5lZENoZWNrVHlwZS5pc1JlcXVpcmVkID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgdHJ1ZSk7XG5cbiAgICByZXR1cm4gY2hhaW5lZENoZWNrVHlwZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKGV4cGVjdGVkVHlwZSkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gZXhwZWN0ZWRUeXBlKSB7XG4gICAgICAgIC8vIGBwcm9wVmFsdWVgIGJlaW5nIGluc3RhbmNlIG9mLCBzYXksIGRhdGUvcmVnZXhwLCBwYXNzIHRoZSAnb2JqZWN0J1xuICAgICAgICAvLyBjaGVjaywgYnV0IHdlIGNhbiBvZmZlciBhIG1vcmUgcHJlY2lzZSBlcnJvciBtZXNzYWdlIGhlcmUgcmF0aGVyIHRoYW5cbiAgICAgICAgLy8gJ29mIHR5cGUgYG9iamVjdGAnLlxuICAgICAgICB2YXIgcHJlY2lzZVR5cGUgPSBnZXRQcmVjaXNlVHlwZShwcm9wVmFsdWUpO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByZWNpc2VUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdgJyArIGV4cGVjdGVkVHlwZSArICdgLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQW55VHlwZUNoZWNrZXIoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGwpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAodHlwZW9mIHR5cGVDaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIGFycmF5T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gYXJyYXkuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBpLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJ1snICsgaSArICddJywgUmVhY3RQcm9wVHlwZXNTZWNyZXRfMSk7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBpZiAoIWlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYSBzaW5nbGUgUmVhY3RFbGVtZW50LicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudFR5cGVUeXBlQ2hlY2tlcigpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBpZiAoIXJlYWN0SXMuaXNWYWxpZEVsZW1lbnRUeXBlKHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYSBzaW5nbGUgUmVhY3RFbGVtZW50IHR5cGUuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVJbnN0YW5jZVR5cGVDaGVja2VyKGV4cGVjdGVkQ2xhc3MpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICghKHByb3BzW3Byb3BOYW1lXSBpbnN0YW5jZW9mIGV4cGVjdGVkQ2xhc3MpKSB7XG4gICAgICAgIHZhciBleHBlY3RlZENsYXNzTmFtZSA9IGV4cGVjdGVkQ2xhc3MubmFtZSB8fCBBTk9OWU1PVVM7XG4gICAgICAgIHZhciBhY3R1YWxDbGFzc05hbWUgPSBnZXRDbGFzc05hbWUocHJvcHNbcHJvcE5hbWVdKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgYWN0dWFsQ2xhc3NOYW1lICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdpbnN0YW5jZSBvZiBgJyArIGV4cGVjdGVkQ2xhc3NOYW1lICsgJ2AuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIoZXhwZWN0ZWRWYWx1ZXMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZXhwZWN0ZWRWYWx1ZXMpKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmckMShcbiAgICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50cyBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gYXJyYXksIGdvdCAnICsgYXJndW1lbnRzLmxlbmd0aCArICcgYXJndW1lbnRzLiAnICtcbiAgICAgICAgICAgICdBIGNvbW1vbiBtaXN0YWtlIGlzIHRvIHdyaXRlIG9uZU9mKHgsIHksIHopIGluc3RlYWQgb2Ygb25lT2YoW3gsIHksIHpdKS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmludFdhcm5pbmckMSgnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gYXJyYXkuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGlzKHByb3BWYWx1ZSwgZXhwZWN0ZWRWYWx1ZXNbaV0pKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHZhbHVlc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkVmFsdWVzLCBmdW5jdGlvbiByZXBsYWNlcihrZXksIHZhbHVlKSB7XG4gICAgICAgIHZhciB0eXBlID0gZ2V0UHJlY2lzZVR5cGUodmFsdWUpO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdmFsdWUgYCcgKyBTdHJpbmcocHJvcFZhbHVlKSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBvbmUgb2YgJyArIHZhbHVlc1N0cmluZyArICcuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBvYmplY3RPZi4nKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBvYmplY3QuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHByb3BWYWx1ZSkge1xuICAgICAgICBpZiAoaGFzJDEocHJvcFZhbHVlLCBrZXkpKSB7XG4gICAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0XzEpO1xuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIoYXJyYXlPZlR5cGVDaGVja2Vycykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhcnJheU9mVHlwZUNoZWNrZXJzKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHByaW50V2FybmluZyQxKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZSwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5T2ZUeXBlQ2hlY2tlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcbiAgICAgIGlmICh0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwcmludFdhcm5pbmckMShcbiAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUuIEV4cGVjdGVkIGFuIGFycmF5IG9mIGNoZWNrIGZ1bmN0aW9ucywgYnV0ICcgK1xuICAgICAgICAgICdyZWNlaXZlZCAnICsgZ2V0UG9zdGZpeEZvclR5cGVXYXJuaW5nKGNoZWNrZXIpICsgJyBhdCBpbmRleCAnICsgaSArICcuJ1xuICAgICAgICApO1xuICAgICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICAgIGlmIChjaGVja2VyKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgUmVhY3RQcm9wVHlwZXNTZWNyZXRfMSkgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlTm9kZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAoIWlzTm9kZShwcm9wc1twcm9wTmFtZV0pKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgUmVhY3ROb2RlLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHNoYXBlVHlwZXMpIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG4gICAgICAgIGlmICghY2hlY2tlcikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlcnJvciA9IGNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0XzEpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBhbGwga2V5cyBpbiBjYXNlIHNvbWUgYXJlIHJlcXVpcmVkIGJ1dCBtaXNzaW5nIGZyb21cbiAgICAgIC8vIHByb3BzLlxuICAgICAgdmFyIGFsbEtleXMgPSBvYmplY3RBc3NpZ24oe30sIHByb3BzW3Byb3BOYW1lXSwgc2hhcGVUeXBlcyk7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gYWxsS2V5cykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IHNoYXBlVHlwZXNba2V5XTtcbiAgICAgICAgaWYgKCFjaGVja2VyKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKFxuICAgICAgICAgICAgJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGtleSBgJyArIGtleSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLicgK1xuICAgICAgICAgICAgJ1xcbkJhZCBvYmplY3Q6ICcgKyBKU09OLnN0cmluZ2lmeShwcm9wc1twcm9wTmFtZV0sIG51bGwsICcgICcpICtcbiAgICAgICAgICAgICdcXG5WYWxpZCBrZXlzOiAnICsgIEpTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKHNoYXBlVHlwZXMpLCBudWxsLCAnICAnKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXRfMSk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzTm9kZShwcm9wVmFsdWUpIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wVmFsdWUpIHtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgcmV0dXJuICFwcm9wVmFsdWU7XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHByb3BWYWx1ZS5ldmVyeShpc05vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wVmFsdWUgPT09IG51bGwgfHwgaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKHByb3BWYWx1ZSk7XG4gICAgICAgIGlmIChpdGVyYXRvckZuKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKHByb3BWYWx1ZSk7XG4gICAgICAgICAgdmFyIHN0ZXA7XG4gICAgICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IHByb3BWYWx1ZS5lbnRyaWVzKSB7XG4gICAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICAgIGlmICghaXNOb2RlKHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEl0ZXJhdG9yIHdpbGwgcHJvdmlkZSBlbnRyeSBbayx2XSB0dXBsZXMgcmF0aGVyIHRoYW4gdmFsdWVzLlxuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICB2YXIgZW50cnkgPSBzdGVwLnZhbHVlO1xuICAgICAgICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTm9kZShlbnRyeVsxXSkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkge1xuICAgIC8vIE5hdGl2ZSBTeW1ib2wuXG4gICAgaWYgKHByb3BUeXBlID09PSAnc3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gZmFsc3kgdmFsdWUgY2FuJ3QgYmUgYSBTeW1ib2xcbiAgICBpZiAoIXByb3BWYWx1ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ10gPT09ICdTeW1ib2wnXG4gICAgaWYgKHByb3BWYWx1ZVsnQEB0b1N0cmluZ1RhZyddID09PSAnU3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgZm9yIG5vbi1zcGVjIGNvbXBsaWFudCBTeW1ib2xzIHdoaWNoIGFyZSBwb2x5ZmlsbGVkLlxuICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHByb3BWYWx1ZSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRXF1aXZhbGVudCBvZiBgdHlwZW9mYCBidXQgd2l0aCBzcGVjaWFsIGhhbmRsaW5nIGZvciBhcnJheSBhbmQgcmVnZXhwLlxuICBmdW5jdGlvbiBnZXRQcm9wVHlwZShwcm9wVmFsdWUpIHtcbiAgICB2YXIgcHJvcFR5cGUgPSB0eXBlb2YgcHJvcFZhbHVlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAnYXJyYXknO1xuICAgIH1cbiAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAvLyBPbGQgd2Via2l0cyAoYXQgbGVhc3QgdW50aWwgQW5kcm9pZCA0LjApIHJldHVybiAnZnVuY3Rpb24nIHJhdGhlciB0aGFuXG4gICAgICAvLyAnb2JqZWN0JyBmb3IgdHlwZW9mIGEgUmVnRXhwLiBXZSdsbCBub3JtYWxpemUgdGhpcyBoZXJlIHNvIHRoYXQgL2JsYS9cbiAgICAgIC8vIHBhc3NlcyBQcm9wVHlwZXMub2JqZWN0LlxuICAgICAgcmV0dXJuICdvYmplY3QnO1xuICAgIH1cbiAgICBpZiAoaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAnc3ltYm9sJztcbiAgICB9XG4gICAgcmV0dXJuIHByb3BUeXBlO1xuICB9XG5cbiAgLy8gVGhpcyBoYW5kbGVzIG1vcmUgdHlwZXMgdGhhbiBgZ2V0UHJvcFR5cGVgLiBPbmx5IHVzZWQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICAvLyBTZWUgYGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyYC5cbiAgZnVuY3Rpb24gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IHByb3BWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnICsgcHJvcFZhbHVlO1xuICAgIH1cbiAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgIGlmIChwcm9wVHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIHJldHVybiAnZGF0ZSc7XG4gICAgICB9IGVsc2UgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICByZXR1cm4gJ3JlZ2V4cCc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9wVHlwZTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBwb3N0Zml4ZWQgdG8gYSB3YXJuaW5nIGFib3V0IGFuIGludmFsaWQgdHlwZS5cbiAgLy8gRm9yIGV4YW1wbGUsIFwidW5kZWZpbmVkXCIgb3IgXCJvZiB0eXBlIGFycmF5XCJcbiAgZnVuY3Rpb24gZ2V0UG9zdGZpeEZvclR5cGVXYXJuaW5nKHZhbHVlKSB7XG4gICAgdmFyIHR5cGUgPSBnZXRQcmVjaXNlVHlwZSh2YWx1ZSk7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhcnJheSc6XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICByZXR1cm4gJ2FuICcgKyB0eXBlO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgIGNhc2UgJ3JlZ2V4cCc6XG4gICAgICAgIHJldHVybiAnYSAnICsgdHlwZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybnMgY2xhc3MgbmFtZSBvZiB0aGUgb2JqZWN0LCBpZiBhbnkuXG4gIGZ1bmN0aW9uIGdldENsYXNzTmFtZShwcm9wVmFsdWUpIHtcbiAgICBpZiAoIXByb3BWYWx1ZS5jb25zdHJ1Y3RvciB8fCAhcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWUpIHtcbiAgICAgIHJldHVybiBBTk9OWU1PVVM7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZTtcbiAgfVxuXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gY2hlY2tQcm9wVHlwZXNfMTtcbiAgUmVhY3RQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGUgPSBjaGVja1Byb3BUeXBlc18xLnJlc2V0V2FybmluZ0NhY2hlO1xuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlcztcblxuICByZXR1cm4gUmVhY3RQcm9wVHlwZXM7XG59O1xuXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uKCkge31cbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb25XaXRoUmVzZXQoKSB7fVxuZW1wdHlGdW5jdGlvbldpdGhSZXNldC5yZXNldFdhcm5pbmdDYWNoZSA9IGVtcHR5RnVuY3Rpb247XG5cbnZhciBmYWN0b3J5V2l0aFRocm93aW5nU2hpbXMgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gc2hpbShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgIGlmIChzZWNyZXQgPT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0XzEpIHtcbiAgICAgIC8vIEl0IGlzIHN0aWxsIHNhZmUgd2hlbiBjYWxsZWQgZnJvbSBSZWFjdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcihcbiAgICAgICdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICdVc2UgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKCkgdG8gY2FsbCB0aGVtLiAnICtcbiAgICAgICdSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJ1xuICAgICk7XG4gICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgdGhyb3cgZXJyO1xuICB9ICBzaGltLmlzUmVxdWlyZWQgPSBzaGltO1xuICBmdW5jdGlvbiBnZXRTaGltKCkge1xuICAgIHJldHVybiBzaGltO1xuICB9ICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IHNoaW0sXG4gICAgYm9vbDogc2hpbSxcbiAgICBmdW5jOiBzaGltLFxuICAgIG51bWJlcjogc2hpbSxcbiAgICBvYmplY3Q6IHNoaW0sXG4gICAgc3RyaW5nOiBzaGltLFxuICAgIHN5bWJvbDogc2hpbSxcblxuICAgIGFueTogc2hpbSxcbiAgICBhcnJheU9mOiBnZXRTaGltLFxuICAgIGVsZW1lbnQ6IHNoaW0sXG4gICAgZWxlbWVudFR5cGU6IHNoaW0sXG4gICAgaW5zdGFuY2VPZjogZ2V0U2hpbSxcbiAgICBub2RlOiBzaGltLFxuICAgIG9iamVjdE9mOiBnZXRTaGltLFxuICAgIG9uZU9mOiBnZXRTaGltLFxuICAgIG9uZU9mVHlwZTogZ2V0U2hpbSxcbiAgICBzaGFwZTogZ2V0U2hpbSxcbiAgICBleGFjdDogZ2V0U2hpbSxcblxuICAgIGNoZWNrUHJvcFR5cGVzOiBlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0LFxuICAgIHJlc2V0V2FybmluZ0NhY2hlOiBlbXB0eUZ1bmN0aW9uXG4gIH07XG5cbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcblxudmFyIHByb3BUeXBlcyA9IGNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZ1bmN0aW9uIChtb2R1bGUpIHtcbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIFJlYWN0SXMgPSByZWFjdElzO1xuXG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IGRldmVsb3BtZW50IGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIHZhciB0aHJvd09uRGlyZWN0QWNjZXNzID0gdHJ1ZTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5V2l0aFR5cGVDaGVja2VycyhSZWFjdElzLmlzRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XG59IGVsc2Uge1xuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBwcm9kdWN0aW9uIGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zKCk7XG59XG59KTtcblxudmFyIGV2ZW50ID0gY3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24gKG1vZHVsZSwgZXhwb3J0cykge1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5vbiA9IG9uO1xuZXhwb3J0cy5vZmYgPSBvZmY7XG5mdW5jdGlvbiBvbihlbCwgZXZlbnROYW1lLCBjYWxsYmFjaywgb3B0cykge1xuICBvcHRzID0gb3B0cyB8fCBmYWxzZTtcbiAgaWYgKGVsLmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICBlbC5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgY2FsbGJhY2ssIG9wdHMpO1xuICB9IGVsc2UgaWYgKGVsLmF0dGFjaEV2ZW50KSB7XG4gICAgZWwuYXR0YWNoRXZlbnQoXCJvblwiICsgZXZlbnROYW1lLCBmdW5jdGlvbiAoZSkge1xuICAgICAgY2FsbGJhY2suY2FsbChlbCwgZSB8fCB3aW5kb3cuZXZlbnQpO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9mZihlbCwgZXZlbnROYW1lLCBjYWxsYmFjaywgb3B0cykge1xuICBvcHRzID0gb3B0cyB8fCBmYWxzZTtcbiAgaWYgKGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgY2FsbGJhY2ssIG9wdHMpO1xuICB9IGVsc2UgaWYgKGVsLmRldGFjaEV2ZW50KSB7XG4gICAgZWwuZGV0YWNoRXZlbnQoXCJvblwiICsgZXZlbnROYW1lLCBjYWxsYmFjayk7XG4gIH1cbn1cbn0pO1xuXG51bndyYXBFeHBvcnRzKGV2ZW50KTtcbnZhciBldmVudF8xID0gZXZlbnQub247XG52YXIgZXZlbnRfMiA9IGV2ZW50Lm9mZjtcblxudmFyIHNjcm9sbFBhcmVudCA9IGNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZ1bmN0aW9uIChtb2R1bGUsIGV4cG9ydHMpIHtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxuLyoqXG4gKiBAZmlsZU92ZXJ2aWV3IEZpbmQgc2Nyb2xsIHBhcmVudFxuICovXG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIGlmICghKG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICB9XG5cbiAgdmFyIGV4Y2x1ZGVTdGF0aWNQYXJlbnQgPSBub2RlLnN0eWxlLnBvc2l0aW9uID09PSAnYWJzb2x1dGUnO1xuICB2YXIgb3ZlcmZsb3dSZWdleCA9IC8oc2Nyb2xsfGF1dG8pLztcbiAgdmFyIHBhcmVudCA9IG5vZGU7XG5cbiAgd2hpbGUgKHBhcmVudCkge1xuICAgIGlmICghcGFyZW50LnBhcmVudE5vZGUpIHtcbiAgICAgIHJldHVybiBub2RlLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgIH1cblxuICAgIHZhciBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHBhcmVudCk7XG4gICAgdmFyIHBvc2l0aW9uID0gc3R5bGUucG9zaXRpb247XG4gICAgdmFyIG92ZXJmbG93ID0gc3R5bGUub3ZlcmZsb3c7XG4gICAgdmFyIG92ZXJmbG93WCA9IHN0eWxlWydvdmVyZmxvdy14J107XG4gICAgdmFyIG92ZXJmbG93WSA9IHN0eWxlWydvdmVyZmxvdy15J107XG5cbiAgICBpZiAocG9zaXRpb24gPT09ICdzdGF0aWMnICYmIGV4Y2x1ZGVTdGF0aWNQYXJlbnQpIHtcbiAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG92ZXJmbG93UmVnZXgudGVzdChvdmVyZmxvdykgJiYgb3ZlcmZsb3dSZWdleC50ZXN0KG92ZXJmbG93WCkgJiYgb3ZlcmZsb3dSZWdleC50ZXN0KG92ZXJmbG93WSkpIHtcbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfVxuXG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XG4gIH1cblxuICByZXR1cm4gbm9kZS5vd25lckRvY3VtZW50IHx8IG5vZGUuZG9jdW1lbnRFbGVtZW50IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbn07XG59KTtcblxudW53cmFwRXhwb3J0cyhzY3JvbGxQYXJlbnQpO1xuXG52YXIgZGVib3VuY2VfMSA9IGNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZ1bmN0aW9uIChtb2R1bGUsIGV4cG9ydHMpIHtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlYm91bmNlO1xuZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7XG4gIHZhciB0aW1lb3V0ID0gdm9pZCAwO1xuICB2YXIgYXJncyA9IHZvaWQgMDtcbiAgdmFyIGNvbnRleHQgPSB2b2lkIDA7XG4gIHZhciB0aW1lc3RhbXAgPSB2b2lkIDA7XG4gIHZhciByZXN1bHQgPSB2b2lkIDA7XG5cbiAgdmFyIGxhdGVyID0gZnVuY3Rpb24gbGF0ZXIoKSB7XG4gICAgdmFyIGxhc3QgPSArbmV3IERhdGUoKSAtIHRpbWVzdGFtcDtcblxuICAgIGlmIChsYXN0IDwgd2FpdCAmJiBsYXN0ID49IDApIHtcbiAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0IC0gbGFzdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgaWYgKCFpbW1lZGlhdGUpIHtcbiAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICAgICAgY29udGV4dCA9IG51bGw7XG4gICAgICAgICAgYXJncyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGRlYm91bmNlZCgpIHtcbiAgICBjb250ZXh0ID0gdGhpcztcbiAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgIHRpbWVzdGFtcCA9ICtuZXcgRGF0ZSgpO1xuXG4gICAgdmFyIGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7XG4gICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7XG4gICAgfVxuXG4gICAgaWYgKGNhbGxOb3cpIHtcbiAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICBjb250ZXh0ID0gbnVsbDtcbiAgICAgIGFyZ3MgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG59KTtcblxudW53cmFwRXhwb3J0cyhkZWJvdW5jZV8xKTtcblxudmFyIHRocm90dGxlXzEgPSBjcmVhdGVDb21tb25qc01vZHVsZShmdW5jdGlvbiAobW9kdWxlLCBleHBvcnRzKSB7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB0aHJvdHRsZTtcbi8qZXNsaW50LWRpc2FibGUgKi9cbmZ1bmN0aW9uIHRocm90dGxlKGZuLCB0aHJlc2hob2xkLCBzY29wZSkge1xuICB0aHJlc2hob2xkIHx8ICh0aHJlc2hob2xkID0gMjUwKTtcbiAgdmFyIGxhc3QsIGRlZmVyVGltZXI7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNvbnRleHQgPSBzY29wZSB8fCB0aGlzO1xuXG4gICAgdmFyIG5vdyA9ICtuZXcgRGF0ZSgpLFxuICAgICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgIGlmIChsYXN0ICYmIG5vdyA8IGxhc3QgKyB0aHJlc2hob2xkKSB7XG4gICAgICAvLyBob2xkIG9uIHRvIGl0XG4gICAgICBjbGVhclRpbWVvdXQoZGVmZXJUaW1lcik7XG4gICAgICBkZWZlclRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxhc3QgPSBub3c7XG4gICAgICAgIGZuLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgfSwgdGhyZXNoaG9sZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhc3QgPSBub3c7XG4gICAgICBmbi5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICB9XG4gIH07XG59XG59KTtcblxudW53cmFwRXhwb3J0cyh0aHJvdHRsZV8xKTtcblxudmFyIGxpYiA9IGNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZ1bmN0aW9uIChtb2R1bGUsIGV4cG9ydHMpIHtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZm9yY2VWaXNpYmxlID0gZXhwb3J0cy5mb3JjZUNoZWNrID0gZXhwb3J0cy5sYXp5bG9hZCA9IHVuZGVmaW5lZDtcblxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxuXG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChSZWFjdF9fZGVmYXVsdCk7XG5cblxuXG52YXIgX3JlYWN0RG9tMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVhY3REb21fX2RlZmF1bHQpO1xuXG5cblxudmFyIF9wcm9wVHlwZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChwcm9wVHlwZXMpO1xuXG5cblxuXG5cbnZhciBfc2Nyb2xsUGFyZW50MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoc2Nyb2xsUGFyZW50KTtcblxuXG5cbnZhciBfZGVib3VuY2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChkZWJvdW5jZV8xKTtcblxuXG5cbnZhciBfdGhyb3R0bGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdCh0aHJvdHRsZV8xKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfSAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJlYWN0LWxhenlsb2FkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuXG52YXIgZGVmYXVsdEJvdW5kaW5nQ2xpZW50UmVjdCA9IHsgdG9wOiAwLCByaWdodDogMCwgYm90dG9tOiAwLCBsZWZ0OiAwLCB3aWR0aDogMCwgaGVpZ2h0OiAwIH07XG52YXIgTElTVEVOX0ZMQUcgPSAnZGF0YS1sYXp5bG9hZC1saXN0ZW5lZCc7XG52YXIgbGlzdGVuZXJzID0gW107XG52YXIgcGVuZGluZyA9IFtdO1xuXG4vLyB0cnkgdG8gaGFuZGxlIHBhc3NpdmUgZXZlbnRzXG52YXIgcGFzc2l2ZUV2ZW50U3VwcG9ydGVkID0gZmFsc2U7XG50cnkge1xuICB2YXIgb3B0cyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ3Bhc3NpdmUnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICBwYXNzaXZlRXZlbnRTdXBwb3J0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfSk7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0JywgbnVsbCwgb3B0cyk7XG59IGNhdGNoIChlKSB7fVxuLy8gaWYgdGhleSBhcmUgc3VwcG9ydGVkLCBzZXR1cCB0aGUgb3B0aW9uYWwgcGFyYW1zXG4vLyBJTVBPUlRBTlQ6IEZBTFNFIGRvdWJsZXMgYXMgdGhlIGRlZmF1bHQgQ0FQVFVSRSB2YWx1ZSFcbnZhciBwYXNzaXZlRXZlbnQgPSBwYXNzaXZlRXZlbnRTdXBwb3J0ZWQgPyB7IGNhcHR1cmU6IGZhbHNlLCBwYXNzaXZlOiB0cnVlIH0gOiBmYWxzZTtcblxuLyoqXG4gKiBDaGVjayBpZiBgY29tcG9uZW50YCBpcyB2aXNpYmxlIGluIG92ZXJmbG93IGNvbnRhaW5lciBgcGFyZW50YFxuICogQHBhcmFtICB7bm9kZX0gY29tcG9uZW50IFJlYWN0IGNvbXBvbmVudFxuICogQHBhcmFtICB7bm9kZX0gcGFyZW50ICAgIGNvbXBvbmVudCdzIHNjcm9sbCBwYXJlbnRcbiAqIEByZXR1cm4ge2Jvb2x9XG4gKi9cbnZhciBjaGVja092ZXJmbG93VmlzaWJsZSA9IGZ1bmN0aW9uIGNoZWNrT3ZlcmZsb3dWaXNpYmxlKGNvbXBvbmVudCwgcGFyZW50KSB7XG4gIHZhciBub2RlID0gX3JlYWN0RG9tMi5kZWZhdWx0LmZpbmRET01Ob2RlKGNvbXBvbmVudCk7XG4gIC8vIGNvbnN0IG5vZGUgPSBjb21wb25lbnQucmVmO1xuXG4gIHZhciBwYXJlbnRUb3AgPSB2b2lkIDA7XG4gIHZhciBwYXJlbnRMZWZ0ID0gdm9pZCAwO1xuICB2YXIgcGFyZW50SGVpZ2h0ID0gdm9pZCAwO1xuICB2YXIgcGFyZW50V2lkdGggPSB2b2lkIDA7XG5cbiAgdHJ5IHtcbiAgICB2YXIgX3BhcmVudCRnZXRCb3VuZGluZ0NsID0gcGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgcGFyZW50VG9wID0gX3BhcmVudCRnZXRCb3VuZGluZ0NsLnRvcDtcbiAgICBwYXJlbnRMZWZ0ID0gX3BhcmVudCRnZXRCb3VuZGluZ0NsLmxlZnQ7XG4gICAgcGFyZW50SGVpZ2h0ID0gX3BhcmVudCRnZXRCb3VuZGluZ0NsLmhlaWdodDtcbiAgICBwYXJlbnRXaWR0aCA9IF9wYXJlbnQkZ2V0Qm91bmRpbmdDbC53aWR0aDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHBhcmVudFRvcCA9IGRlZmF1bHRCb3VuZGluZ0NsaWVudFJlY3QudG9wO1xuICAgIHBhcmVudExlZnQgPSBkZWZhdWx0Qm91bmRpbmdDbGllbnRSZWN0LmxlZnQ7XG4gICAgcGFyZW50SGVpZ2h0ID0gZGVmYXVsdEJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQ7XG4gICAgcGFyZW50V2lkdGggPSBkZWZhdWx0Qm91bmRpbmdDbGllbnRSZWN0LndpZHRoO1xuICB9XG5cbiAgdmFyIHdpbmRvd0lubmVySGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIHZhciB3aW5kb3dJbm5lcldpZHRoID0gd2luZG93LmlubmVyV2lkdGggfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuXG4gIC8vIGNhbGN1bGF0ZSB0b3AgYW5kIGhlaWdodCBvZiB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSBlbGVtZW50J3Mgc2Nyb2xsUGFyZW50IGFuZCB2aWV3cG9ydFxuICB2YXIgaW50ZXJzZWN0aW9uVG9wID0gTWF0aC5tYXgocGFyZW50VG9wLCAwKTsgLy8gaW50ZXJzZWN0aW9uJ3MgdG9wIHJlbGF0aXZlIHRvIHZpZXdwb3J0XG4gIHZhciBpbnRlcnNlY3Rpb25MZWZ0ID0gTWF0aC5tYXgocGFyZW50TGVmdCwgMCk7IC8vIGludGVyc2VjdGlvbidzIGxlZnQgcmVsYXRpdmUgdG8gdmlld3BvcnRcbiAgdmFyIGludGVyc2VjdGlvbkhlaWdodCA9IE1hdGgubWluKHdpbmRvd0lubmVySGVpZ2h0LCBwYXJlbnRUb3AgKyBwYXJlbnRIZWlnaHQpIC0gaW50ZXJzZWN0aW9uVG9wOyAvLyBoZWlnaHRcbiAgdmFyIGludGVyc2VjdGlvbldpZHRoID0gTWF0aC5taW4od2luZG93SW5uZXJXaWR0aCwgcGFyZW50TGVmdCArIHBhcmVudFdpZHRoKSAtIGludGVyc2VjdGlvbkxlZnQ7IC8vIHdpZHRoXG5cbiAgLy8gY2hlY2sgd2hldGhlciB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluIHRoZSBpbnRlcnNlY3Rpb25cbiAgdmFyIHRvcCA9IHZvaWQgMDtcbiAgdmFyIGxlZnQgPSB2b2lkIDA7XG4gIHZhciBoZWlnaHQgPSB2b2lkIDA7XG4gIHZhciB3aWR0aCA9IHZvaWQgMDtcblxuICB0cnkge1xuICAgIHZhciBfbm9kZSRnZXRCb3VuZGluZ0NsaWUgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgdG9wID0gX25vZGUkZ2V0Qm91bmRpbmdDbGllLnRvcDtcbiAgICBsZWZ0ID0gX25vZGUkZ2V0Qm91bmRpbmdDbGllLmxlZnQ7XG4gICAgaGVpZ2h0ID0gX25vZGUkZ2V0Qm91bmRpbmdDbGllLmhlaWdodDtcbiAgICB3aWR0aCA9IF9ub2RlJGdldEJvdW5kaW5nQ2xpZS53aWR0aDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRvcCA9IGRlZmF1bHRCb3VuZGluZ0NsaWVudFJlY3QudG9wO1xuICAgIGxlZnQgPSBkZWZhdWx0Qm91bmRpbmdDbGllbnRSZWN0LmxlZnQ7XG4gICAgaGVpZ2h0ID0gZGVmYXVsdEJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQ7XG4gICAgd2lkdGggPSBkZWZhdWx0Qm91bmRpbmdDbGllbnRSZWN0LndpZHRoO1xuICB9XG5cbiAgdmFyIG9mZnNldFRvcCA9IHRvcCAtIGludGVyc2VjdGlvblRvcDsgLy8gZWxlbWVudCdzIHRvcCByZWxhdGl2ZSB0byBpbnRlcnNlY3Rpb25cbiAgdmFyIG9mZnNldExlZnQgPSBsZWZ0IC0gaW50ZXJzZWN0aW9uTGVmdDsgLy8gZWxlbWVudCdzIGxlZnQgcmVsYXRpdmUgdG8gaW50ZXJzZWN0aW9uXG5cbiAgdmFyIG9mZnNldHMgPSBBcnJheS5pc0FycmF5KGNvbXBvbmVudC5wcm9wcy5vZmZzZXQpID8gY29tcG9uZW50LnByb3BzLm9mZnNldCA6IFtjb21wb25lbnQucHJvcHMub2Zmc2V0LCBjb21wb25lbnQucHJvcHMub2Zmc2V0XTsgLy8gQmUgY29tcGF0aWJsZSB3aXRoIHByZXZpb3VzIEFQSVxuXG4gIHJldHVybiBvZmZzZXRUb3AgLSBvZmZzZXRzWzBdIDw9IGludGVyc2VjdGlvbkhlaWdodCAmJiBvZmZzZXRUb3AgKyBoZWlnaHQgKyBvZmZzZXRzWzFdID49IDAgJiYgb2Zmc2V0TGVmdCAtIG9mZnNldHNbMF0gPD0gaW50ZXJzZWN0aW9uV2lkdGggJiYgb2Zmc2V0TGVmdCArIHdpZHRoICsgb2Zmc2V0c1sxXSA+PSAwO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiBgY29tcG9uZW50YCBpcyB2aXNpYmxlIGluIGRvY3VtZW50XG4gKiBAcGFyYW0gIHtub2RlfSBjb21wb25lbnQgUmVhY3QgY29tcG9uZW50XG4gKiBAcmV0dXJuIHtib29sfVxuICovXG52YXIgY2hlY2tOb3JtYWxWaXNpYmxlID0gZnVuY3Rpb24gY2hlY2tOb3JtYWxWaXNpYmxlKGNvbXBvbmVudCkge1xuICB2YXIgbm9kZSA9IF9yZWFjdERvbTIuZGVmYXVsdC5maW5kRE9NTm9kZShjb21wb25lbnQpO1xuICAvLyBjb25zdCBub2RlID0gY29tcG9uZW50LnJlZjtcblxuICAvLyBJZiB0aGlzIGVsZW1lbnQgaXMgaGlkZGVuIGJ5IGNzcyBydWxlcyBzb21laG93LCBpdCdzIGRlZmluaXRlbHkgaW52aXNpYmxlXG4gIGlmICghKG5vZGUub2Zmc2V0V2lkdGggfHwgbm9kZS5vZmZzZXRIZWlnaHQgfHwgbm9kZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCkpIHJldHVybiBmYWxzZTtcblxuICB2YXIgdG9wID0gdm9pZCAwO1xuICB2YXIgZWxlbWVudEhlaWdodCA9IHZvaWQgMDtcblxuICB0cnkge1xuICAgIHZhciBfbm9kZSRnZXRCb3VuZGluZ0NsaWUyID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIHRvcCA9IF9ub2RlJGdldEJvdW5kaW5nQ2xpZTIudG9wO1xuICAgIGVsZW1lbnRIZWlnaHQgPSBfbm9kZSRnZXRCb3VuZGluZ0NsaWUyLmhlaWdodDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRvcCA9IGRlZmF1bHRCb3VuZGluZ0NsaWVudFJlY3QudG9wO1xuICAgIGVsZW1lbnRIZWlnaHQgPSBkZWZhdWx0Qm91bmRpbmdDbGllbnRSZWN0LmhlaWdodDtcbiAgfVxuXG4gIHZhciB3aW5kb3dJbm5lckhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuXG4gIHZhciBvZmZzZXRzID0gQXJyYXkuaXNBcnJheShjb21wb25lbnQucHJvcHMub2Zmc2V0KSA/IGNvbXBvbmVudC5wcm9wcy5vZmZzZXQgOiBbY29tcG9uZW50LnByb3BzLm9mZnNldCwgY29tcG9uZW50LnByb3BzLm9mZnNldF07IC8vIEJlIGNvbXBhdGlibGUgd2l0aCBwcmV2aW91cyBBUElcblxuICByZXR1cm4gdG9wIC0gb2Zmc2V0c1swXSA8PSB3aW5kb3dJbm5lckhlaWdodCAmJiB0b3AgKyBlbGVtZW50SGVpZ2h0ICsgb2Zmc2V0c1sxXSA+PSAwO1xufTtcblxuLyoqXG4gKiBEZXRlY3QgaWYgZWxlbWVudCBpcyB2aXNpYmxlIGluIHZpZXdwb3J0LCBpZiBzbywgc2V0IGB2aXNpYmxlYCBzdGF0ZSB0byB0cnVlLlxuICogSWYgYG9uY2VgIHByb3AgaXMgcHJvdmlkZWQgdHJ1ZSwgcmVtb3ZlIGNvbXBvbmVudCBhcyBsaXN0ZW5lciBhZnRlciBjaGVja1Zpc2libGVcbiAqXG4gKiBAcGFyYW0gIHtSZWFjdH0gY29tcG9uZW50ICAgUmVhY3QgY29tcG9uZW50IHRoYXQgcmVzcG9uZCB0byBzY3JvbGwgYW5kIHJlc2l6ZVxuICovXG52YXIgY2hlY2tWaXNpYmxlID0gZnVuY3Rpb24gY2hlY2tWaXNpYmxlKGNvbXBvbmVudCkge1xuICB2YXIgbm9kZSA9IF9yZWFjdERvbTIuZGVmYXVsdC5maW5kRE9NTm9kZShjb21wb25lbnQpO1xuICAvLyBjb25zdCBub2RlID0gY29tcG9uZW50LnJlZjtcbiAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwYXJlbnQgPSAoMCwgX3Njcm9sbFBhcmVudDIuZGVmYXVsdCkobm9kZSk7XG4gIHZhciBpc092ZXJmbG93ID0gY29tcG9uZW50LnByb3BzLm92ZXJmbG93ICYmIHBhcmVudCAhPT0gbm9kZS5vd25lckRvY3VtZW50ICYmIHBhcmVudCAhPT0gZG9jdW1lbnQgJiYgcGFyZW50ICE9PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIHZhciB2aXNpYmxlID0gaXNPdmVyZmxvdyA/IGNoZWNrT3ZlcmZsb3dWaXNpYmxlKGNvbXBvbmVudCwgcGFyZW50KSA6IGNoZWNrTm9ybWFsVmlzaWJsZShjb21wb25lbnQpO1xuICBpZiAodmlzaWJsZSkge1xuICAgIC8vIEF2b2lkIGV4dHJhIHJlbmRlciBpZiBwcmV2aW91c2x5IGlzIHZpc2libGVcbiAgICBpZiAoIWNvbXBvbmVudC52aXNpYmxlKSB7XG4gICAgICBpZiAoY29tcG9uZW50LnByb3BzLm9uY2UpIHtcbiAgICAgICAgcGVuZGluZy5wdXNoKGNvbXBvbmVudCk7XG4gICAgICB9XG5cbiAgICAgIGNvbXBvbmVudC52aXNpYmxlID0gdHJ1ZTtcbiAgICAgIGNvbXBvbmVudC5mb3JjZVVwZGF0ZSgpO1xuICAgIH1cbiAgfSBlbHNlIGlmICghKGNvbXBvbmVudC5wcm9wcy5vbmNlICYmIGNvbXBvbmVudC52aXNpYmxlKSkge1xuICAgIGNvbXBvbmVudC52aXNpYmxlID0gZmFsc2U7XG4gICAgaWYgKGNvbXBvbmVudC5wcm9wcy51bm1vdW50SWZJbnZpc2libGUpIHtcbiAgICAgIGNvbXBvbmVudC5mb3JjZVVwZGF0ZSgpO1xuICAgIH1cbiAgfVxufTtcblxudmFyIHB1cmdlUGVuZGluZyA9IGZ1bmN0aW9uIHB1cmdlUGVuZGluZygpIHtcbiAgcGVuZGluZy5mb3JFYWNoKGZ1bmN0aW9uIChjb21wb25lbnQpIHtcbiAgICB2YXIgaW5kZXggPSBsaXN0ZW5lcnMuaW5kZXhPZihjb21wb25lbnQpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIGxpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfSk7XG5cbiAgcGVuZGluZyA9IFtdO1xufTtcblxudmFyIGxhenlMb2FkSGFuZGxlciA9IGZ1bmN0aW9uIGxhenlMb2FkSGFuZGxlcigpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lcnNbaV07XG4gICAgY2hlY2tWaXNpYmxlKGxpc3RlbmVyKTtcbiAgfVxuICAvLyBSZW1vdmUgYG9uY2VgIGNvbXBvbmVudCBpbiBsaXN0ZW5lcnNcbiAgcHVyZ2VQZW5kaW5nKCk7XG59O1xuXG4vKipcbiAqIEZvcmNlcyB0aGUgY29tcG9uZW50IHRvIGRpc3BsYXkgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBlbGVtZW50IGlzIHZpc2libGUgaW4gdGhlIHZpZXdwb3J0LlxuICovXG52YXIgZm9yY2VWaXNpYmxlID0gZnVuY3Rpb24gZm9yY2VWaXNpYmxlKCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7ICsraSkge1xuICAgIHZhciBsaXN0ZW5lciA9IGxpc3RlbmVyc1tpXTtcbiAgICBsaXN0ZW5lci52aXNpYmxlID0gdHJ1ZTtcbiAgICBsaXN0ZW5lci5mb3JjZVVwZGF0ZSgpO1xuICB9XG4gIC8vIFJlbW92ZSBgb25jZWAgY29tcG9uZW50IGluIGxpc3RlbmVyc1xuICBwdXJnZVBlbmRpbmcoKTtcbn07XG5cbi8vIERlcGVuZGluZyBvbiBjb21wb25lbnQncyBwcm9wc1xudmFyIGRlbGF5VHlwZSA9IHZvaWQgMDtcbnZhciBmaW5hbExhenlMb2FkSGFuZGxlciA9IG51bGw7XG5cbnZhciBpc1N0cmluZyA9IGZ1bmN0aW9uIGlzU3RyaW5nKHN0cmluZykge1xuICByZXR1cm4gdHlwZW9mIHN0cmluZyA9PT0gJ3N0cmluZyc7XG59O1xuXG52YXIgTGF6eUxvYWQgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoTGF6eUxvYWQsIF9Db21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIExhenlMb2FkKHByb3BzKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIExhenlMb2FkKTtcblxuICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChMYXp5TG9hZC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKExhenlMb2FkKSkuY2FsbCh0aGlzLCBwcm9wcykpO1xuXG4gICAgX3RoaXMudmlzaWJsZSA9IGZhbHNlO1xuICAgIC8vIHRoaXMuc2V0UmVmID0gdGhpcy5zZXRSZWYuYmluZCh0aGlzKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICAvLyBzZXRSZWYoZWxlbWVudCkge1xuICAvLyAgIGlmIChlbGVtZW50KSB7XG4gIC8vICAgICB0aGlzLnJlZiA9IGVsZW1lbnQ7XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgX2NyZWF0ZUNsYXNzKExhenlMb2FkLCBbe1xuICAgIGtleTogJ2NvbXBvbmVudERpZE1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAvLyBJdCdzIHVubGlrZWx5IHRvIGNoYW5nZSBkZWxheSB0eXBlIG9uIHRoZSBmbHksIHRoaXMgaXMgbWFpbmx5XG4gICAgICAvLyBkZXNpZ25lZCBmb3IgdGVzdHNcbiAgICAgIHZhciBzY3JvbGxwb3J0ID0gd2luZG93O1xuICAgICAgdmFyIHNjcm9sbENvbnRhaW5lciA9IHRoaXMucHJvcHMuc2Nyb2xsQ29udGFpbmVyO1xuXG4gICAgICBpZiAoc2Nyb2xsQ29udGFpbmVyKSB7XG4gICAgICAgIGlmIChpc1N0cmluZyhzY3JvbGxDb250YWluZXIpKSB7XG4gICAgICAgICAgc2Nyb2xscG9ydCA9IHNjcm9sbHBvcnQuZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzY3JvbGxDb250YWluZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgbmVlZFJlc2V0RmluYWxMYXp5TG9hZEhhbmRsZXIgPSB0aGlzLnByb3BzLmRlYm91bmNlICE9PSB1bmRlZmluZWQgJiYgZGVsYXlUeXBlID09PSAndGhyb3R0bGUnIHx8IGRlbGF5VHlwZSA9PT0gJ2RlYm91bmNlJyAmJiB0aGlzLnByb3BzLmRlYm91bmNlID09PSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChuZWVkUmVzZXRGaW5hbExhenlMb2FkSGFuZGxlcikge1xuICAgICAgICAoMCwgZXZlbnQub2ZmKShzY3JvbGxwb3J0LCAnc2Nyb2xsJywgZmluYWxMYXp5TG9hZEhhbmRsZXIsIHBhc3NpdmVFdmVudCk7XG4gICAgICAgICgwLCBldmVudC5vZmYpKHdpbmRvdywgJ3Jlc2l6ZScsIGZpbmFsTGF6eUxvYWRIYW5kbGVyLCBwYXNzaXZlRXZlbnQpO1xuICAgICAgICBmaW5hbExhenlMb2FkSGFuZGxlciA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICghZmluYWxMYXp5TG9hZEhhbmRsZXIpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuZGVib3VuY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGZpbmFsTGF6eUxvYWRIYW5kbGVyID0gKDAsIF9kZWJvdW5jZTIuZGVmYXVsdCkobGF6eUxvYWRIYW5kbGVyLCB0eXBlb2YgdGhpcy5wcm9wcy5kZWJvdW5jZSA9PT0gJ251bWJlcicgPyB0aGlzLnByb3BzLmRlYm91bmNlIDogMzAwKTtcbiAgICAgICAgICBkZWxheVR5cGUgPSAnZGVib3VuY2UnO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMudGhyb3R0bGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGZpbmFsTGF6eUxvYWRIYW5kbGVyID0gKDAsIF90aHJvdHRsZTIuZGVmYXVsdCkobGF6eUxvYWRIYW5kbGVyLCB0eXBlb2YgdGhpcy5wcm9wcy50aHJvdHRsZSA9PT0gJ251bWJlcicgPyB0aGlzLnByb3BzLnRocm90dGxlIDogMzAwKTtcbiAgICAgICAgICBkZWxheVR5cGUgPSAndGhyb3R0bGUnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpbmFsTGF6eUxvYWRIYW5kbGVyID0gbGF6eUxvYWRIYW5kbGVyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnByb3BzLm92ZXJmbG93KSB7XG4gICAgICAgIHZhciBwYXJlbnQgPSAoMCwgX3Njcm9sbFBhcmVudDIuZGVmYXVsdCkoX3JlYWN0RG9tMi5kZWZhdWx0LmZpbmRET01Ob2RlKHRoaXMpKTtcbiAgICAgICAgLy8gY29uc3QgcGFyZW50ID0gc2Nyb2xsUGFyZW50KHRoaXMucmVmKTtcbiAgICAgICAgaWYgKHBhcmVudCAmJiB0eXBlb2YgcGFyZW50LmdldEF0dHJpYnV0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHZhciBsaXN0ZW5lckNvdW50ID0gMSArICtwYXJlbnQuZ2V0QXR0cmlidXRlKExJU1RFTl9GTEFHKTtcbiAgICAgICAgICBpZiAobGlzdGVuZXJDb3VudCA9PT0gMSkge1xuICAgICAgICAgICAgcGFyZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGZpbmFsTGF6eUxvYWRIYW5kbGVyLCBwYXNzaXZlRXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwYXJlbnQuc2V0QXR0cmlidXRlKExJU1RFTl9GTEFHLCBsaXN0ZW5lckNvdW50KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChsaXN0ZW5lcnMubGVuZ3RoID09PSAwIHx8IG5lZWRSZXNldEZpbmFsTGF6eUxvYWRIYW5kbGVyKSB7XG4gICAgICAgIHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgICAgc2Nyb2xsID0gX3Byb3BzLnNjcm9sbCxcbiAgICAgICAgICAgIHJlc2l6ZSA9IF9wcm9wcy5yZXNpemU7XG5cblxuICAgICAgICBpZiAoc2Nyb2xsKSB7XG4gICAgICAgICAgKDAsIGV2ZW50Lm9uKShzY3JvbGxwb3J0LCAnc2Nyb2xsJywgZmluYWxMYXp5TG9hZEhhbmRsZXIsIHBhc3NpdmVFdmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzaXplKSB7XG4gICAgICAgICAgKDAsIGV2ZW50Lm9uKSh3aW5kb3csICdyZXNpemUnLCBmaW5hbExhenlMb2FkSGFuZGxlciwgcGFzc2l2ZUV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsaXN0ZW5lcnMucHVzaCh0aGlzKTtcbiAgICAgIGNoZWNrVmlzaWJsZSh0aGlzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy52aXNpYmxlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5wcm9wcy5vdmVyZmxvdykge1xuICAgICAgICB2YXIgcGFyZW50ID0gKDAsIF9zY3JvbGxQYXJlbnQyLmRlZmF1bHQpKF9yZWFjdERvbTIuZGVmYXVsdC5maW5kRE9NTm9kZSh0aGlzKSk7XG4gICAgICAgIC8vIGNvbnN0IHBhcmVudCA9IHNjcm9sbFBhcmVudCh0aGlzLnJlZik7XG4gICAgICAgIGlmIChwYXJlbnQgJiYgdHlwZW9mIHBhcmVudC5nZXRBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB2YXIgbGlzdGVuZXJDb3VudCA9ICtwYXJlbnQuZ2V0QXR0cmlidXRlKExJU1RFTl9GTEFHKSAtIDE7XG4gICAgICAgICAgaWYgKGxpc3RlbmVyQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHBhcmVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBmaW5hbExhenlMb2FkSGFuZGxlciwgcGFzc2l2ZUV2ZW50KTtcbiAgICAgICAgICAgIHBhcmVudC5yZW1vdmVBdHRyaWJ1dGUoTElTVEVOX0ZMQUcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJlbnQuc2V0QXR0cmlidXRlKExJU1RFTl9GTEFHLCBsaXN0ZW5lckNvdW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGluZGV4ID0gbGlzdGVuZXJzLmluZGV4T2YodGhpcyk7XG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAobGlzdGVuZXJzLmxlbmd0aCA9PT0gMCAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAoMCwgZXZlbnQub2ZmKSh3aW5kb3csICdyZXNpemUnLCBmaW5hbExhenlMb2FkSGFuZGxlciwgcGFzc2l2ZUV2ZW50KTtcbiAgICAgICAgKDAsIGV2ZW50Lm9mZikod2luZG93LCAnc2Nyb2xsJywgZmluYWxMYXp5TG9hZEhhbmRsZXIsIHBhc3NpdmVFdmVudCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncmVuZGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIHRoaXMudmlzaWJsZSA/IHRoaXMucHJvcHMuY2hpbGRyZW4gOiB0aGlzLnByb3BzLnBsYWNlaG9sZGVyID8gdGhpcy5wcm9wcy5wbGFjZWhvbGRlciA6IF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCdkaXYnLCB7IHN0eWxlOiB7IGhlaWdodDogdGhpcy5wcm9wcy5oZWlnaHQgfSwgY2xhc3NOYW1lOiAnbGF6eWxvYWQtcGxhY2Vob2xkZXInIH0pO1xuICAgICAgLy8gPHNwYW4gcmVmPXt0aGlzLnNldFJlZn0gY2xhc3NOYW1lPVwibGF6eWxvYWQtY3VzdG9tLXBsYWNlaG9sZGVyXCI+XG4gICAgICAvLyAgIHt0aGlzLnByb3BzLnBsYWNlaG9sZGVyfVxuICAgICAgLy8gPC9zcGFuPiA6XG4gICAgICAvLyA8ZGl2IHJlZj17dGhpcy5zZXRSZWZ9IHN0eWxlPXt7IGhlaWdodDogdGhpcy5wcm9wcy5oZWlnaHQgfX0gY2xhc3NOYW1lPVwibGF6eWxvYWQtcGxhY2Vob2xkZXJcIiAvPjtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gTGF6eUxvYWQ7XG59KFJlYWN0X19kZWZhdWx0LkNvbXBvbmVudCk7XG5cbkxhenlMb2FkLnByb3BUeXBlcyA9IHtcbiAgb25jZTogX3Byb3BUeXBlczIuZGVmYXVsdC5ib29sLFxuICBoZWlnaHQ6IF9wcm9wVHlwZXMyLmRlZmF1bHQub25lT2ZUeXBlKFtfcHJvcFR5cGVzMi5kZWZhdWx0Lm51bWJlciwgX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmddKSxcbiAgb2Zmc2V0OiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9uZU9mVHlwZShbX3Byb3BUeXBlczIuZGVmYXVsdC5udW1iZXIsIF9wcm9wVHlwZXMyLmRlZmF1bHQuYXJyYXlPZihfcHJvcFR5cGVzMi5kZWZhdWx0Lm51bWJlcildKSxcbiAgb3ZlcmZsb3c6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYm9vbCxcbiAgcmVzaXplOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmJvb2wsXG4gIHNjcm9sbDogX3Byb3BUeXBlczIuZGVmYXVsdC5ib29sLFxuICBjaGlsZHJlbjogX3Byb3BUeXBlczIuZGVmYXVsdC5ub2RlLFxuICB0aHJvdHRsZTogX3Byb3BUeXBlczIuZGVmYXVsdC5vbmVPZlR5cGUoW19wcm9wVHlwZXMyLmRlZmF1bHQubnVtYmVyLCBfcHJvcFR5cGVzMi5kZWZhdWx0LmJvb2xdKSxcbiAgZGVib3VuY2U6IF9wcm9wVHlwZXMyLmRlZmF1bHQub25lT2ZUeXBlKFtfcHJvcFR5cGVzMi5kZWZhdWx0Lm51bWJlciwgX3Byb3BUeXBlczIuZGVmYXVsdC5ib29sXSksXG4gIHBsYWNlaG9sZGVyOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm5vZGUsXG4gIHNjcm9sbENvbnRhaW5lcjogX3Byb3BUeXBlczIuZGVmYXVsdC5vbmVPZlR5cGUoW19wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLCBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9iamVjdF0pLFxuICB1bm1vdW50SWZJbnZpc2libGU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYm9vbFxufTtcblxuTGF6eUxvYWQuZGVmYXVsdFByb3BzID0ge1xuICBvbmNlOiBmYWxzZSxcbiAgb2Zmc2V0OiAwLFxuICBvdmVyZmxvdzogZmFsc2UsXG4gIHJlc2l6ZTogZmFsc2UsXG4gIHNjcm9sbDogdHJ1ZSxcbiAgdW5tb3VudElmSW52aXNpYmxlOiBmYWxzZVxufTtcblxudmFyIGdldERpc3BsYXlOYW1lID0gZnVuY3Rpb24gZ2V0RGlzcGxheU5hbWUoV3JhcHBlZENvbXBvbmVudCkge1xuICByZXR1cm4gV3JhcHBlZENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBXcmFwcGVkQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudCc7XG59O1xuXG52YXIgZGVjb3JhdG9yID0gZnVuY3Rpb24gZGVjb3JhdG9yKCkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIHJldHVybiBmdW5jdGlvbiBsYXp5bG9hZChXcmFwcGVkQ29tcG9uZW50KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChfQ29tcG9uZW50Mikge1xuICAgICAgX2luaGVyaXRzKExhenlMb2FkRGVjb3JhdGVkLCBfQ29tcG9uZW50Mik7XG5cbiAgICAgIGZ1bmN0aW9uIExhenlMb2FkRGVjb3JhdGVkKCkge1xuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTGF6eUxvYWREZWNvcmF0ZWQpO1xuXG4gICAgICAgIHZhciBfdGhpczIgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoTGF6eUxvYWREZWNvcmF0ZWQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihMYXp5TG9hZERlY29yYXRlZCkpLmNhbGwodGhpcykpO1xuXG4gICAgICAgIF90aGlzMi5kaXNwbGF5TmFtZSA9ICdMYXp5TG9hZCcgKyBnZXREaXNwbGF5TmFtZShXcmFwcGVkQ29tcG9uZW50KTtcbiAgICAgICAgcmV0dXJuIF90aGlzMjtcbiAgICAgIH1cblxuICAgICAgX2NyZWF0ZUNsYXNzKExhenlMb2FkRGVjb3JhdGVkLCBbe1xuICAgICAgICBrZXk6ICdyZW5kZXInLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICAgIHJldHVybiBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgIExhenlMb2FkLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFdyYXBwZWRDb21wb25lbnQsIHRoaXMucHJvcHMpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfV0pO1xuXG4gICAgICByZXR1cm4gTGF6eUxvYWREZWNvcmF0ZWQ7XG4gICAgfShSZWFjdF9fZGVmYXVsdC5Db21wb25lbnQpO1xuICB9O1xufTtcblxuZXhwb3J0cy5sYXp5bG9hZCA9IGRlY29yYXRvcjtcbmV4cG9ydHMuZGVmYXVsdCA9IExhenlMb2FkO1xuZXhwb3J0cy5mb3JjZUNoZWNrID0gbGF6eUxvYWRIYW5kbGVyO1xuZXhwb3J0cy5mb3JjZVZpc2libGUgPSBmb3JjZVZpc2libGU7XG59KTtcblxudmFyIExhenlsb2FkID0gdW53cmFwRXhwb3J0cyhsaWIpO1xudmFyIGxpYl8xID0gbGliLmZvcmNlVmlzaWJsZTtcbnZhciBsaWJfMiA9IGxpYi5mb3JjZUNoZWNrO1xudmFyIGxpYl8zID0gbGliLmxhenlsb2FkO1xuXG52YXIgc3R5bGVzJDkgPSB7XCJpbWFnZS1jb250YWluZXJcIjpcIkltYWdlLW1vZHVsZV9faW1hZ2UtY29udGFpbmVyXCIsXCJpbWFnZS1yYXRpby0xNi05XCI6XCJJbWFnZS1tb2R1bGVfX2ltYWdlLXJhdGlvLTE2LTlcIixcImltYWdlLXJhdGlvLTQtM1wiOlwiSW1hZ2UtbW9kdWxlX19pbWFnZS1yYXRpby00LTNcIixcImltYWdlLXJhdGlvLTEtMVwiOlwiSW1hZ2UtbW9kdWxlX19pbWFnZS1yYXRpby0xLTFcIixcImltYWdlLXJlc3BvbnNpdmVcIjpcIkltYWdlLW1vZHVsZV9faW1hZ2UtcmVzcG9uc2l2ZVwiLFwiaW1hZ2UtY29udGFpbmVyLWltYWdlXCI6XCJJbWFnZS1tb2R1bGVfX2ltYWdlLWNvbnRhaW5lci1pbWFnZVwifTtcblxudmFyIEltYWdlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoSW1hZ2UsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEltYWdlKTtcblxuICBmdW5jdGlvbiBJbWFnZSgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgSW1hZ2UpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJnZXRDb21wb25lbnRcIiwgZnVuY3Rpb24gKHNyY1NldCwgbGF6eWxvYWQsIGNsYXNzTmFtZSwgcmVzcG9uc2l2ZSwgaW5zaWRlQ29udGFpbmVyLCBwcm9wcykge1xuICAgICAgaWYgKGxhenlsb2FkKSB7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChMYXp5bG9hZCwge1xuICAgICAgICAgIG9mZnNldDogWzUwLCA1MF0sXG4gICAgICAgICAgaGVpZ2h0OiAyMDAsXG4gICAgICAgICAgcmVzaXplOiB0cnVlLFxuICAgICAgICAgIG9uY2U6IHRydWVcbiAgICAgICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwgX2V4dGVuZHMoe1xuICAgICAgICAgIGNsYXNzTmFtZTogW2luc2lkZUNvbnRhaW5lciAmJiBzdHlsZXMkOVsnaW1hZ2UtY29udGFpbmVyLWltYWdlJ10sIHJlc3BvbnNpdmUgJiYgc3R5bGVzJDlbJ2ltYWdlLXJlc3BvbnNpdmUnXSwgY2xhc3NOYW1lXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpLFxuICAgICAgICAgIHNyY1NldDogc3JjU2V0XG4gICAgICAgIH0sIHByb3BzKSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiaW1nXCIsIF9leHRlbmRzKHtcbiAgICAgICAgICBjbGFzc05hbWU6IFtpbnNpZGVDb250YWluZXIgJiYgc3R5bGVzJDlbJ2ltYWdlLWNvbnRhaW5lci1pbWFnZSddLCByZXNwb25zaXZlICYmIHN0eWxlcyQ5WydpbWFnZS1yZXNwb25zaXZlJ10sIGNsYXNzTmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKSxcbiAgICAgICAgICBzcmNTZXQ6IHNyY1NldFxuICAgICAgICB9LCBwcm9wcykpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEltYWdlLCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgICAgcmVzcG9uc2l2ZSA9IF90aGlzJHByb3BzLnJlc3BvbnNpdmUsXG4gICAgICAgICAgYXNwZWN0UmF0aW8gPSBfdGhpcyRwcm9wcy5hc3BlY3RSYXRpbyxcbiAgICAgICAgICBzcmMyeCA9IF90aGlzJHByb3BzLnNyYzJ4LFxuICAgICAgICAgIGxhenlsb2FkID0gX3RoaXMkcHJvcHMubGF6eWxvYWQsXG4gICAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIFtcImNsYXNzTmFtZVwiLCBcInJlc3BvbnNpdmVcIiwgXCJhc3BlY3RSYXRpb1wiLCBcInNyYzJ4XCIsIFwibGF6eWxvYWRcIl0pO1xuXG4gICAgICB2YXIgc3JjU2V0ID0gc3JjMnggPyBcIlwiLmNvbmNhdCh0aGlzLnByb3BzLnNyYywgXCIgMXgsIFwiKS5jb25jYXQoc3JjMngsIFwiIDJ4XCIpIDogJyc7XG5cbiAgICAgIGlmIChhc3BlY3RSYXRpbykge1xuICAgICAgICB2YXIgX2FzcGVjdFJhdGlvJHNwbGl0JG1hID0gYXNwZWN0UmF0aW8uc3BsaXQoJzonKS5tYXAoTnVtYmVyKSxcbiAgICAgICAgICAgIF9hc3BlY3RSYXRpbyRzcGxpdCRtYTIgPSBfc2xpY2VkVG9BcnJheShfYXNwZWN0UmF0aW8kc3BsaXQkbWEsIDIpLFxuICAgICAgICAgICAgd2lkdGggPSBfYXNwZWN0UmF0aW8kc3BsaXQkbWEyWzBdLFxuICAgICAgICAgICAgaGVpZ2h0ID0gX2FzcGVjdFJhdGlvJHNwbGl0JG1hMlsxXTtcblxuICAgICAgICB2YXIgcGFkZGluZ0JvdHRvbSA9IGhlaWdodCAvIHdpZHRoICogMTAwO1xuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICAgIGNsYXNzTmFtZTogc3R5bGVzJDlbJ2ltYWdlLWNvbnRhaW5lciddLFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBwYWRkaW5nQm90dG9tOiBcIlwiLmNvbmNhdChwYWRkaW5nQm90dG9tLCBcIiVcIilcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHRoaXMuZ2V0Q29tcG9uZW50KHNyY1NldCwgISFsYXp5bG9hZCwgY2xhc3NOYW1lLCAhIXJlc3BvbnNpdmUsIHRydWUsIHByb3BzKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudChzcmNTZXQsICEhbGF6eWxvYWQsIGNsYXNzTmFtZSwgISFyZXNwb25zaXZlLCBmYWxzZSwgcHJvcHMpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBJbWFnZTtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShJbWFnZSwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICByZXNwb25zaXZlOiB0cnVlLFxuICBhc3BlY3RSYXRpbzogdW5kZWZpbmVkLFxuICBzcmMyeDogdW5kZWZpbmVkLFxuICBsYXp5bG9hZDogdHJ1ZVxufSk7XG5cbnZhciBzdHlsZXMkYSA9IHtcImNvbnRhaW5lclwiOlwiRmxleC1tb2R1bGVfX2NvbnRhaW5lclwiLFwiY29udGFpbmVyLWZsdWlkXCI6XCJGbGV4LW1vZHVsZV9fY29udGFpbmVyLWZsdWlkXCIsXCJjb250YWluZXItc21cIjpcIkZsZXgtbW9kdWxlX19jb250YWluZXItc21cIixcImNvbnRhaW5lci1tZFwiOlwiRmxleC1tb2R1bGVfX2NvbnRhaW5lci1tZFwiLFwiY29udGFpbmVyLWxnXCI6XCJGbGV4LW1vZHVsZV9fY29udGFpbmVyLWxnXCIsXCJjb250YWluZXIteGxcIjpcIkZsZXgtbW9kdWxlX19jb250YWluZXIteGxcIixcInJvd1wiOlwiRmxleC1tb2R1bGVfX3Jvd1wiLFwibm8tZ3V0dGVyc1wiOlwiRmxleC1tb2R1bGVfX25vLWd1dHRlcnNcIixcImNvbFwiOlwiRmxleC1tb2R1bGVfX2NvbFwiLFwiY29sLTFcIjpcIkZsZXgtbW9kdWxlX19jb2wtMVwiLFwiY29sLTJcIjpcIkZsZXgtbW9kdWxlX19jb2wtMlwiLFwiY29sLTNcIjpcIkZsZXgtbW9kdWxlX19jb2wtM1wiLFwiY29sLTRcIjpcIkZsZXgtbW9kdWxlX19jb2wtNFwiLFwiY29sLTVcIjpcIkZsZXgtbW9kdWxlX19jb2wtNVwiLFwiY29sLTZcIjpcIkZsZXgtbW9kdWxlX19jb2wtNlwiLFwiY29sLTdcIjpcIkZsZXgtbW9kdWxlX19jb2wtN1wiLFwiY29sLThcIjpcIkZsZXgtbW9kdWxlX19jb2wtOFwiLFwiY29sLTlcIjpcIkZsZXgtbW9kdWxlX19jb2wtOVwiLFwiY29sLTEwXCI6XCJGbGV4LW1vZHVsZV9fY29sLTEwXCIsXCJjb2wtMTFcIjpcIkZsZXgtbW9kdWxlX19jb2wtMTFcIixcImNvbC0xMlwiOlwiRmxleC1tb2R1bGVfX2NvbC0xMlwiLFwiY29sLWF1dG9cIjpcIkZsZXgtbW9kdWxlX19jb2wtYXV0b1wiLFwiY29sLXNtLTFcIjpcIkZsZXgtbW9kdWxlX19jb2wtc20tMVwiLFwiY29sLXNtLTJcIjpcIkZsZXgtbW9kdWxlX19jb2wtc20tMlwiLFwiY29sLXNtLTNcIjpcIkZsZXgtbW9kdWxlX19jb2wtc20tM1wiLFwiY29sLXNtLTRcIjpcIkZsZXgtbW9kdWxlX19jb2wtc20tNFwiLFwiY29sLXNtLTVcIjpcIkZsZXgtbW9kdWxlX19jb2wtc20tNVwiLFwiY29sLXNtLTZcIjpcIkZsZXgtbW9kdWxlX19jb2wtc20tNlwiLFwiY29sLXNtLTdcIjpcIkZsZXgtbW9kdWxlX19jb2wtc20tN1wiLFwiY29sLXNtLThcIjpcIkZsZXgtbW9kdWxlX19jb2wtc20tOFwiLFwiY29sLXNtLTlcIjpcIkZsZXgtbW9kdWxlX19jb2wtc20tOVwiLFwiY29sLXNtLTEwXCI6XCJGbGV4LW1vZHVsZV9fY29sLXNtLTEwXCIsXCJjb2wtc20tMTFcIjpcIkZsZXgtbW9kdWxlX19jb2wtc20tMTFcIixcImNvbC1zbS0xMlwiOlwiRmxleC1tb2R1bGVfX2NvbC1zbS0xMlwiLFwiY29sLXNtXCI6XCJGbGV4LW1vZHVsZV9fY29sLXNtXCIsXCJjb2wtc20tYXV0b1wiOlwiRmxleC1tb2R1bGVfX2NvbC1zbS1hdXRvXCIsXCJjb2wtbWQtMVwiOlwiRmxleC1tb2R1bGVfX2NvbC1tZC0xXCIsXCJjb2wtbWQtMlwiOlwiRmxleC1tb2R1bGVfX2NvbC1tZC0yXCIsXCJjb2wtbWQtM1wiOlwiRmxleC1tb2R1bGVfX2NvbC1tZC0zXCIsXCJjb2wtbWQtNFwiOlwiRmxleC1tb2R1bGVfX2NvbC1tZC00XCIsXCJjb2wtbWQtNVwiOlwiRmxleC1tb2R1bGVfX2NvbC1tZC01XCIsXCJjb2wtbWQtNlwiOlwiRmxleC1tb2R1bGVfX2NvbC1tZC02XCIsXCJjb2wtbWQtN1wiOlwiRmxleC1tb2R1bGVfX2NvbC1tZC03XCIsXCJjb2wtbWQtOFwiOlwiRmxleC1tb2R1bGVfX2NvbC1tZC04XCIsXCJjb2wtbWQtOVwiOlwiRmxleC1tb2R1bGVfX2NvbC1tZC05XCIsXCJjb2wtbWQtMTBcIjpcIkZsZXgtbW9kdWxlX19jb2wtbWQtMTBcIixcImNvbC1tZC0xMVwiOlwiRmxleC1tb2R1bGVfX2NvbC1tZC0xMVwiLFwiY29sLW1kLTEyXCI6XCJGbGV4LW1vZHVsZV9fY29sLW1kLTEyXCIsXCJjb2wtbWRcIjpcIkZsZXgtbW9kdWxlX19jb2wtbWRcIixcImNvbC1tZC1hdXRvXCI6XCJGbGV4LW1vZHVsZV9fY29sLW1kLWF1dG9cIixcImNvbC1sZy0xXCI6XCJGbGV4LW1vZHVsZV9fY29sLWxnLTFcIixcImNvbC1sZy0yXCI6XCJGbGV4LW1vZHVsZV9fY29sLWxnLTJcIixcImNvbC1sZy0zXCI6XCJGbGV4LW1vZHVsZV9fY29sLWxnLTNcIixcImNvbC1sZy00XCI6XCJGbGV4LW1vZHVsZV9fY29sLWxnLTRcIixcImNvbC1sZy01XCI6XCJGbGV4LW1vZHVsZV9fY29sLWxnLTVcIixcImNvbC1sZy02XCI6XCJGbGV4LW1vZHVsZV9fY29sLWxnLTZcIixcImNvbC1sZy03XCI6XCJGbGV4LW1vZHVsZV9fY29sLWxnLTdcIixcImNvbC1sZy04XCI6XCJGbGV4LW1vZHVsZV9fY29sLWxnLThcIixcImNvbC1sZy05XCI6XCJGbGV4LW1vZHVsZV9fY29sLWxnLTlcIixcImNvbC1sZy0xMFwiOlwiRmxleC1tb2R1bGVfX2NvbC1sZy0xMFwiLFwiY29sLWxnLTExXCI6XCJGbGV4LW1vZHVsZV9fY29sLWxnLTExXCIsXCJjb2wtbGctMTJcIjpcIkZsZXgtbW9kdWxlX19jb2wtbGctMTJcIixcImNvbC1sZ1wiOlwiRmxleC1tb2R1bGVfX2NvbC1sZ1wiLFwiY29sLWxnLWF1dG9cIjpcIkZsZXgtbW9kdWxlX19jb2wtbGctYXV0b1wiLFwiY29sLXhsLTFcIjpcIkZsZXgtbW9kdWxlX19jb2wteGwtMVwiLFwiY29sLXhsLTJcIjpcIkZsZXgtbW9kdWxlX19jb2wteGwtMlwiLFwiY29sLXhsLTNcIjpcIkZsZXgtbW9kdWxlX19jb2wteGwtM1wiLFwiY29sLXhsLTRcIjpcIkZsZXgtbW9kdWxlX19jb2wteGwtNFwiLFwiY29sLXhsLTVcIjpcIkZsZXgtbW9kdWxlX19jb2wteGwtNVwiLFwiY29sLXhsLTZcIjpcIkZsZXgtbW9kdWxlX19jb2wteGwtNlwiLFwiY29sLXhsLTdcIjpcIkZsZXgtbW9kdWxlX19jb2wteGwtN1wiLFwiY29sLXhsLThcIjpcIkZsZXgtbW9kdWxlX19jb2wteGwtOFwiLFwiY29sLXhsLTlcIjpcIkZsZXgtbW9kdWxlX19jb2wteGwtOVwiLFwiY29sLXhsLTEwXCI6XCJGbGV4LW1vZHVsZV9fY29sLXhsLTEwXCIsXCJjb2wteGwtMTFcIjpcIkZsZXgtbW9kdWxlX19jb2wteGwtMTFcIixcImNvbC14bC0xMlwiOlwiRmxleC1tb2R1bGVfX2NvbC14bC0xMlwiLFwiY29sLXhsXCI6XCJGbGV4LW1vZHVsZV9fY29sLXhsXCIsXCJjb2wteGwtYXV0b1wiOlwiRmxleC1tb2R1bGVfX2NvbC14bC1hdXRvXCIsXCJyb3ctY29scy0xXCI6XCJGbGV4LW1vZHVsZV9fcm93LWNvbHMtMVwiLFwicm93LWNvbHMtMlwiOlwiRmxleC1tb2R1bGVfX3Jvdy1jb2xzLTJcIixcInJvdy1jb2xzLTNcIjpcIkZsZXgtbW9kdWxlX19yb3ctY29scy0zXCIsXCJyb3ctY29scy00XCI6XCJGbGV4LW1vZHVsZV9fcm93LWNvbHMtNFwiLFwicm93LWNvbHMtNVwiOlwiRmxleC1tb2R1bGVfX3Jvdy1jb2xzLTVcIixcInJvdy1jb2xzLTZcIjpcIkZsZXgtbW9kdWxlX19yb3ctY29scy02XCIsXCJvcmRlci1maXJzdFwiOlwiRmxleC1tb2R1bGVfX29yZGVyLWZpcnN0XCIsXCJvcmRlci1sYXN0XCI6XCJGbGV4LW1vZHVsZV9fb3JkZXItbGFzdFwiLFwib3JkZXItMFwiOlwiRmxleC1tb2R1bGVfX29yZGVyLTBcIixcIm9yZGVyLTFcIjpcIkZsZXgtbW9kdWxlX19vcmRlci0xXCIsXCJvcmRlci0yXCI6XCJGbGV4LW1vZHVsZV9fb3JkZXItMlwiLFwib3JkZXItM1wiOlwiRmxleC1tb2R1bGVfX29yZGVyLTNcIixcIm9yZGVyLTRcIjpcIkZsZXgtbW9kdWxlX19vcmRlci00XCIsXCJvcmRlci01XCI6XCJGbGV4LW1vZHVsZV9fb3JkZXItNVwiLFwib3JkZXItNlwiOlwiRmxleC1tb2R1bGVfX29yZGVyLTZcIixcIm9yZGVyLTdcIjpcIkZsZXgtbW9kdWxlX19vcmRlci03XCIsXCJvcmRlci04XCI6XCJGbGV4LW1vZHVsZV9fb3JkZXItOFwiLFwib3JkZXItOVwiOlwiRmxleC1tb2R1bGVfX29yZGVyLTlcIixcIm9yZGVyLTEwXCI6XCJGbGV4LW1vZHVsZV9fb3JkZXItMTBcIixcIm9yZGVyLTExXCI6XCJGbGV4LW1vZHVsZV9fb3JkZXItMTFcIixcIm9yZGVyLTEyXCI6XCJGbGV4LW1vZHVsZV9fb3JkZXItMTJcIixcIm9mZnNldC0xXCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LTFcIixcIm9mZnNldC0yXCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LTJcIixcIm9mZnNldC0zXCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LTNcIixcIm9mZnNldC00XCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LTRcIixcIm9mZnNldC01XCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LTVcIixcIm9mZnNldC02XCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LTZcIixcIm9mZnNldC03XCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LTdcIixcIm9mZnNldC04XCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LThcIixcIm9mZnNldC05XCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LTlcIixcIm9mZnNldC0xMFwiOlwiRmxleC1tb2R1bGVfX29mZnNldC0xMFwiLFwib2Zmc2V0LTExXCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LTExXCIsXCJyb3ctY29scy1zbS0xXCI6XCJGbGV4LW1vZHVsZV9fcm93LWNvbHMtc20tMVwiLFwicm93LWNvbHMtc20tMlwiOlwiRmxleC1tb2R1bGVfX3Jvdy1jb2xzLXNtLTJcIixcInJvdy1jb2xzLXNtLTNcIjpcIkZsZXgtbW9kdWxlX19yb3ctY29scy1zbS0zXCIsXCJyb3ctY29scy1zbS00XCI6XCJGbGV4LW1vZHVsZV9fcm93LWNvbHMtc20tNFwiLFwicm93LWNvbHMtc20tNVwiOlwiRmxleC1tb2R1bGVfX3Jvdy1jb2xzLXNtLTVcIixcInJvdy1jb2xzLXNtLTZcIjpcIkZsZXgtbW9kdWxlX19yb3ctY29scy1zbS02XCIsXCJvcmRlci1zbS1maXJzdFwiOlwiRmxleC1tb2R1bGVfX29yZGVyLXNtLWZpcnN0XCIsXCJvcmRlci1zbS1sYXN0XCI6XCJGbGV4LW1vZHVsZV9fb3JkZXItc20tbGFzdFwiLFwib3JkZXItc20tMFwiOlwiRmxleC1tb2R1bGVfX29yZGVyLXNtLTBcIixcIm9yZGVyLXNtLTFcIjpcIkZsZXgtbW9kdWxlX19vcmRlci1zbS0xXCIsXCJvcmRlci1zbS0yXCI6XCJGbGV4LW1vZHVsZV9fb3JkZXItc20tMlwiLFwib3JkZXItc20tM1wiOlwiRmxleC1tb2R1bGVfX29yZGVyLXNtLTNcIixcIm9yZGVyLXNtLTRcIjpcIkZsZXgtbW9kdWxlX19vcmRlci1zbS00XCIsXCJvcmRlci1zbS01XCI6XCJGbGV4LW1vZHVsZV9fb3JkZXItc20tNVwiLFwib3JkZXItc20tNlwiOlwiRmxleC1tb2R1bGVfX29yZGVyLXNtLTZcIixcIm9yZGVyLXNtLTdcIjpcIkZsZXgtbW9kdWxlX19vcmRlci1zbS03XCIsXCJvcmRlci1zbS04XCI6XCJGbGV4LW1vZHVsZV9fb3JkZXItc20tOFwiLFwib3JkZXItc20tOVwiOlwiRmxleC1tb2R1bGVfX29yZGVyLXNtLTlcIixcIm9yZGVyLXNtLTEwXCI6XCJGbGV4LW1vZHVsZV9fb3JkZXItc20tMTBcIixcIm9yZGVyLXNtLTExXCI6XCJGbGV4LW1vZHVsZV9fb3JkZXItc20tMTFcIixcIm9yZGVyLXNtLTEyXCI6XCJGbGV4LW1vZHVsZV9fb3JkZXItc20tMTJcIixcIm9mZnNldC1zbS0wXCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LXNtLTBcIixcIm9mZnNldC1zbS0xXCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LXNtLTFcIixcIm9mZnNldC1zbS0yXCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LXNtLTJcIixcIm9mZnNldC1zbS0zXCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LXNtLTNcIixcIm9mZnNldC1zbS00XCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LXNtLTRcIixcIm9mZnNldC1zbS01XCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LXNtLTVcIixcIm9mZnNldC1zbS02XCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LXNtLTZcIixcIm9mZnNldC1zbS03XCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LXNtLTdcIixcIm9mZnNldC1zbS04XCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LXNtLThcIixcIm9mZnNldC1zbS05XCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LXNtLTlcIixcIm9mZnNldC1zbS0xMFwiOlwiRmxleC1tb2R1bGVfX29mZnNldC1zbS0xMFwiLFwib2Zmc2V0LXNtLTExXCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LXNtLTExXCIsXCJyb3ctY29scy1tZC0xXCI6XCJGbGV4LW1vZHVsZV9fcm93LWNvbHMtbWQtMVwiLFwicm93LWNvbHMtbWQtMlwiOlwiRmxleC1tb2R1bGVfX3Jvdy1jb2xzLW1kLTJcIixcInJvdy1jb2xzLW1kLTNcIjpcIkZsZXgtbW9kdWxlX19yb3ctY29scy1tZC0zXCIsXCJyb3ctY29scy1tZC00XCI6XCJGbGV4LW1vZHVsZV9fcm93LWNvbHMtbWQtNFwiLFwicm93LWNvbHMtbWQtNVwiOlwiRmxleC1tb2R1bGVfX3Jvdy1jb2xzLW1kLTVcIixcInJvdy1jb2xzLW1kLTZcIjpcIkZsZXgtbW9kdWxlX19yb3ctY29scy1tZC02XCIsXCJvcmRlci1tZC1maXJzdFwiOlwiRmxleC1tb2R1bGVfX29yZGVyLW1kLWZpcnN0XCIsXCJvcmRlci1tZC1sYXN0XCI6XCJGbGV4LW1vZHVsZV9fb3JkZXItbWQtbGFzdFwiLFwib3JkZXItbWQtMFwiOlwiRmxleC1tb2R1bGVfX29yZGVyLW1kLTBcIixcIm9yZGVyLW1kLTFcIjpcIkZsZXgtbW9kdWxlX19vcmRlci1tZC0xXCIsXCJvcmRlci1tZC0yXCI6XCJGbGV4LW1vZHVsZV9fb3JkZXItbWQtMlwiLFwib3JkZXItbWQtM1wiOlwiRmxleC1tb2R1bGVfX29yZGVyLW1kLTNcIixcIm9yZGVyLW1kLTRcIjpcIkZsZXgtbW9kdWxlX19vcmRlci1tZC00XCIsXCJvcmRlci1tZC01XCI6XCJGbGV4LW1vZHVsZV9fb3JkZXItbWQtNVwiLFwib3JkZXItbWQtNlwiOlwiRmxleC1tb2R1bGVfX29yZGVyLW1kLTZcIixcIm9yZGVyLW1kLTdcIjpcIkZsZXgtbW9kdWxlX19vcmRlci1tZC03XCIsXCJvcmRlci1tZC04XCI6XCJGbGV4LW1vZHVsZV9fb3JkZXItbWQtOFwiLFwib3JkZXItbWQtOVwiOlwiRmxleC1tb2R1bGVfX29yZGVyLW1kLTlcIixcIm9yZGVyLW1kLTEwXCI6XCJGbGV4LW1vZHVsZV9fb3JkZXItbWQtMTBcIixcIm9yZGVyLW1kLTExXCI6XCJGbGV4LW1vZHVsZV9fb3JkZXItbWQtMTFcIixcIm9yZGVyLW1kLTEyXCI6XCJGbGV4LW1vZHVsZV9fb3JkZXItbWQtMTJcIixcIm9mZnNldC1tZC0wXCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LW1kLTBcIixcIm9mZnNldC1tZC0xXCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LW1kLTFcIixcIm9mZnNldC1tZC0yXCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LW1kLTJcIixcIm9mZnNldC1tZC0zXCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LW1kLTNcIixcIm9mZnNldC1tZC00XCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LW1kLTRcIixcIm9mZnNldC1tZC01XCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LW1kLTVcIixcIm9mZnNldC1tZC02XCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LW1kLTZcIixcIm9mZnNldC1tZC03XCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LW1kLTdcIixcIm9mZnNldC1tZC04XCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LW1kLThcIixcIm9mZnNldC1tZC05XCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LW1kLTlcIixcIm9mZnNldC1tZC0xMFwiOlwiRmxleC1tb2R1bGVfX29mZnNldC1tZC0xMFwiLFwib2Zmc2V0LW1kLTExXCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LW1kLTExXCIsXCJyb3ctY29scy1sZy0xXCI6XCJGbGV4LW1vZHVsZV9fcm93LWNvbHMtbGctMVwiLFwicm93LWNvbHMtbGctMlwiOlwiRmxleC1tb2R1bGVfX3Jvdy1jb2xzLWxnLTJcIixcInJvdy1jb2xzLWxnLTNcIjpcIkZsZXgtbW9kdWxlX19yb3ctY29scy1sZy0zXCIsXCJyb3ctY29scy1sZy00XCI6XCJGbGV4LW1vZHVsZV9fcm93LWNvbHMtbGctNFwiLFwicm93LWNvbHMtbGctNVwiOlwiRmxleC1tb2R1bGVfX3Jvdy1jb2xzLWxnLTVcIixcInJvdy1jb2xzLWxnLTZcIjpcIkZsZXgtbW9kdWxlX19yb3ctY29scy1sZy02XCIsXCJvcmRlci1sZy1maXJzdFwiOlwiRmxleC1tb2R1bGVfX29yZGVyLWxnLWZpcnN0XCIsXCJvcmRlci1sZy1sYXN0XCI6XCJGbGV4LW1vZHVsZV9fb3JkZXItbGctbGFzdFwiLFwib3JkZXItbGctMFwiOlwiRmxleC1tb2R1bGVfX29yZGVyLWxnLTBcIixcIm9yZGVyLWxnLTFcIjpcIkZsZXgtbW9kdWxlX19vcmRlci1sZy0xXCIsXCJvcmRlci1sZy0yXCI6XCJGbGV4LW1vZHVsZV9fb3JkZXItbGctMlwiLFwib3JkZXItbGctM1wiOlwiRmxleC1tb2R1bGVfX29yZGVyLWxnLTNcIixcIm9yZGVyLWxnLTRcIjpcIkZsZXgtbW9kdWxlX19vcmRlci1sZy00XCIsXCJvcmRlci1sZy01XCI6XCJGbGV4LW1vZHVsZV9fb3JkZXItbGctNVwiLFwib3JkZXItbGctNlwiOlwiRmxleC1tb2R1bGVfX29yZGVyLWxnLTZcIixcIm9yZGVyLWxnLTdcIjpcIkZsZXgtbW9kdWxlX19vcmRlci1sZy03XCIsXCJvcmRlci1sZy04XCI6XCJGbGV4LW1vZHVsZV9fb3JkZXItbGctOFwiLFwib3JkZXItbGctOVwiOlwiRmxleC1tb2R1bGVfX29yZGVyLWxnLTlcIixcIm9yZGVyLWxnLTEwXCI6XCJGbGV4LW1vZHVsZV9fb3JkZXItbGctMTBcIixcIm9yZGVyLWxnLTExXCI6XCJGbGV4LW1vZHVsZV9fb3JkZXItbGctMTFcIixcIm9yZGVyLWxnLTEyXCI6XCJGbGV4LW1vZHVsZV9fb3JkZXItbGctMTJcIixcIm9mZnNldC1sZy0wXCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LWxnLTBcIixcIm9mZnNldC1sZy0xXCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LWxnLTFcIixcIm9mZnNldC1sZy0yXCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LWxnLTJcIixcIm9mZnNldC1sZy0zXCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LWxnLTNcIixcIm9mZnNldC1sZy00XCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LWxnLTRcIixcIm9mZnNldC1sZy01XCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LWxnLTVcIixcIm9mZnNldC1sZy02XCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LWxnLTZcIixcIm9mZnNldC1sZy03XCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LWxnLTdcIixcIm9mZnNldC1sZy04XCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LWxnLThcIixcIm9mZnNldC1sZy05XCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LWxnLTlcIixcIm9mZnNldC1sZy0xMFwiOlwiRmxleC1tb2R1bGVfX29mZnNldC1sZy0xMFwiLFwib2Zmc2V0LWxnLTExXCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LWxnLTExXCIsXCJyb3ctY29scy14bC0xXCI6XCJGbGV4LW1vZHVsZV9fcm93LWNvbHMteGwtMVwiLFwicm93LWNvbHMteGwtMlwiOlwiRmxleC1tb2R1bGVfX3Jvdy1jb2xzLXhsLTJcIixcInJvdy1jb2xzLXhsLTNcIjpcIkZsZXgtbW9kdWxlX19yb3ctY29scy14bC0zXCIsXCJyb3ctY29scy14bC00XCI6XCJGbGV4LW1vZHVsZV9fcm93LWNvbHMteGwtNFwiLFwicm93LWNvbHMteGwtNVwiOlwiRmxleC1tb2R1bGVfX3Jvdy1jb2xzLXhsLTVcIixcInJvdy1jb2xzLXhsLTZcIjpcIkZsZXgtbW9kdWxlX19yb3ctY29scy14bC02XCIsXCJvcmRlci14bC1maXJzdFwiOlwiRmxleC1tb2R1bGVfX29yZGVyLXhsLWZpcnN0XCIsXCJvcmRlci14bC1sYXN0XCI6XCJGbGV4LW1vZHVsZV9fb3JkZXIteGwtbGFzdFwiLFwib3JkZXIteGwtMFwiOlwiRmxleC1tb2R1bGVfX29yZGVyLXhsLTBcIixcIm9yZGVyLXhsLTFcIjpcIkZsZXgtbW9kdWxlX19vcmRlci14bC0xXCIsXCJvcmRlci14bC0yXCI6XCJGbGV4LW1vZHVsZV9fb3JkZXIteGwtMlwiLFwib3JkZXIteGwtM1wiOlwiRmxleC1tb2R1bGVfX29yZGVyLXhsLTNcIixcIm9yZGVyLXhsLTRcIjpcIkZsZXgtbW9kdWxlX19vcmRlci14bC00XCIsXCJvcmRlci14bC01XCI6XCJGbGV4LW1vZHVsZV9fb3JkZXIteGwtNVwiLFwib3JkZXIteGwtNlwiOlwiRmxleC1tb2R1bGVfX29yZGVyLXhsLTZcIixcIm9yZGVyLXhsLTdcIjpcIkZsZXgtbW9kdWxlX19vcmRlci14bC03XCIsXCJvcmRlci14bC04XCI6XCJGbGV4LW1vZHVsZV9fb3JkZXIteGwtOFwiLFwib3JkZXIteGwtOVwiOlwiRmxleC1tb2R1bGVfX29yZGVyLXhsLTlcIixcIm9yZGVyLXhsLTEwXCI6XCJGbGV4LW1vZHVsZV9fb3JkZXIteGwtMTBcIixcIm9yZGVyLXhsLTExXCI6XCJGbGV4LW1vZHVsZV9fb3JkZXIteGwtMTFcIixcIm9yZGVyLXhsLTEyXCI6XCJGbGV4LW1vZHVsZV9fb3JkZXIteGwtMTJcIixcIm9mZnNldC14bC0wXCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LXhsLTBcIixcIm9mZnNldC14bC0xXCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LXhsLTFcIixcIm9mZnNldC14bC0yXCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LXhsLTJcIixcIm9mZnNldC14bC0zXCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LXhsLTNcIixcIm9mZnNldC14bC00XCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LXhsLTRcIixcIm9mZnNldC14bC01XCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LXhsLTVcIixcIm9mZnNldC14bC02XCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LXhsLTZcIixcIm9mZnNldC14bC03XCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LXhsLTdcIixcIm9mZnNldC14bC04XCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LXhsLThcIixcIm9mZnNldC14bC05XCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LXhsLTlcIixcIm9mZnNldC14bC0xMFwiOlwiRmxleC1tb2R1bGVfX29mZnNldC14bC0xMFwiLFwib2Zmc2V0LXhsLTExXCI6XCJGbGV4LW1vZHVsZV9fb2Zmc2V0LXhsLTExXCIsXCJkLW5vbmVcIjpcIkZsZXgtbW9kdWxlX19kLW5vbmVcIixcImQtaW5saW5lXCI6XCJGbGV4LW1vZHVsZV9fZC1pbmxpbmVcIixcImQtaW5saW5lLWJsb2NrXCI6XCJGbGV4LW1vZHVsZV9fZC1pbmxpbmUtYmxvY2tcIixcImQtYmxvY2tcIjpcIkZsZXgtbW9kdWxlX19kLWJsb2NrXCIsXCJkLXRhYmxlXCI6XCJGbGV4LW1vZHVsZV9fZC10YWJsZVwiLFwiZC10YWJsZS1yb3dcIjpcIkZsZXgtbW9kdWxlX19kLXRhYmxlLXJvd1wiLFwiZC10YWJsZS1jZWxsXCI6XCJGbGV4LW1vZHVsZV9fZC10YWJsZS1jZWxsXCIsXCJkLWZsZXhcIjpcIkZsZXgtbW9kdWxlX19kLWZsZXhcIixcImQtaW5saW5lLWZsZXhcIjpcIkZsZXgtbW9kdWxlX19kLWlubGluZS1mbGV4XCIsXCJkLXNtLW5vbmVcIjpcIkZsZXgtbW9kdWxlX19kLXNtLW5vbmVcIixcImQtc20taW5saW5lXCI6XCJGbGV4LW1vZHVsZV9fZC1zbS1pbmxpbmVcIixcImQtc20taW5saW5lLWJsb2NrXCI6XCJGbGV4LW1vZHVsZV9fZC1zbS1pbmxpbmUtYmxvY2tcIixcImQtc20tYmxvY2tcIjpcIkZsZXgtbW9kdWxlX19kLXNtLWJsb2NrXCIsXCJkLXNtLXRhYmxlXCI6XCJGbGV4LW1vZHVsZV9fZC1zbS10YWJsZVwiLFwiZC1zbS10YWJsZS1yb3dcIjpcIkZsZXgtbW9kdWxlX19kLXNtLXRhYmxlLXJvd1wiLFwiZC1zbS10YWJsZS1jZWxsXCI6XCJGbGV4LW1vZHVsZV9fZC1zbS10YWJsZS1jZWxsXCIsXCJkLXNtLWZsZXhcIjpcIkZsZXgtbW9kdWxlX19kLXNtLWZsZXhcIixcImQtc20taW5saW5lLWZsZXhcIjpcIkZsZXgtbW9kdWxlX19kLXNtLWlubGluZS1mbGV4XCIsXCJkLW1kLW5vbmVcIjpcIkZsZXgtbW9kdWxlX19kLW1kLW5vbmVcIixcImQtbWQtaW5saW5lXCI6XCJGbGV4LW1vZHVsZV9fZC1tZC1pbmxpbmVcIixcImQtbWQtaW5saW5lLWJsb2NrXCI6XCJGbGV4LW1vZHVsZV9fZC1tZC1pbmxpbmUtYmxvY2tcIixcImQtbWQtYmxvY2tcIjpcIkZsZXgtbW9kdWxlX19kLW1kLWJsb2NrXCIsXCJkLW1kLXRhYmxlXCI6XCJGbGV4LW1vZHVsZV9fZC1tZC10YWJsZVwiLFwiZC1tZC10YWJsZS1yb3dcIjpcIkZsZXgtbW9kdWxlX19kLW1kLXRhYmxlLXJvd1wiLFwiZC1tZC10YWJsZS1jZWxsXCI6XCJGbGV4LW1vZHVsZV9fZC1tZC10YWJsZS1jZWxsXCIsXCJkLW1kLWZsZXhcIjpcIkZsZXgtbW9kdWxlX19kLW1kLWZsZXhcIixcImQtbWQtaW5saW5lLWZsZXhcIjpcIkZsZXgtbW9kdWxlX19kLW1kLWlubGluZS1mbGV4XCIsXCJkLWxnLW5vbmVcIjpcIkZsZXgtbW9kdWxlX19kLWxnLW5vbmVcIixcImQtbGctaW5saW5lXCI6XCJGbGV4LW1vZHVsZV9fZC1sZy1pbmxpbmVcIixcImQtbGctaW5saW5lLWJsb2NrXCI6XCJGbGV4LW1vZHVsZV9fZC1sZy1pbmxpbmUtYmxvY2tcIixcImQtbGctYmxvY2tcIjpcIkZsZXgtbW9kdWxlX19kLWxnLWJsb2NrXCIsXCJkLWxnLXRhYmxlXCI6XCJGbGV4LW1vZHVsZV9fZC1sZy10YWJsZVwiLFwiZC1sZy10YWJsZS1yb3dcIjpcIkZsZXgtbW9kdWxlX19kLWxnLXRhYmxlLXJvd1wiLFwiZC1sZy10YWJsZS1jZWxsXCI6XCJGbGV4LW1vZHVsZV9fZC1sZy10YWJsZS1jZWxsXCIsXCJkLWxnLWZsZXhcIjpcIkZsZXgtbW9kdWxlX19kLWxnLWZsZXhcIixcImQtbGctaW5saW5lLWZsZXhcIjpcIkZsZXgtbW9kdWxlX19kLWxnLWlubGluZS1mbGV4XCIsXCJkLXhsLW5vbmVcIjpcIkZsZXgtbW9kdWxlX19kLXhsLW5vbmVcIixcImQteGwtaW5saW5lXCI6XCJGbGV4LW1vZHVsZV9fZC14bC1pbmxpbmVcIixcImQteGwtaW5saW5lLWJsb2NrXCI6XCJGbGV4LW1vZHVsZV9fZC14bC1pbmxpbmUtYmxvY2tcIixcImQteGwtYmxvY2tcIjpcIkZsZXgtbW9kdWxlX19kLXhsLWJsb2NrXCIsXCJkLXhsLXRhYmxlXCI6XCJGbGV4LW1vZHVsZV9fZC14bC10YWJsZVwiLFwiZC14bC10YWJsZS1yb3dcIjpcIkZsZXgtbW9kdWxlX19kLXhsLXRhYmxlLXJvd1wiLFwiZC14bC10YWJsZS1jZWxsXCI6XCJGbGV4LW1vZHVsZV9fZC14bC10YWJsZS1jZWxsXCIsXCJkLXhsLWZsZXhcIjpcIkZsZXgtbW9kdWxlX19kLXhsLWZsZXhcIixcImQteGwtaW5saW5lLWZsZXhcIjpcIkZsZXgtbW9kdWxlX19kLXhsLWlubGluZS1mbGV4XCIsXCJkLXByaW50LW5vbmVcIjpcIkZsZXgtbW9kdWxlX19kLXByaW50LW5vbmVcIixcImQtcHJpbnQtaW5saW5lXCI6XCJGbGV4LW1vZHVsZV9fZC1wcmludC1pbmxpbmVcIixcImQtcHJpbnQtaW5saW5lLWJsb2NrXCI6XCJGbGV4LW1vZHVsZV9fZC1wcmludC1pbmxpbmUtYmxvY2tcIixcImQtcHJpbnQtYmxvY2tcIjpcIkZsZXgtbW9kdWxlX19kLXByaW50LWJsb2NrXCIsXCJkLXByaW50LXRhYmxlXCI6XCJGbGV4LW1vZHVsZV9fZC1wcmludC10YWJsZVwiLFwiZC1wcmludC10YWJsZS1yb3dcIjpcIkZsZXgtbW9kdWxlX19kLXByaW50LXRhYmxlLXJvd1wiLFwiZC1wcmludC10YWJsZS1jZWxsXCI6XCJGbGV4LW1vZHVsZV9fZC1wcmludC10YWJsZS1jZWxsXCIsXCJkLXByaW50LWZsZXhcIjpcIkZsZXgtbW9kdWxlX19kLXByaW50LWZsZXhcIixcImQtcHJpbnQtaW5saW5lLWZsZXhcIjpcIkZsZXgtbW9kdWxlX19kLXByaW50LWlubGluZS1mbGV4XCIsXCJmbGV4LXJvd1wiOlwiRmxleC1tb2R1bGVfX2ZsZXgtcm93XCIsXCJmbGV4LWNvbHVtblwiOlwiRmxleC1tb2R1bGVfX2ZsZXgtY29sdW1uXCIsXCJmbGV4LXJvdy1yZXZlcnNlXCI6XCJGbGV4LW1vZHVsZV9fZmxleC1yb3ctcmV2ZXJzZVwiLFwiZmxleC1jb2x1bW4tcmV2ZXJzZVwiOlwiRmxleC1tb2R1bGVfX2ZsZXgtY29sdW1uLXJldmVyc2VcIixcImZsZXgtd3JhcFwiOlwiRmxleC1tb2R1bGVfX2ZsZXgtd3JhcFwiLFwiZmxleC1ub3dyYXBcIjpcIkZsZXgtbW9kdWxlX19mbGV4LW5vd3JhcFwiLFwiZmxleC13cmFwLXJldmVyc2VcIjpcIkZsZXgtbW9kdWxlX19mbGV4LXdyYXAtcmV2ZXJzZVwiLFwiZmxleC1maWxsXCI6XCJGbGV4LW1vZHVsZV9fZmxleC1maWxsXCIsXCJmbGV4LWdyb3ctMFwiOlwiRmxleC1tb2R1bGVfX2ZsZXgtZ3Jvdy0wXCIsXCJmbGV4LWdyb3ctMVwiOlwiRmxleC1tb2R1bGVfX2ZsZXgtZ3Jvdy0xXCIsXCJmbGV4LXNocmluay0wXCI6XCJGbGV4LW1vZHVsZV9fZmxleC1zaHJpbmstMFwiLFwiZmxleC1zaHJpbmstMVwiOlwiRmxleC1tb2R1bGVfX2ZsZXgtc2hyaW5rLTFcIixcImp1c3RpZnktY29udGVudC1zdGFydFwiOlwiRmxleC1tb2R1bGVfX2p1c3RpZnktY29udGVudC1zdGFydFwiLFwianVzdGlmeS1jb250ZW50LWVuZFwiOlwiRmxleC1tb2R1bGVfX2p1c3RpZnktY29udGVudC1lbmRcIixcImp1c3RpZnktY29udGVudC1jZW50ZXJcIjpcIkZsZXgtbW9kdWxlX19qdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCIsXCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiOlwiRmxleC1tb2R1bGVfX2p1c3RpZnktY29udGVudC1iZXR3ZWVuXCIsXCJqdXN0aWZ5LWNvbnRlbnQtYXJvdW5kXCI6XCJGbGV4LW1vZHVsZV9fanVzdGlmeS1jb250ZW50LWFyb3VuZFwiLFwiYWxpZ24taXRlbXMtc3RhcnRcIjpcIkZsZXgtbW9kdWxlX19hbGlnbi1pdGVtcy1zdGFydFwiLFwiYWxpZ24taXRlbXMtZW5kXCI6XCJGbGV4LW1vZHVsZV9fYWxpZ24taXRlbXMtZW5kXCIsXCJhbGlnbi1pdGVtcy1jZW50ZXJcIjpcIkZsZXgtbW9kdWxlX19hbGlnbi1pdGVtcy1jZW50ZXJcIixcImFsaWduLWl0ZW1zLWJhc2VsaW5lXCI6XCJGbGV4LW1vZHVsZV9fYWxpZ24taXRlbXMtYmFzZWxpbmVcIixcImFsaWduLWl0ZW1zLXN0cmV0Y2hcIjpcIkZsZXgtbW9kdWxlX19hbGlnbi1pdGVtcy1zdHJldGNoXCIsXCJhbGlnbi1jb250ZW50LXN0YXJ0XCI6XCJGbGV4LW1vZHVsZV9fYWxpZ24tY29udGVudC1zdGFydFwiLFwiYWxpZ24tY29udGVudC1lbmRcIjpcIkZsZXgtbW9kdWxlX19hbGlnbi1jb250ZW50LWVuZFwiLFwiYWxpZ24tY29udGVudC1jZW50ZXJcIjpcIkZsZXgtbW9kdWxlX19hbGlnbi1jb250ZW50LWNlbnRlclwiLFwiYWxpZ24tY29udGVudC1iZXR3ZWVuXCI6XCJGbGV4LW1vZHVsZV9fYWxpZ24tY29udGVudC1iZXR3ZWVuXCIsXCJhbGlnbi1jb250ZW50LWFyb3VuZFwiOlwiRmxleC1tb2R1bGVfX2FsaWduLWNvbnRlbnQtYXJvdW5kXCIsXCJhbGlnbi1jb250ZW50LXN0cmV0Y2hcIjpcIkZsZXgtbW9kdWxlX19hbGlnbi1jb250ZW50LXN0cmV0Y2hcIixcImFsaWduLXNlbGYtYXV0b1wiOlwiRmxleC1tb2R1bGVfX2FsaWduLXNlbGYtYXV0b1wiLFwiYWxpZ24tc2VsZi1zdGFydFwiOlwiRmxleC1tb2R1bGVfX2FsaWduLXNlbGYtc3RhcnRcIixcImFsaWduLXNlbGYtZW5kXCI6XCJGbGV4LW1vZHVsZV9fYWxpZ24tc2VsZi1lbmRcIixcImFsaWduLXNlbGYtY2VudGVyXCI6XCJGbGV4LW1vZHVsZV9fYWxpZ24tc2VsZi1jZW50ZXJcIixcImFsaWduLXNlbGYtYmFzZWxpbmVcIjpcIkZsZXgtbW9kdWxlX19hbGlnbi1zZWxmLWJhc2VsaW5lXCIsXCJhbGlnbi1zZWxmLXN0cmV0Y2hcIjpcIkZsZXgtbW9kdWxlX19hbGlnbi1zZWxmLXN0cmV0Y2hcIixcImZsZXgtc20tcm93XCI6XCJGbGV4LW1vZHVsZV9fZmxleC1zbS1yb3dcIixcImZsZXgtc20tY29sdW1uXCI6XCJGbGV4LW1vZHVsZV9fZmxleC1zbS1jb2x1bW5cIixcImZsZXgtc20tcm93LXJldmVyc2VcIjpcIkZsZXgtbW9kdWxlX19mbGV4LXNtLXJvdy1yZXZlcnNlXCIsXCJmbGV4LXNtLWNvbHVtbi1yZXZlcnNlXCI6XCJGbGV4LW1vZHVsZV9fZmxleC1zbS1jb2x1bW4tcmV2ZXJzZVwiLFwiZmxleC1zbS13cmFwXCI6XCJGbGV4LW1vZHVsZV9fZmxleC1zbS13cmFwXCIsXCJmbGV4LXNtLW5vd3JhcFwiOlwiRmxleC1tb2R1bGVfX2ZsZXgtc20tbm93cmFwXCIsXCJmbGV4LXNtLXdyYXAtcmV2ZXJzZVwiOlwiRmxleC1tb2R1bGVfX2ZsZXgtc20td3JhcC1yZXZlcnNlXCIsXCJmbGV4LXNtLWZpbGxcIjpcIkZsZXgtbW9kdWxlX19mbGV4LXNtLWZpbGxcIixcImZsZXgtc20tZ3Jvdy0wXCI6XCJGbGV4LW1vZHVsZV9fZmxleC1zbS1ncm93LTBcIixcImZsZXgtc20tZ3Jvdy0xXCI6XCJGbGV4LW1vZHVsZV9fZmxleC1zbS1ncm93LTFcIixcImZsZXgtc20tc2hyaW5rLTBcIjpcIkZsZXgtbW9kdWxlX19mbGV4LXNtLXNocmluay0wXCIsXCJmbGV4LXNtLXNocmluay0xXCI6XCJGbGV4LW1vZHVsZV9fZmxleC1zbS1zaHJpbmstMVwiLFwianVzdGlmeS1jb250ZW50LXNtLXN0YXJ0XCI6XCJGbGV4LW1vZHVsZV9fanVzdGlmeS1jb250ZW50LXNtLXN0YXJ0XCIsXCJqdXN0aWZ5LWNvbnRlbnQtc20tZW5kXCI6XCJGbGV4LW1vZHVsZV9fanVzdGlmeS1jb250ZW50LXNtLWVuZFwiLFwianVzdGlmeS1jb250ZW50LXNtLWNlbnRlclwiOlwiRmxleC1tb2R1bGVfX2p1c3RpZnktY29udGVudC1zbS1jZW50ZXJcIixcImp1c3RpZnktY29udGVudC1zbS1iZXR3ZWVuXCI6XCJGbGV4LW1vZHVsZV9fanVzdGlmeS1jb250ZW50LXNtLWJldHdlZW5cIixcImp1c3RpZnktY29udGVudC1zbS1hcm91bmRcIjpcIkZsZXgtbW9kdWxlX19qdXN0aWZ5LWNvbnRlbnQtc20tYXJvdW5kXCIsXCJhbGlnbi1pdGVtcy1zbS1zdGFydFwiOlwiRmxleC1tb2R1bGVfX2FsaWduLWl0ZW1zLXNtLXN0YXJ0XCIsXCJhbGlnbi1pdGVtcy1zbS1lbmRcIjpcIkZsZXgtbW9kdWxlX19hbGlnbi1pdGVtcy1zbS1lbmRcIixcImFsaWduLWl0ZW1zLXNtLWNlbnRlclwiOlwiRmxleC1tb2R1bGVfX2FsaWduLWl0ZW1zLXNtLWNlbnRlclwiLFwiYWxpZ24taXRlbXMtc20tYmFzZWxpbmVcIjpcIkZsZXgtbW9kdWxlX19hbGlnbi1pdGVtcy1zbS1iYXNlbGluZVwiLFwiYWxpZ24taXRlbXMtc20tc3RyZXRjaFwiOlwiRmxleC1tb2R1bGVfX2FsaWduLWl0ZW1zLXNtLXN0cmV0Y2hcIixcImFsaWduLWNvbnRlbnQtc20tc3RhcnRcIjpcIkZsZXgtbW9kdWxlX19hbGlnbi1jb250ZW50LXNtLXN0YXJ0XCIsXCJhbGlnbi1jb250ZW50LXNtLWVuZFwiOlwiRmxleC1tb2R1bGVfX2FsaWduLWNvbnRlbnQtc20tZW5kXCIsXCJhbGlnbi1jb250ZW50LXNtLWNlbnRlclwiOlwiRmxleC1tb2R1bGVfX2FsaWduLWNvbnRlbnQtc20tY2VudGVyXCIsXCJhbGlnbi1jb250ZW50LXNtLWJldHdlZW5cIjpcIkZsZXgtbW9kdWxlX19hbGlnbi1jb250ZW50LXNtLWJldHdlZW5cIixcImFsaWduLWNvbnRlbnQtc20tYXJvdW5kXCI6XCJGbGV4LW1vZHVsZV9fYWxpZ24tY29udGVudC1zbS1hcm91bmRcIixcImFsaWduLWNvbnRlbnQtc20tc3RyZXRjaFwiOlwiRmxleC1tb2R1bGVfX2FsaWduLWNvbnRlbnQtc20tc3RyZXRjaFwiLFwiYWxpZ24tc2VsZi1zbS1hdXRvXCI6XCJGbGV4LW1vZHVsZV9fYWxpZ24tc2VsZi1zbS1hdXRvXCIsXCJhbGlnbi1zZWxmLXNtLXN0YXJ0XCI6XCJGbGV4LW1vZHVsZV9fYWxpZ24tc2VsZi1zbS1zdGFydFwiLFwiYWxpZ24tc2VsZi1zbS1lbmRcIjpcIkZsZXgtbW9kdWxlX19hbGlnbi1zZWxmLXNtLWVuZFwiLFwiYWxpZ24tc2VsZi1zbS1jZW50ZXJcIjpcIkZsZXgtbW9kdWxlX19hbGlnbi1zZWxmLXNtLWNlbnRlclwiLFwiYWxpZ24tc2VsZi1zbS1iYXNlbGluZVwiOlwiRmxleC1tb2R1bGVfX2FsaWduLXNlbGYtc20tYmFzZWxpbmVcIixcImFsaWduLXNlbGYtc20tc3RyZXRjaFwiOlwiRmxleC1tb2R1bGVfX2FsaWduLXNlbGYtc20tc3RyZXRjaFwiLFwiZmxleC1tZC1yb3dcIjpcIkZsZXgtbW9kdWxlX19mbGV4LW1kLXJvd1wiLFwiZmxleC1tZC1jb2x1bW5cIjpcIkZsZXgtbW9kdWxlX19mbGV4LW1kLWNvbHVtblwiLFwiZmxleC1tZC1yb3ctcmV2ZXJzZVwiOlwiRmxleC1tb2R1bGVfX2ZsZXgtbWQtcm93LXJldmVyc2VcIixcImZsZXgtbWQtY29sdW1uLXJldmVyc2VcIjpcIkZsZXgtbW9kdWxlX19mbGV4LW1kLWNvbHVtbi1yZXZlcnNlXCIsXCJmbGV4LW1kLXdyYXBcIjpcIkZsZXgtbW9kdWxlX19mbGV4LW1kLXdyYXBcIixcImZsZXgtbWQtbm93cmFwXCI6XCJGbGV4LW1vZHVsZV9fZmxleC1tZC1ub3dyYXBcIixcImZsZXgtbWQtd3JhcC1yZXZlcnNlXCI6XCJGbGV4LW1vZHVsZV9fZmxleC1tZC13cmFwLXJldmVyc2VcIixcImZsZXgtbWQtZmlsbFwiOlwiRmxleC1tb2R1bGVfX2ZsZXgtbWQtZmlsbFwiLFwiZmxleC1tZC1ncm93LTBcIjpcIkZsZXgtbW9kdWxlX19mbGV4LW1kLWdyb3ctMFwiLFwiZmxleC1tZC1ncm93LTFcIjpcIkZsZXgtbW9kdWxlX19mbGV4LW1kLWdyb3ctMVwiLFwiZmxleC1tZC1zaHJpbmstMFwiOlwiRmxleC1tb2R1bGVfX2ZsZXgtbWQtc2hyaW5rLTBcIixcImZsZXgtbWQtc2hyaW5rLTFcIjpcIkZsZXgtbW9kdWxlX19mbGV4LW1kLXNocmluay0xXCIsXCJqdXN0aWZ5LWNvbnRlbnQtbWQtc3RhcnRcIjpcIkZsZXgtbW9kdWxlX19qdXN0aWZ5LWNvbnRlbnQtbWQtc3RhcnRcIixcImp1c3RpZnktY29udGVudC1tZC1lbmRcIjpcIkZsZXgtbW9kdWxlX19qdXN0aWZ5LWNvbnRlbnQtbWQtZW5kXCIsXCJqdXN0aWZ5LWNvbnRlbnQtbWQtY2VudGVyXCI6XCJGbGV4LW1vZHVsZV9fanVzdGlmeS1jb250ZW50LW1kLWNlbnRlclwiLFwianVzdGlmeS1jb250ZW50LW1kLWJldHdlZW5cIjpcIkZsZXgtbW9kdWxlX19qdXN0aWZ5LWNvbnRlbnQtbWQtYmV0d2VlblwiLFwianVzdGlmeS1jb250ZW50LW1kLWFyb3VuZFwiOlwiRmxleC1tb2R1bGVfX2p1c3RpZnktY29udGVudC1tZC1hcm91bmRcIixcImFsaWduLWl0ZW1zLW1kLXN0YXJ0XCI6XCJGbGV4LW1vZHVsZV9fYWxpZ24taXRlbXMtbWQtc3RhcnRcIixcImFsaWduLWl0ZW1zLW1kLWVuZFwiOlwiRmxleC1tb2R1bGVfX2FsaWduLWl0ZW1zLW1kLWVuZFwiLFwiYWxpZ24taXRlbXMtbWQtY2VudGVyXCI6XCJGbGV4LW1vZHVsZV9fYWxpZ24taXRlbXMtbWQtY2VudGVyXCIsXCJhbGlnbi1pdGVtcy1tZC1iYXNlbGluZVwiOlwiRmxleC1tb2R1bGVfX2FsaWduLWl0ZW1zLW1kLWJhc2VsaW5lXCIsXCJhbGlnbi1pdGVtcy1tZC1zdHJldGNoXCI6XCJGbGV4LW1vZHVsZV9fYWxpZ24taXRlbXMtbWQtc3RyZXRjaFwiLFwiYWxpZ24tY29udGVudC1tZC1zdGFydFwiOlwiRmxleC1tb2R1bGVfX2FsaWduLWNvbnRlbnQtbWQtc3RhcnRcIixcImFsaWduLWNvbnRlbnQtbWQtZW5kXCI6XCJGbGV4LW1vZHVsZV9fYWxpZ24tY29udGVudC1tZC1lbmRcIixcImFsaWduLWNvbnRlbnQtbWQtY2VudGVyXCI6XCJGbGV4LW1vZHVsZV9fYWxpZ24tY29udGVudC1tZC1jZW50ZXJcIixcImFsaWduLWNvbnRlbnQtbWQtYmV0d2VlblwiOlwiRmxleC1tb2R1bGVfX2FsaWduLWNvbnRlbnQtbWQtYmV0d2VlblwiLFwiYWxpZ24tY29udGVudC1tZC1hcm91bmRcIjpcIkZsZXgtbW9kdWxlX19hbGlnbi1jb250ZW50LW1kLWFyb3VuZFwiLFwiYWxpZ24tY29udGVudC1tZC1zdHJldGNoXCI6XCJGbGV4LW1vZHVsZV9fYWxpZ24tY29udGVudC1tZC1zdHJldGNoXCIsXCJhbGlnbi1zZWxmLW1kLWF1dG9cIjpcIkZsZXgtbW9kdWxlX19hbGlnbi1zZWxmLW1kLWF1dG9cIixcImFsaWduLXNlbGYtbWQtc3RhcnRcIjpcIkZsZXgtbW9kdWxlX19hbGlnbi1zZWxmLW1kLXN0YXJ0XCIsXCJhbGlnbi1zZWxmLW1kLWVuZFwiOlwiRmxleC1tb2R1bGVfX2FsaWduLXNlbGYtbWQtZW5kXCIsXCJhbGlnbi1zZWxmLW1kLWNlbnRlclwiOlwiRmxleC1tb2R1bGVfX2FsaWduLXNlbGYtbWQtY2VudGVyXCIsXCJhbGlnbi1zZWxmLW1kLWJhc2VsaW5lXCI6XCJGbGV4LW1vZHVsZV9fYWxpZ24tc2VsZi1tZC1iYXNlbGluZVwiLFwiYWxpZ24tc2VsZi1tZC1zdHJldGNoXCI6XCJGbGV4LW1vZHVsZV9fYWxpZ24tc2VsZi1tZC1zdHJldGNoXCIsXCJmbGV4LWxnLXJvd1wiOlwiRmxleC1tb2R1bGVfX2ZsZXgtbGctcm93XCIsXCJmbGV4LWxnLWNvbHVtblwiOlwiRmxleC1tb2R1bGVfX2ZsZXgtbGctY29sdW1uXCIsXCJmbGV4LWxnLXJvdy1yZXZlcnNlXCI6XCJGbGV4LW1vZHVsZV9fZmxleC1sZy1yb3ctcmV2ZXJzZVwiLFwiZmxleC1sZy1jb2x1bW4tcmV2ZXJzZVwiOlwiRmxleC1tb2R1bGVfX2ZsZXgtbGctY29sdW1uLXJldmVyc2VcIixcImZsZXgtbGctd3JhcFwiOlwiRmxleC1tb2R1bGVfX2ZsZXgtbGctd3JhcFwiLFwiZmxleC1sZy1ub3dyYXBcIjpcIkZsZXgtbW9kdWxlX19mbGV4LWxnLW5vd3JhcFwiLFwiZmxleC1sZy13cmFwLXJldmVyc2VcIjpcIkZsZXgtbW9kdWxlX19mbGV4LWxnLXdyYXAtcmV2ZXJzZVwiLFwiZmxleC1sZy1maWxsXCI6XCJGbGV4LW1vZHVsZV9fZmxleC1sZy1maWxsXCIsXCJmbGV4LWxnLWdyb3ctMFwiOlwiRmxleC1tb2R1bGVfX2ZsZXgtbGctZ3Jvdy0wXCIsXCJmbGV4LWxnLWdyb3ctMVwiOlwiRmxleC1tb2R1bGVfX2ZsZXgtbGctZ3Jvdy0xXCIsXCJmbGV4LWxnLXNocmluay0wXCI6XCJGbGV4LW1vZHVsZV9fZmxleC1sZy1zaHJpbmstMFwiLFwiZmxleC1sZy1zaHJpbmstMVwiOlwiRmxleC1tb2R1bGVfX2ZsZXgtbGctc2hyaW5rLTFcIixcImp1c3RpZnktY29udGVudC1sZy1zdGFydFwiOlwiRmxleC1tb2R1bGVfX2p1c3RpZnktY29udGVudC1sZy1zdGFydFwiLFwianVzdGlmeS1jb250ZW50LWxnLWVuZFwiOlwiRmxleC1tb2R1bGVfX2p1c3RpZnktY29udGVudC1sZy1lbmRcIixcImp1c3RpZnktY29udGVudC1sZy1jZW50ZXJcIjpcIkZsZXgtbW9kdWxlX19qdXN0aWZ5LWNvbnRlbnQtbGctY2VudGVyXCIsXCJqdXN0aWZ5LWNvbnRlbnQtbGctYmV0d2VlblwiOlwiRmxleC1tb2R1bGVfX2p1c3RpZnktY29udGVudC1sZy1iZXR3ZWVuXCIsXCJqdXN0aWZ5LWNvbnRlbnQtbGctYXJvdW5kXCI6XCJGbGV4LW1vZHVsZV9fanVzdGlmeS1jb250ZW50LWxnLWFyb3VuZFwiLFwiYWxpZ24taXRlbXMtbGctc3RhcnRcIjpcIkZsZXgtbW9kdWxlX19hbGlnbi1pdGVtcy1sZy1zdGFydFwiLFwiYWxpZ24taXRlbXMtbGctZW5kXCI6XCJGbGV4LW1vZHVsZV9fYWxpZ24taXRlbXMtbGctZW5kXCIsXCJhbGlnbi1pdGVtcy1sZy1jZW50ZXJcIjpcIkZsZXgtbW9kdWxlX19hbGlnbi1pdGVtcy1sZy1jZW50ZXJcIixcImFsaWduLWl0ZW1zLWxnLWJhc2VsaW5lXCI6XCJGbGV4LW1vZHVsZV9fYWxpZ24taXRlbXMtbGctYmFzZWxpbmVcIixcImFsaWduLWl0ZW1zLWxnLXN0cmV0Y2hcIjpcIkZsZXgtbW9kdWxlX19hbGlnbi1pdGVtcy1sZy1zdHJldGNoXCIsXCJhbGlnbi1jb250ZW50LWxnLXN0YXJ0XCI6XCJGbGV4LW1vZHVsZV9fYWxpZ24tY29udGVudC1sZy1zdGFydFwiLFwiYWxpZ24tY29udGVudC1sZy1lbmRcIjpcIkZsZXgtbW9kdWxlX19hbGlnbi1jb250ZW50LWxnLWVuZFwiLFwiYWxpZ24tY29udGVudC1sZy1jZW50ZXJcIjpcIkZsZXgtbW9kdWxlX19hbGlnbi1jb250ZW50LWxnLWNlbnRlclwiLFwiYWxpZ24tY29udGVudC1sZy1iZXR3ZWVuXCI6XCJGbGV4LW1vZHVsZV9fYWxpZ24tY29udGVudC1sZy1iZXR3ZWVuXCIsXCJhbGlnbi1jb250ZW50LWxnLWFyb3VuZFwiOlwiRmxleC1tb2R1bGVfX2FsaWduLWNvbnRlbnQtbGctYXJvdW5kXCIsXCJhbGlnbi1jb250ZW50LWxnLXN0cmV0Y2hcIjpcIkZsZXgtbW9kdWxlX19hbGlnbi1jb250ZW50LWxnLXN0cmV0Y2hcIixcImFsaWduLXNlbGYtbGctYXV0b1wiOlwiRmxleC1tb2R1bGVfX2FsaWduLXNlbGYtbGctYXV0b1wiLFwiYWxpZ24tc2VsZi1sZy1zdGFydFwiOlwiRmxleC1tb2R1bGVfX2FsaWduLXNlbGYtbGctc3RhcnRcIixcImFsaWduLXNlbGYtbGctZW5kXCI6XCJGbGV4LW1vZHVsZV9fYWxpZ24tc2VsZi1sZy1lbmRcIixcImFsaWduLXNlbGYtbGctY2VudGVyXCI6XCJGbGV4LW1vZHVsZV9fYWxpZ24tc2VsZi1sZy1jZW50ZXJcIixcImFsaWduLXNlbGYtbGctYmFzZWxpbmVcIjpcIkZsZXgtbW9kdWxlX19hbGlnbi1zZWxmLWxnLWJhc2VsaW5lXCIsXCJhbGlnbi1zZWxmLWxnLXN0cmV0Y2hcIjpcIkZsZXgtbW9kdWxlX19hbGlnbi1zZWxmLWxnLXN0cmV0Y2hcIixcImZsZXgteGwtcm93XCI6XCJGbGV4LW1vZHVsZV9fZmxleC14bC1yb3dcIixcImZsZXgteGwtY29sdW1uXCI6XCJGbGV4LW1vZHVsZV9fZmxleC14bC1jb2x1bW5cIixcImZsZXgteGwtcm93LXJldmVyc2VcIjpcIkZsZXgtbW9kdWxlX19mbGV4LXhsLXJvdy1yZXZlcnNlXCIsXCJmbGV4LXhsLWNvbHVtbi1yZXZlcnNlXCI6XCJGbGV4LW1vZHVsZV9fZmxleC14bC1jb2x1bW4tcmV2ZXJzZVwiLFwiZmxleC14bC13cmFwXCI6XCJGbGV4LW1vZHVsZV9fZmxleC14bC13cmFwXCIsXCJmbGV4LXhsLW5vd3JhcFwiOlwiRmxleC1tb2R1bGVfX2ZsZXgteGwtbm93cmFwXCIsXCJmbGV4LXhsLXdyYXAtcmV2ZXJzZVwiOlwiRmxleC1tb2R1bGVfX2ZsZXgteGwtd3JhcC1yZXZlcnNlXCIsXCJmbGV4LXhsLWZpbGxcIjpcIkZsZXgtbW9kdWxlX19mbGV4LXhsLWZpbGxcIixcImZsZXgteGwtZ3Jvdy0wXCI6XCJGbGV4LW1vZHVsZV9fZmxleC14bC1ncm93LTBcIixcImZsZXgteGwtZ3Jvdy0xXCI6XCJGbGV4LW1vZHVsZV9fZmxleC14bC1ncm93LTFcIixcImZsZXgteGwtc2hyaW5rLTBcIjpcIkZsZXgtbW9kdWxlX19mbGV4LXhsLXNocmluay0wXCIsXCJmbGV4LXhsLXNocmluay0xXCI6XCJGbGV4LW1vZHVsZV9fZmxleC14bC1zaHJpbmstMVwiLFwianVzdGlmeS1jb250ZW50LXhsLXN0YXJ0XCI6XCJGbGV4LW1vZHVsZV9fanVzdGlmeS1jb250ZW50LXhsLXN0YXJ0XCIsXCJqdXN0aWZ5LWNvbnRlbnQteGwtZW5kXCI6XCJGbGV4LW1vZHVsZV9fanVzdGlmeS1jb250ZW50LXhsLWVuZFwiLFwianVzdGlmeS1jb250ZW50LXhsLWNlbnRlclwiOlwiRmxleC1tb2R1bGVfX2p1c3RpZnktY29udGVudC14bC1jZW50ZXJcIixcImp1c3RpZnktY29udGVudC14bC1iZXR3ZWVuXCI6XCJGbGV4LW1vZHVsZV9fanVzdGlmeS1jb250ZW50LXhsLWJldHdlZW5cIixcImp1c3RpZnktY29udGVudC14bC1hcm91bmRcIjpcIkZsZXgtbW9kdWxlX19qdXN0aWZ5LWNvbnRlbnQteGwtYXJvdW5kXCIsXCJhbGlnbi1pdGVtcy14bC1zdGFydFwiOlwiRmxleC1tb2R1bGVfX2FsaWduLWl0ZW1zLXhsLXN0YXJ0XCIsXCJhbGlnbi1pdGVtcy14bC1lbmRcIjpcIkZsZXgtbW9kdWxlX19hbGlnbi1pdGVtcy14bC1lbmRcIixcImFsaWduLWl0ZW1zLXhsLWNlbnRlclwiOlwiRmxleC1tb2R1bGVfX2FsaWduLWl0ZW1zLXhsLWNlbnRlclwiLFwiYWxpZ24taXRlbXMteGwtYmFzZWxpbmVcIjpcIkZsZXgtbW9kdWxlX19hbGlnbi1pdGVtcy14bC1iYXNlbGluZVwiLFwiYWxpZ24taXRlbXMteGwtc3RyZXRjaFwiOlwiRmxleC1tb2R1bGVfX2FsaWduLWl0ZW1zLXhsLXN0cmV0Y2hcIixcImFsaWduLWNvbnRlbnQteGwtc3RhcnRcIjpcIkZsZXgtbW9kdWxlX19hbGlnbi1jb250ZW50LXhsLXN0YXJ0XCIsXCJhbGlnbi1jb250ZW50LXhsLWVuZFwiOlwiRmxleC1tb2R1bGVfX2FsaWduLWNvbnRlbnQteGwtZW5kXCIsXCJhbGlnbi1jb250ZW50LXhsLWNlbnRlclwiOlwiRmxleC1tb2R1bGVfX2FsaWduLWNvbnRlbnQteGwtY2VudGVyXCIsXCJhbGlnbi1jb250ZW50LXhsLWJldHdlZW5cIjpcIkZsZXgtbW9kdWxlX19hbGlnbi1jb250ZW50LXhsLWJldHdlZW5cIixcImFsaWduLWNvbnRlbnQteGwtYXJvdW5kXCI6XCJGbGV4LW1vZHVsZV9fYWxpZ24tY29udGVudC14bC1hcm91bmRcIixcImFsaWduLWNvbnRlbnQteGwtc3RyZXRjaFwiOlwiRmxleC1tb2R1bGVfX2FsaWduLWNvbnRlbnQteGwtc3RyZXRjaFwiLFwiYWxpZ24tc2VsZi14bC1hdXRvXCI6XCJGbGV4LW1vZHVsZV9fYWxpZ24tc2VsZi14bC1hdXRvXCIsXCJhbGlnbi1zZWxmLXhsLXN0YXJ0XCI6XCJGbGV4LW1vZHVsZV9fYWxpZ24tc2VsZi14bC1zdGFydFwiLFwiYWxpZ24tc2VsZi14bC1lbmRcIjpcIkZsZXgtbW9kdWxlX19hbGlnbi1zZWxmLXhsLWVuZFwiLFwiYWxpZ24tc2VsZi14bC1jZW50ZXJcIjpcIkZsZXgtbW9kdWxlX19hbGlnbi1zZWxmLXhsLWNlbnRlclwiLFwiYWxpZ24tc2VsZi14bC1iYXNlbGluZVwiOlwiRmxleC1tb2R1bGVfX2FsaWduLXNlbGYteGwtYmFzZWxpbmVcIixcImFsaWduLXNlbGYteGwtc3RyZXRjaFwiOlwiRmxleC1tb2R1bGVfX2FsaWduLXNlbGYteGwtc3RyZXRjaFwiLFwibS0wXCI6XCJGbGV4LW1vZHVsZV9fbS0wXCIsXCJtdC0wXCI6XCJGbGV4LW1vZHVsZV9fbXQtMFwiLFwibXktMFwiOlwiRmxleC1tb2R1bGVfX215LTBcIixcIm1yLTBcIjpcIkZsZXgtbW9kdWxlX19tci0wXCIsXCJteC0wXCI6XCJGbGV4LW1vZHVsZV9fbXgtMFwiLFwibWItMFwiOlwiRmxleC1tb2R1bGVfX21iLTBcIixcIm1sLTBcIjpcIkZsZXgtbW9kdWxlX19tbC0wXCIsXCJtLTFcIjpcIkZsZXgtbW9kdWxlX19tLTFcIixcIm10LTFcIjpcIkZsZXgtbW9kdWxlX19tdC0xXCIsXCJteS0xXCI6XCJGbGV4LW1vZHVsZV9fbXktMVwiLFwibXItMVwiOlwiRmxleC1tb2R1bGVfX21yLTFcIixcIm14LTFcIjpcIkZsZXgtbW9kdWxlX19teC0xXCIsXCJtYi0xXCI6XCJGbGV4LW1vZHVsZV9fbWItMVwiLFwibWwtMVwiOlwiRmxleC1tb2R1bGVfX21sLTFcIixcIm0tMlwiOlwiRmxleC1tb2R1bGVfX20tMlwiLFwibXQtMlwiOlwiRmxleC1tb2R1bGVfX210LTJcIixcIm15LTJcIjpcIkZsZXgtbW9kdWxlX19teS0yXCIsXCJtci0yXCI6XCJGbGV4LW1vZHVsZV9fbXItMlwiLFwibXgtMlwiOlwiRmxleC1tb2R1bGVfX214LTJcIixcIm1iLTJcIjpcIkZsZXgtbW9kdWxlX19tYi0yXCIsXCJtbC0yXCI6XCJGbGV4LW1vZHVsZV9fbWwtMlwiLFwibS0zXCI6XCJGbGV4LW1vZHVsZV9fbS0zXCIsXCJtdC0zXCI6XCJGbGV4LW1vZHVsZV9fbXQtM1wiLFwibXktM1wiOlwiRmxleC1tb2R1bGVfX215LTNcIixcIm1yLTNcIjpcIkZsZXgtbW9kdWxlX19tci0zXCIsXCJteC0zXCI6XCJGbGV4LW1vZHVsZV9fbXgtM1wiLFwibWItM1wiOlwiRmxleC1tb2R1bGVfX21iLTNcIixcIm1sLTNcIjpcIkZsZXgtbW9kdWxlX19tbC0zXCIsXCJtLTRcIjpcIkZsZXgtbW9kdWxlX19tLTRcIixcIm10LTRcIjpcIkZsZXgtbW9kdWxlX19tdC00XCIsXCJteS00XCI6XCJGbGV4LW1vZHVsZV9fbXktNFwiLFwibXItNFwiOlwiRmxleC1tb2R1bGVfX21yLTRcIixcIm14LTRcIjpcIkZsZXgtbW9kdWxlX19teC00XCIsXCJtYi00XCI6XCJGbGV4LW1vZHVsZV9fbWItNFwiLFwibWwtNFwiOlwiRmxleC1tb2R1bGVfX21sLTRcIixcIm0tNVwiOlwiRmxleC1tb2R1bGVfX20tNVwiLFwibXQtNVwiOlwiRmxleC1tb2R1bGVfX210LTVcIixcIm15LTVcIjpcIkZsZXgtbW9kdWxlX19teS01XCIsXCJtci01XCI6XCJGbGV4LW1vZHVsZV9fbXItNVwiLFwibXgtNVwiOlwiRmxleC1tb2R1bGVfX214LTVcIixcIm1iLTVcIjpcIkZsZXgtbW9kdWxlX19tYi01XCIsXCJtbC01XCI6XCJGbGV4LW1vZHVsZV9fbWwtNVwiLFwicC0wXCI6XCJGbGV4LW1vZHVsZV9fcC0wXCIsXCJwdC0wXCI6XCJGbGV4LW1vZHVsZV9fcHQtMFwiLFwicHktMFwiOlwiRmxleC1tb2R1bGVfX3B5LTBcIixcInByLTBcIjpcIkZsZXgtbW9kdWxlX19wci0wXCIsXCJweC0wXCI6XCJGbGV4LW1vZHVsZV9fcHgtMFwiLFwicGItMFwiOlwiRmxleC1tb2R1bGVfX3BiLTBcIixcInBsLTBcIjpcIkZsZXgtbW9kdWxlX19wbC0wXCIsXCJwLTFcIjpcIkZsZXgtbW9kdWxlX19wLTFcIixcInB0LTFcIjpcIkZsZXgtbW9kdWxlX19wdC0xXCIsXCJweS0xXCI6XCJGbGV4LW1vZHVsZV9fcHktMVwiLFwicHItMVwiOlwiRmxleC1tb2R1bGVfX3ByLTFcIixcInB4LTFcIjpcIkZsZXgtbW9kdWxlX19weC0xXCIsXCJwYi0xXCI6XCJGbGV4LW1vZHVsZV9fcGItMVwiLFwicGwtMVwiOlwiRmxleC1tb2R1bGVfX3BsLTFcIixcInAtMlwiOlwiRmxleC1tb2R1bGVfX3AtMlwiLFwicHQtMlwiOlwiRmxleC1tb2R1bGVfX3B0LTJcIixcInB5LTJcIjpcIkZsZXgtbW9kdWxlX19weS0yXCIsXCJwci0yXCI6XCJGbGV4LW1vZHVsZV9fcHItMlwiLFwicHgtMlwiOlwiRmxleC1tb2R1bGVfX3B4LTJcIixcInBiLTJcIjpcIkZsZXgtbW9kdWxlX19wYi0yXCIsXCJwbC0yXCI6XCJGbGV4LW1vZHVsZV9fcGwtMlwiLFwicC0zXCI6XCJGbGV4LW1vZHVsZV9fcC0zXCIsXCJwdC0zXCI6XCJGbGV4LW1vZHVsZV9fcHQtM1wiLFwicHktM1wiOlwiRmxleC1tb2R1bGVfX3B5LTNcIixcInByLTNcIjpcIkZsZXgtbW9kdWxlX19wci0zXCIsXCJweC0zXCI6XCJGbGV4LW1vZHVsZV9fcHgtM1wiLFwicGItM1wiOlwiRmxleC1tb2R1bGVfX3BiLTNcIixcInBsLTNcIjpcIkZsZXgtbW9kdWxlX19wbC0zXCIsXCJwLTRcIjpcIkZsZXgtbW9kdWxlX19wLTRcIixcInB0LTRcIjpcIkZsZXgtbW9kdWxlX19wdC00XCIsXCJweS00XCI6XCJGbGV4LW1vZHVsZV9fcHktNFwiLFwicHItNFwiOlwiRmxleC1tb2R1bGVfX3ByLTRcIixcInB4LTRcIjpcIkZsZXgtbW9kdWxlX19weC00XCIsXCJwYi00XCI6XCJGbGV4LW1vZHVsZV9fcGItNFwiLFwicGwtNFwiOlwiRmxleC1tb2R1bGVfX3BsLTRcIixcInAtNVwiOlwiRmxleC1tb2R1bGVfX3AtNVwiLFwicHQtNVwiOlwiRmxleC1tb2R1bGVfX3B0LTVcIixcInB5LTVcIjpcIkZsZXgtbW9kdWxlX19weS01XCIsXCJwci01XCI6XCJGbGV4LW1vZHVsZV9fcHItNVwiLFwicHgtNVwiOlwiRmxleC1tb2R1bGVfX3B4LTVcIixcInBiLTVcIjpcIkZsZXgtbW9kdWxlX19wYi01XCIsXCJwbC01XCI6XCJGbGV4LW1vZHVsZV9fcGwtNVwiLFwibS1uMVwiOlwiRmxleC1tb2R1bGVfX20tbjFcIixcIm10LW4xXCI6XCJGbGV4LW1vZHVsZV9fbXQtbjFcIixcIm15LW4xXCI6XCJGbGV4LW1vZHVsZV9fbXktbjFcIixcIm1yLW4xXCI6XCJGbGV4LW1vZHVsZV9fbXItbjFcIixcIm14LW4xXCI6XCJGbGV4LW1vZHVsZV9fbXgtbjFcIixcIm1iLW4xXCI6XCJGbGV4LW1vZHVsZV9fbWItbjFcIixcIm1sLW4xXCI6XCJGbGV4LW1vZHVsZV9fbWwtbjFcIixcIm0tbjJcIjpcIkZsZXgtbW9kdWxlX19tLW4yXCIsXCJtdC1uMlwiOlwiRmxleC1tb2R1bGVfX210LW4yXCIsXCJteS1uMlwiOlwiRmxleC1tb2R1bGVfX215LW4yXCIsXCJtci1uMlwiOlwiRmxleC1tb2R1bGVfX21yLW4yXCIsXCJteC1uMlwiOlwiRmxleC1tb2R1bGVfX214LW4yXCIsXCJtYi1uMlwiOlwiRmxleC1tb2R1bGVfX21iLW4yXCIsXCJtbC1uMlwiOlwiRmxleC1tb2R1bGVfX21sLW4yXCIsXCJtLW4zXCI6XCJGbGV4LW1vZHVsZV9fbS1uM1wiLFwibXQtbjNcIjpcIkZsZXgtbW9kdWxlX19tdC1uM1wiLFwibXktbjNcIjpcIkZsZXgtbW9kdWxlX19teS1uM1wiLFwibXItbjNcIjpcIkZsZXgtbW9kdWxlX19tci1uM1wiLFwibXgtbjNcIjpcIkZsZXgtbW9kdWxlX19teC1uM1wiLFwibWItbjNcIjpcIkZsZXgtbW9kdWxlX19tYi1uM1wiLFwibWwtbjNcIjpcIkZsZXgtbW9kdWxlX19tbC1uM1wiLFwibS1uNFwiOlwiRmxleC1tb2R1bGVfX20tbjRcIixcIm10LW40XCI6XCJGbGV4LW1vZHVsZV9fbXQtbjRcIixcIm15LW40XCI6XCJGbGV4LW1vZHVsZV9fbXktbjRcIixcIm1yLW40XCI6XCJGbGV4LW1vZHVsZV9fbXItbjRcIixcIm14LW40XCI6XCJGbGV4LW1vZHVsZV9fbXgtbjRcIixcIm1iLW40XCI6XCJGbGV4LW1vZHVsZV9fbWItbjRcIixcIm1sLW40XCI6XCJGbGV4LW1vZHVsZV9fbWwtbjRcIixcIm0tbjVcIjpcIkZsZXgtbW9kdWxlX19tLW41XCIsXCJtdC1uNVwiOlwiRmxleC1tb2R1bGVfX210LW41XCIsXCJteS1uNVwiOlwiRmxleC1tb2R1bGVfX215LW41XCIsXCJtci1uNVwiOlwiRmxleC1tb2R1bGVfX21yLW41XCIsXCJteC1uNVwiOlwiRmxleC1tb2R1bGVfX214LW41XCIsXCJtYi1uNVwiOlwiRmxleC1tb2R1bGVfX21iLW41XCIsXCJtbC1uNVwiOlwiRmxleC1tb2R1bGVfX21sLW41XCIsXCJtLWF1dG9cIjpcIkZsZXgtbW9kdWxlX19tLWF1dG9cIixcIm10LWF1dG9cIjpcIkZsZXgtbW9kdWxlX19tdC1hdXRvXCIsXCJteS1hdXRvXCI6XCJGbGV4LW1vZHVsZV9fbXktYXV0b1wiLFwibXItYXV0b1wiOlwiRmxleC1tb2R1bGVfX21yLWF1dG9cIixcIm14LWF1dG9cIjpcIkZsZXgtbW9kdWxlX19teC1hdXRvXCIsXCJtYi1hdXRvXCI6XCJGbGV4LW1vZHVsZV9fbWItYXV0b1wiLFwibWwtYXV0b1wiOlwiRmxleC1tb2R1bGVfX21sLWF1dG9cIixcIm0tc20tMFwiOlwiRmxleC1tb2R1bGVfX20tc20tMFwiLFwibXQtc20tMFwiOlwiRmxleC1tb2R1bGVfX210LXNtLTBcIixcIm15LXNtLTBcIjpcIkZsZXgtbW9kdWxlX19teS1zbS0wXCIsXCJtci1zbS0wXCI6XCJGbGV4LW1vZHVsZV9fbXItc20tMFwiLFwibXgtc20tMFwiOlwiRmxleC1tb2R1bGVfX214LXNtLTBcIixcIm1iLXNtLTBcIjpcIkZsZXgtbW9kdWxlX19tYi1zbS0wXCIsXCJtbC1zbS0wXCI6XCJGbGV4LW1vZHVsZV9fbWwtc20tMFwiLFwibS1zbS0xXCI6XCJGbGV4LW1vZHVsZV9fbS1zbS0xXCIsXCJtdC1zbS0xXCI6XCJGbGV4LW1vZHVsZV9fbXQtc20tMVwiLFwibXktc20tMVwiOlwiRmxleC1tb2R1bGVfX215LXNtLTFcIixcIm1yLXNtLTFcIjpcIkZsZXgtbW9kdWxlX19tci1zbS0xXCIsXCJteC1zbS0xXCI6XCJGbGV4LW1vZHVsZV9fbXgtc20tMVwiLFwibWItc20tMVwiOlwiRmxleC1tb2R1bGVfX21iLXNtLTFcIixcIm1sLXNtLTFcIjpcIkZsZXgtbW9kdWxlX19tbC1zbS0xXCIsXCJtLXNtLTJcIjpcIkZsZXgtbW9kdWxlX19tLXNtLTJcIixcIm10LXNtLTJcIjpcIkZsZXgtbW9kdWxlX19tdC1zbS0yXCIsXCJteS1zbS0yXCI6XCJGbGV4LW1vZHVsZV9fbXktc20tMlwiLFwibXItc20tMlwiOlwiRmxleC1tb2R1bGVfX21yLXNtLTJcIixcIm14LXNtLTJcIjpcIkZsZXgtbW9kdWxlX19teC1zbS0yXCIsXCJtYi1zbS0yXCI6XCJGbGV4LW1vZHVsZV9fbWItc20tMlwiLFwibWwtc20tMlwiOlwiRmxleC1tb2R1bGVfX21sLXNtLTJcIixcIm0tc20tM1wiOlwiRmxleC1tb2R1bGVfX20tc20tM1wiLFwibXQtc20tM1wiOlwiRmxleC1tb2R1bGVfX210LXNtLTNcIixcIm15LXNtLTNcIjpcIkZsZXgtbW9kdWxlX19teS1zbS0zXCIsXCJtci1zbS0zXCI6XCJGbGV4LW1vZHVsZV9fbXItc20tM1wiLFwibXgtc20tM1wiOlwiRmxleC1tb2R1bGVfX214LXNtLTNcIixcIm1iLXNtLTNcIjpcIkZsZXgtbW9kdWxlX19tYi1zbS0zXCIsXCJtbC1zbS0zXCI6XCJGbGV4LW1vZHVsZV9fbWwtc20tM1wiLFwibS1zbS00XCI6XCJGbGV4LW1vZHVsZV9fbS1zbS00XCIsXCJtdC1zbS00XCI6XCJGbGV4LW1vZHVsZV9fbXQtc20tNFwiLFwibXktc20tNFwiOlwiRmxleC1tb2R1bGVfX215LXNtLTRcIixcIm1yLXNtLTRcIjpcIkZsZXgtbW9kdWxlX19tci1zbS00XCIsXCJteC1zbS00XCI6XCJGbGV4LW1vZHVsZV9fbXgtc20tNFwiLFwibWItc20tNFwiOlwiRmxleC1tb2R1bGVfX21iLXNtLTRcIixcIm1sLXNtLTRcIjpcIkZsZXgtbW9kdWxlX19tbC1zbS00XCIsXCJtLXNtLTVcIjpcIkZsZXgtbW9kdWxlX19tLXNtLTVcIixcIm10LXNtLTVcIjpcIkZsZXgtbW9kdWxlX19tdC1zbS01XCIsXCJteS1zbS01XCI6XCJGbGV4LW1vZHVsZV9fbXktc20tNVwiLFwibXItc20tNVwiOlwiRmxleC1tb2R1bGVfX21yLXNtLTVcIixcIm14LXNtLTVcIjpcIkZsZXgtbW9kdWxlX19teC1zbS01XCIsXCJtYi1zbS01XCI6XCJGbGV4LW1vZHVsZV9fbWItc20tNVwiLFwibWwtc20tNVwiOlwiRmxleC1tb2R1bGVfX21sLXNtLTVcIixcInAtc20tMFwiOlwiRmxleC1tb2R1bGVfX3Atc20tMFwiLFwicHQtc20tMFwiOlwiRmxleC1tb2R1bGVfX3B0LXNtLTBcIixcInB5LXNtLTBcIjpcIkZsZXgtbW9kdWxlX19weS1zbS0wXCIsXCJwci1zbS0wXCI6XCJGbGV4LW1vZHVsZV9fcHItc20tMFwiLFwicHgtc20tMFwiOlwiRmxleC1tb2R1bGVfX3B4LXNtLTBcIixcInBiLXNtLTBcIjpcIkZsZXgtbW9kdWxlX19wYi1zbS0wXCIsXCJwbC1zbS0wXCI6XCJGbGV4LW1vZHVsZV9fcGwtc20tMFwiLFwicC1zbS0xXCI6XCJGbGV4LW1vZHVsZV9fcC1zbS0xXCIsXCJwdC1zbS0xXCI6XCJGbGV4LW1vZHVsZV9fcHQtc20tMVwiLFwicHktc20tMVwiOlwiRmxleC1tb2R1bGVfX3B5LXNtLTFcIixcInByLXNtLTFcIjpcIkZsZXgtbW9kdWxlX19wci1zbS0xXCIsXCJweC1zbS0xXCI6XCJGbGV4LW1vZHVsZV9fcHgtc20tMVwiLFwicGItc20tMVwiOlwiRmxleC1tb2R1bGVfX3BiLXNtLTFcIixcInBsLXNtLTFcIjpcIkZsZXgtbW9kdWxlX19wbC1zbS0xXCIsXCJwLXNtLTJcIjpcIkZsZXgtbW9kdWxlX19wLXNtLTJcIixcInB0LXNtLTJcIjpcIkZsZXgtbW9kdWxlX19wdC1zbS0yXCIsXCJweS1zbS0yXCI6XCJGbGV4LW1vZHVsZV9fcHktc20tMlwiLFwicHItc20tMlwiOlwiRmxleC1tb2R1bGVfX3ByLXNtLTJcIixcInB4LXNtLTJcIjpcIkZsZXgtbW9kdWxlX19weC1zbS0yXCIsXCJwYi1zbS0yXCI6XCJGbGV4LW1vZHVsZV9fcGItc20tMlwiLFwicGwtc20tMlwiOlwiRmxleC1tb2R1bGVfX3BsLXNtLTJcIixcInAtc20tM1wiOlwiRmxleC1tb2R1bGVfX3Atc20tM1wiLFwicHQtc20tM1wiOlwiRmxleC1tb2R1bGVfX3B0LXNtLTNcIixcInB5LXNtLTNcIjpcIkZsZXgtbW9kdWxlX19weS1zbS0zXCIsXCJwci1zbS0zXCI6XCJGbGV4LW1vZHVsZV9fcHItc20tM1wiLFwicHgtc20tM1wiOlwiRmxleC1tb2R1bGVfX3B4LXNtLTNcIixcInBiLXNtLTNcIjpcIkZsZXgtbW9kdWxlX19wYi1zbS0zXCIsXCJwbC1zbS0zXCI6XCJGbGV4LW1vZHVsZV9fcGwtc20tM1wiLFwicC1zbS00XCI6XCJGbGV4LW1vZHVsZV9fcC1zbS00XCIsXCJwdC1zbS00XCI6XCJGbGV4LW1vZHVsZV9fcHQtc20tNFwiLFwicHktc20tNFwiOlwiRmxleC1tb2R1bGVfX3B5LXNtLTRcIixcInByLXNtLTRcIjpcIkZsZXgtbW9kdWxlX19wci1zbS00XCIsXCJweC1zbS00XCI6XCJGbGV4LW1vZHVsZV9fcHgtc20tNFwiLFwicGItc20tNFwiOlwiRmxleC1tb2R1bGVfX3BiLXNtLTRcIixcInBsLXNtLTRcIjpcIkZsZXgtbW9kdWxlX19wbC1zbS00XCIsXCJwLXNtLTVcIjpcIkZsZXgtbW9kdWxlX19wLXNtLTVcIixcInB0LXNtLTVcIjpcIkZsZXgtbW9kdWxlX19wdC1zbS01XCIsXCJweS1zbS01XCI6XCJGbGV4LW1vZHVsZV9fcHktc20tNVwiLFwicHItc20tNVwiOlwiRmxleC1tb2R1bGVfX3ByLXNtLTVcIixcInB4LXNtLTVcIjpcIkZsZXgtbW9kdWxlX19weC1zbS01XCIsXCJwYi1zbS01XCI6XCJGbGV4LW1vZHVsZV9fcGItc20tNVwiLFwicGwtc20tNVwiOlwiRmxleC1tb2R1bGVfX3BsLXNtLTVcIixcIm0tc20tbjFcIjpcIkZsZXgtbW9kdWxlX19tLXNtLW4xXCIsXCJtdC1zbS1uMVwiOlwiRmxleC1tb2R1bGVfX210LXNtLW4xXCIsXCJteS1zbS1uMVwiOlwiRmxleC1tb2R1bGVfX215LXNtLW4xXCIsXCJtci1zbS1uMVwiOlwiRmxleC1tb2R1bGVfX21yLXNtLW4xXCIsXCJteC1zbS1uMVwiOlwiRmxleC1tb2R1bGVfX214LXNtLW4xXCIsXCJtYi1zbS1uMVwiOlwiRmxleC1tb2R1bGVfX21iLXNtLW4xXCIsXCJtbC1zbS1uMVwiOlwiRmxleC1tb2R1bGVfX21sLXNtLW4xXCIsXCJtLXNtLW4yXCI6XCJGbGV4LW1vZHVsZV9fbS1zbS1uMlwiLFwibXQtc20tbjJcIjpcIkZsZXgtbW9kdWxlX19tdC1zbS1uMlwiLFwibXktc20tbjJcIjpcIkZsZXgtbW9kdWxlX19teS1zbS1uMlwiLFwibXItc20tbjJcIjpcIkZsZXgtbW9kdWxlX19tci1zbS1uMlwiLFwibXgtc20tbjJcIjpcIkZsZXgtbW9kdWxlX19teC1zbS1uMlwiLFwibWItc20tbjJcIjpcIkZsZXgtbW9kdWxlX19tYi1zbS1uMlwiLFwibWwtc20tbjJcIjpcIkZsZXgtbW9kdWxlX19tbC1zbS1uMlwiLFwibS1zbS1uM1wiOlwiRmxleC1tb2R1bGVfX20tc20tbjNcIixcIm10LXNtLW4zXCI6XCJGbGV4LW1vZHVsZV9fbXQtc20tbjNcIixcIm15LXNtLW4zXCI6XCJGbGV4LW1vZHVsZV9fbXktc20tbjNcIixcIm1yLXNtLW4zXCI6XCJGbGV4LW1vZHVsZV9fbXItc20tbjNcIixcIm14LXNtLW4zXCI6XCJGbGV4LW1vZHVsZV9fbXgtc20tbjNcIixcIm1iLXNtLW4zXCI6XCJGbGV4LW1vZHVsZV9fbWItc20tbjNcIixcIm1sLXNtLW4zXCI6XCJGbGV4LW1vZHVsZV9fbWwtc20tbjNcIixcIm0tc20tbjRcIjpcIkZsZXgtbW9kdWxlX19tLXNtLW40XCIsXCJtdC1zbS1uNFwiOlwiRmxleC1tb2R1bGVfX210LXNtLW40XCIsXCJteS1zbS1uNFwiOlwiRmxleC1tb2R1bGVfX215LXNtLW40XCIsXCJtci1zbS1uNFwiOlwiRmxleC1tb2R1bGVfX21yLXNtLW40XCIsXCJteC1zbS1uNFwiOlwiRmxleC1tb2R1bGVfX214LXNtLW40XCIsXCJtYi1zbS1uNFwiOlwiRmxleC1tb2R1bGVfX21iLXNtLW40XCIsXCJtbC1zbS1uNFwiOlwiRmxleC1tb2R1bGVfX21sLXNtLW40XCIsXCJtLXNtLW41XCI6XCJGbGV4LW1vZHVsZV9fbS1zbS1uNVwiLFwibXQtc20tbjVcIjpcIkZsZXgtbW9kdWxlX19tdC1zbS1uNVwiLFwibXktc20tbjVcIjpcIkZsZXgtbW9kdWxlX19teS1zbS1uNVwiLFwibXItc20tbjVcIjpcIkZsZXgtbW9kdWxlX19tci1zbS1uNVwiLFwibXgtc20tbjVcIjpcIkZsZXgtbW9kdWxlX19teC1zbS1uNVwiLFwibWItc20tbjVcIjpcIkZsZXgtbW9kdWxlX19tYi1zbS1uNVwiLFwibWwtc20tbjVcIjpcIkZsZXgtbW9kdWxlX19tbC1zbS1uNVwiLFwibS1zbS1hdXRvXCI6XCJGbGV4LW1vZHVsZV9fbS1zbS1hdXRvXCIsXCJtdC1zbS1hdXRvXCI6XCJGbGV4LW1vZHVsZV9fbXQtc20tYXV0b1wiLFwibXktc20tYXV0b1wiOlwiRmxleC1tb2R1bGVfX215LXNtLWF1dG9cIixcIm1yLXNtLWF1dG9cIjpcIkZsZXgtbW9kdWxlX19tci1zbS1hdXRvXCIsXCJteC1zbS1hdXRvXCI6XCJGbGV4LW1vZHVsZV9fbXgtc20tYXV0b1wiLFwibWItc20tYXV0b1wiOlwiRmxleC1tb2R1bGVfX21iLXNtLWF1dG9cIixcIm1sLXNtLWF1dG9cIjpcIkZsZXgtbW9kdWxlX19tbC1zbS1hdXRvXCIsXCJtLW1kLTBcIjpcIkZsZXgtbW9kdWxlX19tLW1kLTBcIixcIm10LW1kLTBcIjpcIkZsZXgtbW9kdWxlX19tdC1tZC0wXCIsXCJteS1tZC0wXCI6XCJGbGV4LW1vZHVsZV9fbXktbWQtMFwiLFwibXItbWQtMFwiOlwiRmxleC1tb2R1bGVfX21yLW1kLTBcIixcIm14LW1kLTBcIjpcIkZsZXgtbW9kdWxlX19teC1tZC0wXCIsXCJtYi1tZC0wXCI6XCJGbGV4LW1vZHVsZV9fbWItbWQtMFwiLFwibWwtbWQtMFwiOlwiRmxleC1tb2R1bGVfX21sLW1kLTBcIixcIm0tbWQtMVwiOlwiRmxleC1tb2R1bGVfX20tbWQtMVwiLFwibXQtbWQtMVwiOlwiRmxleC1tb2R1bGVfX210LW1kLTFcIixcIm15LW1kLTFcIjpcIkZsZXgtbW9kdWxlX19teS1tZC0xXCIsXCJtci1tZC0xXCI6XCJGbGV4LW1vZHVsZV9fbXItbWQtMVwiLFwibXgtbWQtMVwiOlwiRmxleC1tb2R1bGVfX214LW1kLTFcIixcIm1iLW1kLTFcIjpcIkZsZXgtbW9kdWxlX19tYi1tZC0xXCIsXCJtbC1tZC0xXCI6XCJGbGV4LW1vZHVsZV9fbWwtbWQtMVwiLFwibS1tZC0yXCI6XCJGbGV4LW1vZHVsZV9fbS1tZC0yXCIsXCJtdC1tZC0yXCI6XCJGbGV4LW1vZHVsZV9fbXQtbWQtMlwiLFwibXktbWQtMlwiOlwiRmxleC1tb2R1bGVfX215LW1kLTJcIixcIm1yLW1kLTJcIjpcIkZsZXgtbW9kdWxlX19tci1tZC0yXCIsXCJteC1tZC0yXCI6XCJGbGV4LW1vZHVsZV9fbXgtbWQtMlwiLFwibWItbWQtMlwiOlwiRmxleC1tb2R1bGVfX21iLW1kLTJcIixcIm1sLW1kLTJcIjpcIkZsZXgtbW9kdWxlX19tbC1tZC0yXCIsXCJtLW1kLTNcIjpcIkZsZXgtbW9kdWxlX19tLW1kLTNcIixcIm10LW1kLTNcIjpcIkZsZXgtbW9kdWxlX19tdC1tZC0zXCIsXCJteS1tZC0zXCI6XCJGbGV4LW1vZHVsZV9fbXktbWQtM1wiLFwibXItbWQtM1wiOlwiRmxleC1tb2R1bGVfX21yLW1kLTNcIixcIm14LW1kLTNcIjpcIkZsZXgtbW9kdWxlX19teC1tZC0zXCIsXCJtYi1tZC0zXCI6XCJGbGV4LW1vZHVsZV9fbWItbWQtM1wiLFwibWwtbWQtM1wiOlwiRmxleC1tb2R1bGVfX21sLW1kLTNcIixcIm0tbWQtNFwiOlwiRmxleC1tb2R1bGVfX20tbWQtNFwiLFwibXQtbWQtNFwiOlwiRmxleC1tb2R1bGVfX210LW1kLTRcIixcIm15LW1kLTRcIjpcIkZsZXgtbW9kdWxlX19teS1tZC00XCIsXCJtci1tZC00XCI6XCJGbGV4LW1vZHVsZV9fbXItbWQtNFwiLFwibXgtbWQtNFwiOlwiRmxleC1tb2R1bGVfX214LW1kLTRcIixcIm1iLW1kLTRcIjpcIkZsZXgtbW9kdWxlX19tYi1tZC00XCIsXCJtbC1tZC00XCI6XCJGbGV4LW1vZHVsZV9fbWwtbWQtNFwiLFwibS1tZC01XCI6XCJGbGV4LW1vZHVsZV9fbS1tZC01XCIsXCJtdC1tZC01XCI6XCJGbGV4LW1vZHVsZV9fbXQtbWQtNVwiLFwibXktbWQtNVwiOlwiRmxleC1tb2R1bGVfX215LW1kLTVcIixcIm1yLW1kLTVcIjpcIkZsZXgtbW9kdWxlX19tci1tZC01XCIsXCJteC1tZC01XCI6XCJGbGV4LW1vZHVsZV9fbXgtbWQtNVwiLFwibWItbWQtNVwiOlwiRmxleC1tb2R1bGVfX21iLW1kLTVcIixcIm1sLW1kLTVcIjpcIkZsZXgtbW9kdWxlX19tbC1tZC01XCIsXCJwLW1kLTBcIjpcIkZsZXgtbW9kdWxlX19wLW1kLTBcIixcInB0LW1kLTBcIjpcIkZsZXgtbW9kdWxlX19wdC1tZC0wXCIsXCJweS1tZC0wXCI6XCJGbGV4LW1vZHVsZV9fcHktbWQtMFwiLFwicHItbWQtMFwiOlwiRmxleC1tb2R1bGVfX3ByLW1kLTBcIixcInB4LW1kLTBcIjpcIkZsZXgtbW9kdWxlX19weC1tZC0wXCIsXCJwYi1tZC0wXCI6XCJGbGV4LW1vZHVsZV9fcGItbWQtMFwiLFwicGwtbWQtMFwiOlwiRmxleC1tb2R1bGVfX3BsLW1kLTBcIixcInAtbWQtMVwiOlwiRmxleC1tb2R1bGVfX3AtbWQtMVwiLFwicHQtbWQtMVwiOlwiRmxleC1tb2R1bGVfX3B0LW1kLTFcIixcInB5LW1kLTFcIjpcIkZsZXgtbW9kdWxlX19weS1tZC0xXCIsXCJwci1tZC0xXCI6XCJGbGV4LW1vZHVsZV9fcHItbWQtMVwiLFwicHgtbWQtMVwiOlwiRmxleC1tb2R1bGVfX3B4LW1kLTFcIixcInBiLW1kLTFcIjpcIkZsZXgtbW9kdWxlX19wYi1tZC0xXCIsXCJwbC1tZC0xXCI6XCJGbGV4LW1vZHVsZV9fcGwtbWQtMVwiLFwicC1tZC0yXCI6XCJGbGV4LW1vZHVsZV9fcC1tZC0yXCIsXCJwdC1tZC0yXCI6XCJGbGV4LW1vZHVsZV9fcHQtbWQtMlwiLFwicHktbWQtMlwiOlwiRmxleC1tb2R1bGVfX3B5LW1kLTJcIixcInByLW1kLTJcIjpcIkZsZXgtbW9kdWxlX19wci1tZC0yXCIsXCJweC1tZC0yXCI6XCJGbGV4LW1vZHVsZV9fcHgtbWQtMlwiLFwicGItbWQtMlwiOlwiRmxleC1tb2R1bGVfX3BiLW1kLTJcIixcInBsLW1kLTJcIjpcIkZsZXgtbW9kdWxlX19wbC1tZC0yXCIsXCJwLW1kLTNcIjpcIkZsZXgtbW9kdWxlX19wLW1kLTNcIixcInB0LW1kLTNcIjpcIkZsZXgtbW9kdWxlX19wdC1tZC0zXCIsXCJweS1tZC0zXCI6XCJGbGV4LW1vZHVsZV9fcHktbWQtM1wiLFwicHItbWQtM1wiOlwiRmxleC1tb2R1bGVfX3ByLW1kLTNcIixcInB4LW1kLTNcIjpcIkZsZXgtbW9kdWxlX19weC1tZC0zXCIsXCJwYi1tZC0zXCI6XCJGbGV4LW1vZHVsZV9fcGItbWQtM1wiLFwicGwtbWQtM1wiOlwiRmxleC1tb2R1bGVfX3BsLW1kLTNcIixcInAtbWQtNFwiOlwiRmxleC1tb2R1bGVfX3AtbWQtNFwiLFwicHQtbWQtNFwiOlwiRmxleC1tb2R1bGVfX3B0LW1kLTRcIixcInB5LW1kLTRcIjpcIkZsZXgtbW9kdWxlX19weS1tZC00XCIsXCJwci1tZC00XCI6XCJGbGV4LW1vZHVsZV9fcHItbWQtNFwiLFwicHgtbWQtNFwiOlwiRmxleC1tb2R1bGVfX3B4LW1kLTRcIixcInBiLW1kLTRcIjpcIkZsZXgtbW9kdWxlX19wYi1tZC00XCIsXCJwbC1tZC00XCI6XCJGbGV4LW1vZHVsZV9fcGwtbWQtNFwiLFwicC1tZC01XCI6XCJGbGV4LW1vZHVsZV9fcC1tZC01XCIsXCJwdC1tZC01XCI6XCJGbGV4LW1vZHVsZV9fcHQtbWQtNVwiLFwicHktbWQtNVwiOlwiRmxleC1tb2R1bGVfX3B5LW1kLTVcIixcInByLW1kLTVcIjpcIkZsZXgtbW9kdWxlX19wci1tZC01XCIsXCJweC1tZC01XCI6XCJGbGV4LW1vZHVsZV9fcHgtbWQtNVwiLFwicGItbWQtNVwiOlwiRmxleC1tb2R1bGVfX3BiLW1kLTVcIixcInBsLW1kLTVcIjpcIkZsZXgtbW9kdWxlX19wbC1tZC01XCIsXCJtLW1kLW4xXCI6XCJGbGV4LW1vZHVsZV9fbS1tZC1uMVwiLFwibXQtbWQtbjFcIjpcIkZsZXgtbW9kdWxlX19tdC1tZC1uMVwiLFwibXktbWQtbjFcIjpcIkZsZXgtbW9kdWxlX19teS1tZC1uMVwiLFwibXItbWQtbjFcIjpcIkZsZXgtbW9kdWxlX19tci1tZC1uMVwiLFwibXgtbWQtbjFcIjpcIkZsZXgtbW9kdWxlX19teC1tZC1uMVwiLFwibWItbWQtbjFcIjpcIkZsZXgtbW9kdWxlX19tYi1tZC1uMVwiLFwibWwtbWQtbjFcIjpcIkZsZXgtbW9kdWxlX19tbC1tZC1uMVwiLFwibS1tZC1uMlwiOlwiRmxleC1tb2R1bGVfX20tbWQtbjJcIixcIm10LW1kLW4yXCI6XCJGbGV4LW1vZHVsZV9fbXQtbWQtbjJcIixcIm15LW1kLW4yXCI6XCJGbGV4LW1vZHVsZV9fbXktbWQtbjJcIixcIm1yLW1kLW4yXCI6XCJGbGV4LW1vZHVsZV9fbXItbWQtbjJcIixcIm14LW1kLW4yXCI6XCJGbGV4LW1vZHVsZV9fbXgtbWQtbjJcIixcIm1iLW1kLW4yXCI6XCJGbGV4LW1vZHVsZV9fbWItbWQtbjJcIixcIm1sLW1kLW4yXCI6XCJGbGV4LW1vZHVsZV9fbWwtbWQtbjJcIixcIm0tbWQtbjNcIjpcIkZsZXgtbW9kdWxlX19tLW1kLW4zXCIsXCJtdC1tZC1uM1wiOlwiRmxleC1tb2R1bGVfX210LW1kLW4zXCIsXCJteS1tZC1uM1wiOlwiRmxleC1tb2R1bGVfX215LW1kLW4zXCIsXCJtci1tZC1uM1wiOlwiRmxleC1tb2R1bGVfX21yLW1kLW4zXCIsXCJteC1tZC1uM1wiOlwiRmxleC1tb2R1bGVfX214LW1kLW4zXCIsXCJtYi1tZC1uM1wiOlwiRmxleC1tb2R1bGVfX21iLW1kLW4zXCIsXCJtbC1tZC1uM1wiOlwiRmxleC1tb2R1bGVfX21sLW1kLW4zXCIsXCJtLW1kLW40XCI6XCJGbGV4LW1vZHVsZV9fbS1tZC1uNFwiLFwibXQtbWQtbjRcIjpcIkZsZXgtbW9kdWxlX19tdC1tZC1uNFwiLFwibXktbWQtbjRcIjpcIkZsZXgtbW9kdWxlX19teS1tZC1uNFwiLFwibXItbWQtbjRcIjpcIkZsZXgtbW9kdWxlX19tci1tZC1uNFwiLFwibXgtbWQtbjRcIjpcIkZsZXgtbW9kdWxlX19teC1tZC1uNFwiLFwibWItbWQtbjRcIjpcIkZsZXgtbW9kdWxlX19tYi1tZC1uNFwiLFwibWwtbWQtbjRcIjpcIkZsZXgtbW9kdWxlX19tbC1tZC1uNFwiLFwibS1tZC1uNVwiOlwiRmxleC1tb2R1bGVfX20tbWQtbjVcIixcIm10LW1kLW41XCI6XCJGbGV4LW1vZHVsZV9fbXQtbWQtbjVcIixcIm15LW1kLW41XCI6XCJGbGV4LW1vZHVsZV9fbXktbWQtbjVcIixcIm1yLW1kLW41XCI6XCJGbGV4LW1vZHVsZV9fbXItbWQtbjVcIixcIm14LW1kLW41XCI6XCJGbGV4LW1vZHVsZV9fbXgtbWQtbjVcIixcIm1iLW1kLW41XCI6XCJGbGV4LW1vZHVsZV9fbWItbWQtbjVcIixcIm1sLW1kLW41XCI6XCJGbGV4LW1vZHVsZV9fbWwtbWQtbjVcIixcIm0tbWQtYXV0b1wiOlwiRmxleC1tb2R1bGVfX20tbWQtYXV0b1wiLFwibXQtbWQtYXV0b1wiOlwiRmxleC1tb2R1bGVfX210LW1kLWF1dG9cIixcIm15LW1kLWF1dG9cIjpcIkZsZXgtbW9kdWxlX19teS1tZC1hdXRvXCIsXCJtci1tZC1hdXRvXCI6XCJGbGV4LW1vZHVsZV9fbXItbWQtYXV0b1wiLFwibXgtbWQtYXV0b1wiOlwiRmxleC1tb2R1bGVfX214LW1kLWF1dG9cIixcIm1iLW1kLWF1dG9cIjpcIkZsZXgtbW9kdWxlX19tYi1tZC1hdXRvXCIsXCJtbC1tZC1hdXRvXCI6XCJGbGV4LW1vZHVsZV9fbWwtbWQtYXV0b1wiLFwibS1sZy0wXCI6XCJGbGV4LW1vZHVsZV9fbS1sZy0wXCIsXCJtdC1sZy0wXCI6XCJGbGV4LW1vZHVsZV9fbXQtbGctMFwiLFwibXktbGctMFwiOlwiRmxleC1tb2R1bGVfX215LWxnLTBcIixcIm1yLWxnLTBcIjpcIkZsZXgtbW9kdWxlX19tci1sZy0wXCIsXCJteC1sZy0wXCI6XCJGbGV4LW1vZHVsZV9fbXgtbGctMFwiLFwibWItbGctMFwiOlwiRmxleC1tb2R1bGVfX21iLWxnLTBcIixcIm1sLWxnLTBcIjpcIkZsZXgtbW9kdWxlX19tbC1sZy0wXCIsXCJtLWxnLTFcIjpcIkZsZXgtbW9kdWxlX19tLWxnLTFcIixcIm10LWxnLTFcIjpcIkZsZXgtbW9kdWxlX19tdC1sZy0xXCIsXCJteS1sZy0xXCI6XCJGbGV4LW1vZHVsZV9fbXktbGctMVwiLFwibXItbGctMVwiOlwiRmxleC1tb2R1bGVfX21yLWxnLTFcIixcIm14LWxnLTFcIjpcIkZsZXgtbW9kdWxlX19teC1sZy0xXCIsXCJtYi1sZy0xXCI6XCJGbGV4LW1vZHVsZV9fbWItbGctMVwiLFwibWwtbGctMVwiOlwiRmxleC1tb2R1bGVfX21sLWxnLTFcIixcIm0tbGctMlwiOlwiRmxleC1tb2R1bGVfX20tbGctMlwiLFwibXQtbGctMlwiOlwiRmxleC1tb2R1bGVfX210LWxnLTJcIixcIm15LWxnLTJcIjpcIkZsZXgtbW9kdWxlX19teS1sZy0yXCIsXCJtci1sZy0yXCI6XCJGbGV4LW1vZHVsZV9fbXItbGctMlwiLFwibXgtbGctMlwiOlwiRmxleC1tb2R1bGVfX214LWxnLTJcIixcIm1iLWxnLTJcIjpcIkZsZXgtbW9kdWxlX19tYi1sZy0yXCIsXCJtbC1sZy0yXCI6XCJGbGV4LW1vZHVsZV9fbWwtbGctMlwiLFwibS1sZy0zXCI6XCJGbGV4LW1vZHVsZV9fbS1sZy0zXCIsXCJtdC1sZy0zXCI6XCJGbGV4LW1vZHVsZV9fbXQtbGctM1wiLFwibXktbGctM1wiOlwiRmxleC1tb2R1bGVfX215LWxnLTNcIixcIm1yLWxnLTNcIjpcIkZsZXgtbW9kdWxlX19tci1sZy0zXCIsXCJteC1sZy0zXCI6XCJGbGV4LW1vZHVsZV9fbXgtbGctM1wiLFwibWItbGctM1wiOlwiRmxleC1tb2R1bGVfX21iLWxnLTNcIixcIm1sLWxnLTNcIjpcIkZsZXgtbW9kdWxlX19tbC1sZy0zXCIsXCJtLWxnLTRcIjpcIkZsZXgtbW9kdWxlX19tLWxnLTRcIixcIm10LWxnLTRcIjpcIkZsZXgtbW9kdWxlX19tdC1sZy00XCIsXCJteS1sZy00XCI6XCJGbGV4LW1vZHVsZV9fbXktbGctNFwiLFwibXItbGctNFwiOlwiRmxleC1tb2R1bGVfX21yLWxnLTRcIixcIm14LWxnLTRcIjpcIkZsZXgtbW9kdWxlX19teC1sZy00XCIsXCJtYi1sZy00XCI6XCJGbGV4LW1vZHVsZV9fbWItbGctNFwiLFwibWwtbGctNFwiOlwiRmxleC1tb2R1bGVfX21sLWxnLTRcIixcIm0tbGctNVwiOlwiRmxleC1tb2R1bGVfX20tbGctNVwiLFwibXQtbGctNVwiOlwiRmxleC1tb2R1bGVfX210LWxnLTVcIixcIm15LWxnLTVcIjpcIkZsZXgtbW9kdWxlX19teS1sZy01XCIsXCJtci1sZy01XCI6XCJGbGV4LW1vZHVsZV9fbXItbGctNVwiLFwibXgtbGctNVwiOlwiRmxleC1tb2R1bGVfX214LWxnLTVcIixcIm1iLWxnLTVcIjpcIkZsZXgtbW9kdWxlX19tYi1sZy01XCIsXCJtbC1sZy01XCI6XCJGbGV4LW1vZHVsZV9fbWwtbGctNVwiLFwicC1sZy0wXCI6XCJGbGV4LW1vZHVsZV9fcC1sZy0wXCIsXCJwdC1sZy0wXCI6XCJGbGV4LW1vZHVsZV9fcHQtbGctMFwiLFwicHktbGctMFwiOlwiRmxleC1tb2R1bGVfX3B5LWxnLTBcIixcInByLWxnLTBcIjpcIkZsZXgtbW9kdWxlX19wci1sZy0wXCIsXCJweC1sZy0wXCI6XCJGbGV4LW1vZHVsZV9fcHgtbGctMFwiLFwicGItbGctMFwiOlwiRmxleC1tb2R1bGVfX3BiLWxnLTBcIixcInBsLWxnLTBcIjpcIkZsZXgtbW9kdWxlX19wbC1sZy0wXCIsXCJwLWxnLTFcIjpcIkZsZXgtbW9kdWxlX19wLWxnLTFcIixcInB0LWxnLTFcIjpcIkZsZXgtbW9kdWxlX19wdC1sZy0xXCIsXCJweS1sZy0xXCI6XCJGbGV4LW1vZHVsZV9fcHktbGctMVwiLFwicHItbGctMVwiOlwiRmxleC1tb2R1bGVfX3ByLWxnLTFcIixcInB4LWxnLTFcIjpcIkZsZXgtbW9kdWxlX19weC1sZy0xXCIsXCJwYi1sZy0xXCI6XCJGbGV4LW1vZHVsZV9fcGItbGctMVwiLFwicGwtbGctMVwiOlwiRmxleC1tb2R1bGVfX3BsLWxnLTFcIixcInAtbGctMlwiOlwiRmxleC1tb2R1bGVfX3AtbGctMlwiLFwicHQtbGctMlwiOlwiRmxleC1tb2R1bGVfX3B0LWxnLTJcIixcInB5LWxnLTJcIjpcIkZsZXgtbW9kdWxlX19weS1sZy0yXCIsXCJwci1sZy0yXCI6XCJGbGV4LW1vZHVsZV9fcHItbGctMlwiLFwicHgtbGctMlwiOlwiRmxleC1tb2R1bGVfX3B4LWxnLTJcIixcInBiLWxnLTJcIjpcIkZsZXgtbW9kdWxlX19wYi1sZy0yXCIsXCJwbC1sZy0yXCI6XCJGbGV4LW1vZHVsZV9fcGwtbGctMlwiLFwicC1sZy0zXCI6XCJGbGV4LW1vZHVsZV9fcC1sZy0zXCIsXCJwdC1sZy0zXCI6XCJGbGV4LW1vZHVsZV9fcHQtbGctM1wiLFwicHktbGctM1wiOlwiRmxleC1tb2R1bGVfX3B5LWxnLTNcIixcInByLWxnLTNcIjpcIkZsZXgtbW9kdWxlX19wci1sZy0zXCIsXCJweC1sZy0zXCI6XCJGbGV4LW1vZHVsZV9fcHgtbGctM1wiLFwicGItbGctM1wiOlwiRmxleC1tb2R1bGVfX3BiLWxnLTNcIixcInBsLWxnLTNcIjpcIkZsZXgtbW9kdWxlX19wbC1sZy0zXCIsXCJwLWxnLTRcIjpcIkZsZXgtbW9kdWxlX19wLWxnLTRcIixcInB0LWxnLTRcIjpcIkZsZXgtbW9kdWxlX19wdC1sZy00XCIsXCJweS1sZy00XCI6XCJGbGV4LW1vZHVsZV9fcHktbGctNFwiLFwicHItbGctNFwiOlwiRmxleC1tb2R1bGVfX3ByLWxnLTRcIixcInB4LWxnLTRcIjpcIkZsZXgtbW9kdWxlX19weC1sZy00XCIsXCJwYi1sZy00XCI6XCJGbGV4LW1vZHVsZV9fcGItbGctNFwiLFwicGwtbGctNFwiOlwiRmxleC1tb2R1bGVfX3BsLWxnLTRcIixcInAtbGctNVwiOlwiRmxleC1tb2R1bGVfX3AtbGctNVwiLFwicHQtbGctNVwiOlwiRmxleC1tb2R1bGVfX3B0LWxnLTVcIixcInB5LWxnLTVcIjpcIkZsZXgtbW9kdWxlX19weS1sZy01XCIsXCJwci1sZy01XCI6XCJGbGV4LW1vZHVsZV9fcHItbGctNVwiLFwicHgtbGctNVwiOlwiRmxleC1tb2R1bGVfX3B4LWxnLTVcIixcInBiLWxnLTVcIjpcIkZsZXgtbW9kdWxlX19wYi1sZy01XCIsXCJwbC1sZy01XCI6XCJGbGV4LW1vZHVsZV9fcGwtbGctNVwiLFwibS1sZy1uMVwiOlwiRmxleC1tb2R1bGVfX20tbGctbjFcIixcIm10LWxnLW4xXCI6XCJGbGV4LW1vZHVsZV9fbXQtbGctbjFcIixcIm15LWxnLW4xXCI6XCJGbGV4LW1vZHVsZV9fbXktbGctbjFcIixcIm1yLWxnLW4xXCI6XCJGbGV4LW1vZHVsZV9fbXItbGctbjFcIixcIm14LWxnLW4xXCI6XCJGbGV4LW1vZHVsZV9fbXgtbGctbjFcIixcIm1iLWxnLW4xXCI6XCJGbGV4LW1vZHVsZV9fbWItbGctbjFcIixcIm1sLWxnLW4xXCI6XCJGbGV4LW1vZHVsZV9fbWwtbGctbjFcIixcIm0tbGctbjJcIjpcIkZsZXgtbW9kdWxlX19tLWxnLW4yXCIsXCJtdC1sZy1uMlwiOlwiRmxleC1tb2R1bGVfX210LWxnLW4yXCIsXCJteS1sZy1uMlwiOlwiRmxleC1tb2R1bGVfX215LWxnLW4yXCIsXCJtci1sZy1uMlwiOlwiRmxleC1tb2R1bGVfX21yLWxnLW4yXCIsXCJteC1sZy1uMlwiOlwiRmxleC1tb2R1bGVfX214LWxnLW4yXCIsXCJtYi1sZy1uMlwiOlwiRmxleC1tb2R1bGVfX21iLWxnLW4yXCIsXCJtbC1sZy1uMlwiOlwiRmxleC1tb2R1bGVfX21sLWxnLW4yXCIsXCJtLWxnLW4zXCI6XCJGbGV4LW1vZHVsZV9fbS1sZy1uM1wiLFwibXQtbGctbjNcIjpcIkZsZXgtbW9kdWxlX19tdC1sZy1uM1wiLFwibXktbGctbjNcIjpcIkZsZXgtbW9kdWxlX19teS1sZy1uM1wiLFwibXItbGctbjNcIjpcIkZsZXgtbW9kdWxlX19tci1sZy1uM1wiLFwibXgtbGctbjNcIjpcIkZsZXgtbW9kdWxlX19teC1sZy1uM1wiLFwibWItbGctbjNcIjpcIkZsZXgtbW9kdWxlX19tYi1sZy1uM1wiLFwibWwtbGctbjNcIjpcIkZsZXgtbW9kdWxlX19tbC1sZy1uM1wiLFwibS1sZy1uNFwiOlwiRmxleC1tb2R1bGVfX20tbGctbjRcIixcIm10LWxnLW40XCI6XCJGbGV4LW1vZHVsZV9fbXQtbGctbjRcIixcIm15LWxnLW40XCI6XCJGbGV4LW1vZHVsZV9fbXktbGctbjRcIixcIm1yLWxnLW40XCI6XCJGbGV4LW1vZHVsZV9fbXItbGctbjRcIixcIm14LWxnLW40XCI6XCJGbGV4LW1vZHVsZV9fbXgtbGctbjRcIixcIm1iLWxnLW40XCI6XCJGbGV4LW1vZHVsZV9fbWItbGctbjRcIixcIm1sLWxnLW40XCI6XCJGbGV4LW1vZHVsZV9fbWwtbGctbjRcIixcIm0tbGctbjVcIjpcIkZsZXgtbW9kdWxlX19tLWxnLW41XCIsXCJtdC1sZy1uNVwiOlwiRmxleC1tb2R1bGVfX210LWxnLW41XCIsXCJteS1sZy1uNVwiOlwiRmxleC1tb2R1bGVfX215LWxnLW41XCIsXCJtci1sZy1uNVwiOlwiRmxleC1tb2R1bGVfX21yLWxnLW41XCIsXCJteC1sZy1uNVwiOlwiRmxleC1tb2R1bGVfX214LWxnLW41XCIsXCJtYi1sZy1uNVwiOlwiRmxleC1tb2R1bGVfX21iLWxnLW41XCIsXCJtbC1sZy1uNVwiOlwiRmxleC1tb2R1bGVfX21sLWxnLW41XCIsXCJtLWxnLWF1dG9cIjpcIkZsZXgtbW9kdWxlX19tLWxnLWF1dG9cIixcIm10LWxnLWF1dG9cIjpcIkZsZXgtbW9kdWxlX19tdC1sZy1hdXRvXCIsXCJteS1sZy1hdXRvXCI6XCJGbGV4LW1vZHVsZV9fbXktbGctYXV0b1wiLFwibXItbGctYXV0b1wiOlwiRmxleC1tb2R1bGVfX21yLWxnLWF1dG9cIixcIm14LWxnLWF1dG9cIjpcIkZsZXgtbW9kdWxlX19teC1sZy1hdXRvXCIsXCJtYi1sZy1hdXRvXCI6XCJGbGV4LW1vZHVsZV9fbWItbGctYXV0b1wiLFwibWwtbGctYXV0b1wiOlwiRmxleC1tb2R1bGVfX21sLWxnLWF1dG9cIixcIm0teGwtMFwiOlwiRmxleC1tb2R1bGVfX20teGwtMFwiLFwibXQteGwtMFwiOlwiRmxleC1tb2R1bGVfX210LXhsLTBcIixcIm15LXhsLTBcIjpcIkZsZXgtbW9kdWxlX19teS14bC0wXCIsXCJtci14bC0wXCI6XCJGbGV4LW1vZHVsZV9fbXIteGwtMFwiLFwibXgteGwtMFwiOlwiRmxleC1tb2R1bGVfX214LXhsLTBcIixcIm1iLXhsLTBcIjpcIkZsZXgtbW9kdWxlX19tYi14bC0wXCIsXCJtbC14bC0wXCI6XCJGbGV4LW1vZHVsZV9fbWwteGwtMFwiLFwibS14bC0xXCI6XCJGbGV4LW1vZHVsZV9fbS14bC0xXCIsXCJtdC14bC0xXCI6XCJGbGV4LW1vZHVsZV9fbXQteGwtMVwiLFwibXkteGwtMVwiOlwiRmxleC1tb2R1bGVfX215LXhsLTFcIixcIm1yLXhsLTFcIjpcIkZsZXgtbW9kdWxlX19tci14bC0xXCIsXCJteC14bC0xXCI6XCJGbGV4LW1vZHVsZV9fbXgteGwtMVwiLFwibWIteGwtMVwiOlwiRmxleC1tb2R1bGVfX21iLXhsLTFcIixcIm1sLXhsLTFcIjpcIkZsZXgtbW9kdWxlX19tbC14bC0xXCIsXCJtLXhsLTJcIjpcIkZsZXgtbW9kdWxlX19tLXhsLTJcIixcIm10LXhsLTJcIjpcIkZsZXgtbW9kdWxlX19tdC14bC0yXCIsXCJteS14bC0yXCI6XCJGbGV4LW1vZHVsZV9fbXkteGwtMlwiLFwibXIteGwtMlwiOlwiRmxleC1tb2R1bGVfX21yLXhsLTJcIixcIm14LXhsLTJcIjpcIkZsZXgtbW9kdWxlX19teC14bC0yXCIsXCJtYi14bC0yXCI6XCJGbGV4LW1vZHVsZV9fbWIteGwtMlwiLFwibWwteGwtMlwiOlwiRmxleC1tb2R1bGVfX21sLXhsLTJcIixcIm0teGwtM1wiOlwiRmxleC1tb2R1bGVfX20teGwtM1wiLFwibXQteGwtM1wiOlwiRmxleC1tb2R1bGVfX210LXhsLTNcIixcIm15LXhsLTNcIjpcIkZsZXgtbW9kdWxlX19teS14bC0zXCIsXCJtci14bC0zXCI6XCJGbGV4LW1vZHVsZV9fbXIteGwtM1wiLFwibXgteGwtM1wiOlwiRmxleC1tb2R1bGVfX214LXhsLTNcIixcIm1iLXhsLTNcIjpcIkZsZXgtbW9kdWxlX19tYi14bC0zXCIsXCJtbC14bC0zXCI6XCJGbGV4LW1vZHVsZV9fbWwteGwtM1wiLFwibS14bC00XCI6XCJGbGV4LW1vZHVsZV9fbS14bC00XCIsXCJtdC14bC00XCI6XCJGbGV4LW1vZHVsZV9fbXQteGwtNFwiLFwibXkteGwtNFwiOlwiRmxleC1tb2R1bGVfX215LXhsLTRcIixcIm1yLXhsLTRcIjpcIkZsZXgtbW9kdWxlX19tci14bC00XCIsXCJteC14bC00XCI6XCJGbGV4LW1vZHVsZV9fbXgteGwtNFwiLFwibWIteGwtNFwiOlwiRmxleC1tb2R1bGVfX21iLXhsLTRcIixcIm1sLXhsLTRcIjpcIkZsZXgtbW9kdWxlX19tbC14bC00XCIsXCJtLXhsLTVcIjpcIkZsZXgtbW9kdWxlX19tLXhsLTVcIixcIm10LXhsLTVcIjpcIkZsZXgtbW9kdWxlX19tdC14bC01XCIsXCJteS14bC01XCI6XCJGbGV4LW1vZHVsZV9fbXkteGwtNVwiLFwibXIteGwtNVwiOlwiRmxleC1tb2R1bGVfX21yLXhsLTVcIixcIm14LXhsLTVcIjpcIkZsZXgtbW9kdWxlX19teC14bC01XCIsXCJtYi14bC01XCI6XCJGbGV4LW1vZHVsZV9fbWIteGwtNVwiLFwibWwteGwtNVwiOlwiRmxleC1tb2R1bGVfX21sLXhsLTVcIixcInAteGwtMFwiOlwiRmxleC1tb2R1bGVfX3AteGwtMFwiLFwicHQteGwtMFwiOlwiRmxleC1tb2R1bGVfX3B0LXhsLTBcIixcInB5LXhsLTBcIjpcIkZsZXgtbW9kdWxlX19weS14bC0wXCIsXCJwci14bC0wXCI6XCJGbGV4LW1vZHVsZV9fcHIteGwtMFwiLFwicHgteGwtMFwiOlwiRmxleC1tb2R1bGVfX3B4LXhsLTBcIixcInBiLXhsLTBcIjpcIkZsZXgtbW9kdWxlX19wYi14bC0wXCIsXCJwbC14bC0wXCI6XCJGbGV4LW1vZHVsZV9fcGwteGwtMFwiLFwicC14bC0xXCI6XCJGbGV4LW1vZHVsZV9fcC14bC0xXCIsXCJwdC14bC0xXCI6XCJGbGV4LW1vZHVsZV9fcHQteGwtMVwiLFwicHkteGwtMVwiOlwiRmxleC1tb2R1bGVfX3B5LXhsLTFcIixcInByLXhsLTFcIjpcIkZsZXgtbW9kdWxlX19wci14bC0xXCIsXCJweC14bC0xXCI6XCJGbGV4LW1vZHVsZV9fcHgteGwtMVwiLFwicGIteGwtMVwiOlwiRmxleC1tb2R1bGVfX3BiLXhsLTFcIixcInBsLXhsLTFcIjpcIkZsZXgtbW9kdWxlX19wbC14bC0xXCIsXCJwLXhsLTJcIjpcIkZsZXgtbW9kdWxlX19wLXhsLTJcIixcInB0LXhsLTJcIjpcIkZsZXgtbW9kdWxlX19wdC14bC0yXCIsXCJweS14bC0yXCI6XCJGbGV4LW1vZHVsZV9fcHkteGwtMlwiLFwicHIteGwtMlwiOlwiRmxleC1tb2R1bGVfX3ByLXhsLTJcIixcInB4LXhsLTJcIjpcIkZsZXgtbW9kdWxlX19weC14bC0yXCIsXCJwYi14bC0yXCI6XCJGbGV4LW1vZHVsZV9fcGIteGwtMlwiLFwicGwteGwtMlwiOlwiRmxleC1tb2R1bGVfX3BsLXhsLTJcIixcInAteGwtM1wiOlwiRmxleC1tb2R1bGVfX3AteGwtM1wiLFwicHQteGwtM1wiOlwiRmxleC1tb2R1bGVfX3B0LXhsLTNcIixcInB5LXhsLTNcIjpcIkZsZXgtbW9kdWxlX19weS14bC0zXCIsXCJwci14bC0zXCI6XCJGbGV4LW1vZHVsZV9fcHIteGwtM1wiLFwicHgteGwtM1wiOlwiRmxleC1tb2R1bGVfX3B4LXhsLTNcIixcInBiLXhsLTNcIjpcIkZsZXgtbW9kdWxlX19wYi14bC0zXCIsXCJwbC14bC0zXCI6XCJGbGV4LW1vZHVsZV9fcGwteGwtM1wiLFwicC14bC00XCI6XCJGbGV4LW1vZHVsZV9fcC14bC00XCIsXCJwdC14bC00XCI6XCJGbGV4LW1vZHVsZV9fcHQteGwtNFwiLFwicHkteGwtNFwiOlwiRmxleC1tb2R1bGVfX3B5LXhsLTRcIixcInByLXhsLTRcIjpcIkZsZXgtbW9kdWxlX19wci14bC00XCIsXCJweC14bC00XCI6XCJGbGV4LW1vZHVsZV9fcHgteGwtNFwiLFwicGIteGwtNFwiOlwiRmxleC1tb2R1bGVfX3BiLXhsLTRcIixcInBsLXhsLTRcIjpcIkZsZXgtbW9kdWxlX19wbC14bC00XCIsXCJwLXhsLTVcIjpcIkZsZXgtbW9kdWxlX19wLXhsLTVcIixcInB0LXhsLTVcIjpcIkZsZXgtbW9kdWxlX19wdC14bC01XCIsXCJweS14bC01XCI6XCJGbGV4LW1vZHVsZV9fcHkteGwtNVwiLFwicHIteGwtNVwiOlwiRmxleC1tb2R1bGVfX3ByLXhsLTVcIixcInB4LXhsLTVcIjpcIkZsZXgtbW9kdWxlX19weC14bC01XCIsXCJwYi14bC01XCI6XCJGbGV4LW1vZHVsZV9fcGIteGwtNVwiLFwicGwteGwtNVwiOlwiRmxleC1tb2R1bGVfX3BsLXhsLTVcIixcIm0teGwtbjFcIjpcIkZsZXgtbW9kdWxlX19tLXhsLW4xXCIsXCJtdC14bC1uMVwiOlwiRmxleC1tb2R1bGVfX210LXhsLW4xXCIsXCJteS14bC1uMVwiOlwiRmxleC1tb2R1bGVfX215LXhsLW4xXCIsXCJtci14bC1uMVwiOlwiRmxleC1tb2R1bGVfX21yLXhsLW4xXCIsXCJteC14bC1uMVwiOlwiRmxleC1tb2R1bGVfX214LXhsLW4xXCIsXCJtYi14bC1uMVwiOlwiRmxleC1tb2R1bGVfX21iLXhsLW4xXCIsXCJtbC14bC1uMVwiOlwiRmxleC1tb2R1bGVfX21sLXhsLW4xXCIsXCJtLXhsLW4yXCI6XCJGbGV4LW1vZHVsZV9fbS14bC1uMlwiLFwibXQteGwtbjJcIjpcIkZsZXgtbW9kdWxlX19tdC14bC1uMlwiLFwibXkteGwtbjJcIjpcIkZsZXgtbW9kdWxlX19teS14bC1uMlwiLFwibXIteGwtbjJcIjpcIkZsZXgtbW9kdWxlX19tci14bC1uMlwiLFwibXgteGwtbjJcIjpcIkZsZXgtbW9kdWxlX19teC14bC1uMlwiLFwibWIteGwtbjJcIjpcIkZsZXgtbW9kdWxlX19tYi14bC1uMlwiLFwibWwteGwtbjJcIjpcIkZsZXgtbW9kdWxlX19tbC14bC1uMlwiLFwibS14bC1uM1wiOlwiRmxleC1tb2R1bGVfX20teGwtbjNcIixcIm10LXhsLW4zXCI6XCJGbGV4LW1vZHVsZV9fbXQteGwtbjNcIixcIm15LXhsLW4zXCI6XCJGbGV4LW1vZHVsZV9fbXkteGwtbjNcIixcIm1yLXhsLW4zXCI6XCJGbGV4LW1vZHVsZV9fbXIteGwtbjNcIixcIm14LXhsLW4zXCI6XCJGbGV4LW1vZHVsZV9fbXgteGwtbjNcIixcIm1iLXhsLW4zXCI6XCJGbGV4LW1vZHVsZV9fbWIteGwtbjNcIixcIm1sLXhsLW4zXCI6XCJGbGV4LW1vZHVsZV9fbWwteGwtbjNcIixcIm0teGwtbjRcIjpcIkZsZXgtbW9kdWxlX19tLXhsLW40XCIsXCJtdC14bC1uNFwiOlwiRmxleC1tb2R1bGVfX210LXhsLW40XCIsXCJteS14bC1uNFwiOlwiRmxleC1tb2R1bGVfX215LXhsLW40XCIsXCJtci14bC1uNFwiOlwiRmxleC1tb2R1bGVfX21yLXhsLW40XCIsXCJteC14bC1uNFwiOlwiRmxleC1tb2R1bGVfX214LXhsLW40XCIsXCJtYi14bC1uNFwiOlwiRmxleC1tb2R1bGVfX21iLXhsLW40XCIsXCJtbC14bC1uNFwiOlwiRmxleC1tb2R1bGVfX21sLXhsLW40XCIsXCJtLXhsLW41XCI6XCJGbGV4LW1vZHVsZV9fbS14bC1uNVwiLFwibXQteGwtbjVcIjpcIkZsZXgtbW9kdWxlX19tdC14bC1uNVwiLFwibXkteGwtbjVcIjpcIkZsZXgtbW9kdWxlX19teS14bC1uNVwiLFwibXIteGwtbjVcIjpcIkZsZXgtbW9kdWxlX19tci14bC1uNVwiLFwibXgteGwtbjVcIjpcIkZsZXgtbW9kdWxlX19teC14bC1uNVwiLFwibWIteGwtbjVcIjpcIkZsZXgtbW9kdWxlX19tYi14bC1uNVwiLFwibWwteGwtbjVcIjpcIkZsZXgtbW9kdWxlX19tbC14bC1uNVwiLFwibS14bC1hdXRvXCI6XCJGbGV4LW1vZHVsZV9fbS14bC1hdXRvXCIsXCJtdC14bC1hdXRvXCI6XCJGbGV4LW1vZHVsZV9fbXQteGwtYXV0b1wiLFwibXkteGwtYXV0b1wiOlwiRmxleC1tb2R1bGVfX215LXhsLWF1dG9cIixcIm1yLXhsLWF1dG9cIjpcIkZsZXgtbW9kdWxlX19tci14bC1hdXRvXCIsXCJteC14bC1hdXRvXCI6XCJGbGV4LW1vZHVsZV9fbXgteGwtYXV0b1wiLFwibWIteGwtYXV0b1wiOlwiRmxleC1tb2R1bGVfX21iLXhsLWF1dG9cIixcIm1sLXhsLWF1dG9cIjpcIkZsZXgtbW9kdWxlX19tbC14bC1hdXRvXCJ9O1xuXG5mdW5jdGlvbiBGbGV4KHByb3BzKSB7XG4gIHZhciBfcHJvcHMkYXMgPSBwcm9wcy5hcyxcbiAgICAgIENvbXBvbmVudCA9IF9wcm9wcyRhcyA9PT0gdm9pZCAwID8gJ2RpdicgOiBfcHJvcHMkYXMsXG4gICAgICBfcHJvcHMkZmxleCA9IHByb3BzLmZsZXgsXG4gICAgICBmbGV4ID0gX3Byb3BzJGZsZXggPT09IHZvaWQgMCA/ICdmbGV4JyA6IF9wcm9wcyRmbGV4LFxuICAgICAgc21GbGV4ID0gcHJvcHMuc21GbGV4LFxuICAgICAgbWRGbGV4ID0gcHJvcHMubWRGbGV4LFxuICAgICAgbGdGbGV4ID0gcHJvcHMubGdGbGV4LFxuICAgICAgeGxGbGV4ID0gcHJvcHMueGxGbGV4LFxuICAgICAgX3Byb3BzJGRpcmVjdGlvbiA9IHByb3BzLmRpcmVjdGlvbixcbiAgICAgIGRpcmVjdGlvbiA9IF9wcm9wcyRkaXJlY3Rpb24gPT09IHZvaWQgMCA/ICdyb3cnIDogX3Byb3BzJGRpcmVjdGlvbixcbiAgICAgIHNtRGlyZWN0aW9uID0gcHJvcHMuc21EaXJlY3Rpb24sXG4gICAgICBtZERpcmVjdGlvbiA9IHByb3BzLm1kRGlyZWN0aW9uLFxuICAgICAgbGdEaXJlY3Rpb24gPSBwcm9wcy5sZ0RpcmVjdGlvbixcbiAgICAgIHhsRGlyZWN0aW9uID0gcHJvcHMueGxEaXJlY3Rpb24sXG4gICAgICBfcHJvcHMkYWxpZ25JdGVtcyA9IHByb3BzLmFsaWduSXRlbXMsXG4gICAgICBhbGlnbkl0ZW1zID0gX3Byb3BzJGFsaWduSXRlbXMgPT09IHZvaWQgMCA/ICdzdHJldGNoJyA6IF9wcm9wcyRhbGlnbkl0ZW1zLFxuICAgICAgc21BbGlnbkl0ZW1zID0gcHJvcHMuc21BbGlnbkl0ZW1zLFxuICAgICAgbWRBbGlnbkl0ZW1zID0gcHJvcHMubWRBbGlnbkl0ZW1zLFxuICAgICAgbGdBbGlnbkl0ZW1zID0gcHJvcHMubGdBbGlnbkl0ZW1zLFxuICAgICAgeGxBbGlnbkl0ZW1zID0gcHJvcHMueGxBbGlnbkl0ZW1zLFxuICAgICAgX3Byb3BzJGp1c3RpZnlDb250ZW50ID0gcHJvcHMuanVzdGlmeUNvbnRlbnQsXG4gICAgICBqdXN0aWZ5Q29udGVudCA9IF9wcm9wcyRqdXN0aWZ5Q29udGVudCA9PT0gdm9pZCAwID8gJ3N0YXJ0JyA6IF9wcm9wcyRqdXN0aWZ5Q29udGVudCxcbiAgICAgIHNtSnVzdGlmeUNvbnRlbnQgPSBwcm9wcy5zbUp1c3RpZnlDb250ZW50LFxuICAgICAgbWRKdXN0aWZ5Q29udGVudCA9IHByb3BzLm1kSnVzdGlmeUNvbnRlbnQsXG4gICAgICBsZ0p1c3RpZnlDb250ZW50ID0gcHJvcHMubGdKdXN0aWZ5Q29udGVudCxcbiAgICAgIHhsSnVzdGlmeUNvbnRlbnQgPSBwcm9wcy54bEp1c3RpZnlDb250ZW50LFxuICAgICAgd3JhcCA9IHByb3BzLndyYXAsXG4gICAgICBzbVdyYXAgPSBwcm9wcy5zbVdyYXAsXG4gICAgICBtZFdyYXAgPSBwcm9wcy5tZFdyYXAsXG4gICAgICBsZ1dyYXAgPSBwcm9wcy5sZ1dyYXAsXG4gICAgICB4bFdyYXAgPSBwcm9wcy54bFdyYXAsXG4gICAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgICBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgICAgcmVzdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHByb3BzLCBbXCJhc1wiLCBcImZsZXhcIiwgXCJzbUZsZXhcIiwgXCJtZEZsZXhcIiwgXCJsZ0ZsZXhcIiwgXCJ4bEZsZXhcIiwgXCJkaXJlY3Rpb25cIiwgXCJzbURpcmVjdGlvblwiLCBcIm1kRGlyZWN0aW9uXCIsIFwibGdEaXJlY3Rpb25cIiwgXCJ4bERpcmVjdGlvblwiLCBcImFsaWduSXRlbXNcIiwgXCJzbUFsaWduSXRlbXNcIiwgXCJtZEFsaWduSXRlbXNcIiwgXCJsZ0FsaWduSXRlbXNcIiwgXCJ4bEFsaWduSXRlbXNcIiwgXCJqdXN0aWZ5Q29udGVudFwiLCBcInNtSnVzdGlmeUNvbnRlbnRcIiwgXCJtZEp1c3RpZnlDb250ZW50XCIsIFwibGdKdXN0aWZ5Q29udGVudFwiLCBcInhsSnVzdGlmeUNvbnRlbnRcIiwgXCJ3cmFwXCIsIFwic21XcmFwXCIsIFwibWRXcmFwXCIsIFwibGdXcmFwXCIsIFwieGxXcmFwXCIsIFwiY2xhc3NOYW1lXCIsIFwiY2hpbGRyZW5cIl0pO1xuXG4gIHZhciBjbGFzc2VzID0gW2NsYXNzTmFtZSwgZmxleCAmJiBzdHlsZXMkYVtcImQtXCIuY29uY2F0KGZsZXgpXSwgc21GbGV4ICYmIHN0eWxlcyRhW1wiZC1zbS1cIi5jb25jYXQoc21GbGV4KV0sIG1kRmxleCAmJiBzdHlsZXMkYVtcImQtbWQtXCIuY29uY2F0KG1kRmxleCldLCBsZ0ZsZXggJiYgc3R5bGVzJGFbXCJkLWxnLVwiLmNvbmNhdChsZ0ZsZXgpXSwgeGxGbGV4ICYmIHN0eWxlcyRhW1wiZC14bC1cIi5jb25jYXQoeGxGbGV4KV0sIGRpcmVjdGlvbiAmJiBzdHlsZXMkYVtcImZsZXgtXCIuY29uY2F0KGRpcmVjdGlvbildLCBzbURpcmVjdGlvbiAmJiBzdHlsZXMkYVtcImZsZXgtc20tXCIuY29uY2F0KHNtRGlyZWN0aW9uKV0sIG1kRGlyZWN0aW9uICYmIHN0eWxlcyRhW1wiZmxleC1tZC1cIi5jb25jYXQobWREaXJlY3Rpb24pXSwgbGdEaXJlY3Rpb24gJiYgc3R5bGVzJGFbXCJmbGV4LWxnLVwiLmNvbmNhdChsZ0RpcmVjdGlvbildLCB4bERpcmVjdGlvbiAmJiBzdHlsZXMkYVtcImZsZXgteGwtXCIuY29uY2F0KHhsRGlyZWN0aW9uKV0sIGFsaWduSXRlbXMgJiYgc3R5bGVzJGFbXCJhbGlnbi1pdGVtcy1cIi5jb25jYXQoYWxpZ25JdGVtcyldLCBzbUFsaWduSXRlbXMgJiYgc3R5bGVzJGFbXCJhbGlnbi1pdGVtcy1zbS1cIi5jb25jYXQoc21BbGlnbkl0ZW1zKV0sIG1kQWxpZ25JdGVtcyAmJiBzdHlsZXMkYVtcImFsaWduLWl0ZW1zLW1kLVwiLmNvbmNhdChtZEFsaWduSXRlbXMpXSwgbGdBbGlnbkl0ZW1zICYmIHN0eWxlcyRhW1wiYWxpZ24taXRlbXMtbGctXCIuY29uY2F0KGxnQWxpZ25JdGVtcyldLCB4bEFsaWduSXRlbXMgJiYgc3R5bGVzJGFbXCJhbGlnbi1pdGVtcy14bC1cIi5jb25jYXQoeGxBbGlnbkl0ZW1zKV0sIGp1c3RpZnlDb250ZW50ICYmIHN0eWxlcyRhW1wianVzdGlmeS1jb250ZW50LVwiLmNvbmNhdChqdXN0aWZ5Q29udGVudCldLCBzbUp1c3RpZnlDb250ZW50ICYmIHN0eWxlcyRhW1wianVzdGlmeS1jb250ZW50LXNtLVwiLmNvbmNhdChzbUp1c3RpZnlDb250ZW50KV0sIG1kSnVzdGlmeUNvbnRlbnQgJiYgc3R5bGVzJGFbXCJqdXN0aWZ5LWNvbnRlbnQtbWQtXCIuY29uY2F0KG1kSnVzdGlmeUNvbnRlbnQpXSwgbGdKdXN0aWZ5Q29udGVudCAmJiBzdHlsZXMkYVtcImp1c3RpZnktY29udGVudC1sZy1cIi5jb25jYXQobGdKdXN0aWZ5Q29udGVudCldLCB4bEp1c3RpZnlDb250ZW50ICYmIHN0eWxlcyRhW1wianVzdGlmeS1jb250ZW50LXhsLVwiLmNvbmNhdCh4bEp1c3RpZnlDb250ZW50KV0sIHdyYXAgJiYgc3R5bGVzJGFbXCJmbGV4LVwiLmNvbmNhdCh3cmFwKV0sIHNtV3JhcCAmJiBzdHlsZXMkYVtcImZsZXgtc20tXCIuY29uY2F0KHNtV3JhcCldLCBtZFdyYXAgJiYgc3R5bGVzJGFbXCJmbGV4LW1kLVwiLmNvbmNhdChtZFdyYXApXSwgbGdXcmFwICYmIHN0eWxlcyRhW1wiZmxleC1sZy1cIi5jb25jYXQobGdXcmFwKV0sIHhsV3JhcCAmJiBzdHlsZXMkYVtcImZsZXgteGwtXCIuY29uY2F0KHhsV3JhcCldXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3RQcm9wcyksIGNoaWxkcmVuKTtcbn1cblxudmFyIHN0eWxlcyRiID0ge1wiZC1ub25lXCI6XCJMYWJlbC1tb2R1bGVfX2Qtbm9uZVwiLFwiZC1pbmxpbmVcIjpcIkxhYmVsLW1vZHVsZV9fZC1pbmxpbmVcIixcImQtaW5saW5lLWJsb2NrXCI6XCJMYWJlbC1tb2R1bGVfX2QtaW5saW5lLWJsb2NrXCIsXCJkLWJsb2NrXCI6XCJMYWJlbC1tb2R1bGVfX2QtYmxvY2tcIixcImQtdGFibGVcIjpcIkxhYmVsLW1vZHVsZV9fZC10YWJsZVwiLFwiZC10YWJsZS1yb3dcIjpcIkxhYmVsLW1vZHVsZV9fZC10YWJsZS1yb3dcIixcImQtdGFibGUtY2VsbFwiOlwiTGFiZWwtbW9kdWxlX19kLXRhYmxlLWNlbGxcIixcImQtZmxleFwiOlwiTGFiZWwtbW9kdWxlX19kLWZsZXhcIixcImQtaW5saW5lLWZsZXhcIjpcIkxhYmVsLW1vZHVsZV9fZC1pbmxpbmUtZmxleFwiLFwiZC1zbS1ub25lXCI6XCJMYWJlbC1tb2R1bGVfX2Qtc20tbm9uZVwiLFwiZC1zbS1pbmxpbmVcIjpcIkxhYmVsLW1vZHVsZV9fZC1zbS1pbmxpbmVcIixcImQtc20taW5saW5lLWJsb2NrXCI6XCJMYWJlbC1tb2R1bGVfX2Qtc20taW5saW5lLWJsb2NrXCIsXCJkLXNtLWJsb2NrXCI6XCJMYWJlbC1tb2R1bGVfX2Qtc20tYmxvY2tcIixcImQtc20tdGFibGVcIjpcIkxhYmVsLW1vZHVsZV9fZC1zbS10YWJsZVwiLFwiZC1zbS10YWJsZS1yb3dcIjpcIkxhYmVsLW1vZHVsZV9fZC1zbS10YWJsZS1yb3dcIixcImQtc20tdGFibGUtY2VsbFwiOlwiTGFiZWwtbW9kdWxlX19kLXNtLXRhYmxlLWNlbGxcIixcImQtc20tZmxleFwiOlwiTGFiZWwtbW9kdWxlX19kLXNtLWZsZXhcIixcImQtc20taW5saW5lLWZsZXhcIjpcIkxhYmVsLW1vZHVsZV9fZC1zbS1pbmxpbmUtZmxleFwiLFwiZC1tZC1ub25lXCI6XCJMYWJlbC1tb2R1bGVfX2QtbWQtbm9uZVwiLFwiZC1tZC1pbmxpbmVcIjpcIkxhYmVsLW1vZHVsZV9fZC1tZC1pbmxpbmVcIixcImQtbWQtaW5saW5lLWJsb2NrXCI6XCJMYWJlbC1tb2R1bGVfX2QtbWQtaW5saW5lLWJsb2NrXCIsXCJkLW1kLWJsb2NrXCI6XCJMYWJlbC1tb2R1bGVfX2QtbWQtYmxvY2tcIixcImQtbWQtdGFibGVcIjpcIkxhYmVsLW1vZHVsZV9fZC1tZC10YWJsZVwiLFwiZC1tZC10YWJsZS1yb3dcIjpcIkxhYmVsLW1vZHVsZV9fZC1tZC10YWJsZS1yb3dcIixcImQtbWQtdGFibGUtY2VsbFwiOlwiTGFiZWwtbW9kdWxlX19kLW1kLXRhYmxlLWNlbGxcIixcImQtbWQtZmxleFwiOlwiTGFiZWwtbW9kdWxlX19kLW1kLWZsZXhcIixcImQtbWQtaW5saW5lLWZsZXhcIjpcIkxhYmVsLW1vZHVsZV9fZC1tZC1pbmxpbmUtZmxleFwiLFwiZC1sZy1ub25lXCI6XCJMYWJlbC1tb2R1bGVfX2QtbGctbm9uZVwiLFwiZC1sZy1pbmxpbmVcIjpcIkxhYmVsLW1vZHVsZV9fZC1sZy1pbmxpbmVcIixcImQtbGctaW5saW5lLWJsb2NrXCI6XCJMYWJlbC1tb2R1bGVfX2QtbGctaW5saW5lLWJsb2NrXCIsXCJkLWxnLWJsb2NrXCI6XCJMYWJlbC1tb2R1bGVfX2QtbGctYmxvY2tcIixcImQtbGctdGFibGVcIjpcIkxhYmVsLW1vZHVsZV9fZC1sZy10YWJsZVwiLFwiZC1sZy10YWJsZS1yb3dcIjpcIkxhYmVsLW1vZHVsZV9fZC1sZy10YWJsZS1yb3dcIixcImQtbGctdGFibGUtY2VsbFwiOlwiTGFiZWwtbW9kdWxlX19kLWxnLXRhYmxlLWNlbGxcIixcImQtbGctZmxleFwiOlwiTGFiZWwtbW9kdWxlX19kLWxnLWZsZXhcIixcImQtbGctaW5saW5lLWZsZXhcIjpcIkxhYmVsLW1vZHVsZV9fZC1sZy1pbmxpbmUtZmxleFwiLFwiZC14bC1ub25lXCI6XCJMYWJlbC1tb2R1bGVfX2QteGwtbm9uZVwiLFwiZC14bC1pbmxpbmVcIjpcIkxhYmVsLW1vZHVsZV9fZC14bC1pbmxpbmVcIixcImQteGwtaW5saW5lLWJsb2NrXCI6XCJMYWJlbC1tb2R1bGVfX2QteGwtaW5saW5lLWJsb2NrXCIsXCJkLXhsLWJsb2NrXCI6XCJMYWJlbC1tb2R1bGVfX2QteGwtYmxvY2tcIixcImQteGwtdGFibGVcIjpcIkxhYmVsLW1vZHVsZV9fZC14bC10YWJsZVwiLFwiZC14bC10YWJsZS1yb3dcIjpcIkxhYmVsLW1vZHVsZV9fZC14bC10YWJsZS1yb3dcIixcImQteGwtdGFibGUtY2VsbFwiOlwiTGFiZWwtbW9kdWxlX19kLXhsLXRhYmxlLWNlbGxcIixcImQteGwtZmxleFwiOlwiTGFiZWwtbW9kdWxlX19kLXhsLWZsZXhcIixcImQteGwtaW5saW5lLWZsZXhcIjpcIkxhYmVsLW1vZHVsZV9fZC14bC1pbmxpbmUtZmxleFwiLFwiZC1wcmludC1ub25lXCI6XCJMYWJlbC1tb2R1bGVfX2QtcHJpbnQtbm9uZVwiLFwiZC1wcmludC1pbmxpbmVcIjpcIkxhYmVsLW1vZHVsZV9fZC1wcmludC1pbmxpbmVcIixcImQtcHJpbnQtaW5saW5lLWJsb2NrXCI6XCJMYWJlbC1tb2R1bGVfX2QtcHJpbnQtaW5saW5lLWJsb2NrXCIsXCJkLXByaW50LWJsb2NrXCI6XCJMYWJlbC1tb2R1bGVfX2QtcHJpbnQtYmxvY2tcIixcImQtcHJpbnQtdGFibGVcIjpcIkxhYmVsLW1vZHVsZV9fZC1wcmludC10YWJsZVwiLFwiZC1wcmludC10YWJsZS1yb3dcIjpcIkxhYmVsLW1vZHVsZV9fZC1wcmludC10YWJsZS1yb3dcIixcImQtcHJpbnQtdGFibGUtY2VsbFwiOlwiTGFiZWwtbW9kdWxlX19kLXByaW50LXRhYmxlLWNlbGxcIixcImQtcHJpbnQtZmxleFwiOlwiTGFiZWwtbW9kdWxlX19kLXByaW50LWZsZXhcIixcImQtcHJpbnQtaW5saW5lLWZsZXhcIjpcIkxhYmVsLW1vZHVsZV9fZC1wcmludC1pbmxpbmUtZmxleFwiLFwibGFiZWxcIjpcIkxhYmVsLW1vZHVsZV9fbGFiZWxcIn07XG5cbmZ1bmN0aW9uIExhYmVsKF9yZWYpIHtcbiAgdmFyIGh0bWxGb3IgPSBfcmVmLmh0bWxGb3IsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImh0bWxGb3JcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiXSk7XG5cbiAgdmFyIGNsYXNzZXMgPSBbY2xhc3NOYW1lLCBzdHlsZXMkYlsnbGFiZWwnXV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBodG1sRm9yOiBodG1sRm9yXG4gIH0sIHByb3BzKSwgY2hpbGRyZW4pO1xufVxuXG52YXIgc3R5bGVzJGMgPSB7XCJkLW5vbmVcIjpcIklucHV0LW1vZHVsZV9fZC1ub25lXCIsXCJkLWlubGluZVwiOlwiSW5wdXQtbW9kdWxlX19kLWlubGluZVwiLFwiZC1pbmxpbmUtYmxvY2tcIjpcIklucHV0LW1vZHVsZV9fZC1pbmxpbmUtYmxvY2tcIixcImQtYmxvY2tcIjpcIklucHV0LW1vZHVsZV9fZC1ibG9ja1wiLFwiZC10YWJsZVwiOlwiSW5wdXQtbW9kdWxlX19kLXRhYmxlXCIsXCJkLXRhYmxlLXJvd1wiOlwiSW5wdXQtbW9kdWxlX19kLXRhYmxlLXJvd1wiLFwiZC10YWJsZS1jZWxsXCI6XCJJbnB1dC1tb2R1bGVfX2QtdGFibGUtY2VsbFwiLFwiZC1mbGV4XCI6XCJJbnB1dC1tb2R1bGVfX2QtZmxleFwiLFwiZC1pbmxpbmUtZmxleFwiOlwiSW5wdXQtbW9kdWxlX19kLWlubGluZS1mbGV4XCIsXCJkLXNtLW5vbmVcIjpcIklucHV0LW1vZHVsZV9fZC1zbS1ub25lXCIsXCJkLXNtLWlubGluZVwiOlwiSW5wdXQtbW9kdWxlX19kLXNtLWlubGluZVwiLFwiZC1zbS1pbmxpbmUtYmxvY2tcIjpcIklucHV0LW1vZHVsZV9fZC1zbS1pbmxpbmUtYmxvY2tcIixcImQtc20tYmxvY2tcIjpcIklucHV0LW1vZHVsZV9fZC1zbS1ibG9ja1wiLFwiZC1zbS10YWJsZVwiOlwiSW5wdXQtbW9kdWxlX19kLXNtLXRhYmxlXCIsXCJkLXNtLXRhYmxlLXJvd1wiOlwiSW5wdXQtbW9kdWxlX19kLXNtLXRhYmxlLXJvd1wiLFwiZC1zbS10YWJsZS1jZWxsXCI6XCJJbnB1dC1tb2R1bGVfX2Qtc20tdGFibGUtY2VsbFwiLFwiZC1zbS1mbGV4XCI6XCJJbnB1dC1tb2R1bGVfX2Qtc20tZmxleFwiLFwiZC1zbS1pbmxpbmUtZmxleFwiOlwiSW5wdXQtbW9kdWxlX19kLXNtLWlubGluZS1mbGV4XCIsXCJkLW1kLW5vbmVcIjpcIklucHV0LW1vZHVsZV9fZC1tZC1ub25lXCIsXCJkLW1kLWlubGluZVwiOlwiSW5wdXQtbW9kdWxlX19kLW1kLWlubGluZVwiLFwiZC1tZC1pbmxpbmUtYmxvY2tcIjpcIklucHV0LW1vZHVsZV9fZC1tZC1pbmxpbmUtYmxvY2tcIixcImQtbWQtYmxvY2tcIjpcIklucHV0LW1vZHVsZV9fZC1tZC1ibG9ja1wiLFwiZC1tZC10YWJsZVwiOlwiSW5wdXQtbW9kdWxlX19kLW1kLXRhYmxlXCIsXCJkLW1kLXRhYmxlLXJvd1wiOlwiSW5wdXQtbW9kdWxlX19kLW1kLXRhYmxlLXJvd1wiLFwiZC1tZC10YWJsZS1jZWxsXCI6XCJJbnB1dC1tb2R1bGVfX2QtbWQtdGFibGUtY2VsbFwiLFwiZC1tZC1mbGV4XCI6XCJJbnB1dC1tb2R1bGVfX2QtbWQtZmxleFwiLFwiZC1tZC1pbmxpbmUtZmxleFwiOlwiSW5wdXQtbW9kdWxlX19kLW1kLWlubGluZS1mbGV4XCIsXCJkLWxnLW5vbmVcIjpcIklucHV0LW1vZHVsZV9fZC1sZy1ub25lXCIsXCJkLWxnLWlubGluZVwiOlwiSW5wdXQtbW9kdWxlX19kLWxnLWlubGluZVwiLFwiZC1sZy1pbmxpbmUtYmxvY2tcIjpcIklucHV0LW1vZHVsZV9fZC1sZy1pbmxpbmUtYmxvY2tcIixcImQtbGctYmxvY2tcIjpcIklucHV0LW1vZHVsZV9fZC1sZy1ibG9ja1wiLFwiZC1sZy10YWJsZVwiOlwiSW5wdXQtbW9kdWxlX19kLWxnLXRhYmxlXCIsXCJkLWxnLXRhYmxlLXJvd1wiOlwiSW5wdXQtbW9kdWxlX19kLWxnLXRhYmxlLXJvd1wiLFwiZC1sZy10YWJsZS1jZWxsXCI6XCJJbnB1dC1tb2R1bGVfX2QtbGctdGFibGUtY2VsbFwiLFwiZC1sZy1mbGV4XCI6XCJJbnB1dC1tb2R1bGVfX2QtbGctZmxleFwiLFwiZC1sZy1pbmxpbmUtZmxleFwiOlwiSW5wdXQtbW9kdWxlX19kLWxnLWlubGluZS1mbGV4XCIsXCJkLXhsLW5vbmVcIjpcIklucHV0LW1vZHVsZV9fZC14bC1ub25lXCIsXCJkLXhsLWlubGluZVwiOlwiSW5wdXQtbW9kdWxlX19kLXhsLWlubGluZVwiLFwiZC14bC1pbmxpbmUtYmxvY2tcIjpcIklucHV0LW1vZHVsZV9fZC14bC1pbmxpbmUtYmxvY2tcIixcImQteGwtYmxvY2tcIjpcIklucHV0LW1vZHVsZV9fZC14bC1ibG9ja1wiLFwiZC14bC10YWJsZVwiOlwiSW5wdXQtbW9kdWxlX19kLXhsLXRhYmxlXCIsXCJkLXhsLXRhYmxlLXJvd1wiOlwiSW5wdXQtbW9kdWxlX19kLXhsLXRhYmxlLXJvd1wiLFwiZC14bC10YWJsZS1jZWxsXCI6XCJJbnB1dC1tb2R1bGVfX2QteGwtdGFibGUtY2VsbFwiLFwiZC14bC1mbGV4XCI6XCJJbnB1dC1tb2R1bGVfX2QteGwtZmxleFwiLFwiZC14bC1pbmxpbmUtZmxleFwiOlwiSW5wdXQtbW9kdWxlX19kLXhsLWlubGluZS1mbGV4XCIsXCJkLXByaW50LW5vbmVcIjpcIklucHV0LW1vZHVsZV9fZC1wcmludC1ub25lXCIsXCJkLXByaW50LWlubGluZVwiOlwiSW5wdXQtbW9kdWxlX19kLXByaW50LWlubGluZVwiLFwiZC1wcmludC1pbmxpbmUtYmxvY2tcIjpcIklucHV0LW1vZHVsZV9fZC1wcmludC1pbmxpbmUtYmxvY2tcIixcImQtcHJpbnQtYmxvY2tcIjpcIklucHV0LW1vZHVsZV9fZC1wcmludC1ibG9ja1wiLFwiZC1wcmludC10YWJsZVwiOlwiSW5wdXQtbW9kdWxlX19kLXByaW50LXRhYmxlXCIsXCJkLXByaW50LXRhYmxlLXJvd1wiOlwiSW5wdXQtbW9kdWxlX19kLXByaW50LXRhYmxlLXJvd1wiLFwiZC1wcmludC10YWJsZS1jZWxsXCI6XCJJbnB1dC1tb2R1bGVfX2QtcHJpbnQtdGFibGUtY2VsbFwiLFwiZC1wcmludC1mbGV4XCI6XCJJbnB1dC1tb2R1bGVfX2QtcHJpbnQtZmxleFwiLFwiZC1wcmludC1pbmxpbmUtZmxleFwiOlwiSW5wdXQtbW9kdWxlX19kLXByaW50LWlubGluZS1mbGV4XCIsXCJ3cmFwcGVyXCI6XCJJbnB1dC1tb2R1bGVfX3dyYXBwZXJcIixcImF1dG8tc3VnZ2VzdGlvbi13cmFwcGVyXCI6XCJJbnB1dC1tb2R1bGVfX2F1dG8tc3VnZ2VzdGlvbi13cmFwcGVyXCIsXCJhdXRvLXN1Z2dlc3Rpb25cIjpcIklucHV0LW1vZHVsZV9fYXV0by1zdWdnZXN0aW9uXCJ9O1xuXG52YXIgc3R5bGVzJGQgPSB7XCJkLW5vbmVcIjpcIklucHV0QmFzZS1tb2R1bGVfX2Qtbm9uZVwiLFwiZC1pbmxpbmVcIjpcIklucHV0QmFzZS1tb2R1bGVfX2QtaW5saW5lXCIsXCJkLWlubGluZS1ibG9ja1wiOlwiSW5wdXRCYXNlLW1vZHVsZV9fZC1pbmxpbmUtYmxvY2tcIixcImQtYmxvY2tcIjpcIklucHV0QmFzZS1tb2R1bGVfX2QtYmxvY2tcIixcImQtdGFibGVcIjpcIklucHV0QmFzZS1tb2R1bGVfX2QtdGFibGVcIixcImQtdGFibGUtcm93XCI6XCJJbnB1dEJhc2UtbW9kdWxlX19kLXRhYmxlLXJvd1wiLFwiZC10YWJsZS1jZWxsXCI6XCJJbnB1dEJhc2UtbW9kdWxlX19kLXRhYmxlLWNlbGxcIixcImQtZmxleFwiOlwiSW5wdXRCYXNlLW1vZHVsZV9fZC1mbGV4XCIsXCJkLWlubGluZS1mbGV4XCI6XCJJbnB1dEJhc2UtbW9kdWxlX19kLWlubGluZS1mbGV4XCIsXCJkLXNtLW5vbmVcIjpcIklucHV0QmFzZS1tb2R1bGVfX2Qtc20tbm9uZVwiLFwiZC1zbS1pbmxpbmVcIjpcIklucHV0QmFzZS1tb2R1bGVfX2Qtc20taW5saW5lXCIsXCJkLXNtLWlubGluZS1ibG9ja1wiOlwiSW5wdXRCYXNlLW1vZHVsZV9fZC1zbS1pbmxpbmUtYmxvY2tcIixcImQtc20tYmxvY2tcIjpcIklucHV0QmFzZS1tb2R1bGVfX2Qtc20tYmxvY2tcIixcImQtc20tdGFibGVcIjpcIklucHV0QmFzZS1tb2R1bGVfX2Qtc20tdGFibGVcIixcImQtc20tdGFibGUtcm93XCI6XCJJbnB1dEJhc2UtbW9kdWxlX19kLXNtLXRhYmxlLXJvd1wiLFwiZC1zbS10YWJsZS1jZWxsXCI6XCJJbnB1dEJhc2UtbW9kdWxlX19kLXNtLXRhYmxlLWNlbGxcIixcImQtc20tZmxleFwiOlwiSW5wdXRCYXNlLW1vZHVsZV9fZC1zbS1mbGV4XCIsXCJkLXNtLWlubGluZS1mbGV4XCI6XCJJbnB1dEJhc2UtbW9kdWxlX19kLXNtLWlubGluZS1mbGV4XCIsXCJkLW1kLW5vbmVcIjpcIklucHV0QmFzZS1tb2R1bGVfX2QtbWQtbm9uZVwiLFwiZC1tZC1pbmxpbmVcIjpcIklucHV0QmFzZS1tb2R1bGVfX2QtbWQtaW5saW5lXCIsXCJkLW1kLWlubGluZS1ibG9ja1wiOlwiSW5wdXRCYXNlLW1vZHVsZV9fZC1tZC1pbmxpbmUtYmxvY2tcIixcImQtbWQtYmxvY2tcIjpcIklucHV0QmFzZS1tb2R1bGVfX2QtbWQtYmxvY2tcIixcImQtbWQtdGFibGVcIjpcIklucHV0QmFzZS1tb2R1bGVfX2QtbWQtdGFibGVcIixcImQtbWQtdGFibGUtcm93XCI6XCJJbnB1dEJhc2UtbW9kdWxlX19kLW1kLXRhYmxlLXJvd1wiLFwiZC1tZC10YWJsZS1jZWxsXCI6XCJJbnB1dEJhc2UtbW9kdWxlX19kLW1kLXRhYmxlLWNlbGxcIixcImQtbWQtZmxleFwiOlwiSW5wdXRCYXNlLW1vZHVsZV9fZC1tZC1mbGV4XCIsXCJkLW1kLWlubGluZS1mbGV4XCI6XCJJbnB1dEJhc2UtbW9kdWxlX19kLW1kLWlubGluZS1mbGV4XCIsXCJkLWxnLW5vbmVcIjpcIklucHV0QmFzZS1tb2R1bGVfX2QtbGctbm9uZVwiLFwiZC1sZy1pbmxpbmVcIjpcIklucHV0QmFzZS1tb2R1bGVfX2QtbGctaW5saW5lXCIsXCJkLWxnLWlubGluZS1ibG9ja1wiOlwiSW5wdXRCYXNlLW1vZHVsZV9fZC1sZy1pbmxpbmUtYmxvY2tcIixcImQtbGctYmxvY2tcIjpcIklucHV0QmFzZS1tb2R1bGVfX2QtbGctYmxvY2tcIixcImQtbGctdGFibGVcIjpcIklucHV0QmFzZS1tb2R1bGVfX2QtbGctdGFibGVcIixcImQtbGctdGFibGUtcm93XCI6XCJJbnB1dEJhc2UtbW9kdWxlX19kLWxnLXRhYmxlLXJvd1wiLFwiZC1sZy10YWJsZS1jZWxsXCI6XCJJbnB1dEJhc2UtbW9kdWxlX19kLWxnLXRhYmxlLWNlbGxcIixcImQtbGctZmxleFwiOlwiSW5wdXRCYXNlLW1vZHVsZV9fZC1sZy1mbGV4XCIsXCJkLWxnLWlubGluZS1mbGV4XCI6XCJJbnB1dEJhc2UtbW9kdWxlX19kLWxnLWlubGluZS1mbGV4XCIsXCJkLXhsLW5vbmVcIjpcIklucHV0QmFzZS1tb2R1bGVfX2QteGwtbm9uZVwiLFwiZC14bC1pbmxpbmVcIjpcIklucHV0QmFzZS1tb2R1bGVfX2QteGwtaW5saW5lXCIsXCJkLXhsLWlubGluZS1ibG9ja1wiOlwiSW5wdXRCYXNlLW1vZHVsZV9fZC14bC1pbmxpbmUtYmxvY2tcIixcImQteGwtYmxvY2tcIjpcIklucHV0QmFzZS1tb2R1bGVfX2QteGwtYmxvY2tcIixcImQteGwtdGFibGVcIjpcIklucHV0QmFzZS1tb2R1bGVfX2QteGwtdGFibGVcIixcImQteGwtdGFibGUtcm93XCI6XCJJbnB1dEJhc2UtbW9kdWxlX19kLXhsLXRhYmxlLXJvd1wiLFwiZC14bC10YWJsZS1jZWxsXCI6XCJJbnB1dEJhc2UtbW9kdWxlX19kLXhsLXRhYmxlLWNlbGxcIixcImQteGwtZmxleFwiOlwiSW5wdXRCYXNlLW1vZHVsZV9fZC14bC1mbGV4XCIsXCJkLXhsLWlubGluZS1mbGV4XCI6XCJJbnB1dEJhc2UtbW9kdWxlX19kLXhsLWlubGluZS1mbGV4XCIsXCJkLXByaW50LW5vbmVcIjpcIklucHV0QmFzZS1tb2R1bGVfX2QtcHJpbnQtbm9uZVwiLFwiZC1wcmludC1pbmxpbmVcIjpcIklucHV0QmFzZS1tb2R1bGVfX2QtcHJpbnQtaW5saW5lXCIsXCJkLXByaW50LWlubGluZS1ibG9ja1wiOlwiSW5wdXRCYXNlLW1vZHVsZV9fZC1wcmludC1pbmxpbmUtYmxvY2tcIixcImQtcHJpbnQtYmxvY2tcIjpcIklucHV0QmFzZS1tb2R1bGVfX2QtcHJpbnQtYmxvY2tcIixcImQtcHJpbnQtdGFibGVcIjpcIklucHV0QmFzZS1tb2R1bGVfX2QtcHJpbnQtdGFibGVcIixcImQtcHJpbnQtdGFibGUtcm93XCI6XCJJbnB1dEJhc2UtbW9kdWxlX19kLXByaW50LXRhYmxlLXJvd1wiLFwiZC1wcmludC10YWJsZS1jZWxsXCI6XCJJbnB1dEJhc2UtbW9kdWxlX19kLXByaW50LXRhYmxlLWNlbGxcIixcImQtcHJpbnQtZmxleFwiOlwiSW5wdXRCYXNlLW1vZHVsZV9fZC1wcmludC1mbGV4XCIsXCJkLXByaW50LWlubGluZS1mbGV4XCI6XCJJbnB1dEJhc2UtbW9kdWxlX19kLXByaW50LWlubGluZS1mbGV4XCIsXCJpbnB1dC13cmFwcGVyXCI6XCJJbnB1dEJhc2UtbW9kdWxlX19pbnB1dC13cmFwcGVyXCIsXCJpbnB1dFwiOlwiSW5wdXRCYXNlLW1vZHVsZV9faW5wdXRcIixcImlucHV0LWljb25cIjpcIklucHV0QmFzZS1tb2R1bGVfX2lucHV0LWljb25cIixcImlucHV0LXBsYWNlaG9sZGVyLXJpZ2h0XCI6XCJJbnB1dEJhc2UtbW9kdWxlX19pbnB1dC1wbGFjZWhvbGRlci1yaWdodFwiLFwiaW5wdXQtZGlzYWJsZWRcIjpcIklucHV0QmFzZS1tb2R1bGVfX2lucHV0LWRpc2FibGVkXCIsXCJyaWdodC1wbGFjZWhvbGRlclwiOlwiSW5wdXRCYXNlLW1vZHVsZV9fcmlnaHQtcGxhY2Vob2xkZXJcIixcImlucHV0LWxpbmVcIjpcIklucHV0QmFzZS1tb2R1bGVfX2lucHV0LWxpbmVcIixcImlucHV0LWxpbmUtdG91Y2hlZFwiOlwiSW5wdXRCYXNlLW1vZHVsZV9faW5wdXQtbGluZS10b3VjaGVkXCIsXCJpbnB1dC1saW5lLWVycm9yXCI6XCJJbnB1dEJhc2UtbW9kdWxlX19pbnB1dC1saW5lLWVycm9yXCIsXCJpbnB1dC1saW5lLXZhbGlkXCI6XCJJbnB1dEJhc2UtbW9kdWxlX19pbnB1dC1saW5lLXZhbGlkXCIsXCJpY29uLXdyYXBwZXJcIjpcIklucHV0QmFzZS1tb2R1bGVfX2ljb24td3JhcHBlclwiLFwiaWNvbi13cmFwcGVyLXdoaXRlXCI6XCJJbnB1dEJhc2UtbW9kdWxlX19pY29uLXdyYXBwZXItd2hpdGVcIn07XG5cbi8vIEluIG9yZGVyIHRvIHRlbGwgUmVhY3QgdG8gbGV0IHRoZSBldmVudCBwZXJzaXN0LCB3ZSBjYWxsIGUucGVyc2lzdFxuLy8gU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9ldmVudHMuaHRtbCNldmVudC1wb29saW5nXG5cbmZ1bmN0aW9uIHBlcnNpc3QoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGV2ZW50LnBlcnNpc3QoKTtcbiAgICByZXR1cm4gZm4oZXZlbnQpO1xuICB9O1xufVxuXG52YXIgSW5wdXRCYXNlID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgdHlwZSA9IF9yZWYudHlwZSxcbiAgICAgIGVycm9yID0gX3JlZi5lcnJvcixcbiAgICAgIHRvdWNoZWQgPSBfcmVmLnRvdWNoZWQsXG4gICAgICBpc1ZhbGlkID0gX3JlZi5pc1ZhbGlkLFxuICAgICAgZGVib3VuY2UgPSBfcmVmLmRlYm91bmNlLFxuICAgICAgb25DaGFuZ2UgPSBfcmVmLm9uQ2hhbmdlLFxuICAgICAgcGxhY2Vob2xkZXIgPSBfcmVmLnBsYWNlaG9sZGVyLFxuICAgICAgcGxhY2Vob2xkZXJSaWdodCA9IF9yZWYucGxhY2Vob2xkZXJSaWdodCxcbiAgICAgIHBsYWNlaG9sZGVyQWx3YXlzVmlzaWJsZSA9IF9yZWYucGxhY2Vob2xkZXJBbHdheXNWaXNpYmxlLFxuICAgICAgZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkLFxuICAgICAgaWQgPSBfcmVmLmlkLFxuICAgICAgaWNvbiA9IF9yZWYuaWNvbixcbiAgICAgIF9yZWYkaWNvblZhcmlhbnQgPSBfcmVmLmljb25WYXJpYW50LFxuICAgICAgaWNvblZhcmlhbnQgPSBfcmVmJGljb25WYXJpYW50ID09PSB2b2lkIDAgPyAncHJpbWFyeScgOiBfcmVmJGljb25WYXJpYW50LFxuICAgICAgaWNvblByb3BzID0gX3JlZi5pY29uUHJvcHMsXG4gICAgICBvbkljb25DbGljayA9IF9yZWYub25JY29uQ2xpY2ssXG4gICAgICBpbnB1dFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcInR5cGVcIiwgXCJlcnJvclwiLCBcInRvdWNoZWRcIiwgXCJpc1ZhbGlkXCIsIFwiZGVib3VuY2VcIiwgXCJvbkNoYW5nZVwiLCBcInBsYWNlaG9sZGVyXCIsIFwicGxhY2Vob2xkZXJSaWdodFwiLCBcInBsYWNlaG9sZGVyQWx3YXlzVmlzaWJsZVwiLCBcImRpc2FibGVkXCIsIFwiaWRcIiwgXCJpY29uXCIsIFwiaWNvblZhcmlhbnRcIiwgXCJpY29uUHJvcHNcIiwgXCJvbkljb25DbGlja1wiXSk7XG5cbiAgSW5wdXRCYXNlLmRpc3BsYXlOYW1lID0gJ0lucHV0QmFzZSc7XG4gIHZhciBoYW5kbGVDaGFuZ2UgPSBkZWJvdW5jZSAmJiBvbkNoYW5nZSA/IHBlcnNpc3QoZGJvdW5jZShvbkNoYW5nZSwgZGVib3VuY2UpKSA6IG9uQ2hhbmdlO1xuICB2YXIgaW5wdXRDbGFzc2VzID0gW3N0eWxlcyRkWydpbnB1dCddLCBwbGFjZWhvbGRlclJpZ2h0ICYmIHN0eWxlcyRkWydpbnB1dC1wbGFjZWhvbGRlci1yaWdodCddLCBkaXNhYmxlZCAmJiBzdHlsZXMkZFsnaW5wdXQtZGlzYWJsZWQnXV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKTtcbiAgdmFyIGlucHV0TGluZUNsYXNzZXMgPSAhZGlzYWJsZWQgPyBbc3R5bGVzJGRbJ2lucHV0LWxpbmUnXSwgdG91Y2hlZCAmJiBlcnJvciAmJiBzdHlsZXMkZFsnaW5wdXQtbGluZS1lcnJvciddLCB0b3VjaGVkICYmIGlzVmFsaWQgJiYgc3R5bGVzJGRbJ2lucHV0LWxpbmUtdmFsaWQnXSwgdG91Y2hlZCAmJiBzdHlsZXMkZFsnaW5wdXQtbGluZS10b3VjaGVkJ11dLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJykgOiAnJztcbiAgdmFyIGljb25XcmFwcGVyQ2xhc3MgPSBbc3R5bGVzJGRbJ2ljb24td3JhcHBlciddLCBpY29uVmFyaWFudCA9PT0gJ2FsdGVybmF0ZScgJiYgc3R5bGVzJGRbJ2ljb24td3JhcHBlci13aGl0ZSddXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogc3R5bGVzJGRbJ2lucHV0LXdyYXBwZXInXVxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIF9leHRlbmRzKHt9LCBpbnB1dFByb3BzLCB7XG4gICAgY2xhc3NOYW1lOiBpbnB1dENsYXNzZXMsXG4gICAgdHlwZTogdHlwZSxcbiAgICBvbkNoYW5nZTogaGFuZGxlQ2hhbmdlLFxuICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlckFsd2F5c1Zpc2libGUgPyAnJyA6IHBsYWNlaG9sZGVyLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICBpZDogaWQsXG4gICAgcmVmOiByZWZcbiAgfSkpLCBwbGFjZWhvbGRlckFsd2F5c1Zpc2libGUgJiYgLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IHN0eWxlcyRkWydyaWdodC1wbGFjZWhvbGRlciddXG4gIH0sIHBsYWNlaG9sZGVyKSwgLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogaW5wdXRMaW5lQ2xhc3Nlc1xuICB9KSwgaWNvbiAmJiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7XG4gICAgY2xhc3NOYW1lOiBpY29uV3JhcHBlckNsYXNzLFxuICAgIG9uQ2xpY2s6IG9uSWNvbkNsaWNrLFxuICAgIHR5cGU6IFwiYnV0dG9uXCJcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSWNvbiwgX2V4dGVuZHMoe1xuICAgIHZhcmlhbnQ6IGljb25WYXJpYW50ID09PSAncHJpbWFyeScgPyAxIDogMCxcbiAgICBuYW1lOiBpY29uLFxuICAgIGZvbnRTaXplOiBcIjE2cHhcIlxuICB9LCBpY29uUHJvcHMpKSkpO1xufSk7XG5cbnZhciBfc2xpY2VkVG9BcnJheSQxID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBzbGljZUl0ZXJhdG9yKGFyciwgaSkgeyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9lID0gdW5kZWZpbmVkOyB0cnkgeyBmb3IgKHZhciBfaSA9IGFycltTeW1ib2wuaXRlcmF0b3JdKCksIF9zOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9IHJldHVybiBmdW5jdGlvbiAoYXJyLCBpKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHsgcmV0dXJuIGFycjsgfSBlbHNlIGlmIChTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGFycikpIHsgcmV0dXJuIHNsaWNlSXRlcmF0b3IoYXJyLCBpKTsgfSBlbHNlIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2VcIik7IH0gfTsgfSgpO1xuXG52YXIgZGlzdCA9IGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBkYXRhID0gX3JlZi5kYXRhO1xuICB2YXIgbXVsdGlTZWN0aW9uID0gX3JlZi5tdWx0aVNlY3Rpb247XG5cbiAgZnVuY3Rpb24gbmV4dE5vbkVtcHR5U2VjdGlvbkluZGV4KHNlY3Rpb25JbmRleCkge1xuICAgIGlmIChzZWN0aW9uSW5kZXggPT09IG51bGwpIHtcbiAgICAgIHNlY3Rpb25JbmRleCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlY3Rpb25JbmRleCsrO1xuICAgIH1cblxuICAgIHdoaWxlIChzZWN0aW9uSW5kZXggPCBkYXRhLmxlbmd0aCAmJiBkYXRhW3NlY3Rpb25JbmRleF0gPT09IDApIHtcbiAgICAgIHNlY3Rpb25JbmRleCsrO1xuICAgIH1cblxuICAgIHJldHVybiBzZWN0aW9uSW5kZXggPT09IGRhdGEubGVuZ3RoID8gbnVsbCA6IHNlY3Rpb25JbmRleDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHByZXZOb25FbXB0eVNlY3Rpb25JbmRleChzZWN0aW9uSW5kZXgpIHtcbiAgICBpZiAoc2VjdGlvbkluZGV4ID09PSBudWxsKSB7XG4gICAgICBzZWN0aW9uSW5kZXggPSBkYXRhLmxlbmd0aCAtIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlY3Rpb25JbmRleC0tO1xuICAgIH1cblxuICAgIHdoaWxlIChzZWN0aW9uSW5kZXggPj0gMCAmJiBkYXRhW3NlY3Rpb25JbmRleF0gPT09IDApIHtcbiAgICAgIHNlY3Rpb25JbmRleC0tO1xuICAgIH1cblxuICAgIHJldHVybiBzZWN0aW9uSW5kZXggPT09IC0xID8gbnVsbCA6IHNlY3Rpb25JbmRleDtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5leHQocG9zaXRpb24pIHtcbiAgICB2YXIgX3Bvc2l0aW9uID0gX3NsaWNlZFRvQXJyYXkkMShwb3NpdGlvbiwgMik7XG5cbiAgICB2YXIgc2VjdGlvbkluZGV4ID0gX3Bvc2l0aW9uWzBdO1xuICAgIHZhciBpdGVtSW5kZXggPSBfcG9zaXRpb25bMV07XG5cblxuICAgIGlmIChtdWx0aVNlY3Rpb24pIHtcbiAgICAgIGlmIChpdGVtSW5kZXggPT09IG51bGwgfHwgaXRlbUluZGV4ID09PSBkYXRhW3NlY3Rpb25JbmRleF0gLSAxKSB7XG4gICAgICAgIHNlY3Rpb25JbmRleCA9IG5leHROb25FbXB0eVNlY3Rpb25JbmRleChzZWN0aW9uSW5kZXgpO1xuXG4gICAgICAgIGlmIChzZWN0aW9uSW5kZXggPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gW251bGwsIG51bGxdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtzZWN0aW9uSW5kZXgsIDBdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW3NlY3Rpb25JbmRleCwgaXRlbUluZGV4ICsgMV07XG4gICAgfVxuXG4gICAgaWYgKGRhdGEgPT09IDAgfHwgaXRlbUluZGV4ID09PSBkYXRhIC0gMSkge1xuICAgICAgcmV0dXJuIFtudWxsLCBudWxsXTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbUluZGV4ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gW251bGwsIDBdO1xuICAgIH1cblxuICAgIHJldHVybiBbbnVsbCwgaXRlbUluZGV4ICsgMV07XG4gIH1cblxuICBmdW5jdGlvbiBwcmV2KHBvc2l0aW9uKSB7XG4gICAgdmFyIF9wb3NpdGlvbjIgPSBfc2xpY2VkVG9BcnJheSQxKHBvc2l0aW9uLCAyKTtcblxuICAgIHZhciBzZWN0aW9uSW5kZXggPSBfcG9zaXRpb24yWzBdO1xuICAgIHZhciBpdGVtSW5kZXggPSBfcG9zaXRpb24yWzFdO1xuXG5cbiAgICBpZiAobXVsdGlTZWN0aW9uKSB7XG4gICAgICBpZiAoaXRlbUluZGV4ID09PSBudWxsIHx8IGl0ZW1JbmRleCA9PT0gMCkge1xuICAgICAgICBzZWN0aW9uSW5kZXggPSBwcmV2Tm9uRW1wdHlTZWN0aW9uSW5kZXgoc2VjdGlvbkluZGV4KTtcblxuICAgICAgICBpZiAoc2VjdGlvbkluZGV4ID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIFtudWxsLCBudWxsXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbc2VjdGlvbkluZGV4LCBkYXRhW3NlY3Rpb25JbmRleF0gLSAxXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFtzZWN0aW9uSW5kZXgsIGl0ZW1JbmRleCAtIDFdO1xuICAgIH1cblxuICAgIGlmIChkYXRhID09PSAwIHx8IGl0ZW1JbmRleCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtudWxsLCBudWxsXTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbUluZGV4ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gW251bGwsIGRhdGEgLSAxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gW251bGwsIGl0ZW1JbmRleCAtIDFdO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNMYXN0KHBvc2l0aW9uKSB7XG4gICAgcmV0dXJuIG5leHQocG9zaXRpb24pWzFdID09PSBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBuZXh0OiBuZXh0LFxuICAgIHByZXY6IHByZXYsXG4gICAgaXNMYXN0OiBpc0xhc3RcbiAgfTtcbn07XG5cbnZhciBkaXN0JDEgPSBjcmVhdGVDb21tb25qc01vZHVsZShmdW5jdGlvbiAobW9kdWxlLCBleHBvcnRzKSB7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX3NsaWNlZFRvQXJyYXkgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBzbGljZUl0ZXJhdG9yKGFyciwgaSkgeyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9lID0gdW5kZWZpbmVkOyB0cnkgeyBmb3IgKHZhciBfaSA9IGFycltTeW1ib2wuaXRlcmF0b3JdKCksIF9zOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVsncmV0dXJuJ10pIF9pWydyZXR1cm4nXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH0gcmV0dXJuIGZ1bmN0aW9uIChhcnIsIGkpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgeyByZXR1cm4gYXJyOyB9IGVsc2UgaWYgKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoYXJyKSkgeyByZXR1cm4gc2xpY2VJdGVyYXRvcihhcnIsIGkpOyB9IGVsc2UgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlJyk7IH0gfTsgfSkoKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBBcnJheShhcnIubGVuZ3RoKTsgaSA8IGFyci5sZW5ndGg7IGkrKykgYXJyMltpXSA9IGFycltpXTsgcmV0dXJuIGFycjI7IH0gZWxzZSB7IHJldHVybiBBcnJheS5mcm9tKGFycik7IH0gfVxuXG5cblxudmFyIF9vYmplY3RBc3NpZ24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmplY3RBc3NpZ24pO1xuXG52YXIgdHJ1dGh5ID0gZnVuY3Rpb24gdHJ1dGh5KHgpIHtcbiAgcmV0dXJuIHg7XG59O1xuXG5leHBvcnRzWydkZWZhdWx0J10gPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgdmFyIF9yZWYgPSBBcnJheS5pc0FycmF5KGlucHV0KSAmJiBpbnB1dC5sZW5ndGggPT09IDIgPyBpbnB1dCA6IFtpbnB1dCwgbnVsbF07XG5cbiAgdmFyIF9yZWYyID0gX3NsaWNlZFRvQXJyYXkoX3JlZiwgMik7XG5cbiAgdmFyIHRoZW1lID0gX3JlZjJbMF07XG4gIHZhciBjbGFzc05hbWVEZWNvcmF0b3IgPSBfcmVmMlsxXTtcblxuICByZXR1cm4gZnVuY3Rpb24gKGtleSkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBuYW1lcyA9IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIG5hbWVzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgc3R5bGVzID0gbmFtZXMubWFwKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICByZXR1cm4gdGhlbWVbbmFtZV07XG4gICAgfSkuZmlsdGVyKHRydXRoeSk7XG5cbiAgICByZXR1cm4gdHlwZW9mIHN0eWxlc1swXSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGNsYXNzTmFtZURlY29yYXRvciA9PT0gJ2Z1bmN0aW9uJyA/IHsga2V5OiBrZXksIGNsYXNzTmFtZTogY2xhc3NOYW1lRGVjb3JhdG9yID8gY2xhc3NOYW1lRGVjb3JhdG9yLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KHN0eWxlcykpIDogc3R5bGVzLmpvaW4oJyAnKSB9IDogeyBrZXk6IGtleSwgc3R5bGU6IF9vYmplY3RBc3NpZ24yWydkZWZhdWx0J10uYXBwbHkodW5kZWZpbmVkLCBbe31dLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoc3R5bGVzKSkpIH07XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcbn0pO1xuXG51bndyYXBFeHBvcnRzKGRpc3QkMSk7XG5cbnZhciBjb21wYXJlT2JqZWN0c18xID0gY3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24gKG1vZHVsZSwgZXhwb3J0cykge1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGNvbXBhcmVPYmplY3RzO1xuZnVuY3Rpb24gY29tcGFyZU9iamVjdHMob2JqQSwgb2JqQikge1xuICB2YXIga2V5cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogW107XG5cbiAgaWYgKG9iakEgPT09IG9iakIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgYUtleXMgPSBPYmplY3Qua2V5cyhvYmpBKTtcbiAgdmFyIGJLZXlzID0gT2JqZWN0LmtleXMob2JqQik7XG5cbiAgaWYgKGFLZXlzLmxlbmd0aCAhPT0gYktleXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB2YXIga2V5c01hcCA9IHt9O1xuICB2YXIgaSA9IHZvaWQgMCxcbiAgICAgIGxlbiA9IHZvaWQgMDtcblxuICBmb3IgKGkgPSAwLCBsZW4gPSBrZXlzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAga2V5c01hcFtrZXlzW2ldXSA9IHRydWU7XG4gIH1cblxuICBmb3IgKGkgPSAwLCBsZW4gPSBhS2V5cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBrZXkgPSBhS2V5c1tpXTtcbiAgICB2YXIgYVZhbHVlID0gb2JqQVtrZXldO1xuICAgIHZhciBiVmFsdWUgPSBvYmpCW2tleV07XG5cbiAgICBpZiAoYVZhbHVlID09PSBiVmFsdWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICgha2V5c01hcFtrZXldIHx8IGFWYWx1ZSA9PT0gbnVsbCB8fCBiVmFsdWUgPT09IG51bGwgfHwgKHR5cGVvZiBhVmFsdWUgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKGFWYWx1ZSkpICE9PSAnb2JqZWN0JyB8fCAodHlwZW9mIGJWYWx1ZSA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YoYlZhbHVlKSkgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgYVZhbHVlS2V5cyA9IE9iamVjdC5rZXlzKGFWYWx1ZSk7XG4gICAgdmFyIGJWYWx1ZUtleXMgPSBPYmplY3Qua2V5cyhiVmFsdWUpO1xuXG4gICAgaWYgKGFWYWx1ZUtleXMubGVuZ3RoICE9PSBiVmFsdWVLZXlzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgbiA9IDAsIGxlbmd0aCA9IGFWYWx1ZUtleXMubGVuZ3RoOyBuIDwgbGVuZ3RoOyBuKyspIHtcbiAgICAgIHZhciBhVmFsdWVLZXkgPSBhVmFsdWVLZXlzW25dO1xuXG4gICAgICBpZiAoYVZhbHVlW2FWYWx1ZUtleV0gIT09IGJWYWx1ZVthVmFsdWVLZXldKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbn0pO1xuXG51bndyYXBFeHBvcnRzKGNvbXBhcmVPYmplY3RzXzEpO1xuXG52YXIgU2VjdGlvblRpdGxlXzEgPSBjcmVhdGVDb21tb25qc01vZHVsZShmdW5jdGlvbiAobW9kdWxlLCBleHBvcnRzKSB7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cblxuXG52YXIgX3JlYWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoUmVhY3RfX2RlZmF1bHQpO1xuXG5cblxudmFyIF9wcm9wVHlwZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChwcm9wVHlwZXMpO1xuXG5cblxudmFyIF9jb21wYXJlT2JqZWN0czIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KGNvbXBhcmVPYmplY3RzXzEpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbnZhciBTZWN0aW9uVGl0bGUgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU2VjdGlvblRpdGxlLCBfQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTZWN0aW9uVGl0bGUoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFNlY3Rpb25UaXRsZSk7XG5cbiAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKFNlY3Rpb25UaXRsZS5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKFNlY3Rpb25UaXRsZSkpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFNlY3Rpb25UaXRsZSwgW3tcbiAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzKSB7XG4gICAgICByZXR1cm4gKDAsIF9jb21wYXJlT2JqZWN0czIuZGVmYXVsdCkobmV4dFByb3BzLCB0aGlzLnByb3BzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdyZW5kZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBzZWN0aW9uID0gX3Byb3BzLnNlY3Rpb24sXG4gICAgICAgICAgcmVuZGVyU2VjdGlvblRpdGxlID0gX3Byb3BzLnJlbmRlclNlY3Rpb25UaXRsZSxcbiAgICAgICAgICB0aGVtZSA9IF9wcm9wcy50aGVtZSxcbiAgICAgICAgICBzZWN0aW9uS2V5UHJlZml4ID0gX3Byb3BzLnNlY3Rpb25LZXlQcmVmaXg7XG5cbiAgICAgIHZhciBzZWN0aW9uVGl0bGUgPSByZW5kZXJTZWN0aW9uVGl0bGUoc2VjdGlvbik7XG5cbiAgICAgIGlmICghc2VjdGlvblRpdGxlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICdkaXYnLFxuICAgICAgICB0aGVtZShzZWN0aW9uS2V5UHJlZml4ICsgJ3RpdGxlJywgJ3NlY3Rpb25UaXRsZScpLFxuICAgICAgICBzZWN0aW9uVGl0bGVcbiAgICAgICk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFNlY3Rpb25UaXRsZTtcbn0oUmVhY3RfX2RlZmF1bHQuQ29tcG9uZW50KTtcblxuU2VjdGlvblRpdGxlLnByb3BUeXBlcyA9IHtcbiAgc2VjdGlvbjogX3Byb3BUeXBlczIuZGVmYXVsdC5hbnkuaXNSZXF1aXJlZCxcbiAgcmVuZGVyU2VjdGlvblRpdGxlOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxcbiAgdGhlbWU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLFxuICBzZWN0aW9uS2V5UHJlZml4OiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gU2VjdGlvblRpdGxlO1xufSk7XG5cbnVud3JhcEV4cG9ydHMoU2VjdGlvblRpdGxlXzEpO1xuXG52YXIgSXRlbV8xID0gY3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24gKG1vZHVsZSwgZXhwb3J0cykge1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG5cblxudmFyIF9yZWFjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KFJlYWN0X19kZWZhdWx0KTtcblxuXG5cbnZhciBfcHJvcFR5cGVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocHJvcFR5cGVzKTtcblxuXG5cbnZhciBfY29tcGFyZU9iamVjdHMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChjb21wYXJlT2JqZWN0c18xKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbnZhciBJdGVtID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEl0ZW0sIF9Db21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIEl0ZW0oKSB7XG4gICAgdmFyIF9yZWY7XG5cbiAgICB2YXIgX3RlbXAsIF90aGlzLCBfcmV0O1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEl0ZW0pO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIF9yZXQgPSAoX3RlbXAgPSAoX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoX3JlZiA9IEl0ZW0uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihJdGVtKSkuY2FsbC5hcHBseShfcmVmLCBbdGhpc10uY29uY2F0KGFyZ3MpKSksIF90aGlzKSwgX3RoaXMuc3RvcmVJdGVtUmVmZXJlbmNlID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIGlmIChpdGVtICE9PSBudWxsKSB7XG4gICAgICAgIF90aGlzLml0ZW0gPSBpdGVtO1xuICAgICAgfVxuICAgIH0sIF90aGlzLm9uTW91c2VFbnRlciA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgc2VjdGlvbkluZGV4ID0gX3RoaXMkcHJvcHMuc2VjdGlvbkluZGV4LFxuICAgICAgICAgIGl0ZW1JbmRleCA9IF90aGlzJHByb3BzLml0ZW1JbmRleDtcblxuXG4gICAgICBfdGhpcy5wcm9wcy5vbk1vdXNlRW50ZXIoZXZlbnQsIHsgc2VjdGlvbkluZGV4OiBzZWN0aW9uSW5kZXgsIGl0ZW1JbmRleDogaXRlbUluZGV4IH0pO1xuICAgIH0sIF90aGlzLm9uTW91c2VMZWF2ZSA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIHNlY3Rpb25JbmRleCA9IF90aGlzJHByb3BzMi5zZWN0aW9uSW5kZXgsXG4gICAgICAgICAgaXRlbUluZGV4ID0gX3RoaXMkcHJvcHMyLml0ZW1JbmRleDtcblxuXG4gICAgICBfdGhpcy5wcm9wcy5vbk1vdXNlTGVhdmUoZXZlbnQsIHsgc2VjdGlvbkluZGV4OiBzZWN0aW9uSW5kZXgsIGl0ZW1JbmRleDogaXRlbUluZGV4IH0pO1xuICAgIH0sIF90aGlzLm9uTW91c2VEb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgc2VjdGlvbkluZGV4ID0gX3RoaXMkcHJvcHMzLnNlY3Rpb25JbmRleCxcbiAgICAgICAgICBpdGVtSW5kZXggPSBfdGhpcyRwcm9wczMuaXRlbUluZGV4O1xuXG5cbiAgICAgIF90aGlzLnByb3BzLm9uTW91c2VEb3duKGV2ZW50LCB7IHNlY3Rpb25JbmRleDogc2VjdGlvbkluZGV4LCBpdGVtSW5kZXg6IGl0ZW1JbmRleCB9KTtcbiAgICB9LCBfdGhpcy5vbkNsaWNrID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgc2VjdGlvbkluZGV4ID0gX3RoaXMkcHJvcHM0LnNlY3Rpb25JbmRleCxcbiAgICAgICAgICBpdGVtSW5kZXggPSBfdGhpcyRwcm9wczQuaXRlbUluZGV4O1xuXG5cbiAgICAgIF90aGlzLnByb3BzLm9uQ2xpY2soZXZlbnQsIHsgc2VjdGlvbkluZGV4OiBzZWN0aW9uSW5kZXgsIGl0ZW1JbmRleDogaXRlbUluZGV4IH0pO1xuICAgIH0sIF90ZW1wKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMsIF9yZXQpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEl0ZW0sIFt7XG4gICAga2V5OiAnc2hvdWxkQ29tcG9uZW50VXBkYXRlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcykge1xuICAgICAgcmV0dXJuICgwLCBfY29tcGFyZU9iamVjdHMyLmRlZmF1bHQpKG5leHRQcm9wcywgdGhpcy5wcm9wcywgWydyZW5kZXJJdGVtRGF0YSddKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdyZW5kZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpc0hpZ2hsaWdodGVkID0gX3Byb3BzLmlzSGlnaGxpZ2h0ZWQsXG4gICAgICAgICAgaXRlbSA9IF9wcm9wcy5pdGVtLFxuICAgICAgICAgIHJlbmRlckl0ZW0gPSBfcHJvcHMucmVuZGVySXRlbSxcbiAgICAgICAgICByZW5kZXJJdGVtRGF0YSA9IF9wcm9wcy5yZW5kZXJJdGVtRGF0YSxcbiAgICAgICAgICByZXN0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3Byb3BzLCBbJ2lzSGlnaGxpZ2h0ZWQnLCAnaXRlbScsICdyZW5kZXJJdGVtJywgJ3JlbmRlckl0ZW1EYXRhJ10pO1xuXG4gICAgICBkZWxldGUgcmVzdFByb3BzLnNlY3Rpb25JbmRleDtcbiAgICAgIGRlbGV0ZSByZXN0UHJvcHMuaXRlbUluZGV4O1xuXG4gICAgICBpZiAodHlwZW9mIHJlc3RQcm9wcy5vbk1vdXNlRW50ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmVzdFByb3BzLm9uTW91c2VFbnRlciA9IHRoaXMub25Nb3VzZUVudGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHJlc3RQcm9wcy5vbk1vdXNlTGVhdmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmVzdFByb3BzLm9uTW91c2VMZWF2ZSA9IHRoaXMub25Nb3VzZUxlYXZlO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHJlc3RQcm9wcy5vbk1vdXNlRG93biA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXN0UHJvcHMub25Nb3VzZURvd24gPSB0aGlzLm9uTW91c2VEb3duO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHJlc3RQcm9wcy5vbkNsaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJlc3RQcm9wcy5vbkNsaWNrID0gdGhpcy5vbkNsaWNrO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICdsaScsXG4gICAgICAgIF9leHRlbmRzKHsgcm9sZTogJ29wdGlvbicgfSwgcmVzdFByb3BzLCB7IHJlZjogdGhpcy5zdG9yZUl0ZW1SZWZlcmVuY2UgfSksXG4gICAgICAgIHJlbmRlckl0ZW0oaXRlbSwgX2V4dGVuZHMoeyBpc0hpZ2hsaWdodGVkOiBpc0hpZ2hsaWdodGVkIH0sIHJlbmRlckl0ZW1EYXRhKSlcbiAgICAgICk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEl0ZW07XG59KFJlYWN0X19kZWZhdWx0LkNvbXBvbmVudCk7XG5cbkl0ZW0ucHJvcFR5cGVzID0ge1xuICBzZWN0aW9uSW5kZXg6IF9wcm9wVHlwZXMyLmRlZmF1bHQubnVtYmVyLFxuICBpc0hpZ2hsaWdodGVkOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmJvb2wuaXNSZXF1aXJlZCxcbiAgaXRlbUluZGV4OiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm51bWJlci5pc1JlcXVpcmVkLFxuICBpdGVtOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmFueS5pc1JlcXVpcmVkLFxuICByZW5kZXJJdGVtOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxcbiAgcmVuZGVySXRlbURhdGE6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsXG4gIG9uTW91c2VFbnRlcjogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jLFxuICBvbk1vdXNlTGVhdmU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYyxcbiAgb25Nb3VzZURvd246IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYyxcbiAgb25DbGljazogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gSXRlbTtcbn0pO1xuXG51bndyYXBFeHBvcnRzKEl0ZW1fMSk7XG5cbnZhciBJdGVtc0xpc3RfMSA9IGNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZ1bmN0aW9uIChtb2R1bGUsIGV4cG9ydHMpIHtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxuXG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChSZWFjdF9fZGVmYXVsdCk7XG5cblxuXG52YXIgX3Byb3BUeXBlczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHByb3BUeXBlcyk7XG5cblxuXG52YXIgX0l0ZW0yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChJdGVtXzEpO1xuXG5cblxudmFyIF9jb21wYXJlT2JqZWN0czIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KGNvbXBhcmVPYmplY3RzXzEpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbnZhciBJdGVtc0xpc3QgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoSXRlbXNMaXN0LCBfQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBJdGVtc0xpc3QoKSB7XG4gICAgdmFyIF9yZWY7XG5cbiAgICB2YXIgX3RlbXAsIF90aGlzLCBfcmV0O1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEl0ZW1zTGlzdCk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3JldCA9IChfdGVtcCA9IChfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChfcmVmID0gSXRlbXNMaXN0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoSXRlbXNMaXN0KSkuY2FsbC5hcHBseShfcmVmLCBbdGhpc10uY29uY2F0KGFyZ3MpKSksIF90aGlzKSwgX3RoaXMuc3RvcmVIaWdobGlnaHRlZEl0ZW1SZWZlcmVuY2UgPSBmdW5jdGlvbiAoaGlnaGxpZ2h0ZWRJdGVtKSB7XG4gICAgICBfdGhpcy5wcm9wcy5vbkhpZ2hsaWdodGVkSXRlbUNoYW5nZShoaWdobGlnaHRlZEl0ZW0gPT09IG51bGwgPyBudWxsIDogaGlnaGxpZ2h0ZWRJdGVtLml0ZW0pO1xuICAgIH0sIF90ZW1wKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMsIF9yZXQpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEl0ZW1zTGlzdCwgW3tcbiAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzKSB7XG4gICAgICByZXR1cm4gKDAsIF9jb21wYXJlT2JqZWN0czIuZGVmYXVsdCkobmV4dFByb3BzLCB0aGlzLnByb3BzLCBbJ2l0ZW1Qcm9wcyddKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdyZW5kZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXRlbXMgPSBfcHJvcHMuaXRlbXMsXG4gICAgICAgICAgaXRlbVByb3BzID0gX3Byb3BzLml0ZW1Qcm9wcyxcbiAgICAgICAgICByZW5kZXJJdGVtID0gX3Byb3BzLnJlbmRlckl0ZW0sXG4gICAgICAgICAgcmVuZGVySXRlbURhdGEgPSBfcHJvcHMucmVuZGVySXRlbURhdGEsXG4gICAgICAgICAgc2VjdGlvbkluZGV4ID0gX3Byb3BzLnNlY3Rpb25JbmRleCxcbiAgICAgICAgICBoaWdobGlnaHRlZEl0ZW1JbmRleCA9IF9wcm9wcy5oaWdobGlnaHRlZEl0ZW1JbmRleCxcbiAgICAgICAgICBnZXRJdGVtSWQgPSBfcHJvcHMuZ2V0SXRlbUlkLFxuICAgICAgICAgIHRoZW1lID0gX3Byb3BzLnRoZW1lLFxuICAgICAgICAgIGtleVByZWZpeCA9IF9wcm9wcy5rZXlQcmVmaXg7XG5cbiAgICAgIHZhciBzZWN0aW9uUHJlZml4ID0gc2VjdGlvbkluZGV4ID09PSBudWxsID8ga2V5UHJlZml4IDoga2V5UHJlZml4ICsgJ3NlY3Rpb24tJyArIHNlY3Rpb25JbmRleCArICctJztcbiAgICAgIHZhciBpc0l0ZW1Qcm9wc0Z1bmN0aW9uID0gdHlwZW9mIGl0ZW1Qcm9wcyA9PT0gJ2Z1bmN0aW9uJztcblxuICAgICAgcmV0dXJuIF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAndWwnLFxuICAgICAgICBfZXh0ZW5kcyh7IHJvbGU6ICdsaXN0Ym94JyB9LCB0aGVtZShzZWN0aW9uUHJlZml4ICsgJ2l0ZW1zLWxpc3QnLCAnaXRlbXNMaXN0JykpLFxuICAgICAgICBpdGVtcy5tYXAoZnVuY3Rpb24gKGl0ZW0sIGl0ZW1JbmRleCkge1xuICAgICAgICAgIHZhciBpc0ZpcnN0ID0gaXRlbUluZGV4ID09PSAwO1xuICAgICAgICAgIHZhciBpc0hpZ2hsaWdodGVkID0gaXRlbUluZGV4ID09PSBoaWdobGlnaHRlZEl0ZW1JbmRleDtcbiAgICAgICAgICB2YXIgaXRlbUtleSA9IHNlY3Rpb25QcmVmaXggKyAnaXRlbS0nICsgaXRlbUluZGV4O1xuICAgICAgICAgIHZhciBpdGVtUHJvcHNPYmogPSBpc0l0ZW1Qcm9wc0Z1bmN0aW9uID8gaXRlbVByb3BzKHsgc2VjdGlvbkluZGV4OiBzZWN0aW9uSW5kZXgsIGl0ZW1JbmRleDogaXRlbUluZGV4IH0pIDogaXRlbVByb3BzO1xuICAgICAgICAgIHZhciBhbGxJdGVtUHJvcHMgPSBfZXh0ZW5kcyh7XG4gICAgICAgICAgICBpZDogZ2V0SXRlbUlkKHNlY3Rpb25JbmRleCwgaXRlbUluZGV4KSxcbiAgICAgICAgICAgICdhcmlhLXNlbGVjdGVkJzogaXNIaWdobGlnaHRlZFxuICAgICAgICAgIH0sIHRoZW1lKGl0ZW1LZXksICdpdGVtJywgaXNGaXJzdCAmJiAnaXRlbUZpcnN0JywgaXNIaWdobGlnaHRlZCAmJiAnaXRlbUhpZ2hsaWdodGVkJyksIGl0ZW1Qcm9wc09iaik7XG5cbiAgICAgICAgICBpZiAoaXNIaWdobGlnaHRlZCkge1xuICAgICAgICAgICAgYWxsSXRlbVByb3BzLnJlZiA9IF90aGlzMi5zdG9yZUhpZ2hsaWdodGVkSXRlbVJlZmVyZW5jZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBga2V5YCBpcyBwcm92aWRlZCBieSB0aGVtZSgpXG4gICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QvanN4LWtleSAqL1xuICAgICAgICAgIHJldHVybiBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChfSXRlbTIuZGVmYXVsdCwgX2V4dGVuZHMoe30sIGFsbEl0ZW1Qcm9wcywge1xuICAgICAgICAgICAgc2VjdGlvbkluZGV4OiBzZWN0aW9uSW5kZXgsXG4gICAgICAgICAgICBpc0hpZ2hsaWdodGVkOiBpc0hpZ2hsaWdodGVkLFxuICAgICAgICAgICAgaXRlbUluZGV4OiBpdGVtSW5kZXgsXG4gICAgICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICAgICAgcmVuZGVySXRlbTogcmVuZGVySXRlbSxcbiAgICAgICAgICAgIHJlbmRlckl0ZW1EYXRhOiByZW5kZXJJdGVtRGF0YVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0L2pzeC1rZXkgKi9cbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEl0ZW1zTGlzdDtcbn0oUmVhY3RfX2RlZmF1bHQuQ29tcG9uZW50KTtcblxuSXRlbXNMaXN0LnByb3BUeXBlcyA9IHtcbiAgaXRlbXM6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYXJyYXkuaXNSZXF1aXJlZCxcbiAgaXRlbVByb3BzOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9uZU9mVHlwZShbX3Byb3BUeXBlczIuZGVmYXVsdC5vYmplY3QsIF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuY10pLFxuICByZW5kZXJJdGVtOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxcbiAgcmVuZGVySXRlbURhdGE6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsXG4gIHNlY3Rpb25JbmRleDogX3Byb3BUeXBlczIuZGVmYXVsdC5udW1iZXIsXG4gIGhpZ2hsaWdodGVkSXRlbUluZGV4OiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm51bWJlcixcbiAgb25IaWdobGlnaHRlZEl0ZW1DaGFuZ2U6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLFxuICBnZXRJdGVtSWQ6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLFxuICB0aGVtZTogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsXG4gIGtleVByZWZpeDogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZFxufTtcbkl0ZW1zTGlzdC5kZWZhdWx0UHJvcHMgPSB7XG4gIHNlY3Rpb25JbmRleDogbnVsbFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IEl0ZW1zTGlzdDtcbn0pO1xuXG51bndyYXBFeHBvcnRzKEl0ZW1zTGlzdF8xKTtcblxudmFyIEF1dG93aGF0ZXZlcl8xID0gY3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24gKG1vZHVsZSwgZXhwb3J0cykge1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG52YXIgX3NsaWNlZFRvQXJyYXkgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIHNsaWNlSXRlcmF0b3IoYXJyLCBpKSB7IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX2UgPSB1bmRlZmluZWQ7IHRyeSB7IGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH0gcmV0dXJuIGZ1bmN0aW9uIChhcnIsIGkpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgeyByZXR1cm4gYXJyOyB9IGVsc2UgaWYgKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoYXJyKSkgeyByZXR1cm4gc2xpY2VJdGVyYXRvcihhcnIsIGkpOyB9IGVsc2UgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTsgfSB9OyB9KCk7XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cblxuXG52YXIgX3JlYWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoUmVhY3RfX2RlZmF1bHQpO1xuXG5cblxudmFyIF9wcm9wVHlwZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChwcm9wVHlwZXMpO1xuXG5cblxudmFyIF9zZWN0aW9uSXRlcmF0b3IyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChkaXN0KTtcblxuXG5cbnZhciBfcmVhY3RUaGVtZWFibGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChkaXN0JDEpO1xuXG5cblxudmFyIF9TZWN0aW9uVGl0bGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChTZWN0aW9uVGl0bGVfMSk7XG5cblxuXG52YXIgX0l0ZW1zTGlzdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KEl0ZW1zTGlzdF8xKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgZW1wdHlPYmplY3QgPSB7fTtcbnZhciBkZWZhdWx0UmVuZGVySW5wdXRDb21wb25lbnQgPSBmdW5jdGlvbiBkZWZhdWx0UmVuZGVySW5wdXRDb21wb25lbnQocHJvcHMpIHtcbiAgcmV0dXJuIF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCdpbnB1dCcsIHByb3BzKTtcbn07XG52YXIgZGVmYXVsdFJlbmRlckl0ZW1zQ29udGFpbmVyID0gZnVuY3Rpb24gZGVmYXVsdFJlbmRlckl0ZW1zQ29udGFpbmVyKF9yZWYpIHtcbiAgdmFyIGNvbnRhaW5lclByb3BzID0gX3JlZi5jb250YWluZXJQcm9wcyxcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgcmV0dXJuIF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFxuICAgICdkaXYnLFxuICAgIGNvbnRhaW5lclByb3BzLFxuICAgIGNoaWxkcmVuXG4gICk7XG59O1xudmFyIGRlZmF1bHRUaGVtZSA9IHtcbiAgY29udGFpbmVyOiAncmVhY3QtYXV0b3doYXRldmVyX19jb250YWluZXInLFxuICBjb250YWluZXJPcGVuOiAncmVhY3QtYXV0b3doYXRldmVyX19jb250YWluZXItLW9wZW4nLFxuICBpbnB1dDogJ3JlYWN0LWF1dG93aGF0ZXZlcl9faW5wdXQnLFxuICBpbnB1dE9wZW46ICdyZWFjdC1hdXRvd2hhdGV2ZXJfX2lucHV0LS1vcGVuJyxcbiAgaW5wdXRGb2N1c2VkOiAncmVhY3QtYXV0b3doYXRldmVyX19pbnB1dC0tZm9jdXNlZCcsXG4gIGl0ZW1zQ29udGFpbmVyOiAncmVhY3QtYXV0b3doYXRldmVyX19pdGVtcy1jb250YWluZXInLFxuICBpdGVtc0NvbnRhaW5lck9wZW46ICdyZWFjdC1hdXRvd2hhdGV2ZXJfX2l0ZW1zLWNvbnRhaW5lci0tb3BlbicsXG4gIGl0ZW1zTGlzdDogJ3JlYWN0LWF1dG93aGF0ZXZlcl9faXRlbXMtbGlzdCcsXG4gIGl0ZW06ICdyZWFjdC1hdXRvd2hhdGV2ZXJfX2l0ZW0nLFxuICBpdGVtRmlyc3Q6ICdyZWFjdC1hdXRvd2hhdGV2ZXJfX2l0ZW0tLWZpcnN0JyxcbiAgaXRlbUhpZ2hsaWdodGVkOiAncmVhY3QtYXV0b3doYXRldmVyX19pdGVtLS1oaWdobGlnaHRlZCcsXG4gIHNlY3Rpb25Db250YWluZXI6ICdyZWFjdC1hdXRvd2hhdGV2ZXJfX3NlY3Rpb24tY29udGFpbmVyJyxcbiAgc2VjdGlvbkNvbnRhaW5lckZpcnN0OiAncmVhY3QtYXV0b3doYXRldmVyX19zZWN0aW9uLWNvbnRhaW5lci0tZmlyc3QnLFxuICBzZWN0aW9uVGl0bGU6ICdyZWFjdC1hdXRvd2hhdGV2ZXJfX3NlY3Rpb24tdGl0bGUnXG59O1xuXG52YXIgQXV0b3doYXRldmVyID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEF1dG93aGF0ZXZlciwgX0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gQXV0b3doYXRldmVyKHByb3BzKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEF1dG93aGF0ZXZlcik7XG5cbiAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoQXV0b3doYXRldmVyLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoQXV0b3doYXRldmVyKSkuY2FsbCh0aGlzLCBwcm9wcykpO1xuXG4gICAgX3RoaXMuc3RvcmVJbnB1dFJlZmVyZW5jZSA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgaWYgKGlucHV0ICE9PSBudWxsKSB7XG4gICAgICAgIF90aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLnN0b3JlSXRlbXNDb250YWluZXJSZWZlcmVuY2UgPSBmdW5jdGlvbiAoaXRlbXNDb250YWluZXIpIHtcbiAgICAgIGlmIChpdGVtc0NvbnRhaW5lciAhPT0gbnVsbCkge1xuICAgICAgICBfdGhpcy5pdGVtc0NvbnRhaW5lciA9IGl0ZW1zQ29udGFpbmVyO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdGhpcy5vbkhpZ2hsaWdodGVkSXRlbUNoYW5nZSA9IGZ1bmN0aW9uIChoaWdobGlnaHRlZEl0ZW0pIHtcbiAgICAgIF90aGlzLmhpZ2hsaWdodGVkSXRlbSA9IGhpZ2hsaWdodGVkSXRlbTtcbiAgICB9O1xuXG4gICAgX3RoaXMuZ2V0SXRlbUlkID0gZnVuY3Rpb24gKHNlY3Rpb25JbmRleCwgaXRlbUluZGV4KSB7XG4gICAgICBpZiAoaXRlbUluZGV4ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgaWQgPSBfdGhpcy5wcm9wcy5pZDtcblxuICAgICAgdmFyIHNlY3Rpb24gPSBzZWN0aW9uSW5kZXggPT09IG51bGwgPyAnJyA6ICdzZWN0aW9uLScgKyBzZWN0aW9uSW5kZXg7XG5cbiAgICAgIHJldHVybiAncmVhY3QtYXV0b3doYXRldmVyLScgKyBpZCArICctJyArIHNlY3Rpb24gKyAnLWl0ZW0tJyArIGl0ZW1JbmRleDtcbiAgICB9O1xuXG4gICAgX3RoaXMub25Gb2N1cyA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgdmFyIGlucHV0UHJvcHMgPSBfdGhpcy5wcm9wcy5pbnB1dFByb3BzO1xuXG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNJbnB1dEZvY3VzZWQ6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgICBpbnB1dFByb3BzLm9uRm9jdXMgJiYgaW5wdXRQcm9wcy5vbkZvY3VzKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgX3RoaXMub25CbHVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgaW5wdXRQcm9wcyA9IF90aGlzLnByb3BzLmlucHV0UHJvcHM7XG5cblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc0lucHV0Rm9jdXNlZDogZmFsc2VcbiAgICAgIH0pO1xuXG4gICAgICBpbnB1dFByb3BzLm9uQmx1ciAmJiBpbnB1dFByb3BzLm9uQmx1cihldmVudCk7XG4gICAgfTtcblxuICAgIF90aGlzLm9uS2V5RG93biA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgaW5wdXRQcm9wcyA9IF90aGlzJHByb3BzLmlucHV0UHJvcHMsXG4gICAgICAgICAgaGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXggPSBfdGhpcyRwcm9wcy5oaWdobGlnaHRlZFNlY3Rpb25JbmRleCxcbiAgICAgICAgICBoaWdobGlnaHRlZEl0ZW1JbmRleCA9IF90aGlzJHByb3BzLmhpZ2hsaWdodGVkSXRlbUluZGV4O1xuXG5cbiAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBuZXh0UHJldiA9IGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicgPyAnbmV4dCcgOiAncHJldic7XG5cbiAgICAgICAgICAgIHZhciBfdGhpcyRzZWN0aW9uSXRlcmF0b3IgPSBfdGhpcy5zZWN0aW9uSXRlcmF0b3JbbmV4dFByZXZdKFtoaWdobGlnaHRlZFNlY3Rpb25JbmRleCwgaGlnaGxpZ2h0ZWRJdGVtSW5kZXhdKSxcbiAgICAgICAgICAgICAgICBfdGhpcyRzZWN0aW9uSXRlcmF0b3IyID0gX3NsaWNlZFRvQXJyYXkoX3RoaXMkc2VjdGlvbkl0ZXJhdG9yLCAyKSxcbiAgICAgICAgICAgICAgICBuZXdIaWdobGlnaHRlZFNlY3Rpb25JbmRleCA9IF90aGlzJHNlY3Rpb25JdGVyYXRvcjJbMF0sXG4gICAgICAgICAgICAgICAgbmV3SGlnaGxpZ2h0ZWRJdGVtSW5kZXggPSBfdGhpcyRzZWN0aW9uSXRlcmF0b3IyWzFdO1xuXG4gICAgICAgICAgICBpbnB1dFByb3BzLm9uS2V5RG93bihldmVudCwgeyBuZXdIaWdobGlnaHRlZFNlY3Rpb25JbmRleDogbmV3SGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXgsIG5ld0hpZ2hsaWdodGVkSXRlbUluZGV4OiBuZXdIaWdobGlnaHRlZEl0ZW1JbmRleCB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlucHV0UHJvcHMub25LZXlEb3duKGV2ZW50LCB7IGhpZ2hsaWdodGVkU2VjdGlvbkluZGV4OiBoaWdobGlnaHRlZFNlY3Rpb25JbmRleCwgaGlnaGxpZ2h0ZWRJdGVtSW5kZXg6IGhpZ2hsaWdodGVkSXRlbUluZGV4IH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdGhpcy5oaWdobGlnaHRlZEl0ZW0gPSBudWxsO1xuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBpc0lucHV0Rm9jdXNlZDogZmFsc2VcbiAgICB9O1xuXG4gICAgX3RoaXMuc2V0U2VjdGlvbnNJdGVtcyhwcm9wcyk7XG4gICAgX3RoaXMuc2V0U2VjdGlvbkl0ZXJhdG9yKHByb3BzKTtcbiAgICBfdGhpcy5zZXRUaGVtZShwcm9wcyk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEF1dG93aGF0ZXZlciwgW3tcbiAgICBrZXk6ICdjb21wb25lbnREaWRNb3VudCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdGhpcy5lbnN1cmVIaWdobGlnaHRlZEl0ZW1Jc1Zpc2libGUoKTtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2FtZWxjYXNlLCByZWFjdC9zb3J0LWNvbXBcblxuICB9LCB7XG4gICAga2V5OiAnVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcbiAgICAgIGlmIChuZXh0UHJvcHMuaXRlbXMgIT09IHRoaXMucHJvcHMuaXRlbXMpIHtcbiAgICAgICAgdGhpcy5zZXRTZWN0aW9uc0l0ZW1zKG5leHRQcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXh0UHJvcHMuaXRlbXMgIT09IHRoaXMucHJvcHMuaXRlbXMgfHwgbmV4dFByb3BzLm11bHRpU2VjdGlvbiAhPT0gdGhpcy5wcm9wcy5tdWx0aVNlY3Rpb24pIHtcbiAgICAgICAgdGhpcy5zZXRTZWN0aW9uSXRlcmF0b3IobmV4dFByb3BzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5leHRQcm9wcy50aGVtZSAhPT0gdGhpcy5wcm9wcy50aGVtZSkge1xuICAgICAgICB0aGlzLnNldFRoZW1lKG5leHRQcm9wcyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnY29tcG9uZW50RGlkVXBkYXRlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgdGhpcy5lbnN1cmVIaWdobGlnaHRlZEl0ZW1Jc1Zpc2libGUoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdzZXRTZWN0aW9uc0l0ZW1zJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0U2VjdGlvbnNJdGVtcyhwcm9wcykge1xuICAgICAgaWYgKHByb3BzLm11bHRpU2VjdGlvbikge1xuICAgICAgICB0aGlzLnNlY3Rpb25zSXRlbXMgPSBwcm9wcy5pdGVtcy5tYXAoZnVuY3Rpb24gKHNlY3Rpb24pIHtcbiAgICAgICAgICByZXR1cm4gcHJvcHMuZ2V0U2VjdGlvbkl0ZW1zKHNlY3Rpb24pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zZWN0aW9uc0xlbmd0aHMgPSB0aGlzLnNlY3Rpb25zSXRlbXMubWFwKGZ1bmN0aW9uIChpdGVtcykge1xuICAgICAgICAgIHJldHVybiBpdGVtcy5sZW5ndGg7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFsbFNlY3Rpb25zQXJlRW1wdHkgPSB0aGlzLnNlY3Rpb25zTGVuZ3Rocy5ldmVyeShmdW5jdGlvbiAoaXRlbXNDb3VudCkge1xuICAgICAgICAgIHJldHVybiBpdGVtc0NvdW50ID09PSAwO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdzZXRTZWN0aW9uSXRlcmF0b3InLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRTZWN0aW9uSXRlcmF0b3IocHJvcHMpIHtcbiAgICAgIHRoaXMuc2VjdGlvbkl0ZXJhdG9yID0gKDAsIF9zZWN0aW9uSXRlcmF0b3IyLmRlZmF1bHQpKHtcbiAgICAgICAgbXVsdGlTZWN0aW9uOiBwcm9wcy5tdWx0aVNlY3Rpb24sXG4gICAgICAgIGRhdGE6IHByb3BzLm11bHRpU2VjdGlvbiA/IHRoaXMuc2VjdGlvbnNMZW5ndGhzIDogcHJvcHMuaXRlbXMubGVuZ3RoXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdzZXRUaGVtZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldFRoZW1lKHByb3BzKSB7XG4gICAgICB0aGlzLnRoZW1lID0gKDAsIF9yZWFjdFRoZW1lYWJsZTIuZGVmYXVsdCkocHJvcHMudGhlbWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbmRlclNlY3Rpb25zJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyU2VjdGlvbnMoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuYWxsU2VjdGlvbnNBcmVFbXB0eSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIHRoZW1lID0gdGhpcy50aGVtZTtcbiAgICAgIHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGlkID0gX3Byb3BzLmlkLFxuICAgICAgICAgIGl0ZW1zID0gX3Byb3BzLml0ZW1zLFxuICAgICAgICAgIHJlbmRlckl0ZW0gPSBfcHJvcHMucmVuZGVySXRlbSxcbiAgICAgICAgICByZW5kZXJJdGVtRGF0YSA9IF9wcm9wcy5yZW5kZXJJdGVtRGF0YSxcbiAgICAgICAgICByZW5kZXJTZWN0aW9uVGl0bGUgPSBfcHJvcHMucmVuZGVyU2VjdGlvblRpdGxlLFxuICAgICAgICAgIGhpZ2hsaWdodGVkU2VjdGlvbkluZGV4ID0gX3Byb3BzLmhpZ2hsaWdodGVkU2VjdGlvbkluZGV4LFxuICAgICAgICAgIGhpZ2hsaWdodGVkSXRlbUluZGV4ID0gX3Byb3BzLmhpZ2hsaWdodGVkSXRlbUluZGV4LFxuICAgICAgICAgIGl0ZW1Qcm9wcyA9IF9wcm9wcy5pdGVtUHJvcHM7XG5cblxuICAgICAgcmV0dXJuIGl0ZW1zLm1hcChmdW5jdGlvbiAoc2VjdGlvbiwgc2VjdGlvbkluZGV4KSB7XG4gICAgICAgIHZhciBrZXlQcmVmaXggPSAncmVhY3QtYXV0b3doYXRldmVyLScgKyBpZCArICctJztcbiAgICAgICAgdmFyIHNlY3Rpb25LZXlQcmVmaXggPSBrZXlQcmVmaXggKyAnc2VjdGlvbi0nICsgc2VjdGlvbkluZGV4ICsgJy0nO1xuICAgICAgICB2YXIgaXNGaXJzdFNlY3Rpb24gPSBzZWN0aW9uSW5kZXggPT09IDA7XG5cbiAgICAgICAgLy8gYGtleWAgaXMgcHJvdmlkZWQgYnkgdGhlbWUoKVxuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9qc3gta2V5ICovXG4gICAgICAgIHJldHVybiBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICB0aGVtZShzZWN0aW9uS2V5UHJlZml4ICsgJ2NvbnRhaW5lcicsICdzZWN0aW9uQ29udGFpbmVyJywgaXNGaXJzdFNlY3Rpb24gJiYgJ3NlY3Rpb25Db250YWluZXJGaXJzdCcpLFxuICAgICAgICAgIF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KF9TZWN0aW9uVGl0bGUyLmRlZmF1bHQsIHtcbiAgICAgICAgICAgIHNlY3Rpb246IHNlY3Rpb24sXG4gICAgICAgICAgICByZW5kZXJTZWN0aW9uVGl0bGU6IHJlbmRlclNlY3Rpb25UaXRsZSxcbiAgICAgICAgICAgIHRoZW1lOiB0aGVtZSxcbiAgICAgICAgICAgIHNlY3Rpb25LZXlQcmVmaXg6IHNlY3Rpb25LZXlQcmVmaXhcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChfSXRlbXNMaXN0Mi5kZWZhdWx0LCB7XG4gICAgICAgICAgICBpdGVtczogX3RoaXMyLnNlY3Rpb25zSXRlbXNbc2VjdGlvbkluZGV4XSxcbiAgICAgICAgICAgIGl0ZW1Qcm9wczogaXRlbVByb3BzLFxuICAgICAgICAgICAgcmVuZGVySXRlbTogcmVuZGVySXRlbSxcbiAgICAgICAgICAgIHJlbmRlckl0ZW1EYXRhOiByZW5kZXJJdGVtRGF0YSxcbiAgICAgICAgICAgIHNlY3Rpb25JbmRleDogc2VjdGlvbkluZGV4LFxuICAgICAgICAgICAgaGlnaGxpZ2h0ZWRJdGVtSW5kZXg6IGhpZ2hsaWdodGVkU2VjdGlvbkluZGV4ID09PSBzZWN0aW9uSW5kZXggPyBoaWdobGlnaHRlZEl0ZW1JbmRleCA6IG51bGwsXG4gICAgICAgICAgICBvbkhpZ2hsaWdodGVkSXRlbUNoYW5nZTogX3RoaXMyLm9uSGlnaGxpZ2h0ZWRJdGVtQ2hhbmdlLFxuICAgICAgICAgICAgZ2V0SXRlbUlkOiBfdGhpczIuZ2V0SXRlbUlkLFxuICAgICAgICAgICAgdGhlbWU6IHRoZW1lLFxuICAgICAgICAgICAga2V5UHJlZml4OiBrZXlQcmVmaXgsXG4gICAgICAgICAgICByZWY6IF90aGlzMi5zdG9yZUl0ZW1zTGlzdFJlZmVyZW5jZVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QvanN4LWtleSAqL1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncmVuZGVySXRlbXMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJJdGVtcygpIHtcbiAgICAgIHZhciBpdGVtcyA9IHRoaXMucHJvcHMuaXRlbXM7XG5cblxuICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIHRoZW1lID0gdGhpcy50aGVtZTtcbiAgICAgIHZhciBfcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpZCA9IF9wcm9wczIuaWQsXG4gICAgICAgICAgcmVuZGVySXRlbSA9IF9wcm9wczIucmVuZGVySXRlbSxcbiAgICAgICAgICByZW5kZXJJdGVtRGF0YSA9IF9wcm9wczIucmVuZGVySXRlbURhdGEsXG4gICAgICAgICAgaGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXggPSBfcHJvcHMyLmhpZ2hsaWdodGVkU2VjdGlvbkluZGV4LFxuICAgICAgICAgIGhpZ2hsaWdodGVkSXRlbUluZGV4ID0gX3Byb3BzMi5oaWdobGlnaHRlZEl0ZW1JbmRleCxcbiAgICAgICAgICBpdGVtUHJvcHMgPSBfcHJvcHMyLml0ZW1Qcm9wcztcblxuXG4gICAgICByZXR1cm4gX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoX0l0ZW1zTGlzdDIuZGVmYXVsdCwge1xuICAgICAgICBpdGVtczogaXRlbXMsXG4gICAgICAgIGl0ZW1Qcm9wczogaXRlbVByb3BzLFxuICAgICAgICByZW5kZXJJdGVtOiByZW5kZXJJdGVtLFxuICAgICAgICByZW5kZXJJdGVtRGF0YTogcmVuZGVySXRlbURhdGEsXG4gICAgICAgIGhpZ2hsaWdodGVkSXRlbUluZGV4OiBoaWdobGlnaHRlZFNlY3Rpb25JbmRleCA9PT0gbnVsbCA/IGhpZ2hsaWdodGVkSXRlbUluZGV4IDogbnVsbCxcbiAgICAgICAgb25IaWdobGlnaHRlZEl0ZW1DaGFuZ2U6IHRoaXMub25IaWdobGlnaHRlZEl0ZW1DaGFuZ2UsXG4gICAgICAgIGdldEl0ZW1JZDogdGhpcy5nZXRJdGVtSWQsXG4gICAgICAgIHRoZW1lOiB0aGVtZSxcbiAgICAgICAga2V5UHJlZml4OiAncmVhY3QtYXV0b3doYXRldmVyLScgKyBpZCArICctJ1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZW5zdXJlSGlnaGxpZ2h0ZWRJdGVtSXNWaXNpYmxlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZW5zdXJlSGlnaGxpZ2h0ZWRJdGVtSXNWaXNpYmxlKCkge1xuICAgICAgdmFyIGhpZ2hsaWdodGVkSXRlbSA9IHRoaXMuaGlnaGxpZ2h0ZWRJdGVtO1xuXG5cbiAgICAgIGlmICghaGlnaGxpZ2h0ZWRJdGVtKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGl0ZW1zQ29udGFpbmVyID0gdGhpcy5pdGVtc0NvbnRhaW5lcjtcblxuICAgICAgdmFyIGl0ZW1PZmZzZXRSZWxhdGl2ZVRvQ29udGFpbmVyID0gaGlnaGxpZ2h0ZWRJdGVtLm9mZnNldFBhcmVudCA9PT0gaXRlbXNDb250YWluZXIgPyBoaWdobGlnaHRlZEl0ZW0ub2Zmc2V0VG9wIDogaGlnaGxpZ2h0ZWRJdGVtLm9mZnNldFRvcCAtIGl0ZW1zQ29udGFpbmVyLm9mZnNldFRvcDtcblxuICAgICAgdmFyIHNjcm9sbFRvcCA9IGl0ZW1zQ29udGFpbmVyLnNjcm9sbFRvcDsgLy8gVG9wIG9mIHRoZSB2aXNpYmxlIGFyZWFcblxuICAgICAgaWYgKGl0ZW1PZmZzZXRSZWxhdGl2ZVRvQ29udGFpbmVyIDwgc2Nyb2xsVG9wKSB7XG4gICAgICAgIC8vIEl0ZW0gaXMgb2ZmIHRoZSB0b3Agb2YgdGhlIHZpc2libGUgYXJlYVxuICAgICAgICBzY3JvbGxUb3AgPSBpdGVtT2Zmc2V0UmVsYXRpdmVUb0NvbnRhaW5lcjtcbiAgICAgIH0gZWxzZSBpZiAoaXRlbU9mZnNldFJlbGF0aXZlVG9Db250YWluZXIgKyBoaWdobGlnaHRlZEl0ZW0ub2Zmc2V0SGVpZ2h0ID4gc2Nyb2xsVG9wICsgaXRlbXNDb250YWluZXIub2Zmc2V0SGVpZ2h0KSB7XG4gICAgICAgIC8vIEl0ZW0gaXMgb2ZmIHRoZSBib3R0b20gb2YgdGhlIHZpc2libGUgYXJlYVxuICAgICAgICBzY3JvbGxUb3AgPSBpdGVtT2Zmc2V0UmVsYXRpdmVUb0NvbnRhaW5lciArIGhpZ2hsaWdodGVkSXRlbS5vZmZzZXRIZWlnaHQgLSBpdGVtc0NvbnRhaW5lci5vZmZzZXRIZWlnaHQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChzY3JvbGxUb3AgIT09IGl0ZW1zQ29udGFpbmVyLnNjcm9sbFRvcCkge1xuICAgICAgICBpdGVtc0NvbnRhaW5lci5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncmVuZGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIHRoZW1lID0gdGhpcy50aGVtZTtcbiAgICAgIHZhciBfcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpZCA9IF9wcm9wczMuaWQsXG4gICAgICAgICAgbXVsdGlTZWN0aW9uID0gX3Byb3BzMy5tdWx0aVNlY3Rpb24sXG4gICAgICAgICAgcmVuZGVySW5wdXRDb21wb25lbnQgPSBfcHJvcHMzLnJlbmRlcklucHV0Q29tcG9uZW50LFxuICAgICAgICAgIHJlbmRlckl0ZW1zQ29udGFpbmVyID0gX3Byb3BzMy5yZW5kZXJJdGVtc0NvbnRhaW5lcixcbiAgICAgICAgICBoaWdobGlnaHRlZFNlY3Rpb25JbmRleCA9IF9wcm9wczMuaGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXgsXG4gICAgICAgICAgaGlnaGxpZ2h0ZWRJdGVtSW5kZXggPSBfcHJvcHMzLmhpZ2hsaWdodGVkSXRlbUluZGV4O1xuICAgICAgdmFyIGlzSW5wdXRGb2N1c2VkID0gdGhpcy5zdGF0ZS5pc0lucHV0Rm9jdXNlZDtcblxuICAgICAgdmFyIHJlbmRlcmVkSXRlbXMgPSBtdWx0aVNlY3Rpb24gPyB0aGlzLnJlbmRlclNlY3Rpb25zKCkgOiB0aGlzLnJlbmRlckl0ZW1zKCk7XG4gICAgICB2YXIgaXNPcGVuID0gcmVuZGVyZWRJdGVtcyAhPT0gbnVsbDtcbiAgICAgIHZhciBhcmlhQWN0aXZlZGVzY2VuZGFudCA9IHRoaXMuZ2V0SXRlbUlkKGhpZ2hsaWdodGVkU2VjdGlvbkluZGV4LCBoaWdobGlnaHRlZEl0ZW1JbmRleCk7XG4gICAgICB2YXIgaXRlbXNDb250YWluZXJJZCA9ICdyZWFjdC1hdXRvd2hhdGV2ZXItJyArIGlkO1xuICAgICAgdmFyIGNvbnRhaW5lclByb3BzID0gX2V4dGVuZHMoe1xuICAgICAgICByb2xlOiAnY29tYm9ib3gnLFxuICAgICAgICAnYXJpYS1oYXNwb3B1cCc6ICdsaXN0Ym94JyxcbiAgICAgICAgJ2FyaWEtb3ducyc6IGl0ZW1zQ29udGFpbmVySWQsXG4gICAgICAgICdhcmlhLWV4cGFuZGVkJzogaXNPcGVuXG4gICAgICB9LCB0aGVtZSgncmVhY3QtYXV0b3doYXRldmVyLScgKyBpZCArICctY29udGFpbmVyJywgJ2NvbnRhaW5lcicsIGlzT3BlbiAmJiAnY29udGFpbmVyT3BlbicpLCB0aGlzLnByb3BzLmNvbnRhaW5lclByb3BzKTtcbiAgICAgIHZhciBpbnB1dENvbXBvbmVudCA9IHJlbmRlcklucHV0Q29tcG9uZW50KF9leHRlbmRzKHtcbiAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIGF1dG9Db21wbGV0ZTogJ29mZicsXG4gICAgICAgICdhcmlhLWF1dG9jb21wbGV0ZSc6ICdsaXN0JyxcbiAgICAgICAgJ2FyaWEtY29udHJvbHMnOiBpdGVtc0NvbnRhaW5lcklkLFxuICAgICAgICAnYXJpYS1hY3RpdmVkZXNjZW5kYW50JzogYXJpYUFjdGl2ZWRlc2NlbmRhbnRcbiAgICAgIH0sIHRoZW1lKCdyZWFjdC1hdXRvd2hhdGV2ZXItJyArIGlkICsgJy1pbnB1dCcsICdpbnB1dCcsIGlzT3BlbiAmJiAnaW5wdXRPcGVuJywgaXNJbnB1dEZvY3VzZWQgJiYgJ2lucHV0Rm9jdXNlZCcpLCB0aGlzLnByb3BzLmlucHV0UHJvcHMsIHtcbiAgICAgICAgb25Gb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICBvbkJsdXI6IHRoaXMub25CbHVyLFxuICAgICAgICBvbktleURvd246IHRoaXMucHJvcHMuaW5wdXRQcm9wcy5vbktleURvd24gJiYgdGhpcy5vbktleURvd24sXG4gICAgICAgIHJlZjogdGhpcy5zdG9yZUlucHV0UmVmZXJlbmNlXG4gICAgICB9KSk7XG4gICAgICB2YXIgaXRlbXNDb250YWluZXIgPSByZW5kZXJJdGVtc0NvbnRhaW5lcih7XG4gICAgICAgIGNvbnRhaW5lclByb3BzOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgaWQ6IGl0ZW1zQ29udGFpbmVySWQsXG4gICAgICAgICAgcm9sZTogJ2xpc3Rib3gnXG4gICAgICAgIH0sIHRoZW1lKCdyZWFjdC1hdXRvd2hhdGV2ZXItJyArIGlkICsgJy1pdGVtcy1jb250YWluZXInLCAnaXRlbXNDb250YWluZXInLCBpc09wZW4gJiYgJ2l0ZW1zQ29udGFpbmVyT3BlbicpLCB7XG4gICAgICAgICAgcmVmOiB0aGlzLnN0b3JlSXRlbXNDb250YWluZXJSZWZlcmVuY2VcbiAgICAgICAgfSksXG4gICAgICAgIGNoaWxkcmVuOiByZW5kZXJlZEl0ZW1zXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAnZGl2JyxcbiAgICAgICAgY29udGFpbmVyUHJvcHMsXG4gICAgICAgIGlucHV0Q29tcG9uZW50LFxuICAgICAgICBpdGVtc0NvbnRhaW5lclxuICAgICAgKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQXV0b3doYXRldmVyO1xufShSZWFjdF9fZGVmYXVsdC5Db21wb25lbnQpO1xuXG5BdXRvd2hhdGV2ZXIucHJvcFR5cGVzID0ge1xuICBpZDogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsIC8vIFVzZWQgaW4gYXJpYS0qIGF0dHJpYnV0ZXMuIElmIG11bHRpcGxlIEF1dG93aGF0ZXZlcidzIGFyZSByZW5kZXJlZCBvbiBhIHBhZ2UsIHRoZXkgbXVzdCBoYXZlIHVuaXF1ZSBpZHMuXG4gIG11bHRpU2VjdGlvbjogX3Byb3BUeXBlczIuZGVmYXVsdC5ib29sLCAvLyBJbmRpY2F0ZXMgd2hldGhlciBhIG11bHRpIHNlY3Rpb24gbGF5b3V0IHNob3VsZCBiZSByZW5kZXJlZC5cbiAgcmVuZGVySW5wdXRDb21wb25lbnQ6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYywgLy8gV2hlbiBzcGVjaWZpZWQsIGl0IGlzIHVzZWQgdG8gcmVuZGVyIHRoZSBpbnB1dCBlbGVtZW50LlxuICByZW5kZXJJdGVtc0NvbnRhaW5lcjogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jLCAvLyBSZW5kZXJzIHRoZSBpdGVtcyBjb250YWluZXIuXG4gIGl0ZW1zOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmFycmF5LmlzUmVxdWlyZWQsIC8vIEFycmF5IG9mIGl0ZW1zIG9yIHNlY3Rpb25zIHRvIHJlbmRlci5cbiAgcmVuZGVySXRlbTogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jLCAvLyBUaGlzIGZ1bmN0aW9uIHJlbmRlcnMgYSBzaW5nbGUgaXRlbS5cbiAgcmVuZGVySXRlbURhdGE6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LCAvLyBBcmJpdHJhcnkgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHJlbmRlckl0ZW0oKVxuICByZW5kZXJTZWN0aW9uVGl0bGU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYywgLy8gVGhpcyBmdW5jdGlvbiBnZXRzIGEgc2VjdGlvbiBhbmQgcmVuZGVycyBpdHMgdGl0bGUuXG4gIGdldFNlY3Rpb25JdGVtczogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jLCAvLyBUaGlzIGZ1bmN0aW9uIGdldHMgYSBzZWN0aW9uIGFuZCByZXR1cm5zIGl0cyBpdGVtcywgd2hpY2ggd2lsbCBiZSBwYXNzZWQgaW50byBgcmVuZGVySXRlbWAgZm9yIHJlbmRlcmluZy5cbiAgY29udGFpbmVyUHJvcHM6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LCAvLyBBcmJpdHJhcnkgY29udGFpbmVyIHByb3BzXG4gIGlucHV0UHJvcHM6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LCAvLyBBcmJpdHJhcnkgaW5wdXQgcHJvcHNcbiAgaXRlbVByb3BzOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9uZU9mVHlwZShbLy8gQXJiaXRyYXJ5IGl0ZW0gcHJvcHNcbiAgX3Byb3BUeXBlczIuZGVmYXVsdC5vYmplY3QsIF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuY10pLFxuICBoaWdobGlnaHRlZFNlY3Rpb25JbmRleDogX3Byb3BUeXBlczIuZGVmYXVsdC5udW1iZXIsIC8vIFNlY3Rpb24gaW5kZXggb2YgdGhlIGhpZ2hsaWdodGVkIGl0ZW1cbiAgaGlnaGxpZ2h0ZWRJdGVtSW5kZXg6IF9wcm9wVHlwZXMyLmRlZmF1bHQubnVtYmVyLCAvLyBIaWdobGlnaHRlZCBpdGVtIGluZGV4ICh3aXRoaW4gYSBzZWN0aW9uKVxuICB0aGVtZTogX3Byb3BUeXBlczIuZGVmYXVsdC5vbmVPZlR5cGUoWy8vIFN0eWxlcy4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vbWFya2RhbGdsZWlzaC9yZWFjdC10aGVtZWFibGVcbiAgX3Byb3BUeXBlczIuZGVmYXVsdC5vYmplY3QsIF9wcm9wVHlwZXMyLmRlZmF1bHQuYXJyYXldKVxufTtcbkF1dG93aGF0ZXZlci5kZWZhdWx0UHJvcHMgPSB7XG4gIGlkOiAnMScsXG4gIG11bHRpU2VjdGlvbjogZmFsc2UsXG4gIHJlbmRlcklucHV0Q29tcG9uZW50OiBkZWZhdWx0UmVuZGVySW5wdXRDb21wb25lbnQsXG4gIHJlbmRlckl0ZW1zQ29udGFpbmVyOiBkZWZhdWx0UmVuZGVySXRlbXNDb250YWluZXIsXG4gIHJlbmRlckl0ZW06IGZ1bmN0aW9uIHJlbmRlckl0ZW0oKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdgcmVuZGVySXRlbWAgbXVzdCBiZSBwcm92aWRlZCcpO1xuICB9LFxuICByZW5kZXJJdGVtRGF0YTogZW1wdHlPYmplY3QsXG4gIHJlbmRlclNlY3Rpb25UaXRsZTogZnVuY3Rpb24gcmVuZGVyU2VjdGlvblRpdGxlKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignYHJlbmRlclNlY3Rpb25UaXRsZWAgbXVzdCBiZSBwcm92aWRlZCcpO1xuICB9LFxuICBnZXRTZWN0aW9uSXRlbXM6IGZ1bmN0aW9uIGdldFNlY3Rpb25JdGVtcygpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2BnZXRTZWN0aW9uSXRlbXNgIG11c3QgYmUgcHJvdmlkZWQnKTtcbiAgfSxcbiAgY29udGFpbmVyUHJvcHM6IGVtcHR5T2JqZWN0LFxuICBpbnB1dFByb3BzOiBlbXB0eU9iamVjdCxcbiAgaXRlbVByb3BzOiBlbXB0eU9iamVjdCxcbiAgaGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXg6IG51bGwsXG4gIGhpZ2hsaWdodGVkSXRlbUluZGV4OiBudWxsLFxuICB0aGVtZTogZGVmYXVsdFRoZW1lXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gQXV0b3doYXRldmVyO1xufSk7XG5cbnVud3JhcEV4cG9ydHMoQXV0b3doYXRldmVyXzEpO1xuXG52YXIgZGlzdCQyID0gQXV0b3doYXRldmVyXzEuZGVmYXVsdDtcblxudmFyIHRoZW1lID0gY3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24gKG1vZHVsZSwgZXhwb3J0cykge1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xudmFyIGRlZmF1bHRUaGVtZSA9IGV4cG9ydHMuZGVmYXVsdFRoZW1lID0ge1xuICBjb250YWluZXI6ICdyZWFjdC1hdXRvc3VnZ2VzdF9fY29udGFpbmVyJyxcbiAgY29udGFpbmVyT3BlbjogJ3JlYWN0LWF1dG9zdWdnZXN0X19jb250YWluZXItLW9wZW4nLFxuICBpbnB1dDogJ3JlYWN0LWF1dG9zdWdnZXN0X19pbnB1dCcsXG4gIGlucHV0T3BlbjogJ3JlYWN0LWF1dG9zdWdnZXN0X19pbnB1dC0tb3BlbicsXG4gIGlucHV0Rm9jdXNlZDogJ3JlYWN0LWF1dG9zdWdnZXN0X19pbnB1dC0tZm9jdXNlZCcsXG4gIHN1Z2dlc3Rpb25zQ29udGFpbmVyOiAncmVhY3QtYXV0b3N1Z2dlc3RfX3N1Z2dlc3Rpb25zLWNvbnRhaW5lcicsXG4gIHN1Z2dlc3Rpb25zQ29udGFpbmVyT3BlbjogJ3JlYWN0LWF1dG9zdWdnZXN0X19zdWdnZXN0aW9ucy1jb250YWluZXItLW9wZW4nLFxuICBzdWdnZXN0aW9uc0xpc3Q6ICdyZWFjdC1hdXRvc3VnZ2VzdF9fc3VnZ2VzdGlvbnMtbGlzdCcsXG4gIHN1Z2dlc3Rpb246ICdyZWFjdC1hdXRvc3VnZ2VzdF9fc3VnZ2VzdGlvbicsXG4gIHN1Z2dlc3Rpb25GaXJzdDogJ3JlYWN0LWF1dG9zdWdnZXN0X19zdWdnZXN0aW9uLS1maXJzdCcsXG4gIHN1Z2dlc3Rpb25IaWdobGlnaHRlZDogJ3JlYWN0LWF1dG9zdWdnZXN0X19zdWdnZXN0aW9uLS1oaWdobGlnaHRlZCcsXG4gIHNlY3Rpb25Db250YWluZXI6ICdyZWFjdC1hdXRvc3VnZ2VzdF9fc2VjdGlvbi1jb250YWluZXInLFxuICBzZWN0aW9uQ29udGFpbmVyRmlyc3Q6ICdyZWFjdC1hdXRvc3VnZ2VzdF9fc2VjdGlvbi1jb250YWluZXItLWZpcnN0JyxcbiAgc2VjdGlvblRpdGxlOiAncmVhY3QtYXV0b3N1Z2dlc3RfX3NlY3Rpb24tdGl0bGUnXG59O1xuXG52YXIgbWFwVG9BdXRvd2hhdGV2ZXJUaGVtZSA9IGV4cG9ydHMubWFwVG9BdXRvd2hhdGV2ZXJUaGVtZSA9IGZ1bmN0aW9uIG1hcFRvQXV0b3doYXRldmVyVGhlbWUodGhlbWUpIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiB0aGVtZSkge1xuICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICBjYXNlICdzdWdnZXN0aW9uc0NvbnRhaW5lcic6XG4gICAgICAgIHJlc3VsdFsnaXRlbXNDb250YWluZXInXSA9IHRoZW1lW2tleV07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdzdWdnZXN0aW9uc0NvbnRhaW5lck9wZW4nOlxuICAgICAgICByZXN1bHRbJ2l0ZW1zQ29udGFpbmVyT3BlbiddID0gdGhlbWVba2V5XTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3N1Z2dlc3Rpb24nOlxuICAgICAgICByZXN1bHRbJ2l0ZW0nXSA9IHRoZW1lW2tleV07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdzdWdnZXN0aW9uRmlyc3QnOlxuICAgICAgICByZXN1bHRbJ2l0ZW1GaXJzdCddID0gdGhlbWVba2V5XTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3N1Z2dlc3Rpb25IaWdobGlnaHRlZCc6XG4gICAgICAgIHJlc3VsdFsnaXRlbUhpZ2hsaWdodGVkJ10gPSB0aGVtZVtrZXldO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnc3VnZ2VzdGlvbnNMaXN0JzpcbiAgICAgICAgcmVzdWx0WydpdGVtc0xpc3QnXSA9IHRoZW1lW2tleV07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXN1bHRba2V5XSA9IHRoZW1lW2tleV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG59KTtcblxudW53cmFwRXhwb3J0cyh0aGVtZSk7XG52YXIgdGhlbWVfMSA9IHRoZW1lLmRlZmF1bHRUaGVtZTtcbnZhciB0aGVtZV8yID0gdGhlbWUubWFwVG9BdXRvd2hhdGV2ZXJUaGVtZTtcblxudmFyIEF1dG9zdWdnZXN0XzEgPSBjcmVhdGVDb21tb25qc01vZHVsZShmdW5jdGlvbiAobW9kdWxlLCBleHBvcnRzKSB7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cblxuXG52YXIgX3JlYWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoUmVhY3RfX2RlZmF1bHQpO1xuXG5cblxudmFyIF9wcm9wVHlwZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChwcm9wVHlwZXMpO1xuXG5cblxudmFyIF9hcnJheXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChhcnJheXMpO1xuXG5cblxudmFyIF9yZWFjdEF1dG93aGF0ZXZlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KGRpc3QkMik7XG5cblxuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbnZhciBhbHdheXNUcnVlID0gZnVuY3Rpb24gYWx3YXlzVHJ1ZSgpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xudmFyIGRlZmF1bHRTaG91bGRSZW5kZXJTdWdnZXN0aW9ucyA9IGZ1bmN0aW9uIGRlZmF1bHRTaG91bGRSZW5kZXJTdWdnZXN0aW9ucyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUudHJpbSgpLmxlbmd0aCA+IDA7XG59O1xudmFyIGRlZmF1bHRSZW5kZXJTdWdnZXN0aW9uc0NvbnRhaW5lciA9IGZ1bmN0aW9uIGRlZmF1bHRSZW5kZXJTdWdnZXN0aW9uc0NvbnRhaW5lcihfcmVmKSB7XG4gIHZhciBjb250YWluZXJQcm9wcyA9IF9yZWYuY29udGFpbmVyUHJvcHMsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHJldHVybiBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcbiAgICAnZGl2JyxcbiAgICBjb250YWluZXJQcm9wcyxcbiAgICBjaGlsZHJlblxuICApO1xufTtcblxudmFyIEF1dG9zdWdnZXN0ID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEF1dG9zdWdnZXN0LCBfQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBBdXRvc3VnZ2VzdChfcmVmMikge1xuICAgIHZhciBhbHdheXNSZW5kZXJTdWdnZXN0aW9ucyA9IF9yZWYyLmFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEF1dG9zdWdnZXN0KTtcblxuICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChBdXRvc3VnZ2VzdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEF1dG9zdWdnZXN0KSkuY2FsbCh0aGlzKSk7XG5cbiAgICBfaW5pdGlhbGlzZVByb3BzLmNhbGwoX3RoaXMpO1xuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBpc0ZvY3VzZWQ6IGZhbHNlLFxuICAgICAgaXNDb2xsYXBzZWQ6ICFhbHdheXNSZW5kZXJTdWdnZXN0aW9ucyxcbiAgICAgIGhpZ2hsaWdodGVkU2VjdGlvbkluZGV4OiBudWxsLFxuICAgICAgaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXg6IG51bGwsXG4gICAgICBoaWdobGlnaHRlZFN1Z2dlc3Rpb246IG51bGwsXG4gICAgICB2YWx1ZUJlZm9yZVVwRG93bjogbnVsbFxuICAgIH07XG5cbiAgICBfdGhpcy5qdXN0UHJlc3NlZFVwRG93biA9IGZhbHNlO1xuICAgIF90aGlzLmp1c3RNb3VzZUVudGVyZWQgPSBmYWxzZTtcblxuICAgIF90aGlzLnByZXNzZWRTdWdnZXN0aW9uID0gbnVsbDtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoQXV0b3N1Z2dlc3QsIFt7XG4gICAga2V5OiAnY29tcG9uZW50RGlkTW91bnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Eb2N1bWVudE1vdXNlRG93bik7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbkRvY3VtZW50TW91c2VVcCk7XG5cbiAgICAgIHRoaXMuaW5wdXQgPSB0aGlzLmF1dG93aGF0ZXZlci5pbnB1dDtcbiAgICAgIHRoaXMuc3VnZ2VzdGlvbnNDb250YWluZXIgPSB0aGlzLmF1dG93aGF0ZXZlci5pdGVtc0NvbnRhaW5lcjtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcbiAgICAgIGlmICgoMCwgX2FycmF5czIuZGVmYXVsdCkobmV4dFByb3BzLnN1Z2dlc3Rpb25zLCB0aGlzLnByb3BzLnN1Z2dlc3Rpb25zKSkge1xuICAgICAgICBpZiAobmV4dFByb3BzLmhpZ2hsaWdodEZpcnN0U3VnZ2VzdGlvbiAmJiBuZXh0UHJvcHMuc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCAmJiB0aGlzLmp1c3RQcmVzc2VkVXBEb3duID09PSBmYWxzZSAmJiB0aGlzLmp1c3RNb3VzZUVudGVyZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5oaWdobGlnaHRGaXJzdFN1Z2dlc3Rpb24oKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMud2lsbFJlbmRlclN1Z2dlc3Rpb25zKG5leHRQcm9wcykpIHtcbiAgICAgICAgICBpZiAodGhpcy5zdGF0ZS5pc0NvbGxhcHNlZCAmJiAhdGhpcy5qdXN0U2VsZWN0ZWRTdWdnZXN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnJldmVhbFN1Z2dlc3Rpb25zKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmVzZXRIaWdobGlnaHRlZFN1Z2dlc3Rpb24oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudERpZFVwZGF0ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgc3VnZ2VzdGlvbnMgPSBfcHJvcHMuc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgb25TdWdnZXN0aW9uSGlnaGxpZ2h0ZWQgPSBfcHJvcHMub25TdWdnZXN0aW9uSGlnaGxpZ2h0ZWQsXG4gICAgICAgICAgaGlnaGxpZ2h0Rmlyc3RTdWdnZXN0aW9uID0gX3Byb3BzLmhpZ2hsaWdodEZpcnN0U3VnZ2VzdGlvbjtcblxuXG4gICAgICBpZiAoISgwLCBfYXJyYXlzMi5kZWZhdWx0KShzdWdnZXN0aW9ucywgcHJldlByb3BzLnN1Z2dlc3Rpb25zKSAmJiBzdWdnZXN0aW9ucy5sZW5ndGggPiAwICYmIGhpZ2hsaWdodEZpcnN0U3VnZ2VzdGlvbikge1xuICAgICAgICB0aGlzLmhpZ2hsaWdodEZpcnN0U3VnZ2VzdGlvbigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChvblN1Z2dlc3Rpb25IaWdobGlnaHRlZCkge1xuICAgICAgICB2YXIgaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uID0gdGhpcy5nZXRIaWdobGlnaHRlZFN1Z2dlc3Rpb24oKTtcbiAgICAgICAgdmFyIHByZXZIaWdobGlnaHRlZFN1Z2dlc3Rpb24gPSBwcmV2U3RhdGUuaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uO1xuXG4gICAgICAgIGlmIChoaWdobGlnaHRlZFN1Z2dlc3Rpb24gIT0gcHJldkhpZ2hsaWdodGVkU3VnZ2VzdGlvbikge1xuICAgICAgICAgIG9uU3VnZ2VzdGlvbkhpZ2hsaWdodGVkKHtcbiAgICAgICAgICAgIHN1Z2dlc3Rpb246IGhpZ2hsaWdodGVkU3VnZ2VzdGlvblxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnY29tcG9uZW50V2lsbFVubW91bnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Eb2N1bWVudE1vdXNlRG93bik7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbkRvY3VtZW50TW91c2VVcCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAndXBkYXRlSGlnaGxpZ2h0ZWRTdWdnZXN0aW9uJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlSGlnaGxpZ2h0ZWRTdWdnZXN0aW9uKHNlY3Rpb25JbmRleCwgc3VnZ2VzdGlvbkluZGV4LCBwcmV2VmFsdWUpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgICB2YXIgdmFsdWVCZWZvcmVVcERvd24gPSBzdGF0ZS52YWx1ZUJlZm9yZVVwRG93bjtcblxuXG4gICAgICAgIGlmIChzdWdnZXN0aW9uSW5kZXggPT09IG51bGwpIHtcbiAgICAgICAgICB2YWx1ZUJlZm9yZVVwRG93biA9IG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWVCZWZvcmVVcERvd24gPT09IG51bGwgJiYgdHlwZW9mIHByZXZWYWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB2YWx1ZUJlZm9yZVVwRG93biA9IHByZXZWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXg6IHNlY3Rpb25JbmRleCxcbiAgICAgICAgICBoaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleDogc3VnZ2VzdGlvbkluZGV4LFxuICAgICAgICAgIGhpZ2hsaWdodGVkU3VnZ2VzdGlvbjogc3VnZ2VzdGlvbkluZGV4ID09PSBudWxsID8gbnVsbCA6IF90aGlzMi5nZXRTdWdnZXN0aW9uKHNlY3Rpb25JbmRleCwgc3VnZ2VzdGlvbkluZGV4KSxcbiAgICAgICAgICB2YWx1ZUJlZm9yZVVwRG93bjogdmFsdWVCZWZvcmVVcERvd25cbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3Jlc2V0SGlnaGxpZ2h0ZWRTdWdnZXN0aW9uJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVzZXRIaWdobGlnaHRlZFN1Z2dlc3Rpb24oKSB7XG4gICAgICB2YXIgc2hvdWxkUmVzZXRWYWx1ZUJlZm9yZVVwRG93biA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdHJ1ZTtcblxuICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgdmFyIHZhbHVlQmVmb3JlVXBEb3duID0gc3RhdGUudmFsdWVCZWZvcmVVcERvd247XG5cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhpZ2hsaWdodGVkU2VjdGlvbkluZGV4OiBudWxsLFxuICAgICAgICAgIGhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4OiBudWxsLFxuICAgICAgICAgIGhpZ2hsaWdodGVkU3VnZ2VzdGlvbjogbnVsbCxcbiAgICAgICAgICB2YWx1ZUJlZm9yZVVwRG93bjogc2hvdWxkUmVzZXRWYWx1ZUJlZm9yZVVwRG93biA/IG51bGwgOiB2YWx1ZUJlZm9yZVVwRG93blxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncmV2ZWFsU3VnZ2VzdGlvbnMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZXZlYWxTdWdnZXN0aW9ucygpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc0NvbGxhcHNlZDogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2Nsb3NlU3VnZ2VzdGlvbnMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjbG9zZVN1Z2dlc3Rpb25zKCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGhpZ2hsaWdodGVkU2VjdGlvbkluZGV4OiBudWxsLFxuICAgICAgICBoaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleDogbnVsbCxcbiAgICAgICAgaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uOiBudWxsLFxuICAgICAgICB2YWx1ZUJlZm9yZVVwRG93bjogbnVsbCxcbiAgICAgICAgaXNDb2xsYXBzZWQ6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2dldFN1Z2dlc3Rpb24nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTdWdnZXN0aW9uKHNlY3Rpb25JbmRleCwgc3VnZ2VzdGlvbkluZGV4KSB7XG4gICAgICB2YXIgX3Byb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgc3VnZ2VzdGlvbnMgPSBfcHJvcHMyLnN1Z2dlc3Rpb25zLFxuICAgICAgICAgIG11bHRpU2VjdGlvbiA9IF9wcm9wczIubXVsdGlTZWN0aW9uLFxuICAgICAgICAgIGdldFNlY3Rpb25TdWdnZXN0aW9ucyA9IF9wcm9wczIuZ2V0U2VjdGlvblN1Z2dlc3Rpb25zO1xuXG5cbiAgICAgIGlmIChtdWx0aVNlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGdldFNlY3Rpb25TdWdnZXN0aW9ucyhzdWdnZXN0aW9uc1tzZWN0aW9uSW5kZXhdKVtzdWdnZXN0aW9uSW5kZXhdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3VnZ2VzdGlvbnNbc3VnZ2VzdGlvbkluZGV4XTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdnZXRIaWdobGlnaHRlZFN1Z2dlc3Rpb24nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRIaWdobGlnaHRlZFN1Z2dlc3Rpb24oKSB7XG4gICAgICB2YXIgX3N0YXRlID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBoaWdobGlnaHRlZFNlY3Rpb25JbmRleCA9IF9zdGF0ZS5oaWdobGlnaHRlZFNlY3Rpb25JbmRleCxcbiAgICAgICAgICBoaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCA9IF9zdGF0ZS5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleDtcblxuXG4gICAgICBpZiAoaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXggPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmdldFN1Z2dlc3Rpb24oaGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXgsIGhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdnZXRTdWdnZXN0aW9uVmFsdWVCeUluZGV4JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U3VnZ2VzdGlvblZhbHVlQnlJbmRleChzZWN0aW9uSW5kZXgsIHN1Z2dlc3Rpb25JbmRleCkge1xuICAgICAgdmFyIGdldFN1Z2dlc3Rpb25WYWx1ZSA9IHRoaXMucHJvcHMuZ2V0U3VnZ2VzdGlvblZhbHVlO1xuXG5cbiAgICAgIHJldHVybiBnZXRTdWdnZXN0aW9uVmFsdWUodGhpcy5nZXRTdWdnZXN0aW9uKHNlY3Rpb25JbmRleCwgc3VnZ2VzdGlvbkluZGV4KSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZ2V0U3VnZ2VzdGlvbkluZGljZXMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTdWdnZXN0aW9uSW5kaWNlcyhzdWdnZXN0aW9uRWxlbWVudCkge1xuICAgICAgdmFyIHNlY3Rpb25JbmRleCA9IHN1Z2dlc3Rpb25FbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1zZWN0aW9uLWluZGV4Jyk7XG4gICAgICB2YXIgc3VnZ2VzdGlvbkluZGV4ID0gc3VnZ2VzdGlvbkVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXN1Z2dlc3Rpb24taW5kZXgnKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2VjdGlvbkluZGV4OiB0eXBlb2Ygc2VjdGlvbkluZGV4ID09PSAnc3RyaW5nJyA/IHBhcnNlSW50KHNlY3Rpb25JbmRleCwgMTApIDogbnVsbCxcbiAgICAgICAgc3VnZ2VzdGlvbkluZGV4OiBwYXJzZUludChzdWdnZXN0aW9uSW5kZXgsIDEwKVxuICAgICAgfTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdmaW5kU3VnZ2VzdGlvbkVsZW1lbnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmaW5kU3VnZ2VzdGlvbkVsZW1lbnQoc3RhcnROb2RlKSB7XG4gICAgICB2YXIgbm9kZSA9IHN0YXJ0Tm9kZTtcblxuICAgICAgZG8ge1xuICAgICAgICBpZiAobm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3VnZ2VzdGlvbi1pbmRleCcpICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgfSB3aGlsZSAobm9kZSAhPT0gbnVsbCk7XG5cbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0NsaWNrZWQgZWxlbWVudDonLCBzdGFydE5vZGUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgc3VnZ2VzdGlvbiBlbGVtZW50XCIpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ21heWJlQ2FsbE9uQ2hhbmdlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gbWF5YmVDYWxsT25DaGFuZ2UoZXZlbnQsIG5ld1ZhbHVlLCBtZXRob2QpIHtcbiAgICAgIHZhciBfcHJvcHMkaW5wdXRQcm9wcyA9IHRoaXMucHJvcHMuaW5wdXRQcm9wcyxcbiAgICAgICAgICB2YWx1ZSA9IF9wcm9wcyRpbnB1dFByb3BzLnZhbHVlLFxuICAgICAgICAgIG9uQ2hhbmdlID0gX3Byb3BzJGlucHV0UHJvcHMub25DaGFuZ2U7XG5cblxuICAgICAgaWYgKG5ld1ZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgICBvbkNoYW5nZShldmVudCwgeyBuZXdWYWx1ZTogbmV3VmFsdWUsIG1ldGhvZDogbWV0aG9kIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3dpbGxSZW5kZXJTdWdnZXN0aW9ucycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHdpbGxSZW5kZXJTdWdnZXN0aW9ucyhwcm9wcykge1xuICAgICAgdmFyIHN1Z2dlc3Rpb25zID0gcHJvcHMuc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgaW5wdXRQcm9wcyA9IHByb3BzLmlucHV0UHJvcHMsXG4gICAgICAgICAgc2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnMgPSBwcm9wcy5zaG91bGRSZW5kZXJTdWdnZXN0aW9ucztcbiAgICAgIHZhciB2YWx1ZSA9IGlucHV0UHJvcHMudmFsdWU7XG5cblxuICAgICAgcmV0dXJuIHN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgJiYgc2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnModmFsdWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2dldFF1ZXJ5JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UXVlcnkoKSB7XG4gICAgICB2YXIgaW5wdXRQcm9wcyA9IHRoaXMucHJvcHMuaW5wdXRQcm9wcztcbiAgICAgIHZhciB2YWx1ZSA9IGlucHV0UHJvcHMudmFsdWU7XG4gICAgICB2YXIgdmFsdWVCZWZvcmVVcERvd24gPSB0aGlzLnN0YXRlLnZhbHVlQmVmb3JlVXBEb3duO1xuXG5cbiAgICAgIHJldHVybiAodmFsdWVCZWZvcmVVcERvd24gPT09IG51bGwgPyB2YWx1ZSA6IHZhbHVlQmVmb3JlVXBEb3duKS50cmltKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncmVuZGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciBfcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBzdWdnZXN0aW9ucyA9IF9wcm9wczMuc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgcmVuZGVySW5wdXRDb21wb25lbnQgPSBfcHJvcHMzLnJlbmRlcklucHV0Q29tcG9uZW50LFxuICAgICAgICAgIG9uU3VnZ2VzdGlvbnNGZXRjaFJlcXVlc3RlZCA9IF9wcm9wczMub25TdWdnZXN0aW9uc0ZldGNoUmVxdWVzdGVkLFxuICAgICAgICAgIHJlbmRlclN1Z2dlc3Rpb24gPSBfcHJvcHMzLnJlbmRlclN1Z2dlc3Rpb24sXG4gICAgICAgICAgaW5wdXRQcm9wcyA9IF9wcm9wczMuaW5wdXRQcm9wcyxcbiAgICAgICAgICBtdWx0aVNlY3Rpb24gPSBfcHJvcHMzLm11bHRpU2VjdGlvbixcbiAgICAgICAgICByZW5kZXJTZWN0aW9uVGl0bGUgPSBfcHJvcHMzLnJlbmRlclNlY3Rpb25UaXRsZSxcbiAgICAgICAgICBpZCA9IF9wcm9wczMuaWQsXG4gICAgICAgICAgZ2V0U2VjdGlvblN1Z2dlc3Rpb25zID0gX3Byb3BzMy5nZXRTZWN0aW9uU3VnZ2VzdGlvbnMsXG4gICAgICAgICAgdGhlbWUkMSA9IF9wcm9wczMudGhlbWUsXG4gICAgICAgICAgZ2V0U3VnZ2VzdGlvblZhbHVlID0gX3Byb3BzMy5nZXRTdWdnZXN0aW9uVmFsdWUsXG4gICAgICAgICAgYWx3YXlzUmVuZGVyU3VnZ2VzdGlvbnMgPSBfcHJvcHMzLmFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zLFxuICAgICAgICAgIGhpZ2hsaWdodEZpcnN0U3VnZ2VzdGlvbiA9IF9wcm9wczMuaGlnaGxpZ2h0Rmlyc3RTdWdnZXN0aW9uO1xuICAgICAgdmFyIF9zdGF0ZTIgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIGlzRm9jdXNlZCA9IF9zdGF0ZTIuaXNGb2N1c2VkLFxuICAgICAgICAgIGlzQ29sbGFwc2VkID0gX3N0YXRlMi5pc0NvbGxhcHNlZCxcbiAgICAgICAgICBoaWdobGlnaHRlZFNlY3Rpb25JbmRleCA9IF9zdGF0ZTIuaGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXgsXG4gICAgICAgICAgaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXggPSBfc3RhdGUyLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4LFxuICAgICAgICAgIHZhbHVlQmVmb3JlVXBEb3duID0gX3N0YXRlMi52YWx1ZUJlZm9yZVVwRG93bjtcblxuICAgICAgdmFyIHNob3VsZFJlbmRlclN1Z2dlc3Rpb25zID0gYWx3YXlzUmVuZGVyU3VnZ2VzdGlvbnMgPyBhbHdheXNUcnVlIDogdGhpcy5wcm9wcy5zaG91bGRSZW5kZXJTdWdnZXN0aW9ucztcbiAgICAgIHZhciB2YWx1ZSA9IGlucHV0UHJvcHMudmFsdWUsXG4gICAgICAgICAgX29uRm9jdXMgPSBpbnB1dFByb3BzLm9uRm9jdXMsXG4gICAgICAgICAgX29uS2V5RG93biA9IGlucHV0UHJvcHMub25LZXlEb3duO1xuXG4gICAgICB2YXIgd2lsbFJlbmRlclN1Z2dlc3Rpb25zID0gdGhpcy53aWxsUmVuZGVyU3VnZ2VzdGlvbnModGhpcy5wcm9wcyk7XG4gICAgICB2YXIgaXNPcGVuID0gYWx3YXlzUmVuZGVyU3VnZ2VzdGlvbnMgfHwgaXNGb2N1c2VkICYmICFpc0NvbGxhcHNlZCAmJiB3aWxsUmVuZGVyU3VnZ2VzdGlvbnM7XG4gICAgICB2YXIgaXRlbXMgPSBpc09wZW4gPyBzdWdnZXN0aW9ucyA6IFtdO1xuICAgICAgdmFyIGF1dG93aGF0ZXZlcklucHV0UHJvcHMgPSBfZXh0ZW5kcyh7fSwgaW5wdXRQcm9wcywge1xuICAgICAgICBvbkZvY3VzOiBmdW5jdGlvbiBvbkZvY3VzKGV2ZW50KSB7XG4gICAgICAgICAgaWYgKCFfdGhpczMuanVzdFNlbGVjdGVkU3VnZ2VzdGlvbiAmJiAhX3RoaXMzLmp1c3RDbGlja2VkT25TdWdnZXN0aW9uc0NvbnRhaW5lcikge1xuICAgICAgICAgICAgdmFyIHNob3VsZFJlbmRlciA9IHNob3VsZFJlbmRlclN1Z2dlc3Rpb25zKHZhbHVlKTtcblxuICAgICAgICAgICAgX3RoaXMzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgaXNGb2N1c2VkOiB0cnVlLFxuICAgICAgICAgICAgICBpc0NvbGxhcHNlZDogIXNob3VsZFJlbmRlclxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIF9vbkZvY3VzICYmIF9vbkZvY3VzKGV2ZW50KTtcblxuICAgICAgICAgICAgaWYgKHNob3VsZFJlbmRlcikge1xuICAgICAgICAgICAgICBvblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQoeyB2YWx1ZTogdmFsdWUsIHJlYXNvbjogJ2lucHV0LWZvY3VzZWQnIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgb25CbHVyOiBmdW5jdGlvbiBvbkJsdXIoZXZlbnQpIHtcbiAgICAgICAgICBpZiAoX3RoaXMzLmp1c3RDbGlja2VkT25TdWdnZXN0aW9uc0NvbnRhaW5lcikge1xuICAgICAgICAgICAgX3RoaXMzLmlucHV0LmZvY3VzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX3RoaXMzLmJsdXJFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgICAgaWYgKCFfdGhpczMuanVzdFNlbGVjdGVkU3VnZ2VzdGlvbikge1xuICAgICAgICAgICAgX3RoaXMzLm9uQmx1cigpO1xuICAgICAgICAgICAgX3RoaXMzLm9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKGV2ZW50KSB7XG4gICAgICAgICAgdmFyIHZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuXG4gICAgICAgICAgdmFyIHNob3VsZFJlbmRlciA9IHNob3VsZFJlbmRlclN1Z2dlc3Rpb25zKHZhbHVlKTtcblxuICAgICAgICAgIF90aGlzMy5tYXliZUNhbGxPbkNoYW5nZShldmVudCwgdmFsdWUsICd0eXBlJyk7XG5cbiAgICAgICAgICBpZiAoX3RoaXMzLnN1Z2dlc3Rpb25zQ29udGFpbmVyKSB7XG4gICAgICAgICAgICBfdGhpczMuc3VnZ2VzdGlvbnNDb250YWluZXIuc2Nyb2xsVG9wID0gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfdGhpczMuc2V0U3RhdGUoX2V4dGVuZHMoe30sIGhpZ2hsaWdodEZpcnN0U3VnZ2VzdGlvbiA/IHt9IDoge1xuICAgICAgICAgICAgaGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXg6IG51bGwsXG4gICAgICAgICAgICBoaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleDogbnVsbCxcbiAgICAgICAgICAgIGhpZ2hsaWdodGVkU3VnZ2VzdGlvbjogbnVsbFxuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIHZhbHVlQmVmb3JlVXBEb3duOiBudWxsLFxuICAgICAgICAgICAgaXNDb2xsYXBzZWQ6ICFzaG91bGRSZW5kZXJcbiAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICBpZiAoc2hvdWxkUmVuZGVyKSB7XG4gICAgICAgICAgICBvblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQoeyB2YWx1ZTogdmFsdWUsIHJlYXNvbjogJ2lucHV0LWNoYW5nZWQnIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfdGhpczMub25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBvbktleURvd246IGZ1bmN0aW9uIG9uS2V5RG93bihldmVudCwgZGF0YSkge1xuICAgICAgICAgIHZhciBrZXlDb2RlID0gZXZlbnQua2V5Q29kZTtcblxuXG4gICAgICAgICAgc3dpdGNoIChrZXlDb2RlKSB7XG4gICAgICAgICAgICBjYXNlIDQwOiAvLyBBcnJvd0Rvd25cbiAgICAgICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgICAgIC8vIEFycm93VXBcbiAgICAgICAgICAgICAgaWYgKGlzQ29sbGFwc2VkKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZFJlbmRlclN1Z2dlc3Rpb25zKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgb25TdWdnZXN0aW9uc0ZldGNoUmVxdWVzdGVkKHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICByZWFzb246ICdzdWdnZXN0aW9ucy1yZXZlYWxlZCdcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgX3RoaXMzLnJldmVhbFN1Z2dlc3Rpb25zKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1Z2dlc3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgbmV3SGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXggPSBkYXRhLm5ld0hpZ2hsaWdodGVkU2VjdGlvbkluZGV4LFxuICAgICAgICAgICAgICAgICAgICBuZXdIaWdobGlnaHRlZEl0ZW1JbmRleCA9IGRhdGEubmV3SGlnaGxpZ2h0ZWRJdGVtSW5kZXg7XG5cblxuICAgICAgICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIGlmIChuZXdIaWdobGlnaHRlZEl0ZW1JbmRleCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgLy8gdmFsdWVCZWZvcmVVcERvd24gY2FuIGJlIG51bGwgaWYsIGZvciBleGFtcGxlLCB1c2VyXG4gICAgICAgICAgICAgICAgICAvLyBob3ZlcnMgb24gdGhlIGZpcnN0IHN1Z2dlc3Rpb24gYW5kIHRoZW4gcHJlc3NlZCBVcC5cbiAgICAgICAgICAgICAgICAgIC8vIElmIHRoYXQgaGFwcGVucywgdXNlIHRoZSBvcmlnaW5hbCBpbnB1dCB2YWx1ZS5cbiAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gdmFsdWVCZWZvcmVVcERvd24gPT09IG51bGwgPyB2YWx1ZSA6IHZhbHVlQmVmb3JlVXBEb3duO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IF90aGlzMy5nZXRTdWdnZXN0aW9uVmFsdWVCeUluZGV4KG5ld0hpZ2hsaWdodGVkU2VjdGlvbkluZGV4LCBuZXdIaWdobGlnaHRlZEl0ZW1JbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgX3RoaXMzLnVwZGF0ZUhpZ2hsaWdodGVkU3VnZ2VzdGlvbihuZXdIaWdobGlnaHRlZFNlY3Rpb25JbmRleCwgbmV3SGlnaGxpZ2h0ZWRJdGVtSW5kZXgsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBfdGhpczMubWF5YmVDYWxsT25DaGFuZ2UoZXZlbnQsIG5ld1ZhbHVlLCBrZXlDb2RlID09PSA0MCA/ICdkb3duJyA6ICd1cCcpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gUHJldmVudHMgdGhlIGN1cnNvciBmcm9tIG1vdmluZ1xuXG4gICAgICAgICAgICAgIF90aGlzMy5qdXN0UHJlc3NlZFVwRG93biA9IHRydWU7XG5cbiAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMzLmp1c3RQcmVzc2VkVXBEb3duID0gZmFsc2U7XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBFbnRlclxuICAgICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFNlZSAjMzg4XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDIyOSkge1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGhpZ2hsaWdodGVkU3VnZ2VzdGlvbiA9IF90aGlzMy5nZXRIaWdobGlnaHRlZFN1Z2dlc3Rpb24oKTtcblxuICAgICAgICAgICAgICAgIGlmIChpc09wZW4gJiYgIWFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgICBfdGhpczMuY2xvc2VTdWdnZXN0aW9ucygpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChoaWdobGlnaHRlZFN1Z2dlc3Rpb24gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgdmFyIF9uZXdWYWx1ZSA9IGdldFN1Z2dlc3Rpb25WYWx1ZShoaWdobGlnaHRlZFN1Z2dlc3Rpb24pO1xuXG4gICAgICAgICAgICAgICAgICBfdGhpczMubWF5YmVDYWxsT25DaGFuZ2UoZXZlbnQsIF9uZXdWYWx1ZSwgJ2VudGVyJyk7XG5cbiAgICAgICAgICAgICAgICAgIF90aGlzMy5vblN1Z2dlc3Rpb25TZWxlY3RlZChldmVudCwge1xuICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uOiBoaWdobGlnaHRlZFN1Z2dlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25WYWx1ZTogX25ld1ZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uSW5kZXg6IGhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4LFxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uSW5kZXg6IGhpZ2hsaWdodGVkU2VjdGlvbkluZGV4LFxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdlbnRlcidcbiAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICBfdGhpczMuanVzdFNlbGVjdGVkU3VnZ2VzdGlvbiA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBfdGhpczMuanVzdFNlbGVjdGVkU3VnZ2VzdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRXNjYXBlXG4gICAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGlzT3Blbikge1xuICAgICAgICAgICAgICAgICAgLy8gSWYgaW5wdXQudHlwZSA9PT0gJ3NlYXJjaCcsIHRoZSBicm93c2VyIGNsZWFycyB0aGUgaW5wdXRcbiAgICAgICAgICAgICAgICAgIC8vIHdoZW4gRXNjYXBlIGlzIHByZXNzZWQuIFdlIHdhbnQgdG8gZGlzYWJsZSB0aGlzIGRlZmF1bHRcbiAgICAgICAgICAgICAgICAgIC8vIGJlaGF2aW91ciBzbyB0aGF0LCB3aGVuIHN1Z2dlc3Rpb25zIGFyZSBzaG93biwgd2UganVzdCBoaWRlXG4gICAgICAgICAgICAgICAgICAvLyB0aGVtLCB3aXRob3V0IGNsZWFyaW5nIHRoZSBpbnB1dC5cbiAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHdpbGxDbG9zZVN1Z2dlc3Rpb25zID0gaXNPcGVuICYmICFhbHdheXNSZW5kZXJTdWdnZXN0aW9ucztcblxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZUJlZm9yZVVwRG93biA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgLy8gRGlkbid0IGludGVyYWN0IHdpdGggVXAvRG93blxuICAgICAgICAgICAgICAgICAgaWYgKCF3aWxsQ2xvc2VTdWdnZXN0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX25ld1ZhbHVlMiA9ICcnO1xuXG4gICAgICAgICAgICAgICAgICAgIF90aGlzMy5tYXliZUNhbGxPbkNoYW5nZShldmVudCwgX25ld1ZhbHVlMiwgJ2VzY2FwZScpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRSZW5kZXJTdWdnZXN0aW9ucyhfbmV3VmFsdWUyKSkge1xuICAgICAgICAgICAgICAgICAgICAgIG9uU3VnZ2VzdGlvbnNGZXRjaFJlcXVlc3RlZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX25ld1ZhbHVlMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjogJ2VzY2FwZS1wcmVzc2VkJ1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIF90aGlzMy5vblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAvLyBJbnRlcmFjdGVkIHdpdGggVXAvRG93blxuICAgICAgICAgICAgICAgICAgX3RoaXMzLm1heWJlQ2FsbE9uQ2hhbmdlKGV2ZW50LCB2YWx1ZUJlZm9yZVVwRG93biwgJ2VzY2FwZScpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh3aWxsQ2xvc2VTdWdnZXN0aW9ucykge1xuICAgICAgICAgICAgICAgICAgX3RoaXMzLm9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZCgpO1xuICAgICAgICAgICAgICAgICAgX3RoaXMzLmNsb3NlU3VnZ2VzdGlvbnMoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgX3RoaXMzLnJlc2V0SGlnaGxpZ2h0ZWRTdWdnZXN0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfb25LZXlEb3duICYmIF9vbktleURvd24oZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHZhciByZW5kZXJTdWdnZXN0aW9uRGF0YSA9IHtcbiAgICAgICAgcXVlcnk6IHRoaXMuZ2V0UXVlcnkoKVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KF9yZWFjdEF1dG93aGF0ZXZlcjIuZGVmYXVsdCwge1xuICAgICAgICBtdWx0aVNlY3Rpb246IG11bHRpU2VjdGlvbixcbiAgICAgICAgaXRlbXM6IGl0ZW1zLFxuICAgICAgICByZW5kZXJJbnB1dENvbXBvbmVudDogcmVuZGVySW5wdXRDb21wb25lbnQsXG4gICAgICAgIHJlbmRlckl0ZW1zQ29udGFpbmVyOiB0aGlzLnJlbmRlclN1Z2dlc3Rpb25zQ29udGFpbmVyLFxuICAgICAgICByZW5kZXJJdGVtOiByZW5kZXJTdWdnZXN0aW9uLFxuICAgICAgICByZW5kZXJJdGVtRGF0YTogcmVuZGVyU3VnZ2VzdGlvbkRhdGEsXG4gICAgICAgIHJlbmRlclNlY3Rpb25UaXRsZTogcmVuZGVyU2VjdGlvblRpdGxlLFxuICAgICAgICBnZXRTZWN0aW9uSXRlbXM6IGdldFNlY3Rpb25TdWdnZXN0aW9ucyxcbiAgICAgICAgaGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXg6IGhpZ2hsaWdodGVkU2VjdGlvbkluZGV4LFxuICAgICAgICBoaWdobGlnaHRlZEl0ZW1JbmRleDogaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXgsXG4gICAgICAgIGlucHV0UHJvcHM6IGF1dG93aGF0ZXZlcklucHV0UHJvcHMsXG4gICAgICAgIGl0ZW1Qcm9wczogdGhpcy5pdGVtUHJvcHMsXG4gICAgICAgIHRoZW1lOiAoMCwgdGhlbWUubWFwVG9BdXRvd2hhdGV2ZXJUaGVtZSkodGhlbWUkMSksXG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgcmVmOiB0aGlzLnN0b3JlQXV0b3doYXRldmVyUmVmXG4gICAgICB9KTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQXV0b3N1Z2dlc3Q7XG59KFJlYWN0X19kZWZhdWx0LkNvbXBvbmVudCk7XG5cbkF1dG9zdWdnZXN0LnByb3BUeXBlcyA9IHtcbiAgc3VnZ2VzdGlvbnM6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYXJyYXkuaXNSZXF1aXJlZCxcbiAgb25TdWdnZXN0aW9uc0ZldGNoUmVxdWVzdGVkOiBmdW5jdGlvbiBvblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQocHJvcHMsIHByb3BOYW1lKSB7XG4gICAgdmFyIG9uU3VnZ2VzdGlvbnNGZXRjaFJlcXVlc3RlZCA9IHByb3BzW3Byb3BOYW1lXTtcblxuICAgIGlmICh0eXBlb2Ygb25TdWdnZXN0aW9uc0ZldGNoUmVxdWVzdGVkICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCInb25TdWdnZXN0aW9uc0ZldGNoUmVxdWVzdGVkJyBtdXN0IGJlIGltcGxlbWVudGVkLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb3Jvc2hrby9yZWFjdC1hdXRvc3VnZ2VzdCNvblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWRQcm9wXCIpO1xuICAgIH1cbiAgfSxcbiAgb25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkOiBmdW5jdGlvbiBvblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWQocHJvcHMsIHByb3BOYW1lKSB7XG4gICAgdmFyIG9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZCA9IHByb3BzW3Byb3BOYW1lXTtcblxuICAgIGlmIChwcm9wcy5hbHdheXNSZW5kZXJTdWdnZXN0aW9ucyA9PT0gZmFsc2UgJiYgdHlwZW9mIG9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiJ29uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZCcgbXVzdCBiZSBpbXBsZW1lbnRlZC4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vbW9yb3Noa28vcmVhY3QtYXV0b3N1Z2dlc3Qjb25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkUHJvcFwiKTtcbiAgICB9XG4gIH0sXG4gIG9uU3VnZ2VzdGlvblNlbGVjdGVkOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmZ1bmMsXG4gIG9uU3VnZ2VzdGlvbkhpZ2hsaWdodGVkOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmZ1bmMsXG4gIHJlbmRlcklucHV0Q29tcG9uZW50OiBfcHJvcFR5cGVzMi5kZWZhdWx0LmZ1bmMsXG4gIHJlbmRlclN1Z2dlc3Rpb25zQ29udGFpbmVyOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmZ1bmMsXG4gIGdldFN1Z2dlc3Rpb25WYWx1ZTogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsXG4gIHJlbmRlclN1Z2dlc3Rpb246IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLFxuICBpbnB1dFByb3BzOiBmdW5jdGlvbiBpbnB1dFByb3BzKHByb3BzLCBwcm9wTmFtZSkge1xuICAgIHZhciBpbnB1dFByb3BzID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKCFpbnB1dFByb3BzLmhhc093blByb3BlcnR5KCd2YWx1ZScpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCInaW5wdXRQcm9wcycgbXVzdCBoYXZlICd2YWx1ZScuXCIpO1xuICAgIH1cblxuICAgIGlmICghaW5wdXRQcm9wcy5oYXNPd25Qcm9wZXJ0eSgnb25DaGFuZ2UnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiJ2lucHV0UHJvcHMnIG11c3QgaGF2ZSAnb25DaGFuZ2UnLlwiKTtcbiAgICB9XG4gIH0sXG4gIHNob3VsZFJlbmRlclN1Z2dlc3Rpb25zOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmZ1bmMsXG4gIGFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmJvb2wsXG4gIG11bHRpU2VjdGlvbjogX3Byb3BUeXBlczIuZGVmYXVsdC5ib29sLFxuICByZW5kZXJTZWN0aW9uVGl0bGU6IGZ1bmN0aW9uIHJlbmRlclNlY3Rpb25UaXRsZShwcm9wcywgcHJvcE5hbWUpIHtcbiAgICB2YXIgcmVuZGVyU2VjdGlvblRpdGxlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKHByb3BzLm11bHRpU2VjdGlvbiA9PT0gdHJ1ZSAmJiB0eXBlb2YgcmVuZGVyU2VjdGlvblRpdGxlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCIncmVuZGVyU2VjdGlvblRpdGxlJyBtdXN0IGJlIGltcGxlbWVudGVkLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb3Jvc2hrby9yZWFjdC1hdXRvc3VnZ2VzdCNyZW5kZXJTZWN0aW9uVGl0bGVQcm9wXCIpO1xuICAgIH1cbiAgfSxcbiAgZ2V0U2VjdGlvblN1Z2dlc3Rpb25zOiBmdW5jdGlvbiBnZXRTZWN0aW9uU3VnZ2VzdGlvbnMocHJvcHMsIHByb3BOYW1lKSB7XG4gICAgdmFyIGdldFNlY3Rpb25TdWdnZXN0aW9ucyA9IHByb3BzW3Byb3BOYW1lXTtcblxuICAgIGlmIChwcm9wcy5tdWx0aVNlY3Rpb24gPT09IHRydWUgJiYgdHlwZW9mIGdldFNlY3Rpb25TdWdnZXN0aW9ucyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiJ2dldFNlY3Rpb25TdWdnZXN0aW9ucycgbXVzdCBiZSBpbXBsZW1lbnRlZC4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vbW9yb3Noa28vcmVhY3QtYXV0b3N1Z2dlc3QjZ2V0U2VjdGlvblN1Z2dlc3Rpb25zUHJvcFwiKTtcbiAgICB9XG4gIH0sXG4gIGZvY3VzSW5wdXRPblN1Z2dlc3Rpb25DbGljazogX3Byb3BUeXBlczIuZGVmYXVsdC5ib29sLFxuICBoaWdobGlnaHRGaXJzdFN1Z2dlc3Rpb246IF9wcm9wVHlwZXMyLmRlZmF1bHQuYm9vbCxcbiAgdGhlbWU6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LFxuICBpZDogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmdcbn07XG5BdXRvc3VnZ2VzdC5kZWZhdWx0UHJvcHMgPSB7XG4gIHJlbmRlclN1Z2dlc3Rpb25zQ29udGFpbmVyOiBkZWZhdWx0UmVuZGVyU3VnZ2VzdGlvbnNDb250YWluZXIsXG4gIHNob3VsZFJlbmRlclN1Z2dlc3Rpb25zOiBkZWZhdWx0U2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnMsXG4gIGFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zOiBmYWxzZSxcbiAgbXVsdGlTZWN0aW9uOiBmYWxzZSxcbiAgZm9jdXNJbnB1dE9uU3VnZ2VzdGlvbkNsaWNrOiB0cnVlLFxuICBoaWdobGlnaHRGaXJzdFN1Z2dlc3Rpb246IGZhbHNlLFxuICB0aGVtZTogdGhlbWUuZGVmYXVsdFRoZW1lLFxuICBpZDogJzEnXG59O1xuXG52YXIgX2luaXRpYWxpc2VQcm9wcyA9IGZ1bmN0aW9uIF9pbml0aWFsaXNlUHJvcHMoKSB7XG4gIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gIHRoaXMub25Eb2N1bWVudE1vdXNlRG93biA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIF90aGlzNC5qdXN0Q2xpY2tlZE9uU3VnZ2VzdGlvbnNDb250YWluZXIgPSBmYWxzZTtcblxuICAgIHZhciBub2RlID0gZXZlbnQuZGV0YWlsICYmIGV2ZW50LmRldGFpbC50YXJnZXQgfHwgLy8gVGhpcyBpcyBmb3IgdGVzdGluZyBvbmx5LiBQbGVhc2Ugc2hvdyBtZSBhIGJldHRlciB3YXkgdG8gZW11bGF0ZSB0aGlzLlxuICAgIGV2ZW50LnRhcmdldDtcblxuICAgIHdoaWxlIChub2RlICE9PSBudWxsICYmIG5vZGUgIT09IGRvY3VtZW50KSB7XG4gICAgICBpZiAobm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3VnZ2VzdGlvbi1pbmRleCcpICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFN1Z2dlc3Rpb24gd2FzIGNsaWNrZWRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZSA9PT0gX3RoaXM0LnN1Z2dlc3Rpb25zQ29udGFpbmVyKSB7XG4gICAgICAgIC8vIFNvbWV0aGluZyBlbHNlIGluc2lkZSBzdWdnZXN0aW9ucyBjb250YWluZXIgd2FzIGNsaWNrZWRcbiAgICAgICAgX3RoaXM0Lmp1c3RDbGlja2VkT25TdWdnZXN0aW9uc0NvbnRhaW5lciA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICB9XG4gIH07XG5cbiAgdGhpcy5zdG9yZUF1dG93aGF0ZXZlclJlZiA9IGZ1bmN0aW9uIChhdXRvd2hhdGV2ZXIpIHtcbiAgICBpZiAoYXV0b3doYXRldmVyICE9PSBudWxsKSB7XG4gICAgICBfdGhpczQuYXV0b3doYXRldmVyID0gYXV0b3doYXRldmVyO1xuICAgIH1cbiAgfTtcblxuICB0aGlzLm9uU3VnZ2VzdGlvbk1vdXNlRW50ZXIgPSBmdW5jdGlvbiAoZXZlbnQsIF9yZWYzKSB7XG4gICAgdmFyIHNlY3Rpb25JbmRleCA9IF9yZWYzLnNlY3Rpb25JbmRleCxcbiAgICAgICAgaXRlbUluZGV4ID0gX3JlZjMuaXRlbUluZGV4O1xuXG4gICAgX3RoaXM0LnVwZGF0ZUhpZ2hsaWdodGVkU3VnZ2VzdGlvbihzZWN0aW9uSW5kZXgsIGl0ZW1JbmRleCk7XG5cbiAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBfdGhpczQucHJlc3NlZFN1Z2dlc3Rpb24pIHtcbiAgICAgIF90aGlzNC5qdXN0U2VsZWN0ZWRTdWdnZXN0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBfdGhpczQuanVzdE1vdXNlRW50ZXJlZCA9IHRydWU7XG5cbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzNC5qdXN0TW91c2VFbnRlcmVkID0gZmFsc2U7XG4gICAgfSk7XG4gIH07XG5cbiAgdGhpcy5oaWdobGlnaHRGaXJzdFN1Z2dlc3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgX3RoaXM0LnVwZGF0ZUhpZ2hsaWdodGVkU3VnZ2VzdGlvbihfdGhpczQucHJvcHMubXVsdGlTZWN0aW9uID8gMCA6IG51bGwsIDApO1xuICB9O1xuXG4gIHRoaXMub25Eb2N1bWVudE1vdXNlVXAgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKF90aGlzNC5wcmVzc2VkU3VnZ2VzdGlvbiAmJiAhX3RoaXM0Lmp1c3RTZWxlY3RlZFN1Z2dlc3Rpb24pIHtcbiAgICAgIF90aGlzNC5pbnB1dC5mb2N1cygpO1xuICAgIH1cbiAgICBfdGhpczQucHJlc3NlZFN1Z2dlc3Rpb24gPSBudWxsO1xuICB9O1xuXG4gIHRoaXMub25TdWdnZXN0aW9uTW91c2VEb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgLy8gQ2hlY2tpbmcgaWYgdGhpcy5qdXN0U2VsZWN0ZWRTdWdnZXN0aW9uIGlzIGFscmVhZHkgdHJ1ZSB0byBub3QgZHVwbGljYXRlIHRvdWNoIGV2ZW50cyBpbiBjaHJvbWVcbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvOTgwOSNpc3N1ZWNvbW1lbnQtNDEzOTc4NDA1XG4gICAgaWYgKCFfdGhpczQuanVzdFNlbGVjdGVkU3VnZ2VzdGlvbikge1xuICAgICAgX3RoaXM0Lmp1c3RTZWxlY3RlZFN1Z2dlc3Rpb24gPSB0cnVlO1xuICAgICAgX3RoaXM0LnByZXNzZWRTdWdnZXN0aW9uID0gZXZlbnQudGFyZ2V0O1xuICAgIH1cbiAgfTtcblxuICB0aGlzLm9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgb25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkID0gX3RoaXM0LnByb3BzLm9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZDtcblxuXG4gICAgb25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkICYmIG9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZCgpO1xuICB9O1xuXG4gIHRoaXMub25TdWdnZXN0aW9uU2VsZWN0ZWQgPSBmdW5jdGlvbiAoZXZlbnQsIGRhdGEpIHtcbiAgICB2YXIgX3Byb3BzNCA9IF90aGlzNC5wcm9wcyxcbiAgICAgICAgYWx3YXlzUmVuZGVyU3VnZ2VzdGlvbnMgPSBfcHJvcHM0LmFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zLFxuICAgICAgICBvblN1Z2dlc3Rpb25TZWxlY3RlZCA9IF9wcm9wczQub25TdWdnZXN0aW9uU2VsZWN0ZWQsXG4gICAgICAgIG9uU3VnZ2VzdGlvbnNGZXRjaFJlcXVlc3RlZCA9IF9wcm9wczQub25TdWdnZXN0aW9uc0ZldGNoUmVxdWVzdGVkO1xuXG5cbiAgICBvblN1Z2dlc3Rpb25TZWxlY3RlZCAmJiBvblN1Z2dlc3Rpb25TZWxlY3RlZChldmVudCwgZGF0YSk7XG5cbiAgICBpZiAoYWx3YXlzUmVuZGVyU3VnZ2VzdGlvbnMpIHtcbiAgICAgIG9uU3VnZ2VzdGlvbnNGZXRjaFJlcXVlc3RlZCh7XG4gICAgICAgIHZhbHVlOiBkYXRhLnN1Z2dlc3Rpb25WYWx1ZSxcbiAgICAgICAgcmVhc29uOiAnc3VnZ2VzdGlvbi1zZWxlY3RlZCdcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBfdGhpczQub25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkKCk7XG4gICAgfVxuXG4gICAgX3RoaXM0LnJlc2V0SGlnaGxpZ2h0ZWRTdWdnZXN0aW9uKCk7XG4gIH07XG5cbiAgdGhpcy5vblN1Z2dlc3Rpb25DbGljayA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHZhciBfcHJvcHM1ID0gX3RoaXM0LnByb3BzLFxuICAgICAgICBhbHdheXNSZW5kZXJTdWdnZXN0aW9ucyA9IF9wcm9wczUuYWx3YXlzUmVuZGVyU3VnZ2VzdGlvbnMsXG4gICAgICAgIGZvY3VzSW5wdXRPblN1Z2dlc3Rpb25DbGljayA9IF9wcm9wczUuZm9jdXNJbnB1dE9uU3VnZ2VzdGlvbkNsaWNrO1xuXG4gICAgdmFyIF9nZXRTdWdnZXN0aW9uSW5kaWNlcyA9IF90aGlzNC5nZXRTdWdnZXN0aW9uSW5kaWNlcyhfdGhpczQuZmluZFN1Z2dlc3Rpb25FbGVtZW50KGV2ZW50LnRhcmdldCkpLFxuICAgICAgICBzZWN0aW9uSW5kZXggPSBfZ2V0U3VnZ2VzdGlvbkluZGljZXMuc2VjdGlvbkluZGV4LFxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPSBfZ2V0U3VnZ2VzdGlvbkluZGljZXMuc3VnZ2VzdGlvbkluZGV4O1xuXG4gICAgdmFyIGNsaWNrZWRTdWdnZXN0aW9uID0gX3RoaXM0LmdldFN1Z2dlc3Rpb24oc2VjdGlvbkluZGV4LCBzdWdnZXN0aW9uSW5kZXgpO1xuICAgIHZhciBjbGlja2VkU3VnZ2VzdGlvblZhbHVlID0gX3RoaXM0LnByb3BzLmdldFN1Z2dlc3Rpb25WYWx1ZShjbGlja2VkU3VnZ2VzdGlvbik7XG5cbiAgICBfdGhpczQubWF5YmVDYWxsT25DaGFuZ2UoZXZlbnQsIGNsaWNrZWRTdWdnZXN0aW9uVmFsdWUsICdjbGljaycpO1xuICAgIF90aGlzNC5vblN1Z2dlc3Rpb25TZWxlY3RlZChldmVudCwge1xuICAgICAgc3VnZ2VzdGlvbjogY2xpY2tlZFN1Z2dlc3Rpb24sXG4gICAgICBzdWdnZXN0aW9uVmFsdWU6IGNsaWNrZWRTdWdnZXN0aW9uVmFsdWUsXG4gICAgICBzdWdnZXN0aW9uSW5kZXg6IHN1Z2dlc3Rpb25JbmRleCxcbiAgICAgIHNlY3Rpb25JbmRleDogc2VjdGlvbkluZGV4LFxuICAgICAgbWV0aG9kOiAnY2xpY2snXG4gICAgfSk7XG5cbiAgICBpZiAoIWFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zKSB7XG4gICAgICBfdGhpczQuY2xvc2VTdWdnZXN0aW9ucygpO1xuICAgIH1cblxuICAgIGlmIChmb2N1c0lucHV0T25TdWdnZXN0aW9uQ2xpY2sgPT09IHRydWUpIHtcbiAgICAgIF90aGlzNC5pbnB1dC5mb2N1cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBfdGhpczQub25CbHVyKCk7XG4gICAgfVxuXG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczQuanVzdFNlbGVjdGVkU3VnZ2VzdGlvbiA9IGZhbHNlO1xuICAgIH0pO1xuICB9O1xuXG4gIHRoaXMub25CbHVyID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBfcHJvcHM2ID0gX3RoaXM0LnByb3BzLFxuICAgICAgICBpbnB1dFByb3BzID0gX3Byb3BzNi5pbnB1dFByb3BzLFxuICAgICAgICBzaG91bGRSZW5kZXJTdWdnZXN0aW9ucyA9IF9wcm9wczYuc2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnM7XG4gICAgdmFyIHZhbHVlID0gaW5wdXRQcm9wcy52YWx1ZSxcbiAgICAgICAgb25CbHVyID0gaW5wdXRQcm9wcy5vbkJsdXI7XG5cbiAgICB2YXIgaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uID0gX3RoaXM0LmdldEhpZ2hsaWdodGVkU3VnZ2VzdGlvbigpO1xuICAgIHZhciBzaG91bGRSZW5kZXIgPSBzaG91bGRSZW5kZXJTdWdnZXN0aW9ucyh2YWx1ZSk7XG5cbiAgICBfdGhpczQuc2V0U3RhdGUoe1xuICAgICAgaXNGb2N1c2VkOiBmYWxzZSxcbiAgICAgIGhpZ2hsaWdodGVkU2VjdGlvbkluZGV4OiBudWxsLFxuICAgICAgaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXg6IG51bGwsXG4gICAgICBoaWdobGlnaHRlZFN1Z2dlc3Rpb246IG51bGwsXG4gICAgICB2YWx1ZUJlZm9yZVVwRG93bjogbnVsbCxcbiAgICAgIGlzQ29sbGFwc2VkOiAhc2hvdWxkUmVuZGVyXG4gICAgfSk7XG5cbiAgICBvbkJsdXIgJiYgb25CbHVyKF90aGlzNC5ibHVyRXZlbnQsIHsgaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uOiBoaWdobGlnaHRlZFN1Z2dlc3Rpb24gfSk7XG4gIH07XG5cbiAgdGhpcy5vblN1Z2dlc3Rpb25Nb3VzZUxlYXZlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgX3RoaXM0LnJlc2V0SGlnaGxpZ2h0ZWRTdWdnZXN0aW9uKGZhbHNlKTsgLy8gc2hvdWxkUmVzZXRWYWx1ZUJlZm9yZVVwRG93blxuXG4gICAgaWYgKF90aGlzNC5qdXN0U2VsZWN0ZWRTdWdnZXN0aW9uICYmIGV2ZW50LnRhcmdldCA9PT0gX3RoaXM0LnByZXNzZWRTdWdnZXN0aW9uKSB7XG4gICAgICBfdGhpczQuanVzdFNlbGVjdGVkU3VnZ2VzdGlvbiA9IGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICB0aGlzLm9uU3VnZ2VzdGlvblRvdWNoU3RhcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgX3RoaXM0Lmp1c3RTZWxlY3RlZFN1Z2dlc3Rpb24gPSB0cnVlO1xuICAgIC8vIHRvZG86IGV2ZW50LnByZXZlbnREZWZhdWx0IHdoZW4gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8yMDQzXG4gICAgLy8gdG9kbzogZ2V0cyByZWxlYXNlZCBzbyBvblN1Z2dlc3Rpb25Nb3VzZURvd24gd29uJ3QgZmlyZSBpbiBjaHJvbWVcbiAgfTtcblxuICB0aGlzLm9uU3VnZ2VzdGlvblRvdWNoTW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBfdGhpczQuanVzdFNlbGVjdGVkU3VnZ2VzdGlvbiA9IGZhbHNlO1xuICAgIF90aGlzNC5wcmVzc2VkU3VnZ2VzdGlvbiA9IG51bGw7XG4gICAgX3RoaXM0LmlucHV0LmZvY3VzKCk7XG4gIH07XG5cbiAgdGhpcy5pdGVtUHJvcHMgPSBmdW5jdGlvbiAoX3JlZjQpIHtcbiAgICB2YXIgc2VjdGlvbkluZGV4ID0gX3JlZjQuc2VjdGlvbkluZGV4LFxuICAgICAgICBpdGVtSW5kZXggPSBfcmVmNC5pdGVtSW5kZXg7XG5cbiAgICByZXR1cm4ge1xuICAgICAgJ2RhdGEtc2VjdGlvbi1pbmRleCc6IHNlY3Rpb25JbmRleCxcbiAgICAgICdkYXRhLXN1Z2dlc3Rpb24taW5kZXgnOiBpdGVtSW5kZXgsXG4gICAgICBvbk1vdXNlRW50ZXI6IF90aGlzNC5vblN1Z2dlc3Rpb25Nb3VzZUVudGVyLFxuICAgICAgb25Nb3VzZUxlYXZlOiBfdGhpczQub25TdWdnZXN0aW9uTW91c2VMZWF2ZSxcbiAgICAgIG9uTW91c2VEb3duOiBfdGhpczQub25TdWdnZXN0aW9uTW91c2VEb3duLFxuICAgICAgb25Ub3VjaFN0YXJ0OiBfdGhpczQub25TdWdnZXN0aW9uVG91Y2hTdGFydCxcbiAgICAgIG9uVG91Y2hNb3ZlOiBfdGhpczQub25TdWdnZXN0aW9uVG91Y2hNb3ZlLFxuICAgICAgb25DbGljazogX3RoaXM0Lm9uU3VnZ2VzdGlvbkNsaWNrXG4gICAgfTtcbiAgfTtcblxuICB0aGlzLnJlbmRlclN1Z2dlc3Rpb25zQ29udGFpbmVyID0gZnVuY3Rpb24gKF9yZWY1KSB7XG4gICAgdmFyIGNvbnRhaW5lclByb3BzID0gX3JlZjUuY29udGFpbmVyUHJvcHMsXG4gICAgICAgIGNoaWxkcmVuID0gX3JlZjUuY2hpbGRyZW47XG4gICAgdmFyIHJlbmRlclN1Z2dlc3Rpb25zQ29udGFpbmVyID0gX3RoaXM0LnByb3BzLnJlbmRlclN1Z2dlc3Rpb25zQ29udGFpbmVyO1xuXG5cbiAgICByZXR1cm4gcmVuZGVyU3VnZ2VzdGlvbnNDb250YWluZXIoe1xuICAgICAgY29udGFpbmVyUHJvcHM6IGNvbnRhaW5lclByb3BzLFxuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgICAgcXVlcnk6IF90aGlzNC5nZXRRdWVyeSgpXG4gICAgfSk7XG4gIH07XG59O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBBdXRvc3VnZ2VzdDtcbn0pO1xuXG51bndyYXBFeHBvcnRzKEF1dG9zdWdnZXN0XzEpO1xuXG52YXIgZGlzdCQzID0gQXV0b3N1Z2dlc3RfMS5kZWZhdWx0O1xuXG52YXIgc3R5bGVzJGUgPSB7XCJkLW5vbmVcIjpcIkF1dG9TdWdnZXN0SW5wdXQtbW9kdWxlX19kLW5vbmVcIixcImQtaW5saW5lXCI6XCJBdXRvU3VnZ2VzdElucHV0LW1vZHVsZV9fZC1pbmxpbmVcIixcImQtaW5saW5lLWJsb2NrXCI6XCJBdXRvU3VnZ2VzdElucHV0LW1vZHVsZV9fZC1pbmxpbmUtYmxvY2tcIixcImQtYmxvY2tcIjpcIkF1dG9TdWdnZXN0SW5wdXQtbW9kdWxlX19kLWJsb2NrXCIsXCJkLXRhYmxlXCI6XCJBdXRvU3VnZ2VzdElucHV0LW1vZHVsZV9fZC10YWJsZVwiLFwiZC10YWJsZS1yb3dcIjpcIkF1dG9TdWdnZXN0SW5wdXQtbW9kdWxlX19kLXRhYmxlLXJvd1wiLFwiZC10YWJsZS1jZWxsXCI6XCJBdXRvU3VnZ2VzdElucHV0LW1vZHVsZV9fZC10YWJsZS1jZWxsXCIsXCJkLWZsZXhcIjpcIkF1dG9TdWdnZXN0SW5wdXQtbW9kdWxlX19kLWZsZXhcIixcImQtaW5saW5lLWZsZXhcIjpcIkF1dG9TdWdnZXN0SW5wdXQtbW9kdWxlX19kLWlubGluZS1mbGV4XCIsXCJkLXNtLW5vbmVcIjpcIkF1dG9TdWdnZXN0SW5wdXQtbW9kdWxlX19kLXNtLW5vbmVcIixcImQtc20taW5saW5lXCI6XCJBdXRvU3VnZ2VzdElucHV0LW1vZHVsZV9fZC1zbS1pbmxpbmVcIixcImQtc20taW5saW5lLWJsb2NrXCI6XCJBdXRvU3VnZ2VzdElucHV0LW1vZHVsZV9fZC1zbS1pbmxpbmUtYmxvY2tcIixcImQtc20tYmxvY2tcIjpcIkF1dG9TdWdnZXN0SW5wdXQtbW9kdWxlX19kLXNtLWJsb2NrXCIsXCJkLXNtLXRhYmxlXCI6XCJBdXRvU3VnZ2VzdElucHV0LW1vZHVsZV9fZC1zbS10YWJsZVwiLFwiZC1zbS10YWJsZS1yb3dcIjpcIkF1dG9TdWdnZXN0SW5wdXQtbW9kdWxlX19kLXNtLXRhYmxlLXJvd1wiLFwiZC1zbS10YWJsZS1jZWxsXCI6XCJBdXRvU3VnZ2VzdElucHV0LW1vZHVsZV9fZC1zbS10YWJsZS1jZWxsXCIsXCJkLXNtLWZsZXhcIjpcIkF1dG9TdWdnZXN0SW5wdXQtbW9kdWxlX19kLXNtLWZsZXhcIixcImQtc20taW5saW5lLWZsZXhcIjpcIkF1dG9TdWdnZXN0SW5wdXQtbW9kdWxlX19kLXNtLWlubGluZS1mbGV4XCIsXCJkLW1kLW5vbmVcIjpcIkF1dG9TdWdnZXN0SW5wdXQtbW9kdWxlX19kLW1kLW5vbmVcIixcImQtbWQtaW5saW5lXCI6XCJBdXRvU3VnZ2VzdElucHV0LW1vZHVsZV9fZC1tZC1pbmxpbmVcIixcImQtbWQtaW5saW5lLWJsb2NrXCI6XCJBdXRvU3VnZ2VzdElucHV0LW1vZHVsZV9fZC1tZC1pbmxpbmUtYmxvY2tcIixcImQtbWQtYmxvY2tcIjpcIkF1dG9TdWdnZXN0SW5wdXQtbW9kdWxlX19kLW1kLWJsb2NrXCIsXCJkLW1kLXRhYmxlXCI6XCJBdXRvU3VnZ2VzdElucHV0LW1vZHVsZV9fZC1tZC10YWJsZVwiLFwiZC1tZC10YWJsZS1yb3dcIjpcIkF1dG9TdWdnZXN0SW5wdXQtbW9kdWxlX19kLW1kLXRhYmxlLXJvd1wiLFwiZC1tZC10YWJsZS1jZWxsXCI6XCJBdXRvU3VnZ2VzdElucHV0LW1vZHVsZV9fZC1tZC10YWJsZS1jZWxsXCIsXCJkLW1kLWZsZXhcIjpcIkF1dG9TdWdnZXN0SW5wdXQtbW9kdWxlX19kLW1kLWZsZXhcIixcImQtbWQtaW5saW5lLWZsZXhcIjpcIkF1dG9TdWdnZXN0SW5wdXQtbW9kdWxlX19kLW1kLWlubGluZS1mbGV4XCIsXCJkLWxnLW5vbmVcIjpcIkF1dG9TdWdnZXN0SW5wdXQtbW9kdWxlX19kLWxnLW5vbmVcIixcImQtbGctaW5saW5lXCI6XCJBdXRvU3VnZ2VzdElucHV0LW1vZHVsZV9fZC1sZy1pbmxpbmVcIixcImQtbGctaW5saW5lLWJsb2NrXCI6XCJBdXRvU3VnZ2VzdElucHV0LW1vZHVsZV9fZC1sZy1pbmxpbmUtYmxvY2tcIixcImQtbGctYmxvY2tcIjpcIkF1dG9TdWdnZXN0SW5wdXQtbW9kdWxlX19kLWxnLWJsb2NrXCIsXCJkLWxnLXRhYmxlXCI6XCJBdXRvU3VnZ2VzdElucHV0LW1vZHVsZV9fZC1sZy10YWJsZVwiLFwiZC1sZy10YWJsZS1yb3dcIjpcIkF1dG9TdWdnZXN0SW5wdXQtbW9kdWxlX19kLWxnLXRhYmxlLXJvd1wiLFwiZC1sZy10YWJsZS1jZWxsXCI6XCJBdXRvU3VnZ2VzdElucHV0LW1vZHVsZV9fZC1sZy10YWJsZS1jZWxsXCIsXCJkLWxnLWZsZXhcIjpcIkF1dG9TdWdnZXN0SW5wdXQtbW9kdWxlX19kLWxnLWZsZXhcIixcImQtbGctaW5saW5lLWZsZXhcIjpcIkF1dG9TdWdnZXN0SW5wdXQtbW9kdWxlX19kLWxnLWlubGluZS1mbGV4XCIsXCJkLXhsLW5vbmVcIjpcIkF1dG9TdWdnZXN0SW5wdXQtbW9kdWxlX19kLXhsLW5vbmVcIixcImQteGwtaW5saW5lXCI6XCJBdXRvU3VnZ2VzdElucHV0LW1vZHVsZV9fZC14bC1pbmxpbmVcIixcImQteGwtaW5saW5lLWJsb2NrXCI6XCJBdXRvU3VnZ2VzdElucHV0LW1vZHVsZV9fZC14bC1pbmxpbmUtYmxvY2tcIixcImQteGwtYmxvY2tcIjpcIkF1dG9TdWdnZXN0SW5wdXQtbW9kdWxlX19kLXhsLWJsb2NrXCIsXCJkLXhsLXRhYmxlXCI6XCJBdXRvU3VnZ2VzdElucHV0LW1vZHVsZV9fZC14bC10YWJsZVwiLFwiZC14bC10YWJsZS1yb3dcIjpcIkF1dG9TdWdnZXN0SW5wdXQtbW9kdWxlX19kLXhsLXRhYmxlLXJvd1wiLFwiZC14bC10YWJsZS1jZWxsXCI6XCJBdXRvU3VnZ2VzdElucHV0LW1vZHVsZV9fZC14bC10YWJsZS1jZWxsXCIsXCJkLXhsLWZsZXhcIjpcIkF1dG9TdWdnZXN0SW5wdXQtbW9kdWxlX19kLXhsLWZsZXhcIixcImQteGwtaW5saW5lLWZsZXhcIjpcIkF1dG9TdWdnZXN0SW5wdXQtbW9kdWxlX19kLXhsLWlubGluZS1mbGV4XCIsXCJkLXByaW50LW5vbmVcIjpcIkF1dG9TdWdnZXN0SW5wdXQtbW9kdWxlX19kLXByaW50LW5vbmVcIixcImQtcHJpbnQtaW5saW5lXCI6XCJBdXRvU3VnZ2VzdElucHV0LW1vZHVsZV9fZC1wcmludC1pbmxpbmVcIixcImQtcHJpbnQtaW5saW5lLWJsb2NrXCI6XCJBdXRvU3VnZ2VzdElucHV0LW1vZHVsZV9fZC1wcmludC1pbmxpbmUtYmxvY2tcIixcImQtcHJpbnQtYmxvY2tcIjpcIkF1dG9TdWdnZXN0SW5wdXQtbW9kdWxlX19kLXByaW50LWJsb2NrXCIsXCJkLXByaW50LXRhYmxlXCI6XCJBdXRvU3VnZ2VzdElucHV0LW1vZHVsZV9fZC1wcmludC10YWJsZVwiLFwiZC1wcmludC10YWJsZS1yb3dcIjpcIkF1dG9TdWdnZXN0SW5wdXQtbW9kdWxlX19kLXByaW50LXRhYmxlLXJvd1wiLFwiZC1wcmludC10YWJsZS1jZWxsXCI6XCJBdXRvU3VnZ2VzdElucHV0LW1vZHVsZV9fZC1wcmludC10YWJsZS1jZWxsXCIsXCJkLXByaW50LWZsZXhcIjpcIkF1dG9TdWdnZXN0SW5wdXQtbW9kdWxlX19kLXByaW50LWZsZXhcIixcImQtcHJpbnQtaW5saW5lLWZsZXhcIjpcIkF1dG9TdWdnZXN0SW5wdXQtbW9kdWxlX19kLXByaW50LWlubGluZS1mbGV4XCIsXCJjb250YWluZXJcIjpcIkF1dG9TdWdnZXN0SW5wdXQtbW9kdWxlX19jb250YWluZXJcIixcInN1Z2dlc3Rpb25zQ29udGFpbmVyXCI6XCJBdXRvU3VnZ2VzdElucHV0LW1vZHVsZV9fc3VnZ2VzdGlvbnNDb250YWluZXJcIixcInN1Z2dlc3Rpb25zTGlzdFwiOlwiQXV0b1N1Z2dlc3RJbnB1dC1tb2R1bGVfX3N1Z2dlc3Rpb25zTGlzdFwiLFwic3VnZ2VzdGlvblwiOlwiQXV0b1N1Z2dlc3RJbnB1dC1tb2R1bGVfX3N1Z2dlc3Rpb25cIixcInN1Z2dlc3Rpb25IaWdobGlnaHRlZFwiOlwiQXV0b1N1Z2dlc3RJbnB1dC1tb2R1bGVfX3N1Z2dlc3Rpb25IaWdobGlnaHRlZFwifTtcblxuZnVuY3Rpb24gZmluZFBhcnRzKGlucHV0LCB0ZXh0KSB7XG4gIGlmICghaW5wdXQgfHwgIXRleHQpIHtcbiAgICByZXR1cm4gW107XG4gIH0gLy8gTG9vayBmb3IgY2FzZSBpbnNlbnNpdGl2ZSAoJ2dpJyBmbGFnKSBtYXRjaGVzXG5cblxuICB2YXIgcmVnZXggPSBuZXcgUmVnRXhwKGlucHV0LCAnZ2knKTtcbiAgdmFyIGNodW5rcyA9IFtdO1xuICB2YXIgbWF0Y2g7XG5cbiAgd2hpbGUgKG1hdGNoID0gcmVnZXguZXhlYyh0ZXh0KSkge1xuICAgIHZhciBzdGFydCA9IG1hdGNoLmluZGV4O1xuICAgIHZhciBlbmQgPSByZWdleC5sYXN0SW5kZXg7IC8vIFdlIGRvIG5vdCByZXR1cm4gemVyby1sZW5ndGggbWF0Y2hlc1xuXG4gICAgaWYgKGVuZCA+IHN0YXJ0KSB7XG4gICAgICBjaHVua3MucHVzaCh7XG4gICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgZW5kOiBlbmRcbiAgICAgIH0pO1xuICAgIH0gLy8gUHJldmVudCBicm93c2VycyBsaWtlIEZpcmVmb3ggZnJvbSBnZXR0aW5nIHN0dWNrIGluIGFuIGluZmluaXRlIGxvb3BcbiAgICAvLyBTZWUgaHR0cDovL3d3dy5yZWdleGd1cnUuY29tLzIwMDgvMDQvd2F0Y2gtb3V0LWZvci16ZXJvLWxlbmd0aC1tYXRjaGVzL1xuXG5cbiAgICBpZiAobWF0Y2guaW5kZXggPT09IHJlZ2V4Lmxhc3RJbmRleCkge1xuICAgICAgcmVnZXgubGFzdEluZGV4Kys7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNodW5rcztcbn1cbmZ1bmN0aW9uIGhpZ2hsaWdodElucHV0KGlucHV0LCB0ZXh0KSB7XG4gIHZhciBwYXJ0cyA9IGZpbmRQYXJ0cyhpbnB1dCwgdGV4dCk7XG5cbiAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0ZXh0O1xuICB9IC8vIFdoZXJlIHRvIHN0YXJ0IGJvbGRpZnlpbmdcblxuXG4gIHZhciBsYXN0ID0gMDtcbiAgcmV0dXJuIHBhcnRzLm1hcChmdW5jdGlvbiAoX3JlZiwgaW5kZXgpIHtcbiAgICB2YXIgc3RhcnQgPSBfcmVmLnN0YXJ0LFxuICAgICAgICBlbmQgPSBfcmVmLmVuZDtcbiAgICB2YXIganN4ID0gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUmVhY3RfX2RlZmF1bHQuRnJhZ21lbnQsIG51bGwsIHRleHQuc2xpY2UobGFzdCwgc3RhcnQpLCAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcInN0cm9uZ1wiLCBudWxsLCB0ZXh0LnNsaWNlKHN0YXJ0LCBlbmQpKSwgaW5kZXggPT09IHBhcnRzLmxlbmd0aCAtIDEgJiYgdGV4dC5zbGljZShlbmQpXG4gICAgLyogUmVuZGVyIHRoZSByZXN0IGlmIGl0J3MgdGhlIGxhc3QgY2h1bmsgKi9cbiAgICApO1xuICAgIGxhc3QgPSBlbmQ7XG4gICAgcmV0dXJuIGpzeDtcbiAgfSk7XG59XG52YXIgQXV0b1N1Z2dlc3RJbnB1dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmMiwgcmVmKSB7XG4gIHZhciBzdWdnZXN0aW9ucyA9IF9yZWYyLnN1Z2dlc3Rpb25zLFxuICAgICAgb25TdWdnZXN0aW9uU2VsZWN0ZWQgPSBfcmVmMi5vblN1Z2dlc3Rpb25TZWxlY3RlZCxcbiAgICAgIG9uU3VnZ2VzdGlvbkhpZ2hsaWdodGVkID0gX3JlZjIub25TdWdnZXN0aW9uSGlnaGxpZ2h0ZWQsXG4gICAgICBfcmVmMiR2YWx1ZSA9IF9yZWYyLnZhbHVlLFxuICAgICAgdmFsdWUgPSBfcmVmMiR2YWx1ZSA9PT0gdm9pZCAwID8gJycgOiBfcmVmMiR2YWx1ZSxcbiAgICAgIF9yZWYyJG9uQ2hhbmdlID0gX3JlZjIub25DaGFuZ2UsXG4gICAgICBvbkNoYW5nZSA9IF9yZWYyJG9uQ2hhbmdlID09PSB2b2lkIDAgPyBmdW5jdGlvbiAoKSB7fSA6IF9yZWYyJG9uQ2hhbmdlLFxuICAgICAgaW5wdXRQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMiwgW1wic3VnZ2VzdGlvbnNcIiwgXCJvblN1Z2dlc3Rpb25TZWxlY3RlZFwiLCBcIm9uU3VnZ2VzdGlvbkhpZ2hsaWdodGVkXCIsIFwidmFsdWVcIiwgXCJvbkNoYW5nZVwiXSk7XG5cbiAgQXV0b1N1Z2dlc3RJbnB1dC5kaXNwbGF5TmFtZSA9ICdBdXRvU3VnZ2VzdElucHV0JztcblxuICB2YXIgX3VzZVN0YXRlID0gUmVhY3QudXNlU3RhdGUoc3VnZ2VzdGlvbnMpLFxuICAgICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgICBmaWx0ZXJlZFN1Z2dlc3Rpb25zID0gX3VzZVN0YXRlMlswXSxcbiAgICAgIHNldEZpbHRlcmVkU3VnZ2VzdGlvbnMgPSBfdXNlU3RhdGUyWzFdO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChkaXN0JDMsIHtcbiAgICByZWY6IHJlZixcbiAgICBzdWdnZXN0aW9uczogZmlsdGVyZWRTdWdnZXN0aW9ucyxcbiAgICBvblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQ6IGZ1bmN0aW9uIG9uU3VnZ2VzdGlvbnNGZXRjaFJlcXVlc3RlZChfcmVmMykge1xuICAgICAgdmFyIHZhbHVlID0gX3JlZjMudmFsdWU7XG4gICAgICB2YXIgdiA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICBzZXRGaWx0ZXJlZFN1Z2dlc3Rpb25zKHN1Z2dlc3Rpb25zLmZpbHRlcihmdW5jdGlvbiAocykge1xuICAgICAgICByZXR1cm4gcy52YWx1ZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModik7XG4gICAgICB9KSk7XG4gICAgfSxcbiAgICBvblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWQ6IGZ1bmN0aW9uIG9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZCgpIHtcbiAgICAgIHJldHVybiBzZXRGaWx0ZXJlZFN1Z2dlc3Rpb25zKFtdKTtcbiAgICB9LFxuICAgIGdldFN1Z2dlc3Rpb25WYWx1ZTogZnVuY3Rpb24gZ2V0U3VnZ2VzdGlvblZhbHVlKHMpIHtcbiAgICAgIHJldHVybiBzLnZhbHVlO1xuICAgIH0sXG4gICAgcmVuZGVyU3VnZ2VzdGlvbjogZnVuY3Rpb24gcmVuZGVyU3VnZ2VzdGlvbihzLCBfcmVmNCkge1xuICAgICAgdmFyIHF1ZXJ5ID0gX3JlZjQucXVlcnk7XG4gICAgICByZXR1cm4gaGlnaGxpZ2h0SW5wdXQocXVlcnksIHMudmFsdWUpO1xuICAgIH0sXG4gICAgaW5wdXRQcm9wczoge1xuICAgICAgb25DaGFuZ2U6IG9uQ2hhbmdlLFxuICAgICAgdmFsdWU6IHZhbHVlLnRvU3RyaW5nKClcbiAgICB9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWlnbm9yZVxuICAgIC8vIEB0cy1pZ25vcmU6IFRoZSB0eXBpbmcgZm9yIHRoZSBvbkNoYW5nZSBhbmQgb25CbHVyIGZyb20gdGhlIEF1dG9zdWdnZXN0LklucHV0UHJvcHMgaXMgbm90IGNvcnJlY3QgOihcbiAgICAsXG4gICAgcmVuZGVySW5wdXRDb21wb25lbnQ6IGZ1bmN0aW9uIHJlbmRlcklucHV0Q29tcG9uZW50KGF1dG9TdWdnZXN0SW5wdXRQcm9wcykge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KElucHV0QmFzZSwgX2V4dGVuZHMoe30sIGlucHV0UHJvcHMsIGF1dG9TdWdnZXN0SW5wdXRQcm9wcykpO1xuICAgIH0sXG4gICAgb25TdWdnZXN0aW9uU2VsZWN0ZWQ6IHR5cGVvZiBvblN1Z2dlc3Rpb25TZWxlY3RlZCA9PT0gJ2Z1bmN0aW9uJyA/IGZ1bmN0aW9uIChldmVudCwgX3JlZjUpIHtcbiAgICAgIHZhciBzdWdnZXN0aW9uID0gX3JlZjUuc3VnZ2VzdGlvbjtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG9uU3VnZ2VzdGlvblNlbGVjdGVkKHN1Z2dlc3Rpb24pO1xuICAgIH0gOiB1bmRlZmluZWQsXG4gICAgb25TdWdnZXN0aW9uSGlnaGxpZ2h0ZWQ6IHR5cGVvZiBvblN1Z2dlc3Rpb25IaWdobGlnaHRlZCA9PT0gJ2Z1bmN0aW9uJyA/IGZ1bmN0aW9uIChzdHVmZikge1xuICAgICAgcmV0dXJuIG9uU3VnZ2VzdGlvbkhpZ2hsaWdodGVkKHN0dWZmLnN1Z2dlc3Rpb24udmFsdWUpO1xuICAgIH0gOiB1bmRlZmluZWQsXG4gICAgc2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnM6IGZ1bmN0aW9uIHNob3VsZFJlbmRlclN1Z2dlc3Rpb25zKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICB0aGVtZToge1xuICAgICAgY29udGFpbmVyOiBzdHlsZXMkZVsnY29udGFpbmVyJ10sXG4gICAgICBzdWdnZXN0aW9uc0NvbnRhaW5lcjogc3R5bGVzJGVbJ3N1Z2dlc3Rpb25zQ29udGFpbmVyJ10sXG4gICAgICBzdWdnZXN0aW9uc0xpc3Q6IHN0eWxlcyRlWydzdWdnZXN0aW9uc0xpc3QnXSxcbiAgICAgIHN1Z2dlc3Rpb246IHN0eWxlcyRlWydzdWdnZXN0aW9uJ10sXG4gICAgICBzdWdnZXN0aW9uSGlnaGxpZ2h0ZWQ6IHN0eWxlcyRlWydzdWdnZXN0aW9uSGlnaGxpZ2h0ZWQnXVxuICAgIH1cbiAgfSk7XG59KTtcblxudmFyIElucHV0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgSW5wdXQuZGlzcGxheU5hbWUgPSAnSW5wdXQnO1xuXG4gIHZhciBpZCA9IHByb3BzLmlkLFxuICAgICAgbGFiZWwgPSBwcm9wcy5sYWJlbCxcbiAgICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICAgIGhpZGVFcnJvclRleHQgPSBwcm9wcy5oaWRlRXJyb3JUZXh0LFxuICAgICAgZXJyb3IgPSBwcm9wcy5lcnJvcixcbiAgICAgIHRvdWNoZWQgPSBwcm9wcy50b3VjaGVkLFxuICAgICAgb25DaGFuZ2UgPSBwcm9wcy5vbkNoYW5nZSxcbiAgICAgIHZhbHVlID0gcHJvcHMudmFsdWUsXG4gICAgICBzdWdnZXN0aW9ucyA9IHByb3BzLnN1Z2dlc3Rpb25zLFxuICAgICAgb25TdWdnZXN0aW9uU2VsZWN0ZWQgPSBwcm9wcy5vblN1Z2dlc3Rpb25TZWxlY3RlZCxcbiAgICAgIG9uU3VnZ2VzdGlvbkhpZ2hsaWdodGVkID0gcHJvcHMub25TdWdnZXN0aW9uSGlnaGxpZ2h0ZWQsXG4gICAgICBpbnB1dFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHByb3BzLCBbXCJpZFwiLCBcImxhYmVsXCIsIFwiY2xhc3NOYW1lXCIsIFwiaGlkZUVycm9yVGV4dFwiLCBcImVycm9yXCIsIFwidG91Y2hlZFwiLCBcIm9uQ2hhbmdlXCIsIFwidmFsdWVcIiwgXCJzdWdnZXN0aW9uc1wiLCBcIm9uU3VnZ2VzdGlvblNlbGVjdGVkXCIsIFwib25TdWdnZXN0aW9uSGlnaGxpZ2h0ZWRcIl0pO1xuXG4gIHZhciB3cmFwcGVyQ2xhc3MgPSBbY2xhc3NOYW1lLCBzdHlsZXMkY1snd3JhcHBlciddXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpO1xuICB2YXIgaW5wdXRJZCA9IGlkIHx8IGxhYmVsICYmIFwiXCIuY29uY2F0KGxhYmVsLnRvU3RyaW5nKCkuc3BsaXQoJyAnKS5qb2luKCctJyksIFwiLWlucHV0XCIpIHx8ICcnO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoRmxleCwge1xuICAgIGNsYXNzTmFtZTogd3JhcHBlckNsYXNzLFxuICAgIGRpcmVjdGlvbjogXCJjb2x1bW5cIlxuICB9LCBsYWJlbCAmJiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChMYWJlbCwge1xuICAgIGh0bWxGb3I6IGlucHV0SWRcbiAgfSwgbGFiZWwpLCBzdWdnZXN0aW9ucyA/IC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KEF1dG9TdWdnZXN0SW5wdXQsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICBlcnJvcjogZXJyb3IsXG4gICAgaWQ6IGlkLFxuICAgIHRvdWNoZWQ6IHRvdWNoZWQsXG4gICAgb25DaGFuZ2U6IG9uQ2hhbmdlLFxuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBzdWdnZXN0aW9uczogc3VnZ2VzdGlvbnMsXG4gICAgb25TdWdnZXN0aW9uU2VsZWN0ZWQ6IG9uU3VnZ2VzdGlvblNlbGVjdGVkLFxuICAgIG9uU3VnZ2VzdGlvbkhpZ2hsaWdodGVkOiBvblN1Z2dlc3Rpb25IaWdobGlnaHRlZFxuICB9LCBpbnB1dFByb3BzKSkgOiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChJbnB1dEJhc2UsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICBlcnJvcjogZXJyb3IsXG4gICAgaWQ6IGlkLFxuICAgIHRvdWNoZWQ6IHRvdWNoZWQsXG4gICAgb25DaGFuZ2U6IG9uQ2hhbmdlLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9LCBpbnB1dFByb3BzKSksIGVycm9yICYmIHRvdWNoZWQgJiYgIWhpZGVFcnJvclRleHQgJiYgLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoRXJyb3IkMSwgbnVsbCwgZXJyb3IpKTtcbn0pO1xuXG52YXIgUGFyYWdyYXBoID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoUGFyYWdyYXBoLCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihQYXJhZ3JhcGgpO1xuXG4gIGZ1bmN0aW9uIFBhcmFncmFwaCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUGFyYWdyYXBoKTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhQYXJhZ3JhcGgsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgYXMgPSBfdGhpcyRwcm9wcy5hcyxcbiAgICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgW1wiY2hpbGRyZW5cIiwgXCJhc1wiXSk7XG5cbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUZXh0LCBfZXh0ZW5kcyh7XG4gICAgICAgIGFzOiBhc1xuICAgICAgfSwgcHJvcHMpLCBjaGlsZHJlbik7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFBhcmFncmFwaDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShQYXJhZ3JhcGgsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgYXM6ICdwJyxcbiAgZm9udFNpemU6ICdib2R5J1xufSk7XG5cbnZhciBTcGFuID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU3BhbiwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3Bhbik7XG5cbiAgZnVuY3Rpb24gU3BhbigpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3Bhbik7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3BhbiwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICBhcyA9IF90aGlzJHByb3BzLmFzLFxuICAgICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBbXCJjaGlsZHJlblwiLCBcImFzXCJdKTtcblxuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRleHQsIF9leHRlbmRzKHtcbiAgICAgICAgYXM6IGFzXG4gICAgICB9LCBwcm9wcyksIGNoaWxkcmVuKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3Bhbjtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShTcGFuLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIGFzOiAnc3BhbicsXG4gIGZvbnRTaXplOiAnYm9keSdcbn0pO1xuXG52YXIgc3R5bGVzJGYgPSB7XCJkLW5vbmVcIjpcIlJhbmdlU2xpZGVyLW1vZHVsZV9fZC1ub25lXCIsXCJkLWlubGluZVwiOlwiUmFuZ2VTbGlkZXItbW9kdWxlX19kLWlubGluZVwiLFwiZC1pbmxpbmUtYmxvY2tcIjpcIlJhbmdlU2xpZGVyLW1vZHVsZV9fZC1pbmxpbmUtYmxvY2tcIixcImQtYmxvY2tcIjpcIlJhbmdlU2xpZGVyLW1vZHVsZV9fZC1ibG9ja1wiLFwiZC10YWJsZVwiOlwiUmFuZ2VTbGlkZXItbW9kdWxlX19kLXRhYmxlXCIsXCJkLXRhYmxlLXJvd1wiOlwiUmFuZ2VTbGlkZXItbW9kdWxlX19kLXRhYmxlLXJvd1wiLFwiZC10YWJsZS1jZWxsXCI6XCJSYW5nZVNsaWRlci1tb2R1bGVfX2QtdGFibGUtY2VsbFwiLFwiZC1mbGV4XCI6XCJSYW5nZVNsaWRlci1tb2R1bGVfX2QtZmxleFwiLFwiZC1pbmxpbmUtZmxleFwiOlwiUmFuZ2VTbGlkZXItbW9kdWxlX19kLWlubGluZS1mbGV4XCIsXCJkLXNtLW5vbmVcIjpcIlJhbmdlU2xpZGVyLW1vZHVsZV9fZC1zbS1ub25lXCIsXCJkLXNtLWlubGluZVwiOlwiUmFuZ2VTbGlkZXItbW9kdWxlX19kLXNtLWlubGluZVwiLFwiZC1zbS1pbmxpbmUtYmxvY2tcIjpcIlJhbmdlU2xpZGVyLW1vZHVsZV9fZC1zbS1pbmxpbmUtYmxvY2tcIixcImQtc20tYmxvY2tcIjpcIlJhbmdlU2xpZGVyLW1vZHVsZV9fZC1zbS1ibG9ja1wiLFwiZC1zbS10YWJsZVwiOlwiUmFuZ2VTbGlkZXItbW9kdWxlX19kLXNtLXRhYmxlXCIsXCJkLXNtLXRhYmxlLXJvd1wiOlwiUmFuZ2VTbGlkZXItbW9kdWxlX19kLXNtLXRhYmxlLXJvd1wiLFwiZC1zbS10YWJsZS1jZWxsXCI6XCJSYW5nZVNsaWRlci1tb2R1bGVfX2Qtc20tdGFibGUtY2VsbFwiLFwiZC1zbS1mbGV4XCI6XCJSYW5nZVNsaWRlci1tb2R1bGVfX2Qtc20tZmxleFwiLFwiZC1zbS1pbmxpbmUtZmxleFwiOlwiUmFuZ2VTbGlkZXItbW9kdWxlX19kLXNtLWlubGluZS1mbGV4XCIsXCJkLW1kLW5vbmVcIjpcIlJhbmdlU2xpZGVyLW1vZHVsZV9fZC1tZC1ub25lXCIsXCJkLW1kLWlubGluZVwiOlwiUmFuZ2VTbGlkZXItbW9kdWxlX19kLW1kLWlubGluZVwiLFwiZC1tZC1pbmxpbmUtYmxvY2tcIjpcIlJhbmdlU2xpZGVyLW1vZHVsZV9fZC1tZC1pbmxpbmUtYmxvY2tcIixcImQtbWQtYmxvY2tcIjpcIlJhbmdlU2xpZGVyLW1vZHVsZV9fZC1tZC1ibG9ja1wiLFwiZC1tZC10YWJsZVwiOlwiUmFuZ2VTbGlkZXItbW9kdWxlX19kLW1kLXRhYmxlXCIsXCJkLW1kLXRhYmxlLXJvd1wiOlwiUmFuZ2VTbGlkZXItbW9kdWxlX19kLW1kLXRhYmxlLXJvd1wiLFwiZC1tZC10YWJsZS1jZWxsXCI6XCJSYW5nZVNsaWRlci1tb2R1bGVfX2QtbWQtdGFibGUtY2VsbFwiLFwiZC1tZC1mbGV4XCI6XCJSYW5nZVNsaWRlci1tb2R1bGVfX2QtbWQtZmxleFwiLFwiZC1tZC1pbmxpbmUtZmxleFwiOlwiUmFuZ2VTbGlkZXItbW9kdWxlX19kLW1kLWlubGluZS1mbGV4XCIsXCJkLWxnLW5vbmVcIjpcIlJhbmdlU2xpZGVyLW1vZHVsZV9fZC1sZy1ub25lXCIsXCJkLWxnLWlubGluZVwiOlwiUmFuZ2VTbGlkZXItbW9kdWxlX19kLWxnLWlubGluZVwiLFwiZC1sZy1pbmxpbmUtYmxvY2tcIjpcIlJhbmdlU2xpZGVyLW1vZHVsZV9fZC1sZy1pbmxpbmUtYmxvY2tcIixcImQtbGctYmxvY2tcIjpcIlJhbmdlU2xpZGVyLW1vZHVsZV9fZC1sZy1ibG9ja1wiLFwiZC1sZy10YWJsZVwiOlwiUmFuZ2VTbGlkZXItbW9kdWxlX19kLWxnLXRhYmxlXCIsXCJkLWxnLXRhYmxlLXJvd1wiOlwiUmFuZ2VTbGlkZXItbW9kdWxlX19kLWxnLXRhYmxlLXJvd1wiLFwiZC1sZy10YWJsZS1jZWxsXCI6XCJSYW5nZVNsaWRlci1tb2R1bGVfX2QtbGctdGFibGUtY2VsbFwiLFwiZC1sZy1mbGV4XCI6XCJSYW5nZVNsaWRlci1tb2R1bGVfX2QtbGctZmxleFwiLFwiZC1sZy1pbmxpbmUtZmxleFwiOlwiUmFuZ2VTbGlkZXItbW9kdWxlX19kLWxnLWlubGluZS1mbGV4XCIsXCJkLXhsLW5vbmVcIjpcIlJhbmdlU2xpZGVyLW1vZHVsZV9fZC14bC1ub25lXCIsXCJkLXhsLWlubGluZVwiOlwiUmFuZ2VTbGlkZXItbW9kdWxlX19kLXhsLWlubGluZVwiLFwiZC14bC1pbmxpbmUtYmxvY2tcIjpcIlJhbmdlU2xpZGVyLW1vZHVsZV9fZC14bC1pbmxpbmUtYmxvY2tcIixcImQteGwtYmxvY2tcIjpcIlJhbmdlU2xpZGVyLW1vZHVsZV9fZC14bC1ibG9ja1wiLFwiZC14bC10YWJsZVwiOlwiUmFuZ2VTbGlkZXItbW9kdWxlX19kLXhsLXRhYmxlXCIsXCJkLXhsLXRhYmxlLXJvd1wiOlwiUmFuZ2VTbGlkZXItbW9kdWxlX19kLXhsLXRhYmxlLXJvd1wiLFwiZC14bC10YWJsZS1jZWxsXCI6XCJSYW5nZVNsaWRlci1tb2R1bGVfX2QteGwtdGFibGUtY2VsbFwiLFwiZC14bC1mbGV4XCI6XCJSYW5nZVNsaWRlci1tb2R1bGVfX2QteGwtZmxleFwiLFwiZC14bC1pbmxpbmUtZmxleFwiOlwiUmFuZ2VTbGlkZXItbW9kdWxlX19kLXhsLWlubGluZS1mbGV4XCIsXCJkLXByaW50LW5vbmVcIjpcIlJhbmdlU2xpZGVyLW1vZHVsZV9fZC1wcmludC1ub25lXCIsXCJkLXByaW50LWlubGluZVwiOlwiUmFuZ2VTbGlkZXItbW9kdWxlX19kLXByaW50LWlubGluZVwiLFwiZC1wcmludC1pbmxpbmUtYmxvY2tcIjpcIlJhbmdlU2xpZGVyLW1vZHVsZV9fZC1wcmludC1pbmxpbmUtYmxvY2tcIixcImQtcHJpbnQtYmxvY2tcIjpcIlJhbmdlU2xpZGVyLW1vZHVsZV9fZC1wcmludC1ibG9ja1wiLFwiZC1wcmludC10YWJsZVwiOlwiUmFuZ2VTbGlkZXItbW9kdWxlX19kLXByaW50LXRhYmxlXCIsXCJkLXByaW50LXRhYmxlLXJvd1wiOlwiUmFuZ2VTbGlkZXItbW9kdWxlX19kLXByaW50LXRhYmxlLXJvd1wiLFwiZC1wcmludC10YWJsZS1jZWxsXCI6XCJSYW5nZVNsaWRlci1tb2R1bGVfX2QtcHJpbnQtdGFibGUtY2VsbFwiLFwiZC1wcmludC1mbGV4XCI6XCJSYW5nZVNsaWRlci1tb2R1bGVfX2QtcHJpbnQtZmxleFwiLFwiZC1wcmludC1pbmxpbmUtZmxleFwiOlwiUmFuZ2VTbGlkZXItbW9kdWxlX19kLXByaW50LWlubGluZS1mbGV4XCIsXCJzbGlkZXJcIjpcIlJhbmdlU2xpZGVyLW1vZHVsZV9fc2xpZGVyXCJ9O1xuXG52YXIgUmFuZ2VTbGlkZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhSYW5nZVNsaWRlciwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoUmFuZ2VTbGlkZXIpO1xuXG4gIGZ1bmN0aW9uIFJhbmdlU2xpZGVyKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBSYW5nZVNsaWRlcik7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoUmFuZ2VTbGlkZXIsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgW1wiY2xhc3NOYW1lXCJdKTtcblxuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICAgIHR5cGU6IFwicmFuZ2VcIixcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUgPyBbc3R5bGVzJGYuc2xpZGVyLCBjbGFzc05hbWVdLmpvaW4oJyAnKSA6IHN0eWxlcyRmLnNsaWRlclxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBSYW5nZVNsaWRlcjtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBzdHlsZXMkZyA9IHtcInJvd1wiOlwiUm93LW1vZHVsZV9fcm93XCIsXCJuby1ndXR0ZXJzXCI6XCJSb3ctbW9kdWxlX19uby1ndXR0ZXJzXCIsXCJjb2xcIjpcIlJvdy1tb2R1bGVfX2NvbFwiLFwianVzdGlmeS1jb250ZW50LXN0YXJ0XCI6XCJSb3ctbW9kdWxlX19qdXN0aWZ5LWNvbnRlbnQtc3RhcnRcIixcImp1c3RpZnktY29udGVudC1lbmRcIjpcIlJvdy1tb2R1bGVfX2p1c3RpZnktY29udGVudC1lbmRcIixcImp1c3RpZnktY29udGVudC1jZW50ZXJcIjpcIlJvdy1tb2R1bGVfX2p1c3RpZnktY29udGVudC1jZW50ZXJcIixcImp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI6XCJSb3ctbW9kdWxlX19qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiLFwianVzdGlmeS1jb250ZW50LWFyb3VuZFwiOlwiUm93LW1vZHVsZV9fanVzdGlmeS1jb250ZW50LWFyb3VuZFwiLFwianVzdGlmeS1jb250ZW50LWV2ZW5seVwiOlwiUm93LW1vZHVsZV9fanVzdGlmeS1jb250ZW50LWV2ZW5seVwiLFwiYWxpZ24taXRlbXMtc3RhcnRcIjpcIlJvdy1tb2R1bGVfX2FsaWduLWl0ZW1zLXN0YXJ0XCIsXCJhbGlnbi1pdGVtcy1lbmRcIjpcIlJvdy1tb2R1bGVfX2FsaWduLWl0ZW1zLWVuZFwiLFwiYWxpZ24taXRlbXMtY2VudGVyXCI6XCJSb3ctbW9kdWxlX19hbGlnbi1pdGVtcy1jZW50ZXJcIixcImFsaWduLWl0ZW1zLWJhc2VsaW5lXCI6XCJSb3ctbW9kdWxlX19hbGlnbi1pdGVtcy1iYXNlbGluZVwiLFwiYWxpZ24taXRlbXMtc3RyZXRjaFwiOlwiUm93LW1vZHVsZV9fYWxpZ24taXRlbXMtc3RyZXRjaFwiLFwiYWxpZ24tY29udGVudC1zdGFydFwiOlwiUm93LW1vZHVsZV9fYWxpZ24tY29udGVudC1zdGFydFwiLFwiYWxpZ24tY29udGVudC1lbmRcIjpcIlJvdy1tb2R1bGVfX2FsaWduLWNvbnRlbnQtZW5kXCIsXCJhbGlnbi1jb250ZW50LWNlbnRlclwiOlwiUm93LW1vZHVsZV9fYWxpZ24tY29udGVudC1jZW50ZXJcIixcImFsaWduLWNvbnRlbnQtYmV0d2VlblwiOlwiUm93LW1vZHVsZV9fYWxpZ24tY29udGVudC1iZXR3ZWVuXCIsXCJhbGlnbi1jb250ZW50LWFyb3VuZFwiOlwiUm93LW1vZHVsZV9fYWxpZ24tY29udGVudC1hcm91bmRcIixcImFsaWduLWNvbnRlbnQtc3RyZXRjaFwiOlwiUm93LW1vZHVsZV9fYWxpZ24tY29udGVudC1zdHJldGNoXCIsXCJqdXN0aWZ5LWNvbnRlbnQtc20tc3RhcnRcIjpcIlJvdy1tb2R1bGVfX2p1c3RpZnktY29udGVudC1zbS1zdGFydFwiLFwianVzdGlmeS1jb250ZW50LXNtLWVuZFwiOlwiUm93LW1vZHVsZV9fanVzdGlmeS1jb250ZW50LXNtLWVuZFwiLFwianVzdGlmeS1jb250ZW50LXNtLWNlbnRlclwiOlwiUm93LW1vZHVsZV9fanVzdGlmeS1jb250ZW50LXNtLWNlbnRlclwiLFwianVzdGlmeS1jb250ZW50LXNtLWJldHdlZW5cIjpcIlJvdy1tb2R1bGVfX2p1c3RpZnktY29udGVudC1zbS1iZXR3ZWVuXCIsXCJqdXN0aWZ5LWNvbnRlbnQtc20tYXJvdW5kXCI6XCJSb3ctbW9kdWxlX19qdXN0aWZ5LWNvbnRlbnQtc20tYXJvdW5kXCIsXCJqdXN0aWZ5LWNvbnRlbnQtc20tZXZlbmx5XCI6XCJSb3ctbW9kdWxlX19qdXN0aWZ5LWNvbnRlbnQtc20tZXZlbmx5XCIsXCJhbGlnbi1pdGVtcy1zbS1zdGFydFwiOlwiUm93LW1vZHVsZV9fYWxpZ24taXRlbXMtc20tc3RhcnRcIixcImFsaWduLWl0ZW1zLXNtLWVuZFwiOlwiUm93LW1vZHVsZV9fYWxpZ24taXRlbXMtc20tZW5kXCIsXCJhbGlnbi1pdGVtcy1zbS1jZW50ZXJcIjpcIlJvdy1tb2R1bGVfX2FsaWduLWl0ZW1zLXNtLWNlbnRlclwiLFwiYWxpZ24taXRlbXMtc20tYmFzZWxpbmVcIjpcIlJvdy1tb2R1bGVfX2FsaWduLWl0ZW1zLXNtLWJhc2VsaW5lXCIsXCJhbGlnbi1pdGVtcy1zbS1zdHJldGNoXCI6XCJSb3ctbW9kdWxlX19hbGlnbi1pdGVtcy1zbS1zdHJldGNoXCIsXCJhbGlnbi1jb250ZW50LXNtLXN0YXJ0XCI6XCJSb3ctbW9kdWxlX19hbGlnbi1jb250ZW50LXNtLXN0YXJ0XCIsXCJhbGlnbi1jb250ZW50LXNtLWVuZFwiOlwiUm93LW1vZHVsZV9fYWxpZ24tY29udGVudC1zbS1lbmRcIixcImFsaWduLWNvbnRlbnQtc20tY2VudGVyXCI6XCJSb3ctbW9kdWxlX19hbGlnbi1jb250ZW50LXNtLWNlbnRlclwiLFwiYWxpZ24tY29udGVudC1zbS1iZXR3ZWVuXCI6XCJSb3ctbW9kdWxlX19hbGlnbi1jb250ZW50LXNtLWJldHdlZW5cIixcImFsaWduLWNvbnRlbnQtc20tYXJvdW5kXCI6XCJSb3ctbW9kdWxlX19hbGlnbi1jb250ZW50LXNtLWFyb3VuZFwiLFwiYWxpZ24tY29udGVudC1zbS1zdHJldGNoXCI6XCJSb3ctbW9kdWxlX19hbGlnbi1jb250ZW50LXNtLXN0cmV0Y2hcIixcImp1c3RpZnktY29udGVudC1tZC1zdGFydFwiOlwiUm93LW1vZHVsZV9fanVzdGlmeS1jb250ZW50LW1kLXN0YXJ0XCIsXCJqdXN0aWZ5LWNvbnRlbnQtbWQtZW5kXCI6XCJSb3ctbW9kdWxlX19qdXN0aWZ5LWNvbnRlbnQtbWQtZW5kXCIsXCJqdXN0aWZ5LWNvbnRlbnQtbWQtY2VudGVyXCI6XCJSb3ctbW9kdWxlX19qdXN0aWZ5LWNvbnRlbnQtbWQtY2VudGVyXCIsXCJqdXN0aWZ5LWNvbnRlbnQtbWQtYmV0d2VlblwiOlwiUm93LW1vZHVsZV9fanVzdGlmeS1jb250ZW50LW1kLWJldHdlZW5cIixcImp1c3RpZnktY29udGVudC1tZC1hcm91bmRcIjpcIlJvdy1tb2R1bGVfX2p1c3RpZnktY29udGVudC1tZC1hcm91bmRcIixcImp1c3RpZnktY29udGVudC1tZC1ldmVubHlcIjpcIlJvdy1tb2R1bGVfX2p1c3RpZnktY29udGVudC1tZC1ldmVubHlcIixcImFsaWduLWl0ZW1zLW1kLXN0YXJ0XCI6XCJSb3ctbW9kdWxlX19hbGlnbi1pdGVtcy1tZC1zdGFydFwiLFwiYWxpZ24taXRlbXMtbWQtZW5kXCI6XCJSb3ctbW9kdWxlX19hbGlnbi1pdGVtcy1tZC1lbmRcIixcImFsaWduLWl0ZW1zLW1kLWNlbnRlclwiOlwiUm93LW1vZHVsZV9fYWxpZ24taXRlbXMtbWQtY2VudGVyXCIsXCJhbGlnbi1pdGVtcy1tZC1iYXNlbGluZVwiOlwiUm93LW1vZHVsZV9fYWxpZ24taXRlbXMtbWQtYmFzZWxpbmVcIixcImFsaWduLWl0ZW1zLW1kLXN0cmV0Y2hcIjpcIlJvdy1tb2R1bGVfX2FsaWduLWl0ZW1zLW1kLXN0cmV0Y2hcIixcImFsaWduLWNvbnRlbnQtbWQtc3RhcnRcIjpcIlJvdy1tb2R1bGVfX2FsaWduLWNvbnRlbnQtbWQtc3RhcnRcIixcImFsaWduLWNvbnRlbnQtbWQtZW5kXCI6XCJSb3ctbW9kdWxlX19hbGlnbi1jb250ZW50LW1kLWVuZFwiLFwiYWxpZ24tY29udGVudC1tZC1jZW50ZXJcIjpcIlJvdy1tb2R1bGVfX2FsaWduLWNvbnRlbnQtbWQtY2VudGVyXCIsXCJhbGlnbi1jb250ZW50LW1kLWJldHdlZW5cIjpcIlJvdy1tb2R1bGVfX2FsaWduLWNvbnRlbnQtbWQtYmV0d2VlblwiLFwiYWxpZ24tY29udGVudC1tZC1hcm91bmRcIjpcIlJvdy1tb2R1bGVfX2FsaWduLWNvbnRlbnQtbWQtYXJvdW5kXCIsXCJhbGlnbi1jb250ZW50LW1kLXN0cmV0Y2hcIjpcIlJvdy1tb2R1bGVfX2FsaWduLWNvbnRlbnQtbWQtc3RyZXRjaFwiLFwianVzdGlmeS1jb250ZW50LWxnLXN0YXJ0XCI6XCJSb3ctbW9kdWxlX19qdXN0aWZ5LWNvbnRlbnQtbGctc3RhcnRcIixcImp1c3RpZnktY29udGVudC1sZy1lbmRcIjpcIlJvdy1tb2R1bGVfX2p1c3RpZnktY29udGVudC1sZy1lbmRcIixcImp1c3RpZnktY29udGVudC1sZy1jZW50ZXJcIjpcIlJvdy1tb2R1bGVfX2p1c3RpZnktY29udGVudC1sZy1jZW50ZXJcIixcImp1c3RpZnktY29udGVudC1sZy1iZXR3ZWVuXCI6XCJSb3ctbW9kdWxlX19qdXN0aWZ5LWNvbnRlbnQtbGctYmV0d2VlblwiLFwianVzdGlmeS1jb250ZW50LWxnLWFyb3VuZFwiOlwiUm93LW1vZHVsZV9fanVzdGlmeS1jb250ZW50LWxnLWFyb3VuZFwiLFwianVzdGlmeS1jb250ZW50LWxnLWV2ZW5seVwiOlwiUm93LW1vZHVsZV9fanVzdGlmeS1jb250ZW50LWxnLWV2ZW5seVwiLFwiYWxpZ24taXRlbXMtbGctc3RhcnRcIjpcIlJvdy1tb2R1bGVfX2FsaWduLWl0ZW1zLWxnLXN0YXJ0XCIsXCJhbGlnbi1pdGVtcy1sZy1lbmRcIjpcIlJvdy1tb2R1bGVfX2FsaWduLWl0ZW1zLWxnLWVuZFwiLFwiYWxpZ24taXRlbXMtbGctY2VudGVyXCI6XCJSb3ctbW9kdWxlX19hbGlnbi1pdGVtcy1sZy1jZW50ZXJcIixcImFsaWduLWl0ZW1zLWxnLWJhc2VsaW5lXCI6XCJSb3ctbW9kdWxlX19hbGlnbi1pdGVtcy1sZy1iYXNlbGluZVwiLFwiYWxpZ24taXRlbXMtbGctc3RyZXRjaFwiOlwiUm93LW1vZHVsZV9fYWxpZ24taXRlbXMtbGctc3RyZXRjaFwiLFwiYWxpZ24tY29udGVudC1sZy1zdGFydFwiOlwiUm93LW1vZHVsZV9fYWxpZ24tY29udGVudC1sZy1zdGFydFwiLFwiYWxpZ24tY29udGVudC1sZy1lbmRcIjpcIlJvdy1tb2R1bGVfX2FsaWduLWNvbnRlbnQtbGctZW5kXCIsXCJhbGlnbi1jb250ZW50LWxnLWNlbnRlclwiOlwiUm93LW1vZHVsZV9fYWxpZ24tY29udGVudC1sZy1jZW50ZXJcIixcImFsaWduLWNvbnRlbnQtbGctYmV0d2VlblwiOlwiUm93LW1vZHVsZV9fYWxpZ24tY29udGVudC1sZy1iZXR3ZWVuXCIsXCJhbGlnbi1jb250ZW50LWxnLWFyb3VuZFwiOlwiUm93LW1vZHVsZV9fYWxpZ24tY29udGVudC1sZy1hcm91bmRcIixcImFsaWduLWNvbnRlbnQtbGctc3RyZXRjaFwiOlwiUm93LW1vZHVsZV9fYWxpZ24tY29udGVudC1sZy1zdHJldGNoXCIsXCJqdXN0aWZ5LWNvbnRlbnQteGwtc3RhcnRcIjpcIlJvdy1tb2R1bGVfX2p1c3RpZnktY29udGVudC14bC1zdGFydFwiLFwianVzdGlmeS1jb250ZW50LXhsLWVuZFwiOlwiUm93LW1vZHVsZV9fanVzdGlmeS1jb250ZW50LXhsLWVuZFwiLFwianVzdGlmeS1jb250ZW50LXhsLWNlbnRlclwiOlwiUm93LW1vZHVsZV9fanVzdGlmeS1jb250ZW50LXhsLWNlbnRlclwiLFwianVzdGlmeS1jb250ZW50LXhsLWJldHdlZW5cIjpcIlJvdy1tb2R1bGVfX2p1c3RpZnktY29udGVudC14bC1iZXR3ZWVuXCIsXCJqdXN0aWZ5LWNvbnRlbnQteGwtYXJvdW5kXCI6XCJSb3ctbW9kdWxlX19qdXN0aWZ5LWNvbnRlbnQteGwtYXJvdW5kXCIsXCJqdXN0aWZ5LWNvbnRlbnQteGwtZXZlbmx5XCI6XCJSb3ctbW9kdWxlX19qdXN0aWZ5LWNvbnRlbnQteGwtZXZlbmx5XCIsXCJhbGlnbi1pdGVtcy14bC1zdGFydFwiOlwiUm93LW1vZHVsZV9fYWxpZ24taXRlbXMteGwtc3RhcnRcIixcImFsaWduLWl0ZW1zLXhsLWVuZFwiOlwiUm93LW1vZHVsZV9fYWxpZ24taXRlbXMteGwtZW5kXCIsXCJhbGlnbi1pdGVtcy14bC1jZW50ZXJcIjpcIlJvdy1tb2R1bGVfX2FsaWduLWl0ZW1zLXhsLWNlbnRlclwiLFwiYWxpZ24taXRlbXMteGwtYmFzZWxpbmVcIjpcIlJvdy1tb2R1bGVfX2FsaWduLWl0ZW1zLXhsLWJhc2VsaW5lXCIsXCJhbGlnbi1pdGVtcy14bC1zdHJldGNoXCI6XCJSb3ctbW9kdWxlX19hbGlnbi1pdGVtcy14bC1zdHJldGNoXCIsXCJhbGlnbi1jb250ZW50LXhsLXN0YXJ0XCI6XCJSb3ctbW9kdWxlX19hbGlnbi1jb250ZW50LXhsLXN0YXJ0XCIsXCJhbGlnbi1jb250ZW50LXhsLWVuZFwiOlwiUm93LW1vZHVsZV9fYWxpZ24tY29udGVudC14bC1lbmRcIixcImFsaWduLWNvbnRlbnQteGwtY2VudGVyXCI6XCJSb3ctbW9kdWxlX19hbGlnbi1jb250ZW50LXhsLWNlbnRlclwiLFwiYWxpZ24tY29udGVudC14bC1iZXR3ZWVuXCI6XCJSb3ctbW9kdWxlX19hbGlnbi1jb250ZW50LXhsLWJldHdlZW5cIixcImFsaWduLWNvbnRlbnQteGwtYXJvdW5kXCI6XCJSb3ctbW9kdWxlX19hbGlnbi1jb250ZW50LXhsLWFyb3VuZFwiLFwiYWxpZ24tY29udGVudC14bC1zdHJldGNoXCI6XCJSb3ctbW9kdWxlX19hbGlnbi1jb250ZW50LXhsLXN0cmV0Y2hcIn07XG5cbnZhciBSb3cgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhSb3csIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFJvdyk7XG5cbiAgZnVuY3Rpb24gUm93KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBSb3cpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFJvdywgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgYWxpZ25JdGVtcyA9IF90aGlzJHByb3BzLmFsaWduSXRlbXMsXG4gICAgICAgICAgc21BbGlnbkl0ZW1zID0gX3RoaXMkcHJvcHMuc21BbGlnbkl0ZW1zLFxuICAgICAgICAgIG1kQWxpZ25JdGVtcyA9IF90aGlzJHByb3BzLm1kQWxpZ25JdGVtcyxcbiAgICAgICAgICBsZ0FsaWduSXRlbXMgPSBfdGhpcyRwcm9wcy5sZ0FsaWduSXRlbXMsXG4gICAgICAgICAgeGxBbGlnbkl0ZW1zID0gX3RoaXMkcHJvcHMueGxBbGlnbkl0ZW1zLFxuICAgICAgICAgIGp1c3RpZnlDb250ZW50ID0gX3RoaXMkcHJvcHMuanVzdGlmeUNvbnRlbnQsXG4gICAgICAgICAgc21KdXN0aWZ5Q29udGVudCA9IF90aGlzJHByb3BzLnNtSnVzdGlmeUNvbnRlbnQsXG4gICAgICAgICAgbWRKdXN0aWZ5Q29udGVudCA9IF90aGlzJHByb3BzLm1kSnVzdGlmeUNvbnRlbnQsXG4gICAgICAgICAgbGdKdXN0aWZ5Q29udGVudCA9IF90aGlzJHByb3BzLmxnSnVzdGlmeUNvbnRlbnQsXG4gICAgICAgICAgeGxKdXN0aWZ5Q29udGVudCA9IF90aGlzJHByb3BzLnhsSnVzdGlmeUNvbnRlbnQsXG4gICAgICAgICAgbm9HdXR0ZXJzID0gX3RoaXMkcHJvcHMubm9HdXR0ZXJzLFxuICAgICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBbXCJjbGFzc05hbWVcIiwgXCJjaGlsZHJlblwiLCBcImFsaWduSXRlbXNcIiwgXCJzbUFsaWduSXRlbXNcIiwgXCJtZEFsaWduSXRlbXNcIiwgXCJsZ0FsaWduSXRlbXNcIiwgXCJ4bEFsaWduSXRlbXNcIiwgXCJqdXN0aWZ5Q29udGVudFwiLCBcInNtSnVzdGlmeUNvbnRlbnRcIiwgXCJtZEp1c3RpZnlDb250ZW50XCIsIFwibGdKdXN0aWZ5Q29udGVudFwiLCBcInhsSnVzdGlmeUNvbnRlbnRcIiwgXCJub0d1dHRlcnNcIl0pO1xuXG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IFtzdHlsZXMkZ1sncm93J10sIGFsaWduSXRlbXMgJiYgc3R5bGVzJGdbXCJhbGlnbi1pdGVtcy1cIi5jb25jYXQoYWxpZ25JdGVtcyldLCBzbUFsaWduSXRlbXMgJiYgc3R5bGVzJGdbXCJhbGlnbi1pdGVtcy1zbS1cIi5jb25jYXQoc21BbGlnbkl0ZW1zKV0sIG1kQWxpZ25JdGVtcyAmJiBzdHlsZXMkZ1tcImFsaWduLWl0ZW1zLW1kLVwiLmNvbmNhdChtZEFsaWduSXRlbXMpXSwgbGdBbGlnbkl0ZW1zICYmIHN0eWxlcyRnW1wiYWxpZ24taXRlbXMtbGctXCIuY29uY2F0KGxnQWxpZ25JdGVtcyldLCB4bEFsaWduSXRlbXMgJiYgc3R5bGVzJGdbXCJhbGlnbi1pdGVtcy14bC1cIi5jb25jYXQoeGxBbGlnbkl0ZW1zKV0sIGp1c3RpZnlDb250ZW50ICYmIHN0eWxlcyRnW1wianVzdGlmeS1jb250ZW50LVwiLmNvbmNhdChqdXN0aWZ5Q29udGVudCldLCBzbUp1c3RpZnlDb250ZW50ICYmIHN0eWxlcyRnW1wianVzdGlmeS1jb250ZW50LXNtLVwiLmNvbmNhdChzbUp1c3RpZnlDb250ZW50KV0sIG1kSnVzdGlmeUNvbnRlbnQgJiYgc3R5bGVzJGdbXCJqdXN0aWZ5LWNvbnRlbnQtbWQtXCIuY29uY2F0KG1kSnVzdGlmeUNvbnRlbnQpXSwgbGdKdXN0aWZ5Q29udGVudCAmJiBzdHlsZXMkZ1tcImp1c3RpZnktY29udGVudC1sZy1cIi5jb25jYXQobGdKdXN0aWZ5Q29udGVudCldLCB4bEp1c3RpZnlDb250ZW50ICYmIHN0eWxlcyRnW1wianVzdGlmeS1jb250ZW50LXhsLVwiLmNvbmNhdCh4bEp1c3RpZnlDb250ZW50KV0sIG5vR3V0dGVycyAmJiBzdHlsZXMkZ1snbm8tZ3V0dGVycyddLCBjbGFzc05hbWVdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJylcbiAgICAgIH0sIHByb3BzKSwgY2hpbGRyZW4pO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBSb3c7XG59KFJlYWN0LlB1cmVDb21wb25lbnQpO1xuXG52YXIgc3R5bGVzJGggPSB7XCJkLW5vbmVcIjpcIlRleHRBcmVhLW1vZHVsZV9fZC1ub25lXCIsXCJkLWlubGluZVwiOlwiVGV4dEFyZWEtbW9kdWxlX19kLWlubGluZVwiLFwiZC1pbmxpbmUtYmxvY2tcIjpcIlRleHRBcmVhLW1vZHVsZV9fZC1pbmxpbmUtYmxvY2tcIixcImQtYmxvY2tcIjpcIlRleHRBcmVhLW1vZHVsZV9fZC1ibG9ja1wiLFwiZC10YWJsZVwiOlwiVGV4dEFyZWEtbW9kdWxlX19kLXRhYmxlXCIsXCJkLXRhYmxlLXJvd1wiOlwiVGV4dEFyZWEtbW9kdWxlX19kLXRhYmxlLXJvd1wiLFwiZC10YWJsZS1jZWxsXCI6XCJUZXh0QXJlYS1tb2R1bGVfX2QtdGFibGUtY2VsbFwiLFwiZC1mbGV4XCI6XCJUZXh0QXJlYS1tb2R1bGVfX2QtZmxleFwiLFwiZC1pbmxpbmUtZmxleFwiOlwiVGV4dEFyZWEtbW9kdWxlX19kLWlubGluZS1mbGV4XCIsXCJkLXNtLW5vbmVcIjpcIlRleHRBcmVhLW1vZHVsZV9fZC1zbS1ub25lXCIsXCJkLXNtLWlubGluZVwiOlwiVGV4dEFyZWEtbW9kdWxlX19kLXNtLWlubGluZVwiLFwiZC1zbS1pbmxpbmUtYmxvY2tcIjpcIlRleHRBcmVhLW1vZHVsZV9fZC1zbS1pbmxpbmUtYmxvY2tcIixcImQtc20tYmxvY2tcIjpcIlRleHRBcmVhLW1vZHVsZV9fZC1zbS1ibG9ja1wiLFwiZC1zbS10YWJsZVwiOlwiVGV4dEFyZWEtbW9kdWxlX19kLXNtLXRhYmxlXCIsXCJkLXNtLXRhYmxlLXJvd1wiOlwiVGV4dEFyZWEtbW9kdWxlX19kLXNtLXRhYmxlLXJvd1wiLFwiZC1zbS10YWJsZS1jZWxsXCI6XCJUZXh0QXJlYS1tb2R1bGVfX2Qtc20tdGFibGUtY2VsbFwiLFwiZC1zbS1mbGV4XCI6XCJUZXh0QXJlYS1tb2R1bGVfX2Qtc20tZmxleFwiLFwiZC1zbS1pbmxpbmUtZmxleFwiOlwiVGV4dEFyZWEtbW9kdWxlX19kLXNtLWlubGluZS1mbGV4XCIsXCJkLW1kLW5vbmVcIjpcIlRleHRBcmVhLW1vZHVsZV9fZC1tZC1ub25lXCIsXCJkLW1kLWlubGluZVwiOlwiVGV4dEFyZWEtbW9kdWxlX19kLW1kLWlubGluZVwiLFwiZC1tZC1pbmxpbmUtYmxvY2tcIjpcIlRleHRBcmVhLW1vZHVsZV9fZC1tZC1pbmxpbmUtYmxvY2tcIixcImQtbWQtYmxvY2tcIjpcIlRleHRBcmVhLW1vZHVsZV9fZC1tZC1ibG9ja1wiLFwiZC1tZC10YWJsZVwiOlwiVGV4dEFyZWEtbW9kdWxlX19kLW1kLXRhYmxlXCIsXCJkLW1kLXRhYmxlLXJvd1wiOlwiVGV4dEFyZWEtbW9kdWxlX19kLW1kLXRhYmxlLXJvd1wiLFwiZC1tZC10YWJsZS1jZWxsXCI6XCJUZXh0QXJlYS1tb2R1bGVfX2QtbWQtdGFibGUtY2VsbFwiLFwiZC1tZC1mbGV4XCI6XCJUZXh0QXJlYS1tb2R1bGVfX2QtbWQtZmxleFwiLFwiZC1tZC1pbmxpbmUtZmxleFwiOlwiVGV4dEFyZWEtbW9kdWxlX19kLW1kLWlubGluZS1mbGV4XCIsXCJkLWxnLW5vbmVcIjpcIlRleHRBcmVhLW1vZHVsZV9fZC1sZy1ub25lXCIsXCJkLWxnLWlubGluZVwiOlwiVGV4dEFyZWEtbW9kdWxlX19kLWxnLWlubGluZVwiLFwiZC1sZy1pbmxpbmUtYmxvY2tcIjpcIlRleHRBcmVhLW1vZHVsZV9fZC1sZy1pbmxpbmUtYmxvY2tcIixcImQtbGctYmxvY2tcIjpcIlRleHRBcmVhLW1vZHVsZV9fZC1sZy1ibG9ja1wiLFwiZC1sZy10YWJsZVwiOlwiVGV4dEFyZWEtbW9kdWxlX19kLWxnLXRhYmxlXCIsXCJkLWxnLXRhYmxlLXJvd1wiOlwiVGV4dEFyZWEtbW9kdWxlX19kLWxnLXRhYmxlLXJvd1wiLFwiZC1sZy10YWJsZS1jZWxsXCI6XCJUZXh0QXJlYS1tb2R1bGVfX2QtbGctdGFibGUtY2VsbFwiLFwiZC1sZy1mbGV4XCI6XCJUZXh0QXJlYS1tb2R1bGVfX2QtbGctZmxleFwiLFwiZC1sZy1pbmxpbmUtZmxleFwiOlwiVGV4dEFyZWEtbW9kdWxlX19kLWxnLWlubGluZS1mbGV4XCIsXCJkLXhsLW5vbmVcIjpcIlRleHRBcmVhLW1vZHVsZV9fZC14bC1ub25lXCIsXCJkLXhsLWlubGluZVwiOlwiVGV4dEFyZWEtbW9kdWxlX19kLXhsLWlubGluZVwiLFwiZC14bC1pbmxpbmUtYmxvY2tcIjpcIlRleHRBcmVhLW1vZHVsZV9fZC14bC1pbmxpbmUtYmxvY2tcIixcImQteGwtYmxvY2tcIjpcIlRleHRBcmVhLW1vZHVsZV9fZC14bC1ibG9ja1wiLFwiZC14bC10YWJsZVwiOlwiVGV4dEFyZWEtbW9kdWxlX19kLXhsLXRhYmxlXCIsXCJkLXhsLXRhYmxlLXJvd1wiOlwiVGV4dEFyZWEtbW9kdWxlX19kLXhsLXRhYmxlLXJvd1wiLFwiZC14bC10YWJsZS1jZWxsXCI6XCJUZXh0QXJlYS1tb2R1bGVfX2QteGwtdGFibGUtY2VsbFwiLFwiZC14bC1mbGV4XCI6XCJUZXh0QXJlYS1tb2R1bGVfX2QteGwtZmxleFwiLFwiZC14bC1pbmxpbmUtZmxleFwiOlwiVGV4dEFyZWEtbW9kdWxlX19kLXhsLWlubGluZS1mbGV4XCIsXCJkLXByaW50LW5vbmVcIjpcIlRleHRBcmVhLW1vZHVsZV9fZC1wcmludC1ub25lXCIsXCJkLXByaW50LWlubGluZVwiOlwiVGV4dEFyZWEtbW9kdWxlX19kLXByaW50LWlubGluZVwiLFwiZC1wcmludC1pbmxpbmUtYmxvY2tcIjpcIlRleHRBcmVhLW1vZHVsZV9fZC1wcmludC1pbmxpbmUtYmxvY2tcIixcImQtcHJpbnQtYmxvY2tcIjpcIlRleHRBcmVhLW1vZHVsZV9fZC1wcmludC1ibG9ja1wiLFwiZC1wcmludC10YWJsZVwiOlwiVGV4dEFyZWEtbW9kdWxlX19kLXByaW50LXRhYmxlXCIsXCJkLXByaW50LXRhYmxlLXJvd1wiOlwiVGV4dEFyZWEtbW9kdWxlX19kLXByaW50LXRhYmxlLXJvd1wiLFwiZC1wcmludC10YWJsZS1jZWxsXCI6XCJUZXh0QXJlYS1tb2R1bGVfX2QtcHJpbnQtdGFibGUtY2VsbFwiLFwiZC1wcmludC1mbGV4XCI6XCJUZXh0QXJlYS1tb2R1bGVfX2QtcHJpbnQtZmxleFwiLFwiZC1wcmludC1pbmxpbmUtZmxleFwiOlwiVGV4dEFyZWEtbW9kdWxlX19kLXByaW50LWlubGluZS1mbGV4XCIsXCJ2ZGItdGV4dGFyZWEtY29udGFpbmVyXCI6XCJUZXh0QXJlYS1tb2R1bGVfX3ZkYi10ZXh0YXJlYS1jb250YWluZXJcIixcInZkYi10ZXh0YXJlYVwiOlwiVGV4dEFyZWEtbW9kdWxlX192ZGItdGV4dGFyZWFcIixcInZkYi10ZXh0YXJlYS1pY29uXCI6XCJUZXh0QXJlYS1tb2R1bGVfX3ZkYi10ZXh0YXJlYS1pY29uXCIsXCJ2ZGItdGV4dGFyZWEtaWNvbi1mb2N1c1wiOlwiVGV4dEFyZWEtbW9kdWxlX192ZGItdGV4dGFyZWEtaWNvbi1mb2N1c1wifTtcblxudmFyIFRleHRBcmVhID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoVGV4dEFyZWEsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFRleHRBcmVhKTtcblxuICBmdW5jdGlvbiBUZXh0QXJlYShwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUZXh0QXJlYSk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJlbWl0Q2hhbmdlRGVib3VuY2VkXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3RhdGVcIiwge1xuICAgICAgaXNGb2N1c2VkOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZUNoYW5nZVwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgX3RoaXMuZW1pdENoYW5nZURlYm91bmNlZChlLnRhcmdldC52YWx1ZSk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkNoYW5nZSkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkNoYW5nZShlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvblRleHRBcmVhRm9jdXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc0ZvY3VzZWQ6IHRydWVcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uVGV4dEFyZWFCbHVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNGb2N1c2VkOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfdGhpcy5lbWl0Q2hhbmdlRGVib3VuY2VkID0gZGJvdW5jZShfdGhpcy5lbWl0Q2hhbmdlLCBfdGhpcy5wcm9wcy5kZWJvdW5jZVRpbWUgfHwgMjUwKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoVGV4dEFyZWEsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtaWdub3JlXG4gICAgICAvLyBAdHMtaWdub3JlIHRoZSBkZWJvdW5jZSBmdW5jdGlvbiBmcm9tIGxvZGFzaCBpc24ndCBjb3JyZWN0bHkgdHlwZWRcbiAgICAgIHRoaXMuZW1pdENoYW5nZURlYm91bmNlZC5jYW5jZWwoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBpc0ZvY3VzZWQgPSB0aGlzLnN0YXRlLmlzRm9jdXNlZDtcblxuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgICAgZGVib3VuY2VUaW1lID0gX3RoaXMkcHJvcHMuZGVib3VuY2VUaW1lLFxuICAgICAgICAgIG9uRGVib3VuY2VkQ2hhbmdlID0gX3RoaXMkcHJvcHMub25EZWJvdW5jZWRDaGFuZ2UsXG4gICAgICAgICAgaWNvbiA9IF90aGlzJHByb3BzLmljb24sXG4gICAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIFtcImNsYXNzTmFtZVwiLCBcImRlYm91bmNlVGltZVwiLCBcIm9uRGVib3VuY2VkQ2hhbmdlXCIsIFwiaWNvblwiXSk7XG5cbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogW1wiXCIuY29uY2F0KGNsYXNzTmFtZSB8fCAnJyksIHN0eWxlcyRoWyd2ZGItdGV4dGFyZWEtY29udGFpbmVyJ11dLmpvaW4oJyAnKVxuICAgICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ0ZXh0YXJlYVwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogc3R5bGVzJGhbJ3ZkYi10ZXh0YXJlYSddXG4gICAgICB9LCBwcm9wcywge1xuICAgICAgICBvbkNoYW5nZTogdGhpcy5oYW5kbGVDaGFuZ2UsXG4gICAgICAgIG9uRm9jdXM6IHRoaXMub25UZXh0QXJlYUZvY3VzLFxuICAgICAgICBvbkJsdXI6IHRoaXMub25UZXh0QXJlYUJsdXJcbiAgICAgIH0pKSwgaWNvbiA/IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEljb24sIHtcbiAgICAgICAgbmFtZTogaWNvbixcbiAgICAgICAgY2xhc3NOYW1lOiBpc0ZvY3VzZWQgPyBzdHlsZXMkaFsndmRiLXRleHRhcmVhLWljb24tZm9jdXMnXSA6IHN0eWxlcyRoWyd2ZGItdGV4dGFyZWEtaWNvbiddLFxuICAgICAgICBmb250U2l6ZTogXCIxNlwiXG4gICAgICB9KSA6IG51bGwpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJlbWl0Q2hhbmdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGVtaXRDaGFuZ2UodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLm9uRGVib3VuY2VkQ2hhbmdlKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25EZWJvdW5jZWRDaGFuZ2UodmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBUZXh0QXJlYTtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbnZhciBzdHlsZXMkaSA9IHtcImQtbm9uZVwiOlwiVG9nZ2xlLW1vZHVsZV9fZC1ub25lXCIsXCJkLWlubGluZVwiOlwiVG9nZ2xlLW1vZHVsZV9fZC1pbmxpbmVcIixcImQtaW5saW5lLWJsb2NrXCI6XCJUb2dnbGUtbW9kdWxlX19kLWlubGluZS1ibG9ja1wiLFwiZC1ibG9ja1wiOlwiVG9nZ2xlLW1vZHVsZV9fZC1ibG9ja1wiLFwiZC10YWJsZVwiOlwiVG9nZ2xlLW1vZHVsZV9fZC10YWJsZVwiLFwiZC10YWJsZS1yb3dcIjpcIlRvZ2dsZS1tb2R1bGVfX2QtdGFibGUtcm93XCIsXCJkLXRhYmxlLWNlbGxcIjpcIlRvZ2dsZS1tb2R1bGVfX2QtdGFibGUtY2VsbFwiLFwiZC1mbGV4XCI6XCJUb2dnbGUtbW9kdWxlX19kLWZsZXhcIixcImQtaW5saW5lLWZsZXhcIjpcIlRvZ2dsZS1tb2R1bGVfX2QtaW5saW5lLWZsZXhcIixcImQtc20tbm9uZVwiOlwiVG9nZ2xlLW1vZHVsZV9fZC1zbS1ub25lXCIsXCJkLXNtLWlubGluZVwiOlwiVG9nZ2xlLW1vZHVsZV9fZC1zbS1pbmxpbmVcIixcImQtc20taW5saW5lLWJsb2NrXCI6XCJUb2dnbGUtbW9kdWxlX19kLXNtLWlubGluZS1ibG9ja1wiLFwiZC1zbS1ibG9ja1wiOlwiVG9nZ2xlLW1vZHVsZV9fZC1zbS1ibG9ja1wiLFwiZC1zbS10YWJsZVwiOlwiVG9nZ2xlLW1vZHVsZV9fZC1zbS10YWJsZVwiLFwiZC1zbS10YWJsZS1yb3dcIjpcIlRvZ2dsZS1tb2R1bGVfX2Qtc20tdGFibGUtcm93XCIsXCJkLXNtLXRhYmxlLWNlbGxcIjpcIlRvZ2dsZS1tb2R1bGVfX2Qtc20tdGFibGUtY2VsbFwiLFwiZC1zbS1mbGV4XCI6XCJUb2dnbGUtbW9kdWxlX19kLXNtLWZsZXhcIixcImQtc20taW5saW5lLWZsZXhcIjpcIlRvZ2dsZS1tb2R1bGVfX2Qtc20taW5saW5lLWZsZXhcIixcImQtbWQtbm9uZVwiOlwiVG9nZ2xlLW1vZHVsZV9fZC1tZC1ub25lXCIsXCJkLW1kLWlubGluZVwiOlwiVG9nZ2xlLW1vZHVsZV9fZC1tZC1pbmxpbmVcIixcImQtbWQtaW5saW5lLWJsb2NrXCI6XCJUb2dnbGUtbW9kdWxlX19kLW1kLWlubGluZS1ibG9ja1wiLFwiZC1tZC1ibG9ja1wiOlwiVG9nZ2xlLW1vZHVsZV9fZC1tZC1ibG9ja1wiLFwiZC1tZC10YWJsZVwiOlwiVG9nZ2xlLW1vZHVsZV9fZC1tZC10YWJsZVwiLFwiZC1tZC10YWJsZS1yb3dcIjpcIlRvZ2dsZS1tb2R1bGVfX2QtbWQtdGFibGUtcm93XCIsXCJkLW1kLXRhYmxlLWNlbGxcIjpcIlRvZ2dsZS1tb2R1bGVfX2QtbWQtdGFibGUtY2VsbFwiLFwiZC1tZC1mbGV4XCI6XCJUb2dnbGUtbW9kdWxlX19kLW1kLWZsZXhcIixcImQtbWQtaW5saW5lLWZsZXhcIjpcIlRvZ2dsZS1tb2R1bGVfX2QtbWQtaW5saW5lLWZsZXhcIixcImQtbGctbm9uZVwiOlwiVG9nZ2xlLW1vZHVsZV9fZC1sZy1ub25lXCIsXCJkLWxnLWlubGluZVwiOlwiVG9nZ2xlLW1vZHVsZV9fZC1sZy1pbmxpbmVcIixcImQtbGctaW5saW5lLWJsb2NrXCI6XCJUb2dnbGUtbW9kdWxlX19kLWxnLWlubGluZS1ibG9ja1wiLFwiZC1sZy1ibG9ja1wiOlwiVG9nZ2xlLW1vZHVsZV9fZC1sZy1ibG9ja1wiLFwiZC1sZy10YWJsZVwiOlwiVG9nZ2xlLW1vZHVsZV9fZC1sZy10YWJsZVwiLFwiZC1sZy10YWJsZS1yb3dcIjpcIlRvZ2dsZS1tb2R1bGVfX2QtbGctdGFibGUtcm93XCIsXCJkLWxnLXRhYmxlLWNlbGxcIjpcIlRvZ2dsZS1tb2R1bGVfX2QtbGctdGFibGUtY2VsbFwiLFwiZC1sZy1mbGV4XCI6XCJUb2dnbGUtbW9kdWxlX19kLWxnLWZsZXhcIixcImQtbGctaW5saW5lLWZsZXhcIjpcIlRvZ2dsZS1tb2R1bGVfX2QtbGctaW5saW5lLWZsZXhcIixcImQteGwtbm9uZVwiOlwiVG9nZ2xlLW1vZHVsZV9fZC14bC1ub25lXCIsXCJkLXhsLWlubGluZVwiOlwiVG9nZ2xlLW1vZHVsZV9fZC14bC1pbmxpbmVcIixcImQteGwtaW5saW5lLWJsb2NrXCI6XCJUb2dnbGUtbW9kdWxlX19kLXhsLWlubGluZS1ibG9ja1wiLFwiZC14bC1ibG9ja1wiOlwiVG9nZ2xlLW1vZHVsZV9fZC14bC1ibG9ja1wiLFwiZC14bC10YWJsZVwiOlwiVG9nZ2xlLW1vZHVsZV9fZC14bC10YWJsZVwiLFwiZC14bC10YWJsZS1yb3dcIjpcIlRvZ2dsZS1tb2R1bGVfX2QteGwtdGFibGUtcm93XCIsXCJkLXhsLXRhYmxlLWNlbGxcIjpcIlRvZ2dsZS1tb2R1bGVfX2QteGwtdGFibGUtY2VsbFwiLFwiZC14bC1mbGV4XCI6XCJUb2dnbGUtbW9kdWxlX19kLXhsLWZsZXhcIixcImQteGwtaW5saW5lLWZsZXhcIjpcIlRvZ2dsZS1tb2R1bGVfX2QteGwtaW5saW5lLWZsZXhcIixcImQtcHJpbnQtbm9uZVwiOlwiVG9nZ2xlLW1vZHVsZV9fZC1wcmludC1ub25lXCIsXCJkLXByaW50LWlubGluZVwiOlwiVG9nZ2xlLW1vZHVsZV9fZC1wcmludC1pbmxpbmVcIixcImQtcHJpbnQtaW5saW5lLWJsb2NrXCI6XCJUb2dnbGUtbW9kdWxlX19kLXByaW50LWlubGluZS1ibG9ja1wiLFwiZC1wcmludC1ibG9ja1wiOlwiVG9nZ2xlLW1vZHVsZV9fZC1wcmludC1ibG9ja1wiLFwiZC1wcmludC10YWJsZVwiOlwiVG9nZ2xlLW1vZHVsZV9fZC1wcmludC10YWJsZVwiLFwiZC1wcmludC10YWJsZS1yb3dcIjpcIlRvZ2dsZS1tb2R1bGVfX2QtcHJpbnQtdGFibGUtcm93XCIsXCJkLXByaW50LXRhYmxlLWNlbGxcIjpcIlRvZ2dsZS1tb2R1bGVfX2QtcHJpbnQtdGFibGUtY2VsbFwiLFwiZC1wcmludC1mbGV4XCI6XCJUb2dnbGUtbW9kdWxlX19kLXByaW50LWZsZXhcIixcImQtcHJpbnQtaW5saW5lLWZsZXhcIjpcIlRvZ2dsZS1tb2R1bGVfX2QtcHJpbnQtaW5saW5lLWZsZXhcIixcInN3aXRjaFwiOlwiVG9nZ2xlLW1vZHVsZV9fc3dpdGNoXCIsXCJzd2l0Y2gtaW5wdXRcIjpcIlRvZ2dsZS1tb2R1bGVfX3N3aXRjaC1pbnB1dFwiLFwic3dpdGNoLXdyYXBwZXJcIjpcIlRvZ2dsZS1tb2R1bGVfX3N3aXRjaC13cmFwcGVyXCIsXCJzd2l0Y2gtbGFiZWwtLW9uXCI6XCJUb2dnbGUtbW9kdWxlX19zd2l0Y2gtbGFiZWwtLW9uXCIsXCJzd2l0Y2gtdG9nZ2xlXCI6XCJUb2dnbGUtbW9kdWxlX19zd2l0Y2gtdG9nZ2xlXCIsXCJzd2l0Y2gtbGFiZWxcIjpcIlRvZ2dsZS1tb2R1bGVfX3N3aXRjaC1sYWJlbFwiLFwic3dpdGNoLWxhYmVsLS1vZmZcIjpcIlRvZ2dsZS1tb2R1bGVfX3N3aXRjaC1sYWJlbC0tb2ZmXCIsXCJzd2l0Y2gtaWNvblwiOlwiVG9nZ2xlLW1vZHVsZV9fc3dpdGNoLWljb25cIixcInN3aXRjaC1pY29uLXJpZ2h0XCI6XCJUb2dnbGUtbW9kdWxlX19zd2l0Y2gtaWNvbi1yaWdodFwiLFwiZGFya1wiOlwiVG9nZ2xlLW1vZHVsZV9fZGFya1wiLFwic3dpdGNoQ2hlY2tlZFwiOlwiVG9nZ2xlLW1vZHVsZV9fc3dpdGNoQ2hlY2tlZFwifTtcblxudmFyIFRvZ2dsZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoVG9nZ2xlLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFRvZ2dsZSk7XG5cbiAgZnVuY3Rpb24gVG9nZ2xlKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRvZ2dsZSk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGNoZWNrZWQ6ICEhcHJvcHMuY2hlY2tlZFxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFRvZ2dsZSwgW3tcbiAgICBrZXk6IFwiaGFuZGxlQ2hhbmdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUNoYW5nZShjaGVja2VkKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgY2hlY2tlZDogY2hlY2tlZFxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGNoZWNrZWQpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgbmFtZSA9IF90aGlzJHByb3BzLm5hbWUsXG4gICAgICAgICAgY3VzdG9tSWNvbnMgPSBfdGhpcyRwcm9wcy5jdXN0b21JY29ucyxcbiAgICAgICAgICBzZXRDaGVja2VkQnlQYXJlbnQgPSBfdGhpcyRwcm9wcy5zZXRDaGVja2VkQnlQYXJlbnQsXG4gICAgICAgICAgdGhlbWUgPSBfdGhpcyRwcm9wcy50aGVtZSxcbiAgICAgICAgICBpY29uU2l6ZSA9IF90aGlzJHByb3BzLmljb25TaXplLFxuICAgICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBbXCJuYW1lXCIsIFwiY3VzdG9tSWNvbnNcIiwgXCJzZXRDaGVja2VkQnlQYXJlbnRcIiwgXCJ0aGVtZVwiLCBcImljb25TaXplXCJdKTtcblxuICAgICAgdmFyIF9yZWYgPSAhc2V0Q2hlY2tlZEJ5UGFyZW50ID8gdGhpcy5zdGF0ZSA6IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2hlY2tlZCA9IF9yZWYuY2hlY2tlZDtcblxuICAgICAgdmFyIHN3aXRjaENsYXNzTmFtZSA9IGNoZWNrZWQgPyBzdHlsZXMkaVsnc3dpdGNoQ2hlY2tlZCddIDogJyc7XG4gICAgICB2YXIgaWNvblZhcmlhbnQ7XG5cbiAgICAgIGlmICh0aGVtZSA9PT0gJ2RhcmsnKSB7XG4gICAgICAgIGljb25WYXJpYW50ID0gY2hlY2tlZCA/IDEgOiAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWNvblZhcmlhbnQgPSAyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICBjbGFzc05hbWU6IFtzdHlsZXMkaVsnc3dpdGNoJ10sIHN0eWxlcyRpW3RoZW1lXSwgc3dpdGNoQ2xhc3NOYW1lXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpXG4gICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgICAgICB0eXBlOiBcImNoZWNrYm94XCIsXG4gICAgICAgIGlkOiBuYW1lLFxuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICBjaGVja2VkOiBjaGVja2VkLFxuICAgICAgICBjbGFzc05hbWU6IHN0eWxlcyRpWydzd2l0Y2gtaW5wdXQnXSxcbiAgICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKGUpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLmhhbmRsZUNoYW5nZShlLnRhcmdldC5jaGVja2VkKTtcbiAgICAgICAgfVxuICAgICAgfSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxhYmVsXCIsIHtcbiAgICAgICAgaHRtbEZvcjogbmFtZSxcbiAgICAgICAgY2xhc3NOYW1lOiBzdHlsZXMkaVsnc3dpdGNoLXdyYXBwZXInXVxuICAgICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICBjbGFzc05hbWU6IHN0eWxlcyRpWydzd2l0Y2gtdG9nZ2xlJ11cbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogW3N0eWxlcyRpWydzd2l0Y2gtbGFiZWwnXSwgc3R5bGVzJGlbJ3N3aXRjaC1sYWJlbC0tb24nXV0uam9pbignICcpXG4gICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJY29uLCB7XG4gICAgICAgIGNsYXNzTmFtZTogc3R5bGVzJGlbJ3N3aXRjaC1pY29uJ10sXG4gICAgICAgIG5hbWU6IGN1c3RvbUljb25zICYmIGN1c3RvbUljb25zLmxlZnQgfHwgJ2NoZWNrJyxcbiAgICAgICAgdmFyaWFudDogaWNvblZhcmlhbnQsXG4gICAgICAgIGZvbnRTaXplOiBpY29uU2l6ZVxuICAgICAgfSksIGN1c3RvbUljb25zICYmIGN1c3RvbUljb25zLnJpZ2h0ICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEljb24sIHtcbiAgICAgICAgY2xhc3NOYW1lOiBzdHlsZXMkaVsnc3dpdGNoLWljb24tcmlnaHQnXSxcbiAgICAgICAgbmFtZTogY3VzdG9tSWNvbnMucmlnaHQsXG4gICAgICAgIHZhcmlhbnQ6IGljb25WYXJpYW50LFxuICAgICAgICBmb250U2l6ZTogaWNvblNpemVcbiAgICAgIH0pKSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBUb2dnbGU7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShUb2dnbGUsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgdGhlbWU6ICdsaWdodCcsXG4gIGljb25TaXplOiAnMTFweCdcbn0pO1xuXG52YXIgc3R5bGVzJGogPSB7XCJkLW5vbmVcIjpcIlByZXNzYWJsZS1tb2R1bGVfX2Qtbm9uZVwiLFwiZC1pbmxpbmVcIjpcIlByZXNzYWJsZS1tb2R1bGVfX2QtaW5saW5lXCIsXCJkLWlubGluZS1ibG9ja1wiOlwiUHJlc3NhYmxlLW1vZHVsZV9fZC1pbmxpbmUtYmxvY2tcIixcImQtYmxvY2tcIjpcIlByZXNzYWJsZS1tb2R1bGVfX2QtYmxvY2tcIixcImQtdGFibGVcIjpcIlByZXNzYWJsZS1tb2R1bGVfX2QtdGFibGVcIixcImQtdGFibGUtcm93XCI6XCJQcmVzc2FibGUtbW9kdWxlX19kLXRhYmxlLXJvd1wiLFwiZC10YWJsZS1jZWxsXCI6XCJQcmVzc2FibGUtbW9kdWxlX19kLXRhYmxlLWNlbGxcIixcImQtZmxleFwiOlwiUHJlc3NhYmxlLW1vZHVsZV9fZC1mbGV4XCIsXCJkLWlubGluZS1mbGV4XCI6XCJQcmVzc2FibGUtbW9kdWxlX19kLWlubGluZS1mbGV4XCIsXCJkLXNtLW5vbmVcIjpcIlByZXNzYWJsZS1tb2R1bGVfX2Qtc20tbm9uZVwiLFwiZC1zbS1pbmxpbmVcIjpcIlByZXNzYWJsZS1tb2R1bGVfX2Qtc20taW5saW5lXCIsXCJkLXNtLWlubGluZS1ibG9ja1wiOlwiUHJlc3NhYmxlLW1vZHVsZV9fZC1zbS1pbmxpbmUtYmxvY2tcIixcImQtc20tYmxvY2tcIjpcIlByZXNzYWJsZS1tb2R1bGVfX2Qtc20tYmxvY2tcIixcImQtc20tdGFibGVcIjpcIlByZXNzYWJsZS1tb2R1bGVfX2Qtc20tdGFibGVcIixcImQtc20tdGFibGUtcm93XCI6XCJQcmVzc2FibGUtbW9kdWxlX19kLXNtLXRhYmxlLXJvd1wiLFwiZC1zbS10YWJsZS1jZWxsXCI6XCJQcmVzc2FibGUtbW9kdWxlX19kLXNtLXRhYmxlLWNlbGxcIixcImQtc20tZmxleFwiOlwiUHJlc3NhYmxlLW1vZHVsZV9fZC1zbS1mbGV4XCIsXCJkLXNtLWlubGluZS1mbGV4XCI6XCJQcmVzc2FibGUtbW9kdWxlX19kLXNtLWlubGluZS1mbGV4XCIsXCJkLW1kLW5vbmVcIjpcIlByZXNzYWJsZS1tb2R1bGVfX2QtbWQtbm9uZVwiLFwiZC1tZC1pbmxpbmVcIjpcIlByZXNzYWJsZS1tb2R1bGVfX2QtbWQtaW5saW5lXCIsXCJkLW1kLWlubGluZS1ibG9ja1wiOlwiUHJlc3NhYmxlLW1vZHVsZV9fZC1tZC1pbmxpbmUtYmxvY2tcIixcImQtbWQtYmxvY2tcIjpcIlByZXNzYWJsZS1tb2R1bGVfX2QtbWQtYmxvY2tcIixcImQtbWQtdGFibGVcIjpcIlByZXNzYWJsZS1tb2R1bGVfX2QtbWQtdGFibGVcIixcImQtbWQtdGFibGUtcm93XCI6XCJQcmVzc2FibGUtbW9kdWxlX19kLW1kLXRhYmxlLXJvd1wiLFwiZC1tZC10YWJsZS1jZWxsXCI6XCJQcmVzc2FibGUtbW9kdWxlX19kLW1kLXRhYmxlLWNlbGxcIixcImQtbWQtZmxleFwiOlwiUHJlc3NhYmxlLW1vZHVsZV9fZC1tZC1mbGV4XCIsXCJkLW1kLWlubGluZS1mbGV4XCI6XCJQcmVzc2FibGUtbW9kdWxlX19kLW1kLWlubGluZS1mbGV4XCIsXCJkLWxnLW5vbmVcIjpcIlByZXNzYWJsZS1tb2R1bGVfX2QtbGctbm9uZVwiLFwiZC1sZy1pbmxpbmVcIjpcIlByZXNzYWJsZS1tb2R1bGVfX2QtbGctaW5saW5lXCIsXCJkLWxnLWlubGluZS1ibG9ja1wiOlwiUHJlc3NhYmxlLW1vZHVsZV9fZC1sZy1pbmxpbmUtYmxvY2tcIixcImQtbGctYmxvY2tcIjpcIlByZXNzYWJsZS1tb2R1bGVfX2QtbGctYmxvY2tcIixcImQtbGctdGFibGVcIjpcIlByZXNzYWJsZS1tb2R1bGVfX2QtbGctdGFibGVcIixcImQtbGctdGFibGUtcm93XCI6XCJQcmVzc2FibGUtbW9kdWxlX19kLWxnLXRhYmxlLXJvd1wiLFwiZC1sZy10YWJsZS1jZWxsXCI6XCJQcmVzc2FibGUtbW9kdWxlX19kLWxnLXRhYmxlLWNlbGxcIixcImQtbGctZmxleFwiOlwiUHJlc3NhYmxlLW1vZHVsZV9fZC1sZy1mbGV4XCIsXCJkLWxnLWlubGluZS1mbGV4XCI6XCJQcmVzc2FibGUtbW9kdWxlX19kLWxnLWlubGluZS1mbGV4XCIsXCJkLXhsLW5vbmVcIjpcIlByZXNzYWJsZS1tb2R1bGVfX2QteGwtbm9uZVwiLFwiZC14bC1pbmxpbmVcIjpcIlByZXNzYWJsZS1tb2R1bGVfX2QteGwtaW5saW5lXCIsXCJkLXhsLWlubGluZS1ibG9ja1wiOlwiUHJlc3NhYmxlLW1vZHVsZV9fZC14bC1pbmxpbmUtYmxvY2tcIixcImQteGwtYmxvY2tcIjpcIlByZXNzYWJsZS1tb2R1bGVfX2QteGwtYmxvY2tcIixcImQteGwtdGFibGVcIjpcIlByZXNzYWJsZS1tb2R1bGVfX2QteGwtdGFibGVcIixcImQteGwtdGFibGUtcm93XCI6XCJQcmVzc2FibGUtbW9kdWxlX19kLXhsLXRhYmxlLXJvd1wiLFwiZC14bC10YWJsZS1jZWxsXCI6XCJQcmVzc2FibGUtbW9kdWxlX19kLXhsLXRhYmxlLWNlbGxcIixcImQteGwtZmxleFwiOlwiUHJlc3NhYmxlLW1vZHVsZV9fZC14bC1mbGV4XCIsXCJkLXhsLWlubGluZS1mbGV4XCI6XCJQcmVzc2FibGUtbW9kdWxlX19kLXhsLWlubGluZS1mbGV4XCIsXCJkLXByaW50LW5vbmVcIjpcIlByZXNzYWJsZS1tb2R1bGVfX2QtcHJpbnQtbm9uZVwiLFwiZC1wcmludC1pbmxpbmVcIjpcIlByZXNzYWJsZS1tb2R1bGVfX2QtcHJpbnQtaW5saW5lXCIsXCJkLXByaW50LWlubGluZS1ibG9ja1wiOlwiUHJlc3NhYmxlLW1vZHVsZV9fZC1wcmludC1pbmxpbmUtYmxvY2tcIixcImQtcHJpbnQtYmxvY2tcIjpcIlByZXNzYWJsZS1tb2R1bGVfX2QtcHJpbnQtYmxvY2tcIixcImQtcHJpbnQtdGFibGVcIjpcIlByZXNzYWJsZS1tb2R1bGVfX2QtcHJpbnQtdGFibGVcIixcImQtcHJpbnQtdGFibGUtcm93XCI6XCJQcmVzc2FibGUtbW9kdWxlX19kLXByaW50LXRhYmxlLXJvd1wiLFwiZC1wcmludC10YWJsZS1jZWxsXCI6XCJQcmVzc2FibGUtbW9kdWxlX19kLXByaW50LXRhYmxlLWNlbGxcIixcImQtcHJpbnQtZmxleFwiOlwiUHJlc3NhYmxlLW1vZHVsZV9fZC1wcmludC1mbGV4XCIsXCJkLXByaW50LWlubGluZS1mbGV4XCI6XCJQcmVzc2FibGUtbW9kdWxlX19kLXByaW50LWlubGluZS1mbGV4XCIsXCJidXR0b25cIjpcIlByZXNzYWJsZS1tb2R1bGVfX2J1dHRvblwiLFwiYnV0dG9uLXNwZWFkSWNvblwiOlwiUHJlc3NhYmxlLW1vZHVsZV9fYnV0dG9uLXNwZWFkSWNvblwiLFwiYnV0dG9uLXByaW1hcnlcIjpcIlByZXNzYWJsZS1tb2R1bGVfX2J1dHRvbi1wcmltYXJ5XCIsXCJpY29uLXZhcmlhbnQtMVwiOlwiUHJlc3NhYmxlLW1vZHVsZV9faWNvbi12YXJpYW50LTFcIixcImljb24tdmFyaWFudC0yXCI6XCJQcmVzc2FibGUtbW9kdWxlX19pY29uLXZhcmlhbnQtMlwiLFwiaWNvbi12YXJpYW50LTNcIjpcIlByZXNzYWJsZS1tb2R1bGVfX2ljb24tdmFyaWFudC0zXCIsXCJpY29uLXZhcmlhbnQtNFwiOlwiUHJlc3NhYmxlLW1vZHVsZV9faWNvbi12YXJpYW50LTRcIixcImJ1dHRvbi1hbHRlcm5hdGVcIjpcIlByZXNzYWJsZS1tb2R1bGVfX2J1dHRvbi1hbHRlcm5hdGVcIixcImJ1dHRvbi1vdXRsaW5lXCI6XCJQcmVzc2FibGUtbW9kdWxlX19idXR0b24tb3V0bGluZVwiLFwiYnV0dG9uLXJlZFwiOlwiUHJlc3NhYmxlLW1vZHVsZV9fYnV0dG9uLXJlZFwiLFwiYnV0dG9uLXN0YXJ0XCI6XCJQcmVzc2FibGUtbW9kdWxlX19idXR0b24tc3RhcnRcIixcImJ1dHRvbi1pY29uXCI6XCJQcmVzc2FibGUtbW9kdWxlX19idXR0b24taWNvblwiLFwiYnV0dG9uLXNtYWxsXCI6XCJQcmVzc2FibGUtbW9kdWxlX19idXR0b24tc21hbGxcIixcImJ1dHRvbi1lbmRcIjpcIlByZXNzYWJsZS1tb2R1bGVfX2J1dHRvbi1lbmRcIixcImJ1dHRvbi14c21hbGxcIjpcIlByZXNzYWJsZS1tb2R1bGVfX2J1dHRvbi14c21hbGxcIixcImJ1dHRvbi1pY29ub25seVwiOlwiUHJlc3NhYmxlLW1vZHVsZV9fYnV0dG9uLWljb25vbmx5XCIsXCJ0ZXh0XCI6XCJQcmVzc2FibGUtbW9kdWxlX190ZXh0XCIsXCJ0ZXh0LXdpdGgtaWNvblwiOlwiUHJlc3NhYmxlLW1vZHVsZV9fdGV4dC13aXRoLWljb25cIixcIndoaXRlXCI6XCJQcmVzc2FibGUtbW9kdWxlX193aGl0ZVwiLFwiY2hhcmNvYWwtZ3JheVwiOlwiUHJlc3NhYmxlLW1vZHVsZV9fY2hhcmNvYWwtZ3JheVwiLFwid2FybS1ncmF5XCI6XCJQcmVzc2FibGUtbW9kdWxlX193YXJtLWdyYXlcIn07XG5cbnZhciByZW5kZXJJY29uID0gZnVuY3Rpb24gcmVuZGVySWNvbihpY29uLCBoaWRlaWNvbiwgaWNvblNpemUpIHtcbiAgcmV0dXJuICFoaWRlaWNvbiAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSWNvbiwge1xuICAgIG5hbWU6IGljb24sXG4gICAgY2xhc3NOYW1lOiBbc3R5bGVzJGpbJ2J1dHRvbi1pY29uJ10sIHN0eWxlcyRqWydpY29uLXZhcmlhbnQtMSddXS5qb2luKCcgJyksXG4gICAgdmFyaWFudDogMSxcbiAgICBmb250U2l6ZTogaWNvblNpemVcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEljb24sIHtcbiAgICBuYW1lOiBpY29uLFxuICAgIGNsYXNzTmFtZTogW3N0eWxlcyRqWydidXR0b24taWNvbiddLCBzdHlsZXMkalsnaWNvbi12YXJpYW50LTInXV0uam9pbignICcpLFxuICAgIHZhcmlhbnQ6IDIsXG4gICAgZm9udFNpemU6IGljb25TaXplXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJY29uLCB7XG4gICAgbmFtZTogaWNvbixcbiAgICBjbGFzc05hbWU6IFtzdHlsZXMkalsnYnV0dG9uLWljb24nXSwgc3R5bGVzJGpbJ2ljb24tdmFyaWFudC0zJ11dLmpvaW4oJyAnKSxcbiAgICB2YXJpYW50OiAzLFxuICAgIGZvbnRTaXplOiBpY29uU2l6ZVxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSWNvbiwge1xuICAgIG5hbWU6IGljb24sXG4gICAgY2xhc3NOYW1lOiBbc3R5bGVzJGpbJ2J1dHRvbi1pY29uJ10sIHN0eWxlcyRqWydpY29uLXZhcmlhbnQtNCddXS5qb2luKCcgJyksXG4gICAgdmFyaWFudDogNCxcbiAgICBmb250U2l6ZTogaWNvblNpemVcbiAgfSkpO1xufTtcblxudmFyIFByZXNzYWJsZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFByZXNzYWJsZSwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoUHJlc3NhYmxlKTtcblxuICBmdW5jdGlvbiBQcmVzc2FibGUoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFByZXNzYWJsZSk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoUHJlc3NhYmxlLCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgICB2YXJpYW50ID0gX3RoaXMkcHJvcHMudmFyaWFudCxcbiAgICAgICAgICBzbWFsbERlcHJlY2F0ZWRQcm9wID0gX3RoaXMkcHJvcHMuc21hbGwsXG4gICAgICAgICAgaWNvbnBsYWNlbWVudCA9IF90aGlzJHByb3BzLmljb25wbGFjZW1lbnQsXG4gICAgICAgICAgaWNvbiA9IF90aGlzJHByb3BzLmljb24sXG4gICAgICAgICAgaWNvbm9ubHkgPSBfdGhpcyRwcm9wcy5pY29ub25seSxcbiAgICAgICAgICBjb2xvciA9IF90aGlzJHByb3BzLmNvbG9yLFxuICAgICAgICAgIGhpZGVpY29uID0gX3RoaXMkcHJvcHMuaGlkZWljb24sXG4gICAgICAgICAgc2l6ZSA9IF90aGlzJHByb3BzLnNpemUsXG4gICAgICAgICAgaWNvblNpemUgPSBfdGhpcyRwcm9wcy5pY29uU2l6ZSxcbiAgICAgICAgICBhcyA9IF90aGlzJHByb3BzLmFzLFxuICAgICAgICAgIHNwcmVhZEljb24gPSBfdGhpcyRwcm9wcy5zcHJlYWRJY29uLFxuICAgICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcInZhcmlhbnRcIiwgXCJzbWFsbFwiLCBcImljb25wbGFjZW1lbnRcIiwgXCJpY29uXCIsIFwiaWNvbm9ubHlcIiwgXCJjb2xvclwiLCBcImhpZGVpY29uXCIsIFwic2l6ZVwiLCBcImljb25TaXplXCIsIFwiYXNcIiwgXCJzcHJlYWRJY29uXCJdKTtcblxuICAgICAgdmFyIGlzWFNtYWxsID0gc2l6ZSA9PT0gJ3hzbWFsbCc7XG4gICAgICB2YXIgaXNTbWFsbCA9IHNpemUgPT09ICdzbWFsbCcgfHwgc21hbGxEZXByZWNhdGVkUHJvcDtcbiAgICAgIHZhciBpY29uU2l6ZVZhbHVlO1xuXG4gICAgICBpZiAoaWNvblNpemUpIHtcbiAgICAgICAgaWNvblNpemVWYWx1ZSA9IGljb25TaXplO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWNvblNpemVWYWx1ZSA9IGlzU21hbGwgPyAnMTFweCcgOiAnMTRweCc7XG4gICAgICB9XG5cbiAgICAgIHZhciBzaG91bGRIaWRlaWNvbiA9IHZhcmlhbnQgPT09ICd0ZXh0JyB8fCAhIWhpZGVpY29uOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXG4gICAgICB2YXIgUmVuZGVyZWRDb21wb25lbnQgPSBhcztcblxuICAgICAgaWYgKCF2YXJpYW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAoc21hbGxEZXByZWNhdGVkUHJvcCAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgY29uc29sZS53YXJuKCdUaGUgYHNtYWxsYCBwcm9wIGluIEJ1dHRvbi9MaW5rIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdjQuOS4wLCB1c2UgYHsgc2l6ZTogXCJzbWFsbFwiIH1gIGluc3RlYWQnKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNsYXNzTmFtZXMgPSBtZXJnZUNsYXNzTmFtZXMoc3R5bGVzJGouYnV0dG9uLCBzdHlsZXMkalt2YXJpYW50XSwgaXNYU21hbGwgJiYgc3R5bGVzJGpbJ2J1dHRvbi14c21hbGwnXSwgaXNTbWFsbCAmJiBzdHlsZXMkalsnYnV0dG9uLXNtYWxsJ10sIHN0eWxlcyRqW1wiYnV0dG9uLVwiLmNvbmNhdChpY29ucGxhY2VtZW50KV0sIGljb25vbmx5ICYmIHN0eWxlcyRqWydidXR0b24taWNvbm9ubHknXSwgY29sb3IgJiYgc3R5bGVzJGpbY29sb3JdLCBzcHJlYWRJY29uICYmIHN0eWxlcyRqWydidXR0b24tc3BlYWRJY29uJ10sIGNsYXNzTmFtZSk7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVuZGVyZWRDb21wb25lbnQsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzXG4gICAgICB9LCBwcm9wcyksIGljb25wbGFjZW1lbnQgPT09ICdzdGFydCcgJiYgaWNvbiAmJiByZW5kZXJJY29uKGljb24sIHNob3VsZEhpZGVpY29uLCBpY29uU2l6ZVZhbHVlKSwgIWljb25vbmx5ICYmIGNoaWxkcmVuLCBpY29ucGxhY2VtZW50ID09PSAnZW5kJyAmJiBpY29uICYmIHJlbmRlckljb24oaWNvbiwgc2hvdWxkSGlkZWljb24sIGljb25TaXplVmFsdWUpKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gUHJlc3NhYmxlO1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIEJ1dHRvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEJ1dHRvbiwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoQnV0dG9uKTtcblxuICBmdW5jdGlvbiBCdXR0b24oKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEJ1dHRvbik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJlbmRlclwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUHJlc3NhYmxlLCBfdGhpcy5wcm9wcyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICByZXR1cm4gQnV0dG9uO1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxuX2RlZmluZVByb3BlcnR5KEJ1dHRvbiwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICB2YXJpYW50OiAnYnV0dG9uLXByaW1hcnknLFxuICBpY29ucGxhY2VtZW50OiAnZW5kJyxcbiAgaWNvbjogJ2Fycm93LXJpZ2h0JyxcbiAgaGlkZWljb246IGZhbHNlLFxuICBpY29ub25seTogZmFsc2UsXG4gIGFzOiAnYnV0dG9uJ1xufSk7XG5cbnZhciBMaW5rID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoTGluaywgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoTGluayk7XG5cbiAgZnVuY3Rpb24gTGluaygpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTGluayk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJlbmRlclwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUHJlc3NhYmxlLCBfdGhpcy5wcm9wcyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICByZXR1cm4gTGluaztcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShMaW5rLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIHZhcmlhbnQ6ICd0ZXh0JyxcbiAgYXM6ICdhJ1xufSk7XG5cbnZhciBzdHlsZXMkayA9IHtcImxvYWRlclwiOlwiTG9hZGVyLW1vZHVsZV9fbG9hZGVyXCIsXCJsb2FkZXItaW1hZ2VcIjpcIkxvYWRlci1tb2R1bGVfX2xvYWRlci1pbWFnZVwifTtcblxudmFyIExvYWRlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKExvYWRlciwgX1JlYWN0JFB1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoTG9hZGVyKTtcblxuICBmdW5jdGlvbiBMb2FkZXIoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIExvYWRlcik7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoTG9hZGVyLCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgICAgaGVpZ2h0ID0gX3RoaXMkcHJvcHMuaGVpZ2h0LFxuICAgICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBbXCJjbGFzc05hbWVcIiwgXCJoZWlnaHRcIl0pO1xuXG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IFtzdHlsZXMka1snbG9hZGVyJ10sIGNsYXNzTmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKSxcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICBoZWlnaHQ6IGhlaWdodFxuICAgICAgICB9XG4gICAgICB9LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBzdHlsZXMka1snbG9hZGVyLWltYWdlJ11cbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gTG9hZGVyO1xufShSZWFjdC5QdXJlQ29tcG9uZW50KTtcblxudmFyIGNhcmRTdHlsZXMgPSB7XCJkLW5vbmVcIjpcIkNhcmQtbW9kdWxlX19kLW5vbmVcIixcImQtaW5saW5lXCI6XCJDYXJkLW1vZHVsZV9fZC1pbmxpbmVcIixcImQtaW5saW5lLWJsb2NrXCI6XCJDYXJkLW1vZHVsZV9fZC1pbmxpbmUtYmxvY2tcIixcImQtYmxvY2tcIjpcIkNhcmQtbW9kdWxlX19kLWJsb2NrXCIsXCJkLXRhYmxlXCI6XCJDYXJkLW1vZHVsZV9fZC10YWJsZVwiLFwiZC10YWJsZS1yb3dcIjpcIkNhcmQtbW9kdWxlX19kLXRhYmxlLXJvd1wiLFwiZC10YWJsZS1jZWxsXCI6XCJDYXJkLW1vZHVsZV9fZC10YWJsZS1jZWxsXCIsXCJkLWZsZXhcIjpcIkNhcmQtbW9kdWxlX19kLWZsZXhcIixcImQtaW5saW5lLWZsZXhcIjpcIkNhcmQtbW9kdWxlX19kLWlubGluZS1mbGV4XCIsXCJkLXNtLW5vbmVcIjpcIkNhcmQtbW9kdWxlX19kLXNtLW5vbmVcIixcImQtc20taW5saW5lXCI6XCJDYXJkLW1vZHVsZV9fZC1zbS1pbmxpbmVcIixcImQtc20taW5saW5lLWJsb2NrXCI6XCJDYXJkLW1vZHVsZV9fZC1zbS1pbmxpbmUtYmxvY2tcIixcImQtc20tYmxvY2tcIjpcIkNhcmQtbW9kdWxlX19kLXNtLWJsb2NrXCIsXCJkLXNtLXRhYmxlXCI6XCJDYXJkLW1vZHVsZV9fZC1zbS10YWJsZVwiLFwiZC1zbS10YWJsZS1yb3dcIjpcIkNhcmQtbW9kdWxlX19kLXNtLXRhYmxlLXJvd1wiLFwiZC1zbS10YWJsZS1jZWxsXCI6XCJDYXJkLW1vZHVsZV9fZC1zbS10YWJsZS1jZWxsXCIsXCJkLXNtLWZsZXhcIjpcIkNhcmQtbW9kdWxlX19kLXNtLWZsZXhcIixcImQtc20taW5saW5lLWZsZXhcIjpcIkNhcmQtbW9kdWxlX19kLXNtLWlubGluZS1mbGV4XCIsXCJkLW1kLW5vbmVcIjpcIkNhcmQtbW9kdWxlX19kLW1kLW5vbmVcIixcImQtbWQtaW5saW5lXCI6XCJDYXJkLW1vZHVsZV9fZC1tZC1pbmxpbmVcIixcImQtbWQtaW5saW5lLWJsb2NrXCI6XCJDYXJkLW1vZHVsZV9fZC1tZC1pbmxpbmUtYmxvY2tcIixcImQtbWQtYmxvY2tcIjpcIkNhcmQtbW9kdWxlX19kLW1kLWJsb2NrXCIsXCJkLW1kLXRhYmxlXCI6XCJDYXJkLW1vZHVsZV9fZC1tZC10YWJsZVwiLFwiZC1tZC10YWJsZS1yb3dcIjpcIkNhcmQtbW9kdWxlX19kLW1kLXRhYmxlLXJvd1wiLFwiZC1tZC10YWJsZS1jZWxsXCI6XCJDYXJkLW1vZHVsZV9fZC1tZC10YWJsZS1jZWxsXCIsXCJkLW1kLWZsZXhcIjpcIkNhcmQtbW9kdWxlX19kLW1kLWZsZXhcIixcImQtbWQtaW5saW5lLWZsZXhcIjpcIkNhcmQtbW9kdWxlX19kLW1kLWlubGluZS1mbGV4XCIsXCJkLWxnLW5vbmVcIjpcIkNhcmQtbW9kdWxlX19kLWxnLW5vbmVcIixcImQtbGctaW5saW5lXCI6XCJDYXJkLW1vZHVsZV9fZC1sZy1pbmxpbmVcIixcImQtbGctaW5saW5lLWJsb2NrXCI6XCJDYXJkLW1vZHVsZV9fZC1sZy1pbmxpbmUtYmxvY2tcIixcImQtbGctYmxvY2tcIjpcIkNhcmQtbW9kdWxlX19kLWxnLWJsb2NrXCIsXCJkLWxnLXRhYmxlXCI6XCJDYXJkLW1vZHVsZV9fZC1sZy10YWJsZVwiLFwiZC1sZy10YWJsZS1yb3dcIjpcIkNhcmQtbW9kdWxlX19kLWxnLXRhYmxlLXJvd1wiLFwiZC1sZy10YWJsZS1jZWxsXCI6XCJDYXJkLW1vZHVsZV9fZC1sZy10YWJsZS1jZWxsXCIsXCJkLWxnLWZsZXhcIjpcIkNhcmQtbW9kdWxlX19kLWxnLWZsZXhcIixcImQtbGctaW5saW5lLWZsZXhcIjpcIkNhcmQtbW9kdWxlX19kLWxnLWlubGluZS1mbGV4XCIsXCJkLXhsLW5vbmVcIjpcIkNhcmQtbW9kdWxlX19kLXhsLW5vbmVcIixcImQteGwtaW5saW5lXCI6XCJDYXJkLW1vZHVsZV9fZC14bC1pbmxpbmVcIixcImQteGwtaW5saW5lLWJsb2NrXCI6XCJDYXJkLW1vZHVsZV9fZC14bC1pbmxpbmUtYmxvY2tcIixcImQteGwtYmxvY2tcIjpcIkNhcmQtbW9kdWxlX19kLXhsLWJsb2NrXCIsXCJkLXhsLXRhYmxlXCI6XCJDYXJkLW1vZHVsZV9fZC14bC10YWJsZVwiLFwiZC14bC10YWJsZS1yb3dcIjpcIkNhcmQtbW9kdWxlX19kLXhsLXRhYmxlLXJvd1wiLFwiZC14bC10YWJsZS1jZWxsXCI6XCJDYXJkLW1vZHVsZV9fZC14bC10YWJsZS1jZWxsXCIsXCJkLXhsLWZsZXhcIjpcIkNhcmQtbW9kdWxlX19kLXhsLWZsZXhcIixcImQteGwtaW5saW5lLWZsZXhcIjpcIkNhcmQtbW9kdWxlX19kLXhsLWlubGluZS1mbGV4XCIsXCJkLXByaW50LW5vbmVcIjpcIkNhcmQtbW9kdWxlX19kLXByaW50LW5vbmVcIixcImQtcHJpbnQtaW5saW5lXCI6XCJDYXJkLW1vZHVsZV9fZC1wcmludC1pbmxpbmVcIixcImQtcHJpbnQtaW5saW5lLWJsb2NrXCI6XCJDYXJkLW1vZHVsZV9fZC1wcmludC1pbmxpbmUtYmxvY2tcIixcImQtcHJpbnQtYmxvY2tcIjpcIkNhcmQtbW9kdWxlX19kLXByaW50LWJsb2NrXCIsXCJkLXByaW50LXRhYmxlXCI6XCJDYXJkLW1vZHVsZV9fZC1wcmludC10YWJsZVwiLFwiZC1wcmludC10YWJsZS1yb3dcIjpcIkNhcmQtbW9kdWxlX19kLXByaW50LXRhYmxlLXJvd1wiLFwiZC1wcmludC10YWJsZS1jZWxsXCI6XCJDYXJkLW1vZHVsZV9fZC1wcmludC10YWJsZS1jZWxsXCIsXCJkLXByaW50LWZsZXhcIjpcIkNhcmQtbW9kdWxlX19kLXByaW50LWZsZXhcIixcImQtcHJpbnQtaW5saW5lLWZsZXhcIjpcIkNhcmQtbW9kdWxlX19kLXByaW50LWlubGluZS1mbGV4XCIsXCJDYXJkXCI6XCJDYXJkLW1vZHVsZV9fQ2FyZFwiLFwiaW1hZ2VDb250YWluZXJcIjpcIkNhcmQtbW9kdWxlX19pbWFnZUNvbnRhaW5lclwiLFwiY29udGVudFwiOlwiQ2FyZC1tb2R1bGVfX2NvbnRlbnRcIixcImNvbnRlbnRJbnZlcnRlZFwiOlwiQ2FyZC1tb2R1bGVfX2NvbnRlbnRJbnZlcnRlZFwiLFwiY29udGVudFdpdGhJY29uVmVydGljYWxcIjpcIkNhcmQtbW9kdWxlX19jb250ZW50V2l0aEljb25WZXJ0aWNhbFwiLFwiY29udGVudFdpdGhJY29uSG9yaXpvbnRhbFwiOlwiQ2FyZC1tb2R1bGVfX2NvbnRlbnRXaXRoSWNvbkhvcml6b250YWxcIixcInNlcGFyYXRvckljb25cIjpcIkNhcmQtbW9kdWxlX19zZXBhcmF0b3JJY29uXCIsXCJzZXBhcmF0b3JJY29uVmVydGljYWxcIjpcIkNhcmQtbW9kdWxlX19zZXBhcmF0b3JJY29uVmVydGljYWxcIixcInNlcGFyYXRvckljb25Ib3Jpem9udGFsXCI6XCJDYXJkLW1vZHVsZV9fc2VwYXJhdG9ySWNvbkhvcml6b250YWxcIixcInNlcGFyYXRvckljb25SaWdodFwiOlwiQ2FyZC1tb2R1bGVfX3NlcGFyYXRvckljb25SaWdodFwifTtcblxudmFyIENhcmQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKENhcmQsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoQ2FyZCk7XG5cbiAgZnVuY3Rpb24gQ2FyZCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ2FyZCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoQ2FyZCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaW1hZ2UgPSBfdGhpcyRwcm9wcy5pbWFnZSxcbiAgICAgICAgICBpbWFnZUFzQmFja2dyb3VuZCA9IF90aGlzJHByb3BzLmltYWdlQXNCYWNrZ3JvdW5kLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgICBzZXBhcmF0b3JJY29uID0gX3RoaXMkcHJvcHMuc2VwYXJhdG9ySWNvbixcbiAgICAgICAgICBob3Jpem9udGFsID0gX3RoaXMkcHJvcHMuaG9yaXpvbnRhbCxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgIGltYWdlUHJvcHMgPSBfdGhpcyRwcm9wcy5pbWFnZVByb3BzLFxuICAgICAgICAgIGludmVydGVkID0gX3RoaXMkcHJvcHMuaW52ZXJ0ZWQsXG4gICAgICAgICAgaWNvblJpZ2h0ID0gX3RoaXMkcHJvcHMuaWNvblJpZ2h0O1xuXG4gICAgICBpZiAoIWltYWdlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgd3JhcHBlckNsYXNzTmFtZXMgPSBtZXJnZUNsYXNzTmFtZXMoY2FyZFN0eWxlcy5DYXJkLCBjbGFzc05hbWUpO1xuICAgICAgdmFyIGNvbnRlbnRDbGFzc05hbWVzID0gbWVyZ2VDbGFzc05hbWVzKGNhcmRTdHlsZXMuY29udGVudCwgc2VwYXJhdG9ySWNvbiAmJiBob3Jpem9udGFsICYmIGNhcmRTdHlsZXMuY29udGVudFdpdGhJY29uSG9yaXpvbnRhbCwgc2VwYXJhdG9ySWNvbiAmJiAhaG9yaXpvbnRhbCAmJiBjYXJkU3R5bGVzLmNvbnRlbnRXaXRoSWNvblZlcnRpY2FsLCBpbnZlcnRlZCAmJiBjYXJkU3R5bGVzLmNvbnRlbnRJbnZlcnRlZCk7XG4gICAgICB2YXIgaWNvbkNsYXNzTmFtZXMgPSBtZXJnZUNsYXNzTmFtZXMoY2FyZFN0eWxlcy5zZXBhcmF0b3JJY29uLCBzZXBhcmF0b3JJY29uICYmIGhvcml6b250YWwgJiYgY2FyZFN0eWxlcy5zZXBhcmF0b3JJY29uSG9yaXpvbnRhbCwgc2VwYXJhdG9ySWNvbiAmJiAhaG9yaXpvbnRhbCAmJiBjYXJkU3R5bGVzLnNlcGFyYXRvckljb25WZXJ0aWNhbCwgc2VwYXJhdG9ySWNvbiAmJiAhaG9yaXpvbnRhbCAmJiBpY29uUmlnaHQgJiYgY2FyZFN0eWxlcy5zZXBhcmF0b3JJY29uUmlnaHQpO1xuICAgICAgdmFyIGRpc3BsYXkgPSBob3Jpem9udGFsID8gJ2ZsZXgnIDogJ2lubGluZS1ibG9jayc7XG4gICAgICB2YXIgaW1hZ2VDb250YWluZXJTdHlsZSA9IGltYWdlQXNCYWNrZ3JvdW5kID8ge1xuICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6IFwidXJsKFwiLmNvbmNhdChpbWFnZSwgXCIpXCIpXG4gICAgICB9IDoge307XG4gICAgICB2YXIgaW1hZ2VTdHlsZSA9IGltYWdlQXNCYWNrZ3JvdW5kID8ge1xuICAgICAgICBvcGFjaXR5OiAwXG4gICAgICB9IDoge307XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQmxvY2ssIHtcbiAgICAgICAgd2l0aFNoYWRvdzogdHJ1ZSxcbiAgICAgICAgc21hbGw6IHRydWUsXG4gICAgICAgIGNsYXNzTmFtZTogd3JhcHBlckNsYXNzTmFtZXMsXG4gICAgICAgIGRpc3BsYXk6IGRpc3BsYXlcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjYXJkU3R5bGVzLmltYWdlQ29udGFpbmVyLFxuICAgICAgICBzdHlsZTogaW1hZ2VDb250YWluZXJTdHlsZVxuICAgICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSW1hZ2UsIF9leHRlbmRzKHtcbiAgICAgICAgc3JjOiBpbWFnZVxuICAgICAgfSwgaW1hZ2VQcm9wcywge1xuICAgICAgICBzdHlsZTogaW1hZ2VTdHlsZVxuICAgICAgfSkpKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICBjbGFzc05hbWU6IGNvbnRlbnRDbGFzc05hbWVzXG4gICAgICB9LCBzZXBhcmF0b3JJY29uICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJsb2NrLCB7XG4gICAgICAgIHNtYWxsUGFkZGluZzogdHJ1ZSxcbiAgICAgICAgZGFyazogdHJ1ZSxcbiAgICAgICAgd2l0aFNoYWRvdzogdHJ1ZSxcbiAgICAgICAgZGlzcGxheTogXCJpbmxpbmUtYmxvY2tcIixcbiAgICAgICAgY2xhc3NOYW1lOiBpY29uQ2xhc3NOYW1lc1xuICAgICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSWNvbiwge1xuICAgICAgICBuYW1lOiBzZXBhcmF0b3JJY29uLFxuICAgICAgICB2YXJpYW50OiAxXG4gICAgICB9KSkpLCBjaGlsZHJlbikpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBDYXJkO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoQ2FyZCwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBpbWFnZVByb3BzOiB7fSxcbiAgY2xhc3NOYW1lOiB1bmRlZmluZWQsXG4gIGltYWdlQXNCYWNrZ3JvdW5kOiBmYWxzZVxufSk7XG5cbnZhciBzdHlsZXMkbCA9IHtcImQtbm9uZVwiOlwiQmxvZ0NhcmQtbW9kdWxlX19kLW5vbmVcIixcImQtaW5saW5lXCI6XCJCbG9nQ2FyZC1tb2R1bGVfX2QtaW5saW5lXCIsXCJkLWlubGluZS1ibG9ja1wiOlwiQmxvZ0NhcmQtbW9kdWxlX19kLWlubGluZS1ibG9ja1wiLFwiZC1ibG9ja1wiOlwiQmxvZ0NhcmQtbW9kdWxlX19kLWJsb2NrXCIsXCJkLXRhYmxlXCI6XCJCbG9nQ2FyZC1tb2R1bGVfX2QtdGFibGVcIixcImQtdGFibGUtcm93XCI6XCJCbG9nQ2FyZC1tb2R1bGVfX2QtdGFibGUtcm93XCIsXCJkLXRhYmxlLWNlbGxcIjpcIkJsb2dDYXJkLW1vZHVsZV9fZC10YWJsZS1jZWxsXCIsXCJkLWZsZXhcIjpcIkJsb2dDYXJkLW1vZHVsZV9fZC1mbGV4XCIsXCJkLWlubGluZS1mbGV4XCI6XCJCbG9nQ2FyZC1tb2R1bGVfX2QtaW5saW5lLWZsZXhcIixcImQtc20tbm9uZVwiOlwiQmxvZ0NhcmQtbW9kdWxlX19kLXNtLW5vbmVcIixcImQtc20taW5saW5lXCI6XCJCbG9nQ2FyZC1tb2R1bGVfX2Qtc20taW5saW5lXCIsXCJkLXNtLWlubGluZS1ibG9ja1wiOlwiQmxvZ0NhcmQtbW9kdWxlX19kLXNtLWlubGluZS1ibG9ja1wiLFwiZC1zbS1ibG9ja1wiOlwiQmxvZ0NhcmQtbW9kdWxlX19kLXNtLWJsb2NrXCIsXCJkLXNtLXRhYmxlXCI6XCJCbG9nQ2FyZC1tb2R1bGVfX2Qtc20tdGFibGVcIixcImQtc20tdGFibGUtcm93XCI6XCJCbG9nQ2FyZC1tb2R1bGVfX2Qtc20tdGFibGUtcm93XCIsXCJkLXNtLXRhYmxlLWNlbGxcIjpcIkJsb2dDYXJkLW1vZHVsZV9fZC1zbS10YWJsZS1jZWxsXCIsXCJkLXNtLWZsZXhcIjpcIkJsb2dDYXJkLW1vZHVsZV9fZC1zbS1mbGV4XCIsXCJkLXNtLWlubGluZS1mbGV4XCI6XCJCbG9nQ2FyZC1tb2R1bGVfX2Qtc20taW5saW5lLWZsZXhcIixcImQtbWQtbm9uZVwiOlwiQmxvZ0NhcmQtbW9kdWxlX19kLW1kLW5vbmVcIixcImQtbWQtaW5saW5lXCI6XCJCbG9nQ2FyZC1tb2R1bGVfX2QtbWQtaW5saW5lXCIsXCJkLW1kLWlubGluZS1ibG9ja1wiOlwiQmxvZ0NhcmQtbW9kdWxlX19kLW1kLWlubGluZS1ibG9ja1wiLFwiZC1tZC1ibG9ja1wiOlwiQmxvZ0NhcmQtbW9kdWxlX19kLW1kLWJsb2NrXCIsXCJkLW1kLXRhYmxlXCI6XCJCbG9nQ2FyZC1tb2R1bGVfX2QtbWQtdGFibGVcIixcImQtbWQtdGFibGUtcm93XCI6XCJCbG9nQ2FyZC1tb2R1bGVfX2QtbWQtdGFibGUtcm93XCIsXCJkLW1kLXRhYmxlLWNlbGxcIjpcIkJsb2dDYXJkLW1vZHVsZV9fZC1tZC10YWJsZS1jZWxsXCIsXCJkLW1kLWZsZXhcIjpcIkJsb2dDYXJkLW1vZHVsZV9fZC1tZC1mbGV4XCIsXCJkLW1kLWlubGluZS1mbGV4XCI6XCJCbG9nQ2FyZC1tb2R1bGVfX2QtbWQtaW5saW5lLWZsZXhcIixcImQtbGctbm9uZVwiOlwiQmxvZ0NhcmQtbW9kdWxlX19kLWxnLW5vbmVcIixcImQtbGctaW5saW5lXCI6XCJCbG9nQ2FyZC1tb2R1bGVfX2QtbGctaW5saW5lXCIsXCJkLWxnLWlubGluZS1ibG9ja1wiOlwiQmxvZ0NhcmQtbW9kdWxlX19kLWxnLWlubGluZS1ibG9ja1wiLFwiZC1sZy1ibG9ja1wiOlwiQmxvZ0NhcmQtbW9kdWxlX19kLWxnLWJsb2NrXCIsXCJkLWxnLXRhYmxlXCI6XCJCbG9nQ2FyZC1tb2R1bGVfX2QtbGctdGFibGVcIixcImQtbGctdGFibGUtcm93XCI6XCJCbG9nQ2FyZC1tb2R1bGVfX2QtbGctdGFibGUtcm93XCIsXCJkLWxnLXRhYmxlLWNlbGxcIjpcIkJsb2dDYXJkLW1vZHVsZV9fZC1sZy10YWJsZS1jZWxsXCIsXCJkLWxnLWZsZXhcIjpcIkJsb2dDYXJkLW1vZHVsZV9fZC1sZy1mbGV4XCIsXCJkLWxnLWlubGluZS1mbGV4XCI6XCJCbG9nQ2FyZC1tb2R1bGVfX2QtbGctaW5saW5lLWZsZXhcIixcImQteGwtbm9uZVwiOlwiQmxvZ0NhcmQtbW9kdWxlX19kLXhsLW5vbmVcIixcImQteGwtaW5saW5lXCI6XCJCbG9nQ2FyZC1tb2R1bGVfX2QteGwtaW5saW5lXCIsXCJkLXhsLWlubGluZS1ibG9ja1wiOlwiQmxvZ0NhcmQtbW9kdWxlX19kLXhsLWlubGluZS1ibG9ja1wiLFwiZC14bC1ibG9ja1wiOlwiQmxvZ0NhcmQtbW9kdWxlX19kLXhsLWJsb2NrXCIsXCJkLXhsLXRhYmxlXCI6XCJCbG9nQ2FyZC1tb2R1bGVfX2QteGwtdGFibGVcIixcImQteGwtdGFibGUtcm93XCI6XCJCbG9nQ2FyZC1tb2R1bGVfX2QteGwtdGFibGUtcm93XCIsXCJkLXhsLXRhYmxlLWNlbGxcIjpcIkJsb2dDYXJkLW1vZHVsZV9fZC14bC10YWJsZS1jZWxsXCIsXCJkLXhsLWZsZXhcIjpcIkJsb2dDYXJkLW1vZHVsZV9fZC14bC1mbGV4XCIsXCJkLXhsLWlubGluZS1mbGV4XCI6XCJCbG9nQ2FyZC1tb2R1bGVfX2QteGwtaW5saW5lLWZsZXhcIixcImQtcHJpbnQtbm9uZVwiOlwiQmxvZ0NhcmQtbW9kdWxlX19kLXByaW50LW5vbmVcIixcImQtcHJpbnQtaW5saW5lXCI6XCJCbG9nQ2FyZC1tb2R1bGVfX2QtcHJpbnQtaW5saW5lXCIsXCJkLXByaW50LWlubGluZS1ibG9ja1wiOlwiQmxvZ0NhcmQtbW9kdWxlX19kLXByaW50LWlubGluZS1ibG9ja1wiLFwiZC1wcmludC1ibG9ja1wiOlwiQmxvZ0NhcmQtbW9kdWxlX19kLXByaW50LWJsb2NrXCIsXCJkLXByaW50LXRhYmxlXCI6XCJCbG9nQ2FyZC1tb2R1bGVfX2QtcHJpbnQtdGFibGVcIixcImQtcHJpbnQtdGFibGUtcm93XCI6XCJCbG9nQ2FyZC1tb2R1bGVfX2QtcHJpbnQtdGFibGUtcm93XCIsXCJkLXByaW50LXRhYmxlLWNlbGxcIjpcIkJsb2dDYXJkLW1vZHVsZV9fZC1wcmludC10YWJsZS1jZWxsXCIsXCJkLXByaW50LWZsZXhcIjpcIkJsb2dDYXJkLW1vZHVsZV9fZC1wcmludC1mbGV4XCIsXCJkLXByaW50LWlubGluZS1mbGV4XCI6XCJCbG9nQ2FyZC1tb2R1bGVfX2QtcHJpbnQtaW5saW5lLWZsZXhcIixcIkJsb2dDYXJkXCI6XCJCbG9nQ2FyZC1tb2R1bGVfX0Jsb2dDYXJkXCIsXCJjb250ZW50XCI6XCJCbG9nQ2FyZC1tb2R1bGVfX2NvbnRlbnRcIixcImltYWdlQ29udGFpbmVyXCI6XCJCbG9nQ2FyZC1tb2R1bGVfX2ltYWdlQ29udGFpbmVyXCIsXCJzZXBhcmF0b3JcIjpcIkJsb2dDYXJkLW1vZHVsZV9fc2VwYXJhdG9yXCJ9O1xuXG52YXIgQmxvZ0NhcmQgPSBmdW5jdGlvbiBCbG9nQ2FyZChfcmVmKSB7XG4gIHZhciBpbWFnZSA9IF9yZWYuaW1hZ2UsXG4gICAgICB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICBkZXNjcmlwdGlvbiA9IF9yZWYuZGVzY3JpcHRpb24sXG4gICAgICBkYXRlID0gX3JlZi5kYXRlLFxuICAgICAgX3JlZiRjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYkY2xhc3NOYW1lID09PSB2b2lkIDAgPyB1bmRlZmluZWQgOiBfcmVmJGNsYXNzTmFtZSxcbiAgICAgIF9yZWYkaW1hZ2VQcm9wcyA9IF9yZWYuaW1hZ2VQcm9wcyxcbiAgICAgIGltYWdlUHJvcHMgPSBfcmVmJGltYWdlUHJvcHMgPT09IHZvaWQgMCA/IHtcbiAgICBhc3BlY3RSYXRpbzogJzQ6MydcbiAgfSA6IF9yZWYkaW1hZ2VQcm9wcyxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImltYWdlXCIsIFwidGl0bGVcIiwgXCJkZXNjcmlwdGlvblwiLCBcImRhdGVcIiwgXCJjbGFzc05hbWVcIiwgXCJpbWFnZVByb3BzXCJdKTtcblxuICB2YXIgbG9jYWxlRGF5ID0gJyc7XG4gIHZhciBsb2NhbGVNb250aCA9ICcnO1xuXG4gIGlmIChkYXRlKSB7XG4gICAgbG9jYWxlRGF5ID0gZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoJ25sLU5MJywge1xuICAgICAgZGF5OiAnbnVtZXJpYydcbiAgICB9KTtcbiAgICBsb2NhbGVNb250aCA9IGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCdubC1OTCcsIHtcbiAgICAgIG1vbnRoOiAnc2hvcnQnXG4gICAgfSkucmVwbGFjZSgnLicsICcnKTtcbiAgfVxuXG4gIHZhciB3cmFwcGVyQ2xhc3NOYW1lcyA9IG1lcmdlQ2xhc3NOYW1lcyhzdHlsZXMkbC5CbG9nQ2FyZCwgY2FyZFN0eWxlcy5DYXJkLCBjbGFzc05hbWUpO1xuICB2YXIgY29udGVudENsYXNzTmFtZXMgPSBtZXJnZUNsYXNzTmFtZXMoc3R5bGVzJGwuY29udGVudCwgY2FyZFN0eWxlcy5jb250ZW50KTtcbiAgdmFyIHNlcGVyYXRvckNsYXNzTmFtZXMgPSBtZXJnZUNsYXNzTmFtZXMoc3R5bGVzJGwuc2VwYXJhdG9yLCBjYXJkU3R5bGVzLnNlcGFyYXRvckljb24pO1xuICB2YXIgaW1hZ2VDbGFzc05hbWVzID0gbWVyZ2VDbGFzc05hbWVzKHN0eWxlcyRsLmltYWdlQ29udGFpbmVyLCBjYXJkU3R5bGVzLmltYWdlQ29udGFpbmVyKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJsb2NrLCBfZXh0ZW5kcyh7XG4gICAgc21hbGw6IHRydWUsXG4gICAgY2xhc3NOYW1lOiB3cmFwcGVyQ2xhc3NOYW1lc1xuICB9LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IGltYWdlQ2xhc3NOYW1lc1xuICB9LCBpbWFnZSAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbWFnZSwgX2V4dGVuZHMoe1xuICAgIHNyYzogaW1hZ2VcbiAgfSwgaW1hZ2VQcm9wcykpKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogY29udGVudENsYXNzTmFtZXNcbiAgfSwgbG9jYWxlRGF5ICYmIGxvY2FsZU1vbnRoICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJsb2NrLCB7XG4gICAgc21hbGxQYWRkaW5nOiB0cnVlLFxuICAgIHdpdGhTaGFkb3c6IHRydWUsXG4gICAgZGlzcGxheTogXCJmbGV4XCIsXG4gICAgY2xhc3NOYW1lOiBzZXBlcmF0b3JDbGFzc05hbWVzXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEg0LCB7XG4gICAgYXM6IFwicFwiXG4gIH0sIGxvY2FsZURheSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEg1LCB7XG4gICAgYXM6IFwicFwiLFxuICAgIGZvbnRXZWlnaHQ6IDYwMFxuICB9LCBsb2NhbGVNb250aCkpKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSDQsIHtcbiAgICBhczogXCJoM1wiXG4gIH0sIHRpdGxlKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUGFyYWdyYXBoLCBudWxsLCBkZXNjcmlwdGlvbikpKTtcbn07XG5cbnZhciBzdHlsZXMkbSA9IHtcImltYWdlLXN0YWNrXCI6XCJJbWFnZVN0YWNrLW1vZHVsZV9faW1hZ2Utc3RhY2tcIixcImZpcnN0LWltYWdlXCI6XCJJbWFnZVN0YWNrLW1vZHVsZV9fZmlyc3QtaW1hZ2VcIixcImZsaXBwZWRcIjpcIkltYWdlU3RhY2stbW9kdWxlX19mbGlwcGVkXCIsXCJuby1zaGFkb3dcIjpcIkltYWdlU3RhY2stbW9kdWxlX19uby1zaGFkb3dcIixcInNlY29uZC1pbWFnZVwiOlwiSW1hZ2VTdGFjay1tb2R1bGVfX3NlY29uZC1pbWFnZVwiLFwic21hbGxcIjpcIkltYWdlU3RhY2stbW9kdWxlX19zbWFsbFwiLFwibGFyZ2VcIjpcIkltYWdlU3RhY2stbW9kdWxlX19sYXJnZVwifTtcblxudmFyIEltYWdlU3RhY2sgPSBmdW5jdGlvbiBJbWFnZVN0YWNrKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgaW1hZ2VzID0gX3JlZi5pbWFnZXMsXG4gICAgICBmbGlwcGVkID0gX3JlZi5mbGlwcGVkLFxuICAgICAgbm9TaGFkb3cgPSBfcmVmLm5vU2hhZG93O1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogbWVyZ2VDbGFzc05hbWVzKHN0eWxlcyRtWydpbWFnZS1zdGFjayddLCBjbGFzc05hbWUpXG4gIH0sIGltYWdlcy5tYXAoZnVuY3Rpb24gKF9yZWYyLCBpbmRleCkge1xuICAgIHZhciBrZXkgPSBfcmVmMi5rZXksXG4gICAgICAgIHNyYyA9IF9yZWYyLnNyYyxcbiAgICAgICAgX3JlZjIkc2l6ZSA9IF9yZWYyLnNpemUsXG4gICAgICAgIHNpemUgPSBfcmVmMiRzaXplID09PSB2b2lkIDAgPyAnbGFyZ2UnIDogX3JlZjIkc2l6ZSxcbiAgICAgICAgaW1hZ2VQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMiwgW1wia2V5XCIsIFwic3JjXCIsIFwic2l6ZVwiXSk7XG5cbiAgICB2YXIgY2xhc3NOYW1lcyA9IFtpbmRleCA9PT0gMCA/IHN0eWxlcyRtWydmaXJzdC1pbWFnZSddIDogc3R5bGVzJG1bJ3NlY29uZC1pbWFnZSddLCBzaXplID09PSAnbGFyZ2UnID8gc3R5bGVzJG1bJ2xhcmdlJ10gOiBzdHlsZXMkbVsnc21hbGwnXSwgZmxpcHBlZCAmJiBzdHlsZXMkbVsnZmxpcHBlZCddXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMsXG4gICAgICBrZXk6IGtleSB8fCBzcmNcbiAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbWFnZSwgX2V4dGVuZHMoe1xuICAgICAgc3JjOiBzcmMsXG4gICAgICBjbGFzc05hbWU6IG5vU2hhZG93ID8gc3R5bGVzJG1bJ25vLXNoYWRvdyddIDogJydcbiAgICB9LCBpbWFnZVByb3BzKSkpO1xuICB9KSk7XG59O1xuXG52YXIgc3R5bGVzJG4gPSB7XCJkLW5vbmVcIjpcIkNvbnRlbnRCbG9jay1tb2R1bGVfX2Qtbm9uZVwiLFwiZC1pbmxpbmVcIjpcIkNvbnRlbnRCbG9jay1tb2R1bGVfX2QtaW5saW5lXCIsXCJkLWlubGluZS1ibG9ja1wiOlwiQ29udGVudEJsb2NrLW1vZHVsZV9fZC1pbmxpbmUtYmxvY2tcIixcImQtYmxvY2tcIjpcIkNvbnRlbnRCbG9jay1tb2R1bGVfX2QtYmxvY2tcIixcImQtdGFibGVcIjpcIkNvbnRlbnRCbG9jay1tb2R1bGVfX2QtdGFibGVcIixcImQtdGFibGUtcm93XCI6XCJDb250ZW50QmxvY2stbW9kdWxlX19kLXRhYmxlLXJvd1wiLFwiZC10YWJsZS1jZWxsXCI6XCJDb250ZW50QmxvY2stbW9kdWxlX19kLXRhYmxlLWNlbGxcIixcImQtZmxleFwiOlwiQ29udGVudEJsb2NrLW1vZHVsZV9fZC1mbGV4XCIsXCJkLWlubGluZS1mbGV4XCI6XCJDb250ZW50QmxvY2stbW9kdWxlX19kLWlubGluZS1mbGV4XCIsXCJkLXNtLW5vbmVcIjpcIkNvbnRlbnRCbG9jay1tb2R1bGVfX2Qtc20tbm9uZVwiLFwiZC1zbS1pbmxpbmVcIjpcIkNvbnRlbnRCbG9jay1tb2R1bGVfX2Qtc20taW5saW5lXCIsXCJkLXNtLWlubGluZS1ibG9ja1wiOlwiQ29udGVudEJsb2NrLW1vZHVsZV9fZC1zbS1pbmxpbmUtYmxvY2tcIixcImQtc20tYmxvY2tcIjpcIkNvbnRlbnRCbG9jay1tb2R1bGVfX2Qtc20tYmxvY2tcIixcImQtc20tdGFibGVcIjpcIkNvbnRlbnRCbG9jay1tb2R1bGVfX2Qtc20tdGFibGVcIixcImQtc20tdGFibGUtcm93XCI6XCJDb250ZW50QmxvY2stbW9kdWxlX19kLXNtLXRhYmxlLXJvd1wiLFwiZC1zbS10YWJsZS1jZWxsXCI6XCJDb250ZW50QmxvY2stbW9kdWxlX19kLXNtLXRhYmxlLWNlbGxcIixcImQtc20tZmxleFwiOlwiQ29udGVudEJsb2NrLW1vZHVsZV9fZC1zbS1mbGV4XCIsXCJkLXNtLWlubGluZS1mbGV4XCI6XCJDb250ZW50QmxvY2stbW9kdWxlX19kLXNtLWlubGluZS1mbGV4XCIsXCJkLW1kLW5vbmVcIjpcIkNvbnRlbnRCbG9jay1tb2R1bGVfX2QtbWQtbm9uZVwiLFwiZC1tZC1pbmxpbmVcIjpcIkNvbnRlbnRCbG9jay1tb2R1bGVfX2QtbWQtaW5saW5lXCIsXCJkLW1kLWlubGluZS1ibG9ja1wiOlwiQ29udGVudEJsb2NrLW1vZHVsZV9fZC1tZC1pbmxpbmUtYmxvY2tcIixcImQtbWQtYmxvY2tcIjpcIkNvbnRlbnRCbG9jay1tb2R1bGVfX2QtbWQtYmxvY2tcIixcImQtbWQtdGFibGVcIjpcIkNvbnRlbnRCbG9jay1tb2R1bGVfX2QtbWQtdGFibGVcIixcImQtbWQtdGFibGUtcm93XCI6XCJDb250ZW50QmxvY2stbW9kdWxlX19kLW1kLXRhYmxlLXJvd1wiLFwiZC1tZC10YWJsZS1jZWxsXCI6XCJDb250ZW50QmxvY2stbW9kdWxlX19kLW1kLXRhYmxlLWNlbGxcIixcImQtbWQtZmxleFwiOlwiQ29udGVudEJsb2NrLW1vZHVsZV9fZC1tZC1mbGV4XCIsXCJkLW1kLWlubGluZS1mbGV4XCI6XCJDb250ZW50QmxvY2stbW9kdWxlX19kLW1kLWlubGluZS1mbGV4XCIsXCJkLWxnLW5vbmVcIjpcIkNvbnRlbnRCbG9jay1tb2R1bGVfX2QtbGctbm9uZVwiLFwiZC1sZy1pbmxpbmVcIjpcIkNvbnRlbnRCbG9jay1tb2R1bGVfX2QtbGctaW5saW5lXCIsXCJkLWxnLWlubGluZS1ibG9ja1wiOlwiQ29udGVudEJsb2NrLW1vZHVsZV9fZC1sZy1pbmxpbmUtYmxvY2tcIixcImQtbGctYmxvY2tcIjpcIkNvbnRlbnRCbG9jay1tb2R1bGVfX2QtbGctYmxvY2tcIixcImQtbGctdGFibGVcIjpcIkNvbnRlbnRCbG9jay1tb2R1bGVfX2QtbGctdGFibGVcIixcImQtbGctdGFibGUtcm93XCI6XCJDb250ZW50QmxvY2stbW9kdWxlX19kLWxnLXRhYmxlLXJvd1wiLFwiZC1sZy10YWJsZS1jZWxsXCI6XCJDb250ZW50QmxvY2stbW9kdWxlX19kLWxnLXRhYmxlLWNlbGxcIixcImQtbGctZmxleFwiOlwiQ29udGVudEJsb2NrLW1vZHVsZV9fZC1sZy1mbGV4XCIsXCJkLWxnLWlubGluZS1mbGV4XCI6XCJDb250ZW50QmxvY2stbW9kdWxlX19kLWxnLWlubGluZS1mbGV4XCIsXCJkLXhsLW5vbmVcIjpcIkNvbnRlbnRCbG9jay1tb2R1bGVfX2QteGwtbm9uZVwiLFwiZC14bC1pbmxpbmVcIjpcIkNvbnRlbnRCbG9jay1tb2R1bGVfX2QteGwtaW5saW5lXCIsXCJkLXhsLWlubGluZS1ibG9ja1wiOlwiQ29udGVudEJsb2NrLW1vZHVsZV9fZC14bC1pbmxpbmUtYmxvY2tcIixcImQteGwtYmxvY2tcIjpcIkNvbnRlbnRCbG9jay1tb2R1bGVfX2QteGwtYmxvY2tcIixcImQteGwtdGFibGVcIjpcIkNvbnRlbnRCbG9jay1tb2R1bGVfX2QteGwtdGFibGVcIixcImQteGwtdGFibGUtcm93XCI6XCJDb250ZW50QmxvY2stbW9kdWxlX19kLXhsLXRhYmxlLXJvd1wiLFwiZC14bC10YWJsZS1jZWxsXCI6XCJDb250ZW50QmxvY2stbW9kdWxlX19kLXhsLXRhYmxlLWNlbGxcIixcImQteGwtZmxleFwiOlwiQ29udGVudEJsb2NrLW1vZHVsZV9fZC14bC1mbGV4XCIsXCJkLXhsLWlubGluZS1mbGV4XCI6XCJDb250ZW50QmxvY2stbW9kdWxlX19kLXhsLWlubGluZS1mbGV4XCIsXCJkLXByaW50LW5vbmVcIjpcIkNvbnRlbnRCbG9jay1tb2R1bGVfX2QtcHJpbnQtbm9uZVwiLFwiZC1wcmludC1pbmxpbmVcIjpcIkNvbnRlbnRCbG9jay1tb2R1bGVfX2QtcHJpbnQtaW5saW5lXCIsXCJkLXByaW50LWlubGluZS1ibG9ja1wiOlwiQ29udGVudEJsb2NrLW1vZHVsZV9fZC1wcmludC1pbmxpbmUtYmxvY2tcIixcImQtcHJpbnQtYmxvY2tcIjpcIkNvbnRlbnRCbG9jay1tb2R1bGVfX2QtcHJpbnQtYmxvY2tcIixcImQtcHJpbnQtdGFibGVcIjpcIkNvbnRlbnRCbG9jay1tb2R1bGVfX2QtcHJpbnQtdGFibGVcIixcImQtcHJpbnQtdGFibGUtcm93XCI6XCJDb250ZW50QmxvY2stbW9kdWxlX19kLXByaW50LXRhYmxlLXJvd1wiLFwiZC1wcmludC10YWJsZS1jZWxsXCI6XCJDb250ZW50QmxvY2stbW9kdWxlX19kLXByaW50LXRhYmxlLWNlbGxcIixcImQtcHJpbnQtZmxleFwiOlwiQ29udGVudEJsb2NrLW1vZHVsZV9fZC1wcmludC1mbGV4XCIsXCJkLXByaW50LWlubGluZS1mbGV4XCI6XCJDb250ZW50QmxvY2stbW9kdWxlX19kLXByaW50LWlubGluZS1mbGV4XCIsXCJjb250ZW50LWJsb2NrXCI6XCJDb250ZW50QmxvY2stbW9kdWxlX19jb250ZW50LWJsb2NrXCIsXCJpbWFnZS1jb250YWluZXJcIjpcIkNvbnRlbnRCbG9jay1tb2R1bGVfX2ltYWdlLWNvbnRhaW5lclwiLFwiaW1hZ2Utc3RhY2tcIjpcIkNvbnRlbnRCbG9jay1tb2R1bGVfX2ltYWdlLXN0YWNrXCIsXCJ0YWdDb250YWluZXJcIjpcIkNvbnRlbnRCbG9jay1tb2R1bGVfX3RhZ0NvbnRhaW5lclwiLFwidGFnXCI6XCJDb250ZW50QmxvY2stbW9kdWxlX190YWdcIixcIndpdGhUYWdcIjpcIkNvbnRlbnRCbG9jay1tb2R1bGVfX3dpdGhUYWdcIixcImZsaXBwZWRcIjpcIkNvbnRlbnRCbG9jay1tb2R1bGVfX2ZsaXBwZWRcIixcInNpbmdsZS1pbWFnZVwiOlwiQ29udGVudEJsb2NrLW1vZHVsZV9fc2luZ2xlLWltYWdlXCIsXCJuby1zaGFkb3dcIjpcIkNvbnRlbnRCbG9jay1tb2R1bGVfX25vLXNoYWRvd1wifTtcblxuZnVuY3Rpb24gQ29udGVudEJsb2NrKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGZsaXBwZWQgPSBfcmVmLmZsaXBwZWQsXG4gICAgICBpbWFnZXMgPSBfcmVmLmltYWdlcyxcbiAgICAgIGltYWdlc0ZsaXBwZWQgPSBfcmVmLmltYWdlc0ZsaXBwZWQsXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIG5vU2hhZG93ID0gX3JlZi5ub1NoYWRvdyxcbiAgICAgIHRhZ0NvbnRlbnQgPSBfcmVmLnRhZ0NvbnRlbnQ7XG5cbiAgaWYgKGltYWdlcy5sZW5ndGggPiAxKSB7XG4gICAgLy8gSW1hZ2Ugc3RhY2sgbGF5b3V0XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbnRhaW5lciwge1xuICAgICAgY2xhc3NOYW1lOiBbc3R5bGVzJG5bJ2NvbnRlbnQtYmxvY2snXSwgY2xhc3NOYW1lXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpXG4gICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUm93LCB7XG4gICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiXG4gICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBbc3R5bGVzJG5bJ2ltYWdlLWNvbnRhaW5lciddLCBmbGlwcGVkICYmIHN0eWxlcyRuWydmbGlwcGVkJ11dLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJylcbiAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbWFnZVN0YWNrLCB7XG4gICAgICBpbWFnZXM6IGltYWdlcyxcbiAgICAgIGZsaXBwZWQ6IGltYWdlc0ZsaXBwZWQsXG4gICAgICBub1NoYWRvdzogbm9TaGFkb3csXG4gICAgICBjbGFzc05hbWU6IHN0eWxlcyRuWydpbWFnZS1zdGFjayddXG4gICAgfSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb2wsIHtcbiAgICAgIGNvbDogMTIsXG4gICAgICBsZzogNSxcbiAgICAgIGxnT2Zmc2V0OiBmbGlwcGVkID8gNyA6IDBcbiAgICB9LCBjaGlsZHJlbikpKTtcbiAgfVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChGbGV4LCB7XG4gICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICB3cmFwOiBcIndyYXBcIixcbiAgICBjbGFzc05hbWU6IFtzdHlsZXMkblsnY29udGVudC1ibG9jayddLCBjbGFzc05hbWVdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJylcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogW3N0eWxlcyRuWydpbWFnZS1jb250YWluZXInXSwgZmxpcHBlZCAmJiBzdHlsZXMkblsnZmxpcHBlZCddLCB0YWdDb250ZW50ICYmIHN0eWxlcyRuLndpdGhUYWddLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJylcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSW1hZ2UsIF9leHRlbmRzKHt9LCBpbWFnZXNbMF0sIHtcbiAgICBjbGFzc05hbWU6IFtzdHlsZXMkblsnc2luZ2xlLWltYWdlJ10sIG5vU2hhZG93ICYmIHN0eWxlcyRuWyduby1zaGFkb3cnXV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKVxuICB9KSksIHRhZ0NvbnRlbnQgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogc3R5bGVzJG4udGFnQ29udGFpbmVyXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IHN0eWxlcyRuLnRhZ1xuICB9LCB0YWdDb250ZW50KSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb250YWluZXIsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJvdywgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29sLCB7XG4gICAgY29sOiAxMixcbiAgICBsZzogNSxcbiAgICBsZ09mZnNldDogZmxpcHBlZCA/IDcgOiAwXG4gIH0sIGNoaWxkcmVuKSkpKTtcbn1cblxudmFyIHN0eWxlcyRvID0ge1wiZC1ub25lXCI6XCJTZWxlY3QtbW9kdWxlX19kLW5vbmVcIixcImQtaW5saW5lXCI6XCJTZWxlY3QtbW9kdWxlX19kLWlubGluZVwiLFwiZC1pbmxpbmUtYmxvY2tcIjpcIlNlbGVjdC1tb2R1bGVfX2QtaW5saW5lLWJsb2NrXCIsXCJkLWJsb2NrXCI6XCJTZWxlY3QtbW9kdWxlX19kLWJsb2NrXCIsXCJkLXRhYmxlXCI6XCJTZWxlY3QtbW9kdWxlX19kLXRhYmxlXCIsXCJkLXRhYmxlLXJvd1wiOlwiU2VsZWN0LW1vZHVsZV9fZC10YWJsZS1yb3dcIixcImQtdGFibGUtY2VsbFwiOlwiU2VsZWN0LW1vZHVsZV9fZC10YWJsZS1jZWxsXCIsXCJkLWZsZXhcIjpcIlNlbGVjdC1tb2R1bGVfX2QtZmxleFwiLFwiZC1pbmxpbmUtZmxleFwiOlwiU2VsZWN0LW1vZHVsZV9fZC1pbmxpbmUtZmxleFwiLFwiZC1zbS1ub25lXCI6XCJTZWxlY3QtbW9kdWxlX19kLXNtLW5vbmVcIixcImQtc20taW5saW5lXCI6XCJTZWxlY3QtbW9kdWxlX19kLXNtLWlubGluZVwiLFwiZC1zbS1pbmxpbmUtYmxvY2tcIjpcIlNlbGVjdC1tb2R1bGVfX2Qtc20taW5saW5lLWJsb2NrXCIsXCJkLXNtLWJsb2NrXCI6XCJTZWxlY3QtbW9kdWxlX19kLXNtLWJsb2NrXCIsXCJkLXNtLXRhYmxlXCI6XCJTZWxlY3QtbW9kdWxlX19kLXNtLXRhYmxlXCIsXCJkLXNtLXRhYmxlLXJvd1wiOlwiU2VsZWN0LW1vZHVsZV9fZC1zbS10YWJsZS1yb3dcIixcImQtc20tdGFibGUtY2VsbFwiOlwiU2VsZWN0LW1vZHVsZV9fZC1zbS10YWJsZS1jZWxsXCIsXCJkLXNtLWZsZXhcIjpcIlNlbGVjdC1tb2R1bGVfX2Qtc20tZmxleFwiLFwiZC1zbS1pbmxpbmUtZmxleFwiOlwiU2VsZWN0LW1vZHVsZV9fZC1zbS1pbmxpbmUtZmxleFwiLFwiZC1tZC1ub25lXCI6XCJTZWxlY3QtbW9kdWxlX19kLW1kLW5vbmVcIixcImQtbWQtaW5saW5lXCI6XCJTZWxlY3QtbW9kdWxlX19kLW1kLWlubGluZVwiLFwiZC1tZC1pbmxpbmUtYmxvY2tcIjpcIlNlbGVjdC1tb2R1bGVfX2QtbWQtaW5saW5lLWJsb2NrXCIsXCJkLW1kLWJsb2NrXCI6XCJTZWxlY3QtbW9kdWxlX19kLW1kLWJsb2NrXCIsXCJkLW1kLXRhYmxlXCI6XCJTZWxlY3QtbW9kdWxlX19kLW1kLXRhYmxlXCIsXCJkLW1kLXRhYmxlLXJvd1wiOlwiU2VsZWN0LW1vZHVsZV9fZC1tZC10YWJsZS1yb3dcIixcImQtbWQtdGFibGUtY2VsbFwiOlwiU2VsZWN0LW1vZHVsZV9fZC1tZC10YWJsZS1jZWxsXCIsXCJkLW1kLWZsZXhcIjpcIlNlbGVjdC1tb2R1bGVfX2QtbWQtZmxleFwiLFwiZC1tZC1pbmxpbmUtZmxleFwiOlwiU2VsZWN0LW1vZHVsZV9fZC1tZC1pbmxpbmUtZmxleFwiLFwiZC1sZy1ub25lXCI6XCJTZWxlY3QtbW9kdWxlX19kLWxnLW5vbmVcIixcImQtbGctaW5saW5lXCI6XCJTZWxlY3QtbW9kdWxlX19kLWxnLWlubGluZVwiLFwiZC1sZy1pbmxpbmUtYmxvY2tcIjpcIlNlbGVjdC1tb2R1bGVfX2QtbGctaW5saW5lLWJsb2NrXCIsXCJkLWxnLWJsb2NrXCI6XCJTZWxlY3QtbW9kdWxlX19kLWxnLWJsb2NrXCIsXCJkLWxnLXRhYmxlXCI6XCJTZWxlY3QtbW9kdWxlX19kLWxnLXRhYmxlXCIsXCJkLWxnLXRhYmxlLXJvd1wiOlwiU2VsZWN0LW1vZHVsZV9fZC1sZy10YWJsZS1yb3dcIixcImQtbGctdGFibGUtY2VsbFwiOlwiU2VsZWN0LW1vZHVsZV9fZC1sZy10YWJsZS1jZWxsXCIsXCJkLWxnLWZsZXhcIjpcIlNlbGVjdC1tb2R1bGVfX2QtbGctZmxleFwiLFwiZC1sZy1pbmxpbmUtZmxleFwiOlwiU2VsZWN0LW1vZHVsZV9fZC1sZy1pbmxpbmUtZmxleFwiLFwiZC14bC1ub25lXCI6XCJTZWxlY3QtbW9kdWxlX19kLXhsLW5vbmVcIixcImQteGwtaW5saW5lXCI6XCJTZWxlY3QtbW9kdWxlX19kLXhsLWlubGluZVwiLFwiZC14bC1pbmxpbmUtYmxvY2tcIjpcIlNlbGVjdC1tb2R1bGVfX2QteGwtaW5saW5lLWJsb2NrXCIsXCJkLXhsLWJsb2NrXCI6XCJTZWxlY3QtbW9kdWxlX19kLXhsLWJsb2NrXCIsXCJkLXhsLXRhYmxlXCI6XCJTZWxlY3QtbW9kdWxlX19kLXhsLXRhYmxlXCIsXCJkLXhsLXRhYmxlLXJvd1wiOlwiU2VsZWN0LW1vZHVsZV9fZC14bC10YWJsZS1yb3dcIixcImQteGwtdGFibGUtY2VsbFwiOlwiU2VsZWN0LW1vZHVsZV9fZC14bC10YWJsZS1jZWxsXCIsXCJkLXhsLWZsZXhcIjpcIlNlbGVjdC1tb2R1bGVfX2QteGwtZmxleFwiLFwiZC14bC1pbmxpbmUtZmxleFwiOlwiU2VsZWN0LW1vZHVsZV9fZC14bC1pbmxpbmUtZmxleFwiLFwiZC1wcmludC1ub25lXCI6XCJTZWxlY3QtbW9kdWxlX19kLXByaW50LW5vbmVcIixcImQtcHJpbnQtaW5saW5lXCI6XCJTZWxlY3QtbW9kdWxlX19kLXByaW50LWlubGluZVwiLFwiZC1wcmludC1pbmxpbmUtYmxvY2tcIjpcIlNlbGVjdC1tb2R1bGVfX2QtcHJpbnQtaW5saW5lLWJsb2NrXCIsXCJkLXByaW50LWJsb2NrXCI6XCJTZWxlY3QtbW9kdWxlX19kLXByaW50LWJsb2NrXCIsXCJkLXByaW50LXRhYmxlXCI6XCJTZWxlY3QtbW9kdWxlX19kLXByaW50LXRhYmxlXCIsXCJkLXByaW50LXRhYmxlLXJvd1wiOlwiU2VsZWN0LW1vZHVsZV9fZC1wcmludC10YWJsZS1yb3dcIixcImQtcHJpbnQtdGFibGUtY2VsbFwiOlwiU2VsZWN0LW1vZHVsZV9fZC1wcmludC10YWJsZS1jZWxsXCIsXCJkLXByaW50LWZsZXhcIjpcIlNlbGVjdC1tb2R1bGVfX2QtcHJpbnQtZmxleFwiLFwiZC1wcmludC1pbmxpbmUtZmxleFwiOlwiU2VsZWN0LW1vZHVsZV9fZC1wcmludC1pbmxpbmUtZmxleFwiLFwic2VsZWN0XCI6XCJTZWxlY3QtbW9kdWxlX19zZWxlY3RcIixcInNlbGVjdC1lbGVtZW50XCI6XCJTZWxlY3QtbW9kdWxlX19zZWxlY3QtZWxlbWVudFwiLFwic2VsZWN0LWFycm93XCI6XCJTZWxlY3QtbW9kdWxlX19zZWxlY3QtYXJyb3dcIixcImVycm9yXCI6XCJTZWxlY3QtbW9kdWxlX19lcnJvclwiLFwiZGlzYWJsZWRcIjpcIlNlbGVjdC1tb2R1bGVfX2Rpc2FibGVkXCJ9O1xuXG5mdW5jdGlvbiBTZWxlY3QoX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBsYWJlbCA9IF9yZWYubGFiZWwsXG4gICAgICBpZCA9IF9yZWYuaWQsXG4gICAgICBzdHlsZSA9IF9yZWYuc3R5bGUsXG4gICAgICBlcnJvciA9IF9yZWYuZXJyb3IsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjbGFzc05hbWVcIiwgXCJjaGlsZHJlblwiLCBcImxhYmVsXCIsIFwiaWRcIiwgXCJzdHlsZVwiLCBcImVycm9yXCJdKTtcblxuICB2YXIgY2xhc3NOYW1lcyA9IFtzdHlsZXMkby5zZWxlY3QsIGVycm9yICYmIHN0eWxlcyRvLmVycm9yLCBwcm9wcy5kaXNhYmxlZCAmJiBzdHlsZXMkby5kaXNhYmxlZF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KEZsZXgsIHtcbiAgICBkaXJlY3Rpb246IFwiY29sdW1uXCIsXG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgc3R5bGU6IHN0eWxlXG4gIH0sIGxhYmVsICYmIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KExhYmVsLCB7XG4gICAgaHRtbEZvcjogaWQgfHwgJydcbiAgfSwgbGFiZWwpLCAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChGbGV4LCB7XG4gICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXNcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIiwgX2V4dGVuZHMoe1xuICAgIGlkOiBpZCxcbiAgICBjbGFzc05hbWU6IHN0eWxlcyRvWydzZWxlY3QtZWxlbWVudCddXG4gIH0sIHByb3BzKSwgY2hpbGRyZW4pLCAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChJY29uLCB7XG4gICAgY2xhc3NOYW1lOiBzdHlsZXMkb1snc2VsZWN0LWFycm93J10sXG4gICAgbmFtZTogXCJhcnJvdy1yaWdodFwiLFxuICAgIGZvbnRTaXplOiBcIjE2cHhcIlxuICB9KSkpO1xufVxuXG52YXIgc3R5bGVzJHAgPSB7XCJkLW5vbmVcIjpcIk5hdmlnYXRpb24tbW9kdWxlX19kLW5vbmVcIixcImQtaW5saW5lXCI6XCJOYXZpZ2F0aW9uLW1vZHVsZV9fZC1pbmxpbmVcIixcImQtaW5saW5lLWJsb2NrXCI6XCJOYXZpZ2F0aW9uLW1vZHVsZV9fZC1pbmxpbmUtYmxvY2tcIixcImQtYmxvY2tcIjpcIk5hdmlnYXRpb24tbW9kdWxlX19kLWJsb2NrXCIsXCJkLXRhYmxlXCI6XCJOYXZpZ2F0aW9uLW1vZHVsZV9fZC10YWJsZVwiLFwiZC10YWJsZS1yb3dcIjpcIk5hdmlnYXRpb24tbW9kdWxlX19kLXRhYmxlLXJvd1wiLFwiZC10YWJsZS1jZWxsXCI6XCJOYXZpZ2F0aW9uLW1vZHVsZV9fZC10YWJsZS1jZWxsXCIsXCJkLWZsZXhcIjpcIk5hdmlnYXRpb24tbW9kdWxlX19kLWZsZXhcIixcImQtaW5saW5lLWZsZXhcIjpcIk5hdmlnYXRpb24tbW9kdWxlX19kLWlubGluZS1mbGV4XCIsXCJkLXNtLW5vbmVcIjpcIk5hdmlnYXRpb24tbW9kdWxlX19kLXNtLW5vbmVcIixcImQtc20taW5saW5lXCI6XCJOYXZpZ2F0aW9uLW1vZHVsZV9fZC1zbS1pbmxpbmVcIixcImQtc20taW5saW5lLWJsb2NrXCI6XCJOYXZpZ2F0aW9uLW1vZHVsZV9fZC1zbS1pbmxpbmUtYmxvY2tcIixcImQtc20tYmxvY2tcIjpcIk5hdmlnYXRpb24tbW9kdWxlX19kLXNtLWJsb2NrXCIsXCJkLXNtLXRhYmxlXCI6XCJOYXZpZ2F0aW9uLW1vZHVsZV9fZC1zbS10YWJsZVwiLFwiZC1zbS10YWJsZS1yb3dcIjpcIk5hdmlnYXRpb24tbW9kdWxlX19kLXNtLXRhYmxlLXJvd1wiLFwiZC1zbS10YWJsZS1jZWxsXCI6XCJOYXZpZ2F0aW9uLW1vZHVsZV9fZC1zbS10YWJsZS1jZWxsXCIsXCJkLXNtLWZsZXhcIjpcIk5hdmlnYXRpb24tbW9kdWxlX19kLXNtLWZsZXhcIixcImQtc20taW5saW5lLWZsZXhcIjpcIk5hdmlnYXRpb24tbW9kdWxlX19kLXNtLWlubGluZS1mbGV4XCIsXCJkLW1kLW5vbmVcIjpcIk5hdmlnYXRpb24tbW9kdWxlX19kLW1kLW5vbmVcIixcImQtbWQtaW5saW5lXCI6XCJOYXZpZ2F0aW9uLW1vZHVsZV9fZC1tZC1pbmxpbmVcIixcImQtbWQtaW5saW5lLWJsb2NrXCI6XCJOYXZpZ2F0aW9uLW1vZHVsZV9fZC1tZC1pbmxpbmUtYmxvY2tcIixcImQtbWQtYmxvY2tcIjpcIk5hdmlnYXRpb24tbW9kdWxlX19kLW1kLWJsb2NrXCIsXCJkLW1kLXRhYmxlXCI6XCJOYXZpZ2F0aW9uLW1vZHVsZV9fZC1tZC10YWJsZVwiLFwiZC1tZC10YWJsZS1yb3dcIjpcIk5hdmlnYXRpb24tbW9kdWxlX19kLW1kLXRhYmxlLXJvd1wiLFwiZC1tZC10YWJsZS1jZWxsXCI6XCJOYXZpZ2F0aW9uLW1vZHVsZV9fZC1tZC10YWJsZS1jZWxsXCIsXCJkLW1kLWZsZXhcIjpcIk5hdmlnYXRpb24tbW9kdWxlX19kLW1kLWZsZXhcIixcImQtbWQtaW5saW5lLWZsZXhcIjpcIk5hdmlnYXRpb24tbW9kdWxlX19kLW1kLWlubGluZS1mbGV4XCIsXCJkLWxnLW5vbmVcIjpcIk5hdmlnYXRpb24tbW9kdWxlX19kLWxnLW5vbmVcIixcImQtbGctaW5saW5lXCI6XCJOYXZpZ2F0aW9uLW1vZHVsZV9fZC1sZy1pbmxpbmVcIixcImQtbGctaW5saW5lLWJsb2NrXCI6XCJOYXZpZ2F0aW9uLW1vZHVsZV9fZC1sZy1pbmxpbmUtYmxvY2tcIixcImQtbGctYmxvY2tcIjpcIk5hdmlnYXRpb24tbW9kdWxlX19kLWxnLWJsb2NrXCIsXCJkLWxnLXRhYmxlXCI6XCJOYXZpZ2F0aW9uLW1vZHVsZV9fZC1sZy10YWJsZVwiLFwiZC1sZy10YWJsZS1yb3dcIjpcIk5hdmlnYXRpb24tbW9kdWxlX19kLWxnLXRhYmxlLXJvd1wiLFwiZC1sZy10YWJsZS1jZWxsXCI6XCJOYXZpZ2F0aW9uLW1vZHVsZV9fZC1sZy10YWJsZS1jZWxsXCIsXCJkLWxnLWZsZXhcIjpcIk5hdmlnYXRpb24tbW9kdWxlX19kLWxnLWZsZXhcIixcImQtbGctaW5saW5lLWZsZXhcIjpcIk5hdmlnYXRpb24tbW9kdWxlX19kLWxnLWlubGluZS1mbGV4XCIsXCJkLXhsLW5vbmVcIjpcIk5hdmlnYXRpb24tbW9kdWxlX19kLXhsLW5vbmVcIixcImQteGwtaW5saW5lXCI6XCJOYXZpZ2F0aW9uLW1vZHVsZV9fZC14bC1pbmxpbmVcIixcImQteGwtaW5saW5lLWJsb2NrXCI6XCJOYXZpZ2F0aW9uLW1vZHVsZV9fZC14bC1pbmxpbmUtYmxvY2tcIixcImQteGwtYmxvY2tcIjpcIk5hdmlnYXRpb24tbW9kdWxlX19kLXhsLWJsb2NrXCIsXCJkLXhsLXRhYmxlXCI6XCJOYXZpZ2F0aW9uLW1vZHVsZV9fZC14bC10YWJsZVwiLFwiZC14bC10YWJsZS1yb3dcIjpcIk5hdmlnYXRpb24tbW9kdWxlX19kLXhsLXRhYmxlLXJvd1wiLFwiZC14bC10YWJsZS1jZWxsXCI6XCJOYXZpZ2F0aW9uLW1vZHVsZV9fZC14bC10YWJsZS1jZWxsXCIsXCJkLXhsLWZsZXhcIjpcIk5hdmlnYXRpb24tbW9kdWxlX19kLXhsLWZsZXhcIixcImQteGwtaW5saW5lLWZsZXhcIjpcIk5hdmlnYXRpb24tbW9kdWxlX19kLXhsLWlubGluZS1mbGV4XCIsXCJkLXByaW50LW5vbmVcIjpcIk5hdmlnYXRpb24tbW9kdWxlX19kLXByaW50LW5vbmVcIixcImQtcHJpbnQtaW5saW5lXCI6XCJOYXZpZ2F0aW9uLW1vZHVsZV9fZC1wcmludC1pbmxpbmVcIixcImQtcHJpbnQtaW5saW5lLWJsb2NrXCI6XCJOYXZpZ2F0aW9uLW1vZHVsZV9fZC1wcmludC1pbmxpbmUtYmxvY2tcIixcImQtcHJpbnQtYmxvY2tcIjpcIk5hdmlnYXRpb24tbW9kdWxlX19kLXByaW50LWJsb2NrXCIsXCJkLXByaW50LXRhYmxlXCI6XCJOYXZpZ2F0aW9uLW1vZHVsZV9fZC1wcmludC10YWJsZVwiLFwiZC1wcmludC10YWJsZS1yb3dcIjpcIk5hdmlnYXRpb24tbW9kdWxlX19kLXByaW50LXRhYmxlLXJvd1wiLFwiZC1wcmludC10YWJsZS1jZWxsXCI6XCJOYXZpZ2F0aW9uLW1vZHVsZV9fZC1wcmludC10YWJsZS1jZWxsXCIsXCJkLXByaW50LWZsZXhcIjpcIk5hdmlnYXRpb24tbW9kdWxlX19kLXByaW50LWZsZXhcIixcImQtcHJpbnQtaW5saW5lLWZsZXhcIjpcIk5hdmlnYXRpb24tbW9kdWxlX19kLXByaW50LWlubGluZS1mbGV4XCIsXCJuYXZpZ2F0aW9uLXdyYXBwZXJcIjpcIk5hdmlnYXRpb24tbW9kdWxlX19uYXZpZ2F0aW9uLXdyYXBwZXJcIixcIm5hdmlnYXRpb24td3JhcHBlci1zbWFsbFwiOlwiTmF2aWdhdGlvbi1tb2R1bGVfX25hdmlnYXRpb24td3JhcHBlci1zbWFsbFwiLFwibmF2aWdhdGlvbi1saW5rLXdyYXBwZXJcIjpcIk5hdmlnYXRpb24tbW9kdWxlX19uYXZpZ2F0aW9uLWxpbmstd3JhcHBlclwiLFwibmF2aWdhdGlvbi1saW5rLXdyYXBwZXItc21hbGxcIjpcIk5hdmlnYXRpb24tbW9kdWxlX19uYXZpZ2F0aW9uLWxpbmstd3JhcHBlci1zbWFsbFwiLFwibmF2aWdhdGlvbi1saW5rXCI6XCJOYXZpZ2F0aW9uLW1vZHVsZV9fbmF2aWdhdGlvbi1saW5rXCIsXCJuYXZpZ2F0aW9uLWxpbmstYWN0aXZlXCI6XCJOYXZpZ2F0aW9uLW1vZHVsZV9fbmF2aWdhdGlvbi1saW5rLWFjdGl2ZVwiLFwibmF2aWdhdGlvbi1saW5rLXNtYWxsXCI6XCJOYXZpZ2F0aW9uLW1vZHVsZV9fbmF2aWdhdGlvbi1saW5rLXNtYWxsXCIsXCJuYXZpZ2F0aW9uLW1hZ2ljLWxpbmVcIjpcIk5hdmlnYXRpb24tbW9kdWxlX19uYXZpZ2F0aW9uLW1hZ2ljLWxpbmVcIixcIm5hdmlnYXRpb24tbWFnaWMtbGluZS1zbWFsbFwiOlwiTmF2aWdhdGlvbi1tb2R1bGVfX25hdmlnYXRpb24tbWFnaWMtbGluZS1zbWFsbFwifTtcblxudmFyIE5hdmlnYXRpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhOYXZpZ2F0aW9uLCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihOYXZpZ2F0aW9uKTtcblxuICBmdW5jdGlvbiBOYXZpZ2F0aW9uKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBOYXZpZ2F0aW9uKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3RhdGVcIiwge1xuICAgICAgYW5pbWF0ZTogZmFsc2UsXG4gICAgICBjdXJyZW50UG9zaXRpb246IHtcbiAgICAgICAgbGVmdDogMCxcbiAgICAgICAgd2lkdGg6IDBcbiAgICAgIH0sXG4gICAgICBzZWxlY3RlZDogX3RoaXMucHJvcHMuc2VsZWN0ZWQgfHwgMCxcbiAgICAgIHNlbGVjdGVkUG9zaXRpb246IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImxpc3RcIiwgX3RoaXMucHJvcHMubGlua3MubWFwKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlUmVmKCk7XG4gICAgfSkpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNsYXNzTmFtZXNcIiwge1xuICAgICAgbmF2aWdhdGlvbldyYXBwZXI6IFtzdHlsZXMkcFsnbmF2aWdhdGlvbi13cmFwcGVyJ10sIF90aGlzLnByb3BzLnNtYWxsICYmIHN0eWxlcyRwWyduYXZpZ2F0aW9uLXdyYXBwZXItc21hbGwnXV0sXG4gICAgICBuYXZpZ2F0aW9uTGlua1dyYXBwZXI6IFtzdHlsZXMkcFsnbmF2aWdhdGlvbi1saW5rLXdyYXBwZXInXSwgX3RoaXMucHJvcHMuc21hbGwgJiYgc3R5bGVzJHBbJ25hdmlnYXRpb24tbGluay13cmFwcGVyLXNtYWxsJ11dLFxuICAgICAgbmF2aWdhdGlvbkxpbms6IFtzdHlsZXMkcFsnbmF2aWdhdGlvbi1saW5rJ10sIF90aGlzLnByb3BzLnNtYWxsICYmIHN0eWxlcyRwWyduYXZpZ2F0aW9uLWxpbmstc21hbGwnXV0sXG4gICAgICBuYXZpZ2F0aW9uTWFnaWNMaW5lOiBbc3R5bGVzJHBbJ25hdmlnYXRpb24tbWFnaWMtbGluZSddLCBfdGhpcy5wcm9wcy5zbWFsbCAmJiBzdHlsZXMkcFsnbmF2aWdhdGlvbi1tYWdpYy1saW5lLXNtYWxsJ11dXG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25MZWF2ZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMuc3RhdGUuc2VsZWN0ZWRQb3NpdGlvbiAmJiBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGN1cnJlbnRQb3NpdGlvbjogX3RoaXMuc3RhdGUuc2VsZWN0ZWRQb3NpdGlvblxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Ib3ZlclwiLCBmdW5jdGlvbiAoaSkge1xuICAgICAgdmFyIHBvc2l0aW9uID0gX3RoaXMuZ2V0UG9zaXRpb24oX3RoaXMubGlzdFtpXS5jdXJyZW50KTtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBjdXJyZW50UG9zaXRpb246IHBvc2l0aW9uXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkNsaWNrXCIsIGZ1bmN0aW9uIChpKSB7XG4gICAgICB2YXIgcG9zaXRpb24gPSBfdGhpcy5nZXRQb3NpdGlvbihfdGhpcy5saXN0W2ldLmN1cnJlbnQpO1xuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHNlbGVjdGVkOiBpLFxuICAgICAgICBjdXJyZW50UG9zaXRpb246IHBvc2l0aW9uLFxuICAgICAgICBzZWxlY3RlZFBvc2l0aW9uOiBwb3NpdGlvblxuICAgICAgfSk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vblNlbGVjdExpbmspIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25TZWxlY3RMaW5rKGkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImdldFBvc2l0aW9uXCIsIGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiBlbGVtZW50Lm9mZnNldExlZnQgfHwgMCxcbiAgICAgICAgd2lkdGg6IGVsZW1lbnQub2Zmc2V0V2lkdGhcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2V0UG9zaXRpb25cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG5vZGUgPSBfdGhpcy5saXN0W190aGlzLnN0YXRlLnNlbGVjdGVkXS5jdXJyZW50O1xuXG4gICAgICB2YXIgcG9zaXRpb24gPSBfdGhpcy5nZXRQb3NpdGlvbihub2RlKTtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBjdXJyZW50UG9zaXRpb246IHBvc2l0aW9uLFxuICAgICAgICBzZWxlY3RlZFBvc2l0aW9uOiBwb3NpdGlvblxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicmVuZGVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgICBsaW5rcyA9IF90aGlzJHByb3BzLmxpbmtzLFxuICAgICAgICAgIGFzID0gX3RoaXMkcHJvcHMuYXMsXG4gICAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIFtcImNsYXNzTmFtZVwiLCBcImxpbmtzXCIsIFwiYXNcIl0pO1xuXG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogX3RoaXMuY2xhc3NOYW1lcy5uYXZpZ2F0aW9uV3JhcHBlci5jb25jYXQoY2xhc3NOYW1lKS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpLFxuICAgICAgICBpZDogXCJzdHlsZWQtbmF2aWdhdGlvblwiLFxuICAgICAgICBvbk1vdXNlTGVhdmU6IF90aGlzLm9uTGVhdmVcbiAgICAgIH0sIHByb3BzKSwgbGlua3MubWFwKGZ1bmN0aW9uIChsaW5rLCBpKSB7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImxpXCIsIHtcbiAgICAgICAgICBjbGFzc05hbWU6IF90aGlzLmNsYXNzTmFtZXMubmF2aWdhdGlvbkxpbmtXcmFwcGVyLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyksXG4gICAgICAgICAga2V5OiBsaW5rLm5hbWUsXG4gICAgICAgICAgcmVmOiBfdGhpcy5saXN0W2ldXG4gICAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KExpbmssIF9leHRlbmRzKHtcbiAgICAgICAgICBjbGFzc05hbWU6IF90aGlzLmNsYXNzTmFtZXMubmF2aWdhdGlvbkxpbmsuY29uY2F0KGxpbmsuY2xhc3NOYW1lKS5jb25jYXQoaSA9PT0gX3RoaXMuc3RhdGUuc2VsZWN0ZWQgJiYgc3R5bGVzJHBbJ25hdmlnYXRpb24tbGluay1hY3RpdmUnXSkuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKSxcbiAgICAgICAgICBvbk1vdXNlRW50ZXI6IGZ1bmN0aW9uIG9uTW91c2VFbnRlcigpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpcy5vbkhvdmVyKGkpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljaygpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpcy5vbkNsaWNrKGkpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgYXM6IGFzXG4gICAgICAgIH0sIGxpbmspLCBsaW5rLm5hbWUuc3BsaXQoJyAnKS5tYXAoZnVuY3Rpb24gKG4sIGksIGFycikge1xuICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgICAgICAgICAga2V5OiBpXG4gICAgICAgICAgfSwgbiwgYXJyLmxlbmd0aCAhPT0gaSArIDEgJiYgLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIG51bGwsIFwiXFx4QTBcIikpO1xuICAgICAgICB9KSkpO1xuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBfdGhpcy5jbGFzc05hbWVzLm5hdmlnYXRpb25NYWdpY0xpbmUuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKSxcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICB0cmFuc2l0aW9uOiBfdGhpcy5zdGF0ZS5hbmltYXRlID8gJ2xlZnQgMC4zcyBlYXNlLCB3aWR0aCAwLjNzIGVhc2UnIDogJ25vbmUnLFxuICAgICAgICAgIGxlZnQ6IF90aGlzLnN0YXRlLmN1cnJlbnRQb3NpdGlvbi5sZWZ0LFxuICAgICAgICAgIHdpZHRoOiBfdGhpcy5zdGF0ZS5jdXJyZW50UG9zaXRpb24ud2lkdGhcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKE5hdmlnYXRpb24sIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHRoaXMuc2V0UG9zaXRpb24oKTtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMyLnNldFN0YXRlKHtcbiAgICAgICAgICBhbmltYXRlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSwgMTAwKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnNldFBvc2l0aW9uKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5zZXRQb3NpdGlvbik7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIE5hdmlnYXRpb247XG59KFJlYWN0X19kZWZhdWx0LlB1cmVDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoTmF2aWdhdGlvbiwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBhczogJ2EnLFxuICBzZWxlY3RlZDogdW5kZWZpbmVkLFxuICBvblNlbGVjdDogdW5kZWZpbmVkXG59KTtcblxuZnVuY3Rpb24gTG9nbyhfcmVmKSB7XG4gIHZhciBpbnZlcnRlZCA9IF9yZWYuaW52ZXJ0ZWQsXG4gICAgICBfcmVmJHdpZHRoID0gX3JlZi53aWR0aCxcbiAgICAgIHdpZHRoID0gX3JlZiR3aWR0aCA9PT0gdm9pZCAwID8gMTQwIDogX3JlZiR3aWR0aCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImludmVydGVkXCIsIFwid2lkdGhcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgdmlld0JveDogXCIwIDAgMTQwIDIyXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjU2OSAyMS4xMDloLTQuMjVMMCA2LjI3NGg0LjU5N2wyLjg2IDkuMjQ5IDIuODYtOS4yNDloNC41OThMOS41NyAyMS4xMW0xMy4yMzQtNC4yNThhMy4xNTkgMy4xNTkgMCAwIDEgMC02LjMxNiAzLjE1NiAzLjE1NiAwIDAgMSAzLjE0NCAyLjg4NHYuNTQzYTMuMTU3IDMuMTU3IDAgMCAxLTMuMTQ0IDIuODg5bTMuMi05LjgxYTcuMzggNy4zOCAwIDEgMCAwIDEzLjNjLjEzNi40MjUuNTM3LjczIDEuMDAzLjczaDMuMTc0VjYuMzEzaC0zLjE3NGMtLjQ2NiAwLS44NjcuMzA0LTEuMDAzLjcyOG02NC41MjIgMy41NjdhMy4xNTUgMy4xNTUgMCAwIDAtMy4xNDEgMi44ODh2LjU0MmEzLjE1NSAzLjE1NSAwIDAgMCAzLjE0IDIuODg1IDMuMTYgMy4xNiAwIDAgMCAzLjE2NS0zLjE1NyAzLjE2MyAzLjE2MyAwIDAgMC0zLjE2NC0zLjE1OG0wIDEwLjUzNmE3LjMzNyA3LjMzNyAwIDAgMS0zLjE5NS0uNzI3IDEuMDU2IDEuMDU2IDAgMCAxLTEuMDA2LjcyN2gtMy4xNzFWMGg0LjIzdjcuMDlhNy4zNzcgNy4zNzcgMCAwIDEgMTAuNTIyIDYuNjc2Yy4wMDEgNC4wNzQtMy4yOTggNy4zNzgtNy4zOCA3LjM3OG0yNi40MDYtNC4yMmEzLjE1NSAzLjE1NSAwIDAgMS0zLjE0MS0yLjg4NnYtLjU0MmEzLjE1NSAzLjE1NSAwIDAgMSAzLjE0MS0yLjg4OCAzLjE2MyAzLjE2MyAwIDAgMSAzLjE2NCAzLjE1OSAzLjE2MSAzLjE2MSAwIDAgMS0zLjE2NCAzLjE1Nm0uMDEyLTEwLjUxMWMtNS4wNTQgMC03LjQ4MSAzLjk3OC03LjQ4MSA3LjM1NnYuMDI1YzAgMy40MDIgMi40MjcgNy4zOCA3LjQ4IDcuMzggNS4wNTQgMCA3LjQ4LTMuOTc4IDcuNDgtNy4zOCAwLTMuNDAzLTIuNDI2LTcuMzgxLTcuNDgtNy4zODFtLTYwLjQ0OCA0LjE5NmEzLjE1NSAzLjE1NSAwIDAgMSAzLjE0MSAyLjg4OHYuNTQyYTMuMTU2IDMuMTU2IDAgMCAxLTMuMTQxIDIuODg1IDMuMTYgMy4xNiAwIDAgMS0zLjE2NS0zLjE1NyAzLjE2MyAzLjE2MyAwIDAgMSAzLjE2NS0zLjE1OG0wIDEwLjUzNmE3LjM3NyA3LjM3NyAwIDAgMS03LjM4MS03LjM3OEE3LjM3NyA3LjM3NyAwIDAgMSA1OS42MzUgNy4wOVYwaDQuMjN2MjEuMTQ0aC0zLjE3Yy0uNDczIDAtLjg2Ni0uMzAzLTEuMDA2LS43MjdhNy4zNDIgNy4zNDIgMCAwIDEtMy4xOTUuNzI3em01MS4zNDktMTQuODU2djQuMjIyYTMuMDc0IDMuMDc0IDAgMCAwLS4yNDQtLjAxM2MtMS42NCAwLTMuMTM4IDEuMDU3LTMuMTM4IDIuNTg1djguMDI1aC00LjIzNFY2LjI3NmgzLjE3Yy40NzMgMCAuODY3LjMwMyAxLjAwNi43MjdhNy4zNTMgNy4zNTMgMCAwIDEgMy4xOTYtLjcyN2MuMDgyIDAgLjE2Mi4wMS4yNDQuMDEyem0yNS41MjUgNC4yMWMtMS40NjcgMC0yLjM0OC44ODYtMi4zNDggMi41ODR2OC4wOWgtNC4yODVWNi4yNzdoMy4xNzJjLjQ3MiAwIC44NjUuMzA0IDEuMDA1LjcyN2E3LjM0NyA3LjM0NyAwIDAgMSAzLjE5NS0uNzI3czEuMjM5LS4wNTkgMi41MTQuMzQzYzMuMDI3LjkwNCAzLjM3OSAzLjk2MiAzLjM3OSA1LjU5OXY4Ljk1NWgtNC4yODR2LTguMDkxYzAtLjg4My0uMjA1LTIuNTg1LTIuMzQ4LTIuNTg1em0tOTMuMzMzIDBjLTEuNDY3IDAtMi4zNDguODg2LTIuMzQ4IDIuNTg0djguMDloLTQuMjg0VjYuMjc3aDMuMTdjLjQ3NCAwIC44NjYuMzA0IDEuMDA2LjcyN2E3LjM1NCA3LjM1NCAwIDAgMSAzLjE5Ni0uNzI3czEuMjM5LS4wNTkgMi41MTQuMzQzYzMuMDI4LjkwNCAzLjM3OCAzLjk2MiAzLjM3OCA1LjU5OXY4Ljk1NWgtNC4yODR2LTguMDkxYzAtLjg4My0uMjA0LTIuNTg1LTIuMzQ4LTIuNTg1em0zNi4yNCAxLjc1NWgtNS40NTNjLS4xMTYtLjAwMy0uNTUtLjA1NS0uMzI1LS42MzdhMy4zMzYgMy4zMzYgMCAwIDEgNi4xMzQuMDkzYy4xNDcuNDk1LS4yNDYuNTQxLS4zNTYuNTQ0bTIuNTUtMy43OTZjLTEuMzA4LTEuMzg0LTMuMTQ1LTIuMjE0LTUuMjg0LTIuMjE0LTQuMjU0IDAtNy4zMjQgMy41OTgtNy4zMjQgNy41IDAgNC4xNSAzLjM5OCA3LjM5OCA3LjM5OSA3LjM5OGE2Ljc4OSA2Ljc4OSAwIDAgMCAzLjk3Ni0xLjI1OGMxLjE4My0uODA2IDIuMTY1LTIuMDEzIDIuODQ0LTMuNTc0aC00LjI3OGMtLjUwMy43My0xLjIwOCAxLjMxLTIuNTQyIDEuMzEtMS42MzUgMC0zLjA0NS0uOTgzLTMuMjItMi40NjhoMTAuMzkzYy4zMjctMi41NjYtLjIwMi00LjgwNi0xLjk2NC02LjY5NFwiLFxuICAgIGZpbGw6IGludmVydGVkID8gJyNmZmZmZmYnIDogJyMzMzNENDcnLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59XG5cbmZ1bmN0aW9uIFBvcnRhbCQxKF9yZWYpIHtcbiAgdmFyIG5vZGUgPSBfcmVmLm5vZGUsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHZhciBkb21Ob2RlID0gbm9kZSB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5Jyk7XG5cbiAgaWYgKCFkb21Ob2RlKSB7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFJlYWN0X19kZWZhdWx0LkZyYWdtZW50LCBudWxsLCBjaGlsZHJlbik7XG4gIH1cblxuICByZXR1cm4gLyojX19QVVJFX18qL3JlYWN0RG9tLmNyZWF0ZVBvcnRhbChjaGlsZHJlbiwgZG9tTm9kZSk7XG59XG5cbnZhciBzdHlsZXMkcSA9IHtcIm1vZGFsLWJhY2tkcm9wXCI6XCJNb2RhbC1tb2R1bGVfX21vZGFsLWJhY2tkcm9wXCIsXCJmYWRlSW5cIjpcIk1vZGFsLW1vZHVsZV9fZmFkZUluXCIsXCJtb2RhbFwiOlwiTW9kYWwtbW9kdWxlX19tb2RhbFwiLFwic2xpZGVJblwiOlwiTW9kYWwtbW9kdWxlX19zbGlkZUluXCIsXCJjbG9zZS1idXR0b25cIjpcIk1vZGFsLW1vZHVsZV9fY2xvc2UtYnV0dG9uXCIsXCJtb2RhbC1jb250ZW50XCI6XCJNb2RhbC1tb2R1bGVfX21vZGFsLWNvbnRlbnRcIixcIm1vZGFsLWhlYWRlclwiOlwiTW9kYWwtbW9kdWxlX19tb2RhbC1oZWFkZXJcIixcIm1vZGFsLWhlYWRlci1sb2dvXCI6XCJNb2RhbC1tb2R1bGVfX21vZGFsLWhlYWRlci1sb2dvXCIsXCJtb2RhbC1mb290ZXJcIjpcIk1vZGFsLW1vZHVsZV9fbW9kYWwtZm9vdGVyXCIsXCJuby1zY3JvbGxcIjpcIk1vZGFsLW1vZHVsZV9fbm8tc2Nyb2xsXCJ9O1xuXG52YXIgTW9kYWxDb250ZW50ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiXSk7XG5cbiAgdmFyIGNsYXNzZXMgPSBbc3R5bGVzJHFbJ21vZGFsLWNvbnRlbnQnXSwgY2xhc3NOYW1lXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICByZWY6IHJlZlxuICB9LCBwcm9wcyksIGNoaWxkcmVuKTtcbn0pO1xuTW9kYWxDb250ZW50LmRpc3BsYXlOYW1lID0gJ01vZGFsQ29udGVudCc7XG5cbmZ1bmN0aW9uIE1vZGFsSGVhZGVyKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lO1xuICB2YXIgY2xhc3NlcyA9IFtzdHlsZXMkcVsnbW9kYWwtaGVhZGVyJ10sIGNsYXNzTmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgIWNoaWxkcmVuICYmIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KExvZ28sIHtcbiAgICBjbGFzc05hbWU6IHN0eWxlcyRxWydtb2RhbC1oZWFkZXItbG9nbyddXG4gIH0pLCBjaGlsZHJlbiAmJiBjaGlsZHJlbik7XG59XG5cbmZ1bmN0aW9uIE1vZGFsRm9vdGVyKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lO1xuICB2YXIgY2xhc3NlcyA9IFtzdHlsZXMkcVsnbW9kYWwtZm9vdGVyJ10sIGNsYXNzTmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgY2hpbGRyZW4pO1xufVxuXG52YXIgQkFDS0RST1BfSUQgPSAnbW9kYWwtYmFja2Ryb3AnO1xuXG5mdW5jdGlvbiBhZGROb1Njcm9sbCgpIHtcbiAgaWYgKCFkb2N1bWVudC5ib2R5IHx8ICFkb2N1bWVudC5ib2R5LmNsYXNzTGlzdCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKHN0eWxlcyRxWyduby1zY3JvbGwnXSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlTm9TY3JvbGwoKSB7XG4gIGlmICghZG9jdW1lbnQuYm9keSB8fCAhZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodHlwZW9mIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShzdHlsZXMkcVsnbm8tc2Nyb2xsJ10pO1xuICB9XG59XG5cbmZ1bmN0aW9uIE1vZGFsKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgc3R5bGUgPSBfcmVmLnN0eWxlLFxuICAgICAgaXNPcGVuQ29udHJvbGxlZCA9IF9yZWYuaXNPcGVuLFxuICAgICAgX3JlZiRhbGxvd0JvZHlTY3JvbGwgPSBfcmVmLmFsbG93Qm9keVNjcm9sbCxcbiAgICAgIGFsbG93Qm9keVNjcm9sbCA9IF9yZWYkYWxsb3dCb2R5U2Nyb2xsID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkYWxsb3dCb2R5U2Nyb2xsLFxuICAgICAgX3JlZiRjbG9zZU9uQmFja2Ryb3BDID0gX3JlZi5jbG9zZU9uQmFja2Ryb3BDbGljayxcbiAgICAgIGNsb3NlT25CYWNrZHJvcENsaWNrID0gX3JlZiRjbG9zZU9uQmFja2Ryb3BDID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkY2xvc2VPbkJhY2tkcm9wQyxcbiAgICAgIF9yZWYkb25DbG9zZSA9IF9yZWYub25DbG9zZSxcbiAgICAgIG9uQ2xvc2UgPSBfcmVmJG9uQ2xvc2UgPT09IHZvaWQgMCA/IGZ1bmN0aW9uICgpIHt9IDogX3JlZiRvbkNsb3NlLFxuICAgICAgbG9jYXRpb25JbkRvbSA9IF9yZWYubG9jYXRpb25JbkRvbTtcblxuICB2YXIgX3VzZVN0YXRlID0gUmVhY3QudXNlU3RhdGUodHJ1ZSksXG4gICAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICAgIGlzT3BlbiA9IF91c2VTdGF0ZTJbMF0sXG4gICAgICBzZXRJc09wZW4gPSBfdXNlU3RhdGUyWzFdOyAvLyBJZiB0aGUgY29tcG9uZW50IGlzIGNvbnRyb2xsZWQsIHdlIGRvbid0IHdhdGNoIHRoZSBsb2NhbCBgaXNPcGVuYCBzdGF0ZVxuXG5cbiAgdmFyIGlzQ29udHJvbGxlZCA9IGlzT3BlbkNvbnRyb2xsZWQgIT09IHVuZGVmaW5lZDtcbiAgdmFyIG1vZGFsSXNPcGVuID0gaXNDb250cm9sbGVkID8gaXNPcGVuQ29udHJvbGxlZCA6IGlzT3BlbjtcbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBoYW5kbGVFc2NhcGUoX3JlZjIpIHtcbiAgICAgIHZhciBrZXkgPSBfcmVmMi5rZXk7XG5cbiAgICAgIGlmIChrZXkgPT09ICdFc2MnIHx8IGtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgaWYgKCFpc0NvbnRyb2xsZWQpIHtcbiAgICAgICAgICBzZXRJc09wZW4oZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgb25DbG9zZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtb2RhbElzT3Blbikge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZUVzY2FwZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVFc2NhcGUpO1xuICAgIH07XG4gIH0sIFtpc09wZW5Db250cm9sbGVkLCBvbkNsb3NlLCBtb2RhbElzT3BlbiwgaXNDb250cm9sbGVkXSk7XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKG1vZGFsSXNPcGVuICYmICFhbGxvd0JvZHlTY3JvbGwpIHtcbiAgICAgIGFkZE5vU2Nyb2xsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbW92ZU5vU2Nyb2xsKCk7XG4gICAgfSAvLyBBbHdheXMgcmVtb3ZlIGl0IGluIGNhc2UgdGhlIGNvbXBvbmVudCB1bm1vdW50cyB1bmV4cGVjdGVkbHlcblxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlbW92ZU5vU2Nyb2xsKCk7XG4gICAgfTtcbiAgfSwgW21vZGFsSXNPcGVuLCBhbGxvd0JvZHlTY3JvbGxdKTtcblxuICBmdW5jdGlvbiBoYW5kbGVDbG9zZSgpIHtcbiAgICBpZiAoIWlzQ29udHJvbGxlZCkge1xuICAgICAgc2V0SXNPcGVuKGZhbHNlKTtcbiAgICB9XG5cbiAgICBvbkNsb3NlKCk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkJhY2tkcm9wQ2xpY2soZXZlbnQpIHtcbiAgICBpZiAoIWNsb3NlT25CYWNrZHJvcENsaWNrKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBNYWtlIHN1cmUgdGhhdCBpZiB5b3UgaGF2ZSBhIG1vZGFsIGluIGEgbW9kYWwgaXQgd29uJ3QgY2xvc2UgYWxsIG1vZGFscyBvbiBiYWNrZHJvcCBjbGljaywgYnV0IHJhdGhlciBvbmx5IHRoZSB0b3Agb25lLlxuXG5cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgLy8gQHRzLWlnbm9yZTogaWQgZXhpc3RzLCBqdXN0IG5vdCBvbiB0aGUgdHlwZSBmb3Igc29tZSByZWFzb25cblxuICAgIGlmIChldmVudC50YXJnZXQgJiYgZXZlbnQudGFyZ2V0LmlkID09PSBCQUNLRFJPUF9JRCkge1xuICAgICAgaGFuZGxlQ2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIW1vZGFsSXNPcGVuKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUG9ydGFsJDEsIHtcbiAgICBub2RlOiBsb2NhdGlvbkluRG9tXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IHN0eWxlcyRxWydtb2RhbC1iYWNrZHJvcCddLFxuICAgIGlkOiBCQUNLRFJPUF9JRCxcbiAgICB0YWJJbmRleDogLTEsXG4gICAgcm9sZTogXCJkaWFsb2dcIixcbiAgICBvbkNsaWNrOiBvbkJhY2tkcm9wQ2xpY2tcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQoc3R5bGVzJHFbJ21vZGFsJ10sIFwiIFwiKS5jb25jYXQoY2xhc3NOYW1lIHx8ICcnKSxcbiAgICBzdHlsZTogc3R5bGUsXG4gICAgcm9sZTogXCJkb2N1bWVudFwiXG4gIH0sIGNoaWxkcmVuLCAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChQcmVzc2FibGUsIHtcbiAgICBhczogXCJidXR0b25cIixcbiAgICB2YXJpYW50OiBcInRleHRcIixcbiAgICBvbkNsaWNrOiBoYW5kbGVDbG9zZSxcbiAgICBjbGFzc05hbWU6IHN0eWxlcyRxWydjbG9zZS1idXR0b24nXVxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChJY29uLCB7XG4gICAgbmFtZTogXCJjbG9zZVwiXG4gIH0pKSkpKTtcbn1cblxuTW9kYWwuQ29udGVudCA9IE1vZGFsQ29udGVudDtcbk1vZGFsLkhlYWRlciA9IE1vZGFsSGVhZGVyO1xuTW9kYWwuRm9vdGVyID0gTW9kYWxGb290ZXI7XG5cbnZhciBzdHlsZXMkciA9IHtcImQtbm9uZVwiOlwiUHJvZ3Jlc3NCYXItbW9kdWxlX19kLW5vbmVcIixcImQtaW5saW5lXCI6XCJQcm9ncmVzc0Jhci1tb2R1bGVfX2QtaW5saW5lXCIsXCJkLWlubGluZS1ibG9ja1wiOlwiUHJvZ3Jlc3NCYXItbW9kdWxlX19kLWlubGluZS1ibG9ja1wiLFwiZC1ibG9ja1wiOlwiUHJvZ3Jlc3NCYXItbW9kdWxlX19kLWJsb2NrXCIsXCJkLXRhYmxlXCI6XCJQcm9ncmVzc0Jhci1tb2R1bGVfX2QtdGFibGVcIixcImQtdGFibGUtcm93XCI6XCJQcm9ncmVzc0Jhci1tb2R1bGVfX2QtdGFibGUtcm93XCIsXCJkLXRhYmxlLWNlbGxcIjpcIlByb2dyZXNzQmFyLW1vZHVsZV9fZC10YWJsZS1jZWxsXCIsXCJkLWZsZXhcIjpcIlByb2dyZXNzQmFyLW1vZHVsZV9fZC1mbGV4XCIsXCJkLWlubGluZS1mbGV4XCI6XCJQcm9ncmVzc0Jhci1tb2R1bGVfX2QtaW5saW5lLWZsZXhcIixcImQtc20tbm9uZVwiOlwiUHJvZ3Jlc3NCYXItbW9kdWxlX19kLXNtLW5vbmVcIixcImQtc20taW5saW5lXCI6XCJQcm9ncmVzc0Jhci1tb2R1bGVfX2Qtc20taW5saW5lXCIsXCJkLXNtLWlubGluZS1ibG9ja1wiOlwiUHJvZ3Jlc3NCYXItbW9kdWxlX19kLXNtLWlubGluZS1ibG9ja1wiLFwiZC1zbS1ibG9ja1wiOlwiUHJvZ3Jlc3NCYXItbW9kdWxlX19kLXNtLWJsb2NrXCIsXCJkLXNtLXRhYmxlXCI6XCJQcm9ncmVzc0Jhci1tb2R1bGVfX2Qtc20tdGFibGVcIixcImQtc20tdGFibGUtcm93XCI6XCJQcm9ncmVzc0Jhci1tb2R1bGVfX2Qtc20tdGFibGUtcm93XCIsXCJkLXNtLXRhYmxlLWNlbGxcIjpcIlByb2dyZXNzQmFyLW1vZHVsZV9fZC1zbS10YWJsZS1jZWxsXCIsXCJkLXNtLWZsZXhcIjpcIlByb2dyZXNzQmFyLW1vZHVsZV9fZC1zbS1mbGV4XCIsXCJkLXNtLWlubGluZS1mbGV4XCI6XCJQcm9ncmVzc0Jhci1tb2R1bGVfX2Qtc20taW5saW5lLWZsZXhcIixcImQtbWQtbm9uZVwiOlwiUHJvZ3Jlc3NCYXItbW9kdWxlX19kLW1kLW5vbmVcIixcImQtbWQtaW5saW5lXCI6XCJQcm9ncmVzc0Jhci1tb2R1bGVfX2QtbWQtaW5saW5lXCIsXCJkLW1kLWlubGluZS1ibG9ja1wiOlwiUHJvZ3Jlc3NCYXItbW9kdWxlX19kLW1kLWlubGluZS1ibG9ja1wiLFwiZC1tZC1ibG9ja1wiOlwiUHJvZ3Jlc3NCYXItbW9kdWxlX19kLW1kLWJsb2NrXCIsXCJkLW1kLXRhYmxlXCI6XCJQcm9ncmVzc0Jhci1tb2R1bGVfX2QtbWQtdGFibGVcIixcImQtbWQtdGFibGUtcm93XCI6XCJQcm9ncmVzc0Jhci1tb2R1bGVfX2QtbWQtdGFibGUtcm93XCIsXCJkLW1kLXRhYmxlLWNlbGxcIjpcIlByb2dyZXNzQmFyLW1vZHVsZV9fZC1tZC10YWJsZS1jZWxsXCIsXCJkLW1kLWZsZXhcIjpcIlByb2dyZXNzQmFyLW1vZHVsZV9fZC1tZC1mbGV4XCIsXCJkLW1kLWlubGluZS1mbGV4XCI6XCJQcm9ncmVzc0Jhci1tb2R1bGVfX2QtbWQtaW5saW5lLWZsZXhcIixcImQtbGctbm9uZVwiOlwiUHJvZ3Jlc3NCYXItbW9kdWxlX19kLWxnLW5vbmVcIixcImQtbGctaW5saW5lXCI6XCJQcm9ncmVzc0Jhci1tb2R1bGVfX2QtbGctaW5saW5lXCIsXCJkLWxnLWlubGluZS1ibG9ja1wiOlwiUHJvZ3Jlc3NCYXItbW9kdWxlX19kLWxnLWlubGluZS1ibG9ja1wiLFwiZC1sZy1ibG9ja1wiOlwiUHJvZ3Jlc3NCYXItbW9kdWxlX19kLWxnLWJsb2NrXCIsXCJkLWxnLXRhYmxlXCI6XCJQcm9ncmVzc0Jhci1tb2R1bGVfX2QtbGctdGFibGVcIixcImQtbGctdGFibGUtcm93XCI6XCJQcm9ncmVzc0Jhci1tb2R1bGVfX2QtbGctdGFibGUtcm93XCIsXCJkLWxnLXRhYmxlLWNlbGxcIjpcIlByb2dyZXNzQmFyLW1vZHVsZV9fZC1sZy10YWJsZS1jZWxsXCIsXCJkLWxnLWZsZXhcIjpcIlByb2dyZXNzQmFyLW1vZHVsZV9fZC1sZy1mbGV4XCIsXCJkLWxnLWlubGluZS1mbGV4XCI6XCJQcm9ncmVzc0Jhci1tb2R1bGVfX2QtbGctaW5saW5lLWZsZXhcIixcImQteGwtbm9uZVwiOlwiUHJvZ3Jlc3NCYXItbW9kdWxlX19kLXhsLW5vbmVcIixcImQteGwtaW5saW5lXCI6XCJQcm9ncmVzc0Jhci1tb2R1bGVfX2QteGwtaW5saW5lXCIsXCJkLXhsLWlubGluZS1ibG9ja1wiOlwiUHJvZ3Jlc3NCYXItbW9kdWxlX19kLXhsLWlubGluZS1ibG9ja1wiLFwiZC14bC1ibG9ja1wiOlwiUHJvZ3Jlc3NCYXItbW9kdWxlX19kLXhsLWJsb2NrXCIsXCJkLXhsLXRhYmxlXCI6XCJQcm9ncmVzc0Jhci1tb2R1bGVfX2QteGwtdGFibGVcIixcImQteGwtdGFibGUtcm93XCI6XCJQcm9ncmVzc0Jhci1tb2R1bGVfX2QteGwtdGFibGUtcm93XCIsXCJkLXhsLXRhYmxlLWNlbGxcIjpcIlByb2dyZXNzQmFyLW1vZHVsZV9fZC14bC10YWJsZS1jZWxsXCIsXCJkLXhsLWZsZXhcIjpcIlByb2dyZXNzQmFyLW1vZHVsZV9fZC14bC1mbGV4XCIsXCJkLXhsLWlubGluZS1mbGV4XCI6XCJQcm9ncmVzc0Jhci1tb2R1bGVfX2QteGwtaW5saW5lLWZsZXhcIixcImQtcHJpbnQtbm9uZVwiOlwiUHJvZ3Jlc3NCYXItbW9kdWxlX19kLXByaW50LW5vbmVcIixcImQtcHJpbnQtaW5saW5lXCI6XCJQcm9ncmVzc0Jhci1tb2R1bGVfX2QtcHJpbnQtaW5saW5lXCIsXCJkLXByaW50LWlubGluZS1ibG9ja1wiOlwiUHJvZ3Jlc3NCYXItbW9kdWxlX19kLXByaW50LWlubGluZS1ibG9ja1wiLFwiZC1wcmludC1ibG9ja1wiOlwiUHJvZ3Jlc3NCYXItbW9kdWxlX19kLXByaW50LWJsb2NrXCIsXCJkLXByaW50LXRhYmxlXCI6XCJQcm9ncmVzc0Jhci1tb2R1bGVfX2QtcHJpbnQtdGFibGVcIixcImQtcHJpbnQtdGFibGUtcm93XCI6XCJQcm9ncmVzc0Jhci1tb2R1bGVfX2QtcHJpbnQtdGFibGUtcm93XCIsXCJkLXByaW50LXRhYmxlLWNlbGxcIjpcIlByb2dyZXNzQmFyLW1vZHVsZV9fZC1wcmludC10YWJsZS1jZWxsXCIsXCJkLXByaW50LWZsZXhcIjpcIlByb2dyZXNzQmFyLW1vZHVsZV9fZC1wcmludC1mbGV4XCIsXCJkLXByaW50LWlubGluZS1mbGV4XCI6XCJQcm9ncmVzc0Jhci1tb2R1bGVfX2QtcHJpbnQtaW5saW5lLWZsZXhcIixcInByb2dyZXNzLWJhclwiOlwiUHJvZ3Jlc3NCYXItbW9kdWxlX19wcm9ncmVzcy1iYXJcIixcInByb2dyZXNzLWJhci1wcm9ncmVzc1wiOlwiUHJvZ3Jlc3NCYXItbW9kdWxlX19wcm9ncmVzcy1iYXItcHJvZ3Jlc3NcIixcInByb2dyZXNzLWJhci1wcm9ncmVzcy1uZXV0cmFsXCI6XCJQcm9ncmVzc0Jhci1tb2R1bGVfX3Byb2dyZXNzLWJhci1wcm9ncmVzcy1uZXV0cmFsXCIsXCJwcm9ncmVzcy1iYXItcHJvZ3Jlc3Mtc3VjY2Vzc1wiOlwiUHJvZ3Jlc3NCYXItbW9kdWxlX19wcm9ncmVzcy1iYXItcHJvZ3Jlc3Mtc3VjY2Vzc1wiLFwicHJvZ3Jlc3MtYmFyLXByb2dyZXNzLWRhbmdlclwiOlwiUHJvZ3Jlc3NCYXItbW9kdWxlX19wcm9ncmVzcy1iYXItcHJvZ3Jlc3MtZGFuZ2VyXCIsXCJwcm9ncmVzcy1iYXItcHJvZ3Jlc3Mtd2FybmluZ1wiOlwiUHJvZ3Jlc3NCYXItbW9kdWxlX19wcm9ncmVzcy1iYXItcHJvZ3Jlc3Mtd2FybmluZ1wifTtcblxuZnVuY3Rpb24gUHJvZ3Jlc3NCYXIoX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBwcm9ncmVzcyA9IF9yZWYucHJvZ3Jlc3MsXG4gICAgICBfcmVmJHZhcmlhbnQgPSBfcmVmLnZhcmlhbnQsXG4gICAgICB2YXJpYW50ID0gX3JlZiR2YXJpYW50ID09PSB2b2lkIDAgPyAnbmV1dHJhbCcgOiBfcmVmJHZhcmlhbnQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjbGFzc05hbWVcIiwgXCJwcm9ncmVzc1wiLCBcInZhcmlhbnRcIl0pO1xuXG4gIHZhciB3cmFwcGVyQ2xhc3NlcyA9IFtzdHlsZXMkclsncHJvZ3Jlc3MtYmFyJ10sIGNsYXNzTmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKTtcbiAgdmFyIHByb2dyZXNzQ2xhc3NlcyA9IFtzdHlsZXMkclsncHJvZ3Jlc3MtYmFyLXByb2dyZXNzJ10sIHN0eWxlcyRyW1wicHJvZ3Jlc3MtYmFyLXByb2dyZXNzLVwiLmNvbmNhdCh2YXJpYW50KV1dLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiB3cmFwcGVyQ2xhc3Nlc1xuICB9LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IHByb2dyZXNzQ2xhc3NlcyxcbiAgICBzdHlsZToge1xuICAgICAgd2lkdGg6IFwiXCIuY29uY2F0KHByb2dyZXNzLCBcIiVcIilcbiAgICB9XG4gIH0pKTtcbn1cblxudmFyIGNsYXNzbmFtZXMgPSBjcmVhdGVDb21tb25qc01vZHVsZShmdW5jdGlvbiAobW9kdWxlKSB7XG4vKiFcbiAgQ29weXJpZ2h0IChjKSAyMDE3IEplZCBXYXRzb24uXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXG4gIGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXNcbiovXG4vKiBnbG9iYWwgZGVmaW5lICovXG5cbihmdW5jdGlvbiAoKSB7XG5cblx0dmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXG5cdGZ1bmN0aW9uIGNsYXNzTmFtZXMgKCkge1xuXHRcdHZhciBjbGFzc2VzID0gW107XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdGlmICghYXJnKSBjb250aW51ZTtcblxuXHRcdFx0dmFyIGFyZ1R5cGUgPSB0eXBlb2YgYXJnO1xuXG5cdFx0XHRpZiAoYXJnVHlwZSA9PT0gJ3N0cmluZycgfHwgYXJnVHlwZSA9PT0gJ251bWJlcicpIHtcblx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGFyZyk7XG5cdFx0XHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSAmJiBhcmcubGVuZ3RoKSB7XG5cdFx0XHRcdHZhciBpbm5lciA9IGNsYXNzTmFtZXMuYXBwbHkobnVsbCwgYXJnKTtcblx0XHRcdFx0aWYgKGlubmVyKSB7XG5cdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGlubmVyKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChhcmdUeXBlID09PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRmb3IgKHZhciBrZXkgaW4gYXJnKSB7XG5cdFx0XHRcdFx0aWYgKGhhc093bi5jYWxsKGFyZywga2V5KSAmJiBhcmdba2V5XSkge1xuXHRcdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGtleSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xuXHR9XG5cblx0aWYgKCBtb2R1bGUuZXhwb3J0cykge1xuXHRcdGNsYXNzTmFtZXMuZGVmYXVsdCA9IGNsYXNzTmFtZXM7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBjbGFzc05hbWVzO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5jbGFzc05hbWVzID0gY2xhc3NOYW1lcztcblx0fVxufSgpKTtcbn0pO1xuXG5mdW5jdGlvbiByZXF1aXJlZEFyZ3MocmVxdWlyZWQsIGFyZ3MpIHtcbiAgaWYgKGFyZ3MubGVuZ3RoIDwgcmVxdWlyZWQpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHJlcXVpcmVkICsgJyBhcmd1bWVudCcgKyAocmVxdWlyZWQgPiAxID8gJ3MnIDogJycpICsgJyByZXF1aXJlZCwgYnV0IG9ubHkgJyArIGFyZ3MubGVuZ3RoICsgJyBwcmVzZW50Jyk7XG4gIH1cbn1cblxuLyoqXG4gKiBAbmFtZSBpc0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIHZhbHVlIGEgZGF0ZT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZS4gVGhlIGZ1bmN0aW9uIHdvcmtzIGZvciBkYXRlcyB0cmFuc2ZlcnJlZCBhY3Jvc3MgaWZyYW1lcy5cbiAqXG4gKiAjIyMgdjIuMC4wIGJyZWFraW5nIGNoYW5nZXM6XG4gKlxuICogLSBbQ2hhbmdlcyB0aGF0IGFyZSBjb21tb24gZm9yIHRoZSB3aG9sZSBsaWJyYXJ5XShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlR3VpZGUubWQjQ29tbW9uLUNoYW5nZXMpLlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgLSB0aGUgdmFsdWUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBhIGRhdGVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIGEgdmFsaWQgZGF0ZTpcbiAqIHZhciByZXN1bHQgPSBpc0RhdGUobmV3IERhdGUoKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gaW52YWxpZCBkYXRlOlxuICogdmFyIHJlc3VsdCA9IGlzRGF0ZShuZXcgRGF0ZShOYU4pKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBzb21lIHZhbHVlOlxuICogdmFyIHJlc3VsdCA9IGlzRGF0ZSgnMjAxNC0wMi0zMScpXG4gKiAvLz0+IGZhbHNlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhbiBvYmplY3Q6XG4gKiB2YXIgcmVzdWx0ID0gaXNEYXRlKHt9KVxuICogLy89PiBmYWxzZVxuICovXG5cbmZ1bmN0aW9uIGlzRGF0ZSh2YWx1ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSB8fCB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IERhdGVdJztcbn1cblxuLyoqXG4gKiBAbmFtZSB0b0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgQ29udmVydCB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGFuIGluc3RhbmNlIG9mIERhdGUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGl0cyBjbG9uZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgYSBudW1iZXIsIGl0IGlzIHRyZWF0ZWQgYXMgYSB0aW1lc3RhbXAuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIG5vbmUgb2YgdGhlIGFib3ZlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBJbnZhbGlkIERhdGUuXG4gKlxuICogKipOb3RlKio6ICphbGwqIERhdGUgYXJndW1lbnRzIHBhc3NlZCB0byBhbnkgKmRhdGUtZm5zKiBmdW5jdGlvbiBpcyBwcm9jZXNzZWQgYnkgYHRvRGF0ZWAuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gYXJndW1lbnQgLSB0aGUgdmFsdWUgdG8gY29udmVydFxuICogQHJldHVybnMge0RhdGV9IHRoZSBwYXJzZWQgZGF0ZSBpbiB0aGUgbG9jYWwgdGltZSB6b25lXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ2xvbmUgdGhlIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSB0b0RhdGUobmV3IERhdGUoMjAxNCwgMSwgMTEsIDExLCAzMCwgMzApKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCB0aGUgdGltZXN0YW1wIHRvIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSB0b0RhdGUoMTM5MjA5ODQzMDAwMClcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKi9cblxuZnVuY3Rpb24gdG9EYXRlKGFyZ3VtZW50KSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgYXJnU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50KTsgLy8gQ2xvbmUgdGhlIGRhdGVcblxuICBpZiAoYXJndW1lbnQgaW5zdGFuY2VvZiBEYXRlIHx8IHR5cGVvZiBhcmd1bWVudCA9PT0gJ29iamVjdCcgJiYgYXJnU3RyID09PSAnW29iamVjdCBEYXRlXScpIHtcbiAgICAvLyBQcmV2ZW50IHRoZSBkYXRlIHRvIGxvc2UgdGhlIG1pbGxpc2Vjb25kcyB3aGVuIHBhc3NlZCB0byBuZXcgRGF0ZSgpIGluIElFMTBcbiAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQuZ2V0VGltZSgpKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgYXJndW1lbnQgPT09ICdudW1iZXInIHx8IGFyZ1N0ciA9PT0gJ1tvYmplY3QgTnVtYmVyXScpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQpO1xuICB9IGVsc2Uge1xuICAgIGlmICgodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJyB8fCBhcmdTdHIgPT09ICdbb2JqZWN0IFN0cmluZ10nKSAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXCJTdGFydGluZyB3aXRoIHYyLjAuMC1iZXRhLjEgZGF0ZS1mbnMgZG9lc24ndCBhY2NlcHQgc3RyaW5ncyBhcyBkYXRlIGFyZ3VtZW50cy4gUGxlYXNlIHVzZSBgcGFyc2VJU09gIHRvIHBhcnNlIHN0cmluZ3MuIFNlZTogaHR0cHM6Ly9naXQuaW8vZmp1bGVcIik7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG5cbiAgICAgIGNvbnNvbGUud2FybihuZXcgRXJyb3IoKS5zdGFjayk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gIH1cbn1cblxuLyoqXG4gKiBAbmFtZSBpc1ZhbGlkXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiBkYXRlIHZhbGlkP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyBmYWxzZSBpZiBhcmd1bWVudCBpcyBJbnZhbGlkIERhdGUgYW5kIHRydWUgb3RoZXJ3aXNlLlxuICogQXJndW1lbnQgaXMgY29udmVydGVkIHRvIERhdGUgdXNpbmcgYHRvRGF0ZWAuIFNlZSBbdG9EYXRlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL3RvRGF0ZX1cbiAqIEludmFsaWQgRGF0ZSBpcyBhIERhdGUsIHdob3NlIHRpbWUgdmFsdWUgaXMgTmFOLlxuICpcbiAqIFRpbWUgdmFsdWUgb2YgRGF0ZTogaHR0cDovL2VzNS5naXRodWIuaW8vI3gxNS45LjEuMVxuICpcbiAqICMjIyB2Mi4wLjAgYnJlYWtpbmcgY2hhbmdlczpcbiAqXG4gKiAtIFtDaGFuZ2VzIHRoYXQgYXJlIGNvbW1vbiBmb3IgdGhlIHdob2xlIGxpYnJhcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNDb21tb24tQ2hhbmdlcykuXG4gKlxuICogLSBOb3cgYGlzVmFsaWRgIGRvZXNuJ3QgdGhyb3cgYW4gZXhjZXB0aW9uXG4gKiAgIGlmIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqICAgSW5zdGVhZCwgYXJndW1lbnQgaXMgY29udmVydGVkIGJlZm9yZWhhbmQgdXNpbmcgYHRvRGF0ZWAuXG4gKlxuICogICBFeGFtcGxlczpcbiAqXG4gKiAgIHwgYGlzVmFsaWRgIGFyZ3VtZW50ICAgICAgICB8IEJlZm9yZSB2Mi4wLjAgfCB2Mi4wLjAgb253YXJkIHxcbiAqICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tfFxuICogICB8IGBuZXcgRGF0ZSgpYCAgICAgICAgICAgICAgfCBgdHJ1ZWAgICAgICAgIHwgYHRydWVgICAgICAgICB8XG4gKiAgIHwgYG5ldyBEYXRlKCcyMDE2LTAxLTAxJylgICB8IGB0cnVlYCAgICAgICAgfCBgdHJ1ZWAgICAgICAgIHxcbiAqICAgfCBgbmV3IERhdGUoJycpYCAgICAgICAgICAgIHwgYGZhbHNlYCAgICAgICB8IGBmYWxzZWAgICAgICAgfFxuICogICB8IGBuZXcgRGF0ZSgxNDg4MzcwODM1MDgxKWAgfCBgdHJ1ZWAgICAgICAgIHwgYHRydWVgICAgICAgICB8XG4gKiAgIHwgYG5ldyBEYXRlKE5hTilgICAgICAgICAgICB8IGBmYWxzZWAgICAgICAgfCBgZmFsc2VgICAgICAgIHxcbiAqICAgfCBgJzIwMTYtMDEtMDEnYCAgICAgICAgICAgIHwgYFR5cGVFcnJvcmAgICB8IGBmYWxzZWAgICAgICAgfFxuICogICB8IGAnJ2AgICAgICAgICAgICAgICAgICAgICAgfCBgVHlwZUVycm9yYCAgIHwgYGZhbHNlYCAgICAgICB8XG4gKiAgIHwgYDE0ODgzNzA4MzUwODFgICAgICAgICAgICB8IGBUeXBlRXJyb3JgICAgfCBgdHJ1ZWAgICAgICAgIHxcbiAqICAgfCBgTmFOYCAgICAgICAgICAgICAgICAgICAgIHwgYFR5cGVFcnJvcmAgICB8IGBmYWxzZWAgICAgICAgfFxuICpcbiAqICAgV2UgaW50cm9kdWNlIHRoaXMgY2hhbmdlIHRvIG1ha2UgKmRhdGUtZm5zKiBjb25zaXN0ZW50IHdpdGggRUNNQVNjcmlwdCBiZWhhdmlvclxuICogICB0aGF0IHRyeSB0byBjb2VyY2UgYXJndW1lbnRzIHRvIHRoZSBleHBlY3RlZCB0eXBlXG4gKiAgICh3aGljaCBpcyBhbHNvIHRoZSBjYXNlIHdpdGggb3RoZXIgKmRhdGUtZm5zKiBmdW5jdGlvbnMpLlxuICpcbiAqIEBwYXJhbSB7Kn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdGhlIGRhdGUgaXMgdmFsaWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbGlkIGRhdGU6XG4gKiB2YXIgcmVzdWx0ID0gaXNWYWxpZChuZXcgRGF0ZSgyMDE0LCAxLCAzMSkpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHRoZSB2YWx1ZSwgY29udmVydGFibGUgaW50byBhIGRhdGU6XG4gKiB2YXIgcmVzdWx0ID0gaXNWYWxpZCgxMzkzODA0ODAwMDAwKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciB0aGUgaW52YWxpZCBkYXRlOlxuICogdmFyIHJlc3VsdCA9IGlzVmFsaWQobmV3IERhdGUoJycpKVxuICogLy89PiBmYWxzZVxuICovXG5cbmZ1bmN0aW9uIGlzVmFsaWQoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICByZXR1cm4gIWlzTmFOKGRhdGUpO1xufVxuXG52YXIgZm9ybWF0RGlzdGFuY2VMb2NhbGUgPSB7XG4gIGxlc3NUaGFuWFNlY29uZHM6IHtcbiAgICBvbmU6ICdsZXNzIHRoYW4gYSBzZWNvbmQnLFxuICAgIG90aGVyOiAnbGVzcyB0aGFuIHt7Y291bnR9fSBzZWNvbmRzJ1xuICB9LFxuICB4U2Vjb25kczoge1xuICAgIG9uZTogJzEgc2Vjb25kJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBzZWNvbmRzJ1xuICB9LFxuICBoYWxmQU1pbnV0ZTogJ2hhbGYgYSBtaW51dGUnLFxuICBsZXNzVGhhblhNaW51dGVzOiB7XG4gICAgb25lOiAnbGVzcyB0aGFuIGEgbWludXRlJyxcbiAgICBvdGhlcjogJ2xlc3MgdGhhbiB7e2NvdW50fX0gbWludXRlcydcbiAgfSxcbiAgeE1pbnV0ZXM6IHtcbiAgICBvbmU6ICcxIG1pbnV0ZScsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gbWludXRlcydcbiAgfSxcbiAgYWJvdXRYSG91cnM6IHtcbiAgICBvbmU6ICdhYm91dCAxIGhvdXInLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IGhvdXJzJ1xuICB9LFxuICB4SG91cnM6IHtcbiAgICBvbmU6ICcxIGhvdXInLFxuICAgIG90aGVyOiAne3tjb3VudH19IGhvdXJzJ1xuICB9LFxuICB4RGF5czoge1xuICAgIG9uZTogJzEgZGF5JyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBkYXlzJ1xuICB9LFxuICBhYm91dFhXZWVrczoge1xuICAgIG9uZTogJ2Fib3V0IDEgd2VlaycsXG4gICAgb3RoZXI6ICdhYm91dCB7e2NvdW50fX0gd2Vla3MnXG4gIH0sXG4gIHhXZWVrczoge1xuICAgIG9uZTogJzEgd2VlaycsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gd2Vla3MnXG4gIH0sXG4gIGFib3V0WE1vbnRoczoge1xuICAgIG9uZTogJ2Fib3V0IDEgbW9udGgnLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IG1vbnRocydcbiAgfSxcbiAgeE1vbnRoczoge1xuICAgIG9uZTogJzEgbW9udGgnLFxuICAgIG90aGVyOiAne3tjb3VudH19IG1vbnRocydcbiAgfSxcbiAgYWJvdXRYWWVhcnM6IHtcbiAgICBvbmU6ICdhYm91dCAxIHllYXInLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IHllYXJzJ1xuICB9LFxuICB4WWVhcnM6IHtcbiAgICBvbmU6ICcxIHllYXInLFxuICAgIG90aGVyOiAne3tjb3VudH19IHllYXJzJ1xuICB9LFxuICBvdmVyWFllYXJzOiB7XG4gICAgb25lOiAnb3ZlciAxIHllYXInLFxuICAgIG90aGVyOiAnb3ZlciB7e2NvdW50fX0geWVhcnMnXG4gIH0sXG4gIGFsbW9zdFhZZWFyczoge1xuICAgIG9uZTogJ2FsbW9zdCAxIHllYXInLFxuICAgIG90aGVyOiAnYWxtb3N0IHt7Y291bnR9fSB5ZWFycydcbiAgfVxufTtcbmZ1bmN0aW9uIGZvcm1hdERpc3RhbmNlKHRva2VuLCBjb3VudCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgdmFyIHJlc3VsdDtcblxuICBpZiAodHlwZW9mIGZvcm1hdERpc3RhbmNlTG9jYWxlW3Rva2VuXSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXN1bHQgPSBmb3JtYXREaXN0YW5jZUxvY2FsZVt0b2tlbl07XG4gIH0gZWxzZSBpZiAoY291bnQgPT09IDEpIHtcbiAgICByZXN1bHQgPSBmb3JtYXREaXN0YW5jZUxvY2FsZVt0b2tlbl0ub25lO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9IGZvcm1hdERpc3RhbmNlTG9jYWxlW3Rva2VuXS5vdGhlci5yZXBsYWNlKCd7e2NvdW50fX0nLCBjb3VudCk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5hZGRTdWZmaXgpIHtcbiAgICBpZiAob3B0aW9ucy5jb21wYXJpc29uID4gMCkge1xuICAgICAgcmV0dXJuICdpbiAnICsgcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzdWx0ICsgJyBhZ28nO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkRm9ybWF0TG9uZ0ZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChkaXJ0eU9wdGlvbnMpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGRpcnR5T3B0aW9ucyB8fCB7fTtcbiAgICB2YXIgd2lkdGggPSBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgdmFyIGZvcm1hdCA9IGFyZ3MuZm9ybWF0c1t3aWR0aF0gfHwgYXJncy5mb3JtYXRzW2FyZ3MuZGVmYXVsdFdpZHRoXTtcbiAgICByZXR1cm4gZm9ybWF0O1xuICB9O1xufVxuXG52YXIgZGF0ZUZvcm1hdHMgPSB7XG4gIGZ1bGw6ICdFRUVFLCBNTU1NIGRvLCB5JyxcbiAgbG9uZzogJ01NTU0gZG8sIHknLFxuICBtZWRpdW06ICdNTU0gZCwgeScsXG4gIHNob3J0OiAnTU0vZGQveXl5eSdcbn07XG52YXIgdGltZUZvcm1hdHMgPSB7XG4gIGZ1bGw6ICdoOm1tOnNzIGEgenp6eicsXG4gIGxvbmc6ICdoOm1tOnNzIGEgeicsXG4gIG1lZGl1bTogJ2g6bW06c3MgYScsXG4gIHNob3J0OiAnaDptbSBhJ1xufTtcbnZhciBkYXRlVGltZUZvcm1hdHMgPSB7XG4gIGZ1bGw6IFwie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fVwiLFxuICBsb25nOiBcInt7ZGF0ZX19ICdhdCcge3t0aW1lfX1cIixcbiAgbWVkaXVtOiAne3tkYXRlfX0sIHt7dGltZX19JyxcbiAgc2hvcnQ6ICd7e2RhdGV9fSwge3t0aW1lfX0nXG59O1xudmFyIGZvcm1hdExvbmcgPSB7XG4gIGRhdGU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHtcbiAgICBmb3JtYXRzOiBkYXRlRm9ybWF0cyxcbiAgICBkZWZhdWx0V2lkdGg6ICdmdWxsJ1xuICB9KSxcbiAgdGltZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IHRpbWVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pLFxuICBkYXRlVGltZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IGRhdGVUaW1lRm9ybWF0cyxcbiAgICBkZWZhdWx0V2lkdGg6ICdmdWxsJ1xuICB9KVxufTtcblxudmFyIGZvcm1hdFJlbGF0aXZlTG9jYWxlID0ge1xuICBsYXN0V2VlazogXCInbGFzdCcgZWVlZSAnYXQnIHBcIixcbiAgeWVzdGVyZGF5OiBcIid5ZXN0ZXJkYXkgYXQnIHBcIixcbiAgdG9kYXk6IFwiJ3RvZGF5IGF0JyBwXCIsXG4gIHRvbW9ycm93OiBcIid0b21vcnJvdyBhdCcgcFwiLFxuICBuZXh0V2VlazogXCJlZWVlICdhdCcgcFwiLFxuICBvdGhlcjogJ1AnXG59O1xuZnVuY3Rpb24gZm9ybWF0UmVsYXRpdmUodG9rZW4sIF9kYXRlLCBfYmFzZURhdGUsIF9vcHRpb25zKSB7XG4gIHJldHVybiBmb3JtYXRSZWxhdGl2ZUxvY2FsZVt0b2tlbl07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkTG9jYWxpemVGbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZGlydHlJbmRleCwgZGlydHlPcHRpb25zKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBkaXJ0eU9wdGlvbnMgfHwge307XG4gICAgdmFyIGNvbnRleHQgPSBvcHRpb25zLmNvbnRleHQgPyBTdHJpbmcob3B0aW9ucy5jb250ZXh0KSA6ICdzdGFuZGFsb25lJztcbiAgICB2YXIgdmFsdWVzQXJyYXk7XG5cbiAgICBpZiAoY29udGV4dCA9PT0gJ2Zvcm1hdHRpbmcnICYmIGFyZ3MuZm9ybWF0dGluZ1ZhbHVlcykge1xuICAgICAgdmFyIGRlZmF1bHRXaWR0aCA9IGFyZ3MuZGVmYXVsdEZvcm1hdHRpbmdXaWR0aCB8fCBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIHZhciB3aWR0aCA9IG9wdGlvbnMud2lkdGggPyBTdHJpbmcob3B0aW9ucy53aWR0aCkgOiBkZWZhdWx0V2lkdGg7XG4gICAgICB2YWx1ZXNBcnJheSA9IGFyZ3MuZm9ybWF0dGluZ1ZhbHVlc1t3aWR0aF0gfHwgYXJncy5mb3JtYXR0aW5nVmFsdWVzW2RlZmF1bHRXaWR0aF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBfZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0V2lkdGg7XG5cbiAgICAgIHZhciBfd2lkdGggPSBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG5cbiAgICAgIHZhbHVlc0FycmF5ID0gYXJncy52YWx1ZXNbX3dpZHRoXSB8fCBhcmdzLnZhbHVlc1tfZGVmYXVsdFdpZHRoXTtcbiAgICB9XG5cbiAgICB2YXIgaW5kZXggPSBhcmdzLmFyZ3VtZW50Q2FsbGJhY2sgPyBhcmdzLmFyZ3VtZW50Q2FsbGJhY2soZGlydHlJbmRleCkgOiBkaXJ0eUluZGV4O1xuICAgIHJldHVybiB2YWx1ZXNBcnJheVtpbmRleF07XG4gIH07XG59XG5cbnZhciBlcmFWYWx1ZXMgPSB7XG4gIG5hcnJvdzogWydCJywgJ0EnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnQkMnLCAnQUQnXSxcbiAgd2lkZTogWydCZWZvcmUgQ2hyaXN0JywgJ0Fubm8gRG9taW5pJ11cbn07XG52YXIgcXVhcnRlclZhbHVlcyA9IHtcbiAgbmFycm93OiBbJzEnLCAnMicsICczJywgJzQnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnUTEnLCAnUTInLCAnUTMnLCAnUTQnXSxcbiAgd2lkZTogWycxc3QgcXVhcnRlcicsICcybmQgcXVhcnRlcicsICczcmQgcXVhcnRlcicsICc0dGggcXVhcnRlciddIC8vIE5vdGU6IGluIEVuZ2xpc2gsIHRoZSBuYW1lcyBvZiBkYXlzIG9mIHRoZSB3ZWVrIGFuZCBtb250aHMgYXJlIGNhcGl0YWxpemVkLlxuICAvLyBJZiB5b3UgYXJlIG1ha2luZyBhIG5ldyBsb2NhbGUgYmFzZWQgb24gdGhpcyBvbmUsIGNoZWNrIGlmIHRoZSBzYW1lIGlzIHRydWUgZm9yIHRoZSBsYW5ndWFnZSB5b3UncmUgd29ya2luZyBvbi5cbiAgLy8gR2VuZXJhbGx5LCBmb3JtYXR0ZWQgZGF0ZXMgc2hvdWxkIGxvb2sgbGlrZSB0aGV5IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgc2VudGVuY2UsXG4gIC8vIGUuZy4gaW4gU3BhbmlzaCBsYW5ndWFnZSB0aGUgd2Vla2RheXMgYW5kIG1vbnRocyBzaG91bGQgYmUgaW4gdGhlIGxvd2VyY2FzZS5cblxufTtcbnZhciBtb250aFZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0onLCAnRicsICdNJywgJ0EnLCAnTScsICdKJywgJ0onLCAnQScsICdTJywgJ08nLCAnTicsICdEJ10sXG4gIGFiYnJldmlhdGVkOiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ10sXG4gIHdpZGU6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddXG59O1xudmFyIGRheVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ1MnLCAnTScsICdUJywgJ1cnLCAnVCcsICdGJywgJ1MnXSxcbiAgc2hvcnQ6IFsnU3UnLCAnTW8nLCAnVHUnLCAnV2UnLCAnVGgnLCAnRnInLCAnU2EnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J10sXG4gIHdpZGU6IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXVxufTtcbnZhciBkYXlQZXJpb2RWYWx1ZXMgPSB7XG4gIG5hcnJvdzoge1xuICAgIGFtOiAnYScsXG4gICAgcG06ICdwJyxcbiAgICBtaWRuaWdodDogJ21pJyxcbiAgICBub29uOiAnbicsXG4gICAgbW9ybmluZzogJ21vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnbmlnaHQnXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06ICdBTScsXG4gICAgcG06ICdQTScsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgICBuaWdodDogJ25pZ2h0J1xuICB9LFxuICB3aWRlOiB7XG4gICAgYW06ICdhLm0uJyxcbiAgICBwbTogJ3AubS4nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnZXZlbmluZycsXG4gICAgbmlnaHQ6ICduaWdodCdcbiAgfVxufTtcbnZhciBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogJ2EnLFxuICAgIHBtOiAncCcsXG4gICAgbWlkbmlnaHQ6ICdtaScsXG4gICAgbm9vbjogJ24nLFxuICAgIG1vcm5pbmc6ICdpbiB0aGUgbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnaW4gdGhlIGFmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2luIHRoZSBldmVuaW5nJyxcbiAgICBuaWdodDogJ2F0IG5pZ2h0J1xuICB9LFxuICBhYmJyZXZpYXRlZDoge1xuICAgIGFtOiAnQU0nLFxuICAgIHBtOiAnUE0nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnaW4gdGhlIG1vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2luIHRoZSBhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdpbiB0aGUgZXZlbmluZycsXG4gICAgbmlnaHQ6ICdhdCBuaWdodCdcbiAgfSxcbiAgd2lkZToge1xuICAgIGFtOiAnYS5tLicsXG4gICAgcG06ICdwLm0uJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ2luIHRoZSBtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdpbiB0aGUgYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnaW4gdGhlIGV2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnYXQgbmlnaHQnXG4gIH1cbn07XG5cbmZ1bmN0aW9uIG9yZGluYWxOdW1iZXIoZGlydHlOdW1iZXIsIF9kaXJ0eU9wdGlvbnMpIHtcbiAgdmFyIG51bWJlciA9IE51bWJlcihkaXJ0eU51bWJlcik7IC8vIElmIG9yZGluYWwgbnVtYmVycyBkZXBlbmQgb24gY29udGV4dCwgZm9yIGV4YW1wbGUsXG4gIC8vIGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IGdyYW1tYXRpY2FsIGdlbmRlcnMsXG4gIC8vIHVzZSBgb3B0aW9ucy51bml0YDpcbiAgLy9cbiAgLy8gICB2YXIgb3B0aW9ucyA9IGRpcnR5T3B0aW9ucyB8fCB7fVxuICAvLyAgIHZhciB1bml0ID0gU3RyaW5nKG9wdGlvbnMudW5pdClcbiAgLy9cbiAgLy8gd2hlcmUgYHVuaXRgIGNhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF0ZScsICdkYXlPZlllYXInLFxuICAvLyAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCdcblxuICB2YXIgcmVtMTAwID0gbnVtYmVyICUgMTAwO1xuXG4gIGlmIChyZW0xMDAgPiAyMCB8fCByZW0xMDAgPCAxMCkge1xuICAgIHN3aXRjaCAocmVtMTAwICUgMTApIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICdzdCc7XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICduZCc7XG5cbiAgICAgIGNhc2UgMzpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICdyZCc7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bWJlciArICd0aCc7XG59XG5cbnZhciBsb2NhbGl6ZSA9IHtcbiAgb3JkaW5hbE51bWJlcjogb3JkaW5hbE51bWJlcixcbiAgZXJhOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZXJhVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnXG4gIH0pLFxuICBxdWFydGVyOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogcXVhcnRlclZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJyxcbiAgICBhcmd1bWVudENhbGxiYWNrOiBmdW5jdGlvbiAocXVhcnRlcikge1xuICAgICAgcmV0dXJuIE51bWJlcihxdWFydGVyKSAtIDE7XG4gICAgfVxuICB9KSxcbiAgbW9udGg6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBtb250aFZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgZGF5OiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZGF5VmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBkYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgZm9ybWF0dGluZ1ZhbHVlczogZm9ybWF0dGluZ0RheVBlcmlvZFZhbHVlcyxcbiAgICBkZWZhdWx0Rm9ybWF0dGluZ1dpZHRoOiAnd2lkZSdcbiAgfSlcbn07XG5cbmZ1bmN0aW9uIGJ1aWxkTWF0Y2hQYXR0ZXJuRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKGRpcnR5U3RyaW5nLCBkaXJ0eU9wdGlvbnMpIHtcbiAgICB2YXIgc3RyaW5nID0gU3RyaW5nKGRpcnR5U3RyaW5nKTtcbiAgICB2YXIgb3B0aW9ucyA9IGRpcnR5T3B0aW9ucyB8fCB7fTtcbiAgICB2YXIgbWF0Y2hSZXN1bHQgPSBzdHJpbmcubWF0Y2goYXJncy5tYXRjaFBhdHRlcm4pO1xuXG4gICAgaWYgKCFtYXRjaFJlc3VsdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIG1hdGNoZWRTdHJpbmcgPSBtYXRjaFJlc3VsdFswXTtcbiAgICB2YXIgcGFyc2VSZXN1bHQgPSBzdHJpbmcubWF0Y2goYXJncy5wYXJzZVBhdHRlcm4pO1xuXG4gICAgaWYgKCFwYXJzZVJlc3VsdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIHZhbHVlID0gYXJncy52YWx1ZUNhbGxiYWNrID8gYXJncy52YWx1ZUNhbGxiYWNrKHBhcnNlUmVzdWx0WzBdKSA6IHBhcnNlUmVzdWx0WzBdO1xuICAgIHZhbHVlID0gb3B0aW9ucy52YWx1ZUNhbGxiYWNrID8gb3B0aW9ucy52YWx1ZUNhbGxiYWNrKHZhbHVlKSA6IHZhbHVlO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpXG4gICAgfTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYnVpbGRNYXRjaEZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChkaXJ0eVN0cmluZywgZGlydHlPcHRpb25zKSB7XG4gICAgdmFyIHN0cmluZyA9IFN0cmluZyhkaXJ0eVN0cmluZyk7XG4gICAgdmFyIG9wdGlvbnMgPSBkaXJ0eU9wdGlvbnMgfHwge307XG4gICAgdmFyIHdpZHRoID0gb3B0aW9ucy53aWR0aDtcbiAgICB2YXIgbWF0Y2hQYXR0ZXJuID0gd2lkdGggJiYgYXJncy5tYXRjaFBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLm1hdGNoUGF0dGVybnNbYXJncy5kZWZhdWx0TWF0Y2hXaWR0aF07XG4gICAgdmFyIG1hdGNoUmVzdWx0ID0gc3RyaW5nLm1hdGNoKG1hdGNoUGF0dGVybik7XG5cbiAgICBpZiAoIW1hdGNoUmVzdWx0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgbWF0Y2hlZFN0cmluZyA9IG1hdGNoUmVzdWx0WzBdO1xuICAgIHZhciBwYXJzZVBhdHRlcm5zID0gd2lkdGggJiYgYXJncy5wYXJzZVBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLnBhcnNlUGF0dGVybnNbYXJncy5kZWZhdWx0UGFyc2VXaWR0aF07XG4gICAgdmFyIHZhbHVlO1xuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChwYXJzZVBhdHRlcm5zKSA9PT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgICAgdmFsdWUgPSBmaW5kSW5kZXgocGFyc2VQYXR0ZXJucywgZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IGZpbmRLZXkocGFyc2VQYXR0ZXJucywgZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhbHVlID0gYXJncy52YWx1ZUNhbGxiYWNrID8gYXJncy52YWx1ZUNhbGxiYWNrKHZhbHVlKSA6IHZhbHVlO1xuICAgIHZhbHVlID0gb3B0aW9ucy52YWx1ZUNhbGxiYWNrID8gb3B0aW9ucy52YWx1ZUNhbGxiYWNrKHZhbHVlKSA6IHZhbHVlO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpXG4gICAgfTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZmluZEtleShvYmplY3QsIHByZWRpY2F0ZSkge1xuICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgaWYgKG9iamVjdC5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIHByZWRpY2F0ZShvYmplY3Rba2V5XSkpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlKSB7XG4gIGZvciAodmFyIGtleSA9IDA7IGtleSA8IGFycmF5Lmxlbmd0aDsga2V5KyspIHtcbiAgICBpZiAocHJlZGljYXRlKGFycmF5W2tleV0pKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxufVxuXG52YXIgbWF0Y2hPcmRpbmFsTnVtYmVyUGF0dGVybiA9IC9eKFxcZCspKHRofHN0fG5kfHJkKT8vaTtcbnZhciBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL1xcZCsvaTtcbnZhciBtYXRjaEVyYVBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eKGJ8YSkvaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKGJcXC4/XFxzP2NcXC4/fGJcXC4/XFxzP2NcXC4/XFxzP2VcXC4/fGFcXC4/XFxzP2RcXC4/fGNcXC4/XFxzP2VcXC4/KS9pLFxuICB3aWRlOiAvXihiZWZvcmUgY2hyaXN0fGJlZm9yZSBjb21tb24gZXJhfGFubm8gZG9taW5pfGNvbW1vbiBlcmEpL2lcbn07XG52YXIgcGFyc2VFcmFQYXR0ZXJucyA9IHtcbiAgYW55OiBbL15iL2ksIC9eKGF8YykvaV1cbn07XG52YXIgbWF0Y2hRdWFydGVyUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bMTIzNF0vaSxcbiAgYWJicmV2aWF0ZWQ6IC9ecVsxMjM0XS9pLFxuICB3aWRlOiAvXlsxMjM0XSh0aHxzdHxuZHxyZCk/IHF1YXJ0ZXIvaVxufTtcbnZhciBwYXJzZVF1YXJ0ZXJQYXR0ZXJucyA9IHtcbiAgYW55OiBbLzEvaSwgLzIvaSwgLzMvaSwgLzQvaV1cbn07XG52YXIgbWF0Y2hNb250aFBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eW2pmbWFzb25kXS9pLFxuICBhYmJyZXZpYXRlZDogL14oamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0fG5vdnxkZWMpL2ksXG4gIHdpZGU6IC9eKGphbnVhcnl8ZmVicnVhcnl8bWFyY2h8YXByaWx8bWF5fGp1bmV8anVseXxhdWd1c3R8c2VwdGVtYmVyfG9jdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXIpL2lcbn07XG52YXIgcGFyc2VNb250aFBhdHRlcm5zID0ge1xuICBuYXJyb3c6IFsvXmovaSwgL15mL2ksIC9ebS9pLCAvXmEvaSwgL15tL2ksIC9eai9pLCAvXmovaSwgL15hL2ksIC9ecy9pLCAvXm8vaSwgL15uL2ksIC9eZC9pXSxcbiAgYW55OiBbL15qYS9pLCAvXmYvaSwgL15tYXIvaSwgL15hcC9pLCAvXm1heS9pLCAvXmp1bi9pLCAvXmp1bC9pLCAvXmF1L2ksIC9ecy9pLCAvXm8vaSwgL15uL2ksIC9eZC9pXVxufTtcbnZhciBtYXRjaERheVBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eW3NtdHdmXS9pLFxuICBzaG9ydDogL14oc3V8bW98dHV8d2V8dGh8ZnJ8c2EpL2ksXG4gIGFiYnJldmlhdGVkOiAvXihzdW58bW9ufHR1ZXx3ZWR8dGh1fGZyaXxzYXQpL2ksXG4gIHdpZGU6IC9eKHN1bmRheXxtb25kYXl8dHVlc2RheXx3ZWRuZXNkYXl8dGh1cnNkYXl8ZnJpZGF5fHNhdHVyZGF5KS9pXG59O1xudmFyIHBhcnNlRGF5UGF0dGVybnMgPSB7XG4gIG5hcnJvdzogWy9ecy9pLCAvXm0vaSwgL150L2ksIC9edy9pLCAvXnQvaSwgL15mL2ksIC9ecy9pXSxcbiAgYW55OiBbL15zdS9pLCAvXm0vaSwgL150dS9pLCAvXncvaSwgL150aC9pLCAvXmYvaSwgL15zYS9pXVxufTtcbnZhciBtYXRjaERheVBlcmlvZFBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eKGF8cHxtaXxufChpbiB0aGV8YXQpIChtb3JuaW5nfGFmdGVybm9vbnxldmVuaW5nfG5pZ2h0KSkvaSxcbiAgYW55OiAvXihbYXBdXFwuP1xccz9tXFwuP3xtaWRuaWdodHxub29ufChpbiB0aGV8YXQpIChtb3JuaW5nfGFmdGVybm9vbnxldmVuaW5nfG5pZ2h0KSkvaVxufTtcbnZhciBwYXJzZURheVBlcmlvZFBhdHRlcm5zID0ge1xuICBhbnk6IHtcbiAgICBhbTogL15hL2ksXG4gICAgcG06IC9ecC9pLFxuICAgIG1pZG5pZ2h0OiAvXm1pL2ksXG4gICAgbm9vbjogL15uby9pLFxuICAgIG1vcm5pbmc6IC9tb3JuaW5nL2ksXG4gICAgYWZ0ZXJub29uOiAvYWZ0ZXJub29uL2ksXG4gICAgZXZlbmluZzogL2V2ZW5pbmcvaSxcbiAgICBuaWdodDogL25pZ2h0L2lcbiAgfVxufTtcbnZhciBtYXRjaCA9IHtcbiAgb3JkaW5hbE51bWJlcjogYnVpbGRNYXRjaFBhdHRlcm5Gbih7XG4gICAgbWF0Y2hQYXR0ZXJuOiBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuLFxuICAgIHBhcnNlUGF0dGVybjogcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybixcbiAgICB2YWx1ZUNhbGxiYWNrOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgIH1cbiAgfSksXG4gIGVyYTogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaEVyYVBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VFcmFQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSksXG4gIHF1YXJ0ZXI6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hRdWFydGVyUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZVF1YXJ0ZXJQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueScsXG4gICAgdmFsdWVDYWxsYmFjazogZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICByZXR1cm4gaW5kZXggKyAxO1xuICAgIH1cbiAgfSksXG4gIG1vbnRoOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoTW9udGhQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlTW9udGhQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSksXG4gIGRheTogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaERheVBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VEYXlQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSksXG4gIGRheVBlcmlvZDogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaERheVBlcmlvZFBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnYW55JyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZURheVBlcmlvZFBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55J1xuICB9KVxufTtcblxuLyoqXG4gKiBAdHlwZSB7TG9jYWxlfVxuICogQGNhdGVnb3J5IExvY2FsZXNcbiAqIEBzdW1tYXJ5IEVuZ2xpc2ggbG9jYWxlIChVbml0ZWQgU3RhdGVzKS5cbiAqIEBsYW5ndWFnZSBFbmdsaXNoXG4gKiBAaXNvLTYzOS0yIGVuZ1xuICogQGF1dGhvciBTYXNoYSBLb3NzIFtAa29zc25vY29ycF17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2tvc3Nub2NvcnB9XG4gKiBAYXV0aG9yIExlc2hhIEtvc3MgW0BsZXNoYWtvc3Nde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9sZXNoYWtvc3N9XG4gKi9cblxudmFyIGxvY2FsZSA9IHtcbiAgY29kZTogJ2VuLVVTJyxcbiAgZm9ybWF0RGlzdGFuY2U6IGZvcm1hdERpc3RhbmNlLFxuICBmb3JtYXRMb25nOiBmb3JtYXRMb25nLFxuICBmb3JtYXRSZWxhdGl2ZTogZm9ybWF0UmVsYXRpdmUsXG4gIGxvY2FsaXplOiBsb2NhbGl6ZSxcbiAgbWF0Y2g6IG1hdGNoLFxuICBvcHRpb25zOiB7XG4gICAgd2Vla1N0YXJ0c09uOiAwXG4gICAgLyogU3VuZGF5ICovXG4gICAgLFxuICAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZTogMVxuICB9XG59O1xuXG5mdW5jdGlvbiB0b0ludGVnZXIoZGlydHlOdW1iZXIpIHtcbiAgaWYgKGRpcnR5TnVtYmVyID09PSBudWxsIHx8IGRpcnR5TnVtYmVyID09PSB0cnVlIHx8IGRpcnR5TnVtYmVyID09PSBmYWxzZSkge1xuICAgIHJldHVybiBOYU47XG4gIH1cblxuICB2YXIgbnVtYmVyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTtcblxuICBpZiAoaXNOYU4obnVtYmVyKSkge1xuICAgIHJldHVybiBudW1iZXI7XG4gIH1cblxuICByZXR1cm4gbnVtYmVyIDwgMCA/IE1hdGguY2VpbChudW1iZXIpIDogTWF0aC5mbG9vcihudW1iZXIpO1xufVxuXG4vKipcbiAqIEBuYW1lIGFkZE1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqICMjIyB2Mi4wLjAgYnJlYWtpbmcgY2hhbmdlczpcbiAqXG4gKiAtIFtDaGFuZ2VzIHRoYXQgYXJlIGNvbW1vbiBmb3IgdGhlIHdob2xlIGxpYnJhcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNDb21tb24tQ2hhbmdlcykuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBhbW91bnQgLSB0aGUgYW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byBiZSBhZGRlZC4gUG9zaXRpdmUgZGVjaW1hbHMgd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmZsb29yYCwgZGVjaW1hbHMgbGVzcyB0aGFuIHplcm8gd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmNlaWxgLlxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBtaWxsaXNlY29uZHMgYWRkZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQWRkIDc1MCBtaWxsaXNlY29uZHMgdG8gMTAgSnVseSAyMDE0IDEyOjQ1OjMwLjAwMDpcbiAqIHZhciByZXN1bHQgPSBhZGRNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NTozMC43NTBcbiAqL1xuXG5mdW5jdGlvbiBhZGRNaWxsaXNlY29uZHMoZGlydHlEYXRlLCBkaXJ0eUFtb3VudCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIHRpbWVzdGFtcCA9IHRvRGF0ZShkaXJ0eURhdGUpLmdldFRpbWUoKTtcbiAgdmFyIGFtb3VudCA9IHRvSW50ZWdlcihkaXJ0eUFtb3VudCk7XG4gIHJldHVybiBuZXcgRGF0ZSh0aW1lc3RhbXAgKyBhbW91bnQpO1xufVxuXG4vKipcbiAqIEBuYW1lIHN1Yk1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogIyMjIHYyLjAuMCBicmVha2luZyBjaGFuZ2VzOlxuICpcbiAqIC0gW0NoYW5nZXMgdGhhdCBhcmUgY29tbW9uIGZvciB0aGUgd2hvbGUgbGlicmFyeV0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdXBncmFkZUd1aWRlLm1kI0NvbW1vbi1DaGFuZ2VzKS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIHN1YnRyYWN0ZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIHN1YnRyYWN0ZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgNzUwIG1pbGxpc2Vjb25kcyBmcm9tIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiB2YXIgcmVzdWx0ID0gc3ViTWlsbGlzZWNvbmRzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxMiwgNDUsIDMwLCAwKSwgNzUwKVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMTI6NDU6MjkuMjUwXG4gKi9cblxuZnVuY3Rpb24gc3ViTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgLWFtb3VudCk7XG59XG5cbmZ1bmN0aW9uIGFkZExlYWRpbmdaZXJvcyhudW1iZXIsIHRhcmdldExlbmd0aCkge1xuICB2YXIgc2lnbiA9IG51bWJlciA8IDAgPyAnLScgOiAnJztcbiAgdmFyIG91dHB1dCA9IE1hdGguYWJzKG51bWJlcikudG9TdHJpbmcoKTtcblxuICB3aGlsZSAob3V0cHV0Lmxlbmd0aCA8IHRhcmdldExlbmd0aCkge1xuICAgIG91dHB1dCA9ICcwJyArIG91dHB1dDtcbiAgfVxuXG4gIHJldHVybiBzaWduICsgb3V0cHV0O1xufVxuXG4vKlxuICogfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAgYSAgfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgfCAgQSogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgZCAgfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgfCAgRCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgaCAgfCBIb3VyIFsxLTEyXSAgICAgICAgICAgICAgICAgICAgfCAgSCAgfCBIb3VyIFswLTIzXSAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbSAgfCBNaW51dGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgTSAgfCBNb250aCAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgcyAgfCBTZWNvbmQgICAgICAgICAgICAgICAgICAgICAgICAgfCAgUyAgfCBGcmFjdGlvbiBvZiBzZWNvbmQgICAgICAgICAgICAgfFxuICogfCAgeSAgfCBZZWFyIChhYnMpICAgICAgICAgICAgICAgICAgICAgfCAgWSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICogYXJlIG5vdCBpbXBsZW1lbnRlZCBidXQgcmVzZXJ2ZWQgYnkgVW5pY29kZSBzdGFuZGFyZC5cbiAqL1xuXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gWWVhclxuICB5OiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4pIHtcbiAgICAvLyBGcm9tIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjM1L3RyMzUtMzEvdHIzNS1kYXRlcy5odG1sI0RhdGVfRm9ybWF0X3Rva2Vuc1xuICAgIC8vIHwgWWVhciAgICAgfCAgICAgeSB8IHl5IHwgICB5eXkgfCAgeXl5eSB8IHl5eXl5IHxcbiAgICAvLyB8LS0tLS0tLS0tLXwtLS0tLS0tfC0tLS18LS0tLS0tLXwtLS0tLS0tfC0tLS0tLS18XG4gICAgLy8gfCBBRCAxICAgICB8ICAgICAxIHwgMDEgfCAgIDAwMSB8ICAwMDAxIHwgMDAwMDEgfFxuICAgIC8vIHwgQUQgMTIgICAgfCAgICAxMiB8IDEyIHwgICAwMTIgfCAgMDAxMiB8IDAwMDEyIHxcbiAgICAvLyB8IEFEIDEyMyAgIHwgICAxMjMgfCAyMyB8ICAgMTIzIHwgIDAxMjMgfCAwMDEyMyB8XG4gICAgLy8gfCBBRCAxMjM0ICB8ICAxMjM0IHwgMzQgfCAgMTIzNCB8ICAxMjM0IHwgMDEyMzQgfFxuICAgIC8vIHwgQUQgMTIzNDUgfCAxMjM0NSB8IDQ1IHwgMTIzNDUgfCAxMjM0NSB8IDEyMzQ1IHxcbiAgICB2YXIgc2lnbmVkWWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTsgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcblxuICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0b2tlbiA9PT0gJ3l5JyA/IHllYXIgJSAxMDAgOiB5ZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgbW9udGggPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgcmV0dXJuIHRva2VuID09PSAnTScgPyBTdHJpbmcobW9udGggKyAxKSA6IGFkZExlYWRpbmdaZXJvcyhtb250aCArIDEsIDIpO1xuICB9LFxuICAvLyBEYXkgb2YgdGhlIG1vbnRoXG4gIGQ6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENEYXRlKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEFNIG9yIFBNXG4gIGE6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbikge1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXRlLmdldFVUQ0hvdXJzKCkgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdhJzpcbiAgICAgIGNhc2UgJ2FhJzpcbiAgICAgIGNhc2UgJ2FhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUudG9VcHBlckNhc2UoKTtcblxuICAgICAgY2FzZSAnYWFhYWEnOlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlWzBdO1xuXG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUgPT09ICdhbScgPyAnYS5tLicgOiAncC5tLic7XG4gICAgfVxuICB9LFxuICAvLyBIb3VyIFsxLTEyXVxuICBoOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDSG91cnMoKSAlIDEyIHx8IDEyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBIb3VyIFswLTIzXVxuICBIOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDSG91cnMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWludXRlXG4gIG06IGZ1bmN0aW9uIChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENNaW51dGVzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFNlY29uZFxuICBzOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDU2Vjb25kcygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBGcmFjdGlvbiBvZiBzZWNvbmRcbiAgUzogZnVuY3Rpb24gKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIG51bWJlck9mRGlnaXRzID0gdG9rZW4ubGVuZ3RoO1xuICAgIHZhciBtaWxsaXNlY29uZHMgPSBkYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpO1xuICAgIHZhciBmcmFjdGlvbmFsU2Vjb25kcyA9IE1hdGguZmxvb3IobWlsbGlzZWNvbmRzICogTWF0aC5wb3coMTAsIG51bWJlck9mRGlnaXRzIC0gMykpO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZnJhY3Rpb25hbFNlY29uZHMsIHRva2VuLmxlbmd0aCk7XG4gIH1cbn07XG5cbnZhciBNSUxMSVNFQ09ORFNfSU5fREFZID0gODY0MDAwMDA7IC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBhIHBhcnQgb2YgcHVibGljIEFQSSB3aGVuIFVUQyBmdW5jdGlvbiB3aWxsIGJlIGltcGxlbWVudGVkLlxuLy8gU2VlIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvaXNzdWVzLzM3NlxuXG5mdW5jdGlvbiBnZXRVVENEYXlPZlllYXIoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgdGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKCk7XG4gIGRhdGUuc2V0VVRDTW9udGgoMCwgMSk7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mWWVhclRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuICB2YXIgZGlmZmVyZW5jZSA9IHRpbWVzdGFtcCAtIHN0YXJ0T2ZZZWFyVGltZXN0YW1wO1xuICByZXR1cm4gTWF0aC5mbG9vcihkaWZmZXJlbmNlIC8gTUlMTElTRUNPTkRTX0lOX0RBWSkgKyAxO1xufVxuXG4vLyBTZWUgaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9pc3N1ZXMvMzc2XG5cbmZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIHdlZWtTdGFydHNPbiA9IDE7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkYXkgPSBkYXRlLmdldFVUQ0RheSgpO1xuICB2YXIgZGlmZiA9IChkYXkgPCB3ZWVrU3RhcnRzT24gPyA3IDogMCkgKyBkYXkgLSB3ZWVrU3RhcnRzT247XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAtIGRpZmYpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gZGF0ZTtcbn1cblxuLy8gU2VlIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvaXNzdWVzLzM3NlxuXG5mdW5jdGlvbiBnZXRVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICB2YXIgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhciA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLnNldFVUQ0Z1bGxZZWFyKHllYXIgKyAxLCAwLCA0KTtcbiAgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhci5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHN0YXJ0T2ZOZXh0WWVhciA9IHN0YXJ0T2ZVVENJU09XZWVrKGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIpO1xuICB2YXIgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhciA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyLnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhcik7XG5cbiAgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZOZXh0WWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhciArIDE7XG4gIH0gZWxzZSBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZlRoaXNZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB5ZWFyIC0gMTtcbiAgfVxufVxuXG4vLyBTZWUgaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9pc3N1ZXMvMzc2XG5cbmZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDSVNPV2Vla1llYXIoZGlydHlEYXRlKTtcbiAgdmFyIGZvdXJ0aE9mSmFudWFyeSA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnkuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIGRhdGUgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnkpO1xuICByZXR1cm4gZGF0ZTtcbn1cblxudmFyIE1JTExJU0VDT05EU19JTl9XRUVLID0gNjA0ODAwMDAwOyAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgYSBwYXJ0IG9mIHB1YmxpYyBBUEkgd2hlbiBVVEMgZnVuY3Rpb24gd2lsbCBiZSBpbXBsZW1lbnRlZC5cbi8vIFNlZSBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2lzc3Vlcy8zNzZcblxuZnVuY3Rpb24gZ2V0VVRDSVNPV2VlayhkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkaWZmID0gc3RhcnRPZlVUQ0lTT1dlZWsoZGF0ZSkuZ2V0VGltZSgpIC0gc3RhcnRPZlVUQ0lTT1dlZWtZZWFyKGRhdGUpLmdldFRpbWUoKTsgLy8gUm91bmQgdGhlIG51bWJlciBvZiBkYXlzIHRvIHRoZSBuZWFyZXN0IGludGVnZXJcbiAgLy8gYmVjYXVzZSB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpbiBhIHdlZWsgaXMgbm90IGNvbnN0YW50XG4gIC8vIChlLmcuIGl0J3MgZGlmZmVyZW50IGluIHRoZSB3ZWVrIG9mIHRoZSBkYXlsaWdodCBzYXZpbmcgdGltZSBjbG9jayBzaGlmdClcblxuICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gTUlMTElTRUNPTkRTX0lOX1dFRUspICsgMTtcbn1cblxuLy8gU2VlIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvaXNzdWVzLzM3NlxuXG5mdW5jdGlvbiBzdGFydE9mVVRDV2VlayhkaXJ0eURhdGUsIGRpcnR5T3B0aW9ucykge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIG9wdGlvbnMgPSBkaXJ0eU9wdGlvbnMgfHwge307XG4gIHZhciBsb2NhbGUgPSBvcHRpb25zLmxvY2FsZTtcbiAgdmFyIGxvY2FsZVdlZWtTdGFydHNPbiA9IGxvY2FsZSAmJiBsb2NhbGUub3B0aW9ucyAmJiBsb2NhbGUub3B0aW9ucy53ZWVrU3RhcnRzT247XG4gIHZhciBkZWZhdWx0V2Vla1N0YXJ0c09uID0gbG9jYWxlV2Vla1N0YXJ0c09uID09IG51bGwgPyAwIDogdG9JbnRlZ2VyKGxvY2FsZVdlZWtTdGFydHNPbik7XG4gIHZhciB3ZWVrU3RhcnRzT24gPSBvcHRpb25zLndlZWtTdGFydHNPbiA9PSBudWxsID8gZGVmYXVsdFdlZWtTdGFydHNPbiA6IHRvSW50ZWdlcihvcHRpb25zLndlZWtTdGFydHNPbik7IC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMCBhbmQgNiBfYW5kXyBpcyBub3QgTmFOXG5cbiAgaWYgKCEod2Vla1N0YXJ0c09uID49IDAgJiYgd2Vla1N0YXJ0c09uIDw9IDYpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3dlZWtTdGFydHNPbiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNiBpbmNsdXNpdmVseScpO1xuICB9XG5cbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRheSA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gIHZhciBkaWZmID0gKGRheSA8IHdlZWtTdGFydHNPbiA/IDcgOiAwKSArIGRheSAtIHdlZWtTdGFydHNPbjtcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpIC0gZGlmZik7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHJldHVybiBkYXRlO1xufVxuXG4vLyBTZWUgaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9pc3N1ZXMvMzc2XG5cbmZ1bmN0aW9uIGdldFVUQ1dlZWtZZWFyKGRpcnR5RGF0ZSwgZGlydHlPcHRpb25zKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUsIGRpcnR5T3B0aW9ucyk7XG4gIHZhciB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICB2YXIgb3B0aW9ucyA9IGRpcnR5T3B0aW9ucyB8fCB7fTtcbiAgdmFyIGxvY2FsZSA9IG9wdGlvbnMubG9jYWxlO1xuICB2YXIgbG9jYWxlRmlyc3RXZWVrQ29udGFpbnNEYXRlID0gbG9jYWxlICYmIGxvY2FsZS5vcHRpb25zICYmIGxvY2FsZS5vcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZTtcbiAgdmFyIGRlZmF1bHRGaXJzdFdlZWtDb250YWluc0RhdGUgPSBsb2NhbGVGaXJzdFdlZWtDb250YWluc0RhdGUgPT0gbnVsbCA/IDEgOiB0b0ludGVnZXIobG9jYWxlRmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlID09IG51bGwgPyBkZWZhdWx0Rmlyc3RXZWVrQ29udGFpbnNEYXRlIDogdG9JbnRlZ2VyKG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKTsgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAxIGFuZCA3IF9hbmRfIGlzIG5vdCBOYU5cblxuICBpZiAoIShmaXJzdFdlZWtDb250YWluc0RhdGUgPj0gMSAmJiBmaXJzdFdlZWtDb250YWluc0RhdGUgPD0gNykpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZmlyc3RXZWVrQ29udGFpbnNEYXRlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3IGluY2x1c2l2ZWx5Jyk7XG4gIH1cblxuICB2YXIgZmlyc3RXZWVrT2ZOZXh0WWVhciA9IG5ldyBEYXRlKDApO1xuICBmaXJzdFdlZWtPZk5leHRZZWFyLnNldFVUQ0Z1bGxZZWFyKHllYXIgKyAxLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWtPZk5leHRZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrT2ZOZXh0WWVhciwgZGlydHlPcHRpb25zKTtcbiAgdmFyIGZpcnN0V2Vla09mVGhpc1llYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWtPZlRoaXNZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrT2ZUaGlzWWVhciwgZGlydHlPcHRpb25zKTtcblxuICBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZk5leHRZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyICsgMTtcbiAgfSBlbHNlIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mVGhpc1llYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHllYXIgLSAxO1xuICB9XG59XG5cbi8vIFNlZSBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2lzc3Vlcy8zNzZcblxuZnVuY3Rpb24gc3RhcnRPZlVUQ1dlZWtZZWFyKGRpcnR5RGF0ZSwgZGlydHlPcHRpb25zKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgb3B0aW9ucyA9IGRpcnR5T3B0aW9ucyB8fCB7fTtcbiAgdmFyIGxvY2FsZSA9IG9wdGlvbnMubG9jYWxlO1xuICB2YXIgbG9jYWxlRmlyc3RXZWVrQ29udGFpbnNEYXRlID0gbG9jYWxlICYmIGxvY2FsZS5vcHRpb25zICYmIGxvY2FsZS5vcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZTtcbiAgdmFyIGRlZmF1bHRGaXJzdFdlZWtDb250YWluc0RhdGUgPSBsb2NhbGVGaXJzdFdlZWtDb250YWluc0RhdGUgPT0gbnVsbCA/IDEgOiB0b0ludGVnZXIobG9jYWxlRmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlID09IG51bGwgPyBkZWZhdWx0Rmlyc3RXZWVrQ29udGFpbnNEYXRlIDogdG9JbnRlZ2VyKG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgdmFyIHllYXIgPSBnZXRVVENXZWVrWWVhcihkaXJ0eURhdGUsIGRpcnR5T3B0aW9ucyk7XG4gIHZhciBmaXJzdFdlZWsgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrLnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vlay5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIGRhdGUgPSBzdGFydE9mVVRDV2VlayhmaXJzdFdlZWssIGRpcnR5T3B0aW9ucyk7XG4gIHJldHVybiBkYXRlO1xufVxuXG52YXIgTUlMTElTRUNPTkRTX0lOX1dFRUskMSA9IDYwNDgwMDAwMDsgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGEgcGFydCBvZiBwdWJsaWMgQVBJIHdoZW4gVVRDIGZ1bmN0aW9uIHdpbGwgYmUgaW1wbGVtZW50ZWQuXG4vLyBTZWUgaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9pc3N1ZXMvMzc2XG5cbmZ1bmN0aW9uIGdldFVUQ1dlZWsoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGlmZiA9IHN0YXJ0T2ZVVENXZWVrKGRhdGUsIG9wdGlvbnMpLmdldFRpbWUoKSAtIHN0YXJ0T2ZVVENXZWVrWWVhcihkYXRlLCBvcHRpb25zKS5nZXRUaW1lKCk7IC8vIFJvdW5kIHRoZSBudW1iZXIgb2YgZGF5cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyXG4gIC8vIGJlY2F1c2UgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gYSB3ZWVrIGlzIG5vdCBjb25zdGFudFxuICAvLyAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZiB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpXG5cbiAgcmV0dXJuIE1hdGgucm91bmQoZGlmZiAvIE1JTExJU0VDT05EU19JTl9XRUVLJDEpICsgMTtcbn1cblxudmFyIGRheVBlcmlvZEVudW0gPSB7XG4gIGFtOiAnYW0nLFxuICBwbTogJ3BtJyxcbiAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gIG5vb246ICdub29uJyxcbiAgbW9ybmluZzogJ21vcm5pbmcnLFxuICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICBldmVuaW5nOiAnZXZlbmluZycsXG4gIG5pZ2h0OiAnbmlnaHQnXG4gIC8qXG4gICAqIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICogfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICAgKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8IE1pbGxpc2Vjb25kcyBpbiBkYXkgICAgICAgICAgICB8XG4gICAqIHwgIGIgIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgIHwgIEIgIHwgRmxleGlibGUgZGF5IHBlcmlvZCAgICAgICAgICAgIHxcbiAgICogfCAgYyAgfCBTdGFuZC1hbG9uZSBsb2NhbCBkYXkgb2Ygd2VlayAgfCAgQyogfCBMb2NhbGl6ZWQgaG91ciB3LyBkYXkgcGVyaW9kICAgfFxuICAgKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8IERheSBvZiB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gICAqIHwgIGUgIHwgTG9jYWwgZGF5IG9mIHdlZWsgICAgICAgICAgICAgIHwgIEUgIHwgRGF5IG9mIHdlZWsgICAgICAgICAgICAgICAgICAgIHxcbiAgICogfCAgZiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgRiogfCBEYXkgb2Ygd2VlayBpbiBtb250aCAgICAgICAgICAgfFxuICAgKiB8ICBnKiB8IE1vZGlmaWVkIEp1bGlhbiBkYXkgICAgICAgICAgICB8ICBHICB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAqIHwgIGggIHwgSG91ciBbMS0xMl0gICAgICAgICAgICAgICAgICAgIHwgIEggIHwgSG91ciBbMC0yM10gICAgICAgICAgICAgICAgICAgIHxcbiAgICogfCAgaSEgfCBJU08gZGF5IG9mIHdlZWsgICAgICAgICAgICAgICAgfCAgSSEgfCBJU08gd2VlayBvZiB5ZWFyICAgICAgICAgICAgICAgfFxuICAgKiB8ICBqKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8ICBKKiB8IExvY2FsaXplZCBob3VyIHcvbyBkYXkgcGVyaW9kICB8XG4gICAqIHwgIGsgIHwgSG91ciBbMS0yNF0gICAgICAgICAgICAgICAgICAgIHwgIEsgIHwgSG91ciBbMC0xMV0gICAgICAgICAgICAgICAgICAgIHxcbiAgICogfCAgbCogfCAoZGVwcmVjYXRlZCkgICAgICAgICAgICAgICAgICAgfCAgTCAgfCBTdGFuZC1hbG9uZSBtb250aCAgICAgICAgICAgICAgfFxuICAgKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAqIHwgIG4gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE4gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICogfCAgbyEgfCBPcmRpbmFsIG51bWJlciBtb2RpZmllciAgICAgICAgfCAgTyAgfCBUaW1lem9uZSAoR01UKSAgICAgICAgICAgICAgICAgfFxuICAgKiB8ICBwISB8IExvbmcgbG9jYWxpemVkIHRpbWUgICAgICAgICAgICB8ICBQISB8IExvbmcgbG9jYWxpemVkIGRhdGUgICAgICAgICAgICB8XG4gICAqIHwgIHEgIHwgU3RhbmQtYWxvbmUgcXVhcnRlciAgICAgICAgICAgIHwgIFEgIHwgUXVhcnRlciAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICogfCAgciogfCBSZWxhdGVkIEdyZWdvcmlhbiB5ZWFyICAgICAgICAgfCAgUiEgfCBJU08gd2Vlay1udW1iZXJpbmcgeWVhciAgICAgICAgfFxuICAgKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gICAqIHwgIHQhIHwgU2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICAgICAgIHwgIFQhIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgIHxcbiAgICogfCAgdSAgfCBFeHRlbmRlZCB5ZWFyICAgICAgICAgICAgICAgICAgfCAgVSogfCBDeWNsaWMgeWVhciAgICAgICAgICAgICAgICAgICAgfFxuICAgKiB8ICB2KiB8IFRpbWV6b25lIChnZW5lcmljIG5vbi1sb2NhdC4pICB8ICBWKiB8IFRpbWV6b25lIChsb2NhdGlvbikgICAgICAgICAgICB8XG4gICAqIHwgIHcgIHwgTG9jYWwgd2VlayBvZiB5ZWFyICAgICAgICAgICAgIHwgIFcqIHwgV2VlayBvZiBtb250aCAgICAgICAgICAgICAgICAgIHxcbiAgICogfCAgeCAgfCBUaW1lem9uZSAoSVNPLTg2MDEgdy9vIFopICAgICAgfCAgWCAgfCBUaW1lem9uZSAoSVNPLTg2MDEpICAgICAgICAgICAgfFxuICAgKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICB8XG4gICAqIHwgIHogIHwgVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdC4pIHwgIFoqIHwgVGltZXpvbmUgKGFsaWFzZXMpICAgICAgICAgICAgIHxcbiAgICpcbiAgICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICAgKlxuICAgKiBMZXR0ZXJzIG1hcmtlZCBieSAhIGFyZSBub24tc3RhbmRhcmQsIGJ1dCBpbXBsZW1lbnRlZCBieSBkYXRlLWZuczpcbiAgICogLSBgb2AgbW9kaWZpZXMgdGhlIHByZXZpb3VzIHRva2VuIHRvIHR1cm4gaXQgaW50byBhbiBvcmRpbmFsIChzZWUgYGZvcm1hdGAgZG9jcylcbiAgICogLSBgaWAgaXMgSVNPIGRheSBvZiB3ZWVrLiBGb3IgYGlgIGFuZCBgaWlgIGlzIHJldHVybnMgbnVtZXJpYyBJU08gd2VlayBkYXlzLFxuICAgKiAgIGkuZS4gNyBmb3IgU3VuZGF5LCAxIGZvciBNb25kYXksIGV0Yy5cbiAgICogLSBgSWAgaXMgSVNPIHdlZWsgb2YgeWVhciwgYXMgb3Bwb3NlZCB0byBgd2Agd2hpY2ggaXMgbG9jYWwgd2VlayBvZiB5ZWFyLlxuICAgKiAtIGBSYCBpcyBJU08gd2Vlay1udW1iZXJpbmcgeWVhciwgYXMgb3Bwb3NlZCB0byBgWWAgd2hpY2ggaXMgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhci5cbiAgICogICBgUmAgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBJYCBhbmQgYGlgXG4gICAqICAgZm9yIHVuaXZlcnNhbCBJU08gd2Vlay1udW1iZXJpbmcgZGF0ZSwgd2hlcmVhc1xuICAgKiAgIGBZYCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYHdgIGFuZCBgZWBcbiAgICogICBmb3Igd2Vlay1udW1iZXJpbmcgZGF0ZSBzcGVjaWZpYyB0byB0aGUgbG9jYWxlLlxuICAgKiAtIGBQYCBpcyBsb25nIGxvY2FsaXplZCBkYXRlIGZvcm1hdFxuICAgKiAtIGBwYCBpcyBsb25nIGxvY2FsaXplZCB0aW1lIGZvcm1hdFxuICAgKi9cblxufTtcbnZhciBmb3JtYXR0ZXJzJDEgPSB7XG4gIC8vIEVyYVxuICBHOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGVyYSA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKSA+IDAgPyAxIDogMDtcblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIEFELCBCQ1xuICAgICAgY2FzZSAnRyc6XG4gICAgICBjYXNlICdHRyc6XG4gICAgICBjYXNlICdHR0cnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnXG4gICAgICAgIH0pO1xuICAgICAgLy8gQSwgQlxuXG4gICAgICBjYXNlICdHR0dHRyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5lcmEoZXJhLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnXG4gICAgICAgIH0pO1xuICAgICAgLy8gQW5ubyBEb21pbmksIEJlZm9yZSBDaHJpc3RcblxuICAgICAgY2FzZSAnR0dHRyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBZZWFyXG4gIHk6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICAvLyBPcmRpbmFsIG51bWJlclxuICAgIGlmICh0b2tlbiA9PT0gJ3lvJykge1xuICAgICAgdmFyIHNpZ25lZFllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7IC8vIFJldHVybnMgMSBmb3IgMSBCQyAod2hpY2ggaXMgeWVhciAwIGluIEphdmFTY3JpcHQpXG5cbiAgICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih5ZWFyLCB7XG4gICAgICAgIHVuaXQ6ICd5ZWFyJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1hdHRlcnMueShkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgWTogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBzaWduZWRXZWVrWWVhciA9IGdldFVUQ1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpOyAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuXG4gICAgdmFyIHdlZWtZZWFyID0gc2lnbmVkV2Vla1llYXIgPiAwID8gc2lnbmVkV2Vla1llYXIgOiAxIC0gc2lnbmVkV2Vla1llYXI7IC8vIFR3byBkaWdpdCB5ZWFyXG5cbiAgICBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICAgIHZhciB0d29EaWdpdFllYXIgPSB3ZWVrWWVhciAlIDEwMDtcbiAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModHdvRGlnaXRZZWFyLCAyKTtcbiAgICB9IC8vIE9yZGluYWwgbnVtYmVyXG5cblxuICAgIGlmICh0b2tlbiA9PT0gJ1lvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vla1llYXIsIHtcbiAgICAgICAgdW5pdDogJ3llYXInXG4gICAgICB9KTtcbiAgICB9IC8vIFBhZGRpbmdcblxuXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgUjogZnVuY3Rpb24gKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIGlzb1dlZWtZZWFyID0gZ2V0VVRDSVNPV2Vla1llYXIoZGF0ZSk7IC8vIFBhZGRpbmdcblxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2Vla1llYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEV4dGVuZGVkIHllYXIuIFRoaXMgaXMgYSBzaW5nbGUgbnVtYmVyIGRlc2lnbmF0aW5nIHRoZSB5ZWFyIG9mIHRoaXMgY2FsZW5kYXIgc3lzdGVtLlxuICAvLyBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgbG9jYWxpemVycyBhcmUgQi5DLiB5ZWFyczpcbiAgLy8gfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAgLy8gfC0tLS0tLXwtLS0tLXwtLS0tLXxcbiAgLy8gfCBBQyAxIHwgICAxIHwgICAxIHxcbiAgLy8gfCBCQyAxIHwgICAxIHwgICAwIHxcbiAgLy8gfCBCQyAyIHwgICAyIHwgIC0xIHxcbiAgLy8gQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICAvLyB3aGlsZSBgdXVgIHBhZHMgc2luZ2xlIGRpZ2l0IHllYXJzIHRvIDIgY2hhcmFjdGVycyBhbmQgcmV0dXJucyBvdGhlciB5ZWFycyB1bmNoYW5nZWQuXG4gIHU6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbikge1xuICAgIHZhciB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoeWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gUXVhcnRlclxuICBROiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIHF1YXJ0ZXIgPSBNYXRoLmNlaWwoKGRhdGUuZ2V0VVRDTW9udGgoKSArIDEpIC8gMyk7XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAzLCA0XG4gICAgICBjYXNlICdRJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTtcbiAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG5cbiAgICAgIGNhc2UgJ1FRJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhxdWFydGVyLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aFxuXG4gICAgICBjYXNlICdRbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB1bml0OiAncXVhcnRlcidcbiAgICAgICAgfSk7XG4gICAgICAvLyBRMSwgUTIsIFEzLCBRNFxuXG4gICAgICBjYXNlICdRUVEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpXG5cbiAgICAgIGNhc2UgJ1FRUVFRJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLlxuXG4gICAgICBjYXNlICdRUVFRJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIHF1YXJ0ZXJcbiAgcTogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBxdWFydGVyID0gTWF0aC5jZWlsKChkYXRlLmdldFVUQ01vbnRoKCkgKyAxKSAvIDMpO1xuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMSwgMiwgMywgNFxuICAgICAgY2FzZSAncSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcocXVhcnRlcik7XG4gICAgICAvLyAwMSwgMDIsIDAzLCAwNFxuXG4gICAgICBjYXNlICdxcSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcblxuICAgICAgY2FzZSAncW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihxdWFydGVyLCB7XG4gICAgICAgICAgdW5pdDogJ3F1YXJ0ZXInXG4gICAgICAgIH0pO1xuICAgICAgLy8gUTEsIFEyLCBRMywgUTRcblxuICAgICAgY2FzZSAncXFxJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIDEsIDIsIDMsIDQgKG5hcnJvdyBxdWFydGVyOyBjb3VsZCBiZSBub3QgbnVtZXJpY2FsKVxuXG4gICAgICBjYXNlICdxcXFxcSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cblxuICAgICAgY2FzZSAncXFxcSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnTSc6XG4gICAgICBjYXNlICdNTSc6XG4gICAgICAgIHJldHVybiBmb3JtYXR0ZXJzLk0oZGF0ZSwgdG9rZW4pO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aFxuXG4gICAgICBjYXNlICdNbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKG1vbnRoICsgMSwge1xuICAgICAgICAgIHVuaXQ6ICdtb250aCdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW4sIEZlYiwgLi4uLCBEZWNcblxuICAgICAgY2FzZSAnTU1NJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSiwgRiwgLi4uLCBEXG5cbiAgICAgIGNhc2UgJ01NTU1NJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyXG5cbiAgICAgIGNhc2UgJ01NTU0nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBTdGFuZC1hbG9uZSBtb250aFxuICBMOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMSwgMiwgLi4uLCAxMlxuICAgICAgY2FzZSAnTCc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobW9udGggKyAxKTtcbiAgICAgIC8vIDAxLCAwMiwgLi4uLCAxMlxuXG4gICAgICBjYXNlICdMTCc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcblxuICAgICAgY2FzZSAnTG8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihtb250aCArIDEsIHtcbiAgICAgICAgICB1bml0OiAnbW9udGgnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjXG5cbiAgICAgIGNhc2UgJ0xMTCc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEosIEYsIC4uLiwgRFxuXG4gICAgICBjYXNlICdMTExMTCc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlclxuXG4gICAgICBjYXNlICdMTExMJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTG9jYWwgd2VlayBvZiB5ZWFyXG4gIHc6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgd2VlayA9IGdldFVUQ1dlZWsoZGF0ZSwgb3B0aW9ucyk7XG5cbiAgICBpZiAodG9rZW4gPT09ICd3bycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHdlZWssIHtcbiAgICAgICAgdW5pdDogJ3dlZWsnXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHdlZWssIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIElTTyB3ZWVrIG9mIHllYXJcbiAgSTogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBpc29XZWVrID0gZ2V0VVRDSVNPV2VlayhkYXRlKTtcblxuICAgIGlmICh0b2tlbiA9PT0gJ0lvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaXNvV2Vlaywge1xuICAgICAgICB1bml0OiAnd2VlaydcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnZG8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ0RhdGUoKSwge1xuICAgICAgICB1bml0OiAnZGF0ZSdcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBmb3JtYXR0ZXJzLmQoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBEYXkgb2YgeWVhclxuICBEOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mWWVhciA9IGdldFVUQ0RheU9mWWVhcihkYXRlKTtcblxuICAgIGlmICh0b2tlbiA9PT0gJ0RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF5T2ZZZWFyLCB7XG4gICAgICAgIHVuaXQ6ICdkYXlPZlllYXInXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRheU9mWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHdlZWtcbiAgRTogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gVHVlXG4gICAgICBjYXNlICdFJzpcbiAgICAgIGNhc2UgJ0VFJzpcbiAgICAgIGNhc2UgJ0VFRSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuXG4gICAgICBjYXNlICdFRUVFRSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG5cbiAgICAgIGNhc2UgJ0VFRUVFRSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdzaG9ydCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuXG4gICAgICBjYXNlICdFRUVFJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBMb2NhbCBkYXkgb2Ygd2Vla1xuICBlOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgdmFyIGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBOdW1lcmljYWwgdmFsdWUgKE50aCBkYXkgb2Ygd2VlayB3aXRoIGN1cnJlbnQgbG9jYWxlIG9yIHdlZWtTdGFydHNPbilcbiAgICAgIGNhc2UgJ2UnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGxvY2FsRGF5T2ZXZWVrKTtcbiAgICAgIC8vIFBhZGRlZCBudW1lcmljYWwgdmFsdWVcblxuICAgICAgY2FzZSAnZWUnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGxvY2FsRGF5T2ZXZWVrLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuXG4gICAgICBjYXNlICdlbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGxvY2FsRGF5T2ZXZWVrLCB7XG4gICAgICAgICAgdW5pdDogJ2RheSdcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2VlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuXG4gICAgICBjYXNlICdlZWVlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG5cbiAgICAgIGNhc2UgJ2VlZWVlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdzaG9ydCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuXG4gICAgICBjYXNlICdlZWVlJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBTdGFuZC1hbG9uZSBsb2NhbCBkYXkgb2Ygd2Vla1xuICBjOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgdmFyIGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBOdW1lcmljYWwgdmFsdWUgKHNhbWUgYXMgaW4gYGVgKVxuICAgICAgY2FzZSAnYyc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspO1xuICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZVxuXG4gICAgICBjYXNlICdjYyc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobG9jYWxEYXlPZldlZWssIHRva2VuLmxlbmd0aCk7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCA3dGhcblxuICAgICAgY2FzZSAnY28nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFRcblxuICAgICAgY2FzZSAnY2NjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuXG4gICAgICBjYXNlICdjY2NjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcblxuICAgICAgY2FzZSAnY2NjYyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gSVNPIGRheSBvZiB3ZWVrXG4gIGk6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZGF5T2ZXZWVrID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgICB2YXIgaXNvRGF5T2ZXZWVrID0gZGF5T2ZXZWVrID09PSAwID8gNyA6IGRheU9mV2VlaztcblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDJcbiAgICAgIGNhc2UgJ2knOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGlzb0RheU9mV2Vlayk7XG4gICAgICAvLyAwMlxuXG4gICAgICBjYXNlICdpaSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvRGF5T2ZXZWVrLCB0b2tlbi5sZW5ndGgpO1xuICAgICAgLy8gMm5kXG5cbiAgICAgIGNhc2UgJ2lvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaXNvRGF5T2ZXZWVrLCB7XG4gICAgICAgICAgdW5pdDogJ2RheSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVcblxuICAgICAgY2FzZSAnaWlpJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG5cbiAgICAgIGNhc2UgJ2lpaWlpJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcblxuICAgICAgY2FzZSAnaWlpaWlpJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG5cbiAgICAgIGNhc2UgJ2lpaWknOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEFNIG9yIFBNXG4gIGE6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCk7XG4gICAgdmFyIGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/ICdwbScgOiAnYW0nO1xuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYSc6XG4gICAgICBjYXNlICdhYSc6XG4gICAgICBjYXNlICdhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnYWFhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2FhYWEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEFNLCBQTSwgbWlkbmlnaHQsIG5vb25cbiAgYjogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICB2YXIgZGF5UGVyaW9kRW51bVZhbHVlO1xuXG4gICAgaWYgKGhvdXJzID09PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5ub29uO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPT09IDApIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubWlkbmlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/ICdwbScgOiAnYW0nO1xuICAgIH1cblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ2InOlxuICAgICAgY2FzZSAnYmInOlxuICAgICAgY2FzZSAnYmJiJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2JiYmJiJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdiYmJiJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBpbiB0aGUgbW9ybmluZywgaW4gdGhlIGFmdGVybm9vbiwgaW4gdGhlIGV2ZW5pbmcsIGF0IG5pZ2h0XG4gIEI6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCk7XG4gICAgdmFyIGRheVBlcmlvZEVudW1WYWx1ZTtcblxuICAgIGlmIChob3VycyA+PSAxNykge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5ldmVuaW5nO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPj0gMTIpIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0uYWZ0ZXJub29uO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPj0gNCkge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5tb3JuaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm5pZ2h0O1xuICAgIH1cblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ0InOlxuICAgICAgY2FzZSAnQkInOlxuICAgICAgY2FzZSAnQkJCJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ0JCQkJCJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdCQkJCJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBIb3VyIFsxLTEyXVxuICBoOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnaG8nKSB7XG4gICAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAxMjtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1hdHRlcnMuaChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMjNdXG4gIEg6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdIbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDSG91cnMoKSwge1xuICAgICAgICB1bml0OiAnaG91cidcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBmb3JtYXR0ZXJzLkgoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBIb3VyIFswLTExXVxuICBLOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpICUgMTI7XG5cbiAgICBpZiAodG9rZW4gPT09ICdLbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhob3VycywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSG91ciBbMS0yNF1cbiAgazogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICBpZiAoaG91cnMgPT09IDApIGhvdXJzID0gMjQ7XG5cbiAgICBpZiAodG9rZW4gPT09ICdrbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhob3VycywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWludXRlXG4gIG06IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdtbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDTWludXRlcygpLCB7XG4gICAgICAgIHVuaXQ6ICdtaW51dGUnXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9ybWF0dGVycy5tKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gU2Vjb25kXG4gIHM6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdzbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDU2Vjb25kcygpLCB7XG4gICAgICAgIHVuaXQ6ICdzZWNvbmQnXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9ybWF0dGVycy5zKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBmb3JtYXR0ZXJzLlMoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYWx3YXlzIGAnWidgKVxuICBYOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXpvbmVPZmZzZXQgPSBvcmlnaW5hbERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcblxuICAgIGlmICh0aW1lem9uZU9mZnNldCA9PT0gMCkge1xuICAgICAgcmV0dXJuICdaJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlc1xuICAgICAgY2FzZSAnWCc6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpO1xuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhgXG5cbiAgICAgIGNhc2UgJ1hYWFgnOlxuICAgICAgY2FzZSAnWFgnOlxuICAgICAgICAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTtcbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYFhYWGBcblxuICAgICAgY2FzZSAnWFhYWFgnOlxuICAgICAgY2FzZSAnWFhYJzogLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aCBgOmAgZGVsaW1pdGVyXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICB9XG4gIH0sXG4gIC8vIFRpbWV6b25lIChJU08tODYwMS4gSWYgb2Zmc2V0IGlzIDAsIG91dHB1dCBpcyBgJyswMDowMCdgIG9yIGVxdWl2YWxlbnQpXG4gIHg6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gSG91cnMgYW5kIG9wdGlvbmFsIG1pbnV0ZXNcbiAgICAgIGNhc2UgJ3gnOlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKHRpbWV6b25lT2Zmc2V0KTtcbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4YFxuXG4gICAgICBjYXNlICd4eHh4JzpcbiAgICAgIGNhc2UgJ3h4JzpcbiAgICAgICAgLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCk7XG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRoIGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGB4eHhgXG5cbiAgICAgIGNhc2UgJ3h4eHh4JzpcbiAgICAgIGNhc2UgJ3h4eCc6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlclxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBUaW1lem9uZSAoR01UKVxuICBPOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXpvbmVPZmZzZXQgPSBvcmlnaW5hbERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICdPJzpcbiAgICAgIGNhc2UgJ09PJzpcbiAgICAgIGNhc2UgJ09PTyc6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG5cbiAgICAgIGNhc2UgJ09PT08nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdHTVQnICsgZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0aW9uKVxuICB6OiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXpvbmVPZmZzZXQgPSBvcmlnaW5hbERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICd6JzpcbiAgICAgIGNhc2UgJ3p6JzpcbiAgICAgIGNhc2UgJ3p6eic6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG5cbiAgICAgIGNhc2UgJ3p6enonOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdHTVQnICsgZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBTZWNvbmRzIHRpbWVzdGFtcFxuICB0OiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXN0YW1wID0gTWF0aC5mbG9vcihvcmlnaW5hbERhdGUuZ2V0VGltZSgpIC8gMTAwMCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbGxpc2Vjb25kcyB0aW1lc3RhbXBcbiAgVDogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWVzdGFtcCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAsIHRva2VuLmxlbmd0aCk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lU2hvcnQob2Zmc2V0LCBkaXJ0eURlbGltaXRlcikge1xuICB2YXIgc2lnbiA9IG9mZnNldCA+IDAgPyAnLScgOiAnKyc7XG4gIHZhciBhYnNPZmZzZXQgPSBNYXRoLmFicyhvZmZzZXQpO1xuICB2YXIgaG91cnMgPSBNYXRoLmZsb29yKGFic09mZnNldCAvIDYwKTtcbiAgdmFyIG1pbnV0ZXMgPSBhYnNPZmZzZXQgJSA2MDtcblxuICBpZiAobWludXRlcyA9PT0gMCkge1xuICAgIHJldHVybiBzaWduICsgU3RyaW5nKGhvdXJzKTtcbiAgfVxuXG4gIHZhciBkZWxpbWl0ZXIgPSBkaXJ0eURlbGltaXRlciB8fCAnJztcbiAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpICsgZGVsaW1pdGVyICsgYWRkTGVhZGluZ1plcm9zKG1pbnV0ZXMsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXMob2Zmc2V0LCBkaXJ0eURlbGltaXRlcikge1xuICBpZiAob2Zmc2V0ICUgNjAgPT09IDApIHtcbiAgICB2YXIgc2lnbiA9IG9mZnNldCA+IDAgPyAnLScgOiAnKyc7XG4gICAgcmV0dXJuIHNpZ24gKyBhZGRMZWFkaW5nWmVyb3MoTWF0aC5hYnMob2Zmc2V0KSAvIDYwLCAyKTtcbiAgfVxuXG4gIHJldHVybiBmb3JtYXRUaW1lem9uZShvZmZzZXQsIGRpcnR5RGVsaW1pdGVyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmUob2Zmc2V0LCBkaXJ0eURlbGltaXRlcikge1xuICB2YXIgZGVsaW1pdGVyID0gZGlydHlEZWxpbWl0ZXIgfHwgJyc7XG4gIHZhciBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgdmFyIGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7XG4gIHZhciBob3VycyA9IGFkZExlYWRpbmdaZXJvcyhNYXRoLmZsb29yKGFic09mZnNldCAvIDYwKSwgMik7XG4gIHZhciBtaW51dGVzID0gYWRkTGVhZGluZ1plcm9zKGFic09mZnNldCAlIDYwLCAyKTtcbiAgcmV0dXJuIHNpZ24gKyBob3VycyArIGRlbGltaXRlciArIG1pbnV0ZXM7XG59XG5cbmZ1bmN0aW9uIGRhdGVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpIHtcbiAgc3dpdGNoIChwYXR0ZXJuKSB7XG4gICAgY2FzZSAnUCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdzaG9ydCdcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnUFAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG5cbiAgICBjYXNlICdQUFAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnUFBQUCc6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoe1xuICAgICAgICB3aWR0aDogJ2Z1bGwnXG4gICAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0aW1lTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ3AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ3BwJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoe1xuICAgICAgICB3aWR0aDogJ21lZGl1bSdcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAncHBwJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoe1xuICAgICAgICB3aWR0aDogJ2xvbmcnXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ3BwcHAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGF0ZVRpbWVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpIHtcbiAgdmFyIG1hdGNoUmVzdWx0ID0gcGF0dGVybi5tYXRjaCgvKFArKShwKyk/Lyk7XG4gIHZhciBkYXRlUGF0dGVybiA9IG1hdGNoUmVzdWx0WzFdO1xuICB2YXIgdGltZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsyXTtcblxuICBpZiAoIXRpbWVQYXR0ZXJuKSB7XG4gICAgcmV0dXJuIGRhdGVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpO1xuICB9XG5cbiAgdmFyIGRhdGVUaW1lRm9ybWF0O1xuXG4gIHN3aXRjaCAoZGF0ZVBhdHRlcm4pIHtcbiAgICBjYXNlICdQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnUFAnOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnUFBQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdQUFBQJzpcbiAgICBkZWZhdWx0OlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBkYXRlVGltZUZvcm1hdC5yZXBsYWNlKCd7e2RhdGV9fScsIGRhdGVMb25nRm9ybWF0dGVyKGRhdGVQYXR0ZXJuLCBmb3JtYXRMb25nKSkucmVwbGFjZSgne3t0aW1lfX0nLCB0aW1lTG9uZ0Zvcm1hdHRlcih0aW1lUGF0dGVybiwgZm9ybWF0TG9uZykpO1xufVxuXG52YXIgbG9uZ0Zvcm1hdHRlcnMgPSB7XG4gIHA6IHRpbWVMb25nRm9ybWF0dGVyLFxuICBQOiBkYXRlVGltZUxvbmdGb3JtYXR0ZXJcbn07XG5cbnZhciBNSUxMSVNFQ09ORFNfSU5fTUlOVVRFID0gNjAwMDA7XG5cbmZ1bmN0aW9uIGdldERhdGVNaWxsaXNlY29uZHNQYXJ0KGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0VGltZSgpICUgTUlMTElTRUNPTkRTX0lOX01JTlVURTtcbn1cbi8qKlxuICogR29vZ2xlIENocm9tZSBhcyBvZiA2Ny4wLjMzOTYuODcgaW50cm9kdWNlZCB0aW1lem9uZXMgd2l0aCBvZmZzZXQgdGhhdCBpbmNsdWRlcyBzZWNvbmRzLlxuICogVGhleSB1c3VhbGx5IGFwcGVhciBmb3IgZGF0ZXMgdGhhdCBkZW5vdGUgdGltZSBiZWZvcmUgdGhlIHRpbWV6b25lcyB3ZXJlIGludHJvZHVjZWRcbiAqIChlLmcuIGZvciAnRXVyb3BlL1ByYWd1ZScgdGltZXpvbmUgdGhlIG9mZnNldCBpcyBHTVQrMDA6NTc6NDQgYmVmb3JlIDEgT2N0b2JlciAxODkxXG4gKiBhbmQgR01UKzAxOjAwOjAwIGFmdGVyIHRoYXQgZGF0ZSlcbiAqXG4gKiBEYXRlI2dldFRpbWV6b25lT2Zmc2V0IHJldHVybnMgdGhlIG9mZnNldCBpbiBtaW51dGVzIGFuZCB3b3VsZCByZXR1cm4gNTcgZm9yIHRoZSBleGFtcGxlIGFib3ZlLFxuICogd2hpY2ggd291bGQgbGVhZCB0byBpbmNvcnJlY3QgY2FsY3VsYXRpb25zLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdGltZXpvbmUgb2Zmc2V0IGluIG1pbGxpc2Vjb25kcyB0aGF0IHRha2VzIHNlY29uZHMgaW4gYWNjb3VudC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoZGlydHlEYXRlKSB7XG4gIHZhciBkYXRlID0gbmV3IERhdGUoZGlydHlEYXRlLmdldFRpbWUoKSk7XG4gIHZhciBiYXNlVGltZXpvbmVPZmZzZXQgPSBNYXRoLmNlaWwoZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpKTtcbiAgZGF0ZS5zZXRTZWNvbmRzKDAsIDApO1xuICB2YXIgaGFzTmVnYXRpdmVVVENPZmZzZXQgPSBiYXNlVGltZXpvbmVPZmZzZXQgPiAwO1xuICB2YXIgbWlsbGlzZWNvbmRzUGFydE9mVGltZXpvbmVPZmZzZXQgPSBoYXNOZWdhdGl2ZVVUQ09mZnNldCA/IChNSUxMSVNFQ09ORFNfSU5fTUlOVVRFICsgZ2V0RGF0ZU1pbGxpc2Vjb25kc1BhcnQoZGF0ZSkpICUgTUlMTElTRUNPTkRTX0lOX01JTlVURSA6IGdldERhdGVNaWxsaXNlY29uZHNQYXJ0KGRhdGUpO1xuICByZXR1cm4gYmFzZVRpbWV6b25lT2Zmc2V0ICogTUlMTElTRUNPTkRTX0lOX01JTlVURSArIG1pbGxpc2Vjb25kc1BhcnRPZlRpbWV6b25lT2Zmc2V0O1xufVxuXG52YXIgcHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW5zID0gWydEJywgJ0REJ107XG52YXIgcHJvdGVjdGVkV2Vla1llYXJUb2tlbnMgPSBbJ1lZJywgJ1lZWVknXTtcbmZ1bmN0aW9uIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIHByb3RlY3RlZERheU9mWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5mdW5jdGlvbiBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIHByb3RlY3RlZFdlZWtZZWFyVG9rZW5zLmluZGV4T2YodG9rZW4pICE9PSAtMTtcbn1cbmZ1bmN0aW9uIHRocm93UHJvdGVjdGVkRXJyb3IodG9rZW4sIGZvcm1hdCwgaW5wdXQpIHtcbiAgaWYgKHRva2VuID09PSAnWVlZWScpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgeXl5eWAgaW5zdGVhZCBvZiBgWVlZWWAgKGluIGBcIi5jb25jYXQoZm9ybWF0LCBcImApIGZvciBmb3JtYXR0aW5nIHllYXJzIHRvIHRoZSBpbnB1dCBgXCIpLmNvbmNhdChpbnB1dCwgXCJgOyBzZWU6IGh0dHBzOi8vZ2l0LmlvL2Z4Q3lyXCIpKTtcbiAgfSBlbHNlIGlmICh0b2tlbiA9PT0gJ1lZJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGB5eWAgaW5zdGVhZCBvZiBgWVlgIChpbiBgXCIuY29uY2F0KGZvcm1hdCwgXCJgKSBmb3IgZm9ybWF0dGluZyB5ZWFycyB0byB0aGUgaW5wdXQgYFwiKS5jb25jYXQoaW5wdXQsIFwiYDsgc2VlOiBodHRwczovL2dpdC5pby9meEN5clwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdEJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGBkYCBpbnN0ZWFkIG9mIGBEYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXQuaW8vZnhDeXJcIikpO1xuICB9IGVsc2UgaWYgKHRva2VuID09PSAnREQnKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJVc2UgYGRkYCBpbnN0ZWFkIG9mIGBERGAgKGluIGBcIi5jb25jYXQoZm9ybWF0LCBcImApIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHRvIHRoZSBpbnB1dCBgXCIpLmNvbmNhdChpbnB1dCwgXCJgOyBzZWU6IGh0dHBzOi8vZ2l0LmlvL2Z4Q3lyXCIpKTtcbiAgfVxufVxuXG4vLyAtIFt5WVFxTUx3SWREZWNpaEhLa21zXW8gbWF0Y2hlcyBhbnkgYXZhaWxhYmxlIG9yZGluYWwgbnVtYmVyIHRva2VuXG4vLyAgIChvbmUgb2YgdGhlIGNlcnRhaW4gbGV0dGVycyBmb2xsb3dlZCBieSBgb2ApXG4vLyAtIChcXHcpXFwxKiBtYXRjaGVzIGFueSBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgbGV0dGVyXG4vLyAtICcnIG1hdGNoZXMgdHdvIHF1b3RlIGNoYXJhY3RlcnMgaW4gYSByb3dcbi8vIC0gJygnJ3xbXiddKSsoJ3wkKSBtYXRjaGVzIGFueXRoaW5nIHN1cnJvdW5kZWQgYnkgdHdvIHF1b3RlIGNoYXJhY3RlcnMgKCcpLFxuLy8gICBleGNlcHQgYSBzaW5nbGUgcXVvdGUgc3ltYm9sLCB3aGljaCBlbmRzIHRoZSBzZXF1ZW5jZS5cbi8vICAgVHdvIHF1b3RlIGNoYXJhY3RlcnMgZG8gbm90IGVuZCB0aGUgc2VxdWVuY2UuXG4vLyAgIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHNpbmdsZSBxdW90ZVxuLy8gICB0aGVuIHRoZSBzZXF1ZW5jZSB3aWxsIGNvbnRpbnVlIHVudGlsIHRoZSBlbmQgb2YgdGhlIHN0cmluZy5cbi8vIC0gLiBtYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyIHVubWF0Y2hlZCBieSBwcmV2aW91cyBwYXJ0cyBvZiB0aGUgUmVnRXhwc1xuXG52YXIgZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCA9IC9beVlRcU1Md0lkRGVjaWhIS2ttc11vfChcXHcpXFwxKnwnJ3wnKCcnfFteJ10pKygnfCQpfC4vZzsgLy8gVGhpcyBSZWdFeHAgY2F0Y2hlcyBzeW1ib2xzIGVzY2FwZWQgYnkgcXVvdGVzLCBhbmQgYWxzb1xuLy8gc2VxdWVuY2VzIG9mIHN5bWJvbHMgUCwgcCwgYW5kIHRoZSBjb21iaW5hdGlvbnMgbGlrZSBgUFBQUFBQUHBwcHBwYFxuXG52YXIgbG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPSAvUCtwK3xQK3xwK3wnJ3wnKCcnfFteJ10pKygnfCQpfC4vZztcbnZhciBlc2NhcGVkU3RyaW5nUmVnRXhwID0gL14nKFteXSo/KSc/JC87XG52YXIgZG91YmxlUXVvdGVSZWdFeHAgPSAvJycvZztcbnZhciB1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cCA9IC9bYS16QS1aXS87XG4vKipcbiAqIEBuYW1lIGZvcm1hdFxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBGb3JtYXQgdGhlIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZyBpbiB0aGUgZ2l2ZW4gZm9ybWF0LiBUaGUgcmVzdWx0IG1heSB2YXJ5IGJ5IGxvY2FsZS5cbiAqXG4gKiA+IOKaoO+4jyBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBgZm9ybWF0YCB0b2tlbnMgZGlmZmVyIGZyb20gTW9tZW50LmpzIGFuZCBvdGhlciBsaWJyYXJpZXMuXG4gKiA+IFNlZTogaHR0cHM6Ly9naXQuaW8vZnhDeXJcbiAqXG4gKiBUaGUgY2hhcmFjdGVycyB3cmFwcGVkIGJldHdlZW4gdHdvIHNpbmdsZSBxdW90ZXMgY2hhcmFjdGVycyAoJykgYXJlIGVzY2FwZWQuXG4gKiBUd28gc2luZ2xlIHF1b3RlcyBpbiBhIHJvdywgd2hldGhlciBpbnNpZGUgb3Igb3V0c2lkZSBhIHF1b3RlZCBzZXF1ZW5jZSwgcmVwcmVzZW50IGEgJ3JlYWwnIHNpbmdsZSBxdW90ZS5cbiAqIChzZWUgdGhlIGxhc3QgZXhhbXBsZSlcbiAqXG4gKiBGb3JtYXQgb2YgdGhlIHN0cmluZyBpcyBiYXNlZCBvbiBVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZCAjMzU6XG4gKiBodHRwczovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS1kYXRlcy5odG1sI0RhdGVfRmllbGRfU3ltYm9sX1RhYmxlXG4gKiB3aXRoIGEgZmV3IGFkZGl0aW9ucyAoc2VlIG5vdGUgNyBiZWxvdyB0aGUgdGFibGUpLlxuICpcbiAqIEFjY2VwdGVkIHBhdHRlcm5zOlxuICogfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGF0dGVybiB8IFJlc3VsdCBleGFtcGxlcyAgICAgICAgICAgICAgICAgICB8IE5vdGVzIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS18XG4gKiB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHLi5HR0cgIHwgQUQsIEJDICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0dHRyAgICB8IEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdHR0dHICAgfCBBLCBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IENhbGVuZGFyIHllYXIgICAgICAgICAgICAgICAgICAgfCB5ICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeW8gICAgICB8IDQ0dGgsIDFzdCwgMHRoLCAxN3RoICAgICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5ICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5eSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eXl5ICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgfCBZICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWW8gICAgICB8IDQ0dGgsIDFzdCwgMTkwMHRoLCAyMDE3dGggICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZWSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUsOCAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWVlZICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICAgfCBSICAgICAgIHwgLTQzLCAwLCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlIgICAgICB8IC00MywgMDAsIDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUiAgICAgfCAtMDQzLCAwMDAsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlJSICAgIHwgLTAwNDMsIDAwMDAsIDAwMDEsIDE5MDAsIDIwMTcgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSUlIgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSw3IHxcbiAqIHwgRXh0ZW5kZWQgeWVhciAgICAgICAgICAgICAgICAgICB8IHUgICAgICAgfCAtNDMsIDAsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dSAgICAgIHwgLTQzLCAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1ICAgICB8IC0wNDMsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dXUgICAgfCAtMDA0MywgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXV1dSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBRdWFydGVyIChmb3JtYXR0aW5nKSAgICAgICAgICAgIHwgUSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUVEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVFRUSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBRdWFydGVyIChzdGFuZC1hbG9uZSkgICAgICAgICAgIHwgcSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcXEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXFxcSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBNb250aCAoZm9ybWF0dGluZykgICAgICAgICAgICAgIHwgTSAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1vICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTSAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTU0gICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU1NTSAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBNb250aCAoc3RhbmQtYWxvbmUpICAgICAgICAgICAgIHwgTCAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTCAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTEwgICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTExMTCAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgIHwgdyAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3dyAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gd2VlayBvZiB5ZWFyICAgICAgICAgICAgICAgIHwgSSAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IElvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJSSAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgIHwgZCAgICAgICB8IDEsIDIsIC4uLiwgMzEgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzMXN0ICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkZCAgICAgIHwgMDEsIDAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBEYXkgb2YgeWVhciAgICAgICAgICAgICAgICAgICAgIHwgRCAgICAgICB8IDEsIDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgICAgICB8IDkgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzNjV0aCwgMzY2dGggICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBERCAgICAgIHwgMDEsIDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgIHwgOSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREREICAgICB8IDAwMSwgMDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEREREQgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICB8XG4gKiB8IERheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICAgICAgfCBFLi5FRUUgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUVFICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFRUUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTdSwgU2EgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICAgIHwgaSAgICAgICB8IDEsIDIsIDMsIC4uLiwgNyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA3dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaSAgICAgIHwgMDEsIDAyLCAuLi4sIDA3ICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWkgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyLDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpaSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaWlpICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU3UsIFNhICAgICAgICB8IDcgICAgIHxcbiAqIHwgTG9jYWwgZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICB8IGUgICAgICAgfCAyLCAzLCA0LCAuLi4sIDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlbyAgICAgIHwgMm5kLCAzcmQsIC4uLiwgMXN0ICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWUgICAgICB8IDAyLCAwMywgLi4uLCAwMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZWUgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWVlZSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFN1LCBTYSAgICAgICAgfCAgICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChzdGFuZC1hbG9uZSkgfCBjICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY28gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2MgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjYyAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2NjICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjY2MgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTdSwgU2EgICAgICAgIHwgICAgICAgfFxuICogfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgYS4uYWFhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYWEgICAgfCBhLm0uLCBwLm0uICAgICAgICAgICAgICAgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWFhYSAgIHwgYSwgcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgIHwgYi4uYmJiICB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYmIgICAgfCBhLm0uLCBwLm0uLCBub29uLCBtaWRuaWdodCAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmJiYiAgIHwgYSwgcCwgbiwgbWkgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBGbGV4aWJsZSBkYXkgcGVyaW9kICAgICAgICAgICAgIHwgQi4uQkJCICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJCQkIgICAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCQkJCQiAgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgICAgICAgfFxuICogfCBIb3VyIFsxLTEyXSAgICAgICAgICAgICAgICAgICAgIHwgaCAgICAgICB8IDEsIDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMXRoLCAxMnRoICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBoaCAgICAgIHwgMDEsIDAyLCAuLi4sIDExLCAxMiAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBIb3VyIFswLTIzXSAgICAgICAgICAgICAgICAgICAgIHwgSCAgICAgICB8IDAsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhvICAgICAgfCAwdGgsIDFzdCwgMm5kLCAuLi4sIDIzcmQgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBISCAgICAgIHwgMDAsIDAxLCAwMiwgLi4uLCAyMyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBIb3VyIFswLTExXSAgICAgICAgICAgICAgICAgICAgIHwgSyAgICAgICB8IDEsIDIsIC4uLiwgMTEsIDAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEtvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMXRoLCAwdGggICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBLSyAgICAgIHwgMDEsIDAyLCAuLi4sIDExLCAwMCAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBIb3VyIFsxLTI0XSAgICAgICAgICAgICAgICAgICAgIHwgayAgICAgICB8IDI0LCAxLCAyLCAuLi4sIDIzICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtvICAgICAgfCAyNHRoLCAxc3QsIDJuZCwgLi4uLCAyM3JkICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBrayAgICAgIHwgMjQsIDAxLCAwMiwgLi4uLCAyMyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBNaW51dGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbSAgICAgICB8IDAsIDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1vICAgICAgfCAwdGgsIDFzdCwgLi4uLCA1OXRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtbSAgICAgIHwgMDAsIDAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBTZWNvbmQgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcyAgICAgICB8IDAsIDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNvICAgICAgfCAwdGgsIDFzdCwgLi4uLCA1OXRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzcyAgICAgIHwgMDAsIDAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBGcmFjdGlvbiBvZiBzZWNvbmQgICAgICAgICAgICAgIHwgUyAgICAgICB8IDAsIDEsIC4uLiwgOSAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTICAgICAgfCAwMCwgMDEsIC4uLiwgOTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTU1MgICAgIHwgMDAwLCAwMDAxLCAuLi4sIDk5OSAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1NTUyAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMgICAgIHxcbiAqIHwgVGltZXpvbmUgKElTTy04NjAxIHcvIFopICAgICAgICB8IFggICAgICAgfCAtMDgsICswNTMwLCBaICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWCAgICAgIHwgLTA4MDAsICswNTMwLCBaICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYICAgICB8IC0wODowMCwgKzA1OjMwLCBaICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWFggICAgfCAtMDgwMCwgKzA1MzAsIFosICsxMjM0NTYgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFhYWCAgIHwgLTA4OjAwLCArMDU6MzAsIFosICsxMjozNDo1NiAgICAgIHwgICAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy9vIFopICAgICAgIHwgeCAgICAgICB8IC0wOCwgKzA1MzAsICswMCAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4ICAgICAgfCAtMDgwMCwgKzA1MzAsICswMDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHggICAgIHwgLTA4OjAwLCArMDU6MzAsICswMDowMCAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4eCAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAsICsxMjM0NTYgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eHh4ICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwLCArMTI6MzQ6NTYgfCAgICAgICB8XG4gKiB8IFRpbWV6b25lIChHTVQpICAgICAgICAgICAgICAgICAgfCBPLi4uT09PIHwgR01ULTgsIEdNVCs1OjMwLCBHTVQrMCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT09PTyAgICB8IEdNVC0wODowMCwgR01UKzA1OjMwLCBHTVQrMDA6MDAgICB8IDIgICAgIHxcbiAqIHwgVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdC4pICB8IHouLi56enogfCBHTVQtOCwgR01UKzU6MzAsIEdNVCswICAgICAgICAgICAgfCA2ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB6enp6ICAgIHwgR01ULTA4OjAwLCBHTVQrMDU6MzAsIEdNVCswMDowMCAgIHwgMiw2ICAgfFxuICogfCBTZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICAgICAgIHwgdCAgICAgICB8IDUxMjk2OTUyMCAgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHR0ICAgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDcgICB8XG4gKiB8IE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICAgfCBUICAgICAgIHwgNTEyOTY5NTIwOTAwICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVFQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNyAgIHxcbiAqIHwgTG9uZyBsb2NhbGl6ZWQgZGF0ZSAgICAgICAgICAgICB8IFAgICAgICAgfCAwNS8yOS8xNDUzICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUCAgICAgIHwgTWF5IDI5LCAxNDUzICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQICAgICB8IE1heSAyOXRoLCAxNDUzICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUFAgICAgfCBTdW5kYXksIE1heSAyOXRoLCAxNDUzICAgICAgICAgICAgfCAyLDcgICB8XG4gKiB8IExvbmcgbG9jYWxpemVkIHRpbWUgICAgICAgICAgICAgfCBwICAgICAgIHwgMTI6MDAgQU0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHAgICAgICB8IDEyOjAwOjAwIEFNICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwcCAgICAgfCAxMjowMDowMCBBTSBHTVQrMiAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcHBwICAgIHwgMTI6MDA6MDAgQU0gR01UKzAyOjAwICAgICAgICAgICAgIHwgMiw3ICAgfFxuICogfCBDb21iaW5hdGlvbiBvZiBkYXRlIGFuZCB0aW1lICAgIHwgUHAgICAgICB8IDA1LzI5LzE0NTMsIDEyOjAwIEFNICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQcHAgICAgfCBNYXkgMjksIDE0NTMsIDEyOjAwOjAwIEFNICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBwcHAgIHwgTWF5IDI5dGgsIDE0NTMgYXQgLi4uICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQUHBwcHB8IFN1bmRheSwgTWF5IDI5dGgsIDE0NTMgYXQgLi4uICAgICB8IDIsNyAgIHxcbiAqIE5vdGVzOlxuICogMS4gXCJGb3JtYXR0aW5nXCIgdW5pdHMgKGUuZy4gZm9ybWF0dGluZyBxdWFydGVyKSBpbiB0aGUgZGVmYXVsdCBlbi1VUyBsb2NhbGVcbiAqICAgIGFyZSB0aGUgc2FtZSBhcyBcInN0YW5kLWFsb25lXCIgdW5pdHMsIGJ1dCBhcmUgZGlmZmVyZW50IGluIHNvbWUgbGFuZ3VhZ2VzLlxuICogICAgXCJGb3JtYXR0aW5nXCIgdW5pdHMgYXJlIGRlY2xpbmVkIGFjY29yZGluZyB0byB0aGUgcnVsZXMgb2YgdGhlIGxhbmd1YWdlXG4gKiAgICBpbiB0aGUgY29udGV4dCBvZiBhIGRhdGUuIFwiU3RhbmQtYWxvbmVcIiB1bml0cyBhcmUgYWx3YXlzIG5vbWluYXRpdmUgc2luZ3VsYXI6XG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdkbyBMTExMJywge2xvY2FsZTogY3N9KSAvLz0+ICc2LiBsaXN0b3BhZCdgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdkbyBNTU1NJywge2xvY2FsZTogY3N9KSAvLz0+ICc2LiBsaXN0b3BhZHUnYFxuICpcbiAqIDIuIEFueSBzZXF1ZW5jZSBvZiB0aGUgaWRlbnRpY2FsIGxldHRlcnMgaXMgYSBwYXR0ZXJuLCB1bmxlc3MgaXQgaXMgZXNjYXBlZCBieVxuICogICAgdGhlIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzIChzZWUgYmVsb3cpLlxuICogICAgSWYgdGhlIHNlcXVlbmNlIGlzIGxvbmdlciB0aGFuIGxpc3RlZCBpbiB0YWJsZSAoZS5nLiBgRUVFRUVFRUVFRUVgKVxuICogICAgdGhlIG91dHB1dCB3aWxsIGJlIHRoZSBzYW1lIGFzIGRlZmF1bHQgcGF0dGVybiBmb3IgdGhpcyB1bml0LCB1c3VhbGx5XG4gKiAgICB0aGUgbG9uZ2VzdCBvbmUgKGluIGNhc2Ugb2YgSVNPIHdlZWtkYXlzLCBgRUVFRWApLiBEZWZhdWx0IHBhdHRlcm5zIGZvciB1bml0c1xuICogICAgYXJlIG1hcmtlZCB3aXRoIFwiMlwiIGluIHRoZSBsYXN0IGNvbHVtbiBvZiB0aGUgdGFibGUuXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU0nKSAvLz0+ICdOb3YnYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NJykgLy89PiAnTidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqIDMuIFNvbWUgcGF0dGVybnMgY291bGQgYmUgdW5saW1pdGVkIGxlbmd0aCAoc3VjaCBhcyBgeXl5eXl5eXlgKS5cbiAqICAgIFRoZSBvdXRwdXQgd2lsbCBiZSBwYWRkZWQgd2l0aCB6ZXJvcyB0byBtYXRjaCB0aGUgbGVuZ3RoIG9mIHRoZSBwYXR0ZXJuLlxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAneXl5eXl5eXknKSAvLz0+ICcwMDAwMjAxNydgXG4gKlxuICogNC4gYFFRUVFRYCBhbmQgYHFxcXFxYCBjb3VsZCBiZSBub3Qgc3RyaWN0bHkgbnVtZXJpY2FsIGluIHNvbWUgbG9jYWxlcy5cbiAqICAgIFRoZXNlIHRva2VucyByZXByZXNlbnQgdGhlIHNob3J0ZXN0IGZvcm0gb2YgdGhlIHF1YXJ0ZXIuXG4gKlxuICogNS4gVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIGB5YCBhbmQgYHVgIHBhdHRlcm5zIGFyZSBCLkMuIHllYXJzOlxuICpcbiAqICAgIHwgWWVhciB8IGB5YCB8IGB1YCB8XG4gKiAgICB8LS0tLS0tfC0tLS0tfC0tLS0tfFxuICogICAgfCBBQyAxIHwgICAxIHwgICAxIHxcbiAqICAgIHwgQkMgMSB8ICAgMSB8ICAgMCB8XG4gKiAgICB8IEJDIDIgfCAgIDIgfCAgLTEgfFxuICpcbiAqICAgIEFsc28gYHl5YCBhbHdheXMgcmV0dXJucyB0aGUgbGFzdCB0d28gZGlnaXRzIG9mIGEgeWVhcixcbiAqICAgIHdoaWxlIGB1dWAgcGFkcyBzaW5nbGUgZGlnaXQgeWVhcnMgdG8gMiBjaGFyYWN0ZXJzIGFuZCByZXR1cm5zIG90aGVyIHllYXJzIHVuY2hhbmdlZDpcbiAqXG4gKiAgICB8IFllYXIgfCBgeXlgIHwgYHV1YCB8XG4gKiAgICB8LS0tLS0tfC0tLS0tLXwtLS0tLS18XG4gKiAgICB8IDEgICAgfCAgIDAxIHwgICAwMSB8XG4gKiAgICB8IDE0ICAgfCAgIDE0IHwgICAxNCB8XG4gKiAgICB8IDM3NiAgfCAgIDc2IHwgIDM3NiB8XG4gKiAgICB8IDE0NTMgfCAgIDUzIHwgMTQ1MyB8XG4gKlxuICogICAgVGhlIHNhbWUgZGlmZmVyZW5jZSBpcyB0cnVlIGZvciBsb2NhbCBhbmQgSVNPIHdlZWstbnVtYmVyaW5nIHllYXJzIChgWWAgYW5kIGBSYCksXG4gKiAgICBleGNlcHQgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhcnMgYXJlIGRlcGVuZGVudCBvbiBgb3B0aW9ucy53ZWVrU3RhcnRzT25gXG4gKiAgICBhbmQgYG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlYCAoY29tcGFyZSBbZ2V0SVNPV2Vla1llYXJde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvZ2V0SVNPV2Vla1llYXJ9XG4gKiAgICBhbmQgW2dldFdlZWtZZWFyXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL2dldFdlZWtZZWFyfSkuXG4gKlxuICogNi4gU3BlY2lmaWMgbm9uLWxvY2F0aW9uIHRpbWV6b25lcyBhcmUgY3VycmVudGx5IHVuYXZhaWxhYmxlIGluIGBkYXRlLWZuc2AsXG4gKiAgICBzbyByaWdodCBub3cgdGhlc2UgdG9rZW5zIGZhbGwgYmFjayB0byBHTVQgdGltZXpvbmVzLlxuICpcbiAqIDcuIFRoZXNlIHBhdHRlcm5zIGFyZSBub3QgaW4gdGhlIFVuaWNvZGUgVGVjaG5pY2FsIFN0YW5kYXJkICMzNTpcbiAqICAgIC0gYGlgOiBJU08gZGF5IG9mIHdlZWtcbiAqICAgIC0gYElgOiBJU08gd2VlayBvZiB5ZWFyXG4gKiAgICAtIGBSYDogSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAqICAgIC0gYHRgOiBzZWNvbmRzIHRpbWVzdGFtcFxuICogICAgLSBgVGA6IG1pbGxpc2Vjb25kcyB0aW1lc3RhbXBcbiAqICAgIC0gYG9gOiBvcmRpbmFsIG51bWJlciBtb2RpZmllclxuICogICAgLSBgUGA6IGxvbmcgbG9jYWxpemVkIGRhdGVcbiAqICAgIC0gYHBgOiBsb25nIGxvY2FsaXplZCB0aW1lXG4gKlxuICogOC4gYFlZYCBhbmQgYFlZWVlgIHRva2VucyByZXByZXNlbnQgd2Vlay1udW1iZXJpbmcgeWVhcnMgYnV0IHRoZXkgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggeWVhcnMuXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnNgIHRvIHVzZSB0aGVtLiBTZWU6IGh0dHBzOi8vZ2l0LmlvL2Z4Q3lyXG4gKlxuICogOS4gYERgIGFuZCBgRERgIHRva2VucyByZXByZXNlbnQgZGF5cyBvZiB0aGUgeWVhciBidXQgdGhleSBhcmUgb2Z0aGVuIGNvbmZ1c2VkIHdpdGggZGF5cyBvZiB0aGUgbW9udGguXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zYCB0byB1c2UgdGhlbS4gU2VlOiBodHRwczovL2dpdC5pby9meEN5clxuICpcbiAqICMjIyB2Mi4wLjAgYnJlYWtpbmcgY2hhbmdlczpcbiAqXG4gKiAtIFtDaGFuZ2VzIHRoYXQgYXJlIGNvbW1vbiBmb3IgdGhlIHdob2xlIGxpYnJhcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNDb21tb24tQ2hhbmdlcykuXG4gKlxuICogLSBUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIG5vdyByZXF1aXJlZCBmb3IgdGhlIHNha2Ugb2YgZXhwbGljaXRuZXNzLlxuICpcbiAqICAgYGBgamF2YXNjcmlwdFxuICogICAvLyBCZWZvcmUgdjIuMC4wXG4gKiAgIGZvcm1hdChuZXcgRGF0ZSgyMDE2LCAwLCAxKSlcbiAqXG4gKiAgIC8vIHYyLjAuMCBvbndhcmRcbiAqICAgZm9ybWF0KG5ldyBEYXRlKDIwMTYsIDAsIDEpLCBcInl5eXktTU0tZGQnVCdISDptbTpzcy5TU1N4eHhcIilcbiAqICAgYGBgXG4gKlxuICogLSBOZXcgZm9ybWF0IHN0cmluZyBBUEkgZm9yIGBmb3JtYXRgIGZ1bmN0aW9uXG4gKiAgIHdoaWNoIGlzIGJhc2VkIG9uIFtVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZCAjMzVdKGh0dHBzOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LWRhdGVzLmh0bWwjRGF0ZV9GaWVsZF9TeW1ib2xfVGFibGUpLlxuICogICBTZWUgW3RoaXMgcG9zdF0oaHR0cHM6Ly9ibG9nLmRhdGUtZm5zLm9yZy9wb3N0L3VuaWNvZGUtdG9rZW5zLWluLWRhdGUtZm5zLXYyLXNyZWF0eWtpOTFqZykgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiAtIENoYXJhY3RlcnMgYXJlIG5vdyBlc2NhcGVkIHVzaW5nIHNpbmdsZSBxdW90ZSBzeW1ib2xzIChgJ2ApIGluc3RlYWQgb2Ygc3F1YXJlIGJyYWNrZXRzLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIHtTdHJpbmd9IGZvcm1hdCAtIHRoZSBzdHJpbmcgb2YgdG9rZW5zXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gYW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cbiAqIEBwYXJhbSB7TG9jYWxlfSBbb3B0aW9ucy5sb2NhbGU9ZGVmYXVsdExvY2FsZV0gLSB0aGUgbG9jYWxlIG9iamVjdC4gU2VlIFtMb2NhbGVde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvTG9jYWxlfVxuICogQHBhcmFtIHswfDF8MnwzfDR8NXw2fSBbb3B0aW9ucy53ZWVrU3RhcnRzT249MF0gLSB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayAoMCAtIFN1bmRheSlcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGU9MV0gLSB0aGUgZGF5IG9mIEphbnVhcnksIHdoaWNoIGlzXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2Vucz1mYWxzZV0gLSBpZiB0cnVlLCBhbGxvd3MgdXNhZ2Ugb2YgdGhlIHdlZWstbnVtYmVyaW5nIHllYXIgdG9rZW5zIGBZWWAgYW5kIGBZWVlZYDtcbiAqICAgc2VlOiBodHRwczovL2dpdC5pby9meEN5clxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zPWZhbHNlXSAtIGlmIHRydWUsIGFsbG93cyB1c2FnZSBvZiB0aGUgZGF5IG9mIHllYXIgdG9rZW5zIGBEYCBhbmQgYEREYDtcbiAqICAgc2VlOiBodHRwczovL2dpdC5pby9meEN5clxuICogQHJldHVybnMge1N0cmluZ30gdGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZ1xuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYGRhdGVgIG11c3Qgbm90IGJlIEludmFsaWQgRGF0ZVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGxvY2FsaXplYCBwcm9wZXJ0eVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGZvcm1hdExvbmdgIHByb3BlcnR5XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy53ZWVrU3RhcnRzT25gIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYHl5eXlgIGluc3RlYWQgb2YgYFlZWVlgIGZvciBmb3JtYXR0aW5nIHllYXJzIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0LmlvL2Z4Q3lyXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYHl5YCBpbnN0ZWFkIG9mIGBZWWAgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXQuaW8vZnhDeXJcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgZGAgaW5zdGVhZCBvZiBgRGAgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXQuaW8vZnhDeXJcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdC5pby9meEN5clxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gZm9ybWF0IHN0cmluZyBjb250YWlucyBhbiB1bmVzY2FwZWQgbGF0aW4gYWxwaGFiZXQgY2hhcmFjdGVyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlcHJlc2VudCAxMSBGZWJydWFyeSAyMDE0IGluIG1pZGRsZS1lbmRpYW4gZm9ybWF0OlxuICogdmFyIHJlc3VsdCA9IGZvcm1hdChuZXcgRGF0ZSgyMDE0LCAxLCAxMSksICdNTS9kZC95eXl5JylcbiAqIC8vPT4gJzAyLzExLzIwMTQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlcHJlc2VudCAyIEp1bHkgMjAxNCBpbiBFc3BlcmFudG86XG4gKiBpbXBvcnQgeyBlb0xvY2FsZSB9IGZyb20gJ2RhdGUtZm5zL2xvY2FsZS9lbydcbiAqIHZhciByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiksIFwiZG8gJ2RlJyBNTU1NIHl5eXlcIiwge1xuICogICBsb2NhbGU6IGVvTG9jYWxlXG4gKiB9KVxuICogLy89PiAnMi1hIGRlIGp1bGlvIDIwMTQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEVzY2FwZSBzdHJpbmcgYnkgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnM6XG4gKiB2YXIgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDYsIDIsIDE1KSwgXCJoICdvJydjbG9jaydcIilcbiAqIC8vPT4gXCIzIG8nY2xvY2tcIlxuICovXG5cbmZ1bmN0aW9uIGZvcm1hdChkaXJ0eURhdGUsIGRpcnR5Rm9ybWF0U3RyLCBkaXJ0eU9wdGlvbnMpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBmb3JtYXRTdHIgPSBTdHJpbmcoZGlydHlGb3JtYXRTdHIpO1xuICB2YXIgb3B0aW9ucyA9IGRpcnR5T3B0aW9ucyB8fCB7fTtcbiAgdmFyIGxvY2FsZSQxID0gb3B0aW9ucy5sb2NhbGUgfHwgbG9jYWxlO1xuICB2YXIgbG9jYWxlRmlyc3RXZWVrQ29udGFpbnNEYXRlID0gbG9jYWxlJDEub3B0aW9ucyAmJiBsb2NhbGUkMS5vcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZTtcbiAgdmFyIGRlZmF1bHRGaXJzdFdlZWtDb250YWluc0RhdGUgPSBsb2NhbGVGaXJzdFdlZWtDb250YWluc0RhdGUgPT0gbnVsbCA/IDEgOiB0b0ludGVnZXIobG9jYWxlRmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlID09IG51bGwgPyBkZWZhdWx0Rmlyc3RXZWVrQ29udGFpbnNEYXRlIDogdG9JbnRlZ2VyKG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKTsgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAxIGFuZCA3IF9hbmRfIGlzIG5vdCBOYU5cblxuICBpZiAoIShmaXJzdFdlZWtDb250YWluc0RhdGUgPj0gMSAmJiBmaXJzdFdlZWtDb250YWluc0RhdGUgPD0gNykpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZmlyc3RXZWVrQ29udGFpbnNEYXRlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3IGluY2x1c2l2ZWx5Jyk7XG4gIH1cblxuICB2YXIgbG9jYWxlV2Vla1N0YXJ0c09uID0gbG9jYWxlJDEub3B0aW9ucyAmJiBsb2NhbGUkMS5vcHRpb25zLndlZWtTdGFydHNPbjtcbiAgdmFyIGRlZmF1bHRXZWVrU3RhcnRzT24gPSBsb2NhbGVXZWVrU3RhcnRzT24gPT0gbnVsbCA/IDAgOiB0b0ludGVnZXIobG9jYWxlV2Vla1N0YXJ0c09uKTtcbiAgdmFyIHdlZWtTdGFydHNPbiA9IG9wdGlvbnMud2Vla1N0YXJ0c09uID09IG51bGwgPyBkZWZhdWx0V2Vla1N0YXJ0c09uIDogdG9JbnRlZ2VyKG9wdGlvbnMud2Vla1N0YXJ0c09uKTsgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAwIGFuZCA2IF9hbmRfIGlzIG5vdCBOYU5cblxuICBpZiAoISh3ZWVrU3RhcnRzT24gPj0gMCAmJiB3ZWVrU3RhcnRzT24gPD0gNikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignd2Vla1N0YXJ0c09uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2IGluY2x1c2l2ZWx5Jyk7XG4gIH1cblxuICBpZiAoIWxvY2FsZSQxLmxvY2FsaXplKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2xvY2FsZSBtdXN0IGNvbnRhaW4gbG9jYWxpemUgcHJvcGVydHknKTtcbiAgfVxuXG4gIGlmICghbG9jYWxlJDEuZm9ybWF0TG9uZykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdsb2NhbGUgbXVzdCBjb250YWluIGZvcm1hdExvbmcgcHJvcGVydHknKTtcbiAgfVxuXG4gIHZhciBvcmlnaW5hbERhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcblxuICBpZiAoIWlzVmFsaWQob3JpZ2luYWxEYXRlKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHRpbWUgdmFsdWUnKTtcbiAgfSAvLyBDb252ZXJ0IHRoZSBkYXRlIGluIHN5c3RlbSB0aW1lem9uZSB0byB0aGUgc2FtZSBkYXRlIGluIFVUQyswMDowMCB0aW1lem9uZS5cbiAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2hlbiBVVEMgZnVuY3Rpb25zIHdpbGwgYmUgaW1wbGVtZW50ZWQsIGxvY2FsZXMgd2lsbCBiZSBjb21wYXRpYmxlIHdpdGggdGhlbS5cbiAgLy8gU2VlIGFuIGlzc3VlIGFib3V0IFVUQyBmdW5jdGlvbnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9pc3N1ZXMvMzc2XG5cblxuICB2YXIgdGltZXpvbmVPZmZzZXQgPSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKG9yaWdpbmFsRGF0ZSk7XG4gIHZhciB1dGNEYXRlID0gc3ViTWlsbGlzZWNvbmRzKG9yaWdpbmFsRGF0ZSwgdGltZXpvbmVPZmZzZXQpO1xuICB2YXIgZm9ybWF0dGVyT3B0aW9ucyA9IHtcbiAgICBmaXJzdFdlZWtDb250YWluc0RhdGU6IGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSxcbiAgICB3ZWVrU3RhcnRzT246IHdlZWtTdGFydHNPbixcbiAgICBsb2NhbGU6IGxvY2FsZSQxLFxuICAgIF9vcmlnaW5hbERhdGU6IG9yaWdpbmFsRGF0ZVxuICB9O1xuICB2YXIgcmVzdWx0ID0gZm9ybWF0U3RyLm1hdGNoKGxvbmdGb3JtYXR0aW5nVG9rZW5zUmVnRXhwKS5tYXAoZnVuY3Rpb24gKHN1YnN0cmluZykge1xuICAgIHZhciBmaXJzdENoYXJhY3RlciA9IHN1YnN0cmluZ1swXTtcblxuICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gJ3AnIHx8IGZpcnN0Q2hhcmFjdGVyID09PSAnUCcpIHtcbiAgICAgIHZhciBsb25nRm9ybWF0dGVyID0gbG9uZ0Zvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdO1xuICAgICAgcmV0dXJuIGxvbmdGb3JtYXR0ZXIoc3Vic3RyaW5nLCBsb2NhbGUkMS5mb3JtYXRMb25nLCBmb3JtYXR0ZXJPcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3Vic3RyaW5nO1xuICB9KS5qb2luKCcnKS5tYXRjaChmb3JtYXR0aW5nVG9rZW5zUmVnRXhwKS5tYXAoZnVuY3Rpb24gKHN1YnN0cmluZykge1xuICAgIC8vIFJlcGxhY2UgdHdvIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzIHdpdGggb25lIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJcbiAgICBpZiAoc3Vic3RyaW5nID09PSBcIicnXCIpIHtcbiAgICAgIHJldHVybiBcIidcIjtcbiAgICB9XG5cbiAgICB2YXIgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07XG5cbiAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgPT09IFwiJ1wiKSB7XG4gICAgICByZXR1cm4gY2xlYW5Fc2NhcGVkU3RyaW5nKHN1YnN0cmluZyk7XG4gICAgfVxuXG4gICAgdmFyIGZvcm1hdHRlciA9IGZvcm1hdHRlcnMkMVtmaXJzdENoYXJhY3Rlcl07XG5cbiAgICBpZiAoZm9ybWF0dGVyKSB7XG4gICAgICBpZiAoIW9wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zICYmIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbihzdWJzdHJpbmcpKSB7XG4gICAgICAgIHRocm93UHJvdGVjdGVkRXJyb3Ioc3Vic3RyaW5nLCBkaXJ0eUZvcm1hdFN0ciwgZGlydHlEYXRlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFvcHRpb25zLnVzZUFkZGl0aW9uYWxEYXlPZlllYXJUb2tlbnMgJiYgaXNQcm90ZWN0ZWREYXlPZlllYXJUb2tlbihzdWJzdHJpbmcpKSB7XG4gICAgICAgIHRocm93UHJvdGVjdGVkRXJyb3Ioc3Vic3RyaW5nLCBkaXJ0eUZvcm1hdFN0ciwgZGlydHlEYXRlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZvcm1hdHRlcih1dGNEYXRlLCBzdWJzdHJpbmcsIGxvY2FsZSQxLmxvY2FsaXplLCBmb3JtYXR0ZXJPcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAoZmlyc3RDaGFyYWN0ZXIubWF0Y2godW5lc2NhcGVkTGF0aW5DaGFyYWN0ZXJSZWdFeHApKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRm9ybWF0IHN0cmluZyBjb250YWlucyBhbiB1bmVzY2FwZWQgbGF0aW4gYWxwaGFiZXQgY2hhcmFjdGVyIGAnICsgZmlyc3RDaGFyYWN0ZXIgKyAnYCcpO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJzdHJpbmc7XG4gIH0pLmpvaW4oJycpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBjbGVhbkVzY2FwZWRTdHJpbmcoaW5wdXQpIHtcbiAgcmV0dXJuIGlucHV0Lm1hdGNoKGVzY2FwZWRTdHJpbmdSZWdFeHApWzFdLnJlcGxhY2UoZG91YmxlUXVvdGVSZWdFeHAsIFwiJ1wiKTtcbn1cblxudmFyIE1JTExJU0VDT05EU19JTl9NSU5VVEUkMSA9IDYwMDAwO1xuLyoqXG4gKiBAbmFtZSBhZGRNaW51dGVzXG4gKiBAY2F0ZWdvcnkgTWludXRlIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaW51dGVzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbnV0ZXMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogIyMjIHYyLjAuMCBicmVha2luZyBjaGFuZ2VzOlxuICpcbiAqIC0gW0NoYW5nZXMgdGhhdCBhcmUgY29tbW9uIGZvciB0aGUgd2hvbGUgbGlicmFyeV0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdXBncmFkZUd1aWRlLm1kI0NvbW1vbi1DaGFuZ2VzKS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgbWludXRlcyB0byBiZSBhZGRlZC4gUG9zaXRpdmUgZGVjaW1hbHMgd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmZsb29yYCwgZGVjaW1hbHMgbGVzcyB0aGFuIHplcm8gd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmNlaWxgLlxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBtaW51dGVzIGFkZGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFkZCAzMCBtaW51dGVzIHRvIDEwIEp1bHkgMjAxNCAxMjowMDowMDpcbiAqIHZhciByZXN1bHQgPSBhZGRNaW51dGVzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxMiwgMCksIDMwKVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMTI6MzA6MDBcbiAqL1xuXG5mdW5jdGlvbiBhZGRNaW51dGVzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgYW1vdW50ICogTUlMTElTRUNPTkRTX0lOX01JTlVURSQxKTtcbn1cblxudmFyIE1JTExJU0VDT05EU19JTl9IT1VSID0gMzYwMDAwMDtcbi8qKlxuICogQG5hbWUgYWRkSG91cnNcbiAqIEBjYXRlZ29yeSBIb3VyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBob3VycyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBob3VycyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiAjIyMgdjIuMC4wIGJyZWFraW5nIGNoYW5nZXM6XG4gKlxuICogLSBbQ2hhbmdlcyB0aGF0IGFyZSBjb21tb24gZm9yIHRoZSB3aG9sZSBsaWJyYXJ5XShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlR3VpZGUubWQjQ29tbW9uLUNoYW5nZXMpLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBob3VycyB0byBiZSBhZGRlZC4gUG9zaXRpdmUgZGVjaW1hbHMgd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmZsb29yYCwgZGVjaW1hbHMgbGVzcyB0aGFuIHplcm8gd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmNlaWxgLlxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBob3VycyBhZGRlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBZGQgMiBob3VycyB0byAxMCBKdWx5IDIwMTQgMjM6MDA6MDA6XG4gKiB2YXIgcmVzdWx0ID0gYWRkSG91cnMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDIzLCAwKSwgMilcbiAqIC8vPT4gRnJpIEp1bCAxMSAyMDE0IDAxOjAwOjAwXG4gKi9cblxuZnVuY3Rpb24gYWRkSG91cnMoZGlydHlEYXRlLCBkaXJ0eUFtb3VudCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGFtb3VudCA9IHRvSW50ZWdlcihkaXJ0eUFtb3VudCk7XG4gIHJldHVybiBhZGRNaWxsaXNlY29uZHMoZGlydHlEYXRlLCBhbW91bnQgKiBNSUxMSVNFQ09ORFNfSU5fSE9VUik7XG59XG5cbi8qKlxuICogQG5hbWUgYWRkRGF5c1xuICogQGNhdGVnb3J5IERheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgZGF5cyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBkYXlzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqICMjIyB2Mi4wLjAgYnJlYWtpbmcgY2hhbmdlczpcbiAqXG4gKiAtIFtDaGFuZ2VzIHRoYXQgYXJlIGNvbW1vbiBmb3IgdGhlIHdob2xlIGxpYnJhcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNDb21tb24tQ2hhbmdlcykuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBhbW91bnQgLSB0aGUgYW1vdW50IG9mIGRheXMgdG8gYmUgYWRkZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgZGF5cyBhZGRlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBZGQgMTAgZGF5cyB0byAxIFNlcHRlbWJlciAyMDE0OlxuICogdmFyIHJlc3VsdCA9IGFkZERheXMobmV3IERhdGUoMjAxNCwgOCwgMSksIDEwKVxuICogLy89PiBUaHUgU2VwIDExIDIwMTQgMDA6MDA6MDBcbiAqL1xuXG5mdW5jdGlvbiBhZGREYXlzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuXG4gIGlmIChpc05hTihhbW91bnQpKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gIH1cblxuICBpZiAoIWFtb3VudCkge1xuICAgIC8vIElmIDAgZGF5cywgbm8tb3AgdG8gYXZvaWQgY2hhbmdpbmcgdGltZXMgaW4gdGhlIGhvdXIgYmVmb3JlIGVuZCBvZiBEU1RcbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuXG4gIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIGFtb3VudCk7XG4gIHJldHVybiBkYXRlO1xufVxuXG4vKipcbiAqIEBuYW1lIGFkZFdlZWtzXG4gKiBAY2F0ZWdvcnkgV2VlayBIZWxwZXJzXG4gKiBAc3VtbWFyeSBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2Ygd2Vla3MgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2Ygd2VlayB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiAjIyMgdjIuMC4wIGJyZWFraW5nIGNoYW5nZXM6XG4gKlxuICogLSBbQ2hhbmdlcyB0aGF0IGFyZSBjb21tb24gZm9yIHRoZSB3aG9sZSBsaWJyYXJ5XShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlR3VpZGUubWQjQ29tbW9uLUNoYW5nZXMpLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiB3ZWVrcyB0byBiZSBhZGRlZC4gUG9zaXRpdmUgZGVjaW1hbHMgd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmZsb29yYCwgZGVjaW1hbHMgbGVzcyB0aGFuIHplcm8gd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmNlaWxgLlxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSB3ZWVrcyBhZGRlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBZGQgNCB3ZWVrcyB0byAxIFNlcHRlbWJlciAyMDE0OlxuICogdmFyIHJlc3VsdCA9IGFkZFdlZWtzKG5ldyBEYXRlKDIwMTQsIDgsIDEpLCA0KVxuICogLy89PiBNb24gU2VwIDI5IDIwMTQgMDA6MDA6MDBcbiAqL1xuXG5mdW5jdGlvbiBhZGRXZWVrcyhkaXJ0eURhdGUsIGRpcnR5QW1vdW50KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgYW1vdW50ID0gdG9JbnRlZ2VyKGRpcnR5QW1vdW50KTtcbiAgdmFyIGRheXMgPSBhbW91bnQgKiA3O1xuICByZXR1cm4gYWRkRGF5cyhkaXJ0eURhdGUsIGRheXMpO1xufVxuXG4vKipcbiAqIEBuYW1lIGFkZE1vbnRoc1xuICogQGNhdGVnb3J5IE1vbnRoIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtb250aHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbW9udGhzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqICMjIyB2Mi4wLjAgYnJlYWtpbmcgY2hhbmdlczpcbiAqXG4gKiAtIFtDaGFuZ2VzIHRoYXQgYXJlIGNvbW1vbiBmb3IgdGhlIHdob2xlIGxpYnJhcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNDb21tb24tQ2hhbmdlcykuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBhbW91bnQgLSB0aGUgYW1vdW50IG9mIG1vbnRocyB0byBiZSBhZGRlZC4gUG9zaXRpdmUgZGVjaW1hbHMgd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmZsb29yYCwgZGVjaW1hbHMgbGVzcyB0aGFuIHplcm8gd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmNlaWxgLlxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBtb250aHMgYWRkZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQWRkIDUgbW9udGhzIHRvIDEgU2VwdGVtYmVyIDIwMTQ6XG4gKiB2YXIgcmVzdWx0ID0gYWRkTW9udGhzKG5ldyBEYXRlKDIwMTQsIDgsIDEpLCA1KVxuICogLy89PiBTdW4gRmViIDAxIDIwMTUgMDA6MDA6MDBcbiAqL1xuXG5mdW5jdGlvbiBhZGRNb250aHMoZGlydHlEYXRlLCBkaXJ0eUFtb3VudCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGFtb3VudCA9IHRvSW50ZWdlcihkaXJ0eUFtb3VudCk7XG5cbiAgaWYgKGlzTmFOKGFtb3VudCkpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgfVxuXG4gIGlmICghYW1vdW50KSB7XG4gICAgLy8gSWYgMCBtb250aHMsIG5vLW9wIHRvIGF2b2lkIGNoYW5naW5nIHRpbWVzIGluIHRoZSBob3VyIGJlZm9yZSBlbmQgb2YgRFNUXG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cblxuICB2YXIgZGF5T2ZNb250aCA9IGRhdGUuZ2V0RGF0ZSgpOyAvLyBUaGUgSlMgRGF0ZSBvYmplY3Qgc3VwcG9ydHMgZGF0ZSBtYXRoIGJ5IGFjY2VwdGluZyBvdXQtb2YtYm91bmRzIHZhbHVlcyBmb3JcbiAgLy8gbW9udGgsIGRheSwgZXRjLiBGb3IgZXhhbXBsZSwgbmV3IERhdGUoMjAyMCwgMSwgMCkgcmV0dXJucyAzMSBEZWMgMjAxOSBhbmRcbiAgLy8gbmV3IERhdGUoMjAyMCwgMTMsIDEpIHJldHVybnMgMSBGZWIgMjAyMS4gIFRoaXMgaXMgKmFsbW9zdCogdGhlIGJlaGF2aW9yIHdlXG4gIC8vIHdhbnQgZXhjZXB0IHRoYXQgZGF0ZXMgd2lsbCB3cmFwIGFyb3VuZCB0aGUgZW5kIG9mIGEgbW9udGgsIG1lYW5pbmcgdGhhdFxuICAvLyBuZXcgRGF0ZSgyMDIwLCAxMywgMzEpIHdpbGwgcmV0dXJuIDMgTWFyIDIwMjEgbm90IDI4IEZlYiAyMDIxIGFzIGRlc2lyZWQuIFNvXG4gIC8vIHdlJ2xsIGRlZmF1bHQgdG8gdGhlIGVuZCBvZiB0aGUgZGVzaXJlZCBtb250aCBieSBhZGRpbmcgMSB0byB0aGUgZGVzaXJlZFxuICAvLyBtb250aCBhbmQgdXNpbmcgYSBkYXRlIG9mIDAgdG8gYmFjayB1cCBvbmUgZGF5IHRvIHRoZSBlbmQgb2YgdGhlIGRlc2lyZWRcbiAgLy8gbW9udGguXG5cbiAgdmFyIGVuZE9mRGVzaXJlZE1vbnRoID0gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkpO1xuICBlbmRPZkRlc2lyZWRNb250aC5zZXRNb250aChkYXRlLmdldE1vbnRoKCkgKyBhbW91bnQgKyAxLCAwKTtcbiAgdmFyIGRheXNJbk1vbnRoID0gZW5kT2ZEZXNpcmVkTW9udGguZ2V0RGF0ZSgpO1xuXG4gIGlmIChkYXlPZk1vbnRoID49IGRheXNJbk1vbnRoKSB7XG4gICAgLy8gSWYgd2UncmUgYWxyZWFkeSBhdCB0aGUgZW5kIG9mIHRoZSBtb250aCwgdGhlbiB0aGlzIGlzIHRoZSBjb3JyZWN0IGRhdGVcbiAgICAvLyBhbmQgd2UncmUgZG9uZS5cbiAgICByZXR1cm4gZW5kT2ZEZXNpcmVkTW9udGg7XG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlLCB3ZSBub3cga25vdyB0aGF0IHNldHRpbmcgdGhlIG9yaWdpbmFsIGRheS1vZi1tb250aCB2YWx1ZSB3b24ndFxuICAgIC8vIGNhdXNlIGFuIG92ZXJmbG93LCBzbyBzZXQgdGhlIGRlc2lyZWQgZGF5LW9mLW1vbnRoLiBOb3RlIHRoYXQgd2UgY2FuJ3RcbiAgICAvLyBqdXN0IHNldCB0aGUgZGF0ZSBvZiBgZW5kT2ZEZXNpcmVkTW9udGhgIGJlY2F1c2UgdGhhdCBvYmplY3QgbWF5IGhhdmUgaGFkXG4gICAgLy8gaXRzIHRpbWUgY2hhbmdlZCBpbiB0aGUgdW51c3VhbCBjYXNlIHdoZXJlIHdoZXJlIGEgRFNUIHRyYW5zaXRpb24gd2FzIG9uXG4gICAgLy8gdGhlIGxhc3QgZGF5IG9mIHRoZSBtb250aCBhbmQgaXRzIGxvY2FsIHRpbWUgd2FzIGluIHRoZSBob3VyIHNraXBwZWQgb3JcbiAgICAvLyByZXBlYXRlZCBuZXh0IHRvIGEgRFNUIHRyYW5zaXRpb24uICBTbyB3ZSB1c2UgYGRhdGVgIGluc3RlYWQgd2hpY2ggaXNcbiAgICAvLyBndWFyYW50ZWVkIHRvIHN0aWxsIGhhdmUgdGhlIG9yaWdpbmFsIHRpbWUuXG4gICAgZGF0ZS5zZXRGdWxsWWVhcihlbmRPZkRlc2lyZWRNb250aC5nZXRGdWxsWWVhcigpLCBlbmRPZkRlc2lyZWRNb250aC5nZXRNb250aCgpLCBkYXlPZk1vbnRoKTtcbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxufVxuXG4vKipcbiAqIEBuYW1lIGFkZFllYXJzXG4gKiBAY2F0ZWdvcnkgWWVhciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgeWVhcnMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgeWVhcnMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogIyMjIHYyLjAuMCBicmVha2luZyBjaGFuZ2VzOlxuICpcbiAqIC0gW0NoYW5nZXMgdGhhdCBhcmUgY29tbW9uIGZvciB0aGUgd2hvbGUgbGlicmFyeV0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdXBncmFkZUd1aWRlLm1kI0NvbW1vbi1DaGFuZ2VzKS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgeWVhcnMgdG8gYmUgYWRkZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgeWVhcnMgYWRkZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQWRkIDUgeWVhcnMgdG8gMSBTZXB0ZW1iZXIgMjAxNDpcbiAqIHZhciByZXN1bHQgPSBhZGRZZWFycyhuZXcgRGF0ZSgyMDE0LCA4LCAxKSwgNSlcbiAqIC8vPT4gU3VuIFNlcCAwMSAyMDE5IDAwOjAwOjAwXG4gKi9cblxuZnVuY3Rpb24gYWRkWWVhcnMoZGlydHlEYXRlLCBkaXJ0eUFtb3VudCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGFtb3VudCA9IHRvSW50ZWdlcihkaXJ0eUFtb3VudCk7XG4gIHJldHVybiBhZGRNb250aHMoZGlydHlEYXRlLCBhbW91bnQgKiAxMik7XG59XG5cbi8qKlxuICogQG5hbWUgc3ViRGF5c1xuICogQGNhdGVnb3J5IERheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBkYXlzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBkYXlzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogIyMjIHYyLjAuMCBicmVha2luZyBjaGFuZ2VzOlxuICpcbiAqIC0gW0NoYW5nZXMgdGhhdCBhcmUgY29tbW9uIGZvciB0aGUgd2hvbGUgbGlicmFyeV0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdXBncmFkZUd1aWRlLm1kI0NvbW1vbi1DaGFuZ2VzKS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgZGF5cyB0byBiZSBzdWJ0cmFjdGVkLiBQb3NpdGl2ZSBkZWNpbWFscyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguZmxvb3JgLCBkZWNpbWFscyBsZXNzIHRoYW4gemVybyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguY2VpbGAuXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIGRheXMgc3VidHJhY3RlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdWJ0cmFjdCAxMCBkYXlzIGZyb20gMSBTZXB0ZW1iZXIgMjAxNDpcbiAqIHZhciByZXN1bHQgPSBzdWJEYXlzKG5ldyBEYXRlKDIwMTQsIDgsIDEpLCAxMClcbiAqIC8vPT4gRnJpIEF1ZyAyMiAyMDE0IDAwOjAwOjAwXG4gKi9cblxuZnVuY3Rpb24gc3ViRGF5cyhkaXJ0eURhdGUsIGRpcnR5QW1vdW50KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgYW1vdW50ID0gdG9JbnRlZ2VyKGRpcnR5QW1vdW50KTtcbiAgcmV0dXJuIGFkZERheXMoZGlydHlEYXRlLCAtYW1vdW50KTtcbn1cblxuLyoqXG4gKiBAbmFtZSBzdWJXZWVrc1xuICogQGNhdGVnb3J5IFdlZWsgSGVscGVyc1xuICogQHN1bW1hcnkgU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2Ygd2Vla3MgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHdlZWtzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogIyMjIHYyLjAuMCBicmVha2luZyBjaGFuZ2VzOlxuICpcbiAqIC0gW0NoYW5nZXMgdGhhdCBhcmUgY29tbW9uIGZvciB0aGUgd2hvbGUgbGlicmFyeV0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdXBncmFkZUd1aWRlLm1kI0NvbW1vbi1DaGFuZ2VzKS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2Ygd2Vla3MgdG8gYmUgc3VidHJhY3RlZC4gUG9zaXRpdmUgZGVjaW1hbHMgd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmZsb29yYCwgZGVjaW1hbHMgbGVzcyB0aGFuIHplcm8gd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmNlaWxgLlxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSB3ZWVrcyBzdWJ0cmFjdGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN1YnRyYWN0IDQgd2Vla3MgZnJvbSAxIFNlcHRlbWJlciAyMDE0OlxuICogdmFyIHJlc3VsdCA9IHN1YldlZWtzKG5ldyBEYXRlKDIwMTQsIDgsIDEpLCA0KVxuICogLy89PiBNb24gQXVnIDA0IDIwMTQgMDA6MDA6MDBcbiAqL1xuXG5mdW5jdGlvbiBzdWJXZWVrcyhkaXJ0eURhdGUsIGRpcnR5QW1vdW50KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgYW1vdW50ID0gdG9JbnRlZ2VyKGRpcnR5QW1vdW50KTtcbiAgcmV0dXJuIGFkZFdlZWtzKGRpcnR5RGF0ZSwgLWFtb3VudCk7XG59XG5cbi8qKlxuICogQG5hbWUgc3ViTW9udGhzXG4gKiBAY2F0ZWdvcnkgTW9udGggSGVscGVyc1xuICogQHN1bW1hcnkgU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbW9udGhzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtb250aHMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiAjIyMgdjIuMC4wIGJyZWFraW5nIGNoYW5nZXM6XG4gKlxuICogLSBbQ2hhbmdlcyB0aGF0IGFyZSBjb21tb24gZm9yIHRoZSB3aG9sZSBsaWJyYXJ5XShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlR3VpZGUubWQjQ29tbW9uLUNoYW5nZXMpLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtb250aHMgdG8gYmUgc3VidHJhY3RlZC4gUG9zaXRpdmUgZGVjaW1hbHMgd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmZsb29yYCwgZGVjaW1hbHMgbGVzcyB0aGFuIHplcm8gd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmNlaWxgLlxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBtb250aHMgc3VidHJhY3RlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdWJ0cmFjdCA1IG1vbnRocyBmcm9tIDEgRmVicnVhcnkgMjAxNTpcbiAqIHZhciByZXN1bHQgPSBzdWJNb250aHMobmV3IERhdGUoMjAxNSwgMSwgMSksIDUpXG4gKiAvLz0+IE1vbiBTZXAgMDEgMjAxNCAwMDowMDowMFxuICovXG5cbmZ1bmN0aW9uIHN1Yk1vbnRocyhkaXJ0eURhdGUsIGRpcnR5QW1vdW50KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgYW1vdW50ID0gdG9JbnRlZ2VyKGRpcnR5QW1vdW50KTtcbiAgcmV0dXJuIGFkZE1vbnRocyhkaXJ0eURhdGUsIC1hbW91bnQpO1xufVxuXG4vKipcbiAqIEBuYW1lIHN1YlllYXJzXG4gKiBAY2F0ZWdvcnkgWWVhciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiB5ZWFycyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgeWVhcnMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiAjIyMgdjIuMC4wIGJyZWFraW5nIGNoYW5nZXM6XG4gKlxuICogLSBbQ2hhbmdlcyB0aGF0IGFyZSBjb21tb24gZm9yIHRoZSB3aG9sZSBsaWJyYXJ5XShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlR3VpZGUubWQjQ29tbW9uLUNoYW5nZXMpLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiB5ZWFycyB0byBiZSBzdWJ0cmFjdGVkLiBQb3NpdGl2ZSBkZWNpbWFscyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguZmxvb3JgLCBkZWNpbWFscyBsZXNzIHRoYW4gemVybyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguY2VpbGAuXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIHllYXJzIHN1YnRyYWN0ZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgNSB5ZWFycyBmcm9tIDEgU2VwdGVtYmVyIDIwMTQ6XG4gKiB2YXIgcmVzdWx0ID0gc3ViWWVhcnMobmV3IERhdGUoMjAxNCwgOCwgMSksIDUpXG4gKiAvLz0+IFR1ZSBTZXAgMDEgMjAwOSAwMDowMDowMFxuICovXG5cbmZ1bmN0aW9uIHN1YlllYXJzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gYWRkWWVhcnMoZGlydHlEYXRlLCAtYW1vdW50KTtcbn1cblxuLyoqXG4gKiBAbmFtZSBnZXRTZWNvbmRzXG4gKiBAY2F0ZWdvcnkgU2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgc2Vjb25kcyBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgc2Vjb25kcyBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiAjIyMgdjIuMC4wIGJyZWFraW5nIGNoYW5nZXM6XG4gKlxuICogLSBbQ2hhbmdlcyB0aGF0IGFyZSBjb21tb24gZm9yIHRoZSB3aG9sZSBsaWJyYXJ5XShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlR3VpZGUubWQjQ29tbW9uLUNoYW5nZXMpLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZ2l2ZW4gZGF0ZVxuICogQHJldHVybnMge051bWJlcn0gdGhlIHNlY29uZHNcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBHZXQgdGhlIHNlY29uZHMgb2YgMjkgRmVicnVhcnkgMjAxMiAxMTo0NTowNS4xMjM6XG4gKiB2YXIgcmVzdWx0ID0gZ2V0U2Vjb25kcyhuZXcgRGF0ZSgyMDEyLCAxLCAyOSwgMTEsIDQ1LCA1LCAxMjMpKVxuICogLy89PiA1XG4gKi9cblxuZnVuY3Rpb24gZ2V0U2Vjb25kcyhkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBzZWNvbmRzID0gZGF0ZS5nZXRTZWNvbmRzKCk7XG4gIHJldHVybiBzZWNvbmRzO1xufVxuXG4vKipcbiAqIEBuYW1lIGdldE1pbnV0ZXNcbiAqIEBjYXRlZ29yeSBNaW51dGUgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSBtaW51dGVzIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBtaW51dGVzIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqICMjIyB2Mi4wLjAgYnJlYWtpbmcgY2hhbmdlczpcbiAqXG4gKiAtIFtDaGFuZ2VzIHRoYXQgYXJlIGNvbW1vbiBmb3IgdGhlIHdob2xlIGxpYnJhcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNDb21tb24tQ2hhbmdlcykuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBnaXZlbiBkYXRlXG4gKiBAcmV0dXJucyB7TnVtYmVyfSB0aGUgbWludXRlc1xuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEdldCB0aGUgbWludXRlcyBvZiAyOSBGZWJydWFyeSAyMDEyIDExOjQ1OjA1OlxuICogdmFyIHJlc3VsdCA9IGdldE1pbnV0ZXMobmV3IERhdGUoMjAxMiwgMSwgMjksIDExLCA0NSwgNSkpXG4gKiAvLz0+IDQ1XG4gKi9cblxuZnVuY3Rpb24gZ2V0TWludXRlcyhkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBtaW51dGVzID0gZGF0ZS5nZXRNaW51dGVzKCk7XG4gIHJldHVybiBtaW51dGVzO1xufVxuXG4vKipcbiAqIEBuYW1lIGdldEhvdXJzXG4gKiBAY2F0ZWdvcnkgSG91ciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIGhvdXJzIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBob3VycyBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiAjIyMgdjIuMC4wIGJyZWFraW5nIGNoYW5nZXM6XG4gKlxuICogLSBbQ2hhbmdlcyB0aGF0IGFyZSBjb21tb24gZm9yIHRoZSB3aG9sZSBsaWJyYXJ5XShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlR3VpZGUubWQjQ29tbW9uLUNoYW5nZXMpLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZ2l2ZW4gZGF0ZVxuICogQHJldHVybnMge051bWJlcn0gdGhlIGhvdXJzXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gR2V0IHRoZSBob3VycyBvZiAyOSBGZWJydWFyeSAyMDEyIDExOjQ1OjAwOlxuICogdmFyIHJlc3VsdCA9IGdldEhvdXJzKG5ldyBEYXRlKDIwMTIsIDEsIDI5LCAxMSwgNDUpKVxuICogLy89PiAxMVxuICovXG5cbmZ1bmN0aW9uIGdldEhvdXJzKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGhvdXJzID0gZGF0ZS5nZXRIb3VycygpO1xuICByZXR1cm4gaG91cnM7XG59XG5cbi8qKlxuICogQG5hbWUgZ2V0RGF5XG4gKiBAY2F0ZWdvcnkgV2Vla2RheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIGRheSBvZiB0aGUgd2VlayBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgZGF5IG9mIHRoZSB3ZWVrIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqICMjIyB2Mi4wLjAgYnJlYWtpbmcgY2hhbmdlczpcbiAqXG4gKiAtIFtDaGFuZ2VzIHRoYXQgYXJlIGNvbW1vbiBmb3IgdGhlIHdob2xlIGxpYnJhcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNDb21tb24tQ2hhbmdlcykuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBnaXZlbiBkYXRlXG4gKiBAcmV0dXJucyB7MHwxfDJ8M3w0fDV8Nn0gdGhlIGRheSBvZiB3ZWVrLCAwIHJlcHJlc2VudHMgU3VuZGF5XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hpY2ggZGF5IG9mIHRoZSB3ZWVrIGlzIDI5IEZlYnJ1YXJ5IDIwMTI/XG4gKiB2YXIgcmVzdWx0ID0gZ2V0RGF5KG5ldyBEYXRlKDIwMTIsIDEsIDI5KSlcbiAqIC8vPT4gM1xuICovXG5cbmZ1bmN0aW9uIGdldERheShkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkYXkgPSBkYXRlLmdldERheSgpO1xuICByZXR1cm4gZGF5O1xufVxuXG4vKipcbiAqIEBuYW1lIGdldERhdGVcbiAqIEBjYXRlZ29yeSBEYXkgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSBkYXkgb2YgdGhlIG1vbnRoIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBkYXkgb2YgdGhlIG1vbnRoIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqICMjIyB2Mi4wLjAgYnJlYWtpbmcgY2hhbmdlczpcbiAqXG4gKiAtIFtDaGFuZ2VzIHRoYXQgYXJlIGNvbW1vbiBmb3IgdGhlIHdob2xlIGxpYnJhcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNDb21tb24tQ2hhbmdlcykuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBnaXZlbiBkYXRlXG4gKiBAcmV0dXJucyB7TnVtYmVyfSB0aGUgZGF5IG9mIG1vbnRoXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hpY2ggZGF5IG9mIHRoZSBtb250aCBpcyAyOSBGZWJydWFyeSAyMDEyP1xuICogdmFyIHJlc3VsdCA9IGdldERhdGUobmV3IERhdGUoMjAxMiwgMSwgMjkpKVxuICogLy89PiAyOVxuICovXG5cbmZ1bmN0aW9uIGdldERhdGUoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGF5T2ZNb250aCA9IGRhdGUuZ2V0RGF0ZSgpO1xuICByZXR1cm4gZGF5T2ZNb250aDtcbn1cblxuLyoqXG4gKiBAbmFtZSBzdGFydE9mV2Vla1xuICogQGNhdGVnb3J5IFdlZWsgSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBzdGFydCBvZiBhIHdlZWsgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBzdGFydCBvZiBhIHdlZWsgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICogVGhlIHJlc3VsdCB3aWxsIGJlIGluIHRoZSBsb2NhbCB0aW1lem9uZS5cbiAqXG4gKiAjIyMgdjIuMC4wIGJyZWFraW5nIGNoYW5nZXM6XG4gKlxuICogLSBbQ2hhbmdlcyB0aGF0IGFyZSBjb21tb24gZm9yIHRoZSB3aG9sZSBsaWJyYXJ5XShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlR3VpZGUubWQjQ29tbW9uLUNoYW5nZXMpLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAtIGFuIG9iamVjdCB3aXRoIG9wdGlvbnMuXG4gKiBAcGFyYW0ge0xvY2FsZX0gW29wdGlvbnMubG9jYWxlPWRlZmF1bHRMb2NhbGVdIC0gdGhlIGxvY2FsZSBvYmplY3QuIFNlZSBbTG9jYWxlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL0xvY2FsZX1cbiAqIEBwYXJhbSB7MHwxfDJ8M3w0fDV8Nn0gW29wdGlvbnMud2Vla1N0YXJ0c09uPTBdIC0gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsgKDAgLSBTdW5kYXkpXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIHN0YXJ0IG9mIGEgd2Vla1xuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy53ZWVrU3RhcnRzT25gIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBzdGFydCBvZiBhIHdlZWsgZm9yIDIgU2VwdGVtYmVyIDIwMTQgMTE6NTU6MDA6XG4gKiB2YXIgcmVzdWx0ID0gc3RhcnRPZldlZWsobmV3IERhdGUoMjAxNCwgOCwgMiwgMTEsIDU1LCAwKSlcbiAqIC8vPT4gU3VuIEF1ZyAzMSAyMDE0IDAwOjAwOjAwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIElmIHRoZSB3ZWVrIHN0YXJ0cyBvbiBNb25kYXksIHRoZSBzdGFydCBvZiB0aGUgd2VlayBmb3IgMiBTZXB0ZW1iZXIgMjAxNCAxMTo1NTowMDpcbiAqIHZhciByZXN1bHQgPSBzdGFydE9mV2VlayhuZXcgRGF0ZSgyMDE0LCA4LCAyLCAxMSwgNTUsIDApLCB7IHdlZWtTdGFydHNPbjogMSB9KVxuICogLy89PiBNb24gU2VwIDAxIDIwMTQgMDA6MDA6MDBcbiAqL1xuXG5mdW5jdGlvbiBzdGFydE9mV2VlayhkaXJ0eURhdGUsIGRpcnR5T3B0aW9ucykge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIG9wdGlvbnMgPSBkaXJ0eU9wdGlvbnMgfHwge307XG4gIHZhciBsb2NhbGUgPSBvcHRpb25zLmxvY2FsZTtcbiAgdmFyIGxvY2FsZVdlZWtTdGFydHNPbiA9IGxvY2FsZSAmJiBsb2NhbGUub3B0aW9ucyAmJiBsb2NhbGUub3B0aW9ucy53ZWVrU3RhcnRzT247XG4gIHZhciBkZWZhdWx0V2Vla1N0YXJ0c09uID0gbG9jYWxlV2Vla1N0YXJ0c09uID09IG51bGwgPyAwIDogdG9JbnRlZ2VyKGxvY2FsZVdlZWtTdGFydHNPbik7XG4gIHZhciB3ZWVrU3RhcnRzT24gPSBvcHRpb25zLndlZWtTdGFydHNPbiA9PSBudWxsID8gZGVmYXVsdFdlZWtTdGFydHNPbiA6IHRvSW50ZWdlcihvcHRpb25zLndlZWtTdGFydHNPbik7IC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMCBhbmQgNiBfYW5kXyBpcyBub3QgTmFOXG5cbiAgaWYgKCEod2Vla1N0YXJ0c09uID49IDAgJiYgd2Vla1N0YXJ0c09uIDw9IDYpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3dlZWtTdGFydHNPbiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNiBpbmNsdXNpdmVseScpO1xuICB9XG5cbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRheSA9IGRhdGUuZ2V0RGF5KCk7XG4gIHZhciBkaWZmID0gKGRheSA8IHdlZWtTdGFydHNPbiA/IDcgOiAwKSArIGRheSAtIHdlZWtTdGFydHNPbjtcbiAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gZGlmZik7XG4gIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIHJldHVybiBkYXRlO1xufVxuXG4vKipcbiAqIEBuYW1lIGdldFdlZWtZZWFyXG4gKiBAY2F0ZWdvcnkgV2Vlay1OdW1iZXJpbmcgWWVhciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgb2YgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgb2YgdGhlIGdpdmVuIGRhdGUuXG4gKiBUaGUgZXhhY3QgY2FsY3VsYXRpb24gZGVwZW5kcyBvbiB0aGUgdmFsdWVzIG9mXG4gKiBgb3B0aW9ucy53ZWVrU3RhcnRzT25gICh3aGljaCBpcyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlaylcbiAqIGFuZCBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgICh3aGljaCBpcyB0aGUgZGF5IG9mIEphbnVhcnksIHdoaWNoIGlzIGFsd2F5cyBpblxuICogdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHdlZWstbnVtYmVyaW5nIHllYXIpXG4gKlxuICogV2VlayBudW1iZXJpbmc6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1dlZWsjV2Vla19udW1iZXJpbmdcbiAqXG4gKiAjIyMgdjIuMC4wIGJyZWFraW5nIGNoYW5nZXM6XG4gKlxuICogLSBbQ2hhbmdlcyB0aGF0IGFyZSBjb21tb24gZm9yIHRoZSB3aG9sZSBsaWJyYXJ5XShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlR3VpZGUubWQjQ29tbW9uLUNoYW5nZXMpLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZ2l2ZW4gZGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAtIGFuIG9iamVjdCB3aXRoIG9wdGlvbnMuXG4gKiBAcGFyYW0ge0xvY2FsZX0gW29wdGlvbnMubG9jYWxlPWRlZmF1bHRMb2NhbGVdIC0gdGhlIGxvY2FsZSBvYmplY3QuIFNlZSBbTG9jYWxlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL0xvY2FsZX1cbiAqIEBwYXJhbSB7MHwxfDJ8M3w0fDV8Nn0gW29wdGlvbnMud2Vla1N0YXJ0c09uPTBdIC0gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsgKDAgLSBTdW5kYXkpXG4gKiBAcGFyYW0gezF8MnwzfDR8NXw2fDd9IFtvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT0xXSAtIHRoZSBkYXkgb2YgSmFudWFyeSwgd2hpY2ggaXMgYWx3YXlzIGluIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSB0aGUgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhclxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy53ZWVrU3RhcnRzT25gIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoaWNoIHdlZWsgbnVtYmVyaW5nIHllYXIgaXMgMjYgRGVjZW1iZXIgMjAwNCB3aXRoIHRoZSBkZWZhdWx0IHNldHRpbmdzP1xuICogdmFyIHJlc3VsdCA9IGdldFdlZWtZZWFyKG5ldyBEYXRlKDIwMDQsIDExLCAyNikpXG4gKiAvLz0+IDIwMDVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hpY2ggd2VlayBudW1iZXJpbmcgeWVhciBpcyAyNiBEZWNlbWJlciAyMDA0IGlmIHdlZWsgc3RhcnRzIG9uIFNhdHVyZGF5P1xuICogdmFyIHJlc3VsdCA9IGdldFdlZWtZZWFyKG5ldyBEYXRlKDIwMDQsIDExLCAyNiksIHsgd2Vla1N0YXJ0c09uOiA2IH0pXG4gKiAvLz0+IDIwMDRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hpY2ggd2VlayBudW1iZXJpbmcgeWVhciBpcyAyNiBEZWNlbWJlciAyMDA0IGlmIHRoZSBmaXJzdCB3ZWVrIGNvbnRhaW5zIDQgSmFudWFyeT9cbiAqIHZhciByZXN1bHQgPSBnZXRXZWVrWWVhcihuZXcgRGF0ZSgyMDA0LCAxMSwgMjYpLCB7IGZpcnN0V2Vla0NvbnRhaW5zRGF0ZTogNCB9KVxuICogLy89PiAyMDA0XG4gKi9cblxuZnVuY3Rpb24gZ2V0V2Vla1llYXIoZGlydHlEYXRlLCBkaXJ0eU9wdGlvbnMpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICB2YXIgb3B0aW9ucyA9IGRpcnR5T3B0aW9ucyB8fCB7fTtcbiAgdmFyIGxvY2FsZSA9IG9wdGlvbnMubG9jYWxlO1xuICB2YXIgbG9jYWxlRmlyc3RXZWVrQ29udGFpbnNEYXRlID0gbG9jYWxlICYmIGxvY2FsZS5vcHRpb25zICYmIGxvY2FsZS5vcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZTtcbiAgdmFyIGRlZmF1bHRGaXJzdFdlZWtDb250YWluc0RhdGUgPSBsb2NhbGVGaXJzdFdlZWtDb250YWluc0RhdGUgPT0gbnVsbCA/IDEgOiB0b0ludGVnZXIobG9jYWxlRmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlID09IG51bGwgPyBkZWZhdWx0Rmlyc3RXZWVrQ29udGFpbnNEYXRlIDogdG9JbnRlZ2VyKG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKTsgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAxIGFuZCA3IF9hbmRfIGlzIG5vdCBOYU5cblxuICBpZiAoIShmaXJzdFdlZWtDb250YWluc0RhdGUgPj0gMSAmJiBmaXJzdFdlZWtDb250YWluc0RhdGUgPD0gNykpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZmlyc3RXZWVrQ29udGFpbnNEYXRlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3IGluY2x1c2l2ZWx5Jyk7XG4gIH1cblxuICB2YXIgZmlyc3RXZWVrT2ZOZXh0WWVhciA9IG5ldyBEYXRlKDApO1xuICBmaXJzdFdlZWtPZk5leHRZZWFyLnNldEZ1bGxZZWFyKHllYXIgKyAxLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWtPZk5leHRZZWFyLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZldlZWsoZmlyc3RXZWVrT2ZOZXh0WWVhciwgZGlydHlPcHRpb25zKTtcbiAgdmFyIGZpcnN0V2Vla09mVGhpc1llYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWtPZlRoaXNZZWFyLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZldlZWsoZmlyc3RXZWVrT2ZUaGlzWWVhciwgZGlydHlPcHRpb25zKTtcblxuICBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZk5leHRZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyICsgMTtcbiAgfSBlbHNlIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mVGhpc1llYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHllYXIgLSAxO1xuICB9XG59XG5cbi8qKlxuICogQG5hbWUgc3RhcnRPZldlZWtZZWFyXG4gKiBAY2F0ZWdvcnkgV2Vlay1OdW1iZXJpbmcgWWVhciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIHN0YXJ0IG9mIGEgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhciBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIHN0YXJ0IG9mIGEgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhci5cbiAqIFRoZSBleGFjdCBjYWxjdWxhdGlvbiBkZXBlbmRzIG9uIHRoZSB2YWx1ZXMgb2ZcbiAqIGBvcHRpb25zLndlZWtTdGFydHNPbmAgKHdoaWNoIGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrKVxuICogYW5kIGBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZWAgKHdoaWNoIGlzIHRoZSBkYXkgb2YgSmFudWFyeSwgd2hpY2ggaXMgYWx3YXlzIGluXG4gKiB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgd2Vlay1udW1iZXJpbmcgeWVhcilcbiAqXG4gKiBXZWVrIG51bWJlcmluZzogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvV2VlayNXZWVrX251bWJlcmluZ1xuICpcbiAqICMjIyB2Mi4wLjAgYnJlYWtpbmcgY2hhbmdlczpcbiAqXG4gKiAtIFtDaGFuZ2VzIHRoYXQgYXJlIGNvbW1vbiBmb3IgdGhlIHdob2xlIGxpYnJhcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNDb21tb24tQ2hhbmdlcykuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gYW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cbiAqIEBwYXJhbSB7TG9jYWxlfSBbb3B0aW9ucy5sb2NhbGU9ZGVmYXVsdExvY2FsZV0gLSB0aGUgbG9jYWxlIG9iamVjdC4gU2VlIFtMb2NhbGVde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvTG9jYWxlfVxuICogQHBhcmFtIHswfDF8MnwzfDR8NXw2fSBbb3B0aW9ucy53ZWVrU3RhcnRzT249MF0gLSB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayAoMCAtIFN1bmRheSlcbiAqIEBwYXJhbSB7MXwyfDN8NHw1fDZ8N30gW29wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlPTFdIC0gdGhlIGRheSBvZiBKYW51YXJ5LCB3aGljaCBpcyBhbHdheXMgaW4gdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXJcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgc3RhcnQgb2YgYSB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLndlZWtTdGFydHNPbmAgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDZcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZWAgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDdcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVGhlIHN0YXJ0IG9mIGFuIGEgd2Vlay1udW1iZXJpbmcgeWVhciBmb3IgMiBKdWx5IDIwMDUgd2l0aCBkZWZhdWx0IHNldHRpbmdzOlxuICogdmFyIHJlc3VsdCA9IHN0YXJ0T2ZXZWVrWWVhcihuZXcgRGF0ZSgyMDA1LCA2LCAyKSlcbiAqIC8vPT4gU3VuIERlYyAyNiAyMDA0IDAwOjAwOjAwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBzdGFydCBvZiBhIHdlZWstbnVtYmVyaW5nIHllYXIgZm9yIDIgSnVseSAyMDA1XG4gKiAvLyBpZiBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB3ZWVrXG4gKiAvLyBhbmQgNCBKYW51YXJ5IGlzIGFsd2F5cyBpbiB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhcjpcbiAqIHZhciByZXN1bHQgPSBzdGFydE9mV2Vla1llYXIobmV3IERhdGUoMjAwNSwgNiwgMiksIHtcbiAqICAgd2Vla1N0YXJ0c09uOiAxLFxuICogICBmaXJzdFdlZWtDb250YWluc0RhdGU6IDRcbiAqIH0pXG4gKiAvLz0+IE1vbiBKYW4gMDMgMjAwNSAwMDowMDowMFxuICovXG5cbmZ1bmN0aW9uIHN0YXJ0T2ZXZWVrWWVhcihkaXJ0eURhdGUsIGRpcnR5T3B0aW9ucykge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIG9wdGlvbnMgPSBkaXJ0eU9wdGlvbnMgfHwge307XG4gIHZhciBsb2NhbGUgPSBvcHRpb25zLmxvY2FsZTtcbiAgdmFyIGxvY2FsZUZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IGxvY2FsZSAmJiBsb2NhbGUub3B0aW9ucyAmJiBsb2NhbGUub3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGU7XG4gIHZhciBkZWZhdWx0Rmlyc3RXZWVrQ29udGFpbnNEYXRlID0gbG9jYWxlRmlyc3RXZWVrQ29udGFpbnNEYXRlID09IG51bGwgPyAxIDogdG9JbnRlZ2VyKGxvY2FsZUZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9PSBudWxsID8gZGVmYXVsdEZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA6IHRvSW50ZWdlcihvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIHZhciB5ZWFyID0gZ2V0V2Vla1llYXIoZGlydHlEYXRlLCBkaXJ0eU9wdGlvbnMpO1xuICB2YXIgZmlyc3RXZWVrID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vlay5zZXRGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWsuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBkYXRlID0gc3RhcnRPZldlZWsoZmlyc3RXZWVrLCBkaXJ0eU9wdGlvbnMpO1xuICByZXR1cm4gZGF0ZTtcbn1cblxudmFyIE1JTExJU0VDT05EU19JTl9XRUVLJDIgPSA2MDQ4MDAwMDA7XG4vKipcbiAqIEBuYW1lIGdldFdlZWtcbiAqIEBjYXRlZ29yeSBXZWVrIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgbG9jYWwgd2VlayBpbmRleCBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbG9jYWwgd2VlayBpbmRleCBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqIFRoZSBleGFjdCBjYWxjdWxhdGlvbiBkZXBlbmRzIG9uIHRoZSB2YWx1ZXMgb2ZcbiAqIGBvcHRpb25zLndlZWtTdGFydHNPbmAgKHdoaWNoIGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrKVxuICogYW5kIGBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZWAgKHdoaWNoIGlzIHRoZSBkYXkgb2YgSmFudWFyeSwgd2hpY2ggaXMgYWx3YXlzIGluXG4gKiB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgd2Vlay1udW1iZXJpbmcgeWVhcilcbiAqXG4gKiBXZWVrIG51bWJlcmluZzogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvV2VlayNXZWVrX251bWJlcmluZ1xuICpcbiAqICMjIyB2Mi4wLjAgYnJlYWtpbmcgY2hhbmdlczpcbiAqXG4gKiAtIFtDaGFuZ2VzIHRoYXQgYXJlIGNvbW1vbiBmb3IgdGhlIHdob2xlIGxpYnJhcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNDb21tb24tQ2hhbmdlcykuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBnaXZlbiBkYXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gYW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cbiAqIEBwYXJhbSB7TG9jYWxlfSBbb3B0aW9ucy5sb2NhbGU9ZGVmYXVsdExvY2FsZV0gLSB0aGUgbG9jYWxlIG9iamVjdC4gU2VlIFtMb2NhbGVde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvTG9jYWxlfVxuICogQHBhcmFtIHswfDF8MnwzfDR8NXw2fSBbb3B0aW9ucy53ZWVrU3RhcnRzT249MF0gLSB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayAoMCAtIFN1bmRheSlcbiAqIEBwYXJhbSB7MXwyfDN8NHw1fDZ8N30gW29wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlPTFdIC0gdGhlIGRheSBvZiBKYW51YXJ5LCB3aGljaCBpcyBhbHdheXMgaW4gdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHRoZSB3ZWVrXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLndlZWtTdGFydHNPbmAgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDZcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZWAgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDdcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hpY2ggd2VlayBvZiB0aGUgbG9jYWwgd2VlayBudW1iZXJpbmcgeWVhciBpcyAyIEphbnVhcnkgMjAwNSB3aXRoIGRlZmF1bHQgb3B0aW9ucz9cbiAqIHZhciByZXN1bHQgPSBnZXRJU09XZWVrKG5ldyBEYXRlKDIwMDUsIDAsIDIpKVxuICogLy89PiAyXG4gKlxuICogLy8gV2hpY2ggd2VlayBvZiB0aGUgbG9jYWwgd2VlayBudW1iZXJpbmcgeWVhciBpcyAyIEphbnVhcnkgMjAwNSxcbiAqIC8vIGlmIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLFxuICogLy8gYW5kIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyIGFsd2F5cyBjb250YWlucyA0IEphbnVhcnk/XG4gKiB2YXIgcmVzdWx0ID0gZ2V0SVNPV2VlayhuZXcgRGF0ZSgyMDA1LCAwLCAyKSwge1xuICogICB3ZWVrU3RhcnRzT246IDEsXG4gKiAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZTogNFxuICogfSlcbiAqIC8vPT4gNTNcbiAqL1xuXG5mdW5jdGlvbiBnZXRXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRpZmYgPSBzdGFydE9mV2VlayhkYXRlLCBvcHRpb25zKS5nZXRUaW1lKCkgLSBzdGFydE9mV2Vla1llYXIoZGF0ZSwgb3B0aW9ucykuZ2V0VGltZSgpOyAvLyBSb3VuZCB0aGUgbnVtYmVyIG9mIGRheXMgdG8gdGhlIG5lYXJlc3QgaW50ZWdlclxuICAvLyBiZWNhdXNlIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIGEgd2VlayBpcyBub3QgY29uc3RhbnRcbiAgLy8gKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIHdlZWsgb2YgdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KVxuXG4gIHJldHVybiBNYXRoLnJvdW5kKGRpZmYgLyBNSUxMSVNFQ09ORFNfSU5fV0VFSyQyKSArIDE7XG59XG5cbi8qKlxuICogQG5hbWUgZ2V0TW9udGhcbiAqIEBjYXRlZ29yeSBNb250aCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG1vbnRoIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBtb250aCBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiAjIyMgdjIuMC4wIGJyZWFraW5nIGNoYW5nZXM6XG4gKlxuICogLSBbQ2hhbmdlcyB0aGF0IGFyZSBjb21tb24gZm9yIHRoZSB3aG9sZSBsaWJyYXJ5XShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlR3VpZGUubWQjQ29tbW9uLUNoYW5nZXMpLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZ2l2ZW4gZGF0ZVxuICogQHJldHVybnMge051bWJlcn0gdGhlIG1vbnRoXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hpY2ggbW9udGggaXMgMjkgRmVicnVhcnkgMjAxMj9cbiAqIHZhciByZXN1bHQgPSBnZXRNb250aChuZXcgRGF0ZSgyMDEyLCAxLCAyOSkpXG4gKiAvLz0+IDFcbiAqL1xuXG5mdW5jdGlvbiBnZXRNb250aChkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBtb250aCA9IGRhdGUuZ2V0TW9udGgoKTtcbiAgcmV0dXJuIG1vbnRoO1xufVxuXG4vKipcbiAqIEBuYW1lIGdldFF1YXJ0ZXJcbiAqIEBjYXRlZ29yeSBRdWFydGVyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgeWVhciBxdWFydGVyIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSB5ZWFyIHF1YXJ0ZXIgb2YgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogIyMjIHYyLjAuMCBicmVha2luZyBjaGFuZ2VzOlxuICpcbiAqIC0gW0NoYW5nZXMgdGhhdCBhcmUgY29tbW9uIGZvciB0aGUgd2hvbGUgbGlicmFyeV0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdXBncmFkZUd1aWRlLm1kI0NvbW1vbi1DaGFuZ2VzKS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGdpdmVuIGRhdGVcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHRoZSBxdWFydGVyXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hpY2ggcXVhcnRlciBpcyAyIEp1bHkgMjAxND9cbiAqIHZhciByZXN1bHQgPSBnZXRRdWFydGVyKG5ldyBEYXRlKDIwMTQsIDYsIDIpKVxuICogLy89PiAzXG4gKi9cblxuZnVuY3Rpb24gZ2V0UXVhcnRlcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBxdWFydGVyID0gTWF0aC5mbG9vcihkYXRlLmdldE1vbnRoKCkgLyAzKSArIDE7XG4gIHJldHVybiBxdWFydGVyO1xufVxuXG4vKipcbiAqIEBuYW1lIGdldFllYXJcbiAqIEBjYXRlZ29yeSBZZWFyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgeWVhciBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgeWVhciBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiAjIyMgdjIuMC4wIGJyZWFraW5nIGNoYW5nZXM6XG4gKlxuICogLSBbQ2hhbmdlcyB0aGF0IGFyZSBjb21tb24gZm9yIHRoZSB3aG9sZSBsaWJyYXJ5XShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlR3VpZGUubWQjQ29tbW9uLUNoYW5nZXMpLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZ2l2ZW4gZGF0ZVxuICogQHJldHVybnMge051bWJlcn0gdGhlIHllYXJcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGljaCB5ZWFyIGlzIDIgSnVseSAyMDE0P1xuICogdmFyIHJlc3VsdCA9IGdldFllYXIobmV3IERhdGUoMjAxNCwgNiwgMikpXG4gKiAvLz0+IDIwMTRcbiAqL1xuXG5mdW5jdGlvbiBnZXRZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gIHJldHVybiB5ZWFyO1xufVxuXG4vKipcbiAqIEBuYW1lIGdldFRpbWVcbiAqIEBjYXRlZ29yeSBUaW1lc3RhbXAgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSBtaWxsaXNlY29uZHMgdGltZXN0YW1wIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBtaWxsaXNlY29uZHMgdGltZXN0YW1wIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqICMjIyB2Mi4wLjAgYnJlYWtpbmcgY2hhbmdlczpcbiAqXG4gKiAtIFtDaGFuZ2VzIHRoYXQgYXJlIGNvbW1vbiBmb3IgdGhlIHdob2xlIGxpYnJhcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNDb21tb24tQ2hhbmdlcykuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBnaXZlbiBkYXRlXG4gKiBAcmV0dXJucyB7TnVtYmVyfSB0aGUgdGltZXN0YW1wXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gR2V0IHRoZSB0aW1lc3RhbXAgb2YgMjkgRmVicnVhcnkgMjAxMiAxMTo0NTowNS4xMjM6XG4gKiB2YXIgcmVzdWx0ID0gZ2V0VGltZShuZXcgRGF0ZSgyMDEyLCAxLCAyOSwgMTEsIDQ1LCA1LCAxMjMpKVxuICogLy89PiAxMzMwNTE1OTA1MTIzXG4gKi9cblxuZnVuY3Rpb24gZ2V0VGltZShkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciB0aW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcbiAgcmV0dXJuIHRpbWVzdGFtcDtcbn1cblxuLyoqXG4gKiBAbmFtZSBzZXRTZWNvbmRzXG4gKiBAY2F0ZWdvcnkgU2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFNldCB0aGUgc2Vjb25kcyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFNldCB0aGUgc2Vjb25kcyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiAjIyMgdjIuMC4wIGJyZWFraW5nIGNoYW5nZXM6XG4gKlxuICogLSBbQ2hhbmdlcyB0aGF0IGFyZSBjb21tb24gZm9yIHRoZSB3aG9sZSBsaWJyYXJ5XShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlR3VpZGUubWQjQ29tbW9uLUNoYW5nZXMpLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gc2Vjb25kcyAtIHRoZSBzZWNvbmRzIG9mIHRoZSBuZXcgZGF0ZVxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBzZWNvbmRzIHNldFxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTZXQgNDUgc2Vjb25kcyB0byAxIFNlcHRlbWJlciAyMDE0IDExOjMwOjQwOlxuICogdmFyIHJlc3VsdCA9IHNldFNlY29uZHMobmV3IERhdGUoMjAxNCwgOCwgMSwgMTEsIDMwLCA0MCksIDQ1KVxuICogLy89PiBNb24gU2VwIDAxIDIwMTQgMTE6MzA6NDVcbiAqL1xuXG5mdW5jdGlvbiBzZXRTZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlTZWNvbmRzKSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgc2Vjb25kcyA9IHRvSW50ZWdlcihkaXJ0eVNlY29uZHMpO1xuICBkYXRlLnNldFNlY29uZHMoc2Vjb25kcyk7XG4gIHJldHVybiBkYXRlO1xufVxuXG4vKipcbiAqIEBuYW1lIHNldE1pbnV0ZXNcbiAqIEBjYXRlZ29yeSBNaW51dGUgSGVscGVyc1xuICogQHN1bW1hcnkgU2V0IHRoZSBtaW51dGVzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogU2V0IHRoZSBtaW51dGVzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqICMjIyB2Mi4wLjAgYnJlYWtpbmcgY2hhbmdlczpcbiAqXG4gKiAtIFtDaGFuZ2VzIHRoYXQgYXJlIGNvbW1vbiBmb3IgdGhlIHdob2xlIGxpYnJhcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNDb21tb24tQ2hhbmdlcykuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBtaW51dGVzIC0gdGhlIG1pbnV0ZXMgb2YgdGhlIG5ldyBkYXRlXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIG1pbnV0ZXMgc2V0XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFNldCA0NSBtaW51dGVzIHRvIDEgU2VwdGVtYmVyIDIwMTQgMTE6MzA6NDA6XG4gKiB2YXIgcmVzdWx0ID0gc2V0TWludXRlcyhuZXcgRGF0ZSgyMDE0LCA4LCAxLCAxMSwgMzAsIDQwKSwgNDUpXG4gKiAvLz0+IE1vbiBTZXAgMDEgMjAxNCAxMTo0NTo0MFxuICovXG5cbmZ1bmN0aW9uIHNldE1pbnV0ZXMoZGlydHlEYXRlLCBkaXJ0eU1pbnV0ZXMpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBtaW51dGVzID0gdG9JbnRlZ2VyKGRpcnR5TWludXRlcyk7XG4gIGRhdGUuc2V0TWludXRlcyhtaW51dGVzKTtcbiAgcmV0dXJuIGRhdGU7XG59XG5cbi8qKlxuICogQG5hbWUgc2V0SG91cnNcbiAqIEBjYXRlZ29yeSBIb3VyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFNldCB0aGUgaG91cnMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTZXQgdGhlIGhvdXJzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqICMjIyB2Mi4wLjAgYnJlYWtpbmcgY2hhbmdlczpcbiAqXG4gKiAtIFtDaGFuZ2VzIHRoYXQgYXJlIGNvbW1vbiBmb3IgdGhlIHdob2xlIGxpYnJhcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNDb21tb24tQ2hhbmdlcykuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBob3VycyAtIHRoZSBob3VycyBvZiB0aGUgbmV3IGRhdGVcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgaG91cnMgc2V0XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFNldCA0IGhvdXJzIHRvIDEgU2VwdGVtYmVyIDIwMTQgMTE6MzA6MDA6XG4gKiB2YXIgcmVzdWx0ID0gc2V0SG91cnMobmV3IERhdGUoMjAxNCwgOCwgMSwgMTEsIDMwKSwgNClcbiAqIC8vPT4gTW9uIFNlcCAwMSAyMDE0IDA0OjMwOjAwXG4gKi9cblxuZnVuY3Rpb24gc2V0SG91cnMoZGlydHlEYXRlLCBkaXJ0eUhvdXJzKSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgaG91cnMgPSB0b0ludGVnZXIoZGlydHlIb3Vycyk7XG4gIGRhdGUuc2V0SG91cnMoaG91cnMpO1xuICByZXR1cm4gZGF0ZTtcbn1cblxuLyoqXG4gKiBAbmFtZSBnZXREYXlzSW5Nb250aFxuICogQGNhdGVnb3J5IE1vbnRoIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSBtb250aCBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSBtb250aCBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiAjIyMgdjIuMC4wIGJyZWFraW5nIGNoYW5nZXM6XG4gKlxuICogLSBbQ2hhbmdlcyB0aGF0IGFyZSBjb21tb24gZm9yIHRoZSB3aG9sZSBsaWJyYXJ5XShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlR3VpZGUubWQjQ29tbW9uLUNoYW5nZXMpLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZ2l2ZW4gZGF0ZVxuICogQHJldHVybnMge051bWJlcn0gdGhlIG51bWJlciBvZiBkYXlzIGluIGEgbW9udGhcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBIb3cgbWFueSBkYXlzIGFyZSBpbiBGZWJydWFyeSAyMDAwP1xuICogdmFyIHJlc3VsdCA9IGdldERheXNJbk1vbnRoKG5ldyBEYXRlKDIwMDAsIDEpKVxuICogLy89PiAyOVxuICovXG5cbmZ1bmN0aW9uIGdldERheXNJbk1vbnRoKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gIHZhciBtb250aEluZGV4ID0gZGF0ZS5nZXRNb250aCgpO1xuICB2YXIgbGFzdERheU9mTW9udGggPSBuZXcgRGF0ZSgwKTtcbiAgbGFzdERheU9mTW9udGguc2V0RnVsbFllYXIoeWVhciwgbW9udGhJbmRleCArIDEsIDApO1xuICBsYXN0RGF5T2ZNb250aC5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGxhc3REYXlPZk1vbnRoLmdldERhdGUoKTtcbn1cblxuLyoqXG4gKiBAbmFtZSBzZXRNb250aFxuICogQGNhdGVnb3J5IE1vbnRoIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFNldCB0aGUgbW9udGggdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTZXQgdGhlIG1vbnRoIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqICMjIyB2Mi4wLjAgYnJlYWtpbmcgY2hhbmdlczpcbiAqXG4gKiAtIFtDaGFuZ2VzIHRoYXQgYXJlIGNvbW1vbiBmb3IgdGhlIHdob2xlIGxpYnJhcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNDb21tb24tQ2hhbmdlcykuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBtb250aCAtIHRoZSBtb250aCBvZiB0aGUgbmV3IGRhdGVcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbW9udGggc2V0XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFNldCBGZWJydWFyeSB0byAxIFNlcHRlbWJlciAyMDE0OlxuICogdmFyIHJlc3VsdCA9IHNldE1vbnRoKG5ldyBEYXRlKDIwMTQsIDgsIDEpLCAxKVxuICogLy89PiBTYXQgRmViIDAxIDIwMTQgMDA6MDA6MDBcbiAqL1xuXG5mdW5jdGlvbiBzZXRNb250aChkaXJ0eURhdGUsIGRpcnR5TW9udGgpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBtb250aCA9IHRvSW50ZWdlcihkaXJ0eU1vbnRoKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gIHZhciBkYXkgPSBkYXRlLmdldERhdGUoKTtcbiAgdmFyIGRhdGVXaXRoRGVzaXJlZE1vbnRoID0gbmV3IERhdGUoMCk7XG4gIGRhdGVXaXRoRGVzaXJlZE1vbnRoLnNldEZ1bGxZZWFyKHllYXIsIG1vbnRoLCAxNSk7XG4gIGRhdGVXaXRoRGVzaXJlZE1vbnRoLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgZGF5c0luTW9udGggPSBnZXREYXlzSW5Nb250aChkYXRlV2l0aERlc2lyZWRNb250aCk7IC8vIFNldCB0aGUgbGFzdCBkYXkgb2YgdGhlIG5ldyBtb250aFxuICAvLyBpZiB0aGUgb3JpZ2luYWwgZGF0ZSB3YXMgdGhlIGxhc3QgZGF5IG9mIHRoZSBsb25nZXIgbW9udGhcblxuICBkYXRlLnNldE1vbnRoKG1vbnRoLCBNYXRoLm1pbihkYXksIGRheXNJbk1vbnRoKSk7XG4gIHJldHVybiBkYXRlO1xufVxuXG4vKipcbiAqIEBuYW1lIHNldFF1YXJ0ZXJcbiAqIEBjYXRlZ29yeSBRdWFydGVyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFNldCB0aGUgeWVhciBxdWFydGVyIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogU2V0IHRoZSB5ZWFyIHF1YXJ0ZXIgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogIyMjIHYyLjAuMCBicmVha2luZyBjaGFuZ2VzOlxuICpcbiAqIC0gW0NoYW5nZXMgdGhhdCBhcmUgY29tbW9uIGZvciB0aGUgd2hvbGUgbGlicmFyeV0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdXBncmFkZUd1aWRlLm1kI0NvbW1vbi1DaGFuZ2VzKS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IHF1YXJ0ZXIgLSB0aGUgcXVhcnRlciBvZiB0aGUgbmV3IGRhdGVcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgcXVhcnRlciBzZXRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU2V0IHRoZSAybmQgcXVhcnRlciB0byAyIEp1bHkgMjAxNDpcbiAqIHZhciByZXN1bHQgPSBzZXRRdWFydGVyKG5ldyBEYXRlKDIwMTQsIDYsIDIpLCAyKVxuICogLy89PiBXZWQgQXByIDAyIDIwMTQgMDA6MDA6MDBcbiAqL1xuXG5mdW5jdGlvbiBzZXRRdWFydGVyKGRpcnR5RGF0ZSwgZGlydHlRdWFydGVyKSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgcXVhcnRlciA9IHRvSW50ZWdlcihkaXJ0eVF1YXJ0ZXIpO1xuICB2YXIgb2xkUXVhcnRlciA9IE1hdGguZmxvb3IoZGF0ZS5nZXRNb250aCgpIC8gMykgKyAxO1xuICB2YXIgZGlmZiA9IHF1YXJ0ZXIgLSBvbGRRdWFydGVyO1xuICByZXR1cm4gc2V0TW9udGgoZGF0ZSwgZGF0ZS5nZXRNb250aCgpICsgZGlmZiAqIDMpO1xufVxuXG4vKipcbiAqIEBuYW1lIHNldFllYXJcbiAqIEBjYXRlZ29yeSBZZWFyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFNldCB0aGUgeWVhciB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFNldCB0aGUgeWVhciB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiAjIyMgdjIuMC4wIGJyZWFraW5nIGNoYW5nZXM6XG4gKlxuICogLSBbQ2hhbmdlcyB0aGF0IGFyZSBjb21tb24gZm9yIHRoZSB3aG9sZSBsaWJyYXJ5XShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlR3VpZGUubWQjQ29tbW9uLUNoYW5nZXMpLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0geWVhciAtIHRoZSB5ZWFyIG9mIHRoZSBuZXcgZGF0ZVxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSB5ZWFyIHNldFxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTZXQgeWVhciAyMDEzIHRvIDEgU2VwdGVtYmVyIDIwMTQ6XG4gKiB2YXIgcmVzdWx0ID0gc2V0WWVhcihuZXcgRGF0ZSgyMDE0LCA4LCAxKSwgMjAxMylcbiAqIC8vPT4gU3VuIFNlcCAwMSAyMDEzIDAwOjAwOjAwXG4gKi9cblxuZnVuY3Rpb24gc2V0WWVhcihkaXJ0eURhdGUsIGRpcnR5WWVhcikge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSB0b0ludGVnZXIoZGlydHlZZWFyKTsgLy8gQ2hlY2sgaWYgZGF0ZSBpcyBJbnZhbGlkIERhdGUgYmVjYXVzZSBEYXRlLnByb3RvdHlwZS5zZXRGdWxsWWVhciBpZ25vcmVzIHRoZSB2YWx1ZSBvZiBJbnZhbGlkIERhdGVcblxuICBpZiAoaXNOYU4oZGF0ZSkpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgfVxuXG4gIGRhdGUuc2V0RnVsbFllYXIoeWVhcik7XG4gIHJldHVybiBkYXRlO1xufVxuXG4vKipcbiAqIEBuYW1lIG1pblxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIGVhcmxpZXN0IG9mIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgZWFybGllc3Qgb2YgdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqICMjIyB2Mi4wLjAgYnJlYWtpbmcgY2hhbmdlczpcbiAqXG4gKiAtIFtDaGFuZ2VzIHRoYXQgYXJlIGNvbW1vbiBmb3IgdGhlIHdob2xlIGxpYnJhcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNDb21tb24tQ2hhbmdlcykuXG4gKlxuICogLSBgbWluYCBmdW5jdGlvbiBub3cgYWNjZXB0cyBhbiBhcnJheSBvZiBkYXRlcyByYXRoZXIgdGhhbiBzcHJlYWQgYXJndW1lbnRzLlxuICpcbiAqICAgYGBgamF2YXNjcmlwdFxuICogICAvLyBCZWZvcmUgdjIuMC4wXG4gKiAgIHZhciBkYXRlMSA9IG5ldyBEYXRlKDE5ODksIDYsIDEwKVxuICogICB2YXIgZGF0ZTIgPSBuZXcgRGF0ZSgxOTg3LCAxLCAxMSlcbiAqICAgdmFyIG1pbkRhdGUgPSBtaW4oZGF0ZTEsIGRhdGUyKVxuICpcbiAqICAgLy8gdjIuMC4wIG9ud2FyZDpcbiAqICAgdmFyIGRhdGVzID0gW25ldyBEYXRlKDE5ODksIDYsIDEwKSwgbmV3IERhdGUoMTk4NywgMSwgMTEpXVxuICogICB2YXIgbWluRGF0ZSA9IG1pbihkYXRlcylcbiAqICAgYGBgXG4gKlxuICogQHBhcmFtIHtEYXRlW118TnVtYmVyW119IGRhdGVzQXJyYXkgLSB0aGUgZGF0ZXMgdG8gY29tcGFyZVxuICogQHJldHVybnMge0RhdGV9IHRoZSBlYXJsaWVzdCBvZiB0aGUgZGF0ZXNcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGljaCBvZiB0aGVzZSBkYXRlcyBpcyB0aGUgZWFybGllc3Q/XG4gKiB2YXIgcmVzdWx0ID0gbWluKFtcbiAqICAgbmV3IERhdGUoMTk4OSwgNiwgMTApLFxuICogICBuZXcgRGF0ZSgxOTg3LCAxLCAxMSksXG4gKiAgIG5ldyBEYXRlKDE5OTUsIDYsIDIpLFxuICogICBuZXcgRGF0ZSgxOTkwLCAwLCAxKVxuICogXSlcbiAqIC8vPT4gV2VkIEZlYiAxMSAxOTg3IDAwOjAwOjAwXG4gKi9cblxuZnVuY3Rpb24gbWluKGRpcnR5RGF0ZXNBcnJheSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGVzQXJyYXk7IC8vIGBkaXJ0eURhdGVzQXJyYXlgIGlzIEFycmF5LCBTZXQgb3IgTWFwLCBvciBvYmplY3Qgd2l0aCBjdXN0b20gYGZvckVhY2hgIG1ldGhvZFxuXG4gIGlmIChkaXJ0eURhdGVzQXJyYXkgJiYgdHlwZW9mIGRpcnR5RGF0ZXNBcnJheS5mb3JFYWNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZGF0ZXNBcnJheSA9IGRpcnR5RGF0ZXNBcnJheTsgLy8gSWYgYGRpcnR5RGF0ZXNBcnJheWAgaXMgQXJyYXktbGlrZSBPYmplY3QsIGNvbnZlcnQgdG8gQXJyYXkuXG4gIH0gZWxzZSBpZiAodHlwZW9mIGRpcnR5RGF0ZXNBcnJheSA9PT0gJ29iamVjdCcgJiYgZGlydHlEYXRlc0FycmF5ICE9PSBudWxsKSB7XG4gICAgZGF0ZXNBcnJheSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGRpcnR5RGF0ZXNBcnJheSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gYGRpcnR5RGF0ZXNBcnJheWAgaXMgbm9uLWl0ZXJhYmxlLCByZXR1cm4gSW52YWxpZCBEYXRlXG4gICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gIH1cblxuICB2YXIgcmVzdWx0O1xuICBkYXRlc0FycmF5LmZvckVhY2goZnVuY3Rpb24gKGRpcnR5RGF0ZSkge1xuICAgIHZhciBjdXJyZW50RGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuXG4gICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkIHx8IHJlc3VsdCA+IGN1cnJlbnREYXRlIHx8IGlzTmFOKGN1cnJlbnREYXRlKSkge1xuICAgICAgcmVzdWx0ID0gY3VycmVudERhdGU7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdCB8fCBuZXcgRGF0ZShOYU4pO1xufVxuXG4vKipcbiAqIEBuYW1lIG1heFxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIGxhdGVzdCBvZiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIGxhdGVzdCBvZiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKlxuICogIyMjIHYyLjAuMCBicmVha2luZyBjaGFuZ2VzOlxuICpcbiAqIC0gW0NoYW5nZXMgdGhhdCBhcmUgY29tbW9uIGZvciB0aGUgd2hvbGUgbGlicmFyeV0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdXBncmFkZUd1aWRlLm1kI0NvbW1vbi1DaGFuZ2VzKS5cbiAqXG4gKiAtIGBtYXhgIGZ1bmN0aW9uIG5vdyBhY2NlcHRzIGFuIGFycmF5IG9mIGRhdGVzIHJhdGhlciB0aGFuIHNwcmVhZCBhcmd1bWVudHMuXG4gKlxuICogICBgYGBqYXZhc2NyaXB0XG4gKiAgIC8vIEJlZm9yZSB2Mi4wLjBcbiAqICAgdmFyIGRhdGUxID0gbmV3IERhdGUoMTk4OSwgNiwgMTApXG4gKiAgIHZhciBkYXRlMiA9IG5ldyBEYXRlKDE5ODcsIDEsIDExKVxuICogICB2YXIgbWF4RGF0ZSA9IG1heChkYXRlMSwgZGF0ZTIpXG4gKlxuICogICAvLyB2Mi4wLjAgb253YXJkOlxuICogICB2YXIgZGF0ZXMgPSBbbmV3IERhdGUoMTk4OSwgNiwgMTApLCBuZXcgRGF0ZSgxOTg3LCAxLCAxMSldXG4gKiAgIHZhciBtYXhEYXRlID0gbWF4KGRhdGVzKVxuICogICBgYGBcbiAqXG4gKiBAcGFyYW0ge0RhdGVbXXxOdW1iZXJbXX0gZGF0ZXNBcnJheSAtIHRoZSBkYXRlcyB0byBjb21wYXJlXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIGxhdGVzdCBvZiB0aGUgZGF0ZXNcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGljaCBvZiB0aGVzZSBkYXRlcyBpcyB0aGUgbGF0ZXN0P1xuICogdmFyIHJlc3VsdCA9IG1heChbXG4gKiAgIG5ldyBEYXRlKDE5ODksIDYsIDEwKSxcbiAqICAgbmV3IERhdGUoMTk4NywgMSwgMTEpLFxuICogICBuZXcgRGF0ZSgxOTk1LCA2LCAyKSxcbiAqICAgbmV3IERhdGUoMTk5MCwgMCwgMSlcbiAqIF0pXG4gKiAvLz0+IFN1biBKdWwgMDIgMTk5NSAwMDowMDowMFxuICovXG5cbmZ1bmN0aW9uIG1heChkaXJ0eURhdGVzQXJyYXkpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlc0FycmF5OyAvLyBgZGlydHlEYXRlc0FycmF5YCBpcyBBcnJheSwgU2V0IG9yIE1hcCwgb3Igb2JqZWN0IHdpdGggY3VzdG9tIGBmb3JFYWNoYCBtZXRob2RcblxuICBpZiAoZGlydHlEYXRlc0FycmF5ICYmIHR5cGVvZiBkaXJ0eURhdGVzQXJyYXkuZm9yRWFjaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGRhdGVzQXJyYXkgPSBkaXJ0eURhdGVzQXJyYXk7IC8vIElmIGBkaXJ0eURhdGVzQXJyYXlgIGlzIEFycmF5LWxpa2UgT2JqZWN0LCBjb252ZXJ0IHRvIEFycmF5LlxuICB9IGVsc2UgaWYgKHR5cGVvZiBkaXJ0eURhdGVzQXJyYXkgPT09ICdvYmplY3QnICYmIGRpcnR5RGF0ZXNBcnJheSAhPT0gbnVsbCkge1xuICAgIGRhdGVzQXJyYXkgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChkaXJ0eURhdGVzQXJyYXkpO1xuICB9IGVsc2Uge1xuICAgIC8vIGBkaXJ0eURhdGVzQXJyYXlgIGlzIG5vbi1pdGVyYWJsZSwgcmV0dXJuIEludmFsaWQgRGF0ZVxuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICB9XG5cbiAgdmFyIHJlc3VsdDtcbiAgZGF0ZXNBcnJheS5mb3JFYWNoKGZ1bmN0aW9uIChkaXJ0eURhdGUpIHtcbiAgICB2YXIgY3VycmVudERhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcblxuICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCB8fCByZXN1bHQgPCBjdXJyZW50RGF0ZSB8fCBpc05hTihjdXJyZW50RGF0ZSkpIHtcbiAgICAgIHJlc3VsdCA9IGN1cnJlbnREYXRlO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQgfHwgbmV3IERhdGUoTmFOKTtcbn1cblxuLyoqXG4gKiBAbmFtZSBzdGFydE9mRGF5XG4gKiBAY2F0ZWdvcnkgRGF5IEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybiB0aGUgc3RhcnQgb2YgYSBkYXkgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBzdGFydCBvZiBhIGRheSBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKiBUaGUgcmVzdWx0IHdpbGwgYmUgaW4gdGhlIGxvY2FsIHRpbWV6b25lLlxuICpcbiAqICMjIyB2Mi4wLjAgYnJlYWtpbmcgY2hhbmdlczpcbiAqXG4gKiAtIFtDaGFuZ2VzIHRoYXQgYXJlIGNvbW1vbiBmb3IgdGhlIHdob2xlIGxpYnJhcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNDb21tb24tQ2hhbmdlcykuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIHN0YXJ0IG9mIGEgZGF5XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVGhlIHN0YXJ0IG9mIGEgZGF5IGZvciAyIFNlcHRlbWJlciAyMDE0IDExOjU1OjAwOlxuICogdmFyIHJlc3VsdCA9IHN0YXJ0T2ZEYXkobmV3IERhdGUoMjAxNCwgOCwgMiwgMTEsIDU1LCAwKSlcbiAqIC8vPT4gVHVlIFNlcCAwMiAyMDE0IDAwOjAwOjAwXG4gKi9cblxuZnVuY3Rpb24gc3RhcnRPZkRheShkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIHJldHVybiBkYXRlO1xufVxuXG52YXIgTUlMTElTRUNPTkRTX0lOX0RBWSQxID0gODY0MDAwMDA7XG4vKipcbiAqIEBuYW1lIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5c1xuICogQGNhdGVnb3J5IERheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG51bWJlciBvZiBjYWxlbmRhciBkYXlzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBudW1iZXIgb2YgY2FsZW5kYXIgZGF5cyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy4gVGhpcyBtZWFucyB0aGF0IHRoZSB0aW1lcyBhcmUgcmVtb3ZlZFxuICogZnJvbSB0aGUgZGF0ZXMgYW5kIHRoZW4gdGhlIGRpZmZlcmVuY2UgaW4gZGF5cyBpcyBjYWxjdWxhdGVkLlxuICpcbiAqICMjIyB2Mi4wLjAgYnJlYWtpbmcgY2hhbmdlczpcbiAqXG4gKiAtIFtDaGFuZ2VzIHRoYXQgYXJlIGNvbW1vbiBmb3IgdGhlIHdob2xlIGxpYnJhcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNDb21tb24tQ2hhbmdlcykuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZUxlZnQgLSB0aGUgbGF0ZXIgZGF0ZVxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZVJpZ2h0IC0gdGhlIGVhcmxpZXIgZGF0ZVxuICogQHJldHVybnMge051bWJlcn0gdGhlIG51bWJlciBvZiBjYWxlbmRhciBkYXlzXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhvdyBtYW55IGNhbGVuZGFyIGRheXMgYXJlIGJldHdlZW5cbiAqIC8vIDIgSnVseSAyMDExIDIzOjAwOjAwIGFuZCAyIEp1bHkgMjAxMiAwMDowMDowMD9cbiAqIHZhciByZXN1bHQgPSBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoXG4gKiAgIG5ldyBEYXRlKDIwMTIsIDYsIDIsIDAsIDApLFxuICogICBuZXcgRGF0ZSgyMDExLCA2LCAyLCAyMywgMClcbiAqIClcbiAqIC8vPT4gMzY2XG4gKiAvLyBIb3cgbWFueSBjYWxlbmRhciBkYXlzIGFyZSBiZXR3ZWVuXG4gKiAvLyAyIEp1bHkgMjAxMSAyMzo1OTowMCBhbmQgMyBKdWx5IDIwMTEgMDA6MDE6MDA/XG4gKiB2YXIgcmVzdWx0ID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKFxuICogICBuZXcgRGF0ZSgyMDExLCA2LCAzLCAwLCAxKSxcbiAqICAgbmV3IERhdGUoMjAxMSwgNiwgMiwgMjMsIDU5KVxuICogKVxuICogLy89PiAxXG4gKi9cblxuZnVuY3Rpb24gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKGRpcnR5RGF0ZUxlZnQsIGRpcnR5RGF0ZVJpZ2h0KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgc3RhcnRPZkRheUxlZnQgPSBzdGFydE9mRGF5KGRpcnR5RGF0ZUxlZnQpO1xuICB2YXIgc3RhcnRPZkRheVJpZ2h0ID0gc3RhcnRPZkRheShkaXJ0eURhdGVSaWdodCk7XG4gIHZhciB0aW1lc3RhbXBMZWZ0ID0gc3RhcnRPZkRheUxlZnQuZ2V0VGltZSgpIC0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhzdGFydE9mRGF5TGVmdCk7XG4gIHZhciB0aW1lc3RhbXBSaWdodCA9IHN0YXJ0T2ZEYXlSaWdodC5nZXRUaW1lKCkgLSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKHN0YXJ0T2ZEYXlSaWdodCk7IC8vIFJvdW5kIHRoZSBudW1iZXIgb2YgZGF5cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyXG4gIC8vIGJlY2F1c2UgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gYSBkYXkgaXMgbm90IGNvbnN0YW50XG4gIC8vIChlLmcuIGl0J3MgZGlmZmVyZW50IGluIHRoZSBkYXkgb2YgdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KVxuXG4gIHJldHVybiBNYXRoLnJvdW5kKCh0aW1lc3RhbXBMZWZ0IC0gdGltZXN0YW1wUmlnaHQpIC8gTUlMTElTRUNPTkRTX0lOX0RBWSQxKTtcbn1cblxuLyoqXG4gKiBAbmFtZSBkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRoc1xuICogQGNhdGVnb3J5IE1vbnRoIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgbnVtYmVyIG9mIGNhbGVuZGFyIG1vbnRocyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbnVtYmVyIG9mIGNhbGVuZGFyIG1vbnRocyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiAjIyMgdjIuMC4wIGJyZWFraW5nIGNoYW5nZXM6XG4gKlxuICogLSBbQ2hhbmdlcyB0aGF0IGFyZSBjb21tb24gZm9yIHRoZSB3aG9sZSBsaWJyYXJ5XShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlR3VpZGUubWQjQ29tbW9uLUNoYW5nZXMpLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGVMZWZ0IC0gdGhlIGxhdGVyIGRhdGVcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGVSaWdodCAtIHRoZSBlYXJsaWVyIGRhdGVcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHRoZSBudW1iZXIgb2YgY2FsZW5kYXIgbW9udGhzXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhvdyBtYW55IGNhbGVuZGFyIG1vbnRocyBhcmUgYmV0d2VlbiAzMSBKYW51YXJ5IDIwMTQgYW5kIDEgU2VwdGVtYmVyIDIwMTQ/XG4gKiB2YXIgcmVzdWx0ID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMoXG4gKiAgIG5ldyBEYXRlKDIwMTQsIDgsIDEpLFxuICogICBuZXcgRGF0ZSgyMDE0LCAwLCAzMSlcbiAqIClcbiAqIC8vPT4gOFxuICovXG5cbmZ1bmN0aW9uIGRpZmZlcmVuY2VJbkNhbGVuZGFyTW9udGhzKGRpcnR5RGF0ZUxlZnQsIGRpcnR5RGF0ZVJpZ2h0KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZUxlZnQgPSB0b0RhdGUoZGlydHlEYXRlTGVmdCk7XG4gIHZhciBkYXRlUmlnaHQgPSB0b0RhdGUoZGlydHlEYXRlUmlnaHQpO1xuICB2YXIgeWVhckRpZmYgPSBkYXRlTGVmdC5nZXRGdWxsWWVhcigpIC0gZGF0ZVJpZ2h0LmdldEZ1bGxZZWFyKCk7XG4gIHZhciBtb250aERpZmYgPSBkYXRlTGVmdC5nZXRNb250aCgpIC0gZGF0ZVJpZ2h0LmdldE1vbnRoKCk7XG4gIHJldHVybiB5ZWFyRGlmZiAqIDEyICsgbW9udGhEaWZmO1xufVxuXG4vKipcbiAqIEBuYW1lIGRpZmZlcmVuY2VJbkNhbGVuZGFyWWVhcnNcbiAqIEBjYXRlZ29yeSBZZWFyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgbnVtYmVyIG9mIGNhbGVuZGFyIHllYXJzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBudW1iZXIgb2YgY2FsZW5kYXIgeWVhcnMgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKlxuICogIyMjIHYyLjAuMCBicmVha2luZyBjaGFuZ2VzOlxuICpcbiAqIC0gW0NoYW5nZXMgdGhhdCBhcmUgY29tbW9uIGZvciB0aGUgd2hvbGUgbGlicmFyeV0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdXBncmFkZUd1aWRlLm1kI0NvbW1vbi1DaGFuZ2VzKS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlTGVmdCAtIHRoZSBsYXRlciBkYXRlXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlUmlnaHQgLSB0aGUgZWFybGllciBkYXRlXG4gKiBAcmV0dXJucyB7TnVtYmVyfSB0aGUgbnVtYmVyIG9mIGNhbGVuZGFyIHllYXJzXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhvdyBtYW55IGNhbGVuZGFyIHllYXJzIGFyZSBiZXR3ZWVuIDMxIERlY2VtYmVyIDIwMTMgYW5kIDExIEZlYnJ1YXJ5IDIwMTU/XG4gKiB2YXIgcmVzdWx0ID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycyhcbiAqICAgbmV3IERhdGUoMjAxNSwgMSwgMTEpLFxuICogICBuZXcgRGF0ZSgyMDEzLCAxMSwgMzEpXG4gKiApXG4gKiAvLz0+IDJcbiAqL1xuXG5mdW5jdGlvbiBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzKGRpcnR5RGF0ZUxlZnQsIGRpcnR5RGF0ZVJpZ2h0KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZUxlZnQgPSB0b0RhdGUoZGlydHlEYXRlTGVmdCk7XG4gIHZhciBkYXRlUmlnaHQgPSB0b0RhdGUoZGlydHlEYXRlUmlnaHQpO1xuICByZXR1cm4gZGF0ZUxlZnQuZ2V0RnVsbFllYXIoKSAtIGRhdGVSaWdodC5nZXRGdWxsWWVhcigpO1xufVxuXG4vKipcbiAqIEBuYW1lIHN0YXJ0T2ZNb250aFxuICogQGNhdGVnb3J5IE1vbnRoIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybiB0aGUgc3RhcnQgb2YgYSBtb250aCBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIHN0YXJ0IG9mIGEgbW9udGggZm9yIHRoZSBnaXZlbiBkYXRlLlxuICogVGhlIHJlc3VsdCB3aWxsIGJlIGluIHRoZSBsb2NhbCB0aW1lem9uZS5cbiAqXG4gKiAjIyMgdjIuMC4wIGJyZWFraW5nIGNoYW5nZXM6XG4gKlxuICogLSBbQ2hhbmdlcyB0aGF0IGFyZSBjb21tb24gZm9yIHRoZSB3aG9sZSBsaWJyYXJ5XShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlR3VpZGUubWQjQ29tbW9uLUNoYW5nZXMpLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgb3JpZ2luYWwgZGF0ZVxuICogQHJldHVybnMge0RhdGV9IHRoZSBzdGFydCBvZiBhIG1vbnRoXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVGhlIHN0YXJ0IG9mIGEgbW9udGggZm9yIDIgU2VwdGVtYmVyIDIwMTQgMTE6NTU6MDA6XG4gKiB2YXIgcmVzdWx0ID0gc3RhcnRPZk1vbnRoKG5ldyBEYXRlKDIwMTQsIDgsIDIsIDExLCA1NSwgMCkpXG4gKiAvLz0+IE1vbiBTZXAgMDEgMjAxNCAwMDowMDowMFxuICovXG5cbmZ1bmN0aW9uIHN0YXJ0T2ZNb250aChkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIGRhdGUuc2V0RGF0ZSgxKTtcbiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59XG5cbi8qKlxuICogQG5hbWUgc3RhcnRPZlF1YXJ0ZXJcbiAqIEBjYXRlZ29yeSBRdWFydGVyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybiB0aGUgc3RhcnQgb2YgYSB5ZWFyIHF1YXJ0ZXIgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBzdGFydCBvZiBhIHllYXIgcXVhcnRlciBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKiBUaGUgcmVzdWx0IHdpbGwgYmUgaW4gdGhlIGxvY2FsIHRpbWV6b25lLlxuICpcbiAqICMjIyB2Mi4wLjAgYnJlYWtpbmcgY2hhbmdlczpcbiAqXG4gKiAtIFtDaGFuZ2VzIHRoYXQgYXJlIGNvbW1vbiBmb3IgdGhlIHdob2xlIGxpYnJhcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNDb21tb24tQ2hhbmdlcykuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIHN0YXJ0IG9mIGEgcXVhcnRlclxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBzdGFydCBvZiBhIHF1YXJ0ZXIgZm9yIDIgU2VwdGVtYmVyIDIwMTQgMTE6NTU6MDA6XG4gKiB2YXIgcmVzdWx0ID0gc3RhcnRPZlF1YXJ0ZXIobmV3IERhdGUoMjAxNCwgOCwgMiwgMTEsIDU1LCAwKSlcbiAqIC8vPT4gVHVlIEp1bCAwMSAyMDE0IDAwOjAwOjAwXG4gKi9cblxuZnVuY3Rpb24gc3RhcnRPZlF1YXJ0ZXIoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgY3VycmVudE1vbnRoID0gZGF0ZS5nZXRNb250aCgpO1xuICB2YXIgbW9udGggPSBjdXJyZW50TW9udGggLSBjdXJyZW50TW9udGggJSAzO1xuICBkYXRlLnNldE1vbnRoKG1vbnRoLCAxKTtcbiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59XG5cbi8qKlxuICogQG5hbWUgc3RhcnRPZlllYXJcbiAqIEBjYXRlZ29yeSBZZWFyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybiB0aGUgc3RhcnQgb2YgYSB5ZWFyIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgc3RhcnQgb2YgYSB5ZWFyIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqIFRoZSByZXN1bHQgd2lsbCBiZSBpbiB0aGUgbG9jYWwgdGltZXpvbmUuXG4gKlxuICogIyMjIHYyLjAuMCBicmVha2luZyBjaGFuZ2VzOlxuICpcbiAqIC0gW0NoYW5nZXMgdGhhdCBhcmUgY29tbW9uIGZvciB0aGUgd2hvbGUgbGlicmFyeV0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdXBncmFkZUd1aWRlLm1kI0NvbW1vbi1DaGFuZ2VzKS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIG9yaWdpbmFsIGRhdGVcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgc3RhcnQgb2YgYSB5ZWFyXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVGhlIHN0YXJ0IG9mIGEgeWVhciBmb3IgMiBTZXB0ZW1iZXIgMjAxNCAxMTo1NTowMDpcbiAqIHZhciByZXN1bHQgPSBzdGFydE9mWWVhcihuZXcgRGF0ZSgyMDE0LCA4LCAyLCAxMSwgNTUsIDAwKSlcbiAqIC8vPT4gV2VkIEphbiAwMSAyMDE0IDAwOjAwOjAwXG4gKi9cblxuZnVuY3Rpb24gc3RhcnRPZlllYXIoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgY2xlYW5EYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkYXRlID0gbmV3IERhdGUoMCk7XG4gIGRhdGUuc2V0RnVsbFllYXIoY2xlYW5EYXRlLmdldEZ1bGxZZWFyKCksIDAsIDEpO1xuICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gZGF0ZTtcbn1cblxuLyoqXG4gKiBAbmFtZSBlbmRPZkRheVxuICogQGNhdGVnb3J5IERheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIGVuZCBvZiBhIGRheSBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIGVuZCBvZiBhIGRheSBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKiBUaGUgcmVzdWx0IHdpbGwgYmUgaW4gdGhlIGxvY2FsIHRpbWV6b25lLlxuICpcbiAqICMjIyB2Mi4wLjAgYnJlYWtpbmcgY2hhbmdlczpcbiAqXG4gKiAtIFtDaGFuZ2VzIHRoYXQgYXJlIGNvbW1vbiBmb3IgdGhlIHdob2xlIGxpYnJhcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNDb21tb24tQ2hhbmdlcykuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIGVuZCBvZiBhIGRheVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBlbmQgb2YgYSBkYXkgZm9yIDIgU2VwdGVtYmVyIDIwMTQgMTE6NTU6MDA6XG4gKiB2YXIgcmVzdWx0ID0gZW5kT2ZEYXkobmV3IERhdGUoMjAxNCwgOCwgMiwgMTEsIDU1LCAwKSlcbiAqIC8vPT4gVHVlIFNlcCAwMiAyMDE0IDIzOjU5OjU5Ljk5OVxuICovXG5cbmZ1bmN0aW9uIGVuZE9mRGF5KGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgZGF0ZS5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpO1xuICByZXR1cm4gZGF0ZTtcbn1cblxuLyoqXG4gKiBAbmFtZSBpc0VxdWFsXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFyZSB0aGUgZ2l2ZW4gZGF0ZXMgZXF1YWw/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBcmUgdGhlIGdpdmVuIGRhdGVzIGVxdWFsP1xuICpcbiAqICMjIyB2Mi4wLjAgYnJlYWtpbmcgY2hhbmdlczpcbiAqXG4gKiAtIFtDaGFuZ2VzIHRoYXQgYXJlIGNvbW1vbiBmb3IgdGhlIHdob2xlIGxpYnJhcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNDb21tb24tQ2hhbmdlcykuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZUxlZnQgLSB0aGUgZmlyc3QgZGF0ZSB0byBjb21wYXJlXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlUmlnaHQgLSB0aGUgc2Vjb25kIGRhdGUgdG8gY29tcGFyZVxuICogQHJldHVybnMge0Jvb2xlYW59IHRoZSBkYXRlcyBhcmUgZXF1YWxcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQXJlIDIgSnVseSAyMDE0IDA2OjMwOjQ1LjAwMCBhbmQgMiBKdWx5IDIwMTQgMDY6MzA6NDUuNTAwIGVxdWFsP1xuICogdmFyIHJlc3VsdCA9IGlzRXF1YWwoXG4gKiAgIG5ldyBEYXRlKDIwMTQsIDYsIDIsIDYsIDMwLCA0NSwgMCksXG4gKiAgIG5ldyBEYXRlKDIwMTQsIDYsIDIsIDYsIDMwLCA0NSwgNTAwKVxuICogKVxuICogLy89PiBmYWxzZVxuICovXG5cbmZ1bmN0aW9uIGlzRXF1YWwoZGlydHlMZWZ0RGF0ZSwgZGlydHlSaWdodERhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlTGVmdCA9IHRvRGF0ZShkaXJ0eUxlZnREYXRlKTtcbiAgdmFyIGRhdGVSaWdodCA9IHRvRGF0ZShkaXJ0eVJpZ2h0RGF0ZSk7XG4gIHJldHVybiBkYXRlTGVmdC5nZXRUaW1lKCkgPT09IGRhdGVSaWdodC5nZXRUaW1lKCk7XG59XG5cbi8qKlxuICogQG5hbWUgaXNTYW1lRGF5XG4gKiBAY2F0ZWdvcnkgRGF5IEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFyZSB0aGUgZ2l2ZW4gZGF0ZXMgaW4gdGhlIHNhbWUgZGF5P1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQXJlIHRoZSBnaXZlbiBkYXRlcyBpbiB0aGUgc2FtZSBkYXk/XG4gKlxuICogIyMjIHYyLjAuMCBicmVha2luZyBjaGFuZ2VzOlxuICpcbiAqIC0gW0NoYW5nZXMgdGhhdCBhcmUgY29tbW9uIGZvciB0aGUgd2hvbGUgbGlicmFyeV0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdXBncmFkZUd1aWRlLm1kI0NvbW1vbi1DaGFuZ2VzKS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlTGVmdCAtIHRoZSBmaXJzdCBkYXRlIHRvIGNoZWNrXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlUmlnaHQgLSB0aGUgc2Vjb25kIGRhdGUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0aGUgZGF0ZXMgYXJlIGluIHRoZSBzYW1lIGRheVxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBcmUgNCBTZXB0ZW1iZXIgMDY6MDA6MDAgYW5kIDQgU2VwdGVtYmVyIDE4OjAwOjAwIGluIHRoZSBzYW1lIGRheT9cbiAqIHZhciByZXN1bHQgPSBpc1NhbWVEYXkobmV3IERhdGUoMjAxNCwgOCwgNCwgNiwgMCksIG5ldyBEYXRlKDIwMTQsIDgsIDQsIDE4LCAwKSlcbiAqIC8vPT4gdHJ1ZVxuICovXG5cbmZ1bmN0aW9uIGlzU2FtZURheShkaXJ0eURhdGVMZWZ0LCBkaXJ0eURhdGVSaWdodCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGVMZWZ0U3RhcnRPZkRheSA9IHN0YXJ0T2ZEYXkoZGlydHlEYXRlTGVmdCk7XG4gIHZhciBkYXRlUmlnaHRTdGFydE9mRGF5ID0gc3RhcnRPZkRheShkaXJ0eURhdGVSaWdodCk7XG4gIHJldHVybiBkYXRlTGVmdFN0YXJ0T2ZEYXkuZ2V0VGltZSgpID09PSBkYXRlUmlnaHRTdGFydE9mRGF5LmdldFRpbWUoKTtcbn1cblxuLyoqXG4gKiBAbmFtZSBpc1NhbWVNb250aFxuICogQGNhdGVnb3J5IE1vbnRoIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFyZSB0aGUgZ2l2ZW4gZGF0ZXMgaW4gdGhlIHNhbWUgbW9udGg/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBcmUgdGhlIGdpdmVuIGRhdGVzIGluIHRoZSBzYW1lIG1vbnRoP1xuICpcbiAqICMjIyB2Mi4wLjAgYnJlYWtpbmcgY2hhbmdlczpcbiAqXG4gKiAtIFtDaGFuZ2VzIHRoYXQgYXJlIGNvbW1vbiBmb3IgdGhlIHdob2xlIGxpYnJhcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNDb21tb24tQ2hhbmdlcykuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZUxlZnQgLSB0aGUgZmlyc3QgZGF0ZSB0byBjaGVja1xuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZVJpZ2h0IC0gdGhlIHNlY29uZCBkYXRlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdGhlIGRhdGVzIGFyZSBpbiB0aGUgc2FtZSBtb250aFxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBcmUgMiBTZXB0ZW1iZXIgMjAxNCBhbmQgMjUgU2VwdGVtYmVyIDIwMTQgaW4gdGhlIHNhbWUgbW9udGg/XG4gKiB2YXIgcmVzdWx0ID0gaXNTYW1lTW9udGgobmV3IERhdGUoMjAxNCwgOCwgMiksIG5ldyBEYXRlKDIwMTQsIDgsIDI1KSlcbiAqIC8vPT4gdHJ1ZVxuICovXG5cbmZ1bmN0aW9uIGlzU2FtZU1vbnRoKGRpcnR5RGF0ZUxlZnQsIGRpcnR5RGF0ZVJpZ2h0KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZUxlZnQgPSB0b0RhdGUoZGlydHlEYXRlTGVmdCk7XG4gIHZhciBkYXRlUmlnaHQgPSB0b0RhdGUoZGlydHlEYXRlUmlnaHQpO1xuICByZXR1cm4gZGF0ZUxlZnQuZ2V0RnVsbFllYXIoKSA9PT0gZGF0ZVJpZ2h0LmdldEZ1bGxZZWFyKCkgJiYgZGF0ZUxlZnQuZ2V0TW9udGgoKSA9PT0gZGF0ZVJpZ2h0LmdldE1vbnRoKCk7XG59XG5cbi8qKlxuICogQG5hbWUgaXNTYW1lWWVhclxuICogQGNhdGVnb3J5IFllYXIgSGVscGVyc1xuICogQHN1bW1hcnkgQXJlIHRoZSBnaXZlbiBkYXRlcyBpbiB0aGUgc2FtZSB5ZWFyP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQXJlIHRoZSBnaXZlbiBkYXRlcyBpbiB0aGUgc2FtZSB5ZWFyP1xuICpcbiAqICMjIyB2Mi4wLjAgYnJlYWtpbmcgY2hhbmdlczpcbiAqXG4gKiAtIFtDaGFuZ2VzIHRoYXQgYXJlIGNvbW1vbiBmb3IgdGhlIHdob2xlIGxpYnJhcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNDb21tb24tQ2hhbmdlcykuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZUxlZnQgLSB0aGUgZmlyc3QgZGF0ZSB0byBjaGVja1xuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZVJpZ2h0IC0gdGhlIHNlY29uZCBkYXRlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdGhlIGRhdGVzIGFyZSBpbiB0aGUgc2FtZSB5ZWFyXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFyZSAyIFNlcHRlbWJlciAyMDE0IGFuZCAyNSBTZXB0ZW1iZXIgMjAxNCBpbiB0aGUgc2FtZSB5ZWFyP1xuICogdmFyIHJlc3VsdCA9IGlzU2FtZVllYXIobmV3IERhdGUoMjAxNCwgOCwgMiksIG5ldyBEYXRlKDIwMTQsIDgsIDI1KSlcbiAqIC8vPT4gdHJ1ZVxuICovXG5cbmZ1bmN0aW9uIGlzU2FtZVllYXIoZGlydHlEYXRlTGVmdCwgZGlydHlEYXRlUmlnaHQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlTGVmdCA9IHRvRGF0ZShkaXJ0eURhdGVMZWZ0KTtcbiAgdmFyIGRhdGVSaWdodCA9IHRvRGF0ZShkaXJ0eURhdGVSaWdodCk7XG4gIHJldHVybiBkYXRlTGVmdC5nZXRGdWxsWWVhcigpID09PSBkYXRlUmlnaHQuZ2V0RnVsbFllYXIoKTtcbn1cblxuLyoqXG4gKiBAbmFtZSBpc1NhbWVRdWFydGVyXG4gKiBAY2F0ZWdvcnkgUXVhcnRlciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBBcmUgdGhlIGdpdmVuIGRhdGVzIGluIHRoZSBzYW1lIHllYXIgcXVhcnRlcj9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFyZSB0aGUgZ2l2ZW4gZGF0ZXMgaW4gdGhlIHNhbWUgeWVhciBxdWFydGVyP1xuICpcbiAqICMjIyB2Mi4wLjAgYnJlYWtpbmcgY2hhbmdlczpcbiAqXG4gKiAtIFtDaGFuZ2VzIHRoYXQgYXJlIGNvbW1vbiBmb3IgdGhlIHdob2xlIGxpYnJhcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNDb21tb24tQ2hhbmdlcykuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZUxlZnQgLSB0aGUgZmlyc3QgZGF0ZSB0byBjaGVja1xuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZVJpZ2h0IC0gdGhlIHNlY29uZCBkYXRlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdGhlIGRhdGVzIGFyZSBpbiB0aGUgc2FtZSBxdWFydGVyXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFyZSAxIEphbnVhcnkgMjAxNCBhbmQgOCBNYXJjaCAyMDE0IGluIHRoZSBzYW1lIHF1YXJ0ZXI/XG4gKiB2YXIgcmVzdWx0ID0gaXNTYW1lUXVhcnRlcihuZXcgRGF0ZSgyMDE0LCAwLCAxKSwgbmV3IERhdGUoMjAxNCwgMiwgOCkpXG4gKiAvLz0+IHRydWVcbiAqL1xuXG5mdW5jdGlvbiBpc1NhbWVRdWFydGVyKGRpcnR5RGF0ZUxlZnQsIGRpcnR5RGF0ZVJpZ2h0KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZUxlZnRTdGFydE9mUXVhcnRlciA9IHN0YXJ0T2ZRdWFydGVyKGRpcnR5RGF0ZUxlZnQpO1xuICB2YXIgZGF0ZVJpZ2h0U3RhcnRPZlF1YXJ0ZXIgPSBzdGFydE9mUXVhcnRlcihkaXJ0eURhdGVSaWdodCk7XG4gIHJldHVybiBkYXRlTGVmdFN0YXJ0T2ZRdWFydGVyLmdldFRpbWUoKSA9PT0gZGF0ZVJpZ2h0U3RhcnRPZlF1YXJ0ZXIuZ2V0VGltZSgpO1xufVxuXG4vKipcbiAqIEBuYW1lIGlzQWZ0ZXJcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGZpcnN0IGRhdGUgYWZ0ZXIgdGhlIHNlY29uZCBvbmU/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBJcyB0aGUgZmlyc3QgZGF0ZSBhZnRlciB0aGUgc2Vjb25kIG9uZT9cbiAqXG4gKiAjIyMgdjIuMC4wIGJyZWFraW5nIGNoYW5nZXM6XG4gKlxuICogLSBbQ2hhbmdlcyB0aGF0IGFyZSBjb21tb24gZm9yIHRoZSB3aG9sZSBsaWJyYXJ5XShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlR3VpZGUubWQjQ29tbW9uLUNoYW5nZXMpLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0aGF0IHNob3VsZCBiZSBhZnRlciB0aGUgb3RoZXIgb25lIHRvIHJldHVybiB0cnVlXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlVG9Db21wYXJlIC0gdGhlIGRhdGUgdG8gY29tcGFyZSB3aXRoXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdGhlIGZpcnN0IGRhdGUgaXMgYWZ0ZXIgdGhlIHNlY29uZCBkYXRlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIElzIDEwIEp1bHkgMTk4OSBhZnRlciAxMSBGZWJydWFyeSAxOTg3P1xuICogdmFyIHJlc3VsdCA9IGlzQWZ0ZXIobmV3IERhdGUoMTk4OSwgNiwgMTApLCBuZXcgRGF0ZSgxOTg3LCAxLCAxMSkpXG4gKiAvLz0+IHRydWVcbiAqL1xuXG5mdW5jdGlvbiBpc0FmdGVyKGRpcnR5RGF0ZSwgZGlydHlEYXRlVG9Db21wYXJlKSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGF0ZVRvQ29tcGFyZSA9IHRvRGF0ZShkaXJ0eURhdGVUb0NvbXBhcmUpO1xuICByZXR1cm4gZGF0ZS5nZXRUaW1lKCkgPiBkYXRlVG9Db21wYXJlLmdldFRpbWUoKTtcbn1cblxuLyoqXG4gKiBAbmFtZSBpc0JlZm9yZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBJcyB0aGUgZmlyc3QgZGF0ZSBiZWZvcmUgdGhlIHNlY29uZCBvbmU/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBJcyB0aGUgZmlyc3QgZGF0ZSBiZWZvcmUgdGhlIHNlY29uZCBvbmU/XG4gKlxuICogIyMjIHYyLjAuMCBicmVha2luZyBjaGFuZ2VzOlxuICpcbiAqIC0gW0NoYW5nZXMgdGhhdCBhcmUgY29tbW9uIGZvciB0aGUgd2hvbGUgbGlicmFyeV0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdXBncmFkZUd1aWRlLm1kI0NvbW1vbi1DaGFuZ2VzKS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdGhhdCBzaG91bGQgYmUgYmVmb3JlIHRoZSBvdGhlciBvbmUgdG8gcmV0dXJuIHRydWVcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGVUb0NvbXBhcmUgLSB0aGUgZGF0ZSB0byBjb21wYXJlIHdpdGhcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0aGUgZmlyc3QgZGF0ZSBpcyBiZWZvcmUgdGhlIHNlY29uZCBkYXRlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIElzIDEwIEp1bHkgMTk4OSBiZWZvcmUgMTEgRmVicnVhcnkgMTk4Nz9cbiAqIHZhciByZXN1bHQgPSBpc0JlZm9yZShuZXcgRGF0ZSgxOTg5LCA2LCAxMCksIG5ldyBEYXRlKDE5ODcsIDEsIDExKSlcbiAqIC8vPT4gZmFsc2VcbiAqL1xuXG5mdW5jdGlvbiBpc0JlZm9yZShkaXJ0eURhdGUsIGRpcnR5RGF0ZVRvQ29tcGFyZSkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRhdGVUb0NvbXBhcmUgPSB0b0RhdGUoZGlydHlEYXRlVG9Db21wYXJlKTtcbiAgcmV0dXJuIGRhdGUuZ2V0VGltZSgpIDwgZGF0ZVRvQ29tcGFyZS5nZXRUaW1lKCk7XG59XG5cbi8qKlxuICogQG5hbWUgaXNXaXRoaW5JbnRlcnZhbFxuICogQGNhdGVnb3J5IEludGVydmFsIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiBkYXRlIHdpdGhpbiB0aGUgaW50ZXJ2YWw/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBJcyB0aGUgZ2l2ZW4gZGF0ZSB3aXRoaW4gdGhlIGludGVydmFsPyAoSW5jbHVkaW5nIHN0YXJ0IGFuZCBlbmQuKVxuICpcbiAqICMjIyB2Mi4wLjAgYnJlYWtpbmcgY2hhbmdlczpcbiAqXG4gKiAtIFtDaGFuZ2VzIHRoYXQgYXJlIGNvbW1vbiBmb3IgdGhlIHdob2xlIGxpYnJhcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNDb21tb24tQ2hhbmdlcykuXG4gKlxuICogLSBUaGUgZnVuY3Rpb24gd2FzIHJlbmFtZWQgZnJvbSBgaXNXaXRoaW5SYW5nZWAgdG8gYGlzV2l0aGluSW50ZXJ2YWxgLlxuICogICBUaGlzIGNoYW5nZSB3YXMgbWFkZSB0byBtaXJyb3IgdGhlIHVzZSBvZiB0aGUgd29yZCBcImludGVydmFsXCIgaW4gc3RhbmRhcmQgSVNPIDg2MDE6MjAwNCB0ZXJtaW5vbG9neTpcbiAqXG4gKiAgIGBgYFxuICogICAyLjEuM1xuICogICB0aW1lIGludGVydmFsXG4gKiAgIHBhcnQgb2YgdGhlIHRpbWUgYXhpcyBsaW1pdGVkIGJ5IHR3byBpbnN0YW50c1xuICogICBgYGBcbiAqXG4gKiAgIEFsc28sIHRoaXMgZnVuY3Rpb24gbm93IGFjY2VwdHMgYW4gb2JqZWN0IHdpdGggYHN0YXJ0YCBhbmQgYGVuZGAgcHJvcGVydGllc1xuICogICBpbnN0ZWFkIG9mIHR3byBhcmd1bWVudHMgYXMgYW4gaW50ZXJ2YWwuXG4gKiAgIFRoaXMgZnVuY3Rpb24gbm93IHRocm93cyBgUmFuZ2VFcnJvcmAgaWYgdGhlIHN0YXJ0IG9mIHRoZSBpbnRlcnZhbCBpcyBhZnRlciBpdHMgZW5kXG4gKiAgIG9yIGlmIGFueSBkYXRlIGluIHRoZSBpbnRlcnZhbCBpcyBgSW52YWxpZCBEYXRlYC5cbiAqXG4gKiAgIGBgYGphdmFzY3JpcHRcbiAqICAgLy8gQmVmb3JlIHYyLjAuMFxuICpcbiAqICAgaXNXaXRoaW5SYW5nZShcbiAqICAgICBuZXcgRGF0ZSgyMDE0LCAwLCAzKSxcbiAqICAgICBuZXcgRGF0ZSgyMDE0LCAwLCAxKSwgbmV3IERhdGUoMjAxNCwgMCwgNylcbiAqICAgKVxuICpcbiAqICAgLy8gdjIuMC4wIG9ud2FyZFxuICpcbiAqICAgaXNXaXRoaW5JbnRlcnZhbChcbiAqICAgICBuZXcgRGF0ZSgyMDE0LCAwLCAzKSxcbiAqICAgICB7IHN0YXJ0OiBuZXcgRGF0ZSgyMDE0LCAwLCAxKSwgZW5kOiBuZXcgRGF0ZSgyMDE0LCAwLCA3KSB9XG4gKiAgIClcbiAqICAgYGBgXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcGFyYW0ge0ludGVydmFsfSBpbnRlcnZhbCAtIHRoZSBpbnRlcnZhbCB0byBjaGVja1xuICogQHJldHVybnMge0Jvb2xlYW59IHRoZSBkYXRlIGlzIHdpdGhpbiB0aGUgaW50ZXJ2YWxcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IFRoZSBzdGFydCBvZiBhbiBpbnRlcnZhbCBjYW5ub3QgYmUgYWZ0ZXIgaXRzIGVuZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gRGF0ZSBpbiBpbnRlcnZhbCBjYW5ub3QgYmUgYEludmFsaWQgRGF0ZWBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHRoZSBkYXRlIHdpdGhpbiB0aGUgaW50ZXJ2YWw6XG4gKiBpc1dpdGhpbkludGVydmFsKG5ldyBEYXRlKDIwMTQsIDAsIDMpLCB7XG4gKiAgIHN0YXJ0OiBuZXcgRGF0ZSgyMDE0LCAwLCAxKSxcbiAqICAgZW5kOiBuZXcgRGF0ZSgyMDE0LCAwLCA3KVxuICogfSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIGRhdGUgb3V0c2lkZSBvZiB0aGUgaW50ZXJ2YWw6XG4gKiBpc1dpdGhpbkludGVydmFsKG5ldyBEYXRlKDIwMTQsIDAsIDEwKSwge1xuICogICBzdGFydDogbmV3IERhdGUoMjAxNCwgMCwgMSksXG4gKiAgIGVuZDogbmV3IERhdGUoMjAxNCwgMCwgNylcbiAqIH0pXG4gKiAvLz0+IGZhbHNlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBkYXRlIGVxdWFsIHRvIGludGVydmFsIHN0YXJ0OlxuICogaXNXaXRoaW5JbnRlcnZhbChkYXRlLCB7IHN0YXJ0LCBlbmQ6IGRhdGUgfSkgLy8gPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgZGF0ZSBlcXVhbCB0byBpbnRlcnZhbCBlbmQ6XG4gKiBpc1dpdGhpbkludGVydmFsKGRhdGUsIHsgc3RhcnQ6IGRhdGUsIGVuZCB9KSAvLyA9PiB0cnVlXG4gKi9cblxuZnVuY3Rpb24gaXNXaXRoaW5JbnRlcnZhbChkaXJ0eURhdGUsIGRpcnR5SW50ZXJ2YWwpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBpbnRlcnZhbCA9IGRpcnR5SW50ZXJ2YWwgfHwge307XG4gIHZhciB0aW1lID0gdG9EYXRlKGRpcnR5RGF0ZSkuZ2V0VGltZSgpO1xuICB2YXIgc3RhcnRUaW1lID0gdG9EYXRlKGludGVydmFsLnN0YXJ0KS5nZXRUaW1lKCk7XG4gIHZhciBlbmRUaW1lID0gdG9EYXRlKGludGVydmFsLmVuZCkuZ2V0VGltZSgpOyAvLyBUaHJvdyBhbiBleGNlcHRpb24gaWYgc3RhcnQgZGF0ZSBpcyBhZnRlciBlbmQgZGF0ZSBvciBpZiBhbnkgZGF0ZSBpcyBgSW52YWxpZCBEYXRlYFxuXG4gIGlmICghKHN0YXJ0VGltZSA8PSBlbmRUaW1lKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIGludGVydmFsJyk7XG4gIH1cblxuICByZXR1cm4gdGltZSA+PSBzdGFydFRpbWUgJiYgdGltZSA8PSBlbmRUaW1lO1xufVxuXG5mdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBkaXJ0eU9iamVjdCkge1xuICBpZiAodGFyZ2V0ID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhc3NpZ24gcmVxdWlyZXMgdGhhdCBpbnB1dCBwYXJhbWV0ZXIgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVkJyk7XG4gIH1cblxuICBkaXJ0eU9iamVjdCA9IGRpcnR5T2JqZWN0IHx8IHt9O1xuXG4gIGZvciAodmFyIHByb3BlcnR5IGluIGRpcnR5T2JqZWN0KSB7XG4gICAgaWYgKGRpcnR5T2JqZWN0Lmhhc093blByb3BlcnR5KHByb3BlcnR5KSkge1xuICAgICAgdGFyZ2V0W3Byb3BlcnR5XSA9IGRpcnR5T2JqZWN0W3Byb3BlcnR5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG4vLyBTZWUgaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9pc3N1ZXMvMzc2XG5cbmZ1bmN0aW9uIHNldFVUQ0RheShkaXJ0eURhdGUsIGRpcnR5RGF5LCBkaXJ0eU9wdGlvbnMpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBvcHRpb25zID0gZGlydHlPcHRpb25zIHx8IHt9O1xuICB2YXIgbG9jYWxlID0gb3B0aW9ucy5sb2NhbGU7XG4gIHZhciBsb2NhbGVXZWVrU3RhcnRzT24gPSBsb2NhbGUgJiYgbG9jYWxlLm9wdGlvbnMgJiYgbG9jYWxlLm9wdGlvbnMud2Vla1N0YXJ0c09uO1xuICB2YXIgZGVmYXVsdFdlZWtTdGFydHNPbiA9IGxvY2FsZVdlZWtTdGFydHNPbiA9PSBudWxsID8gMCA6IHRvSW50ZWdlcihsb2NhbGVXZWVrU3RhcnRzT24pO1xuICB2YXIgd2Vla1N0YXJ0c09uID0gb3B0aW9ucy53ZWVrU3RhcnRzT24gPT0gbnVsbCA/IGRlZmF1bHRXZWVrU3RhcnRzT24gOiB0b0ludGVnZXIob3B0aW9ucy53ZWVrU3RhcnRzT24pOyAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDAgYW5kIDYgX2FuZF8gaXMgbm90IE5hTlxuXG4gIGlmICghKHdlZWtTdGFydHNPbiA+PSAwICYmIHdlZWtTdGFydHNPbiA8PSA2KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd3ZWVrU3RhcnRzT24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYgaW5jbHVzaXZlbHknKTtcbiAgfVxuXG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkYXkgPSB0b0ludGVnZXIoZGlydHlEYXkpO1xuICB2YXIgY3VycmVudERheSA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gIHZhciByZW1haW5kZXIgPSBkYXkgJSA3O1xuICB2YXIgZGF5SW5kZXggPSAocmVtYWluZGVyICsgNykgJSA3O1xuICB2YXIgZGlmZiA9IChkYXlJbmRleCA8IHdlZWtTdGFydHNPbiA/IDcgOiAwKSArIGRheSAtIGN1cnJlbnREYXk7XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIGRpZmYpO1xuICByZXR1cm4gZGF0ZTtcbn1cblxuLy8gU2VlIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvaXNzdWVzLzM3NlxuXG5mdW5jdGlvbiBzZXRVVENJU09EYXkoZGlydHlEYXRlLCBkaXJ0eURheSkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGRheSA9IHRvSW50ZWdlcihkaXJ0eURheSk7XG5cbiAgaWYgKGRheSAlIDcgPT09IDApIHtcbiAgICBkYXkgPSBkYXkgLSA3O1xuICB9XG5cbiAgdmFyIHdlZWtTdGFydHNPbiA9IDE7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBjdXJyZW50RGF5ID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgdmFyIHJlbWFpbmRlciA9IGRheSAlIDc7XG4gIHZhciBkYXlJbmRleCA9IChyZW1haW5kZXIgKyA3KSAlIDc7XG4gIHZhciBkaWZmID0gKGRheUluZGV4IDwgd2Vla1N0YXJ0c09uID8gNyA6IDApICsgZGF5IC0gY3VycmVudERheTtcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpICsgZGlmZik7XG4gIHJldHVybiBkYXRlO1xufVxuXG4vLyBTZWUgaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9pc3N1ZXMvMzc2XG5cbmZ1bmN0aW9uIHNldFVUQ0lTT1dlZWsoZGlydHlEYXRlLCBkaXJ0eUlTT1dlZWspIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBpc29XZWVrID0gdG9JbnRlZ2VyKGRpcnR5SVNPV2Vlayk7XG4gIHZhciBkaWZmID0gZ2V0VVRDSVNPV2VlayhkYXRlKSAtIGlzb1dlZWs7XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAtIGRpZmYgKiA3KTtcbiAgcmV0dXJuIGRhdGU7XG59XG5cbi8vIFNlZSBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2lzc3Vlcy8zNzZcblxuZnVuY3Rpb24gc2V0VVRDV2VlayhkaXJ0eURhdGUsIGRpcnR5V2Vlaywgb3B0aW9ucykge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHdlZWsgPSB0b0ludGVnZXIoZGlydHlXZWVrKTtcbiAgdmFyIGRpZmYgPSBnZXRVVENXZWVrKGRhdGUsIG9wdGlvbnMpIC0gd2VlaztcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpIC0gZGlmZiAqIDcpO1xuICByZXR1cm4gZGF0ZTtcbn1cblxudmFyIE1JTExJU0VDT05EU19JTl9IT1VSJDEgPSAzNjAwMDAwO1xudmFyIE1JTExJU0VDT05EU19JTl9NSU5VVEUkMiA9IDYwMDAwO1xudmFyIE1JTExJU0VDT05EU19JTl9TRUNPTkQgPSAxMDAwO1xudmFyIG51bWVyaWNQYXR0ZXJucyA9IHtcbiAgbW9udGg6IC9eKDFbMC0yXXwwP1xcZCkvLFxuICAvLyAwIHRvIDEyXG4gIGRhdGU6IC9eKDNbMC0xXXxbMC0yXT9cXGQpLyxcbiAgLy8gMCB0byAzMVxuICBkYXlPZlllYXI6IC9eKDM2WzAtNl18M1swLTVdXFxkfFswLTJdP1xcZD9cXGQpLyxcbiAgLy8gMCB0byAzNjZcbiAgd2VlazogL14oNVswLTNdfFswLTRdP1xcZCkvLFxuICAvLyAwIHRvIDUzXG4gIGhvdXIyM2g6IC9eKDJbMC0zXXxbMC0xXT9cXGQpLyxcbiAgLy8gMCB0byAyM1xuICBob3VyMjRoOiAvXigyWzAtNF18WzAtMV0/XFxkKS8sXG4gIC8vIDAgdG8gMjRcbiAgaG91cjExaDogL14oMVswLTFdfDA/XFxkKS8sXG4gIC8vIDAgdG8gMTFcbiAgaG91cjEyaDogL14oMVswLTJdfDA/XFxkKS8sXG4gIC8vIDAgdG8gMTJcbiAgbWludXRlOiAvXlswLTVdP1xcZC8sXG4gIC8vIDAgdG8gNTlcbiAgc2Vjb25kOiAvXlswLTVdP1xcZC8sXG4gIC8vIDAgdG8gNTlcbiAgc2luZ2xlRGlnaXQ6IC9eXFxkLyxcbiAgLy8gMCB0byA5XG4gIHR3b0RpZ2l0czogL15cXGR7MSwyfS8sXG4gIC8vIDAgdG8gOTlcbiAgdGhyZWVEaWdpdHM6IC9eXFxkezEsM30vLFxuICAvLyAwIHRvIDk5OVxuICBmb3VyRGlnaXRzOiAvXlxcZHsxLDR9LyxcbiAgLy8gMCB0byA5OTk5XG4gIGFueURpZ2l0c1NpZ25lZDogL14tP1xcZCsvLFxuICBzaW5nbGVEaWdpdFNpZ25lZDogL14tP1xcZC8sXG4gIC8vIDAgdG8gOSwgLTAgdG8gLTlcbiAgdHdvRGlnaXRzU2lnbmVkOiAvXi0/XFxkezEsMn0vLFxuICAvLyAwIHRvIDk5LCAtMCB0byAtOTlcbiAgdGhyZWVEaWdpdHNTaWduZWQ6IC9eLT9cXGR7MSwzfS8sXG4gIC8vIDAgdG8gOTk5LCAtMCB0byAtOTk5XG4gIGZvdXJEaWdpdHNTaWduZWQ6IC9eLT9cXGR7MSw0fS8gLy8gMCB0byA5OTk5LCAtMCB0byAtOTk5OVxuXG59O1xudmFyIHRpbWV6b25lUGF0dGVybnMgPSB7XG4gIGJhc2ljT3B0aW9uYWxNaW51dGVzOiAvXihbKy1dKShcXGR7Mn0pKFxcZHsyfSk/fFovLFxuICBiYXNpYzogL14oWystXSkoXFxkezJ9KShcXGR7Mn0pfFovLFxuICBiYXNpY09wdGlvbmFsU2Vjb25kczogL14oWystXSkoXFxkezJ9KShcXGR7Mn0pKChcXGR7Mn0pKT98Wi8sXG4gIGV4dGVuZGVkOiAvXihbKy1dKShcXGR7Mn0pOihcXGR7Mn0pfFovLFxuICBleHRlbmRlZE9wdGlvbmFsU2Vjb25kczogL14oWystXSkoXFxkezJ9KTooXFxkezJ9KSg6KFxcZHsyfSkpP3xaL1xufTtcblxuZnVuY3Rpb24gcGFyc2VOdW1lcmljUGF0dGVybihwYXR0ZXJuLCBzdHJpbmcsIHZhbHVlQ2FsbGJhY2spIHtcbiAgdmFyIG1hdGNoUmVzdWx0ID0gc3RyaW5nLm1hdGNoKHBhdHRlcm4pO1xuXG4gIGlmICghbWF0Y2hSZXN1bHQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciB2YWx1ZSA9IHBhcnNlSW50KG1hdGNoUmVzdWx0WzBdLCAxMCk7XG4gIHJldHVybiB7XG4gICAgdmFsdWU6IHZhbHVlQ2FsbGJhY2sgPyB2YWx1ZUNhbGxiYWNrKHZhbHVlKSA6IHZhbHVlLFxuICAgIHJlc3Q6IHN0cmluZy5zbGljZShtYXRjaFJlc3VsdFswXS5sZW5ndGgpXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlVGltZXpvbmVQYXR0ZXJuKHBhdHRlcm4sIHN0cmluZykge1xuICB2YXIgbWF0Y2hSZXN1bHQgPSBzdHJpbmcubWF0Y2gocGF0dGVybik7XG5cbiAgaWYgKCFtYXRjaFJlc3VsdCkge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIElucHV0IGlzICdaJ1xuXG5cbiAgaWYgKG1hdGNoUmVzdWx0WzBdID09PSAnWicpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IDAsXG4gICAgICByZXN0OiBzdHJpbmcuc2xpY2UoMSlcbiAgICB9O1xuICB9XG5cbiAgdmFyIHNpZ24gPSBtYXRjaFJlc3VsdFsxXSA9PT0gJysnID8gMSA6IC0xO1xuICB2YXIgaG91cnMgPSBtYXRjaFJlc3VsdFsyXSA/IHBhcnNlSW50KG1hdGNoUmVzdWx0WzJdLCAxMCkgOiAwO1xuICB2YXIgbWludXRlcyA9IG1hdGNoUmVzdWx0WzNdID8gcGFyc2VJbnQobWF0Y2hSZXN1bHRbM10sIDEwKSA6IDA7XG4gIHZhciBzZWNvbmRzID0gbWF0Y2hSZXN1bHRbNV0gPyBwYXJzZUludChtYXRjaFJlc3VsdFs1XSwgMTApIDogMDtcbiAgcmV0dXJuIHtcbiAgICB2YWx1ZTogc2lnbiAqIChob3VycyAqIE1JTExJU0VDT05EU19JTl9IT1VSJDEgKyBtaW51dGVzICogTUlMTElTRUNPTkRTX0lOX01JTlVURSQyICsgc2Vjb25kcyAqIE1JTExJU0VDT05EU19JTl9TRUNPTkQpLFxuICAgIHJlc3Q6IHN0cmluZy5zbGljZShtYXRjaFJlc3VsdFswXS5sZW5ndGgpXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlQW55RGlnaXRzU2lnbmVkKHN0cmluZywgdmFsdWVDYWxsYmFjaykge1xuICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuYW55RGlnaXRzU2lnbmVkLCBzdHJpbmcsIHZhbHVlQ2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBwYXJzZU5EaWdpdHMobiwgc3RyaW5nLCB2YWx1ZUNhbGxiYWNrKSB7XG4gIHN3aXRjaCAobikge1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5zaW5nbGVEaWdpdCwgc3RyaW5nLCB2YWx1ZUNhbGxiYWNrKTtcblxuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy50d29EaWdpdHMsIHN0cmluZywgdmFsdWVDYWxsYmFjayk7XG5cbiAgICBjYXNlIDM6XG4gICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMudGhyZWVEaWdpdHMsIHN0cmluZywgdmFsdWVDYWxsYmFjayk7XG5cbiAgICBjYXNlIDQ6XG4gICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuZm91ckRpZ2l0cywgc3RyaW5nLCB2YWx1ZUNhbGxiYWNrKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihuZXcgUmVnRXhwKCdeXFxcXGR7MSwnICsgbiArICd9JyksIHN0cmluZywgdmFsdWVDYWxsYmFjayk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VORGlnaXRzU2lnbmVkKG4sIHN0cmluZywgdmFsdWVDYWxsYmFjaykge1xuICBzd2l0Y2ggKG4pIHtcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuc2luZ2xlRGlnaXRTaWduZWQsIHN0cmluZywgdmFsdWVDYWxsYmFjayk7XG5cbiAgICBjYXNlIDI6XG4gICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMudHdvRGlnaXRzU2lnbmVkLCBzdHJpbmcsIHZhbHVlQ2FsbGJhY2spO1xuXG4gICAgY2FzZSAzOlxuICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLnRocmVlRGlnaXRzU2lnbmVkLCBzdHJpbmcsIHZhbHVlQ2FsbGJhY2spO1xuXG4gICAgY2FzZSA0OlxuICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLmZvdXJEaWdpdHNTaWduZWQsIHN0cmluZywgdmFsdWVDYWxsYmFjayk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obmV3IFJlZ0V4cCgnXi0/XFxcXGR7MSwnICsgbiArICd9JyksIHN0cmluZywgdmFsdWVDYWxsYmFjayk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGF5UGVyaW9kRW51bVRvSG91cnMoZW51bVZhbHVlKSB7XG4gIHN3aXRjaCAoZW51bVZhbHVlKSB7XG4gICAgY2FzZSAnbW9ybmluZyc6XG4gICAgICByZXR1cm4gNDtcblxuICAgIGNhc2UgJ2V2ZW5pbmcnOlxuICAgICAgcmV0dXJuIDE3O1xuXG4gICAgY2FzZSAncG0nOlxuICAgIGNhc2UgJ25vb24nOlxuICAgIGNhc2UgJ2FmdGVybm9vbic6XG4gICAgICByZXR1cm4gMTI7XG5cbiAgICBjYXNlICdhbSc6XG4gICAgY2FzZSAnbWlkbmlnaHQnOlxuICAgIGNhc2UgJ25pZ2h0JzpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVHdvRGlnaXRZZWFyKHR3b0RpZ2l0WWVhciwgY3VycmVudFllYXIpIHtcbiAgdmFyIGlzQ29tbW9uRXJhID0gY3VycmVudFllYXIgPiAwOyAvLyBBYnNvbHV0ZSBudW1iZXIgb2YgdGhlIGN1cnJlbnQgeWVhcjpcbiAgLy8gMSAtPiAxIEFDXG4gIC8vIDAgLT4gMSBCQ1xuICAvLyAtMSAtPiAyIEJDXG5cbiAgdmFyIGFic0N1cnJlbnRZZWFyID0gaXNDb21tb25FcmEgPyBjdXJyZW50WWVhciA6IDEgLSBjdXJyZW50WWVhcjtcbiAgdmFyIHJlc3VsdDtcblxuICBpZiAoYWJzQ3VycmVudFllYXIgPD0gNTApIHtcbiAgICByZXN1bHQgPSB0d29EaWdpdFllYXIgfHwgMTAwO1xuICB9IGVsc2Uge1xuICAgIHZhciByYW5nZUVuZCA9IGFic0N1cnJlbnRZZWFyICsgNTA7XG4gICAgdmFyIHJhbmdlRW5kQ2VudHVyeSA9IE1hdGguZmxvb3IocmFuZ2VFbmQgLyAxMDApICogMTAwO1xuICAgIHZhciBpc1ByZXZpb3VzQ2VudHVyeSA9IHR3b0RpZ2l0WWVhciA+PSByYW5nZUVuZCAlIDEwMDtcbiAgICByZXN1bHQgPSB0d29EaWdpdFllYXIgKyByYW5nZUVuZENlbnR1cnkgLSAoaXNQcmV2aW91c0NlbnR1cnkgPyAxMDAgOiAwKTtcbiAgfVxuXG4gIHJldHVybiBpc0NvbW1vbkVyYSA/IHJlc3VsdCA6IDEgLSByZXN1bHQ7XG59XG5cbnZhciBEQVlTX0lOX01PTlRIID0gWzMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdO1xudmFyIERBWVNfSU5fTU9OVEhfTEVBUF9ZRUFSID0gWzMxLCAyOSwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdOyAvLyBVc2VyIGZvciB2YWxpZGF0aW9uXG5cbmZ1bmN0aW9uIGlzTGVhcFllYXJJbmRleCh5ZWFyKSB7XG4gIHJldHVybiB5ZWFyICUgNDAwID09PSAwIHx8IHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDA7XG59XG4vKlxuICogfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAgYSAgfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgfCAgQSogfCBNaWxsaXNlY29uZHMgaW4gZGF5ICAgICAgICAgICAgfFxuICogfCAgYiAgfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgfCAgQiAgfCBGbGV4aWJsZSBkYXkgcGVyaW9kICAgICAgICAgICAgfFxuICogfCAgYyAgfCBTdGFuZC1hbG9uZSBsb2NhbCBkYXkgb2Ygd2VlayAgfCAgQyogfCBMb2NhbGl6ZWQgaG91ciB3LyBkYXkgcGVyaW9kICAgfFxuICogfCAgZCAgfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgfCAgRCAgfCBEYXkgb2YgeWVhciAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgZSAgfCBMb2NhbCBkYXkgb2Ygd2VlayAgICAgICAgICAgICAgfCAgRSAgfCBEYXkgb2Ygd2VlayAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgZiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgRiogfCBEYXkgb2Ygd2VlayBpbiBtb250aCAgICAgICAgICAgfFxuICogfCAgZyogfCBNb2RpZmllZCBKdWxpYW4gZGF5ICAgICAgICAgICAgfCAgRyAgfCBFcmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgaCAgfCBIb3VyIFsxLTEyXSAgICAgICAgICAgICAgICAgICAgfCAgSCAgfCBIb3VyIFswLTIzXSAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgaSEgfCBJU08gZGF5IG9mIHdlZWsgICAgICAgICAgICAgICAgfCAgSSEgfCBJU08gd2VlayBvZiB5ZWFyICAgICAgICAgICAgICAgfFxuICogfCAgaiogfCBMb2NhbGl6ZWQgaG91ciB3LyBkYXkgcGVyaW9kICAgfCAgSiogfCBMb2NhbGl6ZWQgaG91ciB3L28gZGF5IHBlcmlvZCAgfFxuICogfCAgayAgfCBIb3VyIFsxLTI0XSAgICAgICAgICAgICAgICAgICAgfCAgSyAgfCBIb3VyIFswLTExXSAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbCogfCAoZGVwcmVjYXRlZCkgICAgICAgICAgICAgICAgICAgfCAgTCAgfCBTdGFuZC1hbG9uZSBtb250aCAgICAgICAgICAgICAgfFxuICogfCAgbSAgfCBNaW51dGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgTSAgfCBNb250aCAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgTiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbyEgfCBPcmRpbmFsIG51bWJlciBtb2RpZmllciAgICAgICAgfCAgTyogfCBUaW1lem9uZSAoR01UKSAgICAgICAgICAgICAgICAgfFxuICogfCAgcCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgUCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgcSAgfCBTdGFuZC1hbG9uZSBxdWFydGVyICAgICAgICAgICAgfCAgUSAgfCBRdWFydGVyICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgciogfCBSZWxhdGVkIEdyZWdvcmlhbiB5ZWFyICAgICAgICAgfCAgUiEgfCBJU08gd2Vlay1udW1iZXJpbmcgeWVhciAgICAgICAgfFxuICogfCAgcyAgfCBTZWNvbmQgICAgICAgICAgICAgICAgICAgICAgICAgfCAgUyAgfCBGcmFjdGlvbiBvZiBzZWNvbmQgICAgICAgICAgICAgfFxuICogfCAgdCEgfCBTZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICAgICAgfCAgVCEgfCBNaWxsaXNlY29uZHMgdGltZXN0YW1wICAgICAgICAgfFxuICogfCAgdSAgfCBFeHRlbmRlZCB5ZWFyICAgICAgICAgICAgICAgICAgfCAgVSogfCBDeWNsaWMgeWVhciAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgdiogfCBUaW1lem9uZSAoZ2VuZXJpYyBub24tbG9jYXQuKSAgfCAgViogfCBUaW1lem9uZSAobG9jYXRpb24pICAgICAgICAgICAgfFxuICogfCAgdyAgfCBMb2NhbCB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgfCAgVyogfCBXZWVrIG9mIG1vbnRoICAgICAgICAgICAgICAgICAgfFxuICogfCAgeCAgfCBUaW1lem9uZSAoSVNPLTg2MDEgdy9vIFopICAgICAgfCAgWCAgfCBUaW1lem9uZSAoSVNPLTg2MDEpICAgICAgICAgICAgfFxuICogfCAgeSAgfCBZZWFyIChhYnMpICAgICAgICAgICAgICAgICAgICAgfCAgWSAgfCBMb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgfFxuICogfCAgeiogfCBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0LikgfCAgWiogfCBUaW1lem9uZSAoYWxpYXNlcykgICAgICAgICAgICAgfFxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICogYXJlIG5vdCBpbXBsZW1lbnRlZCBidXQgcmVzZXJ2ZWQgYnkgVW5pY29kZSBzdGFuZGFyZC5cbiAqXG4gKiBMZXR0ZXJzIG1hcmtlZCBieSAhIGFyZSBub24tc3RhbmRhcmQsIGJ1dCBpbXBsZW1lbnRlZCBieSBkYXRlLWZuczpcbiAqIC0gYG9gIG1vZGlmaWVzIHRoZSBwcmV2aW91cyB0b2tlbiB0byB0dXJuIGl0IGludG8gYW4gb3JkaW5hbCAoc2VlIGBwYXJzZWAgZG9jcylcbiAqIC0gYGlgIGlzIElTTyBkYXkgb2Ygd2Vlay4gRm9yIGBpYCBhbmQgYGlpYCBpcyByZXR1cm5zIG51bWVyaWMgSVNPIHdlZWsgZGF5cyxcbiAqICAgaS5lLiA3IGZvciBTdW5kYXksIDEgZm9yIE1vbmRheSwgZXRjLlxuICogLSBgSWAgaXMgSVNPIHdlZWsgb2YgeWVhciwgYXMgb3Bwb3NlZCB0byBgd2Agd2hpY2ggaXMgbG9jYWwgd2VlayBvZiB5ZWFyLlxuICogLSBgUmAgaXMgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIsIGFzIG9wcG9zZWQgdG8gYFlgIHdoaWNoIGlzIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIuXG4gKiAgIGBSYCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYElgIGFuZCBgaWBcbiAqICAgZm9yIHVuaXZlcnNhbCBJU08gd2Vlay1udW1iZXJpbmcgZGF0ZSwgd2hlcmVhc1xuICogICBgWWAgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGB3YCBhbmQgYGVgXG4gKiAgIGZvciB3ZWVrLW51bWJlcmluZyBkYXRlIHNwZWNpZmljIHRvIHRoZSBsb2NhbGUuXG4gKi9cblxuXG52YXIgcGFyc2VycyA9IHtcbiAgLy8gRXJhXG4gIEc6IHtcbiAgICBwcmlvcml0eTogMTQwLFxuICAgIHBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nLCB0b2tlbiwgbWF0Y2gsIF9vcHRpb25zKSB7XG4gICAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAgIC8vIEFELCBCQ1xuICAgICAgICBjYXNlICdHJzpcbiAgICAgICAgY2FzZSAnR0cnOlxuICAgICAgICBjYXNlICdHR0cnOlxuICAgICAgICAgIHJldHVybiBtYXRjaC5lcmEoc3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJ1xuICAgICAgICAgIH0pIHx8IG1hdGNoLmVyYShzdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnbmFycm93J1xuICAgICAgICAgIH0pO1xuICAgICAgICAvLyBBLCBCXG5cbiAgICAgICAgY2FzZSAnR0dHR0cnOlxuICAgICAgICAgIHJldHVybiBtYXRjaC5lcmEoc3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ25hcnJvdydcbiAgICAgICAgICB9KTtcbiAgICAgICAgLy8gQW5ubyBEb21pbmksIEJlZm9yZSBDaHJpc3RcblxuICAgICAgICBjYXNlICdHR0dHJzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gbWF0Y2guZXJhKHN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICd3aWRlJ1xuICAgICAgICAgIH0pIHx8IG1hdGNoLmVyYShzdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnXG4gICAgICAgICAgfSkgfHwgbWF0Y2guZXJhKHN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICduYXJyb3cnXG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIChkYXRlLCBmbGFncywgdmFsdWUsIF9vcHRpb25zKSB7XG4gICAgICBmbGFncy5lcmEgPSB2YWx1ZTtcbiAgICAgIGRhdGUuc2V0VVRDRnVsbFllYXIodmFsdWUsIDAsIDEpO1xuICAgICAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgIHJldHVybiBkYXRlO1xuICAgIH0sXG4gICAgaW5jb21wYXRpYmxlVG9rZW5zOiBbJ1InLCAndScsICd0JywgJ1QnXVxuICB9LFxuICAvLyBZZWFyXG4gIHk6IHtcbiAgICAvLyBGcm9tIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjM1L3RyMzUtMzEvdHIzNS1kYXRlcy5odG1sI0RhdGVfRm9ybWF0X1BhdHRlcm5zXG4gICAgLy8gfCBZZWFyICAgICB8ICAgICB5IHwgeXkgfCAgIHl5eSB8ICB5eXl5IHwgeXl5eXkgfFxuICAgIC8vIHwtLS0tLS0tLS0tfC0tLS0tLS18LS0tLXwtLS0tLS0tfC0tLS0tLS18LS0tLS0tLXxcbiAgICAvLyB8IEFEIDEgICAgIHwgICAgIDEgfCAwMSB8ICAgMDAxIHwgIDAwMDEgfCAwMDAwMSB8XG4gICAgLy8gfCBBRCAxMiAgICB8ICAgIDEyIHwgMTIgfCAgIDAxMiB8ICAwMDEyIHwgMDAwMTIgfFxuICAgIC8vIHwgQUQgMTIzICAgfCAgIDEyMyB8IDIzIHwgICAxMjMgfCAgMDEyMyB8IDAwMTIzIHxcbiAgICAvLyB8IEFEIDEyMzQgIHwgIDEyMzQgfCAzNCB8ICAxMjM0IHwgIDEyMzQgfCAwMTIzNCB8XG4gICAgLy8gfCBBRCAxMjM0NSB8IDEyMzQ1IHwgNDUgfCAxMjM0NSB8IDEyMzQ1IHwgMTIzNDUgfFxuICAgIHByaW9yaXR5OiAxMzAsXG4gICAgcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcsIHRva2VuLCBtYXRjaCwgX29wdGlvbnMpIHtcbiAgICAgIHZhciB2YWx1ZUNhbGxiYWNrID0gZnVuY3Rpb24gKHllYXIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB5ZWFyOiB5ZWFyLFxuICAgICAgICAgIGlzVHdvRGlnaXRZZWFyOiB0b2tlbiA9PT0gJ3l5J1xuICAgICAgICB9O1xuICAgICAgfTtcblxuICAgICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgICBjYXNlICd5JzpcbiAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKDQsIHN0cmluZywgdmFsdWVDYWxsYmFjayk7XG5cbiAgICAgICAgY2FzZSAneW8nOlxuICAgICAgICAgIHJldHVybiBtYXRjaC5vcmRpbmFsTnVtYmVyKHN0cmluZywge1xuICAgICAgICAgICAgdW5pdDogJ3llYXInLFxuICAgICAgICAgICAgdmFsdWVDYWxsYmFjazogdmFsdWVDYWxsYmFja1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIHN0cmluZywgdmFsdWVDYWxsYmFjayk7XG4gICAgICB9XG4gICAgfSxcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24gKF9kYXRlLCB2YWx1ZSwgX29wdGlvbnMpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5pc1R3b0RpZ2l0WWVhciB8fCB2YWx1ZS55ZWFyID4gMDtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKGRhdGUsIGZsYWdzLCB2YWx1ZSwgX29wdGlvbnMpIHtcbiAgICAgIHZhciBjdXJyZW50WWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcblxuICAgICAgaWYgKHZhbHVlLmlzVHdvRGlnaXRZZWFyKSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkVHdvRGlnaXRZZWFyID0gbm9ybWFsaXplVHdvRGlnaXRZZWFyKHZhbHVlLnllYXIsIGN1cnJlbnRZZWFyKTtcbiAgICAgICAgZGF0ZS5zZXRVVENGdWxsWWVhcihub3JtYWxpemVkVHdvRGlnaXRZZWFyLCAwLCAxKTtcbiAgICAgICAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICB9XG5cbiAgICAgIHZhciB5ZWFyID0gISgnZXJhJyBpbiBmbGFncykgfHwgZmxhZ3MuZXJhID09PSAxID8gdmFsdWUueWVhciA6IDEgLSB2YWx1ZS55ZWFyO1xuICAgICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCAxKTtcbiAgICAgIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICByZXR1cm4gZGF0ZTtcbiAgICB9LFxuICAgIGluY29tcGF0aWJsZVRva2VuczogWydZJywgJ1InLCAndScsICd3JywgJ0knLCAnaScsICdlJywgJ2MnLCAndCcsICdUJ11cbiAgfSxcbiAgLy8gTG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhclxuICBZOiB7XG4gICAgcHJpb3JpdHk6IDEzMCxcbiAgICBwYXJzZTogZnVuY3Rpb24gKHN0cmluZywgdG9rZW4sIG1hdGNoLCBfb3B0aW9ucykge1xuICAgICAgdmFyIHZhbHVlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoeWVhcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHllYXI6IHllYXIsXG4gICAgICAgICAgaXNUd29EaWdpdFllYXI6IHRva2VuID09PSAnWVknXG4gICAgICAgIH07XG4gICAgICB9O1xuXG4gICAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAgIGNhc2UgJ1knOlxuICAgICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHMoNCwgc3RyaW5nLCB2YWx1ZUNhbGxiYWNrKTtcblxuICAgICAgICBjYXNlICdZbyc6XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLm9yZGluYWxOdW1iZXIoc3RyaW5nLCB7XG4gICAgICAgICAgICB1bml0OiAneWVhcicsXG4gICAgICAgICAgICB2YWx1ZUNhbGxiYWNrOiB2YWx1ZUNhbGxiYWNrXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgc3RyaW5nLCB2YWx1ZUNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbiAoX2RhdGUsIHZhbHVlLCBfb3B0aW9ucykge1xuICAgICAgcmV0dXJuIHZhbHVlLmlzVHdvRGlnaXRZZWFyIHx8IHZhbHVlLnllYXIgPiAwO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAoZGF0ZSwgZmxhZ3MsIHZhbHVlLCBvcHRpb25zKSB7XG4gICAgICB2YXIgY3VycmVudFllYXIgPSBnZXRVVENXZWVrWWVhcihkYXRlLCBvcHRpb25zKTtcblxuICAgICAgaWYgKHZhbHVlLmlzVHdvRGlnaXRZZWFyKSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkVHdvRGlnaXRZZWFyID0gbm9ybWFsaXplVHdvRGlnaXRZZWFyKHZhbHVlLnllYXIsIGN1cnJlbnRZZWFyKTtcbiAgICAgICAgZGF0ZS5zZXRVVENGdWxsWWVhcihub3JtYWxpemVkVHdvRGlnaXRZZWFyLCAwLCBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gICAgICAgIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICAgIHJldHVybiBzdGFydE9mVVRDV2VlayhkYXRlLCBvcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHllYXIgPSAhKCdlcmEnIGluIGZsYWdzKSB8fCBmbGFncy5lcmEgPT09IDEgPyB2YWx1ZS55ZWFyIDogMSAtIHZhbHVlLnllYXI7XG4gICAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgICAgIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICByZXR1cm4gc3RhcnRPZlVUQ1dlZWsoZGF0ZSwgb3B0aW9ucyk7XG4gICAgfSxcbiAgICBpbmNvbXBhdGlibGVUb2tlbnM6IFsneScsICdSJywgJ3UnLCAnUScsICdxJywgJ00nLCAnTCcsICdJJywgJ2QnLCAnRCcsICdpJywgJ3QnLCAnVCddXG4gIH0sXG4gIC8vIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gIFI6IHtcbiAgICBwcmlvcml0eTogMTMwLFxuICAgIHBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nLCB0b2tlbiwgX21hdGNoLCBfb3B0aW9ucykge1xuICAgICAgaWYgKHRva2VuID09PSAnUicpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0c1NpZ25lZCg0LCBzdHJpbmcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyc2VORGlnaXRzU2lnbmVkKHRva2VuLmxlbmd0aCwgc3RyaW5nKTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKF9kYXRlLCBfZmxhZ3MsIHZhbHVlLCBfb3B0aW9ucykge1xuICAgICAgdmFyIGZpcnN0V2Vla09mWWVhciA9IG5ldyBEYXRlKDApO1xuICAgICAgZmlyc3RXZWVrT2ZZZWFyLnNldFVUQ0Z1bGxZZWFyKHZhbHVlLCAwLCA0KTtcbiAgICAgIGZpcnN0V2Vla09mWWVhci5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgIHJldHVybiBzdGFydE9mVVRDSVNPV2VlayhmaXJzdFdlZWtPZlllYXIpO1xuICAgIH0sXG4gICAgaW5jb21wYXRpYmxlVG9rZW5zOiBbJ0cnLCAneScsICdZJywgJ3UnLCAnUScsICdxJywgJ00nLCAnTCcsICd3JywgJ2QnLCAnRCcsICdlJywgJ2MnLCAndCcsICdUJ11cbiAgfSxcbiAgLy8gRXh0ZW5kZWQgeWVhclxuICB1OiB7XG4gICAgcHJpb3JpdHk6IDEzMCxcbiAgICBwYXJzZTogZnVuY3Rpb24gKHN0cmluZywgdG9rZW4sIF9tYXRjaCwgX29wdGlvbnMpIHtcbiAgICAgIGlmICh0b2tlbiA9PT0gJ3UnKSB7XG4gICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHNTaWduZWQoNCwgc3RyaW5nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0c1NpZ25lZCh0b2tlbi5sZW5ndGgsIHN0cmluZyk7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIChkYXRlLCBfZmxhZ3MsIHZhbHVlLCBfb3B0aW9ucykge1xuICAgICAgZGF0ZS5zZXRVVENGdWxsWWVhcih2YWx1ZSwgMCwgMSk7XG4gICAgICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfSxcbiAgICBpbmNvbXBhdGlibGVUb2tlbnM6IFsnRycsICd5JywgJ1knLCAnUicsICd3JywgJ0knLCAnaScsICdlJywgJ2MnLCAndCcsICdUJ11cbiAgfSxcbiAgLy8gUXVhcnRlclxuICBROiB7XG4gICAgcHJpb3JpdHk6IDEyMCxcbiAgICBwYXJzZTogZnVuY3Rpb24gKHN0cmluZywgdG9rZW4sIG1hdGNoLCBfb3B0aW9ucykge1xuICAgICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgICAvLyAxLCAyLCAzLCA0XG4gICAgICAgIGNhc2UgJ1EnOlxuICAgICAgICBjYXNlICdRUSc6XG4gICAgICAgICAgLy8gMDEsIDAyLCAwMywgMDRcbiAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgc3RyaW5nKTtcbiAgICAgICAgLy8gMXN0LCAybmQsIDNyZCwgNHRoXG5cbiAgICAgICAgY2FzZSAnUW8nOlxuICAgICAgICAgIHJldHVybiBtYXRjaC5vcmRpbmFsTnVtYmVyKHN0cmluZywge1xuICAgICAgICAgICAgdW5pdDogJ3F1YXJ0ZXInXG4gICAgICAgICAgfSk7XG4gICAgICAgIC8vIFExLCBRMiwgUTMsIFE0XG5cbiAgICAgICAgY2FzZSAnUVFRJzpcbiAgICAgICAgICByZXR1cm4gbWF0Y2gucXVhcnRlcihzdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgICAgfSkgfHwgbWF0Y2gucXVhcnRlcihzdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICAgIH0pO1xuICAgICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbClcblxuICAgICAgICBjYXNlICdRUVFRUSc6XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLnF1YXJ0ZXIoc3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KTtcbiAgICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cblxuICAgICAgICBjYXNlICdRUVFRJzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gbWF0Y2gucXVhcnRlcihzdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KSB8fCBtYXRjaC5xdWFydGVyKHN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KSB8fCBtYXRjaC5xdWFydGVyKHN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24gKF9kYXRlLCB2YWx1ZSwgX29wdGlvbnMpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA+PSAxICYmIHZhbHVlIDw9IDQ7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIChkYXRlLCBfZmxhZ3MsIHZhbHVlLCBfb3B0aW9ucykge1xuICAgICAgZGF0ZS5zZXRVVENNb250aCgodmFsdWUgLSAxKSAqIDMsIDEpO1xuICAgICAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgIHJldHVybiBkYXRlO1xuICAgIH0sXG4gICAgaW5jb21wYXRpYmxlVG9rZW5zOiBbJ1knLCAnUicsICdxJywgJ00nLCAnTCcsICd3JywgJ0knLCAnZCcsICdEJywgJ2knLCAnZScsICdjJywgJ3QnLCAnVCddXG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIHF1YXJ0ZXJcbiAgcToge1xuICAgIHByaW9yaXR5OiAxMjAsXG4gICAgcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcsIHRva2VuLCBtYXRjaCwgX29wdGlvbnMpIHtcbiAgICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgICAgLy8gMSwgMiwgMywgNFxuICAgICAgICBjYXNlICdxJzpcbiAgICAgICAgY2FzZSAncXEnOlxuICAgICAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG4gICAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIHN0cmluZyk7XG4gICAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aFxuXG4gICAgICAgIGNhc2UgJ3FvJzpcbiAgICAgICAgICByZXR1cm4gbWF0Y2gub3JkaW5hbE51bWJlcihzdHJpbmcsIHtcbiAgICAgICAgICAgIHVuaXQ6ICdxdWFydGVyJ1xuICAgICAgICAgIH0pO1xuICAgICAgICAvLyBRMSwgUTIsIFEzLCBRNFxuXG4gICAgICAgIGNhc2UgJ3FxcSc6XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLnF1YXJ0ZXIoc3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgIH0pIHx8IG1hdGNoLnF1YXJ0ZXIoc3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgICB9KTtcbiAgICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpXG5cbiAgICAgICAgY2FzZSAncXFxcXEnOlxuICAgICAgICAgIHJldHVybiBtYXRjaC5xdWFydGVyKHN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgfSk7XG4gICAgICAgIC8vIDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uXG5cbiAgICAgICAgY2FzZSAncXFxcSc6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLnF1YXJ0ZXIoc3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgfSkgfHwgbWF0Y2gucXVhcnRlcihzdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgfSkgfHwgbWF0Y2gucXVhcnRlcihzdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uIChfZGF0ZSwgdmFsdWUsIF9vcHRpb25zKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPj0gMSAmJiB2YWx1ZSA8PSA0O1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAoZGF0ZSwgX2ZsYWdzLCB2YWx1ZSwgX29wdGlvbnMpIHtcbiAgICAgIGRhdGUuc2V0VVRDTW9udGgoKHZhbHVlIC0gMSkgKiAzLCAxKTtcbiAgICAgIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICByZXR1cm4gZGF0ZTtcbiAgICB9LFxuICAgIGluY29tcGF0aWJsZVRva2VuczogWydZJywgJ1InLCAnUScsICdNJywgJ0wnLCAndycsICdJJywgJ2QnLCAnRCcsICdpJywgJ2UnLCAnYycsICd0JywgJ1QnXVxuICB9LFxuICAvLyBNb250aFxuICBNOiB7XG4gICAgcHJpb3JpdHk6IDExMCxcbiAgICBwYXJzZTogZnVuY3Rpb24gKHN0cmluZywgdG9rZW4sIG1hdGNoLCBfb3B0aW9ucykge1xuICAgICAgdmFyIHZhbHVlQ2FsbGJhY2sgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlIC0gMTtcbiAgICAgIH07XG5cbiAgICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgICAgLy8gMSwgMiwgLi4uLCAxMlxuICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMubW9udGgsIHN0cmluZywgdmFsdWVDYWxsYmFjayk7XG4gICAgICAgIC8vIDAxLCAwMiwgLi4uLCAxMlxuXG4gICAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKDIsIHN0cmluZywgdmFsdWVDYWxsYmFjayk7XG4gICAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcblxuICAgICAgICBjYXNlICdNbyc6XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLm9yZGluYWxOdW1iZXIoc3RyaW5nLCB7XG4gICAgICAgICAgICB1bml0OiAnbW9udGgnLFxuICAgICAgICAgICAgdmFsdWVDYWxsYmFjazogdmFsdWVDYWxsYmFja1xuICAgICAgICAgIH0pO1xuICAgICAgICAvLyBKYW4sIEZlYiwgLi4uLCBEZWNcblxuICAgICAgICBjYXNlICdNTU0nOlxuICAgICAgICAgIHJldHVybiBtYXRjaC5tb250aChzdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgICAgfSkgfHwgbWF0Y2gubW9udGgoc3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KTtcbiAgICAgICAgLy8gSiwgRiwgLi4uLCBEXG5cbiAgICAgICAgY2FzZSAnTU1NTU0nOlxuICAgICAgICAgIHJldHVybiBtYXRjaC5tb250aChzdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICAgIH0pO1xuICAgICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlclxuXG4gICAgICAgIGNhc2UgJ01NTU0nOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBtYXRjaC5tb250aChzdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KSB8fCBtYXRjaC5tb250aChzdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgICAgfSkgfHwgbWF0Y2gubW9udGgoc3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbiAoX2RhdGUsIHZhbHVlLCBfb3B0aW9ucykge1xuICAgICAgcmV0dXJuIHZhbHVlID49IDAgJiYgdmFsdWUgPD0gMTE7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIChkYXRlLCBfZmxhZ3MsIHZhbHVlLCBfb3B0aW9ucykge1xuICAgICAgZGF0ZS5zZXRVVENNb250aCh2YWx1ZSwgMSk7XG4gICAgICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfSxcbiAgICBpbmNvbXBhdGlibGVUb2tlbnM6IFsnWScsICdSJywgJ3EnLCAnUScsICdMJywgJ3cnLCAnSScsICdEJywgJ2knLCAnZScsICdjJywgJ3QnLCAnVCddXG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIG1vbnRoXG4gIEw6IHtcbiAgICBwcmlvcml0eTogMTEwLFxuICAgIHBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nLCB0b2tlbiwgbWF0Y2gsIF9vcHRpb25zKSB7XG4gICAgICB2YXIgdmFsdWVDYWxsYmFjayA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgLSAxO1xuICAgICAgfTtcblxuICAgICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgICAvLyAxLCAyLCAuLi4sIDEyXG4gICAgICAgIGNhc2UgJ0wnOlxuICAgICAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5tb250aCwgc3RyaW5nLCB2YWx1ZUNhbGxiYWNrKTtcbiAgICAgICAgLy8gMDEsIDAyLCAuLi4sIDEyXG5cbiAgICAgICAgY2FzZSAnTEwnOlxuICAgICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHMoMiwgc3RyaW5nLCB2YWx1ZUNhbGxiYWNrKTtcbiAgICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aFxuXG4gICAgICAgIGNhc2UgJ0xvJzpcbiAgICAgICAgICByZXR1cm4gbWF0Y2gub3JkaW5hbE51bWJlcihzdHJpbmcsIHtcbiAgICAgICAgICAgIHVuaXQ6ICdtb250aCcsXG4gICAgICAgICAgICB2YWx1ZUNhbGxiYWNrOiB2YWx1ZUNhbGxiYWNrXG4gICAgICAgICAgfSk7XG4gICAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlY1xuXG4gICAgICAgIGNhc2UgJ0xMTCc6XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLm1vbnRoKHN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgICB9KSB8fCBtYXRjaC5tb250aChzdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgIH0pO1xuICAgICAgICAvLyBKLCBGLCAuLi4sIERcblxuICAgICAgICBjYXNlICdMTExMTCc6XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLm1vbnRoKHN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgfSk7XG4gICAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyXG5cbiAgICAgICAgY2FzZSAnTExMTCc6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLm1vbnRoKHN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgIH0pIHx8IG1hdGNoLm1vbnRoKHN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgICB9KSB8fCBtYXRjaC5tb250aChzdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uIChfZGF0ZSwgdmFsdWUsIF9vcHRpb25zKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPj0gMCAmJiB2YWx1ZSA8PSAxMTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKGRhdGUsIF9mbGFncywgdmFsdWUsIF9vcHRpb25zKSB7XG4gICAgICBkYXRlLnNldFVUQ01vbnRoKHZhbHVlLCAxKTtcbiAgICAgIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICByZXR1cm4gZGF0ZTtcbiAgICB9LFxuICAgIGluY29tcGF0aWJsZVRva2VuczogWydZJywgJ1InLCAncScsICdRJywgJ00nLCAndycsICdJJywgJ0QnLCAnaScsICdlJywgJ2MnLCAndCcsICdUJ11cbiAgfSxcbiAgLy8gTG9jYWwgd2VlayBvZiB5ZWFyXG4gIHc6IHtcbiAgICBwcmlvcml0eTogMTAwLFxuICAgIHBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nLCB0b2tlbiwgbWF0Y2gsIF9vcHRpb25zKSB7XG4gICAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy53ZWVrLCBzdHJpbmcpO1xuXG4gICAgICAgIGNhc2UgJ3dvJzpcbiAgICAgICAgICByZXR1cm4gbWF0Y2gub3JkaW5hbE51bWJlcihzdHJpbmcsIHtcbiAgICAgICAgICAgIHVuaXQ6ICd3ZWVrJ1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIHN0cmluZyk7XG4gICAgICB9XG4gICAgfSxcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24gKF9kYXRlLCB2YWx1ZSwgX29wdGlvbnMpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA+PSAxICYmIHZhbHVlIDw9IDUzO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAoZGF0ZSwgX2ZsYWdzLCB2YWx1ZSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIHN0YXJ0T2ZVVENXZWVrKHNldFVUQ1dlZWsoZGF0ZSwgdmFsdWUsIG9wdGlvbnMpLCBvcHRpb25zKTtcbiAgICB9LFxuICAgIGluY29tcGF0aWJsZVRva2VuczogWyd5JywgJ1InLCAndScsICdxJywgJ1EnLCAnTScsICdMJywgJ0knLCAnZCcsICdEJywgJ2knLCAndCcsICdUJ11cbiAgfSxcbiAgLy8gSVNPIHdlZWsgb2YgeWVhclxuICBJOiB7XG4gICAgcHJpb3JpdHk6IDEwMCxcbiAgICBwYXJzZTogZnVuY3Rpb24gKHN0cmluZywgdG9rZW4sIG1hdGNoLCBfb3B0aW9ucykge1xuICAgICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgICBjYXNlICdJJzpcbiAgICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMud2Vlaywgc3RyaW5nKTtcblxuICAgICAgICBjYXNlICdJbyc6XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLm9yZGluYWxOdW1iZXIoc3RyaW5nLCB7XG4gICAgICAgICAgICB1bml0OiAnd2VlaydcbiAgICAgICAgICB9KTtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBzdHJpbmcpO1xuICAgICAgfVxuICAgIH0sXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uIChfZGF0ZSwgdmFsdWUsIF9vcHRpb25zKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPj0gMSAmJiB2YWx1ZSA8PSA1MztcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKGRhdGUsIF9mbGFncywgdmFsdWUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBzdGFydE9mVVRDSVNPV2VlayhzZXRVVENJU09XZWVrKGRhdGUsIHZhbHVlLCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgfSxcbiAgICBpbmNvbXBhdGlibGVUb2tlbnM6IFsneScsICdZJywgJ3UnLCAncScsICdRJywgJ00nLCAnTCcsICd3JywgJ2QnLCAnRCcsICdlJywgJ2MnLCAndCcsICdUJ11cbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiB7XG4gICAgcHJpb3JpdHk6IDkwLFxuICAgIHN1YlByaW9yaXR5OiAxLFxuICAgIHBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nLCB0b2tlbiwgbWF0Y2gsIF9vcHRpb25zKSB7XG4gICAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5kYXRlLCBzdHJpbmcpO1xuXG4gICAgICAgIGNhc2UgJ2RvJzpcbiAgICAgICAgICByZXR1cm4gbWF0Y2gub3JkaW5hbE51bWJlcihzdHJpbmcsIHtcbiAgICAgICAgICAgIHVuaXQ6ICdkYXRlJ1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIHN0cmluZyk7XG4gICAgICB9XG4gICAgfSxcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24gKGRhdGUsIHZhbHVlLCBfb3B0aW9ucykge1xuICAgICAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgICB2YXIgaXNMZWFwWWVhciA9IGlzTGVhcFllYXJJbmRleCh5ZWFyKTtcbiAgICAgIHZhciBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcblxuICAgICAgaWYgKGlzTGVhcFllYXIpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID49IDEgJiYgdmFsdWUgPD0gREFZU19JTl9NT05USF9MRUFQX1lFQVJbbW9udGhdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID49IDEgJiYgdmFsdWUgPD0gREFZU19JTl9NT05USFttb250aF07XG4gICAgICB9XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIChkYXRlLCBfZmxhZ3MsIHZhbHVlLCBfb3B0aW9ucykge1xuICAgICAgZGF0ZS5zZXRVVENEYXRlKHZhbHVlKTtcbiAgICAgIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICByZXR1cm4gZGF0ZTtcbiAgICB9LFxuICAgIGluY29tcGF0aWJsZVRva2VuczogWydZJywgJ1InLCAncScsICdRJywgJ3cnLCAnSScsICdEJywgJ2knLCAnZScsICdjJywgJ3QnLCAnVCddXG4gIH0sXG4gIC8vIERheSBvZiB5ZWFyXG4gIEQ6IHtcbiAgICBwcmlvcml0eTogOTAsXG4gICAgc3ViUHJpb3JpdHk6IDEsXG4gICAgcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcsIHRva2VuLCBtYXRjaCwgX29wdGlvbnMpIHtcbiAgICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgIGNhc2UgJ0REJzpcbiAgICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuZGF5T2ZZZWFyLCBzdHJpbmcpO1xuXG4gICAgICAgIGNhc2UgJ0RvJzpcbiAgICAgICAgICByZXR1cm4gbWF0Y2gub3JkaW5hbE51bWJlcihzdHJpbmcsIHtcbiAgICAgICAgICAgIHVuaXQ6ICdkYXRlJ1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIHN0cmluZyk7XG4gICAgICB9XG4gICAgfSxcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24gKGRhdGUsIHZhbHVlLCBfb3B0aW9ucykge1xuICAgICAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgICB2YXIgaXNMZWFwWWVhciA9IGlzTGVhcFllYXJJbmRleCh5ZWFyKTtcblxuICAgICAgaWYgKGlzTGVhcFllYXIpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID49IDEgJiYgdmFsdWUgPD0gMzY2O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID49IDEgJiYgdmFsdWUgPD0gMzY1O1xuICAgICAgfVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAoZGF0ZSwgX2ZsYWdzLCB2YWx1ZSwgX29wdGlvbnMpIHtcbiAgICAgIGRhdGUuc2V0VVRDTW9udGgoMCwgdmFsdWUpO1xuICAgICAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgIHJldHVybiBkYXRlO1xuICAgIH0sXG4gICAgaW5jb21wYXRpYmxlVG9rZW5zOiBbJ1knLCAnUicsICdxJywgJ1EnLCAnTScsICdMJywgJ3cnLCAnSScsICdkJywgJ0UnLCAnaScsICdlJywgJ2MnLCAndCcsICdUJ11cbiAgfSxcbiAgLy8gRGF5IG9mIHdlZWtcbiAgRToge1xuICAgIHByaW9yaXR5OiA5MCxcbiAgICBwYXJzZTogZnVuY3Rpb24gKHN0cmluZywgdG9rZW4sIG1hdGNoLCBfb3B0aW9ucykge1xuICAgICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgICAvLyBUdWVcbiAgICAgICAgY2FzZSAnRSc6XG4gICAgICAgIGNhc2UgJ0VFJzpcbiAgICAgICAgY2FzZSAnRUVFJzpcbiAgICAgICAgICByZXR1cm4gbWF0Y2guZGF5KHN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KSB8fCBtYXRjaC5kYXkoc3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICAgIH0pIHx8IG1hdGNoLmRheShzdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICAgIH0pO1xuICAgICAgICAvLyBUXG5cbiAgICAgICAgY2FzZSAnRUVFRUUnOlxuICAgICAgICAgIHJldHVybiBtYXRjaC5kYXkoc3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KTtcbiAgICAgICAgLy8gVHVcblxuICAgICAgICBjYXNlICdFRUVFRUUnOlxuICAgICAgICAgIHJldHVybiBtYXRjaC5kYXkoc3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICAgIH0pIHx8IG1hdGNoLmRheShzdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICAgIH0pO1xuICAgICAgICAvLyBUdWVzZGF5XG5cbiAgICAgICAgY2FzZSAnRUVFRSc6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLmRheShzdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KSB8fCBtYXRjaC5kYXkoc3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICAgIH0pIHx8IG1hdGNoLmRheShzdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgICAgfSkgfHwgbWF0Y2guZGF5KHN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24gKF9kYXRlLCB2YWx1ZSwgX29wdGlvbnMpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA+PSAwICYmIHZhbHVlIDw9IDY7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIChkYXRlLCBfZmxhZ3MsIHZhbHVlLCBvcHRpb25zKSB7XG4gICAgICBkYXRlID0gc2V0VVRDRGF5KGRhdGUsIHZhbHVlLCBvcHRpb25zKTtcbiAgICAgIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICByZXR1cm4gZGF0ZTtcbiAgICB9LFxuICAgIGluY29tcGF0aWJsZVRva2VuczogWydEJywgJ2knLCAnZScsICdjJywgJ3QnLCAnVCddXG4gIH0sXG4gIC8vIExvY2FsIGRheSBvZiB3ZWVrXG4gIGU6IHtcbiAgICBwcmlvcml0eTogOTAsXG4gICAgcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcsIHRva2VuLCBtYXRjaCwgb3B0aW9ucykge1xuICAgICAgdmFyIHZhbHVlQ2FsbGJhY2sgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIHdob2xlV2Vla0RheXMgPSBNYXRoLmZsb29yKCh2YWx1ZSAtIDEpIC8gNykgKiA3O1xuICAgICAgICByZXR1cm4gKHZhbHVlICsgb3B0aW9ucy53ZWVrU3RhcnRzT24gKyA2KSAlIDcgKyB3aG9sZVdlZWtEYXlzO1xuICAgICAgfTtcblxuICAgICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgICAvLyAzXG4gICAgICAgIGNhc2UgJ2UnOlxuICAgICAgICBjYXNlICdlZSc6XG4gICAgICAgICAgLy8gMDNcbiAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgc3RyaW5nLCB2YWx1ZUNhbGxiYWNrKTtcbiAgICAgICAgLy8gM3JkXG5cbiAgICAgICAgY2FzZSAnZW8nOlxuICAgICAgICAgIHJldHVybiBtYXRjaC5vcmRpbmFsTnVtYmVyKHN0cmluZywge1xuICAgICAgICAgICAgdW5pdDogJ2RheScsXG4gICAgICAgICAgICB2YWx1ZUNhbGxiYWNrOiB2YWx1ZUNhbGxiYWNrXG4gICAgICAgICAgfSk7XG4gICAgICAgIC8vIFR1ZVxuXG4gICAgICAgIGNhc2UgJ2VlZSc6XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLmRheShzdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgICAgfSkgfHwgbWF0Y2guZGF5KHN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICdzaG9ydCcsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KSB8fCBtYXRjaC5kYXkoc3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KTtcbiAgICAgICAgLy8gVFxuXG4gICAgICAgIGNhc2UgJ2VlZWVlJzpcbiAgICAgICAgICByZXR1cm4gbWF0Y2guZGF5KHN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgICAgfSk7XG4gICAgICAgIC8vIFR1XG5cbiAgICAgICAgY2FzZSAnZWVlZWVlJzpcbiAgICAgICAgICByZXR1cm4gbWF0Y2guZGF5KHN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICdzaG9ydCcsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KSB8fCBtYXRjaC5kYXkoc3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KTtcbiAgICAgICAgLy8gVHVlc2RheVxuXG4gICAgICAgIGNhc2UgJ2VlZWUnOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBtYXRjaC5kYXkoc3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgICAgfSkgfHwgbWF0Y2guZGF5KHN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KSB8fCBtYXRjaC5kYXkoc3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICAgIH0pIHx8IG1hdGNoLmRheShzdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uIChfZGF0ZSwgdmFsdWUsIF9vcHRpb25zKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPj0gMCAmJiB2YWx1ZSA8PSA2O1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAoZGF0ZSwgX2ZsYWdzLCB2YWx1ZSwgb3B0aW9ucykge1xuICAgICAgZGF0ZSA9IHNldFVUQ0RheShkYXRlLCB2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfSxcbiAgICBpbmNvbXBhdGlibGVUb2tlbnM6IFsneScsICdSJywgJ3UnLCAncScsICdRJywgJ00nLCAnTCcsICdJJywgJ2QnLCAnRCcsICdFJywgJ2knLCAnYycsICd0JywgJ1QnXVxuICB9LFxuICAvLyBTdGFuZC1hbG9uZSBsb2NhbCBkYXkgb2Ygd2Vla1xuICBjOiB7XG4gICAgcHJpb3JpdHk6IDkwLFxuICAgIHBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nLCB0b2tlbiwgbWF0Y2gsIG9wdGlvbnMpIHtcbiAgICAgIHZhciB2YWx1ZUNhbGxiYWNrID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciB3aG9sZVdlZWtEYXlzID0gTWF0aC5mbG9vcigodmFsdWUgLSAxKSAvIDcpICogNztcbiAgICAgICAgcmV0dXJuICh2YWx1ZSArIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgNikgJSA3ICsgd2hvbGVXZWVrRGF5cztcbiAgICAgIH07XG5cbiAgICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgICAgLy8gM1xuICAgICAgICBjYXNlICdjJzpcbiAgICAgICAgY2FzZSAnY2MnOlxuICAgICAgICAgIC8vIDAzXG4gICAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIHN0cmluZywgdmFsdWVDYWxsYmFjayk7XG4gICAgICAgIC8vIDNyZFxuXG4gICAgICAgIGNhc2UgJ2NvJzpcbiAgICAgICAgICByZXR1cm4gbWF0Y2gub3JkaW5hbE51bWJlcihzdHJpbmcsIHtcbiAgICAgICAgICAgIHVuaXQ6ICdkYXknLFxuICAgICAgICAgICAgdmFsdWVDYWxsYmFjazogdmFsdWVDYWxsYmFja1xuICAgICAgICAgIH0pO1xuICAgICAgICAvLyBUdWVcblxuICAgICAgICBjYXNlICdjY2MnOlxuICAgICAgICAgIHJldHVybiBtYXRjaC5kYXkoc3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgIH0pIHx8IG1hdGNoLmRheShzdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgfSkgfHwgbWF0Y2guZGF5KHN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgfSk7XG4gICAgICAgIC8vIFRcblxuICAgICAgICBjYXNlICdjY2NjYyc6XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLmRheShzdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgIH0pO1xuICAgICAgICAvLyBUdVxuXG4gICAgICAgIGNhc2UgJ2NjY2NjYyc6XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLmRheShzdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgfSkgfHwgbWF0Y2guZGF5KHN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgfSk7XG4gICAgICAgIC8vIFR1ZXNkYXlcblxuICAgICAgICBjYXNlICdjY2NjJzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gbWF0Y2guZGF5KHN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgIH0pIHx8IG1hdGNoLmRheShzdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgfSkgfHwgbWF0Y2guZGF5KHN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICdzaG9ydCcsXG4gICAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgICB9KSB8fCBtYXRjaC5kYXkoc3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbiAoX2RhdGUsIHZhbHVlLCBfb3B0aW9ucykge1xuICAgICAgcmV0dXJuIHZhbHVlID49IDAgJiYgdmFsdWUgPD0gNjtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKGRhdGUsIF9mbGFncywgdmFsdWUsIG9wdGlvbnMpIHtcbiAgICAgIGRhdGUgPSBzZXRVVENEYXkoZGF0ZSwgdmFsdWUsIG9wdGlvbnMpO1xuICAgICAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgIHJldHVybiBkYXRlO1xuICAgIH0sXG4gICAgaW5jb21wYXRpYmxlVG9rZW5zOiBbJ3knLCAnUicsICd1JywgJ3EnLCAnUScsICdNJywgJ0wnLCAnSScsICdkJywgJ0QnLCAnRScsICdpJywgJ2UnLCAndCcsICdUJ11cbiAgfSxcbiAgLy8gSVNPIGRheSBvZiB3ZWVrXG4gIGk6IHtcbiAgICBwcmlvcml0eTogOTAsXG4gICAgcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcsIHRva2VuLCBtYXRjaCwgX29wdGlvbnMpIHtcbiAgICAgIHZhciB2YWx1ZUNhbGxiYWNrID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiA3O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfTtcblxuICAgICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgICAvLyAyXG4gICAgICAgIGNhc2UgJ2knOlxuICAgICAgICBjYXNlICdpaSc6XG4gICAgICAgICAgLy8gMDJcbiAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgc3RyaW5nKTtcbiAgICAgICAgLy8gMm5kXG5cbiAgICAgICAgY2FzZSAnaW8nOlxuICAgICAgICAgIHJldHVybiBtYXRjaC5vcmRpbmFsTnVtYmVyKHN0cmluZywge1xuICAgICAgICAgICAgdW5pdDogJ2RheSdcbiAgICAgICAgICB9KTtcbiAgICAgICAgLy8gVHVlXG5cbiAgICAgICAgY2FzZSAnaWlpJzpcbiAgICAgICAgICByZXR1cm4gbWF0Y2guZGF5KHN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZycsXG4gICAgICAgICAgICB2YWx1ZUNhbGxiYWNrOiB2YWx1ZUNhbGxiYWNrXG4gICAgICAgICAgfSkgfHwgbWF0Y2guZGF5KHN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICdzaG9ydCcsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZycsXG4gICAgICAgICAgICB2YWx1ZUNhbGxiYWNrOiB2YWx1ZUNhbGxiYWNrXG4gICAgICAgICAgfSkgfHwgbWF0Y2guZGF5KHN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnLFxuICAgICAgICAgICAgdmFsdWVDYWxsYmFjazogdmFsdWVDYWxsYmFja1xuICAgICAgICAgIH0pO1xuICAgICAgICAvLyBUXG5cbiAgICAgICAgY2FzZSAnaWlpaWknOlxuICAgICAgICAgIHJldHVybiBtYXRjaC5kYXkoc3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZycsXG4gICAgICAgICAgICB2YWx1ZUNhbGxiYWNrOiB2YWx1ZUNhbGxiYWNrXG4gICAgICAgICAgfSk7XG4gICAgICAgIC8vIFR1XG5cbiAgICAgICAgY2FzZSAnaWlpaWlpJzpcbiAgICAgICAgICByZXR1cm4gbWF0Y2guZGF5KHN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICdzaG9ydCcsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZycsXG4gICAgICAgICAgICB2YWx1ZUNhbGxiYWNrOiB2YWx1ZUNhbGxiYWNrXG4gICAgICAgICAgfSkgfHwgbWF0Y2guZGF5KHN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnLFxuICAgICAgICAgICAgdmFsdWVDYWxsYmFjazogdmFsdWVDYWxsYmFja1xuICAgICAgICAgIH0pO1xuICAgICAgICAvLyBUdWVzZGF5XG5cbiAgICAgICAgY2FzZSAnaWlpaSc6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLmRheShzdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZycsXG4gICAgICAgICAgICB2YWx1ZUNhbGxiYWNrOiB2YWx1ZUNhbGxiYWNrXG4gICAgICAgICAgfSkgfHwgbWF0Y2guZGF5KHN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZycsXG4gICAgICAgICAgICB2YWx1ZUNhbGxiYWNrOiB2YWx1ZUNhbGxiYWNrXG4gICAgICAgICAgfSkgfHwgbWF0Y2guZGF5KHN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICdzaG9ydCcsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZycsXG4gICAgICAgICAgICB2YWx1ZUNhbGxiYWNrOiB2YWx1ZUNhbGxiYWNrXG4gICAgICAgICAgfSkgfHwgbWF0Y2guZGF5KHN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnLFxuICAgICAgICAgICAgdmFsdWVDYWxsYmFjazogdmFsdWVDYWxsYmFja1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uIChfZGF0ZSwgdmFsdWUsIF9vcHRpb25zKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPj0gMSAmJiB2YWx1ZSA8PSA3O1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAoZGF0ZSwgX2ZsYWdzLCB2YWx1ZSwgb3B0aW9ucykge1xuICAgICAgZGF0ZSA9IHNldFVUQ0lTT0RheShkYXRlLCB2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfSxcbiAgICBpbmNvbXBhdGlibGVUb2tlbnM6IFsneScsICdZJywgJ3UnLCAncScsICdRJywgJ00nLCAnTCcsICd3JywgJ2QnLCAnRCcsICdFJywgJ2UnLCAnYycsICd0JywgJ1QnXVxuICB9LFxuICAvLyBBTSBvciBQTVxuICBhOiB7XG4gICAgcHJpb3JpdHk6IDgwLFxuICAgIHBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nLCB0b2tlbiwgbWF0Y2gsIF9vcHRpb25zKSB7XG4gICAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAgIGNhc2UgJ2EnOlxuICAgICAgICBjYXNlICdhYSc6XG4gICAgICAgIGNhc2UgJ2FhYSc6XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLmRheVBlcmlvZChzdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgICAgfSkgfHwgbWF0Y2guZGF5UGVyaW9kKHN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgY2FzZSAnYWFhYWEnOlxuICAgICAgICAgIHJldHVybiBtYXRjaC5kYXlQZXJpb2Qoc3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KTtcblxuICAgICAgICBjYXNlICdhYWFhJzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gbWF0Y2guZGF5UGVyaW9kKHN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICAgIH0pIHx8IG1hdGNoLmRheVBlcmlvZChzdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgICAgfSkgfHwgbWF0Y2guZGF5UGVyaW9kKHN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIChkYXRlLCBfZmxhZ3MsIHZhbHVlLCBfb3B0aW9ucykge1xuICAgICAgZGF0ZS5zZXRVVENIb3VycyhkYXlQZXJpb2RFbnVtVG9Ib3Vycyh2YWx1ZSksIDAsIDAsIDApO1xuICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfSxcbiAgICBpbmNvbXBhdGlibGVUb2tlbnM6IFsnYicsICdCJywgJ0gnLCAnSycsICdrJywgJ3QnLCAnVCddXG4gIH0sXG4gIC8vIEFNLCBQTSwgbWlkbmlnaHRcbiAgYjoge1xuICAgIHByaW9yaXR5OiA4MCxcbiAgICBwYXJzZTogZnVuY3Rpb24gKHN0cmluZywgdG9rZW4sIG1hdGNoLCBfb3B0aW9ucykge1xuICAgICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgY2FzZSAnYmInOlxuICAgICAgICBjYXNlICdiYmInOlxuICAgICAgICAgIHJldHVybiBtYXRjaC5kYXlQZXJpb2Qoc3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICAgIH0pIHx8IG1hdGNoLmRheVBlcmlvZChzdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNhc2UgJ2JiYmJiJzpcbiAgICAgICAgICByZXR1cm4gbWF0Y2guZGF5UGVyaW9kKHN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgY2FzZSAnYmJiYic6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLmRheVBlcmlvZChzdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KSB8fCBtYXRjaC5kYXlQZXJpb2Qoc3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICAgIH0pIHx8IG1hdGNoLmRheVBlcmlvZChzdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAoZGF0ZSwgX2ZsYWdzLCB2YWx1ZSwgX29wdGlvbnMpIHtcbiAgICAgIGRhdGUuc2V0VVRDSG91cnMoZGF5UGVyaW9kRW51bVRvSG91cnModmFsdWUpLCAwLCAwLCAwKTtcbiAgICAgIHJldHVybiBkYXRlO1xuICAgIH0sXG4gICAgaW5jb21wYXRpYmxlVG9rZW5zOiBbJ2EnLCAnQicsICdIJywgJ0snLCAnaycsICd0JywgJ1QnXVxuICB9LFxuICAvLyBpbiB0aGUgbW9ybmluZywgaW4gdGhlIGFmdGVybm9vbiwgaW4gdGhlIGV2ZW5pbmcsIGF0IG5pZ2h0XG4gIEI6IHtcbiAgICBwcmlvcml0eTogODAsXG4gICAgcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcsIHRva2VuLCBtYXRjaCwgX29wdGlvbnMpIHtcbiAgICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgICAgY2FzZSAnQic6XG4gICAgICAgIGNhc2UgJ0JCJzpcbiAgICAgICAgY2FzZSAnQkJCJzpcbiAgICAgICAgICByZXR1cm4gbWF0Y2guZGF5UGVyaW9kKHN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KSB8fCBtYXRjaC5kYXlQZXJpb2Qoc3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KTtcblxuICAgICAgICBjYXNlICdCQkJCQic6XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLmRheVBlcmlvZChzdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNhc2UgJ0JCQkInOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBtYXRjaC5kYXlQZXJpb2Qoc3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgICAgfSkgfHwgbWF0Y2guZGF5UGVyaW9kKHN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KSB8fCBtYXRjaC5kYXlQZXJpb2Qoc3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKGRhdGUsIF9mbGFncywgdmFsdWUsIF9vcHRpb25zKSB7XG4gICAgICBkYXRlLnNldFVUQ0hvdXJzKGRheVBlcmlvZEVudW1Ub0hvdXJzKHZhbHVlKSwgMCwgMCwgMCk7XG4gICAgICByZXR1cm4gZGF0ZTtcbiAgICB9LFxuICAgIGluY29tcGF0aWJsZVRva2VuczogWydhJywgJ2InLCAndCcsICdUJ11cbiAgfSxcbiAgLy8gSG91ciBbMS0xMl1cbiAgaDoge1xuICAgIHByaW9yaXR5OiA3MCxcbiAgICBwYXJzZTogZnVuY3Rpb24gKHN0cmluZywgdG9rZW4sIG1hdGNoLCBfb3B0aW9ucykge1xuICAgICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgICBjYXNlICdoJzpcbiAgICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuaG91cjEyaCwgc3RyaW5nKTtcblxuICAgICAgICBjYXNlICdobyc6XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLm9yZGluYWxOdW1iZXIoc3RyaW5nLCB7XG4gICAgICAgICAgICB1bml0OiAnaG91cidcbiAgICAgICAgICB9KTtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBzdHJpbmcpO1xuICAgICAgfVxuICAgIH0sXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uIChfZGF0ZSwgdmFsdWUsIF9vcHRpb25zKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPj0gMSAmJiB2YWx1ZSA8PSAxMjtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKGRhdGUsIF9mbGFncywgdmFsdWUsIF9vcHRpb25zKSB7XG4gICAgICB2YXIgaXNQTSA9IGRhdGUuZ2V0VVRDSG91cnMoKSA+PSAxMjtcblxuICAgICAgaWYgKGlzUE0gJiYgdmFsdWUgPCAxMikge1xuICAgICAgICBkYXRlLnNldFVUQ0hvdXJzKHZhbHVlICsgMTIsIDAsIDAsIDApO1xuICAgICAgfSBlbHNlIGlmICghaXNQTSAmJiB2YWx1ZSA9PT0gMTIpIHtcbiAgICAgICAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGUuc2V0VVRDSG91cnModmFsdWUsIDAsIDAsIDApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGF0ZTtcbiAgICB9LFxuICAgIGluY29tcGF0aWJsZVRva2VuczogWydIJywgJ0snLCAnaycsICd0JywgJ1QnXVxuICB9LFxuICAvLyBIb3VyIFswLTIzXVxuICBIOiB7XG4gICAgcHJpb3JpdHk6IDcwLFxuICAgIHBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nLCB0b2tlbiwgbWF0Y2gsIF9vcHRpb25zKSB7XG4gICAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAgIGNhc2UgJ0gnOlxuICAgICAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5ob3VyMjNoLCBzdHJpbmcpO1xuXG4gICAgICAgIGNhc2UgJ0hvJzpcbiAgICAgICAgICByZXR1cm4gbWF0Y2gub3JkaW5hbE51bWJlcihzdHJpbmcsIHtcbiAgICAgICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIHN0cmluZyk7XG4gICAgICB9XG4gICAgfSxcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24gKF9kYXRlLCB2YWx1ZSwgX29wdGlvbnMpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA+PSAwICYmIHZhbHVlIDw9IDIzO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAoZGF0ZSwgX2ZsYWdzLCB2YWx1ZSwgX29wdGlvbnMpIHtcbiAgICAgIGRhdGUuc2V0VVRDSG91cnModmFsdWUsIDAsIDAsIDApO1xuICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfSxcbiAgICBpbmNvbXBhdGlibGVUb2tlbnM6IFsnYScsICdiJywgJ2gnLCAnSycsICdrJywgJ3QnLCAnVCddXG4gIH0sXG4gIC8vIEhvdXIgWzAtMTFdXG4gIEs6IHtcbiAgICBwcmlvcml0eTogNzAsXG4gICAgcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcsIHRva2VuLCBtYXRjaCwgX29wdGlvbnMpIHtcbiAgICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgICAgY2FzZSAnSyc6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLmhvdXIxMWgsIHN0cmluZyk7XG5cbiAgICAgICAgY2FzZSAnS28nOlxuICAgICAgICAgIHJldHVybiBtYXRjaC5vcmRpbmFsTnVtYmVyKHN0cmluZywge1xuICAgICAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgc3RyaW5nKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbiAoX2RhdGUsIHZhbHVlLCBfb3B0aW9ucykge1xuICAgICAgcmV0dXJuIHZhbHVlID49IDAgJiYgdmFsdWUgPD0gMTE7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIChkYXRlLCBfZmxhZ3MsIHZhbHVlLCBfb3B0aW9ucykge1xuICAgICAgdmFyIGlzUE0gPSBkYXRlLmdldFVUQ0hvdXJzKCkgPj0gMTI7XG5cbiAgICAgIGlmIChpc1BNICYmIHZhbHVlIDwgMTIpIHtcbiAgICAgICAgZGF0ZS5zZXRVVENIb3Vycyh2YWx1ZSArIDEyLCAwLCAwLCAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGUuc2V0VVRDSG91cnModmFsdWUsIDAsIDAsIDApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGF0ZTtcbiAgICB9LFxuICAgIGluY29tcGF0aWJsZVRva2VuczogWydhJywgJ2InLCAnaCcsICdIJywgJ2snLCAndCcsICdUJ11cbiAgfSxcbiAgLy8gSG91ciBbMS0yNF1cbiAgazoge1xuICAgIHByaW9yaXR5OiA3MCxcbiAgICBwYXJzZTogZnVuY3Rpb24gKHN0cmluZywgdG9rZW4sIG1hdGNoLCBfb3B0aW9ucykge1xuICAgICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgICBjYXNlICdrJzpcbiAgICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuaG91cjI0aCwgc3RyaW5nKTtcblxuICAgICAgICBjYXNlICdrbyc6XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLm9yZGluYWxOdW1iZXIoc3RyaW5nLCB7XG4gICAgICAgICAgICB1bml0OiAnaG91cidcbiAgICAgICAgICB9KTtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBzdHJpbmcpO1xuICAgICAgfVxuICAgIH0sXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uIChfZGF0ZSwgdmFsdWUsIF9vcHRpb25zKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPj0gMSAmJiB2YWx1ZSA8PSAyNDtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKGRhdGUsIF9mbGFncywgdmFsdWUsIF9vcHRpb25zKSB7XG4gICAgICB2YXIgaG91cnMgPSB2YWx1ZSA8PSAyNCA/IHZhbHVlICUgMjQgOiB2YWx1ZTtcbiAgICAgIGRhdGUuc2V0VVRDSG91cnMoaG91cnMsIDAsIDAsIDApO1xuICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfSxcbiAgICBpbmNvbXBhdGlibGVUb2tlbnM6IFsnYScsICdiJywgJ2gnLCAnSCcsICdLJywgJ3QnLCAnVCddXG4gIH0sXG4gIC8vIE1pbnV0ZVxuICBtOiB7XG4gICAgcHJpb3JpdHk6IDYwLFxuICAgIHBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nLCB0b2tlbiwgbWF0Y2gsIF9vcHRpb25zKSB7XG4gICAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5taW51dGUsIHN0cmluZyk7XG5cbiAgICAgICAgY2FzZSAnbW8nOlxuICAgICAgICAgIHJldHVybiBtYXRjaC5vcmRpbmFsTnVtYmVyKHN0cmluZywge1xuICAgICAgICAgICAgdW5pdDogJ21pbnV0ZSdcbiAgICAgICAgICB9KTtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBzdHJpbmcpO1xuICAgICAgfVxuICAgIH0sXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uIChfZGF0ZSwgdmFsdWUsIF9vcHRpb25zKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPj0gMCAmJiB2YWx1ZSA8PSA1OTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKGRhdGUsIF9mbGFncywgdmFsdWUsIF9vcHRpb25zKSB7XG4gICAgICBkYXRlLnNldFVUQ01pbnV0ZXModmFsdWUsIDAsIDApO1xuICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfSxcbiAgICBpbmNvbXBhdGlibGVUb2tlbnM6IFsndCcsICdUJ11cbiAgfSxcbiAgLy8gU2Vjb25kXG4gIHM6IHtcbiAgICBwcmlvcml0eTogNTAsXG4gICAgcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcsIHRva2VuLCBtYXRjaCwgX29wdGlvbnMpIHtcbiAgICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLnNlY29uZCwgc3RyaW5nKTtcblxuICAgICAgICBjYXNlICdzbyc6XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLm9yZGluYWxOdW1iZXIoc3RyaW5nLCB7XG4gICAgICAgICAgICB1bml0OiAnc2Vjb25kJ1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIHN0cmluZyk7XG4gICAgICB9XG4gICAgfSxcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24gKF9kYXRlLCB2YWx1ZSwgX29wdGlvbnMpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA+PSAwICYmIHZhbHVlIDw9IDU5O1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAoZGF0ZSwgX2ZsYWdzLCB2YWx1ZSwgX29wdGlvbnMpIHtcbiAgICAgIGRhdGUuc2V0VVRDU2Vjb25kcyh2YWx1ZSwgMCk7XG4gICAgICByZXR1cm4gZGF0ZTtcbiAgICB9LFxuICAgIGluY29tcGF0aWJsZVRva2VuczogWyd0JywgJ1QnXVxuICB9LFxuICAvLyBGcmFjdGlvbiBvZiBzZWNvbmRcbiAgUzoge1xuICAgIHByaW9yaXR5OiAzMCxcbiAgICBwYXJzZTogZnVuY3Rpb24gKHN0cmluZywgdG9rZW4sIF9tYXRjaCwgX29wdGlvbnMpIHtcbiAgICAgIHZhciB2YWx1ZUNhbGxiYWNrID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHZhbHVlICogTWF0aC5wb3coMTAsIC10b2tlbi5sZW5ndGggKyAzKSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gcGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgc3RyaW5nLCB2YWx1ZUNhbGxiYWNrKTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKGRhdGUsIF9mbGFncywgdmFsdWUsIF9vcHRpb25zKSB7XG4gICAgICBkYXRlLnNldFVUQ01pbGxpc2Vjb25kcyh2YWx1ZSk7XG4gICAgICByZXR1cm4gZGF0ZTtcbiAgICB9LFxuICAgIGluY29tcGF0aWJsZVRva2VuczogWyd0JywgJ1QnXVxuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuICswMDowMCBpcyBgJ1onYClcbiAgWDoge1xuICAgIHByaW9yaXR5OiAxMCxcbiAgICBwYXJzZTogZnVuY3Rpb24gKHN0cmluZywgdG9rZW4sIF9tYXRjaCwgX29wdGlvbnMpIHtcbiAgICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgICAgY2FzZSAnWCc6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlVGltZXpvbmVQYXR0ZXJuKHRpbWV6b25lUGF0dGVybnMuYmFzaWNPcHRpb25hbE1pbnV0ZXMsIHN0cmluZyk7XG5cbiAgICAgICAgY2FzZSAnWFgnOlxuICAgICAgICAgIHJldHVybiBwYXJzZVRpbWV6b25lUGF0dGVybih0aW1lem9uZVBhdHRlcm5zLmJhc2ljLCBzdHJpbmcpO1xuXG4gICAgICAgIGNhc2UgJ1hYWFgnOlxuICAgICAgICAgIHJldHVybiBwYXJzZVRpbWV6b25lUGF0dGVybih0aW1lem9uZVBhdHRlcm5zLmJhc2ljT3B0aW9uYWxTZWNvbmRzLCBzdHJpbmcpO1xuXG4gICAgICAgIGNhc2UgJ1hYWFhYJzpcbiAgICAgICAgICByZXR1cm4gcGFyc2VUaW1lem9uZVBhdHRlcm4odGltZXpvbmVQYXR0ZXJucy5leHRlbmRlZE9wdGlvbmFsU2Vjb25kcywgc3RyaW5nKTtcblxuICAgICAgICBjYXNlICdYWFgnOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBwYXJzZVRpbWV6b25lUGF0dGVybih0aW1lem9uZVBhdHRlcm5zLmV4dGVuZGVkLCBzdHJpbmcpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAoZGF0ZSwgZmxhZ3MsIHZhbHVlLCBfb3B0aW9ucykge1xuICAgICAgaWYgKGZsYWdzLnRpbWVzdGFtcElzU2V0KSB7XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkgLSB2YWx1ZSk7XG4gICAgfSxcbiAgICBpbmNvbXBhdGlibGVUb2tlbnM6IFsndCcsICdUJywgJ3gnXVxuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEpXG4gIHg6IHtcbiAgICBwcmlvcml0eTogMTAsXG4gICAgcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcsIHRva2VuLCBfbWF0Y2gsIF9vcHRpb25zKSB7XG4gICAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAgIGNhc2UgJ3gnOlxuICAgICAgICAgIHJldHVybiBwYXJzZVRpbWV6b25lUGF0dGVybih0aW1lem9uZVBhdHRlcm5zLmJhc2ljT3B0aW9uYWxNaW51dGVzLCBzdHJpbmcpO1xuXG4gICAgICAgIGNhc2UgJ3h4JzpcbiAgICAgICAgICByZXR1cm4gcGFyc2VUaW1lem9uZVBhdHRlcm4odGltZXpvbmVQYXR0ZXJucy5iYXNpYywgc3RyaW5nKTtcblxuICAgICAgICBjYXNlICd4eHh4JzpcbiAgICAgICAgICByZXR1cm4gcGFyc2VUaW1lem9uZVBhdHRlcm4odGltZXpvbmVQYXR0ZXJucy5iYXNpY09wdGlvbmFsU2Vjb25kcywgc3RyaW5nKTtcblxuICAgICAgICBjYXNlICd4eHh4eCc6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlVGltZXpvbmVQYXR0ZXJuKHRpbWV6b25lUGF0dGVybnMuZXh0ZW5kZWRPcHRpb25hbFNlY29uZHMsIHN0cmluZyk7XG5cbiAgICAgICAgY2FzZSAneHh4JzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gcGFyc2VUaW1lem9uZVBhdHRlcm4odGltZXpvbmVQYXR0ZXJucy5leHRlbmRlZCwgc3RyaW5nKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKGRhdGUsIGZsYWdzLCB2YWx1ZSwgX29wdGlvbnMpIHtcbiAgICAgIGlmIChmbGFncy50aW1lc3RhbXBJc1NldCkge1xuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpIC0gdmFsdWUpO1xuICAgIH0sXG4gICAgaW5jb21wYXRpYmxlVG9rZW5zOiBbJ3QnLCAnVCcsICdYJ11cbiAgfSxcbiAgLy8gU2Vjb25kcyB0aW1lc3RhbXBcbiAgdDoge1xuICAgIHByaW9yaXR5OiA0MCxcbiAgICBwYXJzZTogZnVuY3Rpb24gKHN0cmluZywgX3Rva2VuLCBfbWF0Y2gsIF9vcHRpb25zKSB7XG4gICAgICByZXR1cm4gcGFyc2VBbnlEaWdpdHNTaWduZWQoc3RyaW5nKTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKF9kYXRlLCBfZmxhZ3MsIHZhbHVlLCBfb3B0aW9ucykge1xuICAgICAgcmV0dXJuIFtuZXcgRGF0ZSh2YWx1ZSAqIDEwMDApLCB7XG4gICAgICAgIHRpbWVzdGFtcElzU2V0OiB0cnVlXG4gICAgICB9XTtcbiAgICB9LFxuICAgIGluY29tcGF0aWJsZVRva2VuczogJyonXG4gIH0sXG4gIC8vIE1pbGxpc2Vjb25kcyB0aW1lc3RhbXBcbiAgVDoge1xuICAgIHByaW9yaXR5OiAyMCxcbiAgICBwYXJzZTogZnVuY3Rpb24gKHN0cmluZywgX3Rva2VuLCBfbWF0Y2gsIF9vcHRpb25zKSB7XG4gICAgICByZXR1cm4gcGFyc2VBbnlEaWdpdHNTaWduZWQoc3RyaW5nKTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKF9kYXRlLCBfZmxhZ3MsIHZhbHVlLCBfb3B0aW9ucykge1xuICAgICAgcmV0dXJuIFtuZXcgRGF0ZSh2YWx1ZSksIHtcbiAgICAgICAgdGltZXN0YW1wSXNTZXQ6IHRydWVcbiAgICAgIH1dO1xuICAgIH0sXG4gICAgaW5jb21wYXRpYmxlVG9rZW5zOiAnKidcbiAgfVxufTtcblxudmFyIFRJTUVaT05FX1VOSVRfUFJJT1JJVFkgPSAxMDsgLy8gVGhpcyBSZWdFeHAgY29uc2lzdHMgb2YgdGhyZWUgcGFydHMgc2VwYXJhdGVkIGJ5IGB8YDpcbi8vIC0gW3lZUXFNTHdJZERlY2loSEtrbXNdbyBtYXRjaGVzIGFueSBhdmFpbGFibGUgb3JkaW5hbCBudW1iZXIgdG9rZW5cbi8vICAgKG9uZSBvZiB0aGUgY2VydGFpbiBsZXR0ZXJzIGZvbGxvd2VkIGJ5IGBvYClcbi8vIC0gKFxcdylcXDEqIG1hdGNoZXMgYW55IHNlcXVlbmNlcyBvZiB0aGUgc2FtZSBsZXR0ZXJcbi8vIC0gJycgbWF0Y2hlcyB0d28gcXVvdGUgY2hhcmFjdGVycyBpbiBhIHJvd1xuLy8gLSAnKCcnfFteJ10pKygnfCQpIG1hdGNoZXMgYW55dGhpbmcgc3Vycm91bmRlZCBieSB0d28gcXVvdGUgY2hhcmFjdGVycyAoJyksXG4vLyAgIGV4Y2VwdCBhIHNpbmdsZSBxdW90ZSBzeW1ib2wsIHdoaWNoIGVuZHMgdGhlIHNlcXVlbmNlLlxuLy8gICBUd28gcXVvdGUgY2hhcmFjdGVycyBkbyBub3QgZW5kIHRoZSBzZXF1ZW5jZS5cbi8vICAgSWYgdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc2luZ2xlIHF1b3RlXG4vLyAgIHRoZW4gdGhlIHNlcXVlbmNlIHdpbGwgY29udGludWUgdW50aWwgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLlxuLy8gLSAuIG1hdGNoZXMgYW55IHNpbmdsZSBjaGFyYWN0ZXIgdW5tYXRjaGVkIGJ5IHByZXZpb3VzIHBhcnRzIG9mIHRoZSBSZWdFeHBzXG5cbnZhciBmb3JtYXR0aW5nVG9rZW5zUmVnRXhwJDEgPSAvW3lZUXFNTHdJZERlY2loSEtrbXNdb3woXFx3KVxcMSp8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2c7IC8vIFRoaXMgUmVnRXhwIGNhdGNoZXMgc3ltYm9scyBlc2NhcGVkIGJ5IHF1b3RlcywgYW5kIGFsc29cbi8vIHNlcXVlbmNlcyBvZiBzeW1ib2xzIFAsIHAsIGFuZCB0aGUgY29tYmluYXRpb25zIGxpa2UgYFBQUFBQUFBwcHBwcGBcblxudmFyIGxvbmdGb3JtYXR0aW5nVG9rZW5zUmVnRXhwJDEgPSAvUCtwK3xQK3xwK3wnJ3wnKCcnfFteJ10pKygnfCQpfC4vZztcbnZhciBlc2NhcGVkU3RyaW5nUmVnRXhwJDEgPSAvXicoW15dKj8pJz8kLztcbnZhciBkb3VibGVRdW90ZVJlZ0V4cCQxID0gLycnL2c7XG52YXIgbm90V2hpdGVzcGFjZVJlZ0V4cCA9IC9cXFMvO1xudmFyIHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwJDEgPSAvW2EtekEtWl0vO1xuLyoqXG4gKiBAbmFtZSBwYXJzZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBQYXJzZSB0aGUgZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgZGF0ZSBwYXJzZWQgZnJvbSBzdHJpbmcgdXNpbmcgdGhlIGdpdmVuIGZvcm1hdCBzdHJpbmcuXG4gKlxuICogPiDimqDvuI8gUGxlYXNlIG5vdGUgdGhhdCB0aGUgYGZvcm1hdGAgdG9rZW5zIGRpZmZlciBmcm9tIE1vbWVudC5qcyBhbmQgb3RoZXIgbGlicmFyaWVzLlxuICogPiBTZWU6IGh0dHBzOi8vZ2l0LmlvL2Z4Q3lyXG4gKlxuICogVGhlIGNoYXJhY3RlcnMgaW4gdGhlIGZvcm1hdCBzdHJpbmcgd3JhcHBlZCBiZXR3ZWVuIHR3byBzaW5nbGUgcXVvdGVzIGNoYXJhY3RlcnMgKCcpIGFyZSBlc2NhcGVkLlxuICogVHdvIHNpbmdsZSBxdW90ZXMgaW4gYSByb3csIHdoZXRoZXIgaW5zaWRlIG9yIG91dHNpZGUgYSBxdW90ZWQgc2VxdWVuY2UsIHJlcHJlc2VudCBhICdyZWFsJyBzaW5nbGUgcXVvdGUuXG4gKlxuICogRm9ybWF0IG9mIHRoZSBmb3JtYXQgc3RyaW5nIGlzIGJhc2VkIG9uIFVuaWNvZGUgVGVjaG5pY2FsIFN0YW5kYXJkICMzNTpcbiAqIGh0dHBzOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LWRhdGVzLmh0bWwjRGF0ZV9GaWVsZF9TeW1ib2xfVGFibGVcbiAqIHdpdGggYSBmZXcgYWRkaXRpb25zIChzZWUgbm90ZSA1IGJlbG93IHRoZSB0YWJsZSkuXG4gKlxuICogTm90IGFsbCB0b2tlbnMgYXJlIGNvbXBhdGlibGUuIENvbWJpbmF0aW9ucyB0aGF0IGRvbid0IG1ha2Ugc2Vuc2Ugb3IgY291bGQgbGVhZCB0byBidWdzIGFyZSBwcm9oaWJpdGVkXG4gKiBhbmQgd2lsbCB0aHJvdyBgUmFuZ2VFcnJvcmAuIEZvciBleGFtcGxlIHVzYWdlIG9mIDI0LWhvdXIgZm9ybWF0IHRva2VuIHdpdGggQU0vUE0gdG9rZW4gd2lsbCB0aHJvdyBhbiBleGNlcHRpb246XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogcGFyc2UoJzIzIEFNJywgJ0hIIGEnLCBuZXcgRGF0ZSgpKVxuICogLy89PiBSYW5nZUVycm9yOiBUaGUgZm9ybWF0IHN0cmluZyBtdXN0bid0IGNvbnRhaW4gYEhIYCBhbmQgYGFgIGF0IHRoZSBzYW1lIHRpbWVcbiAqIGBgYFxuICpcbiAqIFNlZSB0aGUgY29tcGF0aWJpbGl0eSB0YWJsZTogaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vc3ByZWFkc2hlZXRzL2QvZS8yUEFDWC0xdlFPUFUzeFVocGxsbDZkeW9NbVZVWEhLbF84Q1JEczZfdWVMbWV4M1NvcXdodW9sa3VOM08wNWw0cnF4NWgxZEtYOGViNDZVbC1DQ1NycS9wdWJodG1sP2dpZD0wJnNpbmdsZT10cnVlXG4gKlxuICogQWNjZXB0ZWQgZm9ybWF0IHN0cmluZyBwYXR0ZXJuczpcbiAqIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8UHJpb3J8IFBhdHRlcm4gfCBSZXN1bHQgZXhhbXBsZXMgICAgICAgICAgICAgICAgICAgfCBOb3RlcyB8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tfFxuICogfCBFcmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTQwIHwgRy4uR0dHICB8IEFELCBCQyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IEdHR0cgICAgfCBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdCAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBHR0dHRyAgIHwgQSwgQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBDYWxlbmRhciB5ZWFyICAgICAgICAgICAgICAgICAgIHwgMTMwIHwgeSAgICAgICB8IDQ0LCAxLCAxOTAwLCAyMDE3LCA5OTk5ICAgICAgICAgICB8IDQgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IHlvICAgICAgfCA0NHRoLCAxc3QsIDE5MDB0aCwgOTk5OTk5OXRoICAgICAgfCA0LDUgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCB5eSAgICAgIHwgNDQsIDAxLCAwMCwgMTcgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgeXl5ICAgICB8IDA0NCwgMDAxLCAxMjMsIDk5OSAgICAgICAgICAgICAgICB8IDQgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IHl5eXkgICAgfCAwMDQ0LCAwMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgfCA0ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCB5eXl5eSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMiw0ICAgfFxuICogfCBMb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgIHwgMTMwIHwgWSAgICAgICB8IDQ0LCAxLCAxOTAwLCAyMDE3LCA5MDAwICAgICAgICAgICB8IDQgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFlvICAgICAgfCA0NHRoLCAxc3QsIDE5MDB0aCwgOTk5OTk5OXRoICAgICAgfCA0LDUgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBZWSAgICAgIHwgNDQsIDAxLCAwMCwgMTcgICAgICAgICAgICAgICAgICAgIHwgNCw2ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgWVlZICAgICB8IDA0NCwgMDAxLCAxMjMsIDk5OSAgICAgICAgICAgICAgICB8IDQgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFlZWVkgICAgfCAwMDQ0LCAwMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgfCA0LDYgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBZWVlZWSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMiw0ICAgfFxuICogfCBJU08gd2Vlay1udW1iZXJpbmcgeWVhciAgICAgICAgIHwgMTMwIHwgUiAgICAgICB8IC00MywgMSwgMTkwMCwgMjAxNywgOTk5OSwgLTk5OTkgICB8IDQsNSAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFJSICAgICAgfCAtNDMsIDAxLCAwMCwgMTcgICAgICAgICAgICAgICAgICAgfCA0LDUgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBSUlIgICAgIHwgLTA0MywgMDAxLCAxMjMsIDk5OSwgLTk5OSAgICAgICAgIHwgNCw1ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgUlJSUiAgICB8IC0wMDQzLCAwMDAxLCAyMDE3LCA5OTk5LCAtOTk5OSAgICB8IDQsNSAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFJSUlJSICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLDQsNSB8XG4gKiB8IEV4dGVuZGVkIHllYXIgICAgICAgICAgICAgICAgICAgfCAxMzAgfCB1ICAgICAgIHwgLTQzLCAxLCAxOTAwLCAyMDE3LCA5OTk5LCAtOTk5ICAgIHwgNCAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgdXUgICAgICB8IC00MywgMDEsIDk5LCAtOTkgICAgICAgICAgICAgICAgICB8IDQgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IHV1dSAgICAgfCAtMDQzLCAwMDEsIDEyMywgOTk5LCAtOTk5ICAgICAgICAgfCA0ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCB1dXV1ICAgIHwgLTAwNDMsIDAwMDEsIDIwMTcsIDk5OTksIC05OTk5ICAgIHwgNCAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgdXV1dXUgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIsNCAgIHxcbiAqIHwgUXVhcnRlciAoZm9ybWF0dGluZykgICAgICAgICAgICB8IDEyMCB8IFEgICAgICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBRbyAgICAgIHwgMXN0LCAybmQsIDNyZCwgNHRoICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgUVEgICAgICB8IDAxLCAwMiwgMDMsIDA0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFFRUSAgICAgfCBRMSwgUTIsIFEzLCBRNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBRUVFRICAgIHwgMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgUVFRUVEgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8IDQgICAgIHxcbiAqIHwgUXVhcnRlciAoc3RhbmQtYWxvbmUpICAgICAgICAgICB8IDEyMCB8IHEgICAgICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBxbyAgICAgIHwgMXN0LCAybmQsIDNyZCwgNHRoICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgcXEgICAgICB8IDAxLCAwMiwgMDMsIDA0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IHFxcSAgICAgfCBRMSwgUTIsIFEzLCBRNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBxcXFxICAgIHwgMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgcXFxcXEgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8IDMgICAgIHxcbiAqIHwgTW9udGggKGZvcm1hdHRpbmcpICAgICAgICAgICAgICB8IDExMCB8IE0gICAgICAgfCAxLCAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBNbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTJ0aCAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgTU0gICAgICB8IDAxLCAwMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IE1NTSAgICAgfCBKYW4sIEZlYiwgLi4uLCBEZWMgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBNTU1NICAgIHwgSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXIgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgTU1NTU0gICB8IEosIEYsIC4uLiwgRCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTW9udGggKHN0YW5kLWFsb25lKSAgICAgICAgICAgICB8IDExMCB8IEwgICAgICAgfCAxLCAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBMbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTJ0aCAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgTEwgICAgICB8IDAxLCAwMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IExMTCAgICAgfCBKYW4sIEZlYiwgLi4uLCBEZWMgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBMTExMICAgIHwgSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXIgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgTExMTEwgICB8IEosIEYsIC4uLiwgRCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTG9jYWwgd2VlayBvZiB5ZWFyICAgICAgICAgICAgICB8IDEwMCB8IHcgICAgICAgfCAxLCAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCB3byAgICAgIHwgMXN0LCAybmQsIC4uLiwgNTN0aCAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgd3cgICAgICB8IDAxLCAwMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSVNPIHdlZWsgb2YgeWVhciAgICAgICAgICAgICAgICB8IDEwMCB8IEkgICAgICAgfCAxLCAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBJbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgNTN0aCAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgSUkgICAgICB8IDAxLCAwMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgRGF5IG9mIG1vbnRoICAgICAgICAgICAgICAgICAgICB8ICA5MCB8IGQgICAgICAgfCAxLCAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBkbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMzFzdCAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgZGQgICAgICB8IDAxLCAwMiwgLi4uLCAzMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgRGF5IG9mIHllYXIgICAgICAgICAgICAgICAgICAgICB8ICA5MCB8IEQgICAgICAgfCAxLCAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBEbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMzY1dGgsIDM2NnRoICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgREQgICAgICB8IDAxLCAwMiwgLi4uLCAzNjUsIDM2NiAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IERERCAgICAgfCAwMDEsIDAwMiwgLi4uLCAzNjUsIDM2NiAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBEREREICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCBEYXkgb2Ygd2VlayAoZm9ybWF0dGluZykgICAgICAgIHwgIDkwIHwgRS4uRUVFICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IEVFRUUgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBFRUVFRSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgRUVFRUVFICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU3UsIFNhICAgICAgICB8ICAgICAgIHxcbiAqIHwgSVNPIGRheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICB8ICA5MCB8IGkgICAgICAgfCAxLCAyLCAzLCAuLi4sIDcgICAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBpbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgN3RoICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgaWkgICAgICB8IDAxLCAwMiwgLi4uLCAwNyAgICAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IGlpaSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBpaWlpICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiw1ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgaWlpaWkgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IGlpaWlpaSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFN1LCBTYSAgICAgICAgfCA1ICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgfCAgOTAgfCBlICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgZW8gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IGVlICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBlZWUgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgZWVlZSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IGVlZWVlICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBlZWVlZWUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTdSwgU2EgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCBkYXkgb2Ygd2VlayAoc3RhbmQtYWxvbmUpIHwgIDkwIHwgYyAgICAgICB8IDIsIDMsIDQsIC4uLiwgMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IGNvICAgICAgfCAybmQsIDNyZCwgLi4uLCAxc3QgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBjYyAgICAgIHwgMDIsIDAzLCAuLi4sIDAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgY2NjICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IGNjY2MgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBjY2NjYyAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgY2NjY2NjICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU3UsIFNhICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA4MCB8IGEuLmFhYSAgfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBhYWFhICAgIHwgYS5tLiwgcC5tLiAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgYWFhYWEgICB8IGEsIHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICB8ICA4MCB8IGIuLmJiYiAgfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBiYmJiICAgIHwgYS5tLiwgcC5tLiwgbm9vbiwgbWlkbmlnaHQgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgYmJiYmIgICB8IGEsIHAsIG4sIG1pICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgRmxleGlibGUgZGF5IHBlcmlvZCAgICAgICAgICAgICB8ICA4MCB8IEIuLkJCQiAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBCQkJCICAgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgQkJCQkIgICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMS0xMl0gICAgICAgICAgICAgICAgICAgICB8ICA3MCB8IGggICAgICAgfCAxLCAyLCAuLi4sIDExLCAxMiAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBobyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTF0aCwgMTJ0aCAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgaGggICAgICB8IDAxLCAwMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMC0yM10gICAgICAgICAgICAgICAgICAgICB8ICA3MCB8IEggICAgICAgfCAwLCAxLCAyLCAuLi4sIDIzICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBIbyAgICAgIHwgMHRoLCAxc3QsIDJuZCwgLi4uLCAyM3JkICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgSEggICAgICB8IDAwLCAwMSwgMDIsIC4uLiwgMjMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMC0xMV0gICAgICAgICAgICAgICAgICAgICB8ICA3MCB8IEsgICAgICAgfCAxLCAyLCAuLi4sIDExLCAwICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBLbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTF0aCwgMHRoICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgS0sgICAgICB8IDAxLCAwMiwgLi4uLCAxMSwgMDAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMS0yNF0gICAgICAgICAgICAgICAgICAgICB8ICA3MCB8IGsgICAgICAgfCAyNCwgMSwgMiwgLi4uLCAyMyAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBrbyAgICAgIHwgMjR0aCwgMXN0LCAybmQsIC4uLiwgMjNyZCAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwga2sgICAgICB8IDI0LCAwMSwgMDIsIC4uLiwgMjMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTWludXRlICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2MCB8IG0gICAgICAgfCAwLCAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBtbyAgICAgIHwgMHRoLCAxc3QsIC4uLiwgNTl0aCAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgbW0gICAgICB8IDAwLCAwMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgU2Vjb25kICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1MCB8IHMgICAgICAgfCAwLCAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBzbyAgICAgIHwgMHRoLCAxc3QsIC4uLiwgNTl0aCAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgc3MgICAgICB8IDAwLCAwMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgU2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICAgICAgICB8ICA0MCB8IHQgICAgICAgfCA1MTI5Njk1MjAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCB0dCAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCBGcmFjdGlvbiBvZiBzZWNvbmQgICAgICAgICAgICAgIHwgIDMwIHwgUyAgICAgICB8IDAsIDEsIC4uLiwgOSAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFNTICAgICAgfCAwMCwgMDEsIC4uLiwgOTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBTU1MgICAgIHwgMDAwLCAwMDAxLCAuLi4sIDk5OSAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgU1NTUyAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICB8ICAyMCB8IFQgICAgICAgfCA1MTI5Njk1MjA5MDAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBUVCAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy8gWikgICAgICAgIHwgIDEwIHwgWCAgICAgICB8IC0wOCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFhYICAgICAgfCAtMDgwMCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBYWFggICAgIHwgLTA4OjAwLCArMDU6MzAsIFogICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgWFhYWCAgICB8IC0wODAwLCArMDUzMCwgWiwgKzEyMzQ1NiAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFhYWFhYICAgfCAtMDg6MDAsICswNTozMCwgWiwgKzEyOjM0OjU2ICAgICAgfCAgICAgICB8XG4gKiB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICAgfCAgMTAgfCB4ICAgICAgIHwgLTA4LCArMDUzMCwgKzAwICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgeHggICAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IHh4eCAgICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwICAgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCB4eHh4ICAgIHwgLTA4MDAsICswNTMwLCArMDAwMCwgKzEyMzQ1NiAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgeHh4eHggICB8IC0wODowMCwgKzA1OjMwLCArMDA6MDAsICsxMjozNDo1NiB8ICAgICAgIHxcbiAqIHwgTG9uZyBsb2NhbGl6ZWQgZGF0ZSAgICAgICAgICAgICB8ICBOQSB8IFAgICAgICAgfCAwNS8yOS8xNDUzICAgICAgICAgICAgICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBQUCAgICAgIHwgTWF5IDI5LCAxNDUzICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgUFBQICAgICB8IE1heSAyOXRoLCAxNDUzICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFBQUFAgICAgfCBTdW5kYXksIE1heSAyOXRoLCAxNDUzICAgICAgICAgICAgfCAyLDUsOCB8XG4gKiB8IExvbmcgbG9jYWxpemVkIHRpbWUgICAgICAgICAgICAgfCAgTkEgfCBwICAgICAgIHwgMTI6MDAgQU0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgNSw4ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgcHAgICAgICB8IDEyOjAwOjAwIEFNICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQ29tYmluYXRpb24gb2YgZGF0ZSBhbmQgdGltZSAgICB8ICBOQSB8IFBwICAgICAgfCAwNS8yOS8xNDUzLCAxMjowMCBBTSAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBQUHBwICAgIHwgTWF5IDI5LCAxNDUzLCAxMjowMDowMCBBTSAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgUFBQcHAgICB8IE1heSAyOXRoLCAxNDUzIGF0IC4uLiAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFBQUFBwcCAgfCBTdW5kYXksIE1heSAyOXRoLCAxNDUzIGF0IC4uLiAgICAgfCAyLDUsOCB8XG4gKiBOb3RlczpcbiAqIDEuIFwiRm9ybWF0dGluZ1wiIHVuaXRzIChlLmcuIGZvcm1hdHRpbmcgcXVhcnRlcikgaW4gdGhlIGRlZmF1bHQgZW4tVVMgbG9jYWxlXG4gKiAgICBhcmUgdGhlIHNhbWUgYXMgXCJzdGFuZC1hbG9uZVwiIHVuaXRzLCBidXQgYXJlIGRpZmZlcmVudCBpbiBzb21lIGxhbmd1YWdlcy5cbiAqICAgIFwiRm9ybWF0dGluZ1wiIHVuaXRzIGFyZSBkZWNsaW5lZCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIG9mIHRoZSBsYW5ndWFnZVxuICogICAgaW4gdGhlIGNvbnRleHQgb2YgYSBkYXRlLiBcIlN0YW5kLWFsb25lXCIgdW5pdHMgYXJlIGFsd2F5cyBub21pbmF0aXZlIHNpbmd1bGFyLlxuICogICAgSW4gYGZvcm1hdGAgZnVuY3Rpb24sIHRoZXkgd2lsbCBwcm9kdWNlIGRpZmZlcmVudCByZXN1bHQ6XG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdkbyBMTExMJywge2xvY2FsZTogY3N9KSAvLz0+ICc2LiBsaXN0b3BhZCdgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdkbyBNTU1NJywge2xvY2FsZTogY3N9KSAvLz0+ICc2LiBsaXN0b3BhZHUnYFxuICpcbiAqICAgIGBwYXJzZWAgd2lsbCB0cnkgdG8gbWF0Y2ggYm90aCBmb3JtYXR0aW5nIGFuZCBzdGFuZC1hbG9uZSB1bml0cyBpbnRlcmNoYW5nYWJseS5cbiAqXG4gKiAyLiBBbnkgc2VxdWVuY2Ugb2YgdGhlIGlkZW50aWNhbCBsZXR0ZXJzIGlzIGEgcGF0dGVybiwgdW5sZXNzIGl0IGlzIGVzY2FwZWQgYnlcbiAqICAgIHRoZSBzaW5nbGUgcXVvdGUgY2hhcmFjdGVycyAoc2VlIGJlbG93KS5cbiAqICAgIElmIHRoZSBzZXF1ZW5jZSBpcyBsb25nZXIgdGhhbiBsaXN0ZWQgaW4gdGFibGU6XG4gKiAgICAtIGZvciBudW1lcmljYWwgdW5pdHMgKGB5eXl5eXl5eWApIGBwYXJzZWAgd2lsbCB0cnkgdG8gbWF0Y2ggYSBudW1iZXJcbiAqICAgICAgYXMgd2lkZSBhcyB0aGUgc2VxdWVuY2VcbiAqICAgIC0gZm9yIHRleHQgdW5pdHMgKGBNTU1NTU1NTWApIGBwYXJzZWAgd2lsbCB0cnkgdG8gbWF0Y2ggdGhlIHdpZGVzdCB2YXJpYXRpb24gb2YgdGhlIHVuaXQuXG4gKiAgICAgIFRoZXNlIHZhcmlhdGlvbnMgYXJlIG1hcmtlZCB3aXRoIFwiMlwiIGluIHRoZSBsYXN0IGNvbHVtbiBvZiB0aGUgdGFibGUuXG4gKlxuICogMy4gYFFRUVFRYCBhbmQgYHFxcXFxYCBjb3VsZCBiZSBub3Qgc3RyaWN0bHkgbnVtZXJpY2FsIGluIHNvbWUgbG9jYWxlcy5cbiAqICAgIFRoZXNlIHRva2VucyByZXByZXNlbnQgdGhlIHNob3J0ZXN0IGZvcm0gb2YgdGhlIHF1YXJ0ZXIuXG4gKlxuICogNC4gVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIGB5YCBhbmQgYHVgIHBhdHRlcm5zIGFyZSBCLkMuIHllYXJzOlxuICpcbiAqICAgIHwgWWVhciB8IGB5YCB8IGB1YCB8XG4gKiAgICB8LS0tLS0tfC0tLS0tfC0tLS0tfFxuICogICAgfCBBQyAxIHwgICAxIHwgICAxIHxcbiAqICAgIHwgQkMgMSB8ICAgMSB8ICAgMCB8XG4gKiAgICB8IEJDIDIgfCAgIDIgfCAgLTEgfFxuICpcbiAqICAgIEFsc28gYHl5YCB3aWxsIHRyeSB0byBndWVzcyB0aGUgY2VudHVyeSBvZiB0d28gZGlnaXQgeWVhciBieSBwcm94aW1pdHkgd2l0aCBgcmVmZXJlbmNlRGF0ZWA6XG4gKlxuICogICAgYHBhcnNlKCc1MCcsICd5eScsIG5ldyBEYXRlKDIwMTgsIDAsIDEpKSAvLz0+IFNhdCBKYW4gMDEgMjA1MCAwMDowMDowMGBcbiAqXG4gKiAgICBgcGFyc2UoJzc1JywgJ3l5JywgbmV3IERhdGUoMjAxOCwgMCwgMSkpIC8vPT4gV2VkIEphbiAwMSAxOTc1IDAwOjAwOjAwYFxuICpcbiAqICAgIHdoaWxlIGB1dWAgd2lsbCBqdXN0IGFzc2lnbiB0aGUgeWVhciBhcyBpczpcbiAqXG4gKiAgICBgcGFyc2UoJzUwJywgJ3V1JywgbmV3IERhdGUoMjAxOCwgMCwgMSkpIC8vPT4gU2F0IEphbiAwMSAwMDUwIDAwOjAwOjAwYFxuICpcbiAqICAgIGBwYXJzZSgnNzUnLCAndXUnLCBuZXcgRGF0ZSgyMDE4LCAwLCAxKSkgLy89PiBUdWUgSmFuIDAxIDAwNzUgMDA6MDA6MDBgXG4gKlxuICogICAgVGhlIHNhbWUgZGlmZmVyZW5jZSBpcyB0cnVlIGZvciBsb2NhbCBhbmQgSVNPIHdlZWstbnVtYmVyaW5nIHllYXJzIChgWWAgYW5kIGBSYCksXG4gKiAgICBleGNlcHQgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhcnMgYXJlIGRlcGVuZGVudCBvbiBgb3B0aW9ucy53ZWVrU3RhcnRzT25gXG4gKiAgICBhbmQgYG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlYCAoY29tcGFyZSBbc2V0SVNPV2Vla1llYXJde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3Mvc2V0SVNPV2Vla1llYXJ9XG4gKiAgICBhbmQgW3NldFdlZWtZZWFyXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL3NldFdlZWtZZWFyfSkuXG4gKlxuICogNS4gVGhlc2UgcGF0dGVybnMgYXJlIG5vdCBpbiB0aGUgVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogICAgLSBgaWA6IElTTyBkYXkgb2Ygd2Vla1xuICogICAgLSBgSWA6IElTTyB3ZWVrIG9mIHllYXJcbiAqICAgIC0gYFJgOiBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICogICAgLSBgb2A6IG9yZGluYWwgbnVtYmVyIG1vZGlmaWVyXG4gKiAgICAtIGBQYDogbG9uZyBsb2NhbGl6ZWQgZGF0ZVxuICogICAgLSBgcGA6IGxvbmcgbG9jYWxpemVkIHRpbWVcbiAqXG4gKiA2LiBgWVlgIGFuZCBgWVlZWWAgdG9rZW5zIHJlcHJlc2VudCB3ZWVrLW51bWJlcmluZyB5ZWFycyBidXQgdGhleSBhcmUgb2Z0ZW4gY29uZnVzZWQgd2l0aCB5ZWFycy5cbiAqICAgIFlvdSBzaG91bGQgZW5hYmxlIGBvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2Vuc2AgdG8gdXNlIHRoZW0uIFNlZTogaHR0cHM6Ly9naXQuaW8vZnhDeXJcbiAqXG4gKiA3LiBgRGAgYW5kIGBERGAgdG9rZW5zIHJlcHJlc2VudCBkYXlzIG9mIHRoZSB5ZWFyIGJ1dCB0aGV5IGFyZSBvZnRoZW4gY29uZnVzZWQgd2l0aCBkYXlzIG9mIHRoZSBtb250aC5cbiAqICAgIFlvdSBzaG91bGQgZW5hYmxlIGBvcHRpb25zLnVzZUFkZGl0aW9uYWxEYXlPZlllYXJUb2tlbnNgIHRvIHVzZSB0aGVtLiBTZWU6IGh0dHBzOi8vZ2l0LmlvL2Z4Q3lyXG4gKlxuICogOC4gYFArYCB0b2tlbnMgZG8gbm90IGhhdmUgYSBkZWZpbmVkIHByaW9yaXR5IHNpbmNlIHRoZXkgYXJlIG1lcmVseSBhbGlhc2VzIHRvIG90aGVyIHRva2VucyBiYXNlZFxuICogICAgb24gdGhlIGdpdmVuIGxvY2FsZS5cbiAqXG4gKiAgICB1c2luZyBgZW4tVVNgIGxvY2FsZTogYFBgID0+IGBNTS9kZC95eXl5YFxuICogICAgdXNpbmcgYGVuLVVTYCBsb2NhbGU6IGBwYCA9PiBgaGg6bW0gYWBcbiAqICAgIHVzaW5nIGBwdC1CUmAgbG9jYWxlOiBgUGAgPT4gYGRkL01NL3l5eXlgXG4gKiAgICB1c2luZyBgcHQtQlJgIGxvY2FsZTogYHBgID0+IGBISDptbWBcbiAqXG4gKiBWYWx1ZXMgd2lsbCBiZSBhc3NpZ25lZCB0byB0aGUgZGF0ZSBpbiB0aGUgZGVzY2VuZGluZyBvcmRlciBvZiBpdHMgdW5pdCdzIHByaW9yaXR5LlxuICogVW5pdHMgb2YgYW4gZXF1YWwgcHJpb3JpdHkgb3ZlcndyaXRlIGVhY2ggb3RoZXIgaW4gdGhlIG9yZGVyIG9mIGFwcGVhcmFuY2UuXG4gKlxuICogSWYgbm8gdmFsdWVzIG9mIGhpZ2hlciBwcmlvcml0eSBhcmUgcGFyc2VkIChlLmcuIHdoZW4gcGFyc2luZyBzdHJpbmcgJ0phbnVhcnkgMXN0JyB3aXRob3V0IGEgeWVhciksXG4gKiB0aGUgdmFsdWVzIHdpbGwgYmUgdGFrZW4gZnJvbSAzcmQgYXJndW1lbnQgYHJlZmVyZW5jZURhdGVgIHdoaWNoIHdvcmtzIGFzIGEgY29udGV4dCBvZiBwYXJzaW5nLlxuICpcbiAqIGByZWZlcmVuY2VEYXRlYCBtdXN0IGJlIHBhc3NlZCBmb3IgY29ycmVjdCB3b3JrIG9mIHRoZSBmdW5jdGlvbi5cbiAqIElmIHlvdSdyZSBub3Qgc3VyZSB3aGljaCBgcmVmZXJlbmNlRGF0ZWAgdG8gc3VwcGx5LCBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgRGF0ZTpcbiAqIGBwYXJzZSgnMDIvMTEvMjAxNCcsICdNTS9kZC95eXl5JywgbmV3IERhdGUoKSlgXG4gKiBJbiB0aGlzIGNhc2UgcGFyc2luZyB3aWxsIGJlIGRvbmUgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgZGF0ZS5cbiAqIElmIGByZWZlcmVuY2VEYXRlYCBpcyBgSW52YWxpZCBEYXRlYCBvciBhIHZhbHVlIG5vdCBjb252ZXJ0aWJsZSB0byB2YWxpZCBgRGF0ZWAsXG4gKiB0aGVuIGBJbnZhbGlkIERhdGVgIHdpbGwgYmUgcmV0dXJuZWQuXG4gKlxuICogVGhlIHJlc3VsdCBtYXkgdmFyeSBieSBsb2NhbGUuXG4gKlxuICogSWYgYGZvcm1hdFN0cmluZ2AgbWF0Y2hlcyB3aXRoIGBkYXRlU3RyaW5nYCBidXQgZG9lcyBub3QgcHJvdmlkZXMgdG9rZW5zLCBgcmVmZXJlbmNlRGF0ZWAgd2lsbCBiZSByZXR1cm5lZC5cbiAqXG4gKiBJZiBwYXJzaW5nIGZhaWxlZCwgYEludmFsaWQgRGF0ZWAgd2lsbCBiZSByZXR1cm5lZC5cbiAqIEludmFsaWQgRGF0ZSBpcyBhIERhdGUsIHdob3NlIHRpbWUgdmFsdWUgaXMgTmFOLlxuICogVGltZSB2YWx1ZSBvZiBEYXRlOiBodHRwOi8vZXM1LmdpdGh1Yi5pby8jeDE1LjkuMS4xXG4gKlxuICogIyMjIHYyLjAuMCBicmVha2luZyBjaGFuZ2VzOlxuICpcbiAqIC0gW0NoYW5nZXMgdGhhdCBhcmUgY29tbW9uIGZvciB0aGUgd2hvbGUgbGlicmFyeV0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdXBncmFkZUd1aWRlLm1kI0NvbW1vbi1DaGFuZ2VzKS5cbiAqXG4gKiAtIE9sZCBgcGFyc2VgIHdhcyByZW5hbWVkIHRvIGB0b0RhdGVgLlxuICogICBOb3cgYHBhcnNlYCBpcyBhIG5ldyBmdW5jdGlvbiB3aGljaCBwYXJzZXMgYSBzdHJpbmcgdXNpbmcgYSBwcm92aWRlZCBmb3JtYXQuXG4gKlxuICogICBgYGBqYXZhc2NyaXB0XG4gKiAgIC8vIEJlZm9yZSB2Mi4wLjBcbiAqICAgcGFyc2UoJzIwMTYtMDEtMDEnKVxuICpcbiAqICAgLy8gdjIuMC4wIG9ud2FyZFxuICogICB0b0RhdGUoJzIwMTYtMDEtMDEnKVxuICogICBwYXJzZSgnMjAxNi0wMS0wMScsICd5eXl5LU1NLWRkJywgbmV3IERhdGUoKSlcbiAqICAgYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGRhdGVTdHJpbmcgLSB0aGUgc3RyaW5nIHRvIHBhcnNlXG4gKiBAcGFyYW0ge1N0cmluZ30gZm9ybWF0U3RyaW5nIC0gdGhlIHN0cmluZyBvZiB0b2tlbnNcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IHJlZmVyZW5jZURhdGUgLSBkZWZpbmVzIHZhbHVlcyBtaXNzaW5nIGZyb20gdGhlIHBhcnNlZCBkYXRlU3RyaW5nXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gYW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cbiAqIEBwYXJhbSB7TG9jYWxlfSBbb3B0aW9ucy5sb2NhbGU9ZGVmYXVsdExvY2FsZV0gLSB0aGUgbG9jYWxlIG9iamVjdC4gU2VlIFtMb2NhbGVde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvTG9jYWxlfVxuICogQHBhcmFtIHswfDF8MnwzfDR8NXw2fSBbb3B0aW9ucy53ZWVrU3RhcnRzT249MF0gLSB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayAoMCAtIFN1bmRheSlcbiAqIEBwYXJhbSB7MXwyfDN8NHw1fDZ8N30gW29wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlPTFdIC0gdGhlIGRheSBvZiBKYW51YXJ5LCB3aGljaCBpcyBhbHdheXMgaW4gdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXJcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zPWZhbHNlXSAtIGlmIHRydWUsIGFsbG93cyB1c2FnZSBvZiB0aGUgd2Vlay1udW1iZXJpbmcgeWVhciB0b2tlbnMgYFlZYCBhbmQgYFlZWVlgO1xuICogICBzZWU6IGh0dHBzOi8vZ2l0LmlvL2Z4Q3lyXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnVzZUFkZGl0aW9uYWxEYXlPZlllYXJUb2tlbnM9ZmFsc2VdIC0gaWYgdHJ1ZSwgYWxsb3dzIHVzYWdlIG9mIHRoZSBkYXkgb2YgeWVhciB0b2tlbnMgYERgIGFuZCBgRERgO1xuICogICBzZWU6IGh0dHBzOi8vZ2l0LmlvL2Z4Q3lyXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIHBhcnNlZCBkYXRlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDMgYXJndW1lbnRzIHJlcXVpcmVkXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy53ZWVrU3RhcnRzT25gIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5sb2NhbGVgIG11c3QgY29udGFpbiBgbWF0Y2hgIHByb3BlcnR5XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYHl5eXlgIGluc3RlYWQgb2YgYFlZWVlgIGZvciBmb3JtYXR0aW5nIHllYXJzIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0LmlvL2Z4Q3lyXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYHl5YCBpbnN0ZWFkIG9mIGBZWWAgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXQuaW8vZnhDeXJcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgZGAgaW5zdGVhZCBvZiBgRGAgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXQuaW8vZnhDeXJcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdC5pby9meEN5clxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gZm9ybWF0IHN0cmluZyBjb250YWlucyBhbiB1bmVzY2FwZWQgbGF0aW4gYWxwaGFiZXQgY2hhcmFjdGVyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFBhcnNlIDExIEZlYnJ1YXJ5IDIwMTQgZnJvbSBtaWRkbGUtZW5kaWFuIGZvcm1hdDpcbiAqIHZhciByZXN1bHQgPSBwYXJzZSgnMDIvMTEvMjAxNCcsICdNTS9kZC95eXl5JywgbmV3IERhdGUoKSlcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDAwOjAwOjAwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFBhcnNlIDI4dGggb2YgRmVicnVhcnkgaW4gRXNwZXJhbnRvIGxvY2FsZSBpbiB0aGUgY29udGV4dCBvZiAyMDEwIHllYXI6XG4gKiBpbXBvcnQgZW8gZnJvbSAnZGF0ZS1mbnMvbG9jYWxlL2VvJ1xuICogdmFyIHJlc3VsdCA9IHBhcnNlKCcyOC1hIGRlIGZlYnJ1YXJvJywgXCJkbyAnZGUnIE1NTU1cIiwgbmV3IERhdGUoMjAxMCwgMCwgMSksIHtcbiAqICAgbG9jYWxlOiBlb1xuICogfSlcbiAqIC8vPT4gU3VuIEZlYiAyOCAyMDEwIDAwOjAwOjAwXG4gKi9cblxuZnVuY3Rpb24gcGFyc2UoZGlydHlEYXRlU3RyaW5nLCBkaXJ0eUZvcm1hdFN0cmluZywgZGlydHlSZWZlcmVuY2VEYXRlLCBkaXJ0eU9wdGlvbnMpIHtcbiAgcmVxdWlyZWRBcmdzKDMsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlU3RyaW5nID0gU3RyaW5nKGRpcnR5RGF0ZVN0cmluZyk7XG4gIHZhciBmb3JtYXRTdHJpbmcgPSBTdHJpbmcoZGlydHlGb3JtYXRTdHJpbmcpO1xuICB2YXIgb3B0aW9ucyA9IGRpcnR5T3B0aW9ucyB8fCB7fTtcbiAgdmFyIGxvY2FsZSQxID0gb3B0aW9ucy5sb2NhbGUgfHwgbG9jYWxlO1xuXG4gIGlmICghbG9jYWxlJDEubWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBtYXRjaCBwcm9wZXJ0eScpO1xuICB9XG5cbiAgdmFyIGxvY2FsZUZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IGxvY2FsZSQxLm9wdGlvbnMgJiYgbG9jYWxlJDEub3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGU7XG4gIHZhciBkZWZhdWx0Rmlyc3RXZWVrQ29udGFpbnNEYXRlID0gbG9jYWxlRmlyc3RXZWVrQ29udGFpbnNEYXRlID09IG51bGwgPyAxIDogdG9JbnRlZ2VyKGxvY2FsZUZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9PSBudWxsID8gZGVmYXVsdEZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA6IHRvSW50ZWdlcihvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7IC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMSBhbmQgNyBfYW5kXyBpcyBub3QgTmFOXG5cbiAgaWYgKCEoZmlyc3RXZWVrQ29udGFpbnNEYXRlID49IDEgJiYgZmlyc3RXZWVrQ29udGFpbnNEYXRlIDw9IDcpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2ZpcnN0V2Vla0NvbnRhaW5zRGF0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNyBpbmNsdXNpdmVseScpO1xuICB9XG5cbiAgdmFyIGxvY2FsZVdlZWtTdGFydHNPbiA9IGxvY2FsZSQxLm9wdGlvbnMgJiYgbG9jYWxlJDEub3B0aW9ucy53ZWVrU3RhcnRzT247XG4gIHZhciBkZWZhdWx0V2Vla1N0YXJ0c09uID0gbG9jYWxlV2Vla1N0YXJ0c09uID09IG51bGwgPyAwIDogdG9JbnRlZ2VyKGxvY2FsZVdlZWtTdGFydHNPbik7XG4gIHZhciB3ZWVrU3RhcnRzT24gPSBvcHRpb25zLndlZWtTdGFydHNPbiA9PSBudWxsID8gZGVmYXVsdFdlZWtTdGFydHNPbiA6IHRvSW50ZWdlcihvcHRpb25zLndlZWtTdGFydHNPbik7IC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMCBhbmQgNiBfYW5kXyBpcyBub3QgTmFOXG5cbiAgaWYgKCEod2Vla1N0YXJ0c09uID49IDAgJiYgd2Vla1N0YXJ0c09uIDw9IDYpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3dlZWtTdGFydHNPbiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNiBpbmNsdXNpdmVseScpO1xuICB9XG5cbiAgaWYgKGZvcm1hdFN0cmluZyA9PT0gJycpIHtcbiAgICBpZiAoZGF0ZVN0cmluZyA9PT0gJycpIHtcbiAgICAgIHJldHVybiB0b0RhdGUoZGlydHlSZWZlcmVuY2VEYXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gICAgfVxuICB9XG5cbiAgdmFyIHN1YkZuT3B0aW9ucyA9IHtcbiAgICBmaXJzdFdlZWtDb250YWluc0RhdGU6IGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSxcbiAgICB3ZWVrU3RhcnRzT246IHdlZWtTdGFydHNPbixcbiAgICBsb2NhbGU6IGxvY2FsZSQxIC8vIElmIHRpbWV6b25lIGlzbid0IHNwZWNpZmllZCwgaXQgd2lsbCBiZSBzZXQgdG8gdGhlIHN5c3RlbSB0aW1lem9uZVxuXG4gIH07XG4gIHZhciBzZXR0ZXJzID0gW3tcbiAgICBwcmlvcml0eTogVElNRVpPTkVfVU5JVF9QUklPUklUWSxcbiAgICBzdWJQcmlvcml0eTogLTEsXG4gICAgc2V0OiBkYXRlVG9TeXN0ZW1UaW1lem9uZSxcbiAgICBpbmRleDogMFxuICB9XTtcbiAgdmFyIGk7XG4gIHZhciB0b2tlbnMgPSBmb3JtYXRTdHJpbmcubWF0Y2gobG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHAkMSkubWFwKGZ1bmN0aW9uIChzdWJzdHJpbmcpIHtcbiAgICB2YXIgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07XG5cbiAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgPT09ICdwJyB8fCBmaXJzdENoYXJhY3RlciA9PT0gJ1AnKSB7XG4gICAgICB2YXIgbG9uZ0Zvcm1hdHRlciA9IGxvbmdGb3JtYXR0ZXJzW2ZpcnN0Q2hhcmFjdGVyXTtcbiAgICAgIHJldHVybiBsb25nRm9ybWF0dGVyKHN1YnN0cmluZywgbG9jYWxlJDEuZm9ybWF0TG9uZywgc3ViRm5PcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3Vic3RyaW5nO1xuICB9KS5qb2luKCcnKS5tYXRjaChmb3JtYXR0aW5nVG9rZW5zUmVnRXhwJDEpO1xuICB2YXIgdXNlZFRva2VucyA9IFtdO1xuXG4gIGZvciAoaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV07XG5cbiAgICBpZiAoIW9wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zICYmIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbih0b2tlbikpIHtcbiAgICAgIHRocm93UHJvdGVjdGVkRXJyb3IodG9rZW4sIGZvcm1hdFN0cmluZywgZGlydHlEYXRlU3RyaW5nKTtcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2VucyAmJiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHRva2VuKSkge1xuICAgICAgdGhyb3dQcm90ZWN0ZWRFcnJvcih0b2tlbiwgZm9ybWF0U3RyaW5nLCBkaXJ0eURhdGVTdHJpbmcpO1xuICAgIH1cblxuICAgIHZhciBmaXJzdENoYXJhY3RlciA9IHRva2VuWzBdO1xuICAgIHZhciBwYXJzZXIgPSBwYXJzZXJzW2ZpcnN0Q2hhcmFjdGVyXTtcblxuICAgIGlmIChwYXJzZXIpIHtcbiAgICAgIHZhciBpbmNvbXBhdGlibGVUb2tlbnMgPSBwYXJzZXIuaW5jb21wYXRpYmxlVG9rZW5zO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShpbmNvbXBhdGlibGVUb2tlbnMpKSB7XG4gICAgICAgIHZhciBpbmNvbXBhdGlibGVUb2tlbiA9IHZvaWQgMDtcblxuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgdXNlZFRva2Vucy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICB2YXIgdXNlZFRva2VuID0gdXNlZFRva2Vuc1tfaV0udG9rZW47XG5cbiAgICAgICAgICBpZiAoaW5jb21wYXRpYmxlVG9rZW5zLmluZGV4T2YodXNlZFRva2VuKSAhPT0gLTEgfHwgdXNlZFRva2VuID09PSBmaXJzdENoYXJhY3Rlcikge1xuICAgICAgICAgICAgaW5jb21wYXRpYmxlVG9rZW4gPSB1c2VkVG9rZW5zW19pXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmNvbXBhdGlibGVUb2tlbikge1xuICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVGhlIGZvcm1hdCBzdHJpbmcgbXVzdG4ndCBjb250YWluIGBcIi5jb25jYXQoaW5jb21wYXRpYmxlVG9rZW4uZnVsbFRva2VuLCBcImAgYW5kIGBcIikuY29uY2F0KHRva2VuLCBcImAgYXQgdGhlIHNhbWUgdGltZVwiKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocGFyc2VyLmluY29tcGF0aWJsZVRva2VucyA9PT0gJyonICYmIHVzZWRUb2tlbnMubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVGhlIGZvcm1hdCBzdHJpbmcgbXVzdG4ndCBjb250YWluIGBcIi5jb25jYXQodG9rZW4sIFwiYCBhbmQgYW55IG90aGVyIHRva2VuIGF0IHRoZSBzYW1lIHRpbWVcIikpO1xuICAgICAgfVxuXG4gICAgICB1c2VkVG9rZW5zLnB1c2goe1xuICAgICAgICB0b2tlbjogZmlyc3RDaGFyYWN0ZXIsXG4gICAgICAgIGZ1bGxUb2tlbjogdG9rZW5cbiAgICAgIH0pO1xuICAgICAgdmFyIHBhcnNlUmVzdWx0ID0gcGFyc2VyLnBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBsb2NhbGUkMS5tYXRjaCwgc3ViRm5PcHRpb25zKTtcblxuICAgICAgaWYgKCFwYXJzZVJlc3VsdCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgICAgIH1cblxuICAgICAgc2V0dGVycy5wdXNoKHtcbiAgICAgICAgcHJpb3JpdHk6IHBhcnNlci5wcmlvcml0eSxcbiAgICAgICAgc3ViUHJpb3JpdHk6IHBhcnNlci5zdWJQcmlvcml0eSB8fCAwLFxuICAgICAgICBzZXQ6IHBhcnNlci5zZXQsXG4gICAgICAgIHZhbGlkYXRlOiBwYXJzZXIudmFsaWRhdGUsXG4gICAgICAgIHZhbHVlOiBwYXJzZVJlc3VsdC52YWx1ZSxcbiAgICAgICAgaW5kZXg6IHNldHRlcnMubGVuZ3RoXG4gICAgICB9KTtcbiAgICAgIGRhdGVTdHJpbmcgPSBwYXJzZVJlc3VsdC5yZXN0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZmlyc3RDaGFyYWN0ZXIubWF0Y2godW5lc2NhcGVkTGF0aW5DaGFyYWN0ZXJSZWdFeHAkMSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0Zvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgJyArIGZpcnN0Q2hhcmFjdGVyICsgJ2AnKTtcbiAgICAgIH0gLy8gUmVwbGFjZSB0d28gc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgd2l0aCBvbmUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlclxuXG5cbiAgICAgIGlmICh0b2tlbiA9PT0gXCInJ1wiKSB7XG4gICAgICAgIHRva2VuID0gXCInXCI7XG4gICAgICB9IGVsc2UgaWYgKGZpcnN0Q2hhcmFjdGVyID09PSBcIidcIikge1xuICAgICAgICB0b2tlbiA9IGNsZWFuRXNjYXBlZFN0cmluZyQxKHRva2VuKTtcbiAgICAgIH0gLy8gQ3V0IHRva2VuIGZyb20gc3RyaW5nLCBvciwgaWYgc3RyaW5nIGRvZXNuJ3QgbWF0Y2ggdGhlIHRva2VuLCByZXR1cm4gSW52YWxpZCBEYXRlXG5cblxuICAgICAgaWYgKGRhdGVTdHJpbmcuaW5kZXhPZih0b2tlbikgPT09IDApIHtcbiAgICAgICAgZGF0ZVN0cmluZyA9IGRhdGVTdHJpbmcuc2xpY2UodG9rZW4ubGVuZ3RoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBDaGVjayBpZiB0aGUgcmVtYWluaW5nIGlucHV0IGNvbnRhaW5zIHNvbWV0aGluZyBvdGhlciB0aGFuIHdoaXRlc3BhY2VcblxuXG4gIGlmIChkYXRlU3RyaW5nLmxlbmd0aCA+IDAgJiYgbm90V2hpdGVzcGFjZVJlZ0V4cC50ZXN0KGRhdGVTdHJpbmcpKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gIH1cblxuICB2YXIgdW5pcXVlUHJpb3JpdHlTZXR0ZXJzID0gc2V0dGVycy5tYXAoZnVuY3Rpb24gKHNldHRlcikge1xuICAgIHJldHVybiBzZXR0ZXIucHJpb3JpdHk7XG4gIH0pLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gYiAtIGE7XG4gIH0pLmZpbHRlcihmdW5jdGlvbiAocHJpb3JpdHksIGluZGV4LCBhcnJheSkge1xuICAgIHJldHVybiBhcnJheS5pbmRleE9mKHByaW9yaXR5KSA9PT0gaW5kZXg7XG4gIH0pLm1hcChmdW5jdGlvbiAocHJpb3JpdHkpIHtcbiAgICByZXR1cm4gc2V0dGVycy5maWx0ZXIoZnVuY3Rpb24gKHNldHRlcikge1xuICAgICAgcmV0dXJuIHNldHRlci5wcmlvcml0eSA9PT0gcHJpb3JpdHk7XG4gICAgfSkuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGIuc3ViUHJpb3JpdHkgLSBhLnN1YlByaW9yaXR5O1xuICAgIH0pO1xuICB9KS5tYXAoZnVuY3Rpb24gKHNldHRlckFycmF5KSB7XG4gICAgcmV0dXJuIHNldHRlckFycmF5WzBdO1xuICB9KTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlSZWZlcmVuY2VEYXRlKTtcblxuICBpZiAoaXNOYU4oZGF0ZSkpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgfSAvLyBDb252ZXJ0IHRoZSBkYXRlIGluIHN5c3RlbSB0aW1lem9uZSB0byB0aGUgc2FtZSBkYXRlIGluIFVUQyswMDowMCB0aW1lem9uZS5cbiAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2hlbiBVVEMgZnVuY3Rpb25zIHdpbGwgYmUgaW1wbGVtZW50ZWQsIGxvY2FsZXMgd2lsbCBiZSBjb21wYXRpYmxlIHdpdGggdGhlbS5cbiAgLy8gU2VlIGFuIGlzc3VlIGFib3V0IFVUQyBmdW5jdGlvbnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9pc3N1ZXMvMzdcblxuXG4gIHZhciB1dGNEYXRlID0gc3ViTWlsbGlzZWNvbmRzKGRhdGUsIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoZGF0ZSkpO1xuICB2YXIgZmxhZ3MgPSB7fTtcblxuICBmb3IgKGkgPSAwOyBpIDwgdW5pcXVlUHJpb3JpdHlTZXR0ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNldHRlciA9IHVuaXF1ZVByaW9yaXR5U2V0dGVyc1tpXTtcblxuICAgIGlmIChzZXR0ZXIudmFsaWRhdGUgJiYgIXNldHRlci52YWxpZGF0ZSh1dGNEYXRlLCBzZXR0ZXIudmFsdWUsIHN1YkZuT3B0aW9ucykpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICAgIH1cblxuICAgIHZhciByZXN1bHQgPSBzZXR0ZXIuc2V0KHV0Y0RhdGUsIGZsYWdzLCBzZXR0ZXIudmFsdWUsIHN1YkZuT3B0aW9ucyk7IC8vIFJlc3VsdCBpcyB0dXBsZSAoZGF0ZSwgZmxhZ3MpXG5cbiAgICBpZiAocmVzdWx0WzBdKSB7XG4gICAgICB1dGNEYXRlID0gcmVzdWx0WzBdO1xuICAgICAgYXNzaWduKGZsYWdzLCByZXN1bHRbMV0pOyAvLyBSZXN1bHQgaXMgZGF0ZVxuICAgIH0gZWxzZSB7XG4gICAgICB1dGNEYXRlID0gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1dGNEYXRlO1xufVxuXG5mdW5jdGlvbiBkYXRlVG9TeXN0ZW1UaW1lem9uZShkYXRlLCBmbGFncykge1xuICBpZiAoZmxhZ3MudGltZXN0YW1wSXNTZXQpIHtcbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuXG4gIHZhciBjb252ZXJ0ZWREYXRlID0gbmV3IERhdGUoMCk7XG4gIGNvbnZlcnRlZERhdGUuc2V0RnVsbFllYXIoZGF0ZS5nZXRVVENGdWxsWWVhcigpLCBkYXRlLmdldFVUQ01vbnRoKCksIGRhdGUuZ2V0VVRDRGF0ZSgpKTtcbiAgY29udmVydGVkRGF0ZS5zZXRIb3VycyhkYXRlLmdldFVUQ0hvdXJzKCksIGRhdGUuZ2V0VVRDTWludXRlcygpLCBkYXRlLmdldFVUQ1NlY29uZHMoKSwgZGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKSk7XG4gIHJldHVybiBjb252ZXJ0ZWREYXRlO1xufVxuXG5mdW5jdGlvbiBjbGVhbkVzY2FwZWRTdHJpbmckMShpbnB1dCkge1xuICByZXR1cm4gaW5wdXQubWF0Y2goZXNjYXBlZFN0cmluZ1JlZ0V4cCQxKVsxXS5yZXBsYWNlKGRvdWJsZVF1b3RlUmVnRXhwJDEsIFwiJ1wiKTtcbn1cblxudmFyIE1JTExJU0VDT05EU19JTl9IT1VSJDIgPSAzNjAwMDAwO1xudmFyIE1JTExJU0VDT05EU19JTl9NSU5VVEUkMyA9IDYwMDAwO1xudmFyIERFRkFVTFRfQURESVRJT05BTF9ESUdJVFMgPSAyO1xudmFyIHBhdHRlcm5zID0ge1xuICBkYXRlVGltZURlbGltaXRlcjogL1tUIF0vLFxuICB0aW1lWm9uZURlbGltaXRlcjogL1taIF0vaSxcbiAgdGltZXpvbmU6IC8oW1orLV0uKikkL1xufTtcbnZhciBkYXRlUmVnZXggPSAvXi0/KD86KFxcZHszfSl8KFxcZHsyfSkoPzotPyhcXGR7Mn0pKT98VyhcXGR7Mn0pKD86LT8oXFxkezF9KSk/fCkkLztcbnZhciB0aW1lUmVnZXggPSAvXihcXGR7Mn0oPzpbLixdXFxkKik/KSg/Ojo/KFxcZHsyfSg/OlsuLF1cXGQqKT8pKT8oPzo6PyhcXGR7Mn0oPzpbLixdXFxkKik/KSk/JC87XG52YXIgdGltZXpvbmVSZWdleCA9IC9eKFsrLV0pKFxcZHsyfSkoPzo6PyhcXGR7Mn0pKT8kLztcbi8qKlxuICogQG5hbWUgcGFyc2VJU09cbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgUGFyc2UgSVNPIHN0cmluZ1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUGFyc2UgdGhlIGdpdmVuIHN0cmluZyBpbiBJU08gODYwMSBmb3JtYXQgYW5kIHJldHVybiBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIEZ1bmN0aW9uIGFjY2VwdHMgY29tcGxldGUgSVNPIDg2MDEgZm9ybWF0cyBhcyB3ZWxsIGFzIHBhcnRpYWwgaW1wbGVtZW50YXRpb25zLlxuICogSVNPIDg2MDE6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDFcbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXNuJ3QgYSBzdHJpbmcsIHRoZSBmdW5jdGlvbiBjYW5ub3QgcGFyc2UgdGhlIHN0cmluZyBvclxuICogdGhlIHZhbHVlcyBhcmUgaW52YWxpZCwgaXQgcmV0dXJucyBJbnZhbGlkIERhdGUuXG4gKlxuICogIyMjIHYyLjAuMCBicmVha2luZyBjaGFuZ2VzOlxuICpcbiAqIC0gW0NoYW5nZXMgdGhhdCBhcmUgY29tbW9uIGZvciB0aGUgd2hvbGUgbGlicmFyeV0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdXBncmFkZUd1aWRlLm1kI0NvbW1vbi1DaGFuZ2VzKS5cbiAqXG4gKiAtIFRoZSBwcmV2aW91cyBgcGFyc2VgIGltcGxlbWVudGF0aW9uIHdhcyByZW5hbWVkIHRvIGBwYXJzZUlTT2AuXG4gKlxuICogICBgYGBqYXZhc2NyaXB0XG4gKiAgIC8vIEJlZm9yZSB2Mi4wLjBcbiAqICAgcGFyc2UoJzIwMTYtMDEtMDEnKVxuICpcbiAqICAgLy8gdjIuMC4wIG9ud2FyZFxuICogICBwYXJzZUlTTygnMjAxNi0wMS0wMScpXG4gKiAgIGBgYFxuICpcbiAqIC0gYHBhcnNlSVNPYCBub3cgdmFsaWRhdGVzIHNlcGFyYXRlIGRhdGUgYW5kIHRpbWUgdmFsdWVzIGluIElTTy04NjAxIHN0cmluZ3NcbiAqICAgYW5kIHJldHVybnMgYEludmFsaWQgRGF0ZWAgaWYgdGhlIGRhdGUgaXMgaW52YWxpZC5cbiAqXG4gKiAgIGBgYGphdmFzY3JpcHRcbiAqICAgcGFyc2VJU08oJzIwMTgtMTMtMzInKVxuICogICAvLz0+IEludmFsaWQgRGF0ZVxuICogICBgYGBcbiAqXG4gKiAtIGBwYXJzZUlTT2Agbm93IGRvZXNuJ3QgZmFsbCBiYWNrIHRvIGBuZXcgRGF0ZWAgY29uc3RydWN0b3JcbiAqICAgaWYgaXQgZmFpbHMgdG8gcGFyc2UgYSBzdHJpbmcgYXJndW1lbnQuIEluc3RlYWQsIGl0IHJldHVybnMgYEludmFsaWQgRGF0ZWAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGFyZ3VtZW50IC0gdGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBhbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICogQHBhcmFtIHswfDF8Mn0gW29wdGlvbnMuYWRkaXRpb25hbERpZ2l0cz0yXSAtIHRoZSBhZGRpdGlvbmFsIG51bWJlciBvZiBkaWdpdHMgaW4gdGhlIGV4dGVuZGVkIHllYXIgZm9ybWF0XG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIHBhcnNlZCBkYXRlIGluIHRoZSBsb2NhbCB0aW1lIHpvbmVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMuYWRkaXRpb25hbERpZ2l0c2AgbXVzdCBiZSAwLCAxIG9yIDJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCBzdHJpbmcgJzIwMTQtMDItMTFUMTE6MzA6MzAnIHRvIGRhdGU6XG4gKiB2YXIgcmVzdWx0ID0gcGFyc2VJU08oJzIwMTQtMDItMTFUMTE6MzA6MzAnKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCBzdHJpbmcgJyswMjAxNDEwMScgdG8gZGF0ZSxcbiAqIC8vIGlmIHRoZSBhZGRpdGlvbmFsIG51bWJlciBvZiBkaWdpdHMgaW4gdGhlIGV4dGVuZGVkIHllYXIgZm9ybWF0IGlzIDE6XG4gKiB2YXIgcmVzdWx0ID0gcGFyc2VJU08oJyswMjAxNDEwMScsIHsgYWRkaXRpb25hbERpZ2l0czogMSB9KVxuICogLy89PiBGcmkgQXByIDExIDIwMTQgMDA6MDA6MDBcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZUlTTyhhcmd1bWVudCwgZGlydHlPcHRpb25zKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgb3B0aW9ucyA9IGRpcnR5T3B0aW9ucyB8fCB7fTtcbiAgdmFyIGFkZGl0aW9uYWxEaWdpdHMgPSBvcHRpb25zLmFkZGl0aW9uYWxEaWdpdHMgPT0gbnVsbCA/IERFRkFVTFRfQURESVRJT05BTF9ESUdJVFMgOiB0b0ludGVnZXIob3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzKTtcblxuICBpZiAoYWRkaXRpb25hbERpZ2l0cyAhPT0gMiAmJiBhZGRpdGlvbmFsRGlnaXRzICE9PSAxICYmIGFkZGl0aW9uYWxEaWdpdHMgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignYWRkaXRpb25hbERpZ2l0cyBtdXN0IGJlIDAsIDEgb3IgMicpO1xuICB9XG5cbiAgaWYgKCEodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJyB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpID09PSAnW29iamVjdCBTdHJpbmddJykpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgfVxuXG4gIHZhciBkYXRlU3RyaW5ncyA9IHNwbGl0RGF0ZVN0cmluZyhhcmd1bWVudCk7XG4gIHZhciBkYXRlO1xuXG4gIGlmIChkYXRlU3RyaW5ncy5kYXRlKSB7XG4gICAgdmFyIHBhcnNlWWVhclJlc3VsdCA9IHBhcnNlWWVhcihkYXRlU3RyaW5ncy5kYXRlLCBhZGRpdGlvbmFsRGlnaXRzKTtcbiAgICBkYXRlID0gcGFyc2VEYXRlKHBhcnNlWWVhclJlc3VsdC5yZXN0RGF0ZVN0cmluZywgcGFyc2VZZWFyUmVzdWx0LnllYXIpO1xuICB9XG5cbiAgaWYgKGlzTmFOKGRhdGUpIHx8ICFkYXRlKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gIH1cblxuICB2YXIgdGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKCk7XG4gIHZhciB0aW1lID0gMDtcbiAgdmFyIG9mZnNldDtcblxuICBpZiAoZGF0ZVN0cmluZ3MudGltZSkge1xuICAgIHRpbWUgPSBwYXJzZVRpbWUoZGF0ZVN0cmluZ3MudGltZSk7XG5cbiAgICBpZiAoaXNOYU4odGltZSkgfHwgdGltZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gICAgfVxuICB9XG5cbiAgaWYgKGRhdGVTdHJpbmdzLnRpbWV6b25lKSB7XG4gICAgb2Zmc2V0ID0gcGFyc2VUaW1lem9uZShkYXRlU3RyaW5ncy50aW1lem9uZSk7XG5cbiAgICBpZiAoaXNOYU4ob2Zmc2V0KSkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBkaXJ0eURhdGUgPSBuZXcgRGF0ZSh0aW1lc3RhbXAgKyB0aW1lKTsgLy8ganMgcGFyc2VkIHN0cmluZyBhc3N1bWluZyBpdCdzIGluIFVUQyB0aW1lem9uZVxuICAgIC8vIGJ1dCB3ZSBuZWVkIGl0IHRvIGJlIHBhcnNlZCBpbiBvdXIgdGltZXpvbmVcbiAgICAvLyBzbyB3ZSB1c2UgdXRjIHZhbHVlcyB0byBidWlsZCBkYXRlIGluIG91ciB0aW1lem9uZS5cbiAgICAvLyBZZWFyIHZhbHVlcyBmcm9tIDAgdG8gOTkgbWFwIHRvIHRoZSB5ZWFycyAxOTAwIHRvIDE5OTlcbiAgICAvLyBzbyBzZXQgeWVhciBleHBsaWNpdGx5IHdpdGggc2V0RnVsbFllYXIuXG5cbiAgICB2YXIgcmVzdWx0ID0gbmV3IERhdGUoZGlydHlEYXRlLmdldFVUQ0Z1bGxZZWFyKCksIGRpcnR5RGF0ZS5nZXRVVENNb250aCgpLCBkaXJ0eURhdGUuZ2V0VVRDRGF0ZSgpLCBkaXJ0eURhdGUuZ2V0VVRDSG91cnMoKSwgZGlydHlEYXRlLmdldFVUQ01pbnV0ZXMoKSwgZGlydHlEYXRlLmdldFVUQ1NlY29uZHMoKSwgZGlydHlEYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpKTtcbiAgICByZXN1bHQuc2V0RnVsbFllYXIoZGlydHlEYXRlLmdldFVUQ0Z1bGxZZWFyKCkpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICByZXR1cm4gbmV3IERhdGUodGltZXN0YW1wICsgdGltZSArIG9mZnNldCk7XG59XG5cbmZ1bmN0aW9uIHNwbGl0RGF0ZVN0cmluZyhkYXRlU3RyaW5nKSB7XG4gIHZhciBkYXRlU3RyaW5ncyA9IHt9O1xuICB2YXIgYXJyYXkgPSBkYXRlU3RyaW5nLnNwbGl0KHBhdHRlcm5zLmRhdGVUaW1lRGVsaW1pdGVyKTtcbiAgdmFyIHRpbWVTdHJpbmc7IC8vIFRoZSByZWdleCBtYXRjaCBzaG91bGQgb25seSByZXR1cm4gYXQgbWF4aW11bSB0d28gYXJyYXkgZWxlbWVudHMuXG4gIC8vIFtkYXRlXSwgW3RpbWVdLCBvciBbZGF0ZSwgdGltZV0uXG5cbiAgaWYgKGFycmF5Lmxlbmd0aCA+IDIpIHtcbiAgICByZXR1cm4gZGF0ZVN0cmluZ3M7XG4gIH1cblxuICBpZiAoLzovLnRlc3QoYXJyYXlbMF0pKSB7XG4gICAgZGF0ZVN0cmluZ3MuZGF0ZSA9IG51bGw7XG4gICAgdGltZVN0cmluZyA9IGFycmF5WzBdO1xuICB9IGVsc2Uge1xuICAgIGRhdGVTdHJpbmdzLmRhdGUgPSBhcnJheVswXTtcbiAgICB0aW1lU3RyaW5nID0gYXJyYXlbMV07XG5cbiAgICBpZiAocGF0dGVybnMudGltZVpvbmVEZWxpbWl0ZXIudGVzdChkYXRlU3RyaW5ncy5kYXRlKSkge1xuICAgICAgZGF0ZVN0cmluZ3MuZGF0ZSA9IGRhdGVTdHJpbmcuc3BsaXQocGF0dGVybnMudGltZVpvbmVEZWxpbWl0ZXIpWzBdO1xuICAgICAgdGltZVN0cmluZyA9IGRhdGVTdHJpbmcuc3Vic3RyKGRhdGVTdHJpbmdzLmRhdGUubGVuZ3RoLCBkYXRlU3RyaW5nLmxlbmd0aCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRpbWVTdHJpbmcpIHtcbiAgICB2YXIgdG9rZW4gPSBwYXR0ZXJucy50aW1lem9uZS5leGVjKHRpbWVTdHJpbmcpO1xuXG4gICAgaWYgKHRva2VuKSB7XG4gICAgICBkYXRlU3RyaW5ncy50aW1lID0gdGltZVN0cmluZy5yZXBsYWNlKHRva2VuWzFdLCAnJyk7XG4gICAgICBkYXRlU3RyaW5ncy50aW1lem9uZSA9IHRva2VuWzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRlU3RyaW5ncy50aW1lID0gdGltZVN0cmluZztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGF0ZVN0cmluZ3M7XG59XG5cbmZ1bmN0aW9uIHBhcnNlWWVhcihkYXRlU3RyaW5nLCBhZGRpdGlvbmFsRGlnaXRzKSB7XG4gIHZhciByZWdleCA9IG5ldyBSZWdFeHAoJ14oPzooXFxcXGR7NH18WystXVxcXFxkeycgKyAoNCArIGFkZGl0aW9uYWxEaWdpdHMpICsgJ30pfChcXFxcZHsyfXxbKy1dXFxcXGR7JyArICgyICsgYWRkaXRpb25hbERpZ2l0cykgKyAnfSkkKScpO1xuICB2YXIgY2FwdHVyZXMgPSBkYXRlU3RyaW5nLm1hdGNoKHJlZ2V4KTsgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIHllYXJcblxuICBpZiAoIWNhcHR1cmVzKSByZXR1cm4ge1xuICAgIHllYXI6IG51bGxcbiAgfTtcbiAgdmFyIHllYXIgPSBjYXB0dXJlc1sxXSAmJiBwYXJzZUludChjYXB0dXJlc1sxXSk7XG4gIHZhciBjZW50dXJ5ID0gY2FwdHVyZXNbMl0gJiYgcGFyc2VJbnQoY2FwdHVyZXNbMl0pO1xuICByZXR1cm4ge1xuICAgIHllYXI6IGNlbnR1cnkgPT0gbnVsbCA/IHllYXIgOiBjZW50dXJ5ICogMTAwLFxuICAgIHJlc3REYXRlU3RyaW5nOiBkYXRlU3RyaW5nLnNsaWNlKChjYXB0dXJlc1sxXSB8fCBjYXB0dXJlc1syXSkubGVuZ3RoKVxuICB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZURhdGUoZGF0ZVN0cmluZywgeWVhcikge1xuICAvLyBJbnZhbGlkIElTTy1mb3JtYXR0ZWQgeWVhclxuICBpZiAoeWVhciA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gIHZhciBjYXB0dXJlcyA9IGRhdGVTdHJpbmcubWF0Y2goZGF0ZVJlZ2V4KTsgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIHN0cmluZ1xuXG4gIGlmICghY2FwdHVyZXMpIHJldHVybiBudWxsO1xuICB2YXIgaXNXZWVrRGF0ZSA9ICEhY2FwdHVyZXNbNF07XG4gIHZhciBkYXlPZlllYXIgPSBwYXJzZURhdGVVbml0KGNhcHR1cmVzWzFdKTtcbiAgdmFyIG1vbnRoID0gcGFyc2VEYXRlVW5pdChjYXB0dXJlc1syXSkgLSAxO1xuICB2YXIgZGF5ID0gcGFyc2VEYXRlVW5pdChjYXB0dXJlc1szXSk7XG4gIHZhciB3ZWVrID0gcGFyc2VEYXRlVW5pdChjYXB0dXJlc1s0XSk7XG4gIHZhciBkYXlPZldlZWsgPSBwYXJzZURhdGVVbml0KGNhcHR1cmVzWzVdKSAtIDE7XG5cbiAgaWYgKGlzV2Vla0RhdGUpIHtcbiAgICBpZiAoIXZhbGlkYXRlV2Vla0RhdGUoeWVhciwgd2VlaywgZGF5T2ZXZWVrKSkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRheU9mSVNPV2Vla1llYXIoeWVhciwgd2VlaywgZGF5T2ZXZWVrKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKDApO1xuXG4gICAgaWYgKCF2YWxpZGF0ZURhdGUoeWVhciwgbW9udGgsIGRheSkgfHwgIXZhbGlkYXRlRGF5T2ZZZWFyRGF0ZSh5ZWFyLCBkYXlPZlllYXIpKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgICB9XG5cbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKHllYXIsIG1vbnRoLCBNYXRoLm1heChkYXlPZlllYXIsIGRheSkpO1xuICAgIHJldHVybiBkYXRlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlRGF0ZVVuaXQodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID8gcGFyc2VJbnQodmFsdWUpIDogMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VUaW1lKHRpbWVTdHJpbmcpIHtcbiAgdmFyIGNhcHR1cmVzID0gdGltZVN0cmluZy5tYXRjaCh0aW1lUmVnZXgpO1xuICBpZiAoIWNhcHR1cmVzKSByZXR1cm4gbnVsbDsgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIHRpbWVcblxuICB2YXIgaG91cnMgPSBwYXJzZVRpbWVVbml0KGNhcHR1cmVzWzFdKTtcbiAgdmFyIG1pbnV0ZXMgPSBwYXJzZVRpbWVVbml0KGNhcHR1cmVzWzJdKTtcbiAgdmFyIHNlY29uZHMgPSBwYXJzZVRpbWVVbml0KGNhcHR1cmVzWzNdKTtcblxuICBpZiAoIXZhbGlkYXRlVGltZShob3VycywgbWludXRlcywgc2Vjb25kcykpIHtcbiAgICByZXR1cm4gTmFOO1xuICB9XG5cbiAgcmV0dXJuIGhvdXJzICogTUlMTElTRUNPTkRTX0lOX0hPVVIkMiArIG1pbnV0ZXMgKiBNSUxMSVNFQ09ORFNfSU5fTUlOVVRFJDMgKyBzZWNvbmRzICogMTAwMDtcbn1cblxuZnVuY3Rpb24gcGFyc2VUaW1lVW5pdCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgJiYgcGFyc2VGbG9hdCh2YWx1ZS5yZXBsYWNlKCcsJywgJy4nKSkgfHwgMDtcbn1cblxuZnVuY3Rpb24gcGFyc2VUaW1lem9uZSh0aW1lem9uZVN0cmluZykge1xuICBpZiAodGltZXpvbmVTdHJpbmcgPT09ICdaJykgcmV0dXJuIDA7XG4gIHZhciBjYXB0dXJlcyA9IHRpbWV6b25lU3RyaW5nLm1hdGNoKHRpbWV6b25lUmVnZXgpO1xuICBpZiAoIWNhcHR1cmVzKSByZXR1cm4gMDtcbiAgdmFyIHNpZ24gPSBjYXB0dXJlc1sxXSA9PT0gJysnID8gLTEgOiAxO1xuICB2YXIgaG91cnMgPSBwYXJzZUludChjYXB0dXJlc1syXSk7XG4gIHZhciBtaW51dGVzID0gY2FwdHVyZXNbM10gJiYgcGFyc2VJbnQoY2FwdHVyZXNbM10pIHx8IDA7XG5cbiAgaWYgKCF2YWxpZGF0ZVRpbWV6b25lKGhvdXJzLCBtaW51dGVzKSkge1xuICAgIHJldHVybiBOYU47XG4gIH1cblxuICByZXR1cm4gc2lnbiAqIChob3VycyAqIE1JTExJU0VDT05EU19JTl9IT1VSJDIgKyBtaW51dGVzICogTUlMTElTRUNPTkRTX0lOX01JTlVURSQzKTtcbn1cblxuZnVuY3Rpb24gZGF5T2ZJU09XZWVrWWVhcihpc29XZWVrWWVhciwgd2VlaywgZGF5KSB7XG4gIHZhciBkYXRlID0gbmV3IERhdGUoMCk7XG4gIGRhdGUuc2V0VVRDRnVsbFllYXIoaXNvV2Vla1llYXIsIDAsIDQpO1xuICB2YXIgZm91cnRoT2ZKYW51YXJ5RGF5ID0gZGF0ZS5nZXRVVENEYXkoKSB8fCA3O1xuICB2YXIgZGlmZiA9ICh3ZWVrIC0gMSkgKiA3ICsgZGF5ICsgMSAtIGZvdXJ0aE9mSmFudWFyeURheTtcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpICsgZGlmZik7XG4gIHJldHVybiBkYXRlO1xufSAvLyBWYWxpZGF0aW9uIGZ1bmN0aW9uc1xuLy8gRmVicnVhcnkgaXMgbnVsbCB0byBoYW5kbGUgdGhlIGxlYXAgeWVhciAodXNpbmcgfHwpXG5cblxudmFyIGRheXNJbk1vbnRocyA9IFszMSwgbnVsbCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdO1xuXG5mdW5jdGlvbiBpc0xlYXBZZWFySW5kZXgkMSh5ZWFyKSB7XG4gIHJldHVybiB5ZWFyICUgNDAwID09PSAwIHx8IHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDA7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRGF0ZSh5ZWFyLCBtb250aCwgZGF0ZSkge1xuICByZXR1cm4gbW9udGggPj0gMCAmJiBtb250aCA8PSAxMSAmJiBkYXRlID49IDEgJiYgZGF0ZSA8PSAoZGF5c0luTW9udGhzW21vbnRoXSB8fCAoaXNMZWFwWWVhckluZGV4JDEoeWVhcikgPyAyOSA6IDI4KSk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRGF5T2ZZZWFyRGF0ZSh5ZWFyLCBkYXlPZlllYXIpIHtcbiAgcmV0dXJuIGRheU9mWWVhciA+PSAxICYmIGRheU9mWWVhciA8PSAoaXNMZWFwWWVhckluZGV4JDEoeWVhcikgPyAzNjYgOiAzNjUpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVdlZWtEYXRlKF95ZWFyLCB3ZWVrLCBkYXkpIHtcbiAgcmV0dXJuIHdlZWsgPj0gMSAmJiB3ZWVrIDw9IDUzICYmIGRheSA+PSAwICYmIGRheSA8PSA2O1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVRpbWUoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpIHtcbiAgaWYgKGhvdXJzID09PSAyNCkge1xuICAgIHJldHVybiBtaW51dGVzID09PSAwICYmIHNlY29uZHMgPT09IDA7XG4gIH1cblxuICByZXR1cm4gc2Vjb25kcyA+PSAwICYmIHNlY29uZHMgPCA2MCAmJiBtaW51dGVzID49IDAgJiYgbWludXRlcyA8IDYwICYmIGhvdXJzID49IDAgJiYgaG91cnMgPCAyNTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVUaW1lem9uZShfaG91cnMsIG1pbnV0ZXMpIHtcbiAgcmV0dXJuIG1pbnV0ZXMgPj0gMCAmJiBtaW51dGVzIDw9IDU5O1xufVxuXG5mdW5jdGlvbiBfaW5oZXJpdHNMb29zZShzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTtcbiAgc3ViQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gc3ViQ2xhc3M7XG4gIHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7XG59XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyQxKHNvdXJjZSwgZXhjbHVkZWQpIHtcbiAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG4gIHZhciB0YXJnZXQgPSB7fTtcbiAgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuICB2YXIga2V5LCBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0gc291cmNlS2V5c1tpXTtcbiAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gIH1cblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07XG4gICAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTtcbiAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHNvbWUgRE9NIG5vZGUgaXMgb3VyIENvbXBvbmVudCdzIG5vZGUuXG4gKi9cbmZ1bmN0aW9uIGlzTm9kZUZvdW5kKGN1cnJlbnQsIGNvbXBvbmVudE5vZGUsIGlnbm9yZUNsYXNzKSB7XG4gIGlmIChjdXJyZW50ID09PSBjb21wb25lbnROb2RlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gU1ZHIDx1c2UvPiBlbGVtZW50cyBkbyBub3QgdGVjaG5pY2FsbHkgcmVzaWRlIGluIHRoZSByZW5kZXJlZCBET00sIHNvXG4gIC8vIHRoZXkgZG8gbm90IGhhdmUgY2xhc3NMaXN0IGRpcmVjdGx5LCBidXQgdGhleSBvZmZlciBhIGxpbmsgdG8gdGhlaXJcbiAgLy8gY29ycmVzcG9uZGluZyBlbGVtZW50LCB3aGljaCBjYW4gaGF2ZSBjbGFzc0xpc3QuIFRoaXMgZXh0cmEgY2hlY2sgaXMgZm9yXG4gIC8vIHRoYXQgY2FzZS5cbiAgLy8gU2VlOiBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9zdHJ1Y3QuaHRtbCNJbnRlcmZhY2VTVkdVc2VFbGVtZW50XG4gIC8vIERpc2N1c3Npb246IGh0dHBzOi8vZ2l0aHViLmNvbS9Qb21heC9yZWFjdC1vbmNsaWNrb3V0c2lkZS9wdWxsLzE3XG5cblxuICBpZiAoY3VycmVudC5jb3JyZXNwb25kaW5nRWxlbWVudCkge1xuICAgIHJldHVybiBjdXJyZW50LmNvcnJlc3BvbmRpbmdFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhpZ25vcmVDbGFzcyk7XG4gIH1cblxuICByZXR1cm4gY3VycmVudC5jbGFzc0xpc3QuY29udGFpbnMoaWdub3JlQ2xhc3MpO1xufVxuLyoqXG4gKiBUcnkgdG8gZmluZCBvdXIgbm9kZSBpbiBhIGhpZXJhcmNoeSBvZiBub2RlcywgcmV0dXJuaW5nIHRoZSBkb2N1bWVudFxuICogbm9kZSBhcyBoaWdoZXN0IG5vZGUgaWYgb3VyIG5vZGUgaXMgbm90IGZvdW5kIGluIHRoZSBwYXRoIHVwLlxuICovXG5cbmZ1bmN0aW9uIGZpbmRIaWdoZXN0KGN1cnJlbnQsIGNvbXBvbmVudE5vZGUsIGlnbm9yZUNsYXNzKSB7XG4gIGlmIChjdXJyZW50ID09PSBjb21wb25lbnROb2RlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gSWYgc291cmNlPWxvY2FsIHRoZW4gdGhpcyBldmVudCBjYW1lIGZyb20gJ3NvbWV3aGVyZSdcbiAgLy8gaW5zaWRlIGFuZCBzaG91bGQgYmUgaWdub3JlZC4gV2UgY291bGQgaGFuZGxlIHRoaXMgd2l0aFxuICAvLyBhIGxheWVyZWQgYXBwcm9hY2gsIHRvbywgYnV0IHRoYXQgcmVxdWlyZXMgZ29pbmcgYmFjayB0b1xuICAvLyB0aGlua2luZyBpbiB0ZXJtcyBvZiBEb20gbm9kZSBuZXN0aW5nLCBydW5uaW5nIGNvdW50ZXJcbiAgLy8gdG8gUmVhY3QncyAneW91IHNob3VsZG4ndCBjYXJlIGFib3V0IHRoZSBET00nIHBoaWxvc29waHkuXG5cblxuICB3aGlsZSAoY3VycmVudC5wYXJlbnROb2RlKSB7XG4gICAgaWYgKGlzTm9kZUZvdW5kKGN1cnJlbnQsIGNvbXBvbmVudE5vZGUsIGlnbm9yZUNsYXNzKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY3VycmVudCA9IGN1cnJlbnQucGFyZW50Tm9kZTtcbiAgfVxuXG4gIHJldHVybiBjdXJyZW50O1xufVxuLyoqXG4gKiBDaGVjayBpZiB0aGUgYnJvd3NlciBzY3JvbGxiYXIgd2FzIGNsaWNrZWRcbiAqL1xuXG5mdW5jdGlvbiBjbGlja2VkU2Nyb2xsYmFyKGV2dCkge1xuICByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIDw9IGV2dC5jbGllbnRYIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgPD0gZXZ0LmNsaWVudFk7XG59XG5cbi8vIGlkZWFsbHkgd2lsbCBnZXQgcmVwbGFjZWQgd2l0aCBleHRlcm5hbCBkZXBcbi8vIHdoZW4gcmFmcmV4L2RldGVjdC1wYXNzaXZlLWV2ZW50cyM0IGFuZCByYWZyZXgvZGV0ZWN0LXBhc3NpdmUtZXZlbnRzIzUgZ2V0IG1lcmdlZCBpblxudmFyIHRlc3RQYXNzaXZlRXZlbnRTdXBwb3J0ID0gZnVuY3Rpb24gdGVzdFBhc3NpdmVFdmVudFN1cHBvcnQoKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2Ygd2luZG93LmFkZEV2ZW50TGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGFzc2l2ZSA9IGZhbHNlO1xuICB2YXIgb3B0aW9ucyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ3Bhc3NpdmUnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICBwYXNzaXZlID0gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHZhciBub29wID0gZnVuY3Rpb24gbm9vcCgpIHt9O1xuXG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0UGFzc2l2ZUV2ZW50U3VwcG9ydCcsIG5vb3AsIG9wdGlvbnMpO1xuICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndGVzdFBhc3NpdmVFdmVudFN1cHBvcnQnLCBub29wLCBvcHRpb25zKTtcbiAgcmV0dXJuIHBhc3NpdmU7XG59O1xuXG5mdW5jdGlvbiBhdXRvSW5jKHNlZWQpIHtcbiAgaWYgKHNlZWQgPT09IHZvaWQgMCkge1xuICAgIHNlZWQgPSAwO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gKytzZWVkO1xuICB9O1xufVxuXG52YXIgdWlkID0gYXV0b0luYygpO1xuXG52YXIgcGFzc2l2ZUV2ZW50U3VwcG9ydDtcbnZhciBoYW5kbGVyc01hcCA9IHt9O1xudmFyIGVuYWJsZWRJbnN0YW5jZXMgPSB7fTtcbnZhciB0b3VjaEV2ZW50cyA9IFsndG91Y2hzdGFydCcsICd0b3VjaG1vdmUnXTtcbnZhciBJR05PUkVfQ0xBU1NfTkFNRSA9ICdpZ25vcmUtcmVhY3Qtb25jbGlja291dHNpZGUnO1xuLyoqXG4gKiBPcHRpb25zIGZvciBhZGRFdmVudEhhbmRsZXIgYW5kIHJlbW92ZUV2ZW50SGFuZGxlclxuICovXG5cbmZ1bmN0aW9uIGdldEV2ZW50SGFuZGxlck9wdGlvbnMoaW5zdGFuY2UsIGV2ZW50TmFtZSkge1xuICB2YXIgaGFuZGxlck9wdGlvbnMgPSBudWxsO1xuICB2YXIgaXNUb3VjaEV2ZW50ID0gdG91Y2hFdmVudHMuaW5kZXhPZihldmVudE5hbWUpICE9PSAtMTtcblxuICBpZiAoaXNUb3VjaEV2ZW50ICYmIHBhc3NpdmVFdmVudFN1cHBvcnQpIHtcbiAgICBoYW5kbGVyT3B0aW9ucyA9IHtcbiAgICAgIHBhc3NpdmU6ICFpbnN0YW5jZS5wcm9wcy5wcmV2ZW50RGVmYXVsdFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gaGFuZGxlck9wdGlvbnM7XG59XG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIHRoZSBIT0MgZnVuY3Rpb24gdGhhdCB5b3UnbGwgdXNlXG4gKiBpbiBvcmRlciB0byBpbXBhcnQgb25PdXRzaWRlQ2xpY2sgbGlzdGVuaW5nIHRvIGFuXG4gKiBhcmJpdHJhcnkgY29tcG9uZW50LiBJdCBnZXRzIGNhbGxlZCBhdCB0aGUgZW5kIG9mIHRoZVxuICogYm9vdHN0cmFwcGluZyBjb2RlIHRvIHlpZWxkIGFuIGluc3RhbmNlIG9mIHRoZVxuICogb25DbGlja091dHNpZGVIT0MgZnVuY3Rpb24gZGVmaW5lZCBpbnNpZGUgc2V0dXBIT0MoKS5cbiAqL1xuXG5cbmZ1bmN0aW9uIG9uQ2xpY2tPdXRzaWRlSE9DKFdyYXBwZWRDb21wb25lbnQsIGNvbmZpZykge1xuICB2YXIgX2NsYXNzLCBfdGVtcDtcblxuICB2YXIgY29tcG9uZW50TmFtZSA9IFdyYXBwZWRDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgV3JhcHBlZENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnQnO1xuICByZXR1cm4gX3RlbXAgPSBfY2xhc3MgPVxuICAvKiNfX1BVUkVfXyovXG4gIGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gICAgX2luaGVyaXRzTG9vc2Uob25DbGlja091dHNpZGUsIF9Db21wb25lbnQpO1xuXG4gICAgZnVuY3Rpb24gb25DbGlja091dHNpZGUocHJvcHMpIHtcbiAgICAgIHZhciBfdGhpcztcblxuICAgICAgX3RoaXMgPSBfQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMpIHx8IHRoaXM7XG5cbiAgICAgIF90aGlzLl9fb3V0c2lkZUNsaWNrSGFuZGxlciA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBpZiAodHlwZW9mIF90aGlzLl9fY2xpY2tPdXRzaWRlSGFuZGxlclByb3AgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBfdGhpcy5fX2NsaWNrT3V0c2lkZUhhbmRsZXJQcm9wKGV2ZW50KTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpbnN0YW5jZSA9IF90aGlzLmdldEluc3RhbmNlKCk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5wcm9wcy5oYW5kbGVDbGlja091dHNpZGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBpbnN0YW5jZS5wcm9wcy5oYW5kbGVDbGlja091dHNpZGUoZXZlbnQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuaGFuZGxlQ2xpY2tPdXRzaWRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgaW5zdGFuY2UuaGFuZGxlQ2xpY2tPdXRzaWRlKGV2ZW50KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcmFwcGVkQ29tcG9uZW50OiBcIiArIGNvbXBvbmVudE5hbWUgKyBcIiBsYWNrcyBhIGhhbmRsZUNsaWNrT3V0c2lkZShldmVudCkgZnVuY3Rpb24gZm9yIHByb2Nlc3Npbmcgb3V0c2lkZSBjbGljayBldmVudHMuXCIpO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMuX19nZXRDb21wb25lbnROb2RlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBfdGhpcy5nZXRJbnN0YW5jZSgpO1xuXG4gICAgICAgIGlmIChjb25maWcgJiYgdHlwZW9mIGNvbmZpZy5zZXRDbGlja091dHNpZGVSZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gY29uZmlnLnNldENsaWNrT3V0c2lkZVJlZigpKGluc3RhbmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2Uuc2V0Q2xpY2tPdXRzaWRlUmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIGluc3RhbmNlLnNldENsaWNrT3V0c2lkZVJlZigpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlYWN0RG9tLmZpbmRET01Ob2RlKGluc3RhbmNlKTtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLmVuYWJsZU9uQ2xpY2tPdXRzaWRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJyB8fCBlbmFibGVkSW5zdGFuY2VzW190aGlzLl91aWRdKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBwYXNzaXZlRXZlbnRTdXBwb3J0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHBhc3NpdmVFdmVudFN1cHBvcnQgPSB0ZXN0UGFzc2l2ZUV2ZW50U3VwcG9ydCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZW5hYmxlZEluc3RhbmNlc1tfdGhpcy5fdWlkXSA9IHRydWU7XG4gICAgICAgIHZhciBldmVudHMgPSBfdGhpcy5wcm9wcy5ldmVudFR5cGVzO1xuXG4gICAgICAgIGlmICghZXZlbnRzLmZvckVhY2gpIHtcbiAgICAgICAgICBldmVudHMgPSBbZXZlbnRzXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGhhbmRsZXJzTWFwW190aGlzLl91aWRdID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgaWYgKF90aGlzLmNvbXBvbmVudE5vZGUgPT09IG51bGwpIHJldHVybjtcblxuICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy5wcmV2ZW50RGVmYXVsdCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoX3RoaXMucHJvcHMuc3RvcFByb3BhZ2F0aW9uKSB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoX3RoaXMucHJvcHMuZXhjbHVkZVNjcm9sbGJhciAmJiBjbGlja2VkU2Nyb2xsYmFyKGV2ZW50KSkgcmV0dXJuO1xuICAgICAgICAgIHZhciBjdXJyZW50ID0gZXZlbnQudGFyZ2V0O1xuXG4gICAgICAgICAgaWYgKGZpbmRIaWdoZXN0KGN1cnJlbnQsIF90aGlzLmNvbXBvbmVudE5vZGUsIF90aGlzLnByb3BzLm91dHNpZGVDbGlja0lnbm9yZUNsYXNzKSAhPT0gZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfdGhpcy5fX291dHNpZGVDbGlja0hhbmRsZXIoZXZlbnQpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChldmVudE5hbWUpIHtcbiAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgaGFuZGxlcnNNYXBbX3RoaXMuX3VpZF0sIGdldEV2ZW50SGFuZGxlck9wdGlvbnMoX3RoaXMsIGV2ZW50TmFtZSkpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLmRpc2FibGVPbkNsaWNrT3V0c2lkZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVsZXRlIGVuYWJsZWRJbnN0YW5jZXNbX3RoaXMuX3VpZF07XG4gICAgICAgIHZhciBmbiA9IGhhbmRsZXJzTWFwW190aGlzLl91aWRdO1xuXG4gICAgICAgIGlmIChmbiAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdmFyIGV2ZW50cyA9IF90aGlzLnByb3BzLmV2ZW50VHlwZXM7XG5cbiAgICAgICAgICBpZiAoIWV2ZW50cy5mb3JFYWNoKSB7XG4gICAgICAgICAgICBldmVudHMgPSBbZXZlbnRzXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBldmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnROYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGZuLCBnZXRFdmVudEhhbmRsZXJPcHRpb25zKF90aGlzLCBldmVudE5hbWUpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBkZWxldGUgaGFuZGxlcnNNYXBbX3RoaXMuX3VpZF07XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIF90aGlzLmdldFJlZiA9IGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLmluc3RhbmNlUmVmID0gcmVmO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMuX3VpZCA9IHVpZCgpO1xuICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBY2Nlc3MgdGhlIFdyYXBwZWRDb21wb25lbnQncyBpbnN0YW5jZS5cbiAgICAgKi9cblxuXG4gICAgdmFyIF9wcm90byA9IG9uQ2xpY2tPdXRzaWRlLnByb3RvdHlwZTtcblxuICAgIF9wcm90by5nZXRJbnN0YW5jZSA9IGZ1bmN0aW9uIGdldEluc3RhbmNlKCkge1xuICAgICAgaWYgKCFXcmFwcGVkQ29tcG9uZW50LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVmID0gdGhpcy5pbnN0YW5jZVJlZjtcbiAgICAgIHJldHVybiByZWYuZ2V0SW5zdGFuY2UgPyByZWYuZ2V0SW5zdGFuY2UoKSA6IHJlZjtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQWRkIGNsaWNrIGxpc3RlbmVycyB0byB0aGUgY3VycmVudCBkb2N1bWVudCxcbiAgICAgKiBsaW5rZWQgdG8gdGhpcyBjb21wb25lbnQncyBzdGF0ZS5cbiAgICAgKi9cbiAgICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIC8vIElmIHdlIGFyZSBpbiBhbiBlbnZpcm9ubWVudCB3aXRob3V0IGEgRE9NIHN1Y2hcbiAgICAgIC8vIGFzIHNoYWxsb3cgcmVuZGVyaW5nIG9yIHNuYXBzaG90cyB0aGVuIHdlIGV4aXRcbiAgICAgIC8vIGVhcmx5IHRvIHByZXZlbnQgYW55IHVuaGFuZGxlZCBlcnJvcnMgYmVpbmcgdGhyb3duLlxuICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcgfHwgIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgaW5zdGFuY2UgPSB0aGlzLmdldEluc3RhbmNlKCk7XG5cbiAgICAgIGlmIChjb25maWcgJiYgdHlwZW9mIGNvbmZpZy5oYW5kbGVDbGlja091dHNpZGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5fX2NsaWNrT3V0c2lkZUhhbmRsZXJQcm9wID0gY29uZmlnLmhhbmRsZUNsaWNrT3V0c2lkZShpbnN0YW5jZSk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9fY2xpY2tPdXRzaWRlSGFuZGxlclByb3AgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcmFwcGVkQ29tcG9uZW50OiBcIiArIGNvbXBvbmVudE5hbWUgKyBcIiBsYWNrcyBhIGZ1bmN0aW9uIGZvciBwcm9jZXNzaW5nIG91dHNpZGUgY2xpY2sgZXZlbnRzIHNwZWNpZmllZCBieSB0aGUgaGFuZGxlQ2xpY2tPdXRzaWRlIGNvbmZpZyBvcHRpb24uXCIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29tcG9uZW50Tm9kZSA9IHRoaXMuX19nZXRDb21wb25lbnROb2RlKCk7IC8vIHJldHVybiBlYXJseSBzbyB3ZSBkb250IGluaXRpYXRlIG9uQ2xpY2tPdXRzaWRlXG5cbiAgICAgIGlmICh0aGlzLnByb3BzLmRpc2FibGVPbkNsaWNrT3V0c2lkZSkgcmV0dXJuO1xuICAgICAgdGhpcy5lbmFibGVPbkNsaWNrT3V0c2lkZSgpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgdGhpcy5jb21wb25lbnROb2RlID0gdGhpcy5fX2dldENvbXBvbmVudE5vZGUoKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbGwgZG9jdW1lbnQncyBldmVudCBsaXN0ZW5lcnMgZm9yIHRoaXMgY29tcG9uZW50XG4gICAgICovXG5cblxuICAgIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5kaXNhYmxlT25DbGlja091dHNpZGUoKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIENhbiBiZSBjYWxsZWQgdG8gZXhwbGljaXRseSBlbmFibGUgZXZlbnQgbGlzdGVuaW5nXG4gICAgICogZm9yIGNsaWNrcyBhbmQgdG91Y2hlcyBvdXRzaWRlIG9mIHRoaXMgZWxlbWVudC5cbiAgICAgKi9cblxuXG4gICAgLyoqXG4gICAgICogUGFzcy10aHJvdWdoIHJlbmRlclxuICAgICAqL1xuICAgIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGV4Y2x1ZGVTY3JvbGxiYXIgPSBfcHJvcHMuZXhjbHVkZVNjcm9sbGJhcixcbiAgICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyQxKF9wcm9wcywgW1wiZXhjbHVkZVNjcm9sbGJhclwiXSk7XG5cbiAgICAgIGlmIChXcmFwcGVkQ29tcG9uZW50LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KSB7XG4gICAgICAgIHByb3BzLnJlZiA9IHRoaXMuZ2V0UmVmO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvcHMud3JhcHBlZFJlZiA9IHRoaXMuZ2V0UmVmO1xuICAgICAgfVxuXG4gICAgICBwcm9wcy5kaXNhYmxlT25DbGlja091dHNpZGUgPSB0aGlzLmRpc2FibGVPbkNsaWNrT3V0c2lkZTtcbiAgICAgIHByb3BzLmVuYWJsZU9uQ2xpY2tPdXRzaWRlID0gdGhpcy5lbmFibGVPbkNsaWNrT3V0c2lkZTtcbiAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFdyYXBwZWRDb21wb25lbnQsIHByb3BzKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIG9uQ2xpY2tPdXRzaWRlO1xuICB9KFJlYWN0LkNvbXBvbmVudCksIF9jbGFzcy5kaXNwbGF5TmFtZSA9IFwiT25DbGlja091dHNpZGUoXCIgKyBjb21wb25lbnROYW1lICsgXCIpXCIsIF9jbGFzcy5kZWZhdWx0UHJvcHMgPSB7XG4gICAgZXZlbnRUeXBlczogWydtb3VzZWRvd24nLCAndG91Y2hzdGFydCddLFxuICAgIGV4Y2x1ZGVTY3JvbGxiYXI6IGNvbmZpZyAmJiBjb25maWcuZXhjbHVkZVNjcm9sbGJhciB8fCBmYWxzZSxcbiAgICBvdXRzaWRlQ2xpY2tJZ25vcmVDbGFzczogSUdOT1JFX0NMQVNTX05BTUUsXG4gICAgcHJldmVudERlZmF1bHQ6IGZhbHNlLFxuICAgIHN0b3BQcm9wYWdhdGlvbjogZmFsc2VcbiAgfSwgX2NsYXNzLmdldENsYXNzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBXcmFwcGVkQ29tcG9uZW50LmdldENsYXNzID8gV3JhcHBlZENvbXBvbmVudC5nZXRDbGFzcygpIDogV3JhcHBlZENvbXBvbmVudDtcbiAgfSwgX3RlbXA7XG59XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbnZhciBpc0FyZ3VtZW50cyA9IGZ1bmN0aW9uIGlzQXJndW1lbnRzKHZhbHVlKSB7XG5cdHZhciBzdHIgPSB0b1N0ci5jYWxsKHZhbHVlKTtcblx0dmFyIGlzQXJncyA9IHN0ciA9PT0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cdGlmICghaXNBcmdzKSB7XG5cdFx0aXNBcmdzID0gc3RyICE9PSAnW29iamVjdCBBcnJheV0nICYmXG5cdFx0XHR2YWx1ZSAhPT0gbnVsbCAmJlxuXHRcdFx0dHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuXHRcdFx0dHlwZW9mIHZhbHVlLmxlbmd0aCA9PT0gJ251bWJlcicgJiZcblx0XHRcdHZhbHVlLmxlbmd0aCA+PSAwICYmXG5cdFx0XHR0b1N0ci5jYWxsKHZhbHVlLmNhbGxlZSkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG5cdH1cblx0cmV0dXJuIGlzQXJncztcbn07XG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyQyID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblx0dmFyIHRvU3RyJDEgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXHR2YXIgaXNBcmdzID0gaXNBcmd1bWVudHM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcblx0dmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cdHZhciBoYXNEb250RW51bUJ1ZyA9ICFpc0VudW1lcmFibGUuY2FsbCh7IHRvU3RyaW5nOiBudWxsIH0sICd0b1N0cmluZycpO1xuXHR2YXIgaGFzUHJvdG9FbnVtQnVnID0gaXNFbnVtZXJhYmxlLmNhbGwoZnVuY3Rpb24gKCkge30sICdwcm90b3R5cGUnKTtcblx0dmFyIGRvbnRFbnVtcyA9IFtcblx0XHQndG9TdHJpbmcnLFxuXHRcdCd0b0xvY2FsZVN0cmluZycsXG5cdFx0J3ZhbHVlT2YnLFxuXHRcdCdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0J2lzUHJvdG90eXBlT2YnLFxuXHRcdCdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0J2NvbnN0cnVjdG9yJ1xuXHRdO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiAobykge1xuXHRcdHZhciBjdG9yID0gby5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gY3RvciAmJiBjdG9yLnByb3RvdHlwZSA9PT0gbztcblx0fTtcblx0dmFyIGV4Y2x1ZGVkS2V5cyA9IHtcblx0XHQkYXBwbGljYXRpb25DYWNoZTogdHJ1ZSxcblx0XHQkY29uc29sZTogdHJ1ZSxcblx0XHQkZXh0ZXJuYWw6IHRydWUsXG5cdFx0JGZyYW1lOiB0cnVlLFxuXHRcdCRmcmFtZUVsZW1lbnQ6IHRydWUsXG5cdFx0JGZyYW1lczogdHJ1ZSxcblx0XHQkaW5uZXJIZWlnaHQ6IHRydWUsXG5cdFx0JGlubmVyV2lkdGg6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmNoYW5nZTogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuZXJyb3I6IHRydWUsXG5cdFx0JG91dGVySGVpZ2h0OiB0cnVlLFxuXHRcdCRvdXRlcldpZHRoOiB0cnVlLFxuXHRcdCRwYWdlWE9mZnNldDogdHJ1ZSxcblx0XHQkcGFnZVlPZmZzZXQ6IHRydWUsXG5cdFx0JHBhcmVudDogdHJ1ZSxcblx0XHQkc2Nyb2xsTGVmdDogdHJ1ZSxcblx0XHQkc2Nyb2xsVG9wOiB0cnVlLFxuXHRcdCRzY3JvbGxYOiB0cnVlLFxuXHRcdCRzY3JvbGxZOiB0cnVlLFxuXHRcdCRzZWxmOiB0cnVlLFxuXHRcdCR3ZWJraXRJbmRleGVkREI6IHRydWUsXG5cdFx0JHdlYmtpdFN0b3JhZ2VJbmZvOiB0cnVlLFxuXHRcdCR3aW5kb3c6IHRydWVcblx0fTtcblx0dmFyIGhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRmb3IgKHZhciBrIGluIHdpbmRvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFleGNsdWRlZEtleXNbJyQnICsga10gJiYgaGFzJDIuY2FsbCh3aW5kb3csIGspICYmIHdpbmRvd1trXSAhPT0gbnVsbCAmJiB0eXBlb2Ygd2luZG93W2tdID09PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZSh3aW5kb3dba10pO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KCkpO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGVJZk5vdEJ1Z2d5ID0gZnVuY3Rpb24gKG8pIHtcblx0XHQvKiBnbG9iYWwgd2luZG93ICovXG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNBdXRvbWF0aW9uRXF1YWxpdHlCdWcpIHtcblx0XHRcdHJldHVybiBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZShvKTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZShvKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9O1xuXG5cdGtleXNTaGltID0gZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcblx0XHR2YXIgaXNPYmplY3QgPSBvYmplY3QgIT09IG51bGwgJiYgdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCc7XG5cdFx0dmFyIGlzRnVuY3Rpb24gPSB0b1N0ciQxLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblx0XHR2YXIgaXNBcmd1bWVudHMgPSBpc0FyZ3Mob2JqZWN0KTtcblx0XHR2YXIgaXNTdHJpbmcgPSBpc09iamVjdCAmJiB0b1N0ciQxLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cdFx0dmFyIHRoZUtleXMgPSBbXTtcblxuXHRcdGlmICghaXNPYmplY3QgJiYgIWlzRnVuY3Rpb24gJiYgIWlzQXJndW1lbnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIHNraXBQcm90byA9IGhhc1Byb3RvRW51bUJ1ZyAmJiBpc0Z1bmN0aW9uO1xuXHRcdGlmIChpc1N0cmluZyAmJiBvYmplY3QubGVuZ3RoID4gMCAmJiAhaGFzJDIuY2FsbChvYmplY3QsIDApKSB7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGkpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaXNBcmd1bWVudHMgJiYgb2JqZWN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgb2JqZWN0Lmxlbmd0aDsgKytqKSB7XG5cdFx0XHRcdHRoZUtleXMucHVzaChTdHJpbmcoaikpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKHZhciBuYW1lIGluIG9iamVjdCkge1xuXHRcdFx0XHRpZiAoIShza2lwUHJvdG8gJiYgbmFtZSA9PT0gJ3Byb3RvdHlwZScpICYmIGhhcyQyLmNhbGwob2JqZWN0LCBuYW1lKSkge1xuXHRcdFx0XHRcdHRoZUtleXMucHVzaChTdHJpbmcobmFtZSkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGhhc0RvbnRFbnVtQnVnKSB7XG5cdFx0XHR2YXIgc2tpcENvbnN0cnVjdG9yID0gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGVJZk5vdEJ1Z2d5KG9iamVjdCk7XG5cblx0XHRcdGZvciAodmFyIGsgPSAwOyBrIDwgZG9udEVudW1zLmxlbmd0aDsgKytrKSB7XG5cdFx0XHRcdGlmICghKHNraXBDb25zdHJ1Y3RvciAmJiBkb250RW51bXNba10gPT09ICdjb25zdHJ1Y3RvcicpICYmIGhhcyQyLmNhbGwob2JqZWN0LCBkb250RW51bXNba10pKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoZUtleXM7XG5cdH07XG59XG52YXIgaW1wbGVtZW50YXRpb24gPSBrZXlzU2hpbTtcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG5cbnZhciBvcmlnS2V5cyA9IE9iamVjdC5rZXlzO1xudmFyIGtleXNTaGltJDEgPSBvcmlnS2V5cyA/IGZ1bmN0aW9uIGtleXMobykgeyByZXR1cm4gb3JpZ0tleXMobyk7IH0gOiBpbXBsZW1lbnRhdGlvbjtcblxudmFyIG9yaWdpbmFsS2V5cyA9IE9iamVjdC5rZXlzO1xuXG5rZXlzU2hpbSQxLnNoaW0gPSBmdW5jdGlvbiBzaGltT2JqZWN0S2V5cygpIHtcblx0aWYgKE9iamVjdC5rZXlzKSB7XG5cdFx0dmFyIGtleXNXb3Jrc1dpdGhBcmd1bWVudHMgPSAoZnVuY3Rpb24gKCkge1xuXHRcdFx0Ly8gU2FmYXJpIDUuMCBidWdcblx0XHRcdHZhciBhcmdzID0gT2JqZWN0LmtleXMoYXJndW1lbnRzKTtcblx0XHRcdHJldHVybiBhcmdzICYmIGFyZ3MubGVuZ3RoID09PSBhcmd1bWVudHMubGVuZ3RoO1xuXHRcdH0oMSwgMikpO1xuXHRcdGlmICgha2V5c1dvcmtzV2l0aEFyZ3VtZW50cykge1xuXHRcdFx0T2JqZWN0LmtleXMgPSBmdW5jdGlvbiBrZXlzKG9iamVjdCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGZ1bmMtbmFtZS1tYXRjaGluZ1xuXHRcdFx0XHRpZiAoaXNBcmd1bWVudHMob2JqZWN0KSkge1xuXHRcdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMoc2xpY2UuY2FsbChvYmplY3QpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxLZXlzKG9iamVjdCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRPYmplY3Qua2V5cyA9IGtleXNTaGltJDE7XG5cdH1cblx0cmV0dXJuIE9iamVjdC5rZXlzIHx8IGtleXNTaGltJDE7XG59O1xuXG52YXIgb2JqZWN0S2V5cyA9IGtleXNTaGltJDE7XG5cbnZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyA9PT0gJ3N5bWJvbCc7XG52YXIgdG9TdHIkMiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbnZhciBpc1N0YW5kYXJkQXJndW1lbnRzID0gZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUpIHtcblx0aWYgKGhhc1RvU3RyaW5nVGFnICYmIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnIGluIHZhbHVlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiB0b1N0ciQyLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBBcmd1bWVudHNdJztcbn07XG5cbnZhciBpc0xlZ2FjeUFyZ3VtZW50cyA9IGZ1bmN0aW9uIGlzQXJndW1lbnRzKHZhbHVlKSB7XG5cdGlmIChpc1N0YW5kYXJkQXJndW1lbnRzKHZhbHVlKSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJlxuXHRcdHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcblx0XHR0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuXHRcdHZhbHVlLmxlbmd0aCA+PSAwICYmXG5cdFx0dG9TdHIkMi5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgQXJyYXldJyAmJlxuXHRcdHRvU3RyJDIuY2FsbCh2YWx1ZS5jYWxsZWUpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xufTtcblxudmFyIHN1cHBvcnRzU3RhbmRhcmRBcmd1bWVudHMgPSAoZnVuY3Rpb24gKCkge1xuXHRyZXR1cm4gaXNTdGFuZGFyZEFyZ3VtZW50cyhhcmd1bWVudHMpO1xufSgpKTtcblxuaXNTdGFuZGFyZEFyZ3VtZW50cy5pc0xlZ2FjeUFyZ3VtZW50cyA9IGlzTGVnYWN5QXJndW1lbnRzOyAvLyBmb3IgdGVzdHNcblxudmFyIGlzQXJndW1lbnRzJDEgPSBzdXBwb3J0c1N0YW5kYXJkQXJndW1lbnRzID8gaXNTdGFuZGFyZEFyZ3VtZW50cyA6IGlzTGVnYWN5QXJndW1lbnRzO1xuXG52YXIgaGFzU3ltYm9scyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbCgnZm9vJykgPT09ICdzeW1ib2wnO1xuXG52YXIgdG9TdHIkMyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgY29uY2F0ID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdDtcbnZhciBvcmlnRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKGZuKSB7XG5cdHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdG9TdHIkMy5jYWxsKGZuKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn07XG5cbnZhciBhcmVQcm9wZXJ0eURlc2NyaXB0b3JzU3VwcG9ydGVkID0gZnVuY3Rpb24gKCkge1xuXHR2YXIgb2JqID0ge307XG5cdHRyeSB7XG5cdFx0b3JpZ0RlZmluZVByb3BlcnR5KG9iaiwgJ3gnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogb2JqIH0pO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycywgbm8tcmVzdHJpY3RlZC1zeW50YXhcblx0XHRmb3IgKHZhciBfIGluIG9iaikgeyAvLyBqc2NzOmlnbm9yZSBkaXNhbGxvd1VudXNlZFZhcmlhYmxlc1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gb2JqLnggPT09IG9iajtcblx0fSBjYXRjaCAoZSkgeyAvKiB0aGlzIGlzIElFIDguICovXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xudmFyIHN1cHBvcnRzRGVzY3JpcHRvcnMgPSBvcmlnRGVmaW5lUHJvcGVydHkgJiYgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCgpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lLCB2YWx1ZSwgcHJlZGljYXRlKSB7XG5cdGlmIChuYW1lIGluIG9iamVjdCAmJiAoIWlzRnVuY3Rpb24ocHJlZGljYXRlKSB8fCAhcHJlZGljYXRlKCkpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGlmIChzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0b3JpZ0RlZmluZVByb3BlcnR5KG9iamVjdCwgbmFtZSwge1xuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0XHR3cml0YWJsZTogdHJ1ZVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9iamVjdFtuYW1lXSA9IHZhbHVlO1xuXHR9XG59O1xuXG52YXIgZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIChvYmplY3QsIG1hcCkge1xuXHR2YXIgcHJlZGljYXRlcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDoge307XG5cdHZhciBwcm9wcyA9IG9iamVjdEtleXMobWFwKTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHRwcm9wcyA9IGNvbmNhdC5jYWxsKHByb3BzLCBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG1hcCkpO1xuXHR9XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpICs9IDEpIHtcblx0XHRkZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BzW2ldLCBtYXBbcHJvcHNbaV1dLCBwcmVkaWNhdGVzW3Byb3BzW2ldXSk7XG5cdH1cbn07XG5cbmRlZmluZVByb3BlcnRpZXMuc3VwcG9ydHNEZXNjcmlwdG9ycyA9ICEhc3VwcG9ydHNEZXNjcmlwdG9ycztcblxudmFyIGRlZmluZVByb3BlcnRpZXNfMSA9IGRlZmluZVByb3BlcnRpZXM7XG5cbnZhciBudW1iZXJJc05hTiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufTtcblxudmFyIGltcGxlbWVudGF0aW9uJDEgPSBmdW5jdGlvbiBpcyhhLCBiKSB7XG5cdGlmIChhID09PSAwICYmIGIgPT09IDApIHtcblx0XHRyZXR1cm4gMSAvIGEgPT09IDEgLyBiO1xuXHR9XG5cdGlmIChhID09PSBiKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0aWYgKG51bWJlcklzTmFOKGEpICYmIG51bWJlcklzTmFOKGIpKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxudmFyIHBvbHlmaWxsID0gZnVuY3Rpb24gZ2V0UG9seWZpbGwoKSB7XG5cdHJldHVybiB0eXBlb2YgT2JqZWN0LmlzID09PSAnZnVuY3Rpb24nID8gT2JqZWN0LmlzIDogaW1wbGVtZW50YXRpb24kMTtcbn07XG5cbnZhciBzaGltID0gZnVuY3Rpb24gc2hpbU9iamVjdElzKCkge1xuXHR2YXIgcG9seWZpbGwkMSA9IHBvbHlmaWxsKCk7XG5cdGRlZmluZVByb3BlcnRpZXNfMShPYmplY3QsIHsgaXM6IHBvbHlmaWxsJDEgfSwge1xuXHRcdGlzOiBmdW5jdGlvbiB0ZXN0T2JqZWN0SXMoKSB7XG5cdFx0XHRyZXR1cm4gT2JqZWN0LmlzICE9PSBwb2x5ZmlsbCQxO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBwb2x5ZmlsbCQxO1xufTtcblxudmFyIHBvbHlmaWxsJDEgPSBjYWxsQmluZChwb2x5ZmlsbCgpLCBPYmplY3QpO1xuXG5kZWZpbmVQcm9wZXJ0aWVzXzEocG9seWZpbGwkMSwge1xuXHRnZXRQb2x5ZmlsbDogcG9seWZpbGwsXG5cdGltcGxlbWVudGF0aW9uOiBpbXBsZW1lbnRhdGlvbiQxLFxuXHRzaGltOiBzaGltXG59KTtcblxudmFyIG9iamVjdElzID0gcG9seWZpbGwkMTtcblxuLyogZXNsaW50IGNvbXBsZXhpdHk6IFsyLCAxOF0sIG1heC1zdGF0ZW1lbnRzOiBbMiwgMzNdICovXG52YXIgc2hhbXMgPSBmdW5jdGlvbiBoYXNTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnKSB7IHJldHVybiB0cnVlOyB9XG5cblx0dmFyIG9iaiA9IHt9O1xuXHR2YXIgc3ltID0gU3ltYm9sKCd0ZXN0Jyk7XG5cdHZhciBzeW1PYmogPSBPYmplY3Qoc3ltKTtcblx0aWYgKHR5cGVvZiBzeW0gPT09ICdzdHJpbmcnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltT2JqKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9vYmplY3QuYXNzaWduL2lzc3Vlcy8xN1xuXHQvLyBpZiAoc3ltIGluc3RhbmNlb2YgU3ltYm9sKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMvaXNzdWVzLzRcblx0Ly8gaWYgKCEoc3ltT2JqIGluc3RhbmNlb2YgU3ltYm9sKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBpZiAodHlwZW9mIFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIGlmIChTdHJpbmcoc3ltKSAhPT0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bVZhbCA9IDQyO1xuXHRvYmpbc3ltXSA9IHN5bVZhbDtcblx0Zm9yIChzeW0gaW4gb2JqKSB7IHJldHVybiBmYWxzZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG5cdGlmICh0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKTtcblx0aWYgKHN5bXMubGVuZ3RoICE9PSAxIHx8IHN5bXNbMF0gIT09IHN5bSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKTtcblx0XHRpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gc3ltVmFsIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSAhPT0gdHJ1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcblxudmFyIG9yaWdTeW1ib2wgPSBjb21tb25qc0dsb2JhbC5TeW1ib2w7XG5cblxudmFyIGhhc1N5bWJvbHMkMSA9IGZ1bmN0aW9uIGhhc05hdGl2ZVN5bWJvbHMoKSB7XG5cdGlmICh0eXBlb2Ygb3JpZ1N5bWJvbCAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2Ygb3JpZ1N5bWJvbCgnZm9vJykgIT09ICdzeW1ib2wnKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIFN5bWJvbCgnYmFyJykgIT09ICdzeW1ib2wnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdHJldHVybiBzaGFtcygpO1xufTtcblxudmFyIGhhc1N5bWJvbHMkMiA9IGhhc1N5bWJvbHMkMSgpO1xudmFyIGhhc1RvU3RyaW5nVGFnJDEgPSBoYXNTeW1ib2xzJDIgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyA9PT0gJ3N5bWJvbCc7XG52YXIgaGFzT3duUHJvcGVydHk7XG52YXIgcmVnZXhFeGVjO1xudmFyIGlzUmVnZXhNYXJrZXI7XG52YXIgYmFkU3RyaW5naWZpZXI7XG5cbmlmIChoYXNUb1N0cmluZ1RhZyQxKSB7XG5cdGhhc093blByb3BlcnR5ID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuXHRyZWdleEV4ZWMgPSBGdW5jdGlvbi5jYWxsLmJpbmQoUmVnRXhwLnByb3RvdHlwZS5leGVjKTtcblx0aXNSZWdleE1hcmtlciA9IHt9O1xuXG5cdHZhciB0aHJvd1JlZ2V4TWFya2VyID0gZnVuY3Rpb24gKCkge1xuXHRcdHRocm93IGlzUmVnZXhNYXJrZXI7XG5cdH07XG5cdGJhZFN0cmluZ2lmaWVyID0ge1xuXHRcdHRvU3RyaW5nOiB0aHJvd1JlZ2V4TWFya2VyLFxuXHRcdHZhbHVlT2Y6IHRocm93UmVnZXhNYXJrZXJcblx0fTtcblxuXHRpZiAodHlwZW9mIFN5bWJvbC50b1ByaW1pdGl2ZSA9PT0gJ3N5bWJvbCcpIHtcblx0XHRiYWRTdHJpbmdpZmllcltTeW1ib2wudG9QcmltaXRpdmVdID0gdGhyb3dSZWdleE1hcmtlcjtcblx0fVxufVxuXG52YXIgdG9TdHIkNCA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgcmVnZXhDbGFzcyA9ICdbb2JqZWN0IFJlZ0V4cF0nO1xuXG52YXIgaXNSZWdleCA9IGhhc1RvU3RyaW5nVGFnJDFcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG5cdD8gZnVuY3Rpb24gaXNSZWdleCh2YWx1ZSkge1xuXHRcdGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHZhciBkZXNjcmlwdG9yID0gZ09QRCh2YWx1ZSwgJ2xhc3RJbmRleCcpO1xuXHRcdHZhciBoYXNMYXN0SW5kZXhEYXRhUHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGhhc093blByb3BlcnR5KGRlc2NyaXB0b3IsICd2YWx1ZScpO1xuXHRcdGlmICghaGFzTGFzdEluZGV4RGF0YVByb3BlcnR5KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdHJlZ2V4RXhlYyh2YWx1ZSwgYmFkU3RyaW5naWZpZXIpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHJldHVybiBlID09PSBpc1JlZ2V4TWFya2VyO1xuXHRcdH1cblx0fVxuXHQ6IGZ1bmN0aW9uIGlzUmVnZXgodmFsdWUpIHtcblx0XHQvLyBJbiBvbGRlciBicm93c2VycywgdHlwZW9mIHJlZ2V4IGluY29ycmVjdGx5IHJldHVybnMgJ2Z1bmN0aW9uJ1xuXHRcdGlmICghdmFsdWUgfHwgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0b1N0ciQ0LmNhbGwodmFsdWUpID09PSByZWdleENsYXNzO1xuXHR9O1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG52YXIgaW1wbGVtZW50YXRpb24kMiA9IGZ1bmN0aW9uIGZsYWdzKCkge1xuXHRpZiAodGhpcyAhPSBudWxsICYmIHRoaXMgIT09ICRPYmplY3QodGhpcykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVnRXhwLnByb3RvdHlwZS5mbGFncyBnZXR0ZXIgY2FsbGVkIG9uIG5vbi1vYmplY3QnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gJyc7XG5cdGlmICh0aGlzLmdsb2JhbCkge1xuXHRcdHJlc3VsdCArPSAnZyc7XG5cdH1cblx0aWYgKHRoaXMuaWdub3JlQ2FzZSkge1xuXHRcdHJlc3VsdCArPSAnaSc7XG5cdH1cblx0aWYgKHRoaXMubXVsdGlsaW5lKSB7XG5cdFx0cmVzdWx0ICs9ICdtJztcblx0fVxuXHRpZiAodGhpcy5kb3RBbGwpIHtcblx0XHRyZXN1bHQgKz0gJ3MnO1xuXHR9XG5cdGlmICh0aGlzLnVuaWNvZGUpIHtcblx0XHRyZXN1bHQgKz0gJ3UnO1xuXHR9XG5cdGlmICh0aGlzLnN0aWNreSkge1xuXHRcdHJlc3VsdCArPSAneSc7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzJDEgPSBkZWZpbmVQcm9wZXJ0aWVzXzEuc3VwcG9ydHNEZXNjcmlwdG9ycztcbnZhciAkZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgJFR5cGVFcnJvciQxID0gVHlwZUVycm9yO1xuXG52YXIgcG9seWZpbGwkMiA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRpZiAoIXN1cHBvcnRzRGVzY3JpcHRvcnMkMSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yJDEoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0aWYgKCgvYS9taWcpLmZsYWdzID09PSAnZ2ltJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gJGdPUEQoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJyk7XG5cdFx0aWYgKGRlc2NyaXB0b3IgJiYgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiAoL2EvKS5kb3RBbGwgPT09ICdib29sZWFuJykge1xuXHRcdFx0cmV0dXJuIGRlc2NyaXB0b3IuZ2V0O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb24kMjtcbn07XG5cbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzJDIgPSBkZWZpbmVQcm9wZXJ0aWVzXzEuc3VwcG9ydHNEZXNjcmlwdG9ycztcblxudmFyIGdPUEQkMSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgZGVmaW5lUHJvcGVydHkkMSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBUeXBlRXJyID0gVHlwZUVycm9yO1xudmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xudmFyIHJlZ2V4ID0gL2EvO1xuXG52YXIgc2hpbSQxID0gZnVuY3Rpb24gc2hpbUZsYWdzKCkge1xuXHRpZiAoIXN1cHBvcnRzRGVzY3JpcHRvcnMkMiB8fCAhZ2V0UHJvdG8pIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycignUmVnRXhwLnByb3RvdHlwZS5mbGFncyByZXF1aXJlcyBhIHRydWUgRVM1IGVudmlyb25tZW50IHRoYXQgc3VwcG9ydHMgcHJvcGVydHkgZGVzY3JpcHRvcnMnKTtcblx0fVxuXHR2YXIgcG9seWZpbGwgPSBwb2x5ZmlsbCQyKCk7XG5cdHZhciBwcm90byA9IGdldFByb3RvKHJlZ2V4KTtcblx0dmFyIGRlc2NyaXB0b3IgPSBnT1BEJDEocHJvdG8sICdmbGFncycpO1xuXHRpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5nZXQgIT09IHBvbHlmaWxsKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkkMShwcm90bywgJ2ZsYWdzJywge1xuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRnZXQ6IHBvbHlmaWxsXG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHBvbHlmaWxsO1xufTtcblxudmFyIGZsYWdzQm91bmQgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbiQyKTtcblxuZGVmaW5lUHJvcGVydGllc18xKGZsYWdzQm91bmQsIHtcblx0Z2V0UG9seWZpbGw6IHBvbHlmaWxsJDIsXG5cdGltcGxlbWVudGF0aW9uOiBpbXBsZW1lbnRhdGlvbiQyLFxuXHRzaGltOiBzaGltJDFcbn0pO1xuXG52YXIgcmVnZXhwX3Byb3RvdHlwZV9mbGFncyA9IGZsYWdzQm91bmQ7XG5cbnZhciBnZXREYXkkMSA9IERhdGUucHJvdG90eXBlLmdldERheTtcbnZhciB0cnlEYXRlT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RGF0ZUdldERheUNhbGwodmFsdWUpIHtcblx0dHJ5IHtcblx0XHRnZXREYXkkMS5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcblxudmFyIHRvU3RyJDUgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGRhdGVDbGFzcyA9ICdbb2JqZWN0IERhdGVdJztcbnZhciBoYXNUb1N0cmluZ1RhZyQyID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLnRvU3RyaW5nVGFnID09PSAnc3ltYm9sJztcblxudmFyIGlzRGF0ZU9iamVjdCA9IGZ1bmN0aW9uIGlzRGF0ZU9iamVjdCh2YWx1ZSkge1xuXHRpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gaGFzVG9TdHJpbmdUYWckMiA/IHRyeURhdGVPYmplY3QodmFsdWUpIDogdG9TdHIkNS5jYWxsKHZhbHVlKSA9PT0gZGF0ZUNsYXNzO1xufTtcblxudmFyIGdldFRpbWUkMSA9IERhdGUucHJvdG90eXBlLmdldFRpbWU7XG5cbmZ1bmN0aW9uIGRlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBvcHRpb25zKSB7XG4gIHZhciBvcHRzID0gb3B0aW9ucyB8fCB7fTtcblxuICAvLyA3LjEuIEFsbCBpZGVudGljYWwgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBhcyBkZXRlcm1pbmVkIGJ5ID09PS5cbiAgaWYgKG9wdHMuc3RyaWN0ID8gb2JqZWN0SXMoYWN0dWFsLCBleHBlY3RlZCkgOiBhY3R1YWwgPT09IGV4cGVjdGVkKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyA3LjMuIE90aGVyIHBhaXJzIHRoYXQgZG8gbm90IGJvdGggcGFzcyB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCcsIGVxdWl2YWxlbmNlIGlzIGRldGVybWluZWQgYnkgPT0uXG4gIGlmICghYWN0dWFsIHx8ICFleHBlY3RlZCB8fCAodHlwZW9mIGFjdHVhbCAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIGV4cGVjdGVkICE9PSAnb2JqZWN0JykpIHtcbiAgICByZXR1cm4gb3B0cy5zdHJpY3QgPyBvYmplY3RJcyhhY3R1YWwsIGV4cGVjdGVkKSA6IGFjdHVhbCA9PSBleHBlY3RlZDtcbiAgfVxuXG4gIC8qXG4gICAqIDcuNC4gRm9yIGFsbCBvdGhlciBPYmplY3QgcGFpcnMsIGluY2x1ZGluZyBBcnJheSBvYmplY3RzLCBlcXVpdmFsZW5jZSBpc1xuICAgKiBkZXRlcm1pbmVkIGJ5IGhhdmluZyB0aGUgc2FtZSBudW1iZXIgb2Ygb3duZWQgcHJvcGVydGllcyAoYXMgdmVyaWZpZWRcbiAgICogd2l0aCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwpLCB0aGUgc2FtZSBzZXQgb2Yga2V5c1xuICAgKiAoYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIG9yZGVyKSwgZXF1aXZhbGVudCB2YWx1ZXMgZm9yIGV2ZXJ5XG4gICAqIGNvcnJlc3BvbmRpbmcga2V5LCBhbmQgYW4gaWRlbnRpY2FsICdwcm90b3R5cGUnIHByb3BlcnR5LiBOb3RlOiB0aGlzXG4gICAqIGFjY291bnRzIGZvciBib3RoIG5hbWVkIGFuZCBpbmRleGVkIHByb3BlcnRpZXMgb24gQXJyYXlzLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gIHJldHVybiBvYmpFcXVpdihhY3R1YWwsIGV4cGVjdGVkLCBvcHRzKTtcbn1cblxuZnVuY3Rpb24gaXNVbmRlZmluZWRPck51bGwodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzQnVmZmVyKHgpIHtcbiAgaWYgKCF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgeC5sZW5ndGggIT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh0eXBlb2YgeC5jb3B5ICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB4LnNsaWNlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh4Lmxlbmd0aCA+IDAgJiYgdHlwZW9mIHhbMF0gIT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBvYmpFcXVpdihhLCBiLCBvcHRzKSB7XG4gIC8qIGVzbGludCBtYXgtc3RhdGVtZW50czogWzIsIDUwXSAqL1xuICB2YXIgaSwga2V5O1xuICBpZiAodHlwZW9mIGEgIT09IHR5cGVvZiBiKSB7IHJldHVybiBmYWxzZTsgfVxuICBpZiAoaXNVbmRlZmluZWRPck51bGwoYSkgfHwgaXNVbmRlZmluZWRPck51bGwoYikpIHsgcmV0dXJuIGZhbHNlOyB9XG5cbiAgLy8gYW4gaWRlbnRpY2FsICdwcm90b3R5cGUnIHByb3BlcnR5LlxuICBpZiAoYS5wcm90b3R5cGUgIT09IGIucHJvdG90eXBlKSB7IHJldHVybiBmYWxzZTsgfVxuXG4gIGlmIChpc0FyZ3VtZW50cyQxKGEpICE9PSBpc0FyZ3VtZW50cyQxKGIpKSB7IHJldHVybiBmYWxzZTsgfVxuXG4gIHZhciBhSXNSZWdleCA9IGlzUmVnZXgoYSk7XG4gIHZhciBiSXNSZWdleCA9IGlzUmVnZXgoYik7XG4gIGlmIChhSXNSZWdleCAhPT0gYklzUmVnZXgpIHsgcmV0dXJuIGZhbHNlOyB9XG4gIGlmIChhSXNSZWdleCB8fCBiSXNSZWdleCkge1xuICAgIHJldHVybiBhLnNvdXJjZSA9PT0gYi5zb3VyY2UgJiYgcmVnZXhwX3Byb3RvdHlwZV9mbGFncyhhKSA9PT0gcmVnZXhwX3Byb3RvdHlwZV9mbGFncyhiKTtcbiAgfVxuXG4gIGlmIChpc0RhdGVPYmplY3QoYSkgJiYgaXNEYXRlT2JqZWN0KGIpKSB7XG4gICAgcmV0dXJuIGdldFRpbWUkMS5jYWxsKGEpID09PSBnZXRUaW1lJDEuY2FsbChiKTtcbiAgfVxuXG4gIHZhciBhSXNCdWZmZXIgPSBpc0J1ZmZlcihhKTtcbiAgdmFyIGJJc0J1ZmZlciA9IGlzQnVmZmVyKGIpO1xuICBpZiAoYUlzQnVmZmVyICE9PSBiSXNCdWZmZXIpIHsgcmV0dXJuIGZhbHNlOyB9XG4gIGlmIChhSXNCdWZmZXIgfHwgYklzQnVmZmVyKSB7IC8vICYmIHdvdWxkIHdvcmsgdG9vLCBiZWNhdXNlIGJvdGggYXJlIHRydWUgb3IgYm90aCBmYWxzZSBoZXJlXG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICBmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFbaV0gIT09IGJbaV0pIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBhICE9PSB0eXBlb2YgYikgeyByZXR1cm4gZmFsc2U7IH1cblxuICB0cnkge1xuICAgIHZhciBrYSA9IG9iamVjdEtleXMoYSk7XG4gICAgdmFyIGtiID0gb2JqZWN0S2V5cyhiKTtcbiAgfSBjYXRjaCAoZSkgeyAvLyBoYXBwZW5zIHdoZW4gb25lIGlzIGEgc3RyaW5nIGxpdGVyYWwgYW5kIHRoZSBvdGhlciBpc24ndFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBoYXZpbmcgdGhlIHNhbWUgbnVtYmVyIG9mIG93bmVkIHByb3BlcnRpZXMgKGtleXMgaW5jb3Jwb3JhdGVzIGhhc093blByb3BlcnR5KVxuICBpZiAoa2EubGVuZ3RoICE9PSBrYi5sZW5ndGgpIHsgcmV0dXJuIGZhbHNlOyB9XG5cbiAgLy8gdGhlIHNhbWUgc2V0IG9mIGtleXMgKGFsdGhvdWdoIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBvcmRlciksXG4gIGthLnNvcnQoKTtcbiAga2Iuc29ydCgpO1xuICAvLyB+fn5jaGVhcCBrZXkgdGVzdFxuICBmb3IgKGkgPSBrYS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChrYVtpXSAhPSBrYltpXSkgeyByZXR1cm4gZmFsc2U7IH1cbiAgfVxuICAvLyBlcXVpdmFsZW50IHZhbHVlcyBmb3IgZXZlcnkgY29ycmVzcG9uZGluZyBrZXksIGFuZCB+fn5wb3NzaWJseSBleHBlbnNpdmUgZGVlcCB0ZXN0XG4gIGZvciAoaSA9IGthLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAga2V5ID0ga2FbaV07XG4gICAgaWYgKCFkZWVwRXF1YWwoYVtrZXldLCBiW2tleV0sIG9wdHMpKSB7IHJldHVybiBmYWxzZTsgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbnZhciBkZWVwRXF1YWxfMSA9IGRlZXBFcXVhbDtcblxuLyoqIVxuICogQGZpbGVPdmVydmlldyBLaWNrYXNzIGxpYnJhcnkgdG8gY3JlYXRlIGFuZCBwbGFjZSBwb3BwZXJzIG5lYXIgdGhlaXIgcmVmZXJlbmNlIGVsZW1lbnRzLlxuICogQHZlcnNpb24gMS4xNi4xXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE2IEZlZGVyaWNvIFppdm9sbyBhbmQgY29udHJpYnV0b3JzXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xudmFyIGlzQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCc7XG5cbnZhciB0aW1lb3V0RHVyYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBsb25nZXJUaW1lb3V0QnJvd3NlcnMgPSBbJ0VkZ2UnLCAnVHJpZGVudCcsICdGaXJlZm94J107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbG9uZ2VyVGltZW91dEJyb3dzZXJzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKGlzQnJvd3NlciAmJiBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YobG9uZ2VyVGltZW91dEJyb3dzZXJzW2ldKSA+PSAwKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIDA7XG59KCk7XG5cbmZ1bmN0aW9uIG1pY3JvdGFza0RlYm91bmNlKGZuKSB7XG4gIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY2FsbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNhbGxlZCA9IHRydWU7XG4gICAgd2luZG93LlByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGVkID0gZmFsc2U7XG4gICAgICBmbigpO1xuICAgIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0YXNrRGVib3VuY2UoZm4pIHtcbiAgdmFyIHNjaGVkdWxlZCA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmICghc2NoZWR1bGVkKSB7XG4gICAgICBzY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNjaGVkdWxlZCA9IGZhbHNlO1xuICAgICAgICBmbigpO1xuICAgICAgfSwgdGltZW91dER1cmF0aW9uKTtcbiAgICB9XG4gIH07XG59XG5cbnZhciBzdXBwb3J0c01pY3JvVGFza3MgPSBpc0Jyb3dzZXIgJiYgd2luZG93LlByb21pc2U7XG5cbi8qKlxuKiBDcmVhdGUgYSBkZWJvdW5jZWQgdmVyc2lvbiBvZiBhIG1ldGhvZCwgdGhhdCdzIGFzeW5jaHJvbm91c2x5IGRlZmVycmVkXG4qIGJ1dCBjYWxsZWQgaW4gdGhlIG1pbmltdW0gdGltZSBwb3NzaWJsZS5cbipcbiogQG1ldGhvZFxuKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4qIEBhcmd1bWVudCB7RnVuY3Rpb259IGZuXG4qIEByZXR1cm5zIHtGdW5jdGlvbn1cbiovXG52YXIgZGVib3VuY2UgPSBzdXBwb3J0c01pY3JvVGFza3MgPyBtaWNyb3Rhc2tEZWJvdW5jZSA6IHRhc2tEZWJvdW5jZTtcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gdmFyaWFibGUgaXMgYSBmdW5jdGlvblxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtBbnl9IGZ1bmN0aW9uVG9DaGVjayAtIHZhcmlhYmxlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gYW5zd2VyIHRvOiBpcyBhIGZ1bmN0aW9uP1xuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uJDEoZnVuY3Rpb25Ub0NoZWNrKSB7XG4gIHZhciBnZXRUeXBlID0ge307XG4gIHJldHVybiBmdW5jdGlvblRvQ2hlY2sgJiYgZ2V0VHlwZS50b1N0cmluZy5jYWxsKGZ1bmN0aW9uVG9DaGVjaykgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59XG5cbi8qKlxuICogR2V0IENTUyBjb21wdXRlZCBwcm9wZXJ0eSBvZiB0aGUgZ2l2ZW4gZWxlbWVudFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtFZW1lbnR9IGVsZW1lbnRcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBwcm9wZXJ0eVxuICovXG5mdW5jdGlvbiBnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkoZWxlbWVudCwgcHJvcGVydHkpIHtcbiAgaWYgKGVsZW1lbnQubm9kZVR5cGUgIT09IDEpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgLy8gTk9URTogMSBET00gYWNjZXNzIGhlcmVcbiAgdmFyIHdpbmRvdyA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcbiAgdmFyIGNzcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsIG51bGwpO1xuICByZXR1cm4gcHJvcGVydHkgPyBjc3NbcHJvcGVydHldIDogY3NzO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHBhcmVudE5vZGUgb3IgdGhlIGhvc3Qgb2YgdGhlIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge0VsZW1lbnR9IHBhcmVudFxuICovXG5mdW5jdGlvbiBnZXRQYXJlbnROb2RlKGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQubm9kZU5hbWUgPT09ICdIVE1MJykge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG4gIHJldHVybiBlbGVtZW50LnBhcmVudE5vZGUgfHwgZWxlbWVudC5ob3N0O1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHNjcm9sbGluZyBwYXJlbnQgb2YgdGhlIGdpdmVuIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge0VsZW1lbnR9IHNjcm9sbCBwYXJlbnRcbiAqL1xuZnVuY3Rpb24gZ2V0U2Nyb2xsUGFyZW50KGVsZW1lbnQpIHtcbiAgLy8gUmV0dXJuIGJvZHksIGBnZXRTY3JvbGxgIHdpbGwgdGFrZSBjYXJlIHRvIGdldCB0aGUgY29ycmVjdCBgc2Nyb2xsVG9wYCBmcm9tIGl0XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiBkb2N1bWVudC5ib2R5O1xuICB9XG5cbiAgc3dpdGNoIChlbGVtZW50Lm5vZGVOYW1lKSB7XG4gICAgY2FzZSAnSFRNTCc6XG4gICAgY2FzZSAnQk9EWSc6XG4gICAgICByZXR1cm4gZWxlbWVudC5vd25lckRvY3VtZW50LmJvZHk7XG4gICAgY2FzZSAnI2RvY3VtZW50JzpcbiAgICAgIHJldHVybiBlbGVtZW50LmJvZHk7XG4gIH1cblxuICAvLyBGaXJlZm94IHdhbnQgdXMgdG8gY2hlY2sgYC14YCBhbmQgYC15YCB2YXJpYXRpb25zIGFzIHdlbGxcblxuICB2YXIgX2dldFN0eWxlQ29tcHV0ZWRQcm9wID0gZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KGVsZW1lbnQpLFxuICAgICAgb3ZlcmZsb3cgPSBfZ2V0U3R5bGVDb21wdXRlZFByb3Aub3ZlcmZsb3csXG4gICAgICBvdmVyZmxvd1ggPSBfZ2V0U3R5bGVDb21wdXRlZFByb3Aub3ZlcmZsb3dYLFxuICAgICAgb3ZlcmZsb3dZID0gX2dldFN0eWxlQ29tcHV0ZWRQcm9wLm92ZXJmbG93WTtcblxuICBpZiAoLyhhdXRvfHNjcm9sbHxvdmVybGF5KS8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCkpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiBnZXRTY3JvbGxQYXJlbnQoZ2V0UGFyZW50Tm9kZShlbGVtZW50KSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcmVmZXJlbmNlIG5vZGUgb2YgdGhlIHJlZmVyZW5jZSBvYmplY3QsIG9yIHRoZSByZWZlcmVuY2Ugb2JqZWN0IGl0c2VsZi5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IHJlZmVyZW5jZSAtIHRoZSByZWZlcmVuY2UgZWxlbWVudCAodGhlIHBvcHBlciB3aWxsIGJlIHJlbGF0aXZlIHRvIHRoaXMpXG4gKiBAcmV0dXJucyB7RWxlbWVudH0gcGFyZW50XG4gKi9cbmZ1bmN0aW9uIGdldFJlZmVyZW5jZU5vZGUocmVmZXJlbmNlKSB7XG4gIHJldHVybiByZWZlcmVuY2UgJiYgcmVmZXJlbmNlLnJlZmVyZW5jZU5vZGUgPyByZWZlcmVuY2UucmVmZXJlbmNlTm9kZSA6IHJlZmVyZW5jZTtcbn1cblxudmFyIGlzSUUxMSA9IGlzQnJvd3NlciAmJiAhISh3aW5kb3cuTVNJbnB1dE1ldGhvZENvbnRleHQgJiYgZG9jdW1lbnQuZG9jdW1lbnRNb2RlKTtcbnZhciBpc0lFMTAgPSBpc0Jyb3dzZXIgJiYgL01TSUUgMTAvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgYnJvd3NlciBpcyBJbnRlcm5ldCBFeHBsb3JlclxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHBhcmFtIHtOdW1iZXJ9IHZlcnNpb24gdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtCb29sZWFufSBpc0lFXG4gKi9cbmZ1bmN0aW9uIGlzSUUodmVyc2lvbikge1xuICBpZiAodmVyc2lvbiA9PT0gMTEpIHtcbiAgICByZXR1cm4gaXNJRTExO1xuICB9XG4gIGlmICh2ZXJzaW9uID09PSAxMCkge1xuICAgIHJldHVybiBpc0lFMTA7XG4gIH1cbiAgcmV0dXJuIGlzSUUxMSB8fCBpc0lFMTA7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb2Zmc2V0IHBhcmVudCBvZiB0aGUgZ2l2ZW4gZWxlbWVudFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7RWxlbWVudH0gb2Zmc2V0IHBhcmVudFxuICovXG5mdW5jdGlvbiBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudCkge1xuICBpZiAoIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICB9XG5cbiAgdmFyIG5vT2Zmc2V0UGFyZW50ID0gaXNJRSgxMCkgPyBkb2N1bWVudC5ib2R5IDogbnVsbDtcblxuICAvLyBOT1RFOiAxIERPTSBhY2Nlc3MgaGVyZVxuICB2YXIgb2Zmc2V0UGFyZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQgfHwgbnVsbDtcbiAgLy8gU2tpcCBoaWRkZW4gZWxlbWVudHMgd2hpY2ggZG9uJ3QgaGF2ZSBhbiBvZmZzZXRQYXJlbnRcbiAgd2hpbGUgKG9mZnNldFBhcmVudCA9PT0gbm9PZmZzZXRQYXJlbnQgJiYgZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcpIHtcbiAgICBvZmZzZXRQYXJlbnQgPSAoZWxlbWVudCA9IGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKS5vZmZzZXRQYXJlbnQ7XG4gIH1cblxuICB2YXIgbm9kZU5hbWUgPSBvZmZzZXRQYXJlbnQgJiYgb2Zmc2V0UGFyZW50Lm5vZGVOYW1lO1xuXG4gIGlmICghbm9kZU5hbWUgfHwgbm9kZU5hbWUgPT09ICdCT0RZJyB8fCBub2RlTmFtZSA9PT0gJ0hUTUwnKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQgPyBlbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IDogZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICB9XG5cbiAgLy8gLm9mZnNldFBhcmVudCB3aWxsIHJldHVybiB0aGUgY2xvc2VzdCBUSCwgVEQgb3IgVEFCTEUgaW4gY2FzZVxuICAvLyBubyBvZmZzZXRQYXJlbnQgaXMgcHJlc2VudCwgSSBoYXRlIHRoaXMgam9iLi4uXG4gIGlmIChbJ1RIJywgJ1REJywgJ1RBQkxFJ10uaW5kZXhPZihvZmZzZXRQYXJlbnQubm9kZU5hbWUpICE9PSAtMSAmJiBnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkob2Zmc2V0UGFyZW50LCAncG9zaXRpb24nKSA9PT0gJ3N0YXRpYycpIHtcbiAgICByZXR1cm4gZ2V0T2Zmc2V0UGFyZW50KG9mZnNldFBhcmVudCk7XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0UGFyZW50O1xufVxuXG5mdW5jdGlvbiBpc09mZnNldENvbnRhaW5lcihlbGVtZW50KSB7XG4gIHZhciBub2RlTmFtZSA9IGVsZW1lbnQubm9kZU5hbWU7XG5cbiAgaWYgKG5vZGVOYW1lID09PSAnQk9EWScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIG5vZGVOYW1lID09PSAnSFRNTCcgfHwgZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQpID09PSBlbGVtZW50O1xufVxuXG4vKipcbiAqIEZpbmRzIHRoZSByb290IG5vZGUgKGRvY3VtZW50LCBzaGFkb3dET00gcm9vdCkgb2YgdGhlIGdpdmVuIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gbm9kZVxuICogQHJldHVybnMge0VsZW1lbnR9IHJvb3Qgbm9kZVxuICovXG5mdW5jdGlvbiBnZXRSb290KG5vZGUpIHtcbiAgaWYgKG5vZGUucGFyZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHJldHVybiBnZXRSb290KG5vZGUucGFyZW50Tm9kZSk7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgb2Zmc2V0IHBhcmVudCBjb21tb24gdG8gdGhlIHR3byBwcm92aWRlZCBub2Rlc1xuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtFbGVtZW50fSBlbGVtZW50MVxuICogQGFyZ3VtZW50IHtFbGVtZW50fSBlbGVtZW50MlxuICogQHJldHVybnMge0VsZW1lbnR9IGNvbW1vbiBvZmZzZXQgcGFyZW50XG4gKi9cbmZ1bmN0aW9uIGZpbmRDb21tb25PZmZzZXRQYXJlbnQoZWxlbWVudDEsIGVsZW1lbnQyKSB7XG4gIC8vIFRoaXMgY2hlY2sgaXMgbmVlZGVkIHRvIGF2b2lkIGVycm9ycyBpbiBjYXNlIG9uZSBvZiB0aGUgZWxlbWVudHMgaXNuJ3QgZGVmaW5lZCBmb3IgYW55IHJlYXNvblxuICBpZiAoIWVsZW1lbnQxIHx8ICFlbGVtZW50MS5ub2RlVHlwZSB8fCAhZWxlbWVudDIgfHwgIWVsZW1lbnQyLm5vZGVUeXBlKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgfVxuXG4gIC8vIEhlcmUgd2UgbWFrZSBzdXJlIHRvIGdpdmUgYXMgXCJzdGFydFwiIHRoZSBlbGVtZW50IHRoYXQgY29tZXMgZmlyc3QgaW4gdGhlIERPTVxuICB2YXIgb3JkZXIgPSBlbGVtZW50MS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlbGVtZW50MikgJiBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORztcbiAgdmFyIHN0YXJ0ID0gb3JkZXIgPyBlbGVtZW50MSA6IGVsZW1lbnQyO1xuICB2YXIgZW5kID0gb3JkZXIgPyBlbGVtZW50MiA6IGVsZW1lbnQxO1xuXG4gIC8vIEdldCBjb21tb24gYW5jZXN0b3IgY29udGFpbmVyXG4gIHZhciByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gIHJhbmdlLnNldFN0YXJ0KHN0YXJ0LCAwKTtcbiAgcmFuZ2Uuc2V0RW5kKGVuZCwgMCk7XG4gIHZhciBjb21tb25BbmNlc3RvckNvbnRhaW5lciA9IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyO1xuXG4gIC8vIEJvdGggbm9kZXMgYXJlIGluc2lkZSAjZG9jdW1lbnRcblxuICBpZiAoZWxlbWVudDEgIT09IGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyICYmIGVsZW1lbnQyICE9PSBjb21tb25BbmNlc3RvckNvbnRhaW5lciB8fCBzdGFydC5jb250YWlucyhlbmQpKSB7XG4gICAgaWYgKGlzT2Zmc2V0Q29udGFpbmVyKGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKSkge1xuICAgICAgcmV0dXJuIGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyO1xuICAgIH1cblxuICAgIHJldHVybiBnZXRPZmZzZXRQYXJlbnQoY29tbW9uQW5jZXN0b3JDb250YWluZXIpO1xuICB9XG5cbiAgLy8gb25lIG9mIHRoZSBub2RlcyBpcyBpbnNpZGUgc2hhZG93RE9NLCBmaW5kIHdoaWNoIG9uZVxuICB2YXIgZWxlbWVudDFyb290ID0gZ2V0Um9vdChlbGVtZW50MSk7XG4gIGlmIChlbGVtZW50MXJvb3QuaG9zdCkge1xuICAgIHJldHVybiBmaW5kQ29tbW9uT2Zmc2V0UGFyZW50KGVsZW1lbnQxcm9vdC5ob3N0LCBlbGVtZW50Mik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZpbmRDb21tb25PZmZzZXRQYXJlbnQoZWxlbWVudDEsIGdldFJvb3QoZWxlbWVudDIpLmhvc3QpO1xuICB9XG59XG5cbi8qKlxuICogR2V0cyB0aGUgc2Nyb2xsIHZhbHVlIG9mIHRoZSBnaXZlbiBlbGVtZW50IGluIHRoZSBnaXZlbiBzaWRlICh0b3AgYW5kIGxlZnQpXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBzaWRlIGB0b3BgIG9yIGBsZWZ0YFxuICogQHJldHVybnMge251bWJlcn0gYW1vdW50IG9mIHNjcm9sbGVkIHBpeGVsc1xuICovXG5mdW5jdGlvbiBnZXRTY3JvbGwoZWxlbWVudCkge1xuICB2YXIgc2lkZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJ3RvcCc7XG5cbiAgdmFyIHVwcGVyU2lkZSA9IHNpZGUgPT09ICd0b3AnID8gJ3Njcm9sbFRvcCcgOiAnc2Nyb2xsTGVmdCc7XG4gIHZhciBub2RlTmFtZSA9IGVsZW1lbnQubm9kZU5hbWU7XG5cbiAgaWYgKG5vZGVOYW1lID09PSAnQk9EWScgfHwgbm9kZU5hbWUgPT09ICdIVE1MJykge1xuICAgIHZhciBodG1sID0gZWxlbWVudC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICB2YXIgc2Nyb2xsaW5nRWxlbWVudCA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50IHx8IGh0bWw7XG4gICAgcmV0dXJuIHNjcm9sbGluZ0VsZW1lbnRbdXBwZXJTaWRlXTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50W3VwcGVyU2lkZV07XG59XG5cbi8qXG4gKiBTdW0gb3Igc3VidHJhY3QgdGhlIGVsZW1lbnQgc2Nyb2xsIHZhbHVlcyAobGVmdCBhbmQgdG9wKSBmcm9tIGEgZ2l2ZW4gcmVjdCBvYmplY3RcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWN0IC0gUmVjdCBvYmplY3QgeW91IHdhbnQgdG8gY2hhbmdlXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgZnJvbSB0aGUgZnVuY3Rpb24gcmVhZHMgdGhlIHNjcm9sbCB2YWx1ZXNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gc3VidHJhY3QgLSBzZXQgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0byBzdWJ0cmFjdCB0aGUgc2Nyb2xsIHZhbHVlc1xuICogQHJldHVybiB7T2JqZWN0fSByZWN0IC0gVGhlIG1vZGlmaWVyIHJlY3Qgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGluY2x1ZGVTY3JvbGwocmVjdCwgZWxlbWVudCkge1xuICB2YXIgc3VidHJhY3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xuXG4gIHZhciBzY3JvbGxUb3AgPSBnZXRTY3JvbGwoZWxlbWVudCwgJ3RvcCcpO1xuICB2YXIgc2Nyb2xsTGVmdCA9IGdldFNjcm9sbChlbGVtZW50LCAnbGVmdCcpO1xuICB2YXIgbW9kaWZpZXIgPSBzdWJ0cmFjdCA/IC0xIDogMTtcbiAgcmVjdC50b3AgKz0gc2Nyb2xsVG9wICogbW9kaWZpZXI7XG4gIHJlY3QuYm90dG9tICs9IHNjcm9sbFRvcCAqIG1vZGlmaWVyO1xuICByZWN0LmxlZnQgKz0gc2Nyb2xsTGVmdCAqIG1vZGlmaWVyO1xuICByZWN0LnJpZ2h0ICs9IHNjcm9sbExlZnQgKiBtb2RpZmllcjtcbiAgcmV0dXJuIHJlY3Q7XG59XG5cbi8qXG4gKiBIZWxwZXIgdG8gZGV0ZWN0IGJvcmRlcnMgb2YgYSBnaXZlbiBlbGVtZW50XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge0NTU1N0eWxlRGVjbGFyYXRpb259IHN0eWxlc1xuICogUmVzdWx0IG9mIGBnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHlgIG9uIHRoZSBnaXZlbiBlbGVtZW50XG4gKiBAcGFyYW0ge1N0cmluZ30gYXhpcyAtIGB4YCBvciBgeWBcbiAqIEByZXR1cm4ge251bWJlcn0gYm9yZGVycyAtIFRoZSBib3JkZXJzIHNpemUgb2YgdGhlIGdpdmVuIGF4aXNcbiAqL1xuXG5mdW5jdGlvbiBnZXRCb3JkZXJzU2l6ZShzdHlsZXMsIGF4aXMpIHtcbiAgdmFyIHNpZGVBID0gYXhpcyA9PT0gJ3gnID8gJ0xlZnQnIDogJ1RvcCc7XG4gIHZhciBzaWRlQiA9IHNpZGVBID09PSAnTGVmdCcgPyAnUmlnaHQnIDogJ0JvdHRvbSc7XG5cbiAgcmV0dXJuIHBhcnNlRmxvYXQoc3R5bGVzWydib3JkZXInICsgc2lkZUEgKyAnV2lkdGgnXSkgKyBwYXJzZUZsb2F0KHN0eWxlc1snYm9yZGVyJyArIHNpZGVCICsgJ1dpZHRoJ10pO1xufVxuXG5mdW5jdGlvbiBnZXRTaXplKGF4aXMsIGJvZHksIGh0bWwsIGNvbXB1dGVkU3R5bGUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KGJvZHlbJ29mZnNldCcgKyBheGlzXSwgYm9keVsnc2Nyb2xsJyArIGF4aXNdLCBodG1sWydjbGllbnQnICsgYXhpc10sIGh0bWxbJ29mZnNldCcgKyBheGlzXSwgaHRtbFsnc2Nyb2xsJyArIGF4aXNdLCBpc0lFKDEwKSA/IHBhcnNlSW50KGh0bWxbJ29mZnNldCcgKyBheGlzXSkgKyBwYXJzZUludChjb21wdXRlZFN0eWxlWydtYXJnaW4nICsgKGF4aXMgPT09ICdIZWlnaHQnID8gJ1RvcCcgOiAnTGVmdCcpXSkgKyBwYXJzZUludChjb21wdXRlZFN0eWxlWydtYXJnaW4nICsgKGF4aXMgPT09ICdIZWlnaHQnID8gJ0JvdHRvbScgOiAnUmlnaHQnKV0pIDogMCk7XG59XG5cbmZ1bmN0aW9uIGdldFdpbmRvd1NpemVzKGRvY3VtZW50KSB7XG4gIHZhciBib2R5ID0gZG9jdW1lbnQuYm9keTtcbiAgdmFyIGh0bWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIHZhciBjb21wdXRlZFN0eWxlID0gaXNJRSgxMCkgJiYgZ2V0Q29tcHV0ZWRTdHlsZShodG1sKTtcblxuICByZXR1cm4ge1xuICAgIGhlaWdodDogZ2V0U2l6ZSgnSGVpZ2h0JywgYm9keSwgaHRtbCwgY29tcHV0ZWRTdHlsZSksXG4gICAgd2lkdGg6IGdldFNpemUoJ1dpZHRoJywgYm9keSwgaHRtbCwgY29tcHV0ZWRTdHlsZSlcbiAgfTtcbn1cblxudmFyIGNsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn07XG5cbnZhciBjcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfTtcbn0oKTtcblxuXG5cblxuXG52YXIgZGVmaW5lUHJvcGVydHkkMiA9IGZ1bmN0aW9uIChvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufTtcblxudmFyIF9leHRlbmRzJDEgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufTtcblxuLyoqXG4gKiBHaXZlbiBlbGVtZW50IG9mZnNldHMsIGdlbmVyYXRlIGFuIG91dHB1dCBzaW1pbGFyIHRvIGdldEJvdW5kaW5nQ2xpZW50UmVjdFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IG9mZnNldHNcbiAqIEByZXR1cm5zIHtPYmplY3R9IENsaWVudFJlY3QgbGlrZSBvdXRwdXRcbiAqL1xuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdChvZmZzZXRzKSB7XG4gIHJldHVybiBfZXh0ZW5kcyQxKHt9LCBvZmZzZXRzLCB7XG4gICAgcmlnaHQ6IG9mZnNldHMubGVmdCArIG9mZnNldHMud2lkdGgsXG4gICAgYm90dG9tOiBvZmZzZXRzLnRvcCArIG9mZnNldHMuaGVpZ2h0XG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBib3VuZGluZyBjbGllbnQgcmVjdCBvZiBnaXZlbiBlbGVtZW50XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJuIHtPYmplY3R9IGNsaWVudCByZWN0XG4gKi9cbmZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50KSB7XG4gIHZhciByZWN0ID0ge307XG5cbiAgLy8gSUUxMCAxMCBGSVg6IFBsZWFzZSwgZG9uJ3QgYXNrLCB0aGUgZWxlbWVudCBpc24ndFxuICAvLyBjb25zaWRlcmVkIGluIERPTSBpbiBzb21lIGNpcmN1bXN0YW5jZXMuLi5cbiAgLy8gVGhpcyBpc24ndCByZXByb2R1Y2libGUgaW4gSUUxMCBjb21wYXRpYmlsaXR5IG1vZGUgb2YgSUUxMVxuICB0cnkge1xuICAgIGlmIChpc0lFKDEwKSkge1xuICAgICAgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB2YXIgc2Nyb2xsVG9wID0gZ2V0U2Nyb2xsKGVsZW1lbnQsICd0b3AnKTtcbiAgICAgIHZhciBzY3JvbGxMZWZ0ID0gZ2V0U2Nyb2xsKGVsZW1lbnQsICdsZWZ0Jyk7XG4gICAgICByZWN0LnRvcCArPSBzY3JvbGxUb3A7XG4gICAgICByZWN0LmxlZnQgKz0gc2Nyb2xsTGVmdDtcbiAgICAgIHJlY3QuYm90dG9tICs9IHNjcm9sbFRvcDtcbiAgICAgIHJlY3QucmlnaHQgKz0gc2Nyb2xsTGVmdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSB7XG4gICAgbGVmdDogcmVjdC5sZWZ0LFxuICAgIHRvcDogcmVjdC50b3AsXG4gICAgd2lkdGg6IHJlY3QucmlnaHQgLSByZWN0LmxlZnQsXG4gICAgaGVpZ2h0OiByZWN0LmJvdHRvbSAtIHJlY3QudG9wXG4gIH07XG5cbiAgLy8gc3VidHJhY3Qgc2Nyb2xsYmFyIHNpemUgZnJvbSBzaXplc1xuICB2YXIgc2l6ZXMgPSBlbGVtZW50Lm5vZGVOYW1lID09PSAnSFRNTCcgPyBnZXRXaW5kb3dTaXplcyhlbGVtZW50Lm93bmVyRG9jdW1lbnQpIDoge307XG4gIHZhciB3aWR0aCA9IHNpemVzLndpZHRoIHx8IGVsZW1lbnQuY2xpZW50V2lkdGggfHwgcmVzdWx0LndpZHRoO1xuICB2YXIgaGVpZ2h0ID0gc2l6ZXMuaGVpZ2h0IHx8IGVsZW1lbnQuY2xpZW50SGVpZ2h0IHx8IHJlc3VsdC5oZWlnaHQ7XG5cbiAgdmFyIGhvcml6U2Nyb2xsYmFyID0gZWxlbWVudC5vZmZzZXRXaWR0aCAtIHdpZHRoO1xuICB2YXIgdmVydFNjcm9sbGJhciA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gaGVpZ2h0O1xuXG4gIC8vIGlmIGFuIGh5cG90aGV0aWNhbCBzY3JvbGxiYXIgaXMgZGV0ZWN0ZWQsIHdlIG11c3QgYmUgc3VyZSBpdCdzIG5vdCBhIGBib3JkZXJgXG4gIC8vIHdlIG1ha2UgdGhpcyBjaGVjayBjb25kaXRpb25hbCBmb3IgcGVyZm9ybWFuY2UgcmVhc29uc1xuICBpZiAoaG9yaXpTY3JvbGxiYXIgfHwgdmVydFNjcm9sbGJhcikge1xuICAgIHZhciBzdHlsZXMgPSBnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkoZWxlbWVudCk7XG4gICAgaG9yaXpTY3JvbGxiYXIgLT0gZ2V0Qm9yZGVyc1NpemUoc3R5bGVzLCAneCcpO1xuICAgIHZlcnRTY3JvbGxiYXIgLT0gZ2V0Qm9yZGVyc1NpemUoc3R5bGVzLCAneScpO1xuXG4gICAgcmVzdWx0LndpZHRoIC09IGhvcml6U2Nyb2xsYmFyO1xuICAgIHJlc3VsdC5oZWlnaHQgLT0gdmVydFNjcm9sbGJhcjtcbiAgfVxuXG4gIHJldHVybiBnZXRDbGllbnRSZWN0KHJlc3VsdCk7XG59XG5cbmZ1bmN0aW9uIGdldE9mZnNldFJlY3RSZWxhdGl2ZVRvQXJiaXRyYXJ5Tm9kZShjaGlsZHJlbiwgcGFyZW50KSB7XG4gIHZhciBmaXhlZFBvc2l0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcblxuICB2YXIgaXNJRTEwID0gaXNJRSgxMCk7XG4gIHZhciBpc0hUTUwgPSBwYXJlbnQubm9kZU5hbWUgPT09ICdIVE1MJztcbiAgdmFyIGNoaWxkcmVuUmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChjaGlsZHJlbik7XG4gIHZhciBwYXJlbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHBhcmVudCk7XG4gIHZhciBzY3JvbGxQYXJlbnQgPSBnZXRTY3JvbGxQYXJlbnQoY2hpbGRyZW4pO1xuXG4gIHZhciBzdHlsZXMgPSBnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkocGFyZW50KTtcbiAgdmFyIGJvcmRlclRvcFdpZHRoID0gcGFyc2VGbG9hdChzdHlsZXMuYm9yZGVyVG9wV2lkdGgpO1xuICB2YXIgYm9yZGVyTGVmdFdpZHRoID0gcGFyc2VGbG9hdChzdHlsZXMuYm9yZGVyTGVmdFdpZHRoKTtcblxuICAvLyBJbiBjYXNlcyB3aGVyZSB0aGUgcGFyZW50IGlzIGZpeGVkLCB3ZSBtdXN0IGlnbm9yZSBuZWdhdGl2ZSBzY3JvbGwgaW4gb2Zmc2V0IGNhbGNcbiAgaWYgKGZpeGVkUG9zaXRpb24gJiYgaXNIVE1MKSB7XG4gICAgcGFyZW50UmVjdC50b3AgPSBNYXRoLm1heChwYXJlbnRSZWN0LnRvcCwgMCk7XG4gICAgcGFyZW50UmVjdC5sZWZ0ID0gTWF0aC5tYXgocGFyZW50UmVjdC5sZWZ0LCAwKTtcbiAgfVxuICB2YXIgb2Zmc2V0cyA9IGdldENsaWVudFJlY3Qoe1xuICAgIHRvcDogY2hpbGRyZW5SZWN0LnRvcCAtIHBhcmVudFJlY3QudG9wIC0gYm9yZGVyVG9wV2lkdGgsXG4gICAgbGVmdDogY2hpbGRyZW5SZWN0LmxlZnQgLSBwYXJlbnRSZWN0LmxlZnQgLSBib3JkZXJMZWZ0V2lkdGgsXG4gICAgd2lkdGg6IGNoaWxkcmVuUmVjdC53aWR0aCxcbiAgICBoZWlnaHQ6IGNoaWxkcmVuUmVjdC5oZWlnaHRcbiAgfSk7XG4gIG9mZnNldHMubWFyZ2luVG9wID0gMDtcbiAgb2Zmc2V0cy5tYXJnaW5MZWZ0ID0gMDtcblxuICAvLyBTdWJ0cmFjdCBtYXJnaW5zIG9mIGRvY3VtZW50RWxlbWVudCBpbiBjYXNlIGl0J3MgYmVpbmcgdXNlZCBhcyBwYXJlbnRcbiAgLy8gd2UgZG8gdGhpcyBvbmx5IG9uIEhUTUwgYmVjYXVzZSBpdCdzIHRoZSBvbmx5IGVsZW1lbnQgdGhhdCBiZWhhdmVzXG4gIC8vIGRpZmZlcmVudGx5IHdoZW4gbWFyZ2lucyBhcmUgYXBwbGllZCB0byBpdC4gVGhlIG1hcmdpbnMgYXJlIGluY2x1ZGVkIGluXG4gIC8vIHRoZSBib3ggb2YgdGhlIGRvY3VtZW50RWxlbWVudCwgaW4gdGhlIG90aGVyIGNhc2VzIG5vdC5cbiAgaWYgKCFpc0lFMTAgJiYgaXNIVE1MKSB7XG4gICAgdmFyIG1hcmdpblRvcCA9IHBhcnNlRmxvYXQoc3R5bGVzLm1hcmdpblRvcCk7XG4gICAgdmFyIG1hcmdpbkxlZnQgPSBwYXJzZUZsb2F0KHN0eWxlcy5tYXJnaW5MZWZ0KTtcblxuICAgIG9mZnNldHMudG9wIC09IGJvcmRlclRvcFdpZHRoIC0gbWFyZ2luVG9wO1xuICAgIG9mZnNldHMuYm90dG9tIC09IGJvcmRlclRvcFdpZHRoIC0gbWFyZ2luVG9wO1xuICAgIG9mZnNldHMubGVmdCAtPSBib3JkZXJMZWZ0V2lkdGggLSBtYXJnaW5MZWZ0O1xuICAgIG9mZnNldHMucmlnaHQgLT0gYm9yZGVyTGVmdFdpZHRoIC0gbWFyZ2luTGVmdDtcblxuICAgIC8vIEF0dGFjaCBtYXJnaW5Ub3AgYW5kIG1hcmdpbkxlZnQgYmVjYXVzZSBpbiBzb21lIGNpcmN1bXN0YW5jZXMgd2UgbWF5IG5lZWQgdGhlbVxuICAgIG9mZnNldHMubWFyZ2luVG9wID0gbWFyZ2luVG9wO1xuICAgIG9mZnNldHMubWFyZ2luTGVmdCA9IG1hcmdpbkxlZnQ7XG4gIH1cblxuICBpZiAoaXNJRTEwICYmICFmaXhlZFBvc2l0aW9uID8gcGFyZW50LmNvbnRhaW5zKHNjcm9sbFBhcmVudCkgOiBwYXJlbnQgPT09IHNjcm9sbFBhcmVudCAmJiBzY3JvbGxQYXJlbnQubm9kZU5hbWUgIT09ICdCT0RZJykge1xuICAgIG9mZnNldHMgPSBpbmNsdWRlU2Nyb2xsKG9mZnNldHMsIHBhcmVudCk7XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0cztcbn1cblxuZnVuY3Rpb24gZ2V0Vmlld3BvcnRPZmZzZXRSZWN0UmVsYXRpdmVUb0FydGJpdHJhcnlOb2RlKGVsZW1lbnQpIHtcbiAgdmFyIGV4Y2x1ZGVTY3JvbGwgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuXG4gIHZhciBodG1sID0gZWxlbWVudC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgdmFyIHJlbGF0aXZlT2Zmc2V0ID0gZ2V0T2Zmc2V0UmVjdFJlbGF0aXZlVG9BcmJpdHJhcnlOb2RlKGVsZW1lbnQsIGh0bWwpO1xuICB2YXIgd2lkdGggPSBNYXRoLm1heChodG1sLmNsaWVudFdpZHRoLCB3aW5kb3cuaW5uZXJXaWR0aCB8fCAwKTtcbiAgdmFyIGhlaWdodCA9IE1hdGgubWF4KGh0bWwuY2xpZW50SGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgMCk7XG5cbiAgdmFyIHNjcm9sbFRvcCA9ICFleGNsdWRlU2Nyb2xsID8gZ2V0U2Nyb2xsKGh0bWwpIDogMDtcbiAgdmFyIHNjcm9sbExlZnQgPSAhZXhjbHVkZVNjcm9sbCA/IGdldFNjcm9sbChodG1sLCAnbGVmdCcpIDogMDtcblxuICB2YXIgb2Zmc2V0ID0ge1xuICAgIHRvcDogc2Nyb2xsVG9wIC0gcmVsYXRpdmVPZmZzZXQudG9wICsgcmVsYXRpdmVPZmZzZXQubWFyZ2luVG9wLFxuICAgIGxlZnQ6IHNjcm9sbExlZnQgLSByZWxhdGl2ZU9mZnNldC5sZWZ0ICsgcmVsYXRpdmVPZmZzZXQubWFyZ2luTGVmdCxcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHRcbiAgfTtcblxuICByZXR1cm4gZ2V0Q2xpZW50UmVjdChvZmZzZXQpO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBnaXZlbiBlbGVtZW50IGlzIGZpeGVkIG9yIGlzIGluc2lkZSBhIGZpeGVkIHBhcmVudFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtFbGVtZW50fSBlbGVtZW50XG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGN1c3RvbUNvbnRhaW5lclxuICogQHJldHVybnMge0Jvb2xlYW59IGFuc3dlciB0byBcImlzRml4ZWQ/XCJcbiAqL1xuZnVuY3Rpb24gaXNGaXhlZChlbGVtZW50KSB7XG4gIHZhciBub2RlTmFtZSA9IGVsZW1lbnQubm9kZU5hbWU7XG4gIGlmIChub2RlTmFtZSA9PT0gJ0JPRFknIHx8IG5vZGVOYW1lID09PSAnSFRNTCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGdldFN0eWxlQ29tcHV0ZWRQcm9wZXJ0eShlbGVtZW50LCAncG9zaXRpb24nKSA9PT0gJ2ZpeGVkJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBwYXJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcbiAgaWYgKCFwYXJlbnROb2RlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBpc0ZpeGVkKHBhcmVudE5vZGUpO1xufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBmaXJzdCBwYXJlbnQgb2YgYW4gZWxlbWVudCB0aGF0IGhhcyBhIHRyYW5zZm9ybWVkIHByb3BlcnR5IGRlZmluZWRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge0VsZW1lbnR9IGZpcnN0IHRyYW5zZm9ybWVkIHBhcmVudCBvciBkb2N1bWVudEVsZW1lbnRcbiAqL1xuXG5mdW5jdGlvbiBnZXRGaXhlZFBvc2l0aW9uT2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgLy8gVGhpcyBjaGVjayBpcyBuZWVkZWQgdG8gYXZvaWQgZXJyb3JzIGluIGNhc2Ugb25lIG9mIHRoZSBlbGVtZW50cyBpc24ndCBkZWZpbmVkIGZvciBhbnkgcmVhc29uXG4gIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC5wYXJlbnRFbGVtZW50IHx8IGlzSUUoKSkge1xuICAgIHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIH1cbiAgdmFyIGVsID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICB3aGlsZSAoZWwgJiYgZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KGVsLCAndHJhbnNmb3JtJykgPT09ICdub25lJykge1xuICAgIGVsID0gZWwucGFyZW50RWxlbWVudDtcbiAgfVxuICByZXR1cm4gZWwgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xufVxuXG4vKipcbiAqIENvbXB1dGVkIHRoZSBib3VuZGFyaWVzIGxpbWl0cyBhbmQgcmV0dXJuIHRoZW1cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBvcHBlclxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcmVmZXJlbmNlXG4gKiBAcGFyYW0ge251bWJlcn0gcGFkZGluZ1xuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gYm91bmRhcmllc0VsZW1lbnQgLSBFbGVtZW50IHVzZWQgdG8gZGVmaW5lIHRoZSBib3VuZGFyaWVzXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGZpeGVkUG9zaXRpb24gLSBJcyBpbiBmaXhlZCBwb3NpdGlvbiBtb2RlXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBDb29yZGluYXRlcyBvZiB0aGUgYm91bmRhcmllc1xuICovXG5mdW5jdGlvbiBnZXRCb3VuZGFyaWVzKHBvcHBlciwgcmVmZXJlbmNlLCBwYWRkaW5nLCBib3VuZGFyaWVzRWxlbWVudCkge1xuICB2YXIgZml4ZWRQb3NpdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDogZmFsc2U7XG5cbiAgLy8gTk9URTogMSBET00gYWNjZXNzIGhlcmVcblxuICB2YXIgYm91bmRhcmllcyA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07XG4gIHZhciBvZmZzZXRQYXJlbnQgPSBmaXhlZFBvc2l0aW9uID8gZ2V0Rml4ZWRQb3NpdGlvbk9mZnNldFBhcmVudChwb3BwZXIpIDogZmluZENvbW1vbk9mZnNldFBhcmVudChwb3BwZXIsIGdldFJlZmVyZW5jZU5vZGUocmVmZXJlbmNlKSk7XG5cbiAgLy8gSGFuZGxlIHZpZXdwb3J0IGNhc2VcbiAgaWYgKGJvdW5kYXJpZXNFbGVtZW50ID09PSAndmlld3BvcnQnKSB7XG4gICAgYm91bmRhcmllcyA9IGdldFZpZXdwb3J0T2Zmc2V0UmVjdFJlbGF0aXZlVG9BcnRiaXRyYXJ5Tm9kZShvZmZzZXRQYXJlbnQsIGZpeGVkUG9zaXRpb24pO1xuICB9IGVsc2Uge1xuICAgIC8vIEhhbmRsZSBvdGhlciBjYXNlcyBiYXNlZCBvbiBET00gZWxlbWVudCB1c2VkIGFzIGJvdW5kYXJpZXNcbiAgICB2YXIgYm91bmRhcmllc05vZGUgPSB2b2lkIDA7XG4gICAgaWYgKGJvdW5kYXJpZXNFbGVtZW50ID09PSAnc2Nyb2xsUGFyZW50Jykge1xuICAgICAgYm91bmRhcmllc05vZGUgPSBnZXRTY3JvbGxQYXJlbnQoZ2V0UGFyZW50Tm9kZShyZWZlcmVuY2UpKTtcbiAgICAgIGlmIChib3VuZGFyaWVzTm9kZS5ub2RlTmFtZSA9PT0gJ0JPRFknKSB7XG4gICAgICAgIGJvdW5kYXJpZXNOb2RlID0gcG9wcGVyLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYm91bmRhcmllc0VsZW1lbnQgPT09ICd3aW5kb3cnKSB7XG4gICAgICBib3VuZGFyaWVzTm9kZSA9IHBvcHBlci5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgYm91bmRhcmllc05vZGUgPSBib3VuZGFyaWVzRWxlbWVudDtcbiAgICB9XG5cbiAgICB2YXIgb2Zmc2V0cyA9IGdldE9mZnNldFJlY3RSZWxhdGl2ZVRvQXJiaXRyYXJ5Tm9kZShib3VuZGFyaWVzTm9kZSwgb2Zmc2V0UGFyZW50LCBmaXhlZFBvc2l0aW9uKTtcblxuICAgIC8vIEluIGNhc2Ugb2YgSFRNTCwgd2UgbmVlZCBhIGRpZmZlcmVudCBjb21wdXRhdGlvblxuICAgIGlmIChib3VuZGFyaWVzTm9kZS5ub2RlTmFtZSA9PT0gJ0hUTUwnICYmICFpc0ZpeGVkKG9mZnNldFBhcmVudCkpIHtcbiAgICAgIHZhciBfZ2V0V2luZG93U2l6ZXMgPSBnZXRXaW5kb3dTaXplcyhwb3BwZXIub3duZXJEb2N1bWVudCksXG4gICAgICAgICAgaGVpZ2h0ID0gX2dldFdpbmRvd1NpemVzLmhlaWdodCxcbiAgICAgICAgICB3aWR0aCA9IF9nZXRXaW5kb3dTaXplcy53aWR0aDtcblxuICAgICAgYm91bmRhcmllcy50b3AgKz0gb2Zmc2V0cy50b3AgLSBvZmZzZXRzLm1hcmdpblRvcDtcbiAgICAgIGJvdW5kYXJpZXMuYm90dG9tID0gaGVpZ2h0ICsgb2Zmc2V0cy50b3A7XG4gICAgICBib3VuZGFyaWVzLmxlZnQgKz0gb2Zmc2V0cy5sZWZ0IC0gb2Zmc2V0cy5tYXJnaW5MZWZ0O1xuICAgICAgYm91bmRhcmllcy5yaWdodCA9IHdpZHRoICsgb2Zmc2V0cy5sZWZ0O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmb3IgYWxsIHRoZSBvdGhlciBET00gZWxlbWVudHMsIHRoaXMgb25lIGlzIGdvb2RcbiAgICAgIGJvdW5kYXJpZXMgPSBvZmZzZXRzO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCBwYWRkaW5nc1xuICBwYWRkaW5nID0gcGFkZGluZyB8fCAwO1xuICB2YXIgaXNQYWRkaW5nTnVtYmVyID0gdHlwZW9mIHBhZGRpbmcgPT09ICdudW1iZXInO1xuICBib3VuZGFyaWVzLmxlZnQgKz0gaXNQYWRkaW5nTnVtYmVyID8gcGFkZGluZyA6IHBhZGRpbmcubGVmdCB8fCAwO1xuICBib3VuZGFyaWVzLnRvcCArPSBpc1BhZGRpbmdOdW1iZXIgPyBwYWRkaW5nIDogcGFkZGluZy50b3AgfHwgMDtcbiAgYm91bmRhcmllcy5yaWdodCAtPSBpc1BhZGRpbmdOdW1iZXIgPyBwYWRkaW5nIDogcGFkZGluZy5yaWdodCB8fCAwO1xuICBib3VuZGFyaWVzLmJvdHRvbSAtPSBpc1BhZGRpbmdOdW1iZXIgPyBwYWRkaW5nIDogcGFkZGluZy5ib3R0b20gfHwgMDtcblxuICByZXR1cm4gYm91bmRhcmllcztcbn1cblxuZnVuY3Rpb24gZ2V0QXJlYShfcmVmKSB7XG4gIHZhciB3aWR0aCA9IF9yZWYud2lkdGgsXG4gICAgICBoZWlnaHQgPSBfcmVmLmhlaWdodDtcblxuICByZXR1cm4gd2lkdGggKiBoZWlnaHQ7XG59XG5cbi8qKlxuICogVXRpbGl0eSB1c2VkIHRvIHRyYW5zZm9ybSB0aGUgYGF1dG9gIHBsYWNlbWVudCB0byB0aGUgcGxhY2VtZW50IHdpdGggbW9yZVxuICogYXZhaWxhYmxlIHNwYWNlLlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IHVwZGF0ZSBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gY29tcHV0ZUF1dG9QbGFjZW1lbnQocGxhY2VtZW50LCByZWZSZWN0LCBwb3BwZXIsIHJlZmVyZW5jZSwgYm91bmRhcmllc0VsZW1lbnQpIHtcbiAgdmFyIHBhZGRpbmcgPSBhcmd1bWVudHMubGVuZ3RoID4gNSAmJiBhcmd1bWVudHNbNV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s1XSA6IDA7XG5cbiAgaWYgKHBsYWNlbWVudC5pbmRleE9mKCdhdXRvJykgPT09IC0xKSB7XG4gICAgcmV0dXJuIHBsYWNlbWVudDtcbiAgfVxuXG4gIHZhciBib3VuZGFyaWVzID0gZ2V0Qm91bmRhcmllcyhwb3BwZXIsIHJlZmVyZW5jZSwgcGFkZGluZywgYm91bmRhcmllc0VsZW1lbnQpO1xuXG4gIHZhciByZWN0cyA9IHtcbiAgICB0b3A6IHtcbiAgICAgIHdpZHRoOiBib3VuZGFyaWVzLndpZHRoLFxuICAgICAgaGVpZ2h0OiByZWZSZWN0LnRvcCAtIGJvdW5kYXJpZXMudG9wXG4gICAgfSxcbiAgICByaWdodDoge1xuICAgICAgd2lkdGg6IGJvdW5kYXJpZXMucmlnaHQgLSByZWZSZWN0LnJpZ2h0LFxuICAgICAgaGVpZ2h0OiBib3VuZGFyaWVzLmhlaWdodFxuICAgIH0sXG4gICAgYm90dG9tOiB7XG4gICAgICB3aWR0aDogYm91bmRhcmllcy53aWR0aCxcbiAgICAgIGhlaWdodDogYm91bmRhcmllcy5ib3R0b20gLSByZWZSZWN0LmJvdHRvbVxuICAgIH0sXG4gICAgbGVmdDoge1xuICAgICAgd2lkdGg6IHJlZlJlY3QubGVmdCAtIGJvdW5kYXJpZXMubGVmdCxcbiAgICAgIGhlaWdodDogYm91bmRhcmllcy5oZWlnaHRcbiAgICB9XG4gIH07XG5cbiAgdmFyIHNvcnRlZEFyZWFzID0gT2JqZWN0LmtleXMocmVjdHMpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIF9leHRlbmRzJDEoe1xuICAgICAga2V5OiBrZXlcbiAgICB9LCByZWN0c1trZXldLCB7XG4gICAgICBhcmVhOiBnZXRBcmVhKHJlY3RzW2tleV0pXG4gICAgfSk7XG4gIH0pLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gYi5hcmVhIC0gYS5hcmVhO1xuICB9KTtcblxuICB2YXIgZmlsdGVyZWRBcmVhcyA9IHNvcnRlZEFyZWFzLmZpbHRlcihmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICB2YXIgd2lkdGggPSBfcmVmMi53aWR0aCxcbiAgICAgICAgaGVpZ2h0ID0gX3JlZjIuaGVpZ2h0O1xuICAgIHJldHVybiB3aWR0aCA+PSBwb3BwZXIuY2xpZW50V2lkdGggJiYgaGVpZ2h0ID49IHBvcHBlci5jbGllbnRIZWlnaHQ7XG4gIH0pO1xuXG4gIHZhciBjb21wdXRlZFBsYWNlbWVudCA9IGZpbHRlcmVkQXJlYXMubGVuZ3RoID4gMCA/IGZpbHRlcmVkQXJlYXNbMF0ua2V5IDogc29ydGVkQXJlYXNbMF0ua2V5O1xuXG4gIHZhciB2YXJpYXRpb24gPSBwbGFjZW1lbnQuc3BsaXQoJy0nKVsxXTtcblxuICByZXR1cm4gY29tcHV0ZWRQbGFjZW1lbnQgKyAodmFyaWF0aW9uID8gJy0nICsgdmFyaWF0aW9uIDogJycpO1xufVxuXG4vKipcbiAqIEdldCBvZmZzZXRzIHRvIHRoZSByZWZlcmVuY2UgZWxlbWVudFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge0VsZW1lbnR9IHBvcHBlciAtIHRoZSBwb3BwZXIgZWxlbWVudFxuICogQHBhcmFtIHtFbGVtZW50fSByZWZlcmVuY2UgLSB0aGUgcmVmZXJlbmNlIGVsZW1lbnQgKHRoZSBwb3BwZXIgd2lsbCBiZSByZWxhdGl2ZSB0byB0aGlzKVxuICogQHBhcmFtIHtFbGVtZW50fSBmaXhlZFBvc2l0aW9uIC0gaXMgaW4gZml4ZWQgcG9zaXRpb24gbW9kZVxuICogQHJldHVybnMge09iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG9mZnNldHMgd2hpY2ggd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBwb3BwZXJcbiAqL1xuZnVuY3Rpb24gZ2V0UmVmZXJlbmNlT2Zmc2V0cyhzdGF0ZSwgcG9wcGVyLCByZWZlcmVuY2UpIHtcbiAgdmFyIGZpeGVkUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IG51bGw7XG5cbiAgdmFyIGNvbW1vbk9mZnNldFBhcmVudCA9IGZpeGVkUG9zaXRpb24gPyBnZXRGaXhlZFBvc2l0aW9uT2Zmc2V0UGFyZW50KHBvcHBlcikgOiBmaW5kQ29tbW9uT2Zmc2V0UGFyZW50KHBvcHBlciwgZ2V0UmVmZXJlbmNlTm9kZShyZWZlcmVuY2UpKTtcbiAgcmV0dXJuIGdldE9mZnNldFJlY3RSZWxhdGl2ZVRvQXJiaXRyYXJ5Tm9kZShyZWZlcmVuY2UsIGNvbW1vbk9mZnNldFBhcmVudCwgZml4ZWRQb3NpdGlvbik7XG59XG5cbi8qKlxuICogR2V0IHRoZSBvdXRlciBzaXplcyBvZiB0aGUgZ2l2ZW4gZWxlbWVudCAob2Zmc2V0IHNpemUgKyBtYXJnaW5zKVxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBvYmplY3QgY29udGFpbmluZyB3aWR0aCBhbmQgaGVpZ2h0IHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gZ2V0T3V0ZXJTaXplcyhlbGVtZW50KSB7XG4gIHZhciB3aW5kb3cgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XG4gIHZhciBzdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgdmFyIHggPSBwYXJzZUZsb2F0KHN0eWxlcy5tYXJnaW5Ub3AgfHwgMCkgKyBwYXJzZUZsb2F0KHN0eWxlcy5tYXJnaW5Cb3R0b20gfHwgMCk7XG4gIHZhciB5ID0gcGFyc2VGbG9hdChzdHlsZXMubWFyZ2luTGVmdCB8fCAwKSArIHBhcnNlRmxvYXQoc3R5bGVzLm1hcmdpblJpZ2h0IHx8IDApO1xuICB2YXIgcmVzdWx0ID0ge1xuICAgIHdpZHRoOiBlbGVtZW50Lm9mZnNldFdpZHRoICsgeSxcbiAgICBoZWlnaHQ6IGVsZW1lbnQub2Zmc2V0SGVpZ2h0ICsgeFxuICB9O1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEdldCB0aGUgb3Bwb3NpdGUgcGxhY2VtZW50IG9mIHRoZSBnaXZlbiBvbmVcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBwbGFjZW1lbnRcbiAqIEByZXR1cm5zIHtTdHJpbmd9IGZsaXBwZWQgcGxhY2VtZW50XG4gKi9cbmZ1bmN0aW9uIGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICB2YXIgaGFzaCA9IHsgbGVmdDogJ3JpZ2h0JywgcmlnaHQ6ICdsZWZ0JywgYm90dG9tOiAndG9wJywgdG9wOiAnYm90dG9tJyB9O1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL2xlZnR8cmlnaHR8Ym90dG9tfHRvcC9nLCBmdW5jdGlvbiAobWF0Y2hlZCkge1xuICAgIHJldHVybiBoYXNoW21hdGNoZWRdO1xuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgb2Zmc2V0cyB0byB0aGUgcG9wcGVyXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge09iamVjdH0gcG9zaXRpb24gLSBDU1MgcG9zaXRpb24gdGhlIFBvcHBlciB3aWxsIGdldCBhcHBsaWVkXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBwb3BwZXIgLSB0aGUgcG9wcGVyIGVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWZlcmVuY2VPZmZzZXRzIC0gdGhlIHJlZmVyZW5jZSBvZmZzZXRzICh0aGUgcG9wcGVyIHdpbGwgYmUgcmVsYXRpdmUgdG8gdGhpcylcbiAqIEBwYXJhbSB7U3RyaW5nfSBwbGFjZW1lbnQgLSBvbmUgb2YgdGhlIHZhbGlkIHBsYWNlbWVudCBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBwb3BwZXJPZmZzZXRzIC0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG9mZnNldHMgd2hpY2ggd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBwb3BwZXJcbiAqL1xuZnVuY3Rpb24gZ2V0UG9wcGVyT2Zmc2V0cyhwb3BwZXIsIHJlZmVyZW5jZU9mZnNldHMsIHBsYWNlbWVudCkge1xuICBwbGFjZW1lbnQgPSBwbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcblxuICAvLyBHZXQgcG9wcGVyIG5vZGUgc2l6ZXNcbiAgdmFyIHBvcHBlclJlY3QgPSBnZXRPdXRlclNpemVzKHBvcHBlcik7XG5cbiAgLy8gQWRkIHBvc2l0aW9uLCB3aWR0aCBhbmQgaGVpZ2h0IHRvIG91ciBvZmZzZXRzIG9iamVjdFxuICB2YXIgcG9wcGVyT2Zmc2V0cyA9IHtcbiAgICB3aWR0aDogcG9wcGVyUmVjdC53aWR0aCxcbiAgICBoZWlnaHQ6IHBvcHBlclJlY3QuaGVpZ2h0XG4gIH07XG5cbiAgLy8gZGVwZW5kaW5nIGJ5IHRoZSBwb3BwZXIgcGxhY2VtZW50IHdlIGhhdmUgdG8gY29tcHV0ZSBpdHMgb2Zmc2V0cyBzbGlnaHRseSBkaWZmZXJlbnRseVxuICB2YXIgaXNIb3JpeiA9IFsncmlnaHQnLCAnbGVmdCddLmluZGV4T2YocGxhY2VtZW50KSAhPT0gLTE7XG4gIHZhciBtYWluU2lkZSA9IGlzSG9yaXogPyAndG9wJyA6ICdsZWZ0JztcbiAgdmFyIHNlY29uZGFyeVNpZGUgPSBpc0hvcml6ID8gJ2xlZnQnIDogJ3RvcCc7XG4gIHZhciBtZWFzdXJlbWVudCA9IGlzSG9yaXogPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gIHZhciBzZWNvbmRhcnlNZWFzdXJlbWVudCA9ICFpc0hvcml6ID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gIHBvcHBlck9mZnNldHNbbWFpblNpZGVdID0gcmVmZXJlbmNlT2Zmc2V0c1ttYWluU2lkZV0gKyByZWZlcmVuY2VPZmZzZXRzW21lYXN1cmVtZW50XSAvIDIgLSBwb3BwZXJSZWN0W21lYXN1cmVtZW50XSAvIDI7XG4gIGlmIChwbGFjZW1lbnQgPT09IHNlY29uZGFyeVNpZGUpIHtcbiAgICBwb3BwZXJPZmZzZXRzW3NlY29uZGFyeVNpZGVdID0gcmVmZXJlbmNlT2Zmc2V0c1tzZWNvbmRhcnlTaWRlXSAtIHBvcHBlclJlY3Rbc2Vjb25kYXJ5TWVhc3VyZW1lbnRdO1xuICB9IGVsc2Uge1xuICAgIHBvcHBlck9mZnNldHNbc2Vjb25kYXJ5U2lkZV0gPSByZWZlcmVuY2VPZmZzZXRzW2dldE9wcG9zaXRlUGxhY2VtZW50KHNlY29uZGFyeVNpZGUpXTtcbiAgfVxuXG4gIHJldHVybiBwb3BwZXJPZmZzZXRzO1xufVxuXG4vKipcbiAqIE1pbWljcyB0aGUgYGZpbmRgIG1ldGhvZCBvZiBBcnJheVxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtBcnJheX0gYXJyXG4gKiBAYXJndW1lbnQgcHJvcFxuICogQGFyZ3VtZW50IHZhbHVlXG4gKiBAcmV0dXJucyBpbmRleCBvciAtMVxuICovXG5mdW5jdGlvbiBmaW5kKGFyciwgY2hlY2spIHtcbiAgLy8gdXNlIG5hdGl2ZSBmaW5kIGlmIHN1cHBvcnRlZFxuICBpZiAoQXJyYXkucHJvdG90eXBlLmZpbmQpIHtcbiAgICByZXR1cm4gYXJyLmZpbmQoY2hlY2spO1xuICB9XG5cbiAgLy8gdXNlIGBmaWx0ZXJgIHRvIG9idGFpbiB0aGUgc2FtZSBiZWhhdmlvciBvZiBgZmluZGBcbiAgcmV0dXJuIGFyci5maWx0ZXIoY2hlY2spWzBdO1xufVxuXG4vKipcbiAqIFJldHVybiB0aGUgaW5kZXggb2YgdGhlIG1hdGNoaW5nIG9iamVjdFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtBcnJheX0gYXJyXG4gKiBAYXJndW1lbnQgcHJvcFxuICogQGFyZ3VtZW50IHZhbHVlXG4gKiBAcmV0dXJucyBpbmRleCBvciAtMVxuICovXG5mdW5jdGlvbiBmaW5kSW5kZXgkMShhcnIsIHByb3AsIHZhbHVlKSB7XG4gIC8vIHVzZSBuYXRpdmUgZmluZEluZGV4IGlmIHN1cHBvcnRlZFxuICBpZiAoQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleCkge1xuICAgIHJldHVybiBhcnIuZmluZEluZGV4KGZ1bmN0aW9uIChjdXIpIHtcbiAgICAgIHJldHVybiBjdXJbcHJvcF0gPT09IHZhbHVlO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gdXNlIGBmaW5kYCArIGBpbmRleE9mYCBpZiBgZmluZEluZGV4YCBpc24ndCBzdXBwb3J0ZWRcbiAgdmFyIG1hdGNoID0gZmluZChhcnIsIGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqW3Byb3BdID09PSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiBhcnIuaW5kZXhPZihtYXRjaCk7XG59XG5cbi8qKlxuICogTG9vcCB0cm91Z2ggdGhlIGxpc3Qgb2YgbW9kaWZpZXJzIGFuZCBydW4gdGhlbSBpbiBvcmRlcixcbiAqIGVhY2ggb2YgdGhlbSB3aWxsIHRoZW4gZWRpdCB0aGUgZGF0YSBvYmplY3QuXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge2RhdGFPYmplY3R9IGRhdGFcbiAqIEBwYXJhbSB7QXJyYXl9IG1vZGlmaWVyc1xuICogQHBhcmFtIHtTdHJpbmd9IGVuZHMgLSBPcHRpb25hbCBtb2RpZmllciBuYW1lIHVzZWQgYXMgc3RvcHBlclxuICogQHJldHVybnMge2RhdGFPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIHJ1bk1vZGlmaWVycyhtb2RpZmllcnMsIGRhdGEsIGVuZHMpIHtcbiAgdmFyIG1vZGlmaWVyc1RvUnVuID0gZW5kcyA9PT0gdW5kZWZpbmVkID8gbW9kaWZpZXJzIDogbW9kaWZpZXJzLnNsaWNlKDAsIGZpbmRJbmRleCQxKG1vZGlmaWVycywgJ25hbWUnLCBlbmRzKSk7XG5cbiAgbW9kaWZpZXJzVG9SdW4uZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICBpZiAobW9kaWZpZXJbJ2Z1bmN0aW9uJ10pIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZG90LW5vdGF0aW9uXG4gICAgICBjb25zb2xlLndhcm4oJ2Btb2RpZmllci5mdW5jdGlvbmAgaXMgZGVwcmVjYXRlZCwgdXNlIGBtb2RpZmllci5mbmAhJyk7XG4gICAgfVxuICAgIHZhciBmbiA9IG1vZGlmaWVyWydmdW5jdGlvbiddIHx8IG1vZGlmaWVyLmZuOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGRvdC1ub3RhdGlvblxuICAgIGlmIChtb2RpZmllci5lbmFibGVkICYmIGlzRnVuY3Rpb24kMShmbikpIHtcbiAgICAgIC8vIEFkZCBwcm9wZXJ0aWVzIHRvIG9mZnNldHMgdG8gbWFrZSB0aGVtIGEgY29tcGxldGUgY2xpZW50UmVjdCBvYmplY3RcbiAgICAgIC8vIHdlIGRvIHRoaXMgYmVmb3JlIGVhY2ggbW9kaWZpZXIgdG8gbWFrZSBzdXJlIHRoZSBwcmV2aW91cyBvbmUgZG9lc24ndFxuICAgICAgLy8gbWVzcyB3aXRoIHRoZXNlIHZhbHVlc1xuICAgICAgZGF0YS5vZmZzZXRzLnBvcHBlciA9IGdldENsaWVudFJlY3QoZGF0YS5vZmZzZXRzLnBvcHBlcik7XG4gICAgICBkYXRhLm9mZnNldHMucmVmZXJlbmNlID0gZ2V0Q2xpZW50UmVjdChkYXRhLm9mZnNldHMucmVmZXJlbmNlKTtcblxuICAgICAgZGF0YSA9IGZuKGRhdGEsIG1vZGlmaWVyKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBwb3BwZXIsIGNvbXB1dGluZyB0aGUgbmV3IG9mZnNldHMgYW5kIGFwcGx5aW5nXG4gKiB0aGUgbmV3IHN0eWxlLjxiciAvPlxuICogUHJlZmVyIGBzY2hlZHVsZVVwZGF0ZWAgb3ZlciBgdXBkYXRlYCBiZWNhdXNlIG9mIHBlcmZvcm1hbmNlIHJlYXNvbnMuXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgLy8gaWYgcG9wcGVyIGlzIGRlc3Ryb3llZCwgZG9uJ3QgcGVyZm9ybSBhbnkgZnVydGhlciB1cGRhdGVcbiAgaWYgKHRoaXMuc3RhdGUuaXNEZXN0cm95ZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZGF0YSA9IHtcbiAgICBpbnN0YW5jZTogdGhpcyxcbiAgICBzdHlsZXM6IHt9LFxuICAgIGFycm93U3R5bGVzOiB7fSxcbiAgICBhdHRyaWJ1dGVzOiB7fSxcbiAgICBmbGlwcGVkOiBmYWxzZSxcbiAgICBvZmZzZXRzOiB7fVxuICB9O1xuXG4gIC8vIGNvbXB1dGUgcmVmZXJlbmNlIGVsZW1lbnQgb2Zmc2V0c1xuICBkYXRhLm9mZnNldHMucmVmZXJlbmNlID0gZ2V0UmVmZXJlbmNlT2Zmc2V0cyh0aGlzLnN0YXRlLCB0aGlzLnBvcHBlciwgdGhpcy5yZWZlcmVuY2UsIHRoaXMub3B0aW9ucy5wb3NpdGlvbkZpeGVkKTtcblxuICAvLyBjb21wdXRlIGF1dG8gcGxhY2VtZW50LCBzdG9yZSBwbGFjZW1lbnQgaW5zaWRlIHRoZSBkYXRhIG9iamVjdCxcbiAgLy8gbW9kaWZpZXJzIHdpbGwgYmUgYWJsZSB0byBlZGl0IGBwbGFjZW1lbnRgIGlmIG5lZWRlZFxuICAvLyBhbmQgcmVmZXIgdG8gb3JpZ2luYWxQbGFjZW1lbnQgdG8ga25vdyB0aGUgb3JpZ2luYWwgdmFsdWVcbiAgZGF0YS5wbGFjZW1lbnQgPSBjb21wdXRlQXV0b1BsYWNlbWVudCh0aGlzLm9wdGlvbnMucGxhY2VtZW50LCBkYXRhLm9mZnNldHMucmVmZXJlbmNlLCB0aGlzLnBvcHBlciwgdGhpcy5yZWZlcmVuY2UsIHRoaXMub3B0aW9ucy5tb2RpZmllcnMuZmxpcC5ib3VuZGFyaWVzRWxlbWVudCwgdGhpcy5vcHRpb25zLm1vZGlmaWVycy5mbGlwLnBhZGRpbmcpO1xuXG4gIC8vIHN0b3JlIHRoZSBjb21wdXRlZCBwbGFjZW1lbnQgaW5zaWRlIGBvcmlnaW5hbFBsYWNlbWVudGBcbiAgZGF0YS5vcmlnaW5hbFBsYWNlbWVudCA9IGRhdGEucGxhY2VtZW50O1xuXG4gIGRhdGEucG9zaXRpb25GaXhlZCA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbkZpeGVkO1xuXG4gIC8vIGNvbXB1dGUgdGhlIHBvcHBlciBvZmZzZXRzXG4gIGRhdGEub2Zmc2V0cy5wb3BwZXIgPSBnZXRQb3BwZXJPZmZzZXRzKHRoaXMucG9wcGVyLCBkYXRhLm9mZnNldHMucmVmZXJlbmNlLCBkYXRhLnBsYWNlbWVudCk7XG5cbiAgZGF0YS5vZmZzZXRzLnBvcHBlci5wb3NpdGlvbiA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbkZpeGVkID8gJ2ZpeGVkJyA6ICdhYnNvbHV0ZSc7XG5cbiAgLy8gcnVuIHRoZSBtb2RpZmllcnNcbiAgZGF0YSA9IHJ1bk1vZGlmaWVycyh0aGlzLm1vZGlmaWVycywgZGF0YSk7XG5cbiAgLy8gdGhlIGZpcnN0IGB1cGRhdGVgIHdpbGwgY2FsbCBgb25DcmVhdGVgIGNhbGxiYWNrXG4gIC8vIHRoZSBvdGhlciBvbmVzIHdpbGwgY2FsbCBgb25VcGRhdGVgIGNhbGxiYWNrXG4gIGlmICghdGhpcy5zdGF0ZS5pc0NyZWF0ZWQpIHtcbiAgICB0aGlzLnN0YXRlLmlzQ3JlYXRlZCA9IHRydWU7XG4gICAgdGhpcy5vcHRpb25zLm9uQ3JlYXRlKGRhdGEpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMub3B0aW9ucy5vblVwZGF0ZShkYXRhKTtcbiAgfVxufVxuXG4vKipcbiAqIEhlbHBlciB1c2VkIHRvIGtub3cgaWYgdGhlIGdpdmVuIG1vZGlmaWVyIGlzIGVuYWJsZWQuXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNNb2RpZmllckVuYWJsZWQobW9kaWZpZXJzLCBtb2RpZmllck5hbWUpIHtcbiAgcmV0dXJuIG1vZGlmaWVycy5zb21lKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIG5hbWUgPSBfcmVmLm5hbWUsXG4gICAgICAgIGVuYWJsZWQgPSBfcmVmLmVuYWJsZWQ7XG4gICAgcmV0dXJuIGVuYWJsZWQgJiYgbmFtZSA9PT0gbW9kaWZpZXJOYW1lO1xuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHByZWZpeGVkIHN1cHBvcnRlZCBwcm9wZXJ0eSBuYW1lXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge1N0cmluZ30gcHJvcGVydHkgKGNhbWVsQ2FzZSlcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHByZWZpeGVkIHByb3BlcnR5IChjYW1lbENhc2Ugb3IgUGFzY2FsQ2FzZSwgZGVwZW5kaW5nIG9uIHRoZSB2ZW5kb3IgcHJlZml4KVxuICovXG5mdW5jdGlvbiBnZXRTdXBwb3J0ZWRQcm9wZXJ0eU5hbWUocHJvcGVydHkpIHtcbiAgdmFyIHByZWZpeGVzID0gW2ZhbHNlLCAnbXMnLCAnV2Via2l0JywgJ01veicsICdPJ107XG4gIHZhciB1cHBlclByb3AgPSBwcm9wZXJ0eS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHByb3BlcnR5LnNsaWNlKDEpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJlZml4ZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcHJlZml4ID0gcHJlZml4ZXNbaV07XG4gICAgdmFyIHRvQ2hlY2sgPSBwcmVmaXggPyAnJyArIHByZWZpeCArIHVwcGVyUHJvcCA6IHByb3BlcnR5O1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQuYm9keS5zdHlsZVt0b0NoZWNrXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB0b0NoZWNrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgcG9wcGVyLlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlclxuICovXG5mdW5jdGlvbiBkZXN0cm95KCkge1xuICB0aGlzLnN0YXRlLmlzRGVzdHJveWVkID0gdHJ1ZTtcblxuICAvLyB0b3VjaCBET00gb25seSBpZiBgYXBwbHlTdHlsZWAgbW9kaWZpZXIgaXMgZW5hYmxlZFxuICBpZiAoaXNNb2RpZmllckVuYWJsZWQodGhpcy5tb2RpZmllcnMsICdhcHBseVN0eWxlJykpIHtcbiAgICB0aGlzLnBvcHBlci5yZW1vdmVBdHRyaWJ1dGUoJ3gtcGxhY2VtZW50Jyk7XG4gICAgdGhpcy5wb3BwZXIuc3R5bGUucG9zaXRpb24gPSAnJztcbiAgICB0aGlzLnBvcHBlci5zdHlsZS50b3AgPSAnJztcbiAgICB0aGlzLnBvcHBlci5zdHlsZS5sZWZ0ID0gJyc7XG4gICAgdGhpcy5wb3BwZXIuc3R5bGUucmlnaHQgPSAnJztcbiAgICB0aGlzLnBvcHBlci5zdHlsZS5ib3R0b20gPSAnJztcbiAgICB0aGlzLnBvcHBlci5zdHlsZS53aWxsQ2hhbmdlID0gJyc7XG4gICAgdGhpcy5wb3BwZXIuc3R5bGVbZ2V0U3VwcG9ydGVkUHJvcGVydHlOYW1lKCd0cmFuc2Zvcm0nKV0gPSAnJztcbiAgfVxuXG4gIHRoaXMuZGlzYWJsZUV2ZW50TGlzdGVuZXJzKCk7XG5cbiAgLy8gcmVtb3ZlIHRoZSBwb3BwZXIgaWYgdXNlciBleHBsaWNpdGx5IGFza2VkIGZvciB0aGUgZGVsZXRpb24gb24gZGVzdHJveVxuICAvLyBkbyBub3QgdXNlIGByZW1vdmVgIGJlY2F1c2UgSUUxMSBkb2Vzbid0IHN1cHBvcnQgaXRcbiAgaWYgKHRoaXMub3B0aW9ucy5yZW1vdmVPbkRlc3Ryb3kpIHtcbiAgICB0aGlzLnBvcHBlci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMucG9wcGVyKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHdpbmRvdyBhc3NvY2lhdGVkIHdpdGggdGhlIGVsZW1lbnRcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge1dpbmRvd31cbiAqL1xuZnVuY3Rpb24gZ2V0V2luZG93KGVsZW1lbnQpIHtcbiAgdmFyIG93bmVyRG9jdW1lbnQgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiBvd25lckRvY3VtZW50ID8gb3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyA6IHdpbmRvdztcbn1cblxuZnVuY3Rpb24gYXR0YWNoVG9TY3JvbGxQYXJlbnRzKHNjcm9sbFBhcmVudCwgZXZlbnQsIGNhbGxiYWNrLCBzY3JvbGxQYXJlbnRzKSB7XG4gIHZhciBpc0JvZHkgPSBzY3JvbGxQYXJlbnQubm9kZU5hbWUgPT09ICdCT0RZJztcbiAgdmFyIHRhcmdldCA9IGlzQm9keSA/IHNjcm9sbFBhcmVudC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IDogc2Nyb2xsUGFyZW50O1xuICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgY2FsbGJhY2ssIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcblxuICBpZiAoIWlzQm9keSkge1xuICAgIGF0dGFjaFRvU2Nyb2xsUGFyZW50cyhnZXRTY3JvbGxQYXJlbnQodGFyZ2V0LnBhcmVudE5vZGUpLCBldmVudCwgY2FsbGJhY2ssIHNjcm9sbFBhcmVudHMpO1xuICB9XG4gIHNjcm9sbFBhcmVudHMucHVzaCh0YXJnZXQpO1xufVxuXG4vKipcbiAqIFNldHVwIG5lZWRlZCBldmVudCBsaXN0ZW5lcnMgdXNlZCB0byB1cGRhdGUgdGhlIHBvcHBlciBwb3NpdGlvblxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2V0dXBFdmVudExpc3RlbmVycyhyZWZlcmVuY2UsIG9wdGlvbnMsIHN0YXRlLCB1cGRhdGVCb3VuZCkge1xuICAvLyBSZXNpemUgZXZlbnQgbGlzdGVuZXIgb24gd2luZG93XG4gIHN0YXRlLnVwZGF0ZUJvdW5kID0gdXBkYXRlQm91bmQ7XG4gIGdldFdpbmRvdyhyZWZlcmVuY2UpLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHN0YXRlLnVwZGF0ZUJvdW5kLCB7IHBhc3NpdmU6IHRydWUgfSk7XG5cbiAgLy8gU2Nyb2xsIGV2ZW50IGxpc3RlbmVyIG9uIHNjcm9sbCBwYXJlbnRzXG4gIHZhciBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsUGFyZW50KHJlZmVyZW5jZSk7XG4gIGF0dGFjaFRvU2Nyb2xsUGFyZW50cyhzY3JvbGxFbGVtZW50LCAnc2Nyb2xsJywgc3RhdGUudXBkYXRlQm91bmQsIHN0YXRlLnNjcm9sbFBhcmVudHMpO1xuICBzdGF0ZS5zY3JvbGxFbGVtZW50ID0gc2Nyb2xsRWxlbWVudDtcbiAgc3RhdGUuZXZlbnRzRW5hYmxlZCA9IHRydWU7XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIEl0IHdpbGwgYWRkIHJlc2l6ZS9zY3JvbGwgZXZlbnRzIGFuZCBzdGFydCByZWNhbGN1bGF0aW5nXG4gKiBwb3NpdGlvbiBvZiB0aGUgcG9wcGVyIGVsZW1lbnQgd2hlbiB0aGV5IGFyZSB0cmlnZ2VyZWQuXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyXG4gKi9cbmZ1bmN0aW9uIGVuYWJsZUV2ZW50TGlzdGVuZXJzKCkge1xuICBpZiAoIXRoaXMuc3RhdGUuZXZlbnRzRW5hYmxlZCkge1xuICAgIHRoaXMuc3RhdGUgPSBzZXR1cEV2ZW50TGlzdGVuZXJzKHRoaXMucmVmZXJlbmNlLCB0aGlzLm9wdGlvbnMsIHRoaXMuc3RhdGUsIHRoaXMuc2NoZWR1bGVVcGRhdGUpO1xuICB9XG59XG5cbi8qKlxuICogUmVtb3ZlIGV2ZW50IGxpc3RlbmVycyB1c2VkIHRvIHVwZGF0ZSB0aGUgcG9wcGVyIHBvc2l0aW9uXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVycyhyZWZlcmVuY2UsIHN0YXRlKSB7XG4gIC8vIFJlbW92ZSByZXNpemUgZXZlbnQgbGlzdGVuZXIgb24gd2luZG93XG4gIGdldFdpbmRvdyhyZWZlcmVuY2UpLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHN0YXRlLnVwZGF0ZUJvdW5kKTtcblxuICAvLyBSZW1vdmUgc2Nyb2xsIGV2ZW50IGxpc3RlbmVyIG9uIHNjcm9sbCBwYXJlbnRzXG4gIHN0YXRlLnNjcm9sbFBhcmVudHMuZm9yRWFjaChmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHN0YXRlLnVwZGF0ZUJvdW5kKTtcbiAgfSk7XG5cbiAgLy8gUmVzZXQgc3RhdGVcbiAgc3RhdGUudXBkYXRlQm91bmQgPSBudWxsO1xuICBzdGF0ZS5zY3JvbGxQYXJlbnRzID0gW107XG4gIHN0YXRlLnNjcm9sbEVsZW1lbnQgPSBudWxsO1xuICBzdGF0ZS5ldmVudHNFbmFibGVkID0gZmFsc2U7XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBJdCB3aWxsIHJlbW92ZSByZXNpemUvc2Nyb2xsIGV2ZW50cyBhbmQgd29uJ3QgcmVjYWxjdWxhdGUgcG9wcGVyIHBvc2l0aW9uXG4gKiB3aGVuIHRoZXkgYXJlIHRyaWdnZXJlZC4gSXQgYWxzbyB3b24ndCB0cmlnZ2VyIGBvblVwZGF0ZWAgY2FsbGJhY2sgYW55bW9yZSxcbiAqIHVubGVzcyB5b3UgY2FsbCBgdXBkYXRlYCBtZXRob2QgbWFudWFsbHkuXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyXG4gKi9cbmZ1bmN0aW9uIGRpc2FibGVFdmVudExpc3RlbmVycygpIHtcbiAgaWYgKHRoaXMuc3RhdGUuZXZlbnRzRW5hYmxlZCkge1xuICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuc2NoZWR1bGVVcGRhdGUpO1xuICAgIHRoaXMuc3RhdGUgPSByZW1vdmVFdmVudExpc3RlbmVycyh0aGlzLnJlZmVyZW5jZSwgdGhpcy5zdGF0ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUZWxscyBpZiBhIGdpdmVuIGlucHV0IGlzIGEgbnVtYmVyXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0geyp9IGlucHV0IHRvIGNoZWNrXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5mdW5jdGlvbiBpc051bWVyaWMobikge1xuICByZXR1cm4gbiAhPT0gJycgJiYgIWlzTmFOKHBhcnNlRmxvYXQobikpICYmIGlzRmluaXRlKG4pO1xufVxuXG4vKipcbiAqIFNldCB0aGUgc3R5bGUgdG8gdGhlIGdpdmVuIHBvcHBlclxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBhcHBseSB0aGUgc3R5bGUgdG9cbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBzdHlsZXNcbiAqIE9iamVjdCB3aXRoIGEgbGlzdCBvZiBwcm9wZXJ0aWVzIGFuZCB2YWx1ZXMgd2hpY2ggd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBlbGVtZW50XG4gKi9cbmZ1bmN0aW9uIHNldFN0eWxlcyhlbGVtZW50LCBzdHlsZXMpIHtcbiAgT2JqZWN0LmtleXMoc3R5bGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgdmFyIHVuaXQgPSAnJztcbiAgICAvLyBhZGQgdW5pdCBpZiB0aGUgdmFsdWUgaXMgbnVtZXJpYyBhbmQgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmdcbiAgICBpZiAoWyd3aWR0aCcsICdoZWlnaHQnLCAndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0J10uaW5kZXhPZihwcm9wKSAhPT0gLTEgJiYgaXNOdW1lcmljKHN0eWxlc1twcm9wXSkpIHtcbiAgICAgIHVuaXQgPSAncHgnO1xuICAgIH1cbiAgICBlbGVtZW50LnN0eWxlW3Byb3BdID0gc3R5bGVzW3Byb3BdICsgdW5pdDtcbiAgfSk7XG59XG5cbi8qKlxuICogU2V0IHRoZSBhdHRyaWJ1dGVzIHRvIHRoZSBnaXZlbiBwb3BwZXJcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gYXBwbHkgdGhlIGF0dHJpYnV0ZXMgdG9cbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBzdHlsZXNcbiAqIE9iamVjdCB3aXRoIGEgbGlzdCBvZiBwcm9wZXJ0aWVzIGFuZCB2YWx1ZXMgd2hpY2ggd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBlbGVtZW50XG4gKi9cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZXMoZWxlbWVudCwgYXR0cmlidXRlcykge1xuICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgdmFyIHZhbHVlID0gYXR0cmlidXRlc1twcm9wXTtcbiAgICBpZiAodmFsdWUgIT09IGZhbHNlKSB7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShwcm9wLCBhdHRyaWJ1dGVzW3Byb3BdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUocHJvcCk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBNb2RpZmllcnNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSBgdXBkYXRlYCBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhLnN0eWxlcyAtIExpc3Qgb2Ygc3R5bGUgcHJvcGVydGllcyAtIHZhbHVlcyB0byBhcHBseSB0byBwb3BwZXIgZWxlbWVudFxuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEuYXR0cmlidXRlcyAtIExpc3Qgb2YgYXR0cmlidXRlIHByb3BlcnRpZXMgLSB2YWx1ZXMgdG8gYXBwbHkgdG8gcG9wcGVyIGVsZW1lbnRcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBzYW1lIGRhdGEgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGFwcGx5U3R5bGUoZGF0YSkge1xuICAvLyBhbnkgcHJvcGVydHkgcHJlc2VudCBpbiBgZGF0YS5zdHlsZXNgIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9wcGVyLFxuICAvLyBpbiB0aGlzIHdheSB3ZSBjYW4gbWFrZSB0aGUgM3JkIHBhcnR5IG1vZGlmaWVycyBhZGQgY3VzdG9tIHN0eWxlcyB0byBpdFxuICAvLyBCZSBhd2FyZSwgbW9kaWZpZXJzIGNvdWxkIG92ZXJyaWRlIHRoZSBwcm9wZXJ0aWVzIGRlZmluZWQgaW4gdGhlIHByZXZpb3VzXG4gIC8vIGxpbmVzIG9mIHRoaXMgbW9kaWZpZXIhXG4gIHNldFN0eWxlcyhkYXRhLmluc3RhbmNlLnBvcHBlciwgZGF0YS5zdHlsZXMpO1xuXG4gIC8vIGFueSBwcm9wZXJ0eSBwcmVzZW50IGluIGBkYXRhLmF0dHJpYnV0ZXNgIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9wcGVyLFxuICAvLyB0aGV5IHdpbGwgYmUgc2V0IGFzIEhUTUwgYXR0cmlidXRlcyBvZiB0aGUgZWxlbWVudFxuICBzZXRBdHRyaWJ1dGVzKGRhdGEuaW5zdGFuY2UucG9wcGVyLCBkYXRhLmF0dHJpYnV0ZXMpO1xuXG4gIC8vIGlmIGFycm93RWxlbWVudCBpcyBkZWZpbmVkIGFuZCBhcnJvd1N0eWxlcyBoYXMgc29tZSBwcm9wZXJ0aWVzXG4gIGlmIChkYXRhLmFycm93RWxlbWVudCAmJiBPYmplY3Qua2V5cyhkYXRhLmFycm93U3R5bGVzKS5sZW5ndGgpIHtcbiAgICBzZXRTdHlsZXMoZGF0YS5hcnJvd0VsZW1lbnQsIGRhdGEuYXJyb3dTdHlsZXMpO1xuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogU2V0IHRoZSB4LXBsYWNlbWVudCBhdHRyaWJ1dGUgYmVmb3JlIGV2ZXJ5dGhpbmcgZWxzZSBiZWNhdXNlIGl0IGNvdWxkIGJlIHVzZWRcbiAqIHRvIGFkZCBtYXJnaW5zIHRvIHRoZSBwb3BwZXIgbWFyZ2lucyBuZWVkcyB0byBiZSBjYWxjdWxhdGVkIHRvIGdldCB0aGVcbiAqIGNvcnJlY3QgcG9wcGVyIG9mZnNldHMuXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLm1vZGlmaWVyc1xuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcmVmZXJlbmNlIC0gVGhlIHJlZmVyZW5jZSBlbGVtZW50IHVzZWQgdG8gcG9zaXRpb24gdGhlIHBvcHBlclxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcG9wcGVyIC0gVGhlIEhUTUwgZWxlbWVudCB1c2VkIGFzIHBvcHBlclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBQb3BwZXIuanMgb3B0aW9uc1xuICovXG5mdW5jdGlvbiBhcHBseVN0eWxlT25Mb2FkKHJlZmVyZW5jZSwgcG9wcGVyLCBvcHRpb25zLCBtb2RpZmllck9wdGlvbnMsIHN0YXRlKSB7XG4gIC8vIGNvbXB1dGUgcmVmZXJlbmNlIGVsZW1lbnQgb2Zmc2V0c1xuICB2YXIgcmVmZXJlbmNlT2Zmc2V0cyA9IGdldFJlZmVyZW5jZU9mZnNldHMoc3RhdGUsIHBvcHBlciwgcmVmZXJlbmNlLCBvcHRpb25zLnBvc2l0aW9uRml4ZWQpO1xuXG4gIC8vIGNvbXB1dGUgYXV0byBwbGFjZW1lbnQsIHN0b3JlIHBsYWNlbWVudCBpbnNpZGUgdGhlIGRhdGEgb2JqZWN0LFxuICAvLyBtb2RpZmllcnMgd2lsbCBiZSBhYmxlIHRvIGVkaXQgYHBsYWNlbWVudGAgaWYgbmVlZGVkXG4gIC8vIGFuZCByZWZlciB0byBvcmlnaW5hbFBsYWNlbWVudCB0byBrbm93IHRoZSBvcmlnaW5hbCB2YWx1ZVxuICB2YXIgcGxhY2VtZW50ID0gY29tcHV0ZUF1dG9QbGFjZW1lbnQob3B0aW9ucy5wbGFjZW1lbnQsIHJlZmVyZW5jZU9mZnNldHMsIHBvcHBlciwgcmVmZXJlbmNlLCBvcHRpb25zLm1vZGlmaWVycy5mbGlwLmJvdW5kYXJpZXNFbGVtZW50LCBvcHRpb25zLm1vZGlmaWVycy5mbGlwLnBhZGRpbmcpO1xuXG4gIHBvcHBlci5zZXRBdHRyaWJ1dGUoJ3gtcGxhY2VtZW50JywgcGxhY2VtZW50KTtcblxuICAvLyBBcHBseSBgcG9zaXRpb25gIHRvIHBvcHBlciBiZWZvcmUgYW55dGhpbmcgZWxzZSBiZWNhdXNlXG4gIC8vIHdpdGhvdXQgdGhlIHBvc2l0aW9uIGFwcGxpZWQgd2UgY2FuJ3QgZ3VhcmFudGVlIGNvcnJlY3QgY29tcHV0YXRpb25zXG4gIHNldFN0eWxlcyhwb3BwZXIsIHsgcG9zaXRpb246IG9wdGlvbnMucG9zaXRpb25GaXhlZCA/ICdmaXhlZCcgOiAnYWJzb2x1dGUnIH0pO1xuXG4gIHJldHVybiBvcHRpb25zO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IGB1cGRhdGVgIG1ldGhvZFxuICogQGFyZ3VtZW50IHtCb29sZWFufSBzaG91bGRSb3VuZCAtIElmIHRoZSBvZmZzZXRzIHNob3VsZCBiZSByb3VuZGVkIGF0IGFsbFxuICogQHJldHVybnMge09iamVjdH0gVGhlIHBvcHBlcidzIHBvc2l0aW9uIG9mZnNldHMgcm91bmRlZFxuICpcbiAqIFRoZSB0YWxlIG9mIHBpeGVsLXBlcmZlY3QgcG9zaXRpb25pbmcuIEl0J3Mgc3RpbGwgbm90IDEwMCUgcGVyZmVjdCwgYnV0IGFzXG4gKiBnb29kIGFzIGl0IGNhbiBiZSB3aXRoaW4gcmVhc29uLlxuICogRGlzY3Vzc2lvbiBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vRmV6VnJhc3RhL3BvcHBlci5qcy9wdWxsLzcxNVxuICpcbiAqIExvdyBEUEkgc2NyZWVucyBjYXVzZSBhIHBvcHBlciB0byBiZSBibHVycnkgaWYgbm90IHVzaW5nIGZ1bGwgcGl4ZWxzIChTYWZhcmlcbiAqIGFzIHdlbGwgb24gSGlnaCBEUEkgc2NyZWVucykuXG4gKlxuICogRmlyZWZveCBwcmVmZXJzIG5vIHJvdW5kaW5nIGZvciBwb3NpdGlvbmluZyBhbmQgZG9lcyBub3QgaGF2ZSBibHVycmluZXNzIG9uXG4gKiBoaWdoIERQSSBzY3JlZW5zLlxuICpcbiAqIE9ubHkgaG9yaXpvbnRhbCBwbGFjZW1lbnQgYW5kIGxlZnQvcmlnaHQgdmFsdWVzIG5lZWQgdG8gYmUgY29uc2lkZXJlZC5cbiAqL1xuZnVuY3Rpb24gZ2V0Um91bmRlZE9mZnNldHMoZGF0YSwgc2hvdWxkUm91bmQpIHtcbiAgdmFyIF9kYXRhJG9mZnNldHMgPSBkYXRhLm9mZnNldHMsXG4gICAgICBwb3BwZXIgPSBfZGF0YSRvZmZzZXRzLnBvcHBlcixcbiAgICAgIHJlZmVyZW5jZSA9IF9kYXRhJG9mZnNldHMucmVmZXJlbmNlO1xuICB2YXIgcm91bmQgPSBNYXRoLnJvdW5kLFxuICAgICAgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4gIHZhciBub1JvdW5kID0gZnVuY3Rpb24gbm9Sb3VuZCh2KSB7XG4gICAgcmV0dXJuIHY7XG4gIH07XG5cbiAgdmFyIHJlZmVyZW5jZVdpZHRoID0gcm91bmQocmVmZXJlbmNlLndpZHRoKTtcbiAgdmFyIHBvcHBlcldpZHRoID0gcm91bmQocG9wcGVyLndpZHRoKTtcblxuICB2YXIgaXNWZXJ0aWNhbCA9IFsnbGVmdCcsICdyaWdodCddLmluZGV4T2YoZGF0YS5wbGFjZW1lbnQpICE9PSAtMTtcbiAgdmFyIGlzVmFyaWF0aW9uID0gZGF0YS5wbGFjZW1lbnQuaW5kZXhPZignLScpICE9PSAtMTtcbiAgdmFyIHNhbWVXaWR0aFBhcml0eSA9IHJlZmVyZW5jZVdpZHRoICUgMiA9PT0gcG9wcGVyV2lkdGggJSAyO1xuICB2YXIgYm90aE9kZFdpZHRoID0gcmVmZXJlbmNlV2lkdGggJSAyID09PSAxICYmIHBvcHBlcldpZHRoICUgMiA9PT0gMTtcblxuICB2YXIgaG9yaXpvbnRhbFRvSW50ZWdlciA9ICFzaG91bGRSb3VuZCA/IG5vUm91bmQgOiBpc1ZlcnRpY2FsIHx8IGlzVmFyaWF0aW9uIHx8IHNhbWVXaWR0aFBhcml0eSA/IHJvdW5kIDogZmxvb3I7XG4gIHZhciB2ZXJ0aWNhbFRvSW50ZWdlciA9ICFzaG91bGRSb3VuZCA/IG5vUm91bmQgOiByb3VuZDtcblxuICByZXR1cm4ge1xuICAgIGxlZnQ6IGhvcml6b250YWxUb0ludGVnZXIoYm90aE9kZFdpZHRoICYmICFpc1ZhcmlhdGlvbiAmJiBzaG91bGRSb3VuZCA/IHBvcHBlci5sZWZ0IC0gMSA6IHBvcHBlci5sZWZ0KSxcbiAgICB0b3A6IHZlcnRpY2FsVG9JbnRlZ2VyKHBvcHBlci50b3ApLFxuICAgIGJvdHRvbTogdmVydGljYWxUb0ludGVnZXIocG9wcGVyLmJvdHRvbSksXG4gICAgcmlnaHQ6IGhvcml6b250YWxUb0ludGVnZXIocG9wcGVyLnJpZ2h0KVxuICB9O1xufVxuXG52YXIgaXNGaXJlZm94ID0gaXNCcm93c2VyICYmIC9GaXJlZm94L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBNb2RpZmllcnNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSBgdXBkYXRlYCBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gY29tcHV0ZVN0eWxlKGRhdGEsIG9wdGlvbnMpIHtcbiAgdmFyIHggPSBvcHRpb25zLngsXG4gICAgICB5ID0gb3B0aW9ucy55O1xuICB2YXIgcG9wcGVyID0gZGF0YS5vZmZzZXRzLnBvcHBlcjtcblxuICAvLyBSZW1vdmUgdGhpcyBsZWdhY3kgc3VwcG9ydCBpbiBQb3BwZXIuanMgdjJcblxuICB2YXIgbGVnYWN5R3B1QWNjZWxlcmF0aW9uT3B0aW9uID0gZmluZChkYXRhLmluc3RhbmNlLm1vZGlmaWVycywgZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgcmV0dXJuIG1vZGlmaWVyLm5hbWUgPT09ICdhcHBseVN0eWxlJztcbiAgfSkuZ3B1QWNjZWxlcmF0aW9uO1xuICBpZiAobGVnYWN5R3B1QWNjZWxlcmF0aW9uT3B0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zb2xlLndhcm4oJ1dBUk5JTkc6IGBncHVBY2NlbGVyYXRpb25gIG9wdGlvbiBtb3ZlZCB0byBgY29tcHV0ZVN0eWxlYCBtb2RpZmllciBhbmQgd2lsbCBub3QgYmUgc3VwcG9ydGVkIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZiBQb3BwZXIuanMhJyk7XG4gIH1cbiAgdmFyIGdwdUFjY2VsZXJhdGlvbiA9IGxlZ2FjeUdwdUFjY2VsZXJhdGlvbk9wdGlvbiAhPT0gdW5kZWZpbmVkID8gbGVnYWN5R3B1QWNjZWxlcmF0aW9uT3B0aW9uIDogb3B0aW9ucy5ncHVBY2NlbGVyYXRpb247XG5cbiAgdmFyIG9mZnNldFBhcmVudCA9IGdldE9mZnNldFBhcmVudChkYXRhLmluc3RhbmNlLnBvcHBlcik7XG4gIHZhciBvZmZzZXRQYXJlbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG9mZnNldFBhcmVudCk7XG5cbiAgLy8gU3R5bGVzXG4gIHZhciBzdHlsZXMgPSB7XG4gICAgcG9zaXRpb246IHBvcHBlci5wb3NpdGlvblxuICB9O1xuXG4gIHZhciBvZmZzZXRzID0gZ2V0Um91bmRlZE9mZnNldHMoZGF0YSwgd2luZG93LmRldmljZVBpeGVsUmF0aW8gPCAyIHx8ICFpc0ZpcmVmb3gpO1xuXG4gIHZhciBzaWRlQSA9IHggPT09ICdib3R0b20nID8gJ3RvcCcgOiAnYm90dG9tJztcbiAgdmFyIHNpZGVCID0geSA9PT0gJ3JpZ2h0JyA/ICdsZWZ0JyA6ICdyaWdodCc7XG5cbiAgLy8gaWYgZ3B1QWNjZWxlcmF0aW9uIGlzIHNldCB0byBgdHJ1ZWAgYW5kIHRyYW5zZm9ybSBpcyBzdXBwb3J0ZWQsXG4gIC8vICB3ZSB1c2UgYHRyYW5zbGF0ZTNkYCB0byBhcHBseSB0aGUgcG9zaXRpb24gdG8gdGhlIHBvcHBlciB3ZVxuICAvLyBhdXRvbWF0aWNhbGx5IHVzZSB0aGUgc3VwcG9ydGVkIHByZWZpeGVkIHZlcnNpb24gaWYgbmVlZGVkXG4gIHZhciBwcmVmaXhlZFByb3BlcnR5ID0gZ2V0U3VwcG9ydGVkUHJvcGVydHlOYW1lKCd0cmFuc2Zvcm0nKTtcblxuICAvLyBub3csIGxldCdzIG1ha2UgYSBzdGVwIGJhY2sgYW5kIGxvb2sgYXQgdGhpcyBjb2RlIGNsb3NlbHkgKHd0Zj8pXG4gIC8vIElmIHRoZSBjb250ZW50IG9mIHRoZSBwb3BwZXIgZ3Jvd3Mgb25jZSBpdCdzIGJlZW4gcG9zaXRpb25lZCwgaXRcbiAgLy8gbWF5IGhhcHBlbiB0aGF0IHRoZSBwb3BwZXIgZ2V0cyBtaXNwbGFjZWQgYmVjYXVzZSBvZiB0aGUgbmV3IGNvbnRlbnRcbiAgLy8gb3ZlcmZsb3dpbmcgaXRzIHJlZmVyZW5jZSBlbGVtZW50XG4gIC8vIFRvIGF2b2lkIHRoaXMgcHJvYmxlbSwgd2UgcHJvdmlkZSB0d28gb3B0aW9ucyAoeCBhbmQgeSksIHdoaWNoIGFsbG93XG4gIC8vIHRoZSBjb25zdW1lciB0byBkZWZpbmUgdGhlIG9mZnNldCBvcmlnaW4uXG4gIC8vIElmIHdlIHBvc2l0aW9uIGEgcG9wcGVyIG9uIHRvcCBvZiBhIHJlZmVyZW5jZSBlbGVtZW50LCB3ZSBjYW4gc2V0XG4gIC8vIGB4YCB0byBgdG9wYCB0byBtYWtlIHRoZSBwb3BwZXIgZ3JvdyB0b3dhcmRzIGl0cyB0b3AgaW5zdGVhZCBvZlxuICAvLyBpdHMgYm90dG9tLlxuICB2YXIgbGVmdCA9IHZvaWQgMCxcbiAgICAgIHRvcCA9IHZvaWQgMDtcbiAgaWYgKHNpZGVBID09PSAnYm90dG9tJykge1xuICAgIC8vIHdoZW4gb2Zmc2V0UGFyZW50IGlzIDxodG1sPiB0aGUgcG9zaXRpb25pbmcgaXMgcmVsYXRpdmUgdG8gdGhlIGJvdHRvbSBvZiB0aGUgc2NyZWVuIChleGNsdWRpbmcgdGhlIHNjcm9sbGJhcilcbiAgICAvLyBhbmQgbm90IHRoZSBib3R0b20gb2YgdGhlIGh0bWwgZWxlbWVudFxuICAgIGlmIChvZmZzZXRQYXJlbnQubm9kZU5hbWUgPT09ICdIVE1MJykge1xuICAgICAgdG9wID0gLW9mZnNldFBhcmVudC5jbGllbnRIZWlnaHQgKyBvZmZzZXRzLmJvdHRvbTtcbiAgICB9IGVsc2Uge1xuICAgICAgdG9wID0gLW9mZnNldFBhcmVudFJlY3QuaGVpZ2h0ICsgb2Zmc2V0cy5ib3R0b207XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRvcCA9IG9mZnNldHMudG9wO1xuICB9XG4gIGlmIChzaWRlQiA9PT0gJ3JpZ2h0Jykge1xuICAgIGlmIChvZmZzZXRQYXJlbnQubm9kZU5hbWUgPT09ICdIVE1MJykge1xuICAgICAgbGVmdCA9IC1vZmZzZXRQYXJlbnQuY2xpZW50V2lkdGggKyBvZmZzZXRzLnJpZ2h0O1xuICAgIH0gZWxzZSB7XG4gICAgICBsZWZ0ID0gLW9mZnNldFBhcmVudFJlY3Qud2lkdGggKyBvZmZzZXRzLnJpZ2h0O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZWZ0ID0gb2Zmc2V0cy5sZWZ0O1xuICB9XG4gIGlmIChncHVBY2NlbGVyYXRpb24gJiYgcHJlZml4ZWRQcm9wZXJ0eSkge1xuICAgIHN0eWxlc1twcmVmaXhlZFByb3BlcnR5XSA9ICd0cmFuc2xhdGUzZCgnICsgbGVmdCArICdweCwgJyArIHRvcCArICdweCwgMCknO1xuICAgIHN0eWxlc1tzaWRlQV0gPSAwO1xuICAgIHN0eWxlc1tzaWRlQl0gPSAwO1xuICAgIHN0eWxlcy53aWxsQ2hhbmdlID0gJ3RyYW5zZm9ybSc7XG4gIH0gZWxzZSB7XG4gICAgLy8gb3Rod2VyaXNlLCB3ZSB1c2UgdGhlIHN0YW5kYXJkIGB0b3BgLCBgbGVmdGAsIGBib3R0b21gIGFuZCBgcmlnaHRgIHByb3BlcnRpZXNcbiAgICB2YXIgaW52ZXJ0VG9wID0gc2lkZUEgPT09ICdib3R0b20nID8gLTEgOiAxO1xuICAgIHZhciBpbnZlcnRMZWZ0ID0gc2lkZUIgPT09ICdyaWdodCcgPyAtMSA6IDE7XG4gICAgc3R5bGVzW3NpZGVBXSA9IHRvcCAqIGludmVydFRvcDtcbiAgICBzdHlsZXNbc2lkZUJdID0gbGVmdCAqIGludmVydExlZnQ7XG4gICAgc3R5bGVzLndpbGxDaGFuZ2UgPSBzaWRlQSArICcsICcgKyBzaWRlQjtcbiAgfVxuXG4gIC8vIEF0dHJpYnV0ZXNcbiAgdmFyIGF0dHJpYnV0ZXMgPSB7XG4gICAgJ3gtcGxhY2VtZW50JzogZGF0YS5wbGFjZW1lbnRcbiAgfTtcblxuICAvLyBVcGRhdGUgYGRhdGFgIGF0dHJpYnV0ZXMsIHN0eWxlcyBhbmQgYXJyb3dTdHlsZXNcbiAgZGF0YS5hdHRyaWJ1dGVzID0gX2V4dGVuZHMkMSh7fSwgYXR0cmlidXRlcywgZGF0YS5hdHRyaWJ1dGVzKTtcbiAgZGF0YS5zdHlsZXMgPSBfZXh0ZW5kcyQxKHt9LCBzdHlsZXMsIGRhdGEuc3R5bGVzKTtcbiAgZGF0YS5hcnJvd1N0eWxlcyA9IF9leHRlbmRzJDEoe30sIGRhdGEub2Zmc2V0cy5hcnJvdywgZGF0YS5hcnJvd1N0eWxlcyk7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogSGVscGVyIHVzZWQgdG8ga25vdyBpZiB0aGUgZ2l2ZW4gbW9kaWZpZXIgZGVwZW5kcyBmcm9tIGFub3RoZXIgb25lLjxiciAvPlxuICogSXQgY2hlY2tzIGlmIHRoZSBuZWVkZWQgbW9kaWZpZXIgaXMgbGlzdGVkIGFuZCBlbmFibGVkLlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHBhcmFtIHtBcnJheX0gbW9kaWZpZXJzIC0gbGlzdCBvZiBtb2RpZmllcnNcbiAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0aW5nTmFtZSAtIG5hbWUgb2YgcmVxdWVzdGluZyBtb2RpZmllclxuICogQHBhcmFtIHtTdHJpbmd9IHJlcXVlc3RlZE5hbWUgLSBuYW1lIG9mIHJlcXVlc3RlZCBtb2RpZmllclxuICogQHJldHVybnMge0Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzTW9kaWZpZXJSZXF1aXJlZChtb2RpZmllcnMsIHJlcXVlc3RpbmdOYW1lLCByZXF1ZXN0ZWROYW1lKSB7XG4gIHZhciByZXF1ZXN0aW5nID0gZmluZChtb2RpZmllcnMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIG5hbWUgPSBfcmVmLm5hbWU7XG4gICAgcmV0dXJuIG5hbWUgPT09IHJlcXVlc3RpbmdOYW1lO1xuICB9KTtcblxuICB2YXIgaXNSZXF1aXJlZCA9ICEhcmVxdWVzdGluZyAmJiBtb2RpZmllcnMuc29tZShmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICByZXR1cm4gbW9kaWZpZXIubmFtZSA9PT0gcmVxdWVzdGVkTmFtZSAmJiBtb2RpZmllci5lbmFibGVkICYmIG1vZGlmaWVyLm9yZGVyIDwgcmVxdWVzdGluZy5vcmRlcjtcbiAgfSk7XG5cbiAgaWYgKCFpc1JlcXVpcmVkKSB7XG4gICAgdmFyIF9yZXF1ZXN0aW5nID0gJ2AnICsgcmVxdWVzdGluZ05hbWUgKyAnYCc7XG4gICAgdmFyIHJlcXVlc3RlZCA9ICdgJyArIHJlcXVlc3RlZE5hbWUgKyAnYCc7XG4gICAgY29uc29sZS53YXJuKHJlcXVlc3RlZCArICcgbW9kaWZpZXIgaXMgcmVxdWlyZWQgYnkgJyArIF9yZXF1ZXN0aW5nICsgJyBtb2RpZmllciBpbiBvcmRlciB0byB3b3JrLCBiZSBzdXJlIHRvIGluY2x1ZGUgaXQgYmVmb3JlICcgKyBfcmVxdWVzdGluZyArICchJyk7XG4gIH1cbiAgcmV0dXJuIGlzUmVxdWlyZWQ7XG59XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgdXBkYXRlIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBhcnJvdyhkYXRhLCBvcHRpb25zKSB7XG4gIHZhciBfZGF0YSRvZmZzZXRzJGFycm93O1xuXG4gIC8vIGFycm93IGRlcGVuZHMgb24ga2VlcFRvZ2V0aGVyIGluIG9yZGVyIHRvIHdvcmtcbiAgaWYgKCFpc01vZGlmaWVyUmVxdWlyZWQoZGF0YS5pbnN0YW5jZS5tb2RpZmllcnMsICdhcnJvdycsICdrZWVwVG9nZXRoZXInKSkge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgdmFyIGFycm93RWxlbWVudCA9IG9wdGlvbnMuZWxlbWVudDtcblxuICAvLyBpZiBhcnJvd0VsZW1lbnQgaXMgYSBzdHJpbmcsIHN1cHBvc2UgaXQncyBhIENTUyBzZWxlY3RvclxuICBpZiAodHlwZW9mIGFycm93RWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICBhcnJvd0VsZW1lbnQgPSBkYXRhLmluc3RhbmNlLnBvcHBlci5xdWVyeVNlbGVjdG9yKGFycm93RWxlbWVudCk7XG5cbiAgICAvLyBpZiBhcnJvd0VsZW1lbnQgaXMgbm90IGZvdW5kLCBkb24ndCBydW4gdGhlIG1vZGlmaWVyXG4gICAgaWYgKCFhcnJvd0VsZW1lbnQpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBpZiB0aGUgYXJyb3dFbGVtZW50IGlzbid0IGEgcXVlcnkgc2VsZWN0b3Igd2UgbXVzdCBjaGVjayB0aGF0IHRoZVxuICAgIC8vIHByb3ZpZGVkIERPTSBub2RlIGlzIGNoaWxkIG9mIGl0cyBwb3BwZXIgbm9kZVxuICAgIGlmICghZGF0YS5pbnN0YW5jZS5wb3BwZXIuY29udGFpbnMoYXJyb3dFbGVtZW50KSkge1xuICAgICAgY29uc29sZS53YXJuKCdXQVJOSU5HOiBgYXJyb3cuZWxlbWVudGAgbXVzdCBiZSBjaGlsZCBvZiBpdHMgcG9wcGVyIGVsZW1lbnQhJyk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gIH1cblxuICB2YXIgcGxhY2VtZW50ID0gZGF0YS5wbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbiAgdmFyIF9kYXRhJG9mZnNldHMgPSBkYXRhLm9mZnNldHMsXG4gICAgICBwb3BwZXIgPSBfZGF0YSRvZmZzZXRzLnBvcHBlcixcbiAgICAgIHJlZmVyZW5jZSA9IF9kYXRhJG9mZnNldHMucmVmZXJlbmNlO1xuXG4gIHZhciBpc1ZlcnRpY2FsID0gWydsZWZ0JywgJ3JpZ2h0J10uaW5kZXhPZihwbGFjZW1lbnQpICE9PSAtMTtcblxuICB2YXIgbGVuID0gaXNWZXJ0aWNhbCA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbiAgdmFyIHNpZGVDYXBpdGFsaXplZCA9IGlzVmVydGljYWwgPyAnVG9wJyA6ICdMZWZ0JztcbiAgdmFyIHNpZGUgPSBzaWRlQ2FwaXRhbGl6ZWQudG9Mb3dlckNhc2UoKTtcbiAgdmFyIGFsdFNpZGUgPSBpc1ZlcnRpY2FsID8gJ2xlZnQnIDogJ3RvcCc7XG4gIHZhciBvcFNpZGUgPSBpc1ZlcnRpY2FsID8gJ2JvdHRvbScgOiAncmlnaHQnO1xuICB2YXIgYXJyb3dFbGVtZW50U2l6ZSA9IGdldE91dGVyU2l6ZXMoYXJyb3dFbGVtZW50KVtsZW5dO1xuXG4gIC8vXG4gIC8vIGV4dGVuZHMga2VlcFRvZ2V0aGVyIGJlaGF2aW9yIG1ha2luZyBzdXJlIHRoZSBwb3BwZXIgYW5kIGl0c1xuICAvLyByZWZlcmVuY2UgaGF2ZSBlbm91Z2ggcGl4ZWxzIGluIGNvbmp1bmN0aW9uXG4gIC8vXG5cbiAgLy8gdG9wL2xlZnQgc2lkZVxuICBpZiAocmVmZXJlbmNlW29wU2lkZV0gLSBhcnJvd0VsZW1lbnRTaXplIDwgcG9wcGVyW3NpZGVdKSB7XG4gICAgZGF0YS5vZmZzZXRzLnBvcHBlcltzaWRlXSAtPSBwb3BwZXJbc2lkZV0gLSAocmVmZXJlbmNlW29wU2lkZV0gLSBhcnJvd0VsZW1lbnRTaXplKTtcbiAgfVxuICAvLyBib3R0b20vcmlnaHQgc2lkZVxuICBpZiAocmVmZXJlbmNlW3NpZGVdICsgYXJyb3dFbGVtZW50U2l6ZSA+IHBvcHBlcltvcFNpZGVdKSB7XG4gICAgZGF0YS5vZmZzZXRzLnBvcHBlcltzaWRlXSArPSByZWZlcmVuY2Vbc2lkZV0gKyBhcnJvd0VsZW1lbnRTaXplIC0gcG9wcGVyW29wU2lkZV07XG4gIH1cbiAgZGF0YS5vZmZzZXRzLnBvcHBlciA9IGdldENsaWVudFJlY3QoZGF0YS5vZmZzZXRzLnBvcHBlcik7XG5cbiAgLy8gY29tcHV0ZSBjZW50ZXIgb2YgdGhlIHBvcHBlclxuICB2YXIgY2VudGVyID0gcmVmZXJlbmNlW3NpZGVdICsgcmVmZXJlbmNlW2xlbl0gLyAyIC0gYXJyb3dFbGVtZW50U2l6ZSAvIDI7XG5cbiAgLy8gQ29tcHV0ZSB0aGUgc2lkZVZhbHVlIHVzaW5nIHRoZSB1cGRhdGVkIHBvcHBlciBvZmZzZXRzXG4gIC8vIHRha2UgcG9wcGVyIG1hcmdpbiBpbiBhY2NvdW50IGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSB0aGlzIGluZm8gYXZhaWxhYmxlXG4gIHZhciBjc3MgPSBnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkoZGF0YS5pbnN0YW5jZS5wb3BwZXIpO1xuICB2YXIgcG9wcGVyTWFyZ2luU2lkZSA9IHBhcnNlRmxvYXQoY3NzWydtYXJnaW4nICsgc2lkZUNhcGl0YWxpemVkXSk7XG4gIHZhciBwb3BwZXJCb3JkZXJTaWRlID0gcGFyc2VGbG9hdChjc3NbJ2JvcmRlcicgKyBzaWRlQ2FwaXRhbGl6ZWQgKyAnV2lkdGgnXSk7XG4gIHZhciBzaWRlVmFsdWUgPSBjZW50ZXIgLSBkYXRhLm9mZnNldHMucG9wcGVyW3NpZGVdIC0gcG9wcGVyTWFyZ2luU2lkZSAtIHBvcHBlckJvcmRlclNpZGU7XG5cbiAgLy8gcHJldmVudCBhcnJvd0VsZW1lbnQgZnJvbSBiZWluZyBwbGFjZWQgbm90IGNvbnRpZ3VvdXNseSB0byBpdHMgcG9wcGVyXG4gIHNpZGVWYWx1ZSA9IE1hdGgubWF4KE1hdGgubWluKHBvcHBlcltsZW5dIC0gYXJyb3dFbGVtZW50U2l6ZSwgc2lkZVZhbHVlKSwgMCk7XG5cbiAgZGF0YS5hcnJvd0VsZW1lbnQgPSBhcnJvd0VsZW1lbnQ7XG4gIGRhdGEub2Zmc2V0cy5hcnJvdyA9IChfZGF0YSRvZmZzZXRzJGFycm93ID0ge30sIGRlZmluZVByb3BlcnR5JDIoX2RhdGEkb2Zmc2V0cyRhcnJvdywgc2lkZSwgTWF0aC5yb3VuZChzaWRlVmFsdWUpKSwgZGVmaW5lUHJvcGVydHkkMihfZGF0YSRvZmZzZXRzJGFycm93LCBhbHRTaWRlLCAnJyksIF9kYXRhJG9mZnNldHMkYXJyb3cpO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEdldCB0aGUgb3Bwb3NpdGUgcGxhY2VtZW50IHZhcmlhdGlvbiBvZiB0aGUgZ2l2ZW4gb25lXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge1N0cmluZ30gcGxhY2VtZW50IHZhcmlhdGlvblxuICogQHJldHVybnMge1N0cmluZ30gZmxpcHBlZCBwbGFjZW1lbnQgdmFyaWF0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldE9wcG9zaXRlVmFyaWF0aW9uKHZhcmlhdGlvbikge1xuICBpZiAodmFyaWF0aW9uID09PSAnZW5kJykge1xuICAgIHJldHVybiAnc3RhcnQnO1xuICB9IGVsc2UgaWYgKHZhcmlhdGlvbiA9PT0gJ3N0YXJ0Jykge1xuICAgIHJldHVybiAnZW5kJztcbiAgfVxuICByZXR1cm4gdmFyaWF0aW9uO1xufVxuXG4vKipcbiAqIExpc3Qgb2YgYWNjZXB0ZWQgcGxhY2VtZW50cyB0byB1c2UgYXMgdmFsdWVzIG9mIHRoZSBgcGxhY2VtZW50YCBvcHRpb24uPGJyIC8+XG4gKiBWYWxpZCBwbGFjZW1lbnRzIGFyZTpcbiAqIC0gYGF1dG9gXG4gKiAtIGB0b3BgXG4gKiAtIGByaWdodGBcbiAqIC0gYGJvdHRvbWBcbiAqIC0gYGxlZnRgXG4gKlxuICogRWFjaCBwbGFjZW1lbnQgY2FuIGhhdmUgYSB2YXJpYXRpb24gZnJvbSB0aGlzIGxpc3Q6XG4gKiAtIGAtc3RhcnRgXG4gKiAtIGAtZW5kYFxuICpcbiAqIFZhcmlhdGlvbnMgYXJlIGludGVycHJldGVkIGVhc2lseSBpZiB5b3UgdGhpbmsgb2YgdGhlbSBhcyB0aGUgbGVmdCB0byByaWdodFxuICogd3JpdHRlbiBsYW5ndWFnZXMuIEhvcml6b250YWxseSAoYHRvcGAgYW5kIGBib3R0b21gKSwgYHN0YXJ0YCBpcyBsZWZ0IGFuZCBgZW5kYFxuICogaXMgcmlnaHQuPGJyIC8+XG4gKiBWZXJ0aWNhbGx5IChgbGVmdGAgYW5kIGByaWdodGApLCBgc3RhcnRgIGlzIHRvcCBhbmQgYGVuZGAgaXMgYm90dG9tLlxuICpcbiAqIFNvbWUgdmFsaWQgZXhhbXBsZXMgYXJlOlxuICogLSBgdG9wLWVuZGAgKG9uIHRvcCBvZiByZWZlcmVuY2UsIHJpZ2h0IGFsaWduZWQpXG4gKiAtIGByaWdodC1zdGFydGAgKG9uIHJpZ2h0IG9mIHJlZmVyZW5jZSwgdG9wIGFsaWduZWQpXG4gKiAtIGBib3R0b21gIChvbiBib3R0b20sIGNlbnRlcmVkKVxuICogLSBgYXV0by1lbmRgIChvbiB0aGUgc2lkZSB3aXRoIG1vcmUgc3BhY2UgYXZhaWxhYmxlLCBhbGlnbm1lbnQgZGVwZW5kcyBieSBwbGFjZW1lbnQpXG4gKlxuICogQHN0YXRpY1xuICogQHR5cGUge0FycmF5fVxuICogQGVudW0ge1N0cmluZ31cbiAqIEByZWFkb25seVxuICogQG1ldGhvZCBwbGFjZW1lbnRzXG4gKiBAbWVtYmVyb2YgUG9wcGVyXG4gKi9cbnZhciBwbGFjZW1lbnRzID0gWydhdXRvLXN0YXJ0JywgJ2F1dG8nLCAnYXV0by1lbmQnLCAndG9wLXN0YXJ0JywgJ3RvcCcsICd0b3AtZW5kJywgJ3JpZ2h0LXN0YXJ0JywgJ3JpZ2h0JywgJ3JpZ2h0LWVuZCcsICdib3R0b20tZW5kJywgJ2JvdHRvbScsICdib3R0b20tc3RhcnQnLCAnbGVmdC1lbmQnLCAnbGVmdCcsICdsZWZ0LXN0YXJ0J107XG5cbi8vIEdldCByaWQgb2YgYGF1dG9gIGBhdXRvLXN0YXJ0YCBhbmQgYGF1dG8tZW5kYFxudmFyIHZhbGlkUGxhY2VtZW50cyA9IHBsYWNlbWVudHMuc2xpY2UoMyk7XG5cbi8qKlxuICogR2l2ZW4gYW4gaW5pdGlhbCBwbGFjZW1lbnQsIHJldHVybnMgYWxsIHRoZSBzdWJzZXF1ZW50IHBsYWNlbWVudHNcbiAqIGNsb2Nrd2lzZSAob3IgY291bnRlci1jbG9ja3dpc2UpLlxuICpcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBwbGFjZW1lbnQgLSBBIHZhbGlkIHBsYWNlbWVudCAoaXQgYWNjZXB0cyB2YXJpYXRpb25zKVxuICogQGFyZ3VtZW50IHtCb29sZWFufSBjb3VudGVyIC0gU2V0IHRvIHRydWUgdG8gd2FsayB0aGUgcGxhY2VtZW50cyBjb3VudGVyY2xvY2t3aXNlXG4gKiBAcmV0dXJucyB7QXJyYXl9IHBsYWNlbWVudHMgaW5jbHVkaW5nIHRoZWlyIHZhcmlhdGlvbnNcbiAqL1xuZnVuY3Rpb24gY2xvY2t3aXNlKHBsYWNlbWVudCkge1xuICB2YXIgY291bnRlciA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG5cbiAgdmFyIGluZGV4ID0gdmFsaWRQbGFjZW1lbnRzLmluZGV4T2YocGxhY2VtZW50KTtcbiAgdmFyIGFyciA9IHZhbGlkUGxhY2VtZW50cy5zbGljZShpbmRleCArIDEpLmNvbmNhdCh2YWxpZFBsYWNlbWVudHMuc2xpY2UoMCwgaW5kZXgpKTtcbiAgcmV0dXJuIGNvdW50ZXIgPyBhcnIucmV2ZXJzZSgpIDogYXJyO1xufVxuXG52YXIgQkVIQVZJT1JTID0ge1xuICBGTElQOiAnZmxpcCcsXG4gIENMT0NLV0lTRTogJ2Nsb2Nrd2lzZScsXG4gIENPVU5URVJDTE9DS1dJU0U6ICdjb3VudGVyY2xvY2t3aXNlJ1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBNb2RpZmllcnNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSB1cGRhdGUgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gKi9cbmZ1bmN0aW9uIGZsaXAoZGF0YSwgb3B0aW9ucykge1xuICAvLyBpZiBgaW5uZXJgIG1vZGlmaWVyIGlzIGVuYWJsZWQsIHdlIGNhbid0IHVzZSB0aGUgYGZsaXBgIG1vZGlmaWVyXG4gIGlmIChpc01vZGlmaWVyRW5hYmxlZChkYXRhLmluc3RhbmNlLm1vZGlmaWVycywgJ2lubmVyJykpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGlmIChkYXRhLmZsaXBwZWQgJiYgZGF0YS5wbGFjZW1lbnQgPT09IGRhdGEub3JpZ2luYWxQbGFjZW1lbnQpIHtcbiAgICAvLyBzZWVtcyBsaWtlIGZsaXAgaXMgdHJ5aW5nIHRvIGxvb3AsIHByb2JhYmx5IHRoZXJlJ3Mgbm90IGVub3VnaCBzcGFjZSBvbiBhbnkgb2YgdGhlIGZsaXBwYWJsZSBzaWRlc1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgdmFyIGJvdW5kYXJpZXMgPSBnZXRCb3VuZGFyaWVzKGRhdGEuaW5zdGFuY2UucG9wcGVyLCBkYXRhLmluc3RhbmNlLnJlZmVyZW5jZSwgb3B0aW9ucy5wYWRkaW5nLCBvcHRpb25zLmJvdW5kYXJpZXNFbGVtZW50LCBkYXRhLnBvc2l0aW9uRml4ZWQpO1xuXG4gIHZhciBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuICB2YXIgcGxhY2VtZW50T3Bwb3NpdGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICB2YXIgdmFyaWF0aW9uID0gZGF0YS5wbGFjZW1lbnQuc3BsaXQoJy0nKVsxXSB8fCAnJztcblxuICB2YXIgZmxpcE9yZGVyID0gW107XG5cbiAgc3dpdGNoIChvcHRpb25zLmJlaGF2aW9yKSB7XG4gICAgY2FzZSBCRUhBVklPUlMuRkxJUDpcbiAgICAgIGZsaXBPcmRlciA9IFtwbGFjZW1lbnQsIHBsYWNlbWVudE9wcG9zaXRlXTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgQkVIQVZJT1JTLkNMT0NLV0lTRTpcbiAgICAgIGZsaXBPcmRlciA9IGNsb2Nrd2lzZShwbGFjZW1lbnQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBCRUhBVklPUlMuQ09VTlRFUkNMT0NLV0lTRTpcbiAgICAgIGZsaXBPcmRlciA9IGNsb2Nrd2lzZShwbGFjZW1lbnQsIHRydWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGZsaXBPcmRlciA9IG9wdGlvbnMuYmVoYXZpb3I7XG4gIH1cblxuICBmbGlwT3JkZXIuZm9yRWFjaChmdW5jdGlvbiAoc3RlcCwgaW5kZXgpIHtcbiAgICBpZiAocGxhY2VtZW50ICE9PSBzdGVwIHx8IGZsaXBPcmRlci5sZW5ndGggPT09IGluZGV4ICsgMSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgcGxhY2VtZW50ID0gZGF0YS5wbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbiAgICBwbGFjZW1lbnRPcHBvc2l0ZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG5cbiAgICB2YXIgcG9wcGVyT2Zmc2V0cyA9IGRhdGEub2Zmc2V0cy5wb3BwZXI7XG4gICAgdmFyIHJlZk9mZnNldHMgPSBkYXRhLm9mZnNldHMucmVmZXJlbmNlO1xuXG4gICAgLy8gdXNpbmcgZmxvb3IgYmVjYXVzZSB0aGUgcmVmZXJlbmNlIG9mZnNldHMgbWF5IGNvbnRhaW4gZGVjaW1hbHMgd2UgYXJlIG5vdCBnb2luZyB0byBjb25zaWRlciBoZXJlXG4gICAgdmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbiAgICB2YXIgb3ZlcmxhcHNSZWYgPSBwbGFjZW1lbnQgPT09ICdsZWZ0JyAmJiBmbG9vcihwb3BwZXJPZmZzZXRzLnJpZ2h0KSA+IGZsb29yKHJlZk9mZnNldHMubGVmdCkgfHwgcGxhY2VtZW50ID09PSAncmlnaHQnICYmIGZsb29yKHBvcHBlck9mZnNldHMubGVmdCkgPCBmbG9vcihyZWZPZmZzZXRzLnJpZ2h0KSB8fCBwbGFjZW1lbnQgPT09ICd0b3AnICYmIGZsb29yKHBvcHBlck9mZnNldHMuYm90dG9tKSA+IGZsb29yKHJlZk9mZnNldHMudG9wKSB8fCBwbGFjZW1lbnQgPT09ICdib3R0b20nICYmIGZsb29yKHBvcHBlck9mZnNldHMudG9wKSA8IGZsb29yKHJlZk9mZnNldHMuYm90dG9tKTtcblxuICAgIHZhciBvdmVyZmxvd3NMZWZ0ID0gZmxvb3IocG9wcGVyT2Zmc2V0cy5sZWZ0KSA8IGZsb29yKGJvdW5kYXJpZXMubGVmdCk7XG4gICAgdmFyIG92ZXJmbG93c1JpZ2h0ID0gZmxvb3IocG9wcGVyT2Zmc2V0cy5yaWdodCkgPiBmbG9vcihib3VuZGFyaWVzLnJpZ2h0KTtcbiAgICB2YXIgb3ZlcmZsb3dzVG9wID0gZmxvb3IocG9wcGVyT2Zmc2V0cy50b3ApIDwgZmxvb3IoYm91bmRhcmllcy50b3ApO1xuICAgIHZhciBvdmVyZmxvd3NCb3R0b20gPSBmbG9vcihwb3BwZXJPZmZzZXRzLmJvdHRvbSkgPiBmbG9vcihib3VuZGFyaWVzLmJvdHRvbSk7XG5cbiAgICB2YXIgb3ZlcmZsb3dzQm91bmRhcmllcyA9IHBsYWNlbWVudCA9PT0gJ2xlZnQnICYmIG92ZXJmbG93c0xlZnQgfHwgcGxhY2VtZW50ID09PSAncmlnaHQnICYmIG92ZXJmbG93c1JpZ2h0IHx8IHBsYWNlbWVudCA9PT0gJ3RvcCcgJiYgb3ZlcmZsb3dzVG9wIHx8IHBsYWNlbWVudCA9PT0gJ2JvdHRvbScgJiYgb3ZlcmZsb3dzQm90dG9tO1xuXG4gICAgLy8gZmxpcCB0aGUgdmFyaWF0aW9uIGlmIHJlcXVpcmVkXG4gICAgdmFyIGlzVmVydGljYWwgPSBbJ3RvcCcsICdib3R0b20nXS5pbmRleE9mKHBsYWNlbWVudCkgIT09IC0xO1xuXG4gICAgLy8gZmxpcHMgdmFyaWF0aW9uIGlmIHJlZmVyZW5jZSBlbGVtZW50IG92ZXJmbG93cyBib3VuZGFyaWVzXG4gICAgdmFyIGZsaXBwZWRWYXJpYXRpb25CeVJlZiA9ICEhb3B0aW9ucy5mbGlwVmFyaWF0aW9ucyAmJiAoaXNWZXJ0aWNhbCAmJiB2YXJpYXRpb24gPT09ICdzdGFydCcgJiYgb3ZlcmZsb3dzTGVmdCB8fCBpc1ZlcnRpY2FsICYmIHZhcmlhdGlvbiA9PT0gJ2VuZCcgJiYgb3ZlcmZsb3dzUmlnaHQgfHwgIWlzVmVydGljYWwgJiYgdmFyaWF0aW9uID09PSAnc3RhcnQnICYmIG92ZXJmbG93c1RvcCB8fCAhaXNWZXJ0aWNhbCAmJiB2YXJpYXRpb24gPT09ICdlbmQnICYmIG92ZXJmbG93c0JvdHRvbSk7XG5cbiAgICAvLyBmbGlwcyB2YXJpYXRpb24gaWYgcG9wcGVyIGNvbnRlbnQgb3ZlcmZsb3dzIGJvdW5kYXJpZXNcbiAgICB2YXIgZmxpcHBlZFZhcmlhdGlvbkJ5Q29udGVudCA9ICEhb3B0aW9ucy5mbGlwVmFyaWF0aW9uc0J5Q29udGVudCAmJiAoaXNWZXJ0aWNhbCAmJiB2YXJpYXRpb24gPT09ICdzdGFydCcgJiYgb3ZlcmZsb3dzUmlnaHQgfHwgaXNWZXJ0aWNhbCAmJiB2YXJpYXRpb24gPT09ICdlbmQnICYmIG92ZXJmbG93c0xlZnQgfHwgIWlzVmVydGljYWwgJiYgdmFyaWF0aW9uID09PSAnc3RhcnQnICYmIG92ZXJmbG93c0JvdHRvbSB8fCAhaXNWZXJ0aWNhbCAmJiB2YXJpYXRpb24gPT09ICdlbmQnICYmIG92ZXJmbG93c1RvcCk7XG5cbiAgICB2YXIgZmxpcHBlZFZhcmlhdGlvbiA9IGZsaXBwZWRWYXJpYXRpb25CeVJlZiB8fCBmbGlwcGVkVmFyaWF0aW9uQnlDb250ZW50O1xuXG4gICAgaWYgKG92ZXJsYXBzUmVmIHx8IG92ZXJmbG93c0JvdW5kYXJpZXMgfHwgZmxpcHBlZFZhcmlhdGlvbikge1xuICAgICAgLy8gdGhpcyBib29sZWFuIHRvIGRldGVjdCBhbnkgZmxpcCBsb29wXG4gICAgICBkYXRhLmZsaXBwZWQgPSB0cnVlO1xuXG4gICAgICBpZiAob3ZlcmxhcHNSZWYgfHwgb3ZlcmZsb3dzQm91bmRhcmllcykge1xuICAgICAgICBwbGFjZW1lbnQgPSBmbGlwT3JkZXJbaW5kZXggKyAxXTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZsaXBwZWRWYXJpYXRpb24pIHtcbiAgICAgICAgdmFyaWF0aW9uID0gZ2V0T3Bwb3NpdGVWYXJpYXRpb24odmFyaWF0aW9uKTtcbiAgICAgIH1cblxuICAgICAgZGF0YS5wbGFjZW1lbnQgPSBwbGFjZW1lbnQgKyAodmFyaWF0aW9uID8gJy0nICsgdmFyaWF0aW9uIDogJycpO1xuXG4gICAgICAvLyB0aGlzIG9iamVjdCBjb250YWlucyBgcG9zaXRpb25gLCB3ZSB3YW50IHRvIHByZXNlcnZlIGl0IGFsb25nIHdpdGhcbiAgICAgIC8vIGFueSBhZGRpdGlvbmFsIHByb3BlcnR5IHdlIG1heSBhZGQgaW4gdGhlIGZ1dHVyZVxuICAgICAgZGF0YS5vZmZzZXRzLnBvcHBlciA9IF9leHRlbmRzJDEoe30sIGRhdGEub2Zmc2V0cy5wb3BwZXIsIGdldFBvcHBlck9mZnNldHMoZGF0YS5pbnN0YW5jZS5wb3BwZXIsIGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UsIGRhdGEucGxhY2VtZW50KSk7XG5cbiAgICAgIGRhdGEgPSBydW5Nb2RpZmllcnMoZGF0YS5pbnN0YW5jZS5tb2RpZmllcnMsIGRhdGEsICdmbGlwJyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgdXBkYXRlIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBrZWVwVG9nZXRoZXIoZGF0YSkge1xuICB2YXIgX2RhdGEkb2Zmc2V0cyA9IGRhdGEub2Zmc2V0cyxcbiAgICAgIHBvcHBlciA9IF9kYXRhJG9mZnNldHMucG9wcGVyLFxuICAgICAgcmVmZXJlbmNlID0gX2RhdGEkb2Zmc2V0cy5yZWZlcmVuY2U7XG5cbiAgdmFyIHBsYWNlbWVudCA9IGRhdGEucGxhY2VtZW50LnNwbGl0KCctJylbMF07XG4gIHZhciBmbG9vciA9IE1hdGguZmxvb3I7XG4gIHZhciBpc1ZlcnRpY2FsID0gWyd0b3AnLCAnYm90dG9tJ10uaW5kZXhPZihwbGFjZW1lbnQpICE9PSAtMTtcbiAgdmFyIHNpZGUgPSBpc1ZlcnRpY2FsID8gJ3JpZ2h0JyA6ICdib3R0b20nO1xuICB2YXIgb3BTaWRlID0gaXNWZXJ0aWNhbCA/ICdsZWZ0JyA6ICd0b3AnO1xuICB2YXIgbWVhc3VyZW1lbnQgPSBpc1ZlcnRpY2FsID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuXG4gIGlmIChwb3BwZXJbc2lkZV0gPCBmbG9vcihyZWZlcmVuY2Vbb3BTaWRlXSkpIHtcbiAgICBkYXRhLm9mZnNldHMucG9wcGVyW29wU2lkZV0gPSBmbG9vcihyZWZlcmVuY2Vbb3BTaWRlXSkgLSBwb3BwZXJbbWVhc3VyZW1lbnRdO1xuICB9XG4gIGlmIChwb3BwZXJbb3BTaWRlXSA+IGZsb29yKHJlZmVyZW5jZVtzaWRlXSkpIHtcbiAgICBkYXRhLm9mZnNldHMucG9wcGVyW29wU2lkZV0gPSBmbG9vcihyZWZlcmVuY2Vbc2lkZV0pO1xuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzdHJpbmcgY29udGFpbmluZyB2YWx1ZSArIHVuaXQgaW50byBhIHB4IHZhbHVlIG51bWJlclxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2Yge21vZGlmaWVyc35vZmZzZXR9XG4gKiBAcHJpdmF0ZVxuICogQGFyZ3VtZW50IHtTdHJpbmd9IHN0ciAtIFZhbHVlICsgdW5pdCBzdHJpbmdcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBtZWFzdXJlbWVudCAtIGBoZWlnaHRgIG9yIGB3aWR0aGBcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBwb3BwZXJPZmZzZXRzXG4gKiBAYXJndW1lbnQge09iamVjdH0gcmVmZXJlbmNlT2Zmc2V0c1xuICogQHJldHVybnMge051bWJlcnxTdHJpbmd9XG4gKiBWYWx1ZSBpbiBwaXhlbHMsIG9yIG9yaWdpbmFsIHN0cmluZyBpZiBubyB2YWx1ZXMgd2VyZSBleHRyYWN0ZWRcbiAqL1xuZnVuY3Rpb24gdG9WYWx1ZShzdHIsIG1lYXN1cmVtZW50LCBwb3BwZXJPZmZzZXRzLCByZWZlcmVuY2VPZmZzZXRzKSB7XG4gIC8vIHNlcGFyYXRlIHZhbHVlIGZyb20gdW5pdFxuICB2YXIgc3BsaXQgPSBzdHIubWF0Y2goLygoPzpcXC18XFwrKT9cXGQqXFwuP1xcZCopKC4qKS8pO1xuICB2YXIgdmFsdWUgPSArc3BsaXRbMV07XG4gIHZhciB1bml0ID0gc3BsaXRbMl07XG5cbiAgLy8gSWYgaXQncyBub3QgYSBudW1iZXIgaXQncyBhbiBvcGVyYXRvciwgSSBndWVzc1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIGlmICh1bml0LmluZGV4T2YoJyUnKSA9PT0gMCkge1xuICAgIHZhciBlbGVtZW50ID0gdm9pZCAwO1xuICAgIHN3aXRjaCAodW5pdCkge1xuICAgICAgY2FzZSAnJXAnOlxuICAgICAgICBlbGVtZW50ID0gcG9wcGVyT2Zmc2V0cztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICclJzpcbiAgICAgIGNhc2UgJyVyJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGVsZW1lbnQgPSByZWZlcmVuY2VPZmZzZXRzO1xuICAgIH1cblxuICAgIHZhciByZWN0ID0gZ2V0Q2xpZW50UmVjdChlbGVtZW50KTtcbiAgICByZXR1cm4gcmVjdFttZWFzdXJlbWVudF0gLyAxMDAgKiB2YWx1ZTtcbiAgfSBlbHNlIGlmICh1bml0ID09PSAndmgnIHx8IHVuaXQgPT09ICd2dycpIHtcbiAgICAvLyBpZiBpcyBhIHZoIG9yIHZ3LCB3ZSBjYWxjdWxhdGUgdGhlIHNpemUgYmFzZWQgb24gdGhlIHZpZXdwb3J0XG4gICAgdmFyIHNpemUgPSB2b2lkIDA7XG4gICAgaWYgKHVuaXQgPT09ICd2aCcpIHtcbiAgICAgIHNpemUgPSBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNpemUgPSBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsIHdpbmRvdy5pbm5lcldpZHRoIHx8IDApO1xuICAgIH1cbiAgICByZXR1cm4gc2l6ZSAvIDEwMCAqIHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIC8vIGlmIGlzIGFuIGV4cGxpY2l0IHBpeGVsIHVuaXQsIHdlIGdldCByaWQgb2YgdGhlIHVuaXQgYW5kIGtlZXAgdGhlIHZhbHVlXG4gICAgLy8gaWYgaXMgYW4gaW1wbGljaXQgdW5pdCwgaXQncyBweCwgYW5kIHdlIHJldHVybiBqdXN0IHRoZSB2YWx1ZVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlIGFuIGBvZmZzZXRgIHN0cmluZyB0byBleHRyYXBvbGF0ZSBgeGAgYW5kIGB5YCBudW1lcmljIG9mZnNldHMuXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiB7bW9kaWZpZXJzfm9mZnNldH1cbiAqIEBwcml2YXRlXG4gKiBAYXJndW1lbnQge1N0cmluZ30gb2Zmc2V0XG4gKiBAYXJndW1lbnQge09iamVjdH0gcG9wcGVyT2Zmc2V0c1xuICogQGFyZ3VtZW50IHtPYmplY3R9IHJlZmVyZW5jZU9mZnNldHNcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBiYXNlUGxhY2VtZW50XG4gKiBAcmV0dXJucyB7QXJyYXl9IGEgdHdvIGNlbGxzIGFycmF5IHdpdGggeCBhbmQgeSBvZmZzZXRzIGluIG51bWJlcnNcbiAqL1xuZnVuY3Rpb24gcGFyc2VPZmZzZXQob2Zmc2V0LCBwb3BwZXJPZmZzZXRzLCByZWZlcmVuY2VPZmZzZXRzLCBiYXNlUGxhY2VtZW50KSB7XG4gIHZhciBvZmZzZXRzID0gWzAsIDBdO1xuXG4gIC8vIFVzZSBoZWlnaHQgaWYgcGxhY2VtZW50IGlzIGxlZnQgb3IgcmlnaHQgYW5kIGluZGV4IGlzIDAgb3RoZXJ3aXNlIHVzZSB3aWR0aFxuICAvLyBpbiB0aGlzIHdheSB0aGUgZmlyc3Qgb2Zmc2V0IHdpbGwgdXNlIGFuIGF4aXMgYW5kIHRoZSBzZWNvbmQgb25lXG4gIC8vIHdpbGwgdXNlIHRoZSBvdGhlciBvbmVcbiAgdmFyIHVzZUhlaWdodCA9IFsncmlnaHQnLCAnbGVmdCddLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgIT09IC0xO1xuXG4gIC8vIFNwbGl0IHRoZSBvZmZzZXQgc3RyaW5nIHRvIG9idGFpbiBhIGxpc3Qgb2YgdmFsdWVzIGFuZCBvcGVyYW5kc1xuICAvLyBUaGUgcmVnZXggYWRkcmVzc2VzIHZhbHVlcyB3aXRoIHRoZSBwbHVzIG9yIG1pbnVzIHNpZ24gaW4gZnJvbnQgKCsxMCwgLTIwLCBldGMpXG4gIHZhciBmcmFnbWVudHMgPSBvZmZzZXQuc3BsaXQoLyhcXCt8XFwtKS8pLm1hcChmdW5jdGlvbiAoZnJhZykge1xuICAgIHJldHVybiBmcmFnLnRyaW0oKTtcbiAgfSk7XG5cbiAgLy8gRGV0ZWN0IGlmIHRoZSBvZmZzZXQgc3RyaW5nIGNvbnRhaW5zIGEgcGFpciBvZiB2YWx1ZXMgb3IgYSBzaW5nbGUgb25lXG4gIC8vIHRoZXkgY291bGQgYmUgc2VwYXJhdGVkIGJ5IGNvbW1hIG9yIHNwYWNlXG4gIHZhciBkaXZpZGVyID0gZnJhZ21lbnRzLmluZGV4T2YoZmluZChmcmFnbWVudHMsIGZ1bmN0aW9uIChmcmFnKSB7XG4gICAgcmV0dXJuIGZyYWcuc2VhcmNoKC8sfFxccy8pICE9PSAtMTtcbiAgfSkpO1xuXG4gIGlmIChmcmFnbWVudHNbZGl2aWRlcl0gJiYgZnJhZ21lbnRzW2RpdmlkZXJdLmluZGV4T2YoJywnKSA9PT0gLTEpIHtcbiAgICBjb25zb2xlLndhcm4oJ09mZnNldHMgc2VwYXJhdGVkIGJ5IHdoaXRlIHNwYWNlKHMpIGFyZSBkZXByZWNhdGVkLCB1c2UgYSBjb21tYSAoLCkgaW5zdGVhZC4nKTtcbiAgfVxuXG4gIC8vIElmIGRpdmlkZXIgaXMgZm91bmQsIHdlIGRpdmlkZSB0aGUgbGlzdCBvZiB2YWx1ZXMgYW5kIG9wZXJhbmRzIHRvIGRpdmlkZVxuICAvLyB0aGVtIGJ5IG9mc2V0IFggYW5kIFkuXG4gIHZhciBzcGxpdFJlZ2V4ID0gL1xccyosXFxzKnxcXHMrLztcbiAgdmFyIG9wcyA9IGRpdmlkZXIgIT09IC0xID8gW2ZyYWdtZW50cy5zbGljZSgwLCBkaXZpZGVyKS5jb25jYXQoW2ZyYWdtZW50c1tkaXZpZGVyXS5zcGxpdChzcGxpdFJlZ2V4KVswXV0pLCBbZnJhZ21lbnRzW2RpdmlkZXJdLnNwbGl0KHNwbGl0UmVnZXgpWzFdXS5jb25jYXQoZnJhZ21lbnRzLnNsaWNlKGRpdmlkZXIgKyAxKSldIDogW2ZyYWdtZW50c107XG5cbiAgLy8gQ29udmVydCB0aGUgdmFsdWVzIHdpdGggdW5pdHMgdG8gYWJzb2x1dGUgcGl4ZWxzIHRvIGFsbG93IG91ciBjb21wdXRhdGlvbnNcbiAgb3BzID0gb3BzLm1hcChmdW5jdGlvbiAob3AsIGluZGV4KSB7XG4gICAgLy8gTW9zdCBvZiB0aGUgdW5pdHMgcmVseSBvbiB0aGUgb3JpZW50YXRpb24gb2YgdGhlIHBvcHBlclxuICAgIHZhciBtZWFzdXJlbWVudCA9IChpbmRleCA9PT0gMSA/ICF1c2VIZWlnaHQgOiB1c2VIZWlnaHQpID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICAgIHZhciBtZXJnZVdpdGhQcmV2aW91cyA9IGZhbHNlO1xuICAgIHJldHVybiBvcFxuICAgIC8vIFRoaXMgYWdncmVnYXRlcyBhbnkgYCtgIG9yIGAtYCBzaWduIHRoYXQgYXJlbid0IGNvbnNpZGVyZWQgb3BlcmF0b3JzXG4gICAgLy8gZS5nLjogMTAgKyArNSA9PiBbMTAsICssICs1XVxuICAgIC5yZWR1Y2UoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIGlmIChhW2EubGVuZ3RoIC0gMV0gPT09ICcnICYmIFsnKycsICctJ10uaW5kZXhPZihiKSAhPT0gLTEpIHtcbiAgICAgICAgYVthLmxlbmd0aCAtIDFdID0gYjtcbiAgICAgICAgbWVyZ2VXaXRoUHJldmlvdXMgPSB0cnVlO1xuICAgICAgICByZXR1cm4gYTtcbiAgICAgIH0gZWxzZSBpZiAobWVyZ2VXaXRoUHJldmlvdXMpIHtcbiAgICAgICAgYVthLmxlbmd0aCAtIDFdICs9IGI7XG4gICAgICAgIG1lcmdlV2l0aFByZXZpb3VzID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBhO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGEuY29uY2F0KGIpO1xuICAgICAgfVxuICAgIH0sIFtdKVxuICAgIC8vIEhlcmUgd2UgY29udmVydCB0aGUgc3RyaW5nIHZhbHVlcyBpbnRvIG51bWJlciB2YWx1ZXMgKGluIHB4KVxuICAgIC5tYXAoZnVuY3Rpb24gKHN0cikge1xuICAgICAgcmV0dXJuIHRvVmFsdWUoc3RyLCBtZWFzdXJlbWVudCwgcG9wcGVyT2Zmc2V0cywgcmVmZXJlbmNlT2Zmc2V0cyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIExvb3AgdHJvdWdoIHRoZSBvZmZzZXRzIGFycmF5cyBhbmQgZXhlY3V0ZSB0aGUgb3BlcmF0aW9uc1xuICBvcHMuZm9yRWFjaChmdW5jdGlvbiAob3AsIGluZGV4KSB7XG4gICAgb3AuZm9yRWFjaChmdW5jdGlvbiAoZnJhZywgaW5kZXgyKSB7XG4gICAgICBpZiAoaXNOdW1lcmljKGZyYWcpKSB7XG4gICAgICAgIG9mZnNldHNbaW5kZXhdICs9IGZyYWcgKiAob3BbaW5kZXgyIC0gMV0gPT09ICctJyA/IC0xIDogMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gb2Zmc2V0cztcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBNb2RpZmllcnNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSB1cGRhdGUgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAYXJndW1lbnQge051bWJlcnxTdHJpbmd9IG9wdGlvbnMub2Zmc2V0PTBcbiAqIFRoZSBvZmZzZXQgdmFsdWUgYXMgZGVzY3JpYmVkIGluIHRoZSBtb2RpZmllciBkZXNjcmlwdGlvblxuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBvZmZzZXQoZGF0YSwgX3JlZikge1xuICB2YXIgb2Zmc2V0ID0gX3JlZi5vZmZzZXQ7XG4gIHZhciBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudCxcbiAgICAgIF9kYXRhJG9mZnNldHMgPSBkYXRhLm9mZnNldHMsXG4gICAgICBwb3BwZXIgPSBfZGF0YSRvZmZzZXRzLnBvcHBlcixcbiAgICAgIHJlZmVyZW5jZSA9IF9kYXRhJG9mZnNldHMucmVmZXJlbmNlO1xuXG4gIHZhciBiYXNlUGxhY2VtZW50ID0gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG5cbiAgdmFyIG9mZnNldHMgPSB2b2lkIDA7XG4gIGlmIChpc051bWVyaWMoK29mZnNldCkpIHtcbiAgICBvZmZzZXRzID0gWytvZmZzZXQsIDBdO1xuICB9IGVsc2Uge1xuICAgIG9mZnNldHMgPSBwYXJzZU9mZnNldChvZmZzZXQsIHBvcHBlciwgcmVmZXJlbmNlLCBiYXNlUGxhY2VtZW50KTtcbiAgfVxuXG4gIGlmIChiYXNlUGxhY2VtZW50ID09PSAnbGVmdCcpIHtcbiAgICBwb3BwZXIudG9wICs9IG9mZnNldHNbMF07XG4gICAgcG9wcGVyLmxlZnQgLT0gb2Zmc2V0c1sxXTtcbiAgfSBlbHNlIGlmIChiYXNlUGxhY2VtZW50ID09PSAncmlnaHQnKSB7XG4gICAgcG9wcGVyLnRvcCArPSBvZmZzZXRzWzBdO1xuICAgIHBvcHBlci5sZWZ0ICs9IG9mZnNldHNbMV07XG4gIH0gZWxzZSBpZiAoYmFzZVBsYWNlbWVudCA9PT0gJ3RvcCcpIHtcbiAgICBwb3BwZXIubGVmdCArPSBvZmZzZXRzWzBdO1xuICAgIHBvcHBlci50b3AgLT0gb2Zmc2V0c1sxXTtcbiAgfSBlbHNlIGlmIChiYXNlUGxhY2VtZW50ID09PSAnYm90dG9tJykge1xuICAgIHBvcHBlci5sZWZ0ICs9IG9mZnNldHNbMF07XG4gICAgcG9wcGVyLnRvcCArPSBvZmZzZXRzWzFdO1xuICB9XG5cbiAgZGF0YS5wb3BwZXIgPSBwb3BwZXI7XG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IGB1cGRhdGVgIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBwcmV2ZW50T3ZlcmZsb3coZGF0YSwgb3B0aW9ucykge1xuICB2YXIgYm91bmRhcmllc0VsZW1lbnQgPSBvcHRpb25zLmJvdW5kYXJpZXNFbGVtZW50IHx8IGdldE9mZnNldFBhcmVudChkYXRhLmluc3RhbmNlLnBvcHBlcik7XG5cbiAgLy8gSWYgb2Zmc2V0UGFyZW50IGlzIHRoZSByZWZlcmVuY2UgZWxlbWVudCwgd2UgcmVhbGx5IHdhbnQgdG9cbiAgLy8gZ28gb25lIHN0ZXAgdXAgYW5kIHVzZSB0aGUgbmV4dCBvZmZzZXRQYXJlbnQgYXMgcmVmZXJlbmNlIHRvXG4gIC8vIGF2b2lkIHRvIG1ha2UgdGhpcyBtb2RpZmllciBjb21wbGV0ZWx5IHVzZWxlc3MgYW5kIGxvb2sgbGlrZSBicm9rZW5cbiAgaWYgKGRhdGEuaW5zdGFuY2UucmVmZXJlbmNlID09PSBib3VuZGFyaWVzRWxlbWVudCkge1xuICAgIGJvdW5kYXJpZXNFbGVtZW50ID0gZ2V0T2Zmc2V0UGFyZW50KGJvdW5kYXJpZXNFbGVtZW50KTtcbiAgfVxuXG4gIC8vIE5PVEU6IERPTSBhY2Nlc3MgaGVyZVxuICAvLyByZXNldHMgdGhlIHBvcHBlcidzIHBvc2l0aW9uIHNvIHRoYXQgdGhlIGRvY3VtZW50IHNpemUgY2FuIGJlIGNhbGN1bGF0ZWQgZXhjbHVkaW5nXG4gIC8vIHRoZSBzaXplIG9mIHRoZSBwb3BwZXIgZWxlbWVudCBpdHNlbGZcbiAgdmFyIHRyYW5zZm9ybVByb3AgPSBnZXRTdXBwb3J0ZWRQcm9wZXJ0eU5hbWUoJ3RyYW5zZm9ybScpO1xuICB2YXIgcG9wcGVyU3R5bGVzID0gZGF0YS5pbnN0YW5jZS5wb3BwZXIuc3R5bGU7IC8vIGFzc2lnbm1lbnQgdG8gaGVscCBtaW5pZmljYXRpb25cbiAgdmFyIHRvcCA9IHBvcHBlclN0eWxlcy50b3AsXG4gICAgICBsZWZ0ID0gcG9wcGVyU3R5bGVzLmxlZnQsXG4gICAgICB0cmFuc2Zvcm0gPSBwb3BwZXJTdHlsZXNbdHJhbnNmb3JtUHJvcF07XG5cbiAgcG9wcGVyU3R5bGVzLnRvcCA9ICcnO1xuICBwb3BwZXJTdHlsZXMubGVmdCA9ICcnO1xuICBwb3BwZXJTdHlsZXNbdHJhbnNmb3JtUHJvcF0gPSAnJztcblxuICB2YXIgYm91bmRhcmllcyA9IGdldEJvdW5kYXJpZXMoZGF0YS5pbnN0YW5jZS5wb3BwZXIsIGRhdGEuaW5zdGFuY2UucmVmZXJlbmNlLCBvcHRpb25zLnBhZGRpbmcsIGJvdW5kYXJpZXNFbGVtZW50LCBkYXRhLnBvc2l0aW9uRml4ZWQpO1xuXG4gIC8vIE5PVEU6IERPTSBhY2Nlc3MgaGVyZVxuICAvLyByZXN0b3JlcyB0aGUgb3JpZ2luYWwgc3R5bGUgcHJvcGVydGllcyBhZnRlciB0aGUgb2Zmc2V0cyBoYXZlIGJlZW4gY29tcHV0ZWRcbiAgcG9wcGVyU3R5bGVzLnRvcCA9IHRvcDtcbiAgcG9wcGVyU3R5bGVzLmxlZnQgPSBsZWZ0O1xuICBwb3BwZXJTdHlsZXNbdHJhbnNmb3JtUHJvcF0gPSB0cmFuc2Zvcm07XG5cbiAgb3B0aW9ucy5ib3VuZGFyaWVzID0gYm91bmRhcmllcztcblxuICB2YXIgb3JkZXIgPSBvcHRpb25zLnByaW9yaXR5O1xuICB2YXIgcG9wcGVyID0gZGF0YS5vZmZzZXRzLnBvcHBlcjtcblxuICB2YXIgY2hlY2sgPSB7XG4gICAgcHJpbWFyeTogZnVuY3Rpb24gcHJpbWFyeShwbGFjZW1lbnQpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHBvcHBlcltwbGFjZW1lbnRdO1xuICAgICAgaWYgKHBvcHBlcltwbGFjZW1lbnRdIDwgYm91bmRhcmllc1twbGFjZW1lbnRdICYmICFvcHRpb25zLmVzY2FwZVdpdGhSZWZlcmVuY2UpIHtcbiAgICAgICAgdmFsdWUgPSBNYXRoLm1heChwb3BwZXJbcGxhY2VtZW50XSwgYm91bmRhcmllc1twbGFjZW1lbnRdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eSQyKHt9LCBwbGFjZW1lbnQsIHZhbHVlKTtcbiAgICB9LFxuICAgIHNlY29uZGFyeTogZnVuY3Rpb24gc2Vjb25kYXJ5KHBsYWNlbWVudCkge1xuICAgICAgdmFyIG1haW5TaWRlID0gcGxhY2VtZW50ID09PSAncmlnaHQnID8gJ2xlZnQnIDogJ3RvcCc7XG4gICAgICB2YXIgdmFsdWUgPSBwb3BwZXJbbWFpblNpZGVdO1xuICAgICAgaWYgKHBvcHBlcltwbGFjZW1lbnRdID4gYm91bmRhcmllc1twbGFjZW1lbnRdICYmICFvcHRpb25zLmVzY2FwZVdpdGhSZWZlcmVuY2UpIHtcbiAgICAgICAgdmFsdWUgPSBNYXRoLm1pbihwb3BwZXJbbWFpblNpZGVdLCBib3VuZGFyaWVzW3BsYWNlbWVudF0gLSAocGxhY2VtZW50ID09PSAncmlnaHQnID8gcG9wcGVyLndpZHRoIDogcG9wcGVyLmhlaWdodCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRlZmluZVByb3BlcnR5JDIoe30sIG1haW5TaWRlLCB2YWx1ZSk7XG4gICAgfVxuICB9O1xuXG4gIG9yZGVyLmZvckVhY2goZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgIHZhciBzaWRlID0gWydsZWZ0JywgJ3RvcCddLmluZGV4T2YocGxhY2VtZW50KSAhPT0gLTEgPyAncHJpbWFyeScgOiAnc2Vjb25kYXJ5JztcbiAgICBwb3BwZXIgPSBfZXh0ZW5kcyQxKHt9LCBwb3BwZXIsIGNoZWNrW3NpZGVdKHBsYWNlbWVudCkpO1xuICB9KTtcblxuICBkYXRhLm9mZnNldHMucG9wcGVyID0gcG9wcGVyO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IGB1cGRhdGVgIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBzaGlmdChkYXRhKSB7XG4gIHZhciBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudDtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBwbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbiAgdmFyIHNoaWZ0dmFyaWF0aW9uID0gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG5cbiAgLy8gaWYgc2hpZnQgc2hpZnR2YXJpYXRpb24gaXMgc3BlY2lmaWVkLCBydW4gdGhlIG1vZGlmaWVyXG4gIGlmIChzaGlmdHZhcmlhdGlvbikge1xuICAgIHZhciBfZGF0YSRvZmZzZXRzID0gZGF0YS5vZmZzZXRzLFxuICAgICAgICByZWZlcmVuY2UgPSBfZGF0YSRvZmZzZXRzLnJlZmVyZW5jZSxcbiAgICAgICAgcG9wcGVyID0gX2RhdGEkb2Zmc2V0cy5wb3BwZXI7XG5cbiAgICB2YXIgaXNWZXJ0aWNhbCA9IFsnYm90dG9tJywgJ3RvcCddLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgIT09IC0xO1xuICAgIHZhciBzaWRlID0gaXNWZXJ0aWNhbCA/ICdsZWZ0JyA6ICd0b3AnO1xuICAgIHZhciBtZWFzdXJlbWVudCA9IGlzVmVydGljYWwgPyAnd2lkdGgnIDogJ2hlaWdodCc7XG5cbiAgICB2YXIgc2hpZnRPZmZzZXRzID0ge1xuICAgICAgc3RhcnQ6IGRlZmluZVByb3BlcnR5JDIoe30sIHNpZGUsIHJlZmVyZW5jZVtzaWRlXSksXG4gICAgICBlbmQ6IGRlZmluZVByb3BlcnR5JDIoe30sIHNpZGUsIHJlZmVyZW5jZVtzaWRlXSArIHJlZmVyZW5jZVttZWFzdXJlbWVudF0gLSBwb3BwZXJbbWVhc3VyZW1lbnRdKVxuICAgIH07XG5cbiAgICBkYXRhLm9mZnNldHMucG9wcGVyID0gX2V4dGVuZHMkMSh7fSwgcG9wcGVyLCBzaGlmdE9mZnNldHNbc2hpZnR2YXJpYXRpb25dKTtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IHVwZGF0ZSBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gaGlkZShkYXRhKSB7XG4gIGlmICghaXNNb2RpZmllclJlcXVpcmVkKGRhdGEuaW5zdGFuY2UubW9kaWZpZXJzLCAnaGlkZScsICdwcmV2ZW50T3ZlcmZsb3cnKSkge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgdmFyIHJlZlJlY3QgPSBkYXRhLm9mZnNldHMucmVmZXJlbmNlO1xuICB2YXIgYm91bmQgPSBmaW5kKGRhdGEuaW5zdGFuY2UubW9kaWZpZXJzLCBmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICByZXR1cm4gbW9kaWZpZXIubmFtZSA9PT0gJ3ByZXZlbnRPdmVyZmxvdyc7XG4gIH0pLmJvdW5kYXJpZXM7XG5cbiAgaWYgKHJlZlJlY3QuYm90dG9tIDwgYm91bmQudG9wIHx8IHJlZlJlY3QubGVmdCA+IGJvdW5kLnJpZ2h0IHx8IHJlZlJlY3QudG9wID4gYm91bmQuYm90dG9tIHx8IHJlZlJlY3QucmlnaHQgPCBib3VuZC5sZWZ0KSB7XG4gICAgLy8gQXZvaWQgdW5uZWNlc3NhcnkgRE9NIGFjY2VzcyBpZiB2aXNpYmlsaXR5IGhhc24ndCBjaGFuZ2VkXG4gICAgaWYgKGRhdGEuaGlkZSA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgZGF0YS5oaWRlID0gdHJ1ZTtcbiAgICBkYXRhLmF0dHJpYnV0ZXNbJ3gtb3V0LW9mLWJvdW5kYXJpZXMnXSA9ICcnO1xuICB9IGVsc2Uge1xuICAgIC8vIEF2b2lkIHVubmVjZXNzYXJ5IERPTSBhY2Nlc3MgaWYgdmlzaWJpbGl0eSBoYXNuJ3QgY2hhbmdlZFxuICAgIGlmIChkYXRhLmhpZGUgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBkYXRhLmhpZGUgPSBmYWxzZTtcbiAgICBkYXRhLmF0dHJpYnV0ZXNbJ3gtb3V0LW9mLWJvdW5kYXJpZXMnXSA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgYHVwZGF0ZWAgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gKi9cbmZ1bmN0aW9uIGlubmVyKGRhdGEpIHtcbiAgdmFyIHBsYWNlbWVudCA9IGRhdGEucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuICB2YXIgX2RhdGEkb2Zmc2V0cyA9IGRhdGEub2Zmc2V0cyxcbiAgICAgIHBvcHBlciA9IF9kYXRhJG9mZnNldHMucG9wcGVyLFxuICAgICAgcmVmZXJlbmNlID0gX2RhdGEkb2Zmc2V0cy5yZWZlcmVuY2U7XG5cbiAgdmFyIGlzSG9yaXogPSBbJ2xlZnQnLCAncmlnaHQnXS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpICE9PSAtMTtcblxuICB2YXIgc3VidHJhY3RMZW5ndGggPSBbJ3RvcCcsICdsZWZ0J10uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA9PT0gLTE7XG5cbiAgcG9wcGVyW2lzSG9yaXogPyAnbGVmdCcgOiAndG9wJ10gPSByZWZlcmVuY2VbYmFzZVBsYWNlbWVudF0gLSAoc3VidHJhY3RMZW5ndGggPyBwb3BwZXJbaXNIb3JpeiA/ICd3aWR0aCcgOiAnaGVpZ2h0J10gOiAwKTtcblxuICBkYXRhLnBsYWNlbWVudCA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIGRhdGEub2Zmc2V0cy5wb3BwZXIgPSBnZXRDbGllbnRSZWN0KHBvcHBlcik7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogTW9kaWZpZXIgZnVuY3Rpb24sIGVhY2ggbW9kaWZpZXIgY2FuIGhhdmUgYSBmdW5jdGlvbiBvZiB0aGlzIHR5cGUgYXNzaWduZWRcbiAqIHRvIGl0cyBgZm5gIHByb3BlcnR5LjxiciAvPlxuICogVGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgY2FsbGVkIG9uIGVhY2ggdXBkYXRlLCB0aGlzIG1lYW5zIHRoYXQgeW91IG11c3RcbiAqIG1ha2Ugc3VyZSB0aGV5IGFyZSBwZXJmb3JtYW50IGVub3VnaCB0byBhdm9pZCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy5cbiAqXG4gKiBAZnVuY3Rpb24gTW9kaWZpZXJGblxuICogQGFyZ3VtZW50IHtkYXRhT2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSBgdXBkYXRlYCBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtkYXRhT2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gKi9cblxuLyoqXG4gKiBNb2RpZmllcnMgYXJlIHBsdWdpbnMgdXNlZCB0byBhbHRlciB0aGUgYmVoYXZpb3Igb2YgeW91ciBwb3BwZXJzLjxiciAvPlxuICogUG9wcGVyLmpzIHVzZXMgYSBzZXQgb2YgOSBtb2RpZmllcnMgdG8gcHJvdmlkZSBhbGwgdGhlIGJhc2ljIGZ1bmN0aW9uYWxpdGllc1xuICogbmVlZGVkIGJ5IHRoZSBsaWJyYXJ5LlxuICpcbiAqIFVzdWFsbHkgeW91IGRvbid0IHdhbnQgdG8gb3ZlcnJpZGUgdGhlIGBvcmRlcmAsIGBmbmAgYW5kIGBvbkxvYWRgIHByb3BzLlxuICogQWxsIHRoZSBvdGhlciBwcm9wZXJ0aWVzIGFyZSBjb25maWd1cmF0aW9ucyB0aGF0IGNvdWxkIGJlIHR3ZWFrZWQuXG4gKiBAbmFtZXNwYWNlIG1vZGlmaWVyc1xuICovXG52YXIgbW9kaWZpZXJzID0ge1xuICAvKipcbiAgICogTW9kaWZpZXIgdXNlZCB0byBzaGlmdCB0aGUgcG9wcGVyIG9uIHRoZSBzdGFydCBvciBlbmQgb2YgaXRzIHJlZmVyZW5jZVxuICAgKiBlbGVtZW50LjxiciAvPlxuICAgKiBJdCB3aWxsIHJlYWQgdGhlIHZhcmlhdGlvbiBvZiB0aGUgYHBsYWNlbWVudGAgcHJvcGVydHkuPGJyIC8+XG4gICAqIEl0IGNhbiBiZSBvbmUgZWl0aGVyIGAtZW5kYCBvciBgLXN0YXJ0YC5cbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIHNoaWZ0OiB7XG4gICAgLyoqIEBwcm9wIHtudW1iZXJ9IG9yZGVyPTEwMCAtIEluZGV4IHVzZWQgdG8gZGVmaW5lIHRoZSBvcmRlciBvZiBleGVjdXRpb24gKi9cbiAgICBvcmRlcjogMTAwLFxuICAgIC8qKiBAcHJvcCB7Qm9vbGVhbn0gZW5hYmxlZD10cnVlIC0gV2hldGhlciB0aGUgbW9kaWZpZXIgaXMgZW5hYmxlZCBvciBub3QgKi9cbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIC8qKiBAcHJvcCB7TW9kaWZpZXJGbn0gKi9cbiAgICBmbjogc2hpZnRcbiAgfSxcblxuICAvKipcbiAgICogVGhlIGBvZmZzZXRgIG1vZGlmaWVyIGNhbiBzaGlmdCB5b3VyIHBvcHBlciBvbiBib3RoIGl0cyBheGlzLlxuICAgKlxuICAgKiBJdCBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgdW5pdHM6XG4gICAqIC0gYHB4YCBvciB1bml0LWxlc3MsIGludGVycHJldGVkIGFzIHBpeGVsc1xuICAgKiAtIGAlYCBvciBgJXJgLCBwZXJjZW50YWdlIHJlbGF0aXZlIHRvIHRoZSBsZW5ndGggb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50XG4gICAqIC0gYCVwYCwgcGVyY2VudGFnZSByZWxhdGl2ZSB0byB0aGUgbGVuZ3RoIG9mIHRoZSBwb3BwZXIgZWxlbWVudFxuICAgKiAtIGB2d2AsIENTUyB2aWV3cG9ydCB3aWR0aCB1bml0XG4gICAqIC0gYHZoYCwgQ1NTIHZpZXdwb3J0IGhlaWdodCB1bml0XG4gICAqXG4gICAqIEZvciBsZW5ndGggaXMgaW50ZW5kZWQgdGhlIG1haW4gYXhpcyByZWxhdGl2ZSB0byB0aGUgcGxhY2VtZW50IG9mIHRoZSBwb3BwZXIuPGJyIC8+XG4gICAqIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGUgcGxhY2VtZW50IGlzIGB0b3BgIG9yIGBib3R0b21gLCB0aGUgbGVuZ3RoIHdpbGwgYmUgdGhlXG4gICAqIGB3aWR0aGAuIEluIGNhc2Ugb2YgYGxlZnRgIG9yIGByaWdodGAsIGl0IHdpbGwgYmUgdGhlIGBoZWlnaHRgLlxuICAgKlxuICAgKiBZb3UgY2FuIHByb3ZpZGUgYSBzaW5nbGUgdmFsdWUgKGFzIGBOdW1iZXJgIG9yIGBTdHJpbmdgKSwgb3IgYSBwYWlyIG9mIHZhbHVlc1xuICAgKiBhcyBgU3RyaW5nYCBkaXZpZGVkIGJ5IGEgY29tbWEgb3Igb25lIChvciBtb3JlKSB3aGl0ZSBzcGFjZXMuPGJyIC8+XG4gICAqIFRoZSBsYXR0ZXIgaXMgYSBkZXByZWNhdGVkIG1ldGhvZCBiZWNhdXNlIGl0IGxlYWRzIHRvIGNvbmZ1c2lvbiBhbmQgd2lsbCBiZVxuICAgKiByZW1vdmVkIGluIHYyLjxiciAvPlxuICAgKiBBZGRpdGlvbmFsbHksIGl0IGFjY2VwdHMgYWRkaXRpb25zIGFuZCBzdWJ0cmFjdGlvbnMgYmV0d2VlbiBkaWZmZXJlbnQgdW5pdHMuXG4gICAqIE5vdGUgdGhhdCBtdWx0aXBsaWNhdGlvbnMgYW5kIGRpdmlzaW9ucyBhcmVuJ3Qgc3VwcG9ydGVkLlxuICAgKlxuICAgKiBWYWxpZCBleGFtcGxlcyBhcmU6XG4gICAqIGBgYFxuICAgKiAxMFxuICAgKiAnMTAlJ1xuICAgKiAnMTAsIDEwJ1xuICAgKiAnMTAlLCAxMCdcbiAgICogJzEwICsgMTAlJ1xuICAgKiAnMTAgLSA1dmggKyAzJSdcbiAgICogJy0xMHB4ICsgNXZoLCA1cHggLSA2JSdcbiAgICogYGBgXG4gICAqID4gKipOQioqOiBJZiB5b3UgZGVzaXJlIHRvIGFwcGx5IG9mZnNldHMgdG8geW91ciBwb3BwZXJzIGluIGEgd2F5IHRoYXQgbWF5IG1ha2UgdGhlbSBvdmVybGFwXG4gICAqID4gd2l0aCB0aGVpciByZWZlcmVuY2UgZWxlbWVudCwgdW5mb3J0dW5hdGVseSwgeW91IHdpbGwgaGF2ZSB0byBkaXNhYmxlIHRoZSBgZmxpcGAgbW9kaWZpZXIuXG4gICAqID4gWW91IGNhbiByZWFkIG1vcmUgb24gdGhpcyBhdCB0aGlzIFtpc3N1ZV0oaHR0cHM6Ly9naXRodWIuY29tL0ZlelZyYXN0YS9wb3BwZXIuanMvaXNzdWVzLzM3MykuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBvZmZzZXQ6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9MjAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiAyMDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBvZmZzZXQsXG4gICAgLyoqIEBwcm9wIHtOdW1iZXJ8U3RyaW5nfSBvZmZzZXQ9MFxuICAgICAqIFRoZSBvZmZzZXQgdmFsdWUgYXMgZGVzY3JpYmVkIGluIHRoZSBtb2RpZmllciBkZXNjcmlwdGlvblxuICAgICAqL1xuICAgIG9mZnNldDogMFxuICB9LFxuXG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIHByZXZlbnQgdGhlIHBvcHBlciBmcm9tIGJlaW5nIHBvc2l0aW9uZWQgb3V0c2lkZSB0aGUgYm91bmRhcnkuXG4gICAqXG4gICAqIEEgc2NlbmFyaW8gZXhpc3RzIHdoZXJlIHRoZSByZWZlcmVuY2UgaXRzZWxmIGlzIG5vdCB3aXRoaW4gdGhlIGJvdW5kYXJpZXMuPGJyIC8+XG4gICAqIFdlIGNhbiBzYXkgaXQgaGFzIFwiZXNjYXBlZCB0aGUgYm91bmRhcmllc1wiIOKAlCBvciBqdXN0IFwiZXNjYXBlZFwiLjxiciAvPlxuICAgKiBJbiB0aGlzIGNhc2Ugd2UgbmVlZCB0byBkZWNpZGUgd2hldGhlciB0aGUgcG9wcGVyIHNob3VsZCBlaXRoZXI6XG4gICAqXG4gICAqIC0gZGV0YWNoIGZyb20gdGhlIHJlZmVyZW5jZSBhbmQgcmVtYWluIFwidHJhcHBlZFwiIGluIHRoZSBib3VuZGFyaWVzLCBvclxuICAgKiAtIGlmIGl0IHNob3VsZCBpZ25vcmUgdGhlIGJvdW5kYXJ5IGFuZCBcImVzY2FwZSB3aXRoIGl0cyByZWZlcmVuY2VcIlxuICAgKlxuICAgKiBXaGVuIGBlc2NhcGVXaXRoUmVmZXJlbmNlYCBpcyBzZXQgdG9gdHJ1ZWAgYW5kIHJlZmVyZW5jZSBpcyBjb21wbGV0ZWx5XG4gICAqIG91dHNpZGUgaXRzIGJvdW5kYXJpZXMsIHRoZSBwb3BwZXIgd2lsbCBvdmVyZmxvdyAob3IgY29tcGxldGVseSBsZWF2ZSlcbiAgICogdGhlIGJvdW5kYXJpZXMgaW4gb3JkZXIgdG8gcmVtYWluIGF0dGFjaGVkIHRvIHRoZSBlZGdlIG9mIHRoZSByZWZlcmVuY2UuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBwcmV2ZW50T3ZlcmZsb3c6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9MzAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiAzMDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBwcmV2ZW50T3ZlcmZsb3csXG4gICAgLyoqXG4gICAgICogQHByb3Age0FycmF5fSBbcHJpb3JpdHk9WydsZWZ0JywncmlnaHQnLCd0b3AnLCdib3R0b20nXV1cbiAgICAgKiBQb3BwZXIgd2lsbCB0cnkgdG8gcHJldmVudCBvdmVyZmxvdyBmb2xsb3dpbmcgdGhlc2UgcHJpb3JpdGllcyBieSBkZWZhdWx0LFxuICAgICAqIHRoZW4sIGl0IGNvdWxkIG92ZXJmbG93IG9uIHRoZSBsZWZ0IGFuZCBvbiB0b3Agb2YgdGhlIGBib3VuZGFyaWVzRWxlbWVudGBcbiAgICAgKi9cbiAgICBwcmlvcml0eTogWydsZWZ0JywgJ3JpZ2h0JywgJ3RvcCcsICdib3R0b20nXSxcbiAgICAvKipcbiAgICAgKiBAcHJvcCB7bnVtYmVyfSBwYWRkaW5nPTVcbiAgICAgKiBBbW91bnQgb2YgcGl4ZWwgdXNlZCB0byBkZWZpbmUgYSBtaW5pbXVtIGRpc3RhbmNlIGJldHdlZW4gdGhlIGJvdW5kYXJpZXNcbiAgICAgKiBhbmQgdGhlIHBvcHBlci4gVGhpcyBtYWtlcyBzdXJlIHRoZSBwb3BwZXIgYWx3YXlzIGhhcyBhIGxpdHRsZSBwYWRkaW5nXG4gICAgICogYmV0d2VlbiB0aGUgZWRnZXMgb2YgaXRzIGNvbnRhaW5lclxuICAgICAqL1xuICAgIHBhZGRpbmc6IDUsXG4gICAgLyoqXG4gICAgICogQHByb3Age1N0cmluZ3xIVE1MRWxlbWVudH0gYm91bmRhcmllc0VsZW1lbnQ9J3Njcm9sbFBhcmVudCdcbiAgICAgKiBCb3VuZGFyaWVzIHVzZWQgYnkgdGhlIG1vZGlmaWVyLiBDYW4gYmUgYHNjcm9sbFBhcmVudGAsIGB3aW5kb3dgLFxuICAgICAqIGB2aWV3cG9ydGAgb3IgYW55IERPTSBlbGVtZW50LlxuICAgICAqL1xuICAgIGJvdW5kYXJpZXNFbGVtZW50OiAnc2Nyb2xsUGFyZW50J1xuICB9LFxuXG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIG1ha2Ugc3VyZSB0aGUgcmVmZXJlbmNlIGFuZCBpdHMgcG9wcGVyIHN0YXkgbmVhciBlYWNoIG90aGVyXG4gICAqIHdpdGhvdXQgbGVhdmluZyBhbnkgZ2FwIGJldHdlZW4gdGhlIHR3by4gRXNwZWNpYWxseSB1c2VmdWwgd2hlbiB0aGUgYXJyb3cgaXNcbiAgICogZW5hYmxlZCBhbmQgeW91IHdhbnQgdG8gZW5zdXJlIHRoYXQgaXQgcG9pbnRzIHRvIGl0cyByZWZlcmVuY2UgZWxlbWVudC5cbiAgICogSXQgY2FyZXMgb25seSBhYm91dCB0aGUgZmlyc3QgYXhpcy4gWW91IGNhbiBzdGlsbCBoYXZlIHBvcHBlcnMgd2l0aCBtYXJnaW5cbiAgICogYmV0d2VlbiB0aGUgcG9wcGVyIGFuZCBpdHMgcmVmZXJlbmNlIGVsZW1lbnQuXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBrZWVwVG9nZXRoZXI6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9NDAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA0MDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBrZWVwVG9nZXRoZXJcbiAgfSxcblxuICAvKipcbiAgICogVGhpcyBtb2RpZmllciBpcyB1c2VkIHRvIG1vdmUgdGhlIGBhcnJvd0VsZW1lbnRgIG9mIHRoZSBwb3BwZXIgdG8gbWFrZVxuICAgKiBzdXJlIGl0IGlzIHBvc2l0aW9uZWQgYmV0d2VlbiB0aGUgcmVmZXJlbmNlIGVsZW1lbnQgYW5kIGl0cyBwb3BwZXIgZWxlbWVudC5cbiAgICogSXQgd2lsbCByZWFkIHRoZSBvdXRlciBzaXplIG9mIHRoZSBgYXJyb3dFbGVtZW50YCBub2RlIHRvIGRldGVjdCBob3cgbWFueVxuICAgKiBwaXhlbHMgb2YgY29uanVuY3Rpb24gYXJlIG5lZWRlZC5cbiAgICpcbiAgICogSXQgaGFzIG5vIGVmZmVjdCBpZiBubyBgYXJyb3dFbGVtZW50YCBpcyBwcm92aWRlZC5cbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIGFycm93OiB7XG4gICAgLyoqIEBwcm9wIHtudW1iZXJ9IG9yZGVyPTUwMCAtIEluZGV4IHVzZWQgdG8gZGVmaW5lIHRoZSBvcmRlciBvZiBleGVjdXRpb24gKi9cbiAgICBvcmRlcjogNTAwLFxuICAgIC8qKiBAcHJvcCB7Qm9vbGVhbn0gZW5hYmxlZD10cnVlIC0gV2hldGhlciB0aGUgbW9kaWZpZXIgaXMgZW5hYmxlZCBvciBub3QgKi9cbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIC8qKiBAcHJvcCB7TW9kaWZpZXJGbn0gKi9cbiAgICBmbjogYXJyb3csXG4gICAgLyoqIEBwcm9wIHtTdHJpbmd8SFRNTEVsZW1lbnR9IGVsZW1lbnQ9J1t4LWFycm93XScgLSBTZWxlY3RvciBvciBub2RlIHVzZWQgYXMgYXJyb3cgKi9cbiAgICBlbGVtZW50OiAnW3gtYXJyb3ddJ1xuICB9LFxuXG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIGZsaXAgdGhlIHBvcHBlcidzIHBsYWNlbWVudCB3aGVuIGl0IHN0YXJ0cyB0byBvdmVybGFwIGl0c1xuICAgKiByZWZlcmVuY2UgZWxlbWVudC5cbiAgICpcbiAgICogUmVxdWlyZXMgdGhlIGBwcmV2ZW50T3ZlcmZsb3dgIG1vZGlmaWVyIGJlZm9yZSBpdCBpbiBvcmRlciB0byB3b3JrLlxuICAgKlxuICAgKiAqKk5PVEU6KiogdGhpcyBtb2RpZmllciB3aWxsIGludGVycnVwdCB0aGUgY3VycmVudCB1cGRhdGUgY3ljbGUgYW5kIHdpbGxcbiAgICogcmVzdGFydCBpdCBpZiBpdCBkZXRlY3RzIHRoZSBuZWVkIHRvIGZsaXAgdGhlIHBsYWNlbWVudC5cbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIGZsaXA6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9NjAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA2MDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBmbGlwLFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtTdHJpbmd8QXJyYXl9IGJlaGF2aW9yPSdmbGlwJ1xuICAgICAqIFRoZSBiZWhhdmlvciB1c2VkIHRvIGNoYW5nZSB0aGUgcG9wcGVyJ3MgcGxhY2VtZW50LiBJdCBjYW4gYmUgb25lIG9mXG4gICAgICogYGZsaXBgLCBgY2xvY2t3aXNlYCwgYGNvdW50ZXJjbG9ja3dpc2VgIG9yIGFuIGFycmF5IHdpdGggYSBsaXN0IG9mIHZhbGlkXG4gICAgICogcGxhY2VtZW50cyAod2l0aCBvcHRpb25hbCB2YXJpYXRpb25zKVxuICAgICAqL1xuICAgIGJlaGF2aW9yOiAnZmxpcCcsXG4gICAgLyoqXG4gICAgICogQHByb3Age251bWJlcn0gcGFkZGluZz01XG4gICAgICogVGhlIHBvcHBlciB3aWxsIGZsaXAgaWYgaXQgaGl0cyB0aGUgZWRnZXMgb2YgdGhlIGBib3VuZGFyaWVzRWxlbWVudGBcbiAgICAgKi9cbiAgICBwYWRkaW5nOiA1LFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtTdHJpbmd8SFRNTEVsZW1lbnR9IGJvdW5kYXJpZXNFbGVtZW50PSd2aWV3cG9ydCdcbiAgICAgKiBUaGUgZWxlbWVudCB3aGljaCB3aWxsIGRlZmluZSB0aGUgYm91bmRhcmllcyBvZiB0aGUgcG9wcGVyIHBvc2l0aW9uLlxuICAgICAqIFRoZSBwb3BwZXIgd2lsbCBuZXZlciBiZSBwbGFjZWQgb3V0c2lkZSBvZiB0aGUgZGVmaW5lZCBib3VuZGFyaWVzXG4gICAgICogKGV4Y2VwdCBpZiBga2VlcFRvZ2V0aGVyYCBpcyBlbmFibGVkKVxuICAgICAqL1xuICAgIGJvdW5kYXJpZXNFbGVtZW50OiAndmlld3BvcnQnLFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtCb29sZWFufSBmbGlwVmFyaWF0aW9ucz1mYWxzZVxuICAgICAqIFRoZSBwb3BwZXIgd2lsbCBzd2l0Y2ggcGxhY2VtZW50IHZhcmlhdGlvbiBiZXR3ZWVuIGAtc3RhcnRgIGFuZCBgLWVuZGAgd2hlblxuICAgICAqIHRoZSByZWZlcmVuY2UgZWxlbWVudCBvdmVybGFwcyBpdHMgYm91bmRhcmllcy5cbiAgICAgKlxuICAgICAqIFRoZSBvcmlnaW5hbCBwbGFjZW1lbnQgc2hvdWxkIGhhdmUgYSBzZXQgdmFyaWF0aW9uLlxuICAgICAqL1xuICAgIGZsaXBWYXJpYXRpb25zOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAcHJvcCB7Qm9vbGVhbn0gZmxpcFZhcmlhdGlvbnNCeUNvbnRlbnQ9ZmFsc2VcbiAgICAgKiBUaGUgcG9wcGVyIHdpbGwgc3dpdGNoIHBsYWNlbWVudCB2YXJpYXRpb24gYmV0d2VlbiBgLXN0YXJ0YCBhbmQgYC1lbmRgIHdoZW5cbiAgICAgKiB0aGUgcG9wcGVyIGVsZW1lbnQgb3ZlcmxhcHMgaXRzIHJlZmVyZW5jZSBib3VuZGFyaWVzLlxuICAgICAqXG4gICAgICogVGhlIG9yaWdpbmFsIHBsYWNlbWVudCBzaG91bGQgaGF2ZSBhIHNldCB2YXJpYXRpb24uXG4gICAgICovXG4gICAgZmxpcFZhcmlhdGlvbnNCeUNvbnRlbnQ6IGZhbHNlXG4gIH0sXG5cbiAgLyoqXG4gICAqIE1vZGlmaWVyIHVzZWQgdG8gbWFrZSB0aGUgcG9wcGVyIGZsb3cgdG93YXJkIHRoZSBpbm5lciBvZiB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gICAqIEJ5IGRlZmF1bHQsIHdoZW4gdGhpcyBtb2RpZmllciBpcyBkaXNhYmxlZCwgdGhlIHBvcHBlciB3aWxsIGJlIHBsYWNlZCBvdXRzaWRlXG4gICAqIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIGlubmVyOiB7XG4gICAgLyoqIEBwcm9wIHtudW1iZXJ9IG9yZGVyPTcwMCAtIEluZGV4IHVzZWQgdG8gZGVmaW5lIHRoZSBvcmRlciBvZiBleGVjdXRpb24gKi9cbiAgICBvcmRlcjogNzAwLFxuICAgIC8qKiBAcHJvcCB7Qm9vbGVhbn0gZW5hYmxlZD1mYWxzZSAtIFdoZXRoZXIgdGhlIG1vZGlmaWVyIGlzIGVuYWJsZWQgb3Igbm90ICovXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBpbm5lclxuICB9LFxuXG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIGhpZGUgdGhlIHBvcHBlciB3aGVuIGl0cyByZWZlcmVuY2UgZWxlbWVudCBpcyBvdXRzaWRlIG9mIHRoZVxuICAgKiBwb3BwZXIgYm91bmRhcmllcy4gSXQgd2lsbCBzZXQgYSBgeC1vdXQtb2YtYm91bmRhcmllc2AgYXR0cmlidXRlIHdoaWNoIGNhblxuICAgKiBiZSB1c2VkIHRvIGhpZGUgd2l0aCBhIENTUyBzZWxlY3RvciB0aGUgcG9wcGVyIHdoZW4gaXRzIHJlZmVyZW5jZSBpc1xuICAgKiBvdXQgb2YgYm91bmRhcmllcy5cbiAgICpcbiAgICogUmVxdWlyZXMgdGhlIGBwcmV2ZW50T3ZlcmZsb3dgIG1vZGlmaWVyIGJlZm9yZSBpdCBpbiBvcmRlciB0byB3b3JrLlxuICAgKiBAbWVtYmVyb2YgbW9kaWZpZXJzXG4gICAqIEBpbm5lclxuICAgKi9cbiAgaGlkZToge1xuICAgIC8qKiBAcHJvcCB7bnVtYmVyfSBvcmRlcj04MDAgLSBJbmRleCB1c2VkIHRvIGRlZmluZSB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uICovXG4gICAgb3JkZXI6IDgwMCxcbiAgICAvKiogQHByb3Age0Jvb2xlYW59IGVuYWJsZWQ9dHJ1ZSAtIFdoZXRoZXIgdGhlIG1vZGlmaWVyIGlzIGVuYWJsZWQgb3Igbm90ICovXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAvKiogQHByb3Age01vZGlmaWVyRm59ICovXG4gICAgZm46IGhpZGVcbiAgfSxcblxuICAvKipcbiAgICogQ29tcHV0ZXMgdGhlIHN0eWxlIHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBwb3BwZXIgZWxlbWVudCB0byBnZXRzXG4gICAqIHByb3Blcmx5IHBvc2l0aW9uZWQuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGlzIG1vZGlmaWVyIHdpbGwgbm90IHRvdWNoIHRoZSBET00sIGl0IGp1c3QgcHJlcGFyZXMgdGhlIHN0eWxlc1xuICAgKiBzbyB0aGF0IGBhcHBseVN0eWxlYCBtb2RpZmllciBjYW4gYXBwbHkgaXQuIFRoaXMgc2VwYXJhdGlvbiBpcyB1c2VmdWxcbiAgICogaW4gY2FzZSB5b3UgbmVlZCB0byByZXBsYWNlIGBhcHBseVN0eWxlYCB3aXRoIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uLlxuICAgKlxuICAgKiBUaGlzIG1vZGlmaWVyIGhhcyBgODUwYCBhcyBgb3JkZXJgIHZhbHVlIHRvIG1haW50YWluIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICogd2l0aCBwcmV2aW91cyB2ZXJzaW9ucyBvZiBQb3BwZXIuanMuIEV4cGVjdCB0aGUgbW9kaWZpZXJzIG9yZGVyaW5nIG1ldGhvZFxuICAgKiB0byBjaGFuZ2UgaW4gZnV0dXJlIG1ham9yIHZlcnNpb25zIG9mIHRoZSBsaWJyYXJ5LlxuICAgKlxuICAgKiBAbWVtYmVyb2YgbW9kaWZpZXJzXG4gICAqIEBpbm5lclxuICAgKi9cbiAgY29tcHV0ZVN0eWxlOiB7XG4gICAgLyoqIEBwcm9wIHtudW1iZXJ9IG9yZGVyPTg1MCAtIEluZGV4IHVzZWQgdG8gZGVmaW5lIHRoZSBvcmRlciBvZiBleGVjdXRpb24gKi9cbiAgICBvcmRlcjogODUwLFxuICAgIC8qKiBAcHJvcCB7Qm9vbGVhbn0gZW5hYmxlZD10cnVlIC0gV2hldGhlciB0aGUgbW9kaWZpZXIgaXMgZW5hYmxlZCBvciBub3QgKi9cbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIC8qKiBAcHJvcCB7TW9kaWZpZXJGbn0gKi9cbiAgICBmbjogY29tcHV0ZVN0eWxlLFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtCb29sZWFufSBncHVBY2NlbGVyYXRpb249dHJ1ZVxuICAgICAqIElmIHRydWUsIGl0IHVzZXMgdGhlIENTUyAzRCB0cmFuc2Zvcm1hdGlvbiB0byBwb3NpdGlvbiB0aGUgcG9wcGVyLlxuICAgICAqIE90aGVyd2lzZSwgaXQgd2lsbCB1c2UgdGhlIGB0b3BgIGFuZCBgbGVmdGAgcHJvcGVydGllc1xuICAgICAqL1xuICAgIGdwdUFjY2VsZXJhdGlvbjogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBAcHJvcCB7c3RyaW5nfSBbeD0nYm90dG9tJ11cbiAgICAgKiBXaGVyZSB0byBhbmNob3IgdGhlIFggYXhpcyAoYGJvdHRvbWAgb3IgYHRvcGApLiBBS0EgWCBvZmZzZXQgb3JpZ2luLlxuICAgICAqIENoYW5nZSB0aGlzIGlmIHlvdXIgcG9wcGVyIHNob3VsZCBncm93IGluIGEgZGlyZWN0aW9uIGRpZmZlcmVudCBmcm9tIGBib3R0b21gXG4gICAgICovXG4gICAgeDogJ2JvdHRvbScsXG4gICAgLyoqXG4gICAgICogQHByb3Age3N0cmluZ30gW3g9J2xlZnQnXVxuICAgICAqIFdoZXJlIHRvIGFuY2hvciB0aGUgWSBheGlzIChgbGVmdGAgb3IgYHJpZ2h0YCkuIEFLQSBZIG9mZnNldCBvcmlnaW4uXG4gICAgICogQ2hhbmdlIHRoaXMgaWYgeW91ciBwb3BwZXIgc2hvdWxkIGdyb3cgaW4gYSBkaXJlY3Rpb24gZGlmZmVyZW50IGZyb20gYHJpZ2h0YFxuICAgICAqL1xuICAgIHk6ICdyaWdodCdcbiAgfSxcblxuICAvKipcbiAgICogQXBwbGllcyB0aGUgY29tcHV0ZWQgc3R5bGVzIHRvIHRoZSBwb3BwZXIgZWxlbWVudC5cbiAgICpcbiAgICogQWxsIHRoZSBET00gbWFuaXB1bGF0aW9ucyBhcmUgbGltaXRlZCB0byB0aGlzIG1vZGlmaWVyLiBUaGlzIGlzIHVzZWZ1bCBpbiBjYXNlXG4gICAqIHlvdSB3YW50IHRvIGludGVncmF0ZSBQb3BwZXIuanMgaW5zaWRlIGEgZnJhbWV3b3JrIG9yIHZpZXcgbGlicmFyeSBhbmQgeW91XG4gICAqIHdhbnQgdG8gZGVsZWdhdGUgYWxsIHRoZSBET00gbWFuaXB1bGF0aW9ucyB0byBpdC5cbiAgICpcbiAgICogTm90ZSB0aGF0IGlmIHlvdSBkaXNhYmxlIHRoaXMgbW9kaWZpZXIsIHlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcG9wcGVyIGVsZW1lbnRcbiAgICogaGFzIGl0cyBwb3NpdGlvbiBzZXQgdG8gYGFic29sdXRlYCBiZWZvcmUgUG9wcGVyLmpzIGNhbiBkbyBpdHMgd29yayFcbiAgICpcbiAgICogSnVzdCBkaXNhYmxlIHRoaXMgbW9kaWZpZXIgYW5kIGRlZmluZSB5b3VyIG93biB0byBhY2hpZXZlIHRoZSBkZXNpcmVkIGVmZmVjdC5cbiAgICpcbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIGFwcGx5U3R5bGU6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9OTAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA5MDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBhcHBseVN0eWxlLFxuICAgIC8qKiBAcHJvcCB7RnVuY3Rpb259ICovXG4gICAgb25Mb2FkOiBhcHBseVN0eWxlT25Mb2FkLFxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMS4xMC4wLCB0aGUgcHJvcGVydHkgbW92ZWQgdG8gYGNvbXB1dGVTdHlsZWAgbW9kaWZpZXJcbiAgICAgKiBAcHJvcCB7Qm9vbGVhbn0gZ3B1QWNjZWxlcmF0aW9uPXRydWVcbiAgICAgKiBJZiB0cnVlLCBpdCB1c2VzIHRoZSBDU1MgM0QgdHJhbnNmb3JtYXRpb24gdG8gcG9zaXRpb24gdGhlIHBvcHBlci5cbiAgICAgKiBPdGhlcndpc2UsIGl0IHdpbGwgdXNlIHRoZSBgdG9wYCBhbmQgYGxlZnRgIHByb3BlcnRpZXNcbiAgICAgKi9cbiAgICBncHVBY2NlbGVyYXRpb246IHVuZGVmaW5lZFxuICB9XG59O1xuXG4vKipcbiAqIFRoZSBgZGF0YU9iamVjdGAgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIGJ5IFBvcHBlci5qcy5cbiAqIFRoaXMgb2JqZWN0IGlzIHBhc3NlZCB0byBtb2RpZmllcnMgYW5kIHRvIHRoZSBgb25DcmVhdGVgIGFuZCBgb25VcGRhdGVgIGNhbGxiYWNrcy5cbiAqIEBuYW1lIGRhdGFPYmplY3RcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkYXRhLmluc3RhbmNlIFRoZSBQb3BwZXIuanMgaW5zdGFuY2VcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBkYXRhLnBsYWNlbWVudCBQbGFjZW1lbnQgYXBwbGllZCB0byBwb3BwZXJcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBkYXRhLm9yaWdpbmFsUGxhY2VtZW50IFBsYWNlbWVudCBvcmlnaW5hbGx5IGRlZmluZWQgb24gaW5pdFxuICogQHByb3BlcnR5IHtCb29sZWFufSBkYXRhLmZsaXBwZWQgVHJ1ZSBpZiBwb3BwZXIgaGFzIGJlZW4gZmxpcHBlZCBieSBmbGlwIG1vZGlmaWVyXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGRhdGEuaGlkZSBUcnVlIGlmIHRoZSByZWZlcmVuY2UgZWxlbWVudCBpcyBvdXQgb2YgYm91bmRhcmllcywgdXNlZnVsIHRvIGtub3cgd2hlbiB0byBoaWRlIHRoZSBwb3BwZXJcbiAqIEBwcm9wZXJ0eSB7SFRNTEVsZW1lbnR9IGRhdGEuYXJyb3dFbGVtZW50IE5vZGUgdXNlZCBhcyBhcnJvdyBieSBhcnJvdyBtb2RpZmllclxuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEuc3R5bGVzIEFueSBDU1MgcHJvcGVydHkgZGVmaW5lZCBoZXJlIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9wcGVyLiBJdCBleHBlY3RzIHRoZSBKYXZhU2NyaXB0IG5vbWVuY2xhdHVyZSAoZWcuIGBtYXJnaW5Cb3R0b21gKVxuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEuYXJyb3dTdHlsZXMgQW55IENTUyBwcm9wZXJ0eSBkZWZpbmVkIGhlcmUgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBwb3BwZXIgYXJyb3cuIEl0IGV4cGVjdHMgdGhlIEphdmFTY3JpcHQgbm9tZW5jbGF0dXJlIChlZy4gYG1hcmdpbkJvdHRvbWApXG4gKiBAcHJvcGVydHkge09iamVjdH0gZGF0YS5ib3VuZGFyaWVzIE9mZnNldHMgb2YgdGhlIHBvcHBlciBib3VuZGFyaWVzXG4gKiBAcHJvcGVydHkge09iamVjdH0gZGF0YS5vZmZzZXRzIFRoZSBtZWFzdXJlbWVudHMgb2YgcG9wcGVyLCByZWZlcmVuY2UgYW5kIGFycm93IGVsZW1lbnRzXG4gKiBAcHJvcGVydHkge09iamVjdH0gZGF0YS5vZmZzZXRzLnBvcHBlciBgdG9wYCwgYGxlZnRgLCBgd2lkdGhgLCBgaGVpZ2h0YCB2YWx1ZXNcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkYXRhLm9mZnNldHMucmVmZXJlbmNlIGB0b3BgLCBgbGVmdGAsIGB3aWR0aGAsIGBoZWlnaHRgIHZhbHVlc1xuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEub2Zmc2V0cy5hcnJvd10gYHRvcGAgYW5kIGBsZWZ0YCBvZmZzZXRzLCBvbmx5IG9uZSBvZiB0aGVtIHdpbGwgYmUgZGlmZmVyZW50IGZyb20gMFxuICovXG5cbi8qKlxuICogRGVmYXVsdCBvcHRpb25zIHByb3ZpZGVkIHRvIFBvcHBlci5qcyBjb25zdHJ1Y3Rvci48YnIgLz5cbiAqIFRoZXNlIGNhbiBiZSBvdmVycmlkZGVuIHVzaW5nIHRoZSBgb3B0aW9uc2AgYXJndW1lbnQgb2YgUG9wcGVyLmpzLjxiciAvPlxuICogVG8gb3ZlcnJpZGUgYW4gb3B0aW9uLCBzaW1wbHkgcGFzcyBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZVxuICogc3RydWN0dXJlIG9mIHRoZSBgb3B0aW9uc2Agb2JqZWN0LCBhcyB0aGUgM3JkIGFyZ3VtZW50LiBGb3IgZXhhbXBsZTpcbiAqIGBgYFxuICogbmV3IFBvcHBlcihyZWYsIHBvcCwge1xuICogICBtb2RpZmllcnM6IHtcbiAqICAgICBwcmV2ZW50T3ZlcmZsb3c6IHsgZW5hYmxlZDogZmFsc2UgfVxuICogICB9XG4gKiB9KVxuICogYGBgXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHN0YXRpY1xuICogQG1lbWJlcm9mIFBvcHBlclxuICovXG52YXIgRGVmYXVsdHMgPSB7XG4gIC8qKlxuICAgKiBQb3BwZXIncyBwbGFjZW1lbnQuXG4gICAqIEBwcm9wIHtQb3BwZXIucGxhY2VtZW50c30gcGxhY2VtZW50PSdib3R0b20nXG4gICAqL1xuICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuXG4gIC8qKlxuICAgKiBTZXQgdGhpcyB0byB0cnVlIGlmIHlvdSB3YW50IHBvcHBlciB0byBwb3NpdGlvbiBpdCBzZWxmIGluICdmaXhlZCcgbW9kZVxuICAgKiBAcHJvcCB7Qm9vbGVhbn0gcG9zaXRpb25GaXhlZD1mYWxzZVxuICAgKi9cbiAgcG9zaXRpb25GaXhlZDogZmFsc2UsXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgZXZlbnRzIChyZXNpemUsIHNjcm9sbCkgYXJlIGluaXRpYWxseSBlbmFibGVkLlxuICAgKiBAcHJvcCB7Qm9vbGVhbn0gZXZlbnRzRW5hYmxlZD10cnVlXG4gICAqL1xuICBldmVudHNFbmFibGVkOiB0cnVlLFxuXG4gIC8qKlxuICAgKiBTZXQgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0byBhdXRvbWF0aWNhbGx5IHJlbW92ZSB0aGUgcG9wcGVyIHdoZW5cbiAgICogeW91IGNhbGwgdGhlIGBkZXN0cm95YCBtZXRob2QuXG4gICAqIEBwcm9wIHtCb29sZWFufSByZW1vdmVPbkRlc3Ryb3k9ZmFsc2VcbiAgICovXG4gIHJlbW92ZU9uRGVzdHJveTogZmFsc2UsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGNhbGxlZCB3aGVuIHRoZSBwb3BwZXIgaXMgY3JlYXRlZC48YnIgLz5cbiAgICogQnkgZGVmYXVsdCwgaXQgaXMgc2V0IHRvIG5vLW9wLjxiciAvPlxuICAgKiBBY2Nlc3MgUG9wcGVyLmpzIGluc3RhbmNlIHdpdGggYGRhdGEuaW5zdGFuY2VgLlxuICAgKiBAcHJvcCB7b25DcmVhdGV9XG4gICAqL1xuICBvbkNyZWF0ZTogZnVuY3Rpb24gb25DcmVhdGUoKSB7fSxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgY2FsbGVkIHdoZW4gdGhlIHBvcHBlciBpcyB1cGRhdGVkLiBUaGlzIGNhbGxiYWNrIGlzIG5vdCBjYWxsZWRcbiAgICogb24gdGhlIGluaXRpYWxpemF0aW9uL2NyZWF0aW9uIG9mIHRoZSBwb3BwZXIsIGJ1dCBvbmx5IG9uIHN1YnNlcXVlbnRcbiAgICogdXBkYXRlcy48YnIgLz5cbiAgICogQnkgZGVmYXVsdCwgaXQgaXMgc2V0IHRvIG5vLW9wLjxiciAvPlxuICAgKiBBY2Nlc3MgUG9wcGVyLmpzIGluc3RhbmNlIHdpdGggYGRhdGEuaW5zdGFuY2VgLlxuICAgKiBAcHJvcCB7b25VcGRhdGV9XG4gICAqL1xuICBvblVwZGF0ZTogZnVuY3Rpb24gb25VcGRhdGUoKSB7fSxcblxuICAvKipcbiAgICogTGlzdCBvZiBtb2RpZmllcnMgdXNlZCB0byBtb2RpZnkgdGhlIG9mZnNldHMgYmVmb3JlIHRoZXkgYXJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlci5cbiAgICogVGhleSBwcm92aWRlIG1vc3Qgb2YgdGhlIGZ1bmN0aW9uYWxpdGllcyBvZiBQb3BwZXIuanMuXG4gICAqIEBwcm9wIHttb2RpZmllcnN9XG4gICAqL1xuICBtb2RpZmllcnM6IG1vZGlmaWVyc1xufTtcblxuLyoqXG4gKiBAY2FsbGJhY2sgb25DcmVhdGVcbiAqIEBwYXJhbSB7ZGF0YU9iamVjdH0gZGF0YVxuICovXG5cbi8qKlxuICogQGNhbGxiYWNrIG9uVXBkYXRlXG4gKiBAcGFyYW0ge2RhdGFPYmplY3R9IGRhdGFcbiAqL1xuXG4vLyBVdGlsc1xuLy8gTWV0aG9kc1xudmFyIFBvcHBlciA9IGZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgUG9wcGVyLmpzIGluc3RhbmNlLlxuICAgKiBAY2xhc3MgUG9wcGVyXG4gICAqIEBwYXJhbSB7RWxlbWVudHxyZWZlcmVuY2VPYmplY3R9IHJlZmVyZW5jZSAtIFRoZSByZWZlcmVuY2UgZWxlbWVudCB1c2VkIHRvIHBvc2l0aW9uIHRoZSBwb3BwZXJcbiAgICogQHBhcmFtIHtFbGVtZW50fSBwb3BwZXIgLSBUaGUgSFRNTCAvIFhNTCBlbGVtZW50IHVzZWQgYXMgdGhlIHBvcHBlclxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFlvdXIgY3VzdG9tIG9wdGlvbnMgdG8gb3ZlcnJpZGUgdGhlIG9uZXMgZGVmaW5lZCBpbiBbRGVmYXVsdHNdKCNkZWZhdWx0cylcbiAgICogQHJldHVybiB7T2JqZWN0fSBpbnN0YW5jZSAtIFRoZSBnZW5lcmF0ZWQgUG9wcGVyLmpzIGluc3RhbmNlXG4gICAqL1xuICBmdW5jdGlvbiBQb3BwZXIocmVmZXJlbmNlLCBwb3BwZXIpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuICAgIGNsYXNzQ2FsbENoZWNrKHRoaXMsIFBvcHBlcik7XG5cbiAgICB0aGlzLnNjaGVkdWxlVXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHJlcXVlc3RBbmltYXRpb25GcmFtZShfdGhpcy51cGRhdGUpO1xuICAgIH07XG5cbiAgICAvLyBtYWtlIHVwZGF0ZSgpIGRlYm91bmNlZCwgc28gdGhhdCBpdCBvbmx5IHJ1bnMgYXQgbW9zdCBvbmNlLXBlci10aWNrXG4gICAgdGhpcy51cGRhdGUgPSBkZWJvdW5jZSh0aGlzLnVwZGF0ZS5iaW5kKHRoaXMpKTtcblxuICAgIC8vIHdpdGgge30gd2UgY3JlYXRlIGEgbmV3IG9iamVjdCB3aXRoIHRoZSBvcHRpb25zIGluc2lkZSBpdFxuICAgIHRoaXMub3B0aW9ucyA9IF9leHRlbmRzJDEoe30sIFBvcHBlci5EZWZhdWx0cywgb3B0aW9ucyk7XG5cbiAgICAvLyBpbml0IHN0YXRlXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGlzRGVzdHJveWVkOiBmYWxzZSxcbiAgICAgIGlzQ3JlYXRlZDogZmFsc2UsXG4gICAgICBzY3JvbGxQYXJlbnRzOiBbXVxuICAgIH07XG5cbiAgICAvLyBnZXQgcmVmZXJlbmNlIGFuZCBwb3BwZXIgZWxlbWVudHMgKGFsbG93IGpRdWVyeSB3cmFwcGVycylcbiAgICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZSAmJiByZWZlcmVuY2UuanF1ZXJ5ID8gcmVmZXJlbmNlWzBdIDogcmVmZXJlbmNlO1xuICAgIHRoaXMucG9wcGVyID0gcG9wcGVyICYmIHBvcHBlci5qcXVlcnkgPyBwb3BwZXJbMF0gOiBwb3BwZXI7XG5cbiAgICAvLyBEZWVwIG1lcmdlIG1vZGlmaWVycyBvcHRpb25zXG4gICAgdGhpcy5vcHRpb25zLm1vZGlmaWVycyA9IHt9O1xuICAgIE9iamVjdC5rZXlzKF9leHRlbmRzJDEoe30sIFBvcHBlci5EZWZhdWx0cy5tb2RpZmllcnMsIG9wdGlvbnMubW9kaWZpZXJzKSkuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgX3RoaXMub3B0aW9ucy5tb2RpZmllcnNbbmFtZV0gPSBfZXh0ZW5kcyQxKHt9LCBQb3BwZXIuRGVmYXVsdHMubW9kaWZpZXJzW25hbWVdIHx8IHt9LCBvcHRpb25zLm1vZGlmaWVycyA/IG9wdGlvbnMubW9kaWZpZXJzW25hbWVdIDoge30pO1xuICAgIH0pO1xuXG4gICAgLy8gUmVmYWN0b3JpbmcgbW9kaWZpZXJzJyBsaXN0IChPYmplY3QgPT4gQXJyYXkpXG4gICAgdGhpcy5tb2RpZmllcnMgPSBPYmplY3Qua2V5cyh0aGlzLm9wdGlvbnMubW9kaWZpZXJzKS5tYXAoZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHJldHVybiBfZXh0ZW5kcyQxKHtcbiAgICAgICAgbmFtZTogbmFtZVxuICAgICAgfSwgX3RoaXMub3B0aW9ucy5tb2RpZmllcnNbbmFtZV0pO1xuICAgIH0pXG4gICAgLy8gc29ydCB0aGUgbW9kaWZpZXJzIGJ5IG9yZGVyXG4gICAgLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBhLm9yZGVyIC0gYi5vcmRlcjtcbiAgICB9KTtcblxuICAgIC8vIG1vZGlmaWVycyBoYXZlIHRoZSBhYmlsaXR5IHRvIGV4ZWN1dGUgYXJiaXRyYXJ5IGNvZGUgd2hlbiBQb3BwZXIuanMgZ2V0IGluaXRlZFxuICAgIC8vIHN1Y2ggY29kZSBpcyBleGVjdXRlZCBpbiB0aGUgc2FtZSBvcmRlciBvZiBpdHMgbW9kaWZpZXJcbiAgICAvLyB0aGV5IGNvdWxkIGFkZCBuZXcgcHJvcGVydGllcyB0byB0aGVpciBvcHRpb25zIGNvbmZpZ3VyYXRpb25cbiAgICAvLyBCRSBBV0FSRTogZG9uJ3QgYWRkIG9wdGlvbnMgdG8gYG9wdGlvbnMubW9kaWZpZXJzLm5hbWVgIGJ1dCB0byBgbW9kaWZpZXJPcHRpb25zYCFcbiAgICB0aGlzLm1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllck9wdGlvbnMpIHtcbiAgICAgIGlmIChtb2RpZmllck9wdGlvbnMuZW5hYmxlZCAmJiBpc0Z1bmN0aW9uJDEobW9kaWZpZXJPcHRpb25zLm9uTG9hZCkpIHtcbiAgICAgICAgbW9kaWZpZXJPcHRpb25zLm9uTG9hZChfdGhpcy5yZWZlcmVuY2UsIF90aGlzLnBvcHBlciwgX3RoaXMub3B0aW9ucywgbW9kaWZpZXJPcHRpb25zLCBfdGhpcy5zdGF0ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBmaXJlIHRoZSBmaXJzdCB1cGRhdGUgdG8gcG9zaXRpb24gdGhlIHBvcHBlciBpbiB0aGUgcmlnaHQgcGxhY2VcbiAgICB0aGlzLnVwZGF0ZSgpO1xuXG4gICAgdmFyIGV2ZW50c0VuYWJsZWQgPSB0aGlzLm9wdGlvbnMuZXZlbnRzRW5hYmxlZDtcbiAgICBpZiAoZXZlbnRzRW5hYmxlZCkge1xuICAgICAgLy8gc2V0dXAgZXZlbnQgbGlzdGVuZXJzLCB0aGV5IHdpbGwgdGFrZSBjYXJlIG9mIHVwZGF0ZSB0aGUgcG9zaXRpb24gaW4gc3BlY2lmaWMgc2l0dWF0aW9uc1xuICAgICAgdGhpcy5lbmFibGVFdmVudExpc3RlbmVycygpO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUuZXZlbnRzRW5hYmxlZCA9IGV2ZW50c0VuYWJsZWQ7XG4gIH1cblxuICAvLyBXZSBjYW4ndCB1c2UgY2xhc3MgcHJvcGVydGllcyBiZWNhdXNlIHRoZXkgZG9uJ3QgZ2V0IGxpc3RlZCBpbiB0aGVcbiAgLy8gY2xhc3MgcHJvdG90eXBlIGFuZCBicmVhayBzdHVmZiBsaWtlIFNpbm9uIHN0dWJzXG5cblxuICBjcmVhdGVDbGFzcyhQb3BwZXIsIFt7XG4gICAga2V5OiAndXBkYXRlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlJCQxKCkge1xuICAgICAgcmV0dXJuIHVwZGF0ZS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2Rlc3Ryb3knLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBkZXN0cm95JCQxKCkge1xuICAgICAgcmV0dXJuIGRlc3Ryb3kuY2FsbCh0aGlzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdlbmFibGVFdmVudExpc3RlbmVycycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGVuYWJsZUV2ZW50TGlzdGVuZXJzJCQxKCkge1xuICAgICAgcmV0dXJuIGVuYWJsZUV2ZW50TGlzdGVuZXJzLmNhbGwodGhpcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZGlzYWJsZUV2ZW50TGlzdGVuZXJzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZGlzYWJsZUV2ZW50TGlzdGVuZXJzJCQxKCkge1xuICAgICAgcmV0dXJuIGRpc2FibGVFdmVudExpc3RlbmVycy5jYWxsKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNjaGVkdWxlcyBhbiB1cGRhdGUuIEl0IHdpbGwgcnVuIG9uIHRoZSBuZXh0IFVJIHVwZGF0ZSBhdmFpbGFibGUuXG4gICAgICogQG1ldGhvZCBzY2hlZHVsZVVwZGF0ZVxuICAgICAqIEBtZW1iZXJvZiBQb3BwZXJcbiAgICAgKi9cblxuXG4gICAgLyoqXG4gICAgICogQ29sbGVjdGlvbiBvZiB1dGlsaXRpZXMgdXNlZnVsIHdoZW4gd3JpdGluZyBjdXN0b20gbW9kaWZpZXJzLlxuICAgICAqIFN0YXJ0aW5nIGZyb20gdmVyc2lvbiAxLjcsIHRoaXMgbWV0aG9kIGlzIGF2YWlsYWJsZSBvbmx5IGlmIHlvdVxuICAgICAqIGluY2x1ZGUgYHBvcHBlci11dGlscy5qc2AgYmVmb3JlIGBwb3BwZXIuanNgLlxuICAgICAqXG4gICAgICogKipERVBSRUNBVElPTioqOiBUaGlzIHdheSB0byBhY2Nlc3MgUG9wcGVyVXRpbHMgaXMgZGVwcmVjYXRlZFxuICAgICAqIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdjIhIFVzZSB0aGUgUG9wcGVyVXRpbHMgbW9kdWxlIGRpcmVjdGx5IGluc3RlYWQuXG4gICAgICogRHVlIHRvIHRoZSBoaWdoIGluc3RhYmlsaXR5IG9mIHRoZSBtZXRob2RzIGNvbnRhaW5lZCBpbiBVdGlscywgd2UgY2FuJ3RcbiAgICAgKiBndWFyYW50ZWUgdGhlbSB0byBmb2xsb3cgc2VtdmVyLiBVc2UgdGhlbSBhdCB5b3VyIG93biByaXNrIVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAxLjhcbiAgICAgKiBAbWVtYmVyIFV0aWxzXG4gICAgICogQG1lbWJlcm9mIFBvcHBlclxuICAgICAqL1xuXG4gIH1dKTtcbiAgcmV0dXJuIFBvcHBlcjtcbn0oKTtcblxuLyoqXG4gKiBUaGUgYHJlZmVyZW5jZU9iamVjdGAgaXMgYW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIGNvbXBhdGlibGUgd2l0aCBQb3BwZXIuanNcbiAqIGFuZCBsZXRzIHlvdSB1c2UgaXQgYXMgcmVwbGFjZW1lbnQgb2YgYSByZWFsIERPTSBub2RlLjxiciAvPlxuICogWW91IGNhbiB1c2UgdGhpcyBtZXRob2QgdG8gcG9zaXRpb24gYSBwb3BwZXIgcmVsYXRpdmVseSB0byBhIHNldCBvZiBjb29yZGluYXRlc1xuICogaW4gY2FzZSB5b3UgZG9uJ3QgaGF2ZSBhIERPTSBub2RlIHRvIHVzZSBhcyByZWZlcmVuY2UuXG4gKlxuICogYGBgXG4gKiBuZXcgUG9wcGVyKHJlZmVyZW5jZU9iamVjdCwgcG9wcGVyTm9kZSk7XG4gKiBgYGBcbiAqXG4gKiBOQjogVGhpcyBmZWF0dXJlIGlzbid0IHN1cHBvcnRlZCBpbiBJbnRlcm5ldCBFeHBsb3JlciAxMC5cbiAqIEBuYW1lIHJlZmVyZW5jZU9iamVjdFxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gZGF0YS5nZXRCb3VuZGluZ0NsaWVudFJlY3RcbiAqIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgc2V0IG9mIGNvb3JkaW5hdGVzIGNvbXBhdGlibGUgd2l0aCB0aGUgbmF0aXZlIGBnZXRCb3VuZGluZ0NsaWVudFJlY3RgIG1ldGhvZC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBkYXRhLmNsaWVudFdpZHRoXG4gKiBBbiBFUzYgZ2V0dGVyIHRoYXQgd2lsbCByZXR1cm4gdGhlIHdpZHRoIG9mIHRoZSB2aXJ0dWFsIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGRhdGEuY2xpZW50SGVpZ2h0XG4gKiBBbiBFUzYgZ2V0dGVyIHRoYXQgd2lsbCByZXR1cm4gdGhlIGhlaWdodCBvZiB0aGUgdmlydHVhbCByZWZlcmVuY2UgZWxlbWVudC5cbiAqL1xuXG5cblBvcHBlci5VdGlscyA9ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbCkuUG9wcGVyVXRpbHM7XG5Qb3BwZXIucGxhY2VtZW50cyA9IHBsYWNlbWVudHM7XG5Qb3BwZXIuRGVmYXVsdHMgPSBEZWZhdWx0cztcblxudmFyIGtleSA9ICdfX2dsb2JhbF91bmlxdWVfaWRfXyc7XG5cbnZhciBndWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGNvbW1vbmpzR2xvYmFsW2tleV0gPSAoY29tbW9uanNHbG9iYWxba2V5XSB8fCAwKSArIDE7XG59O1xuXG4vKipcbiAqIENvcHlyaWdodCAoYykgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbi8qKlxuICogU2ltaWxhciB0byBpbnZhcmlhbnQgYnV0IG9ubHkgbG9ncyBhIHdhcm5pbmcgaWYgdGhlIGNvbmRpdGlvbiBpcyBub3QgbWV0LlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBsb2cgaXNzdWVzIGluIGRldmVsb3BtZW50IGVudmlyb25tZW50cyBpbiBjcml0aWNhbFxuICogcGF0aHMuIFJlbW92aW5nIHRoZSBsb2dnaW5nIGNvZGUgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIHdpbGwga2VlcCB0aGVcbiAqIHNhbWUgbG9naWMgYW5kIGZvbGxvdyB0aGUgc2FtZSBjb2RlIHBhdGhzLlxuICovXG5cbnZhciBfX0RFVl9fID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJztcblxudmFyIHdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAoX19ERVZfXykge1xuICB2YXIgcHJpbnRXYXJuaW5nJDIgPSBmdW5jdGlvbiBwcmludFdhcm5pbmcoZm9ybWF0LCBhcmdzKSB7XG4gICAgdmFyIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgYXJncyA9IG5ldyBBcnJheShsZW4gPiAxID8gbGVuIC0gMSA6IDApO1xuICAgIGZvciAodmFyIGtleSA9IDE7IGtleSA8IGxlbjsga2V5KyspIHtcbiAgICAgIGFyZ3Nba2V5IC0gMV0gPSBhcmd1bWVudHNba2V5XTtcbiAgICB9XG4gICAgdmFyIGFyZ0luZGV4ID0gMDtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICtcbiAgICAgIGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107XG4gICAgICB9KTtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9IGNhdGNoICh4KSB7fVxuICB9O1xuXG4gIHdhcm5pbmcgPSBmdW5jdGlvbihjb25kaXRpb24sIGZvcm1hdCwgYXJncykge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGFyZ3MgPSBuZXcgQXJyYXkobGVuID4gMiA/IGxlbiAtIDIgOiAwKTtcbiAgICBmb3IgKHZhciBrZXkgPSAyOyBrZXkgPCBsZW47IGtleSsrKSB7XG4gICAgICBhcmdzW2tleSAtIDJdID0gYXJndW1lbnRzW2tleV07XG4gICAgfVxuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdgd2FybmluZyhjb25kaXRpb24sIGZvcm1hdCwgLi4uYXJncylgIHJlcXVpcmVzIGEgd2FybmluZyAnICtcbiAgICAgICAgICAnbWVzc2FnZSBhcmd1bWVudCdcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICBwcmludFdhcm5pbmckMi5hcHBseShudWxsLCBbZm9ybWF0XS5jb25jYXQoYXJncykpO1xuICAgIH1cbiAgfTtcbn1cblxudmFyIHdhcm5pbmdfMSA9IHdhcm5pbmc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiQzID0gY3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24gKG1vZHVsZSwgZXhwb3J0cykge1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cblxudmFyIF9yZWFjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KFJlYWN0X19kZWZhdWx0KTtcblxuXG5cbnZhciBfcHJvcFR5cGVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocHJvcFR5cGVzKTtcblxuXG5cbnZhciBfZ3VkMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoZ3VkKTtcblxuXG5cbnZhciBfd2FybmluZzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHdhcm5pbmdfMSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxudmFyIE1BWF9TSUdORURfMzFfQklUX0lOVCA9IDEwNzM3NDE4MjM7XG5cbi8vIElubGluZWQgT2JqZWN0LmlzIHBvbHlmaWxsLlxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzXG5mdW5jdGlvbiBvYmplY3RJcyh4LCB5KSB7XG4gIGlmICh4ID09PSB5KSB7XG4gICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB4ICE9PSB4ICYmIHkgIT09IHk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRXZlbnRFbWl0dGVyKHZhbHVlKSB7XG4gIHZhciBoYW5kbGVycyA9IFtdO1xuICByZXR1cm4ge1xuICAgIG9uOiBmdW5jdGlvbiBvbihoYW5kbGVyKSB7XG4gICAgICBoYW5kbGVycy5wdXNoKGhhbmRsZXIpO1xuICAgIH0sXG4gICAgb2ZmOiBmdW5jdGlvbiBvZmYoaGFuZGxlcikge1xuICAgICAgaGFuZGxlcnMgPSBoYW5kbGVycy5maWx0ZXIoZnVuY3Rpb24gKGgpIHtcbiAgICAgICAgcmV0dXJuIGggIT09IGhhbmRsZXI7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQobmV3VmFsdWUsIGNoYW5nZWRCaXRzKSB7XG4gICAgICB2YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgaGFuZGxlcnMuZm9yRWFjaChmdW5jdGlvbiAoaGFuZGxlcikge1xuICAgICAgICByZXR1cm4gaGFuZGxlcih2YWx1ZSwgY2hhbmdlZEJpdHMpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBvbmx5Q2hpbGQoY2hpbGRyZW4pIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pID8gY2hpbGRyZW5bMF0gOiBjaGlsZHJlbjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUmVhY3RDb250ZXh0KGRlZmF1bHRWYWx1ZSwgY2FsY3VsYXRlQ2hhbmdlZEJpdHMpIHtcbiAgdmFyIF9Qcm92aWRlciRjaGlsZENvbnRleCwgX0NvbnN1bWVyJGNvbnRleHRUeXBlO1xuXG4gIHZhciBjb250ZXh0UHJvcCA9ICdfX2NyZWF0ZS1yZWFjdC1jb250ZXh0LScgKyAoMCwgX2d1ZDIuZGVmYXVsdCkoKSArICdfXyc7XG5cbiAgdmFyIFByb3ZpZGVyID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgICBfaW5oZXJpdHMoUHJvdmlkZXIsIF9Db21wb25lbnQpO1xuXG4gICAgZnVuY3Rpb24gUHJvdmlkZXIoKSB7XG4gICAgICB2YXIgX3RlbXAsIF90aGlzLCBfcmV0O1xuXG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUHJvdmlkZXIpO1xuXG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3JldCA9IChfdGVtcCA9IChfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9Db21wb25lbnQuY2FsbC5hcHBseShfQ29tcG9uZW50LCBbdGhpc10uY29uY2F0KGFyZ3MpKSksIF90aGlzKSwgX3RoaXMuZW1pdHRlciA9IGNyZWF0ZUV2ZW50RW1pdHRlcihfdGhpcy5wcm9wcy52YWx1ZSksIF90ZW1wKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMsIF9yZXQpO1xuICAgIH1cblxuICAgIFByb3ZpZGVyLnByb3RvdHlwZS5nZXRDaGlsZENvbnRleHQgPSBmdW5jdGlvbiBnZXRDaGlsZENvbnRleHQoKSB7XG4gICAgICB2YXIgX3JlZjtcblxuICAgICAgcmV0dXJuIF9yZWYgPSB7fSwgX3JlZltjb250ZXh0UHJvcF0gPSB0aGlzLmVtaXR0ZXIsIF9yZWY7XG4gICAgfTtcblxuICAgIFByb3ZpZGVyLnByb3RvdHlwZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLnZhbHVlICE9PSBuZXh0UHJvcHMudmFsdWUpIHtcbiAgICAgICAgdmFyIG9sZFZhbHVlID0gdGhpcy5wcm9wcy52YWx1ZTtcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gbmV4dFByb3BzLnZhbHVlO1xuICAgICAgICB2YXIgY2hhbmdlZEJpdHMgPSB2b2lkIDA7XG5cbiAgICAgICAgaWYgKG9iamVjdElzKG9sZFZhbHVlLCBuZXdWYWx1ZSkpIHtcbiAgICAgICAgICBjaGFuZ2VkQml0cyA9IDA7IC8vIE5vIGNoYW5nZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNoYW5nZWRCaXRzID0gdHlwZW9mIGNhbGN1bGF0ZUNoYW5nZWRCaXRzID09PSAnZnVuY3Rpb24nID8gY2FsY3VsYXRlQ2hhbmdlZEJpdHMob2xkVmFsdWUsIG5ld1ZhbHVlKSA6IE1BWF9TSUdORURfMzFfQklUX0lOVDtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgKDAsIF93YXJuaW5nMi5kZWZhdWx0KSgoY2hhbmdlZEJpdHMgJiBNQVhfU0lHTkVEXzMxX0JJVF9JTlQpID09PSBjaGFuZ2VkQml0cywgJ2NhbGN1bGF0ZUNoYW5nZWRCaXRzOiBFeHBlY3RlZCB0aGUgcmV0dXJuIHZhbHVlIHRvIGJlIGEgJyArICczMS1iaXQgaW50ZWdlci4gSW5zdGVhZCByZWNlaXZlZDogJXMnLCBjaGFuZ2VkQml0cyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2hhbmdlZEJpdHMgfD0gMDtcblxuICAgICAgICAgIGlmIChjaGFuZ2VkQml0cyAhPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLnNldChuZXh0UHJvcHMudmFsdWUsIGNoYW5nZWRCaXRzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgUHJvdmlkZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICAgIH07XG5cbiAgICByZXR1cm4gUHJvdmlkZXI7XG4gIH0oUmVhY3RfX2RlZmF1bHQuQ29tcG9uZW50KTtcblxuICBQcm92aWRlci5jaGlsZENvbnRleHRUeXBlcyA9IChfUHJvdmlkZXIkY2hpbGRDb250ZXggPSB7fSwgX1Byb3ZpZGVyJGNoaWxkQ29udGV4W2NvbnRleHRQcm9wXSA9IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsIF9Qcm92aWRlciRjaGlsZENvbnRleCk7XG5cbiAgdmFyIENvbnN1bWVyID0gZnVuY3Rpb24gKF9Db21wb25lbnQyKSB7XG4gICAgX2luaGVyaXRzKENvbnN1bWVyLCBfQ29tcG9uZW50Mik7XG5cbiAgICBmdW5jdGlvbiBDb25zdW1lcigpIHtcbiAgICAgIHZhciBfdGVtcDIsIF90aGlzMiwgX3JldDI7XG5cbiAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDb25zdW1lcik7XG5cbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9yZXQyID0gKF90ZW1wMiA9IChfdGhpczIgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfQ29tcG9uZW50Mi5jYWxsLmFwcGx5KF9Db21wb25lbnQyLCBbdGhpc10uY29uY2F0KGFyZ3MpKSksIF90aGlzMiksIF90aGlzMi5zdGF0ZSA9IHtcbiAgICAgICAgdmFsdWU6IF90aGlzMi5nZXRWYWx1ZSgpXG4gICAgICB9LCBfdGhpczIub25VcGRhdGUgPSBmdW5jdGlvbiAobmV3VmFsdWUsIGNoYW5nZWRCaXRzKSB7XG4gICAgICAgIHZhciBvYnNlcnZlZEJpdHMgPSBfdGhpczIub2JzZXJ2ZWRCaXRzIHwgMDtcbiAgICAgICAgaWYgKChvYnNlcnZlZEJpdHMgJiBjaGFuZ2VkQml0cykgIT09IDApIHtcbiAgICAgICAgICBfdGhpczIuc2V0U3RhdGUoeyB2YWx1ZTogX3RoaXMyLmdldFZhbHVlKCkgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sIF90ZW1wMiksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKF90aGlzMiwgX3JldDIpO1xuICAgIH1cblxuICAgIENvbnN1bWVyLnByb3RvdHlwZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcbiAgICAgIHZhciBvYnNlcnZlZEJpdHMgPSBuZXh0UHJvcHMub2JzZXJ2ZWRCaXRzO1xuXG4gICAgICB0aGlzLm9ic2VydmVkQml0cyA9IG9ic2VydmVkQml0cyA9PT0gdW5kZWZpbmVkIHx8IG9ic2VydmVkQml0cyA9PT0gbnVsbCA/IE1BWF9TSUdORURfMzFfQklUX0lOVCAvLyBTdWJzY3JpYmUgdG8gYWxsIGNoYW5nZXMgYnkgZGVmYXVsdFxuICAgICAgOiBvYnNlcnZlZEJpdHM7XG4gICAgfTtcblxuICAgIENvbnN1bWVyLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgaWYgKHRoaXMuY29udGV4dFtjb250ZXh0UHJvcF0pIHtcbiAgICAgICAgdGhpcy5jb250ZXh0W2NvbnRleHRQcm9wXS5vbih0aGlzLm9uVXBkYXRlKTtcbiAgICAgIH1cbiAgICAgIHZhciBvYnNlcnZlZEJpdHMgPSB0aGlzLnByb3BzLm9ic2VydmVkQml0cztcblxuICAgICAgdGhpcy5vYnNlcnZlZEJpdHMgPSBvYnNlcnZlZEJpdHMgPT09IHVuZGVmaW5lZCB8fCBvYnNlcnZlZEJpdHMgPT09IG51bGwgPyBNQVhfU0lHTkVEXzMxX0JJVF9JTlQgLy8gU3Vic2NyaWJlIHRvIGFsbCBjaGFuZ2VzIGJ5IGRlZmF1bHRcbiAgICAgIDogb2JzZXJ2ZWRCaXRzO1xuICAgIH07XG5cbiAgICBDb25zdW1lci5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLmNvbnRleHRbY29udGV4dFByb3BdKSB7XG4gICAgICAgIHRoaXMuY29udGV4dFtjb250ZXh0UHJvcF0ub2ZmKHRoaXMub25VcGRhdGUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBDb25zdW1lci5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiBnZXRWYWx1ZSgpIHtcbiAgICAgIGlmICh0aGlzLmNvbnRleHRbY29udGV4dFByb3BdKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHRbY29udGV4dFByb3BdLmdldCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgQ29uc3VtZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiBvbmx5Q2hpbGQodGhpcy5wcm9wcy5jaGlsZHJlbikodGhpcy5zdGF0ZS52YWx1ZSk7XG4gICAgfTtcblxuICAgIHJldHVybiBDb25zdW1lcjtcbiAgfShSZWFjdF9fZGVmYXVsdC5Db21wb25lbnQpO1xuXG4gIENvbnN1bWVyLmNvbnRleHRUeXBlcyA9IChfQ29uc3VtZXIkY29udGV4dFR5cGUgPSB7fSwgX0NvbnN1bWVyJGNvbnRleHRUeXBlW2NvbnRleHRQcm9wXSA9IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LCBfQ29uc3VtZXIkY29udGV4dFR5cGUpO1xuXG5cbiAgcmV0dXJuIHtcbiAgICBQcm92aWRlcjogUHJvdmlkZXIsXG4gICAgQ29uc3VtZXI6IENvbnN1bWVyXG4gIH07XG59XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGNyZWF0ZVJlYWN0Q29udGV4dDtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xufSk7XG5cbnVud3JhcEV4cG9ydHMoaW1wbGVtZW50YXRpb24kMyk7XG5cbnZhciBsaWIkMSA9IGNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZ1bmN0aW9uIChtb2R1bGUsIGV4cG9ydHMpIHtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChSZWFjdF9fZGVmYXVsdCk7XG5cblxuXG52YXIgX2ltcGxlbWVudGF0aW9uMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoaW1wbGVtZW50YXRpb24kMyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVDb250ZXh0IHx8IF9pbXBsZW1lbnRhdGlvbjIuZGVmYXVsdDtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xufSk7XG5cbnZhciBjcmVhdGVDb250ZXh0ID0gdW53cmFwRXhwb3J0cyhsaWIkMSk7XG5cbnZhciBNYW5hZ2VyUmVmZXJlbmNlTm9kZUNvbnRleHQgPSBjcmVhdGVDb250ZXh0KCk7XG52YXIgTWFuYWdlclJlZmVyZW5jZU5vZGVTZXR0ZXJDb250ZXh0ID0gY3JlYXRlQ29udGV4dCgpO1xuXG52YXIgTWFuYWdlciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZSQxKE1hbmFnZXIsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIE1hbmFnZXIoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsLmFwcGx5KF9SZWFjdCRDb21wb25lbnQsIFt0aGlzXS5jb25jYXQoYXJncykpIHx8IHRoaXM7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkkMShfYXNzZXJ0VGhpc0luaXRpYWxpemVkJDEoX3RoaXMpLCBcInJlZmVyZW5jZU5vZGVcIiwgdm9pZCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eSQxKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQkMShfdGhpcyksIFwic2V0UmVmZXJlbmNlTm9kZVwiLCBmdW5jdGlvbiAobmV3UmVmZXJlbmNlTm9kZSkge1xuICAgICAgaWYgKG5ld1JlZmVyZW5jZU5vZGUgJiYgX3RoaXMucmVmZXJlbmNlTm9kZSAhPT0gbmV3UmVmZXJlbmNlTm9kZSkge1xuICAgICAgICBfdGhpcy5yZWZlcmVuY2VOb2RlID0gbmV3UmVmZXJlbmNlTm9kZTtcblxuICAgICAgICBfdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IE1hbmFnZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMucmVmZXJlbmNlTm9kZSA9IG51bGw7XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChNYW5hZ2VyUmVmZXJlbmNlTm9kZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgIHZhbHVlOiB0aGlzLnJlZmVyZW5jZU5vZGVcbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KE1hbmFnZXJSZWZlcmVuY2VOb2RlU2V0dGVyQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgdmFsdWU6IHRoaXMuc2V0UmVmZXJlbmNlTm9kZVxuICAgIH0sIHRoaXMucHJvcHMuY2hpbGRyZW4pKTtcbiAgfTtcblxuICByZXR1cm4gTWFuYWdlcjtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuLyoqXG4gKiBUYWtlcyBhbiBhcmd1bWVudCBhbmQgaWYgaXQncyBhbiBhcnJheSwgcmV0dXJucyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgYXJyYXksXG4gKiBvdGhlcndpc2UgcmV0dXJucyB0aGUgYXJndW1lbnQuIFVzZWQgZm9yIFByZWFjdCBjb21wYXRpYmlsaXR5LlxuICovXG52YXIgdW53cmFwQXJyYXkgPSBmdW5jdGlvbiB1bndyYXBBcnJheShhcmcpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYXJnKSA/IGFyZ1swXSA6IGFyZztcbn07XG4vKipcbiAqIFRha2VzIGEgbWF5YmUtdW5kZWZpbmVkIGZ1bmN0aW9uIGFuZCBhcmJpdHJhcnkgYXJncyBhbmQgaW52b2tlcyB0aGUgZnVuY3Rpb25cbiAqIG9ubHkgaWYgaXQgaXMgZGVmaW5lZC5cbiAqL1xuXG52YXIgc2FmZUludm9rZSA9IGZ1bmN0aW9uIHNhZmVJbnZva2UoZm4pIHtcbiAgaWYgKHR5cGVvZiBmbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGZuLmFwcGx5KHZvaWQgMCwgYXJncyk7XG4gIH1cbn07XG4vKipcbiAqIERvZXMgYSBzaGFsbG93IGVxdWFsaXR5IGNoZWNrIG9mIHR3byBvYmplY3RzIGJ5IGNvbXBhcmluZyB0aGUgcmVmZXJlbmNlXG4gKiBlcXVhbGl0eSBvZiBlYWNoIHZhbHVlLlxuICovXG5cbnZhciBzaGFsbG93RXF1YWwgPSBmdW5jdGlvbiBzaGFsbG93RXF1YWwob2JqQSwgb2JqQikge1xuICB2YXIgYUtleXMgPSBPYmplY3Qua2V5cyhvYmpBKTtcbiAgdmFyIGJLZXlzID0gT2JqZWN0LmtleXMob2JqQik7XG5cbiAgaWYgKGJLZXlzLmxlbmd0aCAhPT0gYUtleXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBiS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBhS2V5c1tpXTtcblxuICAgIGlmIChvYmpBW2tleV0gIT09IG9iakJba2V5XSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcbi8qKlxuICogU2V0cyBhIHJlZiB1c2luZyBlaXRoZXIgYSByZWYgY2FsbGJhY2sgb3IgYSByZWYgb2JqZWN0XG4gKi9cblxudmFyIHNldFJlZiA9IGZ1bmN0aW9uIHNldFJlZihyZWYsIG5vZGUpIHtcbiAgLy8gaWYgaXRzIGEgZnVuY3Rpb24gY2FsbCBpdFxuICBpZiAodHlwZW9mIHJlZiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIHNhZmVJbnZva2UocmVmLCBub2RlKTtcbiAgfSAvLyBvdGhlcndpc2Ugd2Ugc2hvdWxkIHRyZWF0IGl0IGFzIGEgcmVmIG9iamVjdFxuICBlbHNlIGlmIChyZWYgIT0gbnVsbCkge1xuICAgICAgcmVmLmN1cnJlbnQgPSBub2RlO1xuICAgIH1cbn07XG5cbnZhciBpbml0aWFsU3R5bGUgPSB7XG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICB0b3A6IDAsXG4gIGxlZnQ6IDAsXG4gIG9wYWNpdHk6IDAsXG4gIHBvaW50ZXJFdmVudHM6ICdub25lJ1xufTtcbnZhciBpbml0aWFsQXJyb3dTdHlsZSA9IHt9O1xudmFyIElubmVyUG9wcGVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlJDEoSW5uZXJQb3BwZXIsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIElubmVyUG9wcGVyKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9SZWFjdCRDb21wb25lbnQuY2FsbC5hcHBseShfUmVhY3QkQ29tcG9uZW50LCBbdGhpc10uY29uY2F0KGFyZ3MpKSB8fCB0aGlzO1xuXG4gICAgX2RlZmluZVByb3BlcnR5JDEoX2Fzc2VydFRoaXNJbml0aWFsaXplZCQxKF90aGlzKSwgXCJzdGF0ZVwiLCB7XG4gICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICBwbGFjZW1lbnQ6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5JDEoX2Fzc2VydFRoaXNJbml0aWFsaXplZCQxKF90aGlzKSwgXCJwb3BwZXJJbnN0YW5jZVwiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5JDEoX2Fzc2VydFRoaXNJbml0aWFsaXplZCQxKF90aGlzKSwgXCJwb3BwZXJOb2RlXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5JDEoX2Fzc2VydFRoaXNJbml0aWFsaXplZCQxKF90aGlzKSwgXCJhcnJvd05vZGVcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkkMShfYXNzZXJ0VGhpc0luaXRpYWxpemVkJDEoX3RoaXMpLCBcInNldFBvcHBlck5vZGVcIiwgZnVuY3Rpb24gKHBvcHBlck5vZGUpIHtcbiAgICAgIGlmICghcG9wcGVyTm9kZSB8fCBfdGhpcy5wb3BwZXJOb2RlID09PSBwb3BwZXJOb2RlKSByZXR1cm47XG4gICAgICBzZXRSZWYoX3RoaXMucHJvcHMuaW5uZXJSZWYsIHBvcHBlck5vZGUpO1xuICAgICAgX3RoaXMucG9wcGVyTm9kZSA9IHBvcHBlck5vZGU7XG5cbiAgICAgIF90aGlzLnVwZGF0ZVBvcHBlckluc3RhbmNlKCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkkMShfYXNzZXJ0VGhpc0luaXRpYWxpemVkJDEoX3RoaXMpLCBcInNldEFycm93Tm9kZVwiLCBmdW5jdGlvbiAoYXJyb3dOb2RlKSB7XG4gICAgICBfdGhpcy5hcnJvd05vZGUgPSBhcnJvd05vZGU7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkkMShfYXNzZXJ0VGhpc0luaXRpYWxpemVkJDEoX3RoaXMpLCBcInVwZGF0ZVN0YXRlTW9kaWZpZXJcIiwge1xuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgIG9yZGVyOiA5MDAsXG4gICAgICBmbjogZnVuY3Rpb24gZm4oZGF0YSkge1xuICAgICAgICB2YXIgcGxhY2VtZW50ID0gZGF0YS5wbGFjZW1lbnQ7XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkkMShfYXNzZXJ0VGhpc0luaXRpYWxpemVkJDEoX3RoaXMpLCBcImdldE9wdGlvbnNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGxhY2VtZW50OiBfdGhpcy5wcm9wcy5wbGFjZW1lbnQsXG4gICAgICAgIGV2ZW50c0VuYWJsZWQ6IF90aGlzLnByb3BzLmV2ZW50c0VuYWJsZWQsXG4gICAgICAgIHBvc2l0aW9uRml4ZWQ6IF90aGlzLnByb3BzLnBvc2l0aW9uRml4ZWQsXG4gICAgICAgIG1vZGlmaWVyczogX2V4dGVuZHMkMih7fSwgX3RoaXMucHJvcHMubW9kaWZpZXJzLCB7XG4gICAgICAgICAgYXJyb3c6IF9leHRlbmRzJDIoe30sIF90aGlzLnByb3BzLm1vZGlmaWVycyAmJiBfdGhpcy5wcm9wcy5tb2RpZmllcnMuYXJyb3csIHtcbiAgICAgICAgICAgIGVuYWJsZWQ6ICEhX3RoaXMuYXJyb3dOb2RlLFxuICAgICAgICAgICAgZWxlbWVudDogX3RoaXMuYXJyb3dOb2RlXG4gICAgICAgICAgfSksXG4gICAgICAgICAgYXBwbHlTdHlsZToge1xuICAgICAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgICAgICB9LFxuICAgICAgICAgIHVwZGF0ZVN0YXRlTW9kaWZpZXI6IF90aGlzLnVwZGF0ZVN0YXRlTW9kaWZpZXJcbiAgICAgICAgfSlcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkkMShfYXNzZXJ0VGhpc0luaXRpYWxpemVkJDEoX3RoaXMpLCBcImdldFBvcHBlclN0eWxlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAhX3RoaXMucG9wcGVyTm9kZSB8fCAhX3RoaXMuc3RhdGUuZGF0YSA/IGluaXRpYWxTdHlsZSA6IF9leHRlbmRzJDIoe1xuICAgICAgICBwb3NpdGlvbjogX3RoaXMuc3RhdGUuZGF0YS5vZmZzZXRzLnBvcHBlci5wb3NpdGlvblxuICAgICAgfSwgX3RoaXMuc3RhdGUuZGF0YS5zdHlsZXMpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5JDEoX2Fzc2VydFRoaXNJbml0aWFsaXplZCQxKF90aGlzKSwgXCJnZXRQb3BwZXJQbGFjZW1lbnRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuICFfdGhpcy5zdGF0ZS5kYXRhID8gdW5kZWZpbmVkIDogX3RoaXMuc3RhdGUucGxhY2VtZW50O1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5JDEoX2Fzc2VydFRoaXNJbml0aWFsaXplZCQxKF90aGlzKSwgXCJnZXRBcnJvd1N0eWxlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAhX3RoaXMuYXJyb3dOb2RlIHx8ICFfdGhpcy5zdGF0ZS5kYXRhID8gaW5pdGlhbEFycm93U3R5bGUgOiBfdGhpcy5zdGF0ZS5kYXRhLmFycm93U3R5bGVzO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5JDEoX2Fzc2VydFRoaXNJbml0aWFsaXplZCQxKF90aGlzKSwgXCJnZXRPdXRPZkJvdW5kYXJpZXNTdGF0ZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMuc3RhdGUuZGF0YSA/IF90aGlzLnN0YXRlLmRhdGEuaGlkZSA6IHVuZGVmaW5lZDtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eSQxKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQkMShfdGhpcyksIFwiZGVzdHJveVBvcHBlckluc3RhbmNlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghX3RoaXMucG9wcGVySW5zdGFuY2UpIHJldHVybjtcblxuICAgICAgX3RoaXMucG9wcGVySW5zdGFuY2UuZGVzdHJveSgpO1xuXG4gICAgICBfdGhpcy5wb3BwZXJJbnN0YW5jZSA9IG51bGw7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkkMShfYXNzZXJ0VGhpc0luaXRpYWxpemVkJDEoX3RoaXMpLCBcInVwZGF0ZVBvcHBlckluc3RhbmNlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLmRlc3Ryb3lQb3BwZXJJbnN0YW5jZSgpO1xuXG4gICAgICB2YXIgX2Fzc2VydFRoaXNJbml0aWFsaXplID0gX2Fzc2VydFRoaXNJbml0aWFsaXplZCQxKF90aGlzKSxcbiAgICAgICAgICBwb3BwZXJOb2RlID0gX2Fzc2VydFRoaXNJbml0aWFsaXplLnBvcHBlck5vZGU7XG5cbiAgICAgIHZhciByZWZlcmVuY2VFbGVtZW50ID0gX3RoaXMucHJvcHMucmVmZXJlbmNlRWxlbWVudDtcbiAgICAgIGlmICghcmVmZXJlbmNlRWxlbWVudCB8fCAhcG9wcGVyTm9kZSkgcmV0dXJuO1xuICAgICAgX3RoaXMucG9wcGVySW5zdGFuY2UgPSBuZXcgUG9wcGVyKHJlZmVyZW5jZUVsZW1lbnQsIHBvcHBlck5vZGUsIF90aGlzLmdldE9wdGlvbnMoKSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkkMShfYXNzZXJ0VGhpc0luaXRpYWxpemVkJDEoX3RoaXMpLCBcInNjaGVkdWxlVXBkYXRlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5wb3BwZXJJbnN0YW5jZSkge1xuICAgICAgICBfdGhpcy5wb3BwZXJJbnN0YW5jZS5zY2hlZHVsZVVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IElubmVyUG9wcGVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgLy8gSWYgdGhlIFBvcHBlci5qcyBvcHRpb25zIGhhdmUgY2hhbmdlZCwgdXBkYXRlIHRoZSBpbnN0YW5jZSAoZGVzdHJveSArIGNyZWF0ZSlcbiAgICBpZiAodGhpcy5wcm9wcy5wbGFjZW1lbnQgIT09IHByZXZQcm9wcy5wbGFjZW1lbnQgfHwgdGhpcy5wcm9wcy5yZWZlcmVuY2VFbGVtZW50ICE9PSBwcmV2UHJvcHMucmVmZXJlbmNlRWxlbWVudCB8fCB0aGlzLnByb3BzLnBvc2l0aW9uRml4ZWQgIT09IHByZXZQcm9wcy5wb3NpdGlvbkZpeGVkIHx8ICFkZWVwRXF1YWxfMSh0aGlzLnByb3BzLm1vZGlmaWVycywgcHJldlByb3BzLm1vZGlmaWVycywge1xuICAgICAgc3RyaWN0OiB0cnVlXG4gICAgfSkpIHtcbiAgICAgIC8vIGRldmVsb3Agb25seSBjaGVjayB0aGF0IG1vZGlmaWVycyBpc24ndCBiZWluZyB1cGRhdGVkIG5lZWRsZXNzbHlcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiKSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLm1vZGlmaWVycyAhPT0gcHJldlByb3BzLm1vZGlmaWVycyAmJiB0aGlzLnByb3BzLm1vZGlmaWVycyAhPSBudWxsICYmIHByZXZQcm9wcy5tb2RpZmllcnMgIT0gbnVsbCAmJiBzaGFsbG93RXF1YWwodGhpcy5wcm9wcy5tb2RpZmllcnMsIHByZXZQcm9wcy5tb2RpZmllcnMpKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiJ21vZGlmaWVycycgcHJvcCByZWZlcmVuY2UgdXBkYXRlZCBldmVuIHRob3VnaCBhbGwgdmFsdWVzIGFwcGVhciB0aGUgc2FtZS5cXG5Db25zaWRlciBtZW1vaXppbmcgdGhlICdtb2RpZmllcnMnIG9iamVjdCB0byBhdm9pZCBuZWVkbGVzcyByZW5kZXJpbmcuXCIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMudXBkYXRlUG9wcGVySW5zdGFuY2UoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuZXZlbnRzRW5hYmxlZCAhPT0gcHJldlByb3BzLmV2ZW50c0VuYWJsZWQgJiYgdGhpcy5wb3BwZXJJbnN0YW5jZSkge1xuICAgICAgdGhpcy5wcm9wcy5ldmVudHNFbmFibGVkID8gdGhpcy5wb3BwZXJJbnN0YW5jZS5lbmFibGVFdmVudExpc3RlbmVycygpIDogdGhpcy5wb3BwZXJJbnN0YW5jZS5kaXNhYmxlRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICB9IC8vIEEgcGxhY2VtZW50IGRpZmZlcmVuY2UgaW4gc3RhdGUgbWVhbnMgcG9wcGVyIGRldGVybWluZWQgYSBuZXcgcGxhY2VtZW50XG4gICAgLy8gYXBhcnQgZnJvbSB0aGUgcHJvcHMgdmFsdWUuIEJ5IHRoZSB0aW1lIHRoZSBwb3BwZXIgZWxlbWVudCBpcyByZW5kZXJlZCB3aXRoXG4gICAgLy8gdGhlIG5ldyBwb3NpdGlvbiBQb3BwZXIgaGFzIGFscmVhZHkgbWVhc3VyZWQgaXQsIGlmIHRoZSBwbGFjZSBjaGFuZ2UgdHJpZ2dlcnNcbiAgICAvLyBhIHNpemUgY2hhbmdlIGl0IHdpbGwgcmVzdWx0IGluIGEgbWlzYWxpZ25lZCBwb3BwZXIuIFNvIHdlIHNjaGVkdWxlIGFuIHVwZGF0ZSB0byBiZSBzdXJlLlxuXG5cbiAgICBpZiAocHJldlN0YXRlLnBsYWNlbWVudCAhPT0gdGhpcy5zdGF0ZS5wbGFjZW1lbnQpIHtcbiAgICAgIHRoaXMuc2NoZWR1bGVVcGRhdGUoKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc2V0UmVmKHRoaXMucHJvcHMuaW5uZXJSZWYsIG51bGwpO1xuICAgIHRoaXMuZGVzdHJveVBvcHBlckluc3RhbmNlKCk7XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICByZXR1cm4gdW53cmFwQXJyYXkodGhpcy5wcm9wcy5jaGlsZHJlbikoe1xuICAgICAgcmVmOiB0aGlzLnNldFBvcHBlck5vZGUsXG4gICAgICBzdHlsZTogdGhpcy5nZXRQb3BwZXJTdHlsZSgpLFxuICAgICAgcGxhY2VtZW50OiB0aGlzLmdldFBvcHBlclBsYWNlbWVudCgpLFxuICAgICAgb3V0T2ZCb3VuZGFyaWVzOiB0aGlzLmdldE91dE9mQm91bmRhcmllc1N0YXRlKCksXG4gICAgICBzY2hlZHVsZVVwZGF0ZTogdGhpcy5zY2hlZHVsZVVwZGF0ZSxcbiAgICAgIGFycm93UHJvcHM6IHtcbiAgICAgICAgcmVmOiB0aGlzLnNldEFycm93Tm9kZSxcbiAgICAgICAgc3R5bGU6IHRoaXMuZ2V0QXJyb3dTdHlsZSgpXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIElubmVyUG9wcGVyO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkkMShJbm5lclBvcHBlciwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICBldmVudHNFbmFibGVkOiB0cnVlLFxuICByZWZlcmVuY2VFbGVtZW50OiB1bmRlZmluZWQsXG4gIHBvc2l0aW9uRml4ZWQ6IGZhbHNlXG59KTtcbmZ1bmN0aW9uIFBvcHBlciQxKF9yZWYpIHtcbiAgdmFyIHJlZmVyZW5jZUVsZW1lbnQgPSBfcmVmLnJlZmVyZW5jZUVsZW1lbnQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlJDEoX3JlZiwgW1wicmVmZXJlbmNlRWxlbWVudFwiXSk7XG5cbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTWFuYWdlclJlZmVyZW5jZU5vZGVDb250ZXh0LkNvbnN1bWVyLCBudWxsLCBmdW5jdGlvbiAocmVmZXJlbmNlTm9kZSkge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KElubmVyUG9wcGVyLCBfZXh0ZW5kcyQyKHtcbiAgICAgIHJlZmVyZW5jZUVsZW1lbnQ6IHJlZmVyZW5jZUVsZW1lbnQgIT09IHVuZGVmaW5lZCA/IHJlZmVyZW5jZUVsZW1lbnQgOiByZWZlcmVuY2VOb2RlXG4gICAgfSwgcHJvcHMpKTtcbiAgfSk7XG59XG5cbnZhciBJbm5lclJlZmVyZW5jZSA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZSQxKElubmVyUmVmZXJlbmNlLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBJbm5lclJlZmVyZW5jZSgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChhcmdzKSkgfHwgdGhpcztcblxuICAgIF9kZWZpbmVQcm9wZXJ0eSQxKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQkMShfdGhpcyksIFwicmVmSGFuZGxlclwiLCBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgc2V0UmVmKF90aGlzLnByb3BzLmlubmVyUmVmLCBub2RlKTtcbiAgICAgIHNhZmVJbnZva2UoX3RoaXMucHJvcHMuc2V0UmVmZXJlbmNlTm9kZSwgbm9kZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gSW5uZXJSZWZlcmVuY2UucHJvdG90eXBlO1xuXG4gIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHNldFJlZih0aGlzLnByb3BzLmlubmVyUmVmLCBudWxsKTtcbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHdhcm5pbmdfMShCb29sZWFuKHRoaXMucHJvcHMuc2V0UmVmZXJlbmNlTm9kZSksICdgUmVmZXJlbmNlYCBzaG91bGQgbm90IGJlIHVzZWQgb3V0c2lkZSBvZiBhIGBNYW5hZ2VyYCBjb21wb25lbnQuJyk7XG4gICAgcmV0dXJuIHVud3JhcEFycmF5KHRoaXMucHJvcHMuY2hpbGRyZW4pKHtcbiAgICAgIHJlZjogdGhpcy5yZWZIYW5kbGVyXG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIElubmVyUmVmZXJlbmNlO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5mdW5jdGlvbiBSZWZlcmVuY2UocHJvcHMpIHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTWFuYWdlclJlZmVyZW5jZU5vZGVTZXR0ZXJDb250ZXh0LkNvbnN1bWVyLCBudWxsLCBmdW5jdGlvbiAoc2V0UmVmZXJlbmNlTm9kZSkge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KElubmVyUmVmZXJlbmNlLCBfZXh0ZW5kcyQyKHtcbiAgICAgIHNldFJlZmVyZW5jZU5vZGU6IHNldFJlZmVyZW5jZU5vZGVcbiAgICB9LCBwcm9wcykpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gbmUoZSl7cmV0dXJuIChuZT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT9cInN5bWJvbFwiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gb2UoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfWZ1bmN0aW9uIGFlKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pO319ZnVuY3Rpb24gc2UoZSx0LHIpe3JldHVybiB0JiZhZShlLnByb3RvdHlwZSx0KSxyJiZhZShlLHIpLGV9ZnVuY3Rpb24gcGUoZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfWZ1bmN0aW9uIGllKCl7cmV0dXJuIChpZT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pO31yZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBjZShlLHQpe3ZhciByPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKG49bi5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksci5wdXNoLmFwcGx5KHIsbik7fXJldHVybiByfWZ1bmN0aW9uIGxlKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP2NlKE9iamVjdChyKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7cGUoZSx0LHJbdF0pO30pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHIpKTpjZShPYmplY3QocikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLHQpKTt9KSk7fXJldHVybiBlfWZ1bmN0aW9uIGRlKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiZoZShlLHQpO31mdW5jdGlvbiB1ZShlKXtyZXR1cm4gKHVlPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiBoZShlLHQpe3JldHVybiAoaGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfWZ1bmN0aW9uIG1lKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiBlfWZ1bmN0aW9uIGZlKGUsdCl7cmV0dXJuICF0fHxcIm9iamVjdFwiIT10eXBlb2YgdCYmXCJmdW5jdGlvblwiIT10eXBlb2YgdD9tZShlKTp0fWZ1bmN0aW9uIHZlKGUpe3ZhciB0PWZ1bmN0aW9uKCl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4gITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4gITE7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgUHJveHkpcmV0dXJuICEwO3RyeXtyZXR1cm4gRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuICExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixuPXVlKGUpO2lmKHQpe3ZhciBvPXVlKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3Qobixhcmd1bWVudHMsbyk7fWVsc2Ugcj1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZmUodGhpcyxyKX19ZnVuY3Rpb24geWUoZSx0KXtzd2l0Y2goZSl7Y2FzZVwiUFwiOnJldHVybiB0LmRhdGUoe3dpZHRoOlwic2hvcnRcIn0pO2Nhc2VcIlBQXCI6cmV0dXJuIHQuZGF0ZSh7d2lkdGg6XCJtZWRpdW1cIn0pO2Nhc2VcIlBQUFwiOnJldHVybiB0LmRhdGUoe3dpZHRoOlwibG9uZ1wifSk7Y2FzZVwiUFBQUFwiOmRlZmF1bHQ6cmV0dXJuIHQuZGF0ZSh7d2lkdGg6XCJmdWxsXCJ9KX19ZnVuY3Rpb24gRGUoZSx0KXtzd2l0Y2goZSl7Y2FzZVwicFwiOnJldHVybiB0LnRpbWUoe3dpZHRoOlwic2hvcnRcIn0pO2Nhc2VcInBwXCI6cmV0dXJuIHQudGltZSh7d2lkdGg6XCJtZWRpdW1cIn0pO2Nhc2VcInBwcFwiOnJldHVybiB0LnRpbWUoe3dpZHRoOlwibG9uZ1wifSk7Y2FzZVwicHBwcFwiOmRlZmF1bHQ6cmV0dXJuIHQudGltZSh7d2lkdGg6XCJmdWxsXCJ9KX19dmFyIHdlPXtwOkRlLFA6ZnVuY3Rpb24oZSx0KXt2YXIgcixuPWUubWF0Y2goLyhQKykocCspPy8pLG89blsxXSxhPW5bMl07aWYoIWEpcmV0dXJuIHllKGUsdCk7c3dpdGNoKG8pe2Nhc2VcIlBcIjpyPXQuZGF0ZVRpbWUoe3dpZHRoOlwic2hvcnRcIn0pO2JyZWFrO2Nhc2VcIlBQXCI6cj10LmRhdGVUaW1lKHt3aWR0aDpcIm1lZGl1bVwifSk7YnJlYWs7Y2FzZVwiUFBQXCI6cj10LmRhdGVUaW1lKHt3aWR0aDpcImxvbmdcIn0pO2JyZWFrO2Nhc2VcIlBQUFBcIjpkZWZhdWx0OnI9dC5kYXRlVGltZSh7d2lkdGg6XCJmdWxsXCJ9KTt9cmV0dXJuIHIucmVwbGFjZShcInt7ZGF0ZX19XCIseWUobyx0KSkucmVwbGFjZShcInt7dGltZX19XCIsRGUoYSx0KSl9fSxrZT0vUCtwK3xQK3xwK3wnJ3wnKCcnfFteJ10pKygnfCQpfC4vZztmdW5jdGlvbiBnZShlKXt2YXIgdD1lP1wic3RyaW5nXCI9PXR5cGVvZiBlfHxlIGluc3RhbmNlb2YgU3RyaW5nP3BhcnNlSVNPKGUpOnRvRGF0ZShlKTpuZXcgRGF0ZTtyZXR1cm4gQ2UodCk/dDpudWxsfWZ1bmN0aW9uIGJlKGUsdCxyLG4pe3ZhciBhPW51bGwscz1qZShyKXx8QmUoKSxwPSEwO3JldHVybiBBcnJheS5pc0FycmF5KHQpPyh0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPXBhcnNlKGUsdCxuZXcgRGF0ZSx7bG9jYWxlOnN9KTtuJiYocD1DZShyKSYmZT09PWZvcm1hdChyLHQse2F3YXJlT2ZVbmljb2RlVG9rZW5zOiEwfSkpLENlKHIpJiZwJiYoYT1yKTt9KSksYSk6KGE9cGFyc2UoZSx0LG5ldyBEYXRlLHtsb2NhbGU6c30pLG4/cD1DZShhKSYmZT09PWZvcm1hdChhLHQse2F3YXJlT2ZVbmljb2RlVG9rZW5zOiEwfSk6Q2UoYSl8fCh0PXQubWF0Y2goa2UpLm1hcCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXTtyZXR1cm4gXCJwXCI9PT10fHxcIlBcIj09PXQ/cz8oMCwgd2VbdF0pKGUscy5mb3JtYXRMb25nKTp0OmV9KSkuam9pbihcIlwiKSxlLmxlbmd0aD4wJiYoYT1wYXJzZShlLHQuc2xpY2UoMCxlLmxlbmd0aCksbmV3IERhdGUpKSxDZShhKXx8KGE9bmV3IERhdGUoZSkpKSxDZShhKSYmcD9hOm51bGwpfWZ1bmN0aW9uIENlKGUpe3JldHVybiBpc1ZhbGlkKGUpJiZpc0FmdGVyKGUsbmV3IERhdGUoXCIxLzEvMTAwMFwiKSl9ZnVuY3Rpb24gX2UoZSx0LHIpe2lmKFwiZW5cIj09PXIpcmV0dXJuIGZvcm1hdChlLHQse2F3YXJlT2ZVbmljb2RlVG9rZW5zOiEwfSk7dmFyIG49amUocik7cmV0dXJuIHImJiFuJiZjb25zb2xlLndhcm4oJ0EgbG9jYWxlIG9iamVjdCB3YXMgbm90IGZvdW5kIGZvciB0aGUgcHJvdmlkZWQgc3RyaW5nIFtcIicuY29uY2F0KHIsJ1wiXS4nKSksIW4mJkJlKCkmJmplKEJlKCkpJiYobj1qZShCZSgpKSksZm9ybWF0KGUsdCx7bG9jYWxlOm58fG51bGwsYXdhcmVPZlVuaWNvZGVUb2tlbnM6ITB9KX1mdW5jdGlvbiBTZShlLHQpe3ZhciByPXQuaG91cixuPXZvaWQgMD09PXI/MDpyLG89dC5taW51dGUsYT12b2lkIDA9PT1vPzA6byxzPXQuc2Vjb25kO3JldHVybiBzZXRIb3VycyhzZXRNaW51dGVzKHNldFNlY29uZHMoZSx2b2lkIDA9PT1zPzA6cyksYSksbil9ZnVuY3Rpb24gTWUoZSx0KXt2YXIgcj10JiZqZSh0KXx8QmUoKSYmamUoQmUoKSk7cmV0dXJuIGdldFdlZWsoZSxyP3tsb2NhbGU6cn06bnVsbCl9ZnVuY3Rpb24gUGUoZSx0KXtyZXR1cm4gX2UoZSxcImRkZFwiLHQpfWZ1bmN0aW9uIEVlKGUpe3JldHVybiBzdGFydE9mRGF5KGUpfWZ1bmN0aW9uIE5lKGUsdCl7dmFyIHI9amUodHx8QmUoKSk7cmV0dXJuIHN0YXJ0T2ZXZWVrKGUse2xvY2FsZTpyfSl9ZnVuY3Rpb24gT2UoZSl7cmV0dXJuIHN0YXJ0T2ZNb250aChlKX1mdW5jdGlvbiB4ZShlKXtyZXR1cm4gc3RhcnRPZlF1YXJ0ZXIoZSl9ZnVuY3Rpb24gWWUoZSx0KXtyZXR1cm4gZSYmdD9pc1NhbWVZZWFyKGUsdCk6IWUmJiF0fWZ1bmN0aW9uIFRlKGUsdCl7cmV0dXJuIGUmJnQ/aXNTYW1lTW9udGgoZSx0KTohZSYmIXR9ZnVuY3Rpb24gTGUoZSx0KXtyZXR1cm4gZSYmdD9pc1NhbWVRdWFydGVyKGUsdCk6IWUmJiF0fWZ1bmN0aW9uIEllKGUsdCl7cmV0dXJuIGUmJnQ/aXNTYW1lRGF5KGUsdCk6IWUmJiF0fWZ1bmN0aW9uIEZlKGUsdCl7cmV0dXJuIGUmJnQ/aXNFcXVhbChlLHQpOiFlJiYhdH1mdW5jdGlvbiBSZShlLHQscil7dmFyIG4sbz1zdGFydE9mRGF5KHQpLGE9ZW5kT2ZEYXkocik7dHJ5e249aXNXaXRoaW5JbnRlcnZhbChlLHtzdGFydDpvLGVuZDphfSk7fWNhdGNoKGUpe249ITE7fXJldHVybiBufWZ1bmN0aW9uIFdlKGUsdCl7dmFyIHI9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6Z2xvYmFsO3IuX19sb2NhbGVEYXRhX198fChyLl9fbG9jYWxlRGF0YV9fPXt9KSxyLl9fbG9jYWxlRGF0YV9fW2VdPXQ7fWZ1bmN0aW9uIEFlKGUpeyhcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzpnbG9iYWwpLl9fbG9jYWxlSWRfXz1lO31mdW5jdGlvbiBCZSgpe3JldHVybiAoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6Z2xvYmFsKS5fX2xvY2FsZUlkX199ZnVuY3Rpb24gamUoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpe3ZhciB0PVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Omdsb2JhbDtyZXR1cm4gdC5fX2xvY2FsZURhdGFfXz90Ll9fbG9jYWxlRGF0YV9fW2VdOm51bGx9cmV0dXJuIGV9ZnVuY3Rpb24gS2UoZSx0KXtyZXR1cm4gX2Uoc2V0TW9udGgoZ2UoKSxlKSxcIkxMTExcIix0KX1mdW5jdGlvbiBIZShlLHQpe3JldHVybiBfZShzZXRNb250aChnZSgpLGUpLFwiTExMXCIsdCl9ZnVuY3Rpb24gUWUoZSx0KXtyZXR1cm4gX2Uoc2V0UXVhcnRlcihnZSgpLGUpLFwiUVFRXCIsdCl9ZnVuY3Rpb24gVmUoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LHI9dC5taW5EYXRlLG49dC5tYXhEYXRlLG89dC5leGNsdWRlRGF0ZXMsYT10LmluY2x1ZGVEYXRlcyxzPXQuZmlsdGVyRGF0ZTtyZXR1cm4gSmUoZSx7bWluRGF0ZTpyLG1heERhdGU6bn0pfHxvJiZvLnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiBJZShlLHQpfSkpfHxhJiYhYS5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gSWUoZSx0KX0pKXx8cyYmIXMoZ2UoZSkpfHwhMX1mdW5jdGlvbiBxZShlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30scj10LmV4Y2x1ZGVEYXRlcztyZXR1cm4gciYmci5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gSWUoZSx0KX0pKXx8ITF9ZnVuY3Rpb24gVWUoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LHI9dC5taW5EYXRlLG49dC5tYXhEYXRlLG89dC5leGNsdWRlRGF0ZXMsYT10LmluY2x1ZGVEYXRlcyxzPXQuZmlsdGVyRGF0ZTtyZXR1cm4gSmUoZSx7bWluRGF0ZTpyLG1heERhdGU6bn0pfHxvJiZvLnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiBUZShlLHQpfSkpfHxhJiYhYS5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gVGUoZSx0KX0pKXx8cyYmIXMoZ2UoZSkpfHwhMX1mdW5jdGlvbiAkZShlLHQscixuKXt2YXIgbz1nZXRZZWFyKGUpLGE9Z2V0TW9udGgoZSkscz1nZXRZZWFyKHQpLHA9Z2V0TW9udGgodCksaT1nZXRZZWFyKG4pO3JldHVybiBvPT09cyYmbz09PWk/YTw9ciYmcjw9cDpvPHM/aT09PW8mJmE8PXJ8fGk9PT1zJiZwPj1yfHxpPHMmJmk+bzp2b2lkIDB9ZnVuY3Rpb24gemUoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LHI9dC5taW5EYXRlLG49dC5tYXhEYXRlLG89dC5leGNsdWRlRGF0ZXMsYT10LmluY2x1ZGVEYXRlcyxzPXQuZmlsdGVyRGF0ZTtyZXR1cm4gSmUoZSx7bWluRGF0ZTpyLG1heERhdGU6bn0pfHxvJiZvLnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiBMZShlLHQpfSkpfHxhJiYhYS5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gTGUoZSx0KX0pKXx8cyYmIXMoZ2UoZSkpfHwhMX1mdW5jdGlvbiBHZShlLHQscixuKXt2YXIgbz1nZXRZZWFyKGUpLGE9Z2V0UXVhcnRlcihlKSxzPWdldFllYXIodCkscD1nZXRRdWFydGVyKHQpLGk9Z2V0WWVhcihuKTtyZXR1cm4gbz09PXMmJm89PT1pP2E8PXImJnI8PXA6bzxzP2k9PT1vJiZhPD1yfHxpPT09cyYmcD49cnx8aTxzJiZpPm86dm9pZCAwfWZ1bmN0aW9uIEplKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxyPXQubWluRGF0ZSxuPXQubWF4RGF0ZTtyZXR1cm4gciYmZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKGUscik8MHx8biYmZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKGUsbik+MH1mdW5jdGlvbiBYZShlLHQpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPTA7bjxyO24rKylpZihnZXRIb3Vycyh0W25dKT09PWdldEhvdXJzKGUpJiZnZXRNaW51dGVzKHRbbl0pPT09Z2V0TWludXRlcyhlKSlyZXR1cm4gITA7cmV0dXJuICExfWZ1bmN0aW9uIFplKGUsdCl7dmFyIHI9dC5taW5UaW1lLG49dC5tYXhUaW1lO2lmKCFyfHwhbil0aHJvdyBuZXcgRXJyb3IoXCJCb3RoIG1pblRpbWUgYW5kIG1heFRpbWUgcHJvcHMgcmVxdWlyZWRcIik7dmFyIG8sYT1nZSgpLHM9c2V0SG91cnMoc2V0TWludXRlcyhhLGdldE1pbnV0ZXMoZSkpLGdldEhvdXJzKGUpKSxwPXNldEhvdXJzKHNldE1pbnV0ZXMoYSxnZXRNaW51dGVzKHIpKSxnZXRIb3VycyhyKSksaT1zZXRIb3VycyhzZXRNaW51dGVzKGEsZ2V0TWludXRlcyhuKSksZ2V0SG91cnMobikpO3RyeXtvPSFpc1dpdGhpbkludGVydmFsKHMse3N0YXJ0OnAsZW5kOml9KTt9Y2F0Y2goZSl7bz0hMTt9cmV0dXJuIG99ZnVuY3Rpb24gZXQoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LHI9dC5taW5EYXRlLG49dC5pbmNsdWRlRGF0ZXMsbz1zdWJNb250aHMoZSwxKTtyZXR1cm4gciYmZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMocixvKT4wfHxuJiZuLmV2ZXJ5KChmdW5jdGlvbihlKXtyZXR1cm4gZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMoZSxvKT4wfSkpfHwhMX1mdW5jdGlvbiB0dChlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30scj10Lm1heERhdGUsbj10LmluY2x1ZGVEYXRlcyxvPWFkZE1vbnRocyhlLDEpO3JldHVybiByJiZkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocyhvLHIpPjB8fG4mJm4uZXZlcnkoKGZ1bmN0aW9uKGUpe3JldHVybiBkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocyhvLGUpPjB9KSl8fCExfWZ1bmN0aW9uIHJ0KGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxyPXQubWluRGF0ZSxuPXQuaW5jbHVkZURhdGVzLG89c3ViWWVhcnMoZSwxKTtyZXR1cm4gciYmZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycyhyLG8pPjB8fG4mJm4uZXZlcnkoKGZ1bmN0aW9uKGUpe3JldHVybiBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzKGUsbyk+MH0pKXx8ITF9ZnVuY3Rpb24gbnQoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LHI9dC5tYXhEYXRlLG49dC5pbmNsdWRlRGF0ZXMsbz1hZGRZZWFycyhlLDEpO3JldHVybiByJiZkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzKG8scik+MHx8biYmbi5ldmVyeSgoZnVuY3Rpb24oZSl7cmV0dXJuIGRpZmZlcmVuY2VJbkNhbGVuZGFyWWVhcnMobyxlKT4wfSkpfHwhMX1mdW5jdGlvbiBvdChlKXt2YXIgdD1lLm1pbkRhdGUscj1lLmluY2x1ZGVEYXRlcztpZihyJiZ0KXt2YXIgbj1yLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhlLHQpPj0wfSkpO3JldHVybiBtaW4obil9cmV0dXJuIHI/bWluKHIpOnR9ZnVuY3Rpb24gYXQoZSl7dmFyIHQ9ZS5tYXhEYXRlLHI9ZS5pbmNsdWRlRGF0ZXM7aWYociYmdCl7dmFyIG49ci5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoZSx0KTw9MH0pKTtyZXR1cm4gbWF4KG4pfXJldHVybiByP21heChyKTp0fWZ1bmN0aW9uIHN0KCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbXSx0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpcInJlYWN0LWRhdGVwaWNrZXJfX2RheS0taGlnaGxpZ2h0ZWRcIixuPW5ldyBNYXAsbz0wLGE9ZS5sZW5ndGg7bzxhO28rKyl7dmFyIHM9ZVtvXTtpZihpc0RhdGUocykpe3ZhciBwPV9lKHMsXCJNTS5kZC55eXl5XCIpLGk9bi5nZXQocCl8fFtdO2kuaW5jbHVkZXModCl8fChpLnB1c2godCksbi5zZXQocCxpKSk7fWVsc2UgaWYoXCJvYmplY3RcIj09PW5lKHMpKXt2YXIgYz1PYmplY3Qua2V5cyhzKSxsPWNbMF0sZD1zW2NbMF1dO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBsJiZkLmNvbnN0cnVjdG9yPT09QXJyYXkpZm9yKHZhciB1PTAsaD1kLmxlbmd0aDt1PGg7dSsrKXt2YXIgbT1fZShkW3VdLFwiTU0uZGQueXl5eVwiKSxmPW4uZ2V0KG0pfHxbXTtmLmluY2x1ZGVzKGwpfHwoZi5wdXNoKGwpLG4uc2V0KG0sZikpO319fXJldHVybiBufWZ1bmN0aW9uIHB0KGUsdCxyLG4sbyl7Zm9yKHZhciBwPW8ubGVuZ3RoLGk9W10sYz0wO2M8cDtjKyspe3ZhciBsPWFkZE1pbnV0ZXMoYWRkSG91cnMoZSxnZXRIb3VycyhvW2NdKSksZ2V0TWludXRlcyhvW2NdKSksZD1hZGRNaW51dGVzKGUsKHIrMSkqbik7aXNBZnRlcihsLHQpJiZpc0JlZm9yZShsLGQpJiZpLnB1c2gob1tjXSk7fXJldHVybiBpfWZ1bmN0aW9uIGl0KGUpe3JldHVybiBlPDEwP1wiMFwiLmNvbmNhdChlKTpcIlwiLmNvbmNhdChlKX1mdW5jdGlvbiBjdChlLHQscixuKXtmb3IodmFyIG89W10sYT0wO2E8Mip0KzE7YSsrKXt2YXIgcz1lK3QtYSxwPSEwO3ImJihwPWdldFllYXIocik8PXMpLG4mJnAmJihwPWdldFllYXIobik+PXMpLHAmJm8ucHVzaChzKTt9cmV0dXJuIG99dmFyIGx0PW9uQ2xpY2tPdXRzaWRlSE9DKGZ1bmN0aW9uKHIpe2RlKG8sUmVhY3RfX2RlZmF1bHQuQ29tcG9uZW50KTt2YXIgbj12ZShvKTtmdW5jdGlvbiBvKHQpe3ZhciByO29lKHRoaXMsbykscGUobWUocj1uLmNhbGwodGhpcyx0KSksXCJyZW5kZXJPcHRpb25zXCIsKGZ1bmN0aW9uKCl7dmFyIHQ9ci5wcm9wcy55ZWFyLG49ci5zdGF0ZS55ZWFyc0xpc3QubWFwKChmdW5jdGlvbihuKXtyZXR1cm4gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6dD09PW4/XCJyZWFjdC1kYXRlcGlja2VyX195ZWFyLW9wdGlvbiByZWFjdC1kYXRlcGlja2VyX195ZWFyLW9wdGlvbi0tc2VsZWN0ZWRfeWVhclwiOlwicmVhY3QtZGF0ZXBpY2tlcl9feWVhci1vcHRpb25cIixrZXk6bixvbkNsaWNrOnIub25DaGFuZ2UuYmluZChtZShyKSxuKX0sdD09PW4/UmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcInNwYW5cIix7Y2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9feWVhci1vcHRpb24tLXNlbGVjdGVkXCJ9LFwi4pyTXCIpOlwiXCIsbil9KSksbz1yLnByb3BzLm1pbkRhdGU/Z2V0WWVhcihyLnByb3BzLm1pbkRhdGUpOm51bGwsYT1yLnByb3BzLm1heERhdGU/Z2V0WWVhcihyLnByb3BzLm1heERhdGUpOm51bGw7cmV0dXJuIGEmJnIuc3RhdGUueWVhcnNMaXN0LmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVybiBlPT09YX0pKXx8bi51bnNoaWZ0KFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9feWVhci1vcHRpb25cIixrZXk6XCJ1cGNvbWluZ1wiLG9uQ2xpY2s6ci5pbmNyZW1lbnRZZWFyc30sUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImFcIix7Y2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbiByZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS15ZWFycyByZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS15ZWFycy11cGNvbWluZ1wifSkpKSxvJiZyLnN0YXRlLnllYXJzTGlzdC5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4gZT09PW99KSl8fG4ucHVzaChSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXJfX3llYXItb3B0aW9uXCIsa2V5OlwicHJldmlvdXNcIixvbkNsaWNrOnIuZGVjcmVtZW50WWVhcnN9LFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJhXCIse2NsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24gcmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0teWVhcnMgcmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0teWVhcnMtcHJldmlvdXNcIn0pKSksbn0pKSxwZShtZShyKSxcIm9uQ2hhbmdlXCIsKGZ1bmN0aW9uKGUpe3IucHJvcHMub25DaGFuZ2UoZSk7fSkpLHBlKG1lKHIpLFwiaGFuZGxlQ2xpY2tPdXRzaWRlXCIsKGZ1bmN0aW9uKCl7ci5wcm9wcy5vbkNhbmNlbCgpO30pKSxwZShtZShyKSxcInNoaWZ0WWVhcnNcIiwoZnVuY3Rpb24oZSl7dmFyIHQ9ci5zdGF0ZS55ZWFyc0xpc3QubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdCtlfSkpO3Iuc2V0U3RhdGUoe3llYXJzTGlzdDp0fSk7fSkpLHBlKG1lKHIpLFwiaW5jcmVtZW50WWVhcnNcIiwoZnVuY3Rpb24oKXtyZXR1cm4gci5zaGlmdFllYXJzKDEpfSkpLHBlKG1lKHIpLFwiZGVjcmVtZW50WWVhcnNcIiwoZnVuY3Rpb24oKXtyZXR1cm4gci5zaGlmdFllYXJzKC0xKX0pKTt2YXIgYT10LnllYXJEcm9wZG93bkl0ZW1OdW1iZXIscz10LnNjcm9sbGFibGVZZWFyRHJvcGRvd24scD1hfHwocz8xMDo1KTtyZXR1cm4gci5zdGF0ZT17eWVhcnNMaXN0OmN0KHIucHJvcHMueWVhcixwLHIucHJvcHMubWluRGF0ZSxyLnByb3BzLm1heERhdGUpfSxyfXJldHVybiBzZShvLFt7a2V5OlwicmVuZGVyXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgcj1jbGFzc25hbWVzKHtcInJlYWN0LWRhdGVwaWNrZXJfX3llYXItZHJvcGRvd25cIjohMCxcInJlYWN0LWRhdGVwaWNrZXJfX3llYXItZHJvcGRvd24tLXNjcm9sbGFibGVcIjp0aGlzLnByb3BzLnNjcm9sbGFibGVZZWFyRHJvcGRvd259KTtyZXR1cm4gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6cn0sdGhpcy5yZW5kZXJPcHRpb25zKCkpfX1dKSxvfSgpKSxkdD1mdW5jdGlvbih0KXtkZShuLFJlYWN0X19kZWZhdWx0LkNvbXBvbmVudCk7dmFyIHI9dmUobik7ZnVuY3Rpb24gbigpe3ZhciB0O29lKHRoaXMsbik7Zm9yKHZhciBvPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobykscz0wO3M8bztzKyspYVtzXT1hcmd1bWVudHNbc107cmV0dXJuIHBlKG1lKHQ9ci5jYWxsLmFwcGx5KHIsW3RoaXNdLmNvbmNhdChhKSkpLFwic3RhdGVcIix7ZHJvcGRvd25WaXNpYmxlOiExfSkscGUobWUodCksXCJyZW5kZXJTZWxlY3RPcHRpb25zXCIsKGZ1bmN0aW9uKCl7Zm9yKHZhciByPXQucHJvcHMubWluRGF0ZT9nZXRZZWFyKHQucHJvcHMubWluRGF0ZSk6MTkwMCxuPXQucHJvcHMubWF4RGF0ZT9nZXRZZWFyKHQucHJvcHMubWF4RGF0ZSk6MjEwMCxvPVtdLGE9cjthPD1uO2ErKylvLnB1c2goUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLHtrZXk6YSx2YWx1ZTphfSxhKSk7cmV0dXJuIG99KSkscGUobWUodCksXCJvblNlbGVjdENoYW5nZVwiLChmdW5jdGlvbihlKXt0Lm9uQ2hhbmdlKGUudGFyZ2V0LnZhbHVlKTt9KSkscGUobWUodCksXCJyZW5kZXJTZWxlY3RNb2RlXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIix7dmFsdWU6dC5wcm9wcy55ZWFyLGNsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXJfX3llYXItc2VsZWN0XCIsb25DaGFuZ2U6dC5vblNlbGVjdENoYW5nZX0sdC5yZW5kZXJTZWxlY3RPcHRpb25zKCkpfSkpLHBlKG1lKHQpLFwicmVuZGVyUmVhZFZpZXdcIiwoZnVuY3Rpb24ocil7cmV0dXJuIFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7a2V5OlwicmVhZFwiLHN0eWxlOnt2aXNpYmlsaXR5OnI/XCJ2aXNpYmxlXCI6XCJoaWRkZW5cIn0sY2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXdcIixvbkNsaWNrOmZ1bmN0aW9uKGUpe3JldHVybiB0LnRvZ2dsZURyb3Bkb3duKGUpfX0sUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcInNwYW5cIix7Y2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3dcIn0pLFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIse2NsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXJfX3llYXItcmVhZC12aWV3LS1zZWxlY3RlZC15ZWFyXCJ9LHQucHJvcHMueWVhcikpfSkpLHBlKG1lKHQpLFwicmVuZGVyRHJvcGRvd25cIiwoZnVuY3Rpb24oKXtyZXR1cm4gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChsdCx7a2V5OlwiZHJvcGRvd25cIix5ZWFyOnQucHJvcHMueWVhcixvbkNoYW5nZTp0Lm9uQ2hhbmdlLG9uQ2FuY2VsOnQudG9nZ2xlRHJvcGRvd24sbWluRGF0ZTp0LnByb3BzLm1pbkRhdGUsbWF4RGF0ZTp0LnByb3BzLm1heERhdGUsc2Nyb2xsYWJsZVllYXJEcm9wZG93bjp0LnByb3BzLnNjcm9sbGFibGVZZWFyRHJvcGRvd24seWVhckRyb3Bkb3duSXRlbU51bWJlcjp0LnByb3BzLnllYXJEcm9wZG93bkl0ZW1OdW1iZXJ9KX0pKSxwZShtZSh0KSxcInJlbmRlclNjcm9sbE1vZGVcIiwoZnVuY3Rpb24oKXt2YXIgZT10LnN0YXRlLmRyb3Bkb3duVmlzaWJsZSxyPVt0LnJlbmRlclJlYWRWaWV3KCFlKV07cmV0dXJuIGUmJnIudW5zaGlmdCh0LnJlbmRlckRyb3Bkb3duKCkpLHJ9KSkscGUobWUodCksXCJvbkNoYW5nZVwiLChmdW5jdGlvbihlKXt0LnRvZ2dsZURyb3Bkb3duKCksZSE9PXQucHJvcHMueWVhciYmdC5wcm9wcy5vbkNoYW5nZShlKTt9KSkscGUobWUodCksXCJ0b2dnbGVEcm9wZG93blwiLChmdW5jdGlvbihlKXt0LnNldFN0YXRlKHtkcm9wZG93blZpc2libGU6IXQuc3RhdGUuZHJvcGRvd25WaXNpYmxlfSwoZnVuY3Rpb24oKXt0LnByb3BzLmFkanVzdERhdGVPbkNoYW5nZSYmdC5oYW5kbGVZZWFyQ2hhbmdlKHQucHJvcHMuZGF0ZSxlKTt9KSk7fSkpLHBlKG1lKHQpLFwiaGFuZGxlWWVhckNoYW5nZVwiLChmdW5jdGlvbihlLHIpe3Qub25TZWxlY3QoZSxyKSx0LnNldE9wZW4oKTt9KSkscGUobWUodCksXCJvblNlbGVjdFwiLChmdW5jdGlvbihlLHIpe3QucHJvcHMub25TZWxlY3QmJnQucHJvcHMub25TZWxlY3QoZSxyKTt9KSkscGUobWUodCksXCJzZXRPcGVuXCIsKGZ1bmN0aW9uKCl7dC5wcm9wcy5zZXRPcGVuJiZ0LnByb3BzLnNldE9wZW4oITApO30pKSx0fXJldHVybiBzZShuLFt7a2V5OlwicmVuZGVyXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdDtzd2l0Y2godGhpcy5wcm9wcy5kcm9wZG93bk1vZGUpe2Nhc2VcInNjcm9sbFwiOnQ9dGhpcy5yZW5kZXJTY3JvbGxNb2RlKCk7YnJlYWs7Y2FzZVwic2VsZWN0XCI6dD10aGlzLnJlbmRlclNlbGVjdE1vZGUoKTt9cmV0dXJuIFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9feWVhci1kcm9wZG93bi1jb250YWluZXIgcmVhY3QtZGF0ZXBpY2tlcl9feWVhci1kcm9wZG93bi1jb250YWluZXItLVwiLmNvbmNhdCh0aGlzLnByb3BzLmRyb3Bkb3duTW9kZSl9LHQpfX1dKSxufSgpLHV0PW9uQ2xpY2tPdXRzaWRlSE9DKGZ1bmN0aW9uKHQpe2RlKG4sUmVhY3RfX2RlZmF1bHQuQ29tcG9uZW50KTt2YXIgcj12ZShuKTtmdW5jdGlvbiBuKCl7dmFyIHQ7b2UodGhpcyxuKTtmb3IodmFyIG89YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShvKSxzPTA7czxvO3MrKylhW3NdPWFyZ3VtZW50c1tzXTtyZXR1cm4gcGUobWUodD1yLmNhbGwuYXBwbHkocixbdGhpc10uY29uY2F0KGEpKSksXCJyZW5kZXJPcHRpb25zXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHQucHJvcHMubW9udGhOYW1lcy5tYXAoKGZ1bmN0aW9uKHIsbil7cmV0dXJuIFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOnQucHJvcHMubW9udGg9PT1uP1wicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtb3B0aW9uIHJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLW9wdGlvbi0tc2VsZWN0ZWRfbW9udGhcIjpcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLW9wdGlvblwiLGtleTpyLG9uQ2xpY2s6dC5vbkNoYW5nZS5iaW5kKG1lKHQpLG4pfSx0LnByb3BzLm1vbnRoPT09bj9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLHtjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyX19tb250aC1vcHRpb24tLXNlbGVjdGVkXCJ9LFwi4pyTXCIpOlwiXCIscil9KSl9KSkscGUobWUodCksXCJvbkNoYW5nZVwiLChmdW5jdGlvbihlKXtyZXR1cm4gdC5wcm9wcy5vbkNoYW5nZShlKX0pKSxwZShtZSh0KSxcImhhbmRsZUNsaWNrT3V0c2lkZVwiLChmdW5jdGlvbigpe3JldHVybiB0LnByb3BzLm9uQ2FuY2VsKCl9KSksdH1yZXR1cm4gc2Uobixbe2tleTpcInJlbmRlclwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtZHJvcGRvd25cIn0sdGhpcy5yZW5kZXJPcHRpb25zKCkpfX1dKSxufSgpKSxodD1mdW5jdGlvbih0KXtkZShuLFJlYWN0X19kZWZhdWx0LkNvbXBvbmVudCk7dmFyIHI9dmUobik7ZnVuY3Rpb24gbigpe3ZhciB0O29lKHRoaXMsbik7Zm9yKHZhciBvPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobykscz0wO3M8bztzKyspYVtzXT1hcmd1bWVudHNbc107cmV0dXJuIHBlKG1lKHQ9ci5jYWxsLmFwcGx5KHIsW3RoaXNdLmNvbmNhdChhKSkpLFwic3RhdGVcIix7ZHJvcGRvd25WaXNpYmxlOiExfSkscGUobWUodCksXCJyZW5kZXJTZWxlY3RPcHRpb25zXCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCxyKXtyZXR1cm4gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLHtrZXk6cix2YWx1ZTpyfSx0KX0pKX0pKSxwZShtZSh0KSxcInJlbmRlclNlbGVjdE1vZGVcIiwoZnVuY3Rpb24ocil7cmV0dXJuIFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIix7dmFsdWU6dC5wcm9wcy5tb250aCxjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyX19tb250aC1zZWxlY3RcIixvbkNoYW5nZTpmdW5jdGlvbihlKXtyZXR1cm4gdC5vbkNoYW5nZShlLnRhcmdldC52YWx1ZSl9fSx0LnJlbmRlclNlbGVjdE9wdGlvbnMocikpfSkpLHBlKG1lKHQpLFwicmVuZGVyUmVhZFZpZXdcIiwoZnVuY3Rpb24ocixuKXtyZXR1cm4gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLHtrZXk6XCJyZWFkXCIsc3R5bGU6e3Zpc2liaWxpdHk6cj9cInZpc2libGVcIjpcImhpZGRlblwifSxjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyX19tb250aC1yZWFkLXZpZXdcIixvbkNsaWNrOnQudG9nZ2xlRHJvcGRvd259LFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIse2NsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXJlYWQtdmlldy0tZG93bi1hcnJvd1wifSksUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcInNwYW5cIix7Y2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtcmVhZC12aWV3LS1zZWxlY3RlZC1tb250aFwifSxuW3QucHJvcHMubW9udGhdKSl9KSkscGUobWUodCksXCJyZW5kZXJEcm9wZG93blwiLChmdW5jdGlvbihyKXtyZXR1cm4gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudCh1dCx7a2V5OlwiZHJvcGRvd25cIixtb250aDp0LnByb3BzLm1vbnRoLG1vbnRoTmFtZXM6cixvbkNoYW5nZTp0Lm9uQ2hhbmdlLG9uQ2FuY2VsOnQudG9nZ2xlRHJvcGRvd259KX0pKSxwZShtZSh0KSxcInJlbmRlclNjcm9sbE1vZGVcIiwoZnVuY3Rpb24oZSl7dmFyIHI9dC5zdGF0ZS5kcm9wZG93blZpc2libGUsbj1bdC5yZW5kZXJSZWFkVmlldyghcixlKV07cmV0dXJuIHImJm4udW5zaGlmdCh0LnJlbmRlckRyb3Bkb3duKGUpKSxufSkpLHBlKG1lKHQpLFwib25DaGFuZ2VcIiwoZnVuY3Rpb24oZSl7dC50b2dnbGVEcm9wZG93bigpLGUhPT10LnByb3BzLm1vbnRoJiZ0LnByb3BzLm9uQ2hhbmdlKGUpO30pKSxwZShtZSh0KSxcInRvZ2dsZURyb3Bkb3duXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHQuc2V0U3RhdGUoe2Ryb3Bkb3duVmlzaWJsZTohdC5zdGF0ZS5kcm9wZG93blZpc2libGV9KX0pKSx0fXJldHVybiBzZShuLFt7a2V5OlwicmVuZGVyXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdCxyPXRoaXMsbj1bMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMV0ubWFwKHRoaXMucHJvcHMudXNlU2hvcnRNb250aEluRHJvcGRvd24/ZnVuY3Rpb24oZSl7cmV0dXJuIEhlKGUsci5wcm9wcy5sb2NhbGUpfTpmdW5jdGlvbihlKXtyZXR1cm4gS2UoZSxyLnByb3BzLmxvY2FsZSl9KTtzd2l0Y2godGhpcy5wcm9wcy5kcm9wZG93bk1vZGUpe2Nhc2VcInNjcm9sbFwiOnQ9dGhpcy5yZW5kZXJTY3JvbGxNb2RlKG4pO2JyZWFrO2Nhc2VcInNlbGVjdFwiOnQ9dGhpcy5yZW5kZXJTZWxlY3RNb2RlKG4pO31yZXR1cm4gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyX19tb250aC1kcm9wZG93bi1jb250YWluZXIgcmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtZHJvcGRvd24tY29udGFpbmVyLS1cIi5jb25jYXQodGhpcy5wcm9wcy5kcm9wZG93bk1vZGUpfSx0KX19XSksbn0oKTtmdW5jdGlvbiBtdChlLHQpe2Zvcih2YXIgcj1bXSxuPU9lKGUpLG89T2UodCk7IWlzQWZ0ZXIobixvKTspci5wdXNoKGdlKG4pKSxuPWFkZE1vbnRocyhuLDEpO3JldHVybiByfXZhciBmdD1vbkNsaWNrT3V0c2lkZUhPQyhmdW5jdGlvbihyKXtkZShvLFJlYWN0X19kZWZhdWx0LkNvbXBvbmVudCk7dmFyIG49dmUobyk7ZnVuY3Rpb24gbyh0KXt2YXIgcjtyZXR1cm4gb2UodGhpcyxvKSxwZShtZShyPW4uY2FsbCh0aGlzLHQpKSxcInJlbmRlck9wdGlvbnNcIiwoZnVuY3Rpb24oKXtyZXR1cm4gci5zdGF0ZS5tb250aFllYXJzTGlzdC5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBuPWdldFRpbWUodCksbz1ZZShyLnByb3BzLmRhdGUsdCkmJlRlKHIucHJvcHMuZGF0ZSx0KTtyZXR1cm4gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6bz9cInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItb3B0aW9uIC0tc2VsZWN0ZWRfbW9udGgteWVhclwiOlwicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1vcHRpb25cIixrZXk6bixvbkNsaWNrOnIub25DaGFuZ2UuYmluZChtZShyKSxuKX0sbz9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLHtjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLW9wdGlvbi0tc2VsZWN0ZWRcIn0sXCLinJNcIik6XCJcIixfZSh0LHIucHJvcHMuZGF0ZUZvcm1hdCkpfSkpfSkpLHBlKG1lKHIpLFwib25DaGFuZ2VcIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHIucHJvcHMub25DaGFuZ2UoZSl9KSkscGUobWUociksXCJoYW5kbGVDbGlja091dHNpZGVcIiwoZnVuY3Rpb24oKXtyLnByb3BzLm9uQ2FuY2VsKCk7fSkpLHIuc3RhdGU9e21vbnRoWWVhcnNMaXN0Om10KHIucHJvcHMubWluRGF0ZSxyLnByb3BzLm1heERhdGUpfSxyfXJldHVybiBzZShvLFt7a2V5OlwicmVuZGVyXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgcj1jbGFzc25hbWVzKHtcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItZHJvcGRvd25cIjohMCxcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItZHJvcGRvd24tLXNjcm9sbGFibGVcIjp0aGlzLnByb3BzLnNjcm9sbGFibGVNb250aFllYXJEcm9wZG93bn0pO3JldHVybiBSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpyfSx0aGlzLnJlbmRlck9wdGlvbnMoKSl9fV0pLG99KCkpLHZ0PWZ1bmN0aW9uKHQpe2RlKG4sUmVhY3RfX2RlZmF1bHQuQ29tcG9uZW50KTt2YXIgcj12ZShuKTtmdW5jdGlvbiBuKCl7dmFyIHQ7b2UodGhpcyxuKTtmb3IodmFyIG89YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShvKSxzPTA7czxvO3MrKylhW3NdPWFyZ3VtZW50c1tzXTtyZXR1cm4gcGUobWUodD1yLmNhbGwuYXBwbHkocixbdGhpc10uY29uY2F0KGEpKSksXCJzdGF0ZVwiLHtkcm9wZG93blZpc2libGU6ITF9KSxwZShtZSh0KSxcInJlbmRlclNlbGVjdE9wdGlvbnNcIiwoZnVuY3Rpb24oKXtmb3IodmFyIHI9T2UodC5wcm9wcy5taW5EYXRlKSxuPU9lKHQucHJvcHMubWF4RGF0ZSksbz1bXTshaXNBZnRlcihyLG4pOyl7dmFyIGE9Z2V0VGltZShyKTtvLnB1c2goUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLHtrZXk6YSx2YWx1ZTphfSxfZShyLHQucHJvcHMuZGF0ZUZvcm1hdCx0LnByb3BzLmxvY2FsZSkpKSxyPWFkZE1vbnRocyhyLDEpO31yZXR1cm4gb30pKSxwZShtZSh0KSxcIm9uU2VsZWN0Q2hhbmdlXCIsKGZ1bmN0aW9uKGUpe3Qub25DaGFuZ2UoZS50YXJnZXQudmFsdWUpO30pKSxwZShtZSh0KSxcInJlbmRlclNlbGVjdE1vZGVcIiwoZnVuY3Rpb24oKXtyZXR1cm4gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcInNlbGVjdFwiLHt2YWx1ZTpnZXRUaW1lKE9lKHQucHJvcHMuZGF0ZSkpLGNsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItc2VsZWN0XCIsb25DaGFuZ2U6dC5vblNlbGVjdENoYW5nZX0sdC5yZW5kZXJTZWxlY3RPcHRpb25zKCkpfSkpLHBlKG1lKHQpLFwicmVuZGVyUmVhZFZpZXdcIiwoZnVuY3Rpb24ocil7dmFyIG49X2UodC5wcm9wcy5kYXRlLHQucHJvcHMuZGF0ZUZvcm1hdCx0LnByb3BzLmxvY2FsZSk7cmV0dXJuIFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7a2V5OlwicmVhZFwiLHN0eWxlOnt2aXNpYmlsaXR5OnI/XCJ2aXNpYmxlXCI6XCJoaWRkZW5cIn0sY2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1yZWFkLXZpZXdcIixvbkNsaWNrOmZ1bmN0aW9uKGUpe3JldHVybiB0LnRvZ2dsZURyb3Bkb3duKGUpfX0sUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcInNwYW5cIix7Y2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3dcIn0pLFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIse2NsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItcmVhZC12aWV3LS1zZWxlY3RlZC1tb250aC15ZWFyXCJ9LG4pKX0pKSxwZShtZSh0KSxcInJlbmRlckRyb3Bkb3duXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoZnQse2tleTpcImRyb3Bkb3duXCIsZGF0ZTp0LnByb3BzLmRhdGUsZGF0ZUZvcm1hdDp0LnByb3BzLmRhdGVGb3JtYXQsb25DaGFuZ2U6dC5vbkNoYW5nZSxvbkNhbmNlbDp0LnRvZ2dsZURyb3Bkb3duLG1pbkRhdGU6dC5wcm9wcy5taW5EYXRlLG1heERhdGU6dC5wcm9wcy5tYXhEYXRlLHNjcm9sbGFibGVNb250aFllYXJEcm9wZG93bjp0LnByb3BzLnNjcm9sbGFibGVNb250aFllYXJEcm9wZG93bn0pfSkpLHBlKG1lKHQpLFwicmVuZGVyU2Nyb2xsTW9kZVwiLChmdW5jdGlvbigpe3ZhciBlPXQuc3RhdGUuZHJvcGRvd25WaXNpYmxlLHI9W3QucmVuZGVyUmVhZFZpZXcoIWUpXTtyZXR1cm4gZSYmci51bnNoaWZ0KHQucmVuZGVyRHJvcGRvd24oKSkscn0pKSxwZShtZSh0KSxcIm9uQ2hhbmdlXCIsKGZ1bmN0aW9uKGUpe3QudG9nZ2xlRHJvcGRvd24oKTt2YXIgcj1nZShwYXJzZUludChlKSk7WWUodC5wcm9wcy5kYXRlLHIpJiZUZSh0LnByb3BzLmRhdGUscil8fHQucHJvcHMub25DaGFuZ2Uocik7fSkpLHBlKG1lKHQpLFwidG9nZ2xlRHJvcGRvd25cIiwoZnVuY3Rpb24oKXtyZXR1cm4gdC5zZXRTdGF0ZSh7ZHJvcGRvd25WaXNpYmxlOiF0LnN0YXRlLmRyb3Bkb3duVmlzaWJsZX0pfSkpLHR9cmV0dXJuIHNlKG4sW3trZXk6XCJyZW5kZXJcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0O3N3aXRjaCh0aGlzLnByb3BzLmRyb3Bkb3duTW9kZSl7Y2FzZVwic2Nyb2xsXCI6dD10aGlzLnJlbmRlclNjcm9sbE1vZGUoKTticmVhaztjYXNlXCJzZWxlY3RcIjp0PXRoaXMucmVuZGVyU2VsZWN0TW9kZSgpO31yZXR1cm4gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLWRyb3Bkb3duLWNvbnRhaW5lciByZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLWRyb3Bkb3duLWNvbnRhaW5lci0tXCIuY29uY2F0KHRoaXMucHJvcHMuZHJvcGRvd25Nb2RlKX0sdCl9fV0pLG59KCkseXQ9ZnVuY3Rpb24ocil7ZGUobyxSZWFjdF9fZGVmYXVsdC5Db21wb25lbnQpO3ZhciBuPXZlKG8pO2Z1bmN0aW9uIG8oKXt2YXIgcjtvZSh0aGlzLG8pO2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLHM9bmV3IEFycmF5KGEpLHA9MDtwPGE7cCsrKXNbcF09YXJndW1lbnRzW3BdO3JldHVybiBwZShtZShyPW4uY2FsbC5hcHBseShuLFt0aGlzXS5jb25jYXQocykpKSxcImRheUVsXCIsUmVhY3RfX2RlZmF1bHQuY3JlYXRlUmVmKCkpLHBlKG1lKHIpLFwiaGFuZGxlQ2xpY2tcIiwoZnVuY3Rpb24oZSl7IXIuaXNEaXNhYmxlZCgpJiZyLnByb3BzLm9uQ2xpY2smJnIucHJvcHMub25DbGljayhlKTt9KSkscGUobWUociksXCJoYW5kbGVNb3VzZUVudGVyXCIsKGZ1bmN0aW9uKGUpeyFyLmlzRGlzYWJsZWQoKSYmci5wcm9wcy5vbk1vdXNlRW50ZXImJnIucHJvcHMub25Nb3VzZUVudGVyKGUpO30pKSxwZShtZShyKSxcImhhbmRsZU9uS2V5RG93blwiLChmdW5jdGlvbihlKXtcIiBcIj09PWUua2V5JiYoZS5wcmV2ZW50RGVmYXVsdCgpLGUua2V5PVwiRW50ZXJcIiksci5wcm9wcy5oYW5kbGVPbktleURvd24oZSk7fSkpLHBlKG1lKHIpLFwiaXNTYW1lRGF5XCIsKGZ1bmN0aW9uKGUpe3JldHVybiBJZShyLnByb3BzLmRheSxlKX0pKSxwZShtZShyKSxcImlzS2V5Ym9hcmRTZWxlY3RlZFwiLChmdW5jdGlvbigpe3JldHVybiAhci5wcm9wcy5kaXNhYmxlZEtleWJvYXJkTmF2aWdhdGlvbiYmIXIucHJvcHMuaW5saW5lJiYhci5pc1NhbWVEYXkoci5wcm9wcy5zZWxlY3RlZCkmJnIuaXNTYW1lRGF5KHIucHJvcHMucHJlU2VsZWN0aW9uKX0pKSxwZShtZShyKSxcImlzRGlzYWJsZWRcIiwoZnVuY3Rpb24oKXtyZXR1cm4gVmUoci5wcm9wcy5kYXksci5wcm9wcyl9KSkscGUobWUociksXCJpc0V4Y2x1ZGVkXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHFlKHIucHJvcHMuZGF5LHIucHJvcHMpfSkpLHBlKG1lKHIpLFwiZ2V0SGlnaExpZ2h0ZWRDbGFzc1wiLChmdW5jdGlvbihlKXt2YXIgdD1yLnByb3BzLG49dC5kYXksbz10LmhpZ2hsaWdodERhdGVzO2lmKCFvKXJldHVybiAhMTt2YXIgYT1fZShuLFwiTU0uZGQueXl5eVwiKTtyZXR1cm4gby5nZXQoYSl9KSkscGUobWUociksXCJpc0luUmFuZ2VcIiwoZnVuY3Rpb24oKXt2YXIgZT1yLnByb3BzLHQ9ZS5kYXksbj1lLnN0YXJ0RGF0ZSxvPWUuZW5kRGF0ZTtyZXR1cm4gISghbnx8IW8pJiZSZSh0LG4sbyl9KSkscGUobWUociksXCJpc0luU2VsZWN0aW5nUmFuZ2VcIiwoZnVuY3Rpb24oKXt2YXIgZT1yLnByb3BzLHQ9ZS5kYXksbj1lLnNlbGVjdHNTdGFydCxvPWUuc2VsZWN0c0VuZCxhPWUuc2VsZWN0aW5nRGF0ZSxzPWUuc3RhcnREYXRlLHA9ZS5lbmREYXRlO3JldHVybiAhKCFuJiYhb3x8IWF8fHIuaXNEaXNhYmxlZCgpKSYmKG4mJnAmJihpc0JlZm9yZShhLHApfHxGZShhLHApKT9SZSh0LGEscCk6ISghb3x8IXN8fCFpc0FmdGVyKGEscykmJiFGZShhLHMpKSYmUmUodCxzLGEpKX0pKSxwZShtZShyKSxcImlzU2VsZWN0aW5nUmFuZ2VTdGFydFwiLChmdW5jdGlvbigpe2lmKCFyLmlzSW5TZWxlY3RpbmdSYW5nZSgpKXJldHVybiAhMTt2YXIgZT1yLnByb3BzLHQ9ZS5kYXksbj1lLnNlbGVjdGluZ0RhdGUsbz1lLnN0YXJ0RGF0ZTtyZXR1cm4gSWUodCxlLnNlbGVjdHNTdGFydD9uOm8pfSkpLHBlKG1lKHIpLFwiaXNTZWxlY3RpbmdSYW5nZUVuZFwiLChmdW5jdGlvbigpe2lmKCFyLmlzSW5TZWxlY3RpbmdSYW5nZSgpKXJldHVybiAhMTt2YXIgZT1yLnByb3BzLHQ9ZS5kYXksbj1lLnNlbGVjdGluZ0RhdGUsbz1lLmVuZERhdGU7cmV0dXJuIEllKHQsZS5zZWxlY3RzRW5kP246byl9KSkscGUobWUociksXCJpc1JhbmdlU3RhcnRcIiwoZnVuY3Rpb24oKXt2YXIgZT1yLnByb3BzLHQ9ZS5kYXksbj1lLnN0YXJ0RGF0ZSxvPWUuZW5kRGF0ZTtyZXR1cm4gISghbnx8IW8pJiZJZShuLHQpfSkpLHBlKG1lKHIpLFwiaXNSYW5nZUVuZFwiLChmdW5jdGlvbigpe3ZhciBlPXIucHJvcHMsdD1lLmRheSxuPWUuc3RhcnREYXRlLG89ZS5lbmREYXRlO3JldHVybiAhKCFufHwhbykmJkllKG8sdCl9KSkscGUobWUociksXCJpc1dlZWtlbmRcIiwoZnVuY3Rpb24oKXt2YXIgZT1nZXREYXkoci5wcm9wcy5kYXkpO3JldHVybiAwPT09ZXx8Nj09PWV9KSkscGUobWUociksXCJpc091dHNpZGVNb250aFwiLChmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT1yLnByb3BzLm1vbnRoJiZyLnByb3BzLm1vbnRoIT09Z2V0TW9udGgoci5wcm9wcy5kYXkpfSkpLHBlKG1lKHIpLFwiZ2V0Q2xhc3NOYW1lc1wiLChmdW5jdGlvbihlKXt2YXIgbj1yLnByb3BzLmRheUNsYXNzTmFtZT9yLnByb3BzLmRheUNsYXNzTmFtZShlKTp2b2lkIDA7cmV0dXJuIGNsYXNzbmFtZXMoXCJyZWFjdC1kYXRlcGlja2VyX19kYXlcIixuLFwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1cIitQZShyLnByb3BzLmRheSkse1wicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1kaXNhYmxlZFwiOnIuaXNEaXNhYmxlZCgpLFwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1leGNsdWRlZFwiOnIuaXNFeGNsdWRlZCgpLFwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1zZWxlY3RlZFwiOnIuaXNTYW1lRGF5KHIucHJvcHMuc2VsZWN0ZWQpLFwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1rZXlib2FyZC1zZWxlY3RlZFwiOnIuaXNLZXlib2FyZFNlbGVjdGVkKCksXCJyZWFjdC1kYXRlcGlja2VyX19kYXktLXJhbmdlLXN0YXJ0XCI6ci5pc1JhbmdlU3RhcnQoKSxcInJlYWN0LWRhdGVwaWNrZXJfX2RheS0tcmFuZ2UtZW5kXCI6ci5pc1JhbmdlRW5kKCksXCJyZWFjdC1kYXRlcGlja2VyX19kYXktLWluLXJhbmdlXCI6ci5pc0luUmFuZ2UoKSxcInJlYWN0LWRhdGVwaWNrZXJfX2RheS0taW4tc2VsZWN0aW5nLXJhbmdlXCI6ci5pc0luU2VsZWN0aW5nUmFuZ2UoKSxcInJlYWN0LWRhdGVwaWNrZXJfX2RheS0tc2VsZWN0aW5nLXJhbmdlLXN0YXJ0XCI6ci5pc1NlbGVjdGluZ1JhbmdlU3RhcnQoKSxcInJlYWN0LWRhdGVwaWNrZXJfX2RheS0tc2VsZWN0aW5nLXJhbmdlLWVuZFwiOnIuaXNTZWxlY3RpbmdSYW5nZUVuZCgpLFwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS10b2RheVwiOnIuaXNTYW1lRGF5KGdlKCkpLFwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS13ZWVrZW5kXCI6ci5pc1dlZWtlbmQoKSxcInJlYWN0LWRhdGVwaWNrZXJfX2RheS0tb3V0c2lkZS1tb250aFwiOnIuaXNPdXRzaWRlTW9udGgoKX0sci5nZXRIaWdoTGlnaHRlZENsYXNzKFwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1oaWdobGlnaHRlZFwiKSl9KSkscGUobWUociksXCJnZXRBcmlhTGFiZWxcIiwoZnVuY3Rpb24oKXt2YXIgZT1yLnByb3BzLHQ9ZS5kYXksbj1lLmFyaWFMYWJlbFByZWZpeFdoZW5FbmFibGVkLG89dm9pZCAwPT09bj9cIkNob29zZVwiOm4sYT1lLmFyaWFMYWJlbFByZWZpeFdoZW5EaXNhYmxlZCxzPXZvaWQgMD09PWE/XCJOb3QgYXZhaWxhYmxlXCI6YSxwPXIuaXNEaXNhYmxlZCgpfHxyLmlzRXhjbHVkZWQoKT9zOm87cmV0dXJuIFwiXCIuY29uY2F0KHAsXCIgXCIpLmNvbmNhdChfZSh0LFwiUFBQUFwiKSl9KSkscGUobWUociksXCJnZXRUYWJJbmRleFwiLChmdW5jdGlvbihlLHQpe3ZhciBuPWV8fHIucHJvcHMuc2VsZWN0ZWQsbz10fHxyLnByb3BzLnByZVNlbGVjdGlvbjtyZXR1cm4gci5pc0tleWJvYXJkU2VsZWN0ZWQoKXx8ci5pc1NhbWVEYXkobikmJkllKG8sbik/MDotMX0pKSxwZShtZShyKSxcImhhbmRsZUZvY3VzRGF5XCIsKGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9ITE7MD09PXIuZ2V0VGFiSW5kZXgoKSYmIWUuaXNJbnB1dEZvY3VzZWQmJnIuaXNTYW1lRGF5KHIucHJvcHMucHJlU2VsZWN0aW9uKSYmKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT1kb2N1bWVudC5ib2R5fHwodD0hMCksci5wcm9wcy5jb250YWluZXJSZWYmJnIucHJvcHMuY29udGFpbmVyUmVmLmN1cnJlbnQmJnIucHJvcHMuY29udGFpbmVyUmVmLmN1cnJlbnQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5XCIpJiYodD0hMCkpLHQmJnIuZGF5RWwuY3VycmVudC5mb2N1cygpO30pKSxwZShtZShyKSxcInJlbmRlclwiLChmdW5jdGlvbigpe3JldHVybiBSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIse3JlZjpyLmRheUVsLGNsYXNzTmFtZTpyLmdldENsYXNzTmFtZXMoci5wcm9wcy5kYXkpLG9uS2V5RG93bjpyLmhhbmRsZU9uS2V5RG93bixvbkNsaWNrOnIuaGFuZGxlQ2xpY2ssb25Nb3VzZUVudGVyOnIuaGFuZGxlTW91c2VFbnRlcix0YWJJbmRleDpyLmdldFRhYkluZGV4KCksXCJhcmlhLWxhYmVsXCI6ci5nZXRBcmlhTGFiZWwoKSxyb2xlOlwiYnV0dG9uXCIsXCJhcmlhLWRpc2FibGVkXCI6ci5pc0Rpc2FibGVkKCl9LHIucHJvcHMucmVuZGVyRGF5Q29udGVudHM/ci5wcm9wcy5yZW5kZXJEYXlDb250ZW50cyhnZXREYXRlKHIucHJvcHMuZGF5KSxyLnByb3BzLmRheSk6Z2V0RGF0ZShyLnByb3BzLmRheSkpfSkpLHJ9cmV0dXJuIHNlKG8sW3trZXk6XCJjb21wb25lbnREaWRNb3VudFwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5oYW5kbGVGb2N1c0RheSgpO319LHtrZXk6XCJjb21wb25lbnREaWRVcGRhdGVcIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmhhbmRsZUZvY3VzRGF5KGUpO319XSksb30oKSxEdD1mdW5jdGlvbihyKXtkZShvLFJlYWN0X19kZWZhdWx0LkNvbXBvbmVudCk7dmFyIG49dmUobyk7ZnVuY3Rpb24gbygpe3ZhciBlO29lKHRoaXMsbyk7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkodCksYT0wO2E8dDthKyspclthXT1hcmd1bWVudHNbYV07cmV0dXJuIHBlKG1lKGU9bi5jYWxsLmFwcGx5KG4sW3RoaXNdLmNvbmNhdChyKSkpLFwiaGFuZGxlQ2xpY2tcIiwoZnVuY3Rpb24odCl7ZS5wcm9wcy5vbkNsaWNrJiZlLnByb3BzLm9uQ2xpY2sodCk7fSkpLGV9cmV0dXJuIHNlKG8sW3trZXk6XCJyZW5kZXJcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciByPXRoaXMucHJvcHMsbj1yLndlZWtOdW1iZXIsbz1yLmFyaWFMYWJlbFByZWZpeCxhPXZvaWQgMD09PW8/XCJ3ZWVrIFwiOm8scz17XCJyZWFjdC1kYXRlcGlja2VyX193ZWVrLW51bWJlclwiOiEwLFwicmVhY3QtZGF0ZXBpY2tlcl9fd2Vlay1udW1iZXItLWNsaWNrYWJsZVwiOiEhci5vbkNsaWNrfTtyZXR1cm4gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6Y2xhc3NuYW1lcyhzKSxcImFyaWEtbGFiZWxcIjpcIlwiLmNvbmNhdChhLFwiIFwiKS5jb25jYXQodGhpcy5wcm9wcy53ZWVrTnVtYmVyKSxvbkNsaWNrOnRoaXMuaGFuZGxlQ2xpY2t9LG4pfX1dKSxvfSgpLHd0PWZ1bmN0aW9uKHQpe2RlKG4sUmVhY3RfX2RlZmF1bHQuQ29tcG9uZW50KTt2YXIgcj12ZShuKTtmdW5jdGlvbiBuKCl7dmFyIHQ7b2UodGhpcyxuKTtmb3IodmFyIG89YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShvKSxzPTA7czxvO3MrKylhW3NdPWFyZ3VtZW50c1tzXTtyZXR1cm4gcGUobWUodD1yLmNhbGwuYXBwbHkocixbdGhpc10uY29uY2F0KGEpKSksXCJoYW5kbGVEYXlDbGlja1wiLChmdW5jdGlvbihlLHIpe3QucHJvcHMub25EYXlDbGljayYmdC5wcm9wcy5vbkRheUNsaWNrKGUscik7fSkpLHBlKG1lKHQpLFwiaGFuZGxlRGF5TW91c2VFbnRlclwiLChmdW5jdGlvbihlKXt0LnByb3BzLm9uRGF5TW91c2VFbnRlciYmdC5wcm9wcy5vbkRheU1vdXNlRW50ZXIoZSk7fSkpLHBlKG1lKHQpLFwiaGFuZGxlV2Vla0NsaWNrXCIsKGZ1bmN0aW9uKGUscixuKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnByb3BzLm9uV2Vla1NlbGVjdCYmdC5wcm9wcy5vbldlZWtTZWxlY3QoZSxyLG4pLHQucHJvcHMuc2hvdWxkQ2xvc2VPblNlbGVjdCYmdC5wcm9wcy5zZXRPcGVuKCExKTt9KSkscGUobWUodCksXCJmb3JtYXRXZWVrTnVtYmVyXCIsKGZ1bmN0aW9uKGUpe3JldHVybiB0LnByb3BzLmZvcm1hdFdlZWtOdW1iZXI/dC5wcm9wcy5mb3JtYXRXZWVrTnVtYmVyKGUpOk1lKGUsdC5wcm9wcy5sb2NhbGUpfSkpLHBlKG1lKHQpLFwicmVuZGVyRGF5c1wiLChmdW5jdGlvbigpe3ZhciByPU5lKHQucHJvcHMuZGF5LHQucHJvcHMubG9jYWxlKSxuPVtdLG89dC5mb3JtYXRXZWVrTnVtYmVyKHIpO2lmKHQucHJvcHMuc2hvd1dlZWtOdW1iZXIpe3ZhciBhPXQucHJvcHMub25XZWVrU2VsZWN0P3QuaGFuZGxlV2Vla0NsaWNrLmJpbmQobWUodCkscixvKTp2b2lkIDA7bi5wdXNoKFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoRHQse2tleTpcIldcIix3ZWVrTnVtYmVyOm8sb25DbGljazphLGFyaWFMYWJlbFByZWZpeDp0LnByb3BzLmFyaWFMYWJlbFByZWZpeH0pKTt9cmV0dXJuIG4uY29uY2F0KFswLDEsMiwzLDQsNSw2XS5tYXAoKGZ1bmN0aW9uKG4pe3ZhciBvPWFkZERheXMocixuKTtyZXR1cm4gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudCh5dCx7YXJpYUxhYmVsUHJlZml4V2hlbkVuYWJsZWQ6dC5wcm9wcy5jaG9vc2VEYXlBcmlhTGFiZWxQcmVmaXgsYXJpYUxhYmVsUHJlZml4V2hlbkRpc2FibGVkOnQucHJvcHMuZGlzYWJsZWREYXlBcmlhTGFiZWxQcmVmaXgsa2V5Om8udmFsdWVPZigpLGRheTpvLG1vbnRoOnQucHJvcHMubW9udGgsb25DbGljazp0LmhhbmRsZURheUNsaWNrLmJpbmQobWUodCksbyksb25Nb3VzZUVudGVyOnQuaGFuZGxlRGF5TW91c2VFbnRlci5iaW5kKG1lKHQpLG8pLG1pbkRhdGU6dC5wcm9wcy5taW5EYXRlLG1heERhdGU6dC5wcm9wcy5tYXhEYXRlLGV4Y2x1ZGVEYXRlczp0LnByb3BzLmV4Y2x1ZGVEYXRlcyxpbmNsdWRlRGF0ZXM6dC5wcm9wcy5pbmNsdWRlRGF0ZXMsaW5saW5lOnQucHJvcHMuaW5saW5lLGhpZ2hsaWdodERhdGVzOnQucHJvcHMuaGlnaGxpZ2h0RGF0ZXMsc2VsZWN0aW5nRGF0ZTp0LnByb3BzLnNlbGVjdGluZ0RhdGUsZmlsdGVyRGF0ZTp0LnByb3BzLmZpbHRlckRhdGUscHJlU2VsZWN0aW9uOnQucHJvcHMucHJlU2VsZWN0aW9uLHNlbGVjdGVkOnQucHJvcHMuc2VsZWN0ZWQsc2VsZWN0c1N0YXJ0OnQucHJvcHMuc2VsZWN0c1N0YXJ0LHNlbGVjdHNFbmQ6dC5wcm9wcy5zZWxlY3RzRW5kLHN0YXJ0RGF0ZTp0LnByb3BzLnN0YXJ0RGF0ZSxlbmREYXRlOnQucHJvcHMuZW5kRGF0ZSxkYXlDbGFzc05hbWU6dC5wcm9wcy5kYXlDbGFzc05hbWUscmVuZGVyRGF5Q29udGVudHM6dC5wcm9wcy5yZW5kZXJEYXlDb250ZW50cyxkaXNhYmxlZEtleWJvYXJkTmF2aWdhdGlvbjp0LnByb3BzLmRpc2FibGVkS2V5Ym9hcmROYXZpZ2F0aW9uLGhhbmRsZU9uS2V5RG93bjp0LnByb3BzLmhhbmRsZU9uS2V5RG93bixpc0lucHV0Rm9jdXNlZDp0LnByb3BzLmlzSW5wdXRGb2N1c2VkLGNvbnRhaW5lclJlZjp0LnByb3BzLmNvbnRhaW5lclJlZn0pfSkpKX0pKSx0fXJldHVybiBzZShuLFt7a2V5OlwicmVuZGVyXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyX193ZWVrXCJ9LHRoaXMucmVuZGVyRGF5cygpKX19XSxbe2tleTpcImRlZmF1bHRQcm9wc1wiLGdldDpmdW5jdGlvbigpe3JldHVybiB7c2hvdWxkQ2xvc2VPblNlbGVjdDohMH19fV0pLG59KCksa3Q9ZnVuY3Rpb24ocil7ZGUobyxSZWFjdF9fZGVmYXVsdC5Db21wb25lbnQpO3ZhciBuPXZlKG8pO2Z1bmN0aW9uIG8oKXt2YXIgcjtvZSh0aGlzLG8pO2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLHM9bmV3IEFycmF5KGEpLGM9MDtjPGE7YysrKXNbY109YXJndW1lbnRzW2NdO3JldHVybiBwZShtZShyPW4uY2FsbC5hcHBseShuLFt0aGlzXS5jb25jYXQocykpKSxcImhhbmRsZURheUNsaWNrXCIsKGZ1bmN0aW9uKGUsdCl7ci5wcm9wcy5vbkRheUNsaWNrJiZyLnByb3BzLm9uRGF5Q2xpY2soZSx0LHIucHJvcHMub3JkZXJJbkRpc3BsYXkpO30pKSxwZShtZShyKSxcImhhbmRsZURheU1vdXNlRW50ZXJcIiwoZnVuY3Rpb24oZSl7ci5wcm9wcy5vbkRheU1vdXNlRW50ZXImJnIucHJvcHMub25EYXlNb3VzZUVudGVyKGUpO30pKSxwZShtZShyKSxcImhhbmRsZU1vdXNlTGVhdmVcIiwoZnVuY3Rpb24oKXtyLnByb3BzLm9uTW91c2VMZWF2ZSYmci5wcm9wcy5vbk1vdXNlTGVhdmUoKTt9KSkscGUobWUociksXCJpc1JhbmdlU3RhcnRNb250aFwiLChmdW5jdGlvbihlKXt2YXIgdD1yLnByb3BzLG49dC5kYXksbz10LnN0YXJ0RGF0ZSxhPXQuZW5kRGF0ZTtyZXR1cm4gISghb3x8IWEpJiZUZShzZXRNb250aChuLGUpLG8pfSkpLHBlKG1lKHIpLFwiaXNSYW5nZVN0YXJ0UXVhcnRlclwiLChmdW5jdGlvbihlKXt2YXIgdD1yLnByb3BzLG49dC5kYXksbz10LnN0YXJ0RGF0ZSxhPXQuZW5kRGF0ZTtyZXR1cm4gISghb3x8IWEpJiZMZShzZXRRdWFydGVyKG4sZSksbyl9KSkscGUobWUociksXCJpc1JhbmdlRW5kTW9udGhcIiwoZnVuY3Rpb24oZSl7dmFyIHQ9ci5wcm9wcyxuPXQuZGF5LG89dC5zdGFydERhdGUsYT10LmVuZERhdGU7cmV0dXJuICEoIW98fCFhKSYmVGUoc2V0TW9udGgobixlKSxhKX0pKSxwZShtZShyKSxcImlzUmFuZ2VFbmRRdWFydGVyXCIsKGZ1bmN0aW9uKGUpe3ZhciB0PXIucHJvcHMsbj10LmRheSxvPXQuc3RhcnREYXRlLGE9dC5lbmREYXRlO3JldHVybiAhKCFvfHwhYSkmJkxlKHNldFF1YXJ0ZXIobixlKSxhKX0pKSxwZShtZShyKSxcImlzV2Vla0luTW9udGhcIiwoZnVuY3Rpb24oZSl7dmFyIHQ9ci5wcm9wcy5kYXksbj1hZGREYXlzKGUsNik7cmV0dXJuIFRlKGUsdCl8fFRlKG4sdCl9KSkscGUobWUociksXCJyZW5kZXJXZWVrc1wiLChmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxuPXIucHJvcHMuZml4ZWRIZWlnaHQsbz1OZShPZShyLnByb3BzLmRheSksci5wcm9wcy5sb2NhbGUpLGE9MCxzPSExO3QucHVzaChSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KHd0LHthcmlhTGFiZWxQcmVmaXg6ci5wcm9wcy53ZWVrQXJpYUxhYmVsUHJlZml4LGNob29zZURheUFyaWFMYWJlbFByZWZpeDpyLnByb3BzLmNob29zZURheUFyaWFMYWJlbFByZWZpeCxkaXNhYmxlZERheUFyaWFMYWJlbFByZWZpeDpyLnByb3BzLmRpc2FibGVkRGF5QXJpYUxhYmVsUHJlZml4LGtleTphLGRheTpvLG1vbnRoOmdldE1vbnRoKHIucHJvcHMuZGF5KSxvbkRheUNsaWNrOnIuaGFuZGxlRGF5Q2xpY2ssb25EYXlNb3VzZUVudGVyOnIuaGFuZGxlRGF5TW91c2VFbnRlcixvbldlZWtTZWxlY3Q6ci5wcm9wcy5vbldlZWtTZWxlY3QsZm9ybWF0V2Vla051bWJlcjpyLnByb3BzLmZvcm1hdFdlZWtOdW1iZXIsbG9jYWxlOnIucHJvcHMubG9jYWxlLG1pbkRhdGU6ci5wcm9wcy5taW5EYXRlLG1heERhdGU6ci5wcm9wcy5tYXhEYXRlLGV4Y2x1ZGVEYXRlczpyLnByb3BzLmV4Y2x1ZGVEYXRlcyxpbmNsdWRlRGF0ZXM6ci5wcm9wcy5pbmNsdWRlRGF0ZXMsaW5saW5lOnIucHJvcHMuaW5saW5lLGhpZ2hsaWdodERhdGVzOnIucHJvcHMuaGlnaGxpZ2h0RGF0ZXMsc2VsZWN0aW5nRGF0ZTpyLnByb3BzLnNlbGVjdGluZ0RhdGUsZmlsdGVyRGF0ZTpyLnByb3BzLmZpbHRlckRhdGUscHJlU2VsZWN0aW9uOnIucHJvcHMucHJlU2VsZWN0aW9uLHNlbGVjdGVkOnIucHJvcHMuc2VsZWN0ZWQsc2VsZWN0c1N0YXJ0OnIucHJvcHMuc2VsZWN0c1N0YXJ0LHNlbGVjdHNFbmQ6ci5wcm9wcy5zZWxlY3RzRW5kLHNob3dXZWVrTnVtYmVyOnIucHJvcHMuc2hvd1dlZWtOdW1iZXJzLHN0YXJ0RGF0ZTpyLnByb3BzLnN0YXJ0RGF0ZSxlbmREYXRlOnIucHJvcHMuZW5kRGF0ZSxkYXlDbGFzc05hbWU6ci5wcm9wcy5kYXlDbGFzc05hbWUsc2V0T3BlbjpyLnByb3BzLnNldE9wZW4sc2hvdWxkQ2xvc2VPblNlbGVjdDpyLnByb3BzLnNob3VsZENsb3NlT25TZWxlY3QsZGlzYWJsZWRLZXlib2FyZE5hdmlnYXRpb246ci5wcm9wcy5kaXNhYmxlZEtleWJvYXJkTmF2aWdhdGlvbixyZW5kZXJEYXlDb250ZW50czpyLnByb3BzLnJlbmRlckRheUNvbnRlbnRzLGhhbmRsZU9uS2V5RG93bjpyLnByb3BzLmhhbmRsZU9uS2V5RG93bixpc0lucHV0Rm9jdXNlZDpyLnByb3BzLmlzSW5wdXRGb2N1c2VkLGNvbnRhaW5lclJlZjpyLnByb3BzLmNvbnRhaW5lclJlZn0pKSwhczspe2ErKyxvPWFkZFdlZWtzKG8sMSk7dmFyIHA9biYmYT49NixjPSFuJiYhci5pc1dlZWtJbk1vbnRoKG8pO2lmKHB8fGMpe2lmKCFyLnByb3BzLnBlZWtOZXh0TW9udGgpYnJlYWs7cz0hMDt9fXJldHVybiB0fSkpLHBlKG1lKHIpLFwib25Nb250aENsaWNrXCIsKGZ1bmN0aW9uKGUsdCl7ci5oYW5kbGVEYXlDbGljayhPZShzZXRNb250aChyLnByb3BzLmRheSx0KSksZSk7fSkpLHBlKG1lKHIpLFwib25RdWFydGVyQ2xpY2tcIiwoZnVuY3Rpb24oZSx0KXtyLmhhbmRsZURheUNsaWNrKHhlKHNldFF1YXJ0ZXIoci5wcm9wcy5kYXksdCkpLGUpO30pKSxwZShtZShyKSxcImdldE1vbnRoQ2xhc3NOYW1lc1wiLChmdW5jdGlvbihlKXt2YXIgbj1yLnByb3BzLG89bi5kYXksYT1uLnN0YXJ0RGF0ZSxzPW4uZW5kRGF0ZSxwPW4uc2VsZWN0ZWQsaT1uLm1pbkRhdGUsYz1uLm1heERhdGU7cmV0dXJuIGNsYXNzbmFtZXMoXCJyZWFjdC1kYXRlcGlja2VyX19tb250aC10ZXh0XCIsXCJyZWFjdC1kYXRlcGlja2VyX19tb250aC1cIi5jb25jYXQoZSkse1wicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtLWRpc2FibGVkXCI6KGl8fGMpJiZVZShzZXRNb250aChvLGUpLHIucHJvcHMpLFwicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtLXNlbGVjdGVkXCI6Z2V0TW9udGgobyk9PT1lJiZnZXRZZWFyKG8pPT09Z2V0WWVhcihwKSxcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLS1pbi1yYW5nZVwiOiRlKGEscyxlLG8pLFwicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtLXJhbmdlLXN0YXJ0XCI6ci5pc1JhbmdlU3RhcnRNb250aChlKSxcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLS1yYW5nZS1lbmRcIjpyLmlzUmFuZ2VFbmRNb250aChlKX0pfSkpLHBlKG1lKHIpLFwiZ2V0UXVhcnRlckNsYXNzTmFtZXNcIiwoZnVuY3Rpb24oZSl7dmFyIG49ci5wcm9wcyxvPW4uZGF5LGE9bi5zdGFydERhdGUscz1uLmVuZERhdGUscD1uLnNlbGVjdGVkLGk9bi5taW5EYXRlLGM9bi5tYXhEYXRlO3JldHVybiBjbGFzc25hbWVzKFwicmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci10ZXh0XCIsXCJyZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLVwiLmNvbmNhdChlKSx7XCJyZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLS1kaXNhYmxlZFwiOihpfHxjKSYmemUoc2V0UXVhcnRlcihvLGUpLHIucHJvcHMpLFwicmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci0tc2VsZWN0ZWRcIjpnZXRRdWFydGVyKG8pPT09ZSYmZ2V0WWVhcihvKT09PWdldFllYXIocCksXCJyZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLS1pbi1yYW5nZVwiOkdlKGEscyxlLG8pLFwicmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci0tcmFuZ2Utc3RhcnRcIjpyLmlzUmFuZ2VTdGFydFF1YXJ0ZXIoZSksXCJyZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLS1yYW5nZS1lbmRcIjpyLmlzUmFuZ2VFbmRRdWFydGVyKGUpfSl9KSkscGUobWUociksXCJyZW5kZXJNb250aHNcIiwoZnVuY3Rpb24oKXt2YXIgdD1yLnByb3BzLG49dC5zaG93RnVsbE1vbnRoWWVhclBpY2tlcixvPXQubG9jYWxlO3JldHVybiBbWzAsMSwyXSxbMyw0LDVdLFs2LDcsOF0sWzksMTAsMTFdXS5tYXAoKGZ1bmN0aW9uKHQsYSl7cmV0dXJuIFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtd3JhcHBlclwiLGtleTphfSx0Lm1hcCgoZnVuY3Rpb24odCxhKXtyZXR1cm4gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLHtrZXk6YSxvbkNsaWNrOmZ1bmN0aW9uKGUpe3Iub25Nb250aENsaWNrKGUsdCk7fSxjbGFzc05hbWU6ci5nZXRNb250aENsYXNzTmFtZXModCl9LG4/S2UodCxvKTpIZSh0LG8pKX0pKSl9KSl9KSkscGUobWUociksXCJyZW5kZXJRdWFydGVyc1wiLChmdW5jdGlvbigpe3JldHVybiBSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItd3JhcHBlclwifSxbMSwyLDMsNF0ubWFwKChmdW5jdGlvbih0LG4pe3JldHVybiBSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2tleTpuLG9uQ2xpY2s6ZnVuY3Rpb24oZSl7ci5vblF1YXJ0ZXJDbGljayhlLHQpO30sY2xhc3NOYW1lOnIuZ2V0UXVhcnRlckNsYXNzTmFtZXModCl9LFFlKHQsci5wcm9wcy5sb2NhbGUpKX0pKSl9KSkscGUobWUociksXCJnZXRDbGFzc05hbWVzXCIsKGZ1bmN0aW9uKCl7dmFyIGU9ci5wcm9wcyxuPWUuc2VsZWN0aW5nRGF0ZSxvPWUuc2VsZWN0c1N0YXJ0LGE9ZS5zZWxlY3RzRW5kLHM9ZS5zaG93TW9udGhZZWFyUGlja2VyLHA9ZS5zaG93UXVhcnRlclllYXJQaWNrZXI7cmV0dXJuIGNsYXNzbmFtZXMoXCJyZWFjdC1kYXRlcGlja2VyX19tb250aFwiLHtcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLS1zZWxlY3RpbmctcmFuZ2VcIjpuJiYob3x8YSl9LHtcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoUGlja2VyXCI6c30se1wicmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlclBpY2tlclwiOnB9KX0pKSxyfXJldHVybiBzZShvLFt7a2V5OlwicmVuZGVyXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnByb3BzLHI9dC5zaG93TW9udGhZZWFyUGlja2VyLG49dC5zaG93UXVhcnRlclllYXJQaWNrZXIsbz10LmRheSxhPXQuYXJpYUxhYmVsUHJlZml4LHM9dm9pZCAwPT09YT9cIm1vbnRoIFwiOmE7cmV0dXJuIFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOnRoaXMuZ2V0Q2xhc3NOYW1lcygpLG9uTW91c2VMZWF2ZTp0aGlzLmhhbmRsZU1vdXNlTGVhdmUsXCJhcmlhLWxhYmVsXCI6XCJcIi5jb25jYXQocyxcIiBcIikuY29uY2F0KF9lKG8sXCJ5eXl5LU1NXCIpKX0scj90aGlzLnJlbmRlck1vbnRocygpOm4/dGhpcy5yZW5kZXJRdWFydGVycygpOnRoaXMucmVuZGVyV2Vla3MoKSl9fV0pLG99KCksZ3Q9ZnVuY3Rpb24odCl7ZGUobixSZWFjdF9fZGVmYXVsdC5Db21wb25lbnQpO3ZhciByPXZlKG4pO2Z1bmN0aW9uIG4oKXt2YXIgdDtvZSh0aGlzLG4pO2Zvcih2YXIgbz1hcmd1bWVudHMubGVuZ3RoLHM9bmV3IEFycmF5KG8pLHA9MDtwPG87cCsrKXNbcF09YXJndW1lbnRzW3BdO3JldHVybiBwZShtZSh0PXIuY2FsbC5hcHBseShyLFt0aGlzXS5jb25jYXQocykpKSxcInN0YXRlXCIse2hlaWdodDpudWxsfSkscGUobWUodCksXCJoYW5kbGVDbGlja1wiLChmdW5jdGlvbihlKXsodC5wcm9wcy5taW5UaW1lfHx0LnByb3BzLm1heFRpbWUpJiZaZShlLHQucHJvcHMpfHx0LnByb3BzLmV4Y2x1ZGVUaW1lcyYmWGUoZSx0LnByb3BzLmV4Y2x1ZGVUaW1lcyl8fHQucHJvcHMuaW5jbHVkZVRpbWVzJiYhWGUoZSx0LnByb3BzLmluY2x1ZGVUaW1lcyl8fHQucHJvcHMub25DaGFuZ2UoZSk7fSkpLHBlKG1lKHQpLFwibGlDbGFzc2VzXCIsKGZ1bmN0aW9uKGUscixuKXt2YXIgbz1bXCJyZWFjdC1kYXRlcGlja2VyX190aW1lLWxpc3QtaXRlbVwiLHQucHJvcHMudGltZUNsYXNzTmFtZT90LnByb3BzLnRpbWVDbGFzc05hbWUoZSxyLG4pOnZvaWQgMF07cmV0dXJuIHQucHJvcHMuc2VsZWN0ZWQmJnI9PT1nZXRIb3VycyhlKSYmbj09PWdldE1pbnV0ZXMoZSkmJm8ucHVzaChcInJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtbGlzdC1pdGVtLS1zZWxlY3RlZFwiKSwoKHQucHJvcHMubWluVGltZXx8dC5wcm9wcy5tYXhUaW1lKSYmWmUoZSx0LnByb3BzKXx8dC5wcm9wcy5leGNsdWRlVGltZXMmJlhlKGUsdC5wcm9wcy5leGNsdWRlVGltZXMpfHx0LnByb3BzLmluY2x1ZGVUaW1lcyYmIVhlKGUsdC5wcm9wcy5pbmNsdWRlVGltZXMpKSYmby5wdXNoKFwicmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1saXN0LWl0ZW0tLWRpc2FibGVkXCIpLHQucHJvcHMuaW5qZWN0VGltZXMmJig2MCpnZXRIb3VycyhlKStnZXRNaW51dGVzKGUpKSV0LnByb3BzLmludGVydmFscyE9MCYmby5wdXNoKFwicmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1saXN0LWl0ZW0tLWluamVjdGVkXCIpLG8uam9pbihcIiBcIil9KSkscGUobWUodCksXCJyZW5kZXJUaW1lc1wiLChmdW5jdGlvbigpe2Zvcih2YXIgcj1bXSxuPXQucHJvcHMuZm9ybWF0P3QucHJvcHMuZm9ybWF0OlwicFwiLG89dC5wcm9wcy5pbnRlcnZhbHMscz10LnByb3BzLnNlbGVjdGVkfHx0LnByb3BzLm9wZW5Ub0RhdGV8fGdlKCkscD1nZXRIb3VycyhzKSxpPWdldE1pbnV0ZXMocyksYz1FZShnZSgpKSxsPTE0NDAvbyxkPXQucHJvcHMuaW5qZWN0VGltZXMmJnQucHJvcHMuaW5qZWN0VGltZXMuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS10fSkpLHU9MDt1PGw7dSsrKXt2YXIgaD1hZGRNaW51dGVzKGMsdSpvKTtpZihyLnB1c2goaCksZCl7dmFyIG09cHQoYyxoLHUsbyxkKTtyPXIuY29uY2F0KG0pO319cmV0dXJuIHIubWFwKChmdW5jdGlvbihyLG8pe3JldHVybiBSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwibGlcIix7a2V5Om8sb25DbGljazp0LmhhbmRsZUNsaWNrLmJpbmQobWUodCksciksY2xhc3NOYW1lOnQubGlDbGFzc2VzKHIscCxpKSxyZWY6ZnVuY3Rpb24oZSl7cD09PWdldEhvdXJzKHIpJiZpPj1nZXRNaW51dGVzKHIpJiYodC5jZW50ZXJMaT1lKTt9fSxfZShyLG4sdC5wcm9wcy5sb2NhbGUpKX0pKX0pKSx0fXJldHVybiBzZShuLFt7a2V5OlwiY29tcG9uZW50RGlkTW91bnRcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMubGlzdC5zY3JvbGxUb3A9bi5jYWxjQ2VudGVyUG9zaXRpb24odGhpcy5wcm9wcy5tb250aFJlZj90aGlzLnByb3BzLm1vbnRoUmVmLmNsaWVudEhlaWdodC10aGlzLmhlYWRlci5jbGllbnRIZWlnaHQ6dGhpcy5saXN0LmNsaWVudEhlaWdodCx0aGlzLmNlbnRlckxpKSx0aGlzLnByb3BzLm1vbnRoUmVmJiZ0aGlzLmhlYWRlciYmdGhpcy5zZXRTdGF0ZSh7aGVpZ2h0OnRoaXMucHJvcHMubW9udGhSZWYuY2xpZW50SGVpZ2h0LXRoaXMuaGVhZGVyLmNsaWVudEhlaWdodH0pO319LHtrZXk6XCJyZW5kZXJcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMscj10aGlzLnN0YXRlLmhlaWdodDtyZXR1cm4gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyX190aW1lLWNvbnRhaW5lciBcIi5jb25jYXQodGhpcy5wcm9wcy50b2RheUJ1dHRvbj9cInJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtY29udGFpbmVyLS13aXRoLXRvZGF5LWJ1dHRvblwiOlwiXCIpfSxSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXJfX2hlYWRlciByZWFjdC1kYXRlcGlja2VyX19oZWFkZXItLXRpbWVcIixyZWY6ZnVuY3Rpb24oZSl7dC5oZWFkZXI9ZTt9fSxSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXItdGltZV9faGVhZGVyXCJ9LHRoaXMucHJvcHMudGltZUNhcHRpb24pKSxSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXJfX3RpbWVcIn0sUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyX190aW1lLWJveFwifSxSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwidWxcIix7Y2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1saXN0XCIscmVmOmZ1bmN0aW9uKGUpe3QubGlzdD1lO30sc3R5bGU6cj97aGVpZ2h0OnJ9Ont9fSx0aGlzLnJlbmRlclRpbWVzKCkpKSkpfX1dLFt7a2V5OlwiZGVmYXVsdFByb3BzXCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHtpbnRlcnZhbHM6MzAsb25UaW1lQ2hhbmdlOmZ1bmN0aW9uKCl7fSx0b2RheUJ1dHRvbjpudWxsLHRpbWVDYXB0aW9uOlwiVGltZVwifX19XSksbn0oKTtwZShndCxcImNhbGNDZW50ZXJQb3NpdGlvblwiLChmdW5jdGlvbihlLHQpe3JldHVybiB0Lm9mZnNldFRvcC0oZS8yLXQuY2xpZW50SGVpZ2h0LzIpfSkpO3ZhciBidD1mdW5jdGlvbih0KXtkZShuLFJlYWN0X19kZWZhdWx0LkNvbXBvbmVudCk7dmFyIHI9dmUobik7ZnVuY3Rpb24gbihlKXt2YXIgdDtyZXR1cm4gb2UodGhpcyxuKSxwZShtZSh0PXIuY2FsbCh0aGlzLGUpKSxcImhhbmRsZVllYXJDbGlja1wiLChmdW5jdGlvbihlLHIpe3QucHJvcHMub25EYXlDbGljayYmdC5wcm9wcy5vbkRheUNsaWNrKGUscik7fSkpLHBlKG1lKHQpLFwib25ZZWFyQ2xpY2tcIiwoZnVuY3Rpb24oZSxyKXt2YXIgbjt0LmhhbmRsZVllYXJDbGljaygobj1zZXRZZWFyKHQucHJvcHMuZGF0ZSxyKSxzdGFydE9mWWVhcihuKSksZSk7fSkpLHR9cmV0dXJuIHNlKG4sW3trZXk6XCJyZW5kZXJcIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLHI9W10sbj10aGlzLnByb3BzLmRhdGUsbz1mdW5jdGlvbihuLG8pe3IucHVzaChSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIse29uQ2xpY2s6ZnVuY3Rpb24oZSl7dC5vblllYXJDbGljayhlLG4pO30sY2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9feWVhci1jb250YWluZXItdGV4dFwiLGtleTpufSxuKSk7fSxhPWdldFllYXIobiktMTEscz0wO2E8PWdldFllYXIobik7YSsrLHMrKylvKGEpO3JldHVybiBSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXJfX3llYXItY29udGFpbmVyXCJ9LHIpfX1dKSxufSgpLEN0PWZ1bmN0aW9uKHQpe2RlKG4sUmVhY3RfX2RlZmF1bHQuQ29tcG9uZW50KTt2YXIgcj12ZShuKTtmdW5jdGlvbiBuKHQpe3ZhciBvO3JldHVybiBvZSh0aGlzLG4pLHBlKG1lKG89ci5jYWxsKHRoaXMsdCkpLFwib25UaW1lQ2hhbmdlXCIsKGZ1bmN0aW9uKGUpe28uc2V0U3RhdGUoe3RpbWU6ZX0pO3ZhciB0PW5ldyBEYXRlO3Quc2V0SG91cnMoZS5zcGxpdChcIjpcIilbMF0pLHQuc2V0TWludXRlcyhlLnNwbGl0KFwiOlwiKVsxXSksby5wcm9wcy5vbkNoYW5nZSh0KTt9KSkscGUobWUobyksXCJyZW5kZXJUaW1lSW5wdXRcIiwoZnVuY3Rpb24oKXt2YXIgdD1vLnN0YXRlLnRpbWUscj1vLnByb3BzLG49ci50aW1lU3RyaW5nLGE9ci5jdXN0b21UaW1lSW5wdXQ7cmV0dXJuIGE/UmVhY3RfX2RlZmF1bHQuY2xvbmVFbGVtZW50KGEse3ZhbHVlOnQsb25DaGFuZ2U6by5vblRpbWVDaGFuZ2V9KTpSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIix7dHlwZTpcInRpbWVcIixjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyLXRpbWVfX2lucHV0XCIscGxhY2Vob2xkZXI6XCJUaW1lXCIsbmFtZTpcInRpbWUtaW5wdXRcIixyZXF1aXJlZDohMCx2YWx1ZTp0LG9uQ2hhbmdlOmZ1bmN0aW9uKGUpe28ub25UaW1lQ2hhbmdlKGUudGFyZ2V0LnZhbHVlfHxuKTt9fSl9KSksby5zdGF0ZT17dGltZTpvLnByb3BzLnRpbWVTdHJpbmd9LG99cmV0dXJuIHNlKG4sW3trZXk6XCJyZW5kZXJcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXJfX2lucHV0LXRpbWUtY29udGFpbmVyXCJ9LFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlci10aW1lX19jYXB0aW9uXCJ9LHRoaXMucHJvcHMudGltZUlucHV0TGFiZWwpLFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlci10aW1lX19pbnB1dC1jb250YWluZXJcIn0sUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyLXRpbWVfX2lucHV0XCJ9LHRoaXMucmVuZGVyVGltZUlucHV0KCkpKSl9fV0pLG59KCk7ZnVuY3Rpb24gX3QodCl7dmFyIHI9dC5jbGFzc05hbWUsbj10LmNoaWxkcmVuLG89dC5zaG93UG9wcGVyQXJyb3csYT10LmFycm93UHJvcHMscz12b2lkIDA9PT1hP3t9OmE7cmV0dXJuIFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOnJ9LG8mJlJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIixpZSh7Y2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9fdHJpYW5nbGVcIn0scykpLG4pfXZhciBTdD1bXCJyZWFjdC1kYXRlcGlja2VyX195ZWFyLXNlbGVjdFwiLFwicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtc2VsZWN0XCIsXCJyZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLXNlbGVjdFwiXSxNdD1mdW5jdGlvbihyKXtkZShvLFJlYWN0X19kZWZhdWx0LkNvbXBvbmVudCk7dmFyIG49dmUobyk7ZnVuY3Rpb24gbyhyKXt2YXIgYTtyZXR1cm4gb2UodGhpcyxvKSxwZShtZShhPW4uY2FsbCh0aGlzLHIpKSxcImhhbmRsZUNsaWNrT3V0c2lkZVwiLChmdW5jdGlvbihlKXthLnByb3BzLm9uQ2xpY2tPdXRzaWRlKGUpO30pKSxwZShtZShhKSxcInNldENsaWNrT3V0c2lkZVJlZlwiLChmdW5jdGlvbigpe3JldHVybiBhLmNvbnRhaW5lclJlZi5jdXJyZW50fSkpLHBlKG1lKGEpLFwiaGFuZGxlRHJvcGRvd25Gb2N1c1wiLChmdW5jdGlvbihlKXsoZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sdD0oZS5jbGFzc05hbWV8fFwiXCIpLnNwbGl0KC9cXHMrLyk7cmV0dXJuIFN0LnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiB0LmluZGV4T2YoZSk+PTB9KSl9KShlLnRhcmdldCkmJmEucHJvcHMub25Ecm9wZG93bkZvY3VzKCk7fSkpLHBlKG1lKGEpLFwiZ2V0RGF0ZUluVmlld1wiLChmdW5jdGlvbigpe3ZhciBlPWEucHJvcHMsdD1lLnByZVNlbGVjdGlvbixyPWUuc2VsZWN0ZWQsbj1lLm9wZW5Ub0RhdGUsbz1vdChhLnByb3BzKSxzPWF0KGEucHJvcHMpLHA9Z2UoKSxpPW58fHJ8fHQ7cmV0dXJuIGl8fChvJiZpc0JlZm9yZShwLG8pP286cyYmaXNBZnRlcihwLHMpP3M6cCl9KSkscGUobWUoYSksXCJpbmNyZWFzZU1vbnRoXCIsKGZ1bmN0aW9uKCl7YS5zZXRTdGF0ZSgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kYXRlO3JldHVybiB7ZGF0ZTphZGRNb250aHModCwxKX19KSwoZnVuY3Rpb24oKXtyZXR1cm4gYS5oYW5kbGVNb250aENoYW5nZShhLnN0YXRlLmRhdGUpfSkpO30pKSxwZShtZShhKSxcImRlY3JlYXNlTW9udGhcIiwoZnVuY3Rpb24oKXthLnNldFN0YXRlKChmdW5jdGlvbihlKXt2YXIgdD1lLmRhdGU7cmV0dXJuIHtkYXRlOnN1Yk1vbnRocyh0LDEpfX0pLChmdW5jdGlvbigpe3JldHVybiBhLmhhbmRsZU1vbnRoQ2hhbmdlKGEuc3RhdGUuZGF0ZSl9KSk7fSkpLHBlKG1lKGEpLFwiaGFuZGxlRGF5Q2xpY2tcIiwoZnVuY3Rpb24oZSx0LHIpe3JldHVybiBhLnByb3BzLm9uU2VsZWN0KGUsdCxyKX0pKSxwZShtZShhKSxcImhhbmRsZURheU1vdXNlRW50ZXJcIiwoZnVuY3Rpb24oZSl7YS5zZXRTdGF0ZSh7c2VsZWN0aW5nRGF0ZTplfSksYS5wcm9wcy5vbkRheU1vdXNlRW50ZXImJmEucHJvcHMub25EYXlNb3VzZUVudGVyKGUpO30pKSxwZShtZShhKSxcImhhbmRsZU1vbnRoTW91c2VMZWF2ZVwiLChmdW5jdGlvbigpe2Euc2V0U3RhdGUoe3NlbGVjdGluZ0RhdGU6bnVsbH0pLGEucHJvcHMub25Nb250aE1vdXNlTGVhdmUmJmEucHJvcHMub25Nb250aE1vdXNlTGVhdmUoKTt9KSkscGUobWUoYSksXCJoYW5kbGVZZWFyQ2hhbmdlXCIsKGZ1bmN0aW9uKGUpe2EucHJvcHMub25ZZWFyQ2hhbmdlJiZhLnByb3BzLm9uWWVhckNoYW5nZShlKTt9KSkscGUobWUoYSksXCJoYW5kbGVNb250aENoYW5nZVwiLChmdW5jdGlvbihlKXthLnByb3BzLm9uTW9udGhDaGFuZ2UmJmEucHJvcHMub25Nb250aENoYW5nZShlKSxhLnByb3BzLmFkanVzdERhdGVPbkNoYW5nZSYmKGEucHJvcHMub25TZWxlY3QmJmEucHJvcHMub25TZWxlY3QoZSksYS5wcm9wcy5zZXRPcGVuJiZhLnByb3BzLnNldE9wZW4oITApKSxhLnByb3BzLnNldFByZVNlbGVjdGlvbiYmYS5wcm9wcy5zZXRQcmVTZWxlY3Rpb24oZSk7fSkpLHBlKG1lKGEpLFwiaGFuZGxlTW9udGhZZWFyQ2hhbmdlXCIsKGZ1bmN0aW9uKGUpe2EuaGFuZGxlWWVhckNoYW5nZShlKSxhLmhhbmRsZU1vbnRoQ2hhbmdlKGUpO30pKSxwZShtZShhKSxcImNoYW5nZVllYXJcIiwoZnVuY3Rpb24oZSl7YS5zZXRTdGF0ZSgoZnVuY3Rpb24odCl7dmFyIHI9dC5kYXRlO3JldHVybiB7ZGF0ZTpzZXRZZWFyKHIsZSl9fSksKGZ1bmN0aW9uKCl7cmV0dXJuIGEuaGFuZGxlWWVhckNoYW5nZShhLnN0YXRlLmRhdGUpfSkpO30pKSxwZShtZShhKSxcImNoYW5nZU1vbnRoXCIsKGZ1bmN0aW9uKGUpe2Euc2V0U3RhdGUoKGZ1bmN0aW9uKHQpe3ZhciByPXQuZGF0ZTtyZXR1cm4ge2RhdGU6c2V0TW9udGgocixlKX19KSwoZnVuY3Rpb24oKXtyZXR1cm4gYS5oYW5kbGVNb250aENoYW5nZShhLnN0YXRlLmRhdGUpfSkpO30pKSxwZShtZShhKSxcImNoYW5nZU1vbnRoWWVhclwiLChmdW5jdGlvbihlKXthLnNldFN0YXRlKChmdW5jdGlvbih0KXt2YXIgcj10LmRhdGU7cmV0dXJuIHtkYXRlOnNldFllYXIoc2V0TW9udGgocixnZXRNb250aChlKSksZ2V0WWVhcihlKSl9fSksKGZ1bmN0aW9uKCl7cmV0dXJuIGEuaGFuZGxlTW9udGhZZWFyQ2hhbmdlKGEuc3RhdGUuZGF0ZSl9KSk7fSkpLHBlKG1lKGEpLFwiaGVhZGVyXCIsKGZ1bmN0aW9uKCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOmEuc3RhdGUuZGF0ZSxuPU5lKHIsYS5wcm9wcy5sb2NhbGUpLG89W107cmV0dXJuIGEucHJvcHMuc2hvd1dlZWtOdW1iZXJzJiZvLnB1c2goUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLHtrZXk6XCJXXCIsY2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LW5hbWVcIn0sYS5wcm9wcy53ZWVrTGFiZWx8fFwiI1wiKSksby5jb25jYXQoWzAsMSwyLDMsNCw1LDZdLm1hcCgoZnVuY3Rpb24ocil7dmFyIG89YWRkRGF5cyhuLHIpLHM9YS5mb3JtYXRXZWVrZGF5KG8sYS5wcm9wcy5sb2NhbGUpLGk9YS5wcm9wcy53ZWVrRGF5Q2xhc3NOYW1lP2EucHJvcHMud2Vla0RheUNsYXNzTmFtZShvKTp2b2lkIDA7cmV0dXJuIFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7a2V5OnIsY2xhc3NOYW1lOmNsYXNzbmFtZXMoXCJyZWFjdC1kYXRlcGlja2VyX19kYXktbmFtZVwiLGkpfSxzKX0pKSl9KSkscGUobWUoYSksXCJmb3JtYXRXZWVrZGF5XCIsKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEucHJvcHMuZm9ybWF0V2Vla0RheT9mdW5jdGlvbihlLHQscil7cmV0dXJuIHQoX2UoZSxcIkVFRUVcIixyKSl9KGUsYS5wcm9wcy5mb3JtYXRXZWVrRGF5LHQpOmEucHJvcHMudXNlV2Vla2RheXNTaG9ydD9mdW5jdGlvbihlLHQpe3JldHVybiBfZShlLFwiRUVFXCIsdCl9KGUsdCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gX2UoZSxcIkVFRUVFRVwiLHQpfShlLHQpfSkpLHBlKG1lKGEpLFwiZGVjcmVhc2VZZWFyXCIsKGZ1bmN0aW9uKCl7YS5zZXRTdGF0ZSgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kYXRlO3JldHVybiB7ZGF0ZTpzdWJZZWFycyh0LGEucHJvcHMuc2hvd1llYXJQaWNrZXI/MTE6MSl9fSksKGZ1bmN0aW9uKCl7cmV0dXJuIGEuaGFuZGxlWWVhckNoYW5nZShhLnN0YXRlLmRhdGUpfSkpO30pKSxwZShtZShhKSxcInJlbmRlclByZXZpb3VzQnV0dG9uXCIsKGZ1bmN0aW9uKCl7aWYoIWEucHJvcHMucmVuZGVyQ3VzdG9tSGVhZGVyKXt2YXIgdD1hLnByb3BzLnNob3dNb250aFllYXJQaWNrZXI/cnQoYS5zdGF0ZS5kYXRlLGEucHJvcHMpOmV0KGEuc3RhdGUuZGF0ZSxhLnByb3BzKTtpZigoYS5wcm9wcy5mb3JjZVNob3dNb250aE5hdmlnYXRpb258fGEucHJvcHMuc2hvd0Rpc2FibGVkTW9udGhOYXZpZ2F0aW9ufHwhdCkmJiFhLnByb3BzLnNob3dUaW1lU2VsZWN0T25seSl7dmFyIHI9W1wicmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvblwiLFwicmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tcHJldmlvdXNcIl0sbj1hLmRlY3JlYXNlTW9udGg7KGEucHJvcHMuc2hvd01vbnRoWWVhclBpY2tlcnx8YS5wcm9wcy5zaG93UXVhcnRlclllYXJQaWNrZXJ8fGEucHJvcHMuc2hvd1llYXJQaWNrZXIpJiYobj1hLmRlY3JlYXNlWWVhciksdCYmYS5wcm9wcy5zaG93RGlzYWJsZWRNb250aE5hdmlnYXRpb24mJihyLnB1c2goXCJyZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1wcmV2aW91cy0tZGlzYWJsZWRcIiksbj1udWxsKTt2YXIgbz1hLnByb3BzLnNob3dNb250aFllYXJQaWNrZXJ8fGEucHJvcHMuc2hvd1F1YXJ0ZXJZZWFyUGlja2VyLHM9YS5wcm9wcyxwPXMucHJldmlvdXNNb250aEFyaWFMYWJlbCxpPXZvaWQgMD09PXA/XCJQcmV2aW91cyBNb250aFwiOnAsYz1zLnByZXZpb3VzWWVhckFyaWFMYWJlbCxsPXZvaWQgMD09PWM/XCJQcmV2aW91cyBZZWFyXCI6YztyZXR1cm4gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLHt0eXBlOlwiYnV0dG9uXCIsY2xhc3NOYW1lOnIuam9pbihcIiBcIiksb25DbGljazpuLFwiYXJpYS1sYWJlbFwiOm8/bDppfSxvP2EucHJvcHMucHJldmlvdXNZZWFyQnV0dG9uTGFiZWw6YS5wcm9wcy5wcmV2aW91c01vbnRoQnV0dG9uTGFiZWwpfX19KSkscGUobWUoYSksXCJpbmNyZWFzZVllYXJcIiwoZnVuY3Rpb24oKXthLnNldFN0YXRlKChmdW5jdGlvbihlKXt2YXIgdD1lLmRhdGU7cmV0dXJuIHtkYXRlOmFkZFllYXJzKHQsYS5wcm9wcy5zaG93WWVhclBpY2tlcj8xMToxKX19KSwoZnVuY3Rpb24oKXtyZXR1cm4gYS5oYW5kbGVZZWFyQ2hhbmdlKGEuc3RhdGUuZGF0ZSl9KSk7fSkpLHBlKG1lKGEpLFwicmVuZGVyTmV4dEJ1dHRvblwiLChmdW5jdGlvbigpe2lmKCFhLnByb3BzLnJlbmRlckN1c3RvbUhlYWRlcil7dmFyIHQ9YS5wcm9wcy5zaG93TW9udGhZZWFyUGlja2VyP250KGEuc3RhdGUuZGF0ZSxhLnByb3BzKTp0dChhLnN0YXRlLmRhdGUsYS5wcm9wcyk7aWYoKGEucHJvcHMuZm9yY2VTaG93TW9udGhOYXZpZ2F0aW9ufHxhLnByb3BzLnNob3dEaXNhYmxlZE1vbnRoTmF2aWdhdGlvbnx8IXQpJiYhYS5wcm9wcy5zaG93VGltZVNlbGVjdE9ubHkpe3ZhciByPVtcInJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb25cIixcInJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLW5leHRcIl07YS5wcm9wcy5zaG93VGltZVNlbGVjdCYmci5wdXNoKFwicmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tbmV4dC0td2l0aC10aW1lXCIpLGEucHJvcHMudG9kYXlCdXR0b24mJnIucHVzaChcInJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLW5leHQtLXdpdGgtdG9kYXktYnV0dG9uXCIpO3ZhciBuPWEuaW5jcmVhc2VNb250aDsoYS5wcm9wcy5zaG93TW9udGhZZWFyUGlja2VyfHxhLnByb3BzLnNob3dRdWFydGVyWWVhclBpY2tlcnx8YS5wcm9wcy5zaG93WWVhclBpY2tlcikmJihuPWEuaW5jcmVhc2VZZWFyKSx0JiZhLnByb3BzLnNob3dEaXNhYmxlZE1vbnRoTmF2aWdhdGlvbiYmKHIucHVzaChcInJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLW5leHQtLWRpc2FibGVkXCIpLG49bnVsbCk7dmFyIG89YS5wcm9wcy5zaG93TW9udGhZZWFyUGlja2VyfHxhLnByb3BzLnNob3dRdWFydGVyWWVhclBpY2tlcixzPWEucHJvcHMscD1zLm5leHRNb250aEFyaWFMYWJlbCxpPXZvaWQgMD09PXA/XCJOZXh0IE1vbnRoXCI6cCxjPXMubmV4dFllYXJBcmlhTGFiZWwsbD12b2lkIDA9PT1jP1wiTmV4dCBZZWFyXCI6YztyZXR1cm4gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLHt0eXBlOlwiYnV0dG9uXCIsY2xhc3NOYW1lOnIuam9pbihcIiBcIiksb25DbGljazpuLFwiYXJpYS1sYWJlbFwiOm8/bDppfSxvP2EucHJvcHMubmV4dFllYXJCdXR0b25MYWJlbDphLnByb3BzLm5leHRNb250aEJ1dHRvbkxhYmVsKX19fSkpLHBlKG1lKGEpLFwicmVuZGVyQ3VycmVudE1vbnRoXCIsKGZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOmEuc3RhdGUuZGF0ZSxyPVtcInJlYWN0LWRhdGVwaWNrZXJfX2N1cnJlbnQtbW9udGhcIl07cmV0dXJuIGEucHJvcHMuc2hvd1llYXJEcm9wZG93biYmci5wdXNoKFwicmVhY3QtZGF0ZXBpY2tlcl9fY3VycmVudC1tb250aC0taGFzWWVhckRyb3Bkb3duXCIpLGEucHJvcHMuc2hvd01vbnRoRHJvcGRvd24mJnIucHVzaChcInJlYWN0LWRhdGVwaWNrZXJfX2N1cnJlbnQtbW9udGgtLWhhc01vbnRoRHJvcGRvd25cIiksYS5wcm9wcy5zaG93TW9udGhZZWFyRHJvcGRvd24mJnIucHVzaChcInJlYWN0LWRhdGVwaWNrZXJfX2N1cnJlbnQtbW9udGgtLWhhc01vbnRoWWVhckRyb3Bkb3duXCIpLFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOnIuam9pbihcIiBcIil9LF9lKHQsYS5wcm9wcy5kYXRlRm9ybWF0LGEucHJvcHMubG9jYWxlKSl9KSkscGUobWUoYSksXCJyZW5kZXJZZWFyRHJvcGRvd25cIiwoZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2lmKGEucHJvcHMuc2hvd1llYXJEcm9wZG93biYmIXQpcmV0dXJuIFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoZHQse2FkanVzdERhdGVPbkNoYW5nZTphLnByb3BzLmFkanVzdERhdGVPbkNoYW5nZSxkYXRlOmEuc3RhdGUuZGF0ZSxvblNlbGVjdDphLnByb3BzLm9uU2VsZWN0LHNldE9wZW46YS5wcm9wcy5zZXRPcGVuLGRyb3Bkb3duTW9kZTphLnByb3BzLmRyb3Bkb3duTW9kZSxvbkNoYW5nZTphLmNoYW5nZVllYXIsbWluRGF0ZTphLnByb3BzLm1pbkRhdGUsbWF4RGF0ZTphLnByb3BzLm1heERhdGUseWVhcjpnZXRZZWFyKGEuc3RhdGUuZGF0ZSksc2Nyb2xsYWJsZVllYXJEcm9wZG93bjphLnByb3BzLnNjcm9sbGFibGVZZWFyRHJvcGRvd24seWVhckRyb3Bkb3duSXRlbU51bWJlcjphLnByb3BzLnllYXJEcm9wZG93bkl0ZW1OdW1iZXJ9KX0pKSxwZShtZShhKSxcInJlbmRlck1vbnRoRHJvcGRvd25cIiwoZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2lmKGEucHJvcHMuc2hvd01vbnRoRHJvcGRvd24mJiF0KXJldHVybiBSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KGh0LHtkcm9wZG93bk1vZGU6YS5wcm9wcy5kcm9wZG93bk1vZGUsbG9jYWxlOmEucHJvcHMubG9jYWxlLG9uQ2hhbmdlOmEuY2hhbmdlTW9udGgsbW9udGg6Z2V0TW9udGgoYS5zdGF0ZS5kYXRlKSx1c2VTaG9ydE1vbnRoSW5Ecm9wZG93bjphLnByb3BzLnVzZVNob3J0TW9udGhJbkRyb3Bkb3dufSl9KSkscGUobWUoYSksXCJyZW5kZXJNb250aFllYXJEcm9wZG93blwiLChmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07aWYoYS5wcm9wcy5zaG93TW9udGhZZWFyRHJvcGRvd24mJiF0KXJldHVybiBSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KHZ0LHtkcm9wZG93bk1vZGU6YS5wcm9wcy5kcm9wZG93bk1vZGUsbG9jYWxlOmEucHJvcHMubG9jYWxlLGRhdGVGb3JtYXQ6YS5wcm9wcy5kYXRlRm9ybWF0LG9uQ2hhbmdlOmEuY2hhbmdlTW9udGhZZWFyLG1pbkRhdGU6YS5wcm9wcy5taW5EYXRlLG1heERhdGU6YS5wcm9wcy5tYXhEYXRlLGRhdGU6YS5zdGF0ZS5kYXRlLHNjcm9sbGFibGVNb250aFllYXJEcm9wZG93bjphLnByb3BzLnNjcm9sbGFibGVNb250aFllYXJEcm9wZG93bn0pfSkpLHBlKG1lKGEpLFwicmVuZGVyVG9kYXlCdXR0b25cIiwoZnVuY3Rpb24oKXtpZihhLnByb3BzLnRvZGF5QnV0dG9uJiYhYS5wcm9wcy5zaG93VGltZVNlbGVjdE9ubHkpcmV0dXJuIFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9fdG9kYXktYnV0dG9uXCIsb25DbGljazpmdW5jdGlvbihlKXtyZXR1cm4gYS5wcm9wcy5vblNlbGVjdChzdGFydE9mRGF5KGdlKCkpLGUpfX0sYS5wcm9wcy50b2RheUJ1dHRvbil9KSkscGUobWUoYSksXCJyZW5kZXJEZWZhdWx0SGVhZGVyXCIsKGZ1bmN0aW9uKHQpe3ZhciByPXQubW9udGhEYXRlLG49dC5pO3JldHVybiBSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXJfX2hlYWRlclwifSxhLnJlbmRlckN1cnJlbnRNb250aChyKSxSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXJfX2hlYWRlcl9fZHJvcGRvd24gcmVhY3QtZGF0ZXBpY2tlcl9faGVhZGVyX19kcm9wZG93bi0tXCIuY29uY2F0KGEucHJvcHMuZHJvcGRvd25Nb2RlKSxvbkZvY3VzOmEuaGFuZGxlRHJvcGRvd25Gb2N1c30sYS5yZW5kZXJNb250aERyb3Bkb3duKDAhPT1uKSxhLnJlbmRlck1vbnRoWWVhckRyb3Bkb3duKDAhPT1uKSxhLnJlbmRlclllYXJEcm9wZG93bigwIT09bikpLFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LW5hbWVzXCJ9LGEuaGVhZGVyKHIpKSl9KSkscGUobWUoYSksXCJyZW5kZXJDdXN0b21IZWFkZXJcIiwoZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30scj10Lm1vbnRoRGF0ZSxuPXQuaTtpZigwIT09biYmdm9pZCAwIT09bilyZXR1cm4gbnVsbDt2YXIgbz1ldChhLnN0YXRlLmRhdGUsYS5wcm9wcykscz10dChhLnN0YXRlLmRhdGUsYS5wcm9wcykscD1ydChhLnN0YXRlLmRhdGUsYS5wcm9wcyksaT1udChhLnN0YXRlLmRhdGUsYS5wcm9wcyksYz0hYS5wcm9wcy5zaG93TW9udGhZZWFyUGlja2VyJiYhYS5wcm9wcy5zaG93UXVhcnRlclllYXJQaWNrZXImJiFhLnByb3BzLnNob3dZZWFyUGlja2VyO3JldHVybiBSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXJfX2hlYWRlciByZWFjdC1kYXRlcGlja2VyX19oZWFkZXItLWN1c3RvbVwiLG9uRm9jdXM6YS5wcm9wcy5vbkRyb3Bkb3duRm9jdXN9LGEucHJvcHMucmVuZGVyQ3VzdG9tSGVhZGVyKGxlKGxlKHt9LGEuc3RhdGUpLHt9LHtjaGFuZ2VNb250aDphLmNoYW5nZU1vbnRoLGNoYW5nZVllYXI6YS5jaGFuZ2VZZWFyLGRlY3JlYXNlTW9udGg6YS5kZWNyZWFzZU1vbnRoLGluY3JlYXNlTW9udGg6YS5pbmNyZWFzZU1vbnRoLGRlY3JlYXNlWWVhcjphLmRlY3JlYXNlWWVhcixpbmNyZWFzZVllYXI6YS5pbmNyZWFzZVllYXIscHJldk1vbnRoQnV0dG9uRGlzYWJsZWQ6byxuZXh0TW9udGhCdXR0b25EaXNhYmxlZDpzLHByZXZZZWFyQnV0dG9uRGlzYWJsZWQ6cCxuZXh0WWVhckJ1dHRvbkRpc2FibGVkOml9KSksYyYmUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyX19kYXktbmFtZXNcIn0sYS5oZWFkZXIocikpKX0pKSxwZShtZShhKSxcInJlbmRlclllYXJIZWFkZXJcIiwoZnVuY3Rpb24oKXtyZXR1cm4gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyX19oZWFkZXIgcmVhY3QtZGF0ZXBpY2tlci15ZWFyLWhlYWRlclwifSxhLnByb3BzLnNob3dZZWFyUGlja2VyP1wiXCIuY29uY2F0KGdldFllYXIoYS5zdGF0ZS5kYXRlKS0xMSxcIiAtIFwiKS5jb25jYXQoZ2V0WWVhcihhLnN0YXRlLmRhdGUpKTpnZXRZZWFyKGEuc3RhdGUuZGF0ZSkpfSkpLHBlKG1lKGEpLFwicmVuZGVySGVhZGVyXCIsKGZ1bmN0aW9uKGUpe3N3aXRjaCghMCl7Y2FzZSB2b2lkIDAhPT1hLnByb3BzLnJlbmRlckN1c3RvbUhlYWRlcjpyZXR1cm4gYS5yZW5kZXJDdXN0b21IZWFkZXIoZSk7Y2FzZSBhLnByb3BzLnNob3dNb250aFllYXJQaWNrZXJ8fGEucHJvcHMuc2hvd1F1YXJ0ZXJZZWFyUGlja2VyfHxhLnByb3BzLnNob3dZZWFyUGlja2VyOnJldHVybiBhLnJlbmRlclllYXJIZWFkZXIoZSk7ZGVmYXVsdDpyZXR1cm4gYS5yZW5kZXJEZWZhdWx0SGVhZGVyKGUpfX0pKSxwZShtZShhKSxcInJlbmRlck1vbnRoc1wiLChmdW5jdGlvbigpe2lmKCFhLnByb3BzLnNob3dUaW1lU2VsZWN0T25seSYmIWEucHJvcHMuc2hvd1llYXJQaWNrZXIpe2Zvcih2YXIgdD1bXSxyPWEucHJvcHMuc2hvd1ByZXZpb3VzTW9udGhzP2EucHJvcHMubW9udGhzU2hvd24tMTowLG49c3ViTW9udGhzKGEuc3RhdGUuZGF0ZSxyKSxvPTA7bzxhLnByb3BzLm1vbnRoc1Nob3duOysrbyl7dmFyIHM9by1hLnByb3BzLm1vbnRoU2VsZWN0ZWRJbixwPWFkZE1vbnRocyhuLHMpLGk9XCJtb250aC1cIi5jb25jYXQobyk7dC5wdXNoKFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7a2V5OmkscmVmOmZ1bmN0aW9uKGUpe2EubW9udGhDb250YWluZXI9ZTt9LGNsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLWNvbnRhaW5lclwifSxhLnJlbmRlckhlYWRlcih7bW9udGhEYXRlOnAsaTpvfSksUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChrdCx7Y2hvb3NlRGF5QXJpYUxhYmVsUHJlZml4OmEucHJvcHMuY2hvb3NlRGF5QXJpYUxhYmVsUHJlZml4LGRpc2FibGVkRGF5QXJpYUxhYmVsUHJlZml4OmEucHJvcHMuZGlzYWJsZWREYXlBcmlhTGFiZWxQcmVmaXgsd2Vla0FyaWFMYWJlbFByZWZpeDphLnByb3BzLndlZWtBcmlhTGFiZWxQcmVmaXgsb25DaGFuZ2U6YS5jaGFuZ2VNb250aFllYXIsZGF5OnAsZGF5Q2xhc3NOYW1lOmEucHJvcHMuZGF5Q2xhc3NOYW1lLG1vbnRoQ2xhc3NOYW1lOmEucHJvcHMubW9udGhDbGFzc05hbWUsb25EYXlDbGljazphLmhhbmRsZURheUNsaWNrLGhhbmRsZU9uS2V5RG93bjphLnByb3BzLmhhbmRsZU9uS2V5RG93bixvbkRheU1vdXNlRW50ZXI6YS5oYW5kbGVEYXlNb3VzZUVudGVyLG9uTW91c2VMZWF2ZTphLmhhbmRsZU1vbnRoTW91c2VMZWF2ZSxvbldlZWtTZWxlY3Q6YS5wcm9wcy5vbldlZWtTZWxlY3Qsb3JkZXJJbkRpc3BsYXk6byxmb3JtYXRXZWVrTnVtYmVyOmEucHJvcHMuZm9ybWF0V2Vla051bWJlcixsb2NhbGU6YS5wcm9wcy5sb2NhbGUsbWluRGF0ZTphLnByb3BzLm1pbkRhdGUsbWF4RGF0ZTphLnByb3BzLm1heERhdGUsZXhjbHVkZURhdGVzOmEucHJvcHMuZXhjbHVkZURhdGVzLGhpZ2hsaWdodERhdGVzOmEucHJvcHMuaGlnaGxpZ2h0RGF0ZXMsc2VsZWN0aW5nRGF0ZTphLnN0YXRlLnNlbGVjdGluZ0RhdGUsaW5jbHVkZURhdGVzOmEucHJvcHMuaW5jbHVkZURhdGVzLGlubGluZTphLnByb3BzLmlubGluZSxmaXhlZEhlaWdodDphLnByb3BzLmZpeGVkSGVpZ2h0LGZpbHRlckRhdGU6YS5wcm9wcy5maWx0ZXJEYXRlLHByZVNlbGVjdGlvbjphLnByb3BzLnByZVNlbGVjdGlvbixzZWxlY3RlZDphLnByb3BzLnNlbGVjdGVkLHNlbGVjdHNTdGFydDphLnByb3BzLnNlbGVjdHNTdGFydCxzZWxlY3RzRW5kOmEucHJvcHMuc2VsZWN0c0VuZCxzaG93V2Vla051bWJlcnM6YS5wcm9wcy5zaG93V2Vla051bWJlcnMsc3RhcnREYXRlOmEucHJvcHMuc3RhcnREYXRlLGVuZERhdGU6YS5wcm9wcy5lbmREYXRlLHBlZWtOZXh0TW9udGg6YS5wcm9wcy5wZWVrTmV4dE1vbnRoLHNldE9wZW46YS5wcm9wcy5zZXRPcGVuLHNob3VsZENsb3NlT25TZWxlY3Q6YS5wcm9wcy5zaG91bGRDbG9zZU9uU2VsZWN0LHJlbmRlckRheUNvbnRlbnRzOmEucHJvcHMucmVuZGVyRGF5Q29udGVudHMsZGlzYWJsZWRLZXlib2FyZE5hdmlnYXRpb246YS5wcm9wcy5kaXNhYmxlZEtleWJvYXJkTmF2aWdhdGlvbixzaG93TW9udGhZZWFyUGlja2VyOmEucHJvcHMuc2hvd01vbnRoWWVhclBpY2tlcixzaG93RnVsbE1vbnRoWWVhclBpY2tlcjphLnByb3BzLnNob3dGdWxsTW9udGhZZWFyUGlja2VyLHNob3dZZWFyUGlja2VyOmEucHJvcHMuc2hvd1llYXJQaWNrZXIsc2hvd1F1YXJ0ZXJZZWFyUGlja2VyOmEucHJvcHMuc2hvd1F1YXJ0ZXJZZWFyUGlja2VyLGlzSW5wdXRGb2N1c2VkOmEucHJvcHMuaXNJbnB1dEZvY3VzZWQsY29udGFpbmVyUmVmOmEuY29udGFpbmVyUmVmfSkpKTt9cmV0dXJuIHR9fSkpLHBlKG1lKGEpLFwicmVuZGVyWWVhcnNcIiwoZnVuY3Rpb24oKXtpZighYS5wcm9wcy5zaG93VGltZVNlbGVjdE9ubHkpcmV0dXJuIGEucHJvcHMuc2hvd1llYXJQaWNrZXI/UmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyX195ZWFyXCJ9LGEucmVuZGVySGVhZGVyKCksUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChidCx7b25EYXlDbGljazphLmhhbmRsZURheUNsaWNrLGRhdGU6YS5zdGF0ZS5kYXRlfSkpOnZvaWQgMH0pKSxwZShtZShhKSxcInJlbmRlclRpbWVTZWN0aW9uXCIsKGZ1bmN0aW9uKCl7aWYoYS5wcm9wcy5zaG93VGltZVNlbGVjdCYmKGEuc3RhdGUubW9udGhDb250YWluZXJ8fGEucHJvcHMuc2hvd1RpbWVTZWxlY3RPbmx5KSlyZXR1cm4gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChndCx7c2VsZWN0ZWQ6YS5wcm9wcy5zZWxlY3RlZCxvcGVuVG9EYXRlOmEucHJvcHMub3BlblRvRGF0ZSxvbkNoYW5nZTphLnByb3BzLm9uVGltZUNoYW5nZSx0aW1lQ2xhc3NOYW1lOmEucHJvcHMudGltZUNsYXNzTmFtZSxmb3JtYXQ6YS5wcm9wcy50aW1lRm9ybWF0LGluY2x1ZGVUaW1lczphLnByb3BzLmluY2x1ZGVUaW1lcyxpbnRlcnZhbHM6YS5wcm9wcy50aW1lSW50ZXJ2YWxzLG1pblRpbWU6YS5wcm9wcy5taW5UaW1lLG1heFRpbWU6YS5wcm9wcy5tYXhUaW1lLGV4Y2x1ZGVUaW1lczphLnByb3BzLmV4Y2x1ZGVUaW1lcyx0aW1lQ2FwdGlvbjphLnByb3BzLnRpbWVDYXB0aW9uLHRvZGF5QnV0dG9uOmEucHJvcHMudG9kYXlCdXR0b24sc2hvd01vbnRoRHJvcGRvd246YS5wcm9wcy5zaG93TW9udGhEcm9wZG93bixzaG93TW9udGhZZWFyRHJvcGRvd246YS5wcm9wcy5zaG93TW9udGhZZWFyRHJvcGRvd24sc2hvd1llYXJEcm9wZG93bjphLnByb3BzLnNob3dZZWFyRHJvcGRvd24sd2l0aFBvcnRhbDphLnByb3BzLndpdGhQb3J0YWwsbW9udGhSZWY6YS5zdGF0ZS5tb250aENvbnRhaW5lcixpbmplY3RUaW1lczphLnByb3BzLmluamVjdFRpbWVzLGxvY2FsZTphLnByb3BzLmxvY2FsZX0pfSkpLHBlKG1lKGEpLFwicmVuZGVySW5wdXRUaW1lU2VjdGlvblwiLChmdW5jdGlvbigpe3ZhciB0PW5ldyBEYXRlKGEucHJvcHMuc2VsZWN0ZWQpLHI9XCJcIi5jb25jYXQoaXQodC5nZXRIb3VycygpKSxcIjpcIikuY29uY2F0KGl0KHQuZ2V0TWludXRlcygpKSk7aWYoYS5wcm9wcy5zaG93VGltZUlucHV0KXJldHVybiBSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KEN0LHt0aW1lU3RyaW5nOnIsdGltZUlucHV0TGFiZWw6YS5wcm9wcy50aW1lSW5wdXRMYWJlbCxvbkNoYW5nZTphLnByb3BzLm9uVGltZUNoYW5nZSxjdXN0b21UaW1lSW5wdXQ6YS5wcm9wcy5jdXN0b21UaW1lSW5wdXR9KX0pKSxhLmNvbnRhaW5lclJlZj1SZWFjdF9fZGVmYXVsdC5jcmVhdGVSZWYoKSxhLnN0YXRlPXtkYXRlOmEuZ2V0RGF0ZUluVmlldygpLHNlbGVjdGluZ0RhdGU6bnVsbCxtb250aENvbnRhaW5lcjpudWxsfSxhfXJldHVybiBzZShvLG51bGwsW3trZXk6XCJkZWZhdWx0UHJvcHNcIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ge29uRHJvcGRvd25Gb2N1czpmdW5jdGlvbigpe30sbW9udGhzU2hvd246MSxtb250aFNlbGVjdGVkSW46MCxmb3JjZVNob3dNb250aE5hdmlnYXRpb246ITEsdGltZUNhcHRpb246XCJUaW1lXCIscHJldmlvdXNZZWFyQnV0dG9uTGFiZWw6XCJQcmV2aW91cyBZZWFyXCIsbmV4dFllYXJCdXR0b25MYWJlbDpcIk5leHQgWWVhclwiLHByZXZpb3VzTW9udGhCdXR0b25MYWJlbDpcIlByZXZpb3VzIE1vbnRoXCIsbmV4dE1vbnRoQnV0dG9uTGFiZWw6XCJOZXh0IE1vbnRoXCIsY3VzdG9tVGltZUlucHV0Om51bGx9fX1dKSxzZShvLFt7a2V5OlwiY29tcG9uZW50RGlkTW91bnRcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5wcm9wcy5zaG93VGltZVNlbGVjdCYmKHRoaXMuYXNzaWduTW9udGhDb250YWluZXI9dm9pZCBlLnNldFN0YXRlKHttb250aENvbnRhaW5lcjplLm1vbnRoQ29udGFpbmVyfSkpO319LHtrZXk6XCJjb21wb25lbnREaWRVcGRhdGVcIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnByb3BzLnByZVNlbGVjdGlvbiYmIUllKHRoaXMucHJvcHMucHJlU2VsZWN0aW9uLGUucHJlU2VsZWN0aW9uKT90aGlzLnNldFN0YXRlKHtkYXRlOnRoaXMucHJvcHMucHJlU2VsZWN0aW9ufSk6dGhpcy5wcm9wcy5vcGVuVG9EYXRlJiYhSWUodGhpcy5wcm9wcy5vcGVuVG9EYXRlLGUub3BlblRvRGF0ZSkmJnRoaXMuc2V0U3RhdGUoe2RhdGU6dGhpcy5wcm9wcy5vcGVuVG9EYXRlfSk7fX0se2tleTpcInJlbmRlclwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5wcm9wcy5jb250YWluZXJ8fF90O3JldHVybiBSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIse3JlZjp0aGlzLmNvbnRhaW5lclJlZn0sUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChyLHtjbGFzc05hbWU6Y2xhc3NuYW1lcyhcInJlYWN0LWRhdGVwaWNrZXJcIix0aGlzLnByb3BzLmNsYXNzTmFtZSx7XCJyZWFjdC1kYXRlcGlja2VyLS10aW1lLW9ubHlcIjp0aGlzLnByb3BzLnNob3dUaW1lU2VsZWN0T25seX0pLHNob3dQb3BwZXJBcnJvdzp0aGlzLnByb3BzLnNob3dQb3BwZXJBcnJvd30sdGhpcy5yZW5kZXJQcmV2aW91c0J1dHRvbigpLHRoaXMucmVuZGVyTmV4dEJ1dHRvbigpLHRoaXMucmVuZGVyTW9udGhzKCksdGhpcy5yZW5kZXJZZWFycygpLHRoaXMucmVuZGVyVG9kYXlCdXR0b24oKSx0aGlzLnJlbmRlclRpbWVTZWN0aW9uKCksdGhpcy5yZW5kZXJJbnB1dFRpbWVTZWN0aW9uKCksdGhpcy5wcm9wcy5jaGlsZHJlbikpfX1dKSxvfSgpLFB0PWZ1bmN0aW9uKGUpe3JldHVybiAhZS5kaXNhYmxlZCYmLTEhPT1lLnRhYkluZGV4fSxFdD1mdW5jdGlvbih0KXtkZShuLFJlYWN0X19kZWZhdWx0LkNvbXBvbmVudCk7dmFyIHI9dmUobik7ZnVuY3Rpb24gbih0KXt2YXIgbztyZXR1cm4gb2UodGhpcyxuKSxwZShtZShvPXIuY2FsbCh0aGlzLHQpKSxcImdldFRhYkNoaWxkcmVuXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG8udGFiTG9vcFJlZi5jdXJyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbdGFiaW5kZXhdLCBhLCBidXR0b24sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhXCIpLDEsLTEpLmZpbHRlcihQdCl9KSkscGUobWUobyksXCJoYW5kbGVGb2N1c1N0YXJ0XCIsKGZ1bmN0aW9uKGUpe3ZhciB0PW8uZ2V0VGFiQ2hpbGRyZW4oKTt0JiZ0Lmxlbmd0aD4xJiZ0W3QubGVuZ3RoLTFdLmZvY3VzKCk7fSkpLHBlKG1lKG8pLFwiaGFuZGxlRm9jdXNFbmRcIiwoZnVuY3Rpb24oZSl7dmFyIHQ9by5nZXRUYWJDaGlsZHJlbigpO3QmJnQubGVuZ3RoPjEmJnRbMF0uZm9jdXMoKTt9KSksby50YWJMb29wUmVmPVJlYWN0X19kZWZhdWx0LmNyZWF0ZVJlZigpLG99cmV0dXJuIHNlKG4sbnVsbCxbe2tleTpcImRlZmF1bHRQcm9wc1wiLGdldDpmdW5jdGlvbigpe3JldHVybiB7ZW5hYmxlVGFiTG9vcDohMH19fV0pLHNlKG4sW3trZXk6XCJyZW5kZXJcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3BzLmVuYWJsZVRhYkxvb3A/UmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyX190YWItbG9vcFwiLHJlZjp0aGlzLnRhYkxvb3BSZWZ9LFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9fdGFiLWxvb3BfX3N0YXJ0XCIsdGFiSW5kZXg6XCIwXCIsb25Gb2N1czp0aGlzLmhhbmRsZUZvY3VzU3RhcnR9KSx0aGlzLnByb3BzLmNoaWxkcmVuLFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9fdGFiLWxvb3BfX2VuZFwiLHRhYkluZGV4OlwiMFwiLG9uRm9jdXM6dGhpcy5oYW5kbGVGb2N1c0VuZH0pKTp0aGlzLnByb3BzLmNoaWxkcmVufX1dKSxufSgpLE50PWZ1bmN0aW9uKHIpe2RlKG8sUmVhY3RfX2RlZmF1bHQuQ29tcG9uZW50KTt2YXIgbj12ZShvKTtmdW5jdGlvbiBvKCl7cmV0dXJuIG9lKHRoaXMsbyksbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHNlKG8sW3trZXk6XCJyZW5kZXJcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciByLG49dGhpcy5wcm9wcyxvPW4uY2xhc3NOYW1lLGE9bi53cmFwcGVyQ2xhc3NOYW1lLHM9bi5oaWRlUG9wcGVyLHA9bi5wb3BwZXJDb21wb25lbnQsaT1uLnBvcHBlck1vZGlmaWVycyxjPW4ucG9wcGVyUGxhY2VtZW50LGw9bi5wb3BwZXJQcm9wcyxkPW4udGFyZ2V0Q29tcG9uZW50LHU9bi5lbmFibGVUYWJMb29wLGg9bi5wb3BwZXJPbktleURvd247aWYoIXMpe3ZhciBtPWNsYXNzbmFtZXMoXCJyZWFjdC1kYXRlcGlja2VyLXBvcHBlclwiLG8pO3I9UmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChQb3BwZXIkMSxpZSh7bW9kaWZpZXJzOmkscGxhY2VtZW50OmN9LGwpLChmdW5jdGlvbih0KXt2YXIgcj10LnJlZixuPXQuc3R5bGUsbz10LnBsYWNlbWVudCxhPXQuYXJyb3dQcm9wcztyZXR1cm4gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChFdCx7ZW5hYmxlVGFiTG9vcDp1fSxSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsaWUoe3JlZjpyLHN0eWxlOm59LHtjbGFzc05hbWU6bSxcImRhdGEtcGxhY2VtZW50XCI6byxvbktleURvd246aH0pLFJlYWN0X19kZWZhdWx0LmNsb25lRWxlbWVudChwLHthcnJvd1Byb3BzOmF9KSkpfSkpO310aGlzLnByb3BzLnBvcHBlckNvbnRhaW5lciYmKHI9UmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudCh0aGlzLnByb3BzLnBvcHBlckNvbnRhaW5lcix7fSxyKSk7dmFyIGY9Y2xhc3NuYW1lcyhcInJlYWN0LWRhdGVwaWNrZXItd3JhcHBlclwiLGEpO3JldHVybiBSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KE1hbmFnZXIse2NsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXItbWFuYWdlclwifSxSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFJlZmVyZW5jZSxudWxsLChmdW5jdGlvbih0KXt2YXIgcj10LnJlZjtyZXR1cm4gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLHtyZWY6cixjbGFzc05hbWU6Zn0sZCl9KSkscil9fV0sW3trZXk6XCJkZWZhdWx0UHJvcHNcIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ge2hpZGVQb3BwZXI6ITAscG9wcGVyTW9kaWZpZXJzOntwcmV2ZW50T3ZlcmZsb3c6e2VuYWJsZWQ6ITAsZXNjYXBlV2l0aFJlZmVyZW5jZTohMCxib3VuZGFyaWVzRWxlbWVudDpcInZpZXdwb3J0XCJ9fSxwb3BwZXJQcm9wczp7fSxwb3BwZXJQbGFjZW1lbnQ6XCJib3R0b20tc3RhcnRcIn19fV0pLG99KCksT3Q9b25DbGlja091dHNpZGVIT0MoTXQpO3ZhciB4dD1mdW5jdGlvbihuKXtkZShhLFJlYWN0X19kZWZhdWx0LkNvbXBvbmVudCk7dmFyIG89dmUoYSk7ZnVuY3Rpb24gYShuKXt2YXIgcztyZXR1cm4gb2UodGhpcyxhKSxwZShtZShzPW8uY2FsbCh0aGlzLG4pKSxcImdldFByZVNlbGVjdGlvblwiLChmdW5jdGlvbigpe3JldHVybiBzLnByb3BzLm9wZW5Ub0RhdGU/cy5wcm9wcy5vcGVuVG9EYXRlOnMucHJvcHMuc2VsZWN0c0VuZCYmcy5wcm9wcy5zdGFydERhdGU/cy5wcm9wcy5zdGFydERhdGU6cy5wcm9wcy5zZWxlY3RzU3RhcnQmJnMucHJvcHMuZW5kRGF0ZT9zLnByb3BzLmVuZERhdGU6Z2UoKX0pKSxwZShtZShzKSxcImNhbGNJbml0aWFsU3RhdGVcIiwoZnVuY3Rpb24oKXt2YXIgZT1zLmdldFByZVNlbGVjdGlvbigpLHQ9b3Qocy5wcm9wcykscj1hdChzLnByb3BzKSxuPXQmJmlzQmVmb3JlKGUsdCk/dDpyJiZpc0FmdGVyKGUscik/cjplO3JldHVybiB7b3BlbjpzLnByb3BzLnN0YXJ0T3Blbnx8ITEscHJldmVudEZvY3VzOiExLHByZVNlbGVjdGlvbjpzLnByb3BzLnNlbGVjdGVkP3MucHJvcHMuc2VsZWN0ZWQ6bixoaWdobGlnaHREYXRlczpzdChzLnByb3BzLmhpZ2hsaWdodERhdGVzKSxmb2N1c2VkOiExfX0pKSxwZShtZShzKSxcImNsZWFyUHJldmVudEZvY3VzVGltZW91dFwiLChmdW5jdGlvbigpe3MucHJldmVudEZvY3VzVGltZW91dCYmY2xlYXJUaW1lb3V0KHMucHJldmVudEZvY3VzVGltZW91dCk7fSkpLHBlKG1lKHMpLFwic2V0Rm9jdXNcIiwoZnVuY3Rpb24oKXtzLmlucHV0JiZzLmlucHV0LmZvY3VzJiZzLmlucHV0LmZvY3VzKCk7fSkpLHBlKG1lKHMpLFwic2V0Qmx1clwiLChmdW5jdGlvbigpe3MuaW5wdXQmJnMuaW5wdXQuYmx1ciYmcy5pbnB1dC5ibHVyKCkscy5jYW5jZWxGb2N1c0lucHV0KCk7fSkpLHBlKG1lKHMpLFwic2V0T3BlblwiLChmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO3Muc2V0U3RhdGUoe29wZW46ZSxwcmVTZWxlY3Rpb246ZSYmcy5zdGF0ZS5vcGVuP3Muc3RhdGUucHJlU2VsZWN0aW9uOnMuY2FsY0luaXRpYWxTdGF0ZSgpLnByZVNlbGVjdGlvbixsYXN0UHJlU2VsZWN0Q2hhbmdlOlR0fSwoZnVuY3Rpb24oKXtlfHxzLnNldFN0YXRlKChmdW5jdGlvbihlKXtyZXR1cm4ge2ZvY3VzZWQ6ISF0JiZlLmZvY3VzZWR9fSksKGZ1bmN0aW9uKCl7IXQmJnMuc2V0Qmx1cigpLHMuc2V0U3RhdGUoe2lucHV0VmFsdWU6bnVsbH0pO30pKTt9KSk7fSkpLHBlKG1lKHMpLFwiaW5wdXRPa1wiLChmdW5jdGlvbigpe3JldHVybiBpc0RhdGUocy5zdGF0ZS5wcmVTZWxlY3Rpb24pfSkpLHBlKG1lKHMpLFwiaXNDYWxlbmRhck9wZW5cIiwoZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09cy5wcm9wcy5vcGVuP3Muc3RhdGUub3BlbiYmIXMucHJvcHMuZGlzYWJsZWQmJiFzLnByb3BzLnJlYWRPbmx5OnMucHJvcHMub3Blbn0pKSxwZShtZShzKSxcImhhbmRsZUZvY3VzXCIsKGZ1bmN0aW9uKGUpe3Muc3RhdGUucHJldmVudEZvY3VzfHwocy5wcm9wcy5vbkZvY3VzKGUpLHMucHJvcHMucHJldmVudE9wZW5PbkZvY3VzfHxzLnByb3BzLnJlYWRPbmx5fHxzLnNldE9wZW4oITApKSxzLnNldFN0YXRlKHtmb2N1c2VkOiEwfSk7fSkpLHBlKG1lKHMpLFwiY2FuY2VsRm9jdXNJbnB1dFwiLChmdW5jdGlvbigpe2NsZWFyVGltZW91dChzLmlucHV0Rm9jdXNUaW1lb3V0KSxzLmlucHV0Rm9jdXNUaW1lb3V0PW51bGw7fSkpLHBlKG1lKHMpLFwiZGVmZXJGb2N1c0lucHV0XCIsKGZ1bmN0aW9uKCl7cy5jYW5jZWxGb2N1c0lucHV0KCkscy5pbnB1dEZvY3VzVGltZW91dD1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiBzLnNldEZvY3VzKCl9KSwxKTt9KSkscGUobWUocyksXCJoYW5kbGVEcm9wZG93bkZvY3VzXCIsKGZ1bmN0aW9uKCl7cy5jYW5jZWxGb2N1c0lucHV0KCk7fSkpLHBlKG1lKHMpLFwiaGFuZGxlQmx1clwiLChmdW5jdGlvbihlKXsoIXMuc3RhdGUub3Blbnx8cy5wcm9wcy53aXRoUG9ydGFsfHxzLnByb3BzLnNob3dUaW1lSW5wdXQpJiZzLnByb3BzLm9uQmx1cihlKSxzLnNldFN0YXRlKHtmb2N1c2VkOiExfSk7fSkpLHBlKG1lKHMpLFwiaGFuZGxlQ2FsZW5kYXJDbGlja091dHNpZGVcIiwoZnVuY3Rpb24oZSl7cy5wcm9wcy5pbmxpbmV8fHMuc2V0T3BlbighMSkscy5wcm9wcy5vbkNsaWNrT3V0c2lkZShlKSxzLnByb3BzLndpdGhQb3J0YWwmJmUucHJldmVudERlZmF1bHQoKTt9KSkscGUobWUocyksXCJoYW5kbGVDaGFuZ2VcIiwoZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxyPTA7cjxlO3IrKyl0W3JdPWFyZ3VtZW50c1tyXTt2YXIgbj10WzBdO2lmKCFzLnByb3BzLm9uQ2hhbmdlUmF3fHwocy5wcm9wcy5vbkNoYW5nZVJhdy5hcHBseShtZShzKSx0KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLmlzRGVmYXVsdFByZXZlbnRlZCYmIW4uaXNEZWZhdWx0UHJldmVudGVkKCkpKXtzLnNldFN0YXRlKHtpbnB1dFZhbHVlOm4udGFyZ2V0LnZhbHVlLGxhc3RQcmVTZWxlY3RDaGFuZ2U6WXR9KTt2YXIgbz1iZShuLnRhcmdldC52YWx1ZSxzLnByb3BzLmRhdGVGb3JtYXQscy5wcm9wcy5sb2NhbGUscy5wcm9wcy5zdHJpY3RQYXJzaW5nKTshbyYmbi50YXJnZXQudmFsdWV8fHMuc2V0U2VsZWN0ZWQobyxuLCEwKTt9fSkpLHBlKG1lKHMpLFwiaGFuZGxlU2VsZWN0XCIsKGZ1bmN0aW9uKGUsdCxyKXtzLnNldFN0YXRlKHtwcmV2ZW50Rm9jdXM6ITB9LChmdW5jdGlvbigpe3JldHVybiBzLnByZXZlbnRGb2N1c1RpbWVvdXQ9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gcy5zZXRTdGF0ZSh7cHJldmVudEZvY3VzOiExfSl9KSw1MCkscy5wcmV2ZW50Rm9jdXNUaW1lb3V0fSkpLHMuc2V0U2VsZWN0ZWQoZSx0LCExLHIpLCFzLnByb3BzLnNob3VsZENsb3NlT25TZWxlY3R8fHMucHJvcHMuc2hvd1RpbWVTZWxlY3Q/cy5zZXRQcmVTZWxlY3Rpb24oZSk6cy5wcm9wcy5pbmxpbmV8fHMuc2V0T3BlbighMSk7fSkpLHBlKG1lKHMpLFwic2V0U2VsZWN0ZWRcIiwoZnVuY3Rpb24oZSx0LHIsbil7dmFyIG89ZTtudWxsIT09byYmVmUobyxzLnByb3BzKXx8KEZlKHMucHJvcHMuc2VsZWN0ZWQsbykmJiFzLnByb3BzLmFsbG93U2FtZURheXx8KG51bGwhPT1vJiYoIXMucHJvcHMuc2VsZWN0ZWR8fHImJihzLnByb3BzLnNob3dUaW1lU2VsZWN0fHxzLnByb3BzLnNob3dUaW1lU2VsZWN0T25seXx8cy5wcm9wcy5zaG93VGltZUlucHV0KXx8KG89U2Uobyx7aG91cjpnZXRIb3VycyhzLnByb3BzLnNlbGVjdGVkKSxtaW51dGU6Z2V0TWludXRlcyhzLnByb3BzLnNlbGVjdGVkKSxzZWNvbmQ6Z2V0U2Vjb25kcyhzLnByb3BzLnNlbGVjdGVkKX0pKSxzLnByb3BzLmlubGluZXx8cy5zZXRTdGF0ZSh7cHJlU2VsZWN0aW9uOm99KSxzLnByb3BzLmlubGluZSYmcy5wcm9wcy5tb250aHNTaG93bj4xJiYhcy5wcm9wcy5pbmxpbmVGb2N1c1NlbGVjdGVkTW9udGgmJnMuc2V0U3RhdGUoe21vbnRoU2VsZWN0ZWRJbjpufSkpLHMucHJvcHMub25DaGFuZ2Uobyx0KSkscy5wcm9wcy5vblNlbGVjdChvLHQpLHJ8fHMuc2V0U3RhdGUoe2lucHV0VmFsdWU6bnVsbH0pKTt9KSkscGUobWUocyksXCJzZXRQcmVTZWxlY3Rpb25cIiwoZnVuY3Rpb24oZSl7dmFyIHQ9dm9pZCAwIT09cy5wcm9wcy5taW5EYXRlLHI9dm9pZCAwIT09cy5wcm9wcy5tYXhEYXRlLG49ITA7ZSYmKHQmJnI/bj1SZShlLHMucHJvcHMubWluRGF0ZSxzLnByb3BzLm1heERhdGUpOnQ/bj1pc0FmdGVyKGUscy5wcm9wcy5taW5EYXRlKTpyJiYobj1pc0JlZm9yZShlLHMucHJvcHMubWF4RGF0ZSkpKSxuJiZzLnNldFN0YXRlKHtwcmVTZWxlY3Rpb246ZX0pO30pKSxwZShtZShzKSxcImhhbmRsZVRpbWVDaGFuZ2VcIiwoZnVuY3Rpb24oZSl7dmFyIHQ9U2Uocy5wcm9wcy5zZWxlY3RlZD9zLnByb3BzLnNlbGVjdGVkOnMuZ2V0UHJlU2VsZWN0aW9uKCkse2hvdXI6Z2V0SG91cnMoZSksbWludXRlOmdldE1pbnV0ZXMoZSl9KTtzLnNldFN0YXRlKHtwcmVTZWxlY3Rpb246dH0pLHMucHJvcHMub25DaGFuZ2UodCkscy5wcm9wcy5zaG91bGRDbG9zZU9uU2VsZWN0JiZzLnNldE9wZW4oITEpLHMucHJvcHMuc2hvd1RpbWVJbnB1dCYmcy5zZXRPcGVuKCEwKSxzLnNldFN0YXRlKHtpbnB1dFZhbHVlOm51bGx9KTt9KSkscGUobWUocyksXCJvbklucHV0Q2xpY2tcIiwoZnVuY3Rpb24oKXtzLnByb3BzLmRpc2FibGVkfHxzLnByb3BzLnJlYWRPbmx5fHxzLnNldE9wZW4oITApLHMucHJvcHMub25JbnB1dENsaWNrKCk7fSkpLHBlKG1lKHMpLFwib25JbnB1dEtleURvd25cIiwoZnVuY3Rpb24oZSl7cy5wcm9wcy5vbktleURvd24oZSk7dmFyIHQ9ZS5rZXk7aWYocy5zdGF0ZS5vcGVufHxzLnByb3BzLmlubGluZXx8cy5wcm9wcy5wcmV2ZW50T3Blbk9uRm9jdXMpe2lmKHMuc3RhdGUub3Blbil7aWYoXCJBcnJvd0Rvd25cIj09PXR8fFwiQXJyb3dVcFwiPT09dCl7ZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciByPXMuY2FsZW5kYXIuY29tcG9uZW50Tm9kZSYmcy5jYWxlbmRhci5jb21wb25lbnROb2RlLnF1ZXJ5U2VsZWN0b3IoJy5yZWFjdC1kYXRlcGlja2VyX19kYXlbdGFiaW5kZXg9XCIwXCJdJyk7cmV0dXJuIHZvaWQociYmci5mb2N1cygpKX12YXIgbj1nZShzLnN0YXRlLnByZVNlbGVjdGlvbik7XCJFbnRlclwiPT09dD8oZS5wcmV2ZW50RGVmYXVsdCgpLHMuaW5wdXRPaygpJiZzLnN0YXRlLmxhc3RQcmVTZWxlY3RDaGFuZ2U9PT1UdD8ocy5oYW5kbGVTZWxlY3QobixlKSwhcy5wcm9wcy5zaG91bGRDbG9zZU9uU2VsZWN0JiZzLnNldFByZVNlbGVjdGlvbihuKSk6cy5zZXRPcGVuKCExKSk6XCJFc2NhcGVcIj09PXQmJihlLnByZXZlbnREZWZhdWx0KCkscy5zZXRPcGVuKCExKSkscy5pbnB1dE9rKCl8fHMucHJvcHMub25JbnB1dEVycm9yKHtjb2RlOjEsbXNnOlwiRGF0ZSBpbnB1dCBub3QgdmFsaWQuXCJ9KTt9fWVsc2UgXCJBcnJvd0Rvd25cIiE9PXQmJlwiQXJyb3dVcFwiIT09dCYmXCJFbnRlclwiIT09dHx8cy5vbklucHV0Q2xpY2soKTt9KSkscGUobWUocyksXCJvbkRheUtleURvd25cIiwoZnVuY3Rpb24oZSl7cy5wcm9wcy5vbktleURvd24oZSk7dmFyIHQ9ZS5rZXkscj1nZShzLnN0YXRlLnByZVNlbGVjdGlvbik7aWYoXCJFbnRlclwiPT09dCllLnByZXZlbnREZWZhdWx0KCkscy5oYW5kbGVTZWxlY3QocixlKSwhcy5wcm9wcy5zaG91bGRDbG9zZU9uU2VsZWN0JiZzLnNldFByZVNlbGVjdGlvbihyKTtlbHNlIGlmKFwiRXNjYXBlXCI9PT10KWUucHJldmVudERlZmF1bHQoKSxzLnNldE9wZW4oITEpLHMuaW5wdXRPaygpfHxzLnByb3BzLm9uSW5wdXRFcnJvcih7Y29kZToxLG1zZzpcIkRhdGUgaW5wdXQgbm90IHZhbGlkLlwifSk7ZWxzZSBpZighcy5wcm9wcy5kaXNhYmxlZEtleWJvYXJkTmF2aWdhdGlvbil7dmFyIG47c3dpdGNoKHQpe2Nhc2VcIkFycm93TGVmdFwiOm49c3ViRGF5cyhyLDEpO2JyZWFrO2Nhc2VcIkFycm93UmlnaHRcIjpuPWFkZERheXMociwxKTticmVhaztjYXNlXCJBcnJvd1VwXCI6bj1zdWJXZWVrcyhyLDEpO2JyZWFrO2Nhc2VcIkFycm93RG93blwiOm49YWRkV2Vla3MociwxKTticmVhaztjYXNlXCJQYWdlVXBcIjpuPXN1Yk1vbnRocyhyLDEpO2JyZWFrO2Nhc2VcIlBhZ2VEb3duXCI6bj1hZGRNb250aHMociwxKTticmVhaztjYXNlXCJIb21lXCI6bj1zdWJZZWFycyhyLDEpO2JyZWFrO2Nhc2VcIkVuZFwiOm49YWRkWWVhcnMociwxKTt9aWYoIW4pcmV0dXJuIHZvaWQocy5wcm9wcy5vbklucHV0RXJyb3ImJnMucHJvcHMub25JbnB1dEVycm9yKHtjb2RlOjEsbXNnOlwiRGF0ZSBpbnB1dCBub3QgdmFsaWQuXCJ9KSk7ZS5wcmV2ZW50RGVmYXVsdCgpLHMuc2V0U3RhdGUoe2xhc3RQcmVTZWxlY3RDaGFuZ2U6VHR9KSxzLnByb3BzLmFkanVzdERhdGVPbkNoYW5nZSYmcy5zZXRTZWxlY3RlZChuKSxzLnNldFByZVNlbGVjdGlvbihuKTt9fSkpLHBlKG1lKHMpLFwib25Qb3BwZXJLZXlEb3duXCIsKGZ1bmN0aW9uKGUpe1wiRXNjYXBlXCI9PT1lLmtleSYmKGUucHJldmVudERlZmF1bHQoKSxzLnNldFN0YXRlKHtwcmV2ZW50Rm9jdXM6ITB9LChmdW5jdGlvbigpe3Muc2V0T3BlbighMSksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtzLnNldEZvY3VzKCkscy5zZXRTdGF0ZSh7cHJldmVudEZvY3VzOiExfSk7fSkpO30pKSk7fSkpLHBlKG1lKHMpLFwib25DbGVhckNsaWNrXCIsKGZ1bmN0aW9uKGUpe2UmJmUucHJldmVudERlZmF1bHQmJmUucHJldmVudERlZmF1bHQoKSxzLnByb3BzLm9uQ2hhbmdlKG51bGwsZSkscy5zZXRTdGF0ZSh7aW5wdXRWYWx1ZTpudWxsfSk7fSkpLHBlKG1lKHMpLFwiY2xlYXJcIiwoZnVuY3Rpb24oKXtzLm9uQ2xlYXJDbGljaygpO30pKSxwZShtZShzKSxcInJlbmRlckNhbGVuZGFyXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHMucHJvcHMuaW5saW5lfHxzLmlzQ2FsZW5kYXJPcGVuKCk/UmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChPdCx7cmVmOmZ1bmN0aW9uKGUpe3MuY2FsZW5kYXI9ZTt9LGxvY2FsZTpzLnByb3BzLmxvY2FsZSxjaG9vc2VEYXlBcmlhTGFiZWxQcmVmaXg6cy5wcm9wcy5jaG9vc2VEYXlBcmlhTGFiZWxQcmVmaXgsZGlzYWJsZWREYXlBcmlhTGFiZWxQcmVmaXg6cy5wcm9wcy5kaXNhYmxlZERheUFyaWFMYWJlbFByZWZpeCx3ZWVrQXJpYUxhYmVsUHJlZml4OnMucHJvcHMud2Vla0FyaWFMYWJlbFByZWZpeCxhZGp1c3REYXRlT25DaGFuZ2U6cy5wcm9wcy5hZGp1c3REYXRlT25DaGFuZ2Usc2V0T3BlbjpzLnNldE9wZW4sc2hvdWxkQ2xvc2VPblNlbGVjdDpzLnByb3BzLnNob3VsZENsb3NlT25TZWxlY3QsZGF0ZUZvcm1hdDpzLnByb3BzLmRhdGVGb3JtYXRDYWxlbmRhcix1c2VXZWVrZGF5c1Nob3J0OnMucHJvcHMudXNlV2Vla2RheXNTaG9ydCxmb3JtYXRXZWVrRGF5OnMucHJvcHMuZm9ybWF0V2Vla0RheSxkcm9wZG93bk1vZGU6cy5wcm9wcy5kcm9wZG93bk1vZGUsc2VsZWN0ZWQ6cy5wcm9wcy5zZWxlY3RlZCxwcmVTZWxlY3Rpb246cy5zdGF0ZS5wcmVTZWxlY3Rpb24sb25TZWxlY3Q6cy5oYW5kbGVTZWxlY3Qsb25XZWVrU2VsZWN0OnMucHJvcHMub25XZWVrU2VsZWN0LG9wZW5Ub0RhdGU6cy5wcm9wcy5vcGVuVG9EYXRlLG1pbkRhdGU6cy5wcm9wcy5taW5EYXRlLG1heERhdGU6cy5wcm9wcy5tYXhEYXRlLHNlbGVjdHNTdGFydDpzLnByb3BzLnNlbGVjdHNTdGFydCxzZWxlY3RzRW5kOnMucHJvcHMuc2VsZWN0c0VuZCxzdGFydERhdGU6cy5wcm9wcy5zdGFydERhdGUsZW5kRGF0ZTpzLnByb3BzLmVuZERhdGUsZXhjbHVkZURhdGVzOnMucHJvcHMuZXhjbHVkZURhdGVzLGZpbHRlckRhdGU6cy5wcm9wcy5maWx0ZXJEYXRlLG9uQ2xpY2tPdXRzaWRlOnMuaGFuZGxlQ2FsZW5kYXJDbGlja091dHNpZGUsZm9ybWF0V2Vla051bWJlcjpzLnByb3BzLmZvcm1hdFdlZWtOdW1iZXIsaGlnaGxpZ2h0RGF0ZXM6cy5zdGF0ZS5oaWdobGlnaHREYXRlcyxpbmNsdWRlRGF0ZXM6cy5wcm9wcy5pbmNsdWRlRGF0ZXMsaW5jbHVkZVRpbWVzOnMucHJvcHMuaW5jbHVkZVRpbWVzLGluamVjdFRpbWVzOnMucHJvcHMuaW5qZWN0VGltZXMsaW5saW5lOnMucHJvcHMuaW5saW5lLHBlZWtOZXh0TW9udGg6cy5wcm9wcy5wZWVrTmV4dE1vbnRoLHNob3dNb250aERyb3Bkb3duOnMucHJvcHMuc2hvd01vbnRoRHJvcGRvd24sc2hvd1ByZXZpb3VzTW9udGhzOnMucHJvcHMuc2hvd1ByZXZpb3VzTW9udGhzLHVzZVNob3J0TW9udGhJbkRyb3Bkb3duOnMucHJvcHMudXNlU2hvcnRNb250aEluRHJvcGRvd24sc2hvd01vbnRoWWVhckRyb3Bkb3duOnMucHJvcHMuc2hvd01vbnRoWWVhckRyb3Bkb3duLHNob3dXZWVrTnVtYmVyczpzLnByb3BzLnNob3dXZWVrTnVtYmVycyxzaG93WWVhckRyb3Bkb3duOnMucHJvcHMuc2hvd1llYXJEcm9wZG93bix3aXRoUG9ydGFsOnMucHJvcHMud2l0aFBvcnRhbCxmb3JjZVNob3dNb250aE5hdmlnYXRpb246cy5wcm9wcy5mb3JjZVNob3dNb250aE5hdmlnYXRpb24sc2hvd0Rpc2FibGVkTW9udGhOYXZpZ2F0aW9uOnMucHJvcHMuc2hvd0Rpc2FibGVkTW9udGhOYXZpZ2F0aW9uLHNjcm9sbGFibGVZZWFyRHJvcGRvd246cy5wcm9wcy5zY3JvbGxhYmxlWWVhckRyb3Bkb3duLHNjcm9sbGFibGVNb250aFllYXJEcm9wZG93bjpzLnByb3BzLnNjcm9sbGFibGVNb250aFllYXJEcm9wZG93bix0b2RheUJ1dHRvbjpzLnByb3BzLnRvZGF5QnV0dG9uLHdlZWtMYWJlbDpzLnByb3BzLndlZWtMYWJlbCxvdXRzaWRlQ2xpY2tJZ25vcmVDbGFzczpcInJlYWN0LWRhdGVwaWNrZXItaWdub3JlLW9uY2xpY2tvdXRzaWRlXCIsZml4ZWRIZWlnaHQ6cy5wcm9wcy5maXhlZEhlaWdodCxtb250aHNTaG93bjpzLnByb3BzLm1vbnRoc1Nob3duLG1vbnRoU2VsZWN0ZWRJbjpzLnN0YXRlLm1vbnRoU2VsZWN0ZWRJbixvbkRyb3Bkb3duRm9jdXM6cy5oYW5kbGVEcm9wZG93bkZvY3VzLG9uTW9udGhDaGFuZ2U6cy5wcm9wcy5vbk1vbnRoQ2hhbmdlLG9uWWVhckNoYW5nZTpzLnByb3BzLm9uWWVhckNoYW5nZSxkYXlDbGFzc05hbWU6cy5wcm9wcy5kYXlDbGFzc05hbWUsd2Vla0RheUNsYXNzTmFtZTpzLnByb3BzLndlZWtEYXlDbGFzc05hbWUsbW9udGhDbGFzc05hbWU6cy5wcm9wcy5tb250aENsYXNzTmFtZSx0aW1lQ2xhc3NOYW1lOnMucHJvcHMudGltZUNsYXNzTmFtZSxzaG93VGltZVNlbGVjdDpzLnByb3BzLnNob3dUaW1lU2VsZWN0LHNob3dUaW1lU2VsZWN0T25seTpzLnByb3BzLnNob3dUaW1lU2VsZWN0T25seSxvblRpbWVDaGFuZ2U6cy5oYW5kbGVUaW1lQ2hhbmdlLHRpbWVGb3JtYXQ6cy5wcm9wcy50aW1lRm9ybWF0LHRpbWVJbnRlcnZhbHM6cy5wcm9wcy50aW1lSW50ZXJ2YWxzLG1pblRpbWU6cy5wcm9wcy5taW5UaW1lLG1heFRpbWU6cy5wcm9wcy5tYXhUaW1lLGV4Y2x1ZGVUaW1lczpzLnByb3BzLmV4Y2x1ZGVUaW1lcyx0aW1lQ2FwdGlvbjpzLnByb3BzLnRpbWVDYXB0aW9uLGNsYXNzTmFtZTpzLnByb3BzLmNhbGVuZGFyQ2xhc3NOYW1lLGNvbnRhaW5lcjpzLnByb3BzLmNhbGVuZGFyQ29udGFpbmVyLHllYXJEcm9wZG93bkl0ZW1OdW1iZXI6cy5wcm9wcy55ZWFyRHJvcGRvd25JdGVtTnVtYmVyLHByZXZpb3VzTW9udGhCdXR0b25MYWJlbDpzLnByb3BzLnByZXZpb3VzTW9udGhCdXR0b25MYWJlbCxuZXh0TW9udGhCdXR0b25MYWJlbDpzLnByb3BzLm5leHRNb250aEJ1dHRvbkxhYmVsLHByZXZpb3VzWWVhckJ1dHRvbkxhYmVsOnMucHJvcHMucHJldmlvdXNZZWFyQnV0dG9uTGFiZWwsbmV4dFllYXJCdXR0b25MYWJlbDpzLnByb3BzLm5leHRZZWFyQnV0dG9uTGFiZWwsdGltZUlucHV0TGFiZWw6cy5wcm9wcy50aW1lSW5wdXRMYWJlbCxkaXNhYmxlZEtleWJvYXJkTmF2aWdhdGlvbjpzLnByb3BzLmRpc2FibGVkS2V5Ym9hcmROYXZpZ2F0aW9uLHJlbmRlckN1c3RvbUhlYWRlcjpzLnByb3BzLnJlbmRlckN1c3RvbUhlYWRlcixwb3BwZXJQcm9wczpzLnByb3BzLnBvcHBlclByb3BzLHJlbmRlckRheUNvbnRlbnRzOnMucHJvcHMucmVuZGVyRGF5Q29udGVudHMsb25EYXlNb3VzZUVudGVyOnMucHJvcHMub25EYXlNb3VzZUVudGVyLG9uTW9udGhNb3VzZUxlYXZlOnMucHJvcHMub25Nb250aE1vdXNlTGVhdmUsc2hvd1RpbWVJbnB1dDpzLnByb3BzLnNob3dUaW1lSW5wdXQsc2hvd01vbnRoWWVhclBpY2tlcjpzLnByb3BzLnNob3dNb250aFllYXJQaWNrZXIsc2hvd0Z1bGxNb250aFllYXJQaWNrZXI6cy5wcm9wcy5zaG93RnVsbE1vbnRoWWVhclBpY2tlcixzaG93WWVhclBpY2tlcjpzLnByb3BzLnNob3dZZWFyUGlja2VyLHNob3dRdWFydGVyWWVhclBpY2tlcjpzLnByb3BzLnNob3dRdWFydGVyWWVhclBpY2tlcixzaG93UG9wcGVyQXJyb3c6cy5wcm9wcy5zaG93UG9wcGVyQXJyb3csZXhjbHVkZVNjcm9sbGJhcjpzLnByb3BzLmV4Y2x1ZGVTY3JvbGxiYXIsaGFuZGxlT25LZXlEb3duOnMub25EYXlLZXlEb3duLGlzSW5wdXRGb2N1c2VkOnMuc3RhdGUuZm9jdXNlZCxjdXN0b21UaW1lSW5wdXQ6cy5wcm9wcy5jdXN0b21UaW1lSW5wdXQsc2V0UHJlU2VsZWN0aW9uOnMuc2V0UHJlU2VsZWN0aW9ufSxzLnByb3BzLmNoaWxkcmVuKTpudWxsfSkpLHBlKG1lKHMpLFwicmVuZGVyRGF0ZUlucHV0XCIsKGZ1bmN0aW9uKCl7dmFyIHIsbixvLGEscCxpPWNsYXNzbmFtZXMocy5wcm9wcy5jbGFzc05hbWUscGUoe30sXCJyZWFjdC1kYXRlcGlja2VyLWlnbm9yZS1vbmNsaWNrb3V0c2lkZVwiLHMuc3RhdGUub3BlbikpLGM9cy5wcm9wcy5jdXN0b21JbnB1dHx8UmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImlucHV0XCIse3R5cGU6XCJ0ZXh0XCJ9KSxsPXMucHJvcHMuY3VzdG9tSW5wdXRSZWZ8fFwicmVmXCIsZD1cInN0cmluZ1wiPT10eXBlb2Ygcy5wcm9wcy52YWx1ZT9zLnByb3BzLnZhbHVlOlwic3RyaW5nXCI9PXR5cGVvZiBzLnN0YXRlLmlucHV0VmFsdWU/cy5zdGF0ZS5pbnB1dFZhbHVlOihuPXMucHJvcHMuc2VsZWN0ZWQsbz1zLnByb3BzLGE9by5kYXRlRm9ybWF0LHA9by5sb2NhbGUsbiYmX2UobixBcnJheS5pc0FycmF5KGEpP2FbMF06YSxwKXx8XCJcIik7cmV0dXJuIFJlYWN0X19kZWZhdWx0LmNsb25lRWxlbWVudChjLChwZShyPXt9LGwsKGZ1bmN0aW9uKGUpe3MuaW5wdXQ9ZTt9KSkscGUocixcInZhbHVlXCIsZCkscGUocixcIm9uQmx1clwiLHMuaGFuZGxlQmx1cikscGUocixcIm9uQ2hhbmdlXCIscy5oYW5kbGVDaGFuZ2UpLHBlKHIsXCJvbkNsaWNrXCIscy5vbklucHV0Q2xpY2spLHBlKHIsXCJvbkZvY3VzXCIscy5oYW5kbGVGb2N1cykscGUocixcIm9uS2V5RG93blwiLHMub25JbnB1dEtleURvd24pLHBlKHIsXCJpZFwiLHMucHJvcHMuaWQpLHBlKHIsXCJuYW1lXCIscy5wcm9wcy5uYW1lKSxwZShyLFwiYXV0b0ZvY3VzXCIscy5wcm9wcy5hdXRvRm9jdXMpLHBlKHIsXCJwbGFjZWhvbGRlclwiLHMucHJvcHMucGxhY2Vob2xkZXJUZXh0KSxwZShyLFwiZGlzYWJsZWRcIixzLnByb3BzLmRpc2FibGVkKSxwZShyLFwiYXV0b0NvbXBsZXRlXCIscy5wcm9wcy5hdXRvQ29tcGxldGUpLHBlKHIsXCJjbGFzc05hbWVcIixjbGFzc25hbWVzKGMucHJvcHMuY2xhc3NOYW1lLGkpKSxwZShyLFwidGl0bGVcIixzLnByb3BzLnRpdGxlKSxwZShyLFwicmVhZE9ubHlcIixzLnByb3BzLnJlYWRPbmx5KSxwZShyLFwicmVxdWlyZWRcIixzLnByb3BzLnJlcXVpcmVkKSxwZShyLFwidGFiSW5kZXhcIixzLnByb3BzLnRhYkluZGV4KSxwZShyLFwiYXJpYS1sYWJlbGxlZGJ5XCIscy5wcm9wcy5hcmlhTGFiZWxsZWRCeSkscikpfSkpLHBlKG1lKHMpLFwicmVuZGVyQ2xlYXJCdXR0b25cIiwoZnVuY3Rpb24oKXt2YXIgdD1zLnByb3BzLHI9dC5pc0NsZWFyYWJsZSxuPXQuc2VsZWN0ZWQsbz10LmNsZWFyQnV0dG9uVGl0bGUsYT10LmFyaWFMYWJlbENsb3NlLHA9dm9pZCAwPT09YT9cIkNsb3NlXCI6YTtyZXR1cm4gciYmbnVsbCE9bj9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIse3R5cGU6XCJidXR0b25cIixjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyX19jbG9zZS1pY29uXCIsXCJhcmlhLWxhYmVsXCI6cCxvbkNsaWNrOnMub25DbGVhckNsaWNrLHRpdGxlOm8sdGFiSW5kZXg6LTF9KTpudWxsfSkpLHMuc3RhdGU9cy5jYWxjSW5pdGlhbFN0YXRlKCksc31yZXR1cm4gc2UoYSxudWxsLFt7a2V5OlwiZGVmYXVsdFByb3BzXCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHthbGxvd1NhbWVEYXk6ITEsZGF0ZUZvcm1hdDpcIk1NL2RkL3l5eXlcIixkYXRlRm9ybWF0Q2FsZW5kYXI6XCJMTExMIHl5eXlcIixvbkNoYW5nZTpmdW5jdGlvbigpe30sZGlzYWJsZWQ6ITEsZGlzYWJsZWRLZXlib2FyZE5hdmlnYXRpb246ITEsZHJvcGRvd25Nb2RlOlwic2Nyb2xsXCIsb25Gb2N1czpmdW5jdGlvbigpe30sb25CbHVyOmZ1bmN0aW9uKCl7fSxvbktleURvd246ZnVuY3Rpb24oKXt9LG9uSW5wdXRDbGljazpmdW5jdGlvbigpe30sb25TZWxlY3Q6ZnVuY3Rpb24oKXt9LG9uQ2xpY2tPdXRzaWRlOmZ1bmN0aW9uKCl7fSxvbk1vbnRoQ2hhbmdlOmZ1bmN0aW9uKCl7fSxvbkNhbGVuZGFyT3BlbjpmdW5jdGlvbigpe30sb25DYWxlbmRhckNsb3NlOmZ1bmN0aW9uKCl7fSxwcmV2ZW50T3Blbk9uRm9jdXM6ITEsb25ZZWFyQ2hhbmdlOmZ1bmN0aW9uKCl7fSxvbklucHV0RXJyb3I6ZnVuY3Rpb24oKXt9LG1vbnRoc1Nob3duOjEscmVhZE9ubHk6ITEsd2l0aFBvcnRhbDohMSxzaG91bGRDbG9zZU9uU2VsZWN0OiEwLHNob3dUaW1lU2VsZWN0OiExLHNob3dUaW1lSW5wdXQ6ITEsc2hvd1ByZXZpb3VzTW9udGhzOiExLHNob3dNb250aFllYXJQaWNrZXI6ITEsc2hvd0Z1bGxNb250aFllYXJQaWNrZXI6ITEsc2hvd1llYXJQaWNrZXI6ITEsc2hvd1F1YXJ0ZXJZZWFyUGlja2VyOiExLHN0cmljdFBhcnNpbmc6ITEsdGltZUludGVydmFsczozMCx0aW1lQ2FwdGlvbjpcIlRpbWVcIixwcmV2aW91c01vbnRoQnV0dG9uTGFiZWw6XCJQcmV2aW91cyBNb250aFwiLG5leHRNb250aEJ1dHRvbkxhYmVsOlwiTmV4dCBNb250aFwiLHByZXZpb3VzWWVhckJ1dHRvbkxhYmVsOlwiUHJldmlvdXMgWWVhclwiLG5leHRZZWFyQnV0dG9uTGFiZWw6XCJOZXh0IFllYXJcIix0aW1lSW5wdXRMYWJlbDpcIlRpbWVcIixlbmFibGVUYWJMb29wOiEwLHJlbmRlckRheUNvbnRlbnRzOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxpbmxpbmVGb2N1c1NlbGVjdGVkTW9udGg6ITEsc2hvd1BvcHBlckFycm93OiEwLGV4Y2x1ZGVTY3JvbGxiYXI6ITAsY3VzdG9tVGltZUlucHV0Om51bGx9fX1dKSxzZShhLFt7a2V5OlwiY29tcG9uZW50RGlkVXBkYXRlXCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcixuO2UuaW5saW5lJiYocj1lLnNlbGVjdGVkLG49dGhpcy5wcm9wcy5zZWxlY3RlZCxyJiZuP2dldE1vbnRoKHIpIT09Z2V0TW9udGgobil8fGdldFllYXIocikhPT1nZXRZZWFyKG4pOnIhPT1uKSYmdGhpcy5zZXRQcmVTZWxlY3Rpb24odGhpcy5wcm9wcy5zZWxlY3RlZCksdm9pZCAwIT09dGhpcy5zdGF0ZS5tb250aFNlbGVjdGVkSW4mJmUubW9udGhzU2hvd24hPT10aGlzLnByb3BzLm1vbnRoc1Nob3duJiZ0aGlzLnNldFN0YXRlKHttb250aFNlbGVjdGVkSW46MH0pLGUuaGlnaGxpZ2h0RGF0ZXMhPT10aGlzLnByb3BzLmhpZ2hsaWdodERhdGVzJiZ0aGlzLnNldFN0YXRlKHtoaWdobGlnaHREYXRlczpzdCh0aGlzLnByb3BzLmhpZ2hsaWdodERhdGVzKX0pLHQuZm9jdXNlZHx8RmUoZS5zZWxlY3RlZCx0aGlzLnByb3BzLnNlbGVjdGVkKXx8dGhpcy5zZXRTdGF0ZSh7aW5wdXRWYWx1ZTpudWxsfSksdC5vcGVuIT09dGhpcy5zdGF0ZS5vcGVuJiYoITE9PT10Lm9wZW4mJiEwPT09dGhpcy5zdGF0ZS5vcGVuJiZ0aGlzLnByb3BzLm9uQ2FsZW5kYXJPcGVuKCksITA9PT10Lm9wZW4mJiExPT09dGhpcy5zdGF0ZS5vcGVuJiZ0aGlzLnByb3BzLm9uQ2FsZW5kYXJDbG9zZSgpKTt9fSx7a2V5OlwiY29tcG9uZW50V2lsbFVubW91bnRcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY2xlYXJQcmV2ZW50Rm9jdXNUaW1lb3V0KCk7fX0se2tleTpcInJlbmRlclwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yZW5kZXJDYWxlbmRhcigpO3JldHVybiB0aGlzLnByb3BzLmlubGluZSYmIXRoaXMucHJvcHMud2l0aFBvcnRhbD90OnRoaXMucHJvcHMud2l0aFBvcnRhbD9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsbnVsbCx0aGlzLnByb3BzLmlubGluZT9udWxsOlJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9faW5wdXQtY29udGFpbmVyXCJ9LHRoaXMucmVuZGVyRGF0ZUlucHV0KCksdGhpcy5yZW5kZXJDbGVhckJ1dHRvbigpKSx0aGlzLnN0YXRlLm9wZW58fHRoaXMucHJvcHMuaW5saW5lP1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9fcG9ydGFsXCJ9LHQpOm51bGwpOlJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoTnQse2NsYXNzTmFtZTp0aGlzLnByb3BzLnBvcHBlckNsYXNzTmFtZSx3cmFwcGVyQ2xhc3NOYW1lOnRoaXMucHJvcHMud3JhcHBlckNsYXNzTmFtZSxoaWRlUG9wcGVyOiF0aGlzLmlzQ2FsZW5kYXJPcGVuKCkscG9wcGVyTW9kaWZpZXJzOnRoaXMucHJvcHMucG9wcGVyTW9kaWZpZXJzLHRhcmdldENvbXBvbmVudDpSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXJfX2lucHV0LWNvbnRhaW5lclwifSx0aGlzLnJlbmRlckRhdGVJbnB1dCgpLHRoaXMucmVuZGVyQ2xlYXJCdXR0b24oKSkscG9wcGVyQ29udGFpbmVyOnRoaXMucHJvcHMucG9wcGVyQ29udGFpbmVyLHBvcHBlckNvbXBvbmVudDp0LHBvcHBlclBsYWNlbWVudDp0aGlzLnByb3BzLnBvcHBlclBsYWNlbWVudCxwb3BwZXJQcm9wczp0aGlzLnByb3BzLnBvcHBlclByb3BzLHBvcHBlck9uS2V5RG93bjp0aGlzLm9uUG9wcGVyS2V5RG93bixlbmFibGVUYWJMb29wOnRoaXMucHJvcHMuZW5hYmxlVGFiTG9vcH0pfX1dKSxhfSgpLFl0PVwiaW5wdXRcIixUdD1cIm5hdmlnYXRlXCI7XG5cbnZhciBzdHlsZXMkcyA9IHtcImQtbm9uZVwiOlwiRGF0ZVBpY2tlci1tb2R1bGVfX2Qtbm9uZVwiLFwiZC1pbmxpbmVcIjpcIkRhdGVQaWNrZXItbW9kdWxlX19kLWlubGluZVwiLFwiZC1pbmxpbmUtYmxvY2tcIjpcIkRhdGVQaWNrZXItbW9kdWxlX19kLWlubGluZS1ibG9ja1wiLFwiZC1ibG9ja1wiOlwiRGF0ZVBpY2tlci1tb2R1bGVfX2QtYmxvY2tcIixcImQtdGFibGVcIjpcIkRhdGVQaWNrZXItbW9kdWxlX19kLXRhYmxlXCIsXCJkLXRhYmxlLXJvd1wiOlwiRGF0ZVBpY2tlci1tb2R1bGVfX2QtdGFibGUtcm93XCIsXCJkLXRhYmxlLWNlbGxcIjpcIkRhdGVQaWNrZXItbW9kdWxlX19kLXRhYmxlLWNlbGxcIixcImQtZmxleFwiOlwiRGF0ZVBpY2tlci1tb2R1bGVfX2QtZmxleFwiLFwiZC1pbmxpbmUtZmxleFwiOlwiRGF0ZVBpY2tlci1tb2R1bGVfX2QtaW5saW5lLWZsZXhcIixcImQtc20tbm9uZVwiOlwiRGF0ZVBpY2tlci1tb2R1bGVfX2Qtc20tbm9uZVwiLFwiZC1zbS1pbmxpbmVcIjpcIkRhdGVQaWNrZXItbW9kdWxlX19kLXNtLWlubGluZVwiLFwiZC1zbS1pbmxpbmUtYmxvY2tcIjpcIkRhdGVQaWNrZXItbW9kdWxlX19kLXNtLWlubGluZS1ibG9ja1wiLFwiZC1zbS1ibG9ja1wiOlwiRGF0ZVBpY2tlci1tb2R1bGVfX2Qtc20tYmxvY2tcIixcImQtc20tdGFibGVcIjpcIkRhdGVQaWNrZXItbW9kdWxlX19kLXNtLXRhYmxlXCIsXCJkLXNtLXRhYmxlLXJvd1wiOlwiRGF0ZVBpY2tlci1tb2R1bGVfX2Qtc20tdGFibGUtcm93XCIsXCJkLXNtLXRhYmxlLWNlbGxcIjpcIkRhdGVQaWNrZXItbW9kdWxlX19kLXNtLXRhYmxlLWNlbGxcIixcImQtc20tZmxleFwiOlwiRGF0ZVBpY2tlci1tb2R1bGVfX2Qtc20tZmxleFwiLFwiZC1zbS1pbmxpbmUtZmxleFwiOlwiRGF0ZVBpY2tlci1tb2R1bGVfX2Qtc20taW5saW5lLWZsZXhcIixcImQtbWQtbm9uZVwiOlwiRGF0ZVBpY2tlci1tb2R1bGVfX2QtbWQtbm9uZVwiLFwiZC1tZC1pbmxpbmVcIjpcIkRhdGVQaWNrZXItbW9kdWxlX19kLW1kLWlubGluZVwiLFwiZC1tZC1pbmxpbmUtYmxvY2tcIjpcIkRhdGVQaWNrZXItbW9kdWxlX19kLW1kLWlubGluZS1ibG9ja1wiLFwiZC1tZC1ibG9ja1wiOlwiRGF0ZVBpY2tlci1tb2R1bGVfX2QtbWQtYmxvY2tcIixcImQtbWQtdGFibGVcIjpcIkRhdGVQaWNrZXItbW9kdWxlX19kLW1kLXRhYmxlXCIsXCJkLW1kLXRhYmxlLXJvd1wiOlwiRGF0ZVBpY2tlci1tb2R1bGVfX2QtbWQtdGFibGUtcm93XCIsXCJkLW1kLXRhYmxlLWNlbGxcIjpcIkRhdGVQaWNrZXItbW9kdWxlX19kLW1kLXRhYmxlLWNlbGxcIixcImQtbWQtZmxleFwiOlwiRGF0ZVBpY2tlci1tb2R1bGVfX2QtbWQtZmxleFwiLFwiZC1tZC1pbmxpbmUtZmxleFwiOlwiRGF0ZVBpY2tlci1tb2R1bGVfX2QtbWQtaW5saW5lLWZsZXhcIixcImQtbGctbm9uZVwiOlwiRGF0ZVBpY2tlci1tb2R1bGVfX2QtbGctbm9uZVwiLFwiZC1sZy1pbmxpbmVcIjpcIkRhdGVQaWNrZXItbW9kdWxlX19kLWxnLWlubGluZVwiLFwiZC1sZy1pbmxpbmUtYmxvY2tcIjpcIkRhdGVQaWNrZXItbW9kdWxlX19kLWxnLWlubGluZS1ibG9ja1wiLFwiZC1sZy1ibG9ja1wiOlwiRGF0ZVBpY2tlci1tb2R1bGVfX2QtbGctYmxvY2tcIixcImQtbGctdGFibGVcIjpcIkRhdGVQaWNrZXItbW9kdWxlX19kLWxnLXRhYmxlXCIsXCJkLWxnLXRhYmxlLXJvd1wiOlwiRGF0ZVBpY2tlci1tb2R1bGVfX2QtbGctdGFibGUtcm93XCIsXCJkLWxnLXRhYmxlLWNlbGxcIjpcIkRhdGVQaWNrZXItbW9kdWxlX19kLWxnLXRhYmxlLWNlbGxcIixcImQtbGctZmxleFwiOlwiRGF0ZVBpY2tlci1tb2R1bGVfX2QtbGctZmxleFwiLFwiZC1sZy1pbmxpbmUtZmxleFwiOlwiRGF0ZVBpY2tlci1tb2R1bGVfX2QtbGctaW5saW5lLWZsZXhcIixcImQteGwtbm9uZVwiOlwiRGF0ZVBpY2tlci1tb2R1bGVfX2QteGwtbm9uZVwiLFwiZC14bC1pbmxpbmVcIjpcIkRhdGVQaWNrZXItbW9kdWxlX19kLXhsLWlubGluZVwiLFwiZC14bC1pbmxpbmUtYmxvY2tcIjpcIkRhdGVQaWNrZXItbW9kdWxlX19kLXhsLWlubGluZS1ibG9ja1wiLFwiZC14bC1ibG9ja1wiOlwiRGF0ZVBpY2tlci1tb2R1bGVfX2QteGwtYmxvY2tcIixcImQteGwtdGFibGVcIjpcIkRhdGVQaWNrZXItbW9kdWxlX19kLXhsLXRhYmxlXCIsXCJkLXhsLXRhYmxlLXJvd1wiOlwiRGF0ZVBpY2tlci1tb2R1bGVfX2QteGwtdGFibGUtcm93XCIsXCJkLXhsLXRhYmxlLWNlbGxcIjpcIkRhdGVQaWNrZXItbW9kdWxlX19kLXhsLXRhYmxlLWNlbGxcIixcImQteGwtZmxleFwiOlwiRGF0ZVBpY2tlci1tb2R1bGVfX2QteGwtZmxleFwiLFwiZC14bC1pbmxpbmUtZmxleFwiOlwiRGF0ZVBpY2tlci1tb2R1bGVfX2QteGwtaW5saW5lLWZsZXhcIixcImQtcHJpbnQtbm9uZVwiOlwiRGF0ZVBpY2tlci1tb2R1bGVfX2QtcHJpbnQtbm9uZVwiLFwiZC1wcmludC1pbmxpbmVcIjpcIkRhdGVQaWNrZXItbW9kdWxlX19kLXByaW50LWlubGluZVwiLFwiZC1wcmludC1pbmxpbmUtYmxvY2tcIjpcIkRhdGVQaWNrZXItbW9kdWxlX19kLXByaW50LWlubGluZS1ibG9ja1wiLFwiZC1wcmludC1ibG9ja1wiOlwiRGF0ZVBpY2tlci1tb2R1bGVfX2QtcHJpbnQtYmxvY2tcIixcImQtcHJpbnQtdGFibGVcIjpcIkRhdGVQaWNrZXItbW9kdWxlX19kLXByaW50LXRhYmxlXCIsXCJkLXByaW50LXRhYmxlLXJvd1wiOlwiRGF0ZVBpY2tlci1tb2R1bGVfX2QtcHJpbnQtdGFibGUtcm93XCIsXCJkLXByaW50LXRhYmxlLWNlbGxcIjpcIkRhdGVQaWNrZXItbW9kdWxlX19kLXByaW50LXRhYmxlLWNlbGxcIixcImQtcHJpbnQtZmxleFwiOlwiRGF0ZVBpY2tlci1tb2R1bGVfX2QtcHJpbnQtZmxleFwiLFwiZC1wcmludC1pbmxpbmUtZmxleFwiOlwiRGF0ZVBpY2tlci1tb2R1bGVfX2QtcHJpbnQtaW5saW5lLWZsZXhcIixcIkNhbGVuZGFyXCI6XCJEYXRlUGlja2VyLW1vZHVsZV9fQ2FsZW5kYXJcIn07XG5cbnZhciBEYXRlUGlja2VyID0gZnVuY3Rpb24gRGF0ZVBpY2tlcihwcm9wcykge1xuICB2YXIgcmVmID0gUmVhY3RfX2RlZmF1bHQudXNlUmVmKG51bGwpO1xuICB2YXIgY2FsZW5kYXJDbGFzc05hbWUgPSBbc3R5bGVzJHMuQ2FsZW5kYXIsIHByb3BzLmNsYXNzTmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KHh0LCBfZXh0ZW5kcyh7XG4gICAgY3VzdG9tSW5wdXQ6IC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KElucHV0LCBfZXh0ZW5kcyh7XG4gICAgICBpY29uUHJvcHM6IHtcbiAgICAgICAgZm9udFNpemU6ICcyNXB4J1xuICAgICAgfSxcbiAgICAgIGljb246IFwiY2FsZW5kYXJcIixcbiAgICAgIGljb25WYXJpYW50OiBcImFsdGVybmF0ZVwiLFxuICAgICAgb25JY29uQ2xpY2s6IGZ1bmN0aW9uIG9uSWNvbkNsaWNrKCkge1xuICAgICAgICByZXR1cm4gcmVmLmN1cnJlbnQgJiYgcmVmLmN1cnJlbnQuc2V0T3Blbih0cnVlKTtcbiAgICAgIH1cbiAgICB9LCBwcm9wcy5pbnB1dFByb3BzKSksXG4gICAgY2FsZW5kYXJDbGFzc05hbWU6IGNhbGVuZGFyQ2xhc3NOYW1lLFxuICAgIHJlZjogcmVmIC8vIGFsbCBwcm9wcyBhcmUgb3ZlcndyaXRhYmxlXG5cbiAgfSwgcHJvcHMpKTtcbn07XG5cbnZhciBzdHlsZXMkdCA9IHtcImQtbm9uZVwiOlwiQ29sbGFwc2libGUtbW9kdWxlX19kLW5vbmVcIixcImQtaW5saW5lXCI6XCJDb2xsYXBzaWJsZS1tb2R1bGVfX2QtaW5saW5lXCIsXCJkLWlubGluZS1ibG9ja1wiOlwiQ29sbGFwc2libGUtbW9kdWxlX19kLWlubGluZS1ibG9ja1wiLFwiZC1ibG9ja1wiOlwiQ29sbGFwc2libGUtbW9kdWxlX19kLWJsb2NrXCIsXCJkLXRhYmxlXCI6XCJDb2xsYXBzaWJsZS1tb2R1bGVfX2QtdGFibGVcIixcImQtdGFibGUtcm93XCI6XCJDb2xsYXBzaWJsZS1tb2R1bGVfX2QtdGFibGUtcm93XCIsXCJkLXRhYmxlLWNlbGxcIjpcIkNvbGxhcHNpYmxlLW1vZHVsZV9fZC10YWJsZS1jZWxsXCIsXCJkLWZsZXhcIjpcIkNvbGxhcHNpYmxlLW1vZHVsZV9fZC1mbGV4XCIsXCJkLWlubGluZS1mbGV4XCI6XCJDb2xsYXBzaWJsZS1tb2R1bGVfX2QtaW5saW5lLWZsZXhcIixcImQtc20tbm9uZVwiOlwiQ29sbGFwc2libGUtbW9kdWxlX19kLXNtLW5vbmVcIixcImQtc20taW5saW5lXCI6XCJDb2xsYXBzaWJsZS1tb2R1bGVfX2Qtc20taW5saW5lXCIsXCJkLXNtLWlubGluZS1ibG9ja1wiOlwiQ29sbGFwc2libGUtbW9kdWxlX19kLXNtLWlubGluZS1ibG9ja1wiLFwiZC1zbS1ibG9ja1wiOlwiQ29sbGFwc2libGUtbW9kdWxlX19kLXNtLWJsb2NrXCIsXCJkLXNtLXRhYmxlXCI6XCJDb2xsYXBzaWJsZS1tb2R1bGVfX2Qtc20tdGFibGVcIixcImQtc20tdGFibGUtcm93XCI6XCJDb2xsYXBzaWJsZS1tb2R1bGVfX2Qtc20tdGFibGUtcm93XCIsXCJkLXNtLXRhYmxlLWNlbGxcIjpcIkNvbGxhcHNpYmxlLW1vZHVsZV9fZC1zbS10YWJsZS1jZWxsXCIsXCJkLXNtLWZsZXhcIjpcIkNvbGxhcHNpYmxlLW1vZHVsZV9fZC1zbS1mbGV4XCIsXCJkLXNtLWlubGluZS1mbGV4XCI6XCJDb2xsYXBzaWJsZS1tb2R1bGVfX2Qtc20taW5saW5lLWZsZXhcIixcImQtbWQtbm9uZVwiOlwiQ29sbGFwc2libGUtbW9kdWxlX19kLW1kLW5vbmVcIixcImQtbWQtaW5saW5lXCI6XCJDb2xsYXBzaWJsZS1tb2R1bGVfX2QtbWQtaW5saW5lXCIsXCJkLW1kLWlubGluZS1ibG9ja1wiOlwiQ29sbGFwc2libGUtbW9kdWxlX19kLW1kLWlubGluZS1ibG9ja1wiLFwiZC1tZC1ibG9ja1wiOlwiQ29sbGFwc2libGUtbW9kdWxlX19kLW1kLWJsb2NrXCIsXCJkLW1kLXRhYmxlXCI6XCJDb2xsYXBzaWJsZS1tb2R1bGVfX2QtbWQtdGFibGVcIixcImQtbWQtdGFibGUtcm93XCI6XCJDb2xsYXBzaWJsZS1tb2R1bGVfX2QtbWQtdGFibGUtcm93XCIsXCJkLW1kLXRhYmxlLWNlbGxcIjpcIkNvbGxhcHNpYmxlLW1vZHVsZV9fZC1tZC10YWJsZS1jZWxsXCIsXCJkLW1kLWZsZXhcIjpcIkNvbGxhcHNpYmxlLW1vZHVsZV9fZC1tZC1mbGV4XCIsXCJkLW1kLWlubGluZS1mbGV4XCI6XCJDb2xsYXBzaWJsZS1tb2R1bGVfX2QtbWQtaW5saW5lLWZsZXhcIixcImQtbGctbm9uZVwiOlwiQ29sbGFwc2libGUtbW9kdWxlX19kLWxnLW5vbmVcIixcImQtbGctaW5saW5lXCI6XCJDb2xsYXBzaWJsZS1tb2R1bGVfX2QtbGctaW5saW5lXCIsXCJkLWxnLWlubGluZS1ibG9ja1wiOlwiQ29sbGFwc2libGUtbW9kdWxlX19kLWxnLWlubGluZS1ibG9ja1wiLFwiZC1sZy1ibG9ja1wiOlwiQ29sbGFwc2libGUtbW9kdWxlX19kLWxnLWJsb2NrXCIsXCJkLWxnLXRhYmxlXCI6XCJDb2xsYXBzaWJsZS1tb2R1bGVfX2QtbGctdGFibGVcIixcImQtbGctdGFibGUtcm93XCI6XCJDb2xsYXBzaWJsZS1tb2R1bGVfX2QtbGctdGFibGUtcm93XCIsXCJkLWxnLXRhYmxlLWNlbGxcIjpcIkNvbGxhcHNpYmxlLW1vZHVsZV9fZC1sZy10YWJsZS1jZWxsXCIsXCJkLWxnLWZsZXhcIjpcIkNvbGxhcHNpYmxlLW1vZHVsZV9fZC1sZy1mbGV4XCIsXCJkLWxnLWlubGluZS1mbGV4XCI6XCJDb2xsYXBzaWJsZS1tb2R1bGVfX2QtbGctaW5saW5lLWZsZXhcIixcImQteGwtbm9uZVwiOlwiQ29sbGFwc2libGUtbW9kdWxlX19kLXhsLW5vbmVcIixcImQteGwtaW5saW5lXCI6XCJDb2xsYXBzaWJsZS1tb2R1bGVfX2QteGwtaW5saW5lXCIsXCJkLXhsLWlubGluZS1ibG9ja1wiOlwiQ29sbGFwc2libGUtbW9kdWxlX19kLXhsLWlubGluZS1ibG9ja1wiLFwiZC14bC1ibG9ja1wiOlwiQ29sbGFwc2libGUtbW9kdWxlX19kLXhsLWJsb2NrXCIsXCJkLXhsLXRhYmxlXCI6XCJDb2xsYXBzaWJsZS1tb2R1bGVfX2QteGwtdGFibGVcIixcImQteGwtdGFibGUtcm93XCI6XCJDb2xsYXBzaWJsZS1tb2R1bGVfX2QteGwtdGFibGUtcm93XCIsXCJkLXhsLXRhYmxlLWNlbGxcIjpcIkNvbGxhcHNpYmxlLW1vZHVsZV9fZC14bC10YWJsZS1jZWxsXCIsXCJkLXhsLWZsZXhcIjpcIkNvbGxhcHNpYmxlLW1vZHVsZV9fZC14bC1mbGV4XCIsXCJkLXhsLWlubGluZS1mbGV4XCI6XCJDb2xsYXBzaWJsZS1tb2R1bGVfX2QteGwtaW5saW5lLWZsZXhcIixcImQtcHJpbnQtbm9uZVwiOlwiQ29sbGFwc2libGUtbW9kdWxlX19kLXByaW50LW5vbmVcIixcImQtcHJpbnQtaW5saW5lXCI6XCJDb2xsYXBzaWJsZS1tb2R1bGVfX2QtcHJpbnQtaW5saW5lXCIsXCJkLXByaW50LWlubGluZS1ibG9ja1wiOlwiQ29sbGFwc2libGUtbW9kdWxlX19kLXByaW50LWlubGluZS1ibG9ja1wiLFwiZC1wcmludC1ibG9ja1wiOlwiQ29sbGFwc2libGUtbW9kdWxlX19kLXByaW50LWJsb2NrXCIsXCJkLXByaW50LXRhYmxlXCI6XCJDb2xsYXBzaWJsZS1tb2R1bGVfX2QtcHJpbnQtdGFibGVcIixcImQtcHJpbnQtdGFibGUtcm93XCI6XCJDb2xsYXBzaWJsZS1tb2R1bGVfX2QtcHJpbnQtdGFibGUtcm93XCIsXCJkLXByaW50LXRhYmxlLWNlbGxcIjpcIkNvbGxhcHNpYmxlLW1vZHVsZV9fZC1wcmludC10YWJsZS1jZWxsXCIsXCJkLXByaW50LWZsZXhcIjpcIkNvbGxhcHNpYmxlLW1vZHVsZV9fZC1wcmludC1mbGV4XCIsXCJkLXByaW50LWlubGluZS1mbGV4XCI6XCJDb2xsYXBzaWJsZS1tb2R1bGVfX2QtcHJpbnQtaW5saW5lLWZsZXhcIixcImNvbnRhaW5lclwiOlwiQ29sbGFwc2libGUtbW9kdWxlX19jb250YWluZXJcIixcImJ1dHRvbk9uQm90dG9tXCI6XCJDb2xsYXBzaWJsZS1tb2R1bGVfX2J1dHRvbk9uQm90dG9tXCIsXCJidXR0b25cIjpcIkNvbGxhcHNpYmxlLW1vZHVsZV9fYnV0dG9uXCIsXCJjb250ZW50XCI6XCJDb2xsYXBzaWJsZS1tb2R1bGVfX2NvbnRlbnRcIixcImNoZXZyb25cIjpcIkNvbGxhcHNpYmxlLW1vZHVsZV9fY2hldnJvblwiLFwiY2hldnJvbkNvbGxhcHNlZFwiOlwiQ29sbGFwc2libGUtbW9kdWxlX19jaGV2cm9uQ29sbGFwc2VkXCIsXCJ0aXRsZVwiOlwiQ29sbGFwc2libGUtbW9kdWxlX190aXRsZVwiLFwic21hbGxcIjpcIkNvbGxhcHNpYmxlLW1vZHVsZV9fc21hbGxcIixcImJ1dHRvblJpZ2h0XCI6XCJDb2xsYXBzaWJsZS1tb2R1bGVfX2J1dHRvblJpZ2h0XCIsXCJjb250ZW50Q29sbGFwc2VkXCI6XCJDb2xsYXBzaWJsZS1tb2R1bGVfX2NvbnRlbnRDb2xsYXBzZWRcIn07XG5cbnZhciBnZXRJY29uU2l6ZSA9IGZ1bmN0aW9uIGdldEljb25TaXplKHN0eWxlKSB7XG4gIGlmIChzdHlsZSA9PT0gJ3NtYWxsJykge1xuICAgIHJldHVybiAxMDtcbiAgfVxuXG4gIHJldHVybiAxNTtcbn07XG5cbnZhciBDb2xsYXBzaWJsZSA9IGZ1bmN0aW9uIENvbGxhcHNpYmxlKHByb3BzKSB7XG4gIHZhciBfdXNlU3RhdGUgPSBSZWFjdC51c2VTdGF0ZShwcm9wcy5kZWZhdWx0Q29sbGFwc2VkKSxcbiAgICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgICAgaXNDb2xsYXBzZWQgPSBfdXNlU3RhdGUyWzBdLFxuICAgICAgc2V0SXNDb2xsYXBzZWQgPSBfdXNlU3RhdGUyWzFdO1xuXG4gIHZhciBjb250ZW50Q2xhc3NOYW1lID0gW3N0eWxlcyR0LmNvbnRlbnQsIGlzQ29sbGFwc2VkICYmIHN0eWxlcyR0LmNvbnRlbnRDb2xsYXBzZWRdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyk7XG4gIHZhciBpY29uQ2xhc3NOYW1lID0gW3N0eWxlcyR0LmNoZXZyb24sIGlzQ29sbGFwc2VkICYmIHN0eWxlcyR0LmNoZXZyb25Db2xsYXBzZWQsIHN0eWxlcyR0LmJ1dHRvblJpZ2h0XS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpO1xuICB2YXIgY29udGFpbmVyQ2xhc3NOYW1lID0gW3N0eWxlcyR0LmNvbnRhaW5lciwgcHJvcHMuY2xhc3NOYW1lLCBwcm9wcy5idXR0b25PbkJvdHRvbSAmJiBzdHlsZXMkdC5idXR0b25PbkJvdHRvbSwgcHJvcHMuc3R5bGUgJiYgc3R5bGVzJHRbcHJvcHMuc3R5bGVdXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpO1xuICB2YXIgYnV0dG9uQ2xhc3NOYW1lID0gW3N0eWxlcyR0LmJ1dHRvbiwgc3R5bGVzJHQuYnV0dG9uUmlnaHQsICdidXR0b24nXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpO1xuICB2YXIgdGl0bGUgPSBpc0NvbGxhcHNlZCA/IHByb3BzLmV4cGFuZFRpdGxlIDogcHJvcHMuY29sbGFwc2VUaXRsZTtcbiAgdmFyIGljb25TaXplID0gZ2V0SWNvblNpemUocHJvcHMuc3R5bGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogY29udGFpbmVyQ2xhc3NOYW1lXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IGJ1dHRvbkNsYXNzTmFtZSxcbiAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgcmV0dXJuIHNldElzQ29sbGFwc2VkKCFpc0NvbGxhcHNlZCk7XG4gICAgfVxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChJY29uLCB7XG4gICAgbmFtZTogXCJjaGV2cm9uXCIsXG4gICAgY2xhc3NOYW1lOiBpY29uQ2xhc3NOYW1lLFxuICAgIGZvbnRTaXplOiBcIlwiLmNvbmNhdChpY29uU2l6ZSwgXCJweFwiKVxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogc3R5bGVzJHQudGl0bGVcbiAgfSwgdGl0bGUpKSwgLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJtYWluXCIsIHtcbiAgICBjbGFzc05hbWU6IGNvbnRlbnRDbGFzc05hbWVcbiAgfSwgcHJvcHMuY2hpbGRyZW4pKTtcbn07XG5cbnZhciBzdHlsZXMkdSA9IHtcImQtbm9uZVwiOlwiU3dpdGNoLW1vZHVsZV9fZC1ub25lXCIsXCJkLWlubGluZVwiOlwiU3dpdGNoLW1vZHVsZV9fZC1pbmxpbmVcIixcImQtaW5saW5lLWJsb2NrXCI6XCJTd2l0Y2gtbW9kdWxlX19kLWlubGluZS1ibG9ja1wiLFwiZC1ibG9ja1wiOlwiU3dpdGNoLW1vZHVsZV9fZC1ibG9ja1wiLFwiZC10YWJsZVwiOlwiU3dpdGNoLW1vZHVsZV9fZC10YWJsZVwiLFwiZC10YWJsZS1yb3dcIjpcIlN3aXRjaC1tb2R1bGVfX2QtdGFibGUtcm93XCIsXCJkLXRhYmxlLWNlbGxcIjpcIlN3aXRjaC1tb2R1bGVfX2QtdGFibGUtY2VsbFwiLFwiZC1mbGV4XCI6XCJTd2l0Y2gtbW9kdWxlX19kLWZsZXhcIixcImQtaW5saW5lLWZsZXhcIjpcIlN3aXRjaC1tb2R1bGVfX2QtaW5saW5lLWZsZXhcIixcImQtc20tbm9uZVwiOlwiU3dpdGNoLW1vZHVsZV9fZC1zbS1ub25lXCIsXCJkLXNtLWlubGluZVwiOlwiU3dpdGNoLW1vZHVsZV9fZC1zbS1pbmxpbmVcIixcImQtc20taW5saW5lLWJsb2NrXCI6XCJTd2l0Y2gtbW9kdWxlX19kLXNtLWlubGluZS1ibG9ja1wiLFwiZC1zbS1ibG9ja1wiOlwiU3dpdGNoLW1vZHVsZV9fZC1zbS1ibG9ja1wiLFwiZC1zbS10YWJsZVwiOlwiU3dpdGNoLW1vZHVsZV9fZC1zbS10YWJsZVwiLFwiZC1zbS10YWJsZS1yb3dcIjpcIlN3aXRjaC1tb2R1bGVfX2Qtc20tdGFibGUtcm93XCIsXCJkLXNtLXRhYmxlLWNlbGxcIjpcIlN3aXRjaC1tb2R1bGVfX2Qtc20tdGFibGUtY2VsbFwiLFwiZC1zbS1mbGV4XCI6XCJTd2l0Y2gtbW9kdWxlX19kLXNtLWZsZXhcIixcImQtc20taW5saW5lLWZsZXhcIjpcIlN3aXRjaC1tb2R1bGVfX2Qtc20taW5saW5lLWZsZXhcIixcImQtbWQtbm9uZVwiOlwiU3dpdGNoLW1vZHVsZV9fZC1tZC1ub25lXCIsXCJkLW1kLWlubGluZVwiOlwiU3dpdGNoLW1vZHVsZV9fZC1tZC1pbmxpbmVcIixcImQtbWQtaW5saW5lLWJsb2NrXCI6XCJTd2l0Y2gtbW9kdWxlX19kLW1kLWlubGluZS1ibG9ja1wiLFwiZC1tZC1ibG9ja1wiOlwiU3dpdGNoLW1vZHVsZV9fZC1tZC1ibG9ja1wiLFwiZC1tZC10YWJsZVwiOlwiU3dpdGNoLW1vZHVsZV9fZC1tZC10YWJsZVwiLFwiZC1tZC10YWJsZS1yb3dcIjpcIlN3aXRjaC1tb2R1bGVfX2QtbWQtdGFibGUtcm93XCIsXCJkLW1kLXRhYmxlLWNlbGxcIjpcIlN3aXRjaC1tb2R1bGVfX2QtbWQtdGFibGUtY2VsbFwiLFwiZC1tZC1mbGV4XCI6XCJTd2l0Y2gtbW9kdWxlX19kLW1kLWZsZXhcIixcImQtbWQtaW5saW5lLWZsZXhcIjpcIlN3aXRjaC1tb2R1bGVfX2QtbWQtaW5saW5lLWZsZXhcIixcImQtbGctbm9uZVwiOlwiU3dpdGNoLW1vZHVsZV9fZC1sZy1ub25lXCIsXCJkLWxnLWlubGluZVwiOlwiU3dpdGNoLW1vZHVsZV9fZC1sZy1pbmxpbmVcIixcImQtbGctaW5saW5lLWJsb2NrXCI6XCJTd2l0Y2gtbW9kdWxlX19kLWxnLWlubGluZS1ibG9ja1wiLFwiZC1sZy1ibG9ja1wiOlwiU3dpdGNoLW1vZHVsZV9fZC1sZy1ibG9ja1wiLFwiZC1sZy10YWJsZVwiOlwiU3dpdGNoLW1vZHVsZV9fZC1sZy10YWJsZVwiLFwiZC1sZy10YWJsZS1yb3dcIjpcIlN3aXRjaC1tb2R1bGVfX2QtbGctdGFibGUtcm93XCIsXCJkLWxnLXRhYmxlLWNlbGxcIjpcIlN3aXRjaC1tb2R1bGVfX2QtbGctdGFibGUtY2VsbFwiLFwiZC1sZy1mbGV4XCI6XCJTd2l0Y2gtbW9kdWxlX19kLWxnLWZsZXhcIixcImQtbGctaW5saW5lLWZsZXhcIjpcIlN3aXRjaC1tb2R1bGVfX2QtbGctaW5saW5lLWZsZXhcIixcImQteGwtbm9uZVwiOlwiU3dpdGNoLW1vZHVsZV9fZC14bC1ub25lXCIsXCJkLXhsLWlubGluZVwiOlwiU3dpdGNoLW1vZHVsZV9fZC14bC1pbmxpbmVcIixcImQteGwtaW5saW5lLWJsb2NrXCI6XCJTd2l0Y2gtbW9kdWxlX19kLXhsLWlubGluZS1ibG9ja1wiLFwiZC14bC1ibG9ja1wiOlwiU3dpdGNoLW1vZHVsZV9fZC14bC1ibG9ja1wiLFwiZC14bC10YWJsZVwiOlwiU3dpdGNoLW1vZHVsZV9fZC14bC10YWJsZVwiLFwiZC14bC10YWJsZS1yb3dcIjpcIlN3aXRjaC1tb2R1bGVfX2QteGwtdGFibGUtcm93XCIsXCJkLXhsLXRhYmxlLWNlbGxcIjpcIlN3aXRjaC1tb2R1bGVfX2QteGwtdGFibGUtY2VsbFwiLFwiZC14bC1mbGV4XCI6XCJTd2l0Y2gtbW9kdWxlX19kLXhsLWZsZXhcIixcImQteGwtaW5saW5lLWZsZXhcIjpcIlN3aXRjaC1tb2R1bGVfX2QteGwtaW5saW5lLWZsZXhcIixcImQtcHJpbnQtbm9uZVwiOlwiU3dpdGNoLW1vZHVsZV9fZC1wcmludC1ub25lXCIsXCJkLXByaW50LWlubGluZVwiOlwiU3dpdGNoLW1vZHVsZV9fZC1wcmludC1pbmxpbmVcIixcImQtcHJpbnQtaW5saW5lLWJsb2NrXCI6XCJTd2l0Y2gtbW9kdWxlX19kLXByaW50LWlubGluZS1ibG9ja1wiLFwiZC1wcmludC1ibG9ja1wiOlwiU3dpdGNoLW1vZHVsZV9fZC1wcmludC1ibG9ja1wiLFwiZC1wcmludC10YWJsZVwiOlwiU3dpdGNoLW1vZHVsZV9fZC1wcmludC10YWJsZVwiLFwiZC1wcmludC10YWJsZS1yb3dcIjpcIlN3aXRjaC1tb2R1bGVfX2QtcHJpbnQtdGFibGUtcm93XCIsXCJkLXByaW50LXRhYmxlLWNlbGxcIjpcIlN3aXRjaC1tb2R1bGVfX2QtcHJpbnQtdGFibGUtY2VsbFwiLFwiZC1wcmludC1mbGV4XCI6XCJTd2l0Y2gtbW9kdWxlX19kLXByaW50LWZsZXhcIixcImQtcHJpbnQtaW5saW5lLWZsZXhcIjpcIlN3aXRjaC1tb2R1bGVfX2QtcHJpbnQtaW5saW5lLWZsZXhcIixcInN3aXRjaFwiOlwiU3dpdGNoLW1vZHVsZV9fc3dpdGNoXCIsXCJidXR0b25cIjpcIlN3aXRjaC1tb2R1bGVfX2J1dHRvblwiLFwiYnV0dG9uLWFsd2F5cy1zbWFsbFwiOlwiU3dpdGNoLW1vZHVsZV9fYnV0dG9uLWFsd2F5cy1zbWFsbFwiLFwibGFiZWwtZW5kXCI6XCJTd2l0Y2gtbW9kdWxlX19sYWJlbC1lbmRcIixcImxhYmVsLXN0YXJ0XCI6XCJTd2l0Y2gtbW9kdWxlX19sYWJlbC1zdGFydFwiLFwiYnV0dG9uLWxhcmdlXCI6XCJTd2l0Y2gtbW9kdWxlX19idXR0b24tbGFyZ2VcIixcImJ1dHRvbi1zbWFsbFwiOlwiU3dpdGNoLW1vZHVsZV9fYnV0dG9uLXNtYWxsXCIsXCJ1bmNoZWNrZWRcIjpcIlN3aXRjaC1tb2R1bGVfX3VuY2hlY2tlZFwiLFwiY2hlY2tlZFwiOlwiU3dpdGNoLW1vZHVsZV9fY2hlY2tlZFwiLFwiZGlzYWJsZWRcIjpcIlN3aXRjaC1tb2R1bGVfX2Rpc2FibGVkXCIsXCJsYWJlbFwiOlwiU3dpdGNoLW1vZHVsZV9fbGFiZWxcIixcImljb25cIjpcIlN3aXRjaC1tb2R1bGVfX2ljb25cIixcImljb24tZW5kXCI6XCJTd2l0Y2gtbW9kdWxlX19pY29uLWVuZFwiLFwiaW5wdXRcIjpcIlN3aXRjaC1tb2R1bGVfX2lucHV0XCJ9O1xuXG5mdW5jdGlvbiBTd2l0Y2goX3JlZikge1xuICB2YXIgdmFsdWUgPSBfcmVmLnZhbHVlLFxuICAgICAgdHlwZSA9IF9yZWYudHlwZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWUsXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIF9yZWYkY2hlY2tlZCA9IF9yZWYuY2hlY2tlZCxcbiAgICAgIGNoZWNrZWQgPSBfcmVmJGNoZWNrZWQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRjaGVja2VkLFxuICAgICAgZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkLFxuICAgICAgX3JlZiR2YXJpYW50ID0gX3JlZi52YXJpYW50LFxuICAgICAgdmFyaWFudCA9IF9yZWYkdmFyaWFudCA9PT0gdm9pZCAwID8gJ2RlZmF1bHQnIDogX3JlZiR2YXJpYW50LFxuICAgICAgb25DaGFuZ2UgPSBfcmVmLm9uQ2hhbmdlLFxuICAgICAgaWRQcm9wID0gX3JlZi5pZCxcbiAgICAgIF9yZWYkaW5wdXRQcm9wcyA9IF9yZWYuaW5wdXRQcm9wcyxcbiAgICAgIGlucHV0UHJvcHMgPSBfcmVmJGlucHV0UHJvcHMgPT09IHZvaWQgMCA/IHt9IDogX3JlZiRpbnB1dFByb3BzLFxuICAgICAgX3JlZiRpY29uID0gX3JlZi5pY29uLFxuICAgICAgaWNvbiA9IF9yZWYkaWNvbiA9PT0gdm9pZCAwID8gJ2NoZWNrYm94LXVuY2hlY2tlZCcgOiBfcmVmJGljb24sXG4gICAgICBfcmVmJGljb25DaGVja2VkID0gX3JlZi5pY29uQ2hlY2tlZCxcbiAgICAgIGljb25DaGVja2VkID0gX3JlZiRpY29uQ2hlY2tlZCA9PT0gdm9pZCAwID8gJ2NoZWNrYm94LWNoZWNrZWQnIDogX3JlZiRpY29uQ2hlY2tlZCxcbiAgICAgIF9yZWYkaWNvblZhcmlhbnQgPSBfcmVmLmljb25WYXJpYW50LFxuICAgICAgaWNvblZhcmlhbnQgPSBfcmVmJGljb25WYXJpYW50ID09PSB2b2lkIDAgPyAwIDogX3JlZiRpY29uVmFyaWFudCxcbiAgICAgIF9yZWYkaWNvblZhcmlhbnRDaGVjayA9IF9yZWYuaWNvblZhcmlhbnRDaGVja2VkLFxuICAgICAgaWNvblZhcmlhbnRDaGVja2VkID0gX3JlZiRpY29uVmFyaWFudENoZWNrID09PSB2b2lkIDAgPyAwIDogX3JlZiRpY29uVmFyaWFudENoZWNrLFxuICAgICAgX3JlZiRpY29uRm9udFNpemUgPSBfcmVmLmljb25Gb250U2l6ZSxcbiAgICAgIGljb25Gb250U2l6ZSA9IF9yZWYkaWNvbkZvbnRTaXplID09PSB2b2lkIDAgPyAnMTZweCcgOiBfcmVmJGljb25Gb250U2l6ZSxcbiAgICAgIGxhYmVsID0gX3JlZi5sYWJlbCxcbiAgICAgIF9yZWYkbGFiZWxQbGFjZW1lbnQgPSBfcmVmLmxhYmVsUGxhY2VtZW50LFxuICAgICAgbGFiZWxQbGFjZW1lbnQgPSBfcmVmJGxhYmVsUGxhY2VtZW50ID09PSB2b2lkIDAgPyAnZW5kJyA6IF9yZWYkbGFiZWxQbGFjZW1lbnQsXG4gICAgICBsYWJlbFByb3BzID0gX3JlZi5sYWJlbFByb3BzLFxuICAgICAgY3VzdG9tSWNvbiA9IF9yZWYuY3VzdG9tSWNvbixcbiAgICAgIGN1c3RvbUljb25DaGVja2VkID0gX3JlZi5jdXN0b21JY29uQ2hlY2tlZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcInZhbHVlXCIsIFwidHlwZVwiLCBcIm5hbWVcIiwgXCJjbGFzc05hbWVcIiwgXCJjaGVja2VkXCIsIFwiZGlzYWJsZWRcIiwgXCJ2YXJpYW50XCIsIFwib25DaGFuZ2VcIiwgXCJpZFwiLCBcImlucHV0UHJvcHNcIiwgXCJpY29uXCIsIFwiaWNvbkNoZWNrZWRcIiwgXCJpY29uVmFyaWFudFwiLCBcImljb25WYXJpYW50Q2hlY2tlZFwiLCBcImljb25Gb250U2l6ZVwiLCBcImxhYmVsXCIsIFwibGFiZWxQbGFjZW1lbnRcIiwgXCJsYWJlbFByb3BzXCIsIFwiY3VzdG9tSWNvblwiLCBcImN1c3RvbUljb25DaGVja2VkXCJdKTtcblxuICB2YXIgaWQgPSBpZFByb3AgfHwgXCJcIi5jb25jYXQodHlwZSB8fCAnc3dpdGNoJywgXCItXCIpLmNvbmNhdChuYW1lLCBcIi1cIikuY29uY2F0KHZhbHVlKTtcbiAgdmFyIGNoZWNrYm94Q2xhc3NlcyA9IFtzdHlsZXMkdVsnc3dpdGNoJ10sIGNoZWNrZWQgPyBzdHlsZXMkdVsnY2hlY2tlZCddIDogc3R5bGVzJHVbJ3VuY2hlY2tlZCddLCBkaXNhYmxlZCA/IHN0eWxlcyR1WydkaXNhYmxlZCddIDogJycsIHZhcmlhbnQgIT09ICdkZWZhdWx0JyAmJiBzdHlsZXMkdVsnYnV0dG9uJ10sIHZhcmlhbnQgIT09ICdkZWZhdWx0JyAmJiBzdHlsZXMkdVt2YXJpYW50XSwgY2xhc3NOYW1lXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpO1xuICB2YXIgaWNvbkNsYXNzZXMgPSBbc3R5bGVzJHVbJ2ljb24nXSwgbGFiZWxQbGFjZW1lbnQgPT09ICdzdGFydCcgJiYgc3R5bGVzJHVbJ2ljb24tZW5kJ11dLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyk7XG4gIHZhciBsYWJlbENsYXNzZXMgPSBbc3R5bGVzJHVbJ2xhYmVsJ10sIHN0eWxlcyR1W1wibGFiZWwtXCIuY29uY2F0KGxhYmVsUGxhY2VtZW50KV1dLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyk7XG4gIHZhciBMYWJlbCA9IHR5cGVvZiBsYWJlbCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGxhYmVsID09PSAnbnVtYmVyJyA/IC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFRleHQsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGxhYmVsQ2xhc3NlcyxcbiAgICBmb250U2l6ZTogXCJib2R5LXhzbWFsbFwiXG4gIH0sIGxhYmVsUHJvcHMpLCBsYWJlbCkgOiBsYWJlbDtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgaHRtbEZvcjogaWQsXG4gICAgY2xhc3NOYW1lOiBjaGVja2JveENsYXNzZXNcbiAgfSksIGN1c3RvbUljb24gPyBjaGVja2VkICYmIGN1c3RvbUljb25DaGVja2VkID8gY3VzdG9tSWNvbkNoZWNrZWQgOiBjdXN0b21JY29uIDogLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSWNvbiwge1xuICAgIGNsYXNzTmFtZTogaWNvbkNsYXNzZXMsXG4gICAgbmFtZTogY2hlY2tlZCA/IGljb25DaGVja2VkIDogaWNvbixcbiAgICB2YXJpYW50OiBjaGVja2VkID8gaWNvblZhcmlhbnRDaGVja2VkIDogaWNvblZhcmlhbnQsXG4gICAgZm9udFNpemU6IGljb25Gb250U2l6ZVxuICB9KSwgKHZhcmlhbnQgPT09ICdkZWZhdWx0JyB8fCB2YXJpYW50ID09PSAnYnV0dG9uLWxhcmdlJykgJiYgTGFiZWwsIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwgX2V4dGVuZHMoe30sIGlucHV0UHJvcHMsIHtcbiAgICBjbGFzc05hbWU6IHN0eWxlcyR1WydpbnB1dCddLFxuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBpZDogaWQsXG4gICAgb25DaGFuZ2U6IG9uQ2hhbmdlLFxuICAgIG5hbWU6IG5hbWUsXG4gICAgY2hlY2tlZDogY2hlY2tlZCxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgdHlwZTogdHlwZVxuICB9KSkpO1xufVxuXG5mdW5jdGlvbiBSYWRpbyhfcmVmKSB7XG4gIHZhciBfcmVmJGljb24gPSBfcmVmLmljb24sXG4gICAgICBpY29uID0gX3JlZiRpY29uID09PSB2b2lkIDAgPyAncmFkaW8tdW5jaGVja2VkJyA6IF9yZWYkaWNvbixcbiAgICAgIF9yZWYkaWNvbkNoZWNrZWQgPSBfcmVmLmljb25DaGVja2VkLFxuICAgICAgaWNvbkNoZWNrZWQgPSBfcmVmJGljb25DaGVja2VkID09PSB2b2lkIDAgPyAncmFkaW8tY2hlY2tlZCcgOiBfcmVmJGljb25DaGVja2VkLFxuICAgICAgY3VzdG9tSWNvbiA9IF9yZWYuY3VzdG9tSWNvbixcbiAgICAgIGN1c3RvbUljb25DaGVja2VkID0gX3JlZi5jdXN0b21JY29uQ2hlY2tlZCxcbiAgICAgIGN1c3RvbVJhZGlvSWNvbiA9IF9yZWYuY3VzdG9tUmFkaW9JY29uLFxuICAgICAgY3VzdG9tUmFkaW9JY29uQ2hlY2tlZCA9IF9yZWYuY3VzdG9tUmFkaW9JY29uQ2hlY2tlZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImljb25cIiwgXCJpY29uQ2hlY2tlZFwiLCBcImN1c3RvbUljb25cIiwgXCJjdXN0b21JY29uQ2hlY2tlZFwiLCBcImN1c3RvbVJhZGlvSWNvblwiLCBcImN1c3RvbVJhZGlvSWNvbkNoZWNrZWRcIl0pO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50JyAmJiAoY3VzdG9tUmFkaW9JY29uIHx8IGN1c3RvbVJhZGlvSWNvbkNoZWNrZWQpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgY29uc29sZS53YXJuKCdEZXByZWNhdGlvbiB3YXJuaW5nOiBQbGVhc2UgZG8gbm90IHVzZSB0aGUgcHJvcHMgY3VzdG9tUmFkaW9JY29uIGFuZCBjdXN0b21SYWRpb0ljb25DaGVja2VkLiBJbnN0ZWFkLCB1c2UgdGhlIHByb3BzIGN1c3RvbUljb24gYW5kIGN1c3RvbUljb25DaGVja2VkLicpO1xuICB9XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFN3aXRjaCwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgdHlwZTogXCJyYWRpb1wiLFxuICAgIGljb246IGljb24sXG4gICAgaWNvbkNoZWNrZWQ6IGljb25DaGVja2VkLFxuICAgIGN1c3RvbUljb246IGN1c3RvbUljb24gfHwgY3VzdG9tUmFkaW9JY29uLFxuICAgIGN1c3RvbUljb25DaGVja2VkOiBjdXN0b21JY29uQ2hlY2tlZCB8fCBjdXN0b21SYWRpb0ljb25DaGVja2VkXG4gIH0pKTtcbn1cblxudmFyIHN0eWxlcyR2ID0ge1wiZC1ub25lXCI6XCJSYWRpb0dyb3VwLW1vZHVsZV9fZC1ub25lXCIsXCJkLWlubGluZVwiOlwiUmFkaW9Hcm91cC1tb2R1bGVfX2QtaW5saW5lXCIsXCJkLWlubGluZS1ibG9ja1wiOlwiUmFkaW9Hcm91cC1tb2R1bGVfX2QtaW5saW5lLWJsb2NrXCIsXCJkLWJsb2NrXCI6XCJSYWRpb0dyb3VwLW1vZHVsZV9fZC1ibG9ja1wiLFwiZC10YWJsZVwiOlwiUmFkaW9Hcm91cC1tb2R1bGVfX2QtdGFibGVcIixcImQtdGFibGUtcm93XCI6XCJSYWRpb0dyb3VwLW1vZHVsZV9fZC10YWJsZS1yb3dcIixcImQtdGFibGUtY2VsbFwiOlwiUmFkaW9Hcm91cC1tb2R1bGVfX2QtdGFibGUtY2VsbFwiLFwiZC1mbGV4XCI6XCJSYWRpb0dyb3VwLW1vZHVsZV9fZC1mbGV4XCIsXCJkLWlubGluZS1mbGV4XCI6XCJSYWRpb0dyb3VwLW1vZHVsZV9fZC1pbmxpbmUtZmxleFwiLFwiZC1zbS1ub25lXCI6XCJSYWRpb0dyb3VwLW1vZHVsZV9fZC1zbS1ub25lXCIsXCJkLXNtLWlubGluZVwiOlwiUmFkaW9Hcm91cC1tb2R1bGVfX2Qtc20taW5saW5lXCIsXCJkLXNtLWlubGluZS1ibG9ja1wiOlwiUmFkaW9Hcm91cC1tb2R1bGVfX2Qtc20taW5saW5lLWJsb2NrXCIsXCJkLXNtLWJsb2NrXCI6XCJSYWRpb0dyb3VwLW1vZHVsZV9fZC1zbS1ibG9ja1wiLFwiZC1zbS10YWJsZVwiOlwiUmFkaW9Hcm91cC1tb2R1bGVfX2Qtc20tdGFibGVcIixcImQtc20tdGFibGUtcm93XCI6XCJSYWRpb0dyb3VwLW1vZHVsZV9fZC1zbS10YWJsZS1yb3dcIixcImQtc20tdGFibGUtY2VsbFwiOlwiUmFkaW9Hcm91cC1tb2R1bGVfX2Qtc20tdGFibGUtY2VsbFwiLFwiZC1zbS1mbGV4XCI6XCJSYWRpb0dyb3VwLW1vZHVsZV9fZC1zbS1mbGV4XCIsXCJkLXNtLWlubGluZS1mbGV4XCI6XCJSYWRpb0dyb3VwLW1vZHVsZV9fZC1zbS1pbmxpbmUtZmxleFwiLFwiZC1tZC1ub25lXCI6XCJSYWRpb0dyb3VwLW1vZHVsZV9fZC1tZC1ub25lXCIsXCJkLW1kLWlubGluZVwiOlwiUmFkaW9Hcm91cC1tb2R1bGVfX2QtbWQtaW5saW5lXCIsXCJkLW1kLWlubGluZS1ibG9ja1wiOlwiUmFkaW9Hcm91cC1tb2R1bGVfX2QtbWQtaW5saW5lLWJsb2NrXCIsXCJkLW1kLWJsb2NrXCI6XCJSYWRpb0dyb3VwLW1vZHVsZV9fZC1tZC1ibG9ja1wiLFwiZC1tZC10YWJsZVwiOlwiUmFkaW9Hcm91cC1tb2R1bGVfX2QtbWQtdGFibGVcIixcImQtbWQtdGFibGUtcm93XCI6XCJSYWRpb0dyb3VwLW1vZHVsZV9fZC1tZC10YWJsZS1yb3dcIixcImQtbWQtdGFibGUtY2VsbFwiOlwiUmFkaW9Hcm91cC1tb2R1bGVfX2QtbWQtdGFibGUtY2VsbFwiLFwiZC1tZC1mbGV4XCI6XCJSYWRpb0dyb3VwLW1vZHVsZV9fZC1tZC1mbGV4XCIsXCJkLW1kLWlubGluZS1mbGV4XCI6XCJSYWRpb0dyb3VwLW1vZHVsZV9fZC1tZC1pbmxpbmUtZmxleFwiLFwiZC1sZy1ub25lXCI6XCJSYWRpb0dyb3VwLW1vZHVsZV9fZC1sZy1ub25lXCIsXCJkLWxnLWlubGluZVwiOlwiUmFkaW9Hcm91cC1tb2R1bGVfX2QtbGctaW5saW5lXCIsXCJkLWxnLWlubGluZS1ibG9ja1wiOlwiUmFkaW9Hcm91cC1tb2R1bGVfX2QtbGctaW5saW5lLWJsb2NrXCIsXCJkLWxnLWJsb2NrXCI6XCJSYWRpb0dyb3VwLW1vZHVsZV9fZC1sZy1ibG9ja1wiLFwiZC1sZy10YWJsZVwiOlwiUmFkaW9Hcm91cC1tb2R1bGVfX2QtbGctdGFibGVcIixcImQtbGctdGFibGUtcm93XCI6XCJSYWRpb0dyb3VwLW1vZHVsZV9fZC1sZy10YWJsZS1yb3dcIixcImQtbGctdGFibGUtY2VsbFwiOlwiUmFkaW9Hcm91cC1tb2R1bGVfX2QtbGctdGFibGUtY2VsbFwiLFwiZC1sZy1mbGV4XCI6XCJSYWRpb0dyb3VwLW1vZHVsZV9fZC1sZy1mbGV4XCIsXCJkLWxnLWlubGluZS1mbGV4XCI6XCJSYWRpb0dyb3VwLW1vZHVsZV9fZC1sZy1pbmxpbmUtZmxleFwiLFwiZC14bC1ub25lXCI6XCJSYWRpb0dyb3VwLW1vZHVsZV9fZC14bC1ub25lXCIsXCJkLXhsLWlubGluZVwiOlwiUmFkaW9Hcm91cC1tb2R1bGVfX2QteGwtaW5saW5lXCIsXCJkLXhsLWlubGluZS1ibG9ja1wiOlwiUmFkaW9Hcm91cC1tb2R1bGVfX2QteGwtaW5saW5lLWJsb2NrXCIsXCJkLXhsLWJsb2NrXCI6XCJSYWRpb0dyb3VwLW1vZHVsZV9fZC14bC1ibG9ja1wiLFwiZC14bC10YWJsZVwiOlwiUmFkaW9Hcm91cC1tb2R1bGVfX2QteGwtdGFibGVcIixcImQteGwtdGFibGUtcm93XCI6XCJSYWRpb0dyb3VwLW1vZHVsZV9fZC14bC10YWJsZS1yb3dcIixcImQteGwtdGFibGUtY2VsbFwiOlwiUmFkaW9Hcm91cC1tb2R1bGVfX2QteGwtdGFibGUtY2VsbFwiLFwiZC14bC1mbGV4XCI6XCJSYWRpb0dyb3VwLW1vZHVsZV9fZC14bC1mbGV4XCIsXCJkLXhsLWlubGluZS1mbGV4XCI6XCJSYWRpb0dyb3VwLW1vZHVsZV9fZC14bC1pbmxpbmUtZmxleFwiLFwiZC1wcmludC1ub25lXCI6XCJSYWRpb0dyb3VwLW1vZHVsZV9fZC1wcmludC1ub25lXCIsXCJkLXByaW50LWlubGluZVwiOlwiUmFkaW9Hcm91cC1tb2R1bGVfX2QtcHJpbnQtaW5saW5lXCIsXCJkLXByaW50LWlubGluZS1ibG9ja1wiOlwiUmFkaW9Hcm91cC1tb2R1bGVfX2QtcHJpbnQtaW5saW5lLWJsb2NrXCIsXCJkLXByaW50LWJsb2NrXCI6XCJSYWRpb0dyb3VwLW1vZHVsZV9fZC1wcmludC1ibG9ja1wiLFwiZC1wcmludC10YWJsZVwiOlwiUmFkaW9Hcm91cC1tb2R1bGVfX2QtcHJpbnQtdGFibGVcIixcImQtcHJpbnQtdGFibGUtcm93XCI6XCJSYWRpb0dyb3VwLW1vZHVsZV9fZC1wcmludC10YWJsZS1yb3dcIixcImQtcHJpbnQtdGFibGUtY2VsbFwiOlwiUmFkaW9Hcm91cC1tb2R1bGVfX2QtcHJpbnQtdGFibGUtY2VsbFwiLFwiZC1wcmludC1mbGV4XCI6XCJSYWRpb0dyb3VwLW1vZHVsZV9fZC1wcmludC1mbGV4XCIsXCJkLXByaW50LWlubGluZS1mbGV4XCI6XCJSYWRpb0dyb3VwLW1vZHVsZV9fZC1wcmludC1pbmxpbmUtZmxleFwiLFwicmFkaW8td3JhcHBlclwiOlwiUmFkaW9Hcm91cC1tb2R1bGVfX3JhZGlvLXdyYXBwZXJcIixcImJ1dHRvbi1sYXJnZS13cmFwcGVyXCI6XCJSYWRpb0dyb3VwLW1vZHVsZV9fYnV0dG9uLWxhcmdlLXdyYXBwZXJcIixcImJ1dHRvbi1zbWFsbC13cmFwcGVyXCI6XCJSYWRpb0dyb3VwLW1vZHVsZV9fYnV0dG9uLXNtYWxsLXdyYXBwZXJcIixcImJ1dHRvbi1hbHdheXMtc21hbGwtd3JhcHBlclwiOlwiUmFkaW9Hcm91cC1tb2R1bGVfX2J1dHRvbi1hbHdheXMtc21hbGwtd3JhcHBlclwifTtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBQbGVhc2UgZG8gbm90IHVzZSB0aGlzIGNvbXBvbmVudC4gVXNlIDxSYWRpbyAvPiBkaXJlY3RseSBpbnN0ZWFkXG4gKi9cbmZ1bmN0aW9uIFJhZGlvR3JvdXAoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgIF9yZWYkdmFyaWFudCA9IF9yZWYudmFyaWFudCxcbiAgICAgIHZhcmlhbnQgPSBfcmVmJHZhcmlhbnQgPT09IHZvaWQgMCA/ICdkZWZhdWx0JyA6IF9yZWYkdmFyaWFudCxcbiAgICAgIGljb25WYXJpYW50ID0gX3JlZi5pY29uVmFyaWFudCxcbiAgICAgIGljb25WYXJpYW50Q2hlY2tlZCA9IF9yZWYuaWNvblZhcmlhbnRDaGVja2VkLFxuICAgICAgaWNvbkZvbnRTaXplID0gX3JlZi5pY29uRm9udFNpemUsXG4gICAgICB2YWx1ZSA9IF9yZWYudmFsdWUsXG4gICAgICBfb25DaGFuZ2UgPSBfcmVmLm9uQ2hhbmdlO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIGNvbnNvbGUud2FybignRGVwcmVjYXRpb24gd2FybmluZzogUGxlYXNlIGRvIG5vdCB1c2UgUmFkaW9Hcm91cC4gVXNlIDxSYWRpbyAvPiBkaXJlY3RseScpO1xuICB9XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIG51bGwsIFJlYWN0X19kZWZhdWx0LkNoaWxkcmVuLm1hcChjaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgaWYgKCEgLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XG4gICAgICBjbGFzc05hbWU6IHN0eWxlcyR2W1wiXCIuY29uY2F0KHZhcmlhbnQsIFwiLXdyYXBwZXJcIildXG4gICAgfSwgLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHZhcmlhbnQ6IHZhcmlhbnQsXG4gICAgICBpY29uVmFyaWFudDogaWNvblZhcmlhbnQsXG4gICAgICBpY29uVmFyaWFudENoZWNrZWQ6IGljb25WYXJpYW50Q2hlY2tlZCxcbiAgICAgIGljb25Gb250U2l6ZTogaWNvbkZvbnRTaXplLFxuICAgICAgY2hlY2tlZDogdmFsdWUgPT09IGNoaWxkLnByb3BzLnZhbHVlLFxuICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKCkge1xuICAgICAgICBfb25DaGFuZ2UoY2hpbGQucHJvcHMudmFsdWUpO1xuICAgICAgfVxuICAgIH0pKTtcbiAgfSkpO1xufVxuXG5mdW5jdGlvbiBUaGVhZChwcm9wcykge1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJ0aGVhZFwiLCBwcm9wcyk7XG59XG5cbmZ1bmN0aW9uIFRib2R5KHByb3BzKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcInRib2R5XCIsIHByb3BzKTtcbn1cblxudmFyIHN0eWxlcyR3ID0ge1wiZC1ub25lXCI6XCJUYWJsZS1tb2R1bGVfX2Qtbm9uZVwiLFwiZC1pbmxpbmVcIjpcIlRhYmxlLW1vZHVsZV9fZC1pbmxpbmVcIixcImQtaW5saW5lLWJsb2NrXCI6XCJUYWJsZS1tb2R1bGVfX2QtaW5saW5lLWJsb2NrXCIsXCJkLWJsb2NrXCI6XCJUYWJsZS1tb2R1bGVfX2QtYmxvY2tcIixcImQtdGFibGVcIjpcIlRhYmxlLW1vZHVsZV9fZC10YWJsZVwiLFwiZC10YWJsZS1yb3dcIjpcIlRhYmxlLW1vZHVsZV9fZC10YWJsZS1yb3dcIixcImQtdGFibGUtY2VsbFwiOlwiVGFibGUtbW9kdWxlX19kLXRhYmxlLWNlbGxcIixcImQtZmxleFwiOlwiVGFibGUtbW9kdWxlX19kLWZsZXhcIixcImQtaW5saW5lLWZsZXhcIjpcIlRhYmxlLW1vZHVsZV9fZC1pbmxpbmUtZmxleFwiLFwiZC1zbS1ub25lXCI6XCJUYWJsZS1tb2R1bGVfX2Qtc20tbm9uZVwiLFwiZC1zbS1pbmxpbmVcIjpcIlRhYmxlLW1vZHVsZV9fZC1zbS1pbmxpbmVcIixcImQtc20taW5saW5lLWJsb2NrXCI6XCJUYWJsZS1tb2R1bGVfX2Qtc20taW5saW5lLWJsb2NrXCIsXCJkLXNtLWJsb2NrXCI6XCJUYWJsZS1tb2R1bGVfX2Qtc20tYmxvY2tcIixcImQtc20tdGFibGVcIjpcIlRhYmxlLW1vZHVsZV9fZC1zbS10YWJsZVwiLFwiZC1zbS10YWJsZS1yb3dcIjpcIlRhYmxlLW1vZHVsZV9fZC1zbS10YWJsZS1yb3dcIixcImQtc20tdGFibGUtY2VsbFwiOlwiVGFibGUtbW9kdWxlX19kLXNtLXRhYmxlLWNlbGxcIixcImQtc20tZmxleFwiOlwiVGFibGUtbW9kdWxlX19kLXNtLWZsZXhcIixcImQtc20taW5saW5lLWZsZXhcIjpcIlRhYmxlLW1vZHVsZV9fZC1zbS1pbmxpbmUtZmxleFwiLFwiZC1tZC1ub25lXCI6XCJUYWJsZS1tb2R1bGVfX2QtbWQtbm9uZVwiLFwiZC1tZC1pbmxpbmVcIjpcIlRhYmxlLW1vZHVsZV9fZC1tZC1pbmxpbmVcIixcImQtbWQtaW5saW5lLWJsb2NrXCI6XCJUYWJsZS1tb2R1bGVfX2QtbWQtaW5saW5lLWJsb2NrXCIsXCJkLW1kLWJsb2NrXCI6XCJUYWJsZS1tb2R1bGVfX2QtbWQtYmxvY2tcIixcImQtbWQtdGFibGVcIjpcIlRhYmxlLW1vZHVsZV9fZC1tZC10YWJsZVwiLFwiZC1tZC10YWJsZS1yb3dcIjpcIlRhYmxlLW1vZHVsZV9fZC1tZC10YWJsZS1yb3dcIixcImQtbWQtdGFibGUtY2VsbFwiOlwiVGFibGUtbW9kdWxlX19kLW1kLXRhYmxlLWNlbGxcIixcImQtbWQtZmxleFwiOlwiVGFibGUtbW9kdWxlX19kLW1kLWZsZXhcIixcImQtbWQtaW5saW5lLWZsZXhcIjpcIlRhYmxlLW1vZHVsZV9fZC1tZC1pbmxpbmUtZmxleFwiLFwiZC1sZy1ub25lXCI6XCJUYWJsZS1tb2R1bGVfX2QtbGctbm9uZVwiLFwiZC1sZy1pbmxpbmVcIjpcIlRhYmxlLW1vZHVsZV9fZC1sZy1pbmxpbmVcIixcImQtbGctaW5saW5lLWJsb2NrXCI6XCJUYWJsZS1tb2R1bGVfX2QtbGctaW5saW5lLWJsb2NrXCIsXCJkLWxnLWJsb2NrXCI6XCJUYWJsZS1tb2R1bGVfX2QtbGctYmxvY2tcIixcImQtbGctdGFibGVcIjpcIlRhYmxlLW1vZHVsZV9fZC1sZy10YWJsZVwiLFwiZC1sZy10YWJsZS1yb3dcIjpcIlRhYmxlLW1vZHVsZV9fZC1sZy10YWJsZS1yb3dcIixcImQtbGctdGFibGUtY2VsbFwiOlwiVGFibGUtbW9kdWxlX19kLWxnLXRhYmxlLWNlbGxcIixcImQtbGctZmxleFwiOlwiVGFibGUtbW9kdWxlX19kLWxnLWZsZXhcIixcImQtbGctaW5saW5lLWZsZXhcIjpcIlRhYmxlLW1vZHVsZV9fZC1sZy1pbmxpbmUtZmxleFwiLFwiZC14bC1ub25lXCI6XCJUYWJsZS1tb2R1bGVfX2QteGwtbm9uZVwiLFwiZC14bC1pbmxpbmVcIjpcIlRhYmxlLW1vZHVsZV9fZC14bC1pbmxpbmVcIixcImQteGwtaW5saW5lLWJsb2NrXCI6XCJUYWJsZS1tb2R1bGVfX2QteGwtaW5saW5lLWJsb2NrXCIsXCJkLXhsLWJsb2NrXCI6XCJUYWJsZS1tb2R1bGVfX2QteGwtYmxvY2tcIixcImQteGwtdGFibGVcIjpcIlRhYmxlLW1vZHVsZV9fZC14bC10YWJsZVwiLFwiZC14bC10YWJsZS1yb3dcIjpcIlRhYmxlLW1vZHVsZV9fZC14bC10YWJsZS1yb3dcIixcImQteGwtdGFibGUtY2VsbFwiOlwiVGFibGUtbW9kdWxlX19kLXhsLXRhYmxlLWNlbGxcIixcImQteGwtZmxleFwiOlwiVGFibGUtbW9kdWxlX19kLXhsLWZsZXhcIixcImQteGwtaW5saW5lLWZsZXhcIjpcIlRhYmxlLW1vZHVsZV9fZC14bC1pbmxpbmUtZmxleFwiLFwiZC1wcmludC1ub25lXCI6XCJUYWJsZS1tb2R1bGVfX2QtcHJpbnQtbm9uZVwiLFwiZC1wcmludC1pbmxpbmVcIjpcIlRhYmxlLW1vZHVsZV9fZC1wcmludC1pbmxpbmVcIixcImQtcHJpbnQtaW5saW5lLWJsb2NrXCI6XCJUYWJsZS1tb2R1bGVfX2QtcHJpbnQtaW5saW5lLWJsb2NrXCIsXCJkLXByaW50LWJsb2NrXCI6XCJUYWJsZS1tb2R1bGVfX2QtcHJpbnQtYmxvY2tcIixcImQtcHJpbnQtdGFibGVcIjpcIlRhYmxlLW1vZHVsZV9fZC1wcmludC10YWJsZVwiLFwiZC1wcmludC10YWJsZS1yb3dcIjpcIlRhYmxlLW1vZHVsZV9fZC1wcmludC10YWJsZS1yb3dcIixcImQtcHJpbnQtdGFibGUtY2VsbFwiOlwiVGFibGUtbW9kdWxlX19kLXByaW50LXRhYmxlLWNlbGxcIixcImQtcHJpbnQtZmxleFwiOlwiVGFibGUtbW9kdWxlX19kLXByaW50LWZsZXhcIixcImQtcHJpbnQtaW5saW5lLWZsZXhcIjpcIlRhYmxlLW1vZHVsZV9fZC1wcmludC1pbmxpbmUtZmxleFwiLFwiVGFibGVcIjpcIlRhYmxlLW1vZHVsZV9fVGFibGVcIixcIlRoXCI6XCJUYWJsZS1tb2R1bGVfX1RoXCIsXCJzb3J0LWljb25cIjpcIlRhYmxlLW1vZHVsZV9fc29ydC1pY29uXCIsXCJjbGlja2FibGVcIjpcIlRhYmxlLW1vZHVsZV9fY2xpY2thYmxlXCIsXCJzb3J0ZWRcIjpcIlRhYmxlLW1vZHVsZV9fc29ydGVkXCIsXCJhc2NcIjpcIlRhYmxlLW1vZHVsZV9fYXNjXCIsXCJkZXNjXCI6XCJUYWJsZS1tb2R1bGVfX2Rlc2NcIixcIlJvd1wiOlwiVGFibGUtbW9kdWxlX19Sb3dcIixcInNvbGlkLWJvcmRlcnNcIjpcIlRhYmxlLW1vZHVsZV9fc29saWQtYm9yZGVyc1wiLFwiZGFzaGVkLWJvcmRlcnNcIjpcIlRhYmxlLW1vZHVsZV9fZGFzaGVkLWJvcmRlcnNcIixcIkNlbGxcIjpcIlRhYmxlLW1vZHVsZV9fQ2VsbFwifTtcblxuZnVuY3Rpb24gUm93JDEocHJvcHMpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICAgIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHByb3BzLCBbXCJjbGFzc05hbWVcIiwgXCJjaGlsZHJlblwiXSk7XG5cbiAgdmFyIGNsYXNzTmFtZXMgPSBtZXJnZUNsYXNzTmFtZXMoc3R5bGVzJHcuUm93LCBjbGFzc05hbWUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJ0clwiLCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lc1xuICB9KSwgY2hpbGRyZW4pO1xufVxuXG5mdW5jdGlvbiBUaChwcm9wcykge1xuICB2YXIgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgc29ydCA9IHByb3BzLnNvcnQsXG4gICAgICBvbkNsaWNrID0gcHJvcHMub25DbGljayxcbiAgICAgIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHByb3BzLCBbXCJjbGFzc05hbWVcIiwgXCJzb3J0XCIsIFwib25DbGlja1wiLCBcImNoaWxkcmVuXCJdKTtcblxuICB2YXIgY2xhc3NOYW1lcyA9IG1lcmdlQ2xhc3NOYW1lcyhzdHlsZXMkdy5UaCwgY2xhc3NOYW1lLCBzb3J0ICYmIHN0eWxlcyR3W3NvcnRdLCBzb3J0ICYmIHN0eWxlcyR3Wydzb3J0ZWQnXSwgb25DbGljayAmJiBzdHlsZXMkd1snY2xpY2thYmxlJ10pO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJ0aFwiLCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lc1xuICB9KSwgdHlwZW9mIG9uQ2xpY2sgPT09ICdmdW5jdGlvbicgPyAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7XG4gICAgb25DbGljazogb25DbGlja1xuICB9LCB0eXBlb2YgY2hpbGRyZW4gPT09ICdzdHJpbmcnID8gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIG51bGwsIGNoaWxkcmVuKSA6IGNoaWxkcmVuLCAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChJY29uLCB7XG4gICAgY2xhc3NOYW1lOiBzdHlsZXMkd1snc29ydC1pY29uJ10sXG4gICAgbmFtZTogXCJhcnJvdy1sZWZ0XCIsXG4gICAgZm9udFNpemU6IFwiaW5oZXJpdFwiXG4gIH0pKSA6IGNoaWxkcmVuKTtcbn1cblxuZnVuY3Rpb24gQ2VsbChwcm9wcykge1xuICB2YXIgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocHJvcHMsIFtcImNsYXNzTmFtZVwiLCBcImNoaWxkcmVuXCJdKTtcblxuICB2YXIgY2xhc3NOYW1lcyA9IG1lcmdlQ2xhc3NOYW1lcyhzdHlsZXMkdy5DZWxsLCBjbGFzc05hbWUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJ0ZFwiLCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lc1xuICB9KSwgY2hpbGRyZW4pO1xufVxuXG5mdW5jdGlvbiBUZm9vdChwcm9wcykge1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJ0Zm9vdFwiLCBwcm9wcyk7XG59XG5cbmZ1bmN0aW9uIFRhYmxlKHByb3BzKSB7XG4gIHZhciBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgICBfcHJvcHMkdGFibGVTdHlsZSA9IHByb3BzLnRhYmxlU3R5bGUsXG4gICAgICB0YWJsZVN0eWxlID0gX3Byb3BzJHRhYmxlU3R5bGUgPT09IHZvaWQgMCA/ICdzb2xpZC1ib3JkZXJzJyA6IF9wcm9wcyR0YWJsZVN0eWxlLFxuICAgICAgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocHJvcHMsIFtcImNsYXNzTmFtZVwiLCBcInRhYmxlU3R5bGVcIiwgXCJjaGlsZHJlblwiXSk7XG5cbiAgdmFyIGNsYXNzTmFtZXMgPSBtZXJnZUNsYXNzTmFtZXMoc3R5bGVzJHcuVGFibGUsIGNsYXNzTmFtZSwgc3R5bGVzJHdbdGFibGVTdHlsZV0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJ0YWJsZVwiLCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lc1xuICB9KSwgY2hpbGRyZW4pO1xufVxuXG5UYWJsZS5UaGVhZCA9IFRoZWFkO1xuVGFibGUuVGZvb3QgPSBUZm9vdDtcblRhYmxlLlRib2R5ID0gVGJvZHk7XG5UYWJsZS5DZWxsID0gQ2VsbDtcblRhYmxlLlJvdyA9IFJvdyQxO1xuVGFibGUuVGggPSBUaDsgLy8gQFRPRE8gZm9yIGNvbXBsZXRlbmVzcycgc2FrZSwgd2UgY2FuIHN0aWxsIGFkZCA8dGZvb3Q+LCA8Y2FwdGlvbj4gJiA8Y29sZ3JvdXA+XG5cbnZhciBzdHlsZXMkeCA9IHtcImQtbm9uZVwiOlwiVGFicy1tb2R1bGVfX2Qtbm9uZVwiLFwiZC1pbmxpbmVcIjpcIlRhYnMtbW9kdWxlX19kLWlubGluZVwiLFwiZC1pbmxpbmUtYmxvY2tcIjpcIlRhYnMtbW9kdWxlX19kLWlubGluZS1ibG9ja1wiLFwiZC1ibG9ja1wiOlwiVGFicy1tb2R1bGVfX2QtYmxvY2tcIixcImQtdGFibGVcIjpcIlRhYnMtbW9kdWxlX19kLXRhYmxlXCIsXCJkLXRhYmxlLXJvd1wiOlwiVGFicy1tb2R1bGVfX2QtdGFibGUtcm93XCIsXCJkLXRhYmxlLWNlbGxcIjpcIlRhYnMtbW9kdWxlX19kLXRhYmxlLWNlbGxcIixcImQtZmxleFwiOlwiVGFicy1tb2R1bGVfX2QtZmxleFwiLFwiZC1pbmxpbmUtZmxleFwiOlwiVGFicy1tb2R1bGVfX2QtaW5saW5lLWZsZXhcIixcImQtc20tbm9uZVwiOlwiVGFicy1tb2R1bGVfX2Qtc20tbm9uZVwiLFwiZC1zbS1pbmxpbmVcIjpcIlRhYnMtbW9kdWxlX19kLXNtLWlubGluZVwiLFwiZC1zbS1pbmxpbmUtYmxvY2tcIjpcIlRhYnMtbW9kdWxlX19kLXNtLWlubGluZS1ibG9ja1wiLFwiZC1zbS1ibG9ja1wiOlwiVGFicy1tb2R1bGVfX2Qtc20tYmxvY2tcIixcImQtc20tdGFibGVcIjpcIlRhYnMtbW9kdWxlX19kLXNtLXRhYmxlXCIsXCJkLXNtLXRhYmxlLXJvd1wiOlwiVGFicy1tb2R1bGVfX2Qtc20tdGFibGUtcm93XCIsXCJkLXNtLXRhYmxlLWNlbGxcIjpcIlRhYnMtbW9kdWxlX19kLXNtLXRhYmxlLWNlbGxcIixcImQtc20tZmxleFwiOlwiVGFicy1tb2R1bGVfX2Qtc20tZmxleFwiLFwiZC1zbS1pbmxpbmUtZmxleFwiOlwiVGFicy1tb2R1bGVfX2Qtc20taW5saW5lLWZsZXhcIixcImQtbWQtbm9uZVwiOlwiVGFicy1tb2R1bGVfX2QtbWQtbm9uZVwiLFwiZC1tZC1pbmxpbmVcIjpcIlRhYnMtbW9kdWxlX19kLW1kLWlubGluZVwiLFwiZC1tZC1pbmxpbmUtYmxvY2tcIjpcIlRhYnMtbW9kdWxlX19kLW1kLWlubGluZS1ibG9ja1wiLFwiZC1tZC1ibG9ja1wiOlwiVGFicy1tb2R1bGVfX2QtbWQtYmxvY2tcIixcImQtbWQtdGFibGVcIjpcIlRhYnMtbW9kdWxlX19kLW1kLXRhYmxlXCIsXCJkLW1kLXRhYmxlLXJvd1wiOlwiVGFicy1tb2R1bGVfX2QtbWQtdGFibGUtcm93XCIsXCJkLW1kLXRhYmxlLWNlbGxcIjpcIlRhYnMtbW9kdWxlX19kLW1kLXRhYmxlLWNlbGxcIixcImQtbWQtZmxleFwiOlwiVGFicy1tb2R1bGVfX2QtbWQtZmxleFwiLFwiZC1tZC1pbmxpbmUtZmxleFwiOlwiVGFicy1tb2R1bGVfX2QtbWQtaW5saW5lLWZsZXhcIixcImQtbGctbm9uZVwiOlwiVGFicy1tb2R1bGVfX2QtbGctbm9uZVwiLFwiZC1sZy1pbmxpbmVcIjpcIlRhYnMtbW9kdWxlX19kLWxnLWlubGluZVwiLFwiZC1sZy1pbmxpbmUtYmxvY2tcIjpcIlRhYnMtbW9kdWxlX19kLWxnLWlubGluZS1ibG9ja1wiLFwiZC1sZy1ibG9ja1wiOlwiVGFicy1tb2R1bGVfX2QtbGctYmxvY2tcIixcImQtbGctdGFibGVcIjpcIlRhYnMtbW9kdWxlX19kLWxnLXRhYmxlXCIsXCJkLWxnLXRhYmxlLXJvd1wiOlwiVGFicy1tb2R1bGVfX2QtbGctdGFibGUtcm93XCIsXCJkLWxnLXRhYmxlLWNlbGxcIjpcIlRhYnMtbW9kdWxlX19kLWxnLXRhYmxlLWNlbGxcIixcImQtbGctZmxleFwiOlwiVGFicy1tb2R1bGVfX2QtbGctZmxleFwiLFwiZC1sZy1pbmxpbmUtZmxleFwiOlwiVGFicy1tb2R1bGVfX2QtbGctaW5saW5lLWZsZXhcIixcImQteGwtbm9uZVwiOlwiVGFicy1tb2R1bGVfX2QteGwtbm9uZVwiLFwiZC14bC1pbmxpbmVcIjpcIlRhYnMtbW9kdWxlX19kLXhsLWlubGluZVwiLFwiZC14bC1pbmxpbmUtYmxvY2tcIjpcIlRhYnMtbW9kdWxlX19kLXhsLWlubGluZS1ibG9ja1wiLFwiZC14bC1ibG9ja1wiOlwiVGFicy1tb2R1bGVfX2QteGwtYmxvY2tcIixcImQteGwtdGFibGVcIjpcIlRhYnMtbW9kdWxlX19kLXhsLXRhYmxlXCIsXCJkLXhsLXRhYmxlLXJvd1wiOlwiVGFicy1tb2R1bGVfX2QteGwtdGFibGUtcm93XCIsXCJkLXhsLXRhYmxlLWNlbGxcIjpcIlRhYnMtbW9kdWxlX19kLXhsLXRhYmxlLWNlbGxcIixcImQteGwtZmxleFwiOlwiVGFicy1tb2R1bGVfX2QteGwtZmxleFwiLFwiZC14bC1pbmxpbmUtZmxleFwiOlwiVGFicy1tb2R1bGVfX2QteGwtaW5saW5lLWZsZXhcIixcImQtcHJpbnQtbm9uZVwiOlwiVGFicy1tb2R1bGVfX2QtcHJpbnQtbm9uZVwiLFwiZC1wcmludC1pbmxpbmVcIjpcIlRhYnMtbW9kdWxlX19kLXByaW50LWlubGluZVwiLFwiZC1wcmludC1pbmxpbmUtYmxvY2tcIjpcIlRhYnMtbW9kdWxlX19kLXByaW50LWlubGluZS1ibG9ja1wiLFwiZC1wcmludC1ibG9ja1wiOlwiVGFicy1tb2R1bGVfX2QtcHJpbnQtYmxvY2tcIixcImQtcHJpbnQtdGFibGVcIjpcIlRhYnMtbW9kdWxlX19kLXByaW50LXRhYmxlXCIsXCJkLXByaW50LXRhYmxlLXJvd1wiOlwiVGFicy1tb2R1bGVfX2QtcHJpbnQtdGFibGUtcm93XCIsXCJkLXByaW50LXRhYmxlLWNlbGxcIjpcIlRhYnMtbW9kdWxlX19kLXByaW50LXRhYmxlLWNlbGxcIixcImQtcHJpbnQtZmxleFwiOlwiVGFicy1tb2R1bGVfX2QtcHJpbnQtZmxleFwiLFwiZC1wcmludC1pbmxpbmUtZmxleFwiOlwiVGFicy1tb2R1bGVfX2QtcHJpbnQtaW5saW5lLWZsZXhcIixcIlRhYlwiOlwiVGFicy1tb2R1bGVfX1RhYlwiLFwiaXNBY3RpdmVcIjpcIlRhYnMtbW9kdWxlX19pc0FjdGl2ZVwifTtcblxuZnVuY3Rpb24gVGFiKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgaXNBY3RpdmUgPSBfcmVmLmlzQWN0aXZlLFxuICAgICAgX29uQ2xpY2sgPSBfcmVmLm9uQ2xpY2ssXG4gICAgICBfcmVmJHJvbGUgPSBfcmVmLnJvbGUsXG4gICAgICByb2xlID0gX3JlZiRyb2xlID09PSB2b2lkIDAgPyAndGFiJyA6IF9yZWYkcm9sZSxcbiAgICAgIGFzID0gX3JlZi5hcyxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNsYXNzTmFtZVwiLCBcImNoaWxkcmVuXCIsIFwiaXNBY3RpdmVcIiwgXCJvbkNsaWNrXCIsIFwicm9sZVwiLCBcImFzXCJdKTtcblxuICB2YXIgY2xhc3NOYW1lcyA9IG1lcmdlQ2xhc3NOYW1lcyhjbGFzc05hbWUsIHN0eWxlcyR4LlRhYiwgaXNBY3RpdmUgJiYgc3R5bGVzJHguaXNBY3RpdmUpO1xuICB2YXIgZGVmYXVsdEFzUHJvcHMgPSBhcyA9PT0gdW5kZWZpbmVkID8ge1xuICAgIGhyZWY6ICcjJyxcbiAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgIC8vIFByZXZlbnQgbmF2aWdhdGlvbiB0byBoYXNoIGFmdGVyIFVSTFxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBpZiAodHlwZW9mIF9vbkNsaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGUucGVyc2lzdCgpO1xuXG4gICAgICAgIF9vbkNsaWNrKGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSA6IHtcbiAgICBvbkNsaWNrOiBfb25DbGlja1xuICB9O1xuICB2YXIgQ29tcG9uZW50ID0gYXMgfHwgJ2EnO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgZGVmYXVsdEFzUHJvcHMsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMsXG4gICAgcm9sZTogcm9sZSxcbiAgICBcImFyaWEtc2VsZWN0ZWRcIjogaXNBY3RpdmVcbiAgfSwgcHJvcHMpLCBjaGlsZHJlbik7XG59XG5cbmZ1bmN0aW9uIFRhYnMoX3JlZjIpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZjIuY2hpbGRyZW4sXG4gICAgICBfcmVmMiRyb2xlID0gX3JlZjIucm9sZSxcbiAgICAgIHJvbGUgPSBfcmVmMiRyb2xlID09PSB2b2lkIDAgPyAndGFibGlzdCcgOiBfcmVmMiRyb2xlLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIFtcImNoaWxkcmVuXCIsIFwicm9sZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KEZsZXgsIF9leHRlbmRzKHtcbiAgICByb2xlOiByb2xlXG4gIH0sIHByb3BzKSwgY2hpbGRyZW4pO1xufVxuXG5UYWJzLlRhYiA9IFRhYjtcblxudmFyIHN0eWxlcyR5ID0ge1wiZC1ub25lXCI6XCJIaWdobGlnaHRlZEhlYWRlci1tb2R1bGVfX2Qtbm9uZVwiLFwiZC1pbmxpbmVcIjpcIkhpZ2hsaWdodGVkSGVhZGVyLW1vZHVsZV9fZC1pbmxpbmVcIixcImQtaW5saW5lLWJsb2NrXCI6XCJIaWdobGlnaHRlZEhlYWRlci1tb2R1bGVfX2QtaW5saW5lLWJsb2NrXCIsXCJkLWJsb2NrXCI6XCJIaWdobGlnaHRlZEhlYWRlci1tb2R1bGVfX2QtYmxvY2tcIixcImQtdGFibGVcIjpcIkhpZ2hsaWdodGVkSGVhZGVyLW1vZHVsZV9fZC10YWJsZVwiLFwiZC10YWJsZS1yb3dcIjpcIkhpZ2hsaWdodGVkSGVhZGVyLW1vZHVsZV9fZC10YWJsZS1yb3dcIixcImQtdGFibGUtY2VsbFwiOlwiSGlnaGxpZ2h0ZWRIZWFkZXItbW9kdWxlX19kLXRhYmxlLWNlbGxcIixcImQtZmxleFwiOlwiSGlnaGxpZ2h0ZWRIZWFkZXItbW9kdWxlX19kLWZsZXhcIixcImQtaW5saW5lLWZsZXhcIjpcIkhpZ2hsaWdodGVkSGVhZGVyLW1vZHVsZV9fZC1pbmxpbmUtZmxleFwiLFwiZC1zbS1ub25lXCI6XCJIaWdobGlnaHRlZEhlYWRlci1tb2R1bGVfX2Qtc20tbm9uZVwiLFwiZC1zbS1pbmxpbmVcIjpcIkhpZ2hsaWdodGVkSGVhZGVyLW1vZHVsZV9fZC1zbS1pbmxpbmVcIixcImQtc20taW5saW5lLWJsb2NrXCI6XCJIaWdobGlnaHRlZEhlYWRlci1tb2R1bGVfX2Qtc20taW5saW5lLWJsb2NrXCIsXCJkLXNtLWJsb2NrXCI6XCJIaWdobGlnaHRlZEhlYWRlci1tb2R1bGVfX2Qtc20tYmxvY2tcIixcImQtc20tdGFibGVcIjpcIkhpZ2hsaWdodGVkSGVhZGVyLW1vZHVsZV9fZC1zbS10YWJsZVwiLFwiZC1zbS10YWJsZS1yb3dcIjpcIkhpZ2hsaWdodGVkSGVhZGVyLW1vZHVsZV9fZC1zbS10YWJsZS1yb3dcIixcImQtc20tdGFibGUtY2VsbFwiOlwiSGlnaGxpZ2h0ZWRIZWFkZXItbW9kdWxlX19kLXNtLXRhYmxlLWNlbGxcIixcImQtc20tZmxleFwiOlwiSGlnaGxpZ2h0ZWRIZWFkZXItbW9kdWxlX19kLXNtLWZsZXhcIixcImQtc20taW5saW5lLWZsZXhcIjpcIkhpZ2hsaWdodGVkSGVhZGVyLW1vZHVsZV9fZC1zbS1pbmxpbmUtZmxleFwiLFwiZC1tZC1ub25lXCI6XCJIaWdobGlnaHRlZEhlYWRlci1tb2R1bGVfX2QtbWQtbm9uZVwiLFwiZC1tZC1pbmxpbmVcIjpcIkhpZ2hsaWdodGVkSGVhZGVyLW1vZHVsZV9fZC1tZC1pbmxpbmVcIixcImQtbWQtaW5saW5lLWJsb2NrXCI6XCJIaWdobGlnaHRlZEhlYWRlci1tb2R1bGVfX2QtbWQtaW5saW5lLWJsb2NrXCIsXCJkLW1kLWJsb2NrXCI6XCJIaWdobGlnaHRlZEhlYWRlci1tb2R1bGVfX2QtbWQtYmxvY2tcIixcImQtbWQtdGFibGVcIjpcIkhpZ2hsaWdodGVkSGVhZGVyLW1vZHVsZV9fZC1tZC10YWJsZVwiLFwiZC1tZC10YWJsZS1yb3dcIjpcIkhpZ2hsaWdodGVkSGVhZGVyLW1vZHVsZV9fZC1tZC10YWJsZS1yb3dcIixcImQtbWQtdGFibGUtY2VsbFwiOlwiSGlnaGxpZ2h0ZWRIZWFkZXItbW9kdWxlX19kLW1kLXRhYmxlLWNlbGxcIixcImQtbWQtZmxleFwiOlwiSGlnaGxpZ2h0ZWRIZWFkZXItbW9kdWxlX19kLW1kLWZsZXhcIixcImQtbWQtaW5saW5lLWZsZXhcIjpcIkhpZ2hsaWdodGVkSGVhZGVyLW1vZHVsZV9fZC1tZC1pbmxpbmUtZmxleFwiLFwiZC1sZy1ub25lXCI6XCJIaWdobGlnaHRlZEhlYWRlci1tb2R1bGVfX2QtbGctbm9uZVwiLFwiZC1sZy1pbmxpbmVcIjpcIkhpZ2hsaWdodGVkSGVhZGVyLW1vZHVsZV9fZC1sZy1pbmxpbmVcIixcImQtbGctaW5saW5lLWJsb2NrXCI6XCJIaWdobGlnaHRlZEhlYWRlci1tb2R1bGVfX2QtbGctaW5saW5lLWJsb2NrXCIsXCJkLWxnLWJsb2NrXCI6XCJIaWdobGlnaHRlZEhlYWRlci1tb2R1bGVfX2QtbGctYmxvY2tcIixcImQtbGctdGFibGVcIjpcIkhpZ2hsaWdodGVkSGVhZGVyLW1vZHVsZV9fZC1sZy10YWJsZVwiLFwiZC1sZy10YWJsZS1yb3dcIjpcIkhpZ2hsaWdodGVkSGVhZGVyLW1vZHVsZV9fZC1sZy10YWJsZS1yb3dcIixcImQtbGctdGFibGUtY2VsbFwiOlwiSGlnaGxpZ2h0ZWRIZWFkZXItbW9kdWxlX19kLWxnLXRhYmxlLWNlbGxcIixcImQtbGctZmxleFwiOlwiSGlnaGxpZ2h0ZWRIZWFkZXItbW9kdWxlX19kLWxnLWZsZXhcIixcImQtbGctaW5saW5lLWZsZXhcIjpcIkhpZ2hsaWdodGVkSGVhZGVyLW1vZHVsZV9fZC1sZy1pbmxpbmUtZmxleFwiLFwiZC14bC1ub25lXCI6XCJIaWdobGlnaHRlZEhlYWRlci1tb2R1bGVfX2QteGwtbm9uZVwiLFwiZC14bC1pbmxpbmVcIjpcIkhpZ2hsaWdodGVkSGVhZGVyLW1vZHVsZV9fZC14bC1pbmxpbmVcIixcImQteGwtaW5saW5lLWJsb2NrXCI6XCJIaWdobGlnaHRlZEhlYWRlci1tb2R1bGVfX2QteGwtaW5saW5lLWJsb2NrXCIsXCJkLXhsLWJsb2NrXCI6XCJIaWdobGlnaHRlZEhlYWRlci1tb2R1bGVfX2QteGwtYmxvY2tcIixcImQteGwtdGFibGVcIjpcIkhpZ2hsaWdodGVkSGVhZGVyLW1vZHVsZV9fZC14bC10YWJsZVwiLFwiZC14bC10YWJsZS1yb3dcIjpcIkhpZ2hsaWdodGVkSGVhZGVyLW1vZHVsZV9fZC14bC10YWJsZS1yb3dcIixcImQteGwtdGFibGUtY2VsbFwiOlwiSGlnaGxpZ2h0ZWRIZWFkZXItbW9kdWxlX19kLXhsLXRhYmxlLWNlbGxcIixcImQteGwtZmxleFwiOlwiSGlnaGxpZ2h0ZWRIZWFkZXItbW9kdWxlX19kLXhsLWZsZXhcIixcImQteGwtaW5saW5lLWZsZXhcIjpcIkhpZ2hsaWdodGVkSGVhZGVyLW1vZHVsZV9fZC14bC1pbmxpbmUtZmxleFwiLFwiZC1wcmludC1ub25lXCI6XCJIaWdobGlnaHRlZEhlYWRlci1tb2R1bGVfX2QtcHJpbnQtbm9uZVwiLFwiZC1wcmludC1pbmxpbmVcIjpcIkhpZ2hsaWdodGVkSGVhZGVyLW1vZHVsZV9fZC1wcmludC1pbmxpbmVcIixcImQtcHJpbnQtaW5saW5lLWJsb2NrXCI6XCJIaWdobGlnaHRlZEhlYWRlci1tb2R1bGVfX2QtcHJpbnQtaW5saW5lLWJsb2NrXCIsXCJkLXByaW50LWJsb2NrXCI6XCJIaWdobGlnaHRlZEhlYWRlci1tb2R1bGVfX2QtcHJpbnQtYmxvY2tcIixcImQtcHJpbnQtdGFibGVcIjpcIkhpZ2hsaWdodGVkSGVhZGVyLW1vZHVsZV9fZC1wcmludC10YWJsZVwiLFwiZC1wcmludC10YWJsZS1yb3dcIjpcIkhpZ2hsaWdodGVkSGVhZGVyLW1vZHVsZV9fZC1wcmludC10YWJsZS1yb3dcIixcImQtcHJpbnQtdGFibGUtY2VsbFwiOlwiSGlnaGxpZ2h0ZWRIZWFkZXItbW9kdWxlX19kLXByaW50LXRhYmxlLWNlbGxcIixcImQtcHJpbnQtZmxleFwiOlwiSGlnaGxpZ2h0ZWRIZWFkZXItbW9kdWxlX19kLXByaW50LWZsZXhcIixcImQtcHJpbnQtaW5saW5lLWZsZXhcIjpcIkhpZ2hsaWdodGVkSGVhZGVyLW1vZHVsZV9fZC1wcmludC1pbmxpbmUtZmxleFwiLFwiSGlnaGxpZ2h0ZWRIZWFkZXJcIjpcIkhpZ2hsaWdodGVkSGVhZGVyLW1vZHVsZV9fSGlnaGxpZ2h0ZWRIZWFkZXJcIn07XG5cbnZhciBIaWdobGlnaHRlZEhlYWRlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEhpZ2hsaWdodGVkSGVhZGVyLCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihIaWdobGlnaHRlZEhlYWRlcik7XG5cbiAgZnVuY3Rpb24gSGlnaGxpZ2h0ZWRIZWFkZXIoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEhpZ2hsaWdodGVkSGVhZGVyKTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhIaWdobGlnaHRlZEhlYWRlciwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIFtcImNsYXNzTmFtZVwiLCBcImNoaWxkcmVuXCJdKTtcblxuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBtZXJnZUNsYXNzTmFtZXMoc3R5bGVzJHlbJ0hpZ2hsaWdodGVkSGVhZGVyJ10sIGNsYXNzTmFtZSlcbiAgICAgIH0sIHByb3BzKSwgY2hpbGRyZW4pO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBIaWdobGlnaHRlZEhlYWRlcjtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbmZ1bmN0aW9uIENoZWNrYm94KF9yZWYpIHtcbiAgdmFyIF9yZWYkaWNvbiA9IF9yZWYuaWNvbixcbiAgICAgIGljb24gPSBfcmVmJGljb24gPT09IHZvaWQgMCA/ICdjaGVja2JveC11bmNoZWNrZWQnIDogX3JlZiRpY29uLFxuICAgICAgX3JlZiRpY29uQ2hlY2tlZCA9IF9yZWYuaWNvbkNoZWNrZWQsXG4gICAgICBpY29uQ2hlY2tlZCA9IF9yZWYkaWNvbkNoZWNrZWQgPT09IHZvaWQgMCA/ICdjaGVja2JveC1jaGVja2VkJyA6IF9yZWYkaWNvbkNoZWNrZWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJpY29uXCIsIFwiaWNvbkNoZWNrZWRcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChTd2l0Y2gsIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIHR5cGU6IFwiY2hlY2tib3hcIixcbiAgICBpY29uOiBpY29uLFxuICAgIGljb25DaGVja2VkOiBpY29uQ2hlY2tlZFxuICB9KSk7XG59XG5cbnZhciBzdHlsZXMkeiA9IHtcImQtbm9uZVwiOlwiTWVudS1tb2R1bGVfX2Qtbm9uZVwiLFwiZC1pbmxpbmVcIjpcIk1lbnUtbW9kdWxlX19kLWlubGluZVwiLFwiZC1pbmxpbmUtYmxvY2tcIjpcIk1lbnUtbW9kdWxlX19kLWlubGluZS1ibG9ja1wiLFwiZC1ibG9ja1wiOlwiTWVudS1tb2R1bGVfX2QtYmxvY2tcIixcImQtdGFibGVcIjpcIk1lbnUtbW9kdWxlX19kLXRhYmxlXCIsXCJkLXRhYmxlLXJvd1wiOlwiTWVudS1tb2R1bGVfX2QtdGFibGUtcm93XCIsXCJkLXRhYmxlLWNlbGxcIjpcIk1lbnUtbW9kdWxlX19kLXRhYmxlLWNlbGxcIixcImQtZmxleFwiOlwiTWVudS1tb2R1bGVfX2QtZmxleFwiLFwiZC1pbmxpbmUtZmxleFwiOlwiTWVudS1tb2R1bGVfX2QtaW5saW5lLWZsZXhcIixcImQtc20tbm9uZVwiOlwiTWVudS1tb2R1bGVfX2Qtc20tbm9uZVwiLFwiZC1zbS1pbmxpbmVcIjpcIk1lbnUtbW9kdWxlX19kLXNtLWlubGluZVwiLFwiZC1zbS1pbmxpbmUtYmxvY2tcIjpcIk1lbnUtbW9kdWxlX19kLXNtLWlubGluZS1ibG9ja1wiLFwiZC1zbS1ibG9ja1wiOlwiTWVudS1tb2R1bGVfX2Qtc20tYmxvY2tcIixcImQtc20tdGFibGVcIjpcIk1lbnUtbW9kdWxlX19kLXNtLXRhYmxlXCIsXCJkLXNtLXRhYmxlLXJvd1wiOlwiTWVudS1tb2R1bGVfX2Qtc20tdGFibGUtcm93XCIsXCJkLXNtLXRhYmxlLWNlbGxcIjpcIk1lbnUtbW9kdWxlX19kLXNtLXRhYmxlLWNlbGxcIixcImQtc20tZmxleFwiOlwiTWVudS1tb2R1bGVfX2Qtc20tZmxleFwiLFwiZC1zbS1pbmxpbmUtZmxleFwiOlwiTWVudS1tb2R1bGVfX2Qtc20taW5saW5lLWZsZXhcIixcImQtbWQtbm9uZVwiOlwiTWVudS1tb2R1bGVfX2QtbWQtbm9uZVwiLFwiZC1tZC1pbmxpbmVcIjpcIk1lbnUtbW9kdWxlX19kLW1kLWlubGluZVwiLFwiZC1tZC1pbmxpbmUtYmxvY2tcIjpcIk1lbnUtbW9kdWxlX19kLW1kLWlubGluZS1ibG9ja1wiLFwiZC1tZC1ibG9ja1wiOlwiTWVudS1tb2R1bGVfX2QtbWQtYmxvY2tcIixcImQtbWQtdGFibGVcIjpcIk1lbnUtbW9kdWxlX19kLW1kLXRhYmxlXCIsXCJkLW1kLXRhYmxlLXJvd1wiOlwiTWVudS1tb2R1bGVfX2QtbWQtdGFibGUtcm93XCIsXCJkLW1kLXRhYmxlLWNlbGxcIjpcIk1lbnUtbW9kdWxlX19kLW1kLXRhYmxlLWNlbGxcIixcImQtbWQtZmxleFwiOlwiTWVudS1tb2R1bGVfX2QtbWQtZmxleFwiLFwiZC1tZC1pbmxpbmUtZmxleFwiOlwiTWVudS1tb2R1bGVfX2QtbWQtaW5saW5lLWZsZXhcIixcImQtbGctbm9uZVwiOlwiTWVudS1tb2R1bGVfX2QtbGctbm9uZVwiLFwiZC1sZy1pbmxpbmVcIjpcIk1lbnUtbW9kdWxlX19kLWxnLWlubGluZVwiLFwiZC1sZy1pbmxpbmUtYmxvY2tcIjpcIk1lbnUtbW9kdWxlX19kLWxnLWlubGluZS1ibG9ja1wiLFwiZC1sZy1ibG9ja1wiOlwiTWVudS1tb2R1bGVfX2QtbGctYmxvY2tcIixcImQtbGctdGFibGVcIjpcIk1lbnUtbW9kdWxlX19kLWxnLXRhYmxlXCIsXCJkLWxnLXRhYmxlLXJvd1wiOlwiTWVudS1tb2R1bGVfX2QtbGctdGFibGUtcm93XCIsXCJkLWxnLXRhYmxlLWNlbGxcIjpcIk1lbnUtbW9kdWxlX19kLWxnLXRhYmxlLWNlbGxcIixcImQtbGctZmxleFwiOlwiTWVudS1tb2R1bGVfX2QtbGctZmxleFwiLFwiZC1sZy1pbmxpbmUtZmxleFwiOlwiTWVudS1tb2R1bGVfX2QtbGctaW5saW5lLWZsZXhcIixcImQteGwtbm9uZVwiOlwiTWVudS1tb2R1bGVfX2QteGwtbm9uZVwiLFwiZC14bC1pbmxpbmVcIjpcIk1lbnUtbW9kdWxlX19kLXhsLWlubGluZVwiLFwiZC14bC1pbmxpbmUtYmxvY2tcIjpcIk1lbnUtbW9kdWxlX19kLXhsLWlubGluZS1ibG9ja1wiLFwiZC14bC1ibG9ja1wiOlwiTWVudS1tb2R1bGVfX2QteGwtYmxvY2tcIixcImQteGwtdGFibGVcIjpcIk1lbnUtbW9kdWxlX19kLXhsLXRhYmxlXCIsXCJkLXhsLXRhYmxlLXJvd1wiOlwiTWVudS1tb2R1bGVfX2QteGwtdGFibGUtcm93XCIsXCJkLXhsLXRhYmxlLWNlbGxcIjpcIk1lbnUtbW9kdWxlX19kLXhsLXRhYmxlLWNlbGxcIixcImQteGwtZmxleFwiOlwiTWVudS1tb2R1bGVfX2QteGwtZmxleFwiLFwiZC14bC1pbmxpbmUtZmxleFwiOlwiTWVudS1tb2R1bGVfX2QteGwtaW5saW5lLWZsZXhcIixcImQtcHJpbnQtbm9uZVwiOlwiTWVudS1tb2R1bGVfX2QtcHJpbnQtbm9uZVwiLFwiZC1wcmludC1pbmxpbmVcIjpcIk1lbnUtbW9kdWxlX19kLXByaW50LWlubGluZVwiLFwiZC1wcmludC1pbmxpbmUtYmxvY2tcIjpcIk1lbnUtbW9kdWxlX19kLXByaW50LWlubGluZS1ibG9ja1wiLFwiZC1wcmludC1ibG9ja1wiOlwiTWVudS1tb2R1bGVfX2QtcHJpbnQtYmxvY2tcIixcImQtcHJpbnQtdGFibGVcIjpcIk1lbnUtbW9kdWxlX19kLXByaW50LXRhYmxlXCIsXCJkLXByaW50LXRhYmxlLXJvd1wiOlwiTWVudS1tb2R1bGVfX2QtcHJpbnQtdGFibGUtcm93XCIsXCJkLXByaW50LXRhYmxlLWNlbGxcIjpcIk1lbnUtbW9kdWxlX19kLXByaW50LXRhYmxlLWNlbGxcIixcImQtcHJpbnQtZmxleFwiOlwiTWVudS1tb2R1bGVfX2QtcHJpbnQtZmxleFwiLFwiZC1wcmludC1pbmxpbmUtZmxleFwiOlwiTWVudS1tb2R1bGVfX2QtcHJpbnQtaW5saW5lLWZsZXhcIixcIk1lbnVcIjpcIk1lbnUtbW9kdWxlX19NZW51XCIsXCJNZW51LW5hdlwiOlwiTWVudS1tb2R1bGVfX01lbnUtbmF2XCIsXCJNZW51LWl0ZW1cIjpcIk1lbnUtbW9kdWxlX19NZW51LWl0ZW1cIixcIk1lbnUtaXRlbS0tYWN0aXZlXCI6XCJNZW51LW1vZHVsZV9fTWVudS1pdGVtLS1hY3RpdmVcIixcIk1lbnUtLXN0YXJ0U2hhZG93XCI6XCJNZW51LW1vZHVsZV9fTWVudS0tc3RhcnRTaGFkb3dcIixcIk1lbnUtLWVuZFNoYWRvd1wiOlwiTWVudS1tb2R1bGVfX01lbnUtLWVuZFNoYWRvd1wifTtcblxuZnVuY3Rpb24gSXRlbShfcmVmKSB7XG4gIHZhciBfcmVmJGlzQWN0aXZlID0gX3JlZi5pc0FjdGl2ZSxcbiAgICAgIGlzQWN0aXZlID0gX3JlZiRpc0FjdGl2ZSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGlzQWN0aXZlLFxuICAgICAgYW1vdW50ID0gX3JlZi5hbW91bnQsXG4gICAgICBpdGVtID0gX3JlZi5pdGVtLFxuICAgICAgb25TY3JvbGxJbnRvVmlldyA9IF9yZWYub25TY3JvbGxJbnRvVmlldyxcbiAgICAgIHJlbmRlciA9IF9yZWYucmVuZGVyLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiaXNBY3RpdmVcIiwgXCJhbW91bnRcIiwgXCJpdGVtXCIsIFwib25TY3JvbGxJbnRvVmlld1wiLCBcInJlbmRlclwiXSk7XG5cbiAgdmFyIHJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgdmFyIGFjdGl2ZUNsYXNzTmFtZSA9IHN0eWxlcyR6WydNZW51LWl0ZW0tLWFjdGl2ZSddO1xuICB2YXIgaXRlbUNsYXNzTmFtZXMgPSBtZXJnZUNsYXNzTmFtZXMoc3R5bGVzJHpbJ01lbnUtaXRlbSddLCBpc0FjdGl2ZSAmJiBhY3RpdmVDbGFzc05hbWUpO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBsaSA9IHJlZi5jdXJyZW50O1xuXG4gICAgaWYgKGlzQWN0aXZlICYmIGxpKSB7XG4gICAgICBsaS5zY3JvbGxJbnRvVmlldyh7XG4gICAgICAgIGJsb2NrOiAnZW5kJyxcbiAgICAgICAgaW5saW5lOiAnY2VudGVyJ1xuICAgICAgfSk7XG4gICAgICBvblNjcm9sbEludG9WaWV3KCk7XG4gICAgfVxuICB9LCBbYW1vdW50LCBpc0FjdGl2ZSwgb25TY3JvbGxJbnRvVmlld10pO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJsaVwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBpdGVtQ2xhc3NOYW1lcyxcbiAgICByb2xlOiBcInByZXNlbnRhdGlvblwiLFxuICAgIHJlZjogcmVmLFxuICAgIHRhYkluZGV4OiAxXG4gIH0sIHByb3BzKSwgcmVuZGVyKGFjdGl2ZUNsYXNzTmFtZSwgaXRlbSkpO1xufVxuXG5mdW5jdGlvbiBNZW51KF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgbWVudUl0ZW1zID0gX3JlZi5tZW51SXRlbXMsXG4gICAgICBpc0FjdGl2ZUl0ZW0gPSBfcmVmLmlzQWN0aXZlSXRlbSxcbiAgICAgIHJlbmRlckl0ZW0gPSBfcmVmLnJlbmRlckl0ZW0sXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjbGFzc05hbWVcIiwgXCJtZW51SXRlbXNcIiwgXCJpc0FjdGl2ZUl0ZW1cIiwgXCJyZW5kZXJJdGVtXCJdKTtcblxuICB2YXIgbmF2UmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuXG4gIHZhciBfdXNlU3RhdGUgPSBSZWFjdC51c2VTdGF0ZShmYWxzZSksXG4gICAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICAgIGlzU3RhcnRTaGFkb3dWaXNpYmxlID0gX3VzZVN0YXRlMlswXSxcbiAgICAgIHNldFN0YXJ0U2hhZG93VmlzaWJsZSA9IF91c2VTdGF0ZTJbMV07XG5cbiAgdmFyIF91c2VTdGF0ZTMgPSBSZWFjdC51c2VTdGF0ZShmYWxzZSksXG4gICAgICBfdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMywgMiksXG4gICAgICBpc0VuZFNoYWRvd1Zpc2libGUgPSBfdXNlU3RhdGU0WzBdLFxuICAgICAgc2V0RW5kU2hhZG93VmlzaWJsZSA9IF91c2VTdGF0ZTRbMV07XG5cbiAgdmFyIHNldFNoYWRvd3MgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG5hdiA9IG5hdlJlZi5jdXJyZW50O1xuXG4gICAgaWYgKCFuYXYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgaXNTdGFydFNoYWRvd1Zpc2libGUgPSBuYXYuc2Nyb2xsTGVmdCA+IDE7XG4gICAgdmFyIGlzRW5kU2hhZG93VmlzaWJsZSA9IG5hdi5zY3JvbGxMZWZ0IDwgbmF2LnNjcm9sbFdpZHRoIC0gbmF2Lm9mZnNldFdpZHRoO1xuICAgIHNldFN0YXJ0U2hhZG93VmlzaWJsZShpc1N0YXJ0U2hhZG93VmlzaWJsZSk7XG4gICAgc2V0RW5kU2hhZG93VmlzaWJsZShpc0VuZFNoYWRvd1Zpc2libGUpO1xuICB9LCBbXSk7XG4gIHZhciBoYW5kbGVTY3JvbGwgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgc2V0U2hhZG93cygpO1xuICB9LCBbc2V0U2hhZG93c10pOyAvLyBSRUFEIFRISVMgRklSU1QhIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9ob29rcy1mYXEuaHRtbCNob3ctY2FuLWktbWVhc3VyZS1hLWRvbS1ub2RlXG5cbiAgdmFyIGhhbmRsZVJlZiA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uICh1bEVsZW1lbnQpIHtcbiAgICBpZiAodWxFbGVtZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBJbml0aWFsaXplcyBuYXZSZWYgd2hpY2ggaXMgdXNlZCBpbiBzZXRTaGFkb3dzIGFuZCBzZXRGb2N1c1xuXG5cbiAgICBuYXZSZWYuY3VycmVudCA9IHVsRWxlbWVudDtcbiAgfSwgW10pO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVTY3JvbGwpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZVNjcm9sbCk7XG4gICAgfTtcbiAgfSwgW2hhbmRsZVNjcm9sbF0pO1xuICB2YXIgbWVudUNsYXNzTmFtZXMgPSBtZXJnZUNsYXNzTmFtZXMoc3R5bGVzJHpbJ01lbnUnXSwgaXNTdGFydFNoYWRvd1Zpc2libGUgJiYgc3R5bGVzJHpbJ01lbnUtLXN0YXJ0U2hhZG93J10sIGlzRW5kU2hhZG93VmlzaWJsZSAmJiBzdHlsZXMkelsnTWVudS0tZW5kU2hhZG93J10sIGNsYXNzTmFtZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcIm5hdlwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBtZW51Q2xhc3NOYW1lc1xuICB9LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwidWxcIiwge1xuICAgIGNsYXNzTmFtZTogc3R5bGVzJHpbJ01lbnUtbmF2J10sXG4gICAgb25TY3JvbGw6IGhhbmRsZVNjcm9sbCxcbiAgICByZWY6IGhhbmRsZVJlZlxuICB9LCBtZW51SXRlbXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgdmFyIGlzQWN0aXZlID0gaXNBY3RpdmVJdGVtKGl0ZW0pO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChJdGVtLCB7XG4gICAgICBrZXk6IFwibWVudS1cIi5jb25jYXQoaXRlbS51cmwpLFxuICAgICAgaXNBY3RpdmU6IGlzQWN0aXZlLFxuICAgICAgYW1vdW50OiBtZW51SXRlbXMubGVuZ3RoLFxuICAgICAgaXRlbTogaXRlbSxcbiAgICAgIG9uU2Nyb2xsSW50b1ZpZXc6IHNldFNoYWRvd3MsXG4gICAgICByZW5kZXI6IHJlbmRlckl0ZW1cbiAgICB9KTtcbiAgfSkpKTtcbn1cblxudmFyIHN0eWxlcyRBID0ge1wiZC1ub25lXCI6XCJQbGFjZWhvbGRlci1tb2R1bGVfX2Qtbm9uZVwiLFwiZC1pbmxpbmVcIjpcIlBsYWNlaG9sZGVyLW1vZHVsZV9fZC1pbmxpbmVcIixcImQtaW5saW5lLWJsb2NrXCI6XCJQbGFjZWhvbGRlci1tb2R1bGVfX2QtaW5saW5lLWJsb2NrXCIsXCJkLWJsb2NrXCI6XCJQbGFjZWhvbGRlci1tb2R1bGVfX2QtYmxvY2tcIixcImQtdGFibGVcIjpcIlBsYWNlaG9sZGVyLW1vZHVsZV9fZC10YWJsZVwiLFwiZC10YWJsZS1yb3dcIjpcIlBsYWNlaG9sZGVyLW1vZHVsZV9fZC10YWJsZS1yb3dcIixcImQtdGFibGUtY2VsbFwiOlwiUGxhY2Vob2xkZXItbW9kdWxlX19kLXRhYmxlLWNlbGxcIixcImQtZmxleFwiOlwiUGxhY2Vob2xkZXItbW9kdWxlX19kLWZsZXhcIixcImQtaW5saW5lLWZsZXhcIjpcIlBsYWNlaG9sZGVyLW1vZHVsZV9fZC1pbmxpbmUtZmxleFwiLFwiZC1zbS1ub25lXCI6XCJQbGFjZWhvbGRlci1tb2R1bGVfX2Qtc20tbm9uZVwiLFwiZC1zbS1pbmxpbmVcIjpcIlBsYWNlaG9sZGVyLW1vZHVsZV9fZC1zbS1pbmxpbmVcIixcImQtc20taW5saW5lLWJsb2NrXCI6XCJQbGFjZWhvbGRlci1tb2R1bGVfX2Qtc20taW5saW5lLWJsb2NrXCIsXCJkLXNtLWJsb2NrXCI6XCJQbGFjZWhvbGRlci1tb2R1bGVfX2Qtc20tYmxvY2tcIixcImQtc20tdGFibGVcIjpcIlBsYWNlaG9sZGVyLW1vZHVsZV9fZC1zbS10YWJsZVwiLFwiZC1zbS10YWJsZS1yb3dcIjpcIlBsYWNlaG9sZGVyLW1vZHVsZV9fZC1zbS10YWJsZS1yb3dcIixcImQtc20tdGFibGUtY2VsbFwiOlwiUGxhY2Vob2xkZXItbW9kdWxlX19kLXNtLXRhYmxlLWNlbGxcIixcImQtc20tZmxleFwiOlwiUGxhY2Vob2xkZXItbW9kdWxlX19kLXNtLWZsZXhcIixcImQtc20taW5saW5lLWZsZXhcIjpcIlBsYWNlaG9sZGVyLW1vZHVsZV9fZC1zbS1pbmxpbmUtZmxleFwiLFwiZC1tZC1ub25lXCI6XCJQbGFjZWhvbGRlci1tb2R1bGVfX2QtbWQtbm9uZVwiLFwiZC1tZC1pbmxpbmVcIjpcIlBsYWNlaG9sZGVyLW1vZHVsZV9fZC1tZC1pbmxpbmVcIixcImQtbWQtaW5saW5lLWJsb2NrXCI6XCJQbGFjZWhvbGRlci1tb2R1bGVfX2QtbWQtaW5saW5lLWJsb2NrXCIsXCJkLW1kLWJsb2NrXCI6XCJQbGFjZWhvbGRlci1tb2R1bGVfX2QtbWQtYmxvY2tcIixcImQtbWQtdGFibGVcIjpcIlBsYWNlaG9sZGVyLW1vZHVsZV9fZC1tZC10YWJsZVwiLFwiZC1tZC10YWJsZS1yb3dcIjpcIlBsYWNlaG9sZGVyLW1vZHVsZV9fZC1tZC10YWJsZS1yb3dcIixcImQtbWQtdGFibGUtY2VsbFwiOlwiUGxhY2Vob2xkZXItbW9kdWxlX19kLW1kLXRhYmxlLWNlbGxcIixcImQtbWQtZmxleFwiOlwiUGxhY2Vob2xkZXItbW9kdWxlX19kLW1kLWZsZXhcIixcImQtbWQtaW5saW5lLWZsZXhcIjpcIlBsYWNlaG9sZGVyLW1vZHVsZV9fZC1tZC1pbmxpbmUtZmxleFwiLFwiZC1sZy1ub25lXCI6XCJQbGFjZWhvbGRlci1tb2R1bGVfX2QtbGctbm9uZVwiLFwiZC1sZy1pbmxpbmVcIjpcIlBsYWNlaG9sZGVyLW1vZHVsZV9fZC1sZy1pbmxpbmVcIixcImQtbGctaW5saW5lLWJsb2NrXCI6XCJQbGFjZWhvbGRlci1tb2R1bGVfX2QtbGctaW5saW5lLWJsb2NrXCIsXCJkLWxnLWJsb2NrXCI6XCJQbGFjZWhvbGRlci1tb2R1bGVfX2QtbGctYmxvY2tcIixcImQtbGctdGFibGVcIjpcIlBsYWNlaG9sZGVyLW1vZHVsZV9fZC1sZy10YWJsZVwiLFwiZC1sZy10YWJsZS1yb3dcIjpcIlBsYWNlaG9sZGVyLW1vZHVsZV9fZC1sZy10YWJsZS1yb3dcIixcImQtbGctdGFibGUtY2VsbFwiOlwiUGxhY2Vob2xkZXItbW9kdWxlX19kLWxnLXRhYmxlLWNlbGxcIixcImQtbGctZmxleFwiOlwiUGxhY2Vob2xkZXItbW9kdWxlX19kLWxnLWZsZXhcIixcImQtbGctaW5saW5lLWZsZXhcIjpcIlBsYWNlaG9sZGVyLW1vZHVsZV9fZC1sZy1pbmxpbmUtZmxleFwiLFwiZC14bC1ub25lXCI6XCJQbGFjZWhvbGRlci1tb2R1bGVfX2QteGwtbm9uZVwiLFwiZC14bC1pbmxpbmVcIjpcIlBsYWNlaG9sZGVyLW1vZHVsZV9fZC14bC1pbmxpbmVcIixcImQteGwtaW5saW5lLWJsb2NrXCI6XCJQbGFjZWhvbGRlci1tb2R1bGVfX2QteGwtaW5saW5lLWJsb2NrXCIsXCJkLXhsLWJsb2NrXCI6XCJQbGFjZWhvbGRlci1tb2R1bGVfX2QteGwtYmxvY2tcIixcImQteGwtdGFibGVcIjpcIlBsYWNlaG9sZGVyLW1vZHVsZV9fZC14bC10YWJsZVwiLFwiZC14bC10YWJsZS1yb3dcIjpcIlBsYWNlaG9sZGVyLW1vZHVsZV9fZC14bC10YWJsZS1yb3dcIixcImQteGwtdGFibGUtY2VsbFwiOlwiUGxhY2Vob2xkZXItbW9kdWxlX19kLXhsLXRhYmxlLWNlbGxcIixcImQteGwtZmxleFwiOlwiUGxhY2Vob2xkZXItbW9kdWxlX19kLXhsLWZsZXhcIixcImQteGwtaW5saW5lLWZsZXhcIjpcIlBsYWNlaG9sZGVyLW1vZHVsZV9fZC14bC1pbmxpbmUtZmxleFwiLFwiZC1wcmludC1ub25lXCI6XCJQbGFjZWhvbGRlci1tb2R1bGVfX2QtcHJpbnQtbm9uZVwiLFwiZC1wcmludC1pbmxpbmVcIjpcIlBsYWNlaG9sZGVyLW1vZHVsZV9fZC1wcmludC1pbmxpbmVcIixcImQtcHJpbnQtaW5saW5lLWJsb2NrXCI6XCJQbGFjZWhvbGRlci1tb2R1bGVfX2QtcHJpbnQtaW5saW5lLWJsb2NrXCIsXCJkLXByaW50LWJsb2NrXCI6XCJQbGFjZWhvbGRlci1tb2R1bGVfX2QtcHJpbnQtYmxvY2tcIixcImQtcHJpbnQtdGFibGVcIjpcIlBsYWNlaG9sZGVyLW1vZHVsZV9fZC1wcmludC10YWJsZVwiLFwiZC1wcmludC10YWJsZS1yb3dcIjpcIlBsYWNlaG9sZGVyLW1vZHVsZV9fZC1wcmludC10YWJsZS1yb3dcIixcImQtcHJpbnQtdGFibGUtY2VsbFwiOlwiUGxhY2Vob2xkZXItbW9kdWxlX19kLXByaW50LXRhYmxlLWNlbGxcIixcImQtcHJpbnQtZmxleFwiOlwiUGxhY2Vob2xkZXItbW9kdWxlX19kLXByaW50LWZsZXhcIixcImQtcHJpbnQtaW5saW5lLWZsZXhcIjpcIlBsYWNlaG9sZGVyLW1vZHVsZV9fZC1wcmludC1pbmxpbmUtZmxleFwiLFwiUGxhY2Vob2xkZXJcIjpcIlBsYWNlaG9sZGVyLW1vZHVsZV9fUGxhY2Vob2xkZXJcIn07XG5cbnZhciBhbmltYXRpb25zID0ge1wiZmxhc2hcIjpcImFuaW1hdGlvbnMtbW9kdWxlX19mbGFzaFwifTtcblxuKGZ1bmN0aW9uIChBbmltYXRpb24pIHtcbiAgQW5pbWF0aW9uW1wiTm9uZVwiXSA9IFwibm9uZVwiO1xuICBBbmltYXRpb25bXCJGbGFzaFwiXSA9IFwiZmxhc2hcIjtcbn0pKGV4cG9ydHMuQW5pbWF0aW9uIHx8IChleHBvcnRzLkFuaW1hdGlvbiA9IHt9KSk7XG5cbmZ1bmN0aW9uIEJsb2NrJDEocHJvcHMpIHtcbiAgdmFyIF9wcm9wcyRhbmltYXRpb24gPSBwcm9wcy5hbmltYXRpb24sXG4gICAgICBhbmltYXRpb24gPSBfcHJvcHMkYW5pbWF0aW9uID09PSB2b2lkIDAgPyBleHBvcnRzLkFuaW1hdGlvbi5GbGFzaCA6IF9wcm9wcyRhbmltYXRpb247XG4gIHZhciBjbGFzc05hbWVzID0gbWVyZ2VDbGFzc05hbWVzKHN0eWxlcyRBLlBsYWNlaG9sZGVyLCBwcm9wcy5jbGFzc05hbWUsIGFuaW1hdGlvbnNbYW5pbWF0aW9uXSk7XG4gIHZhciBiYWNrZ3JvdW5kQ29sb3IgPSBwcm9wcy5jb2xvcixcbiAgICAgIHdpZHRoID0gcHJvcHMud2lkdGgsXG4gICAgICBoZWlnaHQgPSBwcm9wcy5oZWlnaHQ7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzLFxuICAgIHN0eWxlOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IGJhY2tncm91bmRDb2xvcixcbiAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgIGhlaWdodDogaGVpZ2h0XG4gICAgfVxuICB9KTtcbn1cblxudmFyIHN0eWxlcyRCID0ge1wiVmFyaWFudDFcIjpcIlZhcmlhbnQxLW1vZHVsZV9fVmFyaWFudDFcIixcIlZhcmlhbnQxX19jb250ZW50LS10aXRsZVwiOlwiVmFyaWFudDEtbW9kdWxlX19WYXJpYW50MV9fY29udGVudC0tdGl0bGVcIixcIlZhcmlhbnQxX19jb250ZW50LS1zdWJ0aXRsZVwiOlwiVmFyaWFudDEtbW9kdWxlX19WYXJpYW50MV9fY29udGVudC0tc3VidGl0bGVcIixcIlZhcmlhbnQxX19jb250ZW50LS1ib2R5XCI6XCJWYXJpYW50MS1tb2R1bGVfX1ZhcmlhbnQxX19jb250ZW50LS1ib2R5XCIsXCJWYXJpYW50MV9fZm9vdGVyXCI6XCJWYXJpYW50MS1tb2R1bGVfX1ZhcmlhbnQxX19mb290ZXJcIn07XG5cbmZ1bmN0aW9uIFZhcmlhbnQxKHByb3BzKSB7XG4gIHZhciBjbGFzc05hbWVzID0gbWVyZ2VDbGFzc05hbWVzKHN0eWxlcyRCLlZhcmlhbnQxLCBwcm9wcy5jbGFzc05hbWUpO1xuXG4gIHZhciBoZWlnaHQgPSBwcm9wcy5oZWlnaHQsXG4gICAgICBhbmltYXRpb24gPSBwcm9wcy5hbmltYXRpb24sXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHByb3BzLCBbXCJoZWlnaHRcIiwgXCJhbmltYXRpb25cIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgc3R5bGU6IHtcbiAgICAgIGhlaWdodDogaGVpZ2h0XG4gICAgfVxuICB9LCByZXN0LCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBzdHlsZXMkQi5WYXJpYW50MV9fY29udGVudFxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChCbG9jayQxLCB7XG4gICAgYW5pbWF0aW9uOiBhbmltYXRpb24sXG4gICAgd2lkdGg6IFwiMzMlXCIsXG4gICAgaGVpZ2h0OiAyMixcbiAgICBjbGFzc05hbWU6IHN0eWxlcyRCWydWYXJpYW50MV9fY29udGVudC0tdGl0bGUnXVxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoQmxvY2skMSwge1xuICAgIGFuaW1hdGlvbjogYW5pbWF0aW9uLFxuICAgIHdpZHRoOiBcIjYzJVwiLFxuICAgIGNsYXNzTmFtZTogc3R5bGVzJEJbJ1ZhcmlhbnQxX19jb250ZW50LS1zdWJ0aXRsZSddXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChCbG9jayQxLCB7XG4gICAgYW5pbWF0aW9uOiBhbmltYXRpb24sXG4gICAgd2lkdGg6IFwiNjMlXCIsXG4gICAgY2xhc3NOYW1lOiBzdHlsZXMkQlsnVmFyaWFudDFfX2NvbnRlbnQtLWJvZHknXVxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoQmxvY2skMSwge1xuICAgIGFuaW1hdGlvbjogYW5pbWF0aW9uLFxuICAgIHdpZHRoOiBcIjYzJVwiLFxuICAgIGNsYXNzTmFtZTogc3R5bGVzJEJbJ1ZhcmlhbnQxX19jb250ZW50LS1ib2R5J11cbiAgfSkpLCAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBzdHlsZXMkQi5WYXJpYW50MV9fZm9vdGVyXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KEJsb2NrJDEsIHtcbiAgICBhbmltYXRpb246IGFuaW1hdGlvbixcbiAgICB3aWR0aDogMTkwXG4gIH0pKSk7XG59XG5cbnZhciBzdHlsZXMkQyA9IHtcIlZhcmlhbnQyXCI6XCJWYXJpYW50Mi1tb2R1bGVfX1ZhcmlhbnQyXCIsXCJWYXJpYW50Ml9fdGV4dFwiOlwiVmFyaWFudDItbW9kdWxlX19WYXJpYW50Ml9fdGV4dFwifTtcblxuZnVuY3Rpb24gVmFyaWFudDIocHJvcHMpIHtcbiAgdmFyIGNsYXNzTmFtZXMgPSBtZXJnZUNsYXNzTmFtZXMoc3R5bGVzJEMuVmFyaWFudDIsIHByb3BzLmNsYXNzTmFtZSk7XG5cbiAgdmFyIGhlaWdodCA9IHByb3BzLmhlaWdodCxcbiAgICAgIGxpbmVzT2ZUZXh0ID0gcHJvcHMubGluZXNPZlRleHQsXG4gICAgICBhbmltYXRpb24gPSBwcm9wcy5hbmltYXRpb24sXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHByb3BzLCBbXCJoZWlnaHRcIiwgXCJsaW5lc09mVGV4dFwiLCBcImFuaW1hdGlvblwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBzdHlsZToge1xuICAgICAgaGVpZ2h0OiBoZWlnaHRcbiAgICB9XG4gIH0sIHJlc3QsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXNcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KEJsb2NrJDEsIHtcbiAgICBhbmltYXRpb246IGFuaW1hdGlvbixcbiAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgaGVpZ2h0OiAyMDBcbiAgfSkpLCAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChCbG9jayQxLCB7XG4gICAgYW5pbWF0aW9uOiBhbmltYXRpb24sXG4gICAgd2lkdGg6IDY1LFxuICAgIGhlaWdodDogNjUsXG4gICAgY29sb3I6IFwid2hpdGVcIlxuICB9KSksIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KEJsb2NrJDEsIHtcbiAgICBhbmltYXRpb246IGFuaW1hdGlvbixcbiAgICB3aWR0aDogXCIzMyVcIixcbiAgICBoZWlnaHQ6IDIyXG4gIH0pKSwgbGluZXNPZlRleHQgJiYgbGluZXNPZlRleHQgPiAwICYmIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIG51bGwsIEFycmF5LmZyb20oQXJyYXkobGluZXNPZlRleHQpKS5tYXAoZnVuY3Rpb24gKF8sIGkpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoQmxvY2skMSwge1xuICAgICAgYW5pbWF0aW9uOiBhbmltYXRpb24sXG4gICAgICB3aWR0aDogaSAlIDIgPyAnNjMlJyA6ICc5MCUnLFxuICAgICAga2V5OiBpLFxuICAgICAgY2xhc3NOYW1lOiBzdHlsZXMkQy5WYXJpYW50Ml9fdGV4dFxuICAgIH0pO1xuICB9KSkpO1xufVxuXG5mdW5jdGlvbiBQbGFjZWhvbGRlcihwcm9wcykge1xuICBzd2l0Y2ggKHByb3BzLnZhcmlhbnQpIHtcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoVmFyaWFudDEsIHByb3BzKTtcblxuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChWYXJpYW50MiwgcHJvcHMpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cblBsYWNlaG9sZGVyLkJsb2NrID0gQmxvY2skMTtcblxudmFyIHN0eWxlcyREID0ge1wiZC1ub25lXCI6XCJOb3RpZmljYXRpb25Qb3B1cC1tb2R1bGVfX2Qtbm9uZVwiLFwiZC1pbmxpbmVcIjpcIk5vdGlmaWNhdGlvblBvcHVwLW1vZHVsZV9fZC1pbmxpbmVcIixcImQtaW5saW5lLWJsb2NrXCI6XCJOb3RpZmljYXRpb25Qb3B1cC1tb2R1bGVfX2QtaW5saW5lLWJsb2NrXCIsXCJkLWJsb2NrXCI6XCJOb3RpZmljYXRpb25Qb3B1cC1tb2R1bGVfX2QtYmxvY2tcIixcImQtdGFibGVcIjpcIk5vdGlmaWNhdGlvblBvcHVwLW1vZHVsZV9fZC10YWJsZVwiLFwiZC10YWJsZS1yb3dcIjpcIk5vdGlmaWNhdGlvblBvcHVwLW1vZHVsZV9fZC10YWJsZS1yb3dcIixcImQtdGFibGUtY2VsbFwiOlwiTm90aWZpY2F0aW9uUG9wdXAtbW9kdWxlX19kLXRhYmxlLWNlbGxcIixcImQtZmxleFwiOlwiTm90aWZpY2F0aW9uUG9wdXAtbW9kdWxlX19kLWZsZXhcIixcImQtaW5saW5lLWZsZXhcIjpcIk5vdGlmaWNhdGlvblBvcHVwLW1vZHVsZV9fZC1pbmxpbmUtZmxleFwiLFwiZC1zbS1ub25lXCI6XCJOb3RpZmljYXRpb25Qb3B1cC1tb2R1bGVfX2Qtc20tbm9uZVwiLFwiZC1zbS1pbmxpbmVcIjpcIk5vdGlmaWNhdGlvblBvcHVwLW1vZHVsZV9fZC1zbS1pbmxpbmVcIixcImQtc20taW5saW5lLWJsb2NrXCI6XCJOb3RpZmljYXRpb25Qb3B1cC1tb2R1bGVfX2Qtc20taW5saW5lLWJsb2NrXCIsXCJkLXNtLWJsb2NrXCI6XCJOb3RpZmljYXRpb25Qb3B1cC1tb2R1bGVfX2Qtc20tYmxvY2tcIixcImQtc20tdGFibGVcIjpcIk5vdGlmaWNhdGlvblBvcHVwLW1vZHVsZV9fZC1zbS10YWJsZVwiLFwiZC1zbS10YWJsZS1yb3dcIjpcIk5vdGlmaWNhdGlvblBvcHVwLW1vZHVsZV9fZC1zbS10YWJsZS1yb3dcIixcImQtc20tdGFibGUtY2VsbFwiOlwiTm90aWZpY2F0aW9uUG9wdXAtbW9kdWxlX19kLXNtLXRhYmxlLWNlbGxcIixcImQtc20tZmxleFwiOlwiTm90aWZpY2F0aW9uUG9wdXAtbW9kdWxlX19kLXNtLWZsZXhcIixcImQtc20taW5saW5lLWZsZXhcIjpcIk5vdGlmaWNhdGlvblBvcHVwLW1vZHVsZV9fZC1zbS1pbmxpbmUtZmxleFwiLFwiZC1tZC1ub25lXCI6XCJOb3RpZmljYXRpb25Qb3B1cC1tb2R1bGVfX2QtbWQtbm9uZVwiLFwiZC1tZC1pbmxpbmVcIjpcIk5vdGlmaWNhdGlvblBvcHVwLW1vZHVsZV9fZC1tZC1pbmxpbmVcIixcImQtbWQtaW5saW5lLWJsb2NrXCI6XCJOb3RpZmljYXRpb25Qb3B1cC1tb2R1bGVfX2QtbWQtaW5saW5lLWJsb2NrXCIsXCJkLW1kLWJsb2NrXCI6XCJOb3RpZmljYXRpb25Qb3B1cC1tb2R1bGVfX2QtbWQtYmxvY2tcIixcImQtbWQtdGFibGVcIjpcIk5vdGlmaWNhdGlvblBvcHVwLW1vZHVsZV9fZC1tZC10YWJsZVwiLFwiZC1tZC10YWJsZS1yb3dcIjpcIk5vdGlmaWNhdGlvblBvcHVwLW1vZHVsZV9fZC1tZC10YWJsZS1yb3dcIixcImQtbWQtdGFibGUtY2VsbFwiOlwiTm90aWZpY2F0aW9uUG9wdXAtbW9kdWxlX19kLW1kLXRhYmxlLWNlbGxcIixcImQtbWQtZmxleFwiOlwiTm90aWZpY2F0aW9uUG9wdXAtbW9kdWxlX19kLW1kLWZsZXhcIixcImQtbWQtaW5saW5lLWZsZXhcIjpcIk5vdGlmaWNhdGlvblBvcHVwLW1vZHVsZV9fZC1tZC1pbmxpbmUtZmxleFwiLFwiZC1sZy1ub25lXCI6XCJOb3RpZmljYXRpb25Qb3B1cC1tb2R1bGVfX2QtbGctbm9uZVwiLFwiZC1sZy1pbmxpbmVcIjpcIk5vdGlmaWNhdGlvblBvcHVwLW1vZHVsZV9fZC1sZy1pbmxpbmVcIixcImQtbGctaW5saW5lLWJsb2NrXCI6XCJOb3RpZmljYXRpb25Qb3B1cC1tb2R1bGVfX2QtbGctaW5saW5lLWJsb2NrXCIsXCJkLWxnLWJsb2NrXCI6XCJOb3RpZmljYXRpb25Qb3B1cC1tb2R1bGVfX2QtbGctYmxvY2tcIixcImQtbGctdGFibGVcIjpcIk5vdGlmaWNhdGlvblBvcHVwLW1vZHVsZV9fZC1sZy10YWJsZVwiLFwiZC1sZy10YWJsZS1yb3dcIjpcIk5vdGlmaWNhdGlvblBvcHVwLW1vZHVsZV9fZC1sZy10YWJsZS1yb3dcIixcImQtbGctdGFibGUtY2VsbFwiOlwiTm90aWZpY2F0aW9uUG9wdXAtbW9kdWxlX19kLWxnLXRhYmxlLWNlbGxcIixcImQtbGctZmxleFwiOlwiTm90aWZpY2F0aW9uUG9wdXAtbW9kdWxlX19kLWxnLWZsZXhcIixcImQtbGctaW5saW5lLWZsZXhcIjpcIk5vdGlmaWNhdGlvblBvcHVwLW1vZHVsZV9fZC1sZy1pbmxpbmUtZmxleFwiLFwiZC14bC1ub25lXCI6XCJOb3RpZmljYXRpb25Qb3B1cC1tb2R1bGVfX2QteGwtbm9uZVwiLFwiZC14bC1pbmxpbmVcIjpcIk5vdGlmaWNhdGlvblBvcHVwLW1vZHVsZV9fZC14bC1pbmxpbmVcIixcImQteGwtaW5saW5lLWJsb2NrXCI6XCJOb3RpZmljYXRpb25Qb3B1cC1tb2R1bGVfX2QteGwtaW5saW5lLWJsb2NrXCIsXCJkLXhsLWJsb2NrXCI6XCJOb3RpZmljYXRpb25Qb3B1cC1tb2R1bGVfX2QteGwtYmxvY2tcIixcImQteGwtdGFibGVcIjpcIk5vdGlmaWNhdGlvblBvcHVwLW1vZHVsZV9fZC14bC10YWJsZVwiLFwiZC14bC10YWJsZS1yb3dcIjpcIk5vdGlmaWNhdGlvblBvcHVwLW1vZHVsZV9fZC14bC10YWJsZS1yb3dcIixcImQteGwtdGFibGUtY2VsbFwiOlwiTm90aWZpY2F0aW9uUG9wdXAtbW9kdWxlX19kLXhsLXRhYmxlLWNlbGxcIixcImQteGwtZmxleFwiOlwiTm90aWZpY2F0aW9uUG9wdXAtbW9kdWxlX19kLXhsLWZsZXhcIixcImQteGwtaW5saW5lLWZsZXhcIjpcIk5vdGlmaWNhdGlvblBvcHVwLW1vZHVsZV9fZC14bC1pbmxpbmUtZmxleFwiLFwiZC1wcmludC1ub25lXCI6XCJOb3RpZmljYXRpb25Qb3B1cC1tb2R1bGVfX2QtcHJpbnQtbm9uZVwiLFwiZC1wcmludC1pbmxpbmVcIjpcIk5vdGlmaWNhdGlvblBvcHVwLW1vZHVsZV9fZC1wcmludC1pbmxpbmVcIixcImQtcHJpbnQtaW5saW5lLWJsb2NrXCI6XCJOb3RpZmljYXRpb25Qb3B1cC1tb2R1bGVfX2QtcHJpbnQtaW5saW5lLWJsb2NrXCIsXCJkLXByaW50LWJsb2NrXCI6XCJOb3RpZmljYXRpb25Qb3B1cC1tb2R1bGVfX2QtcHJpbnQtYmxvY2tcIixcImQtcHJpbnQtdGFibGVcIjpcIk5vdGlmaWNhdGlvblBvcHVwLW1vZHVsZV9fZC1wcmludC10YWJsZVwiLFwiZC1wcmludC10YWJsZS1yb3dcIjpcIk5vdGlmaWNhdGlvblBvcHVwLW1vZHVsZV9fZC1wcmludC10YWJsZS1yb3dcIixcImQtcHJpbnQtdGFibGUtY2VsbFwiOlwiTm90aWZpY2F0aW9uUG9wdXAtbW9kdWxlX19kLXByaW50LXRhYmxlLWNlbGxcIixcImQtcHJpbnQtZmxleFwiOlwiTm90aWZpY2F0aW9uUG9wdXAtbW9kdWxlX19kLXByaW50LWZsZXhcIixcImQtcHJpbnQtaW5saW5lLWZsZXhcIjpcIk5vdGlmaWNhdGlvblBvcHVwLW1vZHVsZV9fZC1wcmludC1pbmxpbmUtZmxleFwiLFwibm90aWZpY2F0aW9uc1dyYXBwZXJcIjpcIk5vdGlmaWNhdGlvblBvcHVwLW1vZHVsZV9fbm90aWZpY2F0aW9uc1dyYXBwZXJcIixcInRpdGxlXCI6XCJOb3RpZmljYXRpb25Qb3B1cC1tb2R1bGVfX3RpdGxlXCIsXCJub3RpZmljYXRpb25zQ29udGFpbmVyXCI6XCJOb3RpZmljYXRpb25Qb3B1cC1tb2R1bGVfX25vdGlmaWNhdGlvbnNDb250YWluZXJcIixcIm5vdGlmaWNhdGlvbnNUcmlnZ2VyXCI6XCJOb3RpZmljYXRpb25Qb3B1cC1tb2R1bGVfX25vdGlmaWNhdGlvbnNUcmlnZ2VyXCIsXCJub3RpZmljYXRpb25zQnVsbGV0XCI6XCJOb3RpZmljYXRpb25Qb3B1cC1tb2R1bGVfX25vdGlmaWNhdGlvbnNCdWxsZXRcIixcIm5vdGlmaWNhdGlvbnNCZWxsXCI6XCJOb3RpZmljYXRpb25Qb3B1cC1tb2R1bGVfX25vdGlmaWNhdGlvbnNCZWxsXCIsXCJjbG9zZVwiOlwiTm90aWZpY2F0aW9uUG9wdXAtbW9kdWxlX19jbG9zZVwifTtcblxudmFyIE5vdGlmaWNhdGlvblBvcHVwID0gZnVuY3Rpb24gTm90aWZpY2F0aW9uUG9wdXAocHJvcHMpIHtcbiAgdmFyIHRpdGxlID0gcHJvcHMudGl0bGUsXG4gICAgICBvcGVuQ2FsbGJhY2sgPSBwcm9wcy5vcGVuQ2FsbGJhY2ssXG4gICAgICBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lO1xuXG4gIHZhciBfdXNlU3RhdGUgPSBSZWFjdC51c2VTdGF0ZSghIXByb3BzLmFjdGl2ZUJ5RGVmYXVsdCksXG4gICAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICAgIGlzQWN0aXZlID0gX3VzZVN0YXRlMlswXSxcbiAgICAgIHNldElzQWN0aXZlID0gX3VzZVN0YXRlMlsxXTtcblxuICB2YXIgbm90aWZpY2F0aW9ucyA9IFJlYWN0X19kZWZhdWx0LkNoaWxkcmVuLmNvdW50KGNoaWxkcmVuKTtcbiAgdmFyIGNsYXNzZXMgPSBtZXJnZUNsYXNzTmFtZXMoc3R5bGVzJEQubm90aWZpY2F0aW9uc1dyYXBwZXIsIGNsYXNzTmFtZSk7XG4gIHZhciB3cmFwcGVyUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZUNsaWNrT3V0c2lkZShldmVudCkge1xuICAgIGlmIChldmVudC50YXJnZXQgaW5zdGFuY2VvZiBOb2RlICYmIHdyYXBwZXJSZWYuY3VycmVudCAmJiAhd3JhcHBlclJlZi5jdXJyZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiYgaXNBY3RpdmUpIHtcbiAgICAgIHNldElzQWN0aXZlKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZSk7XG4gICAgfTtcbiAgfSk7XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGlzQWN0aXZlICYmIHR5cGVvZiBvcGVuQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG9wZW5DYWxsYmFjaygpO1xuICAgIH1cbiAgfSwgW2lzQWN0aXZlLCBvcGVuQ2FsbGJhY2tdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgcmVmOiB3cmFwcGVyUmVmXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IHN0eWxlcyRELm5vdGlmaWNhdGlvbnNUcmlnZ2VyLFxuICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soKSB7XG4gICAgICBzZXRJc0FjdGl2ZSghaXNBY3RpdmUpO1xuICAgIH1cbiAgfSwgbm90aWZpY2F0aW9ucyA+IDAgJiYgLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSWNvbiwge1xuICAgIG5hbWU6IFwiYnVsbGV0XCIsXG4gICAgZm9udFNpemU6IFwiMTFweFwiLFxuICAgIGNsYXNzTmFtZTogc3R5bGVzJEQubm90aWZpY2F0aW9uc0J1bGxldFxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSWNvbiwge1xuICAgIG5hbWU6IFwiYmVsbC1zbWFsbFwiLFxuICAgIGZvbnRTaXplOiBcIjE4cHhcIixcbiAgICBjbGFzc05hbWU6IHN0eWxlcyRELm5vdGlmaWNhdGlvbnNCZWxsXG4gIH0pKSwgbm90aWZpY2F0aW9ucyA+IDAgJiYgaXNBY3RpdmUgJiYgLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogc3R5bGVzJEQubm90aWZpY2F0aW9uc0NvbnRhaW5lclxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBzdHlsZXMkRC5jbG9zZSxcbiAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgc2V0SXNBY3RpdmUoZmFsc2UpO1xuICAgIH1cbiAgfSwgLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSWNvbiwge1xuICAgIG5hbWU6IFwiY2xvc2VcIixcbiAgICBmb250U2l6ZTogXCIxMnB4XCJcbiAgfSkpLCB0aXRsZSAmJiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChINSwge1xuICAgIGNsYXNzTmFtZTogc3R5bGVzJEQudGl0bGVcbiAgfSwgdGl0bGUpLCAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgb25Nb3VzZURvd246IGZ1bmN0aW9uIG9uTW91c2VEb3duKGV2KSB7XG4gICAgICByZXR1cm4gZXYucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH0sIGNoaWxkcmVuKSkpO1xufTtcblxudmFyIHJlYWN0Q29uZmV0dGlfbWluID0gY3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24gKG1vZHVsZSwgZXhwb3J0cykge1xuIWZ1bmN0aW9uKHQsZSl7bW9kdWxlLmV4cG9ydHM9ZShSZWFjdF9fZGVmYXVsdCk7fShcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOmNvbW1vbmpzR2xvYmFsLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT17fTtmdW5jdGlvbiBuKHIpe2lmKGVbcl0pcmV0dXJuIGVbcl0uZXhwb3J0czt2YXIgaT1lW3JdPXtpOnIsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gdFtyXS5jYWxsKGkuZXhwb3J0cyxpLGkuZXhwb3J0cyxuKSxpLmw9ITAsaS5leHBvcnRzfXJldHVybiBuLm09dCxuLmM9ZSxuLmQ9ZnVuY3Rpb24odCxlLHIpe24ubyh0LGUpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHtlbnVtZXJhYmxlOiEwLGdldDpyfSk7fSxuLnI9ZnVuY3Rpb24odCl7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOlwiTW9kdWxlXCJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt9LG4udD1mdW5jdGlvbih0LGUpe2lmKDEmZSYmKHQ9bih0KSksOCZlKXJldHVybiB0O2lmKDQmZSYmXCJvYmplY3RcIj09dHlwZW9mIHQmJnQmJnQuX19lc01vZHVsZSlyZXR1cm4gdDt2YXIgcj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKG4ucihyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkocixcImRlZmF1bHRcIix7ZW51bWVyYWJsZTohMCx2YWx1ZTp0fSksMiZlJiZcInN0cmluZ1wiIT10eXBlb2YgdClmb3IodmFyIGkgaW4gdCluLmQocixpLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfS5iaW5kKG51bGwsaSkpO3JldHVybiByfSxuLm49ZnVuY3Rpb24odCl7dmFyIGU9dCYmdC5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIHQuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gdH07cmV0dXJuIG4uZChlLFwiYVwiLGUpLGV9LG4ubz1mdW5jdGlvbih0LGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKX0sbi5wPVwiXCIsbihuLnM9Mil9KFtmdW5jdGlvbihlLG4pe2UuZXhwb3J0cz10O30sZnVuY3Rpb24odCxlLG4pe3ZhciByPXtsaW5lYXI6ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIChuLWUpKnQvcitlfSxlYXNlSW5RdWFkOmZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiAobi1lKSoodC89cikqdCtlfSxlYXNlT3V0UXVhZDpmdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gLShuLWUpKih0Lz1yKSoodC0yKStlfSxlYXNlSW5PdXRRdWFkOmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPW4tZTtyZXR1cm4gKHQvPXIvMik8MT9pLzIqdCp0K2U6LWkvMiooLS10Kih0LTIpLTEpK2V9LGVhc2VJbkN1YmljOmZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiAobi1lKSoodC89cikqdCp0K2V9LGVhc2VPdXRDdWJpYzpmdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gKG4tZSkqKCh0PXQvci0xKSp0KnQrMSkrZX0sZWFzZUluT3V0Q3ViaWM6ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9bi1lO3JldHVybiAodC89ci8yKTwxP2kvMip0KnQqdCtlOmkvMiooKHQtPTIpKnQqdCsyKStlfSxlYXNlSW5RdWFydDpmdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gKG4tZSkqKHQvPXIpKnQqdCp0K2V9LGVhc2VPdXRRdWFydDpmdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gLShuLWUpKigodD10L3ItMSkqdCp0KnQtMSkrZX0sZWFzZUluT3V0UXVhcnQ6ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9bi1lO3JldHVybiAodC89ci8yKTwxP2kvMip0KnQqdCp0K2U6LWkvMiooKHQtPTIpKnQqdCp0LTIpK2V9LGVhc2VJblF1aW50OmZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiAobi1lKSoodC89cikqdCp0KnQqdCtlfSxlYXNlT3V0UXVpbnQ6ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIChuLWUpKigodD10L3ItMSkqdCp0KnQqdCsxKStlfSxlYXNlSW5PdXRRdWludDpmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1uLWU7cmV0dXJuICh0Lz1yLzIpPDE/aS8yKnQqdCp0KnQqdCtlOmkvMiooKHQtPTIpKnQqdCp0KnQrMikrZX0sZWFzZUluU2luZTpmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1uLWU7cmV0dXJuIC1pKk1hdGguY29zKHQvciooTWF0aC5QSS8yKSkraStlfSxlYXNlT3V0U2luZTpmdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gKG4tZSkqTWF0aC5zaW4odC9yKihNYXRoLlBJLzIpKStlfSxlYXNlSW5PdXRTaW5lOmZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiAtKG4tZSkvMiooTWF0aC5jb3MoTWF0aC5QSSp0L3IpLTEpK2V9LGVhc2VJbkV4cG86ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIDA9PXQ/ZToobi1lKSpNYXRoLnBvdygyLDEwKih0L3ItMSkpK2V9LGVhc2VPdXRFeHBvOmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPW4tZTtyZXR1cm4gdD09cj9lK2k6aSooMS1NYXRoLnBvdygyLC0xMCp0L3IpKStlfSxlYXNlSW5PdXRFeHBvOmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPW4tZTtyZXR1cm4gMD09PXQ/ZTp0PT09cj9lK2k6KHQvPXIvMik8MT9pLzIqTWF0aC5wb3coMiwxMCoodC0xKSkrZTppLzIqKDItTWF0aC5wb3coMiwtMTAqLS10KSkrZX0sZWFzZUluQ2lyYzpmdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gLShuLWUpKihNYXRoLnNxcnQoMS0odC89cikqdCktMSkrZX0sZWFzZU91dENpcmM6ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIChuLWUpKk1hdGguc3FydCgxLSh0PXQvci0xKSp0KStlfSxlYXNlSW5PdXRDaXJjOmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPW4tZTtyZXR1cm4gKHQvPXIvMik8MT8taS8yKihNYXRoLnNxcnQoMS10KnQpLTEpK2U6aS8yKihNYXRoLnNxcnQoMS0odC09MikqdCkrMSkrZX0sZWFzZUluRWxhc3RpYzpmdW5jdGlvbih0LGUsbixyKXt2YXIgaSxvLGEsYz1uLWU7cmV0dXJuIGE9MS43MDE1OCwwPT09dD9lOjE9PSh0Lz1yKT9lK2M6KChvPTApfHwobz0uMypyKSwoaT1jKTxNYXRoLmFicyhjKT8oaT1jLGE9by80KTphPW8vKDIqTWF0aC5QSSkqTWF0aC5hc2luKGMvaSksLWkqTWF0aC5wb3coMiwxMCoodC09MSkpKk1hdGguc2luKCh0KnItYSkqKDIqTWF0aC5QSSkvbykrZSl9LGVhc2VPdXRFbGFzdGljOmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpLG8sYSxjPW4tZTtyZXR1cm4gYT0xLjcwMTU4LDA9PT10P2U6MT09KHQvPXIpP2UrYzooKG89MCl8fChvPS4zKnIpLChpPWMpPE1hdGguYWJzKGMpPyhpPWMsYT1vLzQpOmE9by8oMipNYXRoLlBJKSpNYXRoLmFzaW4oYy9pKSxpKk1hdGgucG93KDIsLTEwKnQpKk1hdGguc2luKCh0KnItYSkqKDIqTWF0aC5QSSkvbykrYytlKX0sZWFzZUluT3V0RWxhc3RpYzpmdW5jdGlvbih0LGUsbixyKXt2YXIgaSxvLGEsYz1uLWU7cmV0dXJuIGE9MS43MDE1OCwwPT09dD9lOjI9PSh0Lz1yLzIpP2UrYzooKG89MCl8fChvPXIqKC4zKjEuNSkpLChpPWMpPE1hdGguYWJzKGMpPyhpPWMsYT1vLzQpOmE9by8oMipNYXRoLlBJKSpNYXRoLmFzaW4oYy9pKSx0PDE/aSpNYXRoLnBvdygyLDEwKih0LT0xKSkqTWF0aC5zaW4oKHQqci1hKSooMipNYXRoLlBJKS9vKSotLjUrZTppKk1hdGgucG93KDIsLTEwKih0LT0xKSkqTWF0aC5zaW4oKHQqci1hKSooMipNYXRoLlBJKS9vKSouNStjK2UpfSxlYXNlSW5CYWNrOmZ1bmN0aW9uKHQsZSxuLHIsaSl7cmV0dXJuIHZvaWQgMD09PWkmJihpPTEuNzAxNTgpLChuLWUpKih0Lz1yKSp0KigoaSsxKSp0LWkpK2V9LGVhc2VPdXRCYWNrOmZ1bmN0aW9uKHQsZSxuLHIsaSl7cmV0dXJuIHZvaWQgMD09PWkmJihpPTEuNzAxNTgpLChuLWUpKigodD10L3ItMSkqdCooKGkrMSkqdCtpKSsxKStlfSxlYXNlSW5PdXRCYWNrOmZ1bmN0aW9uKHQsZSxuLHIsaSl7dmFyIG89bi1lO3JldHVybiB2b2lkIDA9PT1pJiYoaT0xLjcwMTU4KSwodC89ci8yKTwxP28vMioodCp0KigoMSsoaSo9MS41MjUpKSp0LWkpKStlOm8vMiooKHQtPTIpKnQqKCgxKyhpKj0xLjUyNSkpKnQraSkrMikrZX0sZWFzZUluQm91bmNlOmZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBvPW4tZTtyZXR1cm4gby1yLmVhc2VPdXRCb3VuY2UoaS10LDAsbyxpKStlfSxlYXNlT3V0Qm91bmNlOmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPW4tZTtyZXR1cm4gKHQvPXIpPDEvMi43NT9pKig3LjU2MjUqdCp0KStlOnQ8Mi8yLjc1P2kqKDcuNTYyNSoodC09MS41LzIuNzUpKnQrLjc1KStlOnQ8Mi41LzIuNzU/aSooNy41NjI1Kih0LT0yLjI1LzIuNzUpKnQrLjkzNzUpK2U6aSooNy41NjI1Kih0LT0yLjYyNS8yLjc1KSp0Ky45ODQzNzUpK2V9LGVhc2VJbk91dEJvdW5jZTpmdW5jdGlvbih0LGUsbixpKXt2YXIgbz1uLWU7cmV0dXJuIHQ8aS8yPy41KnIuZWFzZUluQm91bmNlKDIqdCwwLG8saSkrZTouNSpyLmVhc2VPdXRCb3VuY2UoMip0LWksMCxvLGkpKy41Km8rZX19O3QuZXhwb3J0cz1yO30sZnVuY3Rpb24odCxlLG4pe3QuZXhwb3J0cz1uKDMpO30sZnVuY3Rpb24odCxlLG4pe24ucihlKTt2YXIgcixpLG89bigwKSxhPW4ubihvKSxjPW4oMSkscz1uLm4oYyk7ZnVuY3Rpb24gdSh0LGUpe3JldHVybiB0K01hdGgucmFuZG9tKCkqKGUtdCl9ZnVuY3Rpb24gZih0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLmtleSxyKTt9fWZ1bmN0aW9uIGgodCxlLG4pe3JldHVybiBlIGluIHQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnRbZV09bix0fSFmdW5jdGlvbih0KXt0W3QuQ2lyY2xlPTBdPVwiQ2lyY2xlXCIsdFt0LlNxdWFyZT0xXT1cIlNxdWFyZVwiLHRbdC5TdHJpcD0yXT1cIlN0cmlwXCI7fShyfHwocj17fSkpLGZ1bmN0aW9uKHQpe3RbdC5Qb3NpdGl2ZT0xXT1cIlBvc2l0aXZlXCIsdFt0Lk5lZ2F0aXZlPS0xXT1cIk5lZ2F0aXZlXCI7fShpfHwoaT17fSkpO3ZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLG4scixvKXshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfSh0aGlzLHQpLGgodGhpcyxcImNvbnRleHRcIix2b2lkIDApLGgodGhpcyxcInJhZGl1c1wiLHZvaWQgMCksaCh0aGlzLFwieFwiLHZvaWQgMCksaCh0aGlzLFwieVwiLHZvaWQgMCksaCh0aGlzLFwid1wiLHZvaWQgMCksaCh0aGlzLFwiaFwiLHZvaWQgMCksaCh0aGlzLFwidnhcIix2b2lkIDApLGgodGhpcyxcInZ5XCIsdm9pZCAwKSxoKHRoaXMsXCJzaGFwZVwiLHZvaWQgMCksaCh0aGlzLFwiYW5nbGVcIix2b2lkIDApLGgodGhpcyxcImFuZ3VsYXJTcGluXCIsdm9pZCAwKSxoKHRoaXMsXCJjb2xvclwiLHZvaWQgMCksaCh0aGlzLFwicm90YXRlWVwiLHZvaWQgMCksaCh0aGlzLFwicm90YXRpb25EaXJlY3Rpb25cIix2b2lkIDApLGgodGhpcyxcImdldE9wdGlvbnNcIix2b2lkIDApLHRoaXMuZ2V0T3B0aW9ucz1uO3ZhciBhLGMscz10aGlzLmdldE9wdGlvbnMoKSxmPXMuY29sb3JzLGw9cy5pbml0aWFsVmVsb2NpdHlYLHA9cy5pbml0aWFsVmVsb2NpdHlZO3RoaXMuY29udGV4dD1lLHRoaXMueD1yLHRoaXMueT1vLHRoaXMudz11KDUsMjApLHRoaXMuaD11KDUsMjApLHRoaXMucmFkaXVzPXUoNSwxMCksdGhpcy52eD11KC1sLGwpLHRoaXMudnk9dSgtcCwwKSx0aGlzLnNoYXBlPShhPTAsYz0yLE1hdGguZmxvb3IoYStNYXRoLnJhbmRvbSgpKihjLWErMSkpKSx0aGlzLmFuZ2xlPXUoMCwzNjApKk1hdGguUEkvMTgwLHRoaXMuYW5ndWxhclNwaW49dSgtLjIsLjIpLHRoaXMuY29sb3I9ZltNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqZi5sZW5ndGgpXSx0aGlzLnJvdGF0ZVk9dSgwLDEpLHRoaXMucm90YXRpb25EaXJlY3Rpb249dSgwLDEpP2kuUG9zaXRpdmU6aS5OZWdhdGl2ZTt9dmFyIGUsbjtyZXR1cm4gZT10LChuPVt7a2V5OlwidXBkYXRlXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdldE9wdGlvbnMoKSxlPXQuZ3Jhdml0eSxuPXQud2luZCxvPXQuZnJpY3Rpb24sYT10Lm9wYWNpdHksYz10LmRyYXdTaGFwZTt0aGlzLngrPXRoaXMudngsdGhpcy55Kz10aGlzLnZ5LHRoaXMudnkrPWUsdGhpcy52eCs9bix0aGlzLnZ4Kj1vLHRoaXMudnkqPW8sdGhpcy5yb3RhdGVZPj0xJiZ0aGlzLnJvdGF0aW9uRGlyZWN0aW9uPT09aS5Qb3NpdGl2ZT90aGlzLnJvdGF0aW9uRGlyZWN0aW9uPWkuTmVnYXRpdmU6dGhpcy5yb3RhdGVZPD0tMSYmdGhpcy5yb3RhdGlvbkRpcmVjdGlvbj09PWkuTmVnYXRpdmUmJih0aGlzLnJvdGF0aW9uRGlyZWN0aW9uPWkuUG9zaXRpdmUpO3ZhciBzPS4xKnRoaXMucm90YXRpb25EaXJlY3Rpb247aWYodGhpcy5yb3RhdGVZKz1zLHRoaXMuYW5nbGUrPXRoaXMuYW5ndWxhclNwaW4sdGhpcy5jb250ZXh0LnNhdmUoKSx0aGlzLmNvbnRleHQudHJhbnNsYXRlKHRoaXMueCx0aGlzLnkpLHRoaXMuY29udGV4dC5yb3RhdGUodGhpcy5hbmdsZSksdGhpcy5jb250ZXh0LnNjYWxlKDEsdGhpcy5yb3RhdGVZKSx0aGlzLmNvbnRleHQucm90YXRlKHRoaXMuYW5nbGUpLHRoaXMuY29udGV4dC5iZWdpblBhdGgoKSx0aGlzLmNvbnRleHQuZmlsbFN0eWxlPXRoaXMuY29sb3IsdGhpcy5jb250ZXh0LnN0cm9rZVN0eWxlPXRoaXMuY29sb3IsdGhpcy5jb250ZXh0Lmdsb2JhbEFscGhhPWEsdGhpcy5jb250ZXh0LmxpbmVDYXA9XCJyb3VuZFwiLHRoaXMuY29udGV4dC5saW5lV2lkdGg9MixjJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBjKWMuY2FsbCh0aGlzLHRoaXMuY29udGV4dCk7ZWxzZSBzd2l0Y2godGhpcy5zaGFwZSl7Y2FzZSByLkNpcmNsZTp0aGlzLmNvbnRleHQuYmVnaW5QYXRoKCksdGhpcy5jb250ZXh0LmFyYygwLDAsdGhpcy5yYWRpdXMsMCwyKk1hdGguUEkpLHRoaXMuY29udGV4dC5maWxsKCk7YnJlYWs7Y2FzZSByLlNxdWFyZTp0aGlzLmNvbnRleHQuZmlsbFJlY3QoLXRoaXMudy8yLC10aGlzLmgvMix0aGlzLncsdGhpcy5oKTticmVhaztjYXNlIHIuU3RyaXA6dGhpcy5jb250ZXh0LmZpbGxSZWN0KC10aGlzLncvNiwtdGhpcy5oLzIsdGhpcy53LzMsdGhpcy5oKTt9dGhpcy5jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuY29udGV4dC5yZXN0b3JlKCk7fX1dKSYmZihlLnByb3RvdHlwZSxuKSx0fSgpO2Z1bmN0aW9uIHAodCxlLG4pe3JldHVybiBlIGluIHQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnRbZV09bix0fXZhciB2PWZ1bmN0aW9uIHQoZSxuKXt2YXIgcj10aGlzOyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9KHRoaXMsdCkscCh0aGlzLFwiY2FudmFzXCIsdm9pZCAwKSxwKHRoaXMsXCJjb250ZXh0XCIsdm9pZCAwKSxwKHRoaXMsXCJnZXRPcHRpb25zXCIsdm9pZCAwKSxwKHRoaXMsXCJ4XCIsMCkscCh0aGlzLFwieVwiLDApLHAodGhpcyxcIndcIiwwKSxwKHRoaXMsXCJoXCIsMCkscCh0aGlzLFwibGFzdE51bWJlck9mUGllY2VzXCIsMCkscCh0aGlzLFwidHdlZW5Jbml0VGltZVwiLERhdGUubm93KCkpLHAodGhpcyxcInBhcnRpY2xlc1wiLFtdKSxwKHRoaXMsXCJwYXJ0aWNsZXNHZW5lcmF0ZWRcIiwwKSxwKHRoaXMsXCJyZW1vdmVQYXJ0aWNsZUF0XCIsZnVuY3Rpb24odCl7ci5wYXJ0aWNsZXMuc3BsaWNlKHQsMSk7fSkscCh0aGlzLFwiZ2V0UGFydGljbGVcIixmdW5jdGlvbigpe3ZhciB0PXUoci54LHIudytyLngpLGU9dShyLnksci5oK3IueSk7cmV0dXJuIG5ldyBsKHIuY29udGV4dCxyLmdldE9wdGlvbnMsdCxlKX0pLHAodGhpcyxcImFuaW1hdGVcIixmdW5jdGlvbigpe3ZhciB0PXIuY2FudmFzLGU9ci5jb250ZXh0LG49ci5wYXJ0aWNsZXNHZW5lcmF0ZWQsaT1yLmxhc3ROdW1iZXJPZlBpZWNlcyxvPXIuZ2V0T3B0aW9ucygpLGE9by5ydW4sYz1vLnJlY3ljbGUscz1vLm51bWJlck9mUGllY2VzLHU9by5kZWJ1ZyxmPW8udHdlZW5GdW5jdGlvbixoPW8udHdlZW5EdXJhdGlvbjtpZighYSlyZXR1cm4gITE7dmFyIGw9ci5wYXJ0aWNsZXMubGVuZ3RoLHA9Yz9sOm4sdj1EYXRlLm5vdygpO2lmKHA8cyl7aSE9PXMmJihyLnR3ZWVuSW5pdFRpbWU9dixyLmxhc3ROdW1iZXJPZlBpZWNlcz1zKTtmb3IodmFyIHk9ci50d2VlbkluaXRUaW1lLGQ9Zih2LXk+aD9oOk1hdGgubWF4KDAsdi15KSxwLHMsaCksYj1NYXRoLnJvdW5kKGQtcCksZz0wO2c8YjtnKyspci5wYXJ0aWNsZXMucHVzaChyLmdldFBhcnRpY2xlKCkpO3IucGFydGljbGVzR2VuZXJhdGVkKz1iO31yZXR1cm4gdSYmKGUuZm9udD1cIjEycHggc2Fucy1zZXJpZlwiLGUuZmlsbFN0eWxlPVwiIzMzM1wiLGUudGV4dEFsaWduPVwicmlnaHRcIixlLmZpbGxUZXh0KFwiUGFydGljbGVzOiBcIi5jb25jYXQobCksdC53aWR0aC0xMCx0LmhlaWdodC0yMCkpLHIucGFydGljbGVzLmZvckVhY2goZnVuY3Rpb24oZSxuKXtlLnVwZGF0ZSgpLChlLnk+dC5oZWlnaHR8fGUueTwtMTAwfHxlLng+dC53aWR0aCsxMDB8fGUueDwtMTAwKSYmKGMmJnA8PXM/ci5wYXJ0aWNsZXNbbl09ci5nZXRQYXJ0aWNsZSgpOnIucmVtb3ZlUGFydGljbGVBdChuKSk7fSksbD4wfHxwPHN9KSx0aGlzLmNhbnZhcz1lO3ZhciBpPXRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtpZighaSl0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZ2V0IGNhbnZhcyBjb250ZXh0XCIpO3RoaXMuY29udGV4dD1pLHRoaXMuZ2V0T3B0aW9ucz1uO307ZnVuY3Rpb24geSh0LGUpe3ZhciBuPU9iamVjdC5rZXlzKHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCk7ZSYmKHI9ci5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpLG4ucHVzaC5hcHBseShuLHIpO31yZXR1cm4gbn1mdW5jdGlvbiBkKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIua2V5LHIpO319ZnVuY3Rpb24gYih0LGUsbil7cmV0dXJuIGUgaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtlXT1uLHR9dmFyIGc9e3dpZHRoOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93LmlubmVyV2lkdGg6MzAwLGhlaWdodDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdy5pbm5lckhlaWdodDoyMDAsbnVtYmVyT2ZQaWVjZXM6MjAwLGZyaWN0aW9uOi45OSx3aW5kOjAsZ3Jhdml0eTouMSxpbml0aWFsVmVsb2NpdHlYOjQsaW5pdGlhbFZlbG9jaXR5WToxMCxjb2xvcnM6W1wiI2Y0NDMzNlwiLFwiI2U5MWU2M1wiLFwiIzljMjdiMFwiLFwiIzY3M2FiN1wiLFwiIzNmNTFiNVwiLFwiIzIxOTZmM1wiLFwiIzAzYTlmNFwiLFwiIzAwYmNkNFwiLFwiIzAwOTY4OFwiLFwiIzRDQUY1MFwiLFwiIzhCQzM0QVwiLFwiI0NEREMzOVwiLFwiI0ZGRUIzQlwiLFwiI0ZGQzEwN1wiLFwiI0ZGOTgwMFwiLFwiI0ZGNTcyMlwiLFwiIzc5NTU0OFwiXSxvcGFjaXR5OjEsZGVidWc6ITEsdHdlZW5GdW5jdGlvbjpzLmEuZWFzZUluT3V0UXVhZCx0d2VlbkR1cmF0aW9uOjVlMyxyZWN5Y2xlOiEwLHJ1bjohMH0sTz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxuKXt2YXIgcj10aGlzOyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9KHRoaXMsdCksYih0aGlzLFwiY2FudmFzXCIsdm9pZCAwKSxiKHRoaXMsXCJjb250ZXh0XCIsdm9pZCAwKSxiKHRoaXMsXCJfb3B0aW9uc1wiLHZvaWQgMCksYih0aGlzLFwiZ2VuZXJhdG9yXCIsdm9pZCAwKSxiKHRoaXMsXCJyYWZJZFwiLHZvaWQgMCksYih0aGlzLFwic2V0T3B0aW9uc1dpdGhEZWZhdWx0c1wiLGZ1bmN0aW9uKHQpe3ZhciBlPXtjb25mZXR0aVNvdXJjZTp7eDowLHk6MCx3OnIuY2FudmFzLndpZHRoLGg6MH19O3IuX29wdGlvbnM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW2VdP2FyZ3VtZW50c1tlXTp7fTtlJTI/eShuLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2IodCxlLG5bZV0pO30pOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOnkobikuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKSk7fSk7fXJldHVybiB0fSh7fSxlLHt9LGcse30sdCksT2JqZWN0LmFzc2lnbihyLHQuY29uZmV0dGlTb3VyY2UpO30pLGIodGhpcyxcInVwZGF0ZVwiLGZ1bmN0aW9uKCl7dmFyIHQ9ci5vcHRpb25zLGU9dC5ydW4sbj10Lm9uQ29uZmV0dGlDb21wbGV0ZSxpPXIuY2FudmFzLG89ci5jb250ZXh0O2UmJihvLmZpbGxTdHlsZT1cIndoaXRlXCIsby5jbGVhclJlY3QoMCwwLGkud2lkdGgsaS5oZWlnaHQpKSxyLmdlbmVyYXRvci5hbmltYXRlKCk/ci5yYWZJZD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoci51cGRhdGUpOihuJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBuJiZyLmdlbmVyYXRvci5wYXJ0aWNsZXNHZW5lcmF0ZWQ+MCYmbi5jYWxsKHIsciksci5fb3B0aW9ucy5ydW49ITEpO30pLGIodGhpcyxcInJlc2V0XCIsZnVuY3Rpb24oKXtyLmdlbmVyYXRvciYmci5nZW5lcmF0b3IucGFydGljbGVzR2VuZXJhdGVkPjAmJihyLmdlbmVyYXRvci5wYXJ0aWNsZXNHZW5lcmF0ZWQ9MCxyLmdlbmVyYXRvci5wYXJ0aWNsZXM9W10sci5nZW5lcmF0b3IubGFzdE51bWJlck9mUGllY2VzPTApO30pLGIodGhpcyxcInN0b3BcIixmdW5jdGlvbigpe3Iub3B0aW9ucz17cnVuOiExfSxyLnJhZklkJiYoY2FuY2VsQW5pbWF0aW9uRnJhbWUoci5yYWZJZCksci5yYWZJZD12b2lkIDApO30pLHRoaXMuY2FudmFzPWU7dmFyIGk9dGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO2lmKCFpKXRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBnZXQgY2FudmFzIGNvbnRleHRcIik7dGhpcy5jb250ZXh0PWksdGhpcy5nZW5lcmF0b3I9bmV3IHYodGhpcy5jYW52YXMsZnVuY3Rpb24oKXtyZXR1cm4gci5vcHRpb25zfSksdGhpcy5vcHRpb25zPW4sdGhpcy51cGRhdGUoKTt9dmFyIGUsbjtyZXR1cm4gZT10LChuPVt7a2V5Olwib3B0aW9uc1wiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcHRpb25zfSxzZXQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fb3B0aW9ucyYmdGhpcy5fb3B0aW9ucy5ydW4sbj10aGlzLl9vcHRpb25zJiZ0aGlzLl9vcHRpb25zLnJlY3ljbGU7dGhpcy5zZXRPcHRpb25zV2l0aERlZmF1bHRzKHQpLHRoaXMuZ2VuZXJhdG9yJiYoT2JqZWN0LmFzc2lnbih0aGlzLmdlbmVyYXRvcix0aGlzLm9wdGlvbnMuY29uZmV0dGlTb3VyY2UpLFwiYm9vbGVhblwiPT10eXBlb2YgdC5yZWN5Y2xlJiZ0LnJlY3ljbGUmJiExPT09biYmKHRoaXMuZ2VuZXJhdG9yLmxhc3ROdW1iZXJPZlBpZWNlcz10aGlzLmdlbmVyYXRvci5wYXJ0aWNsZXMubGVuZ3RoKSksXCJib29sZWFuXCI9PXR5cGVvZiB0LnJ1biYmdC5ydW4mJiExPT09ZSYmdGhpcy51cGRhdGUoKTt9fV0pJiZkKGUucHJvdG90eXBlLG4pLHR9KCk7ZnVuY3Rpb24gdyh0KXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZhciBlPTAsbj1uZXcgQXJyYXkodC5sZW5ndGgpO2U8dC5sZW5ndGg7ZSsrKW5bZV09dFtlXTtyZXR1cm4gbn19KHQpfHxmdW5jdGlvbih0KXtpZihTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KHQpfHxcIltvYmplY3QgQXJndW1lbnRzXVwiPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpKXJldHVybiBBcnJheS5mcm9tKHQpfSh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2VcIil9KCl9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gKG09XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgdH0pKHQpfWZ1bmN0aW9uIHgoKXtyZXR1cm4gKHg9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIG49YXJndW1lbnRzW2VdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYodFtyXT1uW3JdKTt9cmV0dXJuIHR9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gUCh0LGUpe3ZhciBuPU9iamVjdC5rZXlzKHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCk7ZSYmKHI9ci5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpLG4ucHVzaC5hcHBseShuLHIpO31yZXR1cm4gbn1mdW5jdGlvbiBqKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1tlXT9hcmd1bWVudHNbZV06e307ZSUyP1AobiwhMCkuZm9yRWFjaChmdW5jdGlvbihlKXtEKHQsZSxuW2VdKTt9KTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpQKG4pLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkpO30pO31yZXR1cm4gdH1mdW5jdGlvbiBNKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHR9KHQpfHxmdW5jdGlvbih0LGUpe3ZhciBuPVtdLHI9ITAsaT0hMSxvPXZvaWQgMDt0cnl7Zm9yKHZhciBhLGM9dFtTeW1ib2wuaXRlcmF0b3JdKCk7IShyPShhPWMubmV4dCgpKS5kb25lKSYmKG4ucHVzaChhLnZhbHVlKSwhZXx8bi5sZW5ndGghPT1lKTtyPSEwKTt9Y2F0Y2godCl7aT0hMCxvPXQ7fWZpbmFsbHl7dHJ5e3J8fG51bGw9PWMucmV0dXJufHxjLnJldHVybigpO31maW5hbGx5e2lmKGkpdGhyb3cgb319cmV0dXJuIG59KHQsZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2VcIil9KCl9ZnVuY3Rpb24gSSh0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLmtleSxyKTt9fWZ1bmN0aW9uIFModCl7cmV0dXJuIChTPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24odCl7cmV0dXJuIHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCl9KSh0KX1mdW5jdGlvbiBDKHQpe2lmKHZvaWQgMD09PXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiB0fWZ1bmN0aW9uIEUodCxlKXtyZXR1cm4gKEU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbih0LGUpe3JldHVybiB0Ll9fcHJvdG9fXz1lLHR9KSh0LGUpfWZ1bmN0aW9uIEQodCxlLG4pe3JldHVybiBlIGluIHQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnRbZV09bix0fW4uZChlLFwiUmVhY3RDb25mZXR0aVwiLGZ1bmN0aW9uKCl7cmV0dXJuIEF9KTt2YXIgXz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3ZhciBuLHI7IWZ1bmN0aW9uKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX0odGhpcyxlKTtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aCxvPW5ldyBBcnJheShpPjE/aS0xOjApLGM9MTtjPGk7YysrKW9bYy0xXT1hcmd1bWVudHNbY107cmV0dXJuIHI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gIWV8fFwib2JqZWN0XCIhPT1tKGUpJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlP0ModCk6ZX0odGhpcywobj1TKGUpKS5jYWxsLmFwcGx5KG4sW3RoaXMsdF0uY29uY2F0KG8pKSksRChDKHIpLFwiY2FudmFzXCIsYS5hLmNyZWF0ZVJlZigpKSxEKEMociksXCJjb25mZXR0aVwiLHZvaWQgMCksci5jYW52YXM9dC5jYW52YXNSZWZ8fGEuYS5jcmVhdGVSZWYoKSxyfXZhciBuLHI7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiZFKHQsZSk7fShlLG9bXCJDb21wb25lbnRcIl0pLG49ZSwocj1be2tleTpcImNvbXBvbmVudERpZE1vdW50XCIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmNhbnZhcy5jdXJyZW50KXt2YXIgdD1rKHRoaXMucHJvcHMpWzBdO3RoaXMuY29uZmV0dGk9bmV3IE8odGhpcy5jYW52YXMuY3VycmVudCx0KTt9fX0se2tleTpcImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1rKHQpWzBdO3RoaXMuY29uZmV0dGkmJih0aGlzLmNvbmZldHRpLm9wdGlvbnM9ZSk7fX0se2tleTpcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNvbmZldHRpJiZ0aGlzLmNvbmZldHRpLnN0b3AoKSx0aGlzLmNvbmZldHRpPXZvaWQgMDt9fSx7a2V5OlwicmVuZGVyXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1NKGsodGhpcy5wcm9wcyksMiksZT10WzBdLG49dFsxXSxyPWooe3pJbmRleDoyLHBvc2l0aW9uOlwiYWJzb2x1dGVcIixwb2ludGVyRXZlbnRzOlwibm9uZVwiLHRvcDowLGxlZnQ6MCxib3R0b206MCxyaWdodDowfSxuLnN0eWxlKTtyZXR1cm4gYS5hLmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIix4KHt3aWR0aDplLndpZHRoLGhlaWdodDplLmhlaWdodCxyZWY6dGhpcy5jYW52YXN9LG4se3N0eWxlOnJ9KSl9fV0pJiZJKG4ucHJvdG90eXBlLHIpLGV9KCk7ZnVuY3Rpb24gayh0KXt2YXIgZT17fSxuPXt9LHI9W10uY29uY2F0KHcoT2JqZWN0LmtleXMoZykpLFtcImNvbmZldHRpU291cmNlXCIsXCJkcmF3U2hhcGVcIixcIm9uQ29uZmV0dGlDb21wbGV0ZVwiXSksaT1bXCJjYW52YXNSZWZcIl07Zm9yKHZhciBvIGluIHQpe3ZhciBhPXRbb107ci5pbmNsdWRlcyhvKT9lW29dPWE6aS5pbmNsdWRlcyhvKT9pW29dPWE6bltvXT1hO31yZXR1cm4gW2Usbix7fV19RChfLFwiZGVmYXVsdFByb3BzXCIsaih7fSxnKSksRChfLFwiZGlzcGxheU5hbWVcIixcIlJlYWN0Q29uZmV0dGlcIik7dmFyIEE9YS5hLmZvcndhcmRSZWYoZnVuY3Rpb24odCxlKXtyZXR1cm4gYS5hLmNyZWF0ZUVsZW1lbnQoXyx4KHtjYW52YXNSZWY6ZX0sdCkpfSk7ZS5kZWZhdWx0PUE7fV0pLmRlZmF1bHR9KTtcblxufSk7XG5cbnZhciBSZWFjdENvbmZldHRpID0gdW53cmFwRXhwb3J0cyhyZWFjdENvbmZldHRpX21pbik7XG52YXIgcmVhY3RDb25mZXR0aV9taW5fMSA9IHJlYWN0Q29uZmV0dGlfbWluLlJlYWN0Q29uZmV0dGk7XG5cbmZ1bmN0aW9uIGdldFNpemUkMSgpIHtcbiAgcmV0dXJuIHtcbiAgICBpbm5lckhlaWdodDogd2luZG93LmlubmVySGVpZ2h0LFxuICAgIGlubmVyV2lkdGg6IHdpbmRvdy5pbm5lcldpZHRoLFxuICAgIG91dGVySGVpZ2h0OiB3aW5kb3cub3V0ZXJIZWlnaHQsXG4gICAgb3V0ZXJXaWR0aDogd2luZG93Lm91dGVyV2lkdGhcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXNlV2luZG93U2l6ZSgpIHtcbiAgdmFyIF91c2VTdGF0ZSA9IFJlYWN0LnVzZVN0YXRlKGdldFNpemUkMSgpKSxcbiAgICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgICAgd2luZG93U2l6ZSA9IF91c2VTdGF0ZTJbMF0sXG4gICAgICBzZXRXaW5kb3dTaXplID0gX3VzZVN0YXRlMlsxXTtcblxuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIGhhbmRsZVJlc2l6ZSgpIHtcbiAgICAgIHNldFdpbmRvd1NpemUoZ2V0U2l6ZSQxKCkpO1xuICAgIH1cblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVSZXNpemUpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlUmVzaXplKTtcbiAgICB9O1xuICB9LCBbXSk7XG4gIHJldHVybiB3aW5kb3dTaXplO1xufVxuXG52YXIgc3VwcG9ydHNQYXRoMkQgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LlBhdGgyRCA9PT0gJ2Z1bmN0aW9uJztcblxuZnVuY3Rpb24gbWFrZVBhdGgocGF0aCkge1xuICBpZiAoIXN1cHBvcnRzUGF0aDJEKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIG5ldyB3aW5kb3cuUGF0aDJEKHBhdGgpO1xufVxuXG52YXIgcGF0aHMgPSBbLy8gTGlnaHRuaW5nIGJvbHRcbm1ha2VQYXRoKCdNOC4xMjQ4MTQ3MiA3LjA1MDRsMy41ODgxNjQ2OC01LjY0ODg2NzU0QzEyLjAzMDE0ODMuOTAyMjExNjMgMTEuNjcxNDM4Mi4yNDk0IDExLjA3OTkuMjQ5NGgtNy4yYy0uMzM5Nzk0NDUgMC0uNjM3MTM1ODkuMjI4NDQ2NDMtLjcyNDY4MDY2LjU1Njc2OTcybC0yLjg4IDEwLjgwMDk5OTk4Yy0uMTI2OTU2NS40NzYxMzEuMjMxOTE0MzcuOTQzMjMwMy43MjQ2ODA2Ni45NDMyMzAzaDMuODc3Mjk5MTNsLTEuNzMxNDc3OTYgOC4yOTU3NjM0Yy0uMTY3MTUwNTUuODAwODQyNy44ODYxNTMyOCAxLjI1MjY0MTkgMS4zNTEyMTE0OC41Nzk1ODI0TDEzLjYxNjkzMjYgOC4yMjY3NDU3NkMxMy45NjA2NzI4IDcuNzI5MjY0ODUgMTMuNjA0NTg1NSA3LjA1MDQgMTIuOTk5OSA3LjA1MDRIOC4xMjQ4MTQ3MnonKSwgLy8gV2luZG1pbGxcbm1ha2VQYXRoKCdNMTAuMjU2OTg5NC4yODMzODA4Yy42MjM2ODE4LjE5MjU2Njg5IDEuNTEwMTQ4MS42Mzc4NjU2IDIuMzk1NDA3OCAxLjQyNTI4MDk4IDIuNDczMjg2NiAyLjE5OTkyMzg5IDMuMjIxNjM3MiA1LjY2Mjk0NzggMS4yODI1NjQ0IDEwLjQ3MjY4MTgybC0uMDI1MTUyMS4wNTIxNjY1Yy4wNDM2Njk5LjA5MDE1NDIuMDgyODE3My4xODI5MDc4LjExNzE0NzUuMjc3OTY2M2w5LjA5ODY2NTQgNS4yNTM5OTY1Yy40MzcyNzI4LjI1MjQ0Ny41MDUyMTY0Ljg1NjEyLjEzNDk5ODcgMS4xOTk0NTA0LS4yNDk5MTQ5LjIzMTc2NDYtLjY4NjM0NzYuNTU1MTA0NC0xLjI4OTI0MTYuODczNjQ2My0zLjI4MDU5OCAxLjczMzMxOTQtNy4wNTkxMzI2IDEuMDg5ODEzMy0xMC42OTI2ODg0LTMuNDMzODA5NS0uMjc4NjcyNS0uMDAyMjIwNS0uNTQ3NjU4Mi0uMDQyNzU4MS0uODAyMTUwNC0uMTE3MTkyOWwtLjA2NjQxNzcuMDQ0MTE1MS04LjkzNjM2MzY3IDUuMTZjLS40MzcyNTM4OC4yNTI0Nzc1LS45OTQwMjc0My4wMDk0OTkxLTEuMTA2MjY2NjgtLjQ4Mjc3OTRsLS4wNDU1OTY2MS0uMjUyNzQ4Ni0uMDE2MzYzMS0uMTE4MzE2M2MtLjE3NDkwODkzLTEuMzYwNjczMS4wMDUwNTQ3OC0yLjkwNDAxMzYuODE5MzI3NjYtNC4zODA2NzI5IDEuMjU2OTU1NzUtMi4yNzk0NTEzIDMuNzc1OTQ0NjItMy44MzkzMzQ0IDcuNzYzNzQ3MTktNC4zOTA5NDA3LjExNzQ2Nzk5LS4xNzA5NjY5LjI1MTU1NjA1LS4zMjg5OTU4LjQwMDc3OTk1LS40NzEyODY2bC0uMDAzNjYwNDctLjA1MTMwMTRWMWMwLS41MDQ5MDkxLjQ4ODgyNTMzLS44NjU1NzU1My45NzEyNjIxMy0uNzE2NjE5MnptMS4wMzY0NjUxIDExLjgwOTcxMDFjLS43NzY0MjQxIDAtMS40MDQ1NDU0MS42Mjg0ODc2LTEuNDA0NTQ1NDEgMS40MDU0NTQ2IDAgLjc3NjQyMDguNjI4NDg0MDEgMS40MDU0NTQ1IDEuNDA0NTQ1NDEgMS40MDU0NTQ1Ljc3NTc4NjUgMCAxLjQwNTQ1NDYtLjYyOTY2ODEgMS40MDU0NTQ2LTEuNDA1NDU0NSAwLS43NzYzMzI3LS42MjkzMDUyLTEuNDA1NDU0Ni0xLjQwNTQ1NDYtMS40MDU0NTQ2eicpLCAvLyBMZWFmXG5tYWtlUGF0aCgnTTIxLjQ0NzM5MjYuNDMwMTIyNjhjLjQyNTI3NzQuMDQ1NDUwNjQuNzI2NTAyMi40MzY3ODE2Ni42NjE2MTg3Ljg1OTUzMDc5bC0uMDc3ODI1MS40MjkyNzI5OC0uMDMxNDc5LjE1NTIwMDVjLS4wOTMyMjExLjQ1MDQ4MjU3LS4yMTMyNTI2Ljk1MDk2MzMxLS4zNjI5OTc2IDEuNDg5MjA1MjgtLjQyNzkxOTYgMS41MzgxMTA1NS0xLjAwOTU4NTkgMy4wNzY5MjUzNC0xLjc3MDYwNjggNC41MTkxNDM1MS0yLjU3MjExMyA0Ljg3NDQzNjM2LTYuNTIwMzc1NyA3LjQ5Njc2NDM2LTExLjk5ODMyNDQ1IDYuNTg2MzExNjZsLS41NjUwNDM3Ny0uMDk1NzA0NC0uNTU3MzI5OTQtLjEwMjY2MDRjLS42OTgyNTU3Ny0uMTM1MDU0Ny0xLjIxNzEwODMxLS4yNjI4MDU3LTEuNTU2NTU3NjEtLjM4MzI1MzFsLS4wOTc4MjM2LS4wMzYyOTEyYy0xLjU5MzY3ODc2IDEuNTA2ODAzNC0yLjgxNDc1NzE0IDMuMDYwOTYyNy0zLjY5MDM2MyA0LjU4NzA5NjYtLjIwNjEzMzUyLjM1OTI3OTYtLjY2NDQ5MTQzLjQ4MzQyOTEtMS4wMjM3NzEwNi4yNzcyOTU1LS4zNTkyNzk2Mi0uMjA2MTMzNS0uNDgzNDI5MDctLjY2NDQ5MTQtLjI3NzI5NTU1LTEuMDIzNzcxIDEuMTgzNjEwODctMi4wNjI5NyAyLjkzODY1NzcyLTQuMTU3NzQgNS4zMTU3MjM3OS02LjEyODI3MTEuOTk1MTY5MDEtLjg0MTA2OTkgMi4xMTIwNzg3OS0xLjY2MTcwNzE1IDMuMzU1NjUyMTgtMi40NDgxNjEzOS4wOTcwMDUwNi0uMDM2MDkxNjIuMTg1NzM2NjctLjA5MTkzNDU5LjI1OTMxMjcyLS4xNjQ4OTU0NCAxLjYzMjg5NTA5LTEuMDEzMDUxMzkgMy40Nzg2MTg2OS0xLjk2NzQzMyA1LjU0NzgzMDg5LTIuODMzMzc5NC4zODIxMDMxLS4xNTk5MDY2NC41NjIyMjg5LS41OTkyOTIzMS40MDIzMjIyLS45ODEzOTUzNi0uMTU5OTA2Ni0uMzgyMTAzMDUtLjU5OTI5MjMtLjU2MjIyODg0LS45ODEzOTUzLS40MDIzMjIyLTEuMzUxNDY4Ni41NjU1NzcyMy0yLjYxMzM1NjIgMS4xNjg5NTE2NS0zLjc4ODExNDMgMS44MDI1NjExOWwtLjU4MDEyOTU5LjMxOTI4OTM2LjI4NTkzMzE1LTEuMjY0NjY5NTkuMDE1NzU4NTYtLjEwMDc3NTk0Yy4wMzIyNjU5LS4zNjgwMTcxLS4yMTE2MDM3Mi0uNzEyNDA5MDktLjU4MTk1NzE0LS43OTYxMTgyNC0uMzcwMzUzNDEtLjA4MzcwOTE1LS43Mzg2MzI0My4xMjIzMjE5Mi0uODY3Nzc5My40Njg0NDE0OWwtLjAyOTExNDg4LjA5Nzc1NzA4LS42MDMwNTEwMSAyLjY2MTY0ODgxQzUuNjYxODU0MTYgOS4zMTkzNDQ3NCAzLjg0MjE3MjMxIDEwLjgyNTA1NDYgMi4zNjk1MTczNSAxMi4zNzA0MDIyYy0uMTQ2Njk1ODktLjExODI0NDMtLjI4OTU1NjkyLS4yNDQxODYzLS40MjkyODUwNy0uMzc2NTU3M2wtLjMyMTIyNzM2LS4zMDkxODM1LS4xMTY1Nzc1OC0uMTIwOTMzNmMtLjI0MDQ0MTQ0LS4yNTk1NTctLjQyNDM1NjEyLS41MzEyODEzLS45ODg2Mzk4Mi0xLjM2NDk4MDYtLjgzNzEyNDE3LTEuMjM2ODA2NzgtLjgwMDQ2MDE2LTQuODM1NTkxNTEgMS4yNDEwNDc5My02Ljg4MTg5NzM2QzQuNjM3MzM5NDYuNDI3NTcxNjQgMTAuOTIyNzY3Mi0uNjk0Njc0ODEgMjEuNDQ3MzkyNi40MzAxMjI2N3onKV07XG4vKiBPbWl0dGluZyBjYW52YXNSZWYgYW5kIG1ha2luZyBpdCBvcHRpb25hbCwgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbGFtcHJvcy9yZWFjdC1jb25mZXR0aS9pc3N1ZXMvNzIgZm9yIG1vcmUgaW5mbyAqL1xuXG5mdW5jdGlvbiBDb25mZXR0aShfcmVmKSB7XG4gIHZhciBfcmVmJGVhc2VPdXRNcyA9IF9yZWYuZWFzZU91dE1zLFxuICAgICAgZWFzZU91dE1zID0gX3JlZiRlYXNlT3V0TXMgPT09IHZvaWQgMCA/IDAgOiBfcmVmJGVhc2VPdXRNcyxcbiAgICAgIF9yZWYkbnVtYmVyT2ZQaWVjZXMgPSBfcmVmLm51bWJlck9mUGllY2VzLFxuICAgICAgbnVtYmVyT2ZQaWVjZXMgPSBfcmVmJG51bWJlck9mUGllY2VzID09PSB2b2lkIDAgPyAyMDAgOiBfcmVmJG51bWJlck9mUGllY2VzLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiZWFzZU91dE1zXCIsIFwibnVtYmVyT2ZQaWVjZXNcIl0pO1xuXG4gIHZhciBfdXNlV2luZG93U2l6ZSA9IHVzZVdpbmRvd1NpemUoKSxcbiAgICAgIGlubmVySGVpZ2h0ID0gX3VzZVdpbmRvd1NpemUuaW5uZXJIZWlnaHQsXG4gICAgICBpbm5lcldpZHRoID0gX3VzZVdpbmRvd1NpemUuaW5uZXJXaWR0aDtcblxuICB2YXIgX3VzZVN0YXRlID0gUmVhY3QudXNlU3RhdGUobnVtYmVyT2ZQaWVjZXMpLFxuICAgICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgICBob3dIYXJkVG9QYXJ0eSA9IF91c2VTdGF0ZTJbMF0sXG4gICAgICBzZXRIb3dIYXJkVG9QYXJ0eSA9IF91c2VTdGF0ZTJbMV07XG5cbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZGVjcmVhc2UsIGRlY3JlYXNlRnVydGhlciwgY2FuY2VsUGFydHlUaW1lO1xuICAgIHNldEhvd0hhcmRUb1BhcnR5KG51bWJlck9mUGllY2VzKTtcblxuICAgIGlmIChlYXNlT3V0TXMgPiAwKSB7XG4gICAgICBkZWNyZWFzZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gc2V0SG93SGFyZFRvUGFydHkobnVtYmVyT2ZQaWVjZXMgLyAyKTtcbiAgICAgIH0sIGVhc2VPdXRNcyAqIDAuNik7XG4gICAgICBkZWNyZWFzZUZ1cnRoZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHNldEhvd0hhcmRUb1BhcnR5KG51bWJlck9mUGllY2VzIC8gNCk7XG4gICAgICB9LCBlYXNlT3V0TXMgKiAwLjgpO1xuICAgICAgY2FuY2VsUGFydHlUaW1lID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBzZXRIb3dIYXJkVG9QYXJ0eSgwKTtcbiAgICAgIH0sIGVhc2VPdXRNcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChlYXNlT3V0TXMgPiAwKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChkZWNyZWFzZSk7XG4gICAgICAgIGNsZWFyVGltZW91dChkZWNyZWFzZUZ1cnRoZXIpO1xuICAgICAgICBjbGVhclRpbWVvdXQoY2FuY2VsUGFydHlUaW1lKTtcbiAgICAgIH1cbiAgICB9O1xuICB9LCBbZWFzZU91dE1zLCBudW1iZXJPZlBpZWNlc10pO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUG9ydGFsJDEsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFJlYWN0Q29uZmV0dGksIF9leHRlbmRzKHtcbiAgICBzdHlsZToge1xuICAgICAgcG9zaXRpb246ICdmaXhlZCdcbiAgICB9LFxuICAgIGhlaWdodDogaW5uZXJIZWlnaHQsXG4gICAgd2lkdGg6IGlubmVyV2lkdGgsXG4gICAgbnVtYmVyT2ZQaWVjZXM6IGhvd0hhcmRUb1BhcnR5LFxuICAgIGRyYXdTaGFwZTogc3VwcG9ydHNQYXRoMkQgPyBmdW5jdGlvbiAoY3R4KSB7XG4gICAgICB2YXIgc2hhcGUgPSBwYXRoc1t0aGlzLnNoYXBlXTtcblxuICAgICAgaWYgKHNoYXBlKSB7XG4gICAgICAgIGN0eC5maWxsKHNoYXBlKTtcbiAgICAgIH1cbiAgICB9IDogdW5kZWZpbmVkXG4gIH0sIHByb3BzKSkpO1xufVxuXG5mdW5jdGlvbiB1c2VNZWRpYShxdWVyeSkge1xuICB2YXIgX3VzZVN0YXRlID0gUmVhY3QudXNlU3RhdGUod2luZG93Lm1hdGNoTWVkaWEocXVlcnkpLm1hdGNoZXMpLFxuICAgICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgICBtYXRjaGVzID0gX3VzZVN0YXRlMlswXSxcbiAgICAgIHNldE1hdGNoZXMgPSBfdXNlU3RhdGUyWzFdO1xuXG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG1lZGlhID0gd2luZG93Lm1hdGNoTWVkaWEocXVlcnkpO1xuXG4gICAgaWYgKG1lZGlhLm1hdGNoZXMgIT09IG1hdGNoZXMpIHtcbiAgICAgIHNldE1hdGNoZXMobWVkaWEubWF0Y2hlcyk7XG4gICAgfVxuXG4gICAgdmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICByZXR1cm4gc2V0TWF0Y2hlcyhtZWRpYS5tYXRjaGVzKTtcbiAgICB9O1xuXG4gICAgbWVkaWEuYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gbWVkaWEucmVtb3ZlTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgIH07XG4gIH0sIFttYXRjaGVzLCBxdWVyeV0pO1xuICByZXR1cm4gbWF0Y2hlcztcbn1cblxudmFyIHN0eWxlcyRFID0ge1wiQ29sbGFwc2libGVUYWJsZVwiOlwiQ29sbGFwc2libGVUYWJsZS1tb2R1bGVfX0NvbGxhcHNpYmxlVGFibGVcIixcIkNvbGxhcHNpYmxlVGFibGVfX0ljb25IZWFkZXJcIjpcIkNvbGxhcHNpYmxlVGFibGUtbW9kdWxlX19Db2xsYXBzaWJsZVRhYmxlX19JY29uSGVhZGVyXCIsXCJUYWJsZVJvd19fSWNvblwiOlwiQ29sbGFwc2libGVUYWJsZS1tb2R1bGVfX1RhYmxlUm93X19JY29uXCIsXCJUYWJsZVJvd19fQ29sbGFwc2libGUtLWV4cGFuZGVkXCI6XCJDb2xsYXBzaWJsZVRhYmxlLW1vZHVsZV9fVGFibGVSb3dfX0NvbGxhcHNpYmxlLS1leHBhbmRlZFwiLFwiVGFibGVSb3dfX0NvbGxhcHNpYmxlLS1jb2xsYXBzZWRcIjpcIkNvbGxhcHNpYmxlVGFibGUtbW9kdWxlX19UYWJsZVJvd19fQ29sbGFwc2libGUtLWNvbGxhcHNlZFwiLFwiVGFibGVSb3dfX0NvbGxhcHNpYmxlX19DaGV2cm9uLS1leHBhbmRlZFwiOlwiQ29sbGFwc2libGVUYWJsZS1tb2R1bGVfX1RhYmxlUm93X19Db2xsYXBzaWJsZV9fQ2hldnJvbi0tZXhwYW5kZWRcIn07XG5cbnZhciBSb3ckMiA9IFRhYmxlLlJvdyxcbiAgICBDZWxsJDEgPSBUYWJsZS5DZWxsO1xuZnVuY3Rpb24gVGFibGVSb3coX3JlZikge1xuICB2YXIgaXNVbmRlckJyZWFrcG9pbnQgPSBfcmVmLmlzVW5kZXJCcmVha3BvaW50LFxuICAgICAgY29scyA9IF9yZWYuY29scyxcbiAgICAgIGNvbGxhcHNpYmxlUm93ID0gX3JlZi5jb2xsYXBzaWJsZVJvdyxcbiAgICAgIF9yZWYkY29sbGFwc2VTdHlsZSA9IF9yZWYuY29sbGFwc2VTdHlsZSxcbiAgICAgIGNvbGxhcHNlU3R5bGUgPSBfcmVmJGNvbGxhcHNlU3R5bGUgPT09IHZvaWQgMCA/ICdwbHVzJyA6IF9yZWYkY29sbGFwc2VTdHlsZTtcblxuICB2YXIgX3VzZVN0YXRlID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpLFxuICAgICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgICBpc0V4cGFuZGVkID0gX3VzZVN0YXRlMlswXSxcbiAgICAgIHRvZ2dsZUV4cGFuZGVkID0gX3VzZVN0YXRlMlsxXTsgLy8gdGhlICdjb2xsYXBzZScgaWNvbiBpcyBvZmYtY2VudGVyIGFuZCBuZWVkcyB0byBiZSBjb3JyZWN0ZWRcblxuXG4gIHZhciBpY29uU3R5bGUgPSB7XG4gICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICB0b3A6IGlzRXhwYW5kZWQgPyA1IDogMFxuICB9O1xuICB2YXIgY29sbGFwc2libGVSb3dDbGFzcyA9IG1lcmdlQ2xhc3NOYW1lcyhzdHlsZXMkRVsnVGFibGVSb3dfX0NvbGxhcHNpYmxlJ10sIGlzRXhwYW5kZWQgPyBzdHlsZXMkRVsnVGFibGVSb3dfX0NvbGxhcHNpYmxlLS1leHBhbmRlZCddIDogc3R5bGVzJEVbJ1RhYmxlUm93X19Db2xsYXBzaWJsZS0tY29sbGFwc2VkJ10pO1xuICB2YXIgY29sbGFwc2libGVSb3dDaGV2cm9uQ2xhc3MgPSBpc0V4cGFuZGVkID8gc3R5bGVzJEVbJ1RhYmxlUm93X19Db2xsYXBzaWJsZV9fQ2hldnJvbi0tZXhwYW5kZWQnXSA6IHN0eWxlcyRFWydUYWJsZVJvd19fQ29sbGFwc2libGVfX0NoZXZyb24tLWNvbGxhcHNlZCddO1xuXG4gIHZhciBjb2xsYXBzaWJsZSA9IGZ1bmN0aW9uIGNvbGxhcHNpYmxlKCkge1xuICAgIHN3aXRjaCAoY29sbGFwc2VTdHlsZSkge1xuICAgICAgY2FzZSAnY2hldnJvbic6XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICAgICAgc3R5bGU6IGljb25TdHlsZVxuICAgICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChJY29uLCB7XG4gICAgICAgICAgbmFtZTogJ2NoZXZyb24tbGlnaHQnLFxuICAgICAgICAgIGNsYXNzTmFtZTogY29sbGFwc2libGVSb3dDaGV2cm9uQ2xhc3MsXG4gICAgICAgICAgZm9udFNpemU6IFwiMTNweFwiLFxuICAgICAgICAgIHZhcmlhbnQ6IDRcbiAgICAgICAgfSkpO1xuXG4gICAgICBjYXNlICdwbHVzJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICAgICAgc3R5bGU6IGljb25TdHlsZVxuICAgICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChJY29uLCB7XG4gICAgICAgICAgbmFtZTogaXNFeHBhbmRlZCA/ICdjb2xsYXBzZScgOiAnYWRkJyxcbiAgICAgICAgICBmb250U2l6ZTogXCIxM3B4XCJcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUmVhY3RfX2RlZmF1bHQuRnJhZ21lbnQsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFJvdyQyLCBudWxsLCBjb2xzLm1hcChmdW5jdGlvbiAocmVuZGVyRm4sIGkpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoQ2VsbCQxLCB7XG4gICAgICBrZXk6IGlcbiAgICB9LCByZW5kZXJGbigpKTtcbiAgfSksIGlzVW5kZXJCcmVha3BvaW50ICYmIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KENlbGwkMSwge1xuICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soKSB7XG4gICAgICByZXR1cm4gdG9nZ2xlRXhwYW5kZWQoIWlzRXhwYW5kZWQpO1xuICAgIH0sXG4gICAgY2xhc3NOYW1lOiBzdHlsZXMkRS5UYWJsZVJvd19fSWNvblxuICB9LCBjb2xsYXBzaWJsZSgpKSksIGlzVW5kZXJCcmVha3BvaW50ICYmIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFJvdyQyLCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChDZWxsJDEsIHtcbiAgICBjb2xTcGFuOiBjb2xzLmxlbmd0aCArIDEsXG4gICAgY2xhc3NOYW1lOiBjb2xsYXBzaWJsZVJvd0NsYXNzXG4gIH0sIGNvbGxhcHNpYmxlUm93KCkpKSk7XG59XG5cbnZhciBUaGVhZCQxID0gVGFibGUuVGhlYWQsXG4gICAgVGJvZHkkMSA9IFRhYmxlLlRib2R5LFxuICAgIFJvdyQzID0gVGFibGUuUm93LFxuICAgIFRoJDEgPSBUYWJsZS5UaDtcbmZ1bmN0aW9uIENvbGxhcHNpYmxlVGFibGUocHJvcHMpIHtcbiAgdmFyIGlzVW5kZXJCcmVha3BvaW50ID0gdXNlTWVkaWEoXCIobWF4LXdpZHRoOiBcIi5jb25jYXQocHJvcHMuYnJlYWtwb2ludCwgXCJweClcIikpO1xuXG4gIGlmICghcHJvcHMuZGF0YSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIGNsYXNzZXMgPSBtZXJnZUNsYXNzTmFtZXMoc3R5bGVzJEUuQ29sbGFwc2libGVUYWJsZSwgcHJvcHMuY2xhc3NOYW1lKTtcbiAgdmFyIGhlYWRlcnMgPSBpc1VuZGVyQnJlYWtwb2ludCA/IHByb3BzLmhlYWRlcnNDb2xsYXBzZWQgOiBwcm9wcy5oZWFkZXJzO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoVGFibGUsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoVGhlYWQkMSwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUm93JDMsIG51bGwsIGhlYWRlcnMubWFwKGZ1bmN0aW9uIChoKSB7XG4gICAgdmFyIHRoUHJvcHMgPSB0eXBlb2YgcHJvcHMuZ2V0SGVhZGVyUHJvcHMgPT09ICdmdW5jdGlvbicgPyBwcm9wcy5nZXRIZWFkZXJQcm9wcyhoKSA6IHt9O1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChUaCQxLCBfZXh0ZW5kcyh7XG4gICAgICBrZXk6IGhcbiAgICB9LCB0aFByb3BzKSwgaCk7XG4gIH0pLCBpc1VuZGVyQnJlYWtwb2ludCAmJiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChUaCQxLCB7XG4gICAgY2xhc3NOYW1lOiBzdHlsZXMkRS5Db2xsYXBzaWJsZVRhYmxlX19JY29uSGVhZGVyXG4gIH0pKSksIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFRib2R5JDEsIG51bGwsIHByb3BzLmRhdGEubWFwKGZ1bmN0aW9uIChkYXR1bSwgaSkge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChUYWJsZVJvdywge1xuICAgICAga2V5OiB0eXBlb2YgcHJvcHMuZ2V0Um93S2V5ID09PSAnZnVuY3Rpb24nID8gcHJvcHMuZ2V0Um93S2V5KGRhdHVtKSA6IGksXG4gICAgICBpc1VuZGVyQnJlYWtwb2ludDogaXNVbmRlckJyZWFrcG9pbnQsXG4gICAgICBjb2xzOiBoZWFkZXJzLm1hcChmdW5jdGlvbiAoZmllbGQpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gcHJvcHMucmVuZGVyQ2VsbChkYXR1bSwgZmllbGQpO1xuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgICBjb2xsYXBzaWJsZVJvdzogZnVuY3Rpb24gY29sbGFwc2libGVSb3coKSB7XG4gICAgICAgIHJldHVybiBwcm9wcy5yZW5kZXJDb2xsYXBzaWJsZVJvdyhkYXR1bSk7XG4gICAgICB9LFxuICAgICAgY29sbGFwc2VTdHlsZTogcHJvcHMuY29sbGFwc2libGVTdHlsZVxuICAgIH0pO1xuICB9KSkpO1xufVxuXG52YXIgc3R5bGVzJEYgPSB7XCJkLW5vbmVcIjpcIlByb2dyZXNzVHJhY2tlci1tb2R1bGVfX2Qtbm9uZVwiLFwiZC1pbmxpbmVcIjpcIlByb2dyZXNzVHJhY2tlci1tb2R1bGVfX2QtaW5saW5lXCIsXCJkLWlubGluZS1ibG9ja1wiOlwiUHJvZ3Jlc3NUcmFja2VyLW1vZHVsZV9fZC1pbmxpbmUtYmxvY2tcIixcImQtYmxvY2tcIjpcIlByb2dyZXNzVHJhY2tlci1tb2R1bGVfX2QtYmxvY2tcIixcImQtdGFibGVcIjpcIlByb2dyZXNzVHJhY2tlci1tb2R1bGVfX2QtdGFibGVcIixcImQtdGFibGUtcm93XCI6XCJQcm9ncmVzc1RyYWNrZXItbW9kdWxlX19kLXRhYmxlLXJvd1wiLFwiZC10YWJsZS1jZWxsXCI6XCJQcm9ncmVzc1RyYWNrZXItbW9kdWxlX19kLXRhYmxlLWNlbGxcIixcImQtZmxleFwiOlwiUHJvZ3Jlc3NUcmFja2VyLW1vZHVsZV9fZC1mbGV4XCIsXCJkLWlubGluZS1mbGV4XCI6XCJQcm9ncmVzc1RyYWNrZXItbW9kdWxlX19kLWlubGluZS1mbGV4XCIsXCJkLXNtLW5vbmVcIjpcIlByb2dyZXNzVHJhY2tlci1tb2R1bGVfX2Qtc20tbm9uZVwiLFwiZC1zbS1pbmxpbmVcIjpcIlByb2dyZXNzVHJhY2tlci1tb2R1bGVfX2Qtc20taW5saW5lXCIsXCJkLXNtLWlubGluZS1ibG9ja1wiOlwiUHJvZ3Jlc3NUcmFja2VyLW1vZHVsZV9fZC1zbS1pbmxpbmUtYmxvY2tcIixcImQtc20tYmxvY2tcIjpcIlByb2dyZXNzVHJhY2tlci1tb2R1bGVfX2Qtc20tYmxvY2tcIixcImQtc20tdGFibGVcIjpcIlByb2dyZXNzVHJhY2tlci1tb2R1bGVfX2Qtc20tdGFibGVcIixcImQtc20tdGFibGUtcm93XCI6XCJQcm9ncmVzc1RyYWNrZXItbW9kdWxlX19kLXNtLXRhYmxlLXJvd1wiLFwiZC1zbS10YWJsZS1jZWxsXCI6XCJQcm9ncmVzc1RyYWNrZXItbW9kdWxlX19kLXNtLXRhYmxlLWNlbGxcIixcImQtc20tZmxleFwiOlwiUHJvZ3Jlc3NUcmFja2VyLW1vZHVsZV9fZC1zbS1mbGV4XCIsXCJkLXNtLWlubGluZS1mbGV4XCI6XCJQcm9ncmVzc1RyYWNrZXItbW9kdWxlX19kLXNtLWlubGluZS1mbGV4XCIsXCJkLW1kLW5vbmVcIjpcIlByb2dyZXNzVHJhY2tlci1tb2R1bGVfX2QtbWQtbm9uZVwiLFwiZC1tZC1pbmxpbmVcIjpcIlByb2dyZXNzVHJhY2tlci1tb2R1bGVfX2QtbWQtaW5saW5lXCIsXCJkLW1kLWlubGluZS1ibG9ja1wiOlwiUHJvZ3Jlc3NUcmFja2VyLW1vZHVsZV9fZC1tZC1pbmxpbmUtYmxvY2tcIixcImQtbWQtYmxvY2tcIjpcIlByb2dyZXNzVHJhY2tlci1tb2R1bGVfX2QtbWQtYmxvY2tcIixcImQtbWQtdGFibGVcIjpcIlByb2dyZXNzVHJhY2tlci1tb2R1bGVfX2QtbWQtdGFibGVcIixcImQtbWQtdGFibGUtcm93XCI6XCJQcm9ncmVzc1RyYWNrZXItbW9kdWxlX19kLW1kLXRhYmxlLXJvd1wiLFwiZC1tZC10YWJsZS1jZWxsXCI6XCJQcm9ncmVzc1RyYWNrZXItbW9kdWxlX19kLW1kLXRhYmxlLWNlbGxcIixcImQtbWQtZmxleFwiOlwiUHJvZ3Jlc3NUcmFja2VyLW1vZHVsZV9fZC1tZC1mbGV4XCIsXCJkLW1kLWlubGluZS1mbGV4XCI6XCJQcm9ncmVzc1RyYWNrZXItbW9kdWxlX19kLW1kLWlubGluZS1mbGV4XCIsXCJkLWxnLW5vbmVcIjpcIlByb2dyZXNzVHJhY2tlci1tb2R1bGVfX2QtbGctbm9uZVwiLFwiZC1sZy1pbmxpbmVcIjpcIlByb2dyZXNzVHJhY2tlci1tb2R1bGVfX2QtbGctaW5saW5lXCIsXCJkLWxnLWlubGluZS1ibG9ja1wiOlwiUHJvZ3Jlc3NUcmFja2VyLW1vZHVsZV9fZC1sZy1pbmxpbmUtYmxvY2tcIixcImQtbGctYmxvY2tcIjpcIlByb2dyZXNzVHJhY2tlci1tb2R1bGVfX2QtbGctYmxvY2tcIixcImQtbGctdGFibGVcIjpcIlByb2dyZXNzVHJhY2tlci1tb2R1bGVfX2QtbGctdGFibGVcIixcImQtbGctdGFibGUtcm93XCI6XCJQcm9ncmVzc1RyYWNrZXItbW9kdWxlX19kLWxnLXRhYmxlLXJvd1wiLFwiZC1sZy10YWJsZS1jZWxsXCI6XCJQcm9ncmVzc1RyYWNrZXItbW9kdWxlX19kLWxnLXRhYmxlLWNlbGxcIixcImQtbGctZmxleFwiOlwiUHJvZ3Jlc3NUcmFja2VyLW1vZHVsZV9fZC1sZy1mbGV4XCIsXCJkLWxnLWlubGluZS1mbGV4XCI6XCJQcm9ncmVzc1RyYWNrZXItbW9kdWxlX19kLWxnLWlubGluZS1mbGV4XCIsXCJkLXhsLW5vbmVcIjpcIlByb2dyZXNzVHJhY2tlci1tb2R1bGVfX2QteGwtbm9uZVwiLFwiZC14bC1pbmxpbmVcIjpcIlByb2dyZXNzVHJhY2tlci1tb2R1bGVfX2QteGwtaW5saW5lXCIsXCJkLXhsLWlubGluZS1ibG9ja1wiOlwiUHJvZ3Jlc3NUcmFja2VyLW1vZHVsZV9fZC14bC1pbmxpbmUtYmxvY2tcIixcImQteGwtYmxvY2tcIjpcIlByb2dyZXNzVHJhY2tlci1tb2R1bGVfX2QteGwtYmxvY2tcIixcImQteGwtdGFibGVcIjpcIlByb2dyZXNzVHJhY2tlci1tb2R1bGVfX2QteGwtdGFibGVcIixcImQteGwtdGFibGUtcm93XCI6XCJQcm9ncmVzc1RyYWNrZXItbW9kdWxlX19kLXhsLXRhYmxlLXJvd1wiLFwiZC14bC10YWJsZS1jZWxsXCI6XCJQcm9ncmVzc1RyYWNrZXItbW9kdWxlX19kLXhsLXRhYmxlLWNlbGxcIixcImQteGwtZmxleFwiOlwiUHJvZ3Jlc3NUcmFja2VyLW1vZHVsZV9fZC14bC1mbGV4XCIsXCJkLXhsLWlubGluZS1mbGV4XCI6XCJQcm9ncmVzc1RyYWNrZXItbW9kdWxlX19kLXhsLWlubGluZS1mbGV4XCIsXCJkLXByaW50LW5vbmVcIjpcIlByb2dyZXNzVHJhY2tlci1tb2R1bGVfX2QtcHJpbnQtbm9uZVwiLFwiZC1wcmludC1pbmxpbmVcIjpcIlByb2dyZXNzVHJhY2tlci1tb2R1bGVfX2QtcHJpbnQtaW5saW5lXCIsXCJkLXByaW50LWlubGluZS1ibG9ja1wiOlwiUHJvZ3Jlc3NUcmFja2VyLW1vZHVsZV9fZC1wcmludC1pbmxpbmUtYmxvY2tcIixcImQtcHJpbnQtYmxvY2tcIjpcIlByb2dyZXNzVHJhY2tlci1tb2R1bGVfX2QtcHJpbnQtYmxvY2tcIixcImQtcHJpbnQtdGFibGVcIjpcIlByb2dyZXNzVHJhY2tlci1tb2R1bGVfX2QtcHJpbnQtdGFibGVcIixcImQtcHJpbnQtdGFibGUtcm93XCI6XCJQcm9ncmVzc1RyYWNrZXItbW9kdWxlX19kLXByaW50LXRhYmxlLXJvd1wiLFwiZC1wcmludC10YWJsZS1jZWxsXCI6XCJQcm9ncmVzc1RyYWNrZXItbW9kdWxlX19kLXByaW50LXRhYmxlLWNlbGxcIixcImQtcHJpbnQtZmxleFwiOlwiUHJvZ3Jlc3NUcmFja2VyLW1vZHVsZV9fZC1wcmludC1mbGV4XCIsXCJkLXByaW50LWlubGluZS1mbGV4XCI6XCJQcm9ncmVzc1RyYWNrZXItbW9kdWxlX19kLXByaW50LWlubGluZS1mbGV4XCIsXCJjb250YWluZXJcIjpcIlByb2dyZXNzVHJhY2tlci1tb2R1bGVfX2NvbnRhaW5lclwiLFwidGV4dFwiOlwiUHJvZ3Jlc3NUcmFja2VyLW1vZHVsZV9fdGV4dFwiLFwiY2lyY2xlXCI6XCJQcm9ncmVzc1RyYWNrZXItbW9kdWxlX19jaXJjbGVcIixcImN1cnJlbnRcIjpcIlByb2dyZXNzVHJhY2tlci1tb2R1bGVfX2N1cnJlbnRcIn07XG5cbnZhciBQcm9ncmVzc1RyYWNrZXIgPSBmdW5jdGlvbiBQcm9ncmVzc1RyYWNrZXIoX3JlZikge1xuICB2YXIgc3RlcHMgPSBfcmVmLnN0ZXBzLFxuICAgICAgY3VycmVudFN0ZXBJbmRleCA9IF9yZWYuY3VycmVudFN0ZXBJbmRleDtcblxuICB2YXIgc3RlcENsYXNzTmFtZSA9IGZ1bmN0aW9uIHN0ZXBDbGFzc05hbWUoc3RlcE5hbWUpIHtcbiAgICB2YXIgaXNDdXJyZW50U3RlcCA9IGN1cnJlbnRTdGVwSW5kZXggPT09IHN0ZXBzLmluZGV4T2Yoc3RlcE5hbWUpO1xuICAgIHJldHVybiBbc3R5bGVzJEYudGV4dCwgaXNDdXJyZW50U3RlcCAmJiBzdHlsZXMkRlsnY3VycmVudCddXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpO1xuICB9O1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBzdHlsZXMkRi5jb250YWluZXJcbiAgfSwgc3RlcHMubWFwKGZ1bmN0aW9uIChzdGVwTmFtZSkge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChUZXh0LCB7XG4gICAgICBrZXk6IHN0ZXBOYW1lLFxuICAgICAgYXM6IFwiZGl2XCIsXG4gICAgICBmb250U2l6ZTogXCJib2R5LXh4c21hbGxcIixcbiAgICAgIGZvbnRXZWlnaHQ6IDYwMCxcbiAgICAgIGNsYXNzTmFtZTogc3RlcENsYXNzTmFtZShzdGVwTmFtZSlcbiAgICB9LCBzdGVwTmFtZSwgLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBzdHlsZXMkRi5jaXJjbGVcbiAgICB9KSk7XG4gIH0pKTtcbn07XG5cbnZhciBzdHlsZXMkRyA9IHtcImQtbm9uZVwiOlwiV2l6YXJkLW1vZHVsZV9fZC1ub25lXCIsXCJkLWlubGluZVwiOlwiV2l6YXJkLW1vZHVsZV9fZC1pbmxpbmVcIixcImQtaW5saW5lLWJsb2NrXCI6XCJXaXphcmQtbW9kdWxlX19kLWlubGluZS1ibG9ja1wiLFwiZC1ibG9ja1wiOlwiV2l6YXJkLW1vZHVsZV9fZC1ibG9ja1wiLFwiZC10YWJsZVwiOlwiV2l6YXJkLW1vZHVsZV9fZC10YWJsZVwiLFwiZC10YWJsZS1yb3dcIjpcIldpemFyZC1tb2R1bGVfX2QtdGFibGUtcm93XCIsXCJkLXRhYmxlLWNlbGxcIjpcIldpemFyZC1tb2R1bGVfX2QtdGFibGUtY2VsbFwiLFwiZC1mbGV4XCI6XCJXaXphcmQtbW9kdWxlX19kLWZsZXhcIixcImQtaW5saW5lLWZsZXhcIjpcIldpemFyZC1tb2R1bGVfX2QtaW5saW5lLWZsZXhcIixcImQtc20tbm9uZVwiOlwiV2l6YXJkLW1vZHVsZV9fZC1zbS1ub25lXCIsXCJkLXNtLWlubGluZVwiOlwiV2l6YXJkLW1vZHVsZV9fZC1zbS1pbmxpbmVcIixcImQtc20taW5saW5lLWJsb2NrXCI6XCJXaXphcmQtbW9kdWxlX19kLXNtLWlubGluZS1ibG9ja1wiLFwiZC1zbS1ibG9ja1wiOlwiV2l6YXJkLW1vZHVsZV9fZC1zbS1ibG9ja1wiLFwiZC1zbS10YWJsZVwiOlwiV2l6YXJkLW1vZHVsZV9fZC1zbS10YWJsZVwiLFwiZC1zbS10YWJsZS1yb3dcIjpcIldpemFyZC1tb2R1bGVfX2Qtc20tdGFibGUtcm93XCIsXCJkLXNtLXRhYmxlLWNlbGxcIjpcIldpemFyZC1tb2R1bGVfX2Qtc20tdGFibGUtY2VsbFwiLFwiZC1zbS1mbGV4XCI6XCJXaXphcmQtbW9kdWxlX19kLXNtLWZsZXhcIixcImQtc20taW5saW5lLWZsZXhcIjpcIldpemFyZC1tb2R1bGVfX2Qtc20taW5saW5lLWZsZXhcIixcImQtbWQtbm9uZVwiOlwiV2l6YXJkLW1vZHVsZV9fZC1tZC1ub25lXCIsXCJkLW1kLWlubGluZVwiOlwiV2l6YXJkLW1vZHVsZV9fZC1tZC1pbmxpbmVcIixcImQtbWQtaW5saW5lLWJsb2NrXCI6XCJXaXphcmQtbW9kdWxlX19kLW1kLWlubGluZS1ibG9ja1wiLFwiZC1tZC1ibG9ja1wiOlwiV2l6YXJkLW1vZHVsZV9fZC1tZC1ibG9ja1wiLFwiZC1tZC10YWJsZVwiOlwiV2l6YXJkLW1vZHVsZV9fZC1tZC10YWJsZVwiLFwiZC1tZC10YWJsZS1yb3dcIjpcIldpemFyZC1tb2R1bGVfX2QtbWQtdGFibGUtcm93XCIsXCJkLW1kLXRhYmxlLWNlbGxcIjpcIldpemFyZC1tb2R1bGVfX2QtbWQtdGFibGUtY2VsbFwiLFwiZC1tZC1mbGV4XCI6XCJXaXphcmQtbW9kdWxlX19kLW1kLWZsZXhcIixcImQtbWQtaW5saW5lLWZsZXhcIjpcIldpemFyZC1tb2R1bGVfX2QtbWQtaW5saW5lLWZsZXhcIixcImQtbGctbm9uZVwiOlwiV2l6YXJkLW1vZHVsZV9fZC1sZy1ub25lXCIsXCJkLWxnLWlubGluZVwiOlwiV2l6YXJkLW1vZHVsZV9fZC1sZy1pbmxpbmVcIixcImQtbGctaW5saW5lLWJsb2NrXCI6XCJXaXphcmQtbW9kdWxlX19kLWxnLWlubGluZS1ibG9ja1wiLFwiZC1sZy1ibG9ja1wiOlwiV2l6YXJkLW1vZHVsZV9fZC1sZy1ibG9ja1wiLFwiZC1sZy10YWJsZVwiOlwiV2l6YXJkLW1vZHVsZV9fZC1sZy10YWJsZVwiLFwiZC1sZy10YWJsZS1yb3dcIjpcIldpemFyZC1tb2R1bGVfX2QtbGctdGFibGUtcm93XCIsXCJkLWxnLXRhYmxlLWNlbGxcIjpcIldpemFyZC1tb2R1bGVfX2QtbGctdGFibGUtY2VsbFwiLFwiZC1sZy1mbGV4XCI6XCJXaXphcmQtbW9kdWxlX19kLWxnLWZsZXhcIixcImQtbGctaW5saW5lLWZsZXhcIjpcIldpemFyZC1tb2R1bGVfX2QtbGctaW5saW5lLWZsZXhcIixcImQteGwtbm9uZVwiOlwiV2l6YXJkLW1vZHVsZV9fZC14bC1ub25lXCIsXCJkLXhsLWlubGluZVwiOlwiV2l6YXJkLW1vZHVsZV9fZC14bC1pbmxpbmVcIixcImQteGwtaW5saW5lLWJsb2NrXCI6XCJXaXphcmQtbW9kdWxlX19kLXhsLWlubGluZS1ibG9ja1wiLFwiZC14bC1ibG9ja1wiOlwiV2l6YXJkLW1vZHVsZV9fZC14bC1ibG9ja1wiLFwiZC14bC10YWJsZVwiOlwiV2l6YXJkLW1vZHVsZV9fZC14bC10YWJsZVwiLFwiZC14bC10YWJsZS1yb3dcIjpcIldpemFyZC1tb2R1bGVfX2QteGwtdGFibGUtcm93XCIsXCJkLXhsLXRhYmxlLWNlbGxcIjpcIldpemFyZC1tb2R1bGVfX2QteGwtdGFibGUtY2VsbFwiLFwiZC14bC1mbGV4XCI6XCJXaXphcmQtbW9kdWxlX19kLXhsLWZsZXhcIixcImQteGwtaW5saW5lLWZsZXhcIjpcIldpemFyZC1tb2R1bGVfX2QteGwtaW5saW5lLWZsZXhcIixcImQtcHJpbnQtbm9uZVwiOlwiV2l6YXJkLW1vZHVsZV9fZC1wcmludC1ub25lXCIsXCJkLXByaW50LWlubGluZVwiOlwiV2l6YXJkLW1vZHVsZV9fZC1wcmludC1pbmxpbmVcIixcImQtcHJpbnQtaW5saW5lLWJsb2NrXCI6XCJXaXphcmQtbW9kdWxlX19kLXByaW50LWlubGluZS1ibG9ja1wiLFwiZC1wcmludC1ibG9ja1wiOlwiV2l6YXJkLW1vZHVsZV9fZC1wcmludC1ibG9ja1wiLFwiZC1wcmludC10YWJsZVwiOlwiV2l6YXJkLW1vZHVsZV9fZC1wcmludC10YWJsZVwiLFwiZC1wcmludC10YWJsZS1yb3dcIjpcIldpemFyZC1tb2R1bGVfX2QtcHJpbnQtdGFibGUtcm93XCIsXCJkLXByaW50LXRhYmxlLWNlbGxcIjpcIldpemFyZC1tb2R1bGVfX2QtcHJpbnQtdGFibGUtY2VsbFwiLFwiZC1wcmludC1mbGV4XCI6XCJXaXphcmQtbW9kdWxlX19kLXByaW50LWZsZXhcIixcImQtcHJpbnQtaW5saW5lLWZsZXhcIjpcIldpemFyZC1tb2R1bGVfX2QtcHJpbnQtaW5saW5lLWZsZXhcIixcImJsb2NrXCI6XCJXaXphcmQtbW9kdWxlX19ibG9ja1wiLFwiaGVhZGVyXCI6XCJXaXphcmQtbW9kdWxlX19oZWFkZXJcIixcImNvbnRyb2xzXCI6XCJXaXphcmQtbW9kdWxlX19jb250cm9sc1wiLFwiYmFjay1idXR0b25cIjpcIldpemFyZC1tb2R1bGVfX2JhY2stYnV0dG9uXCIsXCJtYWluLWNvbnRyb2xzXCI6XCJXaXphcmQtbW9kdWxlX19tYWluLWNvbnRyb2xzXCIsXCJiYWNrLWJ1dHRvbi1tb2JpbGUtY29udGFpbmVyXCI6XCJXaXphcmQtbW9kdWxlX19iYWNrLWJ1dHRvbi1tb2JpbGUtY29udGFpbmVyXCJ9O1xuXG52YXIgQmFja0J1dHRvbiA9IGZ1bmN0aW9uIEJhY2tCdXR0b24oX3JlZikge1xuICB2YXIgYnV0dG9uTGFiZWwgPSBfcmVmLmJ1dHRvbkxhYmVsLFxuICAgICAgb25DbGljayA9IF9yZWYub25DbGljaztcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KExpbmssIHtcbiAgICBpY29uOiBcImFycm93LWxlZnRcIixcbiAgICBjb2xvcjogXCJ3YXJtLWdyYXlcIixcbiAgICBpY29ucGxhY2VtZW50OiBcInN0YXJ0XCIsXG4gICAgb25DbGljazogb25DbGljayxcbiAgICB2YXJpYW50OiBcInRleHQtd2l0aC1pY29uXCIsXG4gICAgY2xhc3NOYW1lOiBzdHlsZXMkR1snYmFjay1idXR0b24nXVxuICB9LCBidXR0b25MYWJlbCk7XG59O1xuXG52YXIgV2l6YXJkID0gZnVuY3Rpb24gV2l6YXJkKF9yZWYyKSB7XG4gIHZhciBzdGVwcyA9IF9yZWYyLnN0ZXBzLFxuICAgICAgY3VycmVudFN0ZXBJbmRleCA9IF9yZWYyLmN1cnJlbnRTdGVwSW5kZXgsXG4gICAgICB0aXRsZSA9IF9yZWYyLnRpdGxlLFxuICAgICAgc3VidGl0bGUgPSBfcmVmMi5zdWJ0aXRsZSxcbiAgICAgIGNoaWxkcmVuID0gX3JlZjIuY2hpbGRyZW4sXG4gICAgICBiYWNrQnV0dG9uTGFiZWwgPSBfcmVmMi5iYWNrQnV0dG9uTGFiZWwsXG4gICAgICBvbkJhY2tCdXR0b25DbGljayA9IF9yZWYyLm9uQmFja0J1dHRvbkNsaWNrLFxuICAgICAgbWFpbkNvbnRyb2xzQ29tcG9uZW50ID0gX3JlZjIubWFpbkNvbnRyb2xzQ29tcG9uZW50O1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUmVhY3RfX2RlZmF1bHQuRnJhZ21lbnQsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFByb2dyZXNzVHJhY2tlciwge1xuICAgIHN0ZXBzOiBzdGVwcyxcbiAgICBjdXJyZW50U3RlcEluZGV4OiBjdXJyZW50U3RlcEluZGV4XG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChCbG9jaywge1xuICAgIHdpdGhTaGFkb3c6IHRydWUsXG4gICAgc21hbGw6IHRydWUsXG4gICAgY2xhc3NOYW1lOiBzdHlsZXMkRy5ibG9ja1xuICB9LCAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBzdHlsZXMkRy5oZWFkZXJcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoVGV4dCwge1xuICAgIGFzOiBcImRpdlwiLFxuICAgIGZvbnRTaXplOiBcImg0XCJcbiAgfSwgdGl0bGUpLCBzdWJ0aXRsZSAmJiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCBudWxsLCBzdWJ0aXRsZSkpLCBjaGlsZHJlbiwgLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogc3R5bGVzJEcuY29udHJvbHNcbiAgfSwgYmFja0J1dHRvbkxhYmVsICYmIG9uQmFja0J1dHRvbkNsaWNrICYmIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KEJhY2tCdXR0b24sIHtcbiAgICBidXR0b25MYWJlbDogYmFja0J1dHRvbkxhYmVsLFxuICAgIG9uQ2xpY2s6IG9uQmFja0J1dHRvbkNsaWNrXG4gIH0pLCBtYWluQ29udHJvbHNDb21wb25lbnQgJiYgLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogc3R5bGVzJEdbJ21haW4tY29udHJvbHMnXVxuICB9LCBtYWluQ29udHJvbHNDb21wb25lbnQoKSkpKSwgYmFja0J1dHRvbkxhYmVsICYmIG9uQmFja0J1dHRvbkNsaWNrICYmIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IHN0eWxlcyRHWydiYWNrLWJ1dHRvbi1tb2JpbGUtY29udGFpbmVyJ11cbiAgfSwgLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoQmFja0J1dHRvbiwge1xuICAgIGJ1dHRvbkxhYmVsOiBiYWNrQnV0dG9uTGFiZWwsXG4gICAgb25DbGljazogb25CYWNrQnV0dG9uQ2xpY2tcbiAgfSkpKTtcbn07XG5cbnZhciBzdHlsZXMkSCA9IHtcImQtbm9uZVwiOlwiUGFnaW5hdGlvbi1tb2R1bGVfX2Qtbm9uZVwiLFwiZC1pbmxpbmVcIjpcIlBhZ2luYXRpb24tbW9kdWxlX19kLWlubGluZVwiLFwiZC1pbmxpbmUtYmxvY2tcIjpcIlBhZ2luYXRpb24tbW9kdWxlX19kLWlubGluZS1ibG9ja1wiLFwiZC1ibG9ja1wiOlwiUGFnaW5hdGlvbi1tb2R1bGVfX2QtYmxvY2tcIixcImQtdGFibGVcIjpcIlBhZ2luYXRpb24tbW9kdWxlX19kLXRhYmxlXCIsXCJkLXRhYmxlLXJvd1wiOlwiUGFnaW5hdGlvbi1tb2R1bGVfX2QtdGFibGUtcm93XCIsXCJkLXRhYmxlLWNlbGxcIjpcIlBhZ2luYXRpb24tbW9kdWxlX19kLXRhYmxlLWNlbGxcIixcImQtZmxleFwiOlwiUGFnaW5hdGlvbi1tb2R1bGVfX2QtZmxleFwiLFwiZC1pbmxpbmUtZmxleFwiOlwiUGFnaW5hdGlvbi1tb2R1bGVfX2QtaW5saW5lLWZsZXhcIixcImQtc20tbm9uZVwiOlwiUGFnaW5hdGlvbi1tb2R1bGVfX2Qtc20tbm9uZVwiLFwiZC1zbS1pbmxpbmVcIjpcIlBhZ2luYXRpb24tbW9kdWxlX19kLXNtLWlubGluZVwiLFwiZC1zbS1pbmxpbmUtYmxvY2tcIjpcIlBhZ2luYXRpb24tbW9kdWxlX19kLXNtLWlubGluZS1ibG9ja1wiLFwiZC1zbS1ibG9ja1wiOlwiUGFnaW5hdGlvbi1tb2R1bGVfX2Qtc20tYmxvY2tcIixcImQtc20tdGFibGVcIjpcIlBhZ2luYXRpb24tbW9kdWxlX19kLXNtLXRhYmxlXCIsXCJkLXNtLXRhYmxlLXJvd1wiOlwiUGFnaW5hdGlvbi1tb2R1bGVfX2Qtc20tdGFibGUtcm93XCIsXCJkLXNtLXRhYmxlLWNlbGxcIjpcIlBhZ2luYXRpb24tbW9kdWxlX19kLXNtLXRhYmxlLWNlbGxcIixcImQtc20tZmxleFwiOlwiUGFnaW5hdGlvbi1tb2R1bGVfX2Qtc20tZmxleFwiLFwiZC1zbS1pbmxpbmUtZmxleFwiOlwiUGFnaW5hdGlvbi1tb2R1bGVfX2Qtc20taW5saW5lLWZsZXhcIixcImQtbWQtbm9uZVwiOlwiUGFnaW5hdGlvbi1tb2R1bGVfX2QtbWQtbm9uZVwiLFwiZC1tZC1pbmxpbmVcIjpcIlBhZ2luYXRpb24tbW9kdWxlX19kLW1kLWlubGluZVwiLFwiZC1tZC1pbmxpbmUtYmxvY2tcIjpcIlBhZ2luYXRpb24tbW9kdWxlX19kLW1kLWlubGluZS1ibG9ja1wiLFwiZC1tZC1ibG9ja1wiOlwiUGFnaW5hdGlvbi1tb2R1bGVfX2QtbWQtYmxvY2tcIixcImQtbWQtdGFibGVcIjpcIlBhZ2luYXRpb24tbW9kdWxlX19kLW1kLXRhYmxlXCIsXCJkLW1kLXRhYmxlLXJvd1wiOlwiUGFnaW5hdGlvbi1tb2R1bGVfX2QtbWQtdGFibGUtcm93XCIsXCJkLW1kLXRhYmxlLWNlbGxcIjpcIlBhZ2luYXRpb24tbW9kdWxlX19kLW1kLXRhYmxlLWNlbGxcIixcImQtbWQtZmxleFwiOlwiUGFnaW5hdGlvbi1tb2R1bGVfX2QtbWQtZmxleFwiLFwiZC1tZC1pbmxpbmUtZmxleFwiOlwiUGFnaW5hdGlvbi1tb2R1bGVfX2QtbWQtaW5saW5lLWZsZXhcIixcImQtbGctbm9uZVwiOlwiUGFnaW5hdGlvbi1tb2R1bGVfX2QtbGctbm9uZVwiLFwiZC1sZy1pbmxpbmVcIjpcIlBhZ2luYXRpb24tbW9kdWxlX19kLWxnLWlubGluZVwiLFwiZC1sZy1pbmxpbmUtYmxvY2tcIjpcIlBhZ2luYXRpb24tbW9kdWxlX19kLWxnLWlubGluZS1ibG9ja1wiLFwiZC1sZy1ibG9ja1wiOlwiUGFnaW5hdGlvbi1tb2R1bGVfX2QtbGctYmxvY2tcIixcImQtbGctdGFibGVcIjpcIlBhZ2luYXRpb24tbW9kdWxlX19kLWxnLXRhYmxlXCIsXCJkLWxnLXRhYmxlLXJvd1wiOlwiUGFnaW5hdGlvbi1tb2R1bGVfX2QtbGctdGFibGUtcm93XCIsXCJkLWxnLXRhYmxlLWNlbGxcIjpcIlBhZ2luYXRpb24tbW9kdWxlX19kLWxnLXRhYmxlLWNlbGxcIixcImQtbGctZmxleFwiOlwiUGFnaW5hdGlvbi1tb2R1bGVfX2QtbGctZmxleFwiLFwiZC1sZy1pbmxpbmUtZmxleFwiOlwiUGFnaW5hdGlvbi1tb2R1bGVfX2QtbGctaW5saW5lLWZsZXhcIixcImQteGwtbm9uZVwiOlwiUGFnaW5hdGlvbi1tb2R1bGVfX2QteGwtbm9uZVwiLFwiZC14bC1pbmxpbmVcIjpcIlBhZ2luYXRpb24tbW9kdWxlX19kLXhsLWlubGluZVwiLFwiZC14bC1pbmxpbmUtYmxvY2tcIjpcIlBhZ2luYXRpb24tbW9kdWxlX19kLXhsLWlubGluZS1ibG9ja1wiLFwiZC14bC1ibG9ja1wiOlwiUGFnaW5hdGlvbi1tb2R1bGVfX2QteGwtYmxvY2tcIixcImQteGwtdGFibGVcIjpcIlBhZ2luYXRpb24tbW9kdWxlX19kLXhsLXRhYmxlXCIsXCJkLXhsLXRhYmxlLXJvd1wiOlwiUGFnaW5hdGlvbi1tb2R1bGVfX2QteGwtdGFibGUtcm93XCIsXCJkLXhsLXRhYmxlLWNlbGxcIjpcIlBhZ2luYXRpb24tbW9kdWxlX19kLXhsLXRhYmxlLWNlbGxcIixcImQteGwtZmxleFwiOlwiUGFnaW5hdGlvbi1tb2R1bGVfX2QteGwtZmxleFwiLFwiZC14bC1pbmxpbmUtZmxleFwiOlwiUGFnaW5hdGlvbi1tb2R1bGVfX2QteGwtaW5saW5lLWZsZXhcIixcImQtcHJpbnQtbm9uZVwiOlwiUGFnaW5hdGlvbi1tb2R1bGVfX2QtcHJpbnQtbm9uZVwiLFwiZC1wcmludC1pbmxpbmVcIjpcIlBhZ2luYXRpb24tbW9kdWxlX19kLXByaW50LWlubGluZVwiLFwiZC1wcmludC1pbmxpbmUtYmxvY2tcIjpcIlBhZ2luYXRpb24tbW9kdWxlX19kLXByaW50LWlubGluZS1ibG9ja1wiLFwiZC1wcmludC1ibG9ja1wiOlwiUGFnaW5hdGlvbi1tb2R1bGVfX2QtcHJpbnQtYmxvY2tcIixcImQtcHJpbnQtdGFibGVcIjpcIlBhZ2luYXRpb24tbW9kdWxlX19kLXByaW50LXRhYmxlXCIsXCJkLXByaW50LXRhYmxlLXJvd1wiOlwiUGFnaW5hdGlvbi1tb2R1bGVfX2QtcHJpbnQtdGFibGUtcm93XCIsXCJkLXByaW50LXRhYmxlLWNlbGxcIjpcIlBhZ2luYXRpb24tbW9kdWxlX19kLXByaW50LXRhYmxlLWNlbGxcIixcImQtcHJpbnQtZmxleFwiOlwiUGFnaW5hdGlvbi1tb2R1bGVfX2QtcHJpbnQtZmxleFwiLFwiZC1wcmludC1pbmxpbmUtZmxleFwiOlwiUGFnaW5hdGlvbi1tb2R1bGVfX2QtcHJpbnQtaW5saW5lLWZsZXhcIixcInBhZ2luYXRpb25cIjpcIlBhZ2luYXRpb24tbW9kdWxlX19wYWdpbmF0aW9uXCIsXCJwYWdlQnV0dG9uXCI6XCJQYWdpbmF0aW9uLW1vZHVsZV9fcGFnZUJ1dHRvblwiLFwiYWN0aXZlXCI6XCJQYWdpbmF0aW9uLW1vZHVsZV9fYWN0aXZlXCIsXCJjbGlja2FibGVcIjpcIlBhZ2luYXRpb24tbW9kdWxlX19jbGlja2FibGVcIixcInNtYWxsXCI6XCJQYWdpbmF0aW9uLW1vZHVsZV9fc21hbGxcIixcImxhcmdlXCI6XCJQYWdpbmF0aW9uLW1vZHVsZV9fbGFyZ2VcIn07XG5cbnZhciBkZWZhdWx0QnV0dG9uID0gZnVuY3Rpb24gZGVmYXVsdEJ1dHRvbihfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjaGlsZHJlblwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHByb3BzLCBjaGlsZHJlbik7XG59O1xuXG52YXIgZ2V0VmlzaWJsZVBhZ2VzID0gZnVuY3Rpb24gZ2V0VmlzaWJsZVBhZ2VzKHBhZ2UsIHBhZ2VzKSB7XG4gIGlmIChwYWdlcyA8IDYpIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShBcnJheShwYWdlcykua2V5cygpKTtcbiAgfVxuXG4gIGlmIChwYWdlID09PSAyKSB7XG4gICAgcmV0dXJuIFswLCAxLCAyLCAnLi4uJywgcGFnZXMgLSAxXTtcbiAgfVxuXG4gIGlmIChwYWdlID09PSBwYWdlcyAtIDMpIHtcbiAgICByZXR1cm4gWzAsICcuLi4nLCBwYWdlcyAtIDMsIHBhZ2VzIC0gMiwgcGFnZXMgLSAxXTtcbiAgfVxuXG4gIGlmIChwYWdlID4gMiAmJiBwYWdlIDwgcGFnZXMgLSAzKSB7XG4gICAgcmV0dXJuIFswLCAn4oCmJywgcGFnZSwgJ+KApicsIHBhZ2VzIC0gMV07XG4gIH1cblxuICByZXR1cm4gWzAsIDEsICfigKYnLCBwYWdlcyAtIDIsIHBhZ2VzIC0gMV07XG59O1xuXG52YXIgUGFnaW5hdGlvbiA9IGZ1bmN0aW9uIFBhZ2luYXRpb24oX3JlZjIpIHtcbiAgdmFyIHBhZ2VzID0gX3JlZjIucGFnZXMsXG4gICAgICBwYWdlID0gX3JlZjIucGFnZSxcbiAgICAgIG9uUGFnZUNoYW5nZSA9IF9yZWYyLm9uUGFnZUNoYW5nZSxcbiAgICAgIF9yZWYyJFBhZ2VCdXR0b25Db21wbyA9IF9yZWYyLlBhZ2VCdXR0b25Db21wb25lbnQsXG4gICAgICBQYWdlQnV0dG9uQ29tcG9uZW50ID0gX3JlZjIkUGFnZUJ1dHRvbkNvbXBvID09PSB2b2lkIDAgPyBkZWZhdWx0QnV0dG9uIDogX3JlZjIkUGFnZUJ1dHRvbkNvbXBvLFxuICAgICAgX3JlZjIkc2l6ZSA9IF9yZWYyLnNpemUsXG4gICAgICBzaXplID0gX3JlZjIkc2l6ZSA9PT0gdm9pZCAwID8gJ3NtYWxsJyA6IF9yZWYyJHNpemUsXG4gICAgICBjbGFzc05hbWUgPSBfcmVmMi5jbGFzc05hbWU7XG4gIHZhciBjbGFzc05hbWVzID0gbWVyZ2VDbGFzc05hbWVzKHN0eWxlcyRILnBhZ2luYXRpb24sIHN0eWxlcyRIW3NpemVdLCBjbGFzc05hbWUpO1xuICB2YXIgdmlzaWJsZVBhZ2VzID0gZ2V0VmlzaWJsZVBhZ2VzKHBhZ2UsIHBhZ2VzKTtcbiAgdmFyIGlzRmlyc3RQYWdlID0gcGFnZSA9PT0gMDtcbiAgdmFyIGlzTGFzdFBhZ2UgPSBwYWdlID09PSBwYWdlcyAtIDE7XG4gIHZhciBoYXNQYWdlcyA9IHBhZ2VzID4gMDtcblxuICB2YXIgY2hhbmdlUGFnZSA9IGZ1bmN0aW9uIGNoYW5nZVBhZ2UobmV3UGFnZSkge1xuICAgIGlmIChuZXdQYWdlID09PSBwYWdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb25QYWdlQ2hhbmdlKG5ld1BhZ2UpO1xuICB9O1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFBhZ2VCdXR0b25Db21wb25lbnQsIHtcbiAgICBjbGFzc05hbWU6IHN0eWxlcyRILnBhZ2VCdXR0b24sXG4gICAgb25DbGljazogZnVuY3Rpb24gb25DbGljaygpIHtcbiAgICAgIGlmIChpc0ZpcnN0UGFnZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNoYW5nZVBhZ2UocGFnZSAtIDEpO1xuICAgIH0sXG4gICAgZGlzYWJsZWQ6IGlzRmlyc3RQYWdlIHx8ICFoYXNQYWdlc1xuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSWNvbiwge1xuICAgIG5hbWU6IFwiYXJyb3ctbGVmdFwiLFxuICAgIGZvbnRTaXplOiBcIjEwMCVcIlxuICB9KSkpLCB2aXNpYmxlUGFnZXMubWFwKGZ1bmN0aW9uIChwYWdlSW5kZXgsIGluZGV4KSB7XG4gICAgaWYgKHR5cGVvZiBwYWdlSW5kZXggPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICBrZXk6IFwiXCIuY29uY2F0KHBhZ2VJbmRleCwgXCItXCIpLmNvbmNhdChpbmRleCksXG4gICAgICAgIGNsYXNzTmFtZTogc3R5bGVzJEgucGFnZUJ1dHRvblxuICAgICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIG51bGwsIHBhZ2VJbmRleCkpO1xuICAgIH1cblxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQYWdlQnV0dG9uQ29tcG9uZW50LCB7XG4gICAgICBrZXk6IHBhZ2VJbmRleCxcbiAgICAgIGNsYXNzTmFtZTogbWVyZ2VDbGFzc05hbWVzKHN0eWxlcyRILnBhZ2VCdXR0b24sIHBhZ2VJbmRleCA9PT0gcGFnZSAmJiBzdHlsZXMkSC5hY3RpdmUpLFxuICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljaygpIHtcbiAgICAgICAgcmV0dXJuIGNoYW5nZVBhZ2UocGFnZUluZGV4KTtcbiAgICAgIH1cbiAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgbnVsbCwgcGFnZUluZGV4ICsgMSkpO1xuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUGFnZUJ1dHRvbkNvbXBvbmVudCwge1xuICAgIGNsYXNzTmFtZTogc3R5bGVzJEgucGFnZUJ1dHRvbixcbiAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgaWYgKGlzTGFzdFBhZ2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjaGFuZ2VQYWdlKHBhZ2UgKyAxKTtcbiAgICB9LFxuICAgIGRpc2FibGVkOiBpc0xhc3RQYWdlIHx8ICFoYXNQYWdlc1xuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSWNvbiwge1xuICAgIG5hbWU6IFwiYXJyb3ctcmlnaHRcIixcbiAgICBmb250U2l6ZTogXCIxMDAlXCJcbiAgfSkpKSk7XG59O1xuXG5leHBvcnRzLkJsb2NrID0gQmxvY2s7XG5leHBvcnRzLkJsb2dDYXJkID0gQmxvZ0NhcmQ7XG5leHBvcnRzLkJveFNoYWRvdyA9IEJveFNoYWRvdztcbmV4cG9ydHMuQnV0dG9uID0gQnV0dG9uO1xuZXhwb3J0cy5DYXJkID0gQ2FyZDtcbmV4cG9ydHMuQ2hlY2tib3ggPSBDaGVja2JveDtcbmV4cG9ydHMuQ29sID0gQ29sO1xuZXhwb3J0cy5Db2xsYXBzaWJsZSA9IENvbGxhcHNpYmxlO1xuZXhwb3J0cy5Db2xsYXBzaWJsZVRhYmxlID0gQ29sbGFwc2libGVUYWJsZTtcbmV4cG9ydHMuQ29uZmV0dGkgPSBDb25mZXR0aTtcbmV4cG9ydHMuQ29uZmlybWF0aW9uID0gQ29uZmlybWF0aW9uO1xuZXhwb3J0cy5Db250YWluZXIgPSBDb250YWluZXI7XG5leHBvcnRzLkNvbnRlbnRCbG9jayA9IENvbnRlbnRCbG9jaztcbmV4cG9ydHMuRGF0ZVBpY2tlciA9IERhdGVQaWNrZXI7XG5leHBvcnRzLkVycm9yID0gRXJyb3IkMTtcbmV4cG9ydHMuRmxleCA9IEZsZXg7XG5leHBvcnRzLkZsb2F0aW5nSW5mb0Jsb2NrID0gRmxvYXRpbmdJbmZvQmxvY2s7XG5leHBvcnRzLkgxID0gSDE7XG5leHBvcnRzLkgyID0gSDI7XG5leHBvcnRzLkgzID0gSDM7XG5leHBvcnRzLkg0ID0gSDQ7XG5leHBvcnRzLkg1ID0gSDU7XG5leHBvcnRzLkg2ID0gSDY7XG5leHBvcnRzLkhpZ2hsaWdodGVkSGVhZGVyID0gSGlnaGxpZ2h0ZWRIZWFkZXI7XG5leHBvcnRzLkljb24gPSBJY29uO1xuZXhwb3J0cy5JbWFnZSA9IEltYWdlO1xuZXhwb3J0cy5JbWFnZVN0YWNrID0gSW1hZ2VTdGFjaztcbmV4cG9ydHMuSW5wdXQgPSBJbnB1dDtcbmV4cG9ydHMuTGFiZWwgPSBMYWJlbDtcbmV4cG9ydHMuTGluayA9IExpbms7XG5leHBvcnRzLkxvYWRlciA9IExvYWRlcjtcbmV4cG9ydHMuTG9nbyA9IExvZ287XG5leHBvcnRzLk1lbnUgPSBNZW51O1xuZXhwb3J0cy5Nb2RhbCA9IE1vZGFsO1xuZXhwb3J0cy5OYXZpZ2F0aW9uID0gTmF2aWdhdGlvbjtcbmV4cG9ydHMuTm90aWZpY2F0aW9uUG9wdXAgPSBOb3RpZmljYXRpb25Qb3B1cDtcbmV4cG9ydHMuUGFnaW5hdGlvbiA9IFBhZ2luYXRpb247XG5leHBvcnRzLlBhcmFncmFwaCA9IFBhcmFncmFwaDtcbmV4cG9ydHMuUGxhY2Vob2xkZXIgPSBQbGFjZWhvbGRlcjtcbmV4cG9ydHMuUHJvZ3Jlc3NCYXIgPSBQcm9ncmVzc0JhcjtcbmV4cG9ydHMuUHJvZ3Jlc3NUcmFja2VyID0gUHJvZ3Jlc3NUcmFja2VyO1xuZXhwb3J0cy5SYWRpbyA9IFJhZGlvO1xuZXhwb3J0cy5SYWRpb0dyb3VwID0gUmFkaW9Hcm91cDtcbmV4cG9ydHMuUmFuZ2VTbGlkZXIgPSBSYW5nZVNsaWRlcjtcbmV4cG9ydHMuUm93ID0gUm93O1xuZXhwb3J0cy5TZWxlY3QgPSBTZWxlY3Q7XG5leHBvcnRzLlNwYW4gPSBTcGFuO1xuZXhwb3J0cy5UYWJsZSA9IFRhYmxlO1xuZXhwb3J0cy5UYWJzID0gVGFicztcbmV4cG9ydHMuVGV4dCA9IFRleHQ7XG5leHBvcnRzLlRleHRBcmVhID0gVGV4dEFyZWE7XG5leHBvcnRzLlRvZ2dsZSA9IFRvZ2dsZTtcbmV4cG9ydHMuV2l6YXJkID0gV2l6YXJkO1xuZXhwb3J0cy5yZWdpc3RlckxvY2FsZSA9IFdlO1xuZXhwb3J0cy5zZXREZWZhdWx0TG9jYWxlID0gQWU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@vandebron/windmolen/dist/index.js\n"); - -/***/ }), - -/***/ "./node_modules/call-bind/index.js": -/*!*****************************************!*\ - !*** ./node_modules/call-bind/index.js ***! - \*****************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar bind = __webpack_require__(/*! function-bind */ \"./node_modules/function-bind/index.js\");\nvar GetIntrinsic = __webpack_require__(/*! get-intrinsic */ \"./node_modules/get-intrinsic/index.js\");\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9pbmRleC5qcz8zZWIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLFdBQVcsbUJBQU8sQ0FBQyw0REFBZTtBQUNsQyxtQkFBbUIsbUJBQU8sQ0FBQyw0REFBZTs7QUFFMUM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVEsV0FBVztBQUN2QyxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkNBQTJDLG1CQUFtQjtBQUM5RCxDQUFDO0FBQ0Q7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jYWxsLWJpbmQvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRhcHBseSA9IEdldEludHJpbnNpYygnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcbnZhciAkY2FsbCA9IEdldEludHJpbnNpYygnJUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsJScpO1xudmFyICRyZWZsZWN0QXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGJpbmQuY2FsbCgkY2FsbCwgJGFwcGx5KTtcblxudmFyICRnT1BEID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciUnLCB0cnVlKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG52YXIgJG1heCA9IEdldEludHJpbnNpYygnJU1hdGgubWF4JScpO1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IG51bGw7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjYWxsQmluZChvcmlnaW5hbEZ1bmN0aW9uKSB7XG5cdHZhciBmdW5jID0gJHJlZmxlY3RBcHBseShiaW5kLCAkY2FsbCwgYXJndW1lbnRzKTtcblx0aWYgKCRnT1BEICYmICRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdHZhciBkZXNjID0gJGdPUEQoZnVuYywgJ2xlbmd0aCcpO1xuXHRcdGlmIChkZXNjLmNvbmZpZ3VyYWJsZSkge1xuXHRcdFx0Ly8gb3JpZ2luYWwgbGVuZ3RoLCBwbHVzIHRoZSByZWNlaXZlciwgbWludXMgYW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIChhZnRlciB0aGUgcmVjZWl2ZXIpXG5cdFx0XHQkZGVmaW5lUHJvcGVydHkoXG5cdFx0XHRcdGZ1bmMsXG5cdFx0XHRcdCdsZW5ndGgnLFxuXHRcdFx0XHR7IHZhbHVlOiAxICsgJG1heCgwLCBvcmlnaW5hbEZ1bmN0aW9uLmxlbmd0aCAtIChhcmd1bWVudHMubGVuZ3RoIC0gMSkpIH1cblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmdW5jO1xufTtcblxudmFyIGFwcGx5QmluZCA9IGZ1bmN0aW9uIGFwcGx5QmluZCgpIHtcblx0cmV0dXJuICRyZWZsZWN0QXBwbHkoYmluZCwgJGFwcGx5LCBhcmd1bWVudHMpO1xufTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHQkZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICdhcHBseScsIHsgdmFsdWU6IGFwcGx5QmluZCB9KTtcbn0gZWxzZSB7XG5cdG1vZHVsZS5leHBvcnRzLmFwcGx5ID0gYXBwbHlCaW5kO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/call-bind/index.js\n"); - -/***/ }), - -/***/ "./node_modules/es-abstract/helpers/callBind.js": -/*!******************************************************!*\ - !*** ./node_modules/es-abstract/helpers/callBind.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\n// TODO; semver-major: remove\n\nmodule.exports = __webpack_require__(/*! call-bind */ \"./node_modules/call-bind/index.js\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvY2FsbEJpbmQuanM/NDRiNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixRQUFROztBQUVSLGlCQUFpQixtQkFBTyxDQUFDLG9EQUFXIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvY2FsbEJpbmQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIFRPRE87IHNlbXZlci1tYWpvcjogcmVtb3ZlXG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnY2FsbC1iaW5kJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/es-abstract/helpers/callBind.js\n"); - -/***/ }), - -/***/ "./node_modules/function-bind/implementation.js": -/*!******************************************************!*\ - !*** ./node_modules/function-bind/implementation.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW1wbGVtZW50YXRpb24uanM/Njg4ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQixpQkFBaUI7QUFDcEM7QUFDQTs7QUFFQSw4RUFBOEUscUNBQXFDLEVBQUU7O0FBRXJIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW1wbGVtZW50YXRpb24uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBuby1pbnZhbGlkLXRoaXM6IDEgKi9cblxudmFyIEVSUk9SX01FU1NBR0UgPSAnRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgY2FsbGVkIG9uIGluY29tcGF0aWJsZSAnO1xudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jVHlwZSA9ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmluZCh0aGF0KSB7XG4gICAgdmFyIHRhcmdldCA9IHRoaXM7XG4gICAgaWYgKHR5cGVvZiB0YXJnZXQgIT09ICdmdW5jdGlvbicgfHwgdG9TdHIuY2FsbCh0YXJnZXQpICE9PSBmdW5jVHlwZSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUk9SX01FU1NBR0UgKyB0YXJnZXQpO1xuICAgIH1cbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcblxuICAgIHZhciBib3VuZDtcbiAgICB2YXIgYmluZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIGJvdW5kKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChPYmplY3QocmVzdWx0KSA9PT0gcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5hcHBseShcbiAgICAgICAgICAgICAgICB0aGF0LFxuICAgICAgICAgICAgICAgIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGJvdW5kTGVuZ3RoID0gTWF0aC5tYXgoMCwgdGFyZ2V0Lmxlbmd0aCAtIGFyZ3MubGVuZ3RoKTtcbiAgICB2YXIgYm91bmRBcmdzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3VuZExlbmd0aDsgaSsrKSB7XG4gICAgICAgIGJvdW5kQXJncy5wdXNoKCckJyArIGkpO1xuICAgIH1cblxuICAgIGJvdW5kID0gRnVuY3Rpb24oJ2JpbmRlcicsICdyZXR1cm4gZnVuY3Rpb24gKCcgKyBib3VuZEFyZ3Muam9pbignLCcpICsgJyl7IHJldHVybiBiaW5kZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOyB9JykoYmluZGVyKTtcblxuICAgIGlmICh0YXJnZXQucHJvdG90eXBlKSB7XG4gICAgICAgIHZhciBFbXB0eSA9IGZ1bmN0aW9uIEVtcHR5KCkge307XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IHRhcmdldC5wcm90b3R5cGU7XG4gICAgICAgIGJvdW5kLnByb3RvdHlwZSA9IG5ldyBFbXB0eSgpO1xuICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBib3VuZDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/function-bind/implementation.js\n"); - -/***/ }), - -/***/ "./node_modules/function-bind/index.js": -/*!*********************************************!*\ - !*** ./node_modules/function-bind/index.js ***! - \*********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar implementation = __webpack_require__(/*! ./implementation */ \"./node_modules/function-bind/implementation.js\");\n\nmodule.exports = Function.prototype.bind || implementation;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanM/MGY3YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyx3RUFBa0I7O0FBRS9DIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/function-bind/index.js\n"); - -/***/ }), - -/***/ "./node_modules/get-intrinsic/index.js": -/*!*********************************************!*\ - !*** ./node_modules/get-intrinsic/index.js ***! - \*********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = __webpack_require__(/*! has-symbols */ \"./node_modules/has-symbols/index.js\")();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = __webpack_require__(/*! function-bind */ \"./node_modules/function-bind/index.js\");\nvar hasOwn = __webpack_require__(/*! has */ \"./node_modules/has/src/index.js\");\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL2dldC1pbnRyaW5zaWMvaW5kZXguanM/MDBjZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLCtDQUErQztBQUNoRixFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWLEVBQUU7QUFDRixlQUFlO0FBQ2Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLHdEQUFhOztBQUV0QyxzREFBc0Qsb0JBQW9CLEdBQUc7O0FBRTdFOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQ7QUFDckQsRUFBRTtBQUNGLGdEQUFnRDtBQUNoRCxFQUFFO0FBQ0Ysc0RBQXNEO0FBQ3RELEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxXQUFXLG1CQUFPLENBQUMsNERBQWU7QUFDbEMsYUFBYSxtQkFBTyxDQUFDLDRDQUFLO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw4QkFBOEIsa0JBQWtCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9nZXQtaW50cmluc2ljL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdW5kZWZpbmVkO1xuXG52YXIgJFN5bnRheEVycm9yID0gU3ludGF4RXJyb3I7XG52YXIgJEZ1bmN0aW9uID0gRnVuY3Rpb247XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG52YXIgZ2V0RXZhbGxlZENvbnN0cnVjdG9yID0gZnVuY3Rpb24gKGV4cHJlc3Npb25TeW50YXgpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gJEZ1bmN0aW9uKCdcInVzZSBzdHJpY3RcIjsgcmV0dXJuICgnICsgZXhwcmVzc2lvblN5bnRheCArICcpLmNvbnN0cnVjdG9yOycpKCk7XG5cdH0gY2F0Y2ggKGUpIHt9XG59O1xuXG52YXIgJGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuaWYgKCRnT1BEKSB7XG5cdHRyeSB7XG5cdFx0JGdPUEQoe30sICcnKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdCRnT1BEID0gbnVsbDsgLy8gdGhpcyBpcyBJRSA4LCB3aGljaCBoYXMgYSBicm9rZW4gZ09QRFxuXHR9XG59XG5cbnZhciB0aHJvd1R5cGVFcnJvciA9IGZ1bmN0aW9uICgpIHtcblx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoKTtcbn07XG52YXIgVGhyb3dUeXBlRXJyb3IgPSAkZ09QRFxuXHQ/IChmdW5jdGlvbiAoKSB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnMsIG5vLWNhbGxlciwgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG5cdFx0XHRhcmd1bWVudHMuY2FsbGVlOyAvLyBJRSA4IGRvZXMgbm90IHRocm93IGhlcmVcblx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHR9IGNhdGNoIChjYWxsZWVUaHJvd3MpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdC8vIElFIDggdGhyb3dzIG9uIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYXJndW1lbnRzLCAnJylcblx0XHRcdFx0cmV0dXJuICRnT1BEKGFyZ3VtZW50cywgJ2NhbGxlZScpLmdldDtcblx0XHRcdH0gY2F0Y2ggKGdPUER0aHJvd3MpIHtcblx0XHRcdFx0cmV0dXJuIHRocm93VHlwZUVycm9yO1xuXHRcdFx0fVxuXHRcdH1cblx0fSgpKVxuXHQ6IHRocm93VHlwZUVycm9yO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxudmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uICh4KSB7IHJldHVybiB4Ll9fcHJvdG9fXzsgfTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuXG52YXIgbmVlZHNFdmFsID0ge307XG5cbnZhciBUeXBlZEFycmF5ID0gdHlwZW9mIFVpbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8oVWludDhBcnJheSk7XG5cbnZhciBJTlRSSU5TSUNTID0ge1xuXHQnJUFnZ3JlZ2F0ZUVycm9yJSc6IHR5cGVvZiBBZ2dyZWdhdGVFcnJvciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBZ2dyZWdhdGVFcnJvcixcblx0JyVBcnJheSUnOiBBcnJheSxcblx0JyVBcnJheUJ1ZmZlciUnOiB0eXBlb2YgQXJyYXlCdWZmZXIgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQXJyYXlCdWZmZXIsXG5cdCclQXJyYXlJdGVyYXRvclByb3RvdHlwZSUnOiBoYXNTeW1ib2xzID8gZ2V0UHJvdG8oW11bU3ltYm9sLml0ZXJhdG9yXSgpKSA6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGUlJzogdW5kZWZpbmVkLFxuXHQnJUFzeW5jRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUFzeW5jR2VuZXJhdG9yJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IG5lZWRzRXZhbCxcblx0JyVBdG9taWNzJSc6IHR5cGVvZiBBdG9taWNzID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEF0b21pY3MsXG5cdCclQmlnSW50JSc6IHR5cGVvZiBCaWdJbnQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQmlnSW50LFxuXHQnJUJvb2xlYW4lJzogQm9vbGVhbixcblx0JyVEYXRhVmlldyUnOiB0eXBlb2YgRGF0YVZpZXcgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRGF0YVZpZXcsXG5cdCclRGF0ZSUnOiBEYXRlLFxuXHQnJWRlY29kZVVSSSUnOiBkZWNvZGVVUkksXG5cdCclZGVjb2RlVVJJQ29tcG9uZW50JSc6IGRlY29kZVVSSUNvbXBvbmVudCxcblx0JyVlbmNvZGVVUkklJzogZW5jb2RlVVJJLFxuXHQnJWVuY29kZVVSSUNvbXBvbmVudCUnOiBlbmNvZGVVUklDb21wb25lbnQsXG5cdCclRXJyb3IlJzogRXJyb3IsXG5cdCclZXZhbCUnOiBldmFsLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWV2YWxcblx0JyVFdmFsRXJyb3IlJzogRXZhbEVycm9yLFxuXHQnJUZsb2F0MzJBcnJheSUnOiB0eXBlb2YgRmxvYXQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZsb2F0MzJBcnJheSxcblx0JyVGbG9hdDY0QXJyYXklJzogdHlwZW9mIEZsb2F0NjRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDY0QXJyYXksXG5cdCclRmluYWxpemF0aW9uUmVnaXN0cnklJzogdHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZpbmFsaXphdGlvblJlZ2lzdHJ5LFxuXHQnJUZ1bmN0aW9uJSc6ICRGdW5jdGlvbixcblx0JyVHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclSW50OEFycmF5JSc6IHR5cGVvZiBJbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogSW50OEFycmF5LFxuXHQnJUludDE2QXJyYXklJzogdHlwZW9mIEludDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogSW50MTZBcnJheSxcblx0JyVJbnQzMkFycmF5JSc6IHR5cGVvZiBJbnQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDMyQXJyYXksXG5cdCclaXNGaW5pdGUlJzogaXNGaW5pdGUsXG5cdCclaXNOYU4lJzogaXNOYU4sXG5cdCclSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkpIDogdW5kZWZpbmVkLFxuXHQnJUpTT04lJzogdHlwZW9mIEpTT04gPT09ICdvYmplY3QnID8gSlNPTiA6IHVuZGVmaW5lZCxcblx0JyVNYXAlJzogdHlwZW9mIE1hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBNYXAsXG5cdCclTWFwSXRlcmF0b3JQcm90b3R5cGUlJzogdHlwZW9mIE1hcCA9PT0gJ3VuZGVmaW5lZCcgfHwgIWhhc1N5bWJvbHMgPyB1bmRlZmluZWQgOiBnZXRQcm90byhuZXcgTWFwKClbU3ltYm9sLml0ZXJhdG9yXSgpKSxcblx0JyVNYXRoJSc6IE1hdGgsXG5cdCclTnVtYmVyJSc6IE51bWJlcixcblx0JyVPYmplY3QlJzogT2JqZWN0LFxuXHQnJXBhcnNlRmxvYXQlJzogcGFyc2VGbG9hdCxcblx0JyVwYXJzZUludCUnOiBwYXJzZUludCxcblx0JyVQcm9taXNlJSc6IHR5cGVvZiBQcm9taXNlID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFByb21pc2UsXG5cdCclUHJveHklJzogdHlwZW9mIFByb3h5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFByb3h5LFxuXHQnJVJhbmdlRXJyb3IlJzogUmFuZ2VFcnJvcixcblx0JyVSZWZlcmVuY2VFcnJvciUnOiBSZWZlcmVuY2VFcnJvcixcblx0JyVSZWZsZWN0JSc6IHR5cGVvZiBSZWZsZWN0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFJlZmxlY3QsXG5cdCclUmVnRXhwJSc6IFJlZ0V4cCxcblx0JyVTZXQlJzogdHlwZW9mIFNldCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBTZXQsXG5cdCclU2V0SXRlcmF0b3JQcm90b3R5cGUlJzogdHlwZW9mIFNldCA9PT0gJ3VuZGVmaW5lZCcgfHwgIWhhc1N5bWJvbHMgPyB1bmRlZmluZWQgOiBnZXRQcm90byhuZXcgU2V0KClbU3ltYm9sLml0ZXJhdG9yXSgpKSxcblx0JyVTaGFyZWRBcnJheUJ1ZmZlciUnOiB0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXIgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2hhcmVkQXJyYXlCdWZmZXIsXG5cdCclU3RyaW5nJSc6IFN0cmluZyxcblx0JyVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUnOiBoYXNTeW1ib2xzID8gZ2V0UHJvdG8oJydbU3ltYm9sLml0ZXJhdG9yXSgpKSA6IHVuZGVmaW5lZCxcblx0JyVTeW1ib2wlJzogaGFzU3ltYm9scyA/IFN5bWJvbCA6IHVuZGVmaW5lZCxcblx0JyVTeW50YXhFcnJvciUnOiAkU3ludGF4RXJyb3IsXG5cdCclVGhyb3dUeXBlRXJyb3IlJzogVGhyb3dUeXBlRXJyb3IsXG5cdCclVHlwZWRBcnJheSUnOiBUeXBlZEFycmF5LFxuXHQnJVR5cGVFcnJvciUnOiAkVHlwZUVycm9yLFxuXHQnJVVpbnQ4QXJyYXklJzogdHlwZW9mIFVpbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDhBcnJheSxcblx0JyVVaW50OENsYW1wZWRBcnJheSUnOiB0eXBlb2YgVWludDhDbGFtcGVkQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDhDbGFtcGVkQXJyYXksXG5cdCclVWludDE2QXJyYXklJzogdHlwZW9mIFVpbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQxNkFycmF5LFxuXHQnJVVpbnQzMkFycmF5JSc6IHR5cGVvZiBVaW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MzJBcnJheSxcblx0JyVVUklFcnJvciUnOiBVUklFcnJvcixcblx0JyVXZWFrTWFwJSc6IHR5cGVvZiBXZWFrTWFwID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtNYXAsXG5cdCclV2Vha1JlZiUnOiB0eXBlb2YgV2Vha1JlZiA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrUmVmLFxuXHQnJVdlYWtTZXQlJzogdHlwZW9mIFdlYWtTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1NldFxufTtcblxudmFyIGRvRXZhbCA9IGZ1bmN0aW9uIGRvRXZhbChuYW1lKSB7XG5cdHZhciB2YWx1ZTtcblx0aWYgKG5hbWUgPT09ICclQXN5bmNGdW5jdGlvbiUnKSB7XG5cdFx0dmFsdWUgPSBnZXRFdmFsbGVkQ29uc3RydWN0b3IoJ2FzeW5jIGZ1bmN0aW9uICgpIHt9Jyk7XG5cdH0gZWxzZSBpZiAobmFtZSA9PT0gJyVHZW5lcmF0b3JGdW5jdGlvbiUnKSB7XG5cdFx0dmFsdWUgPSBnZXRFdmFsbGVkQ29uc3RydWN0b3IoJ2Z1bmN0aW9uKiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnKSB7XG5cdFx0dmFsdWUgPSBnZXRFdmFsbGVkQ29uc3RydWN0b3IoJ2FzeW5jIGZ1bmN0aW9uKiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNHZW5lcmF0b3IlJykge1xuXHRcdHZhciBmbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJyk7XG5cdFx0aWYgKGZuKSB7XG5cdFx0XHR2YWx1ZSA9IGZuLnByb3RvdHlwZTtcblx0XHR9XG5cdH0gZWxzZSBpZiAobmFtZSA9PT0gJyVBc3luY0l0ZXJhdG9yUHJvdG90eXBlJScpIHtcblx0XHR2YXIgZ2VuID0gZG9FdmFsKCclQXN5bmNHZW5lcmF0b3IlJyk7XG5cdFx0aWYgKGdlbikge1xuXHRcdFx0dmFsdWUgPSBnZXRQcm90byhnZW4ucHJvdG90eXBlKTtcblx0XHR9XG5cdH1cblxuXHRJTlRSSU5TSUNTW25hbWVdID0gdmFsdWU7XG5cblx0cmV0dXJuIHZhbHVlO1xufTtcblxudmFyIExFR0FDWV9BTElBU0VTID0ge1xuXHQnJUFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b3R5cGUlJzogWydBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVBcnJheVByb3RvX2VudHJpZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZW50cmllcyddLFxuXHQnJUFycmF5UHJvdG9fZm9yRWFjaCUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdmb3JFYWNoJ10sXG5cdCclQXJyYXlQcm90b19rZXlzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2tleXMnXSxcblx0JyVBcnJheVByb3RvX3ZhbHVlcyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICd2YWx1ZXMnXSxcblx0JyVBc3luY0Z1bmN0aW9uUHJvdG90eXBlJSc6IFsnQXN5bmNGdW5jdGlvbicsICdwcm90b3R5cGUnXSxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBbJ0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3JQcm90b3R5cGUlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZScsICdwcm90b3R5cGUnXSxcblx0JyVCb29sZWFuUHJvdG90eXBlJSc6IFsnQm9vbGVhbicsICdwcm90b3R5cGUnXSxcblx0JyVEYXRhVmlld1Byb3RvdHlwZSUnOiBbJ0RhdGFWaWV3JywgJ3Byb3RvdHlwZSddLFxuXHQnJURhdGVQcm90b3R5cGUlJzogWydEYXRlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUVycm9yUHJvdG90eXBlJSc6IFsnRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclRXZhbEVycm9yUHJvdG90eXBlJSc6IFsnRXZhbEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUZsb2F0MzJBcnJheVByb3RvdHlwZSUnOiBbJ0Zsb2F0MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDY0QXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDY0QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRnVuY3Rpb25Qcm90b3R5cGUlJzogWydGdW5jdGlvbicsICdwcm90b3R5cGUnXSxcblx0JyVHZW5lcmF0b3IlJzogWydHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnXSxcblx0JyVHZW5lcmF0b3JQcm90b3R5cGUlJzogWydHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclSW50OEFycmF5UHJvdG90eXBlJSc6IFsnSW50OEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDE2QXJyYXlQcm90b3R5cGUlJzogWydJbnQxNkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDMyQXJyYXlQcm90b3R5cGUlJzogWydJbnQzMkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUpTT05QYXJzZSUnOiBbJ0pTT04nLCAncGFyc2UnXSxcblx0JyVKU09OU3RyaW5naWZ5JSc6IFsnSlNPTicsICdzdHJpbmdpZnknXSxcblx0JyVNYXBQcm90b3R5cGUlJzogWydNYXAnLCAncHJvdG90eXBlJ10sXG5cdCclTnVtYmVyUHJvdG90eXBlJSc6IFsnTnVtYmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJU9iamVjdFByb3RvdHlwZSUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnXSxcblx0JyVPYmpQcm90b190b1N0cmluZyUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndG9TdHJpbmcnXSxcblx0JyVPYmpQcm90b192YWx1ZU9mJSc6IFsnT2JqZWN0JywgJ3Byb3RvdHlwZScsICd2YWx1ZU9mJ10sXG5cdCclUHJvbWlzZVByb3RvdHlwZSUnOiBbJ1Byb21pc2UnLCAncHJvdG90eXBlJ10sXG5cdCclUHJvbWlzZVByb3RvX3RoZW4lJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZScsICd0aGVuJ10sXG5cdCclUHJvbWlzZV9hbGwlJzogWydQcm9taXNlJywgJ2FsbCddLFxuXHQnJVByb21pc2VfcmVqZWN0JSc6IFsnUHJvbWlzZScsICdyZWplY3QnXSxcblx0JyVQcm9taXNlX3Jlc29sdmUlJzogWydQcm9taXNlJywgJ3Jlc29sdmUnXSxcblx0JyVSYW5nZUVycm9yUHJvdG90eXBlJSc6IFsnUmFuZ2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWZlcmVuY2VFcnJvclByb3RvdHlwZSUnOiBbJ1JlZmVyZW5jZUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVJlZ0V4cFByb3RvdHlwZSUnOiBbJ1JlZ0V4cCcsICdwcm90b3R5cGUnXSxcblx0JyVTZXRQcm90b3R5cGUlJzogWydTZXQnLCAncHJvdG90eXBlJ10sXG5cdCclU2hhcmVkQXJyYXlCdWZmZXJQcm90b3R5cGUlJzogWydTaGFyZWRBcnJheUJ1ZmZlcicsICdwcm90b3R5cGUnXSxcblx0JyVTdHJpbmdQcm90b3R5cGUlJzogWydTdHJpbmcnLCAncHJvdG90eXBlJ10sXG5cdCclU3ltYm9sUHJvdG90eXBlJSc6IFsnU3ltYm9sJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bnRheEVycm9yUHJvdG90eXBlJSc6IFsnU3ludGF4RXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclVHlwZWRBcnJheVByb3RvdHlwZSUnOiBbJ1R5cGVkQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVHlwZUVycm9yUHJvdG90eXBlJSc6IFsnVHlwZUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQ4QXJyYXlQcm90b3R5cGUlJzogWydVaW50OEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhDbGFtcGVkQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDE2QXJyYXlQcm90b3R5cGUlJzogWydVaW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50MzJBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQzMkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVSSUVycm9yUHJvdG90eXBlJSc6IFsnVVJJRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclV2Vha01hcFByb3RvdHlwZSUnOiBbJ1dlYWtNYXAnLCAncHJvdG90eXBlJ10sXG5cdCclV2Vha1NldFByb3RvdHlwZSUnOiBbJ1dlYWtTZXQnLCAncHJvdG90eXBlJ11cbn07XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJ2hhcycpO1xudmFyICRjb25jYXQgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgQXJyYXkucHJvdG90eXBlLmNvbmNhdCk7XG52YXIgJHNwbGljZUFwcGx5ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmFwcGx5LCBBcnJheS5wcm90b3R5cGUuc3BsaWNlKTtcbnZhciAkcmVwbGFjZSA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpO1xudmFyICRzdHJTbGljZSA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBTdHJpbmcucHJvdG90eXBlLnNsaWNlKTtcblxuLyogYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL2Jsb2IvNC4xNy4xNS9kaXN0L2xvZGFzaC5qcyNMNjczNS1MNjc0NCAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14lLltcXF1dK3xcXFsoPzooLT9cXGQrKD86XFwuXFxkKyk/KXwoW1wiJ10pKCg/Oig/IVxcMilbXlxcXFxdfFxcXFwuKSo/KVxcMilcXF18KD89KD86XFwufFxcW1xcXSkoPzpcXC58XFxbXFxdfCUkKSkvZztcbnZhciByZUVzY2FwZUNoYXIgPSAvXFxcXChcXFxcKT8vZzsgLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgc3RyaW5nVG9QYXRoID0gZnVuY3Rpb24gc3RyaW5nVG9QYXRoKHN0cmluZykge1xuXHR2YXIgZmlyc3QgPSAkc3RyU2xpY2Uoc3RyaW5nLCAwLCAxKTtcblx0dmFyIGxhc3QgPSAkc3RyU2xpY2Uoc3RyaW5nLCAtMSk7XG5cdGlmIChmaXJzdCA9PT0gJyUnICYmIGxhc3QgIT09ICclJykge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludmFsaWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0ZWQgY2xvc2luZyBgJWAnKTtcblx0fSBlbHNlIGlmIChsYXN0ID09PSAnJScgJiYgZmlyc3QgIT09ICclJykge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludmFsaWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0ZWQgb3BlbmluZyBgJWAnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gW107XG5cdCRyZXBsYWNlKHN0cmluZywgcmVQcm9wTmFtZSwgZnVuY3Rpb24gKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcblx0XHRyZXN1bHRbcmVzdWx0Lmxlbmd0aF0gPSBxdW90ZSA/ICRyZXBsYWNlKHN1YlN0cmluZywgcmVFc2NhcGVDaGFyLCAnJDEnKSA6IG51bWJlciB8fCBtYXRjaDtcblx0fSk7XG5cdHJldHVybiByZXN1bHQ7XG59O1xuLyogZW5kIGFkYXB0YXRpb24gKi9cblxudmFyIGdldEJhc2VJbnRyaW5zaWMgPSBmdW5jdGlvbiBnZXRCYXNlSW50cmluc2ljKG5hbWUsIGFsbG93TWlzc2luZykge1xuXHR2YXIgaW50cmluc2ljTmFtZSA9IG5hbWU7XG5cdHZhciBhbGlhcztcblx0aWYgKGhhc093bihMRUdBQ1lfQUxJQVNFUywgaW50cmluc2ljTmFtZSkpIHtcblx0XHRhbGlhcyA9IExFR0FDWV9BTElBU0VTW2ludHJpbnNpY05hbWVdO1xuXHRcdGludHJpbnNpY05hbWUgPSAnJScgKyBhbGlhc1swXSArICclJztcblx0fVxuXG5cdGlmIChoYXNPd24oSU5UUklOU0lDUywgaW50cmluc2ljTmFtZSkpIHtcblx0XHR2YXIgdmFsdWUgPSBJTlRSSU5TSUNTW2ludHJpbnNpY05hbWVdO1xuXHRcdGlmICh2YWx1ZSA9PT0gbmVlZHNFdmFsKSB7XG5cdFx0XHR2YWx1ZSA9IGRvRXZhbChpbnRyaW5zaWNOYW1lKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcgJiYgIWFsbG93TWlzc2luZykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZXhpc3RzLCBidXQgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGZpbGUgYW4gaXNzdWUhJyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGFsaWFzOiBhbGlhcyxcblx0XHRcdG5hbWU6IGludHJpbnNpY05hbWUsXG5cdFx0XHR2YWx1ZTogdmFsdWVcblx0XHR9O1xuXHR9XG5cblx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcignaW50cmluc2ljICcgKyBuYW1lICsgJyBkb2VzIG5vdCBleGlzdCEnKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0SW50cmluc2ljKG5hbWUsIGFsbG93TWlzc2luZykge1xuXHRpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IG5hbWUubGVuZ3RoID09PSAwKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2ludHJpbnNpYyBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIHR5cGVvZiBhbGxvd01pc3NpbmcgIT09ICdib29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcImFsbG93TWlzc2luZ1wiIGFyZ3VtZW50IG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblxuXHR2YXIgcGFydHMgPSBzdHJpbmdUb1BhdGgobmFtZSk7XG5cdHZhciBpbnRyaW5zaWNCYXNlTmFtZSA9IHBhcnRzLmxlbmd0aCA+IDAgPyBwYXJ0c1swXSA6ICcnO1xuXG5cdHZhciBpbnRyaW5zaWMgPSBnZXRCYXNlSW50cmluc2ljKCclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnLCBhbGxvd01pc3NpbmcpO1xuXHR2YXIgaW50cmluc2ljUmVhbE5hbWUgPSBpbnRyaW5zaWMubmFtZTtcblx0dmFyIHZhbHVlID0gaW50cmluc2ljLnZhbHVlO1xuXHR2YXIgc2tpcEZ1cnRoZXJDYWNoaW5nID0gZmFsc2U7XG5cblx0dmFyIGFsaWFzID0gaW50cmluc2ljLmFsaWFzO1xuXHRpZiAoYWxpYXMpIHtcblx0XHRpbnRyaW5zaWNCYXNlTmFtZSA9IGFsaWFzWzBdO1xuXHRcdCRzcGxpY2VBcHBseShwYXJ0cywgJGNvbmNhdChbMCwgMV0sIGFsaWFzKSk7XG5cdH1cblxuXHRmb3IgKHZhciBpID0gMSwgaXNPd24gPSB0cnVlOyBpIDwgcGFydHMubGVuZ3RoOyBpICs9IDEpIHtcblx0XHR2YXIgcGFydCA9IHBhcnRzW2ldO1xuXHRcdHZhciBmaXJzdCA9ICRzdHJTbGljZShwYXJ0LCAwLCAxKTtcblx0XHR2YXIgbGFzdCA9ICRzdHJTbGljZShwYXJ0LCAtMSk7XG5cdFx0aWYgKFxuXHRcdFx0KFxuXHRcdFx0XHQoZmlyc3QgPT09ICdcIicgfHwgZmlyc3QgPT09IFwiJ1wiIHx8IGZpcnN0ID09PSAnYCcpXG5cdFx0XHRcdHx8IChsYXN0ID09PSAnXCInIHx8IGxhc3QgPT09IFwiJ1wiIHx8IGxhc3QgPT09ICdgJylcblx0XHRcdClcblx0XHRcdCYmIGZpcnN0ICE9PSBsYXN0XG5cdFx0KSB7XG5cdFx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdwcm9wZXJ0eSBuYW1lcyB3aXRoIHF1b3RlcyBtdXN0IGhhdmUgbWF0Y2hpbmcgcXVvdGVzJyk7XG5cdFx0fVxuXHRcdGlmIChwYXJ0ID09PSAnY29uc3RydWN0b3InIHx8ICFpc093bikge1xuXHRcdFx0c2tpcEZ1cnRoZXJDYWNoaW5nID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpbnRyaW5zaWNCYXNlTmFtZSArPSAnLicgKyBwYXJ0O1xuXHRcdGludHJpbnNpY1JlYWxOYW1lID0gJyUnICsgaW50cmluc2ljQmFzZU5hbWUgKyAnJSc7XG5cblx0XHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY1JlYWxOYW1lKSkge1xuXHRcdFx0dmFsdWUgPSBJTlRSSU5TSUNTW2ludHJpbnNpY1JlYWxOYW1lXTtcblx0XHR9IGVsc2UgaWYgKHZhbHVlICE9IG51bGwpIHtcblx0XHRcdGlmICghKHBhcnQgaW4gdmFsdWUpKSB7XG5cdFx0XHRcdGlmICghYWxsb3dNaXNzaW5nKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2Jhc2UgaW50cmluc2ljIGZvciAnICsgbmFtZSArICcgZXhpc3RzLCBidXQgdGhlIHByb3BlcnR5IGlzIG5vdCBhdmFpbGFibGUuJyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHZvaWQgdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCRnT1BEICYmIChpICsgMSkgPj0gcGFydHMubGVuZ3RoKSB7XG5cdFx0XHRcdHZhciBkZXNjID0gJGdPUEQodmFsdWUsIHBhcnQpO1xuXHRcdFx0XHRpc093biA9ICEhZGVzYztcblxuXHRcdFx0XHQvLyBCeSBjb252ZW50aW9uLCB3aGVuIGEgZGF0YSBwcm9wZXJ0eSBpcyBjb252ZXJ0ZWQgdG8gYW4gYWNjZXNzb3Jcblx0XHRcdFx0Ly8gcHJvcGVydHkgdG8gZW11bGF0ZSBhIGRhdGEgcHJvcGVydHkgdGhhdCBkb2VzIG5vdCBzdWZmZXIgZnJvbVxuXHRcdFx0XHQvLyB0aGUgb3ZlcnJpZGUgbWlzdGFrZSwgdGhhdCBhY2Nlc3NvcidzIGdldHRlciBpcyBtYXJrZWQgd2l0aFxuXHRcdFx0XHQvLyBhbiBgb3JpZ2luYWxWYWx1ZWAgcHJvcGVydHkuIEhlcmUsIHdoZW4gd2UgZGV0ZWN0IHRoaXMsIHdlXG5cdFx0XHRcdC8vIHVwaG9sZCB0aGUgaWxsdXNpb24gYnkgcHJldGVuZGluZyB0byBzZWUgdGhhdCBvcmlnaW5hbCBkYXRhXG5cdFx0XHRcdC8vIHByb3BlcnR5LCBpLmUuLCByZXR1cm5pbmcgdGhlIHZhbHVlIHJhdGhlciB0aGFuIHRoZSBnZXR0ZXJcblx0XHRcdFx0Ly8gaXRzZWxmLlxuXHRcdFx0XHRpZiAoaXNPd24gJiYgJ2dldCcgaW4gZGVzYyAmJiAhKCdvcmlnaW5hbFZhbHVlJyBpbiBkZXNjLmdldCkpIHtcblx0XHRcdFx0XHR2YWx1ZSA9IGRlc2MuZ2V0O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlzT3duID0gaGFzT3duKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZVtwYXJ0XTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzT3duICYmICFza2lwRnVydGhlckNhY2hpbmcpIHtcblx0XHRcdFx0SU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV0gPSB2YWx1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/get-intrinsic/index.js\n"); - -/***/ }), - -/***/ "./node_modules/has-symbols/index.js": -/*!*******************************************!*\ - !*** ./node_modules/has-symbols/index.js ***! - \*******************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = __webpack_require__(/*! ./shams */ \"./node_modules/has-symbols/shams.js\");\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL2hhcy1zeW1ib2xzL2luZGV4LmpzPzUxNTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQSxvQkFBb0IsbUJBQU8sQ0FBQyxvREFBUzs7QUFFckM7QUFDQSx3Q0FBd0MsY0FBYztBQUN0RCxvQ0FBb0MsY0FBYztBQUNsRCw2Q0FBNkMsY0FBYztBQUMzRCx5Q0FBeUMsY0FBYzs7QUFFdkQ7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIG9yaWdTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2w7XG52YXIgaGFzU3ltYm9sU2hhbSA9IHJlcXVpcmUoJy4vc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNOYXRpdmVTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2woJ2ZvbycpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2woJ2JhcicpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRyZXR1cm4gaGFzU3ltYm9sU2hhbSgpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/has-symbols/index.js\n"); - -/***/ }), - -/***/ "./node_modules/has-symbols/shams.js": -/*!*******************************************!*\ - !*** ./node_modules/has-symbols/shams.js ***! - \*******************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL2hhcy1zeW1ib2xzL3NoYW1zLmpzPzE2OTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQTtBQUNBLDBGQUEwRixjQUFjO0FBQ3hHLDJDQUEyQyxhQUFhOztBQUV4RDtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsY0FBYzs7QUFFN0MsaUVBQWlFLGNBQWM7QUFDL0Usb0VBQW9FLGNBQWM7O0FBRWxGO0FBQ0EsZ0NBQWdDLGNBQWM7QUFDOUM7QUFDQSxzQ0FBc0MsY0FBYzs7QUFFcEQsMERBQTBELGNBQWM7QUFDeEUsOERBQThELGNBQWM7O0FBRTVFO0FBQ0E7QUFDQSxtQkFBbUIsY0FBYyxFQUFFO0FBQ25DLDBFQUEwRSxjQUFjOztBQUV4Rix3R0FBd0csY0FBYzs7QUFFdEg7QUFDQSw0Q0FBNEMsY0FBYzs7QUFFMUQsNkRBQTZELGNBQWM7O0FBRTNFO0FBQ0E7QUFDQSxzRUFBc0UsY0FBYztBQUNwRjs7QUFFQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2hhcy1zeW1ib2xzL3NoYW1zLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKiBlc2xpbnQgY29tcGxleGl0eTogWzIsIDE4XSwgbWF4LXN0YXRlbWVudHM6IFsyLCAzM10gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaGFzU3ltYm9scygpIHtcblx0aWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJykgeyByZXR1cm4gdHJ1ZTsgfVxuXG5cdHZhciBvYmogPSB7fTtcblx0dmFyIHN5bSA9IFN5bWJvbCgndGVzdCcpO1xuXHR2YXIgc3ltT2JqID0gT2JqZWN0KHN5bSk7XG5cdGlmICh0eXBlb2Ygc3ltID09PSAnc3RyaW5nJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkgIT09ICdbb2JqZWN0IFN5bWJvbF0nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bU9iaikgIT09ICdbb2JqZWN0IFN5bWJvbF0nKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdC8vIHRlbXAgZGlzYWJsZWQgcGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9samhhcmIvb2JqZWN0LmFzc2lnbi9pc3N1ZXMvMTdcblx0Ly8gaWYgKHN5bSBpbnN0YW5jZW9mIFN5bWJvbCkgeyByZXR1cm4gZmFsc2U7IH1cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL1dlYlJlZmxlY3Rpb24vZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzL2lzc3Vlcy80XG5cdC8vIGlmICghKHN5bU9iaiBpbnN0YW5jZW9mIFN5bWJvbCkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gaWYgKHR5cGVvZiBTeW1ib2wucHJvdG90eXBlLnRvU3RyaW5nICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyBpZiAoU3RyaW5nKHN5bSkgIT09IFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzeW0pKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdHZhciBzeW1WYWwgPSA0Mjtcblx0b2JqW3N5bV0gPSBzeW1WYWw7XG5cdGZvciAoc3ltIGluIG9iaikgeyByZXR1cm4gZmFsc2U7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tdW5yZWFjaGFibGUtbG9vcFxuXHRpZiAodHlwZW9mIE9iamVjdC5rZXlzID09PSAnZnVuY3Rpb24nICYmIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoICE9PSAwKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iaik7XG5cdGlmIChzeW1zLmxlbmd0aCAhPT0gMSB8fCBzeW1zWzBdICE9PSBzeW0pIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqLCBzeW0pKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIHN5bSk7XG5cdFx0aWYgKGRlc2NyaXB0b3IudmFsdWUgIT09IHN5bVZhbCB8fCBkZXNjcmlwdG9yLmVudW1lcmFibGUgIT09IHRydWUpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/has-symbols/shams.js\n"); - -/***/ }), - -/***/ "./node_modules/has/src/index.js": -/*!***************************************!*\ - !*** ./node_modules/has/src/index.js ***! - \***************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar bind = __webpack_require__(/*! function-bind */ \"./node_modules/function-bind/index.js\");\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL2hhcy9zcmMvaW5kZXguanM/YTBkMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsNERBQWU7O0FBRWxDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2hhcy9zcmMvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/has/src/index.js\n"); - -/***/ }), - -/***/ "./node_modules/lodash.debounce/index.js": -/*!***********************************************!*\ - !*** ./node_modules/lodash.debounce/index.js ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(global) {/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../next/dist/compiled/webpack/global.js */ \"./node_modules/next/dist/compiled/webpack/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC5kZWJvdW5jZS9pbmRleC5qcz9mN2ZlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTyxZQUFZO0FBQzlCLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLDhDQUE4QyxrQkFBa0I7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7QUFDYixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsRUFBRTtBQUNiLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7QUFDYixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxFQUFFO0FBQ2IsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC5kZWJvdW5jZS9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogbG9kYXNoIChDdXN0b20gQnVpbGQpIDxodHRwczovL2xvZGFzaC5jb20vPlxuICogQnVpbGQ6IGBsb2Rhc2ggbW9kdWxhcml6ZSBleHBvcnRzPVwibnBtXCIgLW8gLi9gXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyA8aHR0cHM6Ly9qcXVlcnkub3JnLz5cbiAqIFJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT5cbiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+XG4gKiBDb3B5cmlnaHQgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbiAqL1xuXG4vKiogVXNlZCBhcyB0aGUgYFR5cGVFcnJvcmAgbWVzc2FnZSBmb3IgXCJGdW5jdGlvbnNcIiBtZXRob2RzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTkFOID0gMCAvIDA7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZS4gKi9cbnZhciByZVRyaW0gPSAvXlxccyt8XFxzKyQvZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGJhZCBzaWduZWQgaGV4YWRlY2ltYWwgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUlzQmFkSGV4ID0gL15bLStdMHhbMC05YS1mXSskL2k7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBiaW5hcnkgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUlzQmluYXJ5ID0gL14wYlswMV0rJC9pO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb2N0YWwgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUlzT2N0YWwgPSAvXjBvWzAtN10rJC9pO1xuXG4vKiogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgd2l0aG91dCBhIGRlcGVuZGVuY3kgb24gYHJvb3RgLiAqL1xudmFyIGZyZWVQYXJzZUludCA9IHBhcnNlSW50O1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBvYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXgsXG4gICAgbmF0aXZlTWluID0gTWF0aC5taW47XG5cbi8qKlxuICogR2V0cyB0aGUgdGltZXN0YW1wIG9mIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRoYXQgaGF2ZSBlbGFwc2VkIHNpbmNlXG4gKiB0aGUgVW5peCBlcG9jaCAoMSBKYW51YXJ5IDE5NzAgMDA6MDA6MDAgVVRDKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgRGF0ZVxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgdGltZXN0YW1wLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmRlZmVyKGZ1bmN0aW9uKHN0YW1wKSB7XG4gKiAgIGNvbnNvbGUubG9nKF8ubm93KCkgLSBzdGFtcCk7XG4gKiB9LCBfLm5vdygpKTtcbiAqIC8vID0+IExvZ3MgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaXQgdG9vayBmb3IgdGhlIGRlZmVycmVkIGludm9jYXRpb24uXG4gKi9cbnZhciBub3cgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHJvb3QuRGF0ZS5ub3coKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIGRlYm91bmNlZCBmdW5jdGlvbiB0aGF0IGRlbGF5cyBpbnZva2luZyBgZnVuY2AgdW50aWwgYWZ0ZXIgYHdhaXRgXG4gKiBtaWxsaXNlY29uZHMgaGF2ZSBlbGFwc2VkIHNpbmNlIHRoZSBsYXN0IHRpbWUgdGhlIGRlYm91bmNlZCBmdW5jdGlvbiB3YXNcbiAqIGludm9rZWQuIFRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gY29tZXMgd2l0aCBhIGBjYW5jZWxgIG1ldGhvZCB0byBjYW5jZWxcbiAqIGRlbGF5ZWQgYGZ1bmNgIGludm9jYXRpb25zIGFuZCBhIGBmbHVzaGAgbWV0aG9kIHRvIGltbWVkaWF0ZWx5IGludm9rZSB0aGVtLlxuICogUHJvdmlkZSBgb3B0aW9uc2AgdG8gaW5kaWNhdGUgd2hldGhlciBgZnVuY2Agc2hvdWxkIGJlIGludm9rZWQgb24gdGhlXG4gKiBsZWFkaW5nIGFuZC9vciB0cmFpbGluZyBlZGdlIG9mIHRoZSBgd2FpdGAgdGltZW91dC4gVGhlIGBmdW5jYCBpcyBpbnZva2VkXG4gKiB3aXRoIHRoZSBsYXN0IGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uLiBTdWJzZXF1ZW50XG4gKiBjYWxscyB0byB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBsYXN0IGBmdW5jYFxuICogaW52b2NhdGlvbi5cbiAqXG4gKiAqKk5vdGU6KiogSWYgYGxlYWRpbmdgIGFuZCBgdHJhaWxpbmdgIG9wdGlvbnMgYXJlIGB0cnVlYCwgYGZ1bmNgIGlzXG4gKiBpbnZva2VkIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0IG9ubHkgaWYgdGhlIGRlYm91bmNlZCBmdW5jdGlvblxuICogaXMgaW52b2tlZCBtb3JlIHRoYW4gb25jZSBkdXJpbmcgdGhlIGB3YWl0YCB0aW1lb3V0LlxuICpcbiAqIElmIGB3YWl0YCBpcyBgMGAgYW5kIGBsZWFkaW5nYCBpcyBgZmFsc2VgLCBgZnVuY2AgaW52b2NhdGlvbiBpcyBkZWZlcnJlZFxuICogdW50aWwgdG8gdGhlIG5leHQgdGljaywgc2ltaWxhciB0byBgc2V0VGltZW91dGAgd2l0aCBhIHRpbWVvdXQgb2YgYDBgLlxuICpcbiAqIFNlZSBbRGF2aWQgQ29yYmFjaG8ncyBhcnRpY2xlXShodHRwczovL2Nzcy10cmlja3MuY29tL2RlYm91bmNpbmctdGhyb3R0bGluZy1leHBsYWluZWQtZXhhbXBsZXMvKVxuICogZm9yIGRldGFpbHMgb3ZlciB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBgXy5kZWJvdW5jZWAgYW5kIGBfLnRocm90dGxlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRlYm91bmNlLlxuICogQHBhcmFtIHtudW1iZXJ9IFt3YWl0PTBdIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGRlbGF5LlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBUaGUgb3B0aW9ucyBvYmplY3QuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmxlYWRpbmc9ZmFsc2VdXG4gKiAgU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgbGVhZGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heFdhaXRdXG4gKiAgVGhlIG1heGltdW0gdGltZSBgZnVuY2AgaXMgYWxsb3dlZCB0byBiZSBkZWxheWVkIGJlZm9yZSBpdCdzIGludm9rZWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnRyYWlsaW5nPXRydWVdXG4gKiAgU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGRlYm91bmNlZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogLy8gQXZvaWQgY29zdGx5IGNhbGN1bGF0aW9ucyB3aGlsZSB0aGUgd2luZG93IHNpemUgaXMgaW4gZmx1eC5cbiAqIGpRdWVyeSh3aW5kb3cpLm9uKCdyZXNpemUnLCBfLmRlYm91bmNlKGNhbGN1bGF0ZUxheW91dCwgMTUwKSk7XG4gKlxuICogLy8gSW52b2tlIGBzZW5kTWFpbGAgd2hlbiBjbGlja2VkLCBkZWJvdW5jaW5nIHN1YnNlcXVlbnQgY2FsbHMuXG4gKiBqUXVlcnkoZWxlbWVudCkub24oJ2NsaWNrJywgXy5kZWJvdW5jZShzZW5kTWFpbCwgMzAwLCB7XG4gKiAgICdsZWFkaW5nJzogdHJ1ZSxcbiAqICAgJ3RyYWlsaW5nJzogZmFsc2VcbiAqIH0pKTtcbiAqXG4gKiAvLyBFbnN1cmUgYGJhdGNoTG9nYCBpcyBpbnZva2VkIG9uY2UgYWZ0ZXIgMSBzZWNvbmQgb2YgZGVib3VuY2VkIGNhbGxzLlxuICogdmFyIGRlYm91bmNlZCA9IF8uZGVib3VuY2UoYmF0Y2hMb2csIDI1MCwgeyAnbWF4V2FpdCc6IDEwMDAgfSk7XG4gKiB2YXIgc291cmNlID0gbmV3IEV2ZW50U291cmNlKCcvc3RyZWFtJyk7XG4gKiBqUXVlcnkoc291cmNlKS5vbignbWVzc2FnZScsIGRlYm91bmNlZCk7XG4gKlxuICogLy8gQ2FuY2VsIHRoZSB0cmFpbGluZyBkZWJvdW5jZWQgaW52b2NhdGlvbi5cbiAqIGpRdWVyeSh3aW5kb3cpLm9uKCdwb3BzdGF0ZScsIGRlYm91bmNlZC5jYW5jZWwpO1xuICovXG5mdW5jdGlvbiBkZWJvdW5jZShmdW5jLCB3YWl0LCBvcHRpb25zKSB7XG4gIHZhciBsYXN0QXJncyxcbiAgICAgIGxhc3RUaGlzLFxuICAgICAgbWF4V2FpdCxcbiAgICAgIHJlc3VsdCxcbiAgICAgIHRpbWVySWQsXG4gICAgICBsYXN0Q2FsbFRpbWUsXG4gICAgICBsYXN0SW52b2tlVGltZSA9IDAsXG4gICAgICBsZWFkaW5nID0gZmFsc2UsXG4gICAgICBtYXhpbmcgPSBmYWxzZSxcbiAgICAgIHRyYWlsaW5nID0gdHJ1ZTtcblxuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICB3YWl0ID0gdG9OdW1iZXIod2FpdCkgfHwgMDtcbiAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgbGVhZGluZyA9ICEhb3B0aW9ucy5sZWFkaW5nO1xuICAgIG1heGluZyA9ICdtYXhXYWl0JyBpbiBvcHRpb25zO1xuICAgIG1heFdhaXQgPSBtYXhpbmcgPyBuYXRpdmVNYXgodG9OdW1iZXIob3B0aW9ucy5tYXhXYWl0KSB8fCAwLCB3YWl0KSA6IG1heFdhaXQ7XG4gICAgdHJhaWxpbmcgPSAndHJhaWxpbmcnIGluIG9wdGlvbnMgPyAhIW9wdGlvbnMudHJhaWxpbmcgOiB0cmFpbGluZztcbiAgfVxuXG4gIGZ1bmN0aW9uIGludm9rZUZ1bmModGltZSkge1xuICAgIHZhciBhcmdzID0gbGFzdEFyZ3MsXG4gICAgICAgIHRoaXNBcmcgPSBsYXN0VGhpcztcblxuICAgIGxhc3RBcmdzID0gbGFzdFRoaXMgPSB1bmRlZmluZWQ7XG4gICAgbGFzdEludm9rZVRpbWUgPSB0aW1lO1xuICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxlYWRpbmdFZGdlKHRpbWUpIHtcbiAgICAvLyBSZXNldCBhbnkgYG1heFdhaXRgIHRpbWVyLlxuICAgIGxhc3RJbnZva2VUaW1lID0gdGltZTtcbiAgICAvLyBTdGFydCB0aGUgdGltZXIgZm9yIHRoZSB0cmFpbGluZyBlZGdlLlxuICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgd2FpdCk7XG4gICAgLy8gSW52b2tlIHRoZSBsZWFkaW5nIGVkZ2UuXG4gICAgcmV0dXJuIGxlYWRpbmcgPyBpbnZva2VGdW5jKHRpbWUpIDogcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gcmVtYWluaW5nV2FpdCh0aW1lKSB7XG4gICAgdmFyIHRpbWVTaW5jZUxhc3RDYWxsID0gdGltZSAtIGxhc3RDYWxsVGltZSxcbiAgICAgICAgdGltZVNpbmNlTGFzdEludm9rZSA9IHRpbWUgLSBsYXN0SW52b2tlVGltZSxcbiAgICAgICAgcmVzdWx0ID0gd2FpdCAtIHRpbWVTaW5jZUxhc3RDYWxsO1xuXG4gICAgcmV0dXJuIG1heGluZyA/IG5hdGl2ZU1pbihyZXN1bHQsIG1heFdhaXQgLSB0aW1lU2luY2VMYXN0SW52b2tlKSA6IHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNob3VsZEludm9rZSh0aW1lKSB7XG4gICAgdmFyIHRpbWVTaW5jZUxhc3RDYWxsID0gdGltZSAtIGxhc3RDYWxsVGltZSxcbiAgICAgICAgdGltZVNpbmNlTGFzdEludm9rZSA9IHRpbWUgLSBsYXN0SW52b2tlVGltZTtcblxuICAgIC8vIEVpdGhlciB0aGlzIGlzIHRoZSBmaXJzdCBjYWxsLCBhY3Rpdml0eSBoYXMgc3RvcHBlZCBhbmQgd2UncmUgYXQgdGhlXG4gICAgLy8gdHJhaWxpbmcgZWRnZSwgdGhlIHN5c3RlbSB0aW1lIGhhcyBnb25lIGJhY2t3YXJkcyBhbmQgd2UncmUgdHJlYXRpbmdcbiAgICAvLyBpdCBhcyB0aGUgdHJhaWxpbmcgZWRnZSwgb3Igd2UndmUgaGl0IHRoZSBgbWF4V2FpdGAgbGltaXQuXG4gICAgcmV0dXJuIChsYXN0Q2FsbFRpbWUgPT09IHVuZGVmaW5lZCB8fCAodGltZVNpbmNlTGFzdENhbGwgPj0gd2FpdCkgfHxcbiAgICAgICh0aW1lU2luY2VMYXN0Q2FsbCA8IDApIHx8IChtYXhpbmcgJiYgdGltZVNpbmNlTGFzdEludm9rZSA+PSBtYXhXYWl0KSk7XG4gIH1cblxuICBmdW5jdGlvbiB0aW1lckV4cGlyZWQoKSB7XG4gICAgdmFyIHRpbWUgPSBub3coKTtcbiAgICBpZiAoc2hvdWxkSW52b2tlKHRpbWUpKSB7XG4gICAgICByZXR1cm4gdHJhaWxpbmdFZGdlKHRpbWUpO1xuICAgIH1cbiAgICAvLyBSZXN0YXJ0IHRoZSB0aW1lci5cbiAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHJlbWFpbmluZ1dhaXQodGltZSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJhaWxpbmdFZGdlKHRpbWUpIHtcbiAgICB0aW1lcklkID0gdW5kZWZpbmVkO1xuXG4gICAgLy8gT25seSBpbnZva2UgaWYgd2UgaGF2ZSBgbGFzdEFyZ3NgIHdoaWNoIG1lYW5zIGBmdW5jYCBoYXMgYmVlblxuICAgIC8vIGRlYm91bmNlZCBhdCBsZWFzdCBvbmNlLlxuICAgIGlmICh0cmFpbGluZyAmJiBsYXN0QXJncykge1xuICAgICAgcmV0dXJuIGludm9rZUZ1bmModGltZSk7XG4gICAgfVxuICAgIGxhc3RBcmdzID0gbGFzdFRoaXMgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICBpZiAodGltZXJJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXJJZCk7XG4gICAgfVxuICAgIGxhc3RJbnZva2VUaW1lID0gMDtcbiAgICBsYXN0QXJncyA9IGxhc3RDYWxsVGltZSA9IGxhc3RUaGlzID0gdGltZXJJZCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgIHJldHVybiB0aW1lcklkID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiB0cmFpbGluZ0VkZ2Uobm93KCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVib3VuY2VkKCkge1xuICAgIHZhciB0aW1lID0gbm93KCksXG4gICAgICAgIGlzSW52b2tpbmcgPSBzaG91bGRJbnZva2UodGltZSk7XG5cbiAgICBsYXN0QXJncyA9IGFyZ3VtZW50cztcbiAgICBsYXN0VGhpcyA9IHRoaXM7XG4gICAgbGFzdENhbGxUaW1lID0gdGltZTtcblxuICAgIGlmIChpc0ludm9raW5nKSB7XG4gICAgICBpZiAodGltZXJJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBsZWFkaW5nRWRnZShsYXN0Q2FsbFRpbWUpO1xuICAgICAgfVxuICAgICAgaWYgKG1heGluZykge1xuICAgICAgICAvLyBIYW5kbGUgaW52b2NhdGlvbnMgaW4gYSB0aWdodCBsb29wLlxuICAgICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgICAgICByZXR1cm4gaW52b2tlRnVuYyhsYXN0Q2FsbFRpbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGltZXJJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGRlYm91bmNlZC5jYW5jZWwgPSBjYW5jZWw7XG4gIGRlYm91bmNlZC5mbHVzaCA9IGZsdXNoO1xuICByZXR1cm4gZGVib3VuY2VkO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuICEhdmFsdWUgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS4gQSB2YWx1ZSBpcyBvYmplY3QtbGlrZSBpZiBpdCdzIG5vdCBgbnVsbGBcbiAqIGFuZCBoYXMgYSBgdHlwZW9mYCByZXN1bHQgb2YgXCJvYmplY3RcIi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZSh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCc7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzeW1ib2wsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N5bWJvbChTeW1ib2wuaXRlcmF0b3IpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTeW1ib2woJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3ltYm9sJyB8fFxuICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIG9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpID09IHN5bWJvbFRhZyk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIG51bWJlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIG51bWJlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b051bWJlcigzLjIpO1xuICogLy8gPT4gMy4yXG4gKlxuICogXy50b051bWJlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDVlLTMyNFxuICpcbiAqIF8udG9OdW1iZXIoSW5maW5pdHkpO1xuICogLy8gPT4gSW5maW5pdHlcbiAqXG4gKiBfLnRvTnVtYmVyKCczLjInKTtcbiAqIC8vID0+IDMuMlxuICovXG5mdW5jdGlvbiB0b051bWJlcih2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gTkFOO1xuICB9XG4gIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICB2YXIgb3RoZXIgPSB0eXBlb2YgdmFsdWUudmFsdWVPZiA9PSAnZnVuY3Rpb24nID8gdmFsdWUudmFsdWVPZigpIDogdmFsdWU7XG4gICAgdmFsdWUgPSBpc09iamVjdChvdGhlcikgPyAob3RoZXIgKyAnJykgOiBvdGhlcjtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAwID8gdmFsdWUgOiArdmFsdWU7XG4gIH1cbiAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKHJlVHJpbSwgJycpO1xuICB2YXIgaXNCaW5hcnkgPSByZUlzQmluYXJ5LnRlc3QodmFsdWUpO1xuICByZXR1cm4gKGlzQmluYXJ5IHx8IHJlSXNPY3RhbC50ZXN0KHZhbHVlKSlcbiAgICA/IGZyZWVQYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgaXNCaW5hcnkgPyAyIDogOClcbiAgICA6IChyZUlzQmFkSGV4LnRlc3QodmFsdWUpID8gTkFOIDogK3ZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBkZWJvdW5jZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash.debounce/index.js\n"); - -/***/ }), - -/***/ "./node_modules/next/dist/build/polyfills/object-assign.js": -/*!*****************************************************************!*\ - !*** ./node_modules/next/dist/build/polyfills/object-assign.js ***! - \*****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("var assign=Object.assign.bind(Object);module.exports=assign;module.exports.default=module.exports;\n//# sourceMappingURL=object-assign.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9idWlsZC9wb2x5ZmlsbHMvb2JqZWN0LWFzc2lnbi5qcz80MWViIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhLHNDQUFzQyxzQkFBc0I7QUFDekUiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3BvbHlmaWxscy9vYmplY3QtYXNzaWduLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7dmFyIGFzc2lnbj1PYmplY3QuYXNzaWduLmJpbmQoT2JqZWN0KTttb2R1bGUuZXhwb3J0cz1hc3NpZ247bW9kdWxlLmV4cG9ydHMuZGVmYXVsdD1tb2R1bGUuZXhwb3J0cztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9iamVjdC1hc3NpZ24uanMubWFwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/build/polyfills/object-assign.js\n"); - -/***/ }), - -/***/ "./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?page=%2F&absolutePagePath=%2FUsers%2Fjohn.fisher%2Fworkspace%2Fvandebron%2Ftech-blog%2Fpages%2Findex.js!./": -/*!******************************************************************************************************************************************************************************************!*\ - !*** ./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?page=%2F&absolutePagePath=%2FUsers%2Fjohn.fisher%2Fworkspace%2Fvandebron%2Ftech-blog%2Fpages%2Findex.js ***! - \******************************************************************************************************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/\",\n function () {\n return __webpack_require__(/*! ./pages/index.js */ \"./pages/index.js\");\n }\n ]);\n //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9idWlsZC93ZWJwYWNrL2xvYWRlcnMvbmV4dC1jbGllbnQtcGFnZXMtbG9hZGVyLmpzP2UxNzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQywwQ0FBaUU7QUFDeEY7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvd2VicGFjay9sb2FkZXJzL25leHQtY2xpZW50LXBhZ2VzLWxvYWRlci5qcz9wYWdlPSUyRiZhYnNvbHV0ZVBhZ2VQYXRoPSUyRlVzZXJzJTJGam9obi5maXNoZXIlMkZ3b3Jrc3BhY2UlMkZ2YW5kZWJyb24lMkZ0ZWNoLWJsb2clMkZwYWdlcyUyRmluZGV4LmpzIS4vLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXG4gICAgKHdpbmRvdy5fX05FWFRfUCA9IHdpbmRvdy5fX05FWFRfUCB8fCBbXSkucHVzaChbXG4gICAgICBcIi9cIixcbiAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmUoXCIvVXNlcnMvam9obi5maXNoZXIvd29ya3NwYWNlL3ZhbmRlYnJvbi90ZWNoLWJsb2cvcGFnZXMvaW5kZXguanNcIik7XG4gICAgICB9XG4gICAgXSk7XG4gICJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?page=%2F&absolutePagePath=%2FUsers%2Fjohn.fisher%2Fworkspace%2Fvandebron%2Ftech-blog%2Fpages%2Findex.js!./\n"); - -/***/ }), - -/***/ "./node_modules/next/dist/client/link.js": -/*!***********************************************!*\ - !*** ./node_modules/next/dist/client/link.js ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nvar _slicedToArray = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/slicedToArray */ \"./node_modules/next/node_modules/@babel/runtime/helpers/slicedToArray.js\");\n\nvar _s = $RefreshSig$();\n\nvar _interopRequireWildcard = __webpack_require__(/*! @babel/runtime/helpers/interopRequireWildcard */ \"./node_modules/next/node_modules/@babel/runtime/helpers/interopRequireWildcard.js\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _react = _interopRequireWildcard(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _router = __webpack_require__(/*! ../next-server/lib/router/router */ \"./node_modules/next/dist/next-server/lib/router/router.js\");\n\nvar _router2 = __webpack_require__(/*! ./router */ \"./node_modules/next/dist/client/router.js\");\n\nvar _useIntersection = __webpack_require__(/*! ./use-intersection */ \"./node_modules/next/dist/client/use-intersection.js\");\n\nvar prefetched = {};\n\nfunction prefetch(router, href, as, options) {\n if ( false || !router) return;\n if (!(0, _router.isLocalURL)(href)) return; // Prefetch the JSON page if asked (only in the client)\n // We need to handle a prefetch error here since we may be\n // loading with priority which can reject but we don't\n // want to force navigation since this is only a prefetch\n\n router.prefetch(href, as, options)[\"catch\"](function (err) {\n if (true) {\n // rethrow to show invalid URL errors\n throw err;\n }\n });\n var curLocale = options && typeof options.locale !== 'undefined' ? options.locale : router && router.locale; // Join on an invalid URI character\n\n prefetched[href + '%' + as + (curLocale ? '%' + curLocale : '')] = true;\n}\n\nfunction isModifiedEvent(event) {\n var target = event.currentTarget.target;\n return target && target !== '_self' || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey || // triggers resource download\n event.nativeEvent && event.nativeEvent.which === 2;\n}\n\nfunction linkClicked(e, router, href, as, replace, shallow, scroll, locale) {\n var nodeName = e.currentTarget.nodeName;\n\n if (nodeName === 'A' && (isModifiedEvent(e) || !(0, _router.isLocalURL)(href))) {\n // ignore click for browser’s default behavior\n return;\n }\n\n e.preventDefault(); // avoid scroll for urls with anchor refs\n\n if (scroll == null) {\n scroll = as.indexOf('#') < 0;\n } // replace state instead of push if prop is present\n\n\n router[replace ? 'replace' : 'push'](href, as, {\n shallow: shallow,\n locale: locale,\n scroll: scroll\n });\n}\n\nfunction Link(props) {\n _s();\n\n if (true) {\n var createPropError = function createPropError(args) {\n return new Error(\"Failed prop type: The prop `\".concat(args.key, \"` expects a \").concat(args.expected, \" in ``, but got `\").concat(args.actual, \"` instead.\") + (true ? \"\\nOpen your browser's console to view the Component stack trace.\" : undefined));\n }; // TypeScript trick for type-guarding:\n\n\n var requiredPropsGuard = {\n href: true\n };\n var requiredProps = Object.keys(requiredPropsGuard);\n requiredProps.forEach(function (key) {\n if (key === 'href') {\n if (props[key] == null || typeof props[key] !== 'string' && typeof props[key] !== 'object') {\n throw createPropError({\n key: key,\n expected: '`string` or `object`',\n actual: props[key] === null ? 'null' : typeof props[key]\n });\n }\n } else {\n // TypeScript trick for type-guarding:\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n var _ = key;\n }\n }); // TypeScript trick for type-guarding:\n\n var optionalPropsGuard = {\n as: true,\n replace: true,\n scroll: true,\n shallow: true,\n passHref: true,\n prefetch: true,\n locale: true\n };\n var optionalProps = Object.keys(optionalPropsGuard);\n optionalProps.forEach(function (key) {\n var valType = typeof props[key];\n\n if (key === 'as') {\n if (props[key] && valType !== 'string' && valType !== 'object') {\n throw createPropError({\n key: key,\n expected: '`string` or `object`',\n actual: valType\n });\n }\n } else if (key === 'locale') {\n if (props[key] && valType !== 'string') {\n throw createPropError({\n key: key,\n expected: '`string`',\n actual: valType\n });\n }\n } else if (key === 'replace' || key === 'scroll' || key === 'shallow' || key === 'passHref' || key === 'prefetch') {\n if (props[key] != null && valType !== 'boolean') {\n throw createPropError({\n key: key,\n expected: '`boolean`',\n actual: valType\n });\n }\n } else {\n // TypeScript trick for type-guarding:\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n var _ = key;\n }\n }); // This hook is in a conditional but that is ok because `process.env.NODE_ENV` never changes\n // eslint-disable-next-line react-hooks/rules-of-hooks\n\n var hasWarned = _react[\"default\"].useRef(false);\n\n if (props.prefetch && !hasWarned.current) {\n hasWarned.current = true;\n console.warn('Next.js auto-prefetches automatically based on viewport. The prefetch attribute is no longer needed. More: https://nextjs.org/docs/messages/prefetch-true-deprecated');\n }\n }\n\n var p = props.prefetch !== false;\n var router = (0, _router2.useRouter)();\n var pathname = router && router.asPath || '/';\n\n var _react$default$useMem = _react[\"default\"].useMemo(function () {\n var _ref = (0, _router.resolveHref)(pathname, props.href, true),\n _ref2 = _slicedToArray(_ref, 2),\n resolvedHref = _ref2[0],\n resolvedAs = _ref2[1];\n\n return {\n href: resolvedHref,\n as: props.as ? (0, _router.resolveHref)(pathname, props.as) : resolvedAs || resolvedHref\n };\n }, [pathname, props.href, props.as]),\n href = _react$default$useMem.href,\n as = _react$default$useMem.as;\n\n var children = props.children,\n replace = props.replace,\n shallow = props.shallow,\n scroll = props.scroll,\n locale = props.locale; // Deprecated. Warning shown by propType check. If the children provided is a string (example) we wrap it in an tag\n\n if (typeof children === 'string') {\n children = /*#__PURE__*/_react[\"default\"].createElement(\"a\", null, children);\n } // This will return the first child, if multiple are provided it will throw an error\n\n\n var child = _react.Children.only(children);\n\n var childRef = child && typeof child === 'object' && child.ref;\n\n var _ref3 = (0, _useIntersection.useIntersection)({\n rootMargin: '200px'\n }),\n _ref4 = _slicedToArray(_ref3, 2),\n setIntersectionRef = _ref4[0],\n isVisible = _ref4[1];\n\n var setRef = _react[\"default\"].useCallback(function (el) {\n setIntersectionRef(el);\n\n if (childRef) {\n if (typeof childRef === 'function') childRef(el);else if (typeof childRef === 'object') {\n childRef.current = el;\n }\n }\n }, [childRef, setIntersectionRef]);\n\n (0, _react.useEffect)(function () {\n var shouldPrefetch = isVisible && p && (0, _router.isLocalURL)(href);\n var curLocale = typeof locale !== 'undefined' ? locale : router && router.locale;\n var isPrefetched = prefetched[href + '%' + as + (curLocale ? '%' + curLocale : '')];\n\n if (shouldPrefetch && !isPrefetched) {\n prefetch(router, href, as, {\n locale: curLocale\n });\n }\n }, [as, href, isVisible, locale, p, router]);\n var childProps = {\n ref: setRef,\n onClick: function onClick(e) {\n if (child.props && typeof child.props.onClick === 'function') {\n child.props.onClick(e);\n }\n\n if (!e.defaultPrevented) {\n linkClicked(e, router, href, as, replace, shallow, scroll, locale);\n }\n }\n };\n\n childProps.onMouseEnter = function (e) {\n if (!(0, _router.isLocalURL)(href)) return;\n\n if (child.props && typeof child.props.onMouseEnter === 'function') {\n child.props.onMouseEnter(e);\n }\n\n prefetch(router, href, as, {\n priority: true\n });\n }; // If child is an tag and doesn't have a href attribute, or if the 'passHref' property is\n // defined, we specify the current 'href', so that repetition is not needed by the user\n\n\n if (props.passHref || child.type === 'a' && !('href' in child.props)) {\n var curLocale = typeof locale !== 'undefined' ? locale : router && router.locale; // we only render domain locales if we are currently on a domain locale\n // so that locale links are still visitable in development/preview envs\n\n var localeDomain = router && router.isLocaleDomain && (0, _router.getDomainLocale)(as, curLocale, router && router.locales, router && router.domainLocales);\n childProps.href = localeDomain || (0, _router.addBasePath)((0, _router.addLocale)(as, curLocale, router && router.defaultLocale));\n }\n\n return /*#__PURE__*/_react[\"default\"].cloneElement(child, childProps);\n}\n\n_s(Link, \"7cX92ILFgstKFyzTMH+g73G4t5k=\");\n\n_c = Link;\nvar _default = Link;\nexports[\"default\"] = _default;\n\nvar _c;\n\n$RefreshReg$(_c, \"Link\");\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../compiled/webpack/module.js */ \"./node_modules/next/dist/compiled/webpack/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL2NsaWVudC9saW5rLnRzeD81ZTRiIl0sIm5hbWVzIjpbInByZWZldGNoZWQiLCJyb3V0ZXIiLCJlcnIiLCJjdXJMb2NhbGUiLCJvcHRpb25zIiwiaHJlZiIsImV2ZW50IiwidGFyZ2V0IiwiZSIsIm5vZGVOYW1lIiwiaXNNb2RpZmllZEV2ZW50Iiwic2Nyb2xsIiwiYXMiLCJyZXBsYWNlIiwic2hhbGxvdyIsImxvY2FsZSIsImFyZ3MiLCJrZXkiLCJleHBlY3RlZCIsInJlcXVpcmVkUHJvcHNHdWFyZCIsInJlcXVpcmVkUHJvcHMiLCJPYmplY3QiLCJwcm9wcyIsImNyZWF0ZVByb3BFcnJvciIsImFjdHVhbCIsIl8iLCJvcHRpb25hbFByb3BzR3VhcmQiLCJwYXNzSHJlZiIsInByZWZldGNoIiwib3B0aW9uYWxQcm9wcyIsInZhbFR5cGUiLCJoYXNXYXJuZWQiLCJSZWFjdCIsImNvbnNvbGUiLCJwIiwicGF0aG5hbWUiLCJyZXNvbHZlZEFzIiwiY2hpbGRyZW4iLCJjaGlsZCIsIkNoaWxkcmVuIiwiY2hpbGRSZWYiLCJyb290TWFyZ2luIiwic2V0UmVmIiwiZWwiLCJzZXRJbnRlcnNlY3Rpb25SZWYiLCJzaG91bGRQcmVmZXRjaCIsImlzVmlzaWJsZSIsImlzUHJlZmV0Y2hlZCIsImNoaWxkUHJvcHMiLCJyZWYiLCJvbkNsaWNrIiwibGlua0NsaWNrZWQiLCJwcmlvcml0eSIsImxvY2FsZURvbWFpbiIsIkxpbmsiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBRUE7O0FBU0E7O0FBQ0E7O0FBdUJBLElBQU1BLFVBQTJDLEdBQWpEOztBQUVBLDZDQUtRO0FBQ04sTUFBSSxVQUFpQyxDQUFyQyxRQUE4QztBQUM5QyxNQUFJLENBQUMsd0JBQUwsSUFBSyxDQUFMLEVBQXVCLE9BRmpCLENBR047QUFDQTtBQUNBO0FBQ0E7O0FBQ0FDLFFBQU0sQ0FBTkEscUNBQTBDQyxhQUFELEVBQVM7QUFDaEQsY0FBMkM7QUFD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LENBQUM5QixDQUFDLENBQU4sa0JBQXlCO0FBQ3ZCMkMsbUJBQVcsZ0RBQVhBLE1BQVcsQ0FBWEE7QUFFSDtBQWRIO0FBS0ksR0FMSjs7QUFpQkFILFlBQVUsQ0FBVkEsZUFBMkJ4QyxXQUFELEVBQXlCO0FBQ2pELFFBQUksQ0FBQyx3QkFBTCxJQUFLLENBQUwsRUFBdUI7O0FBQ3ZCLFFBQUk4QixLQUFLLENBQUxBLFNBQWUsT0FBT0EsS0FBSyxDQUFMQSxNQUFQLGlCQUFuQixZQUFtRTtBQUNqRUEsV0FBSyxDQUFMQTtBQUVGVjs7QUFBQUEsWUFBUSxtQkFBbUI7QUFBRXdCLGNBQVEsRUFBckN4QjtBQUEyQixLQUFuQixDQUFSQTtBQUxGb0IsSUEvS3VELENBdUx2RDtBQUNBOzs7QUFDQSxNQUFJMUIsS0FBSyxDQUFMQSxZQUFtQmdCLEtBQUssQ0FBTEEsZ0JBQXNCLEVBQUUsVUFBVUEsS0FBSyxDQUE5RCxLQUE2QyxDQUE3QyxFQUF3RTtBQUN0RSxRQUFNbkMsU0FBUyxHQUNiLHlDQUF5Q0YsTUFBTSxJQUFJQSxNQUFNLENBRDNELE9BRHNFLENBSXRFO0FBQ0E7O0FBQ0EsUUFBTW9ELFlBQVksR0FDaEJwRCxNQUFNLElBQ05BLE1BQU0sQ0FETkEsa0JBRUEsNENBR0VBLE1BQU0sSUFBSUEsTUFBTSxDQUhsQixTQUlFQSxNQUFNLElBQUlBLE1BQU0sQ0FQcEIsYUFHRSxDQUhGO0FBVUErQyxjQUFVLENBQVZBLE9BQ0VLLFlBQVksSUFDWix5QkFBWSxzQ0FBeUJwRCxNQUFNLElBQUlBLE1BQU0sQ0FGdkQrQyxhQUVjLENBQVosQ0FGRkE7QUFLRjs7QUFBQSxzQkFBT2hCLHNDQUFQLFVBQU9BLENBQVA7OztHQTlNRixJOztLQUFBLEk7ZUFpTmVzQixJIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvbGluay5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBDaGlsZHJlbiwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBVcmxPYmplY3QgfSBmcm9tICd1cmwnXG5pbXBvcnQge1xuICBhZGRCYXNlUGF0aCxcbiAgYWRkTG9jYWxlLFxuICBnZXREb21haW5Mb2NhbGUsXG4gIGlzTG9jYWxVUkwsXG4gIE5leHRSb3V0ZXIsXG4gIFByZWZldGNoT3B0aW9ucyxcbiAgcmVzb2x2ZUhyZWYsXG59IGZyb20gJy4uL25leHQtc2VydmVyL2xpYi9yb3V0ZXIvcm91dGVyJ1xuaW1wb3J0IHsgdXNlUm91dGVyIH0gZnJvbSAnLi9yb3V0ZXInXG5pbXBvcnQgeyB1c2VJbnRlcnNlY3Rpb24gfSBmcm9tICcuL3VzZS1pbnRlcnNlY3Rpb24nXG5cbnR5cGUgVXJsID0gc3RyaW5nIHwgVXJsT2JqZWN0XG50eXBlIFJlcXVpcmVkS2V5czxUPiA9IHtcbiAgW0sgaW4ga2V5b2YgVF0tPzoge30gZXh0ZW5kcyBQaWNrPFQsIEs+ID8gbmV2ZXIgOiBLXG59W2tleW9mIFRdXG50eXBlIE9wdGlvbmFsS2V5czxUPiA9IHtcbiAgW0sgaW4ga2V5b2YgVF0tPzoge30gZXh0ZW5kcyBQaWNrPFQsIEs+ID8gSyA6IG5ldmVyXG59W2tleW9mIFRdXG5cbmV4cG9ydCB0eXBlIExpbmtQcm9wcyA9IHtcbiAgaHJlZjogVXJsXG4gIGFzPzogVXJsXG4gIHJlcGxhY2U/OiBib29sZWFuXG4gIHNjcm9sbD86IGJvb2xlYW5cbiAgc2hhbGxvdz86IGJvb2xlYW5cbiAgcGFzc0hyZWY/OiBib29sZWFuXG4gIHByZWZldGNoPzogYm9vbGVhblxuICBsb2NhbGU/OiBzdHJpbmcgfCBmYWxzZVxufVxudHlwZSBMaW5rUHJvcHNSZXF1aXJlZCA9IFJlcXVpcmVkS2V5czxMaW5rUHJvcHM+XG50eXBlIExpbmtQcm9wc09wdGlvbmFsID0gT3B0aW9uYWxLZXlzPExpbmtQcm9wcz5cblxuY29uc3QgcHJlZmV0Y2hlZDogeyBbY2FjaGVLZXk6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9XG5cbmZ1bmN0aW9uIHByZWZldGNoKFxuICByb3V0ZXI6IE5leHRSb3V0ZXIsXG4gIGhyZWY6IHN0cmluZyxcbiAgYXM6IHN0cmluZyxcbiAgb3B0aW9ucz86IFByZWZldGNoT3B0aW9uc1xuKTogdm9pZCB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhcm91dGVyKSByZXR1cm5cbiAgaWYgKCFpc0xvY2FsVVJMKGhyZWYpKSByZXR1cm5cbiAgLy8gUHJlZmV0Y2ggdGhlIEpTT04gcGFnZSBpZiBhc2tlZCAob25seSBpbiB0aGUgY2xpZW50KVxuICAvLyBXZSBuZWVkIHRvIGhhbmRsZSBhIHByZWZldGNoIGVycm9yIGhlcmUgc2luY2Ugd2UgbWF5IGJlXG4gIC8vIGxvYWRpbmcgd2l0aCBwcmlvcml0eSB3aGljaCBjYW4gcmVqZWN0IGJ1dCB3ZSBkb24ndFxuICAvLyB3YW50IHRvIGZvcmNlIG5hdmlnYXRpb24gc2luY2UgdGhpcyBpcyBvbmx5IGEgcHJlZmV0Y2hcbiAgcm91dGVyLnByZWZldGNoKGhyZWYsIGFzLCBvcHRpb25zKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIC8vIHJldGhyb3cgdG8gc2hvdyBpbnZhbGlkIFVSTCBlcnJvcnNcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgfSlcbiAgY29uc3QgY3VyTG9jYWxlID1cbiAgICBvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLmxvY2FsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgID8gb3B0aW9ucy5sb2NhbGVcbiAgICAgIDogcm91dGVyICYmIHJvdXRlci5sb2NhbGVcblxuICAvLyBKb2luIG9uIGFuIGludmFsaWQgVVJJIGNoYXJhY3RlclxuICBwcmVmZXRjaGVkW2hyZWYgKyAnJScgKyBhcyArIChjdXJMb2NhbGUgPyAnJScgKyBjdXJMb2NhbGUgOiAnJyldID0gdHJ1ZVxufVxuXG5mdW5jdGlvbiBpc01vZGlmaWVkRXZlbnQoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQpOiBib29sZWFuIHtcbiAgY29uc3QgeyB0YXJnZXQgfSA9IGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEFuY2hvckVsZW1lbnRcbiAgcmV0dXJuIChcbiAgICAodGFyZ2V0ICYmIHRhcmdldCAhPT0gJ19zZWxmJykgfHxcbiAgICBldmVudC5tZXRhS2V5IHx8XG4gICAgZXZlbnQuY3RybEtleSB8fFxuICAgIGV2ZW50LnNoaWZ0S2V5IHx8XG4gICAgZXZlbnQuYWx0S2V5IHx8IC8vIHRyaWdnZXJzIHJlc291cmNlIGRvd25sb2FkXG4gICAgKGV2ZW50Lm5hdGl2ZUV2ZW50ICYmIGV2ZW50Lm5hdGl2ZUV2ZW50LndoaWNoID09PSAyKVxuICApXG59XG5cbmZ1bmN0aW9uIGxpbmtDbGlja2VkKFxuICBlOiBSZWFjdC5Nb3VzZUV2ZW50LFxuICByb3V0ZXI6IE5leHRSb3V0ZXIsXG4gIGhyZWY6IHN0cmluZyxcbiAgYXM6IHN0cmluZyxcbiAgcmVwbGFjZT86IGJvb2xlYW4sXG4gIHNoYWxsb3c/OiBib29sZWFuLFxuICBzY3JvbGw/OiBib29sZWFuLFxuICBsb2NhbGU/OiBzdHJpbmcgfCBmYWxzZVxuKTogdm9pZCB7XG4gIGNvbnN0IHsgbm9kZU5hbWUgfSA9IGUuY3VycmVudFRhcmdldFxuXG4gIGlmIChub2RlTmFtZSA9PT0gJ0EnICYmIChpc01vZGlmaWVkRXZlbnQoZSkgfHwgIWlzTG9jYWxVUkwoaHJlZikpKSB7XG4gICAgLy8gaWdub3JlIGNsaWNrIGZvciBicm93c2Vy4oCZcyBkZWZhdWx0IGJlaGF2aW9yXG4gICAgcmV0dXJuXG4gIH1cblxuICBlLnByZXZlbnREZWZhdWx0KClcblxuICAvLyAgYXZvaWQgc2Nyb2xsIGZvciB1cmxzIHdpdGggYW5jaG9yIHJlZnNcbiAgaWYgKHNjcm9sbCA9PSBudWxsKSB7XG4gICAgc2Nyb2xsID0gYXMuaW5kZXhPZignIycpIDwgMFxuICB9XG5cbiAgLy8gcmVwbGFjZSBzdGF0ZSBpbnN0ZWFkIG9mIHB1c2ggaWYgcHJvcCBpcyBwcmVzZW50XG4gIHJvdXRlcltyZXBsYWNlID8gJ3JlcGxhY2UnIDogJ3B1c2gnXShocmVmLCBhcywge1xuICAgIHNoYWxsb3csXG4gICAgbG9jYWxlLFxuICAgIHNjcm9sbCxcbiAgfSlcbn1cblxuZnVuY3Rpb24gTGluayhwcm9wczogUmVhY3QuUHJvcHNXaXRoQ2hpbGRyZW48TGlua1Byb3BzPikge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVByb3BFcnJvcihhcmdzOiB7XG4gICAgICBrZXk6IHN0cmluZ1xuICAgICAgZXhwZWN0ZWQ6IHN0cmluZ1xuICAgICAgYWN0dWFsOiBzdHJpbmdcbiAgICB9KSB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKFxuICAgICAgICBgRmFpbGVkIHByb3AgdHlwZTogVGhlIHByb3AgXFxgJHthcmdzLmtleX1cXGAgZXhwZWN0cyBhICR7YXJncy5leHBlY3RlZH0gaW4gXFxgPExpbms+XFxgLCBidXQgZ290IFxcYCR7YXJncy5hY3R1YWx9XFxgIGluc3RlYWQuYCArXG4gICAgICAgICAgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICA/IFwiXFxuT3BlbiB5b3VyIGJyb3dzZXIncyBjb25zb2xlIHRvIHZpZXcgdGhlIENvbXBvbmVudCBzdGFjayB0cmFjZS5cIlxuICAgICAgICAgICAgOiAnJylcbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyBUeXBlU2NyaXB0IHRyaWNrIGZvciB0eXBlLWd1YXJkaW5nOlxuICAgIGNvbnN0IHJlcXVpcmVkUHJvcHNHdWFyZDogUmVjb3JkPExpbmtQcm9wc1JlcXVpcmVkLCB0cnVlPiA9IHtcbiAgICAgIGhyZWY6IHRydWUsXG4gICAgfSBhcyBjb25zdFxuICAgIGNvbnN0IHJlcXVpcmVkUHJvcHM6IExpbmtQcm9wc1JlcXVpcmVkW10gPSBPYmplY3Qua2V5cyhcbiAgICAgIHJlcXVpcmVkUHJvcHNHdWFyZFxuICAgICkgYXMgTGlua1Byb3BzUmVxdWlyZWRbXVxuICAgIHJlcXVpcmVkUHJvcHMuZm9yRWFjaCgoa2V5OiBMaW5rUHJvcHNSZXF1aXJlZCkgPT4ge1xuICAgICAgaWYgKGtleSA9PT0gJ2hyZWYnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBwcm9wc1trZXldID09IG51bGwgfHxcbiAgICAgICAgICAodHlwZW9mIHByb3BzW2tleV0gIT09ICdzdHJpbmcnICYmIHR5cGVvZiBwcm9wc1trZXldICE9PSAnb2JqZWN0JylcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhyb3cgY3JlYXRlUHJvcEVycm9yKHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIGV4cGVjdGVkOiAnYHN0cmluZ2Agb3IgYG9iamVjdGAnLFxuICAgICAgICAgICAgYWN0dWFsOiBwcm9wc1trZXldID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHByb3BzW2tleV0sXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVHlwZVNjcmlwdCB0cmljayBmb3IgdHlwZS1ndWFyZGluZzpcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICBjb25zdCBfOiBuZXZlciA9IGtleVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyBUeXBlU2NyaXB0IHRyaWNrIGZvciB0eXBlLWd1YXJkaW5nOlxuICAgIGNvbnN0IG9wdGlvbmFsUHJvcHNHdWFyZDogUmVjb3JkPExpbmtQcm9wc09wdGlvbmFsLCB0cnVlPiA9IHtcbiAgICAgIGFzOiB0cnVlLFxuICAgICAgcmVwbGFjZTogdHJ1ZSxcbiAgICAgIHNjcm9sbDogdHJ1ZSxcbiAgICAgIHNoYWxsb3c6IHRydWUsXG4gICAgICBwYXNzSHJlZjogdHJ1ZSxcbiAgICAgIHByZWZldGNoOiB0cnVlLFxuICAgICAgbG9jYWxlOiB0cnVlLFxuICAgIH0gYXMgY29uc3RcbiAgICBjb25zdCBvcHRpb25hbFByb3BzOiBMaW5rUHJvcHNPcHRpb25hbFtdID0gT2JqZWN0LmtleXMoXG4gICAgICBvcHRpb25hbFByb3BzR3VhcmRcbiAgICApIGFzIExpbmtQcm9wc09wdGlvbmFsW11cbiAgICBvcHRpb25hbFByb3BzLmZvckVhY2goKGtleTogTGlua1Byb3BzT3B0aW9uYWwpID0+IHtcbiAgICAgIGNvbnN0IHZhbFR5cGUgPSB0eXBlb2YgcHJvcHNba2V5XVxuXG4gICAgICBpZiAoa2V5ID09PSAnYXMnKSB7XG4gICAgICAgIGlmIChwcm9wc1trZXldICYmIHZhbFR5cGUgIT09ICdzdHJpbmcnICYmIHZhbFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgdGhyb3cgY3JlYXRlUHJvcEVycm9yKHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIGV4cGVjdGVkOiAnYHN0cmluZ2Agb3IgYG9iamVjdGAnLFxuICAgICAgICAgICAgYWN0dWFsOiB2YWxUeXBlLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnbG9jYWxlJykge1xuICAgICAgICBpZiAocHJvcHNba2V5XSAmJiB2YWxUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IGNyZWF0ZVByb3BFcnJvcih7XG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICBleHBlY3RlZDogJ2BzdHJpbmdgJyxcbiAgICAgICAgICAgIGFjdHVhbDogdmFsVHlwZSxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBrZXkgPT09ICdyZXBsYWNlJyB8fFxuICAgICAgICBrZXkgPT09ICdzY3JvbGwnIHx8XG4gICAgICAgIGtleSA9PT0gJ3NoYWxsb3cnIHx8XG4gICAgICAgIGtleSA9PT0gJ3Bhc3NIcmVmJyB8fFxuICAgICAgICBrZXkgPT09ICdwcmVmZXRjaCdcbiAgICAgICkge1xuICAgICAgICBpZiAocHJvcHNba2V5XSAhPSBudWxsICYmIHZhbFR5cGUgIT09ICdib29sZWFuJykge1xuICAgICAgICAgIHRocm93IGNyZWF0ZVByb3BFcnJvcih7XG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICBleHBlY3RlZDogJ2Bib29sZWFuYCcsXG4gICAgICAgICAgICBhY3R1YWw6IHZhbFR5cGUsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVHlwZVNjcmlwdCB0cmljayBmb3IgdHlwZS1ndWFyZGluZzpcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICBjb25zdCBfOiBuZXZlciA9IGtleVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyBUaGlzIGhvb2sgaXMgaW4gYSBjb25kaXRpb25hbCBidXQgdGhhdCBpcyBvayBiZWNhdXNlIGBwcm9jZXNzLmVudi5OT0RFX0VOVmAgbmV2ZXIgY2hhbmdlc1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgIGNvbnN0IGhhc1dhcm5lZCA9IFJlYWN0LnVzZVJlZihmYWxzZSlcbiAgICBpZiAocHJvcHMucHJlZmV0Y2ggJiYgIWhhc1dhcm5lZC5jdXJyZW50KSB7XG4gICAgICBoYXNXYXJuZWQuY3VycmVudCA9IHRydWVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ05leHQuanMgYXV0by1wcmVmZXRjaGVzIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gdmlld3BvcnQuIFRoZSBwcmVmZXRjaCBhdHRyaWJ1dGUgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gTW9yZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvcHJlZmV0Y2gtdHJ1ZS1kZXByZWNhdGVkJ1xuICAgICAgKVxuICAgIH1cbiAgfVxuICBjb25zdCBwID0gcHJvcHMucHJlZmV0Y2ggIT09IGZhbHNlXG5cbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKClcbiAgY29uc3QgcGF0aG5hbWUgPSAocm91dGVyICYmIHJvdXRlci5hc1BhdGgpIHx8ICcvJ1xuXG4gIGNvbnN0IHsgaHJlZiwgYXMgfSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IFtyZXNvbHZlZEhyZWYsIHJlc29sdmVkQXNdID0gcmVzb2x2ZUhyZWYocGF0aG5hbWUsIHByb3BzLmhyZWYsIHRydWUpXG4gICAgcmV0dXJuIHtcbiAgICAgIGhyZWY6IHJlc29sdmVkSHJlZixcbiAgICAgIGFzOiBwcm9wcy5hc1xuICAgICAgICA/IHJlc29sdmVIcmVmKHBhdGhuYW1lLCBwcm9wcy5hcylcbiAgICAgICAgOiByZXNvbHZlZEFzIHx8IHJlc29sdmVkSHJlZixcbiAgICB9XG4gIH0sIFtwYXRobmFtZSwgcHJvcHMuaHJlZiwgcHJvcHMuYXNdKVxuXG4gIGxldCB7IGNoaWxkcmVuLCByZXBsYWNlLCBzaGFsbG93LCBzY3JvbGwsIGxvY2FsZSB9ID0gcHJvcHNcblxuICAvLyBEZXByZWNhdGVkLiBXYXJuaW5nIHNob3duIGJ5IHByb3BUeXBlIGNoZWNrLiBJZiB0aGUgY2hpbGRyZW4gcHJvdmlkZWQgaXMgYSBzdHJpbmcgKDxMaW5rPmV4YW1wbGU8L0xpbms+KSB3ZSB3cmFwIGl0IGluIGFuIDxhPiB0YWdcbiAgaWYgKHR5cGVvZiBjaGlsZHJlbiA9PT0gJ3N0cmluZycpIHtcbiAgICBjaGlsZHJlbiA9IDxhPntjaGlsZHJlbn08L2E+XG4gIH1cblxuICAvLyBUaGlzIHdpbGwgcmV0dXJuIHRoZSBmaXJzdCBjaGlsZCwgaWYgbXVsdGlwbGUgYXJlIHByb3ZpZGVkIGl0IHdpbGwgdGhyb3cgYW4gZXJyb3JcbiAgY29uc3QgY2hpbGQ6IGFueSA9IENoaWxkcmVuLm9ubHkoY2hpbGRyZW4pXG4gIGNvbnN0IGNoaWxkUmVmOiBhbnkgPSBjaGlsZCAmJiB0eXBlb2YgY2hpbGQgPT09ICdvYmplY3QnICYmIGNoaWxkLnJlZlxuXG4gIGNvbnN0IFtzZXRJbnRlcnNlY3Rpb25SZWYsIGlzVmlzaWJsZV0gPSB1c2VJbnRlcnNlY3Rpb24oe1xuICAgIHJvb3RNYXJnaW46ICcyMDBweCcsXG4gIH0pXG4gIGNvbnN0IHNldFJlZiA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChlbDogRWxlbWVudCkgPT4ge1xuICAgICAgc2V0SW50ZXJzZWN0aW9uUmVmKGVsKVxuICAgICAgaWYgKGNoaWxkUmVmKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2hpbGRSZWYgPT09ICdmdW5jdGlvbicpIGNoaWxkUmVmKGVsKVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgY2hpbGRSZWYgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgY2hpbGRSZWYuY3VycmVudCA9IGVsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtjaGlsZFJlZiwgc2V0SW50ZXJzZWN0aW9uUmVmXVxuICApXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc2hvdWxkUHJlZmV0Y2ggPSBpc1Zpc2libGUgJiYgcCAmJiBpc0xvY2FsVVJMKGhyZWYpXG4gICAgY29uc3QgY3VyTG9jYWxlID1cbiAgICAgIHR5cGVvZiBsb2NhbGUgIT09ICd1bmRlZmluZWQnID8gbG9jYWxlIDogcm91dGVyICYmIHJvdXRlci5sb2NhbGVcbiAgICBjb25zdCBpc1ByZWZldGNoZWQgPVxuICAgICAgcHJlZmV0Y2hlZFtocmVmICsgJyUnICsgYXMgKyAoY3VyTG9jYWxlID8gJyUnICsgY3VyTG9jYWxlIDogJycpXVxuICAgIGlmIChzaG91bGRQcmVmZXRjaCAmJiAhaXNQcmVmZXRjaGVkKSB7XG4gICAgICBwcmVmZXRjaChyb3V0ZXIsIGhyZWYsIGFzLCB7XG4gICAgICAgIGxvY2FsZTogY3VyTG9jYWxlLFxuICAgICAgfSlcbiAgICB9XG4gIH0sIFthcywgaHJlZiwgaXNWaXNpYmxlLCBsb2NhbGUsIHAsIHJvdXRlcl0pXG5cbiAgY29uc3QgY2hpbGRQcm9wczoge1xuICAgIG9uTW91c2VFbnRlcj86IFJlYWN0Lk1vdXNlRXZlbnRIYW5kbGVyXG4gICAgb25DbGljazogUmVhY3QuTW91c2VFdmVudEhhbmRsZXJcbiAgICBocmVmPzogc3RyaW5nXG4gICAgcmVmPzogYW55XG4gIH0gPSB7XG4gICAgcmVmOiBzZXRSZWYsXG4gICAgb25DbGljazogKGU6IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGlmIChjaGlsZC5wcm9wcyAmJiB0eXBlb2YgY2hpbGQucHJvcHMub25DbGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjaGlsZC5wcm9wcy5vbkNsaWNrKGUpXG4gICAgICB9XG4gICAgICBpZiAoIWUuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICBsaW5rQ2xpY2tlZChlLCByb3V0ZXIsIGhyZWYsIGFzLCByZXBsYWNlLCBzaGFsbG93LCBzY3JvbGwsIGxvY2FsZSlcbiAgICAgIH1cbiAgICB9LFxuICB9XG5cbiAgY2hpbGRQcm9wcy5vbk1vdXNlRW50ZXIgPSAoZTogUmVhY3QuTW91c2VFdmVudCkgPT4ge1xuICAgIGlmICghaXNMb2NhbFVSTChocmVmKSkgcmV0dXJuXG4gICAgaWYgKGNoaWxkLnByb3BzICYmIHR5cGVvZiBjaGlsZC5wcm9wcy5vbk1vdXNlRW50ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNoaWxkLnByb3BzLm9uTW91c2VFbnRlcihlKVxuICAgIH1cbiAgICBwcmVmZXRjaChyb3V0ZXIsIGhyZWYsIGFzLCB7IHByaW9yaXR5OiB0cnVlIH0pXG4gIH1cblxuICAvLyBJZiBjaGlsZCBpcyBhbiA8YT4gdGFnIGFuZCBkb2Vzbid0IGhhdmUgYSBocmVmIGF0dHJpYnV0ZSwgb3IgaWYgdGhlICdwYXNzSHJlZicgcHJvcGVydHkgaXNcbiAgLy8gZGVmaW5lZCwgd2Ugc3BlY2lmeSB0aGUgY3VycmVudCAnaHJlZicsIHNvIHRoYXQgcmVwZXRpdGlvbiBpcyBub3QgbmVlZGVkIGJ5IHRoZSB1c2VyXG4gIGlmIChwcm9wcy5wYXNzSHJlZiB8fCAoY2hpbGQudHlwZSA9PT0gJ2EnICYmICEoJ2hyZWYnIGluIGNoaWxkLnByb3BzKSkpIHtcbiAgICBjb25zdCBjdXJMb2NhbGUgPVxuICAgICAgdHlwZW9mIGxvY2FsZSAhPT0gJ3VuZGVmaW5lZCcgPyBsb2NhbGUgOiByb3V0ZXIgJiYgcm91dGVyLmxvY2FsZVxuXG4gICAgLy8gd2Ugb25seSByZW5kZXIgZG9tYWluIGxvY2FsZXMgaWYgd2UgYXJlIGN1cnJlbnRseSBvbiBhIGRvbWFpbiBsb2NhbGVcbiAgICAvLyBzbyB0aGF0IGxvY2FsZSBsaW5rcyBhcmUgc3RpbGwgdmlzaXRhYmxlIGluIGRldmVsb3BtZW50L3ByZXZpZXcgZW52c1xuICAgIGNvbnN0IGxvY2FsZURvbWFpbiA9XG4gICAgICByb3V0ZXIgJiZcbiAgICAgIHJvdXRlci5pc0xvY2FsZURvbWFpbiAmJlxuICAgICAgZ2V0RG9tYWluTG9jYWxlKFxuICAgICAgICBhcyxcbiAgICAgICAgY3VyTG9jYWxlLFxuICAgICAgICByb3V0ZXIgJiYgcm91dGVyLmxvY2FsZXMsXG4gICAgICAgIHJvdXRlciAmJiByb3V0ZXIuZG9tYWluTG9jYWxlc1xuICAgICAgKVxuXG4gICAgY2hpbGRQcm9wcy5ocmVmID1cbiAgICAgIGxvY2FsZURvbWFpbiB8fFxuICAgICAgYWRkQmFzZVBhdGgoYWRkTG9jYWxlKGFzLCBjdXJMb2NhbGUsIHJvdXRlciAmJiByb3V0ZXIuZGVmYXVsdExvY2FsZSkpXG4gIH1cblxuICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkLCBjaGlsZFByb3BzKVxufVxuXG5leHBvcnQgZGVmYXVsdCBMaW5rXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/link.js\n"); - -/***/ }), - -/***/ "./node_modules/next/dist/client/normalize-trailing-slash.js": -/*!*******************************************************************!*\ - !*** ./node_modules/next/dist/client/normalize-trailing-slash.js ***! - \*******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nexports.__esModule = true;\nexports.removePathTrailingSlash = removePathTrailingSlash;\nexports.normalizePathTrailingSlash = void 0;\n/**\n* Removes the trailing slash of a path if there is one. Preserves the root path `/`.\n*/\n\nfunction removePathTrailingSlash(path) {\n return path.endsWith('/') && path !== '/' ? path.slice(0, -1) : path;\n}\n/**\n* Normalizes the trailing slash of a path according to the `trailingSlash` option\n* in `next.config.js`.\n*/\n\n\nvar normalizePathTrailingSlash = false ? undefined : removePathTrailingSlash;\nexports.normalizePathTrailingSlash = normalizePathTrailingSlash;\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../compiled/webpack/module.js */ \"./node_modules/next/dist/compiled/webpack/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL2NsaWVudC9ub3JtYWxpemUtdHJhaWxpbmctc2xhc2gudHM/NjMyMyJdLCJuYW1lcyI6WyJwYXRoIiwibm9ybWFsaXplUGF0aFRyYWlsaW5nU2xhc2giLCJwcm9jZXNzIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTs7QUFDTyx1Q0FBdUQ7QUFDNUQsU0FBT0EsSUFBSSxDQUFKQSxpQkFBc0JBLElBQUksS0FBMUJBLE1BQXFDQSxJQUFJLENBQUpBLFNBQWMsQ0FBbkRBLENBQXFDQSxDQUFyQ0EsR0FBUDtBQUdGO0FBQUE7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLElBQU1DLDBCQUEwQixHQUFHQyxTQUNyQ0YsU0FEcUNFLEdBQW5DIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvbm9ybWFsaXplLXRyYWlsaW5nLXNsYXNoLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZW1vdmVzIHRoZSB0cmFpbGluZyBzbGFzaCBvZiBhIHBhdGggaWYgdGhlcmUgaXMgb25lLiBQcmVzZXJ2ZXMgdGhlIHJvb3QgcGF0aCBgL2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVQYXRoVHJhaWxpbmdTbGFzaChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcGF0aC5lbmRzV2l0aCgnLycpICYmIHBhdGggIT09ICcvJyA/IHBhdGguc2xpY2UoMCwgLTEpIDogcGF0aFxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgdGhlIHRyYWlsaW5nIHNsYXNoIG9mIGEgcGF0aCBhY2NvcmRpbmcgdG8gdGhlIGB0cmFpbGluZ1NsYXNoYCBvcHRpb25cbiAqIGluIGBuZXh0LmNvbmZpZy5qc2AuXG4gKi9cbmV4cG9ydCBjb25zdCBub3JtYWxpemVQYXRoVHJhaWxpbmdTbGFzaCA9IHByb2Nlc3MuZW52Ll9fTkVYVF9UUkFJTElOR19TTEFTSFxuICA/IChwYXRoOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgICAgaWYgKC9cXC5bXi9dK1xcLz8kLy50ZXN0KHBhdGgpKSB7XG4gICAgICAgIHJldHVybiByZW1vdmVQYXRoVHJhaWxpbmdTbGFzaChwYXRoKVxuICAgICAgfSBlbHNlIGlmIChwYXRoLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgICAgcmV0dXJuIHBhdGhcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBwYXRoICsgJy8nXG4gICAgICB9XG4gICAgfVxuICA6IHJlbW92ZVBhdGhUcmFpbGluZ1NsYXNoXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/normalize-trailing-slash.js\n"); - -/***/ }), - -/***/ "./node_modules/next/dist/client/request-idle-callback.js": -/*!****************************************************************!*\ - !*** ./node_modules/next/dist/client/request-idle-callback.js ***! - \****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nexports.__esModule = true;\nexports.cancelIdleCallback = exports.requestIdleCallback = void 0;\n\nvar requestIdleCallback = typeof self !== 'undefined' && self.requestIdleCallback || function (cb) {\n var start = Date.now();\n return setTimeout(function () {\n cb({\n didTimeout: false,\n timeRemaining: function timeRemaining() {\n return Math.max(0, 50 - (Date.now() - start));\n }\n });\n }, 1);\n};\n\nexports.requestIdleCallback = requestIdleCallback;\n\nvar cancelIdleCallback = typeof self !== 'undefined' && self.cancelIdleCallback || function (id) {\n return clearTimeout(id);\n};\n\nexports.cancelIdleCallback = cancelIdleCallback;\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../compiled/webpack/module.js */ \"./node_modules/next/dist/compiled/webpack/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL2NsaWVudC9yZXF1ZXN0LWlkbGUtY2FsbGJhY2sudHM/ZmY5ZSJdLCJuYW1lcyI6WyJyZXF1ZXN0SWRsZUNhbGxiYWNrIiwic2VsZiIsInN0YXJ0IiwiRGF0ZSIsInNldFRpbWVvdXQiLCJjYiIsImRpZFRpbWVvdXQiLCJ0aW1lUmVtYWluaW5nIiwiTWF0aCIsImNhbmNlbElkbGVDYWxsYmFjayIsImNsZWFyVGltZW91dCJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFtQk8sSUFBTUEsbUJBQW1CLEdBQzdCLCtCQUErQkMsSUFBSSxDQUFwQyxtQkFBQyxJQUNELGNBRWtCO0FBQ2hCLE1BQUlDLEtBQUssR0FBR0MsSUFBSSxDQUFoQixHQUFZQSxFQUFaO0FBQ0EsU0FBT0MsVUFBVSxDQUFDLFlBQVk7QUFDNUJDLE1BQUUsQ0FBQztBQUNEQyxnQkFBVSxFQURUO0FBRURDLG1CQUFhLEVBQUUseUJBQVk7QUFDekIsZUFBT0MsSUFBSSxDQUFKQSxPQUFZLE1BQU1MLElBQUksQ0FBSkEsUUFBekIsS0FBbUIsQ0FBWkssQ0FBUDtBQUhKSDtBQUFHLEtBQUQsQ0FBRkE7QUFEZSxLQUFqQixDQUFpQixDQUFqQjtBQU5HOzs7O0FBZ0JBLElBQU1JLGtCQUFrQixHQUM1QiwrQkFBK0JSLElBQUksQ0FBcEMsa0JBQUMsSUFDRCxjQUF5QztBQUN2QyxTQUFPUyxZQUFZLENBQW5CLEVBQW1CLENBQW5CO0FBSEciLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9yZXF1ZXN0LWlkbGUtY2FsbGJhY2suanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ0eXBlIFJlcXVlc3RJZGxlQ2FsbGJhY2tIYW5kbGUgPSBhbnlcbnR5cGUgUmVxdWVzdElkbGVDYWxsYmFja09wdGlvbnMgPSB7XG4gIHRpbWVvdXQ6IG51bWJlclxufVxudHlwZSBSZXF1ZXN0SWRsZUNhbGxiYWNrRGVhZGxpbmUgPSB7XG4gIHJlYWRvbmx5IGRpZFRpbWVvdXQ6IGJvb2xlYW5cbiAgdGltZVJlbWFpbmluZzogKCkgPT4gbnVtYmVyXG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgcmVxdWVzdElkbGVDYWxsYmFjazogKFxuICAgICAgY2FsbGJhY2s6IChkZWFkbGluZTogUmVxdWVzdElkbGVDYWxsYmFja0RlYWRsaW5lKSA9PiB2b2lkLFxuICAgICAgb3B0cz86IFJlcXVlc3RJZGxlQ2FsbGJhY2tPcHRpb25zXG4gICAgKSA9PiBSZXF1ZXN0SWRsZUNhbGxiYWNrSGFuZGxlXG4gICAgY2FuY2VsSWRsZUNhbGxiYWNrOiAoaWQ6IFJlcXVlc3RJZGxlQ2FsbGJhY2tIYW5kbGUpID0+IHZvaWRcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgcmVxdWVzdElkbGVDYWxsYmFjayA9XG4gICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5yZXF1ZXN0SWRsZUNhbGxiYWNrKSB8fFxuICBmdW5jdGlvbiAoXG4gICAgY2I6IChkZWFkbGluZTogUmVxdWVzdElkbGVDYWxsYmFja0RlYWRsaW5lKSA9PiB2b2lkXG4gICk6IE5vZGVKUy5UaW1lb3V0IHtcbiAgICBsZXQgc3RhcnQgPSBEYXRlLm5vdygpXG4gICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgY2Ioe1xuICAgICAgICBkaWRUaW1lb3V0OiBmYWxzZSxcbiAgICAgICAgdGltZVJlbWFpbmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBNYXRoLm1heCgwLCA1MCAtIChEYXRlLm5vdygpIC0gc3RhcnQpKVxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9LCAxKVxuICB9XG5cbmV4cG9ydCBjb25zdCBjYW5jZWxJZGxlQ2FsbGJhY2sgPVxuICAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnICYmIHNlbGYuY2FuY2VsSWRsZUNhbGxiYWNrKSB8fFxuICBmdW5jdGlvbiAoaWQ6IFJlcXVlc3RJZGxlQ2FsbGJhY2tIYW5kbGUpIHtcbiAgICByZXR1cm4gY2xlYXJUaW1lb3V0KGlkKVxuICB9XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/request-idle-callback.js\n"); - -/***/ }), - -/***/ "./node_modules/next/dist/client/route-loader.js": -/*!*******************************************************!*\ - !*** ./node_modules/next/dist/client/route-loader.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/next/node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nexports.__esModule = true;\nexports.markAssetError = markAssetError;\nexports.isAssetError = isAssetError;\nexports.getClientBuildManifest = getClientBuildManifest;\nexports[\"default\"] = void 0;\n\nvar _getAssetPathFromRoute = _interopRequireDefault(__webpack_require__(/*! ../next-server/lib/router/utils/get-asset-path-from-route */ \"./node_modules/next/dist/next-server/lib/router/utils/get-asset-path-from-route.js\"));\n\nvar _requestIdleCallback = __webpack_require__(/*! ./request-idle-callback */ \"./node_modules/next/dist/client/request-idle-callback.js\"); // 3.8s was arbitrarily chosen as it's what https://web.dev/interactive\n// considers as \"Good\" time-to-interactive. We must assume something went\n// wrong beyond this point, and then fall-back to a full page transition to\n// show the user something of value.\n\n\nvar MS_MAX_IDLE_DELAY = 3800;\n\nfunction withFuture(key, map, generator) {\n var entry = map.get(key);\n\n if (entry) {\n if ('future' in entry) {\n return entry.future;\n }\n\n return Promise.resolve(entry);\n }\n\n var resolver;\n var prom = new Promise(function (resolve) {\n resolver = resolve;\n });\n map.set(key, entry = {\n resolve: resolver,\n future: prom\n });\n return generator ? // eslint-disable-next-line no-sequences\n generator().then(function (value) {\n return resolver(value), value;\n }) : prom;\n}\n\nfunction hasPrefetch(link) {\n try {\n link = document.createElement('link');\n return (// detect IE11 since it supports prefetch but isn't detected\n // with relList.support\n !!window.MSInputMethodContext && !!document.documentMode || link.relList.supports('prefetch')\n );\n } catch (_unused) {\n return false;\n }\n}\n\nvar canPrefetch = hasPrefetch();\n\nfunction prefetchViaDom(href, as, link) {\n return new Promise(function (res, rej) {\n if (document.querySelector(\"link[rel=\\\"prefetch\\\"][href^=\\\"\".concat(href, \"\\\"]\"))) {\n return res();\n }\n\n link = document.createElement('link'); // The order of property assignment here is intentional:\n\n if (as) link.as = as;\n link.rel = \"prefetch\";\n link.crossOrigin = undefined;\n link.onload = res;\n link.onerror = rej; // `href` should always be last:\n\n link.href = href;\n document.head.appendChild(link);\n });\n}\n\nvar ASSET_LOAD_ERROR = Symbol('ASSET_LOAD_ERROR'); // TODO: unexport\n\nfunction markAssetError(err) {\n return Object.defineProperty(err, ASSET_LOAD_ERROR, {});\n}\n\nfunction isAssetError(err) {\n return err && ASSET_LOAD_ERROR in err;\n}\n\nfunction appendScript(src, script) {\n return new Promise(function (resolve, reject) {\n script = document.createElement('script'); // The order of property assignment here is intentional.\n // 1. Setup success/failure hooks in case the browser synchronously\n // executes when `src` is set.\n\n script.onload = resolve;\n\n script.onerror = function () {\n return reject(markAssetError(new Error(\"Failed to load script: \".concat(src))));\n }; // 2. Configure the cross-origin attribute before setting `src` in case the\n // browser begins to fetch.\n\n\n script.crossOrigin = undefined; // 3. Finally, set the source and inject into the DOM in case the child\n // must be appended for fetching to start.\n\n script.src = src;\n document.body.appendChild(script);\n });\n} // Resolve a promise that times out after given amount of milliseconds.\n\n\nfunction resolvePromiseWithTimeout(p, ms, err) {\n return new Promise(function (resolve, reject) {\n var cancelled = false;\n p.then(function (r) {\n // Resolved, cancel the timeout\n cancelled = true;\n resolve(r);\n })[\"catch\"](reject);\n (0, _requestIdleCallback.requestIdleCallback)(function () {\n return setTimeout(function () {\n if (!cancelled) {\n reject(err);\n }\n }, ms);\n });\n });\n} // TODO: stop exporting or cache the failure\n// It'd be best to stop exporting this. It's an implementation detail. We're\n// only exporting it for backwards compatibilty with the `page-loader`.\n// Only cache this response as a last resort if we cannot eliminate all other\n// code branches that use the Build Manifest Callback and push them through\n// the Route Loader interface.\n\n\nfunction getClientBuildManifest() {\n if (self.__BUILD_MANIFEST) {\n return Promise.resolve(self.__BUILD_MANIFEST);\n }\n\n var onBuildManifest = new Promise(function (resolve) {\n // Mandatory because this is not concurrent safe:\n var cb = self.__BUILD_MANIFEST_CB;\n\n self.__BUILD_MANIFEST_CB = function () {\n resolve(self.__BUILD_MANIFEST);\n cb && cb();\n };\n });\n return resolvePromiseWithTimeout(onBuildManifest, MS_MAX_IDLE_DELAY, markAssetError(new Error('Failed to load client build manifest')));\n}\n\nfunction getFilesForRoute(assetPrefix, route) {\n if (true) {\n return Promise.resolve({\n scripts: [assetPrefix + '/_next/static/chunks/pages' + encodeURI((0, _getAssetPathFromRoute[\"default\"])(route, '.js'))],\n // Styles are handled by `style-loader` in development:\n css: []\n });\n }\n\n return getClientBuildManifest().then(function (manifest) {\n if (!(route in manifest)) {\n throw markAssetError(new Error(\"Failed to lookup route: \".concat(route)));\n }\n\n var allFiles = manifest[route].map(function (entry) {\n return assetPrefix + '/_next/' + encodeURI(entry);\n });\n return {\n scripts: allFiles.filter(function (v) {\n return v.endsWith('.js');\n }),\n css: allFiles.filter(function (v) {\n return v.endsWith('.css');\n })\n };\n });\n}\n\nfunction createRouteLoader(assetPrefix) {\n var entrypoints = new Map();\n var loadedScripts = new Map();\n var styleSheets = new Map();\n var routes = new Map();\n\n function maybeExecuteScript(src) {\n var prom = loadedScripts.get(src);\n\n if (prom) {\n return prom;\n } // Skip executing script if it's already in the DOM:\n\n\n if (document.querySelector(\"script[src^=\\\"\".concat(src, \"\\\"]\"))) {\n return Promise.resolve();\n }\n\n loadedScripts.set(src, prom = appendScript(src));\n return prom;\n }\n\n function fetchStyleSheet(href) {\n var prom = styleSheets.get(href);\n\n if (prom) {\n return prom;\n }\n\n styleSheets.set(href, prom = fetch(href).then(function (res) {\n if (!res.ok) {\n throw new Error(\"Failed to load stylesheet: \".concat(href));\n }\n\n return res.text().then(function (text) {\n return {\n href: href,\n content: text\n };\n });\n })[\"catch\"](function (err) {\n throw markAssetError(err);\n }));\n return prom;\n }\n\n return {\n whenEntrypoint: function whenEntrypoint(route) {\n return withFuture(route, entrypoints);\n },\n onEntrypoint: function onEntrypoint(route, execute) {\n Promise.resolve(execute).then(function (fn) {\n return fn();\n }).then(function (exports) {\n return {\n component: exports && exports[\"default\"] || exports,\n exports: exports\n };\n }, function (err) {\n return {\n error: err\n };\n }).then(function (input) {\n var old = entrypoints.get(route);\n entrypoints.set(route, input);\n if (old && 'resolve' in old) old.resolve(input);\n });\n },\n loadRoute: function loadRoute(route, prefetch) {\n var _this = this;\n\n return withFuture(route, routes, function () {\n return resolvePromiseWithTimeout(getFilesForRoute(assetPrefix, route).then(function (_ref) {\n var scripts = _ref.scripts,\n css = _ref.css;\n return Promise.all([entrypoints.has(route) ? [] : Promise.all(scripts.map(maybeExecuteScript)), Promise.all(css.map(fetchStyleSheet))]);\n }).then(function (res) {\n return _this.whenEntrypoint(route).then(function (entrypoint) {\n return {\n entrypoint: entrypoint,\n styles: res[1]\n };\n });\n }), MS_MAX_IDLE_DELAY, markAssetError(new Error(\"Route did not complete loading: \".concat(route)))).then(function (_ref2) {\n var entrypoint = _ref2.entrypoint,\n styles = _ref2.styles;\n var res = Object.assign({\n styles: styles\n }, entrypoint);\n return 'error' in entrypoint ? entrypoint : res;\n })[\"catch\"](function (err) {\n if (prefetch) {\n // we don't want to cache errors during prefetch\n throw err;\n }\n\n return {\n error: err\n };\n });\n });\n },\n prefetch: function prefetch(route) {\n var _this2 = this;\n\n // https://github.com/GoogleChromeLabs/quicklink/blob/453a661fa1fa940e2d2e044452398e38c67a98fb/src/index.mjs#L115-L118\n // License: Apache 2.0\n var cn;\n\n if (cn = navigator.connection) {\n // Don't prefetch if using 2G or if Save-Data is enabled.\n if (cn.saveData || /2g/.test(cn.effectiveType)) return Promise.resolve();\n }\n\n return getFilesForRoute(assetPrefix, route).then(function (output) {\n return Promise.all(canPrefetch ? output.scripts.map(function (script) {\n return prefetchViaDom(script, 'script');\n }) : []);\n }).then(function () {\n (0, _requestIdleCallback.requestIdleCallback)(function () {\n return _this2.loadRoute(route, true)[\"catch\"](function () {});\n });\n })[\"catch\"]( // swallow prefetch errors\n function () {});\n }\n };\n}\n\nvar _default = createRouteLoader;\nexports[\"default\"] = _default;\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../compiled/webpack/module.js */ \"./node_modules/next/dist/compiled/webpack/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL2NsaWVudC9yb3V0ZS1sb2FkZXIudHM/OGE0NiJdLCJuYW1lcyI6WyJNU19NQVhfSURMRV9ERUxBWSIsImVudHJ5IiwibWFwIiwiUHJvbWlzZSIsInByb20iLCJyZXNvbHZlIiwicmVzb2x2ZXIiLCJmdXR1cmUiLCJnZW5lcmF0b3IiLCJ2YWx1ZSIsImxpbmsiLCJkb2N1bWVudCIsIndpbmRvdyIsImNhblByZWZldGNoIiwiaGFzUHJlZmV0Y2giLCJyZXMiLCJwcm9jZXNzIiwiQVNTRVRfTE9BRF9FUlJPUiIsIlN5bWJvbCIsIk9iamVjdCIsImVyciIsInNjcmlwdCIsInJlamVjdCIsIm1hcmtBc3NldEVycm9yIiwiY2FuY2VsbGVkIiwiciIsInNldFRpbWVvdXQiLCJzZWxmIiwib25CdWlsZE1hbmlmZXN0IiwiY2IiLCJyZXNvbHZlUHJvbWlzZVdpdGhUaW1lb3V0Iiwic2NyaXB0cyIsImFzc2V0UHJlZml4IiwiZW5jb2RlVVJJIiwiY3NzIiwiZ2V0Q2xpZW50QnVpbGRNYW5pZmVzdCIsIm1hbmlmZXN0Iiwicm91dGUiLCJhbGxGaWxlcyIsInYiLCJlbnRyeXBvaW50cyIsImxvYWRlZFNjcmlwdHMiLCJzdHlsZVNoZWV0cyIsInJvdXRlcyIsImFwcGVuZFNjcmlwdCIsImZldGNoIiwidGV4dCIsImhyZWYiLCJjb250ZW50Iiwid2hlbkVudHJ5cG9pbnQiLCJ3aXRoRnV0dXJlIiwib25FbnRyeXBvaW50IiwiZm4iLCJleHBvcnRzIiwiY29tcG9uZW50IiwiZXJyb3IiLCJpbnB1dCIsIm9sZCIsImxvYWRSb3V0ZSIsImdldEZpbGVzRm9yUm91dGUiLCJlbnRyeXBvaW50Iiwic3R5bGVzIiwicHJlZmV0Y2giLCJjbiIsIm5hdmlnYXRvciIsIm91dHB1dCIsInByZWZldGNoVmlhRG9tIiwiY3JlYXRlUm91dGVMb2FkZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFFQTs7QUFDQSwwSSxDQUVBO0FBQ0E7QUFDQTtBQUNB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QUFPLENBQWQsT0FBT0EsRUFBUDtBQUVsRDs7QUFBQSxhQUFPLGdCQUFnQixjQUFoQixLQUFnQixDQUFoQixNQUNFOEQsZ0JBQUQ7QUFBQSxlQUNKOUQsT0FBTyxDQUFQQSxJQUNFVSxXQUFXLEdBQ1BvRCxNQUFNLENBQU5BLFlBQW9CNUMsZ0JBQUQ7QUFBQSxpQkFBWTZDLGNBQWMsU0FEdEMsUUFDc0MsQ0FBMUI7QUFBQSxTQUFuQkQsQ0FETyxHQUhWLEVBRUg5RCxDQURJO0FBQUEsT0FERCxPQVFDLFlBQU07QUFDVixzREFBb0I7QUFBQSxpQkFBTSx1Q0FBa0MsWUFBTSxDQUFsRSxDQUEwQixDQUFOO0FBQUEsU0FBcEI7QUFURyxtQkFZSDtBQUNBLGtCQUFNLENBYlYsQ0FBTyxDQUFQO0FBakVKO0FBQU8sR0FBUDs7O2VBb0ZhZ0UsaUIiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9yb3V0ZS1sb2FkZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRUeXBlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBDbGllbnRCdWlsZE1hbmlmZXN0IH0gZnJvbSAnLi4vYnVpbGQvd2VicGFjay9wbHVnaW5zL2J1aWxkLW1hbmlmZXN0LXBsdWdpbidcbmltcG9ydCBnZXRBc3NldFBhdGhGcm9tUm91dGUgZnJvbSAnLi4vbmV4dC1zZXJ2ZXIvbGliL3JvdXRlci91dGlscy9nZXQtYXNzZXQtcGF0aC1mcm9tLXJvdXRlJ1xuaW1wb3J0IHsgcmVxdWVzdElkbGVDYWxsYmFjayB9IGZyb20gJy4vcmVxdWVzdC1pZGxlLWNhbGxiYWNrJ1xuXG4vLyAzLjhzIHdhcyBhcmJpdHJhcmlseSBjaG9zZW4gYXMgaXQncyB3aGF0IGh0dHBzOi8vd2ViLmRldi9pbnRlcmFjdGl2ZVxuLy8gY29uc2lkZXJzIGFzIFwiR29vZFwiIHRpbWUtdG8taW50ZXJhY3RpdmUuIFdlIG11c3QgYXNzdW1lIHNvbWV0aGluZyB3ZW50XG4vLyB3cm9uZyBiZXlvbmQgdGhpcyBwb2ludCwgYW5kIHRoZW4gZmFsbC1iYWNrIHRvIGEgZnVsbCBwYWdlIHRyYW5zaXRpb24gdG9cbi8vIHNob3cgdGhlIHVzZXIgc29tZXRoaW5nIG9mIHZhbHVlLlxuY29uc3QgTVNfTUFYX0lETEVfREVMQVkgPSAzODAwXG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgX19CVUlMRF9NQU5JRkVTVD86IENsaWVudEJ1aWxkTWFuaWZlc3RcbiAgICBfX0JVSUxEX01BTklGRVNUX0NCPzogRnVuY3Rpb25cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvYWRlZEVudHJ5cG9pbnRTdWNjZXNzIHtcbiAgY29tcG9uZW50OiBDb21wb25lbnRUeXBlXG4gIGV4cG9ydHM6IGFueVxufVxuZXhwb3J0IGludGVyZmFjZSBMb2FkZWRFbnRyeXBvaW50RmFpbHVyZSB7XG4gIGVycm9yOiB1bmtub3duXG59XG5leHBvcnQgdHlwZSBSb3V0ZUVudHJ5cG9pbnQgPSBMb2FkZWRFbnRyeXBvaW50U3VjY2VzcyB8IExvYWRlZEVudHJ5cG9pbnRGYWlsdXJlXG5cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVTdHlsZVNoZWV0IHtcbiAgaHJlZjogc3RyaW5nXG4gIGNvbnRlbnQ6IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvYWRlZFJvdXRlU3VjY2VzcyBleHRlbmRzIExvYWRlZEVudHJ5cG9pbnRTdWNjZXNzIHtcbiAgc3R5bGVzOiBSb3V0ZVN0eWxlU2hlZXRbXVxufVxuZXhwb3J0IGludGVyZmFjZSBMb2FkZWRSb3V0ZUZhaWx1cmUge1xuICBlcnJvcjogdW5rbm93blxufVxuZXhwb3J0IHR5cGUgUm91dGVMb2FkZXJFbnRyeSA9IExvYWRlZFJvdXRlU3VjY2VzcyB8IExvYWRlZFJvdXRlRmFpbHVyZVxuXG5leHBvcnQgdHlwZSBGdXR1cmU8Vj4gPSB7XG4gIHJlc29sdmU6IChlbnRyeXBvaW50OiBWKSA9PiB2b2lkXG4gIGZ1dHVyZTogUHJvbWlzZTxWPlxufVxuZnVuY3Rpb24gd2l0aEZ1dHVyZTxUPihcbiAga2V5OiBzdHJpbmcsXG4gIG1hcDogTWFwPHN0cmluZywgRnV0dXJlPFQ+IHwgVD4sXG4gIGdlbmVyYXRvcj86ICgpID0+IFByb21pc2U8VD5cbik6IFByb21pc2U8VD4ge1xuICBsZXQgZW50cnk6IEZ1dHVyZTxUPiB8IFQgfCB1bmRlZmluZWQgPSBtYXAuZ2V0KGtleSlcbiAgaWYgKGVudHJ5KSB7XG4gICAgaWYgKCdmdXR1cmUnIGluIGVudHJ5KSB7XG4gICAgICByZXR1cm4gZW50cnkuZnV0dXJlXG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZW50cnkpXG4gIH1cbiAgbGV0IHJlc29sdmVyOiAoZW50cnlwb2ludDogVCkgPT4gdm9pZFxuICBjb25zdCBwcm9tOiBQcm9taXNlPFQ+ID0gbmV3IFByb21pc2U8VD4oKHJlc29sdmUpID0+IHtcbiAgICByZXNvbHZlciA9IHJlc29sdmVcbiAgfSlcbiAgbWFwLnNldChrZXksIChlbnRyeSA9IHsgcmVzb2x2ZTogcmVzb2x2ZXIhLCBmdXR1cmU6IHByb20gfSkpXG4gIHJldHVybiBnZW5lcmF0b3JcbiAgICA/IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZXF1ZW5jZXNcbiAgICAgIGdlbmVyYXRvcigpLnRoZW4oKHZhbHVlKSA9PiAocmVzb2x2ZXIodmFsdWUpLCB2YWx1ZSkpXG4gICAgOiBwcm9tXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVMb2FkZXIge1xuICB3aGVuRW50cnlwb2ludChyb3V0ZTogc3RyaW5nKTogUHJvbWlzZTxSb3V0ZUVudHJ5cG9pbnQ+XG4gIG9uRW50cnlwb2ludChyb3V0ZTogc3RyaW5nLCBleGVjdXRlOiAoKSA9PiB1bmtub3duKTogdm9pZFxuICBsb2FkUm91dGUocm91dGU6IHN0cmluZywgcHJlZmV0Y2g/OiBib29sZWFuKTogUHJvbWlzZTxSb3V0ZUxvYWRlckVudHJ5PlxuICBwcmVmZXRjaChyb3V0ZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPlxufVxuXG5mdW5jdGlvbiBoYXNQcmVmZXRjaChsaW5rPzogSFRNTExpbmtFbGVtZW50KTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKVxuICAgIHJldHVybiAoXG4gICAgICAvLyBkZXRlY3QgSUUxMSBzaW5jZSBpdCBzdXBwb3J0cyBwcmVmZXRjaCBidXQgaXNuJ3QgZGV0ZWN0ZWRcbiAgICAgIC8vIHdpdGggcmVsTGlzdC5zdXBwb3J0XG4gICAgICAoISF3aW5kb3cuTVNJbnB1dE1ldGhvZENvbnRleHQgJiYgISEoZG9jdW1lbnQgYXMgYW55KS5kb2N1bWVudE1vZGUpIHx8XG4gICAgICBsaW5rLnJlbExpc3Quc3VwcG9ydHMoJ3ByZWZldGNoJylcbiAgICApXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmNvbnN0IGNhblByZWZldGNoOiBib29sZWFuID0gaGFzUHJlZmV0Y2goKVxuXG5mdW5jdGlvbiBwcmVmZXRjaFZpYURvbShcbiAgaHJlZjogc3RyaW5nLFxuICBhczogc3RyaW5nLFxuICBsaW5rPzogSFRNTExpbmtFbGVtZW50XG4pOiBQcm9taXNlPGFueT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XG4gICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYGxpbmtbcmVsPVwicHJlZmV0Y2hcIl1baHJlZl49XCIke2hyZWZ9XCJdYCkpIHtcbiAgICAgIHJldHVybiByZXMoKVxuICAgIH1cblxuICAgIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJylcblxuICAgIC8vIFRoZSBvcmRlciBvZiBwcm9wZXJ0eSBhc3NpZ25tZW50IGhlcmUgaXMgaW50ZW50aW9uYWw6XG4gICAgaWYgKGFzKSBsaW5rIS5hcyA9IGFzXG4gICAgbGluayEucmVsID0gYHByZWZldGNoYFxuICAgIGxpbmshLmNyb3NzT3JpZ2luID0gcHJvY2Vzcy5lbnYuX19ORVhUX0NST1NTX09SSUdJTiFcbiAgICBsaW5rIS5vbmxvYWQgPSByZXNcbiAgICBsaW5rIS5vbmVycm9yID0gcmVqXG5cbiAgICAvLyBgaHJlZmAgc2hvdWxkIGFsd2F5cyBiZSBsYXN0OlxuICAgIGxpbmshLmhyZWYgPSBocmVmXG5cbiAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGxpbmspXG4gIH0pXG59XG5cbmNvbnN0IEFTU0VUX0xPQURfRVJST1IgPSBTeW1ib2woJ0FTU0VUX0xPQURfRVJST1InKVxuLy8gVE9ETzogdW5leHBvcnRcbmV4cG9ydCBmdW5jdGlvbiBtYXJrQXNzZXRFcnJvcihlcnI6IEVycm9yKTogRXJyb3Ige1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGVyciwgQVNTRVRfTE9BRF9FUlJPUiwge30pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Fzc2V0RXJyb3IoZXJyPzogRXJyb3IpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGVyciAmJiBBU1NFVF9MT0FEX0VSUk9SIGluIGVyclxufVxuXG5mdW5jdGlvbiBhcHBlbmRTY3JpcHQoXG4gIHNyYzogc3RyaW5nLFxuICBzY3JpcHQ/OiBIVE1MU2NyaXB0RWxlbWVudFxuKTogUHJvbWlzZTx1bmtub3duPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0JylcblxuICAgIC8vIFRoZSBvcmRlciBvZiBwcm9wZXJ0eSBhc3NpZ25tZW50IGhlcmUgaXMgaW50ZW50aW9uYWwuXG4gICAgLy8gMS4gU2V0dXAgc3VjY2Vzcy9mYWlsdXJlIGhvb2tzIGluIGNhc2UgdGhlIGJyb3dzZXIgc3luY2hyb25vdXNseVxuICAgIC8vICAgIGV4ZWN1dGVzIHdoZW4gYHNyY2AgaXMgc2V0LlxuICAgIHNjcmlwdC5vbmxvYWQgPSByZXNvbHZlXG4gICAgc2NyaXB0Lm9uZXJyb3IgPSAoKSA9PlxuICAgICAgcmVqZWN0KG1hcmtBc3NldEVycm9yKG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgc2NyaXB0OiAke3NyY31gKSkpXG5cbiAgICAvLyAyLiBDb25maWd1cmUgdGhlIGNyb3NzLW9yaWdpbiBhdHRyaWJ1dGUgYmVmb3JlIHNldHRpbmcgYHNyY2AgaW4gY2FzZSB0aGVcbiAgICAvLyAgICBicm93c2VyIGJlZ2lucyB0byBmZXRjaC5cbiAgICBzY3JpcHQuY3Jvc3NPcmlnaW4gPSBwcm9jZXNzLmVudi5fX05FWFRfQ1JPU1NfT1JJR0lOIVxuXG4gICAgLy8gMy4gRmluYWxseSwgc2V0IHRoZSBzb3VyY2UgYW5kIGluamVjdCBpbnRvIHRoZSBET00gaW4gY2FzZSB0aGUgY2hpbGRcbiAgICAvLyAgICBtdXN0IGJlIGFwcGVuZGVkIGZvciBmZXRjaGluZyB0byBzdGFydC5cbiAgICBzY3JpcHQuc3JjID0gc3JjXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpXG4gIH0pXG59XG5cbi8vIFJlc29sdmUgYSBwcm9taXNlIHRoYXQgdGltZXMgb3V0IGFmdGVyIGdpdmVuIGFtb3VudCBvZiBtaWxsaXNlY29uZHMuXG5mdW5jdGlvbiByZXNvbHZlUHJvbWlzZVdpdGhUaW1lb3V0PFQ+KFxuICBwOiBQcm9taXNlPFQ+LFxuICBtczogbnVtYmVyLFxuICBlcnI6IEVycm9yXG4pOiBQcm9taXNlPFQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2VcblxuICAgIHAudGhlbigocikgPT4ge1xuICAgICAgLy8gUmVzb2x2ZWQsIGNhbmNlbCB0aGUgdGltZW91dFxuICAgICAgY2FuY2VsbGVkID0gdHJ1ZVxuICAgICAgcmVzb2x2ZShyKVxuICAgIH0pLmNhdGNoKHJlamVjdClcblxuICAgIHJlcXVlc3RJZGxlQ2FsbGJhY2soKCkgPT5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoIWNhbmNlbGxlZCkge1xuICAgICAgICAgIHJlamVjdChlcnIpXG4gICAgICAgIH1cbiAgICAgIH0sIG1zKVxuICAgIClcbiAgfSlcbn1cblxuLy8gVE9ETzogc3RvcCBleHBvcnRpbmcgb3IgY2FjaGUgdGhlIGZhaWx1cmVcbi8vIEl0J2QgYmUgYmVzdCB0byBzdG9wIGV4cG9ydGluZyB0aGlzLiBJdCdzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4gV2UncmVcbi8vIG9ubHkgZXhwb3J0aW5nIGl0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbHR5IHdpdGggdGhlIGBwYWdlLWxvYWRlcmAuXG4vLyBPbmx5IGNhY2hlIHRoaXMgcmVzcG9uc2UgYXMgYSBsYXN0IHJlc29ydCBpZiB3ZSBjYW5ub3QgZWxpbWluYXRlIGFsbCBvdGhlclxuLy8gY29kZSBicmFuY2hlcyB0aGF0IHVzZSB0aGUgQnVpbGQgTWFuaWZlc3QgQ2FsbGJhY2sgYW5kIHB1c2ggdGhlbSB0aHJvdWdoXG4vLyB0aGUgUm91dGUgTG9hZGVyIGludGVyZmFjZS5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGllbnRCdWlsZE1hbmlmZXN0KCk6IFByb21pc2U8Q2xpZW50QnVpbGRNYW5pZmVzdD4ge1xuICBpZiAoc2VsZi5fX0JVSUxEX01BTklGRVNUKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzZWxmLl9fQlVJTERfTUFOSUZFU1QpXG4gIH1cblxuICBjb25zdCBvbkJ1aWxkTWFuaWZlc3Q6IFByb21pc2U8Q2xpZW50QnVpbGRNYW5pZmVzdD4gPSBuZXcgUHJvbWlzZTxcbiAgICBDbGllbnRCdWlsZE1hbmlmZXN0XG4gID4oKHJlc29sdmUpID0+IHtcbiAgICAvLyBNYW5kYXRvcnkgYmVjYXVzZSB0aGlzIGlzIG5vdCBjb25jdXJyZW50IHNhZmU6XG4gICAgY29uc3QgY2IgPSBzZWxmLl9fQlVJTERfTUFOSUZFU1RfQ0JcbiAgICBzZWxmLl9fQlVJTERfTUFOSUZFU1RfQ0IgPSAoKSA9PiB7XG4gICAgICByZXNvbHZlKHNlbGYuX19CVUlMRF9NQU5JRkVTVCEpXG4gICAgICBjYiAmJiBjYigpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiByZXNvbHZlUHJvbWlzZVdpdGhUaW1lb3V0PENsaWVudEJ1aWxkTWFuaWZlc3Q+KFxuICAgIG9uQnVpbGRNYW5pZmVzdCxcbiAgICBNU19NQVhfSURMRV9ERUxBWSxcbiAgICBtYXJrQXNzZXRFcnJvcihuZXcgRXJyb3IoJ0ZhaWxlZCB0byBsb2FkIGNsaWVudCBidWlsZCBtYW5pZmVzdCcpKVxuICApXG59XG5cbmludGVyZmFjZSBSb3V0ZUZpbGVzIHtcbiAgc2NyaXB0czogc3RyaW5nW11cbiAgY3NzOiBzdHJpbmdbXVxufVxuZnVuY3Rpb24gZ2V0RmlsZXNGb3JSb3V0ZShcbiAgYXNzZXRQcmVmaXg6IHN0cmluZyxcbiAgcm91dGU6IHN0cmluZ1xuKTogUHJvbWlzZTxSb3V0ZUZpbGVzPiB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgc2NyaXB0czogW1xuICAgICAgICBhc3NldFByZWZpeCArXG4gICAgICAgICAgJy9fbmV4dC9zdGF0aWMvY2h1bmtzL3BhZ2VzJyArXG4gICAgICAgICAgZW5jb2RlVVJJKGdldEFzc2V0UGF0aEZyb21Sb3V0ZShyb3V0ZSwgJy5qcycpKSxcbiAgICAgIF0sXG4gICAgICAvLyBTdHlsZXMgYXJlIGhhbmRsZWQgYnkgYHN0eWxlLWxvYWRlcmAgaW4gZGV2ZWxvcG1lbnQ6XG4gICAgICBjc3M6IFtdLFxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIGdldENsaWVudEJ1aWxkTWFuaWZlc3QoKS50aGVuKChtYW5pZmVzdCkgPT4ge1xuICAgIGlmICghKHJvdXRlIGluIG1hbmlmZXN0KSkge1xuICAgICAgdGhyb3cgbWFya0Fzc2V0RXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gbG9va3VwIHJvdXRlOiAke3JvdXRlfWApKVxuICAgIH1cbiAgICBjb25zdCBhbGxGaWxlcyA9IG1hbmlmZXN0W3JvdXRlXS5tYXAoXG4gICAgICAoZW50cnkpID0+IGFzc2V0UHJlZml4ICsgJy9fbmV4dC8nICsgZW5jb2RlVVJJKGVudHJ5KVxuICAgIClcbiAgICByZXR1cm4ge1xuICAgICAgc2NyaXB0czogYWxsRmlsZXMuZmlsdGVyKCh2KSA9PiB2LmVuZHNXaXRoKCcuanMnKSksXG4gICAgICBjc3M6IGFsbEZpbGVzLmZpbHRlcigodikgPT4gdi5lbmRzV2l0aCgnLmNzcycpKSxcbiAgICB9XG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVJvdXRlTG9hZGVyKGFzc2V0UHJlZml4OiBzdHJpbmcpOiBSb3V0ZUxvYWRlciB7XG4gIGNvbnN0IGVudHJ5cG9pbnRzOiBNYXA8XG4gICAgc3RyaW5nLFxuICAgIEZ1dHVyZTxSb3V0ZUVudHJ5cG9pbnQ+IHwgUm91dGVFbnRyeXBvaW50XG4gID4gPSBuZXcgTWFwKClcbiAgY29uc3QgbG9hZGVkU2NyaXB0czogTWFwPHN0cmluZywgUHJvbWlzZTx1bmtub3duPj4gPSBuZXcgTWFwKClcbiAgY29uc3Qgc3R5bGVTaGVldHM6IE1hcDxzdHJpbmcsIFByb21pc2U8Um91dGVTdHlsZVNoZWV0Pj4gPSBuZXcgTWFwKClcbiAgY29uc3Qgcm91dGVzOiBNYXA8XG4gICAgc3RyaW5nLFxuICAgIEZ1dHVyZTxSb3V0ZUxvYWRlckVudHJ5PiB8IFJvdXRlTG9hZGVyRW50cnlcbiAgPiA9IG5ldyBNYXAoKVxuXG4gIGZ1bmN0aW9uIG1heWJlRXhlY3V0ZVNjcmlwdChzcmM6IHN0cmluZyk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgIGxldCBwcm9tOiBQcm9taXNlPHVua25vd24+IHwgdW5kZWZpbmVkID0gbG9hZGVkU2NyaXB0cy5nZXQoc3JjKVxuICAgIGlmIChwcm9tKSB7XG4gICAgICByZXR1cm4gcHJvbVxuICAgIH1cblxuICAgIC8vIFNraXAgZXhlY3V0aW5nIHNjcmlwdCBpZiBpdCdzIGFscmVhZHkgaW4gdGhlIERPTTpcbiAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihgc2NyaXB0W3NyY149XCIke3NyY31cIl1gKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgfVxuXG4gICAgbG9hZGVkU2NyaXB0cy5zZXQoc3JjLCAocHJvbSA9IGFwcGVuZFNjcmlwdChzcmMpKSlcbiAgICByZXR1cm4gcHJvbVxuICB9XG5cbiAgZnVuY3Rpb24gZmV0Y2hTdHlsZVNoZWV0KGhyZWY6IHN0cmluZyk6IFByb21pc2U8Um91dGVTdHlsZVNoZWV0PiB7XG4gICAgbGV0IHByb206IFByb21pc2U8Um91dGVTdHlsZVNoZWV0PiB8IHVuZGVmaW5lZCA9IHN0eWxlU2hlZXRzLmdldChocmVmKVxuICAgIGlmIChwcm9tKSB7XG4gICAgICByZXR1cm4gcHJvbVxuICAgIH1cblxuICAgIHN0eWxlU2hlZXRzLnNldChcbiAgICAgIGhyZWYsXG4gICAgICAocHJvbSA9IGZldGNoKGhyZWYpXG4gICAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBzdHlsZXNoZWV0OiAke2hyZWZ9YClcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlcy50ZXh0KCkudGhlbigodGV4dCkgPT4gKHsgaHJlZjogaHJlZiwgY29udGVudDogdGV4dCB9KSlcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICB0aHJvdyBtYXJrQXNzZXRFcnJvcihlcnIpXG4gICAgICAgIH0pKVxuICAgIClcbiAgICByZXR1cm4gcHJvbVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB3aGVuRW50cnlwb2ludChyb3V0ZTogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gd2l0aEZ1dHVyZShyb3V0ZSwgZW50cnlwb2ludHMpXG4gICAgfSxcbiAgICBvbkVudHJ5cG9pbnQocm91dGU6IHN0cmluZywgZXhlY3V0ZTogKCkgPT4gdW5rbm93bikge1xuICAgICAgUHJvbWlzZS5yZXNvbHZlKGV4ZWN1dGUpXG4gICAgICAgIC50aGVuKChmbikgPT4gZm4oKSlcbiAgICAgICAgLnRoZW4oXG4gICAgICAgICAgKGV4cG9ydHM6IGFueSkgPT4gKHtcbiAgICAgICAgICAgIGNvbXBvbmVudDogKGV4cG9ydHMgJiYgZXhwb3J0cy5kZWZhdWx0KSB8fCBleHBvcnRzLFxuICAgICAgICAgICAgZXhwb3J0czogZXhwb3J0cyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAoZXJyKSA9PiAoeyBlcnJvcjogZXJyIH0pXG4gICAgICAgIClcbiAgICAgICAgLnRoZW4oKGlucHV0OiBSb3V0ZUVudHJ5cG9pbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBvbGQgPSBlbnRyeXBvaW50cy5nZXQocm91dGUpXG4gICAgICAgICAgZW50cnlwb2ludHMuc2V0KHJvdXRlLCBpbnB1dClcbiAgICAgICAgICBpZiAob2xkICYmICdyZXNvbHZlJyBpbiBvbGQpIG9sZC5yZXNvbHZlKGlucHV0KVxuICAgICAgICB9KVxuICAgIH0sXG4gICAgbG9hZFJvdXRlKHJvdXRlOiBzdHJpbmcsIHByZWZldGNoPzogYm9vbGVhbikge1xuICAgICAgcmV0dXJuIHdpdGhGdXR1cmU8Um91dGVMb2FkZXJFbnRyeT4ocm91dGUsIHJvdXRlcywgKCkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZVByb21pc2VXaXRoVGltZW91dChcbiAgICAgICAgICBnZXRGaWxlc0ZvclJvdXRlKGFzc2V0UHJlZml4LCByb3V0ZSlcbiAgICAgICAgICAgIC50aGVuKCh7IHNjcmlwdHMsIGNzcyB9KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICAgICAgZW50cnlwb2ludHMuaGFzKHJvdXRlKVxuICAgICAgICAgICAgICAgICAgPyBbXVxuICAgICAgICAgICAgICAgICAgOiBQcm9taXNlLmFsbChzY3JpcHRzLm1hcChtYXliZUV4ZWN1dGVTY3JpcHQpKSxcbiAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChjc3MubWFwKGZldGNoU3R5bGVTaGVldCkpLFxuICAgICAgICAgICAgICBdIGFzIGNvbnN0KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMud2hlbkVudHJ5cG9pbnQocm91dGUpLnRoZW4oKGVudHJ5cG9pbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgZW50cnlwb2ludCxcbiAgICAgICAgICAgICAgICBzdHlsZXM6IHJlc1sxXSxcbiAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBNU19NQVhfSURMRV9ERUxBWSxcbiAgICAgICAgICBtYXJrQXNzZXRFcnJvcihuZXcgRXJyb3IoYFJvdXRlIGRpZCBub3QgY29tcGxldGUgbG9hZGluZzogJHtyb3V0ZX1gKSlcbiAgICAgICAgKVxuICAgICAgICAgIC50aGVuKCh7IGVudHJ5cG9pbnQsIHN0eWxlcyB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXM6IFJvdXRlTG9hZGVyRW50cnkgPSBPYmplY3QuYXNzaWduPFxuICAgICAgICAgICAgICB7IHN0eWxlczogUm91dGVTdHlsZVNoZWV0W10gfSxcbiAgICAgICAgICAgICAgUm91dGVFbnRyeXBvaW50XG4gICAgICAgICAgICA+KHsgc3R5bGVzOiBzdHlsZXMhIH0sIGVudHJ5cG9pbnQpXG4gICAgICAgICAgICByZXR1cm4gJ2Vycm9yJyBpbiBlbnRyeXBvaW50ID8gZW50cnlwb2ludCA6IHJlc1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgIGlmIChwcmVmZXRjaCkge1xuICAgICAgICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIGNhY2hlIGVycm9ycyBkdXJpbmcgcHJlZmV0Y2hcbiAgICAgICAgICAgICAgdGhyb3cgZXJyXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBlcnJvcjogZXJyIH1cbiAgICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9LFxuICAgIHByZWZldGNoKHJvdXRlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9Hb29nbGVDaHJvbWVMYWJzL3F1aWNrbGluay9ibG9iLzQ1M2E2NjFmYTFmYTk0MGUyZDJlMDQ0NDUyMzk4ZTM4YzY3YTk4ZmIvc3JjL2luZGV4Lm1qcyNMMTE1LUwxMThcbiAgICAgIC8vIExpY2Vuc2U6IEFwYWNoZSAyLjBcbiAgICAgIGxldCBjblxuICAgICAgaWYgKChjbiA9IChuYXZpZ2F0b3IgYXMgYW55KS5jb25uZWN0aW9uKSkge1xuICAgICAgICAvLyBEb24ndCBwcmVmZXRjaCBpZiB1c2luZyAyRyBvciBpZiBTYXZlLURhdGEgaXMgZW5hYmxlZC5cbiAgICAgICAgaWYgKGNuLnNhdmVEYXRhIHx8IC8yZy8udGVzdChjbi5lZmZlY3RpdmVUeXBlKSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICB9XG4gICAgICByZXR1cm4gZ2V0RmlsZXNGb3JSb3V0ZShhc3NldFByZWZpeCwgcm91dGUpXG4gICAgICAgIC50aGVuKChvdXRwdXQpID0+XG4gICAgICAgICAgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICBjYW5QcmVmZXRjaFxuICAgICAgICAgICAgICA/IG91dHB1dC5zY3JpcHRzLm1hcCgoc2NyaXB0KSA9PiBwcmVmZXRjaFZpYURvbShzY3JpcHQsICdzY3JpcHQnKSlcbiAgICAgICAgICAgICAgOiBbXVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmVxdWVzdElkbGVDYWxsYmFjaygoKSA9PiB0aGlzLmxvYWRSb3V0ZShyb3V0ZSwgdHJ1ZSkuY2F0Y2goKCkgPT4ge30pKVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goXG4gICAgICAgICAgLy8gc3dhbGxvdyBwcmVmZXRjaCBlcnJvcnNcbiAgICAgICAgICAoKSA9PiB7fVxuICAgICAgICApXG4gICAgfSxcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVSb3V0ZUxvYWRlclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/route-loader.js\n"); - -/***/ }), - -/***/ "./node_modules/next/dist/client/router.js": -/*!*************************************************!*\ - !*** ./node_modules/next/dist/client/router.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nvar _construct = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/construct */ \"./node_modules/next/node_modules/@babel/runtime/helpers/construct.js\");\n\nvar _s = $RefreshSig$();\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nvar _interopRequireWildcard = __webpack_require__(/*! @babel/runtime/helpers/interopRequireWildcard */ \"./node_modules/next/node_modules/@babel/runtime/helpers/interopRequireWildcard.js\");\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/next/node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nexports.__esModule = true;\nexports.useRouter = useRouter;\nexports.makePublicRouterInstance = makePublicRouterInstance;\nexports.createRouter = exports.withRouter = exports[\"default\"] = void 0;\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _router2 = _interopRequireWildcard(__webpack_require__(/*! ../next-server/lib/router/router */ \"./node_modules/next/dist/next-server/lib/router/router.js\"));\n\nexports.Router = _router2[\"default\"];\nexports.NextRouter = _router2.NextRouter;\n\nvar _routerContext = __webpack_require__(/*! ../next-server/lib/router-context */ \"./node_modules/next/dist/next-server/lib/router-context.js\");\n\nvar _withRouter = _interopRequireDefault(__webpack_require__(/*! ./with-router */ \"./node_modules/next/dist/client/with-router.js\"));\n\nexports.withRouter = _withRouter[\"default\"];\n/* global window */\n\nvar singletonRouter = {\n router: null,\n // holds the actual router instance\n readyCallbacks: [],\n ready: function ready(cb) {\n if (this.router) return cb();\n\n if (true) {\n this.readyCallbacks.push(cb);\n }\n }\n}; // Create public properties and methods of the router in the singletonRouter\n\nvar urlPropertyFields = ['pathname', 'route', 'query', 'asPath', 'components', 'isFallback', 'basePath', 'locale', 'locales', 'defaultLocale', 'isReady', 'isPreview', 'isLocaleDomain'];\nvar routerEvents = ['routeChangeStart', 'beforeHistoryChange', 'routeChangeComplete', 'routeChangeError', 'hashChangeStart', 'hashChangeComplete'];\nvar coreMethodFields = ['push', 'replace', 'reload', 'back', 'prefetch', 'beforePopState']; // Events is a static property on the router, the router doesn't have to be initialized to use it\n\nObject.defineProperty(singletonRouter, 'events', {\n get: function get() {\n return _router2[\"default\"].events;\n }\n});\nurlPropertyFields.forEach(function (field) {\n // Here we need to use Object.defineProperty because, we need to return\n // the property assigned to the actual router\n // The value might get changed as we change routes and this is the\n // proper way to access it\n Object.defineProperty(singletonRouter, field, {\n get: function get() {\n var router = getRouter();\n return router[field];\n }\n });\n});\ncoreMethodFields.forEach(function (field) {\n // We don't really know the types here, so we add them later instead\n ;\n\n singletonRouter[field] = function () {\n var router = getRouter();\n return router[field].apply(router, arguments);\n };\n});\nrouterEvents.forEach(function (event) {\n singletonRouter.ready(function () {\n _router2[\"default\"].events.on(event, function () {\n var eventField = \"on\".concat(event.charAt(0).toUpperCase()).concat(event.substring(1));\n var _singletonRouter = singletonRouter;\n\n if (_singletonRouter[eventField]) {\n try {\n _singletonRouter[eventField].apply(_singletonRouter, arguments);\n } catch (err) {\n console.error(\"Error when running the Router event: \".concat(eventField));\n console.error(\"\".concat(err.message, \"\\n\").concat(err.stack));\n }\n }\n });\n });\n});\n\nfunction getRouter() {\n if (!singletonRouter.router) {\n var message = 'No router instance found.\\n' + 'You should only use \"next/router\" inside the client side of your app.\\n';\n throw new Error(message);\n }\n\n return singletonRouter.router;\n} // Export the singletonRouter and this is the public API.\n\n\nvar _default = singletonRouter; // Reexport the withRoute HOC\n\nexports[\"default\"] = _default;\n\nfunction useRouter() {\n _s();\n\n return _react[\"default\"].useContext(_routerContext.RouterContext);\n} // INTERNAL APIS\n// -------------\n// (do not use following exports inside the app)\n// Create a router and assign it as the singleton instance.\n// This is used in client side when we are initilizing the app.\n// This should **not** use inside the server.\n\n\n_s(useRouter, \"gDsCjeeItUuvgOWf1v4qoK9RF6k=\");\n\nvar createRouter = function createRouter() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n singletonRouter.router = _construct(_router2[\"default\"], args);\n singletonRouter.readyCallbacks.forEach(function (cb) {\n return cb();\n });\n singletonRouter.readyCallbacks = [];\n return singletonRouter.router;\n}; // This function is used to create the `withRouter` router instance\n\n\nexports.createRouter = createRouter;\n\nfunction makePublicRouterInstance(router) {\n var _router = router;\n var instance = {};\n\n var _iterator = _createForOfIteratorHelper(urlPropertyFields),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var property = _step.value;\n\n if (typeof _router[property] === 'object') {\n instance[property] = Object.assign(Array.isArray(_router[property]) ? [] : {}, _router[property]); // makes sure query is not stateful\n\n continue;\n }\n\n instance[property] = _router[property];\n } // Events is a static property on the router, the router doesn't have to be initialized to use it\n\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n instance.events = _router2[\"default\"].events;\n coreMethodFields.forEach(function (field) {\n instance[field] = function () {\n return _router[field].apply(_router, arguments);\n };\n });\n return instance;\n}\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../compiled/webpack/module.js */ \"./node_modules/next/dist/compiled/webpack/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL2NsaWVudC9yb3V0ZXIudHM/MDZmZiJdLCJuYW1lcyI6WyJzaW5nbGV0b25Sb3V0ZXIiLCJyb3V0ZXIiLCJyZWFkeUNhbGxiYWNrcyIsInJlYWR5IiwiY2IiLCJ1cmxQcm9wZXJ0eUZpZWxkcyIsInJvdXRlckV2ZW50cyIsImNvcmVNZXRob2RGaWVsZHMiLCJPYmplY3QiLCJnZXQiLCJSb3V0ZXIiLCJmaWVsZCIsImdldFJvdXRlciIsImV2ZW50IiwiZXZlbnRGaWVsZCIsIl9zaW5nbGV0b25Sb3V0ZXIiLCJjb25zb2xlIiwiZXJyIiwibWVzc2FnZSIsIlJlYWN0IiwiUm91dGVyQ29udGV4dCIsImNyZWF0ZVJvdXRlciIsIl9yb3V0ZXIiLCJpbnN0YW5jZSIsIkFycmF5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTs7QUFDQTs7Ozs7QUFDQTs7QUF5SEE7OztBQTVIQTs7QUFtQkEsSUFBTUEsZUFBb0MsR0FBRztBQUMzQ0MsUUFBTSxFQURxQztBQUM3QjtBQUNkQyxnQkFBYyxFQUY2QjtBQUczQ0MsT0FIMkMsaUJBR3RDLEVBSHNDLEVBR3JCO0FBQ3BCLFFBQUksS0FBSixRQUFpQixPQUFPQyxFQUFQOztBQUNqQixjQUFtQztBQUNqQztBQUVIO0FBUkg7QUFBNkMsQ0FBN0MsQyxDQVdBOztBQUNBLElBQU1DLGlCQUFpQixHQUFHLCtJQUExQixnQkFBMEIsQ0FBMUI7QUFlQSxJQUFNQyxZQUFZLEdBQUcsMEdBQXJCLG9CQUFxQixDQUFyQjtBQVFBLElBQU1DLGdCQUFnQixHQUFHLGtEQUF6QixnQkFBeUIsQ0FBekIsQyxDQVNBOztBQUNBQyxNQUFNLENBQU5BLDBDQUFpRDtBQUMvQ0MsS0FEK0MsaUJBQ3pDO0FBQ0osV0FBT0Msb0JBQVA7QUFGSkY7QUFBaUQsQ0FBakRBO0FBTUFILGlCQUFpQixDQUFqQkEsUUFBMkJNLGVBQUQsRUFBbUI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQUgsUUFB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ZDtBQURGQztBQURGaEI7QUFNQTtBQUNEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvcm91dGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsIHdpbmRvdyAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFJvdXRlciwgeyBOZXh0Um91dGVyIH0gZnJvbSAnLi4vbmV4dC1zZXJ2ZXIvbGliL3JvdXRlci9yb3V0ZXInXG5pbXBvcnQgeyBSb3V0ZXJDb250ZXh0IH0gZnJvbSAnLi4vbmV4dC1zZXJ2ZXIvbGliL3JvdXRlci1jb250ZXh0J1xuXG50eXBlIENsYXNzQXJndW1lbnRzPFQ+ID0gVCBleHRlbmRzIG5ldyAoLi4uYXJnczogaW5mZXIgVSkgPT4gYW55ID8gVSA6IGFueVxuXG50eXBlIFJvdXRlckFyZ3MgPSBDbGFzc0FyZ3VtZW50czx0eXBlb2YgUm91dGVyPlxuXG50eXBlIFNpbmdsZXRvblJvdXRlckJhc2UgPSB7XG4gIHJvdXRlcjogUm91dGVyIHwgbnVsbFxuICByZWFkeUNhbGxiYWNrczogQXJyYXk8KCkgPT4gYW55PlxuICByZWFkeShjYjogKCkgPT4gYW55KTogdm9pZFxufVxuXG5leHBvcnQgeyBSb3V0ZXIsIE5leHRSb3V0ZXIgfVxuXG5leHBvcnQgdHlwZSBTaW5nbGV0b25Sb3V0ZXIgPSBTaW5nbGV0b25Sb3V0ZXJCYXNlICYgTmV4dFJvdXRlclxuXG5jb25zdCBzaW5nbGV0b25Sb3V0ZXI6IFNpbmdsZXRvblJvdXRlckJhc2UgPSB7XG4gIHJvdXRlcjogbnVsbCwgLy8gaG9sZHMgdGhlIGFjdHVhbCByb3V0ZXIgaW5zdGFuY2VcbiAgcmVhZHlDYWxsYmFja3M6IFtdLFxuICByZWFkeShjYjogKCkgPT4gdm9pZCkge1xuICAgIGlmICh0aGlzLnJvdXRlcikgcmV0dXJuIGNiKClcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMucmVhZHlDYWxsYmFja3MucHVzaChjYilcbiAgICB9XG4gIH0sXG59XG5cbi8vIENyZWF0ZSBwdWJsaWMgcHJvcGVydGllcyBhbmQgbWV0aG9kcyBvZiB0aGUgcm91dGVyIGluIHRoZSBzaW5nbGV0b25Sb3V0ZXJcbmNvbnN0IHVybFByb3BlcnR5RmllbGRzID0gW1xuICAncGF0aG5hbWUnLFxuICAncm91dGUnLFxuICAncXVlcnknLFxuICAnYXNQYXRoJyxcbiAgJ2NvbXBvbmVudHMnLFxuICAnaXNGYWxsYmFjaycsXG4gICdiYXNlUGF0aCcsXG4gICdsb2NhbGUnLFxuICAnbG9jYWxlcycsXG4gICdkZWZhdWx0TG9jYWxlJyxcbiAgJ2lzUmVhZHknLFxuICAnaXNQcmV2aWV3JyxcbiAgJ2lzTG9jYWxlRG9tYWluJyxcbl1cbmNvbnN0IHJvdXRlckV2ZW50cyA9IFtcbiAgJ3JvdXRlQ2hhbmdlU3RhcnQnLFxuICAnYmVmb3JlSGlzdG9yeUNoYW5nZScsXG4gICdyb3V0ZUNoYW5nZUNvbXBsZXRlJyxcbiAgJ3JvdXRlQ2hhbmdlRXJyb3InLFxuICAnaGFzaENoYW5nZVN0YXJ0JyxcbiAgJ2hhc2hDaGFuZ2VDb21wbGV0ZScsXG5dXG5jb25zdCBjb3JlTWV0aG9kRmllbGRzID0gW1xuICAncHVzaCcsXG4gICdyZXBsYWNlJyxcbiAgJ3JlbG9hZCcsXG4gICdiYWNrJyxcbiAgJ3ByZWZldGNoJyxcbiAgJ2JlZm9yZVBvcFN0YXRlJyxcbl1cblxuLy8gRXZlbnRzIGlzIGEgc3RhdGljIHByb3BlcnR5IG9uIHRoZSByb3V0ZXIsIHRoZSByb3V0ZXIgZG9lc24ndCBoYXZlIHRvIGJlIGluaXRpYWxpemVkIHRvIHVzZSBpdFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KHNpbmdsZXRvblJvdXRlciwgJ2V2ZW50cycsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiBSb3V0ZXIuZXZlbnRzXG4gIH0sXG59KVxuXG51cmxQcm9wZXJ0eUZpZWxkcy5mb3JFYWNoKChmaWVsZDogc3RyaW5nKSA9PiB7XG4gIC8vIEhlcmUgd2UgbmVlZCB0byB1c2UgT2JqZWN0LmRlZmluZVByb3BlcnR5IGJlY2F1c2UsIHdlIG5lZWQgdG8gcmV0dXJuXG4gIC8vIHRoZSBwcm9wZXJ0eSBhc3NpZ25lZCB0byB0aGUgYWN0dWFsIHJvdXRlclxuICAvLyBUaGUgdmFsdWUgbWlnaHQgZ2V0IGNoYW5nZWQgYXMgd2UgY2hhbmdlIHJvdXRlcyBhbmQgdGhpcyBpcyB0aGVcbiAgLy8gcHJvcGVyIHdheSB0byBhY2Nlc3MgaXRcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNpbmdsZXRvblJvdXRlciwgZmllbGQsIHtcbiAgICBnZXQoKSB7XG4gICAgICBjb25zdCByb3V0ZXIgPSBnZXRSb3V0ZXIoKSBhcyBhbnlcbiAgICAgIHJldHVybiByb3V0ZXJbZmllbGRdIGFzIHN0cmluZ1xuICAgIH0sXG4gIH0pXG59KVxuXG5jb3JlTWV0aG9kRmllbGRzLmZvckVhY2goKGZpZWxkOiBzdHJpbmcpID0+IHtcbiAgLy8gV2UgZG9uJ3QgcmVhbGx5IGtub3cgdGhlIHR5cGVzIGhlcmUsIHNvIHdlIGFkZCB0aGVtIGxhdGVyIGluc3RlYWRcbiAgOyhzaW5nbGV0b25Sb3V0ZXIgYXMgYW55KVtmaWVsZF0gPSAoLi4uYXJnczogYW55W10pID0+IHtcbiAgICBjb25zdCByb3V0ZXIgPSBnZXRSb3V0ZXIoKSBhcyBhbnlcbiAgICByZXR1cm4gcm91dGVyW2ZpZWxkXSguLi5hcmdzKVxuICB9XG59KVxuXG5yb3V0ZXJFdmVudHMuZm9yRWFjaCgoZXZlbnQ6IHN0cmluZykgPT4ge1xuICBzaW5nbGV0b25Sb3V0ZXIucmVhZHkoKCkgPT4ge1xuICAgIFJvdXRlci5ldmVudHMub24oZXZlbnQsICguLi5hcmdzKSA9PiB7XG4gICAgICBjb25zdCBldmVudEZpZWxkID0gYG9uJHtldmVudC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKX0ke2V2ZW50LnN1YnN0cmluZyhcbiAgICAgICAgMVxuICAgICAgKX1gXG4gICAgICBjb25zdCBfc2luZ2xldG9uUm91dGVyID0gc2luZ2xldG9uUm91dGVyIGFzIGFueVxuICAgICAgaWYgKF9zaW5nbGV0b25Sb3V0ZXJbZXZlbnRGaWVsZF0pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBfc2luZ2xldG9uUm91dGVyW2V2ZW50RmllbGRdKC4uLmFyZ3MpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIHdoZW4gcnVubmluZyB0aGUgUm91dGVyIGV2ZW50OiAke2V2ZW50RmllbGR9YClcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGAke2Vyci5tZXNzYWdlfVxcbiR7ZXJyLnN0YWNrfWApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9KVxufSlcblxuZnVuY3Rpb24gZ2V0Um91dGVyKCk6IFJvdXRlciB7XG4gIGlmICghc2luZ2xldG9uUm91dGVyLnJvdXRlcikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPVxuICAgICAgJ05vIHJvdXRlciBpbnN0YW5jZSBmb3VuZC5cXG4nICtcbiAgICAgICdZb3Ugc2hvdWxkIG9ubHkgdXNlIFwibmV4dC9yb3V0ZXJcIiBpbnNpZGUgdGhlIGNsaWVudCBzaWRlIG9mIHlvdXIgYXBwLlxcbidcbiAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSlcbiAgfVxuICByZXR1cm4gc2luZ2xldG9uUm91dGVyLnJvdXRlclxufVxuXG4vLyBFeHBvcnQgdGhlIHNpbmdsZXRvblJvdXRlciBhbmQgdGhpcyBpcyB0aGUgcHVibGljIEFQSS5cbmV4cG9ydCBkZWZhdWx0IHNpbmdsZXRvblJvdXRlciBhcyBTaW5nbGV0b25Sb3V0ZXJcblxuLy8gUmVleHBvcnQgdGhlIHdpdGhSb3V0ZSBIT0NcbmV4cG9ydCB7IGRlZmF1bHQgYXMgd2l0aFJvdXRlciB9IGZyb20gJy4vd2l0aC1yb3V0ZXInXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSb3V0ZXIoKTogTmV4dFJvdXRlciB7XG4gIHJldHVybiBSZWFjdC51c2VDb250ZXh0KFJvdXRlckNvbnRleHQpXG59XG5cbi8vIElOVEVSTkFMIEFQSVNcbi8vIC0tLS0tLS0tLS0tLS1cbi8vIChkbyBub3QgdXNlIGZvbGxvd2luZyBleHBvcnRzIGluc2lkZSB0aGUgYXBwKVxuXG4vLyBDcmVhdGUgYSByb3V0ZXIgYW5kIGFzc2lnbiBpdCBhcyB0aGUgc2luZ2xldG9uIGluc3RhbmNlLlxuLy8gVGhpcyBpcyB1c2VkIGluIGNsaWVudCBzaWRlIHdoZW4gd2UgYXJlIGluaXRpbGl6aW5nIHRoZSBhcHAuXG4vLyBUaGlzIHNob3VsZCAqKm5vdCoqIHVzZSBpbnNpZGUgdGhlIHNlcnZlci5cbmV4cG9ydCBjb25zdCBjcmVhdGVSb3V0ZXIgPSAoLi4uYXJnczogUm91dGVyQXJncyk6IFJvdXRlciA9PiB7XG4gIHNpbmdsZXRvblJvdXRlci5yb3V0ZXIgPSBuZXcgUm91dGVyKC4uLmFyZ3MpXG4gIHNpbmdsZXRvblJvdXRlci5yZWFkeUNhbGxiYWNrcy5mb3JFYWNoKChjYikgPT4gY2IoKSlcbiAgc2luZ2xldG9uUm91dGVyLnJlYWR5Q2FsbGJhY2tzID0gW11cblxuICByZXR1cm4gc2luZ2xldG9uUm91dGVyLnJvdXRlclxufVxuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY3JlYXRlIHRoZSBgd2l0aFJvdXRlcmAgcm91dGVyIGluc3RhbmNlXG5leHBvcnQgZnVuY3Rpb24gbWFrZVB1YmxpY1JvdXRlckluc3RhbmNlKHJvdXRlcjogUm91dGVyKTogTmV4dFJvdXRlciB7XG4gIGNvbnN0IF9yb3V0ZXIgPSByb3V0ZXIgYXMgYW55XG4gIGNvbnN0IGluc3RhbmNlID0ge30gYXMgYW55XG5cbiAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiB1cmxQcm9wZXJ0eUZpZWxkcykge1xuICAgIGlmICh0eXBlb2YgX3JvdXRlcltwcm9wZXJ0eV0gPT09ICdvYmplY3QnKSB7XG4gICAgICBpbnN0YW5jZVtwcm9wZXJ0eV0gPSBPYmplY3QuYXNzaWduKFxuICAgICAgICBBcnJheS5pc0FycmF5KF9yb3V0ZXJbcHJvcGVydHldKSA/IFtdIDoge30sXG4gICAgICAgIF9yb3V0ZXJbcHJvcGVydHldXG4gICAgICApIC8vIG1ha2VzIHN1cmUgcXVlcnkgaXMgbm90IHN0YXRlZnVsXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGluc3RhbmNlW3Byb3BlcnR5XSA9IF9yb3V0ZXJbcHJvcGVydHldXG4gIH1cblxuICAvLyBFdmVudHMgaXMgYSBzdGF0aWMgcHJvcGVydHkgb24gdGhlIHJvdXRlciwgdGhlIHJvdXRlciBkb2Vzbid0IGhhdmUgdG8gYmUgaW5pdGlhbGl6ZWQgdG8gdXNlIGl0XG4gIGluc3RhbmNlLmV2ZW50cyA9IFJvdXRlci5ldmVudHNcblxuICBjb3JlTWV0aG9kRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgaW5zdGFuY2VbZmllbGRdID0gKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICByZXR1cm4gX3JvdXRlcltmaWVsZF0oLi4uYXJncylcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIGluc3RhbmNlXG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/router.js\n"); - -/***/ }), - -/***/ "./node_modules/next/dist/client/use-intersection.js": -/*!***********************************************************!*\ - !*** ./node_modules/next/dist/client/use-intersection.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nvar _slicedToArray = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/slicedToArray */ \"./node_modules/next/node_modules/@babel/runtime/helpers/slicedToArray.js\");\n\nexports.__esModule = true;\nexports.useIntersection = useIntersection;\n\nvar _react = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n\nvar _requestIdleCallback = __webpack_require__(/*! ./request-idle-callback */ \"./node_modules/next/dist/client/request-idle-callback.js\");\n\nvar hasIntersectionObserver = typeof IntersectionObserver !== 'undefined';\n\nfunction useIntersection(_ref) {\n var rootMargin = _ref.rootMargin,\n disabled = _ref.disabled;\n var isDisabled = disabled || !hasIntersectionObserver;\n var unobserve = (0, _react.useRef)();\n\n var _ref2 = (0, _react.useState)(false),\n _ref3 = _slicedToArray(_ref2, 2),\n visible = _ref3[0],\n setVisible = _ref3[1];\n\n var setRef = (0, _react.useCallback)(function (el) {\n if (unobserve.current) {\n unobserve.current();\n unobserve.current = undefined;\n }\n\n if (isDisabled || visible) return;\n\n if (el && el.tagName) {\n unobserve.current = observe(el, function (isVisible) {\n return isVisible && setVisible(isVisible);\n }, {\n rootMargin: rootMargin\n });\n }\n }, [isDisabled, rootMargin, visible]);\n (0, _react.useEffect)(function () {\n if (!hasIntersectionObserver) {\n if (!visible) {\n var idleCallback = (0, _requestIdleCallback.requestIdleCallback)(function () {\n return setVisible(true);\n });\n return function () {\n return (0, _requestIdleCallback.cancelIdleCallback)(idleCallback);\n };\n }\n }\n }, [visible]);\n return [setRef, visible];\n}\n\nfunction observe(element, callback, options) {\n var _createObserver = createObserver(options),\n id = _createObserver.id,\n observer = _createObserver.observer,\n elements = _createObserver.elements;\n\n elements.set(element, callback);\n observer.observe(element);\n return function unobserve() {\n elements[\"delete\"](element);\n observer.unobserve(element); // Destroy observer when there's nothing left to watch:\n\n if (elements.size === 0) {\n observer.disconnect();\n observers[\"delete\"](id);\n }\n };\n}\n\nvar observers = new Map();\n\nfunction createObserver(options) {\n var id = options.rootMargin || '';\n var instance = observers.get(id);\n\n if (instance) {\n return instance;\n }\n\n var elements = new Map();\n var observer = new IntersectionObserver(function (entries) {\n entries.forEach(function (entry) {\n var callback = elements.get(entry.target);\n var isVisible = entry.isIntersecting || entry.intersectionRatio > 0;\n\n if (callback && isVisible) {\n callback(isVisible);\n }\n });\n }, options);\n observers.set(id, instance = {\n id: id,\n observer: observer,\n elements: elements\n });\n return instance;\n}\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../compiled/webpack/module.js */ \"./node_modules/next/dist/compiled/webpack/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL2NsaWVudC91c2UtaW50ZXJzZWN0aW9uLnRzeD85MjhiIl0sIm5hbWVzIjpbImhhc0ludGVyc2VjdGlvbk9ic2VydmVyIiwiaXNEaXNhYmxlZCIsImRpc2FibGVkIiwidW5vYnNlcnZlIiwic2V0UmVmIiwiZWwiLCJvYnNlcnZlIiwiaXNWaXNpYmxlIiwic2V0VmlzaWJsZSIsInJvb3RNYXJnaW4iLCJpZGxlQ2FsbGJhY2siLCJjcmVhdGVPYnNlcnZlciIsImVsZW1lbnRzIiwib2JzZXJ2ZXIiLCJvYnNlcnZlcnMiLCJpZCIsIm9wdGlvbnMiLCJpbnN0YW5jZSIsImVudHJpZXMiLCJlbnRyeSIsImNhbGxiYWNrIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBY0EsSUFBTUEsdUJBQXVCLEdBQUcsZ0NBQWhDOztBQUVPLCtCQUdxRDtBQUFBLE1BSFQsVUFHUyxRQUhULFVBR1M7QUFBQSxNQUhyRCxRQUdxRCxRQUhyRCxRQUdxRDtBQUMxRCxNQUFNQyxVQUFtQixHQUFHQyxRQUFRLElBQUksQ0FBeEM7QUFFQSxNQUFNQyxTQUFTLEdBQUcsV0FBbEIsTUFBa0IsR0FBbEI7O0FBSDBELGNBSTVCLHFCQUE5QixLQUE4QixDQUo0QjtBQUFBO0FBQUEsTUFJcEQsT0FKb0Q7QUFBQSxNQUlwRCxVQUpvRDs7QUFNMUQsTUFBTUMsTUFBTSxHQUFHLHdCQUNaQyxZQUFELEVBQWtCO0FBQ2hCLFFBQUlGLFNBQVMsQ0FBYixTQUF1QjtBQUNyQkEsZUFBUyxDQUFUQTtBQUNBQSxlQUFTLENBQVRBO0FBR0Y7O0FBQUEsUUFBSUYsVUFBVSxJQUFkLFNBQTJCOztBQUUzQixRQUFJSSxFQUFFLElBQUlBLEVBQUUsQ0FBWixTQUFzQjtBQUNwQkYsZUFBUyxDQUFUQSxVQUFvQkcsT0FBTyxLQUV4QkMsbUJBQUQ7QUFBQSxlQUFlQSxTQUFTLElBQUlDLFVBQVUsQ0FGYixTQUVhLENBQXRDO0FBQUEsT0FGeUIsRUFHekI7QUFBRUMsa0JBSEpOLEVBR0lNO0FBQUYsT0FIeUIsQ0FBM0JOO0FBTUg7QUFoQlksS0FpQmIseUJBakJGLE9BaUJFLENBakJhLENBQWY7QUFvQkEsd0JBQVUsWUFBTTtBQUNkLFFBQUksQ0FBSix5QkFBOEI7QUFDNUIsVUFBSSxDQUFKLFNBQWM7QUFDWixZQUFNTyxZQUFZLEdBQUcsOENBQW9CO0FBQUEsaUJBQU1GLFVBQVUsQ0FBekQsSUFBeUQsQ0FBaEI7QUFBQSxTQUFwQixDQUFyQjtBQUNBLGVBQU87QUFBQSxpQkFBTSw2Q0FBYixZQUFhLENBQU47QUFBQSxTQUFQO0FBRUg7QUFDRjtBQVBELEtBT0csQ0FQSCxPQU9HLENBUEg7QUFTQSxTQUFPLFNBQVAsT0FBTyxDQUFQO0FBR0Y7O0FBQUEsNkNBSWM7QUFBQSx3QkFDdUJHLGNBQWMsQ0FBakQsT0FBaUQsQ0FEckM7QUFBQSxNQUNOLEVBRE0sbUJBQ04sRUFETTtBQUFBLE1BQ04sUUFETSxtQkFDTixRQURNO0FBQUEsTUFDTixRQURNLG1CQUNOLFFBRE07O0FBRVpDLFVBQVEsQ0FBUkE7QUFFQUMsVUFBUSxDQUFSQTtBQUNBLFNBQU8scUJBQTJCO0FBQ2hDRDtBQUNBQyxZQUFRLENBQVJBLG1CQUZnQyxDQUloQzs7QUFDQSxRQUFJRCxRQUFRLENBQVJBLFNBQUosR0FBeUI7QUFDdkJDLGNBQVEsQ0FBUkE7QUFDQUM7QUFFSDtBQVREO0FBWUY7O0FBQUEsSUFBTUEsU0FBUyxHQUFHLElBQWxCLEdBQWtCLEVBQWxCOztBQUNBLGlDQUF3RTtBQUN0RSxNQUFNQyxFQUFFLEdBQUdDLE9BQU8sQ0FBUEEsY0FBWDtBQUNBLE1BQUlDLFFBQVEsR0FBR0gsU0FBUyxDQUFUQSxJQUFmLEVBQWVBLENBQWY7O0FBQ0EsZ0JBQWM7QUFDWjtBQUdGOztBQUFBLE1BQU1GLFFBQVEsR0FBRyxJQUFqQixHQUFpQixFQUFqQjtBQUNBLE1BQU1DLFFBQVEsR0FBRyx5QkFBMEJLLGlCQUFELEVBQWE7QUFDckRBLFdBQU8sQ0FBUEEsUUFBaUJDLGVBQUQsRUFBVztBQUN6QixVQUFNQyxRQUFRLEdBQUdSLFFBQVEsQ0FBUkEsSUFBYU8sS0FBSyxDQUFuQyxNQUFpQlAsQ0FBakI7QUFDQSxVQUFNTCxTQUFTLEdBQUdZLEtBQUssQ0FBTEEsa0JBQXdCQSxLQUFLLENBQUxBLG9CQUExQzs7QUFDQSxVQUFJQyxRQUFRLElBQVosV0FBMkI7QUFDekJBLGdCQUFRLENBQVJBLFNBQVEsQ0FBUkE7QUFFSDtBQU5ERjtBQURlLEtBQWpCLE9BQWlCLENBQWpCO0FBVUFKLFdBQVMsQ0FBVEEsUUFFR0csUUFBUSxHQUFHO0FBQ1ZGLE1BRFUsRUFDVkEsRUFEVTtBQUVWRixZQUZVLEVBRVZBLFFBRlU7QUFHVkQsWUFMSkUsRUFLSUY7QUFIVSxHQUZkRTtBQVFBO0FBQ0QiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC91c2UtaW50ZXJzZWN0aW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHtcbiAgcmVxdWVzdElkbGVDYWxsYmFjayxcbiAgY2FuY2VsSWRsZUNhbGxiYWNrLFxufSBmcm9tICcuL3JlcXVlc3QtaWRsZS1jYWxsYmFjaydcblxudHlwZSBVc2VJbnRlcnNlY3Rpb25PYnNlcnZlckluaXQgPSBQaWNrPEludGVyc2VjdGlvbk9ic2VydmVySW5pdCwgJ3Jvb3RNYXJnaW4nPlxudHlwZSBVc2VJbnRlcnNlY3Rpb24gPSB7IGRpc2FibGVkPzogYm9vbGVhbiB9ICYgVXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXJJbml0XG50eXBlIE9ic2VydmVDYWxsYmFjayA9IChpc1Zpc2libGU6IGJvb2xlYW4pID0+IHZvaWRcbnR5cGUgT2JzZXJ2ZXIgPSB7XG4gIGlkOiBzdHJpbmdcbiAgb2JzZXJ2ZXI6IEludGVyc2VjdGlvbk9ic2VydmVyXG4gIGVsZW1lbnRzOiBNYXA8RWxlbWVudCwgT2JzZXJ2ZUNhbGxiYWNrPlxufVxuXG5jb25zdCBoYXNJbnRlcnNlY3Rpb25PYnNlcnZlciA9IHR5cGVvZiBJbnRlcnNlY3Rpb25PYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCdcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUludGVyc2VjdGlvbjxUIGV4dGVuZHMgRWxlbWVudD4oe1xuICByb290TWFyZ2luLFxuICBkaXNhYmxlZCxcbn06IFVzZUludGVyc2VjdGlvbik6IFsoZWxlbWVudDogVCB8IG51bGwpID0+IHZvaWQsIGJvb2xlYW5dIHtcbiAgY29uc3QgaXNEaXNhYmxlZDogYm9vbGVhbiA9IGRpc2FibGVkIHx8ICFoYXNJbnRlcnNlY3Rpb25PYnNlcnZlclxuXG4gIGNvbnN0IHVub2JzZXJ2ZSA9IHVzZVJlZjxGdW5jdGlvbj4oKVxuICBjb25zdCBbdmlzaWJsZSwgc2V0VmlzaWJsZV0gPSB1c2VTdGF0ZShmYWxzZSlcblxuICBjb25zdCBzZXRSZWYgPSB1c2VDYWxsYmFjayhcbiAgICAoZWw6IFQgfCBudWxsKSA9PiB7XG4gICAgICBpZiAodW5vYnNlcnZlLmN1cnJlbnQpIHtcbiAgICAgICAgdW5vYnNlcnZlLmN1cnJlbnQoKVxuICAgICAgICB1bm9ic2VydmUuY3VycmVudCA9IHVuZGVmaW5lZFxuICAgICAgfVxuXG4gICAgICBpZiAoaXNEaXNhYmxlZCB8fCB2aXNpYmxlKSByZXR1cm5cblxuICAgICAgaWYgKGVsICYmIGVsLnRhZ05hbWUpIHtcbiAgICAgICAgdW5vYnNlcnZlLmN1cnJlbnQgPSBvYnNlcnZlKFxuICAgICAgICAgIGVsLFxuICAgICAgICAgIChpc1Zpc2libGUpID0+IGlzVmlzaWJsZSAmJiBzZXRWaXNpYmxlKGlzVmlzaWJsZSksXG4gICAgICAgICAgeyByb290TWFyZ2luIH1cbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2lzRGlzYWJsZWQsIHJvb3RNYXJnaW4sIHZpc2libGVdXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaGFzSW50ZXJzZWN0aW9uT2JzZXJ2ZXIpIHtcbiAgICAgIGlmICghdmlzaWJsZSkge1xuICAgICAgICBjb25zdCBpZGxlQ2FsbGJhY2sgPSByZXF1ZXN0SWRsZUNhbGxiYWNrKCgpID0+IHNldFZpc2libGUodHJ1ZSkpXG4gICAgICAgIHJldHVybiAoKSA9PiBjYW5jZWxJZGxlQ2FsbGJhY2soaWRsZUNhbGxiYWNrKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW3Zpc2libGVdKVxuXG4gIHJldHVybiBbc2V0UmVmLCB2aXNpYmxlXVxufVxuXG5mdW5jdGlvbiBvYnNlcnZlKFxuICBlbGVtZW50OiBFbGVtZW50LFxuICBjYWxsYmFjazogT2JzZXJ2ZUNhbGxiYWNrLFxuICBvcHRpb25zOiBVc2VJbnRlcnNlY3Rpb25PYnNlcnZlckluaXRcbik6ICgpID0+IHZvaWQge1xuICBjb25zdCB7IGlkLCBvYnNlcnZlciwgZWxlbWVudHMgfSA9IGNyZWF0ZU9ic2VydmVyKG9wdGlvbnMpXG4gIGVsZW1lbnRzLnNldChlbGVtZW50LCBjYWxsYmFjaylcblxuICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQpXG4gIHJldHVybiBmdW5jdGlvbiB1bm9ic2VydmUoKTogdm9pZCB7XG4gICAgZWxlbWVudHMuZGVsZXRlKGVsZW1lbnQpXG4gICAgb2JzZXJ2ZXIudW5vYnNlcnZlKGVsZW1lbnQpXG5cbiAgICAvLyBEZXN0cm95IG9ic2VydmVyIHdoZW4gdGhlcmUncyBub3RoaW5nIGxlZnQgdG8gd2F0Y2g6XG4gICAgaWYgKGVsZW1lbnRzLnNpemUgPT09IDApIHtcbiAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKVxuICAgICAgb2JzZXJ2ZXJzLmRlbGV0ZShpZClcbiAgICB9XG4gIH1cbn1cblxuY29uc3Qgb2JzZXJ2ZXJzID0gbmV3IE1hcDxzdHJpbmcsIE9ic2VydmVyPigpXG5mdW5jdGlvbiBjcmVhdGVPYnNlcnZlcihvcHRpb25zOiBVc2VJbnRlcnNlY3Rpb25PYnNlcnZlckluaXQpOiBPYnNlcnZlciB7XG4gIGNvbnN0IGlkID0gb3B0aW9ucy5yb290TWFyZ2luIHx8ICcnXG4gIGxldCBpbnN0YW5jZSA9IG9ic2VydmVycy5nZXQoaWQpXG4gIGlmIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBpbnN0YW5jZVxuICB9XG5cbiAgY29uc3QgZWxlbWVudHMgPSBuZXcgTWFwPEVsZW1lbnQsIE9ic2VydmVDYWxsYmFjaz4oKVxuICBjb25zdCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoZW50cmllcykgPT4ge1xuICAgIGVudHJpZXMuZm9yRWFjaCgoZW50cnkpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gZWxlbWVudHMuZ2V0KGVudHJ5LnRhcmdldClcbiAgICAgIGNvbnN0IGlzVmlzaWJsZSA9IGVudHJ5LmlzSW50ZXJzZWN0aW5nIHx8IGVudHJ5LmludGVyc2VjdGlvblJhdGlvID4gMFxuICAgICAgaWYgKGNhbGxiYWNrICYmIGlzVmlzaWJsZSkge1xuICAgICAgICBjYWxsYmFjayhpc1Zpc2libGUpXG4gICAgICB9XG4gICAgfSlcbiAgfSwgb3B0aW9ucylcblxuICBvYnNlcnZlcnMuc2V0KFxuICAgIGlkLFxuICAgIChpbnN0YW5jZSA9IHtcbiAgICAgIGlkLFxuICAgICAgb2JzZXJ2ZXIsXG4gICAgICBlbGVtZW50cyxcbiAgICB9KVxuICApXG4gIHJldHVybiBpbnN0YW5jZVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/use-intersection.js\n"); - -/***/ }), - -/***/ "./node_modules/next/dist/client/with-router.js": -/*!******************************************************!*\ - !*** ./node_modules/next/dist/client/with-router.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/next/node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nexports.__esModule = true;\nexports[\"default\"] = withRouter;\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _router = __webpack_require__(/*! ./router */ \"./node_modules/next/dist/client/router.js\");\n\nfunction withRouter(ComposedComponent) {\n function WithRouterWrapper(props) {\n return /*#__PURE__*/_react[\"default\"].createElement(ComposedComponent, Object.assign({\n router: (0, _router.useRouter)()\n }, props));\n }\n\n WithRouterWrapper.getInitialProps = ComposedComponent.getInitialProps // This is needed to allow checking for custom getInitialProps in _app\n ;\n WithRouterWrapper.origGetInitialProps = ComposedComponent.origGetInitialProps;\n\n if (true) {\n var name = ComposedComponent.displayName || ComposedComponent.name || 'Unknown';\n WithRouterWrapper.displayName = \"withRouter(\".concat(name, \")\");\n }\n\n return WithRouterWrapper;\n}\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../compiled/webpack/module.js */ \"./node_modules/next/dist/compiled/webpack/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL2NsaWVudC93aXRoLXJvdXRlci50c3g/NGZjYiJdLCJuYW1lcyI6WyJDb21wb3NlZENvbXBvbmVudCIsImdldEluaXRpYWxQcm9wcyIsIldpdGhSb3V0ZXJXcmFwcGVyIiwibmFtZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUVBOztBQVdlLHVDQUsrQjtBQUM1QyxvQ0FBb0Q7QUFDbEQsd0JBQU87QUFBbUIsWUFBTSxFQUFFLFlBQTNCLFNBQTJCO0FBQTNCLE9BQVAsS0FBTyxFQUFQO0FBR0Y7O0FBQUEsbUJBQWlCLENBQWpCLGtCQUFvQ0EsaUJBQWlCLENBQUNDLGVBQXRELENBQ0E7QUFEQTtBQUVFQyxtQkFBRCxvQkFBQ0EsR0FBaURGLGlCQUFELENBQWpELG1CQUFDRTs7QUFDRixZQUEyQztBQUN6QyxRQUFNQyxJQUFJLEdBQ1JILGlCQUFpQixDQUFqQkEsZUFBaUNBLGlCQUFpQixDQUFsREEsUUFERjtBQUVBRSxxQkFBaUIsQ0FBakJBO0FBR0Y7O0FBQUE7QUFDRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3dpdGgtcm91dGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgTmV4dENvbXBvbmVudFR5cGUsIE5leHRQYWdlQ29udGV4dCB9IGZyb20gJy4uL25leHQtc2VydmVyL2xpYi91dGlscydcbmltcG9ydCB7IE5leHRSb3V0ZXIsIHVzZVJvdXRlciB9IGZyb20gJy4vcm91dGVyJ1xuXG5leHBvcnQgdHlwZSBXaXRoUm91dGVyUHJvcHMgPSB7XG4gIHJvdXRlcjogTmV4dFJvdXRlclxufVxuXG5leHBvcnQgdHlwZSBFeGNsdWRlUm91dGVyUHJvcHM8UD4gPSBQaWNrPFxuICBQLFxuICBFeGNsdWRlPGtleW9mIFAsIGtleW9mIFdpdGhSb3V0ZXJQcm9wcz5cbj5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gd2l0aFJvdXRlcjxcbiAgUCBleHRlbmRzIFdpdGhSb3V0ZXJQcm9wcyxcbiAgQyA9IE5leHRQYWdlQ29udGV4dFxuPihcbiAgQ29tcG9zZWRDb21wb25lbnQ6IE5leHRDb21wb25lbnRUeXBlPEMsIGFueSwgUD5cbik6IFJlYWN0LkNvbXBvbmVudFR5cGU8RXhjbHVkZVJvdXRlclByb3BzPFA+PiB7XG4gIGZ1bmN0aW9uIFdpdGhSb3V0ZXJXcmFwcGVyKHByb3BzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIDxDb21wb3NlZENvbXBvbmVudCByb3V0ZXI9e3VzZVJvdXRlcigpfSB7Li4ucHJvcHN9IC8+XG4gIH1cblxuICBXaXRoUm91dGVyV3JhcHBlci5nZXRJbml0aWFsUHJvcHMgPSBDb21wb3NlZENvbXBvbmVudC5nZXRJbml0aWFsUHJvcHNcbiAgLy8gVGhpcyBpcyBuZWVkZWQgdG8gYWxsb3cgY2hlY2tpbmcgZm9yIGN1c3RvbSBnZXRJbml0aWFsUHJvcHMgaW4gX2FwcFxuICA7KFdpdGhSb3V0ZXJXcmFwcGVyIGFzIGFueSkub3JpZ0dldEluaXRpYWxQcm9wcyA9IChDb21wb3NlZENvbXBvbmVudCBhcyBhbnkpLm9yaWdHZXRJbml0aWFsUHJvcHNcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBjb25zdCBuYW1lID1cbiAgICAgIENvbXBvc2VkQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvc2VkQ29tcG9uZW50Lm5hbWUgfHwgJ1Vua25vd24nXG4gICAgV2l0aFJvdXRlcldyYXBwZXIuZGlzcGxheU5hbWUgPSBgd2l0aFJvdXRlcigke25hbWV9KWBcbiAgfVxuXG4gIHJldHVybiBXaXRoUm91dGVyV3JhcHBlclxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/with-router.js\n"); - -/***/ }), - -/***/ "./node_modules/next/dist/compiled/webpack/global.js": -/*!***********************************!*\ - !*** (webpack)/webpack/global.js ***! - \***********************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("/* WEBPACK VAR INJECTION */(function(__dirname) {module.exports =\n/******/ (function() { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 149:\n/***/ (function(module) {\n\nvar g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __nccwpck_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(__webpack_module_cache__[moduleId]) {\n/******/ \t\t\treturn __webpack_module_cache__[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\tvar threw = true;\n/******/ \t\ttry {\n/******/ \t\t\t__webpack_modules__[moduleId](module, module.exports, __nccwpck_require__);\n/******/ \t\t\tthrew = false;\n/******/ \t\t} finally {\n/******/ \t\t\tif(threw) delete __webpack_module_cache__[moduleId];\n/******/ \t\t}\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat */\n/******/ \t\n/******/ \t__nccwpck_require__.ab = __dirname + \"/\";/************************************************************************/\n/******/ \t// module exports must be returned from runtime so entry inlining is disabled\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \treturn __nccwpck_require__(149);\n/******/ })()\n;\n/* WEBPACK VAR INJECTION */}.call(this, \"/\"))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLyh3ZWJwYWNrKS93ZWJwYWNrL2dsb2JhbC5qcz8wOTIyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0Esc0JBQXNCO0FBQ3RCOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0Q0FBNEM7O0FBRTVDOzs7QUFHQSxPQUFPOztBQUVQLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRDtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVixDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC93ZWJwYWNrL2dsb2JhbC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbigpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHR2YXIgX193ZWJwYWNrX21vZHVsZXNfXyA9ICh7XG5cbi8qKiovIDE0OTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUpIHtcblxudmFyIGc7XG5cbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXG5nID0gKGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn0pKCk7XG5cbnRyeSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxuXHRnID0gZyB8fCBuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xufSBjYXRjaCAoZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikgZyA9IHdpbmRvdztcbn1cblxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3Ncbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cblxubW9kdWxlLmV4cG9ydHMgPSBnO1xuXG5cbi8qKiovIH0pXG5cbi8qKioqKiovIFx0fSk7XG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fbmNjd3Bja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuLyoqKioqKi8gXHRcdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0dmFyIHRocmV3ID0gdHJ1ZTtcbi8qKioqKiovIFx0XHR0cnkge1xuLyoqKioqKi8gXHRcdFx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX19uY2N3cGNrX3JlcXVpcmVfXyk7XG4vKioqKioqLyBcdFx0XHR0aHJldyA9IGZhbHNlO1xuLyoqKioqKi8gXHRcdH0gZmluYWxseSB7XG4vKioqKioqLyBcdFx0XHRpZih0aHJldykgZGVsZXRlIF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi8gXHRcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9jb21wYXQgKi9cbi8qKioqKiovIFx0XG4vKioqKioqLyBcdF9fbmNjd3Bja19yZXF1aXJlX18uYWIgPSBfX2Rpcm5hbWUgKyBcIi9cIjsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gXHQvLyBtb2R1bGUgZXhwb3J0cyBtdXN0IGJlIHJldHVybmVkIGZyb20gcnVudGltZSBzbyBlbnRyeSBpbmxpbmluZyBpcyBkaXNhYmxlZFxuLyoqKioqKi8gXHQvLyBzdGFydHVwXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX19uY2N3cGNrX3JlcXVpcmVfXygxNDkpO1xuLyoqKioqKi8gfSkoKVxuOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/webpack/global.js\n"); - -/***/ }), - -/***/ "./node_modules/next/dist/compiled/webpack/harmony-module.js": -/*!*******************************************!*\ - !*** (webpack)/webpack/harmony-module.js ***! - \*******************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("/* WEBPACK VAR INJECTION */(function(__dirname) {module.exports =\n/******/ (function() { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 931:\n/***/ (function(module) {\n\nmodule.exports = function(originalModule) {\n\tif (!originalModule.webpackPolyfill) {\n\t\tvar module = Object.create(originalModule);\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"exports\", {\n\t\t\tenumerable: true\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __nccwpck_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(__webpack_module_cache__[moduleId]) {\n/******/ \t\t\treturn __webpack_module_cache__[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\tvar threw = true;\n/******/ \t\ttry {\n/******/ \t\t\t__webpack_modules__[moduleId](module, module.exports, __nccwpck_require__);\n/******/ \t\t\tthrew = false;\n/******/ \t\t} finally {\n/******/ \t\t\tif(threw) delete __webpack_module_cache__[moduleId];\n/******/ \t\t}\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat */\n/******/ \t\n/******/ \t__nccwpck_require__.ab = __dirname + \"/\";/************************************************************************/\n/******/ \t// module exports must be returned from runtime so entry inlining is disabled\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \treturn __nccwpck_require__(931);\n/******/ })()\n;\n/* WEBPACK VAR INJECTION */}.call(this, \"/\"))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLyh3ZWJwYWNrKS93ZWJwYWNrL2hhcm1vbnktbW9kdWxlLmpzP2YzNDMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxzQkFBc0I7QUFDdEI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87O0FBRVAsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1EO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWLEMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3dlYnBhY2svaGFybW9ueS1tb2R1bGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9XG4vKioqKioqLyAoZnVuY3Rpb24oKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0dmFyIF9fd2VicGFja19tb2R1bGVzX18gPSAoe1xuXG4vKioqLyA5MzE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob3JpZ2luYWxNb2R1bGUpIHtcblx0aWYgKCFvcmlnaW5hbE1vZHVsZS53ZWJwYWNrUG9seWZpbGwpIHtcblx0XHR2YXIgbW9kdWxlID0gT2JqZWN0LmNyZWF0ZShvcmlnaW5hbE1vZHVsZSk7XG5cdFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XG5cdFx0aWYgKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwibG9hZGVkXCIsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmw7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJpZFwiLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwiZXhwb3J0c1wiLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlXG5cdFx0fSk7XG5cdFx0bW9kdWxlLndlYnBhY2tQb2x5ZmlsbCA9IDE7XG5cdH1cblx0cmV0dXJuIG1vZHVsZTtcbn07XG5cblxuLyoqKi8gfSlcblxuLyoqKioqKi8gXHR9KTtcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX19uY2N3cGNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG4vKioqKioqLyBcdFx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHR2YXIgdGhyZXcgPSB0cnVlO1xuLyoqKioqKi8gXHRcdHRyeSB7XG4vKioqKioqLyBcdFx0XHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX25jY3dwY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovIFx0XHRcdHRocmV3ID0gZmFsc2U7XG4vKioqKioqLyBcdFx0fSBmaW5hbGx5IHtcbi8qKioqKiovIFx0XHRcdGlmKHRocmV3KSBkZWxldGUgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqLyBcdFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIFx0Lyogd2VicGFjay9ydW50aW1lL2NvbXBhdCAqL1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0X19uY2N3cGNrX3JlcXVpcmVfXy5hYiA9IF9fZGlybmFtZSArIFwiL1wiOy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyBcdC8vIG1vZHVsZSBleHBvcnRzIG11c3QgYmUgcmV0dXJuZWQgZnJvbSBydW50aW1lIHNvIGVudHJ5IGlubGluaW5nIGlzIGRpc2FibGVkXG4vKioqKioqLyBcdC8vIHN0YXJ0dXBcbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX25jY3dwY2tfcmVxdWlyZV9fKDkzMSk7XG4vKioqKioqLyB9KSgpXG47Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/webpack/harmony-module.js\n"); - -/***/ }), - -/***/ "./node_modules/next/dist/compiled/webpack/module.js": -/*!***********************************!*\ - !*** (webpack)/webpack/module.js ***! - \***********************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("/* WEBPACK VAR INJECTION */(function(__dirname) {module.exports =\n/******/ (function() { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 880:\n/***/ (function(module) {\n\nmodule.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __nccwpck_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(__webpack_module_cache__[moduleId]) {\n/******/ \t\t\treturn __webpack_module_cache__[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\tvar threw = true;\n/******/ \t\ttry {\n/******/ \t\t\t__webpack_modules__[moduleId](module, module.exports, __nccwpck_require__);\n/******/ \t\t\tthrew = false;\n/******/ \t\t} finally {\n/******/ \t\t\tif(threw) delete __webpack_module_cache__[moduleId];\n/******/ \t\t}\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat */\n/******/ \t\n/******/ \t__nccwpck_require__.ab = __dirname + \"/\";/************************************************************************/\n/******/ \t// module exports must be returned from runtime so entry inlining is disabled\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \treturn __nccwpck_require__(880);\n/******/ })()\n;\n/* WEBPACK VAR INJECTION */}.call(this, \"/\"))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLyh3ZWJwYWNrKS93ZWJwYWNrL21vZHVsZS5qcz8zZTczIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0Esc0JBQXNCO0FBQ3RCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPOztBQUVQLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRDtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVixDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC93ZWJwYWNrL21vZHVsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbigpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHR2YXIgX193ZWJwYWNrX21vZHVsZXNfXyA9ICh7XG5cbi8qKiovIDg4MDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihtb2R1bGUpIHtcblx0aWYgKCFtb2R1bGUud2VicGFja1BvbHlmaWxsKSB7XG5cdFx0bW9kdWxlLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKCkge307XG5cdFx0bW9kdWxlLnBhdGhzID0gW107XG5cdFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XG5cdFx0aWYgKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwibG9hZGVkXCIsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmw7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJpZFwiLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdG1vZHVsZS53ZWJwYWNrUG9seWZpbGwgPSAxO1xuXHR9XG5cdHJldHVybiBtb2R1bGU7XG59O1xuXG5cbi8qKiovIH0pXG5cbi8qKioqKiovIFx0fSk7XG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fbmNjd3Bja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuLyoqKioqKi8gXHRcdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0dmFyIHRocmV3ID0gdHJ1ZTtcbi8qKioqKiovIFx0XHR0cnkge1xuLyoqKioqKi8gXHRcdFx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX19uY2N3cGNrX3JlcXVpcmVfXyk7XG4vKioqKioqLyBcdFx0XHR0aHJldyA9IGZhbHNlO1xuLyoqKioqKi8gXHRcdH0gZmluYWxseSB7XG4vKioqKioqLyBcdFx0XHRpZih0aHJldykgZGVsZXRlIF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi8gXHRcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9jb21wYXQgKi9cbi8qKioqKiovIFx0XG4vKioqKioqLyBcdF9fbmNjd3Bja19yZXF1aXJlX18uYWIgPSBfX2Rpcm5hbWUgKyBcIi9cIjsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gXHQvLyBtb2R1bGUgZXhwb3J0cyBtdXN0IGJlIHJldHVybmVkIGZyb20gcnVudGltZSBzbyBlbnRyeSBpbmxpbmluZyBpcyBkaXNhYmxlZFxuLyoqKioqKi8gXHQvLyBzdGFydHVwXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX19uY2N3cGNrX3JlcXVpcmVfXyg4ODApO1xuLyoqKioqKi8gfSkoKVxuOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/webpack/module.js\n"); - -/***/ }), - -/***/ "./node_modules/next/dist/next-server/lib/amp-context.js": -/*!***************************************************************!*\ - !*** ./node_modules/next/dist/next-server/lib/amp-context.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nexports.__esModule = true;\nexports.AmpStateContext = void 0;\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nvar AmpStateContext = /*#__PURE__*/_react[\"default\"].createContext({});\n\nexports.AmpStateContext = AmpStateContext;\n\nif (true) {\n AmpStateContext.displayName = 'AmpStateContext';\n}\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../compiled/webpack/module.js */ \"./node_modules/next/dist/compiled/webpack/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uLy4uL25leHQtc2VydmVyL2xpYi9hbXAtY29udGV4dC50cz84NzlmIl0sIm5hbWVzIjpbIkFtcFN0YXRlQ29udGV4dCIsIlJlYWN0Il0sIm1hcHBpbmdzIjoiOzs7OztBQUFBOzs7Ozs7QUFFTzs7QUFBQSxJQUFNQSxlQUFtQyxnQkFBR0MsZ0NBQTVDLEVBQTRDQSxDQUE1Qzs7OztBQUVQLFVBQTJDO0FBQ3pDRCxpQkFBZSxDQUFmQTtBQUNEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9uZXh0LXNlcnZlci9saWIvYW1wLWNvbnRleHQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmV4cG9ydCBjb25zdCBBbXBTdGF0ZUNvbnRleHQ6IFJlYWN0LkNvbnRleHQ8YW55PiA9IFJlYWN0LmNyZWF0ZUNvbnRleHQoe30pXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIEFtcFN0YXRlQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdBbXBTdGF0ZUNvbnRleHQnXG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/next-server/lib/amp-context.js\n"); - -/***/ }), - -/***/ "./node_modules/next/dist/next-server/lib/amp.js": -/*!*******************************************************!*\ - !*** ./node_modules/next/dist/next-server/lib/amp.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nvar _s = $RefreshSig$();\n\nexports.__esModule = true;\nexports.isInAmpMode = isInAmpMode;\nexports.useAmp = useAmp;\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _ampContext = __webpack_require__(/*! ./amp-context */ \"./node_modules/next/dist/next-server/lib/amp-context.js\");\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nfunction isInAmpMode() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$ampFirst = _ref.ampFirst,\n ampFirst = _ref$ampFirst === void 0 ? false : _ref$ampFirst,\n _ref$hybrid = _ref.hybrid,\n hybrid = _ref$hybrid === void 0 ? false : _ref$hybrid,\n _ref$hasQuery = _ref.hasQuery,\n hasQuery = _ref$hasQuery === void 0 ? false : _ref$hasQuery;\n\n return ampFirst || hybrid && hasQuery;\n}\n\nfunction useAmp() {\n _s();\n\n // Don't assign the context value to a variable to save bytes\n return isInAmpMode(_react[\"default\"].useContext(_ampContext.AmpStateContext));\n}\n\n_s(useAmp, \"gDsCjeeItUuvgOWf1v4qoK9RF6k=\");\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../compiled/webpack/module.js */ \"./node_modules/next/dist/compiled/webpack/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uLy4uL25leHQtc2VydmVyL2xpYi9hbXAudHM/MDdkMiJdLCJuYW1lcyI6WyJhbXBGaXJzdCIsImh5YnJpZCIsImhhc1F1ZXJ5IiwiaXNJbkFtcE1vZGUiLCJSZWFjdCIsIkFtcFN0YXRlQ29udGV4dCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTs7QUFDQTs7Ozs7O0FBRU87O0FBQUEsdUJBSVU7QUFBQSxpRkFKVixFQUlVO0FBQUEsMkJBSGZBLFFBR2U7QUFBQSxNQUhmQSxRQUdlLDhCQUpXLEtBSVg7QUFBQSx5QkFGZkMsTUFFZTtBQUFBLE1BRmZBLE1BRWUsNEJBSlcsS0FJWDtBQUFBLDJCQURmQyxRQUNlO0FBQUEsTUFEZkEsUUFDZSw4QkFKVyxLQUlYOztBQUNmLFNBQU9GLFFBQVEsSUFBS0MsTUFBTSxJQUExQjtBQUdLOztBQUFBLGtCQUEyQjtBQUFBOztBQUNoQztBQUNBLFNBQU9FLFdBQVcsQ0FBQ0MsNkJBQWlCQyxZQUFwQyxlQUFtQkQsQ0FBRCxDQUFsQjtBQUNEOztHQUhNLE0iLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L25leHQtc2VydmVyL2xpYi9hbXAuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbXBTdGF0ZUNvbnRleHQgfSBmcm9tICcuL2FtcC1jb250ZXh0J1xuXG5leHBvcnQgZnVuY3Rpb24gaXNJbkFtcE1vZGUoe1xuICBhbXBGaXJzdCA9IGZhbHNlLFxuICBoeWJyaWQgPSBmYWxzZSxcbiAgaGFzUXVlcnkgPSBmYWxzZSxcbn0gPSB7fSk6IGJvb2xlYW4ge1xuICByZXR1cm4gYW1wRmlyc3QgfHwgKGh5YnJpZCAmJiBoYXNRdWVyeSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUFtcCgpOiBib29sZWFuIHtcbiAgLy8gRG9uJ3QgYXNzaWduIHRoZSBjb250ZXh0IHZhbHVlIHRvIGEgdmFyaWFibGUgdG8gc2F2ZSBieXRlc1xuICByZXR1cm4gaXNJbkFtcE1vZGUoUmVhY3QudXNlQ29udGV4dChBbXBTdGF0ZUNvbnRleHQpKVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/next-server/lib/amp.js\n"); - -/***/ }), - -/***/ "./node_modules/next/dist/next-server/lib/head-manager-context.js": -/*!************************************************************************!*\ - !*** ./node_modules/next/dist/next-server/lib/head-manager-context.js ***! - \************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nexports.__esModule = true;\nexports.HeadManagerContext = void 0;\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nvar HeadManagerContext = /*#__PURE__*/_react[\"default\"].createContext({});\n\nexports.HeadManagerContext = HeadManagerContext;\n\nif (true) {\n HeadManagerContext.displayName = 'HeadManagerContext';\n}\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../compiled/webpack/module.js */ \"./node_modules/next/dist/compiled/webpack/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uLy4uL25leHQtc2VydmVyL2xpYi9oZWFkLW1hbmFnZXItY29udGV4dC50cz9iMmQ2Il0sIm5hbWVzIjpbIkhlYWRNYW5hZ2VyQ29udGV4dCIsIlJlYWN0Il0sIm1hcHBpbmdzIjoiOzs7OztBQUFBOzs7Ozs7QUFFTzs7QUFBQSxJQUFNQSxrQkFLWCxnQkFBR0MsZ0NBTEUsRUFLRkEsQ0FMRTs7OztBQU9QLFVBQTJDO0FBQ3pDRCxvQkFBa0IsQ0FBbEJBO0FBQ0QiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L25leHQtc2VydmVyL2xpYi9oZWFkLW1hbmFnZXItY29udGV4dC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuZXhwb3J0IGNvbnN0IEhlYWRNYW5hZ2VyQ29udGV4dDogUmVhY3QuQ29udGV4dDx7XG4gIHVwZGF0ZUhlYWQ/OiAoc3RhdGU6IGFueSkgPT4gdm9pZFxuICBtb3VudGVkSW5zdGFuY2VzPzogYW55XG4gIHVwZGF0ZVNjcmlwdHM/OiAoc3RhdGU6IGFueSkgPT4gdm9pZFxuICBzY3JpcHRzPzogYW55XG59PiA9IFJlYWN0LmNyZWF0ZUNvbnRleHQoe30pXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIEhlYWRNYW5hZ2VyQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdIZWFkTWFuYWdlckNvbnRleHQnXG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/next-server/lib/head-manager-context.js\n"); - -/***/ }), - -/***/ "./node_modules/next/dist/next-server/lib/head.js": -/*!********************************************************!*\ - !*** ./node_modules/next/dist/next-server/lib/head.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nvar _defineProperty = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/defineProperty */ \"./node_modules/next/node_modules/@babel/runtime/helpers/defineProperty.js\");\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nexports.__esModule = true;\nexports.defaultHead = defaultHead;\nexports[\"default\"] = void 0;\n\nvar _react = _interopRequireWildcard(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _sideEffect = _interopRequireDefault(__webpack_require__(/*! ./side-effect */ \"./node_modules/next/dist/next-server/lib/side-effect.js\"));\n\nvar _ampContext = __webpack_require__(/*! ./amp-context */ \"./node_modules/next/dist/next-server/lib/amp-context.js\");\n\nvar _headManagerContext = __webpack_require__(/*! ./head-manager-context */ \"./node_modules/next/dist/next-server/lib/head-manager-context.js\");\n\nvar _amp = __webpack_require__(/*! ./amp */ \"./node_modules/next/dist/next-server/lib/amp.js\");\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nfunction _getRequireWildcardCache() {\n if (typeof WeakMap !== \"function\") return null;\n var cache = new WeakMap();\n\n _getRequireWildcardCache = function _getRequireWildcardCache() {\n return cache;\n };\n\n return cache;\n}\n\nfunction _interopRequireWildcard(obj) {\n if (obj && obj.__esModule) {\n return obj;\n }\n\n if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") {\n return {\n \"default\": obj\n };\n }\n\n var cache = _getRequireWildcardCache();\n\n if (cache && cache.has(obj)) {\n return cache.get(obj);\n }\n\n var newObj = {};\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n\n if (desc && (desc.get || desc.set)) {\n Object.defineProperty(newObj, key, desc);\n } else {\n newObj[key] = obj[key];\n }\n }\n }\n\n newObj[\"default\"] = obj;\n\n if (cache) {\n cache.set(obj, newObj);\n }\n\n return newObj;\n}\n\nfunction defaultHead() {\n var inAmpMode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var head = [/*#__PURE__*/_react[\"default\"].createElement(\"meta\", {\n charSet: \"utf-8\"\n })];\n\n if (!inAmpMode) {\n head.push( /*#__PURE__*/_react[\"default\"].createElement(\"meta\", {\n name: \"viewport\",\n content: \"width=device-width\"\n }));\n }\n\n return head;\n}\n\nfunction onlyReactElement(list, child) {\n // React children can be \"string\" or \"number\" in this case we ignore them for backwards compat\n if (typeof child === 'string' || typeof child === 'number') {\n return list;\n } // Adds support for React.Fragment\n\n\n if (child.type === _react[\"default\"].Fragment) {\n return list.concat(_react[\"default\"].Children.toArray(child.props.children).reduce(function (fragmentList, fragmentChild) {\n if (typeof fragmentChild === 'string' || typeof fragmentChild === 'number') {\n return fragmentList;\n }\n\n return fragmentList.concat(fragmentChild);\n }, []));\n }\n\n return list.concat(child);\n}\n\nvar METATYPES = ['name', 'httpEquiv', 'charSet', 'itemProp'];\n/*\nreturns a function for filtering head child elements\nwhich shouldn't be duplicated, like \nAlso adds support for deduplicated `key` properties\n*/\n\nfunction unique() {\n var keys = new Set();\n var tags = new Set();\n var metaTypes = new Set();\n var metaCategories = {};\n return function (h) {\n var isUnique = true;\n var hasKey = false;\n\n if (h.key && typeof h.key !== 'number' && h.key.indexOf('$') > 0) {\n hasKey = true;\n var key = h.key.slice(h.key.indexOf('$') + 1);\n\n if (keys.has(key)) {\n isUnique = false;\n } else {\n keys.add(key);\n }\n } // eslint-disable-next-line default-case\n\n\n switch (h.type) {\n case 'title':\n case 'base':\n if (tags.has(h.type)) {\n isUnique = false;\n } else {\n tags.add(h.type);\n }\n\n break;\n\n case 'meta':\n for (var i = 0, len = METATYPES.length; i < len; i++) {\n var metatype = METATYPES[i];\n if (!h.props.hasOwnProperty(metatype)) continue;\n\n if (metatype === 'charSet') {\n if (metaTypes.has(metatype)) {\n isUnique = false;\n } else {\n metaTypes.add(metatype);\n }\n } else {\n var category = h.props[metatype];\n var categories = metaCategories[metatype] || new Set();\n\n if ((metatype !== 'name' || !hasKey) && categories.has(category)) {\n isUnique = false;\n } else {\n categories.add(category);\n metaCategories[metatype] = categories;\n }\n }\n }\n\n break;\n }\n\n return isUnique;\n };\n}\n/**\n*\n* @param headElements List of multiple <Head> instances\n*/\n\n\nfunction reduceComponents(headElements, props) {\n return headElements.reduce(function (list, headElement) {\n var headElementChildren = _react[\"default\"].Children.toArray(headElement.props.children);\n\n return list.concat(headElementChildren);\n }, []).reduce(onlyReactElement, []).reverse().concat(defaultHead(props.inAmpMode)).filter(unique()).reverse().map(function (c, i) {\n var key = c.key || i;\n\n if (false) { var newProps; }\n\n return /*#__PURE__*/_react[\"default\"].cloneElement(c, {\n key: key\n });\n });\n}\n/**\n* This component injects elements to `<head>` of your page.\n* To avoid duplicated `tags` in `<head>` you can use the `key` property, which will make sure every tag is only rendered once.\n*/\n\n\nfunction Head(_ref) {\n var children = _ref.children;\n var ampState = (0, _react.useContext)(_ampContext.AmpStateContext);\n var headManager = (0, _react.useContext)(_headManagerContext.HeadManagerContext);\n return /*#__PURE__*/_react[\"default\"].createElement(_sideEffect[\"default\"], {\n reduceComponentsToState: reduceComponents,\n headManager: headManager,\n inAmpMode: (0, _amp.isInAmpMode)(ampState)\n }, children);\n} // TODO: Remove in the next major release\n\n\n_c = Head;\n\nHead.rewind = function () {};\n\nvar _default = Head;\nexports[\"default\"] = _default;\n\nvar _c;\n\n$RefreshReg$(_c, \"Head\");\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../compiled/webpack/module.js */ \"./node_modules/next/dist/compiled/webpack/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uLy4uL25leHQtc2VydmVyL2xpYi9oZWFkLnRzeD84YjI3Il0sIm5hbWVzIjpbImluQW1wTW9kZSIsImhlYWQiLCJjaGlsZCIsIlJlYWN0IiwibGlzdCIsImZyYWdtZW50TGlzdCIsIk1FVEFUWVBFUyIsImtleXMiLCJ0YWdzIiwibWV0YVR5cGVzIiwibWV0YUNhdGVnb3JpZXMiLCJoIiwiaXNVbmlxdWUiLCJoYXNLZXkiLCJrZXkiLCJpIiwibGVuIiwibWV0YXR5cGUiLCJjYXRlZ29yeSIsImNhdGVnb3JpZXMiLCJoZWFkRWxlbWVudHMiLCJoZWFkRWxlbWVudENoaWxkcmVuIiwiaGVhZEVsZW1lbnQiLCJkZWZhdWx0SGVhZCIsInByb3BzIiwidW5pcXVlIiwiYyIsInByb2Nlc3MiLCJhbXBTdGF0ZSIsIkFtcFN0YXRlQ29udGV4dCIsImhlYWRNYW5hZ2VyIiwiSGVhZE1hbmFnZXJDb250ZXh0IiwiSGVhZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNTzs7QUFBQSx1QkFBdUQ7QUFBQSxNQUFsQ0EsU0FBa0MsdUVBQXZELEtBQXVEO0FBQzVELE1BQU1DLElBQUksR0FBRyxjQUFDO0FBQU0sV0FBTyxFQUEzQjtBQUFjLElBQUQsQ0FBYjs7QUFDQSxNQUFJLENBQUosV0FBZ0I7QUFDZEEsUUFBSSxDQUFKQSxtQkFBVTtBQUFNLFVBQUksRUFBVjtBQUFzQixhQUFPLEVBQXZDQTtBQUFVLE1BQVZBO0FBRUY7O0FBQUE7QUFHRjs7QUFBQSx1Q0FHa0M7QUFDaEM7QUFDQSxNQUFJLDZCQUE2QixpQkFBakMsVUFBNEQ7QUFDMUQ7QUFFRixHQUxnQyxDQUtoQzs7O0FBQ0EsTUFBSUMsS0FBSyxDQUFMQSxTQUFlQyxrQkFBbkIsVUFBbUM7QUFDakMsV0FBT0MsSUFBSSxD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LENBWmRBLFNBYUdLLE1BYkhMLGtCQWVBLGdCQUEyQztBQUM5QyxRQUFNTixHQUFHLEdBQUdZLENBQUMsQ0FBREEsT0FBWjs7QUFDQSxRQUNFQyxLQURGLEVBSUUsaUJBb0JGOztBQUFBLHdCQUFPeEIsa0NBQXNCO0FBQUVXLFNBQS9CLEVBQStCQTtBQUFGLEtBQXRCWCxDQUFQO0FBekNKLEdBQU9pQixDQUFQO0FBNkNGO0FBQUE7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLG9CQUEyRDtBQUFBLE1BQTNELFFBQTJELFFBQTNELFFBQTJEO0FBQ3pELE1BQU1RLFFBQVEsR0FBRyx1QkFBV0MsWUFBNUIsZUFBaUIsQ0FBakI7QUFDQSxNQUFNQyxXQUFXLEdBQUcsdUJBQVdDLG9CQUEvQixrQkFBb0IsQ0FBcEI7QUFDQSxzQkFDRSxnQ0FBQyxXQUFEO0FBQ0UsMkJBQXVCLEVBRHpCO0FBRUUsZUFBVyxFQUZiO0FBR0UsYUFBUyxFQUFFLHNCQUhiLFFBR2E7QUFIYixLQURGLFFBQ0UsQ0FERjtBQVdGLEMsQ0FBQTs7O0tBZEEsSTs7QUFlQUMsSUFBSSxDQUFKQSxTQUFjLFlBQU0sQ0FBcEJBOztlQUVlQSxJIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9uZXh0LXNlcnZlci9saWIvaGVhZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgRWZmZWN0IGZyb20gJy4vc2lkZS1lZmZlY3QnXG5pbXBvcnQgeyBBbXBTdGF0ZUNvbnRleHQgfSBmcm9tICcuL2FtcC1jb250ZXh0J1xuaW1wb3J0IHsgSGVhZE1hbmFnZXJDb250ZXh0IH0gZnJvbSAnLi9oZWFkLW1hbmFnZXItY29udGV4dCdcbmltcG9ydCB7IGlzSW5BbXBNb2RlIH0gZnJvbSAnLi9hbXAnXG5cbnR5cGUgV2l0aEluQW1wTW9kZSA9IHtcbiAgaW5BbXBNb2RlPzogYm9vbGVhblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdEhlYWQoaW5BbXBNb2RlID0gZmFsc2UpOiBKU1guRWxlbWVudFtdIHtcbiAgY29uc3QgaGVhZCA9IFs8bWV0YSBjaGFyU2V0PVwidXRmLThcIiAvPl1cbiAgaWYgKCFpbkFtcE1vZGUpIHtcbiAgICBoZWFkLnB1c2goPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aFwiIC8+KVxuICB9XG4gIHJldHVybiBoZWFkXG59XG5cbmZ1bmN0aW9uIG9ubHlSZWFjdEVsZW1lbnQoXG4gIGxpc3Q6IEFycmF5PFJlYWN0LlJlYWN0RWxlbWVudDxhbnk+PixcbiAgY2hpbGQ6IFJlYWN0LlJlYWN0Q2hpbGRcbik6IEFycmF5PFJlYWN0LlJlYWN0RWxlbWVudDxhbnk+PiB7XG4gIC8vIFJlYWN0IGNoaWxkcmVuIGNhbiBiZSBcInN0cmluZ1wiIG9yIFwibnVtYmVyXCIgaW4gdGhpcyBjYXNlIHdlIGlnbm9yZSB0aGVtIGZvciBiYWNrd2FyZHMgY29tcGF0XG4gIGlmICh0eXBlb2YgY2hpbGQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBjaGlsZCA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gbGlzdFxuICB9XG4gIC8vIEFkZHMgc3VwcG9ydCBmb3IgUmVhY3QuRnJhZ21lbnRcbiAgaWYgKGNoaWxkLnR5cGUgPT09IFJlYWN0LkZyYWdtZW50KSB7XG4gICAgcmV0dXJuIGxpc3QuY29uY2F0KFxuICAgICAgUmVhY3QuQ2hpbGRyZW4udG9BcnJheShjaGlsZC5wcm9wcy5jaGlsZHJlbikucmVkdWNlKFxuICAgICAgICAoXG4gICAgICAgICAgZnJhZ21lbnRMaXN0OiBBcnJheTxSZWFjdC5SZWFjdEVsZW1lbnQ8YW55Pj4sXG4gICAgICAgICAgZnJhZ21lbnRDaGlsZDogUmVhY3QuUmVhY3RDaGlsZFxuICAgICAgICApOiBBcnJheTxSZWFjdC5SZWFjdEVsZW1lbnQ8YW55Pj4gPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBmcmFnbWVudENoaWxkID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgICAgdHlwZW9mIGZyYWdtZW50Q2hpbGQgPT09ICdudW1iZXInXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJhZ21lbnRMaXN0XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmcmFnbWVudExpc3QuY29uY2F0KGZyYWdtZW50Q2hpbGQpXG4gICAgICAgIH0sXG4gICAgICAgIFtdXG4gICAgICApXG4gICAgKVxuICB9XG4gIHJldHVybiBsaXN0LmNvbmNhdChjaGlsZClcbn1cblxuY29uc3QgTUVUQVRZUEVTID0gWyduYW1lJywgJ2h0dHBFcXVpdicsICdjaGFyU2V0JywgJ2l0ZW1Qcm9wJ11cblxuLypcbiByZXR1cm5zIGEgZnVuY3Rpb24gZm9yIGZpbHRlcmluZyBoZWFkIGNoaWxkIGVsZW1lbnRzXG4gd2hpY2ggc2hvdWxkbid0IGJlIGR1cGxpY2F0ZWQsIGxpa2UgPHRpdGxlLz5cbiBBbHNvIGFkZHMgc3VwcG9ydCBmb3IgZGVkdXBsaWNhdGVkIGBrZXlgIHByb3BlcnRpZXNcbiovXG5mdW5jdGlvbiB1bmlxdWUoKSB7XG4gIGNvbnN0IGtleXMgPSBuZXcgU2V0KClcbiAgY29uc3QgdGFncyA9IG5ldyBTZXQoKVxuICBjb25zdCBtZXRhVHlwZXMgPSBuZXcgU2V0KClcbiAgY29uc3QgbWV0YUNhdGVnb3JpZXM6IHsgW21ldGF0eXBlOiBzdHJpbmddOiBTZXQ8c3RyaW5nPiB9ID0ge31cblxuICByZXR1cm4gKGg6IFJlYWN0LlJlYWN0RWxlbWVudDxhbnk+KSA9PiB7XG4gICAgbGV0IGlzVW5pcXVlID0gdHJ1ZVxuICAgIGxldCBoYXNLZXkgPSBmYWxzZVxuXG4gICAgaWYgKGgua2V5ICYmIHR5cGVvZiBoLmtleSAhPT0gJ251bWJlcicgJiYgaC5rZXkuaW5kZXhPZignJCcpID4gMCkge1xuICAgICAgaGFzS2V5ID0gdHJ1ZVxuICAgICAgY29uc3Qga2V5ID0gaC5rZXkuc2xpY2UoaC5rZXkuaW5kZXhPZignJCcpICsgMSlcbiAgICAgIGlmIChrZXlzLmhhcyhrZXkpKSB7XG4gICAgICAgIGlzVW5pcXVlID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGtleXMuYWRkKGtleSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVmYXVsdC1jYXNlXG4gICAgc3dpdGNoIChoLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3RpdGxlJzpcbiAgICAgIGNhc2UgJ2Jhc2UnOlxuICAgICAgICBpZiAodGFncy5oYXMoaC50eXBlKSkge1xuICAgICAgICAgIGlzVW5pcXVlID0gZmFsc2VcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0YWdzLmFkZChoLnR5cGUpXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ21ldGEnOlxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gTUVUQVRZUEVTLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgbWV0YXR5cGUgPSBNRVRBVFlQRVNbaV1cbiAgICAgICAgICBpZiAoIWgucHJvcHMuaGFzT3duUHJvcGVydHkobWV0YXR5cGUpKSBjb250aW51ZVxuXG4gICAgICAgICAgaWYgKG1ldGF0eXBlID09PSAnY2hhclNldCcpIHtcbiAgICAgICAgICAgIGlmIChtZXRhVHlwZXMuaGFzKG1ldGF0eXBlKSkge1xuICAgICAgICAgICAgICBpc1VuaXF1ZSA9IGZhbHNlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtZXRhVHlwZXMuYWRkKG1ldGF0eXBlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yeSA9IGgucHJvcHNbbWV0YXR5cGVdXG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gbWV0YUNhdGVnb3JpZXNbbWV0YXR5cGVdIHx8IG5ldyBTZXQoKVxuICAgICAgICAgICAgaWYgKChtZXRhdHlwZSAhPT0gJ25hbWUnIHx8ICFoYXNLZXkpICYmIGNhdGVnb3JpZXMuaGFzKGNhdGVnb3J5KSkge1xuICAgICAgICAgICAgICBpc1VuaXF1ZSA9IGZhbHNlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjYXRlZ29yaWVzLmFkZChjYXRlZ29yeSlcbiAgICAgICAgICAgICAgbWV0YUNhdGVnb3JpZXNbbWV0YXR5cGVdID0gY2F0ZWdvcmllc1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgIH1cblxuICAgIHJldHVybiBpc1VuaXF1ZVxuICB9XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBoZWFkRWxlbWVudHMgTGlzdCBvZiBtdWx0aXBsZSA8SGVhZD4gaW5zdGFuY2VzXG4gKi9cbmZ1bmN0aW9uIHJlZHVjZUNvbXBvbmVudHMoXG4gIGhlYWRFbGVtZW50czogQXJyYXk8UmVhY3QuUmVhY3RFbGVtZW50PGFueT4+LFxuICBwcm9wczogV2l0aEluQW1wTW9kZVxuKSB7XG4gIHJldHVybiBoZWFkRWxlbWVudHNcbiAgICAucmVkdWNlKFxuICAgICAgKGxpc3Q6IFJlYWN0LlJlYWN0Q2hpbGRbXSwgaGVhZEVsZW1lbnQ6IFJlYWN0LlJlYWN0RWxlbWVudDxhbnk+KSA9PiB7XG4gICAgICAgIGNvbnN0IGhlYWRFbGVtZW50Q2hpbGRyZW4gPSBSZWFjdC5DaGlsZHJlbi50b0FycmF5KFxuICAgICAgICAgIGhlYWRFbGVtZW50LnByb3BzLmNoaWxkcmVuXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuIGxpc3QuY29uY2F0KGhlYWRFbGVtZW50Q2hpbGRyZW4pXG4gICAgICB9LFxuICAgICAgW11cbiAgICApXG4gICAgLnJlZHVjZShvbmx5UmVhY3RFbGVtZW50LCBbXSlcbiAgICAucmV2ZXJzZSgpXG4gICAgLmNvbmNhdChkZWZhdWx0SGVhZChwcm9wcy5pbkFtcE1vZGUpKVxuICAgIC5maWx0ZXIodW5pcXVlKCkpXG4gICAgLnJldmVyc2UoKVxuICAgIC5tYXAoKGM6IFJlYWN0LlJlYWN0RWxlbWVudDxhbnk+LCBpOiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGMua2V5IHx8IGlcbiAgICAgIGlmIChcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdkZXZlbG9wbWVudCcgJiZcbiAgICAgICAgcHJvY2Vzcy5lbnYuX19ORVhUX09QVElNSVpFX0ZPTlRTICYmXG4gICAgICAgICFwcm9wcy5pbkFtcE1vZGVcbiAgICAgICkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgYy50eXBlID09PSAnbGluaycgJiZcbiAgICAgICAgICBjLnByb3BzWydocmVmJ10gJiZcbiAgICAgICAgICAvLyBUT0RPKHByYXRlZWtiaEApOiBSZXBsYWNlIHRoaXMgd2l0aCBjb25zdCBmcm9tIGBjb25zdGFudHNgIHdoZW4gdGhlIHRyZWUgc2hha2luZyB3b3Jrcy5cbiAgICAgICAgICBbXG4gICAgICAgICAgICAnaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vdXNlLnR5cGVraXQubmV0LycsXG4gICAgICAgICAgXS5zb21lKCh1cmwpID0+IGMucHJvcHNbJ2hyZWYnXS5zdGFydHNXaXRoKHVybCkpXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IG5ld1Byb3BzID0geyAuLi4oYy5wcm9wcyB8fCB7fSkgfVxuICAgICAgICAgIG5ld1Byb3BzWydkYXRhLWhyZWYnXSA9IG5ld1Byb3BzWydocmVmJ11cbiAgICAgICAgICBuZXdQcm9wc1snaHJlZiddID0gdW5kZWZpbmVkXG5cbiAgICAgICAgICAvLyBBZGQgdGhpcyBhdHRyaWJ1dGUgdG8gbWFrZSBpdCBlYXN5IHRvIGlkZW50aWZ5IG9wdGltaXplZCB0YWdzXG4gICAgICAgICAgbmV3UHJvcHNbJ2RhdGEtb3B0aW1pemVkLWZvbnRzJ10gPSB0cnVlXG5cbiAgICAgICAgICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGMsIG5ld1Byb3BzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGMsIHsga2V5IH0pXG4gICAgfSlcbn1cblxuLyoqXG4gKiBUaGlzIGNvbXBvbmVudCBpbmplY3RzIGVsZW1lbnRzIHRvIGA8aGVhZD5gIG9mIHlvdXIgcGFnZS5cbiAqIFRvIGF2b2lkIGR1cGxpY2F0ZWQgYHRhZ3NgIGluIGA8aGVhZD5gIHlvdSBjYW4gdXNlIHRoZSBga2V5YCBwcm9wZXJ0eSwgd2hpY2ggd2lsbCBtYWtlIHN1cmUgZXZlcnkgdGFnIGlzIG9ubHkgcmVuZGVyZWQgb25jZS5cbiAqL1xuZnVuY3Rpb24gSGVhZCh7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZSB9KSB7XG4gIGNvbnN0IGFtcFN0YXRlID0gdXNlQ29udGV4dChBbXBTdGF0ZUNvbnRleHQpXG4gIGNvbnN0IGhlYWRNYW5hZ2VyID0gdXNlQ29udGV4dChIZWFkTWFuYWdlckNvbnRleHQpXG4gIHJldHVybiAoXG4gICAgPEVmZmVjdFxuICAgICAgcmVkdWNlQ29tcG9uZW50c1RvU3RhdGU9e3JlZHVjZUNvbXBvbmVudHN9XG4gICAgICBoZWFkTWFuYWdlcj17aGVhZE1hbmFnZXJ9XG4gICAgICBpbkFtcE1vZGU9e2lzSW5BbXBNb2RlKGFtcFN0YXRlKX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9FZmZlY3Q+XG4gIClcbn1cblxuLy8gVE9ETzogUmVtb3ZlIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2VcbkhlYWQucmV3aW5kID0gKCkgPT4ge31cblxuZXhwb3J0IGRlZmF1bHQgSGVhZFxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/next-server/lib/head.js\n"); - -/***/ }), - -/***/ "./node_modules/next/dist/next-server/lib/i18n/normalize-locale-path.js": -/*!******************************************************************************!*\ - !*** ./node_modules/next/dist/next-server/lib/i18n/normalize-locale-path.js ***! - \******************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nexports.__esModule = true;\nexports.normalizeLocalePath = normalizeLocalePath;\n\nfunction normalizeLocalePath(pathname, locales) {\n var detectedLocale; // first item will be empty string from splitting at first char\n\n var pathnameParts = pathname.split('/');\n (locales || []).some(function (locale) {\n if (pathnameParts[1].toLowerCase() === locale.toLowerCase()) {\n detectedLocale = locale;\n pathnameParts.splice(1, 1);\n pathname = pathnameParts.join('/') || '/';\n return true;\n }\n\n return false;\n });\n return {\n pathname: pathname,\n detectedLocale: detectedLocale\n };\n}\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../compiled/webpack/module.js */ \"./node_modules/next/dist/compiled/webpack/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uLy4uLy4uL25leHQtc2VydmVyL2xpYi9pMThuL25vcm1hbGl6ZS1sb2NhbGUtcGF0aC50cz9lOGViIl0sIm5hbWVzIjpbInBhdGhuYW1lUGFydHMiLCJwYXRobmFtZSIsImxvY2FsZXMiLCJsb2NhbGUiLCJkZXRlY3RlZExvY2FsZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTyxnREFNTDtBQUNBLHFCQURBLENBRUE7O0FBQ0EsTUFBTUEsYUFBYSxHQUFHQyxRQUFRLENBQVJBLE1BQXRCLEdBQXNCQSxDQUF0QjtBQUVDLEdBQUNDLE9BQU8sSUFBUixTQUFzQkMsZ0JBQUQsRUFBWTtBQUNoQyxRQUFJSCxhQUFhLENBQWJBLENBQWEsQ0FBYkEsbUJBQW1DRyxNQUFNLENBQTdDLFdBQXVDQSxFQUF2QyxFQUE2RDtBQUMzREMsb0JBQWMsR0FBZEE7QUFDQUosbUJBQWEsQ0FBYkE7QUFDQUMsY0FBUSxHQUFHRCxhQUFhLENBQWJBLGFBQVhDO0FBQ0E7QUFFRjs7QUFBQTtBQVBEO0FBVUQsU0FBTztBQUNMQSxZQURLLEVBQ0xBLFFBREs7QUFFTEcsa0JBRkYsRUFFRUE7QUFGSyxHQUFQO0FBSUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L25leHQtc2VydmVyL2xpYi9pMThuL25vcm1hbGl6ZS1sb2NhbGUtcGF0aC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVMb2NhbGVQYXRoKFxuICBwYXRobmFtZTogc3RyaW5nLFxuICBsb2NhbGVzPzogc3RyaW5nW11cbik6IHtcbiAgZGV0ZWN0ZWRMb2NhbGU/OiBzdHJpbmdcbiAgcGF0aG5hbWU6IHN0cmluZ1xufSB7XG4gIGxldCBkZXRlY3RlZExvY2FsZTogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIC8vIGZpcnN0IGl0ZW0gd2lsbCBiZSBlbXB0eSBzdHJpbmcgZnJvbSBzcGxpdHRpbmcgYXQgZmlyc3QgY2hhclxuICBjb25zdCBwYXRobmFtZVBhcnRzID0gcGF0aG5hbWUuc3BsaXQoJy8nKVxuXG4gIDsobG9jYWxlcyB8fCBbXSkuc29tZSgobG9jYWxlKSA9PiB7XG4gICAgaWYgKHBhdGhuYW1lUGFydHNbMV0udG9Mb3dlckNhc2UoKSA9PT0gbG9jYWxlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIGRldGVjdGVkTG9jYWxlID0gbG9jYWxlXG4gICAgICBwYXRobmFtZVBhcnRzLnNwbGljZSgxLCAxKVxuICAgICAgcGF0aG5hbWUgPSBwYXRobmFtZVBhcnRzLmpvaW4oJy8nKSB8fCAnLydcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9KVxuXG4gIHJldHVybiB7XG4gICAgcGF0aG5hbWUsXG4gICAgZGV0ZWN0ZWRMb2NhbGUsXG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/next-server/lib/i18n/normalize-locale-path.js\n"); - -/***/ }), - -/***/ "./node_modules/next/dist/next-server/lib/mitt.js": -/*!********************************************************!*\ - !*** ./node_modules/next/dist/next-server/lib/mitt.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nexports.__esModule = true;\nexports[\"default\"] = mitt;\n/*\nMIT License\nCopyright (c) Jason Miller (https://jasonformat.com/)\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n// This file is based on https://github.com/developit/mitt/blob/v1.1.3/src/index.js\n// It's been edited for the needs of this script\n// See the LICENSE at the top of the file\n\nfunction mitt() {\n var all = Object.create(null);\n return {\n on: function on(type, handler) {\n ;\n (all[type] || (all[type] = [])).push(handler);\n },\n off: function off(type, handler) {\n if (all[type]) {\n all[type].splice(all[type].indexOf(handler) >>> 0, 1);\n }\n },\n emit: function emit(type) {\n for (var _len = arguments.length, evts = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n evts[_key - 1] = arguments[_key];\n }\n\n // eslint-disable-next-line array-callback-return\n ;\n (all[type] || []).slice().map(function (handler) {\n handler.apply(void 0, evts);\n });\n }\n };\n}\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../compiled/webpack/module.js */ \"./node_modules/next/dist/compiled/webpack/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uLy4uL25leHQtc2VydmVyL2xpYi9taXR0LnRzP2Y0ZWMiXSwibmFtZXMiOlsiYWxsIiwiT2JqZWN0Iiwib24iLCJvZmYiLCJlbWl0IiwiaGFuZGxlciJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBOztBQVVlLGdCQUE2QjtBQUMxQyxNQUFNQSxHQUErQixHQUFHQyxNQUFNLENBQU5BLE9BQXhDLElBQXdDQSxDQUF4QztBQUVBLFNBQU87QUFDTEMsTUFESyxjQUNILElBREcsRUFDSCxPQURHLEVBQzhCO0FBQ2pDO0FBQUMsT0FBQ0YsR0FBRyxDQUFIQSxJQUFHLENBQUhBLEtBQWNBLEdBQUcsQ0FBSEEsSUFBRyxDQUFIQSxHQUFmLEVBQUNBLENBQUQ7QUFGRTtBQUtMRyxPQUxLLGVBS0YsSUFMRSxFQUtGLE9BTEUsRUFLK0I7QUFDbEMsVUFBSUgsR0FBRyxDQUFQLElBQU8sQ0FBUCxFQUFlO0FBQ2JBLFdBQUcsQ0FBSEEsSUFBRyxDQUFIQSxRQUFpQkEsR0FBRyxDQUFIQSxJQUFHLENBQUhBLHNCQUFqQkE7QUFFSDtBQVRJO0FBV0xJLFFBWEssZ0JBV0QsSUFYQyxFQVc4QjtBQUFBLHdDQUEvQixJQUErQjtBQUEvQixZQUErQjtBQUFBOztBQUNqQztBQUNBO0FBQUMsT0FBQ0osR0FBRyxDQUFIQSxJQUFHLENBQUhBLElBQUQsZ0JBQStCSyxpQkFBRCxFQUFzQjtBQUNuREEsZUFBTyxNQUFQQTtBQUREO0FBYkw7QUFBTyxHQUFQO0FBa0JEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9uZXh0LXNlcnZlci9saWIvbWl0dC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5NSVQgTGljZW5zZVxuXG5Db3B5cmlnaHQgKGMpIEphc29uIE1pbGxlciAoaHR0cHM6Ly9qYXNvbmZvcm1hdC5jb20vKVxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuXG4vLyBUaGlzIGZpbGUgaXMgYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2RldmVsb3BpdC9taXR0L2Jsb2IvdjEuMS4zL3NyYy9pbmRleC5qc1xuLy8gSXQncyBiZWVuIGVkaXRlZCBmb3IgdGhlIG5lZWRzIG9mIHRoaXMgc2NyaXB0XG4vLyBTZWUgdGhlIExJQ0VOU0UgYXQgdGhlIHRvcCBvZiB0aGUgZmlsZVxuXG50eXBlIEhhbmRsZXIgPSAoLi4uZXZ0czogYW55W10pID0+IHZvaWRcblxuZXhwb3J0IHR5cGUgTWl0dEVtaXR0ZXIgPSB7XG4gIG9uKHR5cGU6IHN0cmluZywgaGFuZGxlcjogSGFuZGxlcik6IHZvaWRcbiAgb2ZmKHR5cGU6IHN0cmluZywgaGFuZGxlcjogSGFuZGxlcik6IHZvaWRcbiAgZW1pdCh0eXBlOiBzdHJpbmcsIC4uLmV2dHM6IGFueVtdKTogdm9pZFxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtaXR0KCk6IE1pdHRFbWl0dGVyIHtcbiAgY29uc3QgYWxsOiB7IFtzOiBzdHJpbmddOiBIYW5kbGVyW10gfSA9IE9iamVjdC5jcmVhdGUobnVsbClcblxuICByZXR1cm4ge1xuICAgIG9uKHR5cGU6IHN0cmluZywgaGFuZGxlcjogSGFuZGxlcikge1xuICAgICAgOyhhbGxbdHlwZV0gfHwgKGFsbFt0eXBlXSA9IFtdKSkucHVzaChoYW5kbGVyKVxuICAgIH0sXG5cbiAgICBvZmYodHlwZTogc3RyaW5nLCBoYW5kbGVyOiBIYW5kbGVyKSB7XG4gICAgICBpZiAoYWxsW3R5cGVdKSB7XG4gICAgICAgIGFsbFt0eXBlXS5zcGxpY2UoYWxsW3R5cGVdLmluZGV4T2YoaGFuZGxlcikgPj4+IDAsIDEpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGVtaXQodHlwZTogc3RyaW5nLCAuLi5ldnRzOiBhbnlbXSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGFycmF5LWNhbGxiYWNrLXJldHVyblxuICAgICAgOyhhbGxbdHlwZV0gfHwgW10pLnNsaWNlKCkubWFwKChoYW5kbGVyOiBIYW5kbGVyKSA9PiB7XG4gICAgICAgIGhhbmRsZXIoLi4uZXZ0cylcbiAgICAgIH0pXG4gICAgfSxcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/next-server/lib/mitt.js\n"); - -/***/ }), - -/***/ "./node_modules/next/dist/next-server/lib/router-context.js": -/*!******************************************************************!*\ - !*** ./node_modules/next/dist/next-server/lib/router-context.js ***! - \******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nexports.__esModule = true;\nexports.RouterContext = void 0;\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nvar RouterContext = /*#__PURE__*/_react[\"default\"].createContext(null);\n\nexports.RouterContext = RouterContext;\n\nif (true) {\n RouterContext.displayName = 'RouterContext';\n}\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../compiled/webpack/module.js */ \"./node_modules/next/dist/compiled/webpack/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uLy4uL25leHQtc2VydmVyL2xpYi9yb3V0ZXItY29udGV4dC50cz84OTQ1Il0sIm5hbWVzIjpbIlJvdXRlckNvbnRleHQiLCJSZWFjdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7Ozs7O0FBR087O0FBQUEsSUFBTUEsYUFBYSxnQkFBR0MsZ0NBQXRCLElBQXNCQSxDQUF0Qjs7OztBQUVQLFVBQTJDO0FBQ3pDRCxlQUFhLENBQWJBO0FBQ0QiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L25leHQtc2VydmVyL2xpYi9yb3V0ZXItY29udGV4dC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IE5leHRSb3V0ZXIgfSBmcm9tICcuL3JvdXRlci9yb3V0ZXInXG5cbmV4cG9ydCBjb25zdCBSb3V0ZXJDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxOZXh0Um91dGVyPihudWxsIGFzIGFueSlcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgUm91dGVyQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdSb3V0ZXJDb250ZXh0J1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/next-server/lib/router-context.js\n"); - -/***/ }), - -/***/ "./node_modules/next/dist/next-server/lib/router/router.js": -/*!*****************************************************************!*\ - !*** ./node_modules/next/dist/next-server/lib/router/router.js ***! - \*****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nvar _regeneratorRuntime = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/regenerator */ \"./node_modules/next/node_modules/@babel/runtime/regenerator/index.js\");\n\nvar _asyncToGenerator = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/asyncToGenerator */ \"./node_modules/next/node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n\nvar _classCallCheck = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/classCallCheck */ \"./node_modules/next/node_modules/@babel/runtime/helpers/classCallCheck.js\");\n\nvar _createClass = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/createClass */ \"./node_modules/next/node_modules/@babel/runtime/helpers/createClass.js\");\n\nvar _slicedToArray = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/slicedToArray */ \"./node_modules/next/node_modules/@babel/runtime/helpers/slicedToArray.js\");\n\nexports.__esModule = true;\nexports.getDomainLocale = getDomainLocale;\nexports.addLocale = addLocale;\nexports.delLocale = delLocale;\nexports.hasBasePath = hasBasePath;\nexports.addBasePath = addBasePath;\nexports.delBasePath = delBasePath;\nexports.isLocalURL = isLocalURL;\nexports.interpolateAs = interpolateAs;\nexports.resolveHref = resolveHref;\nexports[\"default\"] = void 0;\n\nvar _normalizeTrailingSlash = __webpack_require__(/*! ../../../client/normalize-trailing-slash */ \"./node_modules/next/dist/client/normalize-trailing-slash.js\");\n\nvar _routeLoader = __webpack_require__(/*! ../../../client/route-loader */ \"./node_modules/next/dist/client/route-loader.js\");\n\nvar _denormalizePagePath = __webpack_require__(/*! ../../server/denormalize-page-path */ \"./node_modules/next/dist/next-server/server/denormalize-page-path.js\");\n\nvar _normalizeLocalePath = __webpack_require__(/*! ../i18n/normalize-locale-path */ \"./node_modules/next/dist/next-server/lib/i18n/normalize-locale-path.js\");\n\nvar _mitt = _interopRequireDefault(__webpack_require__(/*! ../mitt */ \"./node_modules/next/dist/next-server/lib/mitt.js\"));\n\nvar _utils = __webpack_require__(/*! ../utils */ \"./node_modules/next/dist/next-server/lib/utils.js\");\n\nvar _isDynamic = __webpack_require__(/*! ./utils/is-dynamic */ \"./node_modules/next/dist/next-server/lib/router/utils/is-dynamic.js\");\n\nvar _parseRelativeUrl = __webpack_require__(/*! ./utils/parse-relative-url */ \"./node_modules/next/dist/next-server/lib/router/utils/parse-relative-url.js\");\n\nvar _querystring = __webpack_require__(/*! ./utils/querystring */ \"./node_modules/next/dist/next-server/lib/router/utils/querystring.js\");\n\nvar _resolveRewrites = _interopRequireDefault(__webpack_require__(/*! ./utils/resolve-rewrites */ \"./node_modules/next/dist/next-server/lib/router/utils/resolve-rewrites-noop.js\"));\n\nvar _routeMatcher = __webpack_require__(/*! ./utils/route-matcher */ \"./node_modules/next/dist/next-server/lib/router/utils/route-matcher.js\");\n\nvar _routeRegex = __webpack_require__(/*! ./utils/route-regex */ \"./node_modules/next/dist/next-server/lib/router/utils/route-regex.js\");\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n} // tslint:disable:no-console\n\n\nvar detectDomainLocale;\n\nif (false) {}\n\nvar basePath = false || '';\n\nfunction buildCancellationError() {\n return Object.assign(new Error('Route Cancelled'), {\n cancelled: true\n });\n}\n\nfunction addPathPrefix(path, prefix) {\n return prefix && path.startsWith('/') ? path === '/' ? (0, _normalizeTrailingSlash.normalizePathTrailingSlash)(prefix) : \"\".concat(prefix).concat(pathNoQueryHash(path) === '/' ? path.substring(1) : path) : path;\n}\n\nfunction getDomainLocale(path, locale, locales, domainLocales) {\n if (false) { var detectedDomain; }\n\n return false;\n}\n\nfunction addLocale(path, locale, defaultLocale) {\n if (false) { var localeLower, pathLower, pathname; }\n\n return path;\n}\n\nfunction delLocale(path, locale) {\n if (false) { var localeLower, pathLower, pathname; }\n\n return path;\n}\n\nfunction pathNoQueryHash(path) {\n var queryIndex = path.indexOf('?');\n var hashIndex = path.indexOf('#');\n\n if (queryIndex > -1 || hashIndex > -1) {\n path = path.substring(0, queryIndex > -1 ? queryIndex : hashIndex);\n }\n\n return path;\n}\n\nfunction hasBasePath(path) {\n path = pathNoQueryHash(path);\n return path === basePath || path.startsWith(basePath + '/');\n}\n\nfunction addBasePath(path) {\n // we only add the basepath on relative urls\n return addPathPrefix(path, basePath);\n}\n\nfunction delBasePath(path) {\n path = path.slice(basePath.length);\n if (!path.startsWith('/')) path = \"/\".concat(path);\n return path;\n}\n/**\n* Detects whether a given url is routable by the Next.js router (browser only).\n*/\n\n\nfunction isLocalURL(url) {\n // prevent a hydration mismatch on href for url with anchor refs\n if (url.startsWith('/') || url.startsWith('#')) return true;\n\n try {\n // absolute urls can be local if they are on the same origin\n var locationOrigin = (0, _utils.getLocationOrigin)();\n var resolved = new URL(url, locationOrigin);\n return resolved.origin === locationOrigin && hasBasePath(resolved.pathname);\n } catch (_) {\n return false;\n }\n}\n\nfunction interpolateAs(route, asPathname, query) {\n var interpolatedRoute = '';\n var dynamicRegex = (0, _routeRegex.getRouteRegex)(route);\n var dynamicGroups = dynamicRegex.groups;\n var dynamicMatches = // Try to match the dynamic route against the asPath\n (asPathname !== route ? (0, _routeMatcher.getRouteMatcher)(dynamicRegex)(asPathname) : '') || // Fall back to reading the values from the href\n // TODO: should this take priority; also need to change in the router.\n query;\n interpolatedRoute = route;\n var params = Object.keys(dynamicGroups);\n\n if (!params.every(function (param) {\n var value = dynamicMatches[param] || '';\n var _dynamicGroups$param = dynamicGroups[param],\n repeat = _dynamicGroups$param.repeat,\n optional = _dynamicGroups$param.optional; // support single-level catch-all\n // TODO: more robust handling for user-error (passing `/`)\n\n var replaced = \"[\".concat(repeat ? '...' : '').concat(param, \"]\");\n\n if (optional) {\n replaced = \"\".concat(!value ? '/' : '', \"[\").concat(replaced, \"]\");\n }\n\n if (repeat && !Array.isArray(value)) value = [value];\n return (optional || param in dynamicMatches) && ( // Interpolate group into data URL if present\n interpolatedRoute = interpolatedRoute.replace(replaced, repeat ? value.map( // these values should be fully encoded instead of just\n // path delimiter escaped since they are being inserted\n // into the URL and we expect URL encoded segments\n // when parsing dynamic route params\n function (segment) {\n return encodeURIComponent(segment);\n }).join('/') : encodeURIComponent(value)) || '/');\n })) {\n interpolatedRoute = ''; // did not satisfy all requirements\n // n.b. We ignore this error because we handle warning for this case in\n // development in the `<Link>` component directly.\n }\n\n return {\n params: params,\n result: interpolatedRoute\n };\n}\n\nfunction omitParmsFromQuery(query, params) {\n var filteredQuery = {};\n Object.keys(query).forEach(function (key) {\n if (!params.includes(key)) {\n filteredQuery[key] = query[key];\n }\n });\n return filteredQuery;\n}\n/**\n* Resolves a given hyperlink with a certain router state (basePath not included).\n* Preserves absolute urls.\n*/\n\n\nfunction resolveHref(currentPath, href, resolveAs) {\n // we use a dummy base url for relative urls\n var base;\n\n try {\n base = new URL(currentPath, 'http://n');\n } catch (_) {\n // fallback to / for invalid asPath values e.g. //\n base = new URL('/', 'http://n');\n }\n\n var urlAsString = typeof href === 'string' ? href : (0, _utils.formatWithValidation)(href); // Return because it cannot be routed by the Next.js router\n\n if (!isLocalURL(urlAsString)) {\n return resolveAs ? [urlAsString] : urlAsString;\n }\n\n try {\n var finalUrl = new URL(urlAsString, base);\n finalUrl.pathname = (0, _normalizeTrailingSlash.normalizePathTrailingSlash)(finalUrl.pathname);\n var interpolatedAs = '';\n\n if ((0, _isDynamic.isDynamicRoute)(finalUrl.pathname) && finalUrl.searchParams && resolveAs) {\n var query = (0, _querystring.searchParamsToUrlQuery)(finalUrl.searchParams);\n\n var _interpolateAs = interpolateAs(finalUrl.pathname, finalUrl.pathname, query),\n result = _interpolateAs.result,\n params = _interpolateAs.params;\n\n if (result) {\n interpolatedAs = (0, _utils.formatWithValidation)({\n pathname: result,\n hash: finalUrl.hash,\n query: omitParmsFromQuery(query, params)\n });\n }\n } // if the origin didn't change, it means we received a relative href\n\n\n var resolvedHref = finalUrl.origin === base.origin ? finalUrl.href.slice(finalUrl.origin.length) : finalUrl.href;\n return resolveAs ? [resolvedHref, interpolatedAs || resolvedHref] : resolvedHref;\n } catch (_) {\n return resolveAs ? [urlAsString] : urlAsString;\n }\n}\n\nfunction stripOrigin(url) {\n var origin = (0, _utils.getLocationOrigin)();\n return url.startsWith(origin) ? url.substring(origin.length) : url;\n}\n\nfunction prepareUrlAs(router, url, as) {\n // If url and as provided as an object representation,\n // we'll format them into the string version here.\n var _resolveHref = resolveHref(router.asPath, url, true),\n _resolveHref2 = _slicedToArray(_resolveHref, 2),\n resolvedHref = _resolveHref2[0],\n resolvedAs = _resolveHref2[1];\n\n var origin = (0, _utils.getLocationOrigin)();\n var hrefHadOrigin = resolvedHref.startsWith(origin);\n var asHadOrigin = resolvedAs && resolvedAs.startsWith(origin);\n resolvedHref = stripOrigin(resolvedHref);\n resolvedAs = resolvedAs ? stripOrigin(resolvedAs) : resolvedAs;\n var preparedUrl = hrefHadOrigin ? resolvedHref : addBasePath(resolvedHref);\n var preparedAs = as ? stripOrigin(resolveHref(router.asPath, as)) : resolvedAs || resolvedHref;\n return {\n url: preparedUrl,\n as: asHadOrigin ? preparedAs : addBasePath(preparedAs)\n };\n}\n\nfunction resolveDynamicRoute(pathname, pages) {\n var cleanPathname = (0, _normalizeTrailingSlash.removePathTrailingSlash)((0, _denormalizePagePath.denormalizePagePath)(pathname));\n\n if (cleanPathname === '/404' || cleanPathname === '/_error') {\n return pathname;\n } // handle resolving href for dynamic routes\n\n\n if (!pages.includes(cleanPathname)) {\n // eslint-disable-next-line array-callback-return\n pages.some(function (page) {\n if ((0, _isDynamic.isDynamicRoute)(page) && (0, _routeRegex.getRouteRegex)(page).re.test(cleanPathname)) {\n pathname = page;\n return true;\n }\n });\n }\n\n return (0, _normalizeTrailingSlash.removePathTrailingSlash)(pathname);\n}\n\nvar manualScrollRestoration = false && false;\nvar SSG_DATA_NOT_FOUND = Symbol('SSG_DATA_NOT_FOUND');\n\nfunction fetchRetry(url, attempts) {\n return fetch(url, {\n // Cookies are required to be present for Next.js' SSG \"Preview Mode\".\n // Cookies may also be required for `getServerSideProps`.\n //\n // > `fetch` won’t send cookies, unless you set the credentials init\n // > option.\n // https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch\n //\n // > For maximum browser compatibility when it comes to sending &\n // > receiving cookies, always supply the `credentials: 'same-origin'`\n // > option instead of relying on the default.\n // https://github.com/github/fetch#caveats\n credentials: 'same-origin'\n }).then(function (res) {\n if (!res.ok) {\n if (attempts > 1 && res.status >= 500) {\n return fetchRetry(url, attempts - 1);\n }\n\n if (res.status === 404) {\n return res.json().then(function (data) {\n if (data.notFound) {\n return {\n notFound: SSG_DATA_NOT_FOUND\n };\n }\n\n throw new Error(\"Failed to load static props\");\n });\n }\n\n throw new Error(\"Failed to load static props\");\n }\n\n return res.json();\n });\n}\n\nfunction fetchNextData(dataHref, isServerRender) {\n return fetchRetry(dataHref, isServerRender ? 3 : 1)[\"catch\"](function (err) {\n // We should only trigger a server-side transition if this was caused\n // on a client-side transition. Otherwise, we'd get into an infinite\n // loop.\n if (!isServerRender) {\n (0, _routeLoader.markAssetError)(err);\n }\n\n throw err;\n });\n}\n\nvar Router = /*#__PURE__*/function () {\n /**\n * Map of all components loaded in `Router`\n */\n // Static Data Cache\n // In-flight Server Data Requests, for deduping\n function Router(_pathname, _query, _as, _ref) {\n var _this = this;\n\n var initialProps = _ref.initialProps,\n pageLoader = _ref.pageLoader,\n App = _ref.App,\n wrapApp = _ref.wrapApp,\n Component = _ref.Component,\n err = _ref.err,\n subscription = _ref.subscription,\n isFallback = _ref.isFallback,\n locale = _ref.locale,\n locales = _ref.locales,\n defaultLocale = _ref.defaultLocale,\n domainLocales = _ref.domainLocales,\n isPreview = _ref.isPreview;\n\n _classCallCheck(this, Router);\n\n this.route = void 0;\n this.pathname = void 0;\n this.query = void 0;\n this.asPath = void 0;\n this.basePath = void 0;\n this.components = void 0;\n this.sdc = {};\n this.sdr = {};\n this.sub = void 0;\n this.clc = void 0;\n this.pageLoader = void 0;\n this._bps = void 0;\n this.events = void 0;\n this._wrapApp = void 0;\n this.isSsr = void 0;\n this.isFallback = void 0;\n this._inFlightRoute = void 0;\n this._shallow = void 0;\n this.locale = void 0;\n this.locales = void 0;\n this.defaultLocale = void 0;\n this.domainLocales = void 0;\n this.isReady = void 0;\n this.isPreview = void 0;\n this.isLocaleDomain = void 0;\n this._idx = 0;\n\n this.onPopState = function (e) {\n var state = e.state;\n\n if (!state) {\n // We get state as undefined for two reasons.\n // 1. With older safari (< 8) and older chrome (< 34)\n // 2. When the URL changed with #\n //\n // In the both cases, we don't need to proceed and change the route.\n // (as it's already changed)\n // But we can simply replace the state with the new changes.\n // Actually, for (1) we don't need to nothing. But it's hard to detect that event.\n // So, doing the following for (1) does no harm.\n var _pathname2 = _this.pathname,\n query = _this.query;\n\n _this.changeState('replaceState', (0, _utils.formatWithValidation)({\n pathname: addBasePath(_pathname2),\n query: query\n }), (0, _utils.getURL)());\n\n return;\n }\n\n if (!state.__N) {\n return;\n }\n\n var forcedScroll;\n var url = state.url,\n as = state.as,\n options = state.options,\n idx = state.idx;\n\n if (false) { var v; }\n\n _this._idx = idx;\n\n var _ref2 = (0, _parseRelativeUrl.parseRelativeUrl)(url),\n pathname = _ref2.pathname; // Make sure we don't re-render on initial load,\n // can be caused by navigating back from an external site\n\n\n if (_this.isSsr && as === _this.asPath && pathname === _this.pathname) {\n return;\n } // If the downstream application returns falsy, return.\n // They will then be responsible for handling the event.\n\n\n if (_this._bps && !_this._bps(state)) {\n return;\n }\n\n _this.change('replaceState', url, as, Object.assign({}, options, {\n shallow: options.shallow && _this._shallow,\n locale: options.locale || _this.defaultLocale\n }), forcedScroll);\n }; // represents the current component key\n\n\n this.route = (0, _normalizeTrailingSlash.removePathTrailingSlash)(_pathname); // set up the component cache (by route keys)\n\n this.components = {}; // We should not keep the cache, if there's an error\n // Otherwise, this cause issues when when going back and\n // come again to the errored page.\n\n if (_pathname !== '/_error') {\n this.components[this.route] = {\n Component: Component,\n initial: true,\n props: initialProps,\n err: err,\n __N_SSG: initialProps && initialProps.__N_SSG,\n __N_SSP: initialProps && initialProps.__N_SSP\n };\n }\n\n this.components['/_app'] = {\n Component: App,\n styleSheets: [\n /* /_app does not need its stylesheets managed */\n ]\n }; // Backwards compat for Router.router.events\n // TODO: Should be remove the following major version as it was never documented\n\n this.events = Router.events;\n this.pageLoader = pageLoader;\n this.pathname = _pathname;\n this.query = _query; // if auto prerendered and dynamic route wait to update asPath\n // until after mount to prevent hydration mismatch\n\n var autoExportDynamic = (0, _isDynamic.isDynamicRoute)(_pathname) && self.__NEXT_DATA__.autoExport;\n\n this.asPath = autoExportDynamic ? _pathname : _as;\n this.basePath = basePath;\n this.sub = subscription;\n this.clc = null;\n this._wrapApp = wrapApp; // make sure to ignore extra popState in safari on navigating\n // back from external site\n\n this.isSsr = true;\n this.isFallback = isFallback;\n this.isReady = !!(self.__NEXT_DATA__.gssp || self.__NEXT_DATA__.gip || !autoExportDynamic && !self.location.search && !false);\n this.isPreview = !!isPreview;\n this.isLocaleDomain = false;\n\n if (false) {}\n\n if (true) {\n // make sure \"as\" doesn't start with double slashes or else it can\n // throw an error as it's considered invalid\n if (_as.substr(0, 2) !== '//') {\n // in order for `e.state` to work on the `onpopstate` event\n // we have to register the initial route upon initialization\n this.changeState('replaceState', (0, _utils.formatWithValidation)({\n pathname: addBasePath(_pathname),\n query: _query\n }), (0, _utils.getURL)(), {\n locale: locale\n });\n }\n\n window.addEventListener('popstate', this.onPopState); // enable custom scroll restoration handling when available\n // otherwise fallback to browser's default handling\n\n if (false) {}\n }\n }\n\n _createClass(Router, [{\n key: \"reload\",\n value: function reload() {\n window.location.reload();\n }\n /**\n * Go back in history\n */\n\n }, {\n key: \"back\",\n value: function back() {\n window.history.back();\n }\n /**\n * Performs a `pushState` with arguments\n * @param url of the route\n * @param as masks `url` for the browser\n * @param options object you can define `shallow` and other options\n */\n\n }, {\n key: \"push\",\n value: function push(url, as) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (false) {}\n\n ;\n\n var _prepareUrlAs = prepareUrlAs(this, url, as);\n\n url = _prepareUrlAs.url;\n as = _prepareUrlAs.as;\n return this.change('pushState', url, as, options);\n }\n /**\n * Performs a `replaceState` with arguments\n * @param url of the route\n * @param as masks `url` for the browser\n * @param options object you can define `shallow` and other options\n */\n\n }, {\n key: \"replace\",\n value: function replace(url, as) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n ;\n\n var _prepareUrlAs2 = prepareUrlAs(this, url, as);\n\n url = _prepareUrlAs2.url;\n as = _prepareUrlAs2.as;\n return this.change('replaceState', url, as, options);\n }\n }, {\n key: \"change\",\n value: function () {\n var _change = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(method, url, as, options, forcedScroll) {\n var _options$scroll, shouldResolveHref, localeChange, parsedAs, localePathResult, didNavigate, _this$locales, detectedDomain, asNoBasePath, _options$shallow, shallow, routeProps, cleanedAs, parsed, pathname, query, pages, rewrites, _yield, resolvedAs, rewritesResult, route, _parsedAs, asPathname, routeRegex, routeMatch, shouldInterpolate, interpolatedAs, missingParams, _self$__NEXT_DATA__$p, _self$__NEXT_DATA__$p2, routeInfo, _routeInfo, error, props, __N_SSG, __N_SSP, destination, parsedHref, _prepareUrlAs3, newUrl, newAs, notFoundRoute, appComp, isValidShallowRoute;\n\n return _regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n if (isLocalURL(url)) {\n _context.next = 3;\n break;\n }\n\n window.location.href = url;\n return _context.abrupt(\"return\", false);\n\n case 3:\n shouldResolveHref = url === as || options._h; // for static pages with query params in the URL we delay\n // marking the router ready until after the query is updated\n\n if (options._h) {\n this.isReady = true;\n } // Default to scroll reset behavior unless explicitly specified to be\n // `false`! This makes the behavior between using `Router#push` and a\n // `<Link />` consistent.\n\n\n options.scroll = !!((_options$scroll = options.scroll) != null ? _options$scroll : true);\n localeChange = options.locale !== this.locale;\n\n if (true) {\n _context.next = 19;\n break;\n }\n\n this.locale = options.locale === false ? this.defaultLocale : options.locale || this.locale;\n\n if (typeof options.locale === 'undefined') {\n options.locale = this.locale;\n }\n\n parsedAs = (0, _parseRelativeUrl.parseRelativeUrl)(hasBasePath(as) ? delBasePath(as) : as);\n localePathResult = (0, _normalizeLocalePath.normalizeLocalePath)(parsedAs.pathname, this.locales);\n\n if (localePathResult.detectedLocale) {\n this.locale = localePathResult.detectedLocale;\n parsedAs.pathname = addBasePath(parsedAs.pathname);\n as = (0, _utils.formatWithValidation)(parsedAs);\n url = addBasePath((0, _normalizeLocalePath.normalizeLocalePath)(hasBasePath(url) ? delBasePath(url) : url, this.locales).pathname);\n }\n\n didNavigate = false; // we need to wrap this in the env check again since regenerator runtime\n // moves this on its own due to the return\n\n if (false) {}\n\n detectedDomain = detectDomainLocale(this.domainLocales, undefined, this.locale); // we need to wrap this in the env check again since regenerator runtime\n // moves this on its own due to the return\n\n if (false) {}\n\n if (!didNavigate) {\n _context.next = 19;\n break;\n }\n\n return _context.abrupt(\"return\", new Promise(function () {}));\n\n case 19:\n if (!options._h) {\n this.isSsr = false;\n } // marking route changes as a navigation start entry\n\n\n if (_utils.ST) {\n performance.mark('routeChange');\n }\n\n _options$shallow = options.shallow, shallow = _options$shallow === void 0 ? false : _options$shallow;\n routeProps = {\n shallow: shallow\n };\n\n if (this._inFlightRoute) {\n this.abortComponentLoad(this._inFlightRoute, routeProps);\n }\n\n as = addBasePath(addLocale(hasBasePath(as) ? delBasePath(as) : as, options.locale, this.defaultLocale));\n cleanedAs = delLocale(hasBasePath(as) ? delBasePath(as) : as, this.locale);\n this._inFlightRoute = as; // If the url change is only related to a hash change\n // We should not proceed. We should only change the state.\n // WARNING: `_h` is an internal option for handing Next.js client-side\n // hydration. Your app should _never_ use this property. It may change at\n // any time without notice.\n\n if (!(!options._h && this.onlyAHashChange(cleanedAs))) {\n _context.next = 35;\n break;\n }\n\n this.asPath = cleanedAs;\n Router.events.emit('hashChangeStart', as, routeProps); // TODO: do we need the resolved href when only a hash change?\n\n this.changeState(method, url, as, options);\n this.scrollToHash(cleanedAs);\n this.notify(this.components[this.route], null);\n Router.events.emit('hashChangeComplete', as, routeProps);\n return _context.abrupt(\"return\", true);\n\n case 35:\n parsed = (0, _parseRelativeUrl.parseRelativeUrl)(url);\n pathname = parsed.pathname, query = parsed.query; // The build manifest needs to be loaded before auto-static dynamic pages\n // get their query parameters to allow ensuring they can be parsed properly\n // when rewritten to\n\n _context.prev = 37;\n _context.next = 40;\n return this.pageLoader.getPageList();\n\n case 40:\n pages = _context.sent;\n _context.next = 43;\n return (0, _routeLoader.getClientBuildManifest)();\n\n case 43:\n _yield = _context.sent;\n rewrites = _yield.__rewrites;\n _context.next = 51;\n break;\n\n case 47:\n _context.prev = 47;\n _context.t0 = _context[\"catch\"](37);\n // If we fail to resolve the page list or client-build manifest, we must\n // do a server-side transition:\n window.location.href = as;\n return _context.abrupt(\"return\", false);\n\n case 51:\n // If asked to change the current URL we should reload the current page\n // (not location.reload() but reload getInitialProps and other Next.js stuffs)\n // We also need to set the method = replaceState always\n // as this should not go into the history (That's how browsers work)\n // We should compare the new asPath to the current asPath, not the url\n if (!this.urlIsNew(cleanedAs) && !localeChange) {\n method = 'replaceState';\n } // we need to resolve the as value using rewrites for dynamic SSG\n // pages to allow building the data URL correctly\n\n\n resolvedAs = as; // url and as should always be prefixed with basePath by this\n // point by either next/link or router.push/replace so strip the\n // basePath from the pathname to match the pages dir 1-to-1\n\n pathname = pathname ? (0, _normalizeTrailingSlash.removePathTrailingSlash)(delBasePath(pathname)) : pathname;\n\n if (shouldResolveHref && pathname !== '/_error') {\n if (false) {} else {\n parsed.pathname = resolveDynamicRoute(pathname, pages);\n\n if (parsed.pathname !== pathname) {\n pathname = parsed.pathname;\n url = (0, _utils.formatWithValidation)(parsed);\n }\n }\n }\n\n route = (0, _normalizeTrailingSlash.removePathTrailingSlash)(pathname);\n\n if (isLocalURL(as)) {\n _context.next = 61;\n break;\n }\n\n if (false) {}\n\n throw new Error(\"Invalid href: \\\"\".concat(url, \"\\\" and as: \\\"\").concat(as, \"\\\", received relative href and external as\") + \"\\nSee more info: https://nextjs.org/docs/messages/invalid-relative-url-external-as\");\n\n case 59:\n window.location.href = as;\n return _context.abrupt(\"return\", false);\n\n case 61:\n resolvedAs = delLocale(delBasePath(resolvedAs), this.locale);\n\n if (!(0, _isDynamic.isDynamicRoute)(route)) {\n _context.next = 77;\n break;\n }\n\n _parsedAs = (0, _parseRelativeUrl.parseRelativeUrl)(resolvedAs);\n asPathname = _parsedAs.pathname;\n routeRegex = (0, _routeRegex.getRouteRegex)(route);\n routeMatch = (0, _routeMatcher.getRouteMatcher)(routeRegex)(asPathname);\n shouldInterpolate = route === asPathname;\n interpolatedAs = shouldInterpolate ? interpolateAs(route, asPathname, query) : {};\n\n if (!(!routeMatch || shouldInterpolate && !interpolatedAs.result)) {\n _context.next = 76;\n break;\n }\n\n missingParams = Object.keys(routeRegex.groups).filter(function (param) {\n return !query[param];\n });\n\n if (!(missingParams.length > 0)) {\n _context.next = 74;\n break;\n }\n\n if (true) {\n console.warn(\"\".concat(shouldInterpolate ? \"Interpolating href\" : \"Mismatching `as` and `href`\", \" failed to manually provide \") + \"the params: \".concat(missingParams.join(', '), \" in the `href`'s `query`\"));\n }\n\n throw new Error((shouldInterpolate ? \"The provided `href` (\".concat(url, \") value is missing query values (\").concat(missingParams.join(', '), \") to be interpolated properly. \") : \"The provided `as` value (\".concat(asPathname, \") is incompatible with the `href` value (\").concat(route, \"). \")) + \"Read more: https://nextjs.org/docs/messages/\".concat(shouldInterpolate ? 'href-interpolation-failed' : 'incompatible-href-as'));\n\n case 74:\n _context.next = 77;\n break;\n\n case 76:\n if (shouldInterpolate) {\n as = (0, _utils.formatWithValidation)(Object.assign({}, _parsedAs, {\n pathname: interpolatedAs.result,\n query: omitParmsFromQuery(query, interpolatedAs.params)\n }));\n } else {\n // Merge params into `query`, overwriting any specified in search\n Object.assign(query, routeMatch);\n }\n\n case 77:\n Router.events.emit('routeChangeStart', as, routeProps);\n _context.prev = 78;\n _context.next = 81;\n return this.getRouteInfo(route, pathname, query, as, resolvedAs, routeProps);\n\n case 81:\n routeInfo = _context.sent;\n _routeInfo = routeInfo, error = _routeInfo.error, props = _routeInfo.props, __N_SSG = _routeInfo.__N_SSG, __N_SSP = _routeInfo.__N_SSP; // handle redirect on client-transition\n\n if (!((__N_SSG || __N_SSP) && props)) {\n _context.next = 108;\n break;\n }\n\n if (!(props.pageProps && props.pageProps.__N_REDIRECT)) {\n _context.next = 94;\n break;\n }\n\n destination = props.pageProps.__N_REDIRECT; // check if destination is internal (resolves to a page) and attempt\n // client-navigation if it is falling back to hard navigation if\n // it's not\n\n if (!destination.startsWith('/')) {\n _context.next = 92;\n break;\n }\n\n parsedHref = (0, _parseRelativeUrl.parseRelativeUrl)(destination);\n parsedHref.pathname = resolveDynamicRoute(parsedHref.pathname, pages);\n\n if (!pages.includes(parsedHref.pathname)) {\n _context.next = 92;\n break;\n }\n\n _prepareUrlAs3 = prepareUrlAs(this, destination, destination), newUrl = _prepareUrlAs3.url, newAs = _prepareUrlAs3.as;\n return _context.abrupt(\"return\", this.change(method, newUrl, newAs, options));\n\n case 92:\n window.location.href = destination;\n return _context.abrupt(\"return\", new Promise(function () {}));\n\n case 94:\n this.isPreview = !!props.__N_PREVIEW; // handle SSG data 404\n\n if (!(props.notFound === SSG_DATA_NOT_FOUND)) {\n _context.next = 108;\n break;\n }\n\n _context.prev = 96;\n _context.next = 99;\n return this.fetchComponent('/404');\n\n case 99:\n notFoundRoute = '/404';\n _context.next = 105;\n break;\n\n case 102:\n _context.prev = 102;\n _context.t1 = _context[\"catch\"](96);\n notFoundRoute = '/_error';\n\n case 105:\n _context.next = 107;\n return this.getRouteInfo(notFoundRoute, notFoundRoute, query, as, resolvedAs, {\n shallow: false\n });\n\n case 107:\n routeInfo = _context.sent;\n\n case 108:\n Router.events.emit('beforeHistoryChange', as, routeProps);\n this.changeState(method, url, as, options);\n\n if (true) {\n appComp = this.components['/_app'].Component;\n window.next.isPrerendered = appComp.getInitialProps === appComp.origGetInitialProps && !routeInfo.Component.getInitialProps;\n } // shallow routing is only allowed for same page URL changes.\n\n\n isValidShallowRoute = options.shallow && this.route === route;\n\n if (options._h && pathname === '/_error' && ((_self$__NEXT_DATA__$p = self.__NEXT_DATA__.props) == null ? void 0 : (_self$__NEXT_DATA__$p2 = _self$__NEXT_DATA__$p.pageProps) == null ? void 0 : _self$__NEXT_DATA__$p2.statusCode) === 500 && props != null && props.pageProps) {\n // ensure statusCode is still correct for static 500 page\n // when updating query information\n props.pageProps.statusCode = 500;\n }\n\n _context.next = 115;\n return this.set(route, pathname, query, cleanedAs, routeInfo, forcedScroll || (isValidShallowRoute || !options.scroll ? null : {\n x: 0,\n y: 0\n }))[\"catch\"](function (e) {\n if (e.cancelled) error = error || e;else throw e;\n });\n\n case 115:\n if (!error) {\n _context.next = 118;\n break;\n }\n\n Router.events.emit('routeChangeError', error, cleanedAs, routeProps);\n throw error;\n\n case 118:\n if (false) {}\n\n Router.events.emit('routeChangeComplete', as, routeProps);\n return _context.abrupt(\"return\", true);\n\n case 123:\n _context.prev = 123;\n _context.t2 = _context[\"catch\"](78);\n\n if (!_context.t2.cancelled) {\n _context.next = 127;\n break;\n }\n\n return _context.abrupt(\"return\", false);\n\n case 127:\n throw _context.t2;\n\n case 128:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, this, [[37, 47], [78, 123], [96, 102]]);\n }));\n\n function change(_x, _x2, _x3, _x4, _x5) {\n return _change.apply(this, arguments);\n }\n\n return change;\n }()\n }, {\n key: \"changeState\",\n value: function changeState(method, url, as) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n if (true) {\n if (typeof window.history === 'undefined') {\n console.error(\"Warning: window.history is not available.\");\n return;\n }\n\n if (typeof window.history[method] === 'undefined') {\n console.error(\"Warning: window.history.\".concat(method, \" is not available\"));\n return;\n }\n }\n\n if (method !== 'pushState' || (0, _utils.getURL)() !== as) {\n this._shallow = options.shallow;\n window.history[method]({\n url: url,\n as: as,\n options: options,\n __N: true,\n idx: this._idx = method !== 'pushState' ? this._idx : this._idx + 1\n }, // Most browsers currently ignores this parameter, although they may use it in the future.\n // Passing the empty string here should be safe against future changes to the method.\n // https://developer.mozilla.org/en-US/docs/Web/API/History/replaceState\n '', as);\n }\n }\n }, {\n key: \"handleRouteInfoError\",\n value: function () {\n var _handleRouteInfoError = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(err, pathname, query, as, routeProps, loadErrorFail) {\n var Component, styleSheets, props, _yield$this$fetchComp, routeInfo;\n\n return _regeneratorRuntime.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n if (!err.cancelled) {\n _context2.next = 2;\n break;\n }\n\n throw err;\n\n case 2:\n if (!((0, _routeLoader.isAssetError)(err) || loadErrorFail)) {\n _context2.next = 6;\n break;\n }\n\n Router.events.emit('routeChangeError', err, as, routeProps); // If we can't load the page it could be one of following reasons\n // 1. Page doesn't exists\n // 2. Page does exist in a different zone\n // 3. Internal error while loading the page\n // So, doing a hard reload is the proper way to deal with this.\n\n window.location.href = as; // Changing the URL doesn't block executing the current code path.\n // So let's throw a cancellation error stop the routing logic.\n\n throw buildCancellationError();\n\n case 6:\n _context2.prev = 6;\n\n if (!(typeof Component === 'undefined' || typeof styleSheets === 'undefined')) {\n _context2.next = 14;\n break;\n }\n\n ;\n _context2.next = 11;\n return this.fetchComponent('/_error');\n\n case 11:\n _yield$this$fetchComp = _context2.sent;\n Component = _yield$this$fetchComp.page;\n styleSheets = _yield$this$fetchComp.styleSheets;\n\n case 14:\n routeInfo = {\n props: props,\n Component: Component,\n styleSheets: styleSheets,\n err: err,\n error: err\n };\n\n if (routeInfo.props) {\n _context2.next = 26;\n break;\n }\n\n _context2.prev = 16;\n _context2.next = 19;\n return this.getInitialProps(Component, {\n err: err,\n pathname: pathname,\n query: query\n });\n\n case 19:\n routeInfo.props = _context2.sent;\n _context2.next = 26;\n break;\n\n case 22:\n _context2.prev = 22;\n _context2.t0 = _context2[\"catch\"](16);\n console.error('Error in error page `getInitialProps`: ', _context2.t0);\n routeInfo.props = {};\n\n case 26:\n return _context2.abrupt(\"return\", routeInfo);\n\n case 29:\n _context2.prev = 29;\n _context2.t1 = _context2[\"catch\"](6);\n return _context2.abrupt(\"return\", this.handleRouteInfoError(_context2.t1, pathname, query, as, routeProps, true));\n\n case 32:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2, this, [[6, 29], [16, 22]]);\n }));\n\n function handleRouteInfoError(_x6, _x7, _x8, _x9, _x10, _x11) {\n return _handleRouteInfoError.apply(this, arguments);\n }\n\n return handleRouteInfoError;\n }()\n }, {\n key: \"getRouteInfo\",\n value: function () {\n var _getRouteInfo = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(route, pathname, query, as, resolvedAs, routeProps) {\n var _this2 = this;\n\n var existingRouteInfo, cachedRouteInfo, routeInfo, Component, __N_SSG, __N_SSP, _require, isValidElementType, dataHref, props;\n\n return _regeneratorRuntime.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n _context3.prev = 0;\n existingRouteInfo = this.components[route];\n\n if (!(routeProps.shallow && existingRouteInfo && this.route === route)) {\n _context3.next = 4;\n break;\n }\n\n return _context3.abrupt(\"return\", existingRouteInfo);\n\n case 4:\n cachedRouteInfo = existingRouteInfo && 'initial' in existingRouteInfo ? undefined : existingRouteInfo;\n\n if (!cachedRouteInfo) {\n _context3.next = 9;\n break;\n }\n\n _context3.t0 = cachedRouteInfo;\n _context3.next = 12;\n break;\n\n case 9:\n _context3.next = 11;\n return this.fetchComponent(route).then(function (res) {\n return {\n Component: res.page,\n styleSheets: res.styleSheets,\n __N_SSG: res.mod.__N_SSG,\n __N_SSP: res.mod.__N_SSP\n };\n });\n\n case 11:\n _context3.t0 = _context3.sent;\n\n case 12:\n routeInfo = _context3.t0;\n Component = routeInfo.Component, __N_SSG = routeInfo.__N_SSG, __N_SSP = routeInfo.__N_SSP;\n\n if (false) {}\n\n _require = __webpack_require__(/*! react-is */ \"./node_modules/react-is/index.js\"), isValidElementType = _require.isValidElementType;\n\n if (isValidElementType(Component)) {\n _context3.next = 18;\n break;\n }\n\n throw new Error(\"The default export is not a React Component in page: \\\"\".concat(pathname, \"\\\"\"));\n\n case 18:\n if (__N_SSG || __N_SSP) {\n dataHref = this.pageLoader.getDataHref((0, _utils.formatWithValidation)({\n pathname: pathname,\n query: query\n }), resolvedAs, __N_SSG, this.locale);\n }\n\n _context3.next = 21;\n return this._getData(function () {\n return __N_SSG ? _this2._getStaticData(dataHref) : __N_SSP ? _this2._getServerData(dataHref) : _this2.getInitialProps(Component, // we provide AppTree later so this needs to be `any`\n {\n pathname: pathname,\n query: query,\n asPath: as,\n locale: _this2.locale,\n locales: _this2.locales,\n defaultLocale: _this2.defaultLocale\n });\n });\n\n case 21:\n props = _context3.sent;\n routeInfo.props = props;\n this.components[route] = routeInfo;\n return _context3.abrupt(\"return\", routeInfo);\n\n case 27:\n _context3.prev = 27;\n _context3.t1 = _context3[\"catch\"](0);\n return _context3.abrupt(\"return\", this.handleRouteInfoError(_context3.t1, pathname, query, as, routeProps));\n\n case 30:\n case \"end\":\n return _context3.stop();\n }\n }\n }, _callee3, this, [[0, 27]]);\n }));\n\n function getRouteInfo(_x12, _x13, _x14, _x15, _x16, _x17) {\n return _getRouteInfo.apply(this, arguments);\n }\n\n return getRouteInfo;\n }()\n }, {\n key: \"set\",\n value: function set(route, pathname, query, as, data, resetScroll) {\n this.isFallback = false;\n this.route = route;\n this.pathname = pathname;\n this.query = query;\n this.asPath = as;\n return this.notify(data, resetScroll);\n }\n /**\n * Callback to execute before replacing router state\n * @param cb callback to be executed\n */\n\n }, {\n key: \"beforePopState\",\n value: function beforePopState(cb) {\n this._bps = cb;\n }\n }, {\n key: \"onlyAHashChange\",\n value: function onlyAHashChange(as) {\n if (!this.asPath) return false;\n\n var _this$asPath$split = this.asPath.split('#'),\n _this$asPath$split2 = _slicedToArray(_this$asPath$split, 2),\n oldUrlNoHash = _this$asPath$split2[0],\n oldHash = _this$asPath$split2[1];\n\n var _as$split = as.split('#'),\n _as$split2 = _slicedToArray(_as$split, 2),\n newUrlNoHash = _as$split2[0],\n newHash = _as$split2[1]; // Makes sure we scroll to the provided hash if the url/hash are the same\n\n\n if (newHash && oldUrlNoHash === newUrlNoHash && oldHash === newHash) {\n return true;\n } // If the urls are change, there's more than a hash change\n\n\n if (oldUrlNoHash !== newUrlNoHash) {\n return false;\n } // If the hash has changed, then it's a hash only change.\n // This check is necessary to handle both the enter and\n // leave hash === '' cases. The identity case falls through\n // and is treated as a next reload.\n\n\n return oldHash !== newHash;\n }\n }, {\n key: \"scrollToHash\",\n value: function scrollToHash(as) {\n var _as$split3 = as.split('#'),\n _as$split4 = _slicedToArray(_as$split3, 2),\n hash = _as$split4[1]; // Scroll to top if the hash is just `#` with no value or `#top`\n // To mirror browsers\n\n\n if (hash === '' || hash === 'top') {\n window.scrollTo(0, 0);\n return;\n } // First we check if the element by id is found\n\n\n var idEl = document.getElementById(hash);\n\n if (idEl) {\n idEl.scrollIntoView();\n return;\n } // If there's no element with the id, we check the `name` property\n // To mirror browsers\n\n\n var nameEl = document.getElementsByName(hash)[0];\n\n if (nameEl) {\n nameEl.scrollIntoView();\n }\n }\n }, {\n key: \"urlIsNew\",\n value: function urlIsNew(asPath) {\n return this.asPath !== asPath;\n }\n /**\n * Prefetch page code, you may wait for the data during page rendering.\n * This feature only works in production!\n * @param url the href of prefetched page\n * @param asPath the as path of the prefetched page\n */\n\n }, {\n key: \"prefetch\",\n value: function () {\n var _prefetch = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4(url) {\n var _this3 = this;\n\n var asPath,\n options,\n parsed,\n pathname,\n parsedAs,\n localePathResult,\n pages,\n resolvedAs,\n rewrites,\n _yield2,\n rewritesResult,\n route,\n _args4 = arguments;\n\n return _regeneratorRuntime.wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n asPath = _args4.length > 1 && _args4[1] !== undefined ? _args4[1] : url;\n options = _args4.length > 2 && _args4[2] !== undefined ? _args4[2] : {};\n parsed = (0, _parseRelativeUrl.parseRelativeUrl)(url);\n pathname = parsed.pathname;\n\n if (false) {}\n\n _context4.next = 7;\n return this.pageLoader.getPageList();\n\n case 7:\n pages = _context4.sent;\n resolvedAs = asPath;\n\n if (true) {\n _context4.next = 19;\n break;\n }\n\n _context4.next = 12;\n return (0, _routeLoader.getClientBuildManifest)();\n\n case 12:\n _yield2 = _context4.sent;\n rewrites = _yield2.__rewrites;\n rewritesResult = (0, _resolveRewrites[\"default\"])(addBasePath(addLocale(asPath, this.locale)), pages, rewrites, parsed.query, function (p) {\n return resolveDynamicRoute(p, pages);\n }, this.locales);\n resolvedAs = delLocale(delBasePath(rewritesResult.asPath), this.locale);\n\n if (rewritesResult.matchedPage && rewritesResult.resolvedHref) {\n // if this directly matches a page we need to update the href to\n // allow the correct page chunk to be loaded\n pathname = rewritesResult.resolvedHref;\n parsed.pathname = pathname;\n url = (0, _utils.formatWithValidation)(parsed);\n }\n\n _context4.next = 21;\n break;\n\n case 19:\n parsed.pathname = resolveDynamicRoute(parsed.pathname, pages);\n\n if (parsed.pathname !== pathname) {\n pathname = parsed.pathname;\n url = (0, _utils.formatWithValidation)(parsed);\n }\n\n case 21:\n route = (0, _normalizeTrailingSlash.removePathTrailingSlash)(pathname); // Prefetch is not supported in development mode because it would trigger on-demand-entries\n\n if (false) {}\n\n return _context4.abrupt(\"return\");\n\n case 24:\n _context4.next = 26;\n return Promise.all([this.pageLoader._isSsg(route).then(function (isSsg) {\n return isSsg ? _this3._getStaticData(_this3.pageLoader.getDataHref(url, resolvedAs, true, typeof options.locale !== 'undefined' ? options.locale : _this3.locale)) : false;\n }), this.pageLoader[options.priority ? 'loadPage' : 'prefetch'](route)]);\n\n case 26:\n case \"end\":\n return _context4.stop();\n }\n }\n }, _callee4, this);\n }));\n\n function prefetch(_x18) {\n return _prefetch.apply(this, arguments);\n }\n\n return prefetch;\n }()\n }, {\n key: \"fetchComponent\",\n value: function () {\n var _fetchComponent = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5(route) {\n var cancelled, cancel, componentResult, error;\n return _regeneratorRuntime.wrap(function _callee5$(_context5) {\n while (1) {\n switch (_context5.prev = _context5.next) {\n case 0:\n cancelled = false;\n\n cancel = this.clc = function () {\n cancelled = true;\n };\n\n _context5.next = 4;\n return this.pageLoader.loadPage(route);\n\n case 4:\n componentResult = _context5.sent;\n\n if (!cancelled) {\n _context5.next = 9;\n break;\n }\n\n error = new Error(\"Abort fetching component for route: \\\"\".concat(route, \"\\\"\"));\n error.cancelled = true;\n throw error;\n\n case 9:\n if (cancel === this.clc) {\n this.clc = null;\n }\n\n return _context5.abrupt(\"return\", componentResult);\n\n case 11:\n case \"end\":\n return _context5.stop();\n }\n }\n }, _callee5, this);\n }));\n\n function fetchComponent(_x19) {\n return _fetchComponent.apply(this, arguments);\n }\n\n return fetchComponent;\n }()\n }, {\n key: \"_getData\",\n value: function _getData(fn) {\n var _this4 = this;\n\n var cancelled = false;\n\n var cancel = function cancel() {\n cancelled = true;\n };\n\n this.clc = cancel;\n return fn().then(function (data) {\n if (cancel === _this4.clc) {\n _this4.clc = null;\n }\n\n if (cancelled) {\n var err = new Error('Loading initial props cancelled');\n err.cancelled = true;\n throw err;\n }\n\n return data;\n });\n }\n }, {\n key: \"_getStaticData\",\n value: function _getStaticData(dataHref) {\n var _this5 = this;\n\n var _URL = new URL(dataHref, window.location.href),\n cacheKey = _URL.href;\n\n if (false) {}\n\n return fetchNextData(dataHref, this.isSsr).then(function (data) {\n _this5.sdc[cacheKey] = data;\n return data;\n });\n }\n }, {\n key: \"_getServerData\",\n value: function _getServerData(dataHref) {\n var _this6 = this;\n\n var _URL2 = new URL(dataHref, window.location.href),\n resourceKey = _URL2.href;\n\n if (this.sdr[resourceKey]) {\n return this.sdr[resourceKey];\n }\n\n return this.sdr[resourceKey] = fetchNextData(dataHref, this.isSsr).then(function (data) {\n delete _this6.sdr[resourceKey];\n return data;\n })[\"catch\"](function (err) {\n delete _this6.sdr[resourceKey];\n throw err;\n });\n }\n }, {\n key: \"getInitialProps\",\n value: function getInitialProps(Component, ctx) {\n var App = this.components['/_app'].Component;\n\n var AppTree = this._wrapApp(App);\n\n ctx.AppTree = AppTree;\n return (0, _utils.loadGetInitialProps)(App, {\n AppTree: AppTree,\n Component: Component,\n router: this,\n ctx: ctx\n });\n }\n }, {\n key: \"abortComponentLoad\",\n value: function abortComponentLoad(as, routeProps) {\n if (this.clc) {\n Router.events.emit('routeChangeError', buildCancellationError(), as, routeProps);\n this.clc();\n this.clc = null;\n }\n }\n }, {\n key: \"notify\",\n value: function notify(data, resetScroll) {\n return this.sub(data, this.components['/_app'].Component, resetScroll);\n }\n }]);\n\n return Router;\n}();\n\nexports[\"default\"] = Router;\nRouter.events = (0, _mitt[\"default\"])();\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../compiled/webpack/module.js */ \"./node_modules/next/dist/compiled/webpack/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uLy4uLy4uL25leHQtc2VydmVyL2xpYi9yb3V0ZXIvcm91dGVyLnRzPzM1YjgiXSwibmFtZXMiOlsicHJvY2VzcyIsImJhc2VQYXRoIiwiT2JqZWN0IiwiY2FuY2VsbGVkIiwicHJlZml4IiwicGF0aCIsInBhdGhOb1F1ZXJ5SGFzaCIsInF1ZXJ5SW5kZXgiLCJoYXNoSW5kZXgiLCJhZGRQYXRoUHJlZml4IiwidXJsIiwibG9jYXRpb25PcmlnaW4iLCJyZXNvbHZlZCIsImhhc0Jhc2VQYXRoIiwiaW50ZXJwb2xhdGVkUm91dGUiLCJkeW5hbWljUmVnZXgiLCJkeW5hbWljR3JvdXBzIiwiZHluYW1pY01hdGNoZXMiLCJhc1BhdGhuYW1lIiwicGFyYW1zIiwicGFyYW0iLCJ2YWx1ZSIsInJlcGxhY2VkIiwicmVwZWF0IiwiQXJyYXkiLCJvcHRpb25hbCIsInNlZ21lbnQiLCJlbmNvZGVVUklDb21wb25lbnQiLCJyZXN1bHQiLCJmaWx0ZXJlZFF1ZXJ5Iiwia2V5IiwicXVlcnkiLCJiYXNlIiwidXJsQXNTdHJpbmciLCJpc0xvY2FsVVJMIiwicmVzb2x2ZUFzIiwiZmluYWxVcmwiLCJpbnRlcnBvbGF0ZWRBcyIsImludGVycG9sYXRlQXMiLCJwYXRobmFtZSIsImhhc2giLCJvbWl0UGFybXNGcm9tUXVlcnkiLCJyZXNvbHZlZEhyZWYiLCJvcmlnaW4iLCJyZXNvbHZlSHJlZiIsInJvdXRlciIsImhyZWZIYWRPcmlnaW4iLCJhc0hhZE9yaWdpbiIsInJlc29sdmVkQXMiLCJzdHJpcE9yaWdpbiIsInByZXBhcmVkVXJsIiwiYWRkQmFzZVBhdGgiLCJwcmVwYXJlZEFzIiwiYXMiLCJjbGVhblBhdGhuYW1lIiwicGFnZXMiLCJwYWdlIiwibWFudWFsU2Nyb2xsUmVzdG9yYXRpb24iLCJTU0dfREFUQV9OT1RfRk9VTkQiLCJTeW1ib2wiLCJjcmVkZW50aWFscyIsInJlcyIsImF0dGVtcHRzIiwiZmV0Y2hSZXRyeSIsImRhdGEiLCJub3RGb3VuZCIsImlzU2VydmVyUmVuZGVyIiwiZXJyIiwiUm91dGVyIiwiY29uc3RydWN0b3IiLCJyb3V0ZSIsImFzUGF0aCIsImNvbXBvbmVudHMiLCJzZGMiLCJzZHIiLCJzdWIiLCJjbGMiLCJwYWdlTG9hZGVyIiwiX2JwcyIsImV2ZW50cyIsIl93cmFwQXBwIiwiaXNTc3IiLCJpc0ZhbGxiYWNrIiwiX2luRmxpZ2h0Um91dGUiLCJfc2hhbGxvdyIsImxvY2FsZSIsImxvY2FsZXMiLCJkZWZhdWx0TG9jYWxlIiwiZG9tYWluTG9jYWxlcyIsImlzUmVhZHkiLCJpc1ByZXZpZXciLCJpc0xvY2FsZURvbWFpbiIsIl9pZHgiLCJlIiwic3RhdGUiLCJzaGFsbG93Iiwib3B0aW9ucyIsIkNvbXBvbmVudCIsImluaXRpYWwiLCJwcm9wcyIsIl9fTl9TU0ciLCJpbml0aWFsUHJvcHMiLCJfX05fU1NQIiwic3R5bGVTaGVldHMiLCJhdXRvRXhwb3J0RHluYW1pYyIsInNlbGYiLCJ3aW5kb3ciLCJyZWxvYWQiLCJwcmVwYXJlVXJsQXMiLCJzaG91bGRSZXNvbHZlSHJlZiIsImxvY2FsZUNoYW5nZSIsInBhcnNlZEFzIiwiZGVsQmFzZVBhdGgiLCJsb2NhbGVQYXRoUmVzdWx0IiwiZGlkTmF2aWdhdGUiLCJkZXRlY3RlZERvbWFpbiIsImRldGVjdERvbWFpbkxvY2FsZSIsIlNUIiwicGVyZm9ybWFuY2UiLCJyb3V0ZVByb3BzIiwiYWRkTG9jYWxlIiwiY2xlYW5lZEFzIiwiZGVsTG9jYWxlIiwicGFyc2VkIiwiX19yZXdyaXRlcyIsIm1ldGhvZCIsInJlc29sdmVEeW5hbWljUm91dGUiLCJyb3V0ZVJlZ2V4Iiwicm91dGVNYXRjaCIsInNob3VsZEludGVycG9sYXRlIiwibWlzc2luZ1BhcmFtcyIsImNvbnNvbGUiLCJyb3V0ZUluZm8iLCJkZXN0aW5hdGlvbiIsInBhcnNlZEhyZWYiLCJub3RGb3VuZFJvdXRlIiwiYXBwQ29tcCIsImlzVmFsaWRTaGFsbG93Um91dGUiLCJmb3JjZWRTY3JvbGwiLCJ4IiwieSIsImVycm9yIiwiX19OIiwiaWR4IiwiYnVpbGRDYW5jZWxsYXRpb25FcnJvciIsImV4aXN0aW5nUm91dGVJbmZvIiwiY2FjaGVkUm91dGVJbmZvIiwicmVxdWlyZSIsImlzVmFsaWRFbGVtZW50VHlwZSIsImRhdGFIcmVmIiwib25seUFIYXNoQ2hhbmdlIiwibmV3SGFzaCIsIm9sZFVybE5vSGFzaCIsIm9sZEhhc2giLCJzY3JvbGxUb0hhc2giLCJpZEVsIiwiZG9jdW1lbnQiLCJuYW1lRWwiLCJ1cmxJc05ldyIsInJld3JpdGVzUmVzdWx0IiwicCIsIlByb21pc2UiLCJpc1NzZyIsImNhbmNlbCIsImNvbXBvbmVudFJlc3VsdCIsImZuIiwiX2dldFN0YXRpY0RhdGEiLCJocmVmIiwiZmV0Y2hOZXh0RGF0YSIsIl9nZXRTZXJ2ZXJEYXRhIiwiZ2V0SW5pdGlhbFByb3BzIiwiQXBwVHJlZSIsImN0eCIsImFib3J0Q29tcG9uZW50TG9hZCIsIm5vdGlmeSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBSUE7O0FBS0E7O0FBTUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBVUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7OztBQWpDQSxDLENBQUE7OztBQStEQTs7QUFFQSxJQUFJQSxLQUFKLEVBQXFDLEVBS3JDOztBQUFBLElBQU1DLFFBQVEsR0FBSUQsVUFBbEI7O0FBRUEsa0NBQWtDO0FBQ2hDLFNBQU9FLE1BQU0sQ0FBTkEsT0FBYyxVQUFkQSxpQkFBYyxDQUFkQSxFQUE0QztBQUNqREMsYUFBUyxFQURYO0FBQW1ELEdBQTVDRCxDQUFQO0FBS0Y7O0FBQUEscUNBQXNEO0FBQ3BELFNBQU9FLE1BQU0sSUFBSUMsSUFBSSxDQUFKQSxXQUFWRCxHQUFVQyxDQUFWRCxHQUNIQyxJQUFJLEtBQUpBLE1BQ0Usd0RBREZBLE1BQ0UsQ0FERkEsYUFFS0QsTUFGTEMsU0FFY0MsZUFBZSxDQUFmQSxJQUFlLENBQWZBLFdBQWdDRCxJQUFJLENBQUpBLFVBQWhDQyxDQUFnQ0QsQ0FB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RDtBQUd0RHBELGNBQU0sRUFIZ0Q7QUFJdEQrSCxXQUpGLEVBSUVBO0FBSnNELE9BQWpELENBQVA7QUFRRkM7Ozt1Q0FBa0IsRSxFQUFBLFUsRUFBZ0Q7QUFDaEUsVUFBSSxLQUFKLEtBQWM7QUFDWnpHLGNBQU0sQ0FBTkEsZ0NBRUU0RSxzQkFGRjVFO0FBTUE7QUFDQTtBQUVIO0FBRUQwRzs7OzJCQUFNLEksRUFBQSxXLEVBR1c7QUFDZixhQUFPLGVBRUwseUJBRkssV0FBUCxXQUFPLENBQVA7QUEvb0M4Qzs7Ozs7OztBQUE3QjFHLE0sQ0FvQ1pXLE1BcENZWCxHQW9DVSx1QkFwQ1ZBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9uZXh0LXNlcnZlci9saWIvcm91dGVyL3JvdXRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRzbGludDpkaXNhYmxlOm5vLWNvbnNvbGVcbmltcG9ydCB7IFBhcnNlZFVybFF1ZXJ5IH0gZnJvbSAncXVlcnlzdHJpbmcnXG5pbXBvcnQgeyBDb21wb25lbnRUeXBlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBVcmxPYmplY3QgfSBmcm9tICd1cmwnXG5pbXBvcnQge1xuICBub3JtYWxpemVQYXRoVHJhaWxpbmdTbGFzaCxcbiAgcmVtb3ZlUGF0aFRyYWlsaW5nU2xhc2gsXG59IGZyb20gJy4uLy4uLy4uL2NsaWVudC9ub3JtYWxpemUtdHJhaWxpbmctc2xhc2gnXG5pbXBvcnQgeyBHb29kUGFnZUNhY2hlLCBTdHlsZVNoZWV0VHVwbGUgfSBmcm9tICcuLi8uLi8uLi9jbGllbnQvcGFnZS1sb2FkZXInXG5pbXBvcnQge1xuICBnZXRDbGllbnRCdWlsZE1hbmlmZXN0LFxuICBpc0Fzc2V0RXJyb3IsXG4gIG1hcmtBc3NldEVycm9yLFxufSBmcm9tICcuLi8uLi8uLi9jbGllbnQvcm91dGUtbG9hZGVyJ1xuaW1wb3J0IHsgRG9tYWluTG9jYWxlcyB9IGZyb20gJy4uLy4uL3NlcnZlci9jb25maWcnXG5pbXBvcnQgeyBkZW5vcm1hbGl6ZVBhZ2VQYXRoIH0gZnJvbSAnLi4vLi4vc2VydmVyL2Rlbm9ybWFsaXplLXBhZ2UtcGF0aCdcbmltcG9ydCB7IG5vcm1hbGl6ZUxvY2FsZVBhdGggfSBmcm9tICcuLi9pMThuL25vcm1hbGl6ZS1sb2NhbGUtcGF0aCdcbmltcG9ydCBtaXR0LCB7IE1pdHRFbWl0dGVyIH0gZnJvbSAnLi4vbWl0dCdcbmltcG9ydCB7XG4gIEFwcENvbnRleHRUeXBlLFxuICBmb3JtYXRXaXRoVmFsaWRhdGlvbixcbiAgZ2V0TG9jYXRpb25PcmlnaW4sXG4gIGdldFVSTCxcbiAgbG9hZEdldEluaXRpYWxQcm9wcyxcbiAgTmV4dFBhZ2VDb250ZXh0LFxuICBTVCxcbiAgTkVYVF9EQVRBLFxufSBmcm9tICcuLi91dGlscydcbmltcG9ydCB7IGlzRHluYW1pY1JvdXRlIH0gZnJvbSAnLi91dGlscy9pcy1keW5hbWljJ1xuaW1wb3J0IHsgcGFyc2VSZWxhdGl2ZVVybCB9IGZyb20gJy4vdXRpbHMvcGFyc2UtcmVsYXRpdmUtdXJsJ1xuaW1wb3J0IHsgc2VhcmNoUGFyYW1zVG9VcmxRdWVyeSB9IGZyb20gJy4vdXRpbHMvcXVlcnlzdHJpbmcnXG5pbXBvcnQgcmVzb2x2ZVJld3JpdGVzIGZyb20gJy4vdXRpbHMvcmVzb2x2ZS1yZXdyaXRlcydcbmltcG9ydCB7IGdldFJvdXRlTWF0Y2hlciB9IGZyb20gJy4vdXRpbHMvcm91dGUtbWF0Y2hlcidcbmltcG9ydCB7IGdldFJvdXRlUmVnZXggfSBmcm9tICcuL3V0aWxzL3JvdXRlLXJlZ2V4J1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBXaW5kb3cge1xuICAgIC8qIHByb2QgKi9cbiAgICBfX05FWFRfREFUQV9fOiBORVhUX0RBVEFcbiAgfVxufVxuXG5pbnRlcmZhY2UgUm91dGVQcm9wZXJ0aWVzIHtcbiAgc2hhbGxvdzogYm9vbGVhblxufVxuXG5pbnRlcmZhY2UgVHJhbnNpdGlvbk9wdGlvbnMge1xuICBzaGFsbG93PzogYm9vbGVhblxuICBsb2NhbGU/OiBzdHJpbmcgfCBmYWxzZVxuICBzY3JvbGw/OiBib29sZWFuXG59XG5cbmludGVyZmFjZSBOZXh0SGlzdG9yeVN0YXRlIHtcbiAgdXJsOiBzdHJpbmdcbiAgYXM6IHN0cmluZ1xuICBvcHRpb25zOiBUcmFuc2l0aW9uT3B0aW9uc1xufVxuXG50eXBlIEhpc3RvcnlTdGF0ZSA9XG4gIHwgbnVsbFxuICB8IHsgX19OOiBmYWxzZSB9XG4gIHwgKHsgX19OOiB0cnVlOyBpZHg6IG51bWJlciB9ICYgTmV4dEhpc3RvcnlTdGF0ZSlcblxubGV0IGRldGVjdERvbWFpbkxvY2FsZTogdHlwZW9mIGltcG9ydCgnLi4vaTE4bi9kZXRlY3QtZG9tYWluLWxvY2FsZScpLmRldGVjdERvbWFpbkxvY2FsZVxuXG5pZiAocHJvY2Vzcy5lbnYuX19ORVhUX0kxOE5fU1VQUE9SVCkge1xuICBkZXRlY3REb21haW5Mb2NhbGUgPSByZXF1aXJlKCcuLi9pMThuL2RldGVjdC1kb21haW4tbG9jYWxlJylcbiAgICAuZGV0ZWN0RG9tYWluTG9jYWxlXG59XG5cbmNvbnN0IGJhc2VQYXRoID0gKHByb2Nlc3MuZW52Ll9fTkVYVF9ST1VURVJfQkFTRVBBVEggYXMgc3RyaW5nKSB8fCAnJ1xuXG5mdW5jdGlvbiBidWlsZENhbmNlbGxhdGlvbkVycm9yKCkge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoJ1JvdXRlIENhbmNlbGxlZCcpLCB7XG4gICAgY2FuY2VsbGVkOiB0cnVlLFxuICB9KVxufVxuXG5mdW5jdGlvbiBhZGRQYXRoUHJlZml4KHBhdGg6IHN0cmluZywgcHJlZml4Pzogc3RyaW5nKSB7XG4gIHJldHVybiBwcmVmaXggJiYgcGF0aC5zdGFydHNXaXRoKCcvJylcbiAgICA/IHBhdGggPT09ICcvJ1xuICAgICAgPyBub3JtYWxpemVQYXRoVHJhaWxpbmdTbGFzaChwcmVmaXgpXG4gICAgICA6IGAke3ByZWZpeH0ke3BhdGhOb1F1ZXJ5SGFzaChwYXRoKSA9PT0gJy8nID8gcGF0aC5zdWJzdHJpbmcoMSkgOiBwYXRofWBcbiAgICA6IHBhdGhcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERvbWFpbkxvY2FsZShcbiAgcGF0aDogc3RyaW5nLFxuICBsb2NhbGU/OiBzdHJpbmcgfCBmYWxzZSxcbiAgbG9jYWxlcz86IHN0cmluZ1tdLFxuICBkb21haW5Mb2NhbGVzPzogRG9tYWluTG9jYWxlc1xuKSB7XG4gIGlmIChwcm9jZXNzLmVudi5fX05FWFRfSTE4Tl9TVVBQT1JUKSB7XG4gICAgbG9jYWxlID0gbG9jYWxlIHx8IG5vcm1hbGl6ZUxvY2FsZVBhdGgocGF0aCwgbG9jYWxlcykuZGV0ZWN0ZWRMb2NhbGVcblxuICAgIGNvbnN0IGRldGVjdGVkRG9tYWluID0gZGV0ZWN0RG9tYWluTG9jYWxlKGRvbWFpbkxvY2FsZXMsIHVuZGVmaW5lZCwgbG9jYWxlKVxuXG4gICAgaWYgKGRldGVjdGVkRG9tYWluKSB7XG4gICAgICByZXR1cm4gYGh0dHAke2RldGVjdGVkRG9tYWluLmh0dHAgPyAnJyA6ICdzJ306Ly8ke2RldGVjdGVkRG9tYWluLmRvbWFpbn0ke1xuICAgICAgICBiYXNlUGF0aCB8fCAnJ1xuICAgICAgfSR7bG9jYWxlID09PSBkZXRlY3RlZERvbWFpbi5kZWZhdWx0TG9jYWxlID8gJycgOiBgLyR7bG9jYWxlfWB9JHtwYXRofWBcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZExvY2FsZShcbiAgcGF0aDogc3RyaW5nLFxuICBsb2NhbGU/OiBzdHJpbmcgfCBmYWxzZSxcbiAgZGVmYXVsdExvY2FsZT86IHN0cmluZ1xuKSB7XG4gIGlmIChwcm9jZXNzLmVudi5fX05FWFRfSTE4Tl9TVVBQT1JUKSB7XG4gICAgY29uc3QgcGF0aG5hbWUgPSBwYXRoTm9RdWVyeUhhc2gocGF0aClcbiAgICBjb25zdCBwYXRoTG93ZXIgPSBwYXRobmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgY29uc3QgbG9jYWxlTG93ZXIgPSBsb2NhbGUgJiYgbG9jYWxlLnRvTG93ZXJDYXNlKClcblxuICAgIHJldHVybiBsb2NhbGUgJiZcbiAgICAgIGxvY2FsZSAhPT0gZGVmYXVsdExvY2FsZSAmJlxuICAgICAgIXBhdGhMb3dlci5zdGFydHNXaXRoKCcvJyArIGxvY2FsZUxvd2VyICsgJy8nKSAmJlxuICAgICAgcGF0aExvd2VyICE9PSAnLycgKyBsb2NhbGVMb3dlclxuICAgICAgPyBhZGRQYXRoUHJlZml4KHBhdGgsICcvJyArIGxvY2FsZSlcbiAgICAgIDogcGF0aFxuICB9XG4gIHJldHVybiBwYXRoXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWxMb2NhbGUocGF0aDogc3RyaW5nLCBsb2NhbGU/OiBzdHJpbmcpIHtcbiAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9JMThOX1NVUFBPUlQpIHtcbiAgICBjb25zdCBwYXRobmFtZSA9IHBhdGhOb1F1ZXJ5SGFzaChwYXRoKVxuICAgIGNvbnN0IHBhdGhMb3dlciA9IHBhdGhuYW1lLnRvTG93ZXJDYXNlKClcbiAgICBjb25zdCBsb2NhbGVMb3dlciA9IGxvY2FsZSAmJiBsb2NhbGUudG9Mb3dlckNhc2UoKVxuXG4gICAgcmV0dXJuIGxvY2FsZSAmJlxuICAgICAgKHBhdGhMb3dlci5zdGFydHNXaXRoKCcvJyArIGxvY2FsZUxvd2VyICsgJy8nKSB8fFxuICAgICAgICBwYXRoTG93ZXIgPT09ICcvJyArIGxvY2FsZUxvd2VyKVxuICAgICAgPyAocGF0aG5hbWUubGVuZ3RoID09PSBsb2NhbGUubGVuZ3RoICsgMSA/ICcvJyA6ICcnKSArXG4gICAgICAgICAgcGF0aC5zdWJzdHIobG9jYWxlLmxlbmd0aCArIDEpXG4gICAgICA6IHBhdGhcbiAgfVxuICByZXR1cm4gcGF0aFxufVxuXG5mdW5jdGlvbiBwYXRoTm9RdWVyeUhhc2gocGF0aDogc3RyaW5nKSB7XG4gIGNvbnN0IHF1ZXJ5SW5kZXggPSBwYXRoLmluZGV4T2YoJz8nKVxuICBjb25zdCBoYXNoSW5kZXggPSBwYXRoLmluZGV4T2YoJyMnKVxuXG4gIGlmIChxdWVyeUluZGV4ID4gLTEgfHwgaGFzaEluZGV4ID4gLTEpIHtcbiAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoMCwgcXVlcnlJbmRleCA+IC0xID8gcXVlcnlJbmRleCA6IGhhc2hJbmRleClcbiAgfVxuICByZXR1cm4gcGF0aFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzQmFzZVBhdGgocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHBhdGggPSBwYXRoTm9RdWVyeUhhc2gocGF0aClcbiAgcmV0dXJuIHBhdGggPT09IGJhc2VQYXRoIHx8IHBhdGguc3RhcnRzV2l0aChiYXNlUGF0aCArICcvJylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZEJhc2VQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIHdlIG9ubHkgYWRkIHRoZSBiYXNlcGF0aCBvbiByZWxhdGl2ZSB1cmxzXG4gIHJldHVybiBhZGRQYXRoUHJlZml4KHBhdGgsIGJhc2VQYXRoKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVsQmFzZVBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcGF0aCA9IHBhdGguc2xpY2UoYmFzZVBhdGgubGVuZ3RoKVxuICBpZiAoIXBhdGguc3RhcnRzV2l0aCgnLycpKSBwYXRoID0gYC8ke3BhdGh9YFxuICByZXR1cm4gcGF0aFxufVxuXG4vKipcbiAqIERldGVjdHMgd2hldGhlciBhIGdpdmVuIHVybCBpcyByb3V0YWJsZSBieSB0aGUgTmV4dC5qcyByb3V0ZXIgKGJyb3dzZXIgb25seSkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0xvY2FsVVJMKHVybDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIC8vIHByZXZlbnQgYSBoeWRyYXRpb24gbWlzbWF0Y2ggb24gaHJlZiBmb3IgdXJsIHdpdGggYW5jaG9yIHJlZnNcbiAgaWYgKHVybC5zdGFydHNXaXRoKCcvJykgfHwgdXJsLnN0YXJ0c1dpdGgoJyMnKSkgcmV0dXJuIHRydWVcbiAgdHJ5IHtcbiAgICAvLyBhYnNvbHV0ZSB1cmxzIGNhbiBiZSBsb2NhbCBpZiB0aGV5IGFyZSBvbiB0aGUgc2FtZSBvcmlnaW5cbiAgICBjb25zdCBsb2NhdGlvbk9yaWdpbiA9IGdldExvY2F0aW9uT3JpZ2luKClcbiAgICBjb25zdCByZXNvbHZlZCA9IG5ldyBVUkwodXJsLCBsb2NhdGlvbk9yaWdpbilcbiAgICByZXR1cm4gcmVzb2x2ZWQub3JpZ2luID09PSBsb2NhdGlvbk9yaWdpbiAmJiBoYXNCYXNlUGF0aChyZXNvbHZlZC5wYXRobmFtZSlcbiAgfSBjYXRjaCAoXykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbnR5cGUgVXJsID0gVXJsT2JqZWN0IHwgc3RyaW5nXG5cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcnBvbGF0ZUFzKFxuICByb3V0ZTogc3RyaW5nLFxuICBhc1BhdGhuYW1lOiBzdHJpbmcsXG4gIHF1ZXJ5OiBQYXJzZWRVcmxRdWVyeVxuKSB7XG4gIGxldCBpbnRlcnBvbGF0ZWRSb3V0ZSA9ICcnXG5cbiAgY29uc3QgZHluYW1pY1JlZ2V4ID0gZ2V0Um91dGVSZWdleChyb3V0ZSlcbiAgY29uc3QgZHluYW1pY0dyb3VwcyA9IGR5bmFtaWNSZWdleC5ncm91cHNcbiAgY29uc3QgZHluYW1pY01hdGNoZXMgPVxuICAgIC8vIFRyeSB0byBtYXRjaCB0aGUgZHluYW1pYyByb3V0ZSBhZ2FpbnN0IHRoZSBhc1BhdGhcbiAgICAoYXNQYXRobmFtZSAhPT0gcm91dGUgPyBnZXRSb3V0ZU1hdGNoZXIoZHluYW1pY1JlZ2V4KShhc1BhdGhuYW1lKSA6ICcnKSB8fFxuICAgIC8vIEZhbGwgYmFjayB0byByZWFkaW5nIHRoZSB2YWx1ZXMgZnJvbSB0aGUgaHJlZlxuICAgIC8vIFRPRE86IHNob3VsZCB0aGlzIHRha2UgcHJpb3JpdHk7IGFsc28gbmVlZCB0byBjaGFuZ2UgaW4gdGhlIHJvdXRlci5cbiAgICBxdWVyeVxuXG4gIGludGVycG9sYXRlZFJvdXRlID0gcm91dGVcbiAgY29uc3QgcGFyYW1zID0gT2JqZWN0LmtleXMoZHluYW1pY0dyb3VwcylcblxuICBpZiAoXG4gICAgIXBhcmFtcy5ldmVyeSgocGFyYW0pID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IGR5bmFtaWNNYXRjaGVzW3BhcmFtXSB8fCAnJ1xuICAgICAgY29uc3QgeyByZXBlYXQsIG9wdGlvbmFsIH0gPSBkeW5hbWljR3JvdXBzW3BhcmFtXVxuXG4gICAgICAvLyBzdXBwb3J0IHNpbmdsZS1sZXZlbCBjYXRjaC1hbGxcbiAgICAgIC8vIFRPRE86IG1vcmUgcm9idXN0IGhhbmRsaW5nIGZvciB1c2VyLWVycm9yIChwYXNzaW5nIGAvYClcbiAgICAgIGxldCByZXBsYWNlZCA9IGBbJHtyZXBlYXQgPyAnLi4uJyA6ICcnfSR7cGFyYW19XWBcbiAgICAgIGlmIChvcHRpb25hbCkge1xuICAgICAgICByZXBsYWNlZCA9IGAkeyF2YWx1ZSA/ICcvJyA6ICcnfVske3JlcGxhY2VkfV1gXG4gICAgICB9XG4gICAgICBpZiAocmVwZWF0ICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkgdmFsdWUgPSBbdmFsdWVdXG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIChvcHRpb25hbCB8fCBwYXJhbSBpbiBkeW5hbWljTWF0Y2hlcykgJiZcbiAgICAgICAgLy8gSW50ZXJwb2xhdGUgZ3JvdXAgaW50byBkYXRhIFVSTCBpZiBwcmVzZW50XG4gICAgICAgIChpbnRlcnBvbGF0ZWRSb3V0ZSA9XG4gICAgICAgICAgaW50ZXJwb2xhdGVkUm91dGUhLnJlcGxhY2UoXG4gICAgICAgICAgICByZXBsYWNlZCxcbiAgICAgICAgICAgIHJlcGVhdFxuICAgICAgICAgICAgICA/ICh2YWx1ZSBhcyBzdHJpbmdbXSlcbiAgICAgICAgICAgICAgICAgIC5tYXAoXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZXNlIHZhbHVlcyBzaG91bGQgYmUgZnVsbHkgZW5jb2RlZCBpbnN0ZWFkIG9mIGp1c3RcbiAgICAgICAgICAgICAgICAgICAgLy8gcGF0aCBkZWxpbWl0ZXIgZXNjYXBlZCBzaW5jZSB0aGV5IGFyZSBiZWluZyBpbnNlcnRlZFxuICAgICAgICAgICAgICAgICAgICAvLyBpbnRvIHRoZSBVUkwgYW5kIHdlIGV4cGVjdCBVUkwgZW5jb2RlZCBzZWdtZW50c1xuICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIHBhcnNpbmcgZHluYW1pYyByb3V0ZSBwYXJhbXNcbiAgICAgICAgICAgICAgICAgICAgKHNlZ21lbnQpID0+IGVuY29kZVVSSUNvbXBvbmVudChzZWdtZW50KVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgLmpvaW4oJy8nKVxuICAgICAgICAgICAgICA6IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSBhcyBzdHJpbmcpXG4gICAgICAgICAgKSB8fCAnLycpXG4gICAgICApXG4gICAgfSlcbiAgKSB7XG4gICAgaW50ZXJwb2xhdGVkUm91dGUgPSAnJyAvLyBkaWQgbm90IHNhdGlzZnkgYWxsIHJlcXVpcmVtZW50c1xuXG4gICAgLy8gbi5iLiBXZSBpZ25vcmUgdGhpcyBlcnJvciBiZWNhdXNlIHdlIGhhbmRsZSB3YXJuaW5nIGZvciB0aGlzIGNhc2UgaW5cbiAgICAvLyBkZXZlbG9wbWVudCBpbiB0aGUgYDxMaW5rPmAgY29tcG9uZW50IGRpcmVjdGx5LlxuICB9XG4gIHJldHVybiB7XG4gICAgcGFyYW1zLFxuICAgIHJlc3VsdDogaW50ZXJwb2xhdGVkUm91dGUsXG4gIH1cbn1cblxuZnVuY3Rpb24gb21pdFBhcm1zRnJvbVF1ZXJ5KHF1ZXJ5OiBQYXJzZWRVcmxRdWVyeSwgcGFyYW1zOiBzdHJpbmdbXSkge1xuICBjb25zdCBmaWx0ZXJlZFF1ZXJ5OiBQYXJzZWRVcmxRdWVyeSA9IHt9XG5cbiAgT2JqZWN0LmtleXMocXVlcnkpLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmICghcGFyYW1zLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIGZpbHRlcmVkUXVlcnlba2V5XSA9IHF1ZXJ5W2tleV1cbiAgICB9XG4gIH0pXG4gIHJldHVybiBmaWx0ZXJlZFF1ZXJ5XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgYSBnaXZlbiBoeXBlcmxpbmsgd2l0aCBhIGNlcnRhaW4gcm91dGVyIHN0YXRlIChiYXNlUGF0aCBub3QgaW5jbHVkZWQpLlxuICogUHJlc2VydmVzIGFic29sdXRlIHVybHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlSHJlZihcbiAgY3VycmVudFBhdGg6IHN0cmluZyxcbiAgaHJlZjogVXJsLFxuICByZXNvbHZlQXM/OiBib29sZWFuXG4pOiBzdHJpbmcge1xuICAvLyB3ZSB1c2UgYSBkdW1teSBiYXNlIHVybCBmb3IgcmVsYXRpdmUgdXJsc1xuICBsZXQgYmFzZTogVVJMXG5cbiAgdHJ5IHtcbiAgICBiYXNlID0gbmV3IFVSTChjdXJyZW50UGF0aCwgJ2h0dHA6Ly9uJylcbiAgfSBjYXRjaCAoXykge1xuICAgIC8vIGZhbGxiYWNrIHRvIC8gZm9yIGludmFsaWQgYXNQYXRoIHZhbHVlcyBlLmcuIC8vXG4gICAgYmFzZSA9IG5ldyBVUkwoJy8nLCAnaHR0cDovL24nKVxuICB9XG4gIGNvbnN0IHVybEFzU3RyaW5nID1cbiAgICB0eXBlb2YgaHJlZiA9PT0gJ3N0cmluZycgPyBocmVmIDogZm9ybWF0V2l0aFZhbGlkYXRpb24oaHJlZilcbiAgLy8gUmV0dXJuIGJlY2F1c2UgaXQgY2Fubm90IGJlIHJvdXRlZCBieSB0aGUgTmV4dC5qcyByb3V0ZXJcbiAgaWYgKCFpc0xvY2FsVVJMKHVybEFzU3RyaW5nKSkge1xuICAgIHJldHVybiAocmVzb2x2ZUFzID8gW3VybEFzU3RyaW5nXSA6IHVybEFzU3RyaW5nKSBhcyBzdHJpbmdcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IGZpbmFsVXJsID0gbmV3IFVSTCh1cmxBc1N0cmluZywgYmFzZSlcbiAgICBmaW5hbFVybC5wYXRobmFtZSA9IG5vcm1hbGl6ZVBhdGhUcmFpbGluZ1NsYXNoKGZpbmFsVXJsLnBhdGhuYW1lKVxuICAgIGxldCBpbnRlcnBvbGF0ZWRBcyA9ICcnXG5cbiAgICBpZiAoXG4gICAgICBpc0R5bmFtaWNSb3V0ZShmaW5hbFVybC5wYXRobmFtZSkgJiZcbiAgICAgIGZpbmFsVXJsLnNlYXJjaFBhcmFtcyAmJlxuICAgICAgcmVzb2x2ZUFzXG4gICAgKSB7XG4gICAgICBjb25zdCBxdWVyeSA9IHNlYXJjaFBhcmFtc1RvVXJsUXVlcnkoZmluYWxVcmwuc2VhcmNoUGFyYW1zKVxuXG4gICAgICBjb25zdCB7IHJlc3VsdCwgcGFyYW1zIH0gPSBpbnRlcnBvbGF0ZUFzKFxuICAgICAgICBmaW5hbFVybC5wYXRobmFtZSxcbiAgICAgICAgZmluYWxVcmwucGF0aG5hbWUsXG4gICAgICAgIHF1ZXJ5XG4gICAgICApXG5cbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgaW50ZXJwb2xhdGVkQXMgPSBmb3JtYXRXaXRoVmFsaWRhdGlvbih7XG4gICAgICAgICAgcGF0aG5hbWU6IHJlc3VsdCxcbiAgICAgICAgICBoYXNoOiBmaW5hbFVybC5oYXNoLFxuICAgICAgICAgIHF1ZXJ5OiBvbWl0UGFybXNGcm9tUXVlcnkocXVlcnksIHBhcmFtcyksXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIG9yaWdpbiBkaWRuJ3QgY2hhbmdlLCBpdCBtZWFucyB3ZSByZWNlaXZlZCBhIHJlbGF0aXZlIGhyZWZcbiAgICBjb25zdCByZXNvbHZlZEhyZWYgPVxuICAgICAgZmluYWxVcmwub3JpZ2luID09PSBiYXNlLm9yaWdpblxuICAgICAgICA/IGZpbmFsVXJsLmhyZWYuc2xpY2UoZmluYWxVcmwub3JpZ2luLmxlbmd0aClcbiAgICAgICAgOiBmaW5hbFVybC5ocmVmXG5cbiAgICByZXR1cm4gKHJlc29sdmVBc1xuICAgICAgPyBbcmVzb2x2ZWRIcmVmLCBpbnRlcnBvbGF0ZWRBcyB8fCByZXNvbHZlZEhyZWZdXG4gICAgICA6IHJlc29sdmVkSHJlZikgYXMgc3RyaW5nXG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4gKHJlc29sdmVBcyA/IFt1cmxBc1N0cmluZ10gOiB1cmxBc1N0cmluZykgYXMgc3RyaW5nXG4gIH1cbn1cblxuZnVuY3Rpb24gc3RyaXBPcmlnaW4odXJsOiBzdHJpbmcpIHtcbiAgY29uc3Qgb3JpZ2luID0gZ2V0TG9jYXRpb25PcmlnaW4oKVxuXG4gIHJldHVybiB1cmwuc3RhcnRzV2l0aChvcmlnaW4pID8gdXJsLnN1YnN0cmluZyhvcmlnaW4ubGVuZ3RoKSA6IHVybFxufVxuXG5mdW5jdGlvbiBwcmVwYXJlVXJsQXMocm91dGVyOiBOZXh0Um91dGVyLCB1cmw6IFVybCwgYXM/OiBVcmwpIHtcbiAgLy8gSWYgdXJsIGFuZCBhcyBwcm92aWRlZCBhcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24sXG4gIC8vIHdlJ2xsIGZvcm1hdCB0aGVtIGludG8gdGhlIHN0cmluZyB2ZXJzaW9uIGhlcmUuXG4gIGxldCBbcmVzb2x2ZWRIcmVmLCByZXNvbHZlZEFzXSA9IHJlc29sdmVIcmVmKHJvdXRlci5hc1BhdGgsIHVybCwgdHJ1ZSlcbiAgY29uc3Qgb3JpZ2luID0gZ2V0TG9jYXRpb25PcmlnaW4oKVxuICBjb25zdCBocmVmSGFkT3JpZ2luID0gcmVzb2x2ZWRIcmVmLnN0YXJ0c1dpdGgob3JpZ2luKVxuICBjb25zdCBhc0hhZE9yaWdpbiA9IHJlc29sdmVkQXMgJiYgcmVzb2x2ZWRBcy5zdGFydHNXaXRoKG9yaWdpbilcblxuICByZXNvbHZlZEhyZWYgPSBzdHJpcE9yaWdpbihyZXNvbHZlZEhyZWYpXG4gIHJlc29sdmVkQXMgPSByZXNvbHZlZEFzID8gc3RyaXBPcmlnaW4ocmVzb2x2ZWRBcykgOiByZXNvbHZlZEFzXG5cbiAgY29uc3QgcHJlcGFyZWRVcmwgPSBocmVmSGFkT3JpZ2luID8gcmVzb2x2ZWRIcmVmIDogYWRkQmFzZVBhdGgocmVzb2x2ZWRIcmVmKVxuICBjb25zdCBwcmVwYXJlZEFzID0gYXNcbiAgICA/IHN0cmlwT3JpZ2luKHJlc29sdmVIcmVmKHJvdXRlci5hc1BhdGgsIGFzKSlcbiAgICA6IHJlc29sdmVkQXMgfHwgcmVzb2x2ZWRIcmVmXG5cbiAgcmV0dXJuIHtcbiAgICB1cmw6IHByZXBhcmVkVXJsLFxuICAgIGFzOiBhc0hhZE9yaWdpbiA/IHByZXBhcmVkQXMgOiBhZGRCYXNlUGF0aChwcmVwYXJlZEFzKSxcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlRHluYW1pY1JvdXRlKHBhdGhuYW1lOiBzdHJpbmcsIHBhZ2VzOiBzdHJpbmdbXSkge1xuICBjb25zdCBjbGVhblBhdGhuYW1lID0gcmVtb3ZlUGF0aFRyYWlsaW5nU2xhc2goZGVub3JtYWxpemVQYWdlUGF0aChwYXRobmFtZSEpKVxuXG4gIGlmIChjbGVhblBhdGhuYW1lID09PSAnLzQwNCcgfHwgY2xlYW5QYXRobmFtZSA9PT0gJy9fZXJyb3InKSB7XG4gICAgcmV0dXJuIHBhdGhuYW1lXG4gIH1cblxuICAvLyBoYW5kbGUgcmVzb2x2aW5nIGhyZWYgZm9yIGR5bmFtaWMgcm91dGVzXG4gIGlmICghcGFnZXMuaW5jbHVkZXMoY2xlYW5QYXRobmFtZSEpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGFycmF5LWNhbGxiYWNrLXJldHVyblxuICAgIHBhZ2VzLnNvbWUoKHBhZ2UpID0+IHtcbiAgICAgIGlmIChpc0R5bmFtaWNSb3V0ZShwYWdlKSAmJiBnZXRSb3V0ZVJlZ2V4KHBhZ2UpLnJlLnRlc3QoY2xlYW5QYXRobmFtZSEpKSB7XG4gICAgICAgIHBhdGhuYW1lID0gcGFnZVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIHJlbW92ZVBhdGhUcmFpbGluZ1NsYXNoKHBhdGhuYW1lKVxufVxuXG5leHBvcnQgdHlwZSBCYXNlUm91dGVyID0ge1xuICByb3V0ZTogc3RyaW5nXG4gIHBhdGhuYW1lOiBzdHJpbmdcbiAgcXVlcnk6IFBhcnNlZFVybFF1ZXJ5XG4gIGFzUGF0aDogc3RyaW5nXG4gIGJhc2VQYXRoOiBzdHJpbmdcbiAgbG9jYWxlPzogc3RyaW5nXG4gIGxvY2FsZXM/OiBzdHJpbmdbXVxuICBkZWZhdWx0TG9jYWxlPzogc3RyaW5nXG4gIGRvbWFpbkxvY2FsZXM/OiBEb21haW5Mb2NhbGVzXG4gIGlzTG9jYWxlRG9tYWluOiBib29sZWFuXG59XG5cbmV4cG9ydCB0eXBlIE5leHRSb3V0ZXIgPSBCYXNlUm91dGVyICZcbiAgUGljazxcbiAgICBSb3V0ZXIsXG4gICAgfCAncHVzaCdcbiAgICB8ICdyZXBsYWNlJ1xuICAgIHwgJ3JlbG9hZCdcbiAgICB8ICdiYWNrJ1xuICAgIHwgJ3ByZWZldGNoJ1xuICAgIHwgJ2JlZm9yZVBvcFN0YXRlJ1xuICAgIHwgJ2V2ZW50cydcbiAgICB8ICdpc0ZhbGxiYWNrJ1xuICAgIHwgJ2lzUmVhZHknXG4gICAgfCAnaXNQcmV2aWV3J1xuICA+XG5cbmV4cG9ydCB0eXBlIFByZWZldGNoT3B0aW9ucyA9IHtcbiAgcHJpb3JpdHk/OiBib29sZWFuXG4gIGxvY2FsZT86IHN0cmluZyB8IGZhbHNlXG59XG5cbmV4cG9ydCB0eXBlIFByaXZhdGVSb3V0ZUluZm8gPVxuICB8IChPbWl0PENvbXBsZXRlUHJpdmF0ZVJvdXRlSW5mbywgJ3N0eWxlU2hlZXRzJz4gJiB7IGluaXRpYWw6IHRydWUgfSlcbiAgfCBDb21wbGV0ZVByaXZhdGVSb3V0ZUluZm9cblxuZXhwb3J0IHR5cGUgQ29tcGxldGVQcml2YXRlUm91dGVJbmZvID0ge1xuICBDb21wb25lbnQ6IENvbXBvbmVudFR5cGVcbiAgc3R5bGVTaGVldHM6IFN0eWxlU2hlZXRUdXBsZVtdXG4gIF9fTl9TU0c/OiBib29sZWFuXG4gIF9fTl9TU1A/OiBib29sZWFuXG4gIHByb3BzPzogUmVjb3JkPHN0cmluZywgYW55PlxuICBlcnI/OiBFcnJvclxuICBlcnJvcj86IGFueVxufVxuXG5leHBvcnQgdHlwZSBBcHBQcm9wcyA9IFBpY2s8Q29tcGxldGVQcml2YXRlUm91dGVJbmZvLCAnQ29tcG9uZW50JyB8ICdlcnInPiAmIHtcbiAgcm91dGVyOiBSb3V0ZXJcbn0gJiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG5leHBvcnQgdHlwZSBBcHBDb21wb25lbnQgPSBDb21wb25lbnRUeXBlPEFwcFByb3BzPlxuXG50eXBlIFN1YnNjcmlwdGlvbiA9IChcbiAgZGF0YTogUHJpdmF0ZVJvdXRlSW5mbyxcbiAgQXBwOiBBcHBDb21wb25lbnQsXG4gIHJlc2V0U2Nyb2xsOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfCBudWxsXG4pID0+IFByb21pc2U8dm9pZD5cblxudHlwZSBCZWZvcmVQb3BTdGF0ZUNhbGxiYWNrID0gKHN0YXRlOiBOZXh0SGlzdG9yeVN0YXRlKSA9PiBib29sZWFuXG5cbnR5cGUgQ29tcG9uZW50TG9hZENhbmNlbCA9ICgoKSA9PiB2b2lkKSB8IG51bGxcblxudHlwZSBIaXN0b3J5TWV0aG9kID0gJ3JlcGxhY2VTdGF0ZScgfCAncHVzaFN0YXRlJ1xuXG5jb25zdCBtYW51YWxTY3JvbGxSZXN0b3JhdGlvbiA9XG4gIHByb2Nlc3MuZW52Ll9fTkVYVF9TQ1JPTExfUkVTVE9SQVRJT04gJiZcbiAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgJ3Njcm9sbFJlc3RvcmF0aW9uJyBpbiB3aW5kb3cuaGlzdG9yeSAmJlxuICAhIShmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCB2ID0gJ19fbmV4dCdcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZXF1ZW5jZXNcbiAgICAgIHJldHVybiBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHYsIHYpLCBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHYpLCB0cnVlXG4gICAgfSBjYXRjaCAobikge31cbiAgfSkoKVxuXG5jb25zdCBTU0dfREFUQV9OT1RfRk9VTkQgPSBTeW1ib2woJ1NTR19EQVRBX05PVF9GT1VORCcpXG5cbmZ1bmN0aW9uIGZldGNoUmV0cnkodXJsOiBzdHJpbmcsIGF0dGVtcHRzOiBudW1iZXIpOiBQcm9taXNlPGFueT4ge1xuICByZXR1cm4gZmV0Y2godXJsLCB7XG4gICAgLy8gQ29va2llcyBhcmUgcmVxdWlyZWQgdG8gYmUgcHJlc2VudCBmb3IgTmV4dC5qcycgU1NHIFwiUHJldmlldyBNb2RlXCIuXG4gICAgLy8gQ29va2llcyBtYXkgYWxzbyBiZSByZXF1aXJlZCBmb3IgYGdldFNlcnZlclNpZGVQcm9wc2AuXG4gICAgLy9cbiAgICAvLyA+IGBmZXRjaGAgd29u4oCZdCBzZW5kIGNvb2tpZXMsIHVubGVzcyB5b3Ugc2V0IHRoZSBjcmVkZW50aWFscyBpbml0XG4gICAgLy8gPiBvcHRpb24uXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZldGNoX0FQSS9Vc2luZ19GZXRjaFxuICAgIC8vXG4gICAgLy8gPiBGb3IgbWF4aW11bSBicm93c2VyIGNvbXBhdGliaWxpdHkgd2hlbiBpdCBjb21lcyB0byBzZW5kaW5nICZcbiAgICAvLyA+IHJlY2VpdmluZyBjb29raWVzLCBhbHdheXMgc3VwcGx5IHRoZSBgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbidgXG4gICAgLy8gPiBvcHRpb24gaW5zdGVhZCBvZiByZWx5aW5nIG9uIHRoZSBkZWZhdWx0LlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWIvZmV0Y2gjY2F2ZWF0c1xuICAgIGNyZWRlbnRpYWxzOiAnc2FtZS1vcmlnaW4nLFxuICB9KS50aGVuKChyZXMpID0+IHtcbiAgICBpZiAoIXJlcy5vaykge1xuICAgICAgaWYgKGF0dGVtcHRzID4gMSAmJiByZXMuc3RhdHVzID49IDUwMCkge1xuICAgICAgICByZXR1cm4gZmV0Y2hSZXRyeSh1cmwsIGF0dGVtcHRzIC0gMSlcbiAgICAgIH1cbiAgICAgIGlmIChyZXMuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgcmV0dXJuIHJlcy5qc29uKCkudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhLm5vdEZvdW5kKSB7XG4gICAgICAgICAgICByZXR1cm4geyBub3RGb3VuZDogU1NHX0RBVEFfTk9UX0ZPVU5EIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBzdGF0aWMgcHJvcHNgKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBzdGF0aWMgcHJvcHNgKVxuICAgIH1cbiAgICByZXR1cm4gcmVzLmpzb24oKVxuICB9KVxufVxuXG5mdW5jdGlvbiBmZXRjaE5leHREYXRhKGRhdGFIcmVmOiBzdHJpbmcsIGlzU2VydmVyUmVuZGVyOiBib29sZWFuKSB7XG4gIHJldHVybiBmZXRjaFJldHJ5KGRhdGFIcmVmLCBpc1NlcnZlclJlbmRlciA/IDMgOiAxKS5jYXRjaCgoZXJyOiBFcnJvcikgPT4ge1xuICAgIC8vIFdlIHNob3VsZCBvbmx5IHRyaWdnZXIgYSBzZXJ2ZXItc2lkZSB0cmFuc2l0aW9uIGlmIHRoaXMgd2FzIGNhdXNlZFxuICAgIC8vIG9uIGEgY2xpZW50LXNpZGUgdHJhbnNpdGlvbi4gT3RoZXJ3aXNlLCB3ZSdkIGdldCBpbnRvIGFuIGluZmluaXRlXG4gICAgLy8gbG9vcC5cblxuICAgIGlmICghaXNTZXJ2ZXJSZW5kZXIpIHtcbiAgICAgIG1hcmtBc3NldEVycm9yKGVycilcbiAgICB9XG4gICAgdGhyb3cgZXJyXG4gIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvdXRlciBpbXBsZW1lbnRzIEJhc2VSb3V0ZXIge1xuICByb3V0ZTogc3RyaW5nXG4gIHBhdGhuYW1lOiBzdHJpbmdcbiAgcXVlcnk6IFBhcnNlZFVybFF1ZXJ5XG4gIGFzUGF0aDogc3RyaW5nXG4gIGJhc2VQYXRoOiBzdHJpbmdcblxuICAvKipcbiAgICogTWFwIG9mIGFsbCBjb21wb25lbnRzIGxvYWRlZCBpbiBgUm91dGVyYFxuICAgKi9cbiAgY29tcG9uZW50czogeyBbcGF0aG5hbWU6IHN0cmluZ106IFByaXZhdGVSb3V0ZUluZm8gfVxuICAvLyBTdGF0aWMgRGF0YSBDYWNoZVxuICBzZGM6IHsgW2FzUGF0aDogc3RyaW5nXTogb2JqZWN0IH0gPSB7fVxuICAvLyBJbi1mbGlnaHQgU2VydmVyIERhdGEgUmVxdWVzdHMsIGZvciBkZWR1cGluZ1xuICBzZHI6IHsgW2FzUGF0aDogc3RyaW5nXTogUHJvbWlzZTxvYmplY3Q+IH0gPSB7fVxuXG4gIHN1YjogU3Vic2NyaXB0aW9uXG4gIGNsYzogQ29tcG9uZW50TG9hZENhbmNlbFxuICBwYWdlTG9hZGVyOiBhbnlcbiAgX2JwczogQmVmb3JlUG9wU3RhdGVDYWxsYmFjayB8IHVuZGVmaW5lZFxuICBldmVudHM6IE1pdHRFbWl0dGVyXG4gIF93cmFwQXBwOiAoQXBwOiBBcHBDb21wb25lbnQpID0+IGFueVxuICBpc1NzcjogYm9vbGVhblxuICBpc0ZhbGxiYWNrOiBib29sZWFuXG4gIF9pbkZsaWdodFJvdXRlPzogc3RyaW5nXG4gIF9zaGFsbG93PzogYm9vbGVhblxuICBsb2NhbGU/OiBzdHJpbmdcbiAgbG9jYWxlcz86IHN0cmluZ1tdXG4gIGRlZmF1bHRMb2NhbGU/OiBzdHJpbmdcbiAgZG9tYWluTG9jYWxlcz86IERvbWFpbkxvY2FsZXNcbiAgaXNSZWFkeTogYm9vbGVhblxuICBpc1ByZXZpZXc6IGJvb2xlYW5cbiAgaXNMb2NhbGVEb21haW46IGJvb2xlYW5cblxuICBwcml2YXRlIF9pZHg6IG51bWJlciA9IDBcblxuICBzdGF0aWMgZXZlbnRzOiBNaXR0RW1pdHRlciA9IG1pdHQoKVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHBhdGhuYW1lOiBzdHJpbmcsXG4gICAgcXVlcnk6IFBhcnNlZFVybFF1ZXJ5LFxuICAgIGFzOiBzdHJpbmcsXG4gICAge1xuICAgICAgaW5pdGlhbFByb3BzLFxuICAgICAgcGFnZUxvYWRlcixcbiAgICAgIEFwcCxcbiAgICAgIHdyYXBBcHAsXG4gICAgICBDb21wb25lbnQsXG4gICAgICBlcnIsXG4gICAgICBzdWJzY3JpcHRpb24sXG4gICAgICBpc0ZhbGxiYWNrLFxuICAgICAgbG9jYWxlLFxuICAgICAgbG9jYWxlcyxcbiAgICAgIGRlZmF1bHRMb2NhbGUsXG4gICAgICBkb21haW5Mb2NhbGVzLFxuICAgICAgaXNQcmV2aWV3LFxuICAgIH06IHtcbiAgICAgIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uXG4gICAgICBpbml0aWFsUHJvcHM6IGFueVxuICAgICAgcGFnZUxvYWRlcjogYW55XG4gICAgICBDb21wb25lbnQ6IENvbXBvbmVudFR5cGVcbiAgICAgIEFwcDogQXBwQ29tcG9uZW50XG4gICAgICB3cmFwQXBwOiAoV3JhcEFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KSA9PiBhbnlcbiAgICAgIGVycj86IEVycm9yXG4gICAgICBpc0ZhbGxiYWNrOiBib29sZWFuXG4gICAgICBsb2NhbGU/OiBzdHJpbmdcbiAgICAgIGxvY2FsZXM/OiBzdHJpbmdbXVxuICAgICAgZGVmYXVsdExvY2FsZT86IHN0cmluZ1xuICAgICAgZG9tYWluTG9jYWxlcz86IERvbWFpbkxvY2FsZXNcbiAgICAgIGlzUHJldmlldz86IGJvb2xlYW5cbiAgICB9XG4gICkge1xuICAgIC8vIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgY29tcG9uZW50IGtleVxuICAgIHRoaXMucm91dGUgPSByZW1vdmVQYXRoVHJhaWxpbmdTbGFzaChwYXRobmFtZSlcblxuICAgIC8vIHNldCB1cCB0aGUgY29tcG9uZW50IGNhY2hlIChieSByb3V0ZSBrZXlzKVxuICAgIHRoaXMuY29tcG9uZW50cyA9IHt9XG4gICAgLy8gV2Ugc2hvdWxkIG5vdCBrZWVwIHRoZSBjYWNoZSwgaWYgdGhlcmUncyBhbiBlcnJvclxuICAgIC8vIE90aGVyd2lzZSwgdGhpcyBjYXVzZSBpc3N1ZXMgd2hlbiB3aGVuIGdvaW5nIGJhY2sgYW5kXG4gICAgLy8gY29tZSBhZ2FpbiB0byB0aGUgZXJyb3JlZCBwYWdlLlxuICAgIGlmIChwYXRobmFtZSAhPT0gJy9fZXJyb3InKSB7XG4gICAgICB0aGlzLmNvbXBvbmVudHNbdGhpcy5yb3V0ZV0gPSB7XG4gICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgaW5pdGlhbDogdHJ1ZSxcbiAgICAgICAgcHJvcHM6IGluaXRpYWxQcm9wcyxcbiAgICAgICAgZXJyLFxuICAgICAgICBfX05fU1NHOiBpbml0aWFsUHJvcHMgJiYgaW5pdGlhbFByb3BzLl9fTl9TU0csXG4gICAgICAgIF9fTl9TU1A6IGluaXRpYWxQcm9wcyAmJiBpbml0aWFsUHJvcHMuX19OX1NTUCxcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNvbXBvbmVudHNbJy9fYXBwJ10gPSB7XG4gICAgICBDb21wb25lbnQ6IEFwcCBhcyBDb21wb25lbnRUeXBlLFxuICAgICAgc3R5bGVTaGVldHM6IFtcbiAgICAgICAgLyogL19hcHAgZG9lcyBub3QgbmVlZCBpdHMgc3R5bGVzaGVldHMgbWFuYWdlZCAqL1xuICAgICAgXSxcbiAgICB9XG5cbiAgICAvLyBCYWNrd2FyZHMgY29tcGF0IGZvciBSb3V0ZXIucm91dGVyLmV2ZW50c1xuICAgIC8vIFRPRE86IFNob3VsZCBiZSByZW1vdmUgdGhlIGZvbGxvd2luZyBtYWpvciB2ZXJzaW9uIGFzIGl0IHdhcyBuZXZlciBkb2N1bWVudGVkXG4gICAgdGhpcy5ldmVudHMgPSBSb3V0ZXIuZXZlbnRzXG5cbiAgICB0aGlzLnBhZ2VMb2FkZXIgPSBwYWdlTG9hZGVyXG4gICAgdGhpcy5wYXRobmFtZSA9IHBhdGhuYW1lXG4gICAgdGhpcy5xdWVyeSA9IHF1ZXJ5XG4gICAgLy8gaWYgYXV0byBwcmVyZW5kZXJlZCBhbmQgZHluYW1pYyByb3V0ZSB3YWl0IHRvIHVwZGF0ZSBhc1BhdGhcbiAgICAvLyB1bnRpbCBhZnRlciBtb3VudCB0byBwcmV2ZW50IGh5ZHJhdGlvbiBtaXNtYXRjaFxuICAgIGNvbnN0IGF1dG9FeHBvcnREeW5hbWljID1cbiAgICAgIGlzRHluYW1pY1JvdXRlKHBhdGhuYW1lKSAmJiBzZWxmLl9fTkVYVF9EQVRBX18uYXV0b0V4cG9ydFxuXG4gICAgdGhpcy5hc1BhdGggPSBhdXRvRXhwb3J0RHluYW1pYyA/IHBhdGhuYW1lIDogYXNcbiAgICB0aGlzLmJhc2VQYXRoID0gYmFzZVBhdGhcbiAgICB0aGlzLnN1YiA9IHN1YnNjcmlwdGlvblxuICAgIHRoaXMuY2xjID0gbnVsbFxuICAgIHRoaXMuX3dyYXBBcHAgPSB3cmFwQXBwXG4gICAgLy8gbWFrZSBzdXJlIHRvIGlnbm9yZSBleHRyYSBwb3BTdGF0ZSBpbiBzYWZhcmkgb24gbmF2aWdhdGluZ1xuICAgIC8vIGJhY2sgZnJvbSBleHRlcm5hbCBzaXRlXG4gICAgdGhpcy5pc1NzciA9IHRydWVcblxuICAgIHRoaXMuaXNGYWxsYmFjayA9IGlzRmFsbGJhY2tcblxuICAgIHRoaXMuaXNSZWFkeSA9ICEhKFxuICAgICAgc2VsZi5fX05FWFRfREFUQV9fLmdzc3AgfHxcbiAgICAgIHNlbGYuX19ORVhUX0RBVEFfXy5naXAgfHxcbiAgICAgICghYXV0b0V4cG9ydER5bmFtaWMgJiZcbiAgICAgICAgIXNlbGYubG9jYXRpb24uc2VhcmNoICYmXG4gICAgICAgICFwcm9jZXNzLmVudi5fX05FWFRfSEFTX1JFV1JJVEVTKVxuICAgIClcbiAgICB0aGlzLmlzUHJldmlldyA9ICEhaXNQcmV2aWV3XG4gICAgdGhpcy5pc0xvY2FsZURvbWFpbiA9IGZhbHNlXG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0kxOE5fU1VQUE9SVCkge1xuICAgICAgdGhpcy5sb2NhbGUgPSBsb2NhbGVcbiAgICAgIHRoaXMubG9jYWxlcyA9IGxvY2FsZXNcbiAgICAgIHRoaXMuZGVmYXVsdExvY2FsZSA9IGRlZmF1bHRMb2NhbGVcbiAgICAgIHRoaXMuZG9tYWluTG9jYWxlcyA9IGRvbWFpbkxvY2FsZXNcbiAgICAgIHRoaXMuaXNMb2NhbGVEb21haW4gPSAhIWRldGVjdERvbWFpbkxvY2FsZShcbiAgICAgICAgZG9tYWluTG9jYWxlcyxcbiAgICAgICAgc2VsZi5sb2NhdGlvbi5ob3N0bmFtZVxuICAgICAgKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gbWFrZSBzdXJlIFwiYXNcIiBkb2Vzbid0IHN0YXJ0IHdpdGggZG91YmxlIHNsYXNoZXMgb3IgZWxzZSBpdCBjYW5cbiAgICAgIC8vIHRocm93IGFuIGVycm9yIGFzIGl0J3MgY29uc2lkZXJlZCBpbnZhbGlkXG4gICAgICBpZiAoYXMuc3Vic3RyKDAsIDIpICE9PSAnLy8nKSB7XG4gICAgICAgIC8vIGluIG9yZGVyIGZvciBgZS5zdGF0ZWAgdG8gd29yayBvbiB0aGUgYG9ucG9wc3RhdGVgIGV2ZW50XG4gICAgICAgIC8vIHdlIGhhdmUgdG8gcmVnaXN0ZXIgdGhlIGluaXRpYWwgcm91dGUgdXBvbiBpbml0aWFsaXphdGlvblxuICAgICAgICB0aGlzLmNoYW5nZVN0YXRlKFxuICAgICAgICAgICdyZXBsYWNlU3RhdGUnLFxuICAgICAgICAgIGZvcm1hdFdpdGhWYWxpZGF0aW9uKHsgcGF0aG5hbWU6IGFkZEJhc2VQYXRoKHBhdGhuYW1lKSwgcXVlcnkgfSksXG4gICAgICAgICAgZ2V0VVJMKCksXG4gICAgICAgICAgeyBsb2NhbGUgfVxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb3BzdGF0ZScsIHRoaXMub25Qb3BTdGF0ZSlcblxuICAgICAgLy8gZW5hYmxlIGN1c3RvbSBzY3JvbGwgcmVzdG9yYXRpb24gaGFuZGxpbmcgd2hlbiBhdmFpbGFibGVcbiAgICAgIC8vIG90aGVyd2lzZSBmYWxsYmFjayB0byBicm93c2VyJ3MgZGVmYXVsdCBoYW5kbGluZ1xuICAgICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9TQ1JPTExfUkVTVE9SQVRJT04pIHtcbiAgICAgICAgaWYgKG1hbnVhbFNjcm9sbFJlc3RvcmF0aW9uKSB7XG4gICAgICAgICAgd2luZG93Lmhpc3Rvcnkuc2Nyb2xsUmVzdG9yYXRpb24gPSAnbWFudWFsJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25Qb3BTdGF0ZSA9IChlOiBQb3BTdGF0ZUV2ZW50KTogdm9pZCA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBlLnN0YXRlIGFzIEhpc3RvcnlTdGF0ZVxuXG4gICAgaWYgKCFzdGF0ZSkge1xuICAgICAgLy8gV2UgZ2V0IHN0YXRlIGFzIHVuZGVmaW5lZCBmb3IgdHdvIHJlYXNvbnMuXG4gICAgICAvLyAgMS4gV2l0aCBvbGRlciBzYWZhcmkgKDwgOCkgYW5kIG9sZGVyIGNocm9tZSAoPCAzNClcbiAgICAgIC8vICAyLiBXaGVuIHRoZSBVUkwgY2hhbmdlZCB3aXRoICNcbiAgICAgIC8vXG4gICAgICAvLyBJbiB0aGUgYm90aCBjYXNlcywgd2UgZG9uJ3QgbmVlZCB0byBwcm9jZWVkIGFuZCBjaGFuZ2UgdGhlIHJvdXRlLlxuICAgICAgLy8gKGFzIGl0J3MgYWxyZWFkeSBjaGFuZ2VkKVxuICAgICAgLy8gQnV0IHdlIGNhbiBzaW1wbHkgcmVwbGFjZSB0aGUgc3RhdGUgd2l0aCB0aGUgbmV3IGNoYW5nZXMuXG4gICAgICAvLyBBY3R1YWxseSwgZm9yICgxKSB3ZSBkb24ndCBuZWVkIHRvIG5vdGhpbmcuIEJ1dCBpdCdzIGhhcmQgdG8gZGV0ZWN0IHRoYXQgZXZlbnQuXG4gICAgICAvLyBTbywgZG9pbmcgdGhlIGZvbGxvd2luZyBmb3IgKDEpIGRvZXMgbm8gaGFybS5cbiAgICAgIGNvbnN0IHsgcGF0aG5hbWUsIHF1ZXJ5IH0gPSB0aGlzXG4gICAgICB0aGlzLmNoYW5nZVN0YXRlKFxuICAgICAgICAncmVwbGFjZVN0YXRlJyxcbiAgICAgICAgZm9ybWF0V2l0aFZhbGlkYXRpb24oeyBwYXRobmFtZTogYWRkQmFzZVBhdGgocGF0aG5hbWUpLCBxdWVyeSB9KSxcbiAgICAgICAgZ2V0VVJMKClcbiAgICAgIClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghc3RhdGUuX19OKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBsZXQgZm9yY2VkU2Nyb2xsOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfCB1bmRlZmluZWRcbiAgICBjb25zdCB7IHVybCwgYXMsIG9wdGlvbnMsIGlkeCB9ID0gc3RhdGVcbiAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX1NDUk9MTF9SRVNUT1JBVElPTikge1xuICAgICAgaWYgKG1hbnVhbFNjcm9sbFJlc3RvcmF0aW9uKSB7XG4gICAgICAgIGlmICh0aGlzLl9pZHggIT09IGlkeCkge1xuICAgICAgICAgIC8vIFNuYXBzaG90IGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uOlxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFxuICAgICAgICAgICAgICAnX19uZXh0X3Njcm9sbF8nICsgdGhpcy5faWR4LFxuICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7IHg6IHNlbGYucGFnZVhPZmZzZXQsIHk6IHNlbGYucGFnZVlPZmZzZXQgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9IGNhdGNoIHt9XG5cbiAgICAgICAgICAvLyBSZXN0b3JlIG9sZCBzY3JvbGwgcG9zaXRpb246XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdfX25leHRfc2Nyb2xsXycgKyBpZHgpXG4gICAgICAgICAgICBmb3JjZWRTY3JvbGwgPSBKU09OLnBhcnNlKHYhKVxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgZm9yY2VkU2Nyb2xsID0geyB4OiAwLCB5OiAwIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5faWR4ID0gaWR4XG5cbiAgICBjb25zdCB7IHBhdGhuYW1lIH0gPSBwYXJzZVJlbGF0aXZlVXJsKHVybClcblxuICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCByZS1yZW5kZXIgb24gaW5pdGlhbCBsb2FkLFxuICAgIC8vIGNhbiBiZSBjYXVzZWQgYnkgbmF2aWdhdGluZyBiYWNrIGZyb20gYW4gZXh0ZXJuYWwgc2l0ZVxuICAgIGlmICh0aGlzLmlzU3NyICYmIGFzID09PSB0aGlzLmFzUGF0aCAmJiBwYXRobmFtZSA9PT0gdGhpcy5wYXRobmFtZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGRvd25zdHJlYW0gYXBwbGljYXRpb24gcmV0dXJucyBmYWxzeSwgcmV0dXJuLlxuICAgIC8vIFRoZXkgd2lsbCB0aGVuIGJlIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgZXZlbnQuXG4gICAgaWYgKHRoaXMuX2JwcyAmJiAhdGhpcy5fYnBzKHN0YXRlKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5jaGFuZ2UoXG4gICAgICAncmVwbGFjZVN0YXRlJyxcbiAgICAgIHVybCxcbiAgICAgIGFzLFxuICAgICAgT2JqZWN0LmFzc2lnbjx7fSwgVHJhbnNpdGlvbk9wdGlvbnMsIFRyYW5zaXRpb25PcHRpb25zPih7fSwgb3B0aW9ucywge1xuICAgICAgICBzaGFsbG93OiBvcHRpb25zLnNoYWxsb3cgJiYgdGhpcy5fc2hhbGxvdyxcbiAgICAgICAgbG9jYWxlOiBvcHRpb25zLmxvY2FsZSB8fCB0aGlzLmRlZmF1bHRMb2NhbGUsXG4gICAgICB9KSxcbiAgICAgIGZvcmNlZFNjcm9sbFxuICAgIClcbiAgfVxuXG4gIHJlbG9hZCgpOiB2b2lkIHtcbiAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKClcbiAgfVxuXG4gIC8qKlxuICAgKiBHbyBiYWNrIGluIGhpc3RvcnlcbiAgICovXG4gIGJhY2soKSB7XG4gICAgd2luZG93Lmhpc3RvcnkuYmFjaygpXG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybXMgYSBgcHVzaFN0YXRlYCB3aXRoIGFyZ3VtZW50c1xuICAgKiBAcGFyYW0gdXJsIG9mIHRoZSByb3V0ZVxuICAgKiBAcGFyYW0gYXMgbWFza3MgYHVybGAgZm9yIHRoZSBicm93c2VyXG4gICAqIEBwYXJhbSBvcHRpb25zIG9iamVjdCB5b3UgY2FuIGRlZmluZSBgc2hhbGxvd2AgYW5kIG90aGVyIG9wdGlvbnNcbiAgICovXG4gIHB1c2godXJsOiBVcmwsIGFzPzogVXJsLCBvcHRpb25zOiBUcmFuc2l0aW9uT3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9TQ1JPTExfUkVTVE9SQVRJT04pIHtcbiAgICAgIC8vIFRPRE86IHJlbW92ZSBpbiB0aGUgZnV0dXJlIHdoZW4gd2UgdXBkYXRlIGhpc3RvcnkgYmVmb3JlIHJvdXRlIGNoYW5nZVxuICAgICAgLy8gaXMgY29tcGxldGUsIGFzIHRoZSBwb3BzdGF0ZSBldmVudCBzaG91bGQgaGFuZGxlIHRoaXMgY2FwdHVyZS5cbiAgICAgIGlmIChtYW51YWxTY3JvbGxSZXN0b3JhdGlvbikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFNuYXBzaG90IHNjcm9sbCBwb3NpdGlvbiByaWdodCBiZWZvcmUgbmF2aWdhdGluZyB0byBhIG5ldyBwYWdlOlxuICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXG4gICAgICAgICAgICAnX19uZXh0X3Njcm9sbF8nICsgdGhpcy5faWR4LFxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoeyB4OiBzZWxmLnBhZ2VYT2Zmc2V0LCB5OiBzZWxmLnBhZ2VZT2Zmc2V0IH0pXG4gICAgICAgICAgKVxuICAgICAgICB9IGNhdGNoIHt9XG4gICAgICB9XG4gICAgfVxuICAgIDsoeyB1cmwsIGFzIH0gPSBwcmVwYXJlVXJsQXModGhpcywgdXJsLCBhcykpXG4gICAgcmV0dXJuIHRoaXMuY2hhbmdlKCdwdXNoU3RhdGUnLCB1cmwsIGFzLCBvcHRpb25zKVxuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm1zIGEgYHJlcGxhY2VTdGF0ZWAgd2l0aCBhcmd1bWVudHNcbiAgICogQHBhcmFtIHVybCBvZiB0aGUgcm91dGVcbiAgICogQHBhcmFtIGFzIG1hc2tzIGB1cmxgIGZvciB0aGUgYnJvd3NlclxuICAgKiBAcGFyYW0gb3B0aW9ucyBvYmplY3QgeW91IGNhbiBkZWZpbmUgYHNoYWxsb3dgIGFuZCBvdGhlciBvcHRpb25zXG4gICAqL1xuICByZXBsYWNlKHVybDogVXJsLCBhcz86IFVybCwgb3B0aW9uczogVHJhbnNpdGlvbk9wdGlvbnMgPSB7fSkge1xuICAgIDsoeyB1cmwsIGFzIH0gPSBwcmVwYXJlVXJsQXModGhpcywgdXJsLCBhcykpXG4gICAgcmV0dXJuIHRoaXMuY2hhbmdlKCdyZXBsYWNlU3RhdGUnLCB1cmwsIGFzLCBvcHRpb25zKVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjaGFuZ2UoXG4gICAgbWV0aG9kOiBIaXN0b3J5TWV0aG9kLFxuICAgIHVybDogc3RyaW5nLFxuICAgIGFzOiBzdHJpbmcsXG4gICAgb3B0aW9uczogVHJhbnNpdGlvbk9wdGlvbnMsXG4gICAgZm9yY2VkU2Nyb2xsPzogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9XG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghaXNMb2NhbFVSTCh1cmwpKSB7XG4gICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybFxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIGNvbnN0IHNob3VsZFJlc29sdmVIcmVmID0gdXJsID09PSBhcyB8fCAob3B0aW9ucyBhcyBhbnkpLl9oXG5cbiAgICAvLyBmb3Igc3RhdGljIHBhZ2VzIHdpdGggcXVlcnkgcGFyYW1zIGluIHRoZSBVUkwgd2UgZGVsYXlcbiAgICAvLyBtYXJraW5nIHRoZSByb3V0ZXIgcmVhZHkgdW50aWwgYWZ0ZXIgdGhlIHF1ZXJ5IGlzIHVwZGF0ZWRcbiAgICBpZiAoKG9wdGlvbnMgYXMgYW55KS5faCkge1xuICAgICAgdGhpcy5pc1JlYWR5ID0gdHJ1ZVxuICAgIH1cblxuICAgIC8vIERlZmF1bHQgdG8gc2Nyb2xsIHJlc2V0IGJlaGF2aW9yIHVubGVzcyBleHBsaWNpdGx5IHNwZWNpZmllZCB0byBiZVxuICAgIC8vIGBmYWxzZWAhIFRoaXMgbWFrZXMgdGhlIGJlaGF2aW9yIGJldHdlZW4gdXNpbmcgYFJvdXRlciNwdXNoYCBhbmQgYVxuICAgIC8vIGA8TGluayAvPmAgY29uc2lzdGVudC5cbiAgICBvcHRpb25zLnNjcm9sbCA9ICEhKG9wdGlvbnMuc2Nyb2xsID8/IHRydWUpXG5cbiAgICBsZXQgbG9jYWxlQ2hhbmdlID0gb3B0aW9ucy5sb2NhbGUgIT09IHRoaXMubG9jYWxlXG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0kxOE5fU1VQUE9SVCkge1xuICAgICAgdGhpcy5sb2NhbGUgPVxuICAgICAgICBvcHRpb25zLmxvY2FsZSA9PT0gZmFsc2VcbiAgICAgICAgICA/IHRoaXMuZGVmYXVsdExvY2FsZVxuICAgICAgICAgIDogb3B0aW9ucy5sb2NhbGUgfHwgdGhpcy5sb2NhbGVcblxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmxvY2FsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgb3B0aW9ucy5sb2NhbGUgPSB0aGlzLmxvY2FsZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXJzZWRBcyA9IHBhcnNlUmVsYXRpdmVVcmwoaGFzQmFzZVBhdGgoYXMpID8gZGVsQmFzZVBhdGgoYXMpIDogYXMpXG4gICAgICBjb25zdCBsb2NhbGVQYXRoUmVzdWx0ID0gbm9ybWFsaXplTG9jYWxlUGF0aChcbiAgICAgICAgcGFyc2VkQXMucGF0aG5hbWUsXG4gICAgICAgIHRoaXMubG9jYWxlc1xuICAgICAgKVxuXG4gICAgICBpZiAobG9jYWxlUGF0aFJlc3VsdC5kZXRlY3RlZExvY2FsZSkge1xuICAgICAgICB0aGlzLmxvY2FsZSA9IGxvY2FsZVBhdGhSZXN1bHQuZGV0ZWN0ZWRMb2NhbGVcbiAgICAgICAgcGFyc2VkQXMucGF0aG5hbWUgPSBhZGRCYXNlUGF0aChwYXJzZWRBcy5wYXRobmFtZSlcbiAgICAgICAgYXMgPSBmb3JtYXRXaXRoVmFsaWRhdGlvbihwYXJzZWRBcylcbiAgICAgICAgdXJsID0gYWRkQmFzZVBhdGgoXG4gICAgICAgICAgbm9ybWFsaXplTG9jYWxlUGF0aChcbiAgICAgICAgICAgIGhhc0Jhc2VQYXRoKHVybCkgPyBkZWxCYXNlUGF0aCh1cmwpIDogdXJsLFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVzXG4gICAgICAgICAgKS5wYXRobmFtZVxuICAgICAgICApXG4gICAgICB9XG4gICAgICBsZXQgZGlkTmF2aWdhdGUgPSBmYWxzZVxuXG4gICAgICAvLyB3ZSBuZWVkIHRvIHdyYXAgdGhpcyBpbiB0aGUgZW52IGNoZWNrIGFnYWluIHNpbmNlIHJlZ2VuZXJhdG9yIHJ1bnRpbWVcbiAgICAgIC8vIG1vdmVzIHRoaXMgb24gaXRzIG93biBkdWUgdG8gdGhlIHJldHVyblxuICAgICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9JMThOX1NVUFBPUlQpIHtcbiAgICAgICAgLy8gaWYgdGhlIGxvY2FsZSBpc24ndCBjb25maWd1cmVkIGhhcmQgbmF2aWdhdGUgdG8gc2hvdyA0MDQgcGFnZVxuICAgICAgICBpZiAoIXRoaXMubG9jYWxlcz8uaW5jbHVkZXModGhpcy5sb2NhbGUhKSkge1xuICAgICAgICAgIHBhcnNlZEFzLnBhdGhuYW1lID0gYWRkTG9jYWxlKHBhcnNlZEFzLnBhdGhuYW1lLCB0aGlzLmxvY2FsZSlcbiAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGZvcm1hdFdpdGhWYWxpZGF0aW9uKHBhcnNlZEFzKVxuICAgICAgICAgIC8vIHRoaXMgd2FzIHByZXZpb3VzbHkgYSByZXR1cm4gYnV0IHdhcyByZW1vdmVkIGluIGZhdm9yXG4gICAgICAgICAgLy8gb2YgYmV0dGVyIGRlYWQgY29kZSBlbGltaW5hdGlvbiB3aXRoIHJlZ2VuZXJhdG9yIHJ1bnRpbWVcbiAgICAgICAgICBkaWROYXZpZ2F0ZSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkZXRlY3RlZERvbWFpbiA9IGRldGVjdERvbWFpbkxvY2FsZShcbiAgICAgICAgdGhpcy5kb21haW5Mb2NhbGVzLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHRoaXMubG9jYWxlXG4gICAgICApXG5cbiAgICAgIC8vIHdlIG5lZWQgdG8gd3JhcCB0aGlzIGluIHRoZSBlbnYgY2hlY2sgYWdhaW4gc2luY2UgcmVnZW5lcmF0b3IgcnVudGltZVxuICAgICAgLy8gbW92ZXMgdGhpcyBvbiBpdHMgb3duIGR1ZSB0byB0aGUgcmV0dXJuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0kxOE5fU1VQUE9SVCkge1xuICAgICAgICAvLyBpZiB3ZSBhcmUgbmF2aWdhdGluZyB0byBhIGRvbWFpbiBsb2NhbGUgZW5zdXJlIHdlIHJlZGlyZWN0IHRvIHRoZVxuICAgICAgICAvLyBjb3JyZWN0IGRvbWFpblxuICAgICAgICBpZiAoXG4gICAgICAgICAgIWRpZE5hdmlnYXRlICYmXG4gICAgICAgICAgZGV0ZWN0ZWREb21haW4gJiZcbiAgICAgICAgICB0aGlzLmlzTG9jYWxlRG9tYWluICYmXG4gICAgICAgICAgc2VsZi5sb2NhdGlvbi5ob3N0bmFtZSAhPT0gZGV0ZWN0ZWREb21haW4uZG9tYWluXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGFzTm9CYXNlUGF0aCA9IGRlbEJhc2VQYXRoKGFzKVxuICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYGh0dHAke2RldGVjdGVkRG9tYWluLmh0dHAgPyAnJyA6ICdzJ306Ly8ke1xuICAgICAgICAgICAgZGV0ZWN0ZWREb21haW4uZG9tYWluXG4gICAgICAgICAgfSR7YWRkQmFzZVBhdGgoXG4gICAgICAgICAgICBgJHtcbiAgICAgICAgICAgICAgdGhpcy5sb2NhbGUgPT09IGRldGVjdGVkRG9tYWluLmRlZmF1bHRMb2NhbGVcbiAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgOiBgLyR7dGhpcy5sb2NhbGV9YFxuICAgICAgICAgICAgfSR7YXNOb0Jhc2VQYXRoID09PSAnLycgPyAnJyA6IGFzTm9CYXNlUGF0aH1gIHx8ICcvJ1xuICAgICAgICAgICl9YFxuICAgICAgICAgIC8vIHRoaXMgd2FzIHByZXZpb3VzbHkgYSByZXR1cm4gYnV0IHdhcyByZW1vdmVkIGluIGZhdm9yXG4gICAgICAgICAgLy8gb2YgYmV0dGVyIGRlYWQgY29kZSBlbGltaW5hdGlvbiB3aXRoIHJlZ2VuZXJhdG9yIHJ1bnRpbWVcbiAgICAgICAgICBkaWROYXZpZ2F0ZSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZGlkTmF2aWdhdGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKCgpID0+IHt9KVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghKG9wdGlvbnMgYXMgYW55KS5faCkge1xuICAgICAgdGhpcy5pc1NzciA9IGZhbHNlXG4gICAgfVxuICAgIC8vIG1hcmtpbmcgcm91dGUgY2hhbmdlcyBhcyBhIG5hdmlnYXRpb24gc3RhcnQgZW50cnlcbiAgICBpZiAoU1QpIHtcbiAgICAgIHBlcmZvcm1hbmNlLm1hcmsoJ3JvdXRlQ2hhbmdlJylcbiAgICB9XG5cbiAgICBjb25zdCB7IHNoYWxsb3cgPSBmYWxzZSB9ID0gb3B0aW9uc1xuICAgIGNvbnN0IHJvdXRlUHJvcHMgPSB7IHNoYWxsb3cgfVxuXG4gICAgaWYgKHRoaXMuX2luRmxpZ2h0Um91dGUpIHtcbiAgICAgIHRoaXMuYWJvcnRDb21wb25lbnRMb2FkKHRoaXMuX2luRmxpZ2h0Um91dGUsIHJvdXRlUHJvcHMpXG4gICAgfVxuXG4gICAgYXMgPSBhZGRCYXNlUGF0aChcbiAgICAgIGFkZExvY2FsZShcbiAgICAgICAgaGFzQmFzZVBhdGgoYXMpID8gZGVsQmFzZVBhdGgoYXMpIDogYXMsXG4gICAgICAgIG9wdGlvbnMubG9jYWxlLFxuICAgICAgICB0aGlzLmRlZmF1bHRMb2NhbGVcbiAgICAgIClcbiAgICApXG4gICAgY29uc3QgY2xlYW5lZEFzID0gZGVsTG9jYWxlKFxuICAgICAgaGFzQmFzZVBhdGgoYXMpID8gZGVsQmFzZVBhdGgoYXMpIDogYXMsXG4gICAgICB0aGlzLmxvY2FsZVxuICAgIClcbiAgICB0aGlzLl9pbkZsaWdodFJvdXRlID0gYXNcblxuICAgIC8vIElmIHRoZSB1cmwgY2hhbmdlIGlzIG9ubHkgcmVsYXRlZCB0byBhIGhhc2ggY2hhbmdlXG4gICAgLy8gV2Ugc2hvdWxkIG5vdCBwcm9jZWVkLiBXZSBzaG91bGQgb25seSBjaGFuZ2UgdGhlIHN0YXRlLlxuXG4gICAgLy8gV0FSTklORzogYF9oYCBpcyBhbiBpbnRlcm5hbCBvcHRpb24gZm9yIGhhbmRpbmcgTmV4dC5qcyBjbGllbnQtc2lkZVxuICAgIC8vIGh5ZHJhdGlvbi4gWW91ciBhcHAgc2hvdWxkIF9uZXZlcl8gdXNlIHRoaXMgcHJvcGVydHkuIEl0IG1heSBjaGFuZ2UgYXRcbiAgICAvLyBhbnkgdGltZSB3aXRob3V0IG5vdGljZS5cbiAgICBpZiAoIShvcHRpb25zIGFzIGFueSkuX2ggJiYgdGhpcy5vbmx5QUhhc2hDaGFuZ2UoY2xlYW5lZEFzKSkge1xuICAgICAgdGhpcy5hc1BhdGggPSBjbGVhbmVkQXNcbiAgICAgIFJvdXRlci5ldmVudHMuZW1pdCgnaGFzaENoYW5nZVN0YXJ0JywgYXMsIHJvdXRlUHJvcHMpXG4gICAgICAvLyBUT0RPOiBkbyB3ZSBuZWVkIHRoZSByZXNvbHZlZCBocmVmIHdoZW4gb25seSBhIGhhc2ggY2hhbmdlP1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShtZXRob2QsIHVybCwgYXMsIG9wdGlvbnMpXG4gICAgICB0aGlzLnNjcm9sbFRvSGFzaChjbGVhbmVkQXMpXG4gICAgICB0aGlzLm5vdGlmeSh0aGlzLmNvbXBvbmVudHNbdGhpcy5yb3V0ZV0sIG51bGwpXG4gICAgICBSb3V0ZXIuZXZlbnRzLmVtaXQoJ2hhc2hDaGFuZ2VDb21wbGV0ZScsIGFzLCByb3V0ZVByb3BzKVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBsZXQgcGFyc2VkID0gcGFyc2VSZWxhdGl2ZVVybCh1cmwpXG4gICAgbGV0IHsgcGF0aG5hbWUsIHF1ZXJ5IH0gPSBwYXJzZWRcblxuICAgIC8vIFRoZSBidWlsZCBtYW5pZmVzdCBuZWVkcyB0byBiZSBsb2FkZWQgYmVmb3JlIGF1dG8tc3RhdGljIGR5bmFtaWMgcGFnZXNcbiAgICAvLyBnZXQgdGhlaXIgcXVlcnkgcGFyYW1ldGVycyB0byBhbGxvdyBlbnN1cmluZyB0aGV5IGNhbiBiZSBwYXJzZWQgcHJvcGVybHlcbiAgICAvLyB3aGVuIHJld3JpdHRlbiB0b1xuICAgIGxldCBwYWdlczogYW55LCByZXdyaXRlczogYW55XG4gICAgdHJ5IHtcbiAgICAgIHBhZ2VzID0gYXdhaXQgdGhpcy5wYWdlTG9hZGVyLmdldFBhZ2VMaXN0KClcbiAgICAgIDsoeyBfX3Jld3JpdGVzOiByZXdyaXRlcyB9ID0gYXdhaXQgZ2V0Q2xpZW50QnVpbGRNYW5pZmVzdCgpKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gSWYgd2UgZmFpbCB0byByZXNvbHZlIHRoZSBwYWdlIGxpc3Qgb3IgY2xpZW50LWJ1aWxkIG1hbmlmZXN0LCB3ZSBtdXN0XG4gICAgICAvLyBkbyBhIHNlcnZlci1zaWRlIHRyYW5zaXRpb246XG4gICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGFzXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBJZiBhc2tlZCB0byBjaGFuZ2UgdGhlIGN1cnJlbnQgVVJMIHdlIHNob3VsZCByZWxvYWQgdGhlIGN1cnJlbnQgcGFnZVxuICAgIC8vIChub3QgbG9jYXRpb24ucmVsb2FkKCkgYnV0IHJlbG9hZCBnZXRJbml0aWFsUHJvcHMgYW5kIG90aGVyIE5leHQuanMgc3R1ZmZzKVxuICAgIC8vIFdlIGFsc28gbmVlZCB0byBzZXQgdGhlIG1ldGhvZCA9IHJlcGxhY2VTdGF0ZSBhbHdheXNcbiAgICAvLyBhcyB0aGlzIHNob3VsZCBub3QgZ28gaW50byB0aGUgaGlzdG9yeSAoVGhhdCdzIGhvdyBicm93c2VycyB3b3JrKVxuICAgIC8vIFdlIHNob3VsZCBjb21wYXJlIHRoZSBuZXcgYXNQYXRoIHRvIHRoZSBjdXJyZW50IGFzUGF0aCwgbm90IHRoZSB1cmxcbiAgICBpZiAoIXRoaXMudXJsSXNOZXcoY2xlYW5lZEFzKSAmJiAhbG9jYWxlQ2hhbmdlKSB7XG4gICAgICBtZXRob2QgPSAncmVwbGFjZVN0YXRlJ1xuICAgIH1cblxuICAgIC8vIHdlIG5lZWQgdG8gcmVzb2x2ZSB0aGUgYXMgdmFsdWUgdXNpbmcgcmV3cml0ZXMgZm9yIGR5bmFtaWMgU1NHXG4gICAgLy8gcGFnZXMgdG8gYWxsb3cgYnVpbGRpbmcgdGhlIGRhdGEgVVJMIGNvcnJlY3RseVxuICAgIGxldCByZXNvbHZlZEFzID0gYXNcblxuICAgIC8vIHVybCBhbmQgYXMgc2hvdWxkIGFsd2F5cyBiZSBwcmVmaXhlZCB3aXRoIGJhc2VQYXRoIGJ5IHRoaXNcbiAgICAvLyBwb2ludCBieSBlaXRoZXIgbmV4dC9saW5rIG9yIHJvdXRlci5wdXNoL3JlcGxhY2Ugc28gc3RyaXAgdGhlXG4gICAgLy8gYmFzZVBhdGggZnJvbSB0aGUgcGF0aG5hbWUgdG8gbWF0Y2ggdGhlIHBhZ2VzIGRpciAxLXRvLTFcbiAgICBwYXRobmFtZSA9IHBhdGhuYW1lXG4gICAgICA/IHJlbW92ZVBhdGhUcmFpbGluZ1NsYXNoKGRlbEJhc2VQYXRoKHBhdGhuYW1lKSlcbiAgICAgIDogcGF0aG5hbWVcblxuICAgIGlmIChzaG91bGRSZXNvbHZlSHJlZiAmJiBwYXRobmFtZSAhPT0gJy9fZXJyb3InKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0hBU19SRVdSSVRFUyAmJiBhcy5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgY29uc3QgcmV3cml0ZXNSZXN1bHQgPSByZXNvbHZlUmV3cml0ZXMoXG4gICAgICAgICAgYWRkQmFzZVBhdGgoYWRkTG9jYWxlKGNsZWFuZWRBcywgdGhpcy5sb2NhbGUpKSxcbiAgICAgICAgICBwYWdlcyxcbiAgICAgICAgICByZXdyaXRlcyxcbiAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAocDogc3RyaW5nKSA9PiByZXNvbHZlRHluYW1pY1JvdXRlKHAsIHBhZ2VzKSxcbiAgICAgICAgICB0aGlzLmxvY2FsZXNcbiAgICAgICAgKVxuICAgICAgICByZXNvbHZlZEFzID0gcmV3cml0ZXNSZXN1bHQuYXNQYXRoXG5cbiAgICAgICAgaWYgKHJld3JpdGVzUmVzdWx0Lm1hdGNoZWRQYWdlICYmIHJld3JpdGVzUmVzdWx0LnJlc29sdmVkSHJlZikge1xuICAgICAgICAgIC8vIGlmIHRoaXMgZGlyZWN0bHkgbWF0Y2hlcyBhIHBhZ2Ugd2UgbmVlZCB0byB1cGRhdGUgdGhlIGhyZWYgdG9cbiAgICAgICAgICAvLyBhbGxvdyB0aGUgY29ycmVjdCBwYWdlIGNodW5rIHRvIGJlIGxvYWRlZFxuICAgICAgICAgIHBhdGhuYW1lID0gcmV3cml0ZXNSZXN1bHQucmVzb2x2ZWRIcmVmXG4gICAgICAgICAgcGFyc2VkLnBhdGhuYW1lID0gcGF0aG5hbWVcbiAgICAgICAgICB1cmwgPSBmb3JtYXRXaXRoVmFsaWRhdGlvbihwYXJzZWQpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlZC5wYXRobmFtZSA9IHJlc29sdmVEeW5hbWljUm91dGUocGF0aG5hbWUsIHBhZ2VzKVxuXG4gICAgICAgIGlmIChwYXJzZWQucGF0aG5hbWUgIT09IHBhdGhuYW1lKSB7XG4gICAgICAgICAgcGF0aG5hbWUgPSBwYXJzZWQucGF0aG5hbWVcbiAgICAgICAgICB1cmwgPSBmb3JtYXRXaXRoVmFsaWRhdGlvbihwYXJzZWQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByb3V0ZSA9IHJlbW92ZVBhdGhUcmFpbGluZ1NsYXNoKHBhdGhuYW1lKVxuXG4gICAgaWYgKCFpc0xvY2FsVVJMKGFzKSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBJbnZhbGlkIGhyZWY6IFwiJHt1cmx9XCIgYW5kIGFzOiBcIiR7YXN9XCIsIHJlY2VpdmVkIHJlbGF0aXZlIGhyZWYgYW5kIGV4dGVybmFsIGFzYCArXG4gICAgICAgICAgICBgXFxuU2VlIG1vcmUgaW5mbzogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvaW52YWxpZC1yZWxhdGl2ZS11cmwtZXh0ZXJuYWwtYXNgXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBhc1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcmVzb2x2ZWRBcyA9IGRlbExvY2FsZShkZWxCYXNlUGF0aChyZXNvbHZlZEFzKSwgdGhpcy5sb2NhbGUpXG5cbiAgICBpZiAoaXNEeW5hbWljUm91dGUocm91dGUpKSB7XG4gICAgICBjb25zdCBwYXJzZWRBcyA9IHBhcnNlUmVsYXRpdmVVcmwocmVzb2x2ZWRBcylcbiAgICAgIGNvbnN0IGFzUGF0aG5hbWUgPSBwYXJzZWRBcy5wYXRobmFtZVxuXG4gICAgICBjb25zdCByb3V0ZVJlZ2V4ID0gZ2V0Um91dGVSZWdleChyb3V0ZSlcbiAgICAgIGNvbnN0IHJvdXRlTWF0Y2ggPSBnZXRSb3V0ZU1hdGNoZXIocm91dGVSZWdleCkoYXNQYXRobmFtZSlcbiAgICAgIGNvbnN0IHNob3VsZEludGVycG9sYXRlID0gcm91dGUgPT09IGFzUGF0aG5hbWVcbiAgICAgIGNvbnN0IGludGVycG9sYXRlZEFzID0gc2hvdWxkSW50ZXJwb2xhdGVcbiAgICAgICAgPyBpbnRlcnBvbGF0ZUFzKHJvdXRlLCBhc1BhdGhuYW1lLCBxdWVyeSlcbiAgICAgICAgOiAoe30gYXMgeyByZXN1bHQ6IHVuZGVmaW5lZDsgcGFyYW1zOiB1bmRlZmluZWQgfSlcblxuICAgICAgaWYgKCFyb3V0ZU1hdGNoIHx8IChzaG91bGRJbnRlcnBvbGF0ZSAmJiAhaW50ZXJwb2xhdGVkQXMucmVzdWx0KSkge1xuICAgICAgICBjb25zdCBtaXNzaW5nUGFyYW1zID0gT2JqZWN0LmtleXMocm91dGVSZWdleC5ncm91cHMpLmZpbHRlcihcbiAgICAgICAgICAocGFyYW0pID0+ICFxdWVyeVtwYXJhbV1cbiAgICAgICAgKVxuXG4gICAgICAgIGlmIChtaXNzaW5nUGFyYW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICBgJHtcbiAgICAgICAgICAgICAgICBzaG91bGRJbnRlcnBvbGF0ZVxuICAgICAgICAgICAgICAgICAgPyBgSW50ZXJwb2xhdGluZyBocmVmYFxuICAgICAgICAgICAgICAgICAgOiBgTWlzbWF0Y2hpbmcgXFxgYXNcXGAgYW5kIFxcYGhyZWZcXGBgXG4gICAgICAgICAgICAgIH0gZmFpbGVkIHRvIG1hbnVhbGx5IHByb3ZpZGUgYCArXG4gICAgICAgICAgICAgICAgYHRoZSBwYXJhbXM6ICR7bWlzc2luZ1BhcmFtcy5qb2luKFxuICAgICAgICAgICAgICAgICAgJywgJ1xuICAgICAgICAgICAgICAgICl9IGluIHRoZSBcXGBocmVmXFxgJ3MgXFxgcXVlcnlcXGBgXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgKHNob3VsZEludGVycG9sYXRlXG4gICAgICAgICAgICAgID8gYFRoZSBwcm92aWRlZCBcXGBocmVmXFxgICgke3VybH0pIHZhbHVlIGlzIG1pc3NpbmcgcXVlcnkgdmFsdWVzICgke21pc3NpbmdQYXJhbXMuam9pbihcbiAgICAgICAgICAgICAgICAgICcsICdcbiAgICAgICAgICAgICAgICApfSkgdG8gYmUgaW50ZXJwb2xhdGVkIHByb3Blcmx5LiBgXG4gICAgICAgICAgICAgIDogYFRoZSBwcm92aWRlZCBcXGBhc1xcYCB2YWx1ZSAoJHthc1BhdGhuYW1lfSkgaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIFxcYGhyZWZcXGAgdmFsdWUgKCR7cm91dGV9KS4gYCkgK1xuICAgICAgICAgICAgICBgUmVhZCBtb3JlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy8ke1xuICAgICAgICAgICAgICAgIHNob3VsZEludGVycG9sYXRlXG4gICAgICAgICAgICAgICAgICA/ICdocmVmLWludGVycG9sYXRpb24tZmFpbGVkJ1xuICAgICAgICAgICAgICAgICAgOiAnaW5jb21wYXRpYmxlLWhyZWYtYXMnXG4gICAgICAgICAgICAgIH1gXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNob3VsZEludGVycG9sYXRlKSB7XG4gICAgICAgIGFzID0gZm9ybWF0V2l0aFZhbGlkYXRpb24oXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih7fSwgcGFyc2VkQXMsIHtcbiAgICAgICAgICAgIHBhdGhuYW1lOiBpbnRlcnBvbGF0ZWRBcy5yZXN1bHQsXG4gICAgICAgICAgICBxdWVyeTogb21pdFBhcm1zRnJvbVF1ZXJ5KHF1ZXJ5LCBpbnRlcnBvbGF0ZWRBcy5wYXJhbXMhKSxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBNZXJnZSBwYXJhbXMgaW50byBgcXVlcnlgLCBvdmVyd3JpdGluZyBhbnkgc3BlY2lmaWVkIGluIHNlYXJjaFxuICAgICAgICBPYmplY3QuYXNzaWduKHF1ZXJ5LCByb3V0ZU1hdGNoKVxuICAgICAgfVxuICAgIH1cblxuICAgIFJvdXRlci5ldmVudHMuZW1pdCgncm91dGVDaGFuZ2VTdGFydCcsIGFzLCByb3V0ZVByb3BzKVxuXG4gICAgdHJ5IHtcbiAgICAgIGxldCByb3V0ZUluZm8gPSBhd2FpdCB0aGlzLmdldFJvdXRlSW5mbyhcbiAgICAgICAgcm91dGUsXG4gICAgICAgIHBhdGhuYW1lLFxuICAgICAgICBxdWVyeSxcbiAgICAgICAgYXMsXG4gICAgICAgIHJlc29sdmVkQXMsXG4gICAgICAgIHJvdXRlUHJvcHNcbiAgICAgIClcbiAgICAgIGxldCB7IGVycm9yLCBwcm9wcywgX19OX1NTRywgX19OX1NTUCB9ID0gcm91dGVJbmZvXG5cbiAgICAgIC8vIGhhbmRsZSByZWRpcmVjdCBvbiBjbGllbnQtdHJhbnNpdGlvblxuICAgICAgaWYgKChfX05fU1NHIHx8IF9fTl9TU1ApICYmIHByb3BzKSB7XG4gICAgICAgIGlmICgocHJvcHMgYXMgYW55KS5wYWdlUHJvcHMgJiYgKHByb3BzIGFzIGFueSkucGFnZVByb3BzLl9fTl9SRURJUkVDVCkge1xuICAgICAgICAgIGNvbnN0IGRlc3RpbmF0aW9uID0gKHByb3BzIGFzIGFueSkucGFnZVByb3BzLl9fTl9SRURJUkVDVFxuXG4gICAgICAgICAgLy8gY2hlY2sgaWYgZGVzdGluYXRpb24gaXMgaW50ZXJuYWwgKHJlc29sdmVzIHRvIGEgcGFnZSkgYW5kIGF0dGVtcHRcbiAgICAgICAgICAvLyBjbGllbnQtbmF2aWdhdGlvbiBpZiBpdCBpcyBmYWxsaW5nIGJhY2sgdG8gaGFyZCBuYXZpZ2F0aW9uIGlmXG4gICAgICAgICAgLy8gaXQncyBub3RcbiAgICAgICAgICBpZiAoZGVzdGluYXRpb24uc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRIcmVmID0gcGFyc2VSZWxhdGl2ZVVybChkZXN0aW5hdGlvbilcbiAgICAgICAgICAgIHBhcnNlZEhyZWYucGF0aG5hbWUgPSByZXNvbHZlRHluYW1pY1JvdXRlKFxuICAgICAgICAgICAgICBwYXJzZWRIcmVmLnBhdGhuYW1lLFxuICAgICAgICAgICAgICBwYWdlc1xuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBpZiAocGFnZXMuaW5jbHVkZXMocGFyc2VkSHJlZi5wYXRobmFtZSkpIHtcbiAgICAgICAgICAgICAgY29uc3QgeyB1cmw6IG5ld1VybCwgYXM6IG5ld0FzIH0gPSBwcmVwYXJlVXJsQXMoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbixcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmNoYW5nZShtZXRob2QsIG5ld1VybCwgbmV3QXMsIG9wdGlvbnMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBkZXN0aW5hdGlvblxuICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgoKSA9PiB7fSlcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNQcmV2aWV3ID0gISFwcm9wcy5fX05fUFJFVklFV1xuXG4gICAgICAgIC8vIGhhbmRsZSBTU0cgZGF0YSA0MDRcbiAgICAgICAgaWYgKHByb3BzLm5vdEZvdW5kID09PSBTU0dfREFUQV9OT1RfRk9VTkQpIHtcbiAgICAgICAgICBsZXQgbm90Rm91bmRSb3V0ZVxuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZmV0Y2hDb21wb25lbnQoJy80MDQnKVxuICAgICAgICAgICAgbm90Rm91bmRSb3V0ZSA9ICcvNDA0J1xuICAgICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICAgIG5vdEZvdW5kUm91dGUgPSAnL19lcnJvcidcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByb3V0ZUluZm8gPSBhd2FpdCB0aGlzLmdldFJvdXRlSW5mbyhcbiAgICAgICAgICAgIG5vdEZvdW5kUm91dGUsXG4gICAgICAgICAgICBub3RGb3VuZFJvdXRlLFxuICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgICBhcyxcbiAgICAgICAgICAgIHJlc29sdmVkQXMsXG4gICAgICAgICAgICB7IHNoYWxsb3c6IGZhbHNlIH1cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgUm91dGVyLmV2ZW50cy5lbWl0KCdiZWZvcmVIaXN0b3J5Q2hhbmdlJywgYXMsIHJvdXRlUHJvcHMpXG4gICAgICB0aGlzLmNoYW5nZVN0YXRlKG1ldGhvZCwgdXJsLCBhcywgb3B0aW9ucylcblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgY29uc3QgYXBwQ29tcDogYW55ID0gdGhpcy5jb21wb25lbnRzWycvX2FwcCddLkNvbXBvbmVudFxuICAgICAgICA7KHdpbmRvdyBhcyBhbnkpLm5leHQuaXNQcmVyZW5kZXJlZCA9XG4gICAgICAgICAgYXBwQ29tcC5nZXRJbml0aWFsUHJvcHMgPT09IGFwcENvbXAub3JpZ0dldEluaXRpYWxQcm9wcyAmJlxuICAgICAgICAgICEocm91dGVJbmZvLkNvbXBvbmVudCBhcyBhbnkpLmdldEluaXRpYWxQcm9wc1xuICAgICAgfVxuXG4gICAgICAvLyBzaGFsbG93IHJvdXRpbmcgaXMgb25seSBhbGxvd2VkIGZvciBzYW1lIHBhZ2UgVVJMIGNoYW5nZXMuXG4gICAgICBjb25zdCBpc1ZhbGlkU2hhbGxvd1JvdXRlID0gb3B0aW9ucy5zaGFsbG93ICYmIHRoaXMucm91dGUgPT09IHJvdXRlXG5cbiAgICAgIGlmIChcbiAgICAgICAgKG9wdGlvbnMgYXMgYW55KS5faCAmJlxuICAgICAgICBwYXRobmFtZSA9PT0gJy9fZXJyb3InICYmXG4gICAgICAgIHNlbGYuX19ORVhUX0RBVEFfXy5wcm9wcz8ucGFnZVByb3BzPy5zdGF0dXNDb2RlID09PSA1MDAgJiZcbiAgICAgICAgcHJvcHM/LnBhZ2VQcm9wc1xuICAgICAgKSB7XG4gICAgICAgIC8vIGVuc3VyZSBzdGF0dXNDb2RlIGlzIHN0aWxsIGNvcnJlY3QgZm9yIHN0YXRpYyA1MDAgcGFnZVxuICAgICAgICAvLyB3aGVuIHVwZGF0aW5nIHF1ZXJ5IGluZm9ybWF0aW9uXG4gICAgICAgIHByb3BzLnBhZ2VQcm9wcy5zdGF0dXNDb2RlID0gNTAwXG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMuc2V0KFxuICAgICAgICByb3V0ZSxcbiAgICAgICAgcGF0aG5hbWUhLFxuICAgICAgICBxdWVyeSxcbiAgICAgICAgY2xlYW5lZEFzLFxuICAgICAgICByb3V0ZUluZm8sXG4gICAgICAgIGZvcmNlZFNjcm9sbCB8fFxuICAgICAgICAgIChpc1ZhbGlkU2hhbGxvd1JvdXRlIHx8ICFvcHRpb25zLnNjcm9sbCA/IG51bGwgOiB7IHg6IDAsIHk6IDAgfSlcbiAgICAgICkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgaWYgKGUuY2FuY2VsbGVkKSBlcnJvciA9IGVycm9yIHx8IGVcbiAgICAgICAgZWxzZSB0aHJvdyBlXG4gICAgICB9KVxuXG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgUm91dGVyLmV2ZW50cy5lbWl0KCdyb3V0ZUNoYW5nZUVycm9yJywgZXJyb3IsIGNsZWFuZWRBcywgcm91dGVQcm9wcylcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cblxuICAgICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9JMThOX1NVUFBPUlQpIHtcbiAgICAgICAgaWYgKHRoaXMubG9jYWxlKSB7XG4gICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmxhbmcgPSB0aGlzLmxvY2FsZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBSb3V0ZXIuZXZlbnRzLmVtaXQoJ3JvdXRlQ2hhbmdlQ29tcGxldGUnLCBhcywgcm91dGVQcm9wcylcblxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIuY2FuY2VsbGVkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG5cbiAgY2hhbmdlU3RhdGUoXG4gICAgbWV0aG9kOiBIaXN0b3J5TWV0aG9kLFxuICAgIHVybDogc3RyaW5nLFxuICAgIGFzOiBzdHJpbmcsXG4gICAgb3B0aW9uczogVHJhbnNpdGlvbk9wdGlvbnMgPSB7fVxuICApOiB2b2lkIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuaGlzdG9yeSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgV2FybmluZzogd2luZG93Lmhpc3RvcnkgaXMgbm90IGF2YWlsYWJsZS5gKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuaGlzdG9yeVttZXRob2RdID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBXYXJuaW5nOiB3aW5kb3cuaGlzdG9yeS4ke21ldGhvZH0gaXMgbm90IGF2YWlsYWJsZWApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtZXRob2QgIT09ICdwdXNoU3RhdGUnIHx8IGdldFVSTCgpICE9PSBhcykge1xuICAgICAgdGhpcy5fc2hhbGxvdyA9IG9wdGlvbnMuc2hhbGxvd1xuICAgICAgd2luZG93Lmhpc3RvcnlbbWV0aG9kXShcbiAgICAgICAge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICBhcyxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgIF9fTjogdHJ1ZSxcbiAgICAgICAgICBpZHg6IHRoaXMuX2lkeCA9IG1ldGhvZCAhPT0gJ3B1c2hTdGF0ZScgPyB0aGlzLl9pZHggOiB0aGlzLl9pZHggKyAxLFxuICAgICAgICB9IGFzIEhpc3RvcnlTdGF0ZSxcbiAgICAgICAgLy8gTW9zdCBicm93c2VycyBjdXJyZW50bHkgaWdub3JlcyB0aGlzIHBhcmFtZXRlciwgYWx0aG91Z2ggdGhleSBtYXkgdXNlIGl0IGluIHRoZSBmdXR1cmUuXG4gICAgICAgIC8vIFBhc3NpbmcgdGhlIGVtcHR5IHN0cmluZyBoZXJlIHNob3VsZCBiZSBzYWZlIGFnYWluc3QgZnV0dXJlIGNoYW5nZXMgdG8gdGhlIG1ldGhvZC5cbiAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hpc3RvcnkvcmVwbGFjZVN0YXRlXG4gICAgICAgICcnLFxuICAgICAgICBhc1xuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGhhbmRsZVJvdXRlSW5mb0Vycm9yKFxuICAgIGVycjogRXJyb3IgJiB7IGNvZGU6IGFueTsgY2FuY2VsbGVkOiBib29sZWFuIH0sXG4gICAgcGF0aG5hbWU6IHN0cmluZyxcbiAgICBxdWVyeTogUGFyc2VkVXJsUXVlcnksXG4gICAgYXM6IHN0cmluZyxcbiAgICByb3V0ZVByb3BzOiBSb3V0ZVByb3BlcnRpZXMsXG4gICAgbG9hZEVycm9yRmFpbD86IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxDb21wbGV0ZVByaXZhdGVSb3V0ZUluZm8+IHtcbiAgICBpZiAoZXJyLmNhbmNlbGxlZCkge1xuICAgICAgLy8gYnViYmxlIHVwIGNhbmNlbGxhdGlvbiBlcnJvcnNcbiAgICAgIHRocm93IGVyclxuICAgIH1cblxuICAgIGlmIChpc0Fzc2V0RXJyb3IoZXJyKSB8fCBsb2FkRXJyb3JGYWlsKSB7XG4gICAgICBSb3V0ZXIuZXZlbnRzLmVtaXQoJ3JvdXRlQ2hhbmdlRXJyb3InLCBlcnIsIGFzLCByb3V0ZVByb3BzKVxuXG4gICAgICAvLyBJZiB3ZSBjYW4ndCBsb2FkIHRoZSBwYWdlIGl0IGNvdWxkIGJlIG9uZSBvZiBmb2xsb3dpbmcgcmVhc29uc1xuICAgICAgLy8gIDEuIFBhZ2UgZG9lc24ndCBleGlzdHNcbiAgICAgIC8vICAyLiBQYWdlIGRvZXMgZXhpc3QgaW4gYSBkaWZmZXJlbnQgem9uZVxuICAgICAgLy8gIDMuIEludGVybmFsIGVycm9yIHdoaWxlIGxvYWRpbmcgdGhlIHBhZ2VcblxuICAgICAgLy8gU28sIGRvaW5nIGEgaGFyZCByZWxvYWQgaXMgdGhlIHByb3BlciB3YXkgdG8gZGVhbCB3aXRoIHRoaXMuXG4gICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGFzXG5cbiAgICAgIC8vIENoYW5naW5nIHRoZSBVUkwgZG9lc24ndCBibG9jayBleGVjdXRpbmcgdGhlIGN1cnJlbnQgY29kZSBwYXRoLlxuICAgICAgLy8gU28gbGV0J3MgdGhyb3cgYSBjYW5jZWxsYXRpb24gZXJyb3Igc3RvcCB0aGUgcm91dGluZyBsb2dpYy5cbiAgICAgIHRocm93IGJ1aWxkQ2FuY2VsbGF0aW9uRXJyb3IoKVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBsZXQgQ29tcG9uZW50OiBDb21wb25lbnRUeXBlXG4gICAgICBsZXQgc3R5bGVTaGVldHM6IFN0eWxlU2hlZXRUdXBsZVtdXG4gICAgICBsZXQgcHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWRcblxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgQ29tcG9uZW50ISA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICAgICAgdHlwZW9mIHN0eWxlU2hlZXRzISA9PT0gJ3VuZGVmaW5lZCdcbiAgICAgICkge1xuICAgICAgICA7KHsgcGFnZTogQ29tcG9uZW50LCBzdHlsZVNoZWV0cyB9ID0gYXdhaXQgdGhpcy5mZXRjaENvbXBvbmVudChcbiAgICAgICAgICAnL19lcnJvcidcbiAgICAgICAgKSlcbiAgICAgIH1cblxuICAgICAgY29uc3Qgcm91dGVJbmZvOiBDb21wbGV0ZVByaXZhdGVSb3V0ZUluZm8gPSB7XG4gICAgICAgIHByb3BzLFxuICAgICAgICBDb21wb25lbnQsXG4gICAgICAgIHN0eWxlU2hlZXRzLFxuICAgICAgICBlcnIsXG4gICAgICAgIGVycm9yOiBlcnIsXG4gICAgICB9XG5cbiAgICAgIGlmICghcm91dGVJbmZvLnByb3BzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcm91dGVJbmZvLnByb3BzID0gYXdhaXQgdGhpcy5nZXRJbml0aWFsUHJvcHMoQ29tcG9uZW50LCB7XG4gICAgICAgICAgICBlcnIsXG4gICAgICAgICAgICBwYXRobmFtZSxcbiAgICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgIH0gYXMgYW55KVxuICAgICAgICB9IGNhdGNoIChnaXBFcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBlcnJvciBwYWdlIGBnZXRJbml0aWFsUHJvcHNgOiAnLCBnaXBFcnIpXG4gICAgICAgICAgcm91dGVJbmZvLnByb3BzID0ge31cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcm91dGVJbmZvXG4gICAgfSBjYXRjaCAocm91dGVJbmZvRXJyKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVSb3V0ZUluZm9FcnJvcihcbiAgICAgICAgcm91dGVJbmZvRXJyLFxuICAgICAgICBwYXRobmFtZSxcbiAgICAgICAgcXVlcnksXG4gICAgICAgIGFzLFxuICAgICAgICByb3V0ZVByb3BzLFxuICAgICAgICB0cnVlXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0Um91dGVJbmZvKFxuICAgIHJvdXRlOiBzdHJpbmcsXG4gICAgcGF0aG5hbWU6IHN0cmluZyxcbiAgICBxdWVyeTogYW55LFxuICAgIGFzOiBzdHJpbmcsXG4gICAgcmVzb2x2ZWRBczogc3RyaW5nLFxuICAgIHJvdXRlUHJvcHM6IFJvdXRlUHJvcGVydGllc1xuICApOiBQcm9taXNlPFByaXZhdGVSb3V0ZUluZm8+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZXhpc3RpbmdSb3V0ZUluZm86IFByaXZhdGVSb3V0ZUluZm8gfCB1bmRlZmluZWQgPSB0aGlzLmNvbXBvbmVudHNbXG4gICAgICAgIHJvdXRlXG4gICAgICBdXG4gICAgICBpZiAocm91dGVQcm9wcy5zaGFsbG93ICYmIGV4aXN0aW5nUm91dGVJbmZvICYmIHRoaXMucm91dGUgPT09IHJvdXRlKSB7XG4gICAgICAgIHJldHVybiBleGlzdGluZ1JvdXRlSW5mb1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjYWNoZWRSb3V0ZUluZm86IENvbXBsZXRlUHJpdmF0ZVJvdXRlSW5mbyB8IHVuZGVmaW5lZCA9XG4gICAgICAgIGV4aXN0aW5nUm91dGVJbmZvICYmICdpbml0aWFsJyBpbiBleGlzdGluZ1JvdXRlSW5mb1xuICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgOiBleGlzdGluZ1JvdXRlSW5mb1xuICAgICAgY29uc3Qgcm91dGVJbmZvOiBDb21wbGV0ZVByaXZhdGVSb3V0ZUluZm8gPSBjYWNoZWRSb3V0ZUluZm9cbiAgICAgICAgPyBjYWNoZWRSb3V0ZUluZm9cbiAgICAgICAgOiBhd2FpdCB0aGlzLmZldGNoQ29tcG9uZW50KHJvdXRlKS50aGVuKChyZXMpID0+ICh7XG4gICAgICAgICAgICBDb21wb25lbnQ6IHJlcy5wYWdlLFxuICAgICAgICAgICAgc3R5bGVTaGVldHM6IHJlcy5zdHlsZVNoZWV0cyxcbiAgICAgICAgICAgIF9fTl9TU0c6IHJlcy5tb2QuX19OX1NTRyxcbiAgICAgICAgICAgIF9fTl9TU1A6IHJlcy5tb2QuX19OX1NTUCxcbiAgICAgICAgICB9KSlcblxuICAgICAgY29uc3QgeyBDb21wb25lbnQsIF9fTl9TU0csIF9fTl9TU1AgfSA9IHJvdXRlSW5mb1xuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBjb25zdCB7IGlzVmFsaWRFbGVtZW50VHlwZSB9ID0gcmVxdWlyZSgncmVhY3QtaXMnKVxuICAgICAgICBpZiAoIWlzVmFsaWRFbGVtZW50VHlwZShDb21wb25lbnQpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFRoZSBkZWZhdWx0IGV4cG9ydCBpcyBub3QgYSBSZWFjdCBDb21wb25lbnQgaW4gcGFnZTogXCIke3BhdGhuYW1lfVwiYFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZXQgZGF0YUhyZWY6IHN0cmluZyB8IHVuZGVmaW5lZFxuXG4gICAgICBpZiAoX19OX1NTRyB8fCBfX05fU1NQKSB7XG4gICAgICAgIGRhdGFIcmVmID0gdGhpcy5wYWdlTG9hZGVyLmdldERhdGFIcmVmKFxuICAgICAgICAgIGZvcm1hdFdpdGhWYWxpZGF0aW9uKHsgcGF0aG5hbWUsIHF1ZXJ5IH0pLFxuICAgICAgICAgIHJlc29sdmVkQXMsXG4gICAgICAgICAgX19OX1NTRyxcbiAgICAgICAgICB0aGlzLmxvY2FsZVxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByb3BzID0gYXdhaXQgdGhpcy5fZ2V0RGF0YTxDb21wbGV0ZVByaXZhdGVSb3V0ZUluZm8+KCgpID0+XG4gICAgICAgIF9fTl9TU0dcbiAgICAgICAgICA/IHRoaXMuX2dldFN0YXRpY0RhdGEoZGF0YUhyZWYhKVxuICAgICAgICAgIDogX19OX1NTUFxuICAgICAgICAgID8gdGhpcy5fZ2V0U2VydmVyRGF0YShkYXRhSHJlZiEpXG4gICAgICAgICAgOiB0aGlzLmdldEluaXRpYWxQcm9wcyhcbiAgICAgICAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICAgICAgICAvLyB3ZSBwcm92aWRlIEFwcFRyZWUgbGF0ZXIgc28gdGhpcyBuZWVkcyB0byBiZSBgYW55YFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcGF0aG5hbWUsXG4gICAgICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgICAgICAgYXNQYXRoOiBhcyxcbiAgICAgICAgICAgICAgICBsb2NhbGU6IHRoaXMubG9jYWxlLFxuICAgICAgICAgICAgICAgIGxvY2FsZXM6IHRoaXMubG9jYWxlcyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0TG9jYWxlOiB0aGlzLmRlZmF1bHRMb2NhbGUsXG4gICAgICAgICAgICAgIH0gYXMgYW55XG4gICAgICAgICAgICApXG4gICAgICApXG5cbiAgICAgIHJvdXRlSW5mby5wcm9wcyA9IHByb3BzXG4gICAgICB0aGlzLmNvbXBvbmVudHNbcm91dGVdID0gcm91dGVJbmZvXG4gICAgICByZXR1cm4gcm91dGVJbmZvXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVSb3V0ZUluZm9FcnJvcihlcnIsIHBhdGhuYW1lLCBxdWVyeSwgYXMsIHJvdXRlUHJvcHMpXG4gICAgfVxuICB9XG5cbiAgc2V0KFxuICAgIHJvdXRlOiBzdHJpbmcsXG4gICAgcGF0aG5hbWU6IHN0cmluZyxcbiAgICBxdWVyeTogUGFyc2VkVXJsUXVlcnksXG4gICAgYXM6IHN0cmluZyxcbiAgICBkYXRhOiBQcml2YXRlUm91dGVJbmZvLFxuICAgIHJlc2V0U2Nyb2xsOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfCBudWxsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuaXNGYWxsYmFjayA9IGZhbHNlXG5cbiAgICB0aGlzLnJvdXRlID0gcm91dGVcbiAgICB0aGlzLnBhdGhuYW1lID0gcGF0aG5hbWVcbiAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlcbiAgICB0aGlzLmFzUGF0aCA9IGFzXG4gICAgcmV0dXJuIHRoaXMubm90aWZ5KGRhdGEsIHJlc2V0U2Nyb2xsKVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIGV4ZWN1dGUgYmVmb3JlIHJlcGxhY2luZyByb3V0ZXIgc3RhdGVcbiAgICogQHBhcmFtIGNiIGNhbGxiYWNrIHRvIGJlIGV4ZWN1dGVkXG4gICAqL1xuICBiZWZvcmVQb3BTdGF0ZShjYjogQmVmb3JlUG9wU3RhdGVDYWxsYmFjaykge1xuICAgIHRoaXMuX2JwcyA9IGNiXG4gIH1cblxuICBvbmx5QUhhc2hDaGFuZ2UoYXM6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5hc1BhdGgpIHJldHVybiBmYWxzZVxuICAgIGNvbnN0IFtvbGRVcmxOb0hhc2gsIG9sZEhhc2hdID0gdGhpcy5hc1BhdGguc3BsaXQoJyMnKVxuICAgIGNvbnN0IFtuZXdVcmxOb0hhc2gsIG5ld0hhc2hdID0gYXMuc3BsaXQoJyMnKVxuXG4gICAgLy8gTWFrZXMgc3VyZSB3ZSBzY3JvbGwgdG8gdGhlIHByb3ZpZGVkIGhhc2ggaWYgdGhlIHVybC9oYXNoIGFyZSB0aGUgc2FtZVxuICAgIGlmIChuZXdIYXNoICYmIG9sZFVybE5vSGFzaCA9PT0gbmV3VXJsTm9IYXNoICYmIG9sZEhhc2ggPT09IG5ld0hhc2gpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIHVybHMgYXJlIGNoYW5nZSwgdGhlcmUncyBtb3JlIHRoYW4gYSBoYXNoIGNoYW5nZVxuICAgIGlmIChvbGRVcmxOb0hhc2ggIT09IG5ld1VybE5vSGFzaCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGhhc2ggaGFzIGNoYW5nZWQsIHRoZW4gaXQncyBhIGhhc2ggb25seSBjaGFuZ2UuXG4gICAgLy8gVGhpcyBjaGVjayBpcyBuZWNlc3NhcnkgdG8gaGFuZGxlIGJvdGggdGhlIGVudGVyIGFuZFxuICAgIC8vIGxlYXZlIGhhc2ggPT09ICcnIGNhc2VzLiBUaGUgaWRlbnRpdHkgY2FzZSBmYWxscyB0aHJvdWdoXG4gICAgLy8gYW5kIGlzIHRyZWF0ZWQgYXMgYSBuZXh0IHJlbG9hZC5cbiAgICByZXR1cm4gb2xkSGFzaCAhPT0gbmV3SGFzaFxuICB9XG5cbiAgc2Nyb2xsVG9IYXNoKGFzOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBbLCBoYXNoXSA9IGFzLnNwbGl0KCcjJylcbiAgICAvLyBTY3JvbGwgdG8gdG9wIGlmIHRoZSBoYXNoIGlzIGp1c3QgYCNgIHdpdGggbm8gdmFsdWUgb3IgYCN0b3BgXG4gICAgLy8gVG8gbWlycm9yIGJyb3dzZXJzXG4gICAgaWYgKGhhc2ggPT09ICcnIHx8IGhhc2ggPT09ICd0b3AnKSB7XG4gICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIEZpcnN0IHdlIGNoZWNrIGlmIHRoZSBlbGVtZW50IGJ5IGlkIGlzIGZvdW5kXG4gICAgY29uc3QgaWRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGhhc2gpXG4gICAgaWYgKGlkRWwpIHtcbiAgICAgIGlkRWwuc2Nyb2xsSW50b1ZpZXcoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIC8vIElmIHRoZXJlJ3Mgbm8gZWxlbWVudCB3aXRoIHRoZSBpZCwgd2UgY2hlY2sgdGhlIGBuYW1lYCBwcm9wZXJ0eVxuICAgIC8vIFRvIG1pcnJvciBicm93c2Vyc1xuICAgIGNvbnN0IG5hbWVFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKGhhc2gpWzBdXG4gICAgaWYgKG5hbWVFbCkge1xuICAgICAgbmFtZUVsLnNjcm9sbEludG9WaWV3KClcbiAgICB9XG4gIH1cblxuICB1cmxJc05ldyhhc1BhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFzUGF0aCAhPT0gYXNQYXRoXG4gIH1cblxuICAvKipcbiAgICogUHJlZmV0Y2ggcGFnZSBjb2RlLCB5b3UgbWF5IHdhaXQgZm9yIHRoZSBkYXRhIGR1cmluZyBwYWdlIHJlbmRlcmluZy5cbiAgICogVGhpcyBmZWF0dXJlIG9ubHkgd29ya3MgaW4gcHJvZHVjdGlvbiFcbiAgICogQHBhcmFtIHVybCB0aGUgaHJlZiBvZiBwcmVmZXRjaGVkIHBhZ2VcbiAgICogQHBhcmFtIGFzUGF0aCB0aGUgYXMgcGF0aCBvZiB0aGUgcHJlZmV0Y2hlZCBwYWdlXG4gICAqL1xuICBhc3luYyBwcmVmZXRjaChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBhc1BhdGg6IHN0cmluZyA9IHVybCxcbiAgICBvcHRpb25zOiBQcmVmZXRjaE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgcGFyc2VkID0gcGFyc2VSZWxhdGl2ZVVybCh1cmwpXG5cbiAgICBsZXQgeyBwYXRobmFtZSB9ID0gcGFyc2VkXG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0kxOE5fU1VQUE9SVCkge1xuICAgICAgaWYgKG9wdGlvbnMubG9jYWxlID09PSBmYWxzZSkge1xuICAgICAgICBwYXRobmFtZSA9IG5vcm1hbGl6ZUxvY2FsZVBhdGghKHBhdGhuYW1lLCB0aGlzLmxvY2FsZXMpLnBhdGhuYW1lXG4gICAgICAgIHBhcnNlZC5wYXRobmFtZSA9IHBhdGhuYW1lXG4gICAgICAgIHVybCA9IGZvcm1hdFdpdGhWYWxpZGF0aW9uKHBhcnNlZClcblxuICAgICAgICBsZXQgcGFyc2VkQXMgPSBwYXJzZVJlbGF0aXZlVXJsKGFzUGF0aClcbiAgICAgICAgY29uc3QgbG9jYWxlUGF0aFJlc3VsdCA9IG5vcm1hbGl6ZUxvY2FsZVBhdGghKFxuICAgICAgICAgIHBhcnNlZEFzLnBhdGhuYW1lLFxuICAgICAgICAgIHRoaXMubG9jYWxlc1xuICAgICAgICApXG4gICAgICAgIHBhcnNlZEFzLnBhdGhuYW1lID0gbG9jYWxlUGF0aFJlc3VsdC5wYXRobmFtZVxuICAgICAgICBvcHRpb25zLmxvY2FsZSA9IGxvY2FsZVBhdGhSZXN1bHQuZGV0ZWN0ZWRMb2NhbGUgfHwgdGhpcy5kZWZhdWx0TG9jYWxlXG4gICAgICAgIGFzUGF0aCA9IGZvcm1hdFdpdGhWYWxpZGF0aW9uKHBhcnNlZEFzKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBhZ2VzID0gYXdhaXQgdGhpcy5wYWdlTG9hZGVyLmdldFBhZ2VMaXN0KClcbiAgICBsZXQgcmVzb2x2ZWRBcyA9IGFzUGF0aFxuXG4gICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9IQVNfUkVXUklURVMgJiYgYXNQYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgbGV0IHJld3JpdGVzOiBhbnlcbiAgICAgIDsoeyBfX3Jld3JpdGVzOiByZXdyaXRlcyB9ID0gYXdhaXQgZ2V0Q2xpZW50QnVpbGRNYW5pZmVzdCgpKVxuXG4gICAgICBjb25zdCByZXdyaXRlc1Jlc3VsdCA9IHJlc29sdmVSZXdyaXRlcyhcbiAgICAgICAgYWRkQmFzZVBhdGgoYWRkTG9jYWxlKGFzUGF0aCwgdGhpcy5sb2NhbGUpKSxcbiAgICAgICAgcGFnZXMsXG4gICAgICAgIHJld3JpdGVzLFxuICAgICAgICBwYXJzZWQucXVlcnksXG4gICAgICAgIChwOiBzdHJpbmcpID0+IHJlc29sdmVEeW5hbWljUm91dGUocCwgcGFnZXMpLFxuICAgICAgICB0aGlzLmxvY2FsZXNcbiAgICAgIClcbiAgICAgIHJlc29sdmVkQXMgPSBkZWxMb2NhbGUoZGVsQmFzZVBhdGgocmV3cml0ZXNSZXN1bHQuYXNQYXRoKSwgdGhpcy5sb2NhbGUpXG5cbiAgICAgIGlmIChyZXdyaXRlc1Jlc3VsdC5tYXRjaGVkUGFnZSAmJiByZXdyaXRlc1Jlc3VsdC5yZXNvbHZlZEhyZWYpIHtcbiAgICAgICAgLy8gaWYgdGhpcyBkaXJlY3RseSBtYXRjaGVzIGEgcGFnZSB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgaHJlZiB0b1xuICAgICAgICAvLyBhbGxvdyB0aGUgY29ycmVjdCBwYWdlIGNodW5rIHRvIGJlIGxvYWRlZFxuICAgICAgICBwYXRobmFtZSA9IHJld3JpdGVzUmVzdWx0LnJlc29sdmVkSHJlZlxuICAgICAgICBwYXJzZWQucGF0aG5hbWUgPSBwYXRobmFtZVxuICAgICAgICB1cmwgPSBmb3JtYXRXaXRoVmFsaWRhdGlvbihwYXJzZWQpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlZC5wYXRobmFtZSA9IHJlc29sdmVEeW5hbWljUm91dGUocGFyc2VkLnBhdGhuYW1lLCBwYWdlcylcblxuICAgICAgaWYgKHBhcnNlZC5wYXRobmFtZSAhPT0gcGF0aG5hbWUpIHtcbiAgICAgICAgcGF0aG5hbWUgPSBwYXJzZWQucGF0aG5hbWVcbiAgICAgICAgdXJsID0gZm9ybWF0V2l0aFZhbGlkYXRpb24ocGFyc2VkKVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByb3V0ZSA9IHJlbW92ZVBhdGhUcmFpbGluZ1NsYXNoKHBhdGhuYW1lKVxuXG4gICAgLy8gUHJlZmV0Y2ggaXMgbm90IHN1cHBvcnRlZCBpbiBkZXZlbG9wbWVudCBtb2RlIGJlY2F1c2UgaXQgd291bGQgdHJpZ2dlciBvbi1kZW1hbmQtZW50cmllc1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICB0aGlzLnBhZ2VMb2FkZXIuX2lzU3NnKHJvdXRlKS50aGVuKChpc1NzZzogYm9vbGVhbikgPT4ge1xuICAgICAgICByZXR1cm4gaXNTc2dcbiAgICAgICAgICA/IHRoaXMuX2dldFN0YXRpY0RhdGEoXG4gICAgICAgICAgICAgIHRoaXMucGFnZUxvYWRlci5nZXREYXRhSHJlZihcbiAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgICAgcmVzb2x2ZWRBcyxcbiAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgIHR5cGVvZiBvcHRpb25zLmxvY2FsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgICAgID8gb3B0aW9ucy5sb2NhbGVcbiAgICAgICAgICAgICAgICAgIDogdGhpcy5sb2NhbGVcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogZmFsc2VcbiAgICAgIH0pLFxuICAgICAgdGhpcy5wYWdlTG9hZGVyW29wdGlvbnMucHJpb3JpdHkgPyAnbG9hZFBhZ2UnIDogJ3ByZWZldGNoJ10ocm91dGUpLFxuICAgIF0pXG4gIH1cblxuICBhc3luYyBmZXRjaENvbXBvbmVudChyb3V0ZTogc3RyaW5nKTogUHJvbWlzZTxHb29kUGFnZUNhY2hlPiB7XG4gICAgbGV0IGNhbmNlbGxlZCA9IGZhbHNlXG4gICAgY29uc3QgY2FuY2VsID0gKHRoaXMuY2xjID0gKCkgPT4ge1xuICAgICAgY2FuY2VsbGVkID0gdHJ1ZVxuICAgIH0pXG5cbiAgICBjb25zdCBjb21wb25lbnRSZXN1bHQgPSBhd2FpdCB0aGlzLnBhZ2VMb2FkZXIubG9hZFBhZ2Uocm91dGUpXG5cbiAgICBpZiAoY2FuY2VsbGVkKSB7XG4gICAgICBjb25zdCBlcnJvcjogYW55ID0gbmV3IEVycm9yKFxuICAgICAgICBgQWJvcnQgZmV0Y2hpbmcgY29tcG9uZW50IGZvciByb3V0ZTogXCIke3JvdXRlfVwiYFxuICAgICAgKVxuICAgICAgZXJyb3IuY2FuY2VsbGVkID0gdHJ1ZVxuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG5cbiAgICBpZiAoY2FuY2VsID09PSB0aGlzLmNsYykge1xuICAgICAgdGhpcy5jbGMgPSBudWxsXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBvbmVudFJlc3VsdFxuICB9XG5cbiAgX2dldERhdGE8VD4oZm46ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2VcbiAgICBjb25zdCBjYW5jZWwgPSAoKSA9PiB7XG4gICAgICBjYW5jZWxsZWQgPSB0cnVlXG4gICAgfVxuICAgIHRoaXMuY2xjID0gY2FuY2VsXG4gICAgcmV0dXJuIGZuKCkudGhlbigoZGF0YSkgPT4ge1xuICAgICAgaWYgKGNhbmNlbCA9PT0gdGhpcy5jbGMpIHtcbiAgICAgICAgdGhpcy5jbGMgPSBudWxsXG4gICAgICB9XG5cbiAgICAgIGlmIChjYW5jZWxsZWQpIHtcbiAgICAgICAgY29uc3QgZXJyOiBhbnkgPSBuZXcgRXJyb3IoJ0xvYWRpbmcgaW5pdGlhbCBwcm9wcyBjYW5jZWxsZWQnKVxuICAgICAgICBlcnIuY2FuY2VsbGVkID0gdHJ1ZVxuICAgICAgICB0aHJvdyBlcnJcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9KVxuICB9XG5cbiAgX2dldFN0YXRpY0RhdGEoZGF0YUhyZWY6IHN0cmluZyk6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgY29uc3QgeyBocmVmOiBjYWNoZUtleSB9ID0gbmV3IFVSTChkYXRhSHJlZiwgd2luZG93LmxvY2F0aW9uLmhyZWYpXG4gICAgaWYgKFxuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgIXRoaXMuaXNQcmV2aWV3ICYmXG4gICAgICB0aGlzLnNkY1tjYWNoZUtleV1cbiAgICApIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5zZGNbY2FjaGVLZXldKVxuICAgIH1cbiAgICByZXR1cm4gZmV0Y2hOZXh0RGF0YShkYXRhSHJlZiwgdGhpcy5pc1NzcikudGhlbigoZGF0YSkgPT4ge1xuICAgICAgdGhpcy5zZGNbY2FjaGVLZXldID0gZGF0YVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9KVxuICB9XG5cbiAgX2dldFNlcnZlckRhdGEoZGF0YUhyZWY6IHN0cmluZyk6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgY29uc3QgeyBocmVmOiByZXNvdXJjZUtleSB9ID0gbmV3IFVSTChkYXRhSHJlZiwgd2luZG93LmxvY2F0aW9uLmhyZWYpXG4gICAgaWYgKHRoaXMuc2RyW3Jlc291cmNlS2V5XSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2RyW3Jlc291cmNlS2V5XVxuICAgIH1cbiAgICByZXR1cm4gKHRoaXMuc2RyW3Jlc291cmNlS2V5XSA9IGZldGNoTmV4dERhdGEoZGF0YUhyZWYsIHRoaXMuaXNTc3IpXG4gICAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICBkZWxldGUgdGhpcy5zZHJbcmVzb3VyY2VLZXldXG4gICAgICAgIHJldHVybiBkYXRhXG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgZGVsZXRlIHRoaXMuc2RyW3Jlc291cmNlS2V5XVxuICAgICAgICB0aHJvdyBlcnJcbiAgICAgIH0pKVxuICB9XG5cbiAgZ2V0SW5pdGlhbFByb3BzKFxuICAgIENvbXBvbmVudDogQ29tcG9uZW50VHlwZSxcbiAgICBjdHg6IE5leHRQYWdlQ29udGV4dFxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHsgQ29tcG9uZW50OiBBcHAgfSA9IHRoaXMuY29tcG9uZW50c1snL19hcHAnXVxuICAgIGNvbnN0IEFwcFRyZWUgPSB0aGlzLl93cmFwQXBwKEFwcCBhcyBBcHBDb21wb25lbnQpXG4gICAgY3R4LkFwcFRyZWUgPSBBcHBUcmVlXG4gICAgcmV0dXJuIGxvYWRHZXRJbml0aWFsUHJvcHM8QXBwQ29udGV4dFR5cGU8Um91dGVyPj4oQXBwLCB7XG4gICAgICBBcHBUcmVlLFxuICAgICAgQ29tcG9uZW50LFxuICAgICAgcm91dGVyOiB0aGlzLFxuICAgICAgY3R4LFxuICAgIH0pXG4gIH1cblxuICBhYm9ydENvbXBvbmVudExvYWQoYXM6IHN0cmluZywgcm91dGVQcm9wczogUm91dGVQcm9wZXJ0aWVzKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2xjKSB7XG4gICAgICBSb3V0ZXIuZXZlbnRzLmVtaXQoXG4gICAgICAgICdyb3V0ZUNoYW5nZUVycm9yJyxcbiAgICAgICAgYnVpbGRDYW5jZWxsYXRpb25FcnJvcigpLFxuICAgICAgICBhcyxcbiAgICAgICAgcm91dGVQcm9wc1xuICAgICAgKVxuICAgICAgdGhpcy5jbGMoKVxuICAgICAgdGhpcy5jbGMgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgbm90aWZ5KFxuICAgIGRhdGE6IFByaXZhdGVSb3V0ZUluZm8sXG4gICAgcmVzZXRTY3JvbGw6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSB8IG51bGxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc3ViKFxuICAgICAgZGF0YSxcbiAgICAgIHRoaXMuY29tcG9uZW50c1snL19hcHAnXS5Db21wb25lbnQgYXMgQXBwQ29tcG9uZW50LFxuICAgICAgcmVzZXRTY3JvbGxcbiAgICApXG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/next-server/lib/router/router.js\n"); - -/***/ }), - -/***/ "./node_modules/next/dist/next-server/lib/router/utils/format-url.js": -/*!***************************************************************************!*\ - !*** ./node_modules/next/dist/next-server/lib/router/utils/format-url.js ***! - \***************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nexports.__esModule = true;\nexports.formatUrl = formatUrl;\n\nvar querystring = _interopRequireWildcard(__webpack_require__(/*! ./querystring */ \"./node_modules/next/dist/next-server/lib/router/utils/querystring.js\"));\n\nfunction _getRequireWildcardCache() {\n if (typeof WeakMap !== \"function\") return null;\n var cache = new WeakMap();\n\n _getRequireWildcardCache = function _getRequireWildcardCache() {\n return cache;\n };\n\n return cache;\n}\n\nfunction _interopRequireWildcard(obj) {\n if (obj && obj.__esModule) {\n return obj;\n }\n\n if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") {\n return {\n \"default\": obj\n };\n }\n\n var cache = _getRequireWildcardCache();\n\n if (cache && cache.has(obj)) {\n return cache.get(obj);\n }\n\n var newObj = {};\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n\n if (desc && (desc.get || desc.set)) {\n Object.defineProperty(newObj, key, desc);\n } else {\n newObj[key] = obj[key];\n }\n }\n }\n\n newObj[\"default\"] = obj;\n\n if (cache) {\n cache.set(obj, newObj);\n }\n\n return newObj;\n} // Format function modified from nodejs\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\nvar slashedProtocols = /https?|ftp|gopher|file/;\n\nfunction formatUrl(urlObj) {\n var auth = urlObj.auth,\n hostname = urlObj.hostname;\n var protocol = urlObj.protocol || '';\n var pathname = urlObj.pathname || '';\n var hash = urlObj.hash || '';\n var query = urlObj.query || '';\n var host = false;\n auth = auth ? encodeURIComponent(auth).replace(/%3A/i, ':') + '@' : '';\n\n if (urlObj.host) {\n host = auth + urlObj.host;\n } else if (hostname) {\n host = auth + (~hostname.indexOf(':') ? \"[\".concat(hostname, \"]\") : hostname);\n\n if (urlObj.port) {\n host += ':' + urlObj.port;\n }\n }\n\n if (query && typeof query === 'object') {\n query = String(querystring.urlQueryToSearchParams(query));\n }\n\n var search = urlObj.search || query && \"?\".concat(query) || '';\n if (protocol && protocol.substr(-1) !== ':') protocol += ':';\n\n if (urlObj.slashes || (!protocol || slashedProtocols.test(protocol)) && host !== false) {\n host = '//' + (host || '');\n if (pathname && pathname[0] !== '/') pathname = '/' + pathname;\n } else if (!host) {\n host = '';\n }\n\n if (hash && hash[0] !== '#') hash = '#' + hash;\n if (search && search[0] !== '?') search = '?' + search;\n pathname = pathname.replace(/[?#]/g, encodeURIComponent);\n search = search.replace('#', '%23');\n return \"\".concat(protocol).concat(host).concat(pathname).concat(search).concat(hash);\n}\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../compiled/webpack/module.js */ \"./node_modules/next/dist/compiled/webpack/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uLy4uLy4uLy4uL25leHQtc2VydmVyL2xpYi9yb3V0ZXIvdXRpbHMvZm9ybWF0LXVybC50cz8xM2M3Il0sIm5hbWVzIjpbInNsYXNoZWRQcm90b2NvbHMiLCJwcm90b2NvbCIsInVybE9iaiIsInBhdGhuYW1lIiwiaGFzaCIsInF1ZXJ5IiwiaG9zdCIsImF1dGgiLCJlbmNvZGVVUklDb21wb25lbnQiLCJob3N0bmFtZSIsIlN0cmluZyIsInF1ZXJ5c3RyaW5nIiwic2VhcmNoIl0sIm1hcHBpbmdzIjoiOzs7OztBQXdCQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXhCQSxDLENBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFNQSxJQUFNQSxnQkFBZ0IsR0FBdEI7O0FBRU8sMkJBQXNDO0FBQUEsTUFDdkMsSUFEdUMsR0FDM0MsTUFEMkMsQ0FDdkMsSUFEdUM7QUFBQSxNQUN2QyxRQUR1QyxHQUMzQyxNQUQyQyxDQUN2QyxRQUR1QztBQUUzQyxNQUFJQyxRQUFRLEdBQUdDLE1BQU0sQ0FBTkEsWUFBZjtBQUNBLE1BQUlDLFFBQVEsR0FBR0QsTUFBTSxDQUFOQSxZQUFmO0FBQ0EsTUFBSUUsSUFBSSxHQUFHRixNQUFNLENBQU5BLFFBQVg7QUFDQSxNQUFJRyxLQUFLLEdBQUdILE1BQU0sQ0FBTkEsU0FBWjtBQUNBLE1BQUlJLElBQW9CLEdBQXhCO0FBRUFDLE1BQUksR0FBR0EsSUFBSSxHQUFHQyxrQkFBa0IsQ0FBbEJBLElBQWtCLENBQWxCQSx3QkFBSCxNQUFYRDs7QUFFQSxNQUFJTCxNQUFNLENBQVYsTUFBaUI7QUFDZkksUUFBSSxHQUFHQyxJQUFJLEdBQUdMLE1BQU0sQ0FBcEJJO0FBREYsU0FFTyxjQUFjO0FBQ25CQSxRQUFJLEdBQUdDLElBQUksSUFBSSxDQUFDRSxRQUFRLENBQVJBLFFBQUQsR0FBQ0EsQ0FBRCwrQkFBZkgsUUFBVyxDQUFYQTs7QUFDQSxRQUFJSixNQUFNLENBQVYsTUFBaUI7QUFDZkksVUFBSSxJQUFJLE1BQU1KLE1BQU0sQ0FBcEJJO0FBRUg7QUFFRDs7QUFBQSxNQUFJRCxLQUFLLElBQUksaUJBQWIsVUFBd0M7QUFDdENBLFNBQUssR0FBR0ssTUFBTSxDQUFDQyxXQUFXLENBQVhBLHVCQUFmTixLQUFlTSxDQUFELENBQWROO0FBR0Y7O0FBQUEsTUFBSU8sTUFBTSxHQUFHVixNQUFNLENBQU5BLFVBQWtCRyxLQUFLLGVBQXZCSCxLQUF1QixDQUF2QkEsSUFBYjtBQUVBLE1BQUlELFFBQVEsSUFBSUEsUUFBUSxDQUFSQSxPQUFnQixDQUFoQkEsT0FBaEIsS0FBNkNBLFFBQVEsSUFBUkE7O0FBRTdDLE1BQ0VDLE1BQU0sQ0FBTkEsV0FDQyxDQUFDLGFBQWFGLGdCQUFnQixDQUFoQkEsS0FBZCxRQUFjQSxDQUFkLEtBQWtETSxJQUFJLEtBRnpELE9BR0U7QUFDQUEsUUFBSSxHQUFHLFFBQVFBLElBQUksSUFBbkJBLEVBQU8sQ0FBUEE7QUFDQSxRQUFJSCxRQUFRLElBQUlBLFFBQVEsQ0FBUkEsQ0FBUSxDQUFSQSxLQUFoQixLQUFxQ0EsUUFBUSxHQUFHLE1BQVhBO0FBTHZDLFNBTU8sSUFBSSxDQUFKLE1BQVc7QUFDaEJHLFFBQUksR0FBSkE7QUFHRjs7QUFBQSxNQUFJRixJQUFJLElBQUlBLElBQUksQ0FBSkEsQ0FBSSxDQUFKQSxLQUFaLEtBQTZCQSxJQUFJLEdBQUcsTUFBUEE7QUFDN0IsTUFBSVEsTUFBTSxJQUFJQSxNQUFNLENBQU5BLENBQU0sQ0FBTkEsS0FBZCxLQUFpQ0EsTUFBTSxHQUFHLE1BQVRBO0FBRWpDVCxVQUFRLEdBQUdBLFFBQVEsQ0FBUkEsaUJBQVhBLGtCQUFXQSxDQUFYQTtBQUNBUyxRQUFNLEdBQUdBLE1BQU0sQ0FBTkEsYUFBVEEsS0FBU0EsQ0FBVEE7QUFFQSxtQkFBVVgsUUFBVixTQUFxQkssSUFBckIsU0FBNEJILFFBQTVCLFNBQXVDUyxNQUF2QztBQUNEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9uZXh0LXNlcnZlci9saWIvcm91dGVyL3V0aWxzL2Zvcm1hdC11cmwuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBGb3JtYXQgZnVuY3Rpb24gbW9kaWZpZWQgZnJvbSBub2RlanNcbi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgeyBVcmxPYmplY3QgfSBmcm9tICd1cmwnXG5pbXBvcnQgeyBQYXJzZWRVcmxRdWVyeSB9IGZyb20gJ3F1ZXJ5c3RyaW5nJ1xuaW1wb3J0ICogYXMgcXVlcnlzdHJpbmcgZnJvbSAnLi9xdWVyeXN0cmluZydcblxuY29uc3Qgc2xhc2hlZFByb3RvY29scyA9IC9odHRwcz98ZnRwfGdvcGhlcnxmaWxlL1xuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0VXJsKHVybE9iajogVXJsT2JqZWN0KSB7XG4gIGxldCB7IGF1dGgsIGhvc3RuYW1lIH0gPSB1cmxPYmpcbiAgbGV0IHByb3RvY29sID0gdXJsT2JqLnByb3RvY29sIHx8ICcnXG4gIGxldCBwYXRobmFtZSA9IHVybE9iai5wYXRobmFtZSB8fCAnJ1xuICBsZXQgaGFzaCA9IHVybE9iai5oYXNoIHx8ICcnXG4gIGxldCBxdWVyeSA9IHVybE9iai5xdWVyeSB8fCAnJ1xuICBsZXQgaG9zdDogc3RyaW5nIHwgZmFsc2UgPSBmYWxzZVxuXG4gIGF1dGggPSBhdXRoID8gZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgpLnJlcGxhY2UoLyUzQS9pLCAnOicpICsgJ0AnIDogJydcblxuICBpZiAodXJsT2JqLmhvc3QpIHtcbiAgICBob3N0ID0gYXV0aCArIHVybE9iai5ob3N0XG4gIH0gZWxzZSBpZiAoaG9zdG5hbWUpIHtcbiAgICBob3N0ID0gYXV0aCArICh+aG9zdG5hbWUuaW5kZXhPZignOicpID8gYFske2hvc3RuYW1lfV1gIDogaG9zdG5hbWUpXG4gICAgaWYgKHVybE9iai5wb3J0KSB7XG4gICAgICBob3N0ICs9ICc6JyArIHVybE9iai5wb3J0XG4gICAgfVxuICB9XG5cbiAgaWYgKHF1ZXJ5ICYmIHR5cGVvZiBxdWVyeSA9PT0gJ29iamVjdCcpIHtcbiAgICBxdWVyeSA9IFN0cmluZyhxdWVyeXN0cmluZy51cmxRdWVyeVRvU2VhcmNoUGFyYW1zKHF1ZXJ5IGFzIFBhcnNlZFVybFF1ZXJ5KSlcbiAgfVxuXG4gIGxldCBzZWFyY2ggPSB1cmxPYmouc2VhcmNoIHx8IChxdWVyeSAmJiBgPyR7cXVlcnl9YCkgfHwgJydcblxuICBpZiAocHJvdG9jb2wgJiYgcHJvdG9jb2wuc3Vic3RyKC0xKSAhPT0gJzonKSBwcm90b2NvbCArPSAnOidcblxuICBpZiAoXG4gICAgdXJsT2JqLnNsYXNoZXMgfHxcbiAgICAoKCFwcm90b2NvbCB8fCBzbGFzaGVkUHJvdG9jb2xzLnRlc3QocHJvdG9jb2wpKSAmJiBob3N0ICE9PSBmYWxzZSlcbiAgKSB7XG4gICAgaG9zdCA9ICcvLycgKyAoaG9zdCB8fCAnJylcbiAgICBpZiAocGF0aG5hbWUgJiYgcGF0aG5hbWVbMF0gIT09ICcvJykgcGF0aG5hbWUgPSAnLycgKyBwYXRobmFtZVxuICB9IGVsc2UgaWYgKCFob3N0KSB7XG4gICAgaG9zdCA9ICcnXG4gIH1cblxuICBpZiAoaGFzaCAmJiBoYXNoWzBdICE9PSAnIycpIGhhc2ggPSAnIycgKyBoYXNoXG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoWzBdICE9PSAnPycpIHNlYXJjaCA9ICc/JyArIHNlYXJjaFxuXG4gIHBhdGhuYW1lID0gcGF0aG5hbWUucmVwbGFjZSgvWz8jXS9nLCBlbmNvZGVVUklDb21wb25lbnQpXG4gIHNlYXJjaCA9IHNlYXJjaC5yZXBsYWNlKCcjJywgJyUyMycpXG5cbiAgcmV0dXJuIGAke3Byb3RvY29sfSR7aG9zdH0ke3BhdGhuYW1lfSR7c2VhcmNofSR7aGFzaH1gXG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/next-server/lib/router/utils/format-url.js\n"); - -/***/ }), - -/***/ "./node_modules/next/dist/next-server/lib/router/utils/get-asset-path-from-route.js": -/*!******************************************************************************************!*\ - !*** ./node_modules/next/dist/next-server/lib/router/utils/get-asset-path-from-route.js ***! - \******************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nexports.__esModule = true;\nexports[\"default\"] = getAssetPathFromRoute; // Translates a logical route into its pages asset path (relative from a common prefix)\n// \"asset path\" being its javascript file, data file, prerendered html,...\n\nfunction getAssetPathFromRoute(route) {\n var ext = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var path = route === '/' ? '/index' : /^\\/index(\\/|$)/.test(route) ? \"/index\".concat(route) : \"\".concat(route);\n return path + ext;\n}\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../compiled/webpack/module.js */ \"./node_modules/next/dist/compiled/webpack/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uLy4uLy4uLy4uL25leHQtc2VydmVyL2xpYi9yb3V0ZXIvdXRpbHMvZ2V0LWFzc2V0LXBhdGgtZnJvbS1yb3V0ZS50cz9lMWMwIl0sIm5hbWVzIjpbImV4dCIsInBhdGgiLCJyb3V0ZSJdLCJtYXBwaW5ncyI6Ijs7OzRDQUFBO0FBQ0E7O0FBQ2Usc0NBR0w7QUFBQSxNQURSQSxHQUNRLHVFQUhLLEVBR0w7QUFDUixNQUFNQyxJQUFJLEdBQ1JDLEtBQUssS0FBTEEsaUJBRUksa0VBSE4sS0FHTSxDQUhOO0FBTUEsU0FBT0QsSUFBSSxHQUFYO0FBQ0QiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L25leHQtc2VydmVyL2xpYi9yb3V0ZXIvdXRpbHMvZ2V0LWFzc2V0LXBhdGgtZnJvbS1yb3V0ZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRyYW5zbGF0ZXMgYSBsb2dpY2FsIHJvdXRlIGludG8gaXRzIHBhZ2VzIGFzc2V0IHBhdGggKHJlbGF0aXZlIGZyb20gYSBjb21tb24gcHJlZml4KVxuLy8gXCJhc3NldCBwYXRoXCIgYmVpbmcgaXRzIGphdmFzY3JpcHQgZmlsZSwgZGF0YSBmaWxlLCBwcmVyZW5kZXJlZCBodG1sLC4uLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QXNzZXRQYXRoRnJvbVJvdXRlKFxuICByb3V0ZTogc3RyaW5nLFxuICBleHQ6IHN0cmluZyA9ICcnXG4pOiBzdHJpbmcge1xuICBjb25zdCBwYXRoID1cbiAgICByb3V0ZSA9PT0gJy8nXG4gICAgICA/ICcvaW5kZXgnXG4gICAgICA6IC9eXFwvaW5kZXgoXFwvfCQpLy50ZXN0KHJvdXRlKVxuICAgICAgPyBgL2luZGV4JHtyb3V0ZX1gXG4gICAgICA6IGAke3JvdXRlfWBcbiAgcmV0dXJuIHBhdGggKyBleHRcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/next-server/lib/router/utils/get-asset-path-from-route.js\n"); - -/***/ }), - -/***/ "./node_modules/next/dist/next-server/lib/router/utils/is-dynamic.js": -/*!***************************************************************************!*\ - !*** ./node_modules/next/dist/next-server/lib/router/utils/is-dynamic.js ***! - \***************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nexports.__esModule = true;\nexports.isDynamicRoute = isDynamicRoute; // Identify /[param]/ in route string\n\nvar TEST_ROUTE = /\\/\\[[^/]+?\\](?=\\/|$)/;\n\nfunction isDynamicRoute(route) {\n return TEST_ROUTE.test(route);\n}\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../compiled/webpack/module.js */ \"./node_modules/next/dist/compiled/webpack/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uLy4uLy4uLy4uL25leHQtc2VydmVyL2xpYi9yb3V0ZXIvdXRpbHMvaXMtZHluYW1pYy50cz9jZGU1Il0sIm5hbWVzIjpbIlRFU1RfUk9VVEUiXSwibWFwcGluZ3MiOiI7Ozt5Q0FBQTs7QUFDQSxJQUFNQSxVQUFVLEdBQWhCOztBQUVPLCtCQUFnRDtBQUNyRCxTQUFPQSxVQUFVLENBQVZBLEtBQVAsS0FBT0EsQ0FBUDtBQUNEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9uZXh0LXNlcnZlci9saWIvcm91dGVyL3V0aWxzL2lzLWR5bmFtaWMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJZGVudGlmeSAvW3BhcmFtXS8gaW4gcm91dGUgc3RyaW5nXG5jb25zdCBURVNUX1JPVVRFID0gL1xcL1xcW1teL10rP1xcXSg/PVxcL3wkKS9cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRHluYW1pY1JvdXRlKHJvdXRlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIFRFU1RfUk9VVEUudGVzdChyb3V0ZSlcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/next-server/lib/router/utils/is-dynamic.js\n"); - -/***/ }), - -/***/ "./node_modules/next/dist/next-server/lib/router/utils/parse-relative-url.js": -/*!***********************************************************************************!*\ - !*** ./node_modules/next/dist/next-server/lib/router/utils/parse-relative-url.js ***! - \***********************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nexports.__esModule = true;\nexports.parseRelativeUrl = parseRelativeUrl;\n\nvar _utils = __webpack_require__(/*! ../../utils */ \"./node_modules/next/dist/next-server/lib/utils.js\");\n\nvar _querystring = __webpack_require__(/*! ./querystring */ \"./node_modules/next/dist/next-server/lib/router/utils/querystring.js\");\n/**\n* Parses path-relative urls (e.g. `/hello/world?foo=bar`). If url isn't path-relative\n* (e.g. `./hello`) then at least base must be.\n* Absolute urls are rejected with one exception, in the browser, absolute urls that are on\n* the current origin will be parsed as relative\n*/\n\n\nfunction parseRelativeUrl(url, base) {\n var globalBase = new URL(false ? undefined : (0, _utils.getLocationOrigin)());\n var resolvedBase = base ? new URL(base, globalBase) : globalBase;\n\n var _URL = new URL(url, resolvedBase),\n pathname = _URL.pathname,\n searchParams = _URL.searchParams,\n search = _URL.search,\n hash = _URL.hash,\n href = _URL.href,\n origin = _URL.origin;\n\n if (origin !== globalBase.origin) {\n throw new Error(\"invariant: invalid relative URL, router received \".concat(url));\n }\n\n return {\n pathname: pathname,\n query: (0, _querystring.searchParamsToUrlQuery)(searchParams),\n search: search,\n hash: hash,\n href: href.slice(globalBase.origin.length)\n };\n}\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../compiled/webpack/module.js */ \"./node_modules/next/dist/compiled/webpack/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uLy4uLy4uLy4uL25leHQtc2VydmVyL2xpYi9yb3V0ZXIvdXRpbHMvcGFyc2UtcmVsYXRpdmUtdXJsLnRzPzk0MGQiXSwibmFtZXMiOlsiZ2xvYmFsQmFzZSIsInJlc29sdmVkQmFzZSIsImJhc2UiLCJvcmlnaW4iLCJwYXRobmFtZSIsInF1ZXJ5Iiwic2VhcmNoIiwiaGFzaCIsImhyZWYiXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7O0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLHFDQUFzRDtBQUMzRCxNQUFNQSxVQUFVLEdBQUcsUUFDakIsb0JBQTZDLFdBRC9DLGlCQUMrQyxHQUQ1QixDQUFuQjtBQUdBLE1BQU1DLFlBQVksR0FBR0MsSUFBSSxHQUFHLGNBQUgsVUFBRyxDQUFILEdBQXpCOztBQUoyRCxhQUtJLGFBQS9ELFlBQStELENBTEo7QUFBQSxNQUtyRCxRQUxxRCxRQUtyRCxRQUxxRDtBQUFBLE1BS3JELFlBTHFELFFBS3JELFlBTHFEO0FBQUEsTUFLckQsTUFMcUQsUUFLckQsTUFMcUQ7QUFBQSxNQUtyRCxJQUxxRCxRQUtyRCxJQUxxRDtBQUFBLE1BS3JELElBTHFELFFBS3JELElBTHFEO0FBQUEsTUFLckQsTUFMcUQsUUFLckQsTUFMcUQ7O0FBUzNELE1BQUlDLE1BQU0sS0FBS0gsVUFBVSxDQUF6QixRQUFrQztBQUNoQyxVQUFNLHFFQUFOLEdBQU0sRUFBTjtBQUVGOztBQUFBLFNBQU87QUFDTEksWUFESyxFQUNMQSxRQURLO0FBRUxDLFNBQUssRUFBRSx5Q0FGRixZQUVFLENBRkY7QUFHTEMsVUFISyxFQUdMQSxNQUhLO0FBSUxDLFFBSkssRUFJTEEsSUFKSztBQUtMQyxRQUFJLEVBQUVBLElBQUksQ0FBSkEsTUFBV1IsVUFBVSxDQUFWQSxPQUxuQixNQUtRUTtBQUxELEdBQVA7QUFPRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1zZXJ2ZXIvbGliL3JvdXRlci91dGlscy9wYXJzZS1yZWxhdGl2ZS11cmwuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRMb2NhdGlvbk9yaWdpbiB9IGZyb20gJy4uLy4uL3V0aWxzJ1xuaW1wb3J0IHsgc2VhcmNoUGFyYW1zVG9VcmxRdWVyeSB9IGZyb20gJy4vcXVlcnlzdHJpbmcnXG5cbi8qKlxuICogUGFyc2VzIHBhdGgtcmVsYXRpdmUgdXJscyAoZS5nLiBgL2hlbGxvL3dvcmxkP2Zvbz1iYXJgKS4gSWYgdXJsIGlzbid0IHBhdGgtcmVsYXRpdmVcbiAqIChlLmcuIGAuL2hlbGxvYCkgdGhlbiBhdCBsZWFzdCBiYXNlIG11c3QgYmUuXG4gKiBBYnNvbHV0ZSB1cmxzIGFyZSByZWplY3RlZCB3aXRoIG9uZSBleGNlcHRpb24sIGluIHRoZSBicm93c2VyLCBhYnNvbHV0ZSB1cmxzIHRoYXQgYXJlIG9uXG4gKiB0aGUgY3VycmVudCBvcmlnaW4gd2lsbCBiZSBwYXJzZWQgYXMgcmVsYXRpdmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUmVsYXRpdmVVcmwodXJsOiBzdHJpbmcsIGJhc2U/OiBzdHJpbmcpIHtcbiAgY29uc3QgZ2xvYmFsQmFzZSA9IG5ldyBVUkwoXG4gICAgdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgPyAnaHR0cDovL24nIDogZ2V0TG9jYXRpb25PcmlnaW4oKVxuICApXG4gIGNvbnN0IHJlc29sdmVkQmFzZSA9IGJhc2UgPyBuZXcgVVJMKGJhc2UsIGdsb2JhbEJhc2UpIDogZ2xvYmFsQmFzZVxuICBjb25zdCB7IHBhdGhuYW1lLCBzZWFyY2hQYXJhbXMsIHNlYXJjaCwgaGFzaCwgaHJlZiwgb3JpZ2luIH0gPSBuZXcgVVJMKFxuICAgIHVybCxcbiAgICByZXNvbHZlZEJhc2VcbiAgKVxuICBpZiAob3JpZ2luICE9PSBnbG9iYWxCYXNlLm9yaWdpbikge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YXJpYW50OiBpbnZhbGlkIHJlbGF0aXZlIFVSTCwgcm91dGVyIHJlY2VpdmVkICR7dXJsfWApXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwYXRobmFtZSxcbiAgICBxdWVyeTogc2VhcmNoUGFyYW1zVG9VcmxRdWVyeShzZWFyY2hQYXJhbXMpLFxuICAgIHNlYXJjaCxcbiAgICBoYXNoLFxuICAgIGhyZWY6IGhyZWYuc2xpY2UoZ2xvYmFsQmFzZS5vcmlnaW4ubGVuZ3RoKSxcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/next-server/lib/router/utils/parse-relative-url.js\n"); - -/***/ }), - -/***/ "./node_modules/next/dist/next-server/lib/router/utils/querystring.js": -/*!****************************************************************************!*\ - !*** ./node_modules/next/dist/next-server/lib/router/utils/querystring.js ***! - \****************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nvar _slicedToArray = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/slicedToArray */ \"./node_modules/next/node_modules/@babel/runtime/helpers/slicedToArray.js\");\n\nexports.__esModule = true;\nexports.searchParamsToUrlQuery = searchParamsToUrlQuery;\nexports.urlQueryToSearchParams = urlQueryToSearchParams;\nexports.assign = assign;\n\nfunction searchParamsToUrlQuery(searchParams) {\n var query = {};\n searchParams.forEach(function (value, key) {\n if (typeof query[key] === 'undefined') {\n query[key] = value;\n } else if (Array.isArray(query[key])) {\n ;\n query[key].push(value);\n } else {\n query[key] = [query[key], value];\n }\n });\n return query;\n}\n\nfunction stringifyUrlQueryParam(param) {\n if (typeof param === 'string' || typeof param === 'number' && !isNaN(param) || typeof param === 'boolean') {\n return String(param);\n } else {\n return '';\n }\n}\n\nfunction urlQueryToSearchParams(urlQuery) {\n var result = new URLSearchParams();\n Object.entries(urlQuery).forEach(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n key = _ref2[0],\n value = _ref2[1];\n\n if (Array.isArray(value)) {\n value.forEach(function (item) {\n return result.append(key, stringifyUrlQueryParam(item));\n });\n } else {\n result.set(key, stringifyUrlQueryParam(value));\n }\n });\n return result;\n}\n\nfunction assign(target) {\n for (var _len = arguments.length, searchParamsList = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n searchParamsList[_key - 1] = arguments[_key];\n }\n\n searchParamsList.forEach(function (searchParams) {\n Array.from(searchParams.keys()).forEach(function (key) {\n return target[\"delete\"](key);\n });\n searchParams.forEach(function (value, key) {\n return target.append(key, value);\n });\n });\n return target;\n}\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../compiled/webpack/module.js */ \"./node_modules/next/dist/compiled/webpack/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uLy4uLy4uLy4uL25leHQtc2VydmVyL2xpYi9yb3V0ZXIvdXRpbHMvcXVlcnlzdHJpbmcudHM/MmViZiJdLCJuYW1lcyI6WyJxdWVyeSIsInNlYXJjaFBhcmFtcyIsIkFycmF5IiwiaXNOYU4iLCJTdHJpbmciLCJyZXN1bHQiLCJPYmplY3QiLCJ2YWx1ZSIsIml0ZW0iLCJzdHJpbmdpZnlVcmxRdWVyeVBhcmFtIiwic2VhcmNoUGFyYW1zTGlzdCIsImtleSIsInRhcmdldCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBRU8sOENBRVc7QUFDaEIsTUFBTUEsS0FBcUIsR0FBM0I7QUFDQUMsY0FBWSxDQUFaQSxRQUFxQixzQkFBZ0I7QUFDbkMsUUFBSSxPQUFPRCxLQUFLLENBQVosR0FBWSxDQUFaLEtBQUosYUFBdUM7QUFDckNBLFdBQUssQ0FBTEEsR0FBSyxDQUFMQTtBQURGLFdBRU8sSUFBSUUsS0FBSyxDQUFMQSxRQUFjRixLQUFLLENBQXZCLEdBQXVCLENBQW5CRSxDQUFKLEVBQStCO0FBQ3BDO0FBQUVGLFdBQUssQ0FBTixHQUFNLENBQUxBLENBQUQsSUFBQ0EsQ0FBRCxLQUFDQTtBQURHLFdBRUE7QUFDTEEsV0FBSyxDQUFMQSxHQUFLLENBQUxBLEdBQWEsQ0FBQ0EsS0FBSyxDQUFOLEdBQU0sQ0FBTixFQUFiQSxLQUFhLENBQWJBO0FBRUg7QUFSREM7QUFTQTtBQUdGOztBQUFBLHVDQUF1RDtBQUNyRCxNQUNFLDZCQUNDLDZCQUE2QixDQUFDRSxLQUFLLENBRHBDLEtBQ29DLENBRHBDLElBRUEsaUJBSEYsV0FJRTtBQUNBLFdBQU9DLE1BQU0sQ0FBYixLQUFhLENBQWI7QUFMRixTQU1PO0FBQ0w7QUFFSDtBQUVNOztBQUFBLDBDQUVZO0FBQ2pCLE1BQU1DLE1BQU0sR0FBRyxJQUFmLGVBQWUsRUFBZjtBQUNBQyxRQUFNLENBQU5BLDBCQUFpQyxnQkFBa0I7QUFBQTtBQUFBLFFBQWpCLEdBQWlCO0FBQUEsUUFBbEIsS0FBa0I7O0FBQ2pELFFBQUlKLEtBQUssQ0FBTEEsUUFBSixLQUFJQSxDQUFKLEVBQTBCO0FBQ3hCSyxXQUFLLENBQUxBLFFBQWVDLGNBQUQ7QUFBQSxlQUFVSCxNQUFNLENBQU5BLFlBQW1CSSxzQkFBc0IsQ0FBakVGLElBQWlFLENBQXpDRixDQUFWO0FBQUEsT0FBZEU7QUFERixXQUVPO0FBQ0xGLFlBQU0sQ0FBTkEsU0FBZ0JJLHNCQUFzQixDQUF0Q0osS0FBc0MsQ0FBdENBO0FBRUg7QUFOREM7QUFPQTtBQUdLOztBQUFBLHdCQUdZO0FBQUEsb0NBSFosZ0JBR1k7QUFIWixvQkFHWTtBQUFBOztBQUNqQkksa0JBQWdCLENBQWhCQSxRQUEwQlQsc0JBQUQsRUFBa0I7QUFDekNDLFNBQUssQ0FBTEEsS0FBV0QsWUFBWSxDQUF2QkMsSUFBV0QsRUFBWEMsVUFBeUNTLGFBQUQ7QUFBQSxhQUFTQyxpQkFBakRWLEdBQWlEVSxDQUFUO0FBQUEsS0FBeENWO0FBQ0FELGdCQUFZLENBQVpBLFFBQXFCO0FBQUEsYUFBZ0JXLE1BQU0sQ0FBTkEsWUFBckNYLEtBQXFDVyxDQUFoQjtBQUFBLEtBQXJCWDtBQUZGUztBQUlBO0FBQ0QiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L25leHQtc2VydmVyL2xpYi9yb3V0ZXIvdXRpbHMvcXVlcnlzdHJpbmcuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQYXJzZWRVcmxRdWVyeSB9IGZyb20gJ3F1ZXJ5c3RyaW5nJ1xuXG5leHBvcnQgZnVuY3Rpb24gc2VhcmNoUGFyYW1zVG9VcmxRdWVyeShcbiAgc2VhcmNoUGFyYW1zOiBVUkxTZWFyY2hQYXJhbXNcbik6IFBhcnNlZFVybFF1ZXJ5IHtcbiAgY29uc3QgcXVlcnk6IFBhcnNlZFVybFF1ZXJ5ID0ge31cbiAgc2VhcmNoUGFyYW1zLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICBpZiAodHlwZW9mIHF1ZXJ5W2tleV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBxdWVyeVtrZXldID0gdmFsdWVcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocXVlcnlba2V5XSkpIHtcbiAgICAgIDsocXVlcnlba2V5XSBhcyBzdHJpbmdbXSkucHVzaCh2YWx1ZSlcbiAgICB9IGVsc2Uge1xuICAgICAgcXVlcnlba2V5XSA9IFtxdWVyeVtrZXldIGFzIHN0cmluZywgdmFsdWVdXG4gICAgfVxuICB9KVxuICByZXR1cm4gcXVlcnlcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5VXJsUXVlcnlQYXJhbShwYXJhbTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKFxuICAgIHR5cGVvZiBwYXJhbSA9PT0gJ3N0cmluZycgfHxcbiAgICAodHlwZW9mIHBhcmFtID09PSAnbnVtYmVyJyAmJiAhaXNOYU4ocGFyYW0pKSB8fFxuICAgIHR5cGVvZiBwYXJhbSA9PT0gJ2Jvb2xlYW4nXG4gICkge1xuICAgIHJldHVybiBTdHJpbmcocGFyYW0pXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICcnXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVybFF1ZXJ5VG9TZWFyY2hQYXJhbXMoXG4gIHVybFF1ZXJ5OiBQYXJzZWRVcmxRdWVyeVxuKTogVVJMU2VhcmNoUGFyYW1zIHtcbiAgY29uc3QgcmVzdWx0ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpXG4gIE9iamVjdC5lbnRyaWVzKHVybFF1ZXJ5KS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlLmZvckVhY2goKGl0ZW0pID0+IHJlc3VsdC5hcHBlbmQoa2V5LCBzdHJpbmdpZnlVcmxRdWVyeVBhcmFtKGl0ZW0pKSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnNldChrZXksIHN0cmluZ2lmeVVybFF1ZXJ5UGFyYW0odmFsdWUpKVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzaWduKFxuICB0YXJnZXQ6IFVSTFNlYXJjaFBhcmFtcyxcbiAgLi4uc2VhcmNoUGFyYW1zTGlzdDogVVJMU2VhcmNoUGFyYW1zW11cbik6IFVSTFNlYXJjaFBhcmFtcyB7XG4gIHNlYXJjaFBhcmFtc0xpc3QuZm9yRWFjaCgoc2VhcmNoUGFyYW1zKSA9PiB7XG4gICAgQXJyYXkuZnJvbShzZWFyY2hQYXJhbXMua2V5cygpKS5mb3JFYWNoKChrZXkpID0+IHRhcmdldC5kZWxldGUoa2V5KSlcbiAgICBzZWFyY2hQYXJhbXMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4gdGFyZ2V0LmFwcGVuZChrZXksIHZhbHVlKSlcbiAgfSlcbiAgcmV0dXJuIHRhcmdldFxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/next-server/lib/router/utils/querystring.js\n"); - -/***/ }), - -/***/ "./node_modules/next/dist/next-server/lib/router/utils/resolve-rewrites-noop.js": -/*!**************************************************************************************!*\ - !*** ./node_modules/next/dist/next-server/lib/router/utils/resolve-rewrites-noop.js ***! - \**************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nexports.__esModule = true;\nexports[\"default\"] = resolveRewrites;\n\nfunction resolveRewrites() {}\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../compiled/webpack/module.js */ \"./node_modules/next/dist/compiled/webpack/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uLy4uLy4uLy4uL25leHQtc2VydmVyL2xpYi9yb3V0ZXIvdXRpbHMvcmVzb2x2ZS1yZXdyaXRlcy1ub29wLnRzP2FjYzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBZSwyQkFBMkIsQ0FBRSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1zZXJ2ZXIvbGliL3JvdXRlci91dGlscy9yZXNvbHZlLXJld3JpdGVzLW5vb3AuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXNvbHZlUmV3cml0ZXMoKSB7fVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/next-server/lib/router/utils/resolve-rewrites-noop.js\n"); - -/***/ }), - -/***/ "./node_modules/next/dist/next-server/lib/router/utils/route-matcher.js": -/*!******************************************************************************!*\ - !*** ./node_modules/next/dist/next-server/lib/router/utils/route-matcher.js ***! - \******************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nexports.__esModule = true;\nexports.getRouteMatcher = getRouteMatcher;\n\nfunction getRouteMatcher(routeRegex) {\n var re = routeRegex.re,\n groups = routeRegex.groups;\n return function (pathname) {\n var routeMatch = re.exec(pathname);\n\n if (!routeMatch) {\n return false;\n }\n\n var decode = function decode(param) {\n try {\n return decodeURIComponent(param);\n } catch (_) {\n var err = new Error('failed to decode param');\n err.code = 'DECODE_FAILED';\n throw err;\n }\n };\n\n var params = {};\n Object.keys(groups).forEach(function (slugName) {\n var g = groups[slugName];\n var m = routeMatch[g.pos];\n\n if (m !== undefined) {\n params[slugName] = ~m.indexOf('/') ? m.split('/').map(function (entry) {\n return decode(entry);\n }) : g.repeat ? [decode(m)] : decode(m);\n }\n });\n return params;\n };\n}\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../compiled/webpack/module.js */ \"./node_modules/next/dist/compiled/webpack/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uLy4uLy4uLy4uL25leHQtc2VydmVyL2xpYi9yb3V0ZXIvdXRpbHMvcm91dGUtbWF0Y2hlci50cz9hNjcyIl0sIm5hbWVzIjpbInBhdGhuYW1lIiwicm91dGVNYXRjaCIsInJlIiwiZGVjb2RlIiwicGFyYW0iLCJkZWNvZGVVUklDb21wb25lbnQiLCJlcnIiLCJwYXJhbXMiLCJPYmplY3QiLCJzbHVnTmFtZSIsImciLCJncm91cHMiLCJtIiwiZW50cnkiXSwibWFwcGluZ3MiOiI7Ozs7O0FBRU8scUNBQXVFO0FBQUEsTUFDdEUsRUFEc0UsR0FDNUUsVUFENEUsQ0FDdEUsRUFEc0U7QUFBQSxNQUN0RSxNQURzRSxHQUM1RSxVQUQ0RSxDQUN0RSxNQURzRTtBQUU1RSxTQUFRQSxrQkFBRCxFQUF5QztBQUM5QyxRQUFNQyxVQUFVLEdBQUdDLEVBQUUsQ0FBRkEsS0FBbkIsUUFBbUJBLENBQW5COztBQUNBLFFBQUksQ0FBSixZQUFpQjtBQUNmO0FBR0Y7O0FBQUEsUUFBTUMsTUFBTSxHQUFJQyxTQUFWRCxNQUFVQyxNQUFELEVBQW1CO0FBQ2hDLFVBQUk7QUFDRixlQUFPQyxrQkFBa0IsQ0FBekIsS0FBeUIsQ0FBekI7QUFDQSxPQUZGLENBRUUsVUFBVTtBQUNWLFlBQU1DLEdBQThCLEdBQUcsVUFBdkMsd0JBQXVDLENBQXZDO0FBR0FBLFdBQUcsQ0FBSEE7QUFDQTtBQUVIO0FBVkQ7O0FBV0EsUUFBTUMsTUFBa0QsR0FBeEQ7QUFFQUMsVUFBTSxDQUFOQSxxQkFBNkJDLGtCQUFELEVBQXNCO0FBQ2hELFVBQU1DLENBQUMsR0FBR0MsTUFBTSxDQUFoQixRQUFnQixDQUFoQjtBQUNBLFVBQU1DLENBQUMsR0FBR1gsVUFBVSxDQUFDUyxDQUFDLENBQXRCLEdBQW9CLENBQXBCOztBQUNBLFVBQUlFLENBQUMsS0FBTCxXQUFxQjtBQUNuQkwsY0FBTSxDQUFOQSxRQUFNLENBQU5BLEdBQW1CLENBQUNLLENBQUMsQ0FBREEsUUFBRCxHQUFDQSxDQUFELEdBQ2ZBLENBQUMsQ0FBREEsZUFBa0JDLGVBQUQ7QUFBQSxpQkFBV1YsTUFBTSxDQURuQixLQUNtQixDQUFqQjtBQUFBLFNBQWpCUyxDQURlLEdBRWZGLENBQUMsQ0FBREEsU0FDQSxDQUFDUCxNQUFNLENBRFBPLENBQ08sQ0FBUCxDQURBQSxHQUVBUCxNQUFNLENBSlZJLENBSVUsQ0FKVkE7QUFNSDtBQVZEQztBQVdBO0FBOUJGO0FBZ0NEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9uZXh0LXNlcnZlci9saWIvcm91dGVyL3V0aWxzL3JvdXRlLW1hdGNoZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRSb3V0ZVJlZ2V4IH0gZnJvbSAnLi9yb3V0ZS1yZWdleCdcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJvdXRlTWF0Y2hlcihyb3V0ZVJlZ2V4OiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRSb3V0ZVJlZ2V4Pikge1xuICBjb25zdCB7IHJlLCBncm91cHMgfSA9IHJvdXRlUmVnZXhcbiAgcmV0dXJuIChwYXRobmFtZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCkgPT4ge1xuICAgIGNvbnN0IHJvdXRlTWF0Y2ggPSByZS5leGVjKHBhdGhuYW1lISlcbiAgICBpZiAoIXJvdXRlTWF0Y2gpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGNvbnN0IGRlY29kZSA9IChwYXJhbTogc3RyaW5nKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHBhcmFtKVxuICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICBjb25zdCBlcnI6IEVycm9yICYgeyBjb2RlPzogc3RyaW5nIH0gPSBuZXcgRXJyb3IoXG4gICAgICAgICAgJ2ZhaWxlZCB0byBkZWNvZGUgcGFyYW0nXG4gICAgICAgIClcbiAgICAgICAgZXJyLmNvZGUgPSAnREVDT0RFX0ZBSUxFRCdcbiAgICAgICAgdGhyb3cgZXJyXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHBhcmFtczogeyBbcGFyYW1OYW1lOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9ID0ge31cblxuICAgIE9iamVjdC5rZXlzKGdyb3VwcykuZm9yRWFjaCgoc2x1Z05hbWU6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgZyA9IGdyb3Vwc1tzbHVnTmFtZV1cbiAgICAgIGNvbnN0IG0gPSByb3V0ZU1hdGNoW2cucG9zXVxuICAgICAgaWYgKG0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwYXJhbXNbc2x1Z05hbWVdID0gfm0uaW5kZXhPZignLycpXG4gICAgICAgICAgPyBtLnNwbGl0KCcvJykubWFwKChlbnRyeSkgPT4gZGVjb2RlKGVudHJ5KSlcbiAgICAgICAgICA6IGcucmVwZWF0XG4gICAgICAgICAgPyBbZGVjb2RlKG0pXVxuICAgICAgICAgIDogZGVjb2RlKG0pXG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gcGFyYW1zXG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/next-server/lib/router/utils/route-matcher.js\n"); - -/***/ }), - -/***/ "./node_modules/next/dist/next-server/lib/router/utils/route-regex.js": -/*!****************************************************************************!*\ - !*** ./node_modules/next/dist/next-server/lib/router/utils/route-regex.js ***! - \****************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nexports.__esModule = true;\nexports.getRouteRegex = getRouteRegex; // this isn't importing the escape-string-regex module\n// to reduce bytes\n\nfunction escapeRegex(str) {\n return str.replace(/[|\\\\{}()[\\]^$+*?.-]/g, '\\\\$&');\n}\n\nfunction parseParameter(param) {\n var optional = param.startsWith('[') && param.endsWith(']');\n\n if (optional) {\n param = param.slice(1, -1);\n }\n\n var repeat = param.startsWith('...');\n\n if (repeat) {\n param = param.slice(3);\n }\n\n return {\n key: param,\n repeat: repeat,\n optional: optional\n };\n}\n\nfunction getRouteRegex(normalizedRoute) {\n var segments = (normalizedRoute.replace(/\\/$/, '') || '/').slice(1).split('/');\n var groups = {};\n var groupIndex = 1;\n var parameterizedRoute = segments.map(function (segment) {\n if (segment.startsWith('[') && segment.endsWith(']')) {\n var _parseParameter = parseParameter(segment.slice(1, -1)),\n key = _parseParameter.key,\n optional = _parseParameter.optional,\n repeat = _parseParameter.repeat;\n\n groups[key] = {\n pos: groupIndex++,\n repeat: repeat,\n optional: optional\n };\n return repeat ? optional ? '(?:/(.+?))?' : '/(.+?)' : '/([^/]+?)';\n } else {\n return \"/\".concat(escapeRegex(segment));\n }\n }).join(''); // dead code eliminate for browser since it's only needed\n // while generating routes-manifest\n\n if (false) { var namedParameterizedRoute, routeKeys, getSafeRouteKey, routeKeyCharLength, routeKeyCharCode; }\n\n return {\n re: new RegExp(\"^\".concat(parameterizedRoute, \"(?:/)?$\")),\n groups: groups\n };\n}\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../compiled/webpack/module.js */ \"./node_modules/next/dist/compiled/webpack/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uLy4uLy4uLy4uL25leHQtc2VydmVyL2xpYi9yb3V0ZXIvdXRpbHMvcm91dGUtcmVnZXgudHM/OWRiYyJdLCJuYW1lcyI6WyJzdHIiLCJvcHRpb25hbCIsInBhcmFtIiwicmVwZWF0Iiwia2V5Iiwic2VnbWVudHMiLCJub3JtYWxpemVkUm91dGUiLCJncm91cHMiLCJncm91cEluZGV4IiwicGFyYW1ldGVyaXplZFJvdXRlIiwic2VnbWVudCIsInBhcnNlUGFyYW1ldGVyIiwicG9zIiwiZXNjYXBlUmVnZXgiLCJyZSJdLCJtYXBwaW5ncyI6Ijs7O3VDQU1BO0FBQ0E7O0FBQ0EsMEJBQWtDO0FBQ2hDLFNBQU9BLEdBQUcsQ0FBSEEsZ0NBQVAsTUFBT0EsQ0FBUDtBQUdGOztBQUFBLCtCQUF1QztBQUNyQyxNQUFNQyxRQUFRLEdBQUdDLEtBQUssQ0FBTEEsbUJBQXlCQSxLQUFLLENBQUxBLFNBQTFDLEdBQTBDQSxDQUExQzs7QUFDQSxnQkFBYztBQUNaQSxTQUFLLEdBQUdBLEtBQUssQ0FBTEEsU0FBZSxDQUF2QkEsQ0FBUUEsQ0FBUkE7QUFFRjs7QUFBQSxNQUFNQyxNQUFNLEdBQUdELEtBQUssQ0FBTEEsV0FBZixLQUFlQSxDQUFmOztBQUNBLGNBQVk7QUFDVkEsU0FBSyxHQUFHQSxLQUFLLENBQUxBLE1BQVJBLENBQVFBLENBQVJBO0FBRUY7O0FBQUEsU0FBTztBQUFFRSxPQUFHLEVBQUw7QUFBY0QsVUFBZCxFQUFjQSxNQUFkO0FBQXNCRixZQUE3QixFQUE2QkE7QUFBdEIsR0FBUDtBQUdLOztBQUFBLHdDQU9MO0FBQ0EsTUFBTUksUUFBUSxHQUFHLENBQUNDLGVBQWUsQ0FBZkEsc0JBQUQsb0JBQWpCLEdBQWlCLENBQWpCO0FBSUEsTUFBTUMsTUFBc0MsR0FBNUM7QUFDQSxNQUFJQyxVQUFVLEdBQWQ7QUFDQSxNQUFNQyxrQkFBa0IsR0FBR0osUUFBUSxDQUFSQSxJQUNuQkssaUJBQUQsRUFBYTtBQUNoQixRQUFJQSxPQUFPLENBQVBBLG1CQUEyQkEsT0FBTyxDQUFQQSxTQUEvQixHQUErQkEsQ0FBL0IsRUFBc0Q7QUFBQSw0QkFDbEJDLGNBQWMsQ0FBQ0QsT0FBTyxDQUFQQSxTQUFpQixDQUFsRSxDQUFpREEsQ0FBRCxDQURJO0FBQUEsVUFDOUMsR0FEOEMsbUJBQzlDLEdBRDhDO0FBQUEsVUFDOUMsUUFEOEMsbUJBQzlDLFFBRDhDO0FBQUEsVUFDOUMsTUFEOEMsbUJBQzlDLE1BRDhDOztBQUVwREgsWUFBTSxDQUFOQSxHQUFNLENBQU5BLEdBQWM7QUFBRUssV0FBRyxFQUFFSixVQUFQO0FBQXFCTCxjQUFyQixFQUFxQkEsTUFBckI7QUFBNkJGLGdCQUEzQ00sRUFBMkNOO0FBQTdCLE9BQWRNO0FBQ0EsYUFBT0osTUFBTSxHQUFJRixRQUFRLG1CQUFaLFdBQWI7QUFIRixXQUlPO0FBQ0wsd0JBQVdZLFdBQVcsQ0FBdEIsT0FBc0IsQ0FBdEI7QUFFSDtBQVR3QlIsVUFBM0IsRUFBMkJBLENBQTNCLENBUEEsQ0FtQkE7QUFDQTs7QUFDQSxhQUFtQyxrR0FnRW5DOztBQUFBLFNBQU87QUFDTFMsTUFBRSxFQUFFLHNCQURDLGtCQUNELGFBREM7QUFFTFAsVUFGRixFQUVFQTtBQUZLLEdBQVA7QUFJRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1zZXJ2ZXIvbGliL3JvdXRlci91dGlscy9yb3V0ZS1yZWdleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgR3JvdXAge1xuICBwb3M6IG51bWJlclxuICByZXBlYXQ6IGJvb2xlYW5cbiAgb3B0aW9uYWw6IGJvb2xlYW5cbn1cblxuLy8gdGhpcyBpc24ndCBpbXBvcnRpbmcgdGhlIGVzY2FwZS1zdHJpbmctcmVnZXggbW9kdWxlXG4vLyB0byByZWR1Y2UgYnl0ZXNcbmZ1bmN0aW9uIGVzY2FwZVJlZ2V4KHN0cjogc3RyaW5nKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvW3xcXFxce30oKVtcXF1eJCsqPy4tXS9nLCAnXFxcXCQmJylcbn1cblxuZnVuY3Rpb24gcGFyc2VQYXJhbWV0ZXIocGFyYW06IHN0cmluZykge1xuICBjb25zdCBvcHRpb25hbCA9IHBhcmFtLnN0YXJ0c1dpdGgoJ1snKSAmJiBwYXJhbS5lbmRzV2l0aCgnXScpXG4gIGlmIChvcHRpb25hbCkge1xuICAgIHBhcmFtID0gcGFyYW0uc2xpY2UoMSwgLTEpXG4gIH1cbiAgY29uc3QgcmVwZWF0ID0gcGFyYW0uc3RhcnRzV2l0aCgnLi4uJylcbiAgaWYgKHJlcGVhdCkge1xuICAgIHBhcmFtID0gcGFyYW0uc2xpY2UoMylcbiAgfVxuICByZXR1cm4geyBrZXk6IHBhcmFtLCByZXBlYXQsIG9wdGlvbmFsIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJvdXRlUmVnZXgoXG4gIG5vcm1hbGl6ZWRSb3V0ZTogc3RyaW5nXG4pOiB7XG4gIHJlOiBSZWdFeHBcbiAgbmFtZWRSZWdleD86IHN0cmluZ1xuICByb3V0ZUtleXM/OiB7IFtuYW1lZDogc3RyaW5nXTogc3RyaW5nIH1cbiAgZ3JvdXBzOiB7IFtncm91cE5hbWU6IHN0cmluZ106IEdyb3VwIH1cbn0ge1xuICBjb25zdCBzZWdtZW50cyA9IChub3JtYWxpemVkUm91dGUucmVwbGFjZSgvXFwvJC8sICcnKSB8fCAnLycpXG4gICAgLnNsaWNlKDEpXG4gICAgLnNwbGl0KCcvJylcblxuICBjb25zdCBncm91cHM6IHsgW2dyb3VwTmFtZTogc3RyaW5nXTogR3JvdXAgfSA9IHt9XG4gIGxldCBncm91cEluZGV4ID0gMVxuICBjb25zdCBwYXJhbWV0ZXJpemVkUm91dGUgPSBzZWdtZW50c1xuICAgIC5tYXAoKHNlZ21lbnQpID0+IHtcbiAgICAgIGlmIChzZWdtZW50LnN0YXJ0c1dpdGgoJ1snKSAmJiBzZWdtZW50LmVuZHNXaXRoKCddJykpIHtcbiAgICAgICAgY29uc3QgeyBrZXksIG9wdGlvbmFsLCByZXBlYXQgfSA9IHBhcnNlUGFyYW1ldGVyKHNlZ21lbnQuc2xpY2UoMSwgLTEpKVxuICAgICAgICBncm91cHNba2V5XSA9IHsgcG9zOiBncm91cEluZGV4KyssIHJlcGVhdCwgb3B0aW9uYWwgfVxuICAgICAgICByZXR1cm4gcmVwZWF0ID8gKG9wdGlvbmFsID8gJyg/Oi8oLis/KSk/JyA6ICcvKC4rPyknKSA6ICcvKFteL10rPyknXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYC8ke2VzY2FwZVJlZ2V4KHNlZ21lbnQpfWBcbiAgICAgIH1cbiAgICB9KVxuICAgIC5qb2luKCcnKVxuXG4gIC8vIGRlYWQgY29kZSBlbGltaW5hdGUgZm9yIGJyb3dzZXIgc2luY2UgaXQncyBvbmx5IG5lZWRlZFxuICAvLyB3aGlsZSBnZW5lcmF0aW5nIHJvdXRlcy1tYW5pZmVzdFxuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBsZXQgcm91dGVLZXlDaGFyQ29kZSA9IDk3XG4gICAgbGV0IHJvdXRlS2V5Q2hhckxlbmd0aCA9IDFcblxuICAgIC8vIGJ1aWxkcyBhIG1pbmltYWwgcm91dGVLZXkgdXNpbmcgb25seSBhLXogYW5kIG1pbmltYWwgbnVtYmVyIG9mIGNoYXJhY3RlcnNcbiAgICBjb25zdCBnZXRTYWZlUm91dGVLZXkgPSAoKSA9PiB7XG4gICAgICBsZXQgcm91dGVLZXkgPSAnJ1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvdXRlS2V5Q2hhckxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJvdXRlS2V5ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUocm91dGVLZXlDaGFyQ29kZSlcbiAgICAgICAgcm91dGVLZXlDaGFyQ29kZSsrXG5cbiAgICAgICAgaWYgKHJvdXRlS2V5Q2hhckNvZGUgPiAxMjIpIHtcbiAgICAgICAgICByb3V0ZUtleUNoYXJMZW5ndGgrK1xuICAgICAgICAgIHJvdXRlS2V5Q2hhckNvZGUgPSA5N1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcm91dGVLZXlcbiAgICB9XG5cbiAgICBjb25zdCByb3V0ZUtleXM6IHsgW25hbWVkOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9XG5cbiAgICBsZXQgbmFtZWRQYXJhbWV0ZXJpemVkUm91dGUgPSBzZWdtZW50c1xuICAgICAgLm1hcCgoc2VnbWVudCkgPT4ge1xuICAgICAgICBpZiAoc2VnbWVudC5zdGFydHNXaXRoKCdbJykgJiYgc2VnbWVudC5lbmRzV2l0aCgnXScpKSB7XG4gICAgICAgICAgY29uc3QgeyBrZXksIG9wdGlvbmFsLCByZXBlYXQgfSA9IHBhcnNlUGFyYW1ldGVyKHNlZ21lbnQuc2xpY2UoMSwgLTEpKVxuICAgICAgICAgIC8vIHJlcGxhY2UgYW55IG5vbi13b3JkIGNoYXJhY3RlcnMgc2luY2UgdGhleSBjYW4gYnJlYWtcbiAgICAgICAgICAvLyB0aGUgbmFtZWQgcmVnZXhcbiAgICAgICAgICBsZXQgY2xlYW5lZEtleSA9IGtleS5yZXBsYWNlKC9cXFcvZywgJycpXG4gICAgICAgICAgbGV0IGludmFsaWRLZXkgPSBmYWxzZVxuXG4gICAgICAgICAgLy8gY2hlY2sgaWYgdGhlIGtleSBpcyBzdGlsbCBpbnZhbGlkIGFuZCBmYWxsYmFjayB0byB1c2luZyBhIGtub3duXG4gICAgICAgICAgLy8gc2FmZSBrZXlcbiAgICAgICAgICBpZiAoY2xlYW5lZEtleS5sZW5ndGggPT09IDAgfHwgY2xlYW5lZEtleS5sZW5ndGggPiAzMCkge1xuICAgICAgICAgICAgaW52YWxpZEtleSA9IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFpc05hTihwYXJzZUludChjbGVhbmVkS2V5LnN1YnN0cigwLCAxKSkpKSB7XG4gICAgICAgICAgICBpbnZhbGlkS2V5ID0gdHJ1ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpbnZhbGlkS2V5KSB7XG4gICAgICAgICAgICBjbGVhbmVkS2V5ID0gZ2V0U2FmZVJvdXRlS2V5KClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByb3V0ZUtleXNbY2xlYW5lZEtleV0gPSBrZXlcbiAgICAgICAgICByZXR1cm4gcmVwZWF0XG4gICAgICAgICAgICA/IG9wdGlvbmFsXG4gICAgICAgICAgICAgID8gYCg/Oi8oPzwke2NsZWFuZWRLZXl9Pi4rPykpP2BcbiAgICAgICAgICAgICAgOiBgLyg/PCR7Y2xlYW5lZEtleX0+Lis/KWBcbiAgICAgICAgICAgIDogYC8oPzwke2NsZWFuZWRLZXl9PlteL10rPylgXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGAvJHtlc2NhcGVSZWdleChzZWdtZW50KX1gXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuam9pbignJylcblxuICAgIHJldHVybiB7XG4gICAgICByZTogbmV3IFJlZ0V4cChgXiR7cGFyYW1ldGVyaXplZFJvdXRlfSg/Oi8pPyRgKSxcbiAgICAgIGdyb3VwcyxcbiAgICAgIHJvdXRlS2V5cyxcbiAgICAgIG5hbWVkUmVnZXg6IGBeJHtuYW1lZFBhcmFtZXRlcml6ZWRSb3V0ZX0oPzovKT8kYCxcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHJlOiBuZXcgUmVnRXhwKGBeJHtwYXJhbWV0ZXJpemVkUm91dGV9KD86Lyk/JGApLFxuICAgIGdyb3VwcyxcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/next-server/lib/router/utils/route-regex.js\n"); - -/***/ }), - -/***/ "./node_modules/next/dist/next-server/lib/side-effect.js": -/*!***************************************************************!*\ - !*** ./node_modules/next/dist/next-server/lib/side-effect.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nvar _toConsumableArray = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/toConsumableArray */ \"./node_modules/next/node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n\nvar _classCallCheck = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/classCallCheck */ \"./node_modules/next/node_modules/@babel/runtime/helpers/classCallCheck.js\");\n\nvar _createClass = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/createClass */ \"./node_modules/next/node_modules/@babel/runtime/helpers/createClass.js\");\n\nvar _assertThisInitialized = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/assertThisInitialized */ \"./node_modules/next/node_modules/@babel/runtime/helpers/assertThisInitialized.js\");\n\nvar _inherits = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/inherits */ \"./node_modules/next/node_modules/@babel/runtime/helpers/inherits.js\");\n\nvar _possibleConstructorReturn = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/next/node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n\nvar _getPrototypeOf = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/getPrototypeOf */ \"./node_modules/next/node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _react = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n\nvar isServer = false;\n\nvar _default = /*#__PURE__*/function (_react$Component) {\n _inherits(_default, _react$Component);\n\n var _super = _createSuper(_default);\n\n function _default(props) {\n var _this;\n\n _classCallCheck(this, _default);\n\n _this = _super.call(this, props);\n _this._hasHeadManager = void 0;\n\n _this.emitChange = function () {\n if (_this._hasHeadManager) {\n _this.props.headManager.updateHead(_this.props.reduceComponentsToState(_toConsumableArray(_this.props.headManager.mountedInstances), _this.props));\n }\n };\n\n _this._hasHeadManager = _this.props.headManager && _this.props.headManager.mountedInstances;\n\n if (isServer && _this._hasHeadManager) {\n _this.props.headManager.mountedInstances.add(_assertThisInitialized(_this));\n\n _this.emitChange();\n }\n\n return _this;\n }\n\n _createClass(_default, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n if (this._hasHeadManager) {\n this.props.headManager.mountedInstances.add(this);\n }\n\n this.emitChange();\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n this.emitChange();\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n if (this._hasHeadManager) {\n this.props.headManager.mountedInstances[\"delete\"](this);\n }\n\n this.emitChange();\n }\n }, {\n key: \"render\",\n value: function render() {\n return null;\n }\n }]);\n\n return _default;\n}(_react.Component);\n\nexports[\"default\"] = _default;\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../compiled/webpack/module.js */ \"./node_modules/next/dist/compiled/webpack/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uLy4uL25leHQtc2VydmVyL2xpYi9zaWRlLWVmZmVjdC50c3g/MTNiNyJdLCJuYW1lcyI6WyJpc1NlcnZlciIsImNvbnN0cnVjdG9yIiwiX2hhc0hlYWRNYW5hZ2VyIiwiZW1pdENoYW5nZSIsImNvbXBvbmVudERpZE1vdW50IiwiY29tcG9uZW50RGlkVXBkYXRlIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJyZW5kZXIiLCJDb21wb25lbnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBRUEsSUFBTUEsUUFBTjs7SUFjZSxROzs7OztBQWNiQyxvQkFBVyxLQUFYQSxFQUF3QjtBQUFBOztBQUFBOztBQUN0QjtBQURzQixVQWJoQkMsZUFhZ0I7O0FBQUEsVUFYeEJDLFVBV3dCLEdBWFgsWUFBWTtBQUN2QixVQUFJLE1BQUosaUJBQTBCO0FBQ3hCLDJDQUNFLHVEQUNNLHdCQUROLG1CQUVFLE1BSEosS0FDRSxDQURGO0FBT0g7QUFFdUI7O0FBRXRCLDRCQUNFLDJCQUEwQix3QkFENUI7O0FBR0EsUUFBSUgsUUFBUSxJQUFJLE1BQWhCLGlCQUFzQztBQUNwQzs7QUFDQTtBQUVIOztBQVR1QjtBQVV4Qkk7Ozs7d0NBQW9CO0FBQ2xCLFVBQUksS0FBSixpQkFBMEI7QUFDeEI7QUFFRjs7QUFBQTtBQUVGQzs7O3lDQUFxQjtBQUNuQjtBQUVGQzs7OzJDQUF1QjtBQUNyQixVQUFJLEtBQUosaUJBQTBCO0FBQ3hCO0FBRUY7O0FBQUE7QUFHRkM7Ozs2QkFBUztBQUNQO0FBekNvRDs7OztFQUEzQkMsZ0IiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L25leHQtc2VydmVyL2xpYi9zaWRlLWVmZmVjdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCdcblxuY29uc3QgaXNTZXJ2ZXIgPSB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJ1xuXG50eXBlIFN0YXRlID0gSlNYLkVsZW1lbnRbXSB8IHVuZGVmaW5lZFxuXG50eXBlIFNpZGVFZmZlY3RQcm9wcyA9IHtcbiAgcmVkdWNlQ29tcG9uZW50c1RvU3RhdGU6IDxUPihcbiAgICBjb21wb25lbnRzOiBBcnJheTxSZWFjdC5SZWFjdEVsZW1lbnQ8YW55Pj4sXG4gICAgcHJvcHM6IFRcbiAgKSA9PiBTdGF0ZVxuICBoYW5kbGVTdGF0ZUNoYW5nZT86IChzdGF0ZTogU3RhdGUpID0+IHZvaWRcbiAgaGVhZE1hbmFnZXI6IGFueVxuICBpbkFtcE1vZGU/OiBib29sZWFuXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgQ29tcG9uZW50PFNpZGVFZmZlY3RQcm9wcz4ge1xuICBwcml2YXRlIF9oYXNIZWFkTWFuYWdlcjogYm9vbGVhblxuXG4gIGVtaXRDaGFuZ2UgPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKHRoaXMuX2hhc0hlYWRNYW5hZ2VyKSB7XG4gICAgICB0aGlzLnByb3BzLmhlYWRNYW5hZ2VyLnVwZGF0ZUhlYWQoXG4gICAgICAgIHRoaXMucHJvcHMucmVkdWNlQ29tcG9uZW50c1RvU3RhdGUoXG4gICAgICAgICAgWy4uLnRoaXMucHJvcHMuaGVhZE1hbmFnZXIubW91bnRlZEluc3RhbmNlc10sXG4gICAgICAgICAgdGhpcy5wcm9wc1xuICAgICAgICApXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKVxuICAgIHRoaXMuX2hhc0hlYWRNYW5hZ2VyID1cbiAgICAgIHRoaXMucHJvcHMuaGVhZE1hbmFnZXIgJiYgdGhpcy5wcm9wcy5oZWFkTWFuYWdlci5tb3VudGVkSW5zdGFuY2VzXG5cbiAgICBpZiAoaXNTZXJ2ZXIgJiYgdGhpcy5faGFzSGVhZE1hbmFnZXIpIHtcbiAgICAgIHRoaXMucHJvcHMuaGVhZE1hbmFnZXIubW91bnRlZEluc3RhbmNlcy5hZGQodGhpcylcbiAgICAgIHRoaXMuZW1pdENoYW5nZSgpXG4gICAgfVxuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGlmICh0aGlzLl9oYXNIZWFkTWFuYWdlcikge1xuICAgICAgdGhpcy5wcm9wcy5oZWFkTWFuYWdlci5tb3VudGVkSW5zdGFuY2VzLmFkZCh0aGlzKVxuICAgIH1cbiAgICB0aGlzLmVtaXRDaGFuZ2UoKVxuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICB0aGlzLmVtaXRDaGFuZ2UoKVxuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGlmICh0aGlzLl9oYXNIZWFkTWFuYWdlcikge1xuICAgICAgdGhpcy5wcm9wcy5oZWFkTWFuYWdlci5tb3VudGVkSW5zdGFuY2VzLmRlbGV0ZSh0aGlzKVxuICAgIH1cbiAgICB0aGlzLmVtaXRDaGFuZ2UoKVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/next-server/lib/side-effect.js\n"); - -/***/ }), - -/***/ "./node_modules/next/dist/next-server/lib/utils.js": -/*!*********************************************************!*\ - !*** ./node_modules/next/dist/next-server/lib/utils.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nvar _regeneratorRuntime = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/regenerator */ \"./node_modules/next/node_modules/@babel/runtime/regenerator/index.js\");\n\nvar _asyncToGenerator = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/asyncToGenerator */ \"./node_modules/next/node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n\nexports.__esModule = true;\nexports.execOnce = execOnce;\nexports.getLocationOrigin = getLocationOrigin;\nexports.getURL = getURL;\nexports.getDisplayName = getDisplayName;\nexports.isResSent = isResSent;\nexports.loadGetInitialProps = loadGetInitialProps;\nexports.formatWithValidation = formatWithValidation;\nexports.ST = exports.SP = exports.urlObjectKeys = void 0;\n\nvar _formatUrl = __webpack_require__(/*! ./router/utils/format-url */ \"./node_modules/next/dist/next-server/lib/router/utils/format-url.js\");\n/**\n* Utils\n*/\n\n\nfunction execOnce(fn) {\n var used = false;\n var result;\n return function () {\n if (!used) {\n used = true;\n result = fn.apply(void 0, arguments);\n }\n\n return result;\n };\n}\n\nfunction getLocationOrigin() {\n var _window$location = window.location,\n protocol = _window$location.protocol,\n hostname = _window$location.hostname,\n port = _window$location.port;\n return \"\".concat(protocol, \"//\").concat(hostname).concat(port ? ':' + port : '');\n}\n\nfunction getURL() {\n var href = window.location.href;\n var origin = getLocationOrigin();\n return href.substring(origin.length);\n}\n\nfunction getDisplayName(Component) {\n return typeof Component === 'string' ? Component : Component.displayName || Component.name || 'Unknown';\n}\n\nfunction isResSent(res) {\n return res.finished || res.headersSent;\n}\n\nfunction loadGetInitialProps(_x, _x2) {\n return _loadGetInitialProps.apply(this, arguments);\n}\n\nfunction _loadGetInitialProps() {\n _loadGetInitialProps = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(App, ctx) {\n var _App$prototype, message, res, props, _message;\n\n return _regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n if (false) {}\n\n if (!((_App$prototype = App.prototype) != null && _App$prototype.getInitialProps)) {\n _context.next = 4;\n break;\n }\n\n message = \"\\\"\".concat(getDisplayName(App), \".getInitialProps()\\\" is defined as an instance method - visit https://nextjs.org/docs/messages/get-initial-props-as-an-instance-method for more information.\");\n throw new Error(message);\n\n case 4:\n // when called from _app `ctx` is nested in `ctx`\n res = ctx.res || ctx.ctx && ctx.ctx.res;\n\n if (App.getInitialProps) {\n _context.next = 12;\n break;\n }\n\n if (!(ctx.ctx && ctx.Component)) {\n _context.next = 11;\n break;\n }\n\n _context.next = 9;\n return loadGetInitialProps(ctx.Component, ctx.ctx);\n\n case 9:\n _context.t0 = _context.sent;\n return _context.abrupt(\"return\", {\n pageProps: _context.t0\n });\n\n case 11:\n return _context.abrupt(\"return\", {});\n\n case 12:\n _context.next = 14;\n return App.getInitialProps(ctx);\n\n case 14:\n props = _context.sent;\n\n if (!(res && isResSent(res))) {\n _context.next = 17;\n break;\n }\n\n return _context.abrupt(\"return\", props);\n\n case 17:\n if (props) {\n _context.next = 20;\n break;\n }\n\n _message = \"\\\"\".concat(getDisplayName(App), \".getInitialProps()\\\" should resolve to an object. But found \\\"\").concat(props, \"\\\" instead.\");\n throw new Error(_message);\n\n case 20:\n if (true) {\n if (Object.keys(props).length === 0 && !ctx.ctx) {\n console.warn(\"\".concat(getDisplayName(App), \" returned an empty object from `getInitialProps`. This de-optimizes and prevents automatic static optimization. https://nextjs.org/docs/messages/empty-object-getInitialProps\"));\n }\n }\n\n return _context.abrupt(\"return\", props);\n\n case 22:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee);\n }));\n return _loadGetInitialProps.apply(this, arguments);\n}\n\nvar urlObjectKeys = ['auth', 'hash', 'host', 'hostname', 'href', 'path', 'pathname', 'port', 'protocol', 'query', 'search', 'slashes'];\nexports.urlObjectKeys = urlObjectKeys;\n\nfunction formatWithValidation(url) {\n if (true) {\n if (url !== null && typeof url === 'object') {\n Object.keys(url).forEach(function (key) {\n if (urlObjectKeys.indexOf(key) === -1) {\n console.warn(\"Unknown key passed via urlObject into url.format: \".concat(key));\n }\n });\n }\n }\n\n return (0, _formatUrl.formatUrl)(url);\n}\n\nvar SP = typeof performance !== 'undefined';\nexports.SP = SP;\nvar ST = SP && typeof performance.mark === 'function' && typeof performance.measure === 'function';\nexports.ST = ST;\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../compiled/webpack/module.js */ \"./node_modules/next/dist/compiled/webpack/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uLy4uL25leHQtc2VydmVyL2xpYi91dGlscy50cz9iNmY5Il0sIm5hbWVzIjpbInVzZWQiLCJyZXN1bHQiLCJmbiIsIndpbmRvdyIsInByb3RvY29sIiwiaG9zdG5hbWUiLCJwb3J0Iiwib3JpZ2luIiwiZ2V0TG9jYXRpb25PcmlnaW4iLCJocmVmIiwiQ29tcG9uZW50IiwicmVzIiwiQXBwIiwibWVzc2FnZSIsImdldERpc3BsYXlOYW1lIiwiY3R4IiwibG9hZEdldEluaXRpYWxQcm9wcyIsInBhZ2VQcm9wcyIsInByb3BzIiwiaXNSZXNTZW50IiwiT2JqZWN0IiwiY29uc29sZSIsInVybE9iamVjdEtleXMiLCJ1cmwiLCJrZXkiLCJTUCIsIlNUIiwicGVyZm9ybWFuY2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFJQTtBQXlSQTtBQUNBO0FBQ0E7OztBQUNPLHNCQUVGO0FBQ0gsTUFBSUEsSUFBSSxHQUFSO0FBQ0E7QUFFQSxTQUFRLFlBQW9CO0FBQzFCLFFBQUksQ0FBSixNQUFXO0FBQ1RBLFVBQUksR0FBSkE7QUFDQUMsWUFBTSxHQUFHQyxFQUFURCxNQUFTQyxtQkFBVEQ7QUFFRjs7QUFBQTtBQUxGO0FBU0s7O0FBQUEsNkJBQTZCO0FBQUEseUJBQ0dFLE1BQU0sQ0FBM0MsUUFEa0M7QUFBQSxNQUM1QixRQUQ0QixvQkFDNUIsUUFENEI7QUFBQSxNQUM1QixRQUQ0QixvQkFDNUIsUUFENEI7QUFBQSxNQUM1QixJQUQ0QixvQkFDNUIsSUFENEI7QUFFbEMsbUJBQVVDLFFBQVYsZUFBdUJDLFFBQXZCLFNBQWtDQyxJQUFJLEdBQUcsTUFBSCxPQUF0QztBQUdLOztBQUFBLGtCQUFrQjtBQUFBLE1BQ2pCLElBRGlCLEdBQ05ILE1BQU0sQ0FBdkIsUUFEdUIsQ0FDakIsSUFEaUI7QUFFdkIsTUFBTUksTUFBTSxHQUFHQyxpQkFBZjtBQUNBLFNBQU9DLElBQUksQ0FBSkEsVUFBZUYsTUFBTSxDQUE1QixNQUFPRSxDQUFQO0FBR0s7O0FBQUEsbUNBQXdEO0FBQzdELFNBQU8sNENBRUhDLFNBQVMsQ0FBVEEsZUFBeUJBLFNBQVMsQ0FBbENBLFFBRko7QUFLSzs7QUFBQSx3QkFBd0M7QUFDN0MsU0FBT0MsR0FBRyxDQUFIQSxZQUFnQkEsR0FBRyxDQUExQjtBQUdLOztTQUFBLG1COzs7OztrRkFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUEsa0JBTUgsa0JBQUlDLEdBQUcsQ0FBUCxzQkFBSUEsZUFBSixlQU5HO0FBQUE7QUFBQTtBQUFBOztBQU9LQyxtQkFQTCxlQU9tQkMsY0FBYyxDQUFsQyxHQUFrQyxDQVBqQztBQUFBLGtCQVVLLFVBQU4sT0FBTSxDQVZMOztBQUFBO0FBYUw7QUFDTUgsZUFkRCxHQWNPSSxHQUFHLENBQUhBLE9BQVlBLEdBQUcsQ0FBSEEsT0FBV0EsR0FBRyxDQUFIQSxJQUFuQyxHQWRLOztBQUFBLGdCQWdCQUgsR0FBRyxDQUFSLGVBaEJLO0FBQUE7QUFBQTtBQUFBOztBQUFBLGtCQWlCQ0csR0FBRyxDQUFIQSxPQUFXQSxHQUFHLENBQWxCLFNBakJHO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsbUJBb0JrQkMsbUJBQW1CLENBQUNELEdBQUcsQ0FBSixXQUFnQkEsR0FBRyxDQUR6RCxHQUNzQyxDQXBCckM7O0FBQUE7QUFBQTtBQUFBO0FBb0JDRSx1QkFwQkQ7QUFBQTs7QUFBQTtBQUFBLDZDQXVCSCxFQXZCRzs7QUFBQTtBQUFBO0FBQUEsbUJBMEJlTCxHQUFHLENBQUhBLGdCQUFwQixHQUFvQkEsQ0ExQmY7O0FBQUE7QUEwQkNNLGlCQTFCRDs7QUFBQSxrQkE0QkRQLEdBQUcsSUFBSVEsU0FBUyxDQUFwQixHQUFvQixDQTVCZjtBQUFBO0FBQUE7QUFBQTs7QUFBQSw2Q0E2QkgsS0E3Qkc7O0FBQUE7QUFBQSxnQkFnQ0wsS0FoQ0s7QUFBQTtBQUFBO0FBQUE7O0FBaUNHTixvQkFqQ0gsZUFpQ2lCQyxjQUFjLEtBakMvQiwyRUFpQ0gsS0FqQ0c7QUFBQSxrQkFvQ0csVUFBTixRQUFNLENBcENIOztBQUFBO0FBdUNMLHNCQUEyQztBQUN6QyxrQkFBSU0sTUFBTSxDQUFOQSw0QkFBbUMsQ0FBQ0wsR0FBRyxDQUEzQyxLQUFpRDtBQUMvQ00sdUJBQU8sQ0FBUEEsZUFDS1AsY0FBYyxDQURuQk8sR0FDbUIsQ0FEbkJBO0FBTUg7QUFFRDs7QUFqREssNkNBaURMLEtBakRLOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEc7Ozs7QUFvREEsSUFBTUMsYUFBYSxHQUFHLHdHQUF0QixTQUFzQixDQUF0Qjs7O0FBZUEsbUNBQXNEO0FBQzNELFlBQTRDO0FBQzFDLFFBQUlDLEdBQUcsS0FBSEEsUUFBZ0IsZUFBcEIsVUFBNkM7QUFDM0NILFlBQU0sQ0FBTkEsa0JBQTBCSSxhQUFELEVBQVM7QUFDaEMsWUFBSUYsYUFBYSxDQUFiQSxpQkFBK0IsQ0FBbkMsR0FBdUM7QUFDckNELGlCQUFPLENBQVBBO0FBSUg7QUFOREQ7QUFRSDtBQUVEOztBQUFBLFNBQU8sMEJBQVAsR0FBTyxDQUFQO0FBR0s7O0FBQUEsSUFBTUssRUFBRSxHQUFHLHVCQUFYOztBQUNBLElBQU1DLEVBQUUsR0FDYkQsRUFBRSxJQUNGLE9BQU9FLFdBQVcsQ0FBbEIsU0FEQUYsY0FFQSxPQUFPRSxXQUFXLENBQWxCLFlBSEsiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L25leHQtc2VydmVyL2xpYi91dGlscy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluY29taW5nTWVzc2FnZSwgU2VydmVyUmVzcG9uc2UgfSBmcm9tICdodHRwJ1xuaW1wb3J0IHsgUGFyc2VkVXJsUXVlcnkgfSBmcm9tICdxdWVyeXN0cmluZydcbmltcG9ydCB7IENvbXBvbmVudFR5cGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFVybE9iamVjdCB9IGZyb20gJ3VybCdcbmltcG9ydCB7IGZvcm1hdFVybCB9IGZyb20gJy4vcm91dGVyL3V0aWxzL2Zvcm1hdC11cmwnXG5pbXBvcnQgeyBOZXh0Um91dGVyIH0gZnJvbSAnLi9yb3V0ZXIvcm91dGVyJ1xuaW1wb3J0IHsgRW52IH0gZnJvbSAnQG5leHQvZW52J1xuaW1wb3J0IHsgQnVpbGRNYW5pZmVzdCB9IGZyb20gJy4uL3NlcnZlci9nZXQtcGFnZS1maWxlcydcbmltcG9ydCB7IERvbWFpbkxvY2FsZXMgfSBmcm9tICcuLi9zZXJ2ZXIvY29uZmlnJ1xuaW1wb3J0IHsgUHJldmlld0RhdGEgfSBmcm9tICduZXh0L3R5cGVzJ1xuXG4vKipcbiAqIFR5cGVzIHVzZWQgYnkgYm90aCBuZXh0IGFuZCBuZXh0LXNlcnZlclxuICovXG5cbmV4cG9ydCB0eXBlIE5leHRDb21wb25lbnRUeXBlPFxuICBDIGV4dGVuZHMgQmFzZUNvbnRleHQgPSBOZXh0UGFnZUNvbnRleHQsXG4gIElQID0ge30sXG4gIFAgPSB7fVxuPiA9IENvbXBvbmVudFR5cGU8UD4gJiB7XG4gIC8qKlxuICAgKiBVc2VkIGZvciBpbml0aWFsIHBhZ2UgbG9hZCBkYXRhIHBvcHVsYXRpb24uIERhdGEgcmV0dXJuZWQgZnJvbSBgZ2V0SW5pdGlhbFByb3BzYCBpcyBzZXJpYWxpemVkIHdoZW4gc2VydmVyIHJlbmRlcmVkLlxuICAgKiBNYWtlIHN1cmUgdG8gcmV0dXJuIHBsYWluIGBPYmplY3RgIHdpdGhvdXQgdXNpbmcgYERhdGVgLCBgTWFwYCwgYFNldGAuXG4gICAqIEBwYXJhbSBjdHggQ29udGV4dCBvZiBgcGFnZWBcbiAgICovXG4gIGdldEluaXRpYWxQcm9wcz8oY29udGV4dDogQyk6IElQIHwgUHJvbWlzZTxJUD5cbn1cblxuZXhwb3J0IHR5cGUgRG9jdW1lbnRUeXBlID0gTmV4dENvbXBvbmVudFR5cGU8XG4gIERvY3VtZW50Q29udGV4dCxcbiAgRG9jdW1lbnRJbml0aWFsUHJvcHMsXG4gIERvY3VtZW50UHJvcHNcbj4gJiB7XG4gIHJlbmRlckRvY3VtZW50KFxuICAgIERvY3VtZW50OiBEb2N1bWVudFR5cGUsXG4gICAgcHJvcHM6IERvY3VtZW50UHJvcHNcbiAgKTogUmVhY3QuUmVhY3RFbGVtZW50XG59XG5cbmV4cG9ydCB0eXBlIEFwcFR5cGUgPSBOZXh0Q29tcG9uZW50VHlwZTxcbiAgQXBwQ29udGV4dFR5cGUsXG4gIEFwcEluaXRpYWxQcm9wcyxcbiAgQXBwUHJvcHNUeXBlXG4+XG5cbmV4cG9ydCB0eXBlIEFwcFRyZWVUeXBlID0gQ29tcG9uZW50VHlwZTxcbiAgQXBwSW5pdGlhbFByb3BzICYgeyBbbmFtZTogc3RyaW5nXTogYW55IH1cbj5cblxuLyoqXG4gKiBXZWIgdml0YWxzIHByb3ZpZGVkIHRvIF9hcHAucmVwb3J0V2ViVml0YWxzIGJ5IENvcmUgV2ViIFZpdGFscyBwbHVnaW4gZGV2ZWxvcGVkIGJ5IEdvb2dsZSBDaHJvbWUgdGVhbS5cbiAqIGh0dHBzOi8vbmV4dGpzLm9yZy9ibG9nL25leHQtOS00I2ludGVncmF0ZWQtd2ViLXZpdGFscy1yZXBvcnRpbmdcbiAqL1xuZXhwb3J0IHR5cGUgTmV4dFdlYlZpdGFsc01ldHJpYyA9IHtcbiAgaWQ6IHN0cmluZ1xuICBsYWJlbDogc3RyaW5nXG4gIG5hbWU6IHN0cmluZ1xuICBzdGFydFRpbWU6IG51bWJlclxuICB2YWx1ZTogbnVtYmVyXG59XG5cbmV4cG9ydCB0eXBlIEVuaGFuY2VyPEM+ID0gKENvbXBvbmVudDogQykgPT4gQ1xuXG5leHBvcnQgdHlwZSBDb21wb25lbnRzRW5oYW5jZXIgPVxuICB8IHtcbiAgICAgIGVuaGFuY2VBcHA/OiBFbmhhbmNlcjxBcHBUeXBlPlxuICAgICAgZW5oYW5jZUNvbXBvbmVudD86IEVuaGFuY2VyPE5leHRDb21wb25lbnRUeXBlPlxuICAgIH1cbiAgfCBFbmhhbmNlcjxOZXh0Q29tcG9uZW50VHlwZT5cblxuZXhwb3J0IHR5cGUgUmVuZGVyUGFnZVJlc3VsdCA9IHtcbiAgaHRtbDogc3RyaW5nXG4gIGhlYWQ/OiBBcnJheTxKU1guRWxlbWVudCB8IG51bGw+XG59XG5cbmV4cG9ydCB0eXBlIFJlbmRlclBhZ2UgPSAoXG4gIG9wdGlvbnM/OiBDb21wb25lbnRzRW5oYW5jZXJcbikgPT4gUmVuZGVyUGFnZVJlc3VsdCB8IFByb21pc2U8UmVuZGVyUGFnZVJlc3VsdD5cblxuZXhwb3J0IHR5cGUgQmFzZUNvbnRleHQgPSB7XG4gIHJlcz86IFNlcnZlclJlc3BvbnNlXG4gIFtrOiBzdHJpbmddOiBhbnlcbn1cblxuZXhwb3J0IHR5cGUgTkVYVF9EQVRBID0ge1xuICBwcm9wczogUmVjb3JkPHN0cmluZywgYW55PlxuICBwYWdlOiBzdHJpbmdcbiAgcXVlcnk6IFBhcnNlZFVybFF1ZXJ5XG4gIGJ1aWxkSWQ6IHN0cmluZ1xuICBhc3NldFByZWZpeD86IHN0cmluZ1xuICBydW50aW1lQ29uZmlnPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfVxuICBuZXh0RXhwb3J0PzogYm9vbGVhblxuICBhdXRvRXhwb3J0PzogYm9vbGVhblxuICBpc0ZhbGxiYWNrPzogYm9vbGVhblxuICBkeW5hbWljSWRzPzogKHN0cmluZyB8IG51bWJlcilbXVxuICBlcnI/OiBFcnJvciAmIHsgc3RhdHVzQ29kZT86IG51bWJlciB9XG4gIGdzcD86IGJvb2xlYW5cbiAgZ3NzcD86IGJvb2xlYW5cbiAgY3VzdG9tU2VydmVyPzogYm9vbGVhblxuICBnaXA/OiBib29sZWFuXG4gIGFwcEdpcD86IGJvb2xlYW5cbiAgbG9jYWxlPzogc3RyaW5nXG4gIGxvY2FsZXM/OiBzdHJpbmdbXVxuICBkZWZhdWx0TG9jYWxlPzogc3RyaW5nXG4gIGRvbWFpbkxvY2FsZXM/OiBEb21haW5Mb2NhbGVzXG4gIHNjcmlwdExvYWRlcj86IGFueVtdXG4gIGlzUHJldmlldz86IGJvb2xlYW5cbn1cblxuLyoqXG4gKiBgTmV4dGAgY29udGV4dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5leHRQYWdlQ29udGV4dCB7XG4gIC8qKlxuICAgKiBFcnJvciBvYmplY3QgaWYgZW5jb3VudGVyZWQgZHVyaW5nIHJlbmRlcmluZ1xuICAgKi9cbiAgZXJyPzogKEVycm9yICYgeyBzdGF0dXNDb2RlPzogbnVtYmVyIH0pIHwgbnVsbFxuICAvKipcbiAgICogYEhUVFBgIHJlcXVlc3Qgb2JqZWN0LlxuICAgKi9cbiAgcmVxPzogSW5jb21pbmdNZXNzYWdlXG4gIC8qKlxuICAgKiBgSFRUUGAgcmVzcG9uc2Ugb2JqZWN0LlxuICAgKi9cbiAgcmVzPzogU2VydmVyUmVzcG9uc2VcbiAgLyoqXG4gICAqIFBhdGggc2VjdGlvbiBvZiBgVVJMYC5cbiAgICovXG4gIHBhdGhuYW1lOiBzdHJpbmdcbiAgLyoqXG4gICAqIFF1ZXJ5IHN0cmluZyBzZWN0aW9uIG9mIGBVUkxgIHBhcnNlZCBhcyBhbiBvYmplY3QuXG4gICAqL1xuICBxdWVyeTogUGFyc2VkVXJsUXVlcnlcbiAgLyoqXG4gICAqIGBTdHJpbmdgIG9mIHRoZSBhY3R1YWwgcGF0aCBpbmNsdWRpbmcgcXVlcnkuXG4gICAqL1xuICBhc1BhdGg/OiBzdHJpbmdcbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIGxvY2FsZVxuICAgKi9cbiAgbG9jYWxlPzogc3RyaW5nXG4gIC8qKlxuICAgKiBBbGwgY29uZmlndXJlZCBsb2NhbGVzXG4gICAqL1xuICBsb2NhbGVzPzogc3RyaW5nW11cbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmVkIGRlZmF1bHQgbG9jYWxlXG4gICAqL1xuICBkZWZhdWx0TG9jYWxlPzogc3RyaW5nXG4gIC8qKlxuICAgKiBgQ29tcG9uZW50YCB0aGUgdHJlZSBvZiB0aGUgQXBwIHRvIHVzZSBpZiBuZWVkaW5nIHRvIHJlbmRlciBzZXBhcmF0ZWx5XG4gICAqL1xuICBBcHBUcmVlOiBBcHBUcmVlVHlwZVxufVxuXG5leHBvcnQgdHlwZSBBcHBDb250ZXh0VHlwZTxSIGV4dGVuZHMgTmV4dFJvdXRlciA9IE5leHRSb3V0ZXI+ID0ge1xuICBDb21wb25lbnQ6IE5leHRDb21wb25lbnRUeXBlPE5leHRQYWdlQ29udGV4dD5cbiAgQXBwVHJlZTogQXBwVHJlZVR5cGVcbiAgY3R4OiBOZXh0UGFnZUNvbnRleHRcbiAgcm91dGVyOiBSXG59XG5cbmV4cG9ydCB0eXBlIEFwcEluaXRpYWxQcm9wcyA9IHtcbiAgcGFnZVByb3BzOiBhbnlcbn1cblxuZXhwb3J0IHR5cGUgQXBwUHJvcHNUeXBlPFxuICBSIGV4dGVuZHMgTmV4dFJvdXRlciA9IE5leHRSb3V0ZXIsXG4gIFAgPSB7fVxuPiA9IEFwcEluaXRpYWxQcm9wcyAmIHtcbiAgQ29tcG9uZW50OiBOZXh0Q29tcG9uZW50VHlwZTxOZXh0UGFnZUNvbnRleHQsIGFueSwgUD5cbiAgcm91dGVyOiBSXG4gIF9fTl9TU0c/OiBib29sZWFuXG4gIF9fTl9TU1A/OiBib29sZWFuXG59XG5cbmV4cG9ydCB0eXBlIERvY3VtZW50Q29udGV4dCA9IE5leHRQYWdlQ29udGV4dCAmIHtcbiAgcmVuZGVyUGFnZTogUmVuZGVyUGFnZVxufVxuXG5leHBvcnQgdHlwZSBEb2N1bWVudEluaXRpYWxQcm9wcyA9IFJlbmRlclBhZ2VSZXN1bHQgJiB7XG4gIHN0eWxlcz86IFJlYWN0LlJlYWN0RWxlbWVudFtdIHwgUmVhY3QuUmVhY3RGcmFnbWVudFxufVxuXG5leHBvcnQgdHlwZSBEb2N1bWVudFByb3BzID0gRG9jdW1lbnRJbml0aWFsUHJvcHMgJiB7XG4gIF9fTkVYVF9EQVRBX186IE5FWFRfREFUQVxuICBkYW5nZXJvdXNBc1BhdGg6IHN0cmluZ1xuICBkb2NDb21wb25lbnRzUmVuZGVyZWQ6IHtcbiAgICBIdG1sPzogYm9vbGVhblxuICAgIE1haW4/OiBib29sZWFuXG4gICAgSGVhZD86IGJvb2xlYW5cbiAgICBOZXh0U2NyaXB0PzogYm9vbGVhblxuICB9XG4gIGJ1aWxkTWFuaWZlc3Q6IEJ1aWxkTWFuaWZlc3RcbiAgYW1wUGF0aDogc3RyaW5nXG4gIGluQW1wTW9kZTogYm9vbGVhblxuICBoeWJyaWRBbXA6IGJvb2xlYW5cbiAgaXNEZXZlbG9wbWVudDogYm9vbGVhblxuICBkeW5hbWljSW1wb3J0czogc3RyaW5nW11cbiAgYXNzZXRQcmVmaXg/OiBzdHJpbmdcbiAgY2Fub25pY2FsQmFzZTogc3RyaW5nXG4gIGhlYWRUYWdzOiBhbnlbXVxuICB1bnN0YWJsZV9ydW50aW1lSlM/OiBmYWxzZVxuICB1bnN0YWJsZV9Kc1ByZWxvYWQ/OiBmYWxzZVxuICBkZXZPbmx5Q2FjaGVCdXN0ZXJRdWVyeVN0cmluZzogc3RyaW5nXG4gIHNjcmlwdExvYWRlcjogeyBhZnRlckludGVyYWN0aXZlPzogc3RyaW5nW107IGJlZm9yZUludGVyYWN0aXZlPzogYW55W10gfVxuICBsb2NhbGU/OiBzdHJpbmdcbiAgZGlzYWJsZU9wdGltaXplZExvYWRpbmc/OiBib29sZWFuXG59XG5cbi8qKlxuICogTmV4dCBgQVBJYCByb3V0ZSByZXF1ZXN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dEFwaVJlcXVlc3QgZXh0ZW5kcyBJbmNvbWluZ01lc3NhZ2Uge1xuICAvKipcbiAgICogT2JqZWN0IG9mIGBxdWVyeWAgdmFsdWVzIGZyb20gdXJsXG4gICAqL1xuICBxdWVyeToge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdXG4gIH1cbiAgLyoqXG4gICAqIE9iamVjdCBvZiBgY29va2llc2AgZnJvbSBoZWFkZXJcbiAgICovXG4gIGNvb2tpZXM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmdcbiAgfVxuXG4gIGJvZHk6IGFueVxuXG4gIGVudjogRW52XG5cbiAgcHJldmlldz86IGJvb2xlYW5cbiAgLyoqXG4gICAqIFByZXZpZXcgZGF0YSBzZXQgb24gdGhlIHJlcXVlc3QsIGlmIGFueVxuICAgKiAqL1xuICBwcmV2aWV3RGF0YT86IFByZXZpZXdEYXRhXG59XG5cbi8qKlxuICogU2VuZCBib2R5IG9mIHJlc3BvbnNlXG4gKi9cbnR5cGUgU2VuZDxUPiA9IChib2R5OiBUKSA9PiB2b2lkXG5cbi8qKlxuICogTmV4dCBgQVBJYCByb3V0ZSByZXNwb25zZVxuICovXG5leHBvcnQgdHlwZSBOZXh0QXBpUmVzcG9uc2U8VCA9IGFueT4gPSBTZXJ2ZXJSZXNwb25zZSAmIHtcbiAgLyoqXG4gICAqIFNlbmQgZGF0YSBgYW55YCBkYXRhIGluIHJlc3BvbnNlXG4gICAqL1xuICBzZW5kOiBTZW5kPFQ+XG4gIC8qKlxuICAgKiBTZW5kIGRhdGEgYGpzb25gIGRhdGEgaW4gcmVzcG9uc2VcbiAgICovXG4gIGpzb246IFNlbmQ8VD5cbiAgc3RhdHVzOiAoc3RhdHVzQ29kZTogbnVtYmVyKSA9PiBOZXh0QXBpUmVzcG9uc2U8VD5cbiAgcmVkaXJlY3QodXJsOiBzdHJpbmcpOiBOZXh0QXBpUmVzcG9uc2U8VD5cbiAgcmVkaXJlY3Qoc3RhdHVzOiBudW1iZXIsIHVybDogc3RyaW5nKTogTmV4dEFwaVJlc3BvbnNlPFQ+XG5cbiAgLyoqXG4gICAqIFNldCBwcmV2aWV3IGRhdGEgZm9yIE5leHQuanMnIHByZXJlbmRlciBtb2RlXG4gICAqL1xuICBzZXRQcmV2aWV3RGF0YTogKFxuICAgIGRhdGE6IG9iamVjdCB8IHN0cmluZyxcbiAgICBvcHRpb25zPzoge1xuICAgICAgLyoqXG4gICAgICAgKiBTcGVjaWZpZXMgdGhlIG51bWJlciAoaW4gc2Vjb25kcykgZm9yIHRoZSBwcmV2aWV3IHNlc3Npb24gdG8gbGFzdCBmb3IuXG4gICAgICAgKiBUaGUgZ2l2ZW4gbnVtYmVyIHdpbGwgYmUgY29udmVydGVkIHRvIGFuIGludGVnZXIgYnkgcm91bmRpbmcgZG93bi5cbiAgICAgICAqIEJ5IGRlZmF1bHQsIG5vIG1heGltdW0gYWdlIGlzIHNldCBhbmQgdGhlIHByZXZpZXcgc2Vzc2lvbiBmaW5pc2hlc1xuICAgICAgICogd2hlbiB0aGUgY2xpZW50IHNodXRzIGRvd24gKGJyb3dzZXIgaXMgY2xvc2VkKS5cbiAgICAgICAqL1xuICAgICAgbWF4QWdlPzogbnVtYmVyXG4gICAgfVxuICApID0+IE5leHRBcGlSZXNwb25zZTxUPlxuICBjbGVhclByZXZpZXdEYXRhOiAoKSA9PiBOZXh0QXBpUmVzcG9uc2U8VD5cbn1cblxuLyoqXG4gKiBOZXh0IGBBUElgIHJvdXRlIGhhbmRsZXJcbiAqL1xuZXhwb3J0IHR5cGUgTmV4dEFwaUhhbmRsZXI8VCA9IGFueT4gPSAoXG4gIHJlcTogTmV4dEFwaVJlcXVlc3QsXG4gIHJlczogTmV4dEFwaVJlc3BvbnNlPFQ+XG4pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+XG5cbi8qKlxuICogVXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4ZWNPbmNlPFQgZXh0ZW5kcyAoLi4uYXJnczogYW55W10pID0+IFJldHVyblR5cGU8VD4+KFxuICBmbjogVFxuKTogVCB7XG4gIGxldCB1c2VkID0gZmFsc2VcbiAgbGV0IHJlc3VsdDogUmV0dXJuVHlwZTxUPlxuXG4gIHJldHVybiAoKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgaWYgKCF1c2VkKSB7XG4gICAgICB1c2VkID0gdHJ1ZVxuICAgICAgcmVzdWx0ID0gZm4oLi4uYXJncylcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9KSBhcyBUXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2NhdGlvbk9yaWdpbigpIHtcbiAgY29uc3QgeyBwcm90b2NvbCwgaG9zdG5hbWUsIHBvcnQgfSA9IHdpbmRvdy5sb2NhdGlvblxuICByZXR1cm4gYCR7cHJvdG9jb2x9Ly8ke2hvc3RuYW1lfSR7cG9ydCA/ICc6JyArIHBvcnQgOiAnJ31gXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRVUkwoKSB7XG4gIGNvbnN0IHsgaHJlZiB9ID0gd2luZG93LmxvY2F0aW9uXG4gIGNvbnN0IG9yaWdpbiA9IGdldExvY2F0aW9uT3JpZ2luKClcbiAgcmV0dXJuIGhyZWYuc3Vic3RyaW5nKG9yaWdpbi5sZW5ndGgpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXNwbGF5TmFtZTxQPihDb21wb25lbnQ6IENvbXBvbmVudFR5cGU8UD4pIHtcbiAgcmV0dXJuIHR5cGVvZiBDb21wb25lbnQgPT09ICdzdHJpbmcnXG4gICAgPyBDb21wb25lbnRcbiAgICA6IENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCAnVW5rbm93bidcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVzU2VudChyZXM6IFNlcnZlclJlc3BvbnNlKSB7XG4gIHJldHVybiByZXMuZmluaXNoZWQgfHwgcmVzLmhlYWRlcnNTZW50XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkR2V0SW5pdGlhbFByb3BzPFxuICBDIGV4dGVuZHMgQmFzZUNvbnRleHQsXG4gIElQID0ge30sXG4gIFAgPSB7fVxuPihBcHA6IE5leHRDb21wb25lbnRUeXBlPEMsIElQLCBQPiwgY3R4OiBDKTogUHJvbWlzZTxJUD4ge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChBcHAucHJvdG90eXBlPy5nZXRJbml0aWFsUHJvcHMpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgXCIke2dldERpc3BsYXlOYW1lKFxuICAgICAgICBBcHBcbiAgICAgICl9LmdldEluaXRpYWxQcm9wcygpXCIgaXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBtZXRob2QgLSB2aXNpdCBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9nZXQtaW5pdGlhbC1wcm9wcy1hcy1hbi1pbnN0YW5jZS1tZXRob2QgZm9yIG1vcmUgaW5mb3JtYXRpb24uYFxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpXG4gICAgfVxuICB9XG4gIC8vIHdoZW4gY2FsbGVkIGZyb20gX2FwcCBgY3R4YCBpcyBuZXN0ZWQgaW4gYGN0eGBcbiAgY29uc3QgcmVzID0gY3R4LnJlcyB8fCAoY3R4LmN0eCAmJiBjdHguY3R4LnJlcylcblxuICBpZiAoIUFwcC5nZXRJbml0aWFsUHJvcHMpIHtcbiAgICBpZiAoY3R4LmN0eCAmJiBjdHguQ29tcG9uZW50KSB7XG4gICAgICAvLyBAdHMtaWdub3JlIHBhZ2VQcm9wcyBkZWZhdWx0XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYWdlUHJvcHM6IGF3YWl0IGxvYWRHZXRJbml0aWFsUHJvcHMoY3R4LkNvbXBvbmVudCwgY3R4LmN0eCksXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7fSBhcyBJUFxuICB9XG5cbiAgY29uc3QgcHJvcHMgPSBhd2FpdCBBcHAuZ2V0SW5pdGlhbFByb3BzKGN0eClcblxuICBpZiAocmVzICYmIGlzUmVzU2VudChyZXMpKSB7XG4gICAgcmV0dXJuIHByb3BzXG4gIH1cblxuICBpZiAoIXByb3BzKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGBcIiR7Z2V0RGlzcGxheU5hbWUoXG4gICAgICBBcHBcbiAgICApfS5nZXRJbml0aWFsUHJvcHMoKVwiIHNob3VsZCByZXNvbHZlIHRvIGFuIG9iamVjdC4gQnV0IGZvdW5kIFwiJHtwcm9wc31cIiBpbnN0ZWFkLmBcbiAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSlcbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKE9iamVjdC5rZXlzKHByb3BzKS5sZW5ndGggPT09IDAgJiYgIWN0eC5jdHgpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYCR7Z2V0RGlzcGxheU5hbWUoXG4gICAgICAgICAgQXBwXG4gICAgICAgICl9IHJldHVybmVkIGFuIGVtcHR5IG9iamVjdCBmcm9tIFxcYGdldEluaXRpYWxQcm9wc1xcYC4gVGhpcyBkZS1vcHRpbWl6ZXMgYW5kIHByZXZlbnRzIGF1dG9tYXRpYyBzdGF0aWMgb3B0aW1pemF0aW9uLiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9lbXB0eS1vYmplY3QtZ2V0SW5pdGlhbFByb3BzYFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwcm9wc1xufVxuXG5leHBvcnQgY29uc3QgdXJsT2JqZWN0S2V5cyA9IFtcbiAgJ2F1dGgnLFxuICAnaGFzaCcsXG4gICdob3N0JyxcbiAgJ2hvc3RuYW1lJyxcbiAgJ2hyZWYnLFxuICAncGF0aCcsXG4gICdwYXRobmFtZScsXG4gICdwb3J0JyxcbiAgJ3Byb3RvY29sJyxcbiAgJ3F1ZXJ5JyxcbiAgJ3NlYXJjaCcsXG4gICdzbGFzaGVzJyxcbl1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFdpdGhWYWxpZGF0aW9uKHVybDogVXJsT2JqZWN0KTogc3RyaW5nIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgaWYgKHVybCAhPT0gbnVsbCAmJiB0eXBlb2YgdXJsID09PSAnb2JqZWN0Jykge1xuICAgICAgT2JqZWN0LmtleXModXJsKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgaWYgKHVybE9iamVjdEtleXMuaW5kZXhPZihrZXkpID09PSAtMSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBVbmtub3duIGtleSBwYXNzZWQgdmlhIHVybE9iamVjdCBpbnRvIHVybC5mb3JtYXQ6ICR7a2V5fWBcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZvcm1hdFVybCh1cmwpXG59XG5cbmV4cG9ydCBjb25zdCBTUCA9IHR5cGVvZiBwZXJmb3JtYW5jZSAhPT0gJ3VuZGVmaW5lZCdcbmV4cG9ydCBjb25zdCBTVCA9XG4gIFNQICYmXG4gIHR5cGVvZiBwZXJmb3JtYW5jZS5tYXJrID09PSAnZnVuY3Rpb24nICYmXG4gIHR5cGVvZiBwZXJmb3JtYW5jZS5tZWFzdXJlID09PSAnZnVuY3Rpb24nXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/next-server/lib/utils.js\n"); - -/***/ }), - -/***/ "./node_modules/next/dist/next-server/server/denormalize-page-path.js": -/*!****************************************************************************!*\ - !*** ./node_modules/next/dist/next-server/server/denormalize-page-path.js ***! - \****************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("exports.__esModule=true;exports.normalizePathSep=normalizePathSep;exports.denormalizePagePath=denormalizePagePath;function normalizePathSep(path){return path.replace(/\\\\/g,'/');}function denormalizePagePath(page){page=normalizePathSep(page);if(page.startsWith('/index/')){page=page.slice(6);}else if(page==='/index'){page='/';}return page;}\n//# sourceMappingURL=denormalize-page-path.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9uZXh0LXNlcnZlci9zZXJ2ZXIvZGVub3JtYWxpemUtcGFnZS1wYXRoLmpzP2MyNDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWEsd0JBQXdCLDBDQUEwQyxnREFBZ0QsZ0NBQWdDLGdDQUFnQyxtQ0FBbUMsNEJBQTRCLCtCQUErQixvQkFBb0IseUJBQXlCLFVBQVU7QUFDcFYiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L25leHQtc2VydmVyL3NlcnZlci9kZW5vcm1hbGl6ZS1wYWdlLXBhdGguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtleHBvcnRzLl9fZXNNb2R1bGU9dHJ1ZTtleHBvcnRzLm5vcm1hbGl6ZVBhdGhTZXA9bm9ybWFsaXplUGF0aFNlcDtleHBvcnRzLmRlbm9ybWFsaXplUGFnZVBhdGg9ZGVub3JtYWxpemVQYWdlUGF0aDtmdW5jdGlvbiBub3JtYWxpemVQYXRoU2VwKHBhdGgpe3JldHVybiBwYXRoLnJlcGxhY2UoL1xcXFwvZywnLycpO31mdW5jdGlvbiBkZW5vcm1hbGl6ZVBhZ2VQYXRoKHBhZ2Upe3BhZ2U9bm9ybWFsaXplUGF0aFNlcChwYWdlKTtpZihwYWdlLnN0YXJ0c1dpdGgoJy9pbmRleC8nKSl7cGFnZT1wYWdlLnNsaWNlKDYpO31lbHNlIGlmKHBhZ2U9PT0nL2luZGV4Jyl7cGFnZT0nLyc7fXJldHVybiBwYWdlO31cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlbm9ybWFsaXplLXBhZ2UtcGF0aC5qcy5tYXAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/next-server/server/denormalize-page-path.js\n"); - -/***/ }), - -/***/ "./node_modules/next/head.js": -/*!***********************************!*\ - !*** ./node_modules/next/head.js ***! - \***********************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("module.exports = __webpack_require__(/*! ./dist/next-server/lib/head */ \"./node_modules/next/dist/next-server/lib/head.js\")\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvaGVhZC5qcz84MzhhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlCQUFpQixtQkFBTyxDQUFDLHFGQUE2QiIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9uZXh0L2hlYWQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZGlzdC9uZXh0LXNlcnZlci9saWIvaGVhZCcpXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/head.js\n"); - -/***/ }), - -/***/ "./node_modules/next/link.js": -/*!***********************************!*\ - !*** ./node_modules/next/link.js ***! - \***********************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("module.exports = __webpack_require__(/*! ./dist/client/link */ \"./node_modules/next/dist/client/link.js\")\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbGluay5qcz82MDVhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlCQUFpQixtQkFBTyxDQUFDLG1FQUFvQiIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9uZXh0L2xpbmsuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZGlzdC9jbGllbnQvbGluaycpXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/link.js\n"); - -/***/ }), - -/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/arrayLikeToArray.js": -/*!***********************************************************************************!*\ - !*** ./node_modules/next/node_modules/@babel/runtime/helpers/arrayLikeToArray.js ***! - \***********************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nmodule.exports = _arrayLikeToArray;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlMaWtlVG9BcnJheS5qcz9lZGU2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7O0FBRUEsd0NBQXdDLFNBQVM7QUFDakQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlMaWtlVG9BcnJheS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykge1xuICAgIGFycjJbaV0gPSBhcnJbaV07XG4gIH1cblxuICByZXR1cm4gYXJyMjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlMaWtlVG9BcnJheTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/arrayLikeToArray.js\n"); - -/***/ }), - -/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/arrayWithHoles.js": -/*!*********************************************************************************!*\ - !*** ./node_modules/next/node_modules/@babel/runtime/helpers/arrayWithHoles.js ***! - \*********************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nmodule.exports = _arrayWithHoles;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRoSG9sZXMuanM/M2VhMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hcnJheVdpdGhIb2xlcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRoSG9sZXM7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/arrayWithHoles.js\n"); - -/***/ }), - -/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/arrayWithoutHoles.js": -/*!************************************************************************************!*\ - !*** ./node_modules/next/node_modules/@babel/runtime/helpers/arrayWithoutHoles.js ***! - \************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var arrayLikeToArray = __webpack_require__(/*! ./arrayLikeToArray */ \"./node_modules/next/node_modules/@babel/runtime/helpers/arrayLikeToArray.js\");\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\n\nmodule.exports = _arrayWithoutHoles;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRob3V0SG9sZXMuanM/ZTVmMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1QkFBdUIsbUJBQU8sQ0FBQyx1R0FBb0I7O0FBRW5EO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9uZXh0L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5V2l0aG91dEhvbGVzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGFycmF5TGlrZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9hcnJheUxpa2VUb0FycmF5XCIpO1xuXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KGFycik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5V2l0aG91dEhvbGVzOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/arrayWithoutHoles.js\n"); - -/***/ }), - -/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/assertThisInitialized.js": -/*!****************************************************************************************!*\ - !*** ./node_modules/next/node_modules/@babel/runtime/helpers/assertThisInitialized.js ***! - \****************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nmodule.exports = _assertThisInitialized;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzP2E5NzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9uZXh0L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2Fzc2VydFRoaXNJbml0aWFsaXplZDsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/assertThisInitialized.js\n"); - -/***/ }), - -/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/asyncToGenerator.js": -/*!***********************************************************************************!*\ - !*** ./node_modules/next/node_modules/@babel/runtime/helpers/asyncToGenerator.js ***! - \***********************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\n\nmodule.exports = _asyncToGenerator;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXN5bmNUb0dlbmVyYXRvci5qcz9hOTU0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXN5bmNUb0dlbmVyYXRvci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHtcbiAgdHJ5IHtcbiAgICB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7XG4gICAgdmFyIHZhbHVlID0gaW5mby52YWx1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZWplY3QoZXJyb3IpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChpbmZvLmRvbmUpIHtcbiAgICByZXNvbHZlKHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBnZW4gPSBmbi5hcHBseShzZWxmLCBhcmdzKTtcblxuICAgICAgZnVuY3Rpb24gX25leHQodmFsdWUpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgdmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBfdGhyb3coZXJyKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpO1xuICAgICAgfVxuXG4gICAgICBfbmV4dCh1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hc3luY1RvR2VuZXJhdG9yOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/asyncToGenerator.js\n"); - -/***/ }), - -/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/classCallCheck.js": -/*!*********************************************************************************!*\ - !*** ./node_modules/next/node_modules/@babel/runtime/helpers/classCallCheck.js ***! - \*********************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nmodule.exports = _classCallCheck;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanM/ZmM2NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9jbGFzc0NhbGxDaGVjazsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/classCallCheck.js\n"); - -/***/ }), - -/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/construct.js": -/*!****************************************************************************!*\ - !*** ./node_modules/next/node_modules/@babel/runtime/helpers/construct.js ***! - \****************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var setPrototypeOf = __webpack_require__(/*! ./setPrototypeOf */ \"./node_modules/next/node_modules/@babel/runtime/helpers/setPrototypeOf.js\");\n\nvar isNativeReflectConstruct = __webpack_require__(/*! ./isNativeReflectConstruct */ \"./node_modules/next/node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js\");\n\nfunction _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n module.exports = _construct = Reflect.construct;\n } else {\n module.exports = _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\n\nmodule.exports = _construct;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY29uc3RydWN0LmpzP2FiYmQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscUJBQXFCLG1CQUFPLENBQUMsbUdBQWtCOztBQUUvQywrQkFBK0IsbUJBQU8sQ0FBQyx1SEFBNEI7O0FBRW5FO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9uZXh0L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NvbnN0cnVjdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCIuL3NldFByb3RvdHlwZU9mXCIpO1xuXG52YXIgaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gcmVxdWlyZShcIi4vaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0XCIpO1xuXG5mdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgaWYgKGlzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBfY29uc3RydWN0ID0gUmVmbGVjdC5jb25zdHJ1Y3Q7XG4gIH0gZWxzZSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBfY29uc3RydWN0ID0gZnVuY3Rpb24gX2NvbnN0cnVjdChQYXJlbnQsIGFyZ3MsIENsYXNzKSB7XG4gICAgICB2YXIgYSA9IFtudWxsXTtcbiAgICAgIGEucHVzaC5hcHBseShhLCBhcmdzKTtcbiAgICAgIHZhciBDb25zdHJ1Y3RvciA9IEZ1bmN0aW9uLmJpbmQuYXBwbHkoUGFyZW50LCBhKTtcbiAgICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDb25zdHJ1Y3RvcigpO1xuICAgICAgaWYgKENsYXNzKSBzZXRQcm90b3R5cGVPZihpbnN0YW5jZSwgQ2xhc3MucHJvdG90eXBlKTtcbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIF9jb25zdHJ1Y3QuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY29uc3RydWN0OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/construct.js\n"); - -/***/ }), - -/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/createClass.js": -/*!******************************************************************************!*\ - !*** ./node_modules/next/node_modules/@babel/runtime/helpers/createClass.js ***! - \******************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("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) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nmodule.exports = _createClass;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanM/OGI2NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9uZXh0L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9jcmVhdGVDbGFzczsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/createClass.js\n"); - -/***/ }), - -/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/defineProperty.js": -/*!*********************************************************************************!*\ - !*** ./node_modules/next/node_modules/@babel/runtime/helpers/defineProperty.js ***! - \*********************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanM/YTA4ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfZGVmaW5lUHJvcGVydHk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/defineProperty.js\n"); - -/***/ }), - -/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/getPrototypeOf.js": -/*!*********************************************************************************!*\ - !*** ./node_modules/next/node_modules/@babel/runtime/helpers/getPrototypeOf.js ***! - \*********************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("function _getPrototypeOf(o) {\n module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nmodule.exports = _getPrototypeOf;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanM/NGY0NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9nZXRQcm90b3R5cGVPZi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZjsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/getPrototypeOf.js\n"); - -/***/ }), - -/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/inherits.js": -/*!***************************************************************************!*\ - !*** ./node_modules/next/node_modules/@babel/runtime/helpers/inherits.js ***! - \***************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var setPrototypeOf = __webpack_require__(/*! ./setPrototypeOf */ \"./node_modules/next/node_modules/@babel/runtime/helpers/setPrototypeOf.js\");\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inherits;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanM/ZTNjNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxQkFBcUIsbUJBQU8sQ0FBQyxtR0FBa0I7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9zZXRQcm90b3R5cGVPZlwiKTtcblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pbmhlcml0czsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/inherits.js\n"); - -/***/ }), - -/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/interopRequireDefault.js": -/*!****************************************************************************************!*\ - !*** ./node_modules/next/node_modules/@babel/runtime/helpers/interopRequireDefault.js ***! - \****************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nmodule.exports = _interopRequireDefault;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0LmpzPzAyYmEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9uZXh0L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7XG4gICAgXCJkZWZhdWx0XCI6IG9ialxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQ7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/interopRequireDefault.js\n"); - -/***/ }), - -/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/interopRequireWildcard.js": -/*!*****************************************************************************************!*\ - !*** ./node_modules/next/node_modules/@babel/runtime/helpers/interopRequireWildcard.js ***! - \*****************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ \"./node_modules/next/node_modules/@babel/runtime/helpers/typeof.js\");\n\nfunction _getRequireWildcardCache() {\n if (typeof WeakMap !== \"function\") return null;\n var cache = new WeakMap();\n\n _getRequireWildcardCache = function _getRequireWildcardCache() {\n return cache;\n };\n\n return cache;\n}\n\nfunction _interopRequireWildcard(obj) {\n if (obj && obj.__esModule) {\n return obj;\n }\n\n if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") {\n return {\n \"default\": obj\n };\n }\n\n var cache = _getRequireWildcardCache();\n\n if (cache && cache.has(obj)) {\n return cache.get(obj);\n }\n\n var newObj = {};\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n\n if (desc && (desc.get || desc.set)) {\n Object.defineProperty(newObj, key, desc);\n } else {\n newObj[key] = obj[key];\n }\n }\n }\n\n newObj[\"default\"] = obj;\n\n if (cache) {\n cache.set(obj, newObj);\n }\n\n return newObj;\n}\n\nmodule.exports = _interopRequireWildcard;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVXaWxkY2FyZC5qcz9lY2EwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyx3R0FBK0I7O0FBRXJEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVXaWxkY2FyZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBfdHlwZW9mID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mXCIpO1xuXG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoKSB7XG4gIGlmICh0eXBlb2YgV2Vha01hcCAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gbnVsbDtcbiAgdmFyIGNhY2hlID0gbmV3IFdlYWtNYXAoKTtcblxuICBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoKSB7XG4gICAgcmV0dXJuIGNhY2hlO1xuICB9O1xuXG4gIHJldHVybiBjYWNoZTtcbn1cblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQob2JqKSB7XG4gIGlmIChvYmogJiYgb2JqLl9fZXNNb2R1bGUpIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCBfdHlwZW9mKG9iaikgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG9iaiAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwiZGVmYXVsdFwiOiBvYmpcbiAgICB9O1xuICB9XG5cbiAgdmFyIGNhY2hlID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKCk7XG5cbiAgaWYgKGNhY2hlICYmIGNhY2hlLmhhcyhvYmopKSB7XG4gICAgcmV0dXJuIGNhY2hlLmdldChvYmopO1xuICB9XG5cbiAgdmFyIG5ld09iaiA9IHt9O1xuICB2YXIgaGFzUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICB2YXIgZGVzYyA9IGhhc1Byb3BlcnR5RGVzY3JpcHRvciA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrZXkpIDogbnVsbDtcblxuICAgICAgaWYgKGRlc2MgJiYgKGRlc2MuZ2V0IHx8IGRlc2Muc2V0KSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3T2JqLCBrZXksIGRlc2MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3T2JqW2tleV0gPSBvYmpba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZXdPYmpbXCJkZWZhdWx0XCJdID0gb2JqO1xuXG4gIGlmIChjYWNoZSkge1xuICAgIGNhY2hlLnNldChvYmosIG5ld09iaik7XG4gIH1cblxuICByZXR1cm4gbmV3T2JqO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/interopRequireWildcard.js\n"); - -/***/ }), - -/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js": -/*!*******************************************************************************************!*\ - !*** ./node_modules/next/node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js ***! - \*******************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nmodule.exports = _isNativeReflectConstruct;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0LmpzPzkyNWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyRUFBMkU7QUFDM0U7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlO1xuXG4gIHRyeSB7XG4gICAgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24gKCkge30pKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3Q7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js\n"); - -/***/ }), - -/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/iterableToArray.js": -/*!**********************************************************************************!*\ - !*** ./node_modules/next/node_modules/@babel/runtime/helpers/iterableToArray.js ***! - \**********************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}\n\nmodule.exports = _iterableToArray;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzP2FlNTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoaXRlcikpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pdGVyYWJsZVRvQXJyYXk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/iterableToArray.js\n"); - -/***/ }), - -/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/iterableToArrayLimit.js": -/*!***************************************************************************************!*\ - !*** ./node_modules/next/node_modules/@babel/runtime/helpers/iterableToArrayLimit.js ***! - \***************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("function _iterableToArrayLimit(arr, i) {\n if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nmodule.exports = _iterableToArrayLimit;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5TGltaXQuanM/OWIxYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2Q0FBNkMsK0JBQStCO0FBQzVFOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5TGltaXQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sID09PSBcInVuZGVmaW5lZFwiIHx8ICEoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChhcnIpKSkgcmV0dXJuO1xuICB2YXIgX2FyciA9IFtdO1xuICB2YXIgX24gPSB0cnVlO1xuICB2YXIgX2QgPSBmYWxzZTtcbiAgdmFyIF9lID0gdW5kZWZpbmVkO1xuXG4gIHRyeSB7XG4gICAgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkge1xuICAgICAgX2Fyci5wdXNoKF9zLnZhbHVlKTtcblxuICAgICAgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgX2QgPSB0cnVlO1xuICAgIF9lID0gZXJyO1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIF9hcnI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2l0ZXJhYmxlVG9BcnJheUxpbWl0OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/iterableToArrayLimit.js\n"); - -/***/ }), - -/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/nonIterableRest.js": -/*!**********************************************************************************!*\ - !*** ./node_modules/next/node_modules/@babel/runtime/helpers/nonIterableRest.js ***! - \**********************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableRest;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvbm9uSXRlcmFibGVSZXN0LmpzP2E1MjEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvbm9uSXRlcmFibGVSZXN0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVSZXN0OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/nonIterableRest.js\n"); - -/***/ }), - -/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/nonIterableSpread.js": -/*!************************************************************************************!*\ - !*** ./node_modules/next/node_modules/@babel/runtime/helpers/nonIterableSpread.js ***! - \************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableSpread;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvbm9uSXRlcmFibGVTcHJlYWQuanM/OTA2ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlU3ByZWFkOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/nonIterableSpread.js\n"); - -/***/ }), - -/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/possibleConstructorReturn.js": -/*!********************************************************************************************!*\ - !*** ./node_modules/next/node_modules/@babel/runtime/helpers/possibleConstructorReturn.js ***! - \********************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ \"./node_modules/next/node_modules/@babel/runtime/helpers/typeof.js\");\n\nvar assertThisInitialized = __webpack_require__(/*! ./assertThisInitialized */ \"./node_modules/next/node_modules/@babel/runtime/helpers/assertThisInitialized.js\");\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return assertThisInitialized(self);\n}\n\nmodule.exports = _possibleConstructorReturn;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcz9iNDIwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyx3R0FBK0I7O0FBRXJELDRCQUE0QixtQkFBTyxDQUFDLGlIQUF5Qjs7QUFFN0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9uZXh0L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZlwiKTtcblxudmFyIGFzc2VydFRoaXNJbml0aWFsaXplZCA9IHJlcXVpcmUoXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiKTtcblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9XG5cbiAgcmV0dXJuIGFzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\n"); - -/***/ }), - -/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/setPrototypeOf.js": -/*!*********************************************************************************!*\ - !*** ./node_modules/next/node_modules/@babel/runtime/helpers/setPrototypeOf.js ***! - \*********************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2V0UHJvdG90eXBlT2YuanM/YWExYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXRQcm90b3R5cGVPZi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuXG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/setPrototypeOf.js\n"); - -/***/ }), - -/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/slicedToArray.js": -/*!********************************************************************************!*\ - !*** ./node_modules/next/node_modules/@babel/runtime/helpers/slicedToArray.js ***! - \********************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var arrayWithHoles = __webpack_require__(/*! ./arrayWithHoles */ \"./node_modules/next/node_modules/@babel/runtime/helpers/arrayWithHoles.js\");\n\nvar iterableToArrayLimit = __webpack_require__(/*! ./iterableToArrayLimit */ \"./node_modules/next/node_modules/@babel/runtime/helpers/iterableToArrayLimit.js\");\n\nvar unsupportedIterableToArray = __webpack_require__(/*! ./unsupportedIterableToArray */ \"./node_modules/next/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js\");\n\nvar nonIterableRest = __webpack_require__(/*! ./nonIterableRest */ \"./node_modules/next/node_modules/@babel/runtime/helpers/nonIterableRest.js\");\n\nfunction _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}\n\nmodule.exports = _slicedToArray;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2xpY2VkVG9BcnJheS5qcz9jZTgwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFCQUFxQixtQkFBTyxDQUFDLG1HQUFrQjs7QUFFL0MsMkJBQTJCLG1CQUFPLENBQUMsK0dBQXdCOztBQUUzRCxpQ0FBaUMsbUJBQU8sQ0FBQywySEFBOEI7O0FBRXZFLHNCQUFzQixtQkFBTyxDQUFDLHFHQUFtQjs7QUFFakQ7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2xpY2VkVG9BcnJheS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBhcnJheVdpdGhIb2xlcyA9IHJlcXVpcmUoXCIuL2FycmF5V2l0aEhvbGVzXCIpO1xuXG52YXIgaXRlcmFibGVUb0FycmF5TGltaXQgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXlMaW1pdFwiKTtcblxudmFyIHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXlcIik7XG5cbnZhciBub25JdGVyYWJsZVJlc3QgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVJlc3RcIik7XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3NsaWNlZFRvQXJyYXk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/slicedToArray.js\n"); - -/***/ }), - -/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/toConsumableArray.js": -/*!************************************************************************************!*\ - !*** ./node_modules/next/node_modules/@babel/runtime/helpers/toConsumableArray.js ***! - \************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var arrayWithoutHoles = __webpack_require__(/*! ./arrayWithoutHoles */ \"./node_modules/next/node_modules/@babel/runtime/helpers/arrayWithoutHoles.js\");\n\nvar iterableToArray = __webpack_require__(/*! ./iterableToArray */ \"./node_modules/next/node_modules/@babel/runtime/helpers/iterableToArray.js\");\n\nvar unsupportedIterableToArray = __webpack_require__(/*! ./unsupportedIterableToArray */ \"./node_modules/next/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js\");\n\nvar nonIterableSpread = __webpack_require__(/*! ./nonIterableSpread */ \"./node_modules/next/node_modules/@babel/runtime/helpers/nonIterableSpread.js\");\n\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\n\nmodule.exports = _toConsumableArray;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXkuanM/OThmYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3QkFBd0IsbUJBQU8sQ0FBQyx5R0FBcUI7O0FBRXJELHNCQUFzQixtQkFBTyxDQUFDLHFHQUFtQjs7QUFFakQsaUNBQWlDLG1CQUFPLENBQUMsMkhBQThCOztBQUV2RSx3QkFBd0IsbUJBQU8sQ0FBQyx5R0FBcUI7O0FBRXJEO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9uZXh0L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGFycmF5V2l0aG91dEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRob3V0SG9sZXNcIik7XG5cbnZhciBpdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXlcIik7XG5cbnZhciB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5XCIpO1xuXG52YXIgbm9uSXRlcmFibGVTcHJlYWQgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVNwcmVhZFwiKTtcblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IG5vbkl0ZXJhYmxlU3ByZWFkKCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3RvQ29uc3VtYWJsZUFycmF5OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/toConsumableArray.js\n"); - -/***/ }), - -/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/typeof.js": -/*!*************************************************************************!*\ - !*** ./node_modules/next/node_modules/@babel/runtime/helpers/typeof.js ***! - \*************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n module.exports = _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n module.exports = _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = _typeof;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzPzBiZTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikge1xuICAgIG1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIG1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIF90eXBlb2Yob2JqKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/typeof.js\n"); - -/***/ }), - -/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js": -/*!*********************************************************************************************!*\ - !*** ./node_modules/next/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js ***! - \*********************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var arrayLikeToArray = __webpack_require__(/*! ./arrayLikeToArray */ \"./node_modules/next/node_modules/@babel/runtime/helpers/arrayLikeToArray.js\");\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\n\nmodule.exports = _unsupportedIterableToArray;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanM/MjljOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1QkFBdUIsbUJBQU8sQ0FBQyx1R0FBb0I7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBhcnJheUxpa2VUb0FycmF5ID0gcmVxdWlyZShcIi4vYXJyYXlMaWtlVG9BcnJheVwiKTtcblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js\n"); - -/***/ }), - -/***/ "./node_modules/next/node_modules/@babel/runtime/regenerator/index.js": -/*!****************************************************************************!*\ - !*** ./node_modules/next/node_modules/@babel/runtime/regenerator/index.js ***! - \****************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("module.exports = __webpack_require__(/*! regenerator-runtime */ \"./node_modules/regenerator-runtime/runtime.js\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL3JlZ2VuZXJhdG9yL2luZGV4LmpzP2JjOTIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCLG1CQUFPLENBQUMsMEVBQXFCIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL3JlZ2VuZXJhdG9yL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVnZW5lcmF0b3ItcnVudGltZVwiKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/regenerator/index.js\n"); - -/***/ }), - -/***/ "./node_modules/prop-types/checkPropTypes.js": -/*!***************************************************!*\ - !*** ./node_modules/prop-types/checkPropTypes.js ***! - \***************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nvar printWarning = function() {};\n\nif (true) {\n var ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ \"./node_modules/prop-types/lib/ReactPropTypesSecret.js\");\n var loggedTypeFailures = {};\n var has = __webpack_require__(/*! ./lib/has */ \"./node_modules/prop-types/lib/has.js\");\n\n printWarning = function(text) {\n var message = 'Warning: ' + text;\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) { /**/ }\n };\n}\n\n/**\n * Assert that the values match with the type specs.\n * Error messages are memorized and will only be shown once.\n *\n * @param {object} typeSpecs Map of name to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @param {string} componentName Name of the component for error messages.\n * @param {?Function} getStack Returns the component stack.\n * @private\n */\nfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n if (true) {\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error;\n // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n var err = Error(\n (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +\n 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' +\n 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'\n );\n err.name = 'Invariant Violation';\n throw err;\n }\n error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\n } catch (ex) {\n error = ex;\n }\n if (error && !(error instanceof Error)) {\n printWarning(\n (componentName || 'React class') + ': type specification of ' +\n location + ' `' + typeSpecName + '` is invalid; the type checker ' +\n 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +\n 'You may have forgotten to pass an argument to the type checker ' +\n 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +\n 'shape all require an argument).'\n );\n }\n if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error.message] = true;\n\n var stack = getStack ? getStack() : '';\n\n printWarning(\n 'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')\n );\n }\n }\n }\n }\n}\n\n/**\n * Resets warning cache when testing.\n *\n * @private\n */\ncheckPropTypes.resetWarningCache = function() {\n if (true) {\n loggedTypeFailures = {};\n }\n}\n\nmodule.exports = checkPropTypes;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvY2hlY2tQcm9wVHlwZXMuanM/YTE1YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7O0FBRWI7O0FBRUEsSUFBSSxJQUFxQztBQUN6Qyw2QkFBNkIsbUJBQU8sQ0FBQyx5RkFBNEI7QUFDakU7QUFDQSxZQUFZLG1CQUFPLENBQUMsdURBQVc7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxZQUFZO0FBQ2pCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxVQUFVO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLE1BQU0sSUFBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRHQUE0RztBQUM1RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkRBQTJEO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxJQUFxQztBQUMzQztBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9jaGVja1Byb3BUeXBlcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcbiAgdmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xuICB2YXIgaGFzID0gcmVxdWlyZSgnLi9saWIvaGFzJyk7XG5cbiAgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24odGV4dCkge1xuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyB0ZXh0O1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKHgpIHsgLyoqLyB9XG4gIH07XG59XG5cbi8qKlxuICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlcyBtYXRjaCB3aXRoIHRoZSB0eXBlIHNwZWNzLlxuICogRXJyb3IgbWVzc2FnZXMgYXJlIG1lbW9yaXplZCBhbmQgd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHR5cGVTcGVjcyBNYXAgb2YgbmFtZSB0byBhIFJlYWN0UHJvcFR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgUnVudGltZSB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIHR5cGUtY2hlY2tlZFxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gXCJwcm9wXCIsIFwiY29udGV4dFwiLCBcImNoaWxkIGNvbnRleHRcIlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbXBvbmVudE5hbWUgTmFtZSBvZiB0aGUgY29tcG9uZW50IGZvciBlcnJvciBtZXNzYWdlcy5cbiAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBnZXRTdGFjayBSZXR1cm5zIHRoZSBjb21wb25lbnQgc3RhY2suXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGdldFN0YWNrKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXG4gICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcbiAgICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGVyciA9IEVycm9yKFxuICAgICAgICAgICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgK1xuICAgICAgICAgICAgICAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nICtcbiAgICAgICAgICAgICAgJ1RoaXMgb2Z0ZW4gaGFwcGVucyBiZWNhdXNlIG9mIHR5cG9zIHN1Y2ggYXMgYFByb3BUeXBlcy5mdW5jdGlvbmAgaW5zdGVhZCBvZiBgUHJvcFR5cGVzLmZ1bmNgLidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXJyb3IgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBlcnJvciA9IGV4O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvciAmJiAhKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJyArXG4gICAgICAgICAgICBsb2NhdGlvbiArICcgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgK1xuICAgICAgICAgICAgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICcgKyB0eXBlb2YgZXJyb3IgKyAnLiAnICtcbiAgICAgICAgICAgICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICtcbiAgICAgICAgICAgICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgK1xuICAgICAgICAgICAgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yLm1lc3NhZ2VdID0gdHJ1ZTtcblxuICAgICAgICAgIHZhciBzdGFjayA9IGdldFN0YWNrID8gZ2V0U3RhY2soKSA6ICcnO1xuXG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgJ0ZhaWxlZCAnICsgbG9jYXRpb24gKyAnIHR5cGU6ICcgKyBlcnJvci5tZXNzYWdlICsgKHN0YWNrICE9IG51bGwgPyBzdGFjayA6ICcnKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXNldHMgd2FybmluZyBjYWNoZSB3aGVuIHRlc3RpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2hlY2tQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNoZWNrUHJvcFR5cGVzO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/prop-types/checkPropTypes.js\n"); - -/***/ }), - -/***/ "./node_modules/prop-types/lib/ReactPropTypesSecret.js": -/*!*************************************************************!*\ - !*** ./node_modules/prop-types/lib/ReactPropTypesSecret.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzPzU5YjAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhOztBQUViOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9ICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/prop-types/lib/ReactPropTypesSecret.js\n"); - -/***/ }), - -/***/ "./node_modules/prop-types/lib/has.js": -/*!********************************************!*\ - !*** ./node_modules/prop-types/lib/has.js ***! - \********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("module.exports = Function.call.bind(Object.prototype.hasOwnProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbGliL2hhcy5qcz81MzM4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbGliL2hhcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/prop-types/lib/has.js\n"); - -/***/ }), - -/***/ "./node_modules/react-dom/cjs/react-dom.development.js": -/*!*************************************************************!*\ - !*** ./node_modules/react-dom/cjs/react-dom.development.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/** @license React v16.8.6\n * react-dom.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\n\n\nif (true) {\n (function() {\n'use strict';\n\nvar React = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\nvar _assign = __webpack_require__(/*! object-assign */ \"./node_modules/next/dist/build/polyfills/object-assign.js\");\nvar checkPropTypes = __webpack_require__(/*! prop-types/checkPropTypes */ \"./node_modules/prop-types/checkPropTypes.js\");\nvar scheduler = __webpack_require__(/*! scheduler */ \"./node_modules/scheduler/index.js\");\nvar tracing = __webpack_require__(/*! scheduler/tracing */ \"./node_modules/scheduler/tracing.js\");\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar validateFormat = function () {};\n\n{\n validateFormat = function (format) {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n };\n}\n\nfunction invariant(condition, format, a, b, c, d, e, f) {\n validateFormat(format);\n\n if (!condition) {\n var error = void 0;\n if (format === undefined) {\n error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(format.replace(/%s/g, function () {\n return args[argIndex++];\n }));\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n}\n\n// Relying on the `invariant()` implementation lets us\n// preserve the format and params in the www builds.\n\n!React ? invariant(false, 'ReactDOM was loaded before React. Make sure you load the React package before loading ReactDOM.') : void 0;\n\nvar invokeGuardedCallbackImpl = function (name, func, context, a, b, c, d, e, f) {\n var funcArgs = Array.prototype.slice.call(arguments, 3);\n try {\n func.apply(context, funcArgs);\n } catch (error) {\n this.onError(error);\n }\n};\n\n{\n // In DEV mode, we swap out invokeGuardedCallback for a special version\n // that plays more nicely with the browser's DevTools. The idea is to preserve\n // \"Pause on exceptions\" behavior. Because React wraps all user-provided\n // functions in invokeGuardedCallback, and the production version of\n // invokeGuardedCallback uses a try-catch, all user exceptions are treated\n // like caught exceptions, and the DevTools won't pause unless the developer\n // takes the extra step of enabling pause on caught exceptions. This is\n // unintuitive, though, because even though React has caught the error, from\n // the developer's perspective, the error is uncaught.\n //\n // To preserve the expected \"Pause on exceptions\" behavior, we don't use a\n // try-catch in DEV. Instead, we synchronously dispatch a fake event to a fake\n // DOM node, and call the user-provided callback from inside an event handler\n // for that fake event. If the callback throws, the error is \"captured\" using\n // a global event handler. But because the error happens in a different\n // event loop context, it does not interrupt the normal program flow.\n // Effectively, this gives us try-catch behavior without actually using\n // try-catch. Neat!\n\n // Check that the browser supports the APIs we need to implement our special\n // DEV version of invokeGuardedCallback\n if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') {\n var fakeNode = document.createElement('react');\n\n var invokeGuardedCallbackDev = function (name, func, context, a, b, c, d, e, f) {\n // If document doesn't exist we know for sure we will crash in this method\n // when we call document.createEvent(). However this can cause confusing\n // errors: https://github.com/facebookincubator/create-react-app/issues/3482\n // So we preemptively throw with a better message instead.\n !(typeof document !== 'undefined') ? invariant(false, 'The `document` global was defined when React was initialized, but is not defined anymore. This can happen in a test environment if a component schedules an update from an asynchronous callback, but the test has already finished running. To solve this, you can either unmount the component at the end of your test (and ensure that any asynchronous operations get canceled in `componentWillUnmount`), or you can change the test itself to be asynchronous.') : void 0;\n var evt = document.createEvent('Event');\n\n // Keeps track of whether the user-provided callback threw an error. We\n // set this to true at the beginning, then set it to false right after\n // calling the function. If the function errors, `didError` will never be\n // set to false. This strategy works even if the browser is flaky and\n // fails to call our global error handler, because it doesn't rely on\n // the error event at all.\n var didError = true;\n\n // Keeps track of the value of window.event so that we can reset it\n // during the callback to let user code access window.event in the\n // browsers that support it.\n var windowEvent = window.event;\n\n // Keeps track of the descriptor of window.event to restore it after event\n // dispatching: https://github.com/facebook/react/issues/13688\n var windowEventDescriptor = Object.getOwnPropertyDescriptor(window, 'event');\n\n // Create an event handler for our fake event. We will synchronously\n // dispatch our fake event using `dispatchEvent`. Inside the handler, we\n // call the user-provided callback.\n var funcArgs = Array.prototype.slice.call(arguments, 3);\n function callCallback() {\n // We immediately remove the callback from event listeners so that\n // nested `invokeGuardedCallback` calls do not clash. Otherwise, a\n // nested call would trigger the fake event handlers of any call higher\n // in the stack.\n fakeNode.removeEventListener(evtType, callCallback, false);\n\n // We check for window.hasOwnProperty('event') to prevent the\n // window.event assignment in both IE <= 10 as they throw an error\n // \"Member not found\" in strict mode, and in Firefox which does not\n // support window.event.\n if (typeof window.event !== 'undefined' && window.hasOwnProperty('event')) {\n window.event = windowEvent;\n }\n\n func.apply(context, funcArgs);\n didError = false;\n }\n\n // Create a global error event handler. We use this to capture the value\n // that was thrown. It's possible that this error handler will fire more\n // than once; for example, if non-React code also calls `dispatchEvent`\n // and a handler for that event throws. We should be resilient to most of\n // those cases. Even if our error event handler fires more than once, the\n // last error event is always used. If the callback actually does error,\n // we know that the last error event is the correct one, because it's not\n // possible for anything else to have happened in between our callback\n // erroring and the code that follows the `dispatchEvent` call below. If\n // the callback doesn't error, but the error event was fired, we know to\n // ignore it because `didError` will be false, as described above.\n var error = void 0;\n // Use this to track whether the error event is ever called.\n var didSetError = false;\n var isCrossOriginError = false;\n\n function handleWindowError(event) {\n error = event.error;\n didSetError = true;\n if (error === null && event.colno === 0 && event.lineno === 0) {\n isCrossOriginError = true;\n }\n if (event.defaultPrevented) {\n // Some other error handler has prevented default.\n // Browsers silence the error report if this happens.\n // We'll remember this to later decide whether to log it or not.\n if (error != null && typeof error === 'object') {\n try {\n error._suppressLogging = true;\n } catch (inner) {\n // Ignore.\n }\n }\n }\n }\n\n // Create a fake event type.\n var evtType = 'react-' + (name ? name : 'invokeguardedcallback');\n\n // Attach our event handlers\n window.addEventListener('error', handleWindowError);\n fakeNode.addEventListener(evtType, callCallback, false);\n\n // Synchronously dispatch our fake event. If the user-provided function\n // errors, it will trigger our global error handler.\n evt.initEvent(evtType, false, false);\n fakeNode.dispatchEvent(evt);\n\n if (windowEventDescriptor) {\n Object.defineProperty(window, 'event', windowEventDescriptor);\n }\n\n if (didError) {\n if (!didSetError) {\n // The callback errored, but the error event never fired.\n error = new Error('An error was thrown inside one of your components, but React ' + \"doesn't know what it was. This is likely due to browser \" + 'flakiness. React does its best to preserve the \"Pause on ' + 'exceptions\" behavior of the DevTools, which requires some ' + \"DEV-mode only tricks. It's possible that these don't work in \" + 'your browser. Try triggering the error in production mode, ' + 'or switching to a modern browser. If you suspect that this is ' + 'actually an issue with React, please file an issue.');\n } else if (isCrossOriginError) {\n error = new Error(\"A cross-origin error was thrown. React doesn't have access to \" + 'the actual error object in development. ' + 'See https://fb.me/react-crossorigin-error for more information.');\n }\n this.onError(error);\n }\n\n // Remove our event listeners\n window.removeEventListener('error', handleWindowError);\n };\n\n invokeGuardedCallbackImpl = invokeGuardedCallbackDev;\n }\n}\n\nvar invokeGuardedCallbackImpl$1 = invokeGuardedCallbackImpl;\n\n// Used by Fiber to simulate a try-catch.\nvar hasError = false;\nvar caughtError = null;\n\n// Used by event system to capture/rethrow the first error.\nvar hasRethrowError = false;\nvar rethrowError = null;\n\nvar reporter = {\n onError: function (error) {\n hasError = true;\n caughtError = error;\n }\n};\n\n/**\n * Call a function while guarding against errors that happens within it.\n * Returns an error if it throws, otherwise null.\n *\n * In production, this is implemented using a try-catch. The reason we don't\n * use a try-catch directly is so that we can swap out a different\n * implementation in DEV mode.\n *\n * @param {String} name of the guard to use for logging or debugging\n * @param {Function} func The function to invoke\n * @param {*} context The context to use when calling the function\n * @param {...*} args Arguments for function\n */\nfunction invokeGuardedCallback(name, func, context, a, b, c, d, e, f) {\n hasError = false;\n caughtError = null;\n invokeGuardedCallbackImpl$1.apply(reporter, arguments);\n}\n\n/**\n * Same as invokeGuardedCallback, but instead of returning an error, it stores\n * it in a global so it can be rethrown by `rethrowCaughtError` later.\n * TODO: See if caughtError and rethrowError can be unified.\n *\n * @param {String} name of the guard to use for logging or debugging\n * @param {Function} func The function to invoke\n * @param {*} context The context to use when calling the function\n * @param {...*} args Arguments for function\n */\nfunction invokeGuardedCallbackAndCatchFirstError(name, func, context, a, b, c, d, e, f) {\n invokeGuardedCallback.apply(this, arguments);\n if (hasError) {\n var error = clearCaughtError();\n if (!hasRethrowError) {\n hasRethrowError = true;\n rethrowError = error;\n }\n }\n}\n\n/**\n * During execution of guarded functions we will capture the first error which\n * we will rethrow to be handled by the top level error handler.\n */\nfunction rethrowCaughtError() {\n if (hasRethrowError) {\n var error = rethrowError;\n hasRethrowError = false;\n rethrowError = null;\n throw error;\n }\n}\n\nfunction hasCaughtError() {\n return hasError;\n}\n\nfunction clearCaughtError() {\n if (hasError) {\n var error = caughtError;\n hasError = false;\n caughtError = null;\n return error;\n } else {\n invariant(false, 'clearCaughtError was called but no error was captured. This error is likely caused by a bug in React. Please file an issue.');\n }\n}\n\n/**\n * Injectable ordering of event plugins.\n */\nvar eventPluginOrder = null;\n\n/**\n * Injectable mapping from names to event plugin modules.\n */\nvar namesToPlugins = {};\n\n/**\n * Recomputes the plugin list using the injected plugins and plugin ordering.\n *\n * @private\n */\nfunction recomputePluginOrdering() {\n if (!eventPluginOrder) {\n // Wait until an `eventPluginOrder` is injected.\n return;\n }\n for (var pluginName in namesToPlugins) {\n var pluginModule = namesToPlugins[pluginName];\n var pluginIndex = eventPluginOrder.indexOf(pluginName);\n !(pluginIndex > -1) ? invariant(false, 'EventPluginRegistry: Cannot inject event plugins that do not exist in the plugin ordering, `%s`.', pluginName) : void 0;\n if (plugins[pluginIndex]) {\n continue;\n }\n !pluginModule.extractEvents ? invariant(false, 'EventPluginRegistry: Event plugins must implement an `extractEvents` method, but `%s` does not.', pluginName) : void 0;\n plugins[pluginIndex] = pluginModule;\n var publishedEvents = pluginModule.eventTypes;\n for (var eventName in publishedEvents) {\n !publishEventForPlugin(publishedEvents[eventName], pluginModule, eventName) ? invariant(false, 'EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.', eventName, pluginName) : void 0;\n }\n }\n}\n\n/**\n * Publishes an event so that it can be dispatched by the supplied plugin.\n *\n * @param {object} dispatchConfig Dispatch configuration for the event.\n * @param {object} PluginModule Plugin publishing the event.\n * @return {boolean} True if the event was successfully published.\n * @private\n */\nfunction publishEventForPlugin(dispatchConfig, pluginModule, eventName) {\n !!eventNameDispatchConfigs.hasOwnProperty(eventName) ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same event name, `%s`.', eventName) : void 0;\n eventNameDispatchConfigs[eventName] = dispatchConfig;\n\n var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;\n if (phasedRegistrationNames) {\n for (var phaseName in phasedRegistrationNames) {\n if (phasedRegistrationNames.hasOwnProperty(phaseName)) {\n var phasedRegistrationName = phasedRegistrationNames[phaseName];\n publishRegistrationName(phasedRegistrationName, pluginModule, eventName);\n }\n }\n return true;\n } else if (dispatchConfig.registrationName) {\n publishRegistrationName(dispatchConfig.registrationName, pluginModule, eventName);\n return true;\n }\n return false;\n}\n\n/**\n * Publishes a registration name that is used to identify dispatched events.\n *\n * @param {string} registrationName Registration name to add.\n * @param {object} PluginModule Plugin publishing the event.\n * @private\n */\nfunction publishRegistrationName(registrationName, pluginModule, eventName) {\n !!registrationNameModules[registrationName] ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same registration name, `%s`.', registrationName) : void 0;\n registrationNameModules[registrationName] = pluginModule;\n registrationNameDependencies[registrationName] = pluginModule.eventTypes[eventName].dependencies;\n\n {\n var lowerCasedName = registrationName.toLowerCase();\n possibleRegistrationNames[lowerCasedName] = registrationName;\n\n if (registrationName === 'onDoubleClick') {\n possibleRegistrationNames.ondblclick = registrationName;\n }\n }\n}\n\n/**\n * Registers plugins so that they can extract and dispatch events.\n *\n * @see {EventPluginHub}\n */\n\n/**\n * Ordered list of injected plugins.\n */\nvar plugins = [];\n\n/**\n * Mapping from event name to dispatch config\n */\nvar eventNameDispatchConfigs = {};\n\n/**\n * Mapping from registration name to plugin module\n */\nvar registrationNameModules = {};\n\n/**\n * Mapping from registration name to event name\n */\nvar registrationNameDependencies = {};\n\n/**\n * Mapping from lowercase registration names to the properly cased version,\n * used to warn in the case of missing event handlers. Available\n * only in true.\n * @type {Object}\n */\nvar possibleRegistrationNames = {};\n// Trust the developer to only use possibleRegistrationNames in true\n\n/**\n * Injects an ordering of plugins (by plugin name). This allows the ordering\n * to be decoupled from injection of the actual plugins so that ordering is\n * always deterministic regardless of packaging, on-the-fly injection, etc.\n *\n * @param {array} InjectedEventPluginOrder\n * @internal\n * @see {EventPluginHub.injection.injectEventPluginOrder}\n */\nfunction injectEventPluginOrder(injectedEventPluginOrder) {\n !!eventPluginOrder ? invariant(false, 'EventPluginRegistry: Cannot inject event plugin ordering more than once. You are likely trying to load more than one copy of React.') : void 0;\n // Clone the ordering so it cannot be dynamically mutated.\n eventPluginOrder = Array.prototype.slice.call(injectedEventPluginOrder);\n recomputePluginOrdering();\n}\n\n/**\n * Injects plugins to be used by `EventPluginHub`. The plugin names must be\n * in the ordering injected by `injectEventPluginOrder`.\n *\n * Plugins can be injected as part of page initialization or on-the-fly.\n *\n * @param {object} injectedNamesToPlugins Map from names to plugin modules.\n * @internal\n * @see {EventPluginHub.injection.injectEventPluginsByName}\n */\nfunction injectEventPluginsByName(injectedNamesToPlugins) {\n var isOrderingDirty = false;\n for (var pluginName in injectedNamesToPlugins) {\n if (!injectedNamesToPlugins.hasOwnProperty(pluginName)) {\n continue;\n }\n var pluginModule = injectedNamesToPlugins[pluginName];\n if (!namesToPlugins.hasOwnProperty(pluginName) || namesToPlugins[pluginName] !== pluginModule) {\n !!namesToPlugins[pluginName] ? invariant(false, 'EventPluginRegistry: Cannot inject two different event plugins using the same name, `%s`.', pluginName) : void 0;\n namesToPlugins[pluginName] = pluginModule;\n isOrderingDirty = true;\n }\n }\n if (isOrderingDirty) {\n recomputePluginOrdering();\n }\n}\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warningWithoutStack = function () {};\n\n{\n warningWithoutStack = function (condition, format) {\n for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n if (format === undefined) {\n throw new Error('`warningWithoutStack(condition, format, ...args)` requires a warning ' + 'message argument');\n }\n if (args.length > 8) {\n // Check before the condition to catch violations early.\n throw new Error('warningWithoutStack() currently supports at most 8 arguments.');\n }\n if (condition) {\n return;\n }\n if (typeof console !== 'undefined') {\n var argsWithFormat = args.map(function (item) {\n return '' + item;\n });\n argsWithFormat.unshift('Warning: ' + format);\n\n // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n Function.prototype.apply.call(console.error, console, argsWithFormat);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n var argIndex = 0;\n var message = 'Warning: ' + format.replace(/%s/g, function () {\n return args[argIndex++];\n });\n throw new Error(message);\n } catch (x) {}\n };\n}\n\nvar warningWithoutStack$1 = warningWithoutStack;\n\nvar getFiberCurrentPropsFromNode = null;\nvar getInstanceFromNode = null;\nvar getNodeFromInstance = null;\n\nfunction setComponentTree(getFiberCurrentPropsFromNodeImpl, getInstanceFromNodeImpl, getNodeFromInstanceImpl) {\n getFiberCurrentPropsFromNode = getFiberCurrentPropsFromNodeImpl;\n getInstanceFromNode = getInstanceFromNodeImpl;\n getNodeFromInstance = getNodeFromInstanceImpl;\n {\n !(getNodeFromInstance && getInstanceFromNode) ? warningWithoutStack$1(false, 'EventPluginUtils.setComponentTree(...): Injected ' + 'module is missing getNodeFromInstance or getInstanceFromNode.') : void 0;\n }\n}\n\nvar validateEventDispatches = void 0;\n{\n validateEventDispatches = function (event) {\n var dispatchListeners = event._dispatchListeners;\n var dispatchInstances = event._dispatchInstances;\n\n var listenersIsArr = Array.isArray(dispatchListeners);\n var listenersLen = listenersIsArr ? dispatchListeners.length : dispatchListeners ? 1 : 0;\n\n var instancesIsArr = Array.isArray(dispatchInstances);\n var instancesLen = instancesIsArr ? dispatchInstances.length : dispatchInstances ? 1 : 0;\n\n !(instancesIsArr === listenersIsArr && instancesLen === listenersLen) ? warningWithoutStack$1(false, 'EventPluginUtils: Invalid `event`.') : void 0;\n };\n}\n\n/**\n * Dispatch the event to the listener.\n * @param {SyntheticEvent} event SyntheticEvent to handle\n * @param {function} listener Application-level callback\n * @param {*} inst Internal component instance\n */\nfunction executeDispatch(event, listener, inst) {\n var type = event.type || 'unknown-event';\n event.currentTarget = getNodeFromInstance(inst);\n invokeGuardedCallbackAndCatchFirstError(type, listener, undefined, event);\n event.currentTarget = null;\n}\n\n/**\n * Standard/simple iteration through an event's collected dispatches.\n */\nfunction executeDispatchesInOrder(event) {\n var dispatchListeners = event._dispatchListeners;\n var dispatchInstances = event._dispatchInstances;\n {\n validateEventDispatches(event);\n }\n if (Array.isArray(dispatchListeners)) {\n for (var i = 0; i < dispatchListeners.length; i++) {\n if (event.isPropagationStopped()) {\n break;\n }\n // Listeners and Instances are two parallel arrays that are always in sync.\n executeDispatch(event, dispatchListeners[i], dispatchInstances[i]);\n }\n } else if (dispatchListeners) {\n executeDispatch(event, dispatchListeners, dispatchInstances);\n }\n event._dispatchListeners = null;\n event._dispatchInstances = null;\n}\n\n/**\n * @see executeDispatchesInOrderStopAtTrueImpl\n */\n\n\n/**\n * Execution of a \"direct\" dispatch - there must be at most one dispatch\n * accumulated on the event or it is considered an error. It doesn't really make\n * sense for an event with multiple dispatches (bubbled) to keep track of the\n * return values at each dispatch execution, but it does tend to make sense when\n * dealing with \"direct\" dispatches.\n *\n * @return {*} The return value of executing the single dispatch.\n */\n\n\n/**\n * @param {SyntheticEvent} event\n * @return {boolean} True iff number of dispatches accumulated is greater than 0.\n */\n\n/**\n * Accumulates items that must not be null or undefined into the first one. This\n * is used to conserve memory by avoiding array allocations, and thus sacrifices\n * API cleanness. Since `current` can be null before being passed in and not\n * null after this function, make sure to assign it back to `current`:\n *\n * `a = accumulateInto(a, b);`\n *\n * This API should be sparingly used. Try `accumulate` for something cleaner.\n *\n * @return {*|array<*>} An accumulation of items.\n */\n\nfunction accumulateInto(current, next) {\n !(next != null) ? invariant(false, 'accumulateInto(...): Accumulated items must not be null or undefined.') : void 0;\n\n if (current == null) {\n return next;\n }\n\n // Both are not empty. Warning: Never call x.concat(y) when you are not\n // certain that x is an Array (x could be a string with concat method).\n if (Array.isArray(current)) {\n if (Array.isArray(next)) {\n current.push.apply(current, next);\n return current;\n }\n current.push(next);\n return current;\n }\n\n if (Array.isArray(next)) {\n // A bit too dangerous to mutate `next`.\n return [current].concat(next);\n }\n\n return [current, next];\n}\n\n/**\n * @param {array} arr an \"accumulation\" of items which is either an Array or\n * a single item. Useful when paired with the `accumulate` module. This is a\n * simple utility that allows us to reason about a collection of items, but\n * handling the case when there is exactly one item (and we do not need to\n * allocate an array).\n * @param {function} cb Callback invoked with each element or a collection.\n * @param {?} [scope] Scope used as `this` in a callback.\n */\nfunction forEachAccumulated(arr, cb, scope) {\n if (Array.isArray(arr)) {\n arr.forEach(cb, scope);\n } else if (arr) {\n cb.call(scope, arr);\n }\n}\n\n/**\n * Internal queue of events that have accumulated their dispatches and are\n * waiting to have their dispatches executed.\n */\nvar eventQueue = null;\n\n/**\n * Dispatches an event and releases it back into the pool, unless persistent.\n *\n * @param {?object} event Synthetic event to be dispatched.\n * @private\n */\nvar executeDispatchesAndRelease = function (event) {\n if (event) {\n executeDispatchesInOrder(event);\n\n if (!event.isPersistent()) {\n event.constructor.release(event);\n }\n }\n};\nvar executeDispatchesAndReleaseTopLevel = function (e) {\n return executeDispatchesAndRelease(e);\n};\n\nfunction isInteractive(tag) {\n return tag === 'button' || tag === 'input' || tag === 'select' || tag === 'textarea';\n}\n\nfunction shouldPreventMouseEvent(name, type, props) {\n switch (name) {\n case 'onClick':\n case 'onClickCapture':\n case 'onDoubleClick':\n case 'onDoubleClickCapture':\n case 'onMouseDown':\n case 'onMouseDownCapture':\n case 'onMouseMove':\n case 'onMouseMoveCapture':\n case 'onMouseUp':\n case 'onMouseUpCapture':\n return !!(props.disabled && isInteractive(type));\n default:\n return false;\n }\n}\n\n/**\n * This is a unified interface for event plugins to be installed and configured.\n *\n * Event plugins can implement the following properties:\n *\n * `extractEvents` {function(string, DOMEventTarget, string, object): *}\n * Required. When a top-level event is fired, this method is expected to\n * extract synthetic events that will in turn be queued and dispatched.\n *\n * `eventTypes` {object}\n * Optional, plugins that fire events must publish a mapping of registration\n * names that are used to register listeners. Values of this mapping must\n * be objects that contain `registrationName` or `phasedRegistrationNames`.\n *\n * `executeDispatch` {function(object, function, string)}\n * Optional, allows plugins to override how an event gets dispatched. By\n * default, the listener is simply invoked.\n *\n * Each plugin that is injected into `EventsPluginHub` is immediately operable.\n *\n * @public\n */\n\n/**\n * Methods for injecting dependencies.\n */\nvar injection = {\n /**\n * @param {array} InjectedEventPluginOrder\n * @public\n */\n injectEventPluginOrder: injectEventPluginOrder,\n\n /**\n * @param {object} injectedNamesToPlugins Map from names to plugin modules.\n */\n injectEventPluginsByName: injectEventPluginsByName\n};\n\n/**\n * @param {object} inst The instance, which is the source of events.\n * @param {string} registrationName Name of listener (e.g. `onClick`).\n * @return {?function} The stored callback.\n */\nfunction getListener(inst, registrationName) {\n var listener = void 0;\n\n // TODO: shouldPreventMouseEvent is DOM-specific and definitely should not\n // live here; needs to be moved to a better place soon\n var stateNode = inst.stateNode;\n if (!stateNode) {\n // Work in progress (ex: onload events in incremental mode).\n return null;\n }\n var props = getFiberCurrentPropsFromNode(stateNode);\n if (!props) {\n // Work in progress.\n return null;\n }\n listener = props[registrationName];\n if (shouldPreventMouseEvent(registrationName, inst.type, props)) {\n return null;\n }\n !(!listener || typeof listener === 'function') ? invariant(false, 'Expected `%s` listener to be a function, instead got a value of `%s` type.', registrationName, typeof listener) : void 0;\n return listener;\n}\n\n/**\n * Allows registered plugins an opportunity to extract events from top-level\n * native browser events.\n *\n * @return {*} An accumulation of synthetic events.\n * @internal\n */\nfunction extractEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n var events = null;\n for (var i = 0; i < plugins.length; i++) {\n // Not every plugin in the ordering may be loaded at runtime.\n var possiblePlugin = plugins[i];\n if (possiblePlugin) {\n var extractedEvents = possiblePlugin.extractEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget);\n if (extractedEvents) {\n events = accumulateInto(events, extractedEvents);\n }\n }\n }\n return events;\n}\n\nfunction runEventsInBatch(events) {\n if (events !== null) {\n eventQueue = accumulateInto(eventQueue, events);\n }\n\n // Set `eventQueue` to null before processing it so that we can tell if more\n // events get enqueued while processing.\n var processingEventQueue = eventQueue;\n eventQueue = null;\n\n if (!processingEventQueue) {\n return;\n }\n\n forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseTopLevel);\n !!eventQueue ? invariant(false, 'processEventQueue(): Additional events were enqueued while processing an event queue. Support for this has not yet been implemented.') : void 0;\n // This would be a good time to rethrow if any of the event handlers threw.\n rethrowCaughtError();\n}\n\nfunction runExtractedEventsInBatch(topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n var events = extractEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget);\n runEventsInBatch(events);\n}\n\nvar FunctionComponent = 0;\nvar ClassComponent = 1;\nvar IndeterminateComponent = 2; // Before we know whether it is function or class\nvar HostRoot = 3; // Root of a host tree. Could be nested inside another node.\nvar HostPortal = 4; // A subtree. Could be an entry point to a different renderer.\nvar HostComponent = 5;\nvar HostText = 6;\nvar Fragment = 7;\nvar Mode = 8;\nvar ContextConsumer = 9;\nvar ContextProvider = 10;\nvar ForwardRef = 11;\nvar Profiler = 12;\nvar SuspenseComponent = 13;\nvar MemoComponent = 14;\nvar SimpleMemoComponent = 15;\nvar LazyComponent = 16;\nvar IncompleteClassComponent = 17;\nvar DehydratedSuspenseComponent = 18;\n\nvar randomKey = Math.random().toString(36).slice(2);\nvar internalInstanceKey = '__reactInternalInstance$' + randomKey;\nvar internalEventHandlersKey = '__reactEventHandlers$' + randomKey;\n\nfunction precacheFiberNode(hostInst, node) {\n node[internalInstanceKey] = hostInst;\n}\n\n/**\n * Given a DOM node, return the closest ReactDOMComponent or\n * ReactDOMTextComponent instance ancestor.\n */\nfunction getClosestInstanceFromNode(node) {\n if (node[internalInstanceKey]) {\n return node[internalInstanceKey];\n }\n\n while (!node[internalInstanceKey]) {\n if (node.parentNode) {\n node = node.parentNode;\n } else {\n // Top of the tree. This node must not be part of a React tree (or is\n // unmounted, potentially).\n return null;\n }\n }\n\n var inst = node[internalInstanceKey];\n if (inst.tag === HostComponent || inst.tag === HostText) {\n // In Fiber, this will always be the deepest root.\n return inst;\n }\n\n return null;\n}\n\n/**\n * Given a DOM node, return the ReactDOMComponent or ReactDOMTextComponent\n * instance, or null if the node was not rendered by this React.\n */\nfunction getInstanceFromNode$1(node) {\n var inst = node[internalInstanceKey];\n if (inst) {\n if (inst.tag === HostComponent || inst.tag === HostText) {\n return inst;\n } else {\n return null;\n }\n }\n return null;\n}\n\n/**\n * Given a ReactDOMComponent or ReactDOMTextComponent, return the corresponding\n * DOM node.\n */\nfunction getNodeFromInstance$1(inst) {\n if (inst.tag === HostComponent || inst.tag === HostText) {\n // In Fiber this, is just the state node right now. We assume it will be\n // a host component or host text.\n return inst.stateNode;\n }\n\n // Without this first invariant, passing a non-DOM-component triggers the next\n // invariant for a missing parent, which is super confusing.\n invariant(false, 'getNodeFromInstance: Invalid argument.');\n}\n\nfunction getFiberCurrentPropsFromNode$1(node) {\n return node[internalEventHandlersKey] || null;\n}\n\nfunction updateFiberProps(node, props) {\n node[internalEventHandlersKey] = props;\n}\n\nfunction getParent(inst) {\n do {\n inst = inst.return;\n // TODO: If this is a HostRoot we might want to bail out.\n // That is depending on if we want nested subtrees (layers) to bubble\n // events to their parent. We could also go through parentNode on the\n // host node but that wouldn't work for React Native and doesn't let us\n // do the portal feature.\n } while (inst && inst.tag !== HostComponent);\n if (inst) {\n return inst;\n }\n return null;\n}\n\n/**\n * Return the lowest common ancestor of A and B, or null if they are in\n * different trees.\n */\nfunction getLowestCommonAncestor(instA, instB) {\n var depthA = 0;\n for (var tempA = instA; tempA; tempA = getParent(tempA)) {\n depthA++;\n }\n var depthB = 0;\n for (var tempB = instB; tempB; tempB = getParent(tempB)) {\n depthB++;\n }\n\n // If A is deeper, crawl up.\n while (depthA - depthB > 0) {\n instA = getParent(instA);\n depthA--;\n }\n\n // If B is deeper, crawl up.\n while (depthB - depthA > 0) {\n instB = getParent(instB);\n depthB--;\n }\n\n // Walk in lockstep until we find a match.\n var depth = depthA;\n while (depth--) {\n if (instA === instB || instA === instB.alternate) {\n return instA;\n }\n instA = getParent(instA);\n instB = getParent(instB);\n }\n return null;\n}\n\n/**\n * Return if A is an ancestor of B.\n */\n\n\n/**\n * Return the parent instance of the passed-in instance.\n */\n\n\n/**\n * Simulates the traversal of a two-phase, capture/bubble event dispatch.\n */\nfunction traverseTwoPhase(inst, fn, arg) {\n var path = [];\n while (inst) {\n path.push(inst);\n inst = getParent(inst);\n }\n var i = void 0;\n for (i = path.length; i-- > 0;) {\n fn(path[i], 'captured', arg);\n }\n for (i = 0; i < path.length; i++) {\n fn(path[i], 'bubbled', arg);\n }\n}\n\n/**\n * Traverses the ID hierarchy and invokes the supplied `cb` on any IDs that\n * should would receive a `mouseEnter` or `mouseLeave` event.\n *\n * Does not invoke the callback on the nearest common ancestor because nothing\n * \"entered\" or \"left\" that element.\n */\nfunction traverseEnterLeave(from, to, fn, argFrom, argTo) {\n var common = from && to ? getLowestCommonAncestor(from, to) : null;\n var pathFrom = [];\n while (true) {\n if (!from) {\n break;\n }\n if (from === common) {\n break;\n }\n var alternate = from.alternate;\n if (alternate !== null && alternate === common) {\n break;\n }\n pathFrom.push(from);\n from = getParent(from);\n }\n var pathTo = [];\n while (true) {\n if (!to) {\n break;\n }\n if (to === common) {\n break;\n }\n var _alternate = to.alternate;\n if (_alternate !== null && _alternate === common) {\n break;\n }\n pathTo.push(to);\n to = getParent(to);\n }\n for (var i = 0; i < pathFrom.length; i++) {\n fn(pathFrom[i], 'bubbled', argFrom);\n }\n for (var _i = pathTo.length; _i-- > 0;) {\n fn(pathTo[_i], 'captured', argTo);\n }\n}\n\n/**\n * Some event types have a notion of different registration names for different\n * \"phases\" of propagation. This finds listeners by a given phase.\n */\nfunction listenerAtPhase(inst, event, propagationPhase) {\n var registrationName = event.dispatchConfig.phasedRegistrationNames[propagationPhase];\n return getListener(inst, registrationName);\n}\n\n/**\n * A small set of propagation patterns, each of which will accept a small amount\n * of information, and generate a set of \"dispatch ready event objects\" - which\n * are sets of events that have already been annotated with a set of dispatched\n * listener functions/ids. The API is designed this way to discourage these\n * propagation strategies from actually executing the dispatches, since we\n * always want to collect the entire set of dispatches before executing even a\n * single one.\n */\n\n/**\n * Tags a `SyntheticEvent` with dispatched listeners. Creating this function\n * here, allows us to not have to bind or create functions for each event.\n * Mutating the event's members allows us to not have to create a wrapping\n * \"dispatch\" object that pairs the event with the listener.\n */\nfunction accumulateDirectionalDispatches(inst, phase, event) {\n {\n !inst ? warningWithoutStack$1(false, 'Dispatching inst must not be null') : void 0;\n }\n var listener = listenerAtPhase(inst, event, phase);\n if (listener) {\n event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);\n event._dispatchInstances = accumulateInto(event._dispatchInstances, inst);\n }\n}\n\n/**\n * Collect dispatches (must be entirely collected before dispatching - see unit\n * tests). Lazily allocate the array to conserve memory. We must loop through\n * each event and perform the traversal for each one. We cannot perform a\n * single traversal for the entire collection of events because each event may\n * have a different target.\n */\nfunction accumulateTwoPhaseDispatchesSingle(event) {\n if (event && event.dispatchConfig.phasedRegistrationNames) {\n traverseTwoPhase(event._targetInst, accumulateDirectionalDispatches, event);\n }\n}\n\n/**\n * Accumulates without regard to direction, does not look for phased\n * registration names. Same as `accumulateDirectDispatchesSingle` but without\n * requiring that the `dispatchMarker` be the same as the dispatched ID.\n */\nfunction accumulateDispatches(inst, ignoredDirection, event) {\n if (inst && event && event.dispatchConfig.registrationName) {\n var registrationName = event.dispatchConfig.registrationName;\n var listener = getListener(inst, registrationName);\n if (listener) {\n event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);\n event._dispatchInstances = accumulateInto(event._dispatchInstances, inst);\n }\n }\n}\n\n/**\n * Accumulates dispatches on an `SyntheticEvent`, but only for the\n * `dispatchMarker`.\n * @param {SyntheticEvent} event\n */\nfunction accumulateDirectDispatchesSingle(event) {\n if (event && event.dispatchConfig.registrationName) {\n accumulateDispatches(event._targetInst, null, event);\n }\n}\n\nfunction accumulateTwoPhaseDispatches(events) {\n forEachAccumulated(events, accumulateTwoPhaseDispatchesSingle);\n}\n\n\n\nfunction accumulateEnterLeaveDispatches(leave, enter, from, to) {\n traverseEnterLeave(from, to, accumulateDispatches, leave, enter);\n}\n\nfunction accumulateDirectDispatches(events) {\n forEachAccumulated(events, accumulateDirectDispatchesSingle);\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\n// Do not uses the below two methods directly!\n// Instead use constants exported from DOMTopLevelEventTypes in ReactDOM.\n// (It is the only module that is allowed to access these methods.)\n\nfunction unsafeCastStringToDOMTopLevelType(topLevelType) {\n return topLevelType;\n}\n\nfunction unsafeCastDOMTopLevelTypeToString(topLevelType) {\n return topLevelType;\n}\n\n/**\n * Generate a mapping of standard vendor prefixes using the defined style property and event name.\n *\n * @param {string} styleProp\n * @param {string} eventName\n * @returns {object}\n */\nfunction makePrefixMap(styleProp, eventName) {\n var prefixes = {};\n\n prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n prefixes['Webkit' + styleProp] = 'webkit' + eventName;\n prefixes['Moz' + styleProp] = 'moz' + eventName;\n\n return prefixes;\n}\n\n/**\n * A list of event names to a configurable list of vendor prefixes.\n */\nvar vendorPrefixes = {\n animationend: makePrefixMap('Animation', 'AnimationEnd'),\n animationiteration: makePrefixMap('Animation', 'AnimationIteration'),\n animationstart: makePrefixMap('Animation', 'AnimationStart'),\n transitionend: makePrefixMap('Transition', 'TransitionEnd')\n};\n\n/**\n * Event names that have already been detected and prefixed (if applicable).\n */\nvar prefixedEventNames = {};\n\n/**\n * Element to check for prefixes on.\n */\nvar style = {};\n\n/**\n * Bootstrap if a DOM exists.\n */\nif (canUseDOM) {\n style = document.createElement('div').style;\n\n // On some platforms, in particular some releases of Android 4.x,\n // the un-prefixed \"animation\" and \"transition\" properties are defined on the\n // style object but the events that fire will still be prefixed, so we need\n // to check if the un-prefixed events are usable, and if not remove them from the map.\n if (!('AnimationEvent' in window)) {\n delete vendorPrefixes.animationend.animation;\n delete vendorPrefixes.animationiteration.animation;\n delete vendorPrefixes.animationstart.animation;\n }\n\n // Same as above\n if (!('TransitionEvent' in window)) {\n delete vendorPrefixes.transitionend.transition;\n }\n}\n\n/**\n * Attempts to determine the correct vendor prefixed event name.\n *\n * @param {string} eventName\n * @returns {string}\n */\nfunction getVendorPrefixedEventName(eventName) {\n if (prefixedEventNames[eventName]) {\n return prefixedEventNames[eventName];\n } else if (!vendorPrefixes[eventName]) {\n return eventName;\n }\n\n var prefixMap = vendorPrefixes[eventName];\n\n for (var styleProp in prefixMap) {\n if (prefixMap.hasOwnProperty(styleProp) && styleProp in style) {\n return prefixedEventNames[eventName] = prefixMap[styleProp];\n }\n }\n\n return eventName;\n}\n\n/**\n * To identify top level events in ReactDOM, we use constants defined by this\n * module. This is the only module that uses the unsafe* methods to express\n * that the constants actually correspond to the browser event names. This lets\n * us save some bundle size by avoiding a top level type -> event name map.\n * The rest of ReactDOM code should import top level types from this file.\n */\nvar TOP_ABORT = unsafeCastStringToDOMTopLevelType('abort');\nvar TOP_ANIMATION_END = unsafeCastStringToDOMTopLevelType(getVendorPrefixedEventName('animationend'));\nvar TOP_ANIMATION_ITERATION = unsafeCastStringToDOMTopLevelType(getVendorPrefixedEventName('animationiteration'));\nvar TOP_ANIMATION_START = unsafeCastStringToDOMTopLevelType(getVendorPrefixedEventName('animationstart'));\nvar TOP_BLUR = unsafeCastStringToDOMTopLevelType('blur');\nvar TOP_CAN_PLAY = unsafeCastStringToDOMTopLevelType('canplay');\nvar TOP_CAN_PLAY_THROUGH = unsafeCastStringToDOMTopLevelType('canplaythrough');\nvar TOP_CANCEL = unsafeCastStringToDOMTopLevelType('cancel');\nvar TOP_CHANGE = unsafeCastStringToDOMTopLevelType('change');\nvar TOP_CLICK = unsafeCastStringToDOMTopLevelType('click');\nvar TOP_CLOSE = unsafeCastStringToDOMTopLevelType('close');\nvar TOP_COMPOSITION_END = unsafeCastStringToDOMTopLevelType('compositionend');\nvar TOP_COMPOSITION_START = unsafeCastStringToDOMTopLevelType('compositionstart');\nvar TOP_COMPOSITION_UPDATE = unsafeCastStringToDOMTopLevelType('compositionupdate');\nvar TOP_CONTEXT_MENU = unsafeCastStringToDOMTopLevelType('contextmenu');\nvar TOP_COPY = unsafeCastStringToDOMTopLevelType('copy');\nvar TOP_CUT = unsafeCastStringToDOMTopLevelType('cut');\nvar TOP_DOUBLE_CLICK = unsafeCastStringToDOMTopLevelType('dblclick');\nvar TOP_AUX_CLICK = unsafeCastStringToDOMTopLevelType('auxclick');\nvar TOP_DRAG = unsafeCastStringToDOMTopLevelType('drag');\nvar TOP_DRAG_END = unsafeCastStringToDOMTopLevelType('dragend');\nvar TOP_DRAG_ENTER = unsafeCastStringToDOMTopLevelType('dragenter');\nvar TOP_DRAG_EXIT = unsafeCastStringToDOMTopLevelType('dragexit');\nvar TOP_DRAG_LEAVE = unsafeCastStringToDOMTopLevelType('dragleave');\nvar TOP_DRAG_OVER = unsafeCastStringToDOMTopLevelType('dragover');\nvar TOP_DRAG_START = unsafeCastStringToDOMTopLevelType('dragstart');\nvar TOP_DROP = unsafeCastStringToDOMTopLevelType('drop');\nvar TOP_DURATION_CHANGE = unsafeCastStringToDOMTopLevelType('durationchange');\nvar TOP_EMPTIED = unsafeCastStringToDOMTopLevelType('emptied');\nvar TOP_ENCRYPTED = unsafeCastStringToDOMTopLevelType('encrypted');\nvar TOP_ENDED = unsafeCastStringToDOMTopLevelType('ended');\nvar TOP_ERROR = unsafeCastStringToDOMTopLevelType('error');\nvar TOP_FOCUS = unsafeCastStringToDOMTopLevelType('focus');\nvar TOP_GOT_POINTER_CAPTURE = unsafeCastStringToDOMTopLevelType('gotpointercapture');\nvar TOP_INPUT = unsafeCastStringToDOMTopLevelType('input');\nvar TOP_INVALID = unsafeCastStringToDOMTopLevelType('invalid');\nvar TOP_KEY_DOWN = unsafeCastStringToDOMTopLevelType('keydown');\nvar TOP_KEY_PRESS = unsafeCastStringToDOMTopLevelType('keypress');\nvar TOP_KEY_UP = unsafeCastStringToDOMTopLevelType('keyup');\nvar TOP_LOAD = unsafeCastStringToDOMTopLevelType('load');\nvar TOP_LOAD_START = unsafeCastStringToDOMTopLevelType('loadstart');\nvar TOP_LOADED_DATA = unsafeCastStringToDOMTopLevelType('loadeddata');\nvar TOP_LOADED_METADATA = unsafeCastStringToDOMTopLevelType('loadedmetadata');\nvar TOP_LOST_POINTER_CAPTURE = unsafeCastStringToDOMTopLevelType('lostpointercapture');\nvar TOP_MOUSE_DOWN = unsafeCastStringToDOMTopLevelType('mousedown');\nvar TOP_MOUSE_MOVE = unsafeCastStringToDOMTopLevelType('mousemove');\nvar TOP_MOUSE_OUT = unsafeCastStringToDOMTopLevelType('mouseout');\nvar TOP_MOUSE_OVER = unsafeCastStringToDOMTopLevelType('mouseover');\nvar TOP_MOUSE_UP = unsafeCastStringToDOMTopLevelType('mouseup');\nvar TOP_PASTE = unsafeCastStringToDOMTopLevelType('paste');\nvar TOP_PAUSE = unsafeCastStringToDOMTopLevelType('pause');\nvar TOP_PLAY = unsafeCastStringToDOMTopLevelType('play');\nvar TOP_PLAYING = unsafeCastStringToDOMTopLevelType('playing');\nvar TOP_POINTER_CANCEL = unsafeCastStringToDOMTopLevelType('pointercancel');\nvar TOP_POINTER_DOWN = unsafeCastStringToDOMTopLevelType('pointerdown');\n\n\nvar TOP_POINTER_MOVE = unsafeCastStringToDOMTopLevelType('pointermove');\nvar TOP_POINTER_OUT = unsafeCastStringToDOMTopLevelType('pointerout');\nvar TOP_POINTER_OVER = unsafeCastStringToDOMTopLevelType('pointerover');\nvar TOP_POINTER_UP = unsafeCastStringToDOMTopLevelType('pointerup');\nvar TOP_PROGRESS = unsafeCastStringToDOMTopLevelType('progress');\nvar TOP_RATE_CHANGE = unsafeCastStringToDOMTopLevelType('ratechange');\nvar TOP_RESET = unsafeCastStringToDOMTopLevelType('reset');\nvar TOP_SCROLL = unsafeCastStringToDOMTopLevelType('scroll');\nvar TOP_SEEKED = unsafeCastStringToDOMTopLevelType('seeked');\nvar TOP_SEEKING = unsafeCastStringToDOMTopLevelType('seeking');\nvar TOP_SELECTION_CHANGE = unsafeCastStringToDOMTopLevelType('selectionchange');\nvar TOP_STALLED = unsafeCastStringToDOMTopLevelType('stalled');\nvar TOP_SUBMIT = unsafeCastStringToDOMTopLevelType('submit');\nvar TOP_SUSPEND = unsafeCastStringToDOMTopLevelType('suspend');\nvar TOP_TEXT_INPUT = unsafeCastStringToDOMTopLevelType('textInput');\nvar TOP_TIME_UPDATE = unsafeCastStringToDOMTopLevelType('timeupdate');\nvar TOP_TOGGLE = unsafeCastStringToDOMTopLevelType('toggle');\nvar TOP_TOUCH_CANCEL = unsafeCastStringToDOMTopLevelType('touchcancel');\nvar TOP_TOUCH_END = unsafeCastStringToDOMTopLevelType('touchend');\nvar TOP_TOUCH_MOVE = unsafeCastStringToDOMTopLevelType('touchmove');\nvar TOP_TOUCH_START = unsafeCastStringToDOMTopLevelType('touchstart');\nvar TOP_TRANSITION_END = unsafeCastStringToDOMTopLevelType(getVendorPrefixedEventName('transitionend'));\nvar TOP_VOLUME_CHANGE = unsafeCastStringToDOMTopLevelType('volumechange');\nvar TOP_WAITING = unsafeCastStringToDOMTopLevelType('waiting');\nvar TOP_WHEEL = unsafeCastStringToDOMTopLevelType('wheel');\n\n// List of events that need to be individually attached to media elements.\n// Note that events in this list will *not* be listened to at the top level\n// unless they're explicitly whitelisted in `ReactBrowserEventEmitter.listenTo`.\nvar mediaEventTypes = [TOP_ABORT, TOP_CAN_PLAY, TOP_CAN_PLAY_THROUGH, TOP_DURATION_CHANGE, TOP_EMPTIED, TOP_ENCRYPTED, TOP_ENDED, TOP_ERROR, TOP_LOADED_DATA, TOP_LOADED_METADATA, TOP_LOAD_START, TOP_PAUSE, TOP_PLAY, TOP_PLAYING, TOP_PROGRESS, TOP_RATE_CHANGE, TOP_SEEKED, TOP_SEEKING, TOP_STALLED, TOP_SUSPEND, TOP_TIME_UPDATE, TOP_VOLUME_CHANGE, TOP_WAITING];\n\nfunction getRawEventName(topLevelType) {\n return unsafeCastDOMTopLevelTypeToString(topLevelType);\n}\n\n/**\n * These variables store information about text content of a target node,\n * allowing comparison of content before and after a given event.\n *\n * Identify the node where selection currently begins, then observe\n * both its text content and its current position in the DOM. Since the\n * browser may natively replace the target node during composition, we can\n * use its position to find its replacement.\n *\n *\n */\n\nvar root = null;\nvar startText = null;\nvar fallbackText = null;\n\nfunction initialize(nativeEventTarget) {\n root = nativeEventTarget;\n startText = getText();\n return true;\n}\n\nfunction reset() {\n root = null;\n startText = null;\n fallbackText = null;\n}\n\nfunction getData() {\n if (fallbackText) {\n return fallbackText;\n }\n\n var start = void 0;\n var startValue = startText;\n var startLength = startValue.length;\n var end = void 0;\n var endValue = getText();\n var endLength = endValue.length;\n\n for (start = 0; start < startLength; start++) {\n if (startValue[start] !== endValue[start]) {\n break;\n }\n }\n\n var minEnd = startLength - start;\n for (end = 1; end <= minEnd; end++) {\n if (startValue[startLength - end] !== endValue[endLength - end]) {\n break;\n }\n }\n\n var sliceTail = end > 1 ? 1 - end : undefined;\n fallbackText = endValue.slice(start, sliceTail);\n return fallbackText;\n}\n\nfunction getText() {\n if ('value' in root) {\n return root.value;\n }\n return root.textContent;\n}\n\n/* eslint valid-typeof: 0 */\n\nvar EVENT_POOL_SIZE = 10;\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar EventInterface = {\n type: null,\n target: null,\n // currentTarget is set when dispatching; no use in copying it here\n currentTarget: function () {\n return null;\n },\n eventPhase: null,\n bubbles: null,\n cancelable: null,\n timeStamp: function (event) {\n return event.timeStamp || Date.now();\n },\n defaultPrevented: null,\n isTrusted: null\n};\n\nfunction functionThatReturnsTrue() {\n return true;\n}\n\nfunction functionThatReturnsFalse() {\n return false;\n}\n\n/**\n * Synthetic events are dispatched by event plugins, typically in response to a\n * top-level event delegation handler.\n *\n * These systems should generally use pooling to reduce the frequency of garbage\n * collection. The system should check `isPersistent` to determine whether the\n * event should be released into the pool after being dispatched. Users that\n * need a persisted event should invoke `persist`.\n *\n * Synthetic events (and subclasses) implement the DOM Level 3 Events API by\n * normalizing browser quirks. Subclasses do not necessarily have to implement a\n * DOM interface; custom application-specific events can also subclass this.\n *\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {*} targetInst Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @param {DOMEventTarget} nativeEventTarget Target node.\n */\nfunction SyntheticEvent(dispatchConfig, targetInst, nativeEvent, nativeEventTarget) {\n {\n // these have a getter/setter for warnings\n delete this.nativeEvent;\n delete this.preventDefault;\n delete this.stopPropagation;\n delete this.isDefaultPrevented;\n delete this.isPropagationStopped;\n }\n\n this.dispatchConfig = dispatchConfig;\n this._targetInst = targetInst;\n this.nativeEvent = nativeEvent;\n\n var Interface = this.constructor.Interface;\n for (var propName in Interface) {\n if (!Interface.hasOwnProperty(propName)) {\n continue;\n }\n {\n delete this[propName]; // this has a getter/setter for warnings\n }\n var normalize = Interface[propName];\n if (normalize) {\n this[propName] = normalize(nativeEvent);\n } else {\n if (propName === 'target') {\n this.target = nativeEventTarget;\n } else {\n this[propName] = nativeEvent[propName];\n }\n }\n }\n\n var defaultPrevented = nativeEvent.defaultPrevented != null ? nativeEvent.defaultPrevented : nativeEvent.returnValue === false;\n if (defaultPrevented) {\n this.isDefaultPrevented = functionThatReturnsTrue;\n } else {\n this.isDefaultPrevented = functionThatReturnsFalse;\n }\n this.isPropagationStopped = functionThatReturnsFalse;\n return this;\n}\n\n_assign(SyntheticEvent.prototype, {\n preventDefault: function () {\n this.defaultPrevented = true;\n var event = this.nativeEvent;\n if (!event) {\n return;\n }\n\n if (event.preventDefault) {\n event.preventDefault();\n } else if (typeof event.returnValue !== 'unknown') {\n event.returnValue = false;\n }\n this.isDefaultPrevented = functionThatReturnsTrue;\n },\n\n stopPropagation: function () {\n var event = this.nativeEvent;\n if (!event) {\n return;\n }\n\n if (event.stopPropagation) {\n event.stopPropagation();\n } else if (typeof event.cancelBubble !== 'unknown') {\n // The ChangeEventPlugin registers a \"propertychange\" event for\n // IE. This event does not support bubbling or cancelling, and\n // any references to cancelBubble throw \"Member not found\". A\n // typeof check of \"unknown\" circumvents this issue (and is also\n // IE specific).\n event.cancelBubble = true;\n }\n\n this.isPropagationStopped = functionThatReturnsTrue;\n },\n\n /**\n * We release all dispatched `SyntheticEvent`s after each event loop, adding\n * them back into the pool. This allows a way to hold onto a reference that\n * won't be added back into the pool.\n */\n persist: function () {\n this.isPersistent = functionThatReturnsTrue;\n },\n\n /**\n * Checks if this event should be released back into the pool.\n *\n * @return {boolean} True if this should not be released, false otherwise.\n */\n isPersistent: functionThatReturnsFalse,\n\n /**\n * `PooledClass` looks for `destructor` on each instance it releases.\n */\n destructor: function () {\n var Interface = this.constructor.Interface;\n for (var propName in Interface) {\n {\n Object.defineProperty(this, propName, getPooledWarningPropertyDefinition(propName, Interface[propName]));\n }\n }\n this.dispatchConfig = null;\n this._targetInst = null;\n this.nativeEvent = null;\n this.isDefaultPrevented = functionThatReturnsFalse;\n this.isPropagationStopped = functionThatReturnsFalse;\n this._dispatchListeners = null;\n this._dispatchInstances = null;\n {\n Object.defineProperty(this, 'nativeEvent', getPooledWarningPropertyDefinition('nativeEvent', null));\n Object.defineProperty(this, 'isDefaultPrevented', getPooledWarningPropertyDefinition('isDefaultPrevented', functionThatReturnsFalse));\n Object.defineProperty(this, 'isPropagationStopped', getPooledWarningPropertyDefinition('isPropagationStopped', functionThatReturnsFalse));\n Object.defineProperty(this, 'preventDefault', getPooledWarningPropertyDefinition('preventDefault', function () {}));\n Object.defineProperty(this, 'stopPropagation', getPooledWarningPropertyDefinition('stopPropagation', function () {}));\n }\n }\n});\n\nSyntheticEvent.Interface = EventInterface;\n\n/**\n * Helper to reduce boilerplate when creating subclasses.\n */\nSyntheticEvent.extend = function (Interface) {\n var Super = this;\n\n var E = function () {};\n E.prototype = Super.prototype;\n var prototype = new E();\n\n function Class() {\n return Super.apply(this, arguments);\n }\n _assign(prototype, Class.prototype);\n Class.prototype = prototype;\n Class.prototype.constructor = Class;\n\n Class.Interface = _assign({}, Super.Interface, Interface);\n Class.extend = Super.extend;\n addEventPoolingTo(Class);\n\n return Class;\n};\n\naddEventPoolingTo(SyntheticEvent);\n\n/**\n * Helper to nullify syntheticEvent instance properties when destructing\n *\n * @param {String} propName\n * @param {?object} getVal\n * @return {object} defineProperty object\n */\nfunction getPooledWarningPropertyDefinition(propName, getVal) {\n var isFunction = typeof getVal === 'function';\n return {\n configurable: true,\n set: set,\n get: get\n };\n\n function set(val) {\n var action = isFunction ? 'setting the method' : 'setting the property';\n warn(action, 'This is effectively a no-op');\n return val;\n }\n\n function get() {\n var action = isFunction ? 'accessing the method' : 'accessing the property';\n var result = isFunction ? 'This is a no-op function' : 'This is set to null';\n warn(action, result);\n return getVal;\n }\n\n function warn(action, result) {\n var warningCondition = false;\n !warningCondition ? warningWithoutStack$1(false, \"This synthetic event is reused for performance reasons. If you're seeing this, \" + \"you're %s `%s` on a released/nullified synthetic event. %s. \" + 'If you must keep the original synthetic event around, use event.persist(). ' + 'See https://fb.me/react-event-pooling for more information.', action, propName, result) : void 0;\n }\n}\n\nfunction getPooledEvent(dispatchConfig, targetInst, nativeEvent, nativeInst) {\n var EventConstructor = this;\n if (EventConstructor.eventPool.length) {\n var instance = EventConstructor.eventPool.pop();\n EventConstructor.call(instance, dispatchConfig, targetInst, nativeEvent, nativeInst);\n return instance;\n }\n return new EventConstructor(dispatchConfig, targetInst, nativeEvent, nativeInst);\n}\n\nfunction releasePooledEvent(event) {\n var EventConstructor = this;\n !(event instanceof EventConstructor) ? invariant(false, 'Trying to release an event instance into a pool of a different type.') : void 0;\n event.destructor();\n if (EventConstructor.eventPool.length < EVENT_POOL_SIZE) {\n EventConstructor.eventPool.push(event);\n }\n}\n\nfunction addEventPoolingTo(EventConstructor) {\n EventConstructor.eventPool = [];\n EventConstructor.getPooled = getPooledEvent;\n EventConstructor.release = releasePooledEvent;\n}\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents\n */\nvar SyntheticCompositionEvent = SyntheticEvent.extend({\n data: null\n});\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105\n * /#events-inputevents\n */\nvar SyntheticInputEvent = SyntheticEvent.extend({\n data: null\n});\n\nvar END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space\nvar START_KEYCODE = 229;\n\nvar canUseCompositionEvent = canUseDOM && 'CompositionEvent' in window;\n\nvar documentMode = null;\nif (canUseDOM && 'documentMode' in document) {\n documentMode = document.documentMode;\n}\n\n// Webkit offers a very useful `textInput` event that can be used to\n// directly represent `beforeInput`. The IE `textinput` event is not as\n// useful, so we don't use it.\nvar canUseTextInputEvent = canUseDOM && 'TextEvent' in window && !documentMode;\n\n// In IE9+, we have access to composition events, but the data supplied\n// by the native compositionend event may be incorrect. Japanese ideographic\n// spaces, for instance (\\u3000) are not recorded correctly.\nvar useFallbackCompositionData = canUseDOM && (!canUseCompositionEvent || documentMode && documentMode > 8 && documentMode <= 11);\n\nvar SPACEBAR_CODE = 32;\nvar SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE);\n\n// Events and their corresponding property names.\nvar eventTypes = {\n beforeInput: {\n phasedRegistrationNames: {\n bubbled: 'onBeforeInput',\n captured: 'onBeforeInputCapture'\n },\n dependencies: [TOP_COMPOSITION_END, TOP_KEY_PRESS, TOP_TEXT_INPUT, TOP_PASTE]\n },\n compositionEnd: {\n phasedRegistrationNames: {\n bubbled: 'onCompositionEnd',\n captured: 'onCompositionEndCapture'\n },\n dependencies: [TOP_BLUR, TOP_COMPOSITION_END, TOP_KEY_DOWN, TOP_KEY_PRESS, TOP_KEY_UP, TOP_MOUSE_DOWN]\n },\n compositionStart: {\n phasedRegistrationNames: {\n bubbled: 'onCompositionStart',\n captured: 'onCompositionStartCapture'\n },\n dependencies: [TOP_BLUR, TOP_COMPOSITION_START, TOP_KEY_DOWN, TOP_KEY_PRESS, TOP_KEY_UP, TOP_MOUSE_DOWN]\n },\n compositionUpdate: {\n phasedRegistrationNames: {\n bubbled: 'onCompositionUpdate',\n captured: 'onCompositionUpdateCapture'\n },\n dependencies: [TOP_BLUR, TOP_COMPOSITION_UPDATE, TOP_KEY_DOWN, TOP_KEY_PRESS, TOP_KEY_UP, TOP_MOUSE_DOWN]\n }\n};\n\n// Track whether we've ever handled a keypress on the space key.\nvar hasSpaceKeypress = false;\n\n/**\n * Return whether a native keypress event is assumed to be a command.\n * This is required because Firefox fires `keypress` events for key commands\n * (cut, copy, select-all, etc.) even though no character is inserted.\n */\nfunction isKeypressCommand(nativeEvent) {\n return (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) &&\n // ctrlKey && altKey is equivalent to AltGr, and is not a command.\n !(nativeEvent.ctrlKey && nativeEvent.altKey);\n}\n\n/**\n * Translate native top level events into event types.\n *\n * @param {string} topLevelType\n * @return {object}\n */\nfunction getCompositionEventType(topLevelType) {\n switch (topLevelType) {\n case TOP_COMPOSITION_START:\n return eventTypes.compositionStart;\n case TOP_COMPOSITION_END:\n return eventTypes.compositionEnd;\n case TOP_COMPOSITION_UPDATE:\n return eventTypes.compositionUpdate;\n }\n}\n\n/**\n * Does our fallback best-guess model think this event signifies that\n * composition has begun?\n *\n * @param {string} topLevelType\n * @param {object} nativeEvent\n * @return {boolean}\n */\nfunction isFallbackCompositionStart(topLevelType, nativeEvent) {\n return topLevelType === TOP_KEY_DOWN && nativeEvent.keyCode === START_KEYCODE;\n}\n\n/**\n * Does our fallback mode think that this event is the end of composition?\n *\n * @param {string} topLevelType\n * @param {object} nativeEvent\n * @return {boolean}\n */\nfunction isFallbackCompositionEnd(topLevelType, nativeEvent) {\n switch (topLevelType) {\n case TOP_KEY_UP:\n // Command keys insert or clear IME input.\n return END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1;\n case TOP_KEY_DOWN:\n // Expect IME keyCode on each keydown. If we get any other\n // code we must have exited earlier.\n return nativeEvent.keyCode !== START_KEYCODE;\n case TOP_KEY_PRESS:\n case TOP_MOUSE_DOWN:\n case TOP_BLUR:\n // Events are not possible without cancelling IME.\n return true;\n default:\n return false;\n }\n}\n\n/**\n * Google Input Tools provides composition data via a CustomEvent,\n * with the `data` property populated in the `detail` object. If this\n * is available on the event object, use it. If not, this is a plain\n * composition event and we have nothing special to extract.\n *\n * @param {object} nativeEvent\n * @return {?string}\n */\nfunction getDataFromCustomEvent(nativeEvent) {\n var detail = nativeEvent.detail;\n if (typeof detail === 'object' && 'data' in detail) {\n return detail.data;\n }\n return null;\n}\n\n/**\n * Check if a composition event was triggered by Korean IME.\n * Our fallback mode does not work well with IE's Korean IME,\n * so just use native composition events when Korean IME is used.\n * Although CompositionEvent.locale property is deprecated,\n * it is available in IE, where our fallback mode is enabled.\n *\n * @param {object} nativeEvent\n * @return {boolean}\n */\nfunction isUsingKoreanIME(nativeEvent) {\n return nativeEvent.locale === 'ko';\n}\n\n// Track the current IME composition status, if any.\nvar isComposing = false;\n\n/**\n * @return {?object} A SyntheticCompositionEvent.\n */\nfunction extractCompositionEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n var eventType = void 0;\n var fallbackData = void 0;\n\n if (canUseCompositionEvent) {\n eventType = getCompositionEventType(topLevelType);\n } else if (!isComposing) {\n if (isFallbackCompositionStart(topLevelType, nativeEvent)) {\n eventType = eventTypes.compositionStart;\n }\n } else if (isFallbackCompositionEnd(topLevelType, nativeEvent)) {\n eventType = eventTypes.compositionEnd;\n }\n\n if (!eventType) {\n return null;\n }\n\n if (useFallbackCompositionData && !isUsingKoreanIME(nativeEvent)) {\n // The current composition is stored statically and must not be\n // overwritten while composition continues.\n if (!isComposing && eventType === eventTypes.compositionStart) {\n isComposing = initialize(nativeEventTarget);\n } else if (eventType === eventTypes.compositionEnd) {\n if (isComposing) {\n fallbackData = getData();\n }\n }\n }\n\n var event = SyntheticCompositionEvent.getPooled(eventType, targetInst, nativeEvent, nativeEventTarget);\n\n if (fallbackData) {\n // Inject data generated from fallback path into the synthetic event.\n // This matches the property of native CompositionEventInterface.\n event.data = fallbackData;\n } else {\n var customData = getDataFromCustomEvent(nativeEvent);\n if (customData !== null) {\n event.data = customData;\n }\n }\n\n accumulateTwoPhaseDispatches(event);\n return event;\n}\n\n/**\n * @param {TopLevelType} topLevelType Number from `TopLevelType`.\n * @param {object} nativeEvent Native browser event.\n * @return {?string} The string corresponding to this `beforeInput` event.\n */\nfunction getNativeBeforeInputChars(topLevelType, nativeEvent) {\n switch (topLevelType) {\n case TOP_COMPOSITION_END:\n return getDataFromCustomEvent(nativeEvent);\n case TOP_KEY_PRESS:\n /**\n * If native `textInput` events are available, our goal is to make\n * use of them. However, there is a special case: the spacebar key.\n * In Webkit, preventing default on a spacebar `textInput` event\n * cancels character insertion, but it *also* causes the browser\n * to fall back to its default spacebar behavior of scrolling the\n * page.\n *\n * Tracking at:\n * https://code.google.com/p/chromium/issues/detail?id=355103\n *\n * To avoid this issue, use the keypress event as if no `textInput`\n * event is available.\n */\n var which = nativeEvent.which;\n if (which !== SPACEBAR_CODE) {\n return null;\n }\n\n hasSpaceKeypress = true;\n return SPACEBAR_CHAR;\n\n case TOP_TEXT_INPUT:\n // Record the characters to be added to the DOM.\n var chars = nativeEvent.data;\n\n // If it's a spacebar character, assume that we have already handled\n // it at the keypress level and bail immediately. Android Chrome\n // doesn't give us keycodes, so we need to ignore it.\n if (chars === SPACEBAR_CHAR && hasSpaceKeypress) {\n return null;\n }\n\n return chars;\n\n default:\n // For other native event types, do nothing.\n return null;\n }\n}\n\n/**\n * For browsers that do not provide the `textInput` event, extract the\n * appropriate string to use for SyntheticInputEvent.\n *\n * @param {number} topLevelType Number from `TopLevelEventTypes`.\n * @param {object} nativeEvent Native browser event.\n * @return {?string} The fallback string for this `beforeInput` event.\n */\nfunction getFallbackBeforeInputChars(topLevelType, nativeEvent) {\n // If we are currently composing (IME) and using a fallback to do so,\n // try to extract the composed characters from the fallback object.\n // If composition event is available, we extract a string only at\n // compositionevent, otherwise extract it at fallback events.\n if (isComposing) {\n if (topLevelType === TOP_COMPOSITION_END || !canUseCompositionEvent && isFallbackCompositionEnd(topLevelType, nativeEvent)) {\n var chars = getData();\n reset();\n isComposing = false;\n return chars;\n }\n return null;\n }\n\n switch (topLevelType) {\n case TOP_PASTE:\n // If a paste event occurs after a keypress, throw out the input\n // chars. Paste events should not lead to BeforeInput events.\n return null;\n case TOP_KEY_PRESS:\n /**\n * As of v27, Firefox may fire keypress events even when no character\n * will be inserted. A few possibilities:\n *\n * - `which` is `0`. Arrow keys, Esc key, etc.\n *\n * - `which` is the pressed key code, but no char is available.\n * Ex: 'AltGr + d` in Polish. There is no modified character for\n * this key combination and no character is inserted into the\n * document, but FF fires the keypress for char code `100` anyway.\n * No `input` event will occur.\n *\n * - `which` is the pressed key code, but a command combination is\n * being used. Ex: `Cmd+C`. No character is inserted, and no\n * `input` event will occur.\n */\n if (!isKeypressCommand(nativeEvent)) {\n // IE fires the `keypress` event when a user types an emoji via\n // Touch keyboard of Windows. In such a case, the `char` property\n // holds an emoji character like `\\uD83D\\uDE0A`. Because its length\n // is 2, the property `which` does not represent an emoji correctly.\n // In such a case, we directly return the `char` property instead of\n // using `which`.\n if (nativeEvent.char && nativeEvent.char.length > 1) {\n return nativeEvent.char;\n } else if (nativeEvent.which) {\n return String.fromCharCode(nativeEvent.which);\n }\n }\n return null;\n case TOP_COMPOSITION_END:\n return useFallbackCompositionData && !isUsingKoreanIME(nativeEvent) ? null : nativeEvent.data;\n default:\n return null;\n }\n}\n\n/**\n * Extract a SyntheticInputEvent for `beforeInput`, based on either native\n * `textInput` or fallback behavior.\n *\n * @return {?object} A SyntheticInputEvent.\n */\nfunction extractBeforeInputEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n var chars = void 0;\n\n if (canUseTextInputEvent) {\n chars = getNativeBeforeInputChars(topLevelType, nativeEvent);\n } else {\n chars = getFallbackBeforeInputChars(topLevelType, nativeEvent);\n }\n\n // If no characters are being inserted, no BeforeInput event should\n // be fired.\n if (!chars) {\n return null;\n }\n\n var event = SyntheticInputEvent.getPooled(eventTypes.beforeInput, targetInst, nativeEvent, nativeEventTarget);\n\n event.data = chars;\n accumulateTwoPhaseDispatches(event);\n return event;\n}\n\n/**\n * Create an `onBeforeInput` event to match\n * http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents.\n *\n * This event plugin is based on the native `textInput` event\n * available in Chrome, Safari, Opera, and IE. This event fires after\n * `onKeyPress` and `onCompositionEnd`, but before `onInput`.\n *\n * `beforeInput` is spec'd but not implemented in any browsers, and\n * the `input` event does not provide any useful information about what has\n * actually been added, contrary to the spec. Thus, `textInput` is the best\n * available event to identify the characters that have actually been inserted\n * into the target node.\n *\n * This plugin is also responsible for emitting `composition` events, thus\n * allowing us to share composition fallback code for both `beforeInput` and\n * `composition` event types.\n */\nvar BeforeInputEventPlugin = {\n eventTypes: eventTypes,\n\n extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n var composition = extractCompositionEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget);\n\n var beforeInput = extractBeforeInputEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget);\n\n if (composition === null) {\n return beforeInput;\n }\n\n if (beforeInput === null) {\n return composition;\n }\n\n return [composition, beforeInput];\n }\n};\n\n// Use to restore controlled state after a change event has fired.\n\nvar restoreImpl = null;\nvar restoreTarget = null;\nvar restoreQueue = null;\n\nfunction restoreStateOfTarget(target) {\n // We perform this translation at the end of the event loop so that we\n // always receive the correct fiber here\n var internalInstance = getInstanceFromNode(target);\n if (!internalInstance) {\n // Unmounted\n return;\n }\n !(typeof restoreImpl === 'function') ? invariant(false, 'setRestoreImplementation() needs to be called to handle a target for controlled events. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n var props = getFiberCurrentPropsFromNode(internalInstance.stateNode);\n restoreImpl(internalInstance.stateNode, internalInstance.type, props);\n}\n\nfunction setRestoreImplementation(impl) {\n restoreImpl = impl;\n}\n\nfunction enqueueStateRestore(target) {\n if (restoreTarget) {\n if (restoreQueue) {\n restoreQueue.push(target);\n } else {\n restoreQueue = [target];\n }\n } else {\n restoreTarget = target;\n }\n}\n\nfunction needsStateRestore() {\n return restoreTarget !== null || restoreQueue !== null;\n}\n\nfunction restoreStateIfNeeded() {\n if (!restoreTarget) {\n return;\n }\n var target = restoreTarget;\n var queuedTargets = restoreQueue;\n restoreTarget = null;\n restoreQueue = null;\n\n restoreStateOfTarget(target);\n if (queuedTargets) {\n for (var i = 0; i < queuedTargets.length; i++) {\n restoreStateOfTarget(queuedTargets[i]);\n }\n }\n}\n\n// Used as a way to call batchedUpdates when we don't have a reference to\n// the renderer. Such as when we're dispatching events or if third party\n// libraries need to call batchedUpdates. Eventually, this API will go away when\n// everything is batched by default. We'll then have a similar API to opt-out of\n// scheduled work and instead do synchronous work.\n\n// Defaults\nvar _batchedUpdatesImpl = function (fn, bookkeeping) {\n return fn(bookkeeping);\n};\nvar _interactiveUpdatesImpl = function (fn, a, b) {\n return fn(a, b);\n};\nvar _flushInteractiveUpdatesImpl = function () {};\n\nvar isBatching = false;\nfunction batchedUpdates(fn, bookkeeping) {\n if (isBatching) {\n // If we are currently inside another batch, we need to wait until it\n // fully completes before restoring state.\n return fn(bookkeeping);\n }\n isBatching = true;\n try {\n return _batchedUpdatesImpl(fn, bookkeeping);\n } finally {\n // Here we wait until all updates have propagated, which is important\n // when using controlled components within layers:\n // https://github.com/facebook/react/issues/1698\n // Then we restore state of any controlled component.\n isBatching = false;\n var controlledComponentsHavePendingUpdates = needsStateRestore();\n if (controlledComponentsHavePendingUpdates) {\n // If a controlled event was fired, we may need to restore the state of\n // the DOM node back to the controlled value. This is necessary when React\n // bails out of the update without touching the DOM.\n _flushInteractiveUpdatesImpl();\n restoreStateIfNeeded();\n }\n }\n}\n\nfunction interactiveUpdates(fn, a, b) {\n return _interactiveUpdatesImpl(fn, a, b);\n}\n\n\n\nfunction setBatchingImplementation(batchedUpdatesImpl, interactiveUpdatesImpl, flushInteractiveUpdatesImpl) {\n _batchedUpdatesImpl = batchedUpdatesImpl;\n _interactiveUpdatesImpl = interactiveUpdatesImpl;\n _flushInteractiveUpdatesImpl = flushInteractiveUpdatesImpl;\n}\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary\n */\nvar supportedInputTypes = {\n color: true,\n date: true,\n datetime: true,\n 'datetime-local': true,\n email: true,\n month: true,\n number: true,\n password: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true\n};\n\nfunction isTextInputElement(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n\n if (nodeName === 'input') {\n return !!supportedInputTypes[elem.type];\n }\n\n if (nodeName === 'textarea') {\n return true;\n }\n\n return false;\n}\n\n/**\n * HTML nodeType values that represent the type of the node\n */\n\nvar ELEMENT_NODE = 1;\nvar TEXT_NODE = 3;\nvar COMMENT_NODE = 8;\nvar DOCUMENT_NODE = 9;\nvar DOCUMENT_FRAGMENT_NODE = 11;\n\n/**\n * Gets the target node from a native browser event by accounting for\n * inconsistencies in browser DOM APIs.\n *\n * @param {object} nativeEvent Native browser event.\n * @return {DOMEventTarget} Target node.\n */\nfunction getEventTarget(nativeEvent) {\n // Fallback to nativeEvent.srcElement for IE9\n // https://github.com/facebook/react/issues/12506\n var target = nativeEvent.target || nativeEvent.srcElement || window;\n\n // Normalize SVG <use> element events #4963\n if (target.correspondingUseElement) {\n target = target.correspondingUseElement;\n }\n\n // Safari may fire events on text nodes (Node.TEXT_NODE is 3).\n // @see http://www.quirksmode.org/js/events_properties.html\n return target.nodeType === TEXT_NODE ? target.parentNode : target;\n}\n\n/**\n * Checks if an event is supported in the current execution environment.\n *\n * NOTE: This will not work correctly for non-generic events such as `change`,\n * `reset`, `load`, `error`, and `select`.\n *\n * Borrows from Modernizr.\n *\n * @param {string} eventNameSuffix Event name, e.g. \"click\".\n * @return {boolean} True if the event is supported.\n * @internal\n * @license Modernizr 3.0.0pre (Custom Build) | MIT\n */\nfunction isEventSupported(eventNameSuffix) {\n if (!canUseDOM) {\n return false;\n }\n\n var eventName = 'on' + eventNameSuffix;\n var isSupported = eventName in document;\n\n if (!isSupported) {\n var element = document.createElement('div');\n element.setAttribute(eventName, 'return;');\n isSupported = typeof element[eventName] === 'function';\n }\n\n return isSupported;\n}\n\nfunction isCheckable(elem) {\n var type = elem.type;\n var nodeName = elem.nodeName;\n return nodeName && nodeName.toLowerCase() === 'input' && (type === 'checkbox' || type === 'radio');\n}\n\nfunction getTracker(node) {\n return node._valueTracker;\n}\n\nfunction detachTracker(node) {\n node._valueTracker = null;\n}\n\nfunction getValueFromNode(node) {\n var value = '';\n if (!node) {\n return value;\n }\n\n if (isCheckable(node)) {\n value = node.checked ? 'true' : 'false';\n } else {\n value = node.value;\n }\n\n return value;\n}\n\nfunction trackValueOnNode(node) {\n var valueField = isCheckable(node) ? 'checked' : 'value';\n var descriptor = Object.getOwnPropertyDescriptor(node.constructor.prototype, valueField);\n\n var currentValue = '' + node[valueField];\n\n // if someone has already defined a value or Safari, then bail\n // and don't track value will cause over reporting of changes,\n // but it's better then a hard failure\n // (needed for certain tests that spyOn input values and Safari)\n if (node.hasOwnProperty(valueField) || typeof descriptor === 'undefined' || typeof descriptor.get !== 'function' || typeof descriptor.set !== 'function') {\n return;\n }\n var get = descriptor.get,\n set = descriptor.set;\n\n Object.defineProperty(node, valueField, {\n configurable: true,\n get: function () {\n return get.call(this);\n },\n set: function (value) {\n currentValue = '' + value;\n set.call(this, value);\n }\n });\n // We could've passed this the first time\n // but it triggers a bug in IE11 and Edge 14/15.\n // Calling defineProperty() again should be equivalent.\n // https://github.com/facebook/react/issues/11768\n Object.defineProperty(node, valueField, {\n enumerable: descriptor.enumerable\n });\n\n var tracker = {\n getValue: function () {\n return currentValue;\n },\n setValue: function (value) {\n currentValue = '' + value;\n },\n stopTracking: function () {\n detachTracker(node);\n delete node[valueField];\n }\n };\n return tracker;\n}\n\nfunction track(node) {\n if (getTracker(node)) {\n return;\n }\n\n // TODO: Once it's just Fiber we can move this to node._wrapperState\n node._valueTracker = trackValueOnNode(node);\n}\n\nfunction updateValueIfChanged(node) {\n if (!node) {\n return false;\n }\n\n var tracker = getTracker(node);\n // if there is no tracker at this point it's unlikely\n // that trying again will succeed\n if (!tracker) {\n return true;\n }\n\n var lastValue = tracker.getValue();\n var nextValue = getValueFromNode(node);\n if (nextValue !== lastValue) {\n tracker.setValue(nextValue);\n return true;\n }\n return false;\n}\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\n// Prevent newer renderers from RTE when used with older react package versions.\n// Current owner and dispatcher used to share the same ref,\n// but PR #14548 split them out to better support the react-debug-tools package.\nif (!ReactSharedInternals.hasOwnProperty('ReactCurrentDispatcher')) {\n ReactSharedInternals.ReactCurrentDispatcher = {\n current: null\n };\n}\n\nvar BEFORE_SLASH_RE = /^(.*)[\\\\\\/]/;\n\nvar describeComponentFrame = function (name, source, ownerName) {\n var sourceInfo = '';\n if (source) {\n var path = source.fileName;\n var fileName = path.replace(BEFORE_SLASH_RE, '');\n {\n // In DEV, include code for a common special case:\n // prefer \"folder/index.js\" instead of just \"index.js\".\n if (/^index\\./.test(fileName)) {\n var match = path.match(BEFORE_SLASH_RE);\n if (match) {\n var pathBeforeSlash = match[1];\n if (pathBeforeSlash) {\n var folderName = pathBeforeSlash.replace(BEFORE_SLASH_RE, '');\n fileName = folderName + '/' + fileName;\n }\n }\n }\n }\n sourceInfo = ' (at ' + fileName + ':' + source.lineNumber + ')';\n } else if (ownerName) {\n sourceInfo = ' (created by ' + ownerName + ')';\n }\n return '\\n in ' + (name || 'Unknown') + sourceInfo;\n};\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\n\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace;\n\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\n\nvar MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\n\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n return null;\n}\n\nvar Pending = 0;\nvar Resolved = 1;\nvar Rejected = 2;\n\nfunction refineResolvedLazyComponent(lazyComponent) {\n return lazyComponent._status === Resolved ? lazyComponent._result : null;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var functionName = innerType.displayName || innerType.name || '';\n return outerType.displayName || (functionName !== '' ? wrapperName + '(' + functionName + ')' : wrapperName);\n}\n\nfunction getComponentName(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n {\n if (typeof type.tag === 'number') {\n warningWithoutStack$1(false, 'Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n if (typeof type === 'function') {\n return type.displayName || type.name || null;\n }\n if (typeof type === 'string') {\n return type;\n }\n switch (type) {\n case REACT_CONCURRENT_MODE_TYPE:\n return 'ConcurrentMode';\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n case REACT_PORTAL_TYPE:\n return 'Portal';\n case REACT_PROFILER_TYPE:\n return 'Profiler';\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n }\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n return 'Context.Consumer';\n case REACT_PROVIDER_TYPE:\n return 'Context.Provider';\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n case REACT_MEMO_TYPE:\n return getComponentName(type.type);\n case REACT_LAZY_TYPE:\n {\n var thenable = type;\n var resolvedThenable = refineResolvedLazyComponent(thenable);\n if (resolvedThenable) {\n return getComponentName(resolvedThenable);\n }\n }\n }\n }\n return null;\n}\n\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction describeFiber(fiber) {\n switch (fiber.tag) {\n case HostRoot:\n case HostPortal:\n case HostText:\n case Fragment:\n case ContextProvider:\n case ContextConsumer:\n return '';\n default:\n var owner = fiber._debugOwner;\n var source = fiber._debugSource;\n var name = getComponentName(fiber.type);\n var ownerName = null;\n if (owner) {\n ownerName = getComponentName(owner.type);\n }\n return describeComponentFrame(name, source, ownerName);\n }\n}\n\nfunction getStackByFiberInDevAndProd(workInProgress) {\n var info = '';\n var node = workInProgress;\n do {\n info += describeFiber(node);\n node = node.return;\n } while (node);\n return info;\n}\n\nvar current = null;\nvar phase = null;\n\nfunction getCurrentFiberOwnerNameInDevOrNull() {\n {\n if (current === null) {\n return null;\n }\n var owner = current._debugOwner;\n if (owner !== null && typeof owner !== 'undefined') {\n return getComponentName(owner.type);\n }\n }\n return null;\n}\n\nfunction getCurrentFiberStackInDev() {\n {\n if (current === null) {\n return '';\n }\n // Safe because if current fiber exists, we are reconciling,\n // and it is guaranteed to be the work-in-progress version.\n return getStackByFiberInDevAndProd(current);\n }\n return '';\n}\n\nfunction resetCurrentFiber() {\n {\n ReactDebugCurrentFrame.getCurrentStack = null;\n current = null;\n phase = null;\n }\n}\n\nfunction setCurrentFiber(fiber) {\n {\n ReactDebugCurrentFrame.getCurrentStack = getCurrentFiberStackInDev;\n current = fiber;\n phase = null;\n }\n}\n\nfunction setCurrentPhase(lifeCyclePhase) {\n {\n phase = lifeCyclePhase;\n }\n}\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = warningWithoutStack$1;\n\n{\n warning = function (condition, format) {\n if (condition) {\n return;\n }\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n // eslint-disable-next-line react-internal/warning-and-invariant-args\n\n for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n warningWithoutStack$1.apply(undefined, [false, format + '%s'].concat(args, [stack]));\n };\n}\n\nvar warning$1 = warning;\n\n// A reserved attribute.\n// It is handled by React separately and shouldn't be written to the DOM.\nvar RESERVED = 0;\n\n// A simple string attribute.\n// Attributes that aren't in the whitelist are presumed to have this type.\nvar STRING = 1;\n\n// A string attribute that accepts booleans in React. In HTML, these are called\n// \"enumerated\" attributes with \"true\" and \"false\" as possible values.\n// When true, it should be set to a \"true\" string.\n// When false, it should be set to a \"false\" string.\nvar BOOLEANISH_STRING = 2;\n\n// A real boolean attribute.\n// When true, it should be present (set either to an empty string or its name).\n// When false, it should be omitted.\nvar BOOLEAN = 3;\n\n// An attribute that can be used as a flag as well as with a value.\n// When true, it should be present (set either to an empty string or its name).\n// When false, it should be omitted.\n// For any other value, should be present with that value.\nvar OVERLOADED_BOOLEAN = 4;\n\n// An attribute that must be numeric or parse as a numeric.\n// When falsy, it should be removed.\nvar NUMERIC = 5;\n\n// An attribute that must be positive numeric or parse as a positive numeric.\n// When falsy, it should be removed.\nvar POSITIVE_NUMERIC = 6;\n\n/* eslint-disable max-len */\nvar ATTRIBUTE_NAME_START_CHAR = ':A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD';\n/* eslint-enable max-len */\nvar ATTRIBUTE_NAME_CHAR = ATTRIBUTE_NAME_START_CHAR + '\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040';\n\n\nvar ROOT_ATTRIBUTE_NAME = 'data-reactroot';\nvar VALID_ATTRIBUTE_NAME_REGEX = new RegExp('^[' + ATTRIBUTE_NAME_START_CHAR + '][' + ATTRIBUTE_NAME_CHAR + ']*$');\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar illegalAttributeNameCache = {};\nvar validatedAttributeNameCache = {};\n\nfunction isAttributeNameSafe(attributeName) {\n if (hasOwnProperty.call(validatedAttributeNameCache, attributeName)) {\n return true;\n }\n if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) {\n return false;\n }\n if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {\n validatedAttributeNameCache[attributeName] = true;\n return true;\n }\n illegalAttributeNameCache[attributeName] = true;\n {\n warning$1(false, 'Invalid attribute name: `%s`', attributeName);\n }\n return false;\n}\n\nfunction shouldIgnoreAttribute(name, propertyInfo, isCustomComponentTag) {\n if (propertyInfo !== null) {\n return propertyInfo.type === RESERVED;\n }\n if (isCustomComponentTag) {\n return false;\n }\n if (name.length > 2 && (name[0] === 'o' || name[0] === 'O') && (name[1] === 'n' || name[1] === 'N')) {\n return true;\n }\n return false;\n}\n\nfunction shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag) {\n if (propertyInfo !== null && propertyInfo.type === RESERVED) {\n return false;\n }\n switch (typeof value) {\n case 'function':\n // $FlowIssue symbol is perfectly valid here\n case 'symbol':\n // eslint-disable-line\n return true;\n case 'boolean':\n {\n if (isCustomComponentTag) {\n return false;\n }\n if (propertyInfo !== null) {\n return !propertyInfo.acceptsBooleans;\n } else {\n var prefix = name.toLowerCase().slice(0, 5);\n return prefix !== 'data-' && prefix !== 'aria-';\n }\n }\n default:\n return false;\n }\n}\n\nfunction shouldRemoveAttribute(name, value, propertyInfo, isCustomComponentTag) {\n if (value === null || typeof value === 'undefined') {\n return true;\n }\n if (shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag)) {\n return true;\n }\n if (isCustomComponentTag) {\n return false;\n }\n if (propertyInfo !== null) {\n switch (propertyInfo.type) {\n case BOOLEAN:\n return !value;\n case OVERLOADED_BOOLEAN:\n return value === false;\n case NUMERIC:\n return isNaN(value);\n case POSITIVE_NUMERIC:\n return isNaN(value) || value < 1;\n }\n }\n return false;\n}\n\nfunction getPropertyInfo(name) {\n return properties.hasOwnProperty(name) ? properties[name] : null;\n}\n\nfunction PropertyInfoRecord(name, type, mustUseProperty, attributeName, attributeNamespace) {\n this.acceptsBooleans = type === BOOLEANISH_STRING || type === BOOLEAN || type === OVERLOADED_BOOLEAN;\n this.attributeName = attributeName;\n this.attributeNamespace = attributeNamespace;\n this.mustUseProperty = mustUseProperty;\n this.propertyName = name;\n this.type = type;\n}\n\n// When adding attributes to this list, be sure to also add them to\n// the `possibleStandardNames` module to ensure casing and incorrect\n// name warnings.\nvar properties = {};\n\n// These props are reserved by React. They shouldn't be written to the DOM.\n['children', 'dangerouslySetInnerHTML',\n// TODO: This prevents the assignment of defaultValue to regular\n// elements (not just inputs). Now that ReactDOMInput assigns to the\n// defaultValue property -- do we need this?\n'defaultValue', 'defaultChecked', 'innerHTML', 'suppressContentEditableWarning', 'suppressHydrationWarning', 'style'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, RESERVED, false, // mustUseProperty\n name, // attributeName\n null);\n} // attributeNamespace\n);\n\n// A few React string attributes have a different name.\n// This is a mapping from React prop names to the attribute names.\n[['acceptCharset', 'accept-charset'], ['className', 'class'], ['htmlFor', 'for'], ['httpEquiv', 'http-equiv']].forEach(function (_ref) {\n var name = _ref[0],\n attributeName = _ref[1];\n\n properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n attributeName, // attributeName\n null);\n} // attributeNamespace\n);\n\n// These are \"enumerated\" HTML attributes that accept \"true\" and \"false\".\n// In React, we let users pass `true` and `false` even though technically\n// these aren't boolean attributes (they are coerced to strings).\n['contentEditable', 'draggable', 'spellCheck', 'value'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty\n name.toLowerCase(), // attributeName\n null);\n} // attributeNamespace\n);\n\n// These are \"enumerated\" SVG attributes that accept \"true\" and \"false\".\n// In React, we let users pass `true` and `false` even though technically\n// these aren't boolean attributes (they are coerced to strings).\n// Since these are SVG attributes, their attribute names are case-sensitive.\n['autoReverse', 'externalResourcesRequired', 'focusable', 'preserveAlpha'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty\n name, // attributeName\n null);\n} // attributeNamespace\n);\n\n// These are HTML boolean attributes.\n['allowFullScreen', 'async',\n// Note: there is a special case that prevents it from being written to the DOM\n// on the client side because the browsers are inconsistent. Instead we call focus().\n'autoFocus', 'autoPlay', 'controls', 'default', 'defer', 'disabled', 'formNoValidate', 'hidden', 'loop', 'noModule', 'noValidate', 'open', 'playsInline', 'readOnly', 'required', 'reversed', 'scoped', 'seamless',\n// Microdata\n'itemScope'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, BOOLEAN, false, // mustUseProperty\n name.toLowerCase(), // attributeName\n null);\n} // attributeNamespace\n);\n\n// These are the few React props that we set as DOM properties\n// rather than attributes. These are all booleans.\n['checked',\n// Note: `option.selected` is not updated if `select.multiple` is\n// disabled with `removeAttribute`. We have special logic for handling this.\n'multiple', 'muted', 'selected'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, BOOLEAN, true, // mustUseProperty\n name, // attributeName\n null);\n} // attributeNamespace\n);\n\n// These are HTML attributes that are \"overloaded booleans\": they behave like\n// booleans, but can also accept a string value.\n['capture', 'download'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, OVERLOADED_BOOLEAN, false, // mustUseProperty\n name, // attributeName\n null);\n} // attributeNamespace\n);\n\n// These are HTML attributes that must be positive numbers.\n['cols', 'rows', 'size', 'span'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, POSITIVE_NUMERIC, false, // mustUseProperty\n name, // attributeName\n null);\n} // attributeNamespace\n);\n\n// These are HTML attributes that must be numbers.\n['rowSpan', 'start'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, NUMERIC, false, // mustUseProperty\n name.toLowerCase(), // attributeName\n null);\n} // attributeNamespace\n);\n\nvar CAMELIZE = /[\\-\\:]([a-z])/g;\nvar capitalize = function (token) {\n return token[1].toUpperCase();\n};\n\n// This is a list of all SVG attributes that need special casing, namespacing,\n// or boolean value assignment. Regular attributes that just accept strings\n// and have the same names are omitted, just like in the HTML whitelist.\n// Some of these attributes can be hard to find. This list was created by\n// scrapping the MDN documentation.\n['accent-height', 'alignment-baseline', 'arabic-form', 'baseline-shift', 'cap-height', 'clip-path', 'clip-rule', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'dominant-baseline', 'enable-background', 'fill-opacity', 'fill-rule', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'glyph-name', 'glyph-orientation-horizontal', 'glyph-orientation-vertical', 'horiz-adv-x', 'horiz-origin-x', 'image-rendering', 'letter-spacing', 'lighting-color', 'marker-end', 'marker-mid', 'marker-start', 'overline-position', 'overline-thickness', 'paint-order', 'panose-1', 'pointer-events', 'rendering-intent', 'shape-rendering', 'stop-color', 'stop-opacity', 'strikethrough-position', 'strikethrough-thickness', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'text-anchor', 'text-decoration', 'text-rendering', 'underline-position', 'underline-thickness', 'unicode-bidi', 'unicode-range', 'units-per-em', 'v-alphabetic', 'v-hanging', 'v-ideographic', 'v-mathematical', 'vector-effect', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'word-spacing', 'writing-mode', 'xmlns:xlink', 'x-height'].forEach(function (attributeName) {\n var name = attributeName.replace(CAMELIZE, capitalize);\n properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n attributeName, null);\n} // attributeNamespace\n);\n\n// String SVG attributes with the xlink namespace.\n['xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type'].forEach(function (attributeName) {\n var name = attributeName.replace(CAMELIZE, capitalize);\n properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n attributeName, 'http://www.w3.org/1999/xlink');\n});\n\n// String SVG attributes with the xml namespace.\n['xml:base', 'xml:lang', 'xml:space'].forEach(function (attributeName) {\n var name = attributeName.replace(CAMELIZE, capitalize);\n properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n attributeName, 'http://www.w3.org/XML/1998/namespace');\n});\n\n// These attribute exists both in HTML and SVG.\n// The attribute name is case-sensitive in SVG so we can't just use\n// the React name like we do for attributes that exist only in HTML.\n['tabIndex', 'crossOrigin'].forEach(function (attributeName) {\n properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty\n attributeName.toLowerCase(), // attributeName\n null);\n} // attributeNamespace\n);\n\n/**\n * Get the value for a property on a node. Only used in DEV for SSR validation.\n * The \"expected\" argument is used as a hint of what the expected value is.\n * Some properties have multiple equivalent values.\n */\nfunction getValueForProperty(node, name, expected, propertyInfo) {\n {\n if (propertyInfo.mustUseProperty) {\n var propertyName = propertyInfo.propertyName;\n\n return node[propertyName];\n } else {\n var attributeName = propertyInfo.attributeName;\n\n var stringValue = null;\n\n if (propertyInfo.type === OVERLOADED_BOOLEAN) {\n if (node.hasAttribute(attributeName)) {\n var value = node.getAttribute(attributeName);\n if (value === '') {\n return true;\n }\n if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {\n return value;\n }\n if (value === '' + expected) {\n return expected;\n }\n return value;\n }\n } else if (node.hasAttribute(attributeName)) {\n if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {\n // We had an attribute but shouldn't have had one, so read it\n // for the error message.\n return node.getAttribute(attributeName);\n }\n if (propertyInfo.type === BOOLEAN) {\n // If this was a boolean, it doesn't matter what the value is\n // the fact that we have it is the same as the expected.\n return expected;\n }\n // Even if this property uses a namespace we use getAttribute\n // because we assume its namespaced name is the same as our config.\n // To use getAttributeNS we need the local name which we don't have\n // in our config atm.\n stringValue = node.getAttribute(attributeName);\n }\n\n if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {\n return stringValue === null ? expected : stringValue;\n } else if (stringValue === '' + expected) {\n return expected;\n } else {\n return stringValue;\n }\n }\n }\n}\n\n/**\n * Get the value for a attribute on a node. Only used in DEV for SSR validation.\n * The third argument is used as a hint of what the expected value is. Some\n * attributes have multiple equivalent values.\n */\nfunction getValueForAttribute(node, name, expected) {\n {\n if (!isAttributeNameSafe(name)) {\n return;\n }\n if (!node.hasAttribute(name)) {\n return expected === undefined ? undefined : null;\n }\n var value = node.getAttribute(name);\n if (value === '' + expected) {\n return expected;\n }\n return value;\n }\n}\n\n/**\n * Sets the value for a property on a node.\n *\n * @param {DOMElement} node\n * @param {string} name\n * @param {*} value\n */\nfunction setValueForProperty(node, name, value, isCustomComponentTag) {\n var propertyInfo = getPropertyInfo(name);\n if (shouldIgnoreAttribute(name, propertyInfo, isCustomComponentTag)) {\n return;\n }\n if (shouldRemoveAttribute(name, value, propertyInfo, isCustomComponentTag)) {\n value = null;\n }\n // If the prop isn't in the special list, treat it as a simple attribute.\n if (isCustomComponentTag || propertyInfo === null) {\n if (isAttributeNameSafe(name)) {\n var _attributeName = name;\n if (value === null) {\n node.removeAttribute(_attributeName);\n } else {\n node.setAttribute(_attributeName, '' + value);\n }\n }\n return;\n }\n var mustUseProperty = propertyInfo.mustUseProperty;\n\n if (mustUseProperty) {\n var propertyName = propertyInfo.propertyName;\n\n if (value === null) {\n var type = propertyInfo.type;\n\n node[propertyName] = type === BOOLEAN ? false : '';\n } else {\n // Contrary to `setAttribute`, object properties are properly\n // `toString`ed by IE8/9.\n node[propertyName] = value;\n }\n return;\n }\n // The rest are treated as attributes with special cases.\n var attributeName = propertyInfo.attributeName,\n attributeNamespace = propertyInfo.attributeNamespace;\n\n if (value === null) {\n node.removeAttribute(attributeName);\n } else {\n var _type = propertyInfo.type;\n\n var attributeValue = void 0;\n if (_type === BOOLEAN || _type === OVERLOADED_BOOLEAN && value === true) {\n attributeValue = '';\n } else {\n // `setAttribute` with objects becomes only `[object]` in IE8/9,\n // ('' + value) makes it output the correct toString()-value.\n attributeValue = '' + value;\n }\n if (attributeNamespace) {\n node.setAttributeNS(attributeNamespace, attributeName, attributeValue);\n } else {\n node.setAttribute(attributeName, attributeValue);\n }\n }\n}\n\n// Flow does not allow string concatenation of most non-string types. To work\n// around this limitation, we use an opaque type that can only be obtained by\n// passing the value through getToStringValue first.\nfunction toString(value) {\n return '' + value;\n}\n\nfunction getToStringValue(value) {\n switch (typeof value) {\n case 'boolean':\n case 'number':\n case 'object':\n case 'string':\n case 'undefined':\n return value;\n default:\n // function, symbol are assigned as empty strings\n return '';\n }\n}\n\nvar ReactDebugCurrentFrame$1 = null;\n\nvar ReactControlledValuePropTypes = {\n checkPropTypes: null\n};\n\n{\n ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\n var hasReadOnlyValue = {\n button: true,\n checkbox: true,\n image: true,\n hidden: true,\n radio: true,\n reset: true,\n submit: true\n };\n\n var propTypes = {\n value: function (props, propName, componentName) {\n if (hasReadOnlyValue[props.type] || props.onChange || props.readOnly || props.disabled || props[propName] == null) {\n return null;\n }\n return new Error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n },\n checked: function (props, propName, componentName) {\n if (props.onChange || props.readOnly || props.disabled || props[propName] == null) {\n return null;\n }\n return new Error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n }\n };\n\n /**\n * Provide a linked `value` attribute for controlled forms. You should not use\n * this outside of the ReactDOM controlled form components.\n */\n ReactControlledValuePropTypes.checkPropTypes = function (tagName, props) {\n checkPropTypes(propTypes, props, 'prop', tagName, ReactDebugCurrentFrame$1.getStackAddendum);\n };\n}\n\nvar enableUserTimingAPI = true;\n\n// Helps identify side effects in begin-phase lifecycle hooks and setState reducers:\nvar debugRenderPhaseSideEffects = false;\n\n// In some cases, StrictMode should also double-render lifecycles.\n// This can be confusing for tests though,\n// And it can be bad for performance in production.\n// This feature flag can be used to control the behavior:\nvar debugRenderPhaseSideEffectsForStrictMode = true;\n\n// To preserve the \"Pause on caught exceptions\" behavior of the debugger, we\n// replay the begin phase of a failed component inside invokeGuardedCallback.\nvar replayFailedUnitOfWorkWithInvokeGuardedCallback = true;\n\n// Warn about deprecated, async-unsafe lifecycles; relates to RFC #6:\nvar warnAboutDeprecatedLifecycles = false;\n\n// Gather advanced timing metrics for Profiler subtrees.\nvar enableProfilerTimer = true;\n\n// Trace which interactions trigger each commit.\nvar enableSchedulerTracing = true;\n\n// Only used in www builds.\nvar enableSuspenseServerRenderer = false; // TODO: true? Here it might just be false.\n\n// Only used in www builds.\n\n\n// Only used in www builds.\n\n\n// React Fire: prevent the value and checked attributes from syncing\n// with their related DOM properties\nvar disableInputAttributeSyncing = false;\n\n// These APIs will no longer be \"unstable\" in the upcoming 16.7 release,\n// Control this behavior with a flag to support 16.6 minor releases in the meanwhile.\nvar enableStableConcurrentModeAPIs = false;\n\nvar warnAboutShorthandPropertyCollision = false;\n\n// TODO: direct imports like some-package/src/* are bad. Fix me.\nvar didWarnValueDefaultValue = false;\nvar didWarnCheckedDefaultChecked = false;\nvar didWarnControlledToUncontrolled = false;\nvar didWarnUncontrolledToControlled = false;\n\nfunction isControlled(props) {\n var usesChecked = props.type === 'checkbox' || props.type === 'radio';\n return usesChecked ? props.checked != null : props.value != null;\n}\n\n/**\n * Implements an <input> host component that allows setting these optional\n * props: `checked`, `value`, `defaultChecked`, and `defaultValue`.\n *\n * If `checked` or `value` are not supplied (or null/undefined), user actions\n * that affect the checked state or value will trigger updates to the element.\n *\n * If they are supplied (and not null/undefined), the rendered element will not\n * trigger updates to the element. Instead, the props must change in order for\n * the rendered element to be updated.\n *\n * The rendered element will be initialized as unchecked (or `defaultChecked`)\n * with an empty value (or `defaultValue`).\n *\n * See http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html\n */\n\nfunction getHostProps(element, props) {\n var node = element;\n var checked = props.checked;\n\n var hostProps = _assign({}, props, {\n defaultChecked: undefined,\n defaultValue: undefined,\n value: undefined,\n checked: checked != null ? checked : node._wrapperState.initialChecked\n });\n\n return hostProps;\n}\n\nfunction initWrapperState(element, props) {\n {\n ReactControlledValuePropTypes.checkPropTypes('input', props);\n\n if (props.checked !== undefined && props.defaultChecked !== undefined && !didWarnCheckedDefaultChecked) {\n warning$1(false, '%s contains an input of type %s with both checked and defaultChecked props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the checked prop, or the defaultChecked prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component', props.type);\n didWarnCheckedDefaultChecked = true;\n }\n if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue) {\n warning$1(false, '%s contains an input of type %s with both value and defaultValue props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component', props.type);\n didWarnValueDefaultValue = true;\n }\n }\n\n var node = element;\n var defaultValue = props.defaultValue == null ? '' : props.defaultValue;\n\n node._wrapperState = {\n initialChecked: props.checked != null ? props.checked : props.defaultChecked,\n initialValue: getToStringValue(props.value != null ? props.value : defaultValue),\n controlled: isControlled(props)\n };\n}\n\nfunction updateChecked(element, props) {\n var node = element;\n var checked = props.checked;\n if (checked != null) {\n setValueForProperty(node, 'checked', checked, false);\n }\n}\n\nfunction updateWrapper(element, props) {\n var node = element;\n {\n var _controlled = isControlled(props);\n\n if (!node._wrapperState.controlled && _controlled && !didWarnUncontrolledToControlled) {\n warning$1(false, 'A component is changing an uncontrolled input of type %s to be controlled. ' + 'Input elements should not switch from uncontrolled to controlled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components', props.type);\n didWarnUncontrolledToControlled = true;\n }\n if (node._wrapperState.controlled && !_controlled && !didWarnControlledToUncontrolled) {\n warning$1(false, 'A component is changing a controlled input of type %s to be uncontrolled. ' + 'Input elements should not switch from controlled to uncontrolled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components', props.type);\n didWarnControlledToUncontrolled = true;\n }\n }\n\n updateChecked(element, props);\n\n var value = getToStringValue(props.value);\n var type = props.type;\n\n if (value != null) {\n if (type === 'number') {\n if (value === 0 && node.value === '' ||\n // We explicitly want to coerce to number here if possible.\n // eslint-disable-next-line\n node.value != value) {\n node.value = toString(value);\n }\n } else if (node.value !== toString(value)) {\n node.value = toString(value);\n }\n } else if (type === 'submit' || type === 'reset') {\n // Submit/reset inputs need the attribute removed completely to avoid\n // blank-text buttons.\n node.removeAttribute('value');\n return;\n }\n\n if (disableInputAttributeSyncing) {\n // When not syncing the value attribute, React only assigns a new value\n // whenever the defaultValue React prop has changed. When not present,\n // React does nothing\n if (props.hasOwnProperty('defaultValue')) {\n setDefaultValue(node, props.type, getToStringValue(props.defaultValue));\n }\n } else {\n // When syncing the value attribute, the value comes from a cascade of\n // properties:\n // 1. The value React property\n // 2. The defaultValue React property\n // 3. Otherwise there should be no change\n if (props.hasOwnProperty('value')) {\n setDefaultValue(node, props.type, value);\n } else if (props.hasOwnProperty('defaultValue')) {\n setDefaultValue(node, props.type, getToStringValue(props.defaultValue));\n }\n }\n\n if (disableInputAttributeSyncing) {\n // When not syncing the checked attribute, the attribute is directly\n // controllable from the defaultValue React property. It needs to be\n // updated as new props come in.\n if (props.defaultChecked == null) {\n node.removeAttribute('checked');\n } else {\n node.defaultChecked = !!props.defaultChecked;\n }\n } else {\n // When syncing the checked attribute, it only changes when it needs\n // to be removed, such as transitioning from a checkbox into a text input\n if (props.checked == null && props.defaultChecked != null) {\n node.defaultChecked = !!props.defaultChecked;\n }\n }\n}\n\nfunction postMountWrapper(element, props, isHydrating) {\n var node = element;\n\n // Do not assign value if it is already set. This prevents user text input\n // from being lost during SSR hydration.\n if (props.hasOwnProperty('value') || props.hasOwnProperty('defaultValue')) {\n var type = props.type;\n var isButton = type === 'submit' || type === 'reset';\n\n // Avoid setting value attribute on submit/reset inputs as it overrides the\n // default value provided by the browser. See: #12872\n if (isButton && (props.value === undefined || props.value === null)) {\n return;\n }\n\n var _initialValue = toString(node._wrapperState.initialValue);\n\n // Do not assign value if it is already set. This prevents user text input\n // from being lost during SSR hydration.\n if (!isHydrating) {\n if (disableInputAttributeSyncing) {\n var value = getToStringValue(props.value);\n\n // When not syncing the value attribute, the value property points\n // directly to the React prop. Only assign it if it exists.\n if (value != null) {\n // Always assign on buttons so that it is possible to assign an\n // empty string to clear button text.\n //\n // Otherwise, do not re-assign the value property if is empty. This\n // potentially avoids a DOM write and prevents Firefox (~60.0.1) from\n // prematurely marking required inputs as invalid. Equality is compared\n // to the current value in case the browser provided value is not an\n // empty string.\n if (isButton || value !== node.value) {\n node.value = toString(value);\n }\n }\n } else {\n // When syncing the value attribute, the value property should use\n // the wrapperState._initialValue property. This uses:\n //\n // 1. The value React property when present\n // 2. The defaultValue React property when present\n // 3. An empty string\n if (_initialValue !== node.value) {\n node.value = _initialValue;\n }\n }\n }\n\n if (disableInputAttributeSyncing) {\n // When not syncing the value attribute, assign the value attribute\n // directly from the defaultValue React property (when present)\n var defaultValue = getToStringValue(props.defaultValue);\n if (defaultValue != null) {\n node.defaultValue = toString(defaultValue);\n }\n } else {\n // Otherwise, the value attribute is synchronized to the property,\n // so we assign defaultValue to the same thing as the value property\n // assignment step above.\n node.defaultValue = _initialValue;\n }\n }\n\n // Normally, we'd just do `node.checked = node.checked` upon initial mount, less this bug\n // this is needed to work around a chrome bug where setting defaultChecked\n // will sometimes influence the value of checked (even after detachment).\n // Reference: https://bugs.chromium.org/p/chromium/issues/detail?id=608416\n // We need to temporarily unset name to avoid disrupting radio button groups.\n var name = node.name;\n if (name !== '') {\n node.name = '';\n }\n\n if (disableInputAttributeSyncing) {\n // When not syncing the checked attribute, the checked property\n // never gets assigned. It must be manually set. We don't want\n // to do this when hydrating so that existing user input isn't\n // modified\n if (!isHydrating) {\n updateChecked(element, props);\n }\n\n // Only assign the checked attribute if it is defined. This saves\n // a DOM write when controlling the checked attribute isn't needed\n // (text inputs, submit/reset)\n if (props.hasOwnProperty('defaultChecked')) {\n node.defaultChecked = !node.defaultChecked;\n node.defaultChecked = !!props.defaultChecked;\n }\n } else {\n // When syncing the checked attribute, both the checked property and\n // attribute are assigned at the same time using defaultChecked. This uses:\n //\n // 1. The checked React property when present\n // 2. The defaultChecked React property when present\n // 3. Otherwise, false\n node.defaultChecked = !node.defaultChecked;\n node.defaultChecked = !!node._wrapperState.initialChecked;\n }\n\n if (name !== '') {\n node.name = name;\n }\n}\n\nfunction restoreControlledState(element, props) {\n var node = element;\n updateWrapper(node, props);\n updateNamedCousins(node, props);\n}\n\nfunction updateNamedCousins(rootNode, props) {\n var name = props.name;\n if (props.type === 'radio' && name != null) {\n var queryRoot = rootNode;\n\n while (queryRoot.parentNode) {\n queryRoot = queryRoot.parentNode;\n }\n\n // If `rootNode.form` was non-null, then we could try `form.elements`,\n // but that sometimes behaves strangely in IE8. We could also try using\n // `form.getElementsByName`, but that will only return direct children\n // and won't include inputs that use the HTML5 `form=` attribute. Since\n // the input might not even be in a form. It might not even be in the\n // document. Let's just use the local `querySelectorAll` to ensure we don't\n // miss anything.\n var group = queryRoot.querySelectorAll('input[name=' + JSON.stringify('' + name) + '][type=\"radio\"]');\n\n for (var i = 0; i < group.length; i++) {\n var otherNode = group[i];\n if (otherNode === rootNode || otherNode.form !== rootNode.form) {\n continue;\n }\n // This will throw if radio buttons rendered by different copies of React\n // and the same name are rendered into the same form (same as #1939).\n // That's probably okay; we don't support it just as we don't support\n // mixing React radio buttons with non-React ones.\n var otherProps = getFiberCurrentPropsFromNode$1(otherNode);\n !otherProps ? invariant(false, 'ReactDOMInput: Mixing React and non-React radio inputs with the same `name` is not supported.') : void 0;\n\n // We need update the tracked value on the named cousin since the value\n // was changed but the input saw no event or value set\n updateValueIfChanged(otherNode);\n\n // If this is a controlled radio button group, forcing the input that\n // was previously checked to update will cause it to be come re-checked\n // as appropriate.\n updateWrapper(otherNode, otherProps);\n }\n }\n}\n\n// In Chrome, assigning defaultValue to certain input types triggers input validation.\n// For number inputs, the display value loses trailing decimal points. For email inputs,\n// Chrome raises \"The specified value <x> is not a valid email address\".\n//\n// Here we check to see if the defaultValue has actually changed, avoiding these problems\n// when the user is inputting text\n//\n// https://github.com/facebook/react/issues/7253\nfunction setDefaultValue(node, type, value) {\n if (\n // Focused number inputs synchronize on blur. See ChangeEventPlugin.js\n type !== 'number' || node.ownerDocument.activeElement !== node) {\n if (value == null) {\n node.defaultValue = toString(node._wrapperState.initialValue);\n } else if (node.defaultValue !== toString(value)) {\n node.defaultValue = toString(value);\n }\n }\n}\n\nvar eventTypes$1 = {\n change: {\n phasedRegistrationNames: {\n bubbled: 'onChange',\n captured: 'onChangeCapture'\n },\n dependencies: [TOP_BLUR, TOP_CHANGE, TOP_CLICK, TOP_FOCUS, TOP_INPUT, TOP_KEY_DOWN, TOP_KEY_UP, TOP_SELECTION_CHANGE]\n }\n};\n\nfunction createAndAccumulateChangeEvent(inst, nativeEvent, target) {\n var event = SyntheticEvent.getPooled(eventTypes$1.change, inst, nativeEvent, target);\n event.type = 'change';\n // Flag this event loop as needing state restore.\n enqueueStateRestore(target);\n accumulateTwoPhaseDispatches(event);\n return event;\n}\n/**\n * For IE shims\n */\nvar activeElement = null;\nvar activeElementInst = null;\n\n/**\n * SECTION: handle `change` event\n */\nfunction shouldUseChangeEvent(elem) {\n var nodeName = elem.nodeName && elem.nodeName.toLowerCase();\n return nodeName === 'select' || nodeName === 'input' && elem.type === 'file';\n}\n\nfunction manualDispatchChangeEvent(nativeEvent) {\n var event = createAndAccumulateChangeEvent(activeElementInst, nativeEvent, getEventTarget(nativeEvent));\n\n // If change and propertychange bubbled, we'd just bind to it like all the\n // other events and have it go through ReactBrowserEventEmitter. Since it\n // doesn't, we manually listen for the events and so we have to enqueue and\n // process the abstract event manually.\n //\n // Batching is necessary here in order to ensure that all event handlers run\n // before the next rerender (including event handlers attached to ancestor\n // elements instead of directly on the input). Without this, controlled\n // components don't work properly in conjunction with event bubbling because\n // the component is rerendered and the value reverted before all the event\n // handlers can run. See https://github.com/facebook/react/issues/708.\n batchedUpdates(runEventInBatch, event);\n}\n\nfunction runEventInBatch(event) {\n runEventsInBatch(event);\n}\n\nfunction getInstIfValueChanged(targetInst) {\n var targetNode = getNodeFromInstance$1(targetInst);\n if (updateValueIfChanged(targetNode)) {\n return targetInst;\n }\n}\n\nfunction getTargetInstForChangeEvent(topLevelType, targetInst) {\n if (topLevelType === TOP_CHANGE) {\n return targetInst;\n }\n}\n\n/**\n * SECTION: handle `input` event\n */\nvar isInputEventSupported = false;\nif (canUseDOM) {\n // IE9 claims to support the input event but fails to trigger it when\n // deleting text, so we ignore its input events.\n isInputEventSupported = isEventSupported('input') && (!document.documentMode || document.documentMode > 9);\n}\n\n/**\n * (For IE <=9) Starts tracking propertychange events on the passed-in element\n * and override the value property so that we can distinguish user events from\n * value changes in JS.\n */\nfunction startWatchingForValueChange(target, targetInst) {\n activeElement = target;\n activeElementInst = targetInst;\n activeElement.attachEvent('onpropertychange', handlePropertyChange);\n}\n\n/**\n * (For IE <=9) Removes the event listeners from the currently-tracked element,\n * if any exists.\n */\nfunction stopWatchingForValueChange() {\n if (!activeElement) {\n return;\n }\n activeElement.detachEvent('onpropertychange', handlePropertyChange);\n activeElement = null;\n activeElementInst = null;\n}\n\n/**\n * (For IE <=9) Handles a propertychange event, sending a `change` event if\n * the value of the active element has changed.\n */\nfunction handlePropertyChange(nativeEvent) {\n if (nativeEvent.propertyName !== 'value') {\n return;\n }\n if (getInstIfValueChanged(activeElementInst)) {\n manualDispatchChangeEvent(nativeEvent);\n }\n}\n\nfunction handleEventsForInputEventPolyfill(topLevelType, target, targetInst) {\n if (topLevelType === TOP_FOCUS) {\n // In IE9, propertychange fires for most input events but is buggy and\n // doesn't fire when text is deleted, but conveniently, selectionchange\n // appears to fire in all of the remaining cases so we catch those and\n // forward the event if the value has changed\n // In either case, we don't want to call the event handler if the value\n // is changed from JS so we redefine a setter for `.value` that updates\n // our activeElementValue variable, allowing us to ignore those changes\n //\n // stopWatching() should be a noop here but we call it just in case we\n // missed a blur event somehow.\n stopWatchingForValueChange();\n startWatchingForValueChange(target, targetInst);\n } else if (topLevelType === TOP_BLUR) {\n stopWatchingForValueChange();\n }\n}\n\n// For IE8 and IE9.\nfunction getTargetInstForInputEventPolyfill(topLevelType, targetInst) {\n if (topLevelType === TOP_SELECTION_CHANGE || topLevelType === TOP_KEY_UP || topLevelType === TOP_KEY_DOWN) {\n // On the selectionchange event, the target is just document which isn't\n // helpful for us so just check activeElement instead.\n //\n // 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire\n // propertychange on the first input event after setting `value` from a\n // script and fires only keydown, keypress, keyup. Catching keyup usually\n // gets it and catching keydown lets us fire an event for the first\n // keystroke if user does a key repeat (it'll be a little delayed: right\n // before the second keystroke). Other input methods (e.g., paste) seem to\n // fire selectionchange normally.\n return getInstIfValueChanged(activeElementInst);\n }\n}\n\n/**\n * SECTION: handle `click` event\n */\nfunction shouldUseClickEvent(elem) {\n // Use the `click` event to detect changes to checkbox and radio inputs.\n // This approach works across all browsers, whereas `change` does not fire\n // until `blur` in IE8.\n var nodeName = elem.nodeName;\n return nodeName && nodeName.toLowerCase() === 'input' && (elem.type === 'checkbox' || elem.type === 'radio');\n}\n\nfunction getTargetInstForClickEvent(topLevelType, targetInst) {\n if (topLevelType === TOP_CLICK) {\n return getInstIfValueChanged(targetInst);\n }\n}\n\nfunction getTargetInstForInputOrChangeEvent(topLevelType, targetInst) {\n if (topLevelType === TOP_INPUT || topLevelType === TOP_CHANGE) {\n return getInstIfValueChanged(targetInst);\n }\n}\n\nfunction handleControlledInputBlur(node) {\n var state = node._wrapperState;\n\n if (!state || !state.controlled || node.type !== 'number') {\n return;\n }\n\n if (!disableInputAttributeSyncing) {\n // If controlled, assign the value attribute to the current value on blur\n setDefaultValue(node, 'number', node.value);\n }\n}\n\n/**\n * This plugin creates an `onChange` event that normalizes change events\n * across form elements. This event fires at a time when it's possible to\n * change the element's value without seeing a flicker.\n *\n * Supported elements are:\n * - input (see `isTextInputElement`)\n * - textarea\n * - select\n */\nvar ChangeEventPlugin = {\n eventTypes: eventTypes$1,\n\n _isInputEventSupported: isInputEventSupported,\n\n extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n var targetNode = targetInst ? getNodeFromInstance$1(targetInst) : window;\n\n var getTargetInstFunc = void 0,\n handleEventFunc = void 0;\n if (shouldUseChangeEvent(targetNode)) {\n getTargetInstFunc = getTargetInstForChangeEvent;\n } else if (isTextInputElement(targetNode)) {\n if (isInputEventSupported) {\n getTargetInstFunc = getTargetInstForInputOrChangeEvent;\n } else {\n getTargetInstFunc = getTargetInstForInputEventPolyfill;\n handleEventFunc = handleEventsForInputEventPolyfill;\n }\n } else if (shouldUseClickEvent(targetNode)) {\n getTargetInstFunc = getTargetInstForClickEvent;\n }\n\n if (getTargetInstFunc) {\n var inst = getTargetInstFunc(topLevelType, targetInst);\n if (inst) {\n var event = createAndAccumulateChangeEvent(inst, nativeEvent, nativeEventTarget);\n return event;\n }\n }\n\n if (handleEventFunc) {\n handleEventFunc(topLevelType, targetNode, targetInst);\n }\n\n // When blurring, set the value attribute for number inputs\n if (topLevelType === TOP_BLUR) {\n handleControlledInputBlur(targetNode);\n }\n }\n};\n\n/**\n * Module that is injectable into `EventPluginHub`, that specifies a\n * deterministic ordering of `EventPlugin`s. A convenient way to reason about\n * plugins, without having to package every one of them. This is better than\n * having plugins be ordered in the same order that they are injected because\n * that ordering would be influenced by the packaging order.\n * `ResponderEventPlugin` must occur before `SimpleEventPlugin` so that\n * preventing default on events is convenient in `SimpleEventPlugin` handlers.\n */\nvar DOMEventPluginOrder = ['ResponderEventPlugin', 'SimpleEventPlugin', 'EnterLeaveEventPlugin', 'ChangeEventPlugin', 'SelectEventPlugin', 'BeforeInputEventPlugin'];\n\nvar SyntheticUIEvent = SyntheticEvent.extend({\n view: null,\n detail: null\n});\n\nvar modifierKeyToProp = {\n Alt: 'altKey',\n Control: 'ctrlKey',\n Meta: 'metaKey',\n Shift: 'shiftKey'\n};\n\n// Older browsers (Safari <= 10, iOS Safari <= 10.2) do not support\n// getModifierState. If getModifierState is not supported, we map it to a set of\n// modifier keys exposed by the event. In this case, Lock-keys are not supported.\n/**\n * Translation from modifier key to the associated property in the event.\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#keys-Modifiers\n */\n\nfunction modifierStateGetter(keyArg) {\n var syntheticEvent = this;\n var nativeEvent = syntheticEvent.nativeEvent;\n if (nativeEvent.getModifierState) {\n return nativeEvent.getModifierState(keyArg);\n }\n var keyProp = modifierKeyToProp[keyArg];\n return keyProp ? !!nativeEvent[keyProp] : false;\n}\n\nfunction getEventModifierState(nativeEvent) {\n return modifierStateGetter;\n}\n\nvar previousScreenX = 0;\nvar previousScreenY = 0;\n// Use flags to signal movementX/Y has already been set\nvar isMovementXSet = false;\nvar isMovementYSet = false;\n\n/**\n * @interface MouseEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar SyntheticMouseEvent = SyntheticUIEvent.extend({\n screenX: null,\n screenY: null,\n clientX: null,\n clientY: null,\n pageX: null,\n pageY: null,\n ctrlKey: null,\n shiftKey: null,\n altKey: null,\n metaKey: null,\n getModifierState: getEventModifierState,\n button: null,\n buttons: null,\n relatedTarget: function (event) {\n return event.relatedTarget || (event.fromElement === event.srcElement ? event.toElement : event.fromElement);\n },\n movementX: function (event) {\n if ('movementX' in event) {\n return event.movementX;\n }\n\n var screenX = previousScreenX;\n previousScreenX = event.screenX;\n\n if (!isMovementXSet) {\n isMovementXSet = true;\n return 0;\n }\n\n return event.type === 'mousemove' ? event.screenX - screenX : 0;\n },\n movementY: function (event) {\n if ('movementY' in event) {\n return event.movementY;\n }\n\n var screenY = previousScreenY;\n previousScreenY = event.screenY;\n\n if (!isMovementYSet) {\n isMovementYSet = true;\n return 0;\n }\n\n return event.type === 'mousemove' ? event.screenY - screenY : 0;\n }\n});\n\n/**\n * @interface PointerEvent\n * @see http://www.w3.org/TR/pointerevents/\n */\nvar SyntheticPointerEvent = SyntheticMouseEvent.extend({\n pointerId: null,\n width: null,\n height: null,\n pressure: null,\n tangentialPressure: null,\n tiltX: null,\n tiltY: null,\n twist: null,\n pointerType: null,\n isPrimary: null\n});\n\nvar eventTypes$2 = {\n mouseEnter: {\n registrationName: 'onMouseEnter',\n dependencies: [TOP_MOUSE_OUT, TOP_MOUSE_OVER]\n },\n mouseLeave: {\n registrationName: 'onMouseLeave',\n dependencies: [TOP_MOUSE_OUT, TOP_MOUSE_OVER]\n },\n pointerEnter: {\n registrationName: 'onPointerEnter',\n dependencies: [TOP_POINTER_OUT, TOP_POINTER_OVER]\n },\n pointerLeave: {\n registrationName: 'onPointerLeave',\n dependencies: [TOP_POINTER_OUT, TOP_POINTER_OVER]\n }\n};\n\nvar EnterLeaveEventPlugin = {\n eventTypes: eventTypes$2,\n\n /**\n * For almost every interaction we care about, there will be both a top-level\n * `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that\n * we do not extract duplicate events. However, moving the mouse into the\n * browser from outside will not fire a `mouseout` event. In this case, we use\n * the `mouseover` top-level event.\n */\n extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n var isOverEvent = topLevelType === TOP_MOUSE_OVER || topLevelType === TOP_POINTER_OVER;\n var isOutEvent = topLevelType === TOP_MOUSE_OUT || topLevelType === TOP_POINTER_OUT;\n\n if (isOverEvent && (nativeEvent.relatedTarget || nativeEvent.fromElement)) {\n return null;\n }\n\n if (!isOutEvent && !isOverEvent) {\n // Must not be a mouse or pointer in or out - ignoring.\n return null;\n }\n\n var win = void 0;\n if (nativeEventTarget.window === nativeEventTarget) {\n // `nativeEventTarget` is probably a window object.\n win = nativeEventTarget;\n } else {\n // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.\n var doc = nativeEventTarget.ownerDocument;\n if (doc) {\n win = doc.defaultView || doc.parentWindow;\n } else {\n win = window;\n }\n }\n\n var from = void 0;\n var to = void 0;\n if (isOutEvent) {\n from = targetInst;\n var related = nativeEvent.relatedTarget || nativeEvent.toElement;\n to = related ? getClosestInstanceFromNode(related) : null;\n } else {\n // Moving to a node from outside the window.\n from = null;\n to = targetInst;\n }\n\n if (from === to) {\n // Nothing pertains to our managed components.\n return null;\n }\n\n var eventInterface = void 0,\n leaveEventType = void 0,\n enterEventType = void 0,\n eventTypePrefix = void 0;\n\n if (topLevelType === TOP_MOUSE_OUT || topLevelType === TOP_MOUSE_OVER) {\n eventInterface = SyntheticMouseEvent;\n leaveEventType = eventTypes$2.mouseLeave;\n enterEventType = eventTypes$2.mouseEnter;\n eventTypePrefix = 'mouse';\n } else if (topLevelType === TOP_POINTER_OUT || topLevelType === TOP_POINTER_OVER) {\n eventInterface = SyntheticPointerEvent;\n leaveEventType = eventTypes$2.pointerLeave;\n enterEventType = eventTypes$2.pointerEnter;\n eventTypePrefix = 'pointer';\n }\n\n var fromNode = from == null ? win : getNodeFromInstance$1(from);\n var toNode = to == null ? win : getNodeFromInstance$1(to);\n\n var leave = eventInterface.getPooled(leaveEventType, from, nativeEvent, nativeEventTarget);\n leave.type = eventTypePrefix + 'leave';\n leave.target = fromNode;\n leave.relatedTarget = toNode;\n\n var enter = eventInterface.getPooled(enterEventType, to, nativeEvent, nativeEventTarget);\n enter.type = eventTypePrefix + 'enter';\n enter.target = toNode;\n enter.relatedTarget = fromNode;\n\n accumulateEnterLeaveDispatches(leave, enter, from, to);\n\n return [leave, enter];\n }\n};\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare\n ;\n}\n\nvar hasOwnProperty$1 = Object.prototype.hasOwnProperty;\n\n/**\n * Performs equality by iterating through keys on an object and returning false\n * when any key has values which are not strictly equal between the arguments.\n * Returns true when the values of all keys are strictly equal.\n */\nfunction shallowEqual(objA, objB) {\n if (is(objA, objB)) {\n return true;\n }\n\n if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n // Test for A's keys different from B.\n for (var i = 0; i < keysA.length; i++) {\n if (!hasOwnProperty$1.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * `ReactInstanceMap` maintains a mapping from a public facing stateful\n * instance (key) and the internal representation (value). This allows public\n * methods to accept the user facing instance as an argument and map them back\n * to internal methods.\n *\n * Note that this module is currently shared and assumed to be stateless.\n * If this becomes an actual Map, that will break.\n */\n\n/**\n * This API should be called `delete` but we'd have to make sure to always\n * transform these to strings for IE support. When this transform is fully\n * supported we can rename it.\n */\n\n\nfunction get(key) {\n return key._reactInternalFiber;\n}\n\nfunction has(key) {\n return key._reactInternalFiber !== undefined;\n}\n\nfunction set(key, value) {\n key._reactInternalFiber = value;\n}\n\n// Don't change these two values. They're used by React Dev Tools.\nvar NoEffect = /* */0;\nvar PerformedWork = /* */1;\n\n// You can change the rest (and add more).\nvar Placement = /* */2;\nvar Update = /* */4;\nvar PlacementAndUpdate = /* */6;\nvar Deletion = /* */8;\nvar ContentReset = /* */16;\nvar Callback = /* */32;\nvar DidCapture = /* */64;\nvar Ref = /* */128;\nvar Snapshot = /* */256;\nvar Passive = /* */512;\n\n// Passive & Update & Callback & Ref & Snapshot\nvar LifecycleEffectMask = /* */932;\n\n// Union of all host effects\nvar HostEffectMask = /* */1023;\n\nvar Incomplete = /* */1024;\nvar ShouldCapture = /* */2048;\n\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\n\nvar MOUNTING = 1;\nvar MOUNTED = 2;\nvar UNMOUNTED = 3;\n\nfunction isFiberMountedImpl(fiber) {\n var node = fiber;\n if (!fiber.alternate) {\n // If there is no alternate, this might be a new tree that isn't inserted\n // yet. If it is, then it will have a pending insertion effect on it.\n if ((node.effectTag & Placement) !== NoEffect) {\n return MOUNTING;\n }\n while (node.return) {\n node = node.return;\n if ((node.effectTag & Placement) !== NoEffect) {\n return MOUNTING;\n }\n }\n } else {\n while (node.return) {\n node = node.return;\n }\n }\n if (node.tag === HostRoot) {\n // TODO: Check if this was a nested HostRoot when used with\n // renderContainerIntoSubtree.\n return MOUNTED;\n }\n // If we didn't hit the root, that means that we're in an disconnected tree\n // that has been unmounted.\n return UNMOUNTED;\n}\n\nfunction isFiberMounted(fiber) {\n return isFiberMountedImpl(fiber) === MOUNTED;\n}\n\nfunction isMounted(component) {\n {\n var owner = ReactCurrentOwner$1.current;\n if (owner !== null && owner.tag === ClassComponent) {\n var ownerFiber = owner;\n var instance = ownerFiber.stateNode;\n !instance._warnedAboutRefsInRender ? warningWithoutStack$1(false, '%s is accessing isMounted inside its render() function. ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', getComponentName(ownerFiber.type) || 'A component') : void 0;\n instance._warnedAboutRefsInRender = true;\n }\n }\n\n var fiber = get(component);\n if (!fiber) {\n return false;\n }\n return isFiberMountedImpl(fiber) === MOUNTED;\n}\n\nfunction assertIsMounted(fiber) {\n !(isFiberMountedImpl(fiber) === MOUNTED) ? invariant(false, 'Unable to find node on an unmounted component.') : void 0;\n}\n\nfunction findCurrentFiberUsingSlowPath(fiber) {\n var alternate = fiber.alternate;\n if (!alternate) {\n // If there is no alternate, then we only need to check if it is mounted.\n var state = isFiberMountedImpl(fiber);\n !(state !== UNMOUNTED) ? invariant(false, 'Unable to find node on an unmounted component.') : void 0;\n if (state === MOUNTING) {\n return null;\n }\n return fiber;\n }\n // If we have two possible branches, we'll walk backwards up to the root\n // to see what path the root points to. On the way we may hit one of the\n // special cases and we'll deal with them.\n var a = fiber;\n var b = alternate;\n while (true) {\n var parentA = a.return;\n var parentB = parentA ? parentA.alternate : null;\n if (!parentA || !parentB) {\n // We're at the root.\n break;\n }\n\n // If both copies of the parent fiber point to the same child, we can\n // assume that the child is current. This happens when we bailout on low\n // priority: the bailed out fiber's child reuses the current child.\n if (parentA.child === parentB.child) {\n var child = parentA.child;\n while (child) {\n if (child === a) {\n // We've determined that A is the current branch.\n assertIsMounted(parentA);\n return fiber;\n }\n if (child === b) {\n // We've determined that B is the current branch.\n assertIsMounted(parentA);\n return alternate;\n }\n child = child.sibling;\n }\n // We should never have an alternate for any mounting node. So the only\n // way this could possibly happen is if this was unmounted, if at all.\n invariant(false, 'Unable to find node on an unmounted component.');\n }\n\n if (a.return !== b.return) {\n // The return pointer of A and the return pointer of B point to different\n // fibers. We assume that return pointers never criss-cross, so A must\n // belong to the child set of A.return, and B must belong to the child\n // set of B.return.\n a = parentA;\n b = parentB;\n } else {\n // The return pointers point to the same fiber. We'll have to use the\n // default, slow path: scan the child sets of each parent alternate to see\n // which child belongs to which set.\n //\n // Search parent A's child set\n var didFindChild = false;\n var _child = parentA.child;\n while (_child) {\n if (_child === a) {\n didFindChild = true;\n a = parentA;\n b = parentB;\n break;\n }\n if (_child === b) {\n didFindChild = true;\n b = parentA;\n a = parentB;\n break;\n }\n _child = _child.sibling;\n }\n if (!didFindChild) {\n // Search parent B's child set\n _child = parentB.child;\n while (_child) {\n if (_child === a) {\n didFindChild = true;\n a = parentB;\n b = parentA;\n break;\n }\n if (_child === b) {\n didFindChild = true;\n b = parentB;\n a = parentA;\n break;\n }\n _child = _child.sibling;\n }\n !didFindChild ? invariant(false, 'Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue.') : void 0;\n }\n }\n\n !(a.alternate === b) ? invariant(false, 'Return fibers should always be each others\\' alternates. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n }\n // If the root is not a host container, we're in a disconnected tree. I.e.\n // unmounted.\n !(a.tag === HostRoot) ? invariant(false, 'Unable to find node on an unmounted component.') : void 0;\n if (a.stateNode.current === a) {\n // We've determined that A is the current branch.\n return fiber;\n }\n // Otherwise B has to be current branch.\n return alternate;\n}\n\nfunction findCurrentHostFiber(parent) {\n var currentParent = findCurrentFiberUsingSlowPath(parent);\n if (!currentParent) {\n return null;\n }\n\n // Next we'll drill down this component to find the first HostComponent/Text.\n var node = currentParent;\n while (true) {\n if (node.tag === HostComponent || node.tag === HostText) {\n return node;\n } else if (node.child) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n if (node === currentParent) {\n return null;\n }\n while (!node.sibling) {\n if (!node.return || node.return === currentParent) {\n return null;\n }\n node = node.return;\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n // Flow needs the return null here, but ESLint complains about it.\n // eslint-disable-next-line no-unreachable\n return null;\n}\n\nfunction findCurrentHostFiberWithNoPortals(parent) {\n var currentParent = findCurrentFiberUsingSlowPath(parent);\n if (!currentParent) {\n return null;\n }\n\n // Next we'll drill down this component to find the first HostComponent/Text.\n var node = currentParent;\n while (true) {\n if (node.tag === HostComponent || node.tag === HostText) {\n return node;\n } else if (node.child && node.tag !== HostPortal) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n if (node === currentParent) {\n return null;\n }\n while (!node.sibling) {\n if (!node.return || node.return === currentParent) {\n return null;\n }\n node = node.return;\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n // Flow needs the return null here, but ESLint complains about it.\n // eslint-disable-next-line no-unreachable\n return null;\n}\n\nfunction addEventBubbleListener(element, eventType, listener) {\n element.addEventListener(eventType, listener, false);\n}\n\nfunction addEventCaptureListener(element, eventType, listener) {\n element.addEventListener(eventType, listener, true);\n}\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/css3-animations/#AnimationEvent-interface\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AnimationEvent\n */\nvar SyntheticAnimationEvent = SyntheticEvent.extend({\n animationName: null,\n elapsedTime: null,\n pseudoElement: null\n});\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/clipboard-apis/\n */\nvar SyntheticClipboardEvent = SyntheticEvent.extend({\n clipboardData: function (event) {\n return 'clipboardData' in event ? event.clipboardData : window.clipboardData;\n }\n});\n\n/**\n * @interface FocusEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar SyntheticFocusEvent = SyntheticUIEvent.extend({\n relatedTarget: null\n});\n\n/**\n * `charCode` represents the actual \"character code\" and is safe to use with\n * `String.fromCharCode`. As such, only keys that correspond to printable\n * characters produce a valid `charCode`, the only exception to this is Enter.\n * The Tab-key is considered non-printable and does not have a `charCode`,\n * presumably because it does not produce a tab-character in browsers.\n *\n * @param {object} nativeEvent Native browser event.\n * @return {number} Normalized `charCode` property.\n */\nfunction getEventCharCode(nativeEvent) {\n var charCode = void 0;\n var keyCode = nativeEvent.keyCode;\n\n if ('charCode' in nativeEvent) {\n charCode = nativeEvent.charCode;\n\n // FF does not set `charCode` for the Enter-key, check against `keyCode`.\n if (charCode === 0 && keyCode === 13) {\n charCode = 13;\n }\n } else {\n // IE8 does not implement `charCode`, but `keyCode` has the correct value.\n charCode = keyCode;\n }\n\n // IE and Edge (on Windows) and Chrome / Safari (on Windows and Linux)\n // report Enter as charCode 10 when ctrl is pressed.\n if (charCode === 10) {\n charCode = 13;\n }\n\n // Some non-printable keys are reported in `charCode`/`keyCode`, discard them.\n // Must not discard the (non-)printable Enter-key.\n if (charCode >= 32 || charCode === 13) {\n return charCode;\n }\n\n return 0;\n}\n\n/**\n * Normalization of deprecated HTML5 `key` values\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\n */\nvar normalizeKey = {\n Esc: 'Escape',\n Spacebar: ' ',\n Left: 'ArrowLeft',\n Up: 'ArrowUp',\n Right: 'ArrowRight',\n Down: 'ArrowDown',\n Del: 'Delete',\n Win: 'OS',\n Menu: 'ContextMenu',\n Apps: 'ContextMenu',\n Scroll: 'ScrollLock',\n MozPrintableKey: 'Unidentified'\n};\n\n/**\n * Translation from legacy `keyCode` to HTML5 `key`\n * Only special keys supported, all others depend on keyboard layout or browser\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\n */\nvar translateToKey = {\n '8': 'Backspace',\n '9': 'Tab',\n '12': 'Clear',\n '13': 'Enter',\n '16': 'Shift',\n '17': 'Control',\n '18': 'Alt',\n '19': 'Pause',\n '20': 'CapsLock',\n '27': 'Escape',\n '32': ' ',\n '33': 'PageUp',\n '34': 'PageDown',\n '35': 'End',\n '36': 'Home',\n '37': 'ArrowLeft',\n '38': 'ArrowUp',\n '39': 'ArrowRight',\n '40': 'ArrowDown',\n '45': 'Insert',\n '46': 'Delete',\n '112': 'F1',\n '113': 'F2',\n '114': 'F3',\n '115': 'F4',\n '116': 'F5',\n '117': 'F6',\n '118': 'F7',\n '119': 'F8',\n '120': 'F9',\n '121': 'F10',\n '122': 'F11',\n '123': 'F12',\n '144': 'NumLock',\n '145': 'ScrollLock',\n '224': 'Meta'\n};\n\n/**\n * @param {object} nativeEvent Native browser event.\n * @return {string} Normalized `key` property.\n */\nfunction getEventKey(nativeEvent) {\n if (nativeEvent.key) {\n // Normalize inconsistent values reported by browsers due to\n // implementations of a working draft specification.\n\n // FireFox implements `key` but returns `MozPrintableKey` for all\n // printable characters (normalized to `Unidentified`), ignore it.\n var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n if (key !== 'Unidentified') {\n return key;\n }\n }\n\n // Browser does not implement `key`, polyfill as much of it as we can.\n if (nativeEvent.type === 'keypress') {\n var charCode = getEventCharCode(nativeEvent);\n\n // The enter-key is technically both printable and non-printable and can\n // thus be captured by `keypress`, no other non-printable key should.\n return charCode === 13 ? 'Enter' : String.fromCharCode(charCode);\n }\n if (nativeEvent.type === 'keydown' || nativeEvent.type === 'keyup') {\n // While user keyboard layout determines the actual meaning of each\n // `keyCode` value, almost all function keys have a universal value.\n return translateToKey[nativeEvent.keyCode] || 'Unidentified';\n }\n return '';\n}\n\n/**\n * @interface KeyboardEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar SyntheticKeyboardEvent = SyntheticUIEvent.extend({\n key: getEventKey,\n location: null,\n ctrlKey: null,\n shiftKey: null,\n altKey: null,\n metaKey: null,\n repeat: null,\n locale: null,\n getModifierState: getEventModifierState,\n // Legacy Interface\n charCode: function (event) {\n // `charCode` is the result of a KeyPress event and represents the value of\n // the actual printable character.\n\n // KeyPress is deprecated, but its replacement is not yet final and not\n // implemented in any major browser. Only KeyPress has charCode.\n if (event.type === 'keypress') {\n return getEventCharCode(event);\n }\n return 0;\n },\n keyCode: function (event) {\n // `keyCode` is the result of a KeyDown/Up event and represents the value of\n // physical keyboard key.\n\n // The actual meaning of the value depends on the users' keyboard layout\n // which cannot be detected. Assuming that it is a US keyboard layout\n // provides a surprisingly accurate mapping for US and European users.\n // Due to this, it is left to the user to implement at this time.\n if (event.type === 'keydown' || event.type === 'keyup') {\n return event.keyCode;\n }\n return 0;\n },\n which: function (event) {\n // `which` is an alias for either `keyCode` or `charCode` depending on the\n // type of the event.\n if (event.type === 'keypress') {\n return getEventCharCode(event);\n }\n if (event.type === 'keydown' || event.type === 'keyup') {\n return event.keyCode;\n }\n return 0;\n }\n});\n\n/**\n * @interface DragEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar SyntheticDragEvent = SyntheticMouseEvent.extend({\n dataTransfer: null\n});\n\n/**\n * @interface TouchEvent\n * @see http://www.w3.org/TR/touch-events/\n */\nvar SyntheticTouchEvent = SyntheticUIEvent.extend({\n touches: null,\n targetTouches: null,\n changedTouches: null,\n altKey: null,\n metaKey: null,\n ctrlKey: null,\n shiftKey: null,\n getModifierState: getEventModifierState\n});\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/2009/WD-css3-transitions-20090320/#transition-events-\n * @see https://developer.mozilla.org/en-US/docs/Web/API/TransitionEvent\n */\nvar SyntheticTransitionEvent = SyntheticEvent.extend({\n propertyName: null,\n elapsedTime: null,\n pseudoElement: null\n});\n\n/**\n * @interface WheelEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar SyntheticWheelEvent = SyntheticMouseEvent.extend({\n deltaX: function (event) {\n return 'deltaX' in event ? event.deltaX : // Fallback to `wheelDeltaX` for Webkit and normalize (right is positive).\n 'wheelDeltaX' in event ? -event.wheelDeltaX : 0;\n },\n deltaY: function (event) {\n return 'deltaY' in event ? event.deltaY : // Fallback to `wheelDeltaY` for Webkit and normalize (down is positive).\n 'wheelDeltaY' in event ? -event.wheelDeltaY : // Fallback to `wheelDelta` for IE<9 and normalize (down is positive).\n 'wheelDelta' in event ? -event.wheelDelta : 0;\n },\n\n deltaZ: null,\n\n // Browsers without \"deltaMode\" is reporting in raw wheel delta where one\n // notch on the scroll is always +/- 120, roughly equivalent to pixels.\n // A good approximation of DOM_DELTA_LINE (1) is 5% of viewport size or\n // ~40 pixels, for DOM_DELTA_SCREEN (2) it is 87.5% of viewport size.\n deltaMode: null\n});\n\n/**\n * Turns\n * ['abort', ...]\n * into\n * eventTypes = {\n * 'abort': {\n * phasedRegistrationNames: {\n * bubbled: 'onAbort',\n * captured: 'onAbortCapture',\n * },\n * dependencies: [TOP_ABORT],\n * },\n * ...\n * };\n * topLevelEventsToDispatchConfig = new Map([\n * [TOP_ABORT, { sameConfig }],\n * ]);\n */\n\nvar interactiveEventTypeNames = [[TOP_BLUR, 'blur'], [TOP_CANCEL, 'cancel'], [TOP_CLICK, 'click'], [TOP_CLOSE, 'close'], [TOP_CONTEXT_MENU, 'contextMenu'], [TOP_COPY, 'copy'], [TOP_CUT, 'cut'], [TOP_AUX_CLICK, 'auxClick'], [TOP_DOUBLE_CLICK, 'doubleClick'], [TOP_DRAG_END, 'dragEnd'], [TOP_DRAG_START, 'dragStart'], [TOP_DROP, 'drop'], [TOP_FOCUS, 'focus'], [TOP_INPUT, 'input'], [TOP_INVALID, 'invalid'], [TOP_KEY_DOWN, 'keyDown'], [TOP_KEY_PRESS, 'keyPress'], [TOP_KEY_UP, 'keyUp'], [TOP_MOUSE_DOWN, 'mouseDown'], [TOP_MOUSE_UP, 'mouseUp'], [TOP_PASTE, 'paste'], [TOP_PAUSE, 'pause'], [TOP_PLAY, 'play'], [TOP_POINTER_CANCEL, 'pointerCancel'], [TOP_POINTER_DOWN, 'pointerDown'], [TOP_POINTER_UP, 'pointerUp'], [TOP_RATE_CHANGE, 'rateChange'], [TOP_RESET, 'reset'], [TOP_SEEKED, 'seeked'], [TOP_SUBMIT, 'submit'], [TOP_TOUCH_CANCEL, 'touchCancel'], [TOP_TOUCH_END, 'touchEnd'], [TOP_TOUCH_START, 'touchStart'], [TOP_VOLUME_CHANGE, 'volumeChange']];\nvar nonInteractiveEventTypeNames = [[TOP_ABORT, 'abort'], [TOP_ANIMATION_END, 'animationEnd'], [TOP_ANIMATION_ITERATION, 'animationIteration'], [TOP_ANIMATION_START, 'animationStart'], [TOP_CAN_PLAY, 'canPlay'], [TOP_CAN_PLAY_THROUGH, 'canPlayThrough'], [TOP_DRAG, 'drag'], [TOP_DRAG_ENTER, 'dragEnter'], [TOP_DRAG_EXIT, 'dragExit'], [TOP_DRAG_LEAVE, 'dragLeave'], [TOP_DRAG_OVER, 'dragOver'], [TOP_DURATION_CHANGE, 'durationChange'], [TOP_EMPTIED, 'emptied'], [TOP_ENCRYPTED, 'encrypted'], [TOP_ENDED, 'ended'], [TOP_ERROR, 'error'], [TOP_GOT_POINTER_CAPTURE, 'gotPointerCapture'], [TOP_LOAD, 'load'], [TOP_LOADED_DATA, 'loadedData'], [TOP_LOADED_METADATA, 'loadedMetadata'], [TOP_LOAD_START, 'loadStart'], [TOP_LOST_POINTER_CAPTURE, 'lostPointerCapture'], [TOP_MOUSE_MOVE, 'mouseMove'], [TOP_MOUSE_OUT, 'mouseOut'], [TOP_MOUSE_OVER, 'mouseOver'], [TOP_PLAYING, 'playing'], [TOP_POINTER_MOVE, 'pointerMove'], [TOP_POINTER_OUT, 'pointerOut'], [TOP_POINTER_OVER, 'pointerOver'], [TOP_PROGRESS, 'progress'], [TOP_SCROLL, 'scroll'], [TOP_SEEKING, 'seeking'], [TOP_STALLED, 'stalled'], [TOP_SUSPEND, 'suspend'], [TOP_TIME_UPDATE, 'timeUpdate'], [TOP_TOGGLE, 'toggle'], [TOP_TOUCH_MOVE, 'touchMove'], [TOP_TRANSITION_END, 'transitionEnd'], [TOP_WAITING, 'waiting'], [TOP_WHEEL, 'wheel']];\n\nvar eventTypes$4 = {};\nvar topLevelEventsToDispatchConfig = {};\n\nfunction addEventTypeNameToConfig(_ref, isInteractive) {\n var topEvent = _ref[0],\n event = _ref[1];\n\n var capitalizedEvent = event[0].toUpperCase() + event.slice(1);\n var onEvent = 'on' + capitalizedEvent;\n\n var type = {\n phasedRegistrationNames: {\n bubbled: onEvent,\n captured: onEvent + 'Capture'\n },\n dependencies: [topEvent],\n isInteractive: isInteractive\n };\n eventTypes$4[event] = type;\n topLevelEventsToDispatchConfig[topEvent] = type;\n}\n\ninteractiveEventTypeNames.forEach(function (eventTuple) {\n addEventTypeNameToConfig(eventTuple, true);\n});\nnonInteractiveEventTypeNames.forEach(function (eventTuple) {\n addEventTypeNameToConfig(eventTuple, false);\n});\n\n// Only used in DEV for exhaustiveness validation.\nvar knownHTMLTopLevelTypes = [TOP_ABORT, TOP_CANCEL, TOP_CAN_PLAY, TOP_CAN_PLAY_THROUGH, TOP_CLOSE, TOP_DURATION_CHANGE, TOP_EMPTIED, TOP_ENCRYPTED, TOP_ENDED, TOP_ERROR, TOP_INPUT, TOP_INVALID, TOP_LOAD, TOP_LOADED_DATA, TOP_LOADED_METADATA, TOP_LOAD_START, TOP_PAUSE, TOP_PLAY, TOP_PLAYING, TOP_PROGRESS, TOP_RATE_CHANGE, TOP_RESET, TOP_SEEKED, TOP_SEEKING, TOP_STALLED, TOP_SUBMIT, TOP_SUSPEND, TOP_TIME_UPDATE, TOP_TOGGLE, TOP_VOLUME_CHANGE, TOP_WAITING];\n\nvar SimpleEventPlugin = {\n eventTypes: eventTypes$4,\n\n isInteractiveTopLevelEventType: function (topLevelType) {\n var config = topLevelEventsToDispatchConfig[topLevelType];\n return config !== undefined && config.isInteractive === true;\n },\n\n\n extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n var dispatchConfig = topLevelEventsToDispatchConfig[topLevelType];\n if (!dispatchConfig) {\n return null;\n }\n var EventConstructor = void 0;\n switch (topLevelType) {\n case TOP_KEY_PRESS:\n // Firefox creates a keypress event for function keys too. This removes\n // the unwanted keypress events. Enter is however both printable and\n // non-printable. One would expect Tab to be as well (but it isn't).\n if (getEventCharCode(nativeEvent) === 0) {\n return null;\n }\n /* falls through */\n case TOP_KEY_DOWN:\n case TOP_KEY_UP:\n EventConstructor = SyntheticKeyboardEvent;\n break;\n case TOP_BLUR:\n case TOP_FOCUS:\n EventConstructor = SyntheticFocusEvent;\n break;\n case TOP_CLICK:\n // Firefox creates a click event on right mouse clicks. This removes the\n // unwanted click events.\n if (nativeEvent.button === 2) {\n return null;\n }\n /* falls through */\n case TOP_AUX_CLICK:\n case TOP_DOUBLE_CLICK:\n case TOP_MOUSE_DOWN:\n case TOP_MOUSE_MOVE:\n case TOP_MOUSE_UP:\n // TODO: Disabled elements should not respond to mouse events\n /* falls through */\n case TOP_MOUSE_OUT:\n case TOP_MOUSE_OVER:\n case TOP_CONTEXT_MENU:\n EventConstructor = SyntheticMouseEvent;\n break;\n case TOP_DRAG:\n case TOP_DRAG_END:\n case TOP_DRAG_ENTER:\n case TOP_DRAG_EXIT:\n case TOP_DRAG_LEAVE:\n case TOP_DRAG_OVER:\n case TOP_DRAG_START:\n case TOP_DROP:\n EventConstructor = SyntheticDragEvent;\n break;\n case TOP_TOUCH_CANCEL:\n case TOP_TOUCH_END:\n case TOP_TOUCH_MOVE:\n case TOP_TOUCH_START:\n EventConstructor = SyntheticTouchEvent;\n break;\n case TOP_ANIMATION_END:\n case TOP_ANIMATION_ITERATION:\n case TOP_ANIMATION_START:\n EventConstructor = SyntheticAnimationEvent;\n break;\n case TOP_TRANSITION_END:\n EventConstructor = SyntheticTransitionEvent;\n break;\n case TOP_SCROLL:\n EventConstructor = SyntheticUIEvent;\n break;\n case TOP_WHEEL:\n EventConstructor = SyntheticWheelEvent;\n break;\n case TOP_COPY:\n case TOP_CUT:\n case TOP_PASTE:\n EventConstructor = SyntheticClipboardEvent;\n break;\n case TOP_GOT_POINTER_CAPTURE:\n case TOP_LOST_POINTER_CAPTURE:\n case TOP_POINTER_CANCEL:\n case TOP_POINTER_DOWN:\n case TOP_POINTER_MOVE:\n case TOP_POINTER_OUT:\n case TOP_POINTER_OVER:\n case TOP_POINTER_UP:\n EventConstructor = SyntheticPointerEvent;\n break;\n default:\n {\n if (knownHTMLTopLevelTypes.indexOf(topLevelType) === -1) {\n warningWithoutStack$1(false, 'SimpleEventPlugin: Unhandled event type, `%s`. This warning ' + 'is likely caused by a bug in React. Please file an issue.', topLevelType);\n }\n }\n // HTML Events\n // @see http://www.w3.org/TR/html5/index.html#events-0\n EventConstructor = SyntheticEvent;\n break;\n }\n var event = EventConstructor.getPooled(dispatchConfig, targetInst, nativeEvent, nativeEventTarget);\n accumulateTwoPhaseDispatches(event);\n return event;\n }\n};\n\nvar isInteractiveTopLevelEventType = SimpleEventPlugin.isInteractiveTopLevelEventType;\n\n\nvar CALLBACK_BOOKKEEPING_POOL_SIZE = 10;\nvar callbackBookkeepingPool = [];\n\n/**\n * Find the deepest React component completely containing the root of the\n * passed-in instance (for use when entire React trees are nested within each\n * other). If React trees are not nested, returns null.\n */\nfunction findRootContainerNode(inst) {\n // TODO: It may be a good idea to cache this to prevent unnecessary DOM\n // traversal, but caching is difficult to do correctly without using a\n // mutation observer to listen for all DOM changes.\n while (inst.return) {\n inst = inst.return;\n }\n if (inst.tag !== HostRoot) {\n // This can happen if we're in a detached tree.\n return null;\n }\n return inst.stateNode.containerInfo;\n}\n\n// Used to store ancestor hierarchy in top level callback\nfunction getTopLevelCallbackBookKeeping(topLevelType, nativeEvent, targetInst) {\n if (callbackBookkeepingPool.length) {\n var instance = callbackBookkeepingPool.pop();\n instance.topLevelType = topLevelType;\n instance.nativeEvent = nativeEvent;\n instance.targetInst = targetInst;\n return instance;\n }\n return {\n topLevelType: topLevelType,\n nativeEvent: nativeEvent,\n targetInst: targetInst,\n ancestors: []\n };\n}\n\nfunction releaseTopLevelCallbackBookKeeping(instance) {\n instance.topLevelType = null;\n instance.nativeEvent = null;\n instance.targetInst = null;\n instance.ancestors.length = 0;\n if (callbackBookkeepingPool.length < CALLBACK_BOOKKEEPING_POOL_SIZE) {\n callbackBookkeepingPool.push(instance);\n }\n}\n\nfunction handleTopLevel(bookKeeping) {\n var targetInst = bookKeeping.targetInst;\n\n // Loop through the hierarchy, in case there's any nested components.\n // It's important that we build the array of ancestors before calling any\n // event handlers, because event handlers can modify the DOM, leading to\n // inconsistencies with ReactMount's node cache. See #1105.\n var ancestor = targetInst;\n do {\n if (!ancestor) {\n bookKeeping.ancestors.push(ancestor);\n break;\n }\n var root = findRootContainerNode(ancestor);\n if (!root) {\n break;\n }\n bookKeeping.ancestors.push(ancestor);\n ancestor = getClosestInstanceFromNode(root);\n } while (ancestor);\n\n for (var i = 0; i < bookKeeping.ancestors.length; i++) {\n targetInst = bookKeeping.ancestors[i];\n runExtractedEventsInBatch(bookKeeping.topLevelType, targetInst, bookKeeping.nativeEvent, getEventTarget(bookKeeping.nativeEvent));\n }\n}\n\n// TODO: can we stop exporting these?\nvar _enabled = true;\n\nfunction setEnabled(enabled) {\n _enabled = !!enabled;\n}\n\nfunction isEnabled() {\n return _enabled;\n}\n\n/**\n * Traps top-level events by using event bubbling.\n *\n * @param {number} topLevelType Number from `TopLevelEventTypes`.\n * @param {object} element Element on which to attach listener.\n * @return {?object} An object with a remove function which will forcefully\n * remove the listener.\n * @internal\n */\nfunction trapBubbledEvent(topLevelType, element) {\n if (!element) {\n return null;\n }\n var dispatch = isInteractiveTopLevelEventType(topLevelType) ? dispatchInteractiveEvent : dispatchEvent;\n\n addEventBubbleListener(element, getRawEventName(topLevelType),\n // Check if interactive and wrap in interactiveUpdates\n dispatch.bind(null, topLevelType));\n}\n\n/**\n * Traps a top-level event by using event capturing.\n *\n * @param {number} topLevelType Number from `TopLevelEventTypes`.\n * @param {object} element Element on which to attach listener.\n * @return {?object} An object with a remove function which will forcefully\n * remove the listener.\n * @internal\n */\nfunction trapCapturedEvent(topLevelType, element) {\n if (!element) {\n return null;\n }\n var dispatch = isInteractiveTopLevelEventType(topLevelType) ? dispatchInteractiveEvent : dispatchEvent;\n\n addEventCaptureListener(element, getRawEventName(topLevelType),\n // Check if interactive and wrap in interactiveUpdates\n dispatch.bind(null, topLevelType));\n}\n\nfunction dispatchInteractiveEvent(topLevelType, nativeEvent) {\n interactiveUpdates(dispatchEvent, topLevelType, nativeEvent);\n}\n\nfunction dispatchEvent(topLevelType, nativeEvent) {\n if (!_enabled) {\n return;\n }\n\n var nativeEventTarget = getEventTarget(nativeEvent);\n var targetInst = getClosestInstanceFromNode(nativeEventTarget);\n if (targetInst !== null && typeof targetInst.tag === 'number' && !isFiberMounted(targetInst)) {\n // If we get an event (ex: img onload) before committing that\n // component's mount, ignore it for now (that is, treat it as if it was an\n // event on a non-React tree). We might also consider queueing events and\n // dispatching them after the mount.\n targetInst = null;\n }\n\n var bookKeeping = getTopLevelCallbackBookKeeping(topLevelType, nativeEvent, targetInst);\n\n try {\n // Event queue being processed in the same cycle allows\n // `preventDefault`.\n batchedUpdates(handleTopLevel, bookKeeping);\n } finally {\n releaseTopLevelCallbackBookKeeping(bookKeeping);\n }\n}\n\n/**\n * Summary of `ReactBrowserEventEmitter` event handling:\n *\n * - Top-level delegation is used to trap most native browser events. This\n * may only occur in the main thread and is the responsibility of\n * ReactDOMEventListener, which is injected and can therefore support\n * pluggable event sources. This is the only work that occurs in the main\n * thread.\n *\n * - We normalize and de-duplicate events to account for browser quirks. This\n * may be done in the worker thread.\n *\n * - Forward these native events (with the associated top-level type used to\n * trap it) to `EventPluginHub`, which in turn will ask plugins if they want\n * to extract any synthetic events.\n *\n * - The `EventPluginHub` will then process each event by annotating them with\n * \"dispatches\", a sequence of listeners and IDs that care about that event.\n *\n * - The `EventPluginHub` then dispatches the events.\n *\n * Overview of React and the event system:\n *\n * +------------+ .\n * | DOM | .\n * +------------+ .\n * | .\n * v .\n * +------------+ .\n * | ReactEvent | .\n * | Listener | .\n * +------------+ . +-----------+\n * | . +--------+|SimpleEvent|\n * | . | |Plugin |\n * +-----|------+ . v +-----------+\n * | | | . +--------------+ +------------+\n * | +-----------.--->|EventPluginHub| | Event |\n * | | . | | +-----------+ | Propagators|\n * | ReactEvent | . | | |TapEvent | |------------|\n * | Emitter | . | |<---+|Plugin | |other plugin|\n * | | . | | +-----------+ | utilities |\n * | +-----------.--->| | +------------+\n * | | | . +--------------+\n * +-----|------+ . ^ +-----------+\n * | . | |Enter/Leave|\n * + . +-------+|Plugin |\n * +-------------+ . +-----------+\n * | application | .\n * |-------------| .\n * | | .\n * | | .\n * +-------------+ .\n * .\n * React Core . General Purpose Event Plugin System\n */\n\nvar alreadyListeningTo = {};\nvar reactTopListenersCounter = 0;\n\n/**\n * To ensure no conflicts with other potential React instances on the page\n */\nvar topListenersIDKey = '_reactListenersID' + ('' + Math.random()).slice(2);\n\nfunction getListeningForDocument(mountAt) {\n // In IE8, `mountAt` is a host object and doesn't have `hasOwnProperty`\n // directly.\n if (!Object.prototype.hasOwnProperty.call(mountAt, topListenersIDKey)) {\n mountAt[topListenersIDKey] = reactTopListenersCounter++;\n alreadyListeningTo[mountAt[topListenersIDKey]] = {};\n }\n return alreadyListeningTo[mountAt[topListenersIDKey]];\n}\n\n/**\n * We listen for bubbled touch events on the document object.\n *\n * Firefox v8.01 (and possibly others) exhibited strange behavior when\n * mounting `onmousemove` events at some node that was not the document\n * element. The symptoms were that if your mouse is not moving over something\n * contained within that mount point (for example on the background) the\n * top-level listeners for `onmousemove` won't be called. However, if you\n * register the `mousemove` on the document object, then it will of course\n * catch all `mousemove`s. This along with iOS quirks, justifies restricting\n * top-level listeners to the document object only, at least for these\n * movement types of events and possibly all events.\n *\n * @see http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html\n *\n * Also, `keyup`/`keypress`/`keydown` do not bubble to the window on IE, but\n * they bubble to document.\n *\n * @param {string} registrationName Name of listener (e.g. `onClick`).\n * @param {object} mountAt Container where to mount the listener\n */\nfunction listenTo(registrationName, mountAt) {\n var isListening = getListeningForDocument(mountAt);\n var dependencies = registrationNameDependencies[registrationName];\n\n for (var i = 0; i < dependencies.length; i++) {\n var dependency = dependencies[i];\n if (!(isListening.hasOwnProperty(dependency) && isListening[dependency])) {\n switch (dependency) {\n case TOP_SCROLL:\n trapCapturedEvent(TOP_SCROLL, mountAt);\n break;\n case TOP_FOCUS:\n case TOP_BLUR:\n trapCapturedEvent(TOP_FOCUS, mountAt);\n trapCapturedEvent(TOP_BLUR, mountAt);\n // We set the flag for a single dependency later in this function,\n // but this ensures we mark both as attached rather than just one.\n isListening[TOP_BLUR] = true;\n isListening[TOP_FOCUS] = true;\n break;\n case TOP_CANCEL:\n case TOP_CLOSE:\n if (isEventSupported(getRawEventName(dependency))) {\n trapCapturedEvent(dependency, mountAt);\n }\n break;\n case TOP_INVALID:\n case TOP_SUBMIT:\n case TOP_RESET:\n // We listen to them on the target DOM elements.\n // Some of them bubble so we don't want them to fire twice.\n break;\n default:\n // By default, listen on the top level to all non-media events.\n // Media events don't bubble so adding the listener wouldn't do anything.\n var isMediaEvent = mediaEventTypes.indexOf(dependency) !== -1;\n if (!isMediaEvent) {\n trapBubbledEvent(dependency, mountAt);\n }\n break;\n }\n isListening[dependency] = true;\n }\n }\n}\n\nfunction isListeningToAllDependencies(registrationName, mountAt) {\n var isListening = getListeningForDocument(mountAt);\n var dependencies = registrationNameDependencies[registrationName];\n for (var i = 0; i < dependencies.length; i++) {\n var dependency = dependencies[i];\n if (!(isListening.hasOwnProperty(dependency) && isListening[dependency])) {\n return false;\n }\n }\n return true;\n}\n\nfunction getActiveElement(doc) {\n doc = doc || (typeof document !== 'undefined' ? document : undefined);\n if (typeof doc === 'undefined') {\n return null;\n }\n try {\n return doc.activeElement || doc.body;\n } catch (e) {\n return doc.body;\n }\n}\n\n/**\n * Given any node return the first leaf node without children.\n *\n * @param {DOMElement|DOMTextNode} node\n * @return {DOMElement|DOMTextNode}\n */\nfunction getLeafNode(node) {\n while (node && node.firstChild) {\n node = node.firstChild;\n }\n return node;\n}\n\n/**\n * Get the next sibling within a container. This will walk up the\n * DOM if a node's siblings have been exhausted.\n *\n * @param {DOMElement|DOMTextNode} node\n * @return {?DOMElement|DOMTextNode}\n */\nfunction getSiblingNode(node) {\n while (node) {\n if (node.nextSibling) {\n return node.nextSibling;\n }\n node = node.parentNode;\n }\n}\n\n/**\n * Get object describing the nodes which contain characters at offset.\n *\n * @param {DOMElement|DOMTextNode} root\n * @param {number} offset\n * @return {?object}\n */\nfunction getNodeForCharacterOffset(root, offset) {\n var node = getLeafNode(root);\n var nodeStart = 0;\n var nodeEnd = 0;\n\n while (node) {\n if (node.nodeType === TEXT_NODE) {\n nodeEnd = nodeStart + node.textContent.length;\n\n if (nodeStart <= offset && nodeEnd >= offset) {\n return {\n node: node,\n offset: offset - nodeStart\n };\n }\n\n nodeStart = nodeEnd;\n }\n\n node = getLeafNode(getSiblingNode(node));\n }\n}\n\n/**\n * @param {DOMElement} outerNode\n * @return {?object}\n */\nfunction getOffsets(outerNode) {\n var ownerDocument = outerNode.ownerDocument;\n\n var win = ownerDocument && ownerDocument.defaultView || window;\n var selection = win.getSelection && win.getSelection();\n\n if (!selection || selection.rangeCount === 0) {\n return null;\n }\n\n var anchorNode = selection.anchorNode,\n anchorOffset = selection.anchorOffset,\n focusNode = selection.focusNode,\n focusOffset = selection.focusOffset;\n\n // In Firefox, anchorNode and focusNode can be \"anonymous divs\", e.g. the\n // up/down buttons on an <input type=\"number\">. Anonymous divs do not seem to\n // expose properties, triggering a \"Permission denied error\" if any of its\n // properties are accessed. The only seemingly possible way to avoid erroring\n // is to access a property that typically works for non-anonymous divs and\n // catch any error that may otherwise arise. See\n // https://bugzilla.mozilla.org/show_bug.cgi?id=208427\n\n try {\n /* eslint-disable no-unused-expressions */\n anchorNode.nodeType;\n focusNode.nodeType;\n /* eslint-enable no-unused-expressions */\n } catch (e) {\n return null;\n }\n\n return getModernOffsetsFromPoints(outerNode, anchorNode, anchorOffset, focusNode, focusOffset);\n}\n\n/**\n * Returns {start, end} where `start` is the character/codepoint index of\n * (anchorNode, anchorOffset) within the textContent of `outerNode`, and\n * `end` is the index of (focusNode, focusOffset).\n *\n * Returns null if you pass in garbage input but we should probably just crash.\n *\n * Exported only for testing.\n */\nfunction getModernOffsetsFromPoints(outerNode, anchorNode, anchorOffset, focusNode, focusOffset) {\n var length = 0;\n var start = -1;\n var end = -1;\n var indexWithinAnchor = 0;\n var indexWithinFocus = 0;\n var node = outerNode;\n var parentNode = null;\n\n outer: while (true) {\n var next = null;\n\n while (true) {\n if (node === anchorNode && (anchorOffset === 0 || node.nodeType === TEXT_NODE)) {\n start = length + anchorOffset;\n }\n if (node === focusNode && (focusOffset === 0 || node.nodeType === TEXT_NODE)) {\n end = length + focusOffset;\n }\n\n if (node.nodeType === TEXT_NODE) {\n length += node.nodeValue.length;\n }\n\n if ((next = node.firstChild) === null) {\n break;\n }\n // Moving from `node` to its first child `next`.\n parentNode = node;\n node = next;\n }\n\n while (true) {\n if (node === outerNode) {\n // If `outerNode` has children, this is always the second time visiting\n // it. If it has no children, this is still the first loop, and the only\n // valid selection is anchorNode and focusNode both equal to this node\n // and both offsets 0, in which case we will have handled above.\n break outer;\n }\n if (parentNode === anchorNode && ++indexWithinAnchor === anchorOffset) {\n start = length;\n }\n if (parentNode === focusNode && ++indexWithinFocus === focusOffset) {\n end = length;\n }\n if ((next = node.nextSibling) !== null) {\n break;\n }\n node = parentNode;\n parentNode = node.parentNode;\n }\n\n // Moving from `node` to its next sibling `next`.\n node = next;\n }\n\n if (start === -1 || end === -1) {\n // This should never happen. (Would happen if the anchor/focus nodes aren't\n // actually inside the passed-in node.)\n return null;\n }\n\n return {\n start: start,\n end: end\n };\n}\n\n/**\n * In modern non-IE browsers, we can support both forward and backward\n * selections.\n *\n * Note: IE10+ supports the Selection object, but it does not support\n * the `extend` method, which means that even in modern IE, it's not possible\n * to programmatically create a backward selection. Thus, for all IE\n * versions, we use the old IE API to create our selections.\n *\n * @param {DOMElement|DOMTextNode} node\n * @param {object} offsets\n */\nfunction setOffsets(node, offsets) {\n var doc = node.ownerDocument || document;\n var win = doc && doc.defaultView || window;\n\n // Edge fails with \"Object expected\" in some scenarios.\n // (For instance: TinyMCE editor used in a list component that supports pasting to add more,\n // fails when pasting 100+ items)\n if (!win.getSelection) {\n return;\n }\n\n var selection = win.getSelection();\n var length = node.textContent.length;\n var start = Math.min(offsets.start, length);\n var end = offsets.end === undefined ? start : Math.min(offsets.end, length);\n\n // IE 11 uses modern selection, but doesn't support the extend method.\n // Flip backward selections, so we can set with a single range.\n if (!selection.extend && start > end) {\n var temp = end;\n end = start;\n start = temp;\n }\n\n var startMarker = getNodeForCharacterOffset(node, start);\n var endMarker = getNodeForCharacterOffset(node, end);\n\n if (startMarker && endMarker) {\n if (selection.rangeCount === 1 && selection.anchorNode === startMarker.node && selection.anchorOffset === startMarker.offset && selection.focusNode === endMarker.node && selection.focusOffset === endMarker.offset) {\n return;\n }\n var range = doc.createRange();\n range.setStart(startMarker.node, startMarker.offset);\n selection.removeAllRanges();\n\n if (start > end) {\n selection.addRange(range);\n selection.extend(endMarker.node, endMarker.offset);\n } else {\n range.setEnd(endMarker.node, endMarker.offset);\n selection.addRange(range);\n }\n }\n}\n\nfunction isTextNode(node) {\n return node && node.nodeType === TEXT_NODE;\n}\n\nfunction containsNode(outerNode, innerNode) {\n if (!outerNode || !innerNode) {\n return false;\n } else if (outerNode === innerNode) {\n return true;\n } else if (isTextNode(outerNode)) {\n return false;\n } else if (isTextNode(innerNode)) {\n return containsNode(outerNode, innerNode.parentNode);\n } else if ('contains' in outerNode) {\n return outerNode.contains(innerNode);\n } else if (outerNode.compareDocumentPosition) {\n return !!(outerNode.compareDocumentPosition(innerNode) & 16);\n } else {\n return false;\n }\n}\n\nfunction isInDocument(node) {\n return node && node.ownerDocument && containsNode(node.ownerDocument.documentElement, node);\n}\n\nfunction isSameOriginFrame(iframe) {\n try {\n // Accessing the contentDocument of a HTMLIframeElement can cause the browser\n // to throw, e.g. if it has a cross-origin src attribute.\n // Safari will show an error in the console when the access results in \"Blocked a frame with origin\". e.g:\n // iframe.contentDocument.defaultView;\n // A safety way is to access one of the cross origin properties: Window or Location\n // Which might result in \"SecurityError\" DOM Exception and it is compatible to Safari.\n // https://html.spec.whatwg.org/multipage/browsers.html#integration-with-idl\n\n return typeof iframe.contentWindow.location.href === 'string';\n } catch (err) {\n return false;\n }\n}\n\nfunction getActiveElementDeep() {\n var win = window;\n var element = getActiveElement();\n while (element instanceof win.HTMLIFrameElement) {\n if (isSameOriginFrame(element)) {\n win = element.contentWindow;\n } else {\n return element;\n }\n element = getActiveElement(win.document);\n }\n return element;\n}\n\n/**\n * @ReactInputSelection: React input selection module. Based on Selection.js,\n * but modified to be suitable for react and has a couple of bug fixes (doesn't\n * assume buttons have range selections allowed).\n * Input selection module for React.\n */\n\n/**\n * @hasSelectionCapabilities: we get the element types that support selection\n * from https://html.spec.whatwg.org/#do-not-apply, looking at `selectionStart`\n * and `selectionEnd` rows.\n */\nfunction hasSelectionCapabilities(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return nodeName && (nodeName === 'input' && (elem.type === 'text' || elem.type === 'search' || elem.type === 'tel' || elem.type === 'url' || elem.type === 'password') || nodeName === 'textarea' || elem.contentEditable === 'true');\n}\n\nfunction getSelectionInformation() {\n var focusedElem = getActiveElementDeep();\n return {\n focusedElem: focusedElem,\n selectionRange: hasSelectionCapabilities(focusedElem) ? getSelection$1(focusedElem) : null\n };\n}\n\n/**\n * @restoreSelection: If any selection information was potentially lost,\n * restore it. This is useful when performing operations that could remove dom\n * nodes and place them back in, resulting in focus being lost.\n */\nfunction restoreSelection(priorSelectionInformation) {\n var curFocusedElem = getActiveElementDeep();\n var priorFocusedElem = priorSelectionInformation.focusedElem;\n var priorSelectionRange = priorSelectionInformation.selectionRange;\n if (curFocusedElem !== priorFocusedElem && isInDocument(priorFocusedElem)) {\n if (priorSelectionRange !== null && hasSelectionCapabilities(priorFocusedElem)) {\n setSelection(priorFocusedElem, priorSelectionRange);\n }\n\n // Focusing a node can change the scroll position, which is undesirable\n var ancestors = [];\n var ancestor = priorFocusedElem;\n while (ancestor = ancestor.parentNode) {\n if (ancestor.nodeType === ELEMENT_NODE) {\n ancestors.push({\n element: ancestor,\n left: ancestor.scrollLeft,\n top: ancestor.scrollTop\n });\n }\n }\n\n if (typeof priorFocusedElem.focus === 'function') {\n priorFocusedElem.focus();\n }\n\n for (var i = 0; i < ancestors.length; i++) {\n var info = ancestors[i];\n info.element.scrollLeft = info.left;\n info.element.scrollTop = info.top;\n }\n }\n}\n\n/**\n * @getSelection: Gets the selection bounds of a focused textarea, input or\n * contentEditable node.\n * -@input: Look up selection bounds of this input\n * -@return {start: selectionStart, end: selectionEnd}\n */\nfunction getSelection$1(input) {\n var selection = void 0;\n\n if ('selectionStart' in input) {\n // Modern browser with input or textarea.\n selection = {\n start: input.selectionStart,\n end: input.selectionEnd\n };\n } else {\n // Content editable or old IE textarea.\n selection = getOffsets(input);\n }\n\n return selection || { start: 0, end: 0 };\n}\n\n/**\n * @setSelection: Sets the selection bounds of a textarea or input and focuses\n * the input.\n * -@input Set selection bounds of this input or textarea\n * -@offsets Object of same form that is returned from get*\n */\nfunction setSelection(input, offsets) {\n var start = offsets.start,\n end = offsets.end;\n\n if (end === undefined) {\n end = start;\n }\n\n if ('selectionStart' in input) {\n input.selectionStart = start;\n input.selectionEnd = Math.min(end, input.value.length);\n } else {\n setOffsets(input, offsets);\n }\n}\n\nvar skipSelectionChangeEvent = canUseDOM && 'documentMode' in document && document.documentMode <= 11;\n\nvar eventTypes$3 = {\n select: {\n phasedRegistrationNames: {\n bubbled: 'onSelect',\n captured: 'onSelectCapture'\n },\n dependencies: [TOP_BLUR, TOP_CONTEXT_MENU, TOP_DRAG_END, TOP_FOCUS, TOP_KEY_DOWN, TOP_KEY_UP, TOP_MOUSE_DOWN, TOP_MOUSE_UP, TOP_SELECTION_CHANGE]\n }\n};\n\nvar activeElement$1 = null;\nvar activeElementInst$1 = null;\nvar lastSelection = null;\nvar mouseDown = false;\n\n/**\n * Get an object which is a unique representation of the current selection.\n *\n * The return value will not be consistent across nodes or browsers, but\n * two identical selections on the same node will return identical objects.\n *\n * @param {DOMElement} node\n * @return {object}\n */\nfunction getSelection(node) {\n if ('selectionStart' in node && hasSelectionCapabilities(node)) {\n return {\n start: node.selectionStart,\n end: node.selectionEnd\n };\n } else {\n var win = node.ownerDocument && node.ownerDocument.defaultView || window;\n var selection = win.getSelection();\n return {\n anchorNode: selection.anchorNode,\n anchorOffset: selection.anchorOffset,\n focusNode: selection.focusNode,\n focusOffset: selection.focusOffset\n };\n }\n}\n\n/**\n * Get document associated with the event target.\n *\n * @param {object} nativeEventTarget\n * @return {Document}\n */\nfunction getEventTargetDocument(eventTarget) {\n return eventTarget.window === eventTarget ? eventTarget.document : eventTarget.nodeType === DOCUMENT_NODE ? eventTarget : eventTarget.ownerDocument;\n}\n\n/**\n * Poll selection to see whether it's changed.\n *\n * @param {object} nativeEvent\n * @param {object} nativeEventTarget\n * @return {?SyntheticEvent}\n */\nfunction constructSelectEvent(nativeEvent, nativeEventTarget) {\n // Ensure we have the right element, and that the user is not dragging a\n // selection (this matches native `select` event behavior). In HTML5, select\n // fires only on input and textarea thus if there's no focused element we\n // won't dispatch.\n var doc = getEventTargetDocument(nativeEventTarget);\n\n if (mouseDown || activeElement$1 == null || activeElement$1 !== getActiveElement(doc)) {\n return null;\n }\n\n // Only fire when selection has actually changed.\n var currentSelection = getSelection(activeElement$1);\n if (!lastSelection || !shallowEqual(lastSelection, currentSelection)) {\n lastSelection = currentSelection;\n\n var syntheticEvent = SyntheticEvent.getPooled(eventTypes$3.select, activeElementInst$1, nativeEvent, nativeEventTarget);\n\n syntheticEvent.type = 'select';\n syntheticEvent.target = activeElement$1;\n\n accumulateTwoPhaseDispatches(syntheticEvent);\n\n return syntheticEvent;\n }\n\n return null;\n}\n\n/**\n * This plugin creates an `onSelect` event that normalizes select events\n * across form elements.\n *\n * Supported elements are:\n * - input (see `isTextInputElement`)\n * - textarea\n * - contentEditable\n *\n * This differs from native browser implementations in the following ways:\n * - Fires on contentEditable fields as well as inputs.\n * - Fires for collapsed selection.\n * - Fires after user input.\n */\nvar SelectEventPlugin = {\n eventTypes: eventTypes$3,\n\n extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n var doc = getEventTargetDocument(nativeEventTarget);\n // Track whether all listeners exists for this plugin. If none exist, we do\n // not extract events. See #3639.\n if (!doc || !isListeningToAllDependencies('onSelect', doc)) {\n return null;\n }\n\n var targetNode = targetInst ? getNodeFromInstance$1(targetInst) : window;\n\n switch (topLevelType) {\n // Track the input node that has focus.\n case TOP_FOCUS:\n if (isTextInputElement(targetNode) || targetNode.contentEditable === 'true') {\n activeElement$1 = targetNode;\n activeElementInst$1 = targetInst;\n lastSelection = null;\n }\n break;\n case TOP_BLUR:\n activeElement$1 = null;\n activeElementInst$1 = null;\n lastSelection = null;\n break;\n // Don't fire the event while the user is dragging. This matches the\n // semantics of the native select event.\n case TOP_MOUSE_DOWN:\n mouseDown = true;\n break;\n case TOP_CONTEXT_MENU:\n case TOP_MOUSE_UP:\n case TOP_DRAG_END:\n mouseDown = false;\n return constructSelectEvent(nativeEvent, nativeEventTarget);\n // Chrome and IE fire non-standard event when selection is changed (and\n // sometimes when it hasn't). IE's event fires out of order with respect\n // to key and input events on deletion, so we discard it.\n //\n // Firefox doesn't support selectionchange, so check selection status\n // after each key entry. The selection changes after keydown and before\n // keyup, but we check on keydown as well in the case of holding down a\n // key, when multiple keydown events are fired but only one keyup is.\n // This is also our approach for IE handling, for the reason above.\n case TOP_SELECTION_CHANGE:\n if (skipSelectionChangeEvent) {\n break;\n }\n // falls through\n case TOP_KEY_DOWN:\n case TOP_KEY_UP:\n return constructSelectEvent(nativeEvent, nativeEventTarget);\n }\n\n return null;\n }\n};\n\n/**\n * Inject modules for resolving DOM hierarchy and plugin ordering.\n */\ninjection.injectEventPluginOrder(DOMEventPluginOrder);\nsetComponentTree(getFiberCurrentPropsFromNode$1, getInstanceFromNode$1, getNodeFromInstance$1);\n\n/**\n * Some important event plugins included by default (without having to require\n * them).\n */\ninjection.injectEventPluginsByName({\n SimpleEventPlugin: SimpleEventPlugin,\n EnterLeaveEventPlugin: EnterLeaveEventPlugin,\n ChangeEventPlugin: ChangeEventPlugin,\n SelectEventPlugin: SelectEventPlugin,\n BeforeInputEventPlugin: BeforeInputEventPlugin\n});\n\nvar didWarnSelectedSetOnOption = false;\nvar didWarnInvalidChild = false;\n\nfunction flattenChildren(children) {\n var content = '';\n\n // Flatten children. We'll warn if they are invalid\n // during validateProps() which runs for hydration too.\n // Note that this would throw on non-element objects.\n // Elements are stringified (which is normally irrelevant\n // but matters for <fbt>).\n React.Children.forEach(children, function (child) {\n if (child == null) {\n return;\n }\n content += child;\n // Note: we don't warn about invalid children here.\n // Instead, this is done separately below so that\n // it happens during the hydration codepath too.\n });\n\n return content;\n}\n\n/**\n * Implements an <option> host component that warns when `selected` is set.\n */\n\nfunction validateProps(element, props) {\n {\n // This mirrors the codepath above, but runs for hydration too.\n // Warn about invalid children here so that client and hydration are consistent.\n // TODO: this seems like it could cause a DEV-only throw for hydration\n // if children contains a non-element object. We should try to avoid that.\n if (typeof props.children === 'object' && props.children !== null) {\n React.Children.forEach(props.children, function (child) {\n if (child == null) {\n return;\n }\n if (typeof child === 'string' || typeof child === 'number') {\n return;\n }\n if (typeof child.type !== 'string') {\n return;\n }\n if (!didWarnInvalidChild) {\n didWarnInvalidChild = true;\n warning$1(false, 'Only strings and numbers are supported as <option> children.');\n }\n });\n }\n\n // TODO: Remove support for `selected` in <option>.\n if (props.selected != null && !didWarnSelectedSetOnOption) {\n warning$1(false, 'Use the `defaultValue` or `value` props on <select> instead of ' + 'setting `selected` on <option>.');\n didWarnSelectedSetOnOption = true;\n }\n }\n}\n\nfunction postMountWrapper$1(element, props) {\n // value=\"\" should make a value attribute (#6219)\n if (props.value != null) {\n element.setAttribute('value', toString(getToStringValue(props.value)));\n }\n}\n\nfunction getHostProps$1(element, props) {\n var hostProps = _assign({ children: undefined }, props);\n var content = flattenChildren(props.children);\n\n if (content) {\n hostProps.children = content;\n }\n\n return hostProps;\n}\n\n// TODO: direct imports like some-package/src/* are bad. Fix me.\nvar didWarnValueDefaultValue$1 = void 0;\n\n{\n didWarnValueDefaultValue$1 = false;\n}\n\nfunction getDeclarationErrorAddendum() {\n var ownerName = getCurrentFiberOwnerNameInDevOrNull();\n if (ownerName) {\n return '\\n\\nCheck the render method of `' + ownerName + '`.';\n }\n return '';\n}\n\nvar valuePropNames = ['value', 'defaultValue'];\n\n/**\n * Validation function for `value` and `defaultValue`.\n */\nfunction checkSelectPropTypes(props) {\n ReactControlledValuePropTypes.checkPropTypes('select', props);\n\n for (var i = 0; i < valuePropNames.length; i++) {\n var propName = valuePropNames[i];\n if (props[propName] == null) {\n continue;\n }\n var isArray = Array.isArray(props[propName]);\n if (props.multiple && !isArray) {\n warning$1(false, 'The `%s` prop supplied to <select> must be an array if ' + '`multiple` is true.%s', propName, getDeclarationErrorAddendum());\n } else if (!props.multiple && isArray) {\n warning$1(false, 'The `%s` prop supplied to <select> must be a scalar ' + 'value if `multiple` is false.%s', propName, getDeclarationErrorAddendum());\n }\n }\n}\n\nfunction updateOptions(node, multiple, propValue, setDefaultSelected) {\n var options = node.options;\n\n if (multiple) {\n var selectedValues = propValue;\n var selectedValue = {};\n for (var i = 0; i < selectedValues.length; i++) {\n // Prefix to avoid chaos with special keys.\n selectedValue['$' + selectedValues[i]] = true;\n }\n for (var _i = 0; _i < options.length; _i++) {\n var selected = selectedValue.hasOwnProperty('$' + options[_i].value);\n if (options[_i].selected !== selected) {\n options[_i].selected = selected;\n }\n if (selected && setDefaultSelected) {\n options[_i].defaultSelected = true;\n }\n }\n } else {\n // Do not set `select.value` as exact behavior isn't consistent across all\n // browsers for all cases.\n var _selectedValue = toString(getToStringValue(propValue));\n var defaultSelected = null;\n for (var _i2 = 0; _i2 < options.length; _i2++) {\n if (options[_i2].value === _selectedValue) {\n options[_i2].selected = true;\n if (setDefaultSelected) {\n options[_i2].defaultSelected = true;\n }\n return;\n }\n if (defaultSelected === null && !options[_i2].disabled) {\n defaultSelected = options[_i2];\n }\n }\n if (defaultSelected !== null) {\n defaultSelected.selected = true;\n }\n }\n}\n\n/**\n * Implements a <select> host component that allows optionally setting the\n * props `value` and `defaultValue`. If `multiple` is false, the prop must be a\n * stringable. If `multiple` is true, the prop must be an array of stringables.\n *\n * If `value` is not supplied (or null/undefined), user actions that change the\n * selected option will trigger updates to the rendered options.\n *\n * If it is supplied (and not null/undefined), the rendered options will not\n * update in response to user actions. Instead, the `value` prop must change in\n * order for the rendered options to update.\n *\n * If `defaultValue` is provided, any options with the supplied values will be\n * selected.\n */\n\nfunction getHostProps$2(element, props) {\n return _assign({}, props, {\n value: undefined\n });\n}\n\nfunction initWrapperState$1(element, props) {\n var node = element;\n {\n checkSelectPropTypes(props);\n }\n\n node._wrapperState = {\n wasMultiple: !!props.multiple\n };\n\n {\n if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue$1) {\n warning$1(false, 'Select elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled select ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components');\n didWarnValueDefaultValue$1 = true;\n }\n }\n}\n\nfunction postMountWrapper$2(element, props) {\n var node = element;\n node.multiple = !!props.multiple;\n var value = props.value;\n if (value != null) {\n updateOptions(node, !!props.multiple, value, false);\n } else if (props.defaultValue != null) {\n updateOptions(node, !!props.multiple, props.defaultValue, true);\n }\n}\n\nfunction postUpdateWrapper(element, props) {\n var node = element;\n var wasMultiple = node._wrapperState.wasMultiple;\n node._wrapperState.wasMultiple = !!props.multiple;\n\n var value = props.value;\n if (value != null) {\n updateOptions(node, !!props.multiple, value, false);\n } else if (wasMultiple !== !!props.multiple) {\n // For simplicity, reapply `defaultValue` if `multiple` is toggled.\n if (props.defaultValue != null) {\n updateOptions(node, !!props.multiple, props.defaultValue, true);\n } else {\n // Revert the select back to its default unselected state.\n updateOptions(node, !!props.multiple, props.multiple ? [] : '', false);\n }\n }\n}\n\nfunction restoreControlledState$2(element, props) {\n var node = element;\n var value = props.value;\n\n if (value != null) {\n updateOptions(node, !!props.multiple, value, false);\n }\n}\n\nvar didWarnValDefaultVal = false;\n\n/**\n * Implements a <textarea> host component that allows setting `value`, and\n * `defaultValue`. This differs from the traditional DOM API because value is\n * usually set as PCDATA children.\n *\n * If `value` is not supplied (or null/undefined), user actions that affect the\n * value will trigger updates to the element.\n *\n * If `value` is supplied (and not null/undefined), the rendered element will\n * not trigger updates to the element. Instead, the `value` prop must change in\n * order for the rendered element to be updated.\n *\n * The rendered element will be initialized with an empty value, the prop\n * `defaultValue` if specified, or the children content (deprecated).\n */\n\nfunction getHostProps$3(element, props) {\n var node = element;\n !(props.dangerouslySetInnerHTML == null) ? invariant(false, '`dangerouslySetInnerHTML` does not make sense on <textarea>.') : void 0;\n\n // Always set children to the same thing. In IE9, the selection range will\n // get reset if `textContent` is mutated. We could add a check in setTextContent\n // to only set the value if/when the value differs from the node value (which would\n // completely solve this IE9 bug), but Sebastian+Sophie seemed to like this\n // solution. The value can be a boolean or object so that's why it's forced\n // to be a string.\n var hostProps = _assign({}, props, {\n value: undefined,\n defaultValue: undefined,\n children: toString(node._wrapperState.initialValue)\n });\n\n return hostProps;\n}\n\nfunction initWrapperState$2(element, props) {\n var node = element;\n {\n ReactControlledValuePropTypes.checkPropTypes('textarea', props);\n if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValDefaultVal) {\n warning$1(false, '%s contains a textarea with both value and defaultValue props. ' + 'Textarea elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled textarea ' + 'and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component');\n didWarnValDefaultVal = true;\n }\n }\n\n var initialValue = props.value;\n\n // Only bother fetching default value if we're going to use it\n if (initialValue == null) {\n var defaultValue = props.defaultValue;\n // TODO (yungsters): Remove support for children content in <textarea>.\n var children = props.children;\n if (children != null) {\n {\n warning$1(false, 'Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.');\n }\n !(defaultValue == null) ? invariant(false, 'If you supply `defaultValue` on a <textarea>, do not pass children.') : void 0;\n if (Array.isArray(children)) {\n !(children.length <= 1) ? invariant(false, '<textarea> can only have at most one child.') : void 0;\n children = children[0];\n }\n\n defaultValue = children;\n }\n if (defaultValue == null) {\n defaultValue = '';\n }\n initialValue = defaultValue;\n }\n\n node._wrapperState = {\n initialValue: getToStringValue(initialValue)\n };\n}\n\nfunction updateWrapper$1(element, props) {\n var node = element;\n var value = getToStringValue(props.value);\n var defaultValue = getToStringValue(props.defaultValue);\n if (value != null) {\n // Cast `value` to a string to ensure the value is set correctly. While\n // browsers typically do this as necessary, jsdom doesn't.\n var newValue = toString(value);\n // To avoid side effects (such as losing text selection), only set value if changed\n if (newValue !== node.value) {\n node.value = newValue;\n }\n if (props.defaultValue == null && node.defaultValue !== newValue) {\n node.defaultValue = newValue;\n }\n }\n if (defaultValue != null) {\n node.defaultValue = toString(defaultValue);\n }\n}\n\nfunction postMountWrapper$3(element, props) {\n var node = element;\n // This is in postMount because we need access to the DOM node, which is not\n // available until after the component has mounted.\n var textContent = node.textContent;\n\n // Only set node.value if textContent is equal to the expected\n // initial value. In IE10/IE11 there is a bug where the placeholder attribute\n // will populate textContent as well.\n // https://developer.microsoft.com/microsoft-edge/platform/issues/101525/\n if (textContent === node._wrapperState.initialValue) {\n node.value = textContent;\n }\n}\n\nfunction restoreControlledState$3(element, props) {\n // DOM component is still mounted; update\n updateWrapper$1(element, props);\n}\n\nvar HTML_NAMESPACE$1 = 'http://www.w3.org/1999/xhtml';\nvar MATH_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\nvar SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n\nvar Namespaces = {\n html: HTML_NAMESPACE$1,\n mathml: MATH_NAMESPACE,\n svg: SVG_NAMESPACE\n};\n\n// Assumes there is no parent namespace.\nfunction getIntrinsicNamespace(type) {\n switch (type) {\n case 'svg':\n return SVG_NAMESPACE;\n case 'math':\n return MATH_NAMESPACE;\n default:\n return HTML_NAMESPACE$1;\n }\n}\n\nfunction getChildNamespace(parentNamespace, type) {\n if (parentNamespace == null || parentNamespace === HTML_NAMESPACE$1) {\n // No (or default) parent namespace: potential entry point.\n return getIntrinsicNamespace(type);\n }\n if (parentNamespace === SVG_NAMESPACE && type === 'foreignObject') {\n // We're leaving SVG.\n return HTML_NAMESPACE$1;\n }\n // By default, pass namespace below.\n return parentNamespace;\n}\n\n/* globals MSApp */\n\n/**\n * Create a function which has 'unsafe' privileges (required by windows8 apps)\n */\nvar createMicrosoftUnsafeLocalFunction = function (func) {\n if (typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction) {\n return function (arg0, arg1, arg2, arg3) {\n MSApp.execUnsafeLocalFunction(function () {\n return func(arg0, arg1, arg2, arg3);\n });\n };\n } else {\n return func;\n }\n};\n\n// SVG temp container for IE lacking innerHTML\nvar reusableSVGContainer = void 0;\n\n/**\n * Set the innerHTML property of a node\n *\n * @param {DOMElement} node\n * @param {string} html\n * @internal\n */\nvar setInnerHTML = createMicrosoftUnsafeLocalFunction(function (node, html) {\n // IE does not have innerHTML for SVG nodes, so instead we inject the\n // new markup in a temp node and then move the child nodes across into\n // the target node\n\n if (node.namespaceURI === Namespaces.svg && !('innerHTML' in node)) {\n reusableSVGContainer = reusableSVGContainer || document.createElement('div');\n reusableSVGContainer.innerHTML = '<svg>' + html + '</svg>';\n var svgNode = reusableSVGContainer.firstChild;\n while (node.firstChild) {\n node.removeChild(node.firstChild);\n }\n while (svgNode.firstChild) {\n node.appendChild(svgNode.firstChild);\n }\n } else {\n node.innerHTML = html;\n }\n});\n\n/**\n * Set the textContent property of a node. For text updates, it's faster\n * to set the `nodeValue` of the Text node directly instead of using\n * `.textContent` which will remove the existing node and create a new one.\n *\n * @param {DOMElement} node\n * @param {string} text\n * @internal\n */\nvar setTextContent = function (node, text) {\n if (text) {\n var firstChild = node.firstChild;\n\n if (firstChild && firstChild === node.lastChild && firstChild.nodeType === TEXT_NODE) {\n firstChild.nodeValue = text;\n return;\n }\n }\n node.textContent = text;\n};\n\n// List derived from Gecko source code:\n// https://github.com/mozilla/gecko-dev/blob/4e638efc71/layout/style/test/property_database.js\nvar shorthandToLonghand = {\n animation: ['animationDelay', 'animationDirection', 'animationDuration', 'animationFillMode', 'animationIterationCount', 'animationName', 'animationPlayState', 'animationTimingFunction'],\n background: ['backgroundAttachment', 'backgroundClip', 'backgroundColor', 'backgroundImage', 'backgroundOrigin', 'backgroundPositionX', 'backgroundPositionY', 'backgroundRepeat', 'backgroundSize'],\n backgroundPosition: ['backgroundPositionX', 'backgroundPositionY'],\n border: ['borderBottomColor', 'borderBottomStyle', 'borderBottomWidth', 'borderImageOutset', 'borderImageRepeat', 'borderImageSlice', 'borderImageSource', 'borderImageWidth', 'borderLeftColor', 'borderLeftStyle', 'borderLeftWidth', 'borderRightColor', 'borderRightStyle', 'borderRightWidth', 'borderTopColor', 'borderTopStyle', 'borderTopWidth'],\n borderBlockEnd: ['borderBlockEndColor', 'borderBlockEndStyle', 'borderBlockEndWidth'],\n borderBlockStart: ['borderBlockStartColor', 'borderBlockStartStyle', 'borderBlockStartWidth'],\n borderBottom: ['borderBottomColor', 'borderBottomStyle', 'borderBottomWidth'],\n borderColor: ['borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor'],\n borderImage: ['borderImageOutset', 'borderImageRepeat', 'borderImageSlice', 'borderImageSource', 'borderImageWidth'],\n borderInlineEnd: ['borderInlineEndColor', 'borderInlineEndStyle', 'borderInlineEndWidth'],\n borderInlineStart: ['borderInlineStartColor', 'borderInlineStartStyle', 'borderInlineStartWidth'],\n borderLeft: ['borderLeftColor', 'borderLeftStyle', 'borderLeftWidth'],\n borderRadius: ['borderBottomLeftRadius', 'borderBottomRightRadius', 'borderTopLeftRadius', 'borderTopRightRadius'],\n borderRight: ['borderRightColor', 'borderRightStyle', 'borderRightWidth'],\n borderStyle: ['borderBottomStyle', 'borderLeftStyle', 'borderRightStyle', 'borderTopStyle'],\n borderTop: ['borderTopColor', 'borderTopStyle', 'borderTopWidth'],\n borderWidth: ['borderBottomWidth', 'borderLeftWidth', 'borderRightWidth', 'borderTopWidth'],\n columnRule: ['columnRuleColor', 'columnRuleStyle', 'columnRuleWidth'],\n columns: ['columnCount', 'columnWidth'],\n flex: ['flexBasis', 'flexGrow', 'flexShrink'],\n flexFlow: ['flexDirection', 'flexWrap'],\n font: ['fontFamily', 'fontFeatureSettings', 'fontKerning', 'fontLanguageOverride', 'fontSize', 'fontSizeAdjust', 'fontStretch', 'fontStyle', 'fontVariant', 'fontVariantAlternates', 'fontVariantCaps', 'fontVariantEastAsian', 'fontVariantLigatures', 'fontVariantNumeric', 'fontVariantPosition', 'fontWeight', 'lineHeight'],\n fontVariant: ['fontVariantAlternates', 'fontVariantCaps', 'fontVariantEastAsian', 'fontVariantLigatures', 'fontVariantNumeric', 'fontVariantPosition'],\n gap: ['columnGap', 'rowGap'],\n grid: ['gridAutoColumns', 'gridAutoFlow', 'gridAutoRows', 'gridTemplateAreas', 'gridTemplateColumns', 'gridTemplateRows'],\n gridArea: ['gridColumnEnd', 'gridColumnStart', 'gridRowEnd', 'gridRowStart'],\n gridColumn: ['gridColumnEnd', 'gridColumnStart'],\n gridColumnGap: ['columnGap'],\n gridGap: ['columnGap', 'rowGap'],\n gridRow: ['gridRowEnd', 'gridRowStart'],\n gridRowGap: ['rowGap'],\n gridTemplate: ['gridTemplateAreas', 'gridTemplateColumns', 'gridTemplateRows'],\n listStyle: ['listStyleImage', 'listStylePosition', 'listStyleType'],\n margin: ['marginBottom', 'marginLeft', 'marginRight', 'marginTop'],\n marker: ['markerEnd', 'markerMid', 'markerStart'],\n mask: ['maskClip', 'maskComposite', 'maskImage', 'maskMode', 'maskOrigin', 'maskPositionX', 'maskPositionY', 'maskRepeat', 'maskSize'],\n maskPosition: ['maskPositionX', 'maskPositionY'],\n outline: ['outlineColor', 'outlineStyle', 'outlineWidth'],\n overflow: ['overflowX', 'overflowY'],\n padding: ['paddingBottom', 'paddingLeft', 'paddingRight', 'paddingTop'],\n placeContent: ['alignContent', 'justifyContent'],\n placeItems: ['alignItems', 'justifyItems'],\n placeSelf: ['alignSelf', 'justifySelf'],\n textDecoration: ['textDecorationColor', 'textDecorationLine', 'textDecorationStyle'],\n textEmphasis: ['textEmphasisColor', 'textEmphasisStyle'],\n transition: ['transitionDelay', 'transitionDuration', 'transitionProperty', 'transitionTimingFunction'],\n wordWrap: ['overflowWrap']\n};\n\n/**\n * CSS properties which accept numbers but are not in units of \"px\".\n */\nvar isUnitlessNumber = {\n animationIterationCount: true,\n borderImageOutset: true,\n borderImageSlice: true,\n borderImageWidth: true,\n boxFlex: true,\n boxFlexGroup: true,\n boxOrdinalGroup: true,\n columnCount: true,\n columns: true,\n flex: true,\n flexGrow: true,\n flexPositive: true,\n flexShrink: true,\n flexNegative: true,\n flexOrder: true,\n gridArea: true,\n gridRow: true,\n gridRowEnd: true,\n gridRowSpan: true,\n gridRowStart: true,\n gridColumn: true,\n gridColumnEnd: true,\n gridColumnSpan: true,\n gridColumnStart: true,\n fontWeight: true,\n lineClamp: true,\n lineHeight: true,\n opacity: true,\n order: true,\n orphans: true,\n tabSize: true,\n widows: true,\n zIndex: true,\n zoom: true,\n\n // SVG-related properties\n fillOpacity: true,\n floodOpacity: true,\n stopOpacity: true,\n strokeDasharray: true,\n strokeDashoffset: true,\n strokeMiterlimit: true,\n strokeOpacity: true,\n strokeWidth: true\n};\n\n/**\n * @param {string} prefix vendor-specific prefix, eg: Webkit\n * @param {string} key style name, eg: transitionDuration\n * @return {string} style name prefixed with `prefix`, properly camelCased, eg:\n * WebkitTransitionDuration\n */\nfunction prefixKey(prefix, key) {\n return prefix + key.charAt(0).toUpperCase() + key.substring(1);\n}\n\n/**\n * Support style names that may come passed in prefixed by adding permutations\n * of vendor prefixes.\n */\nvar prefixes = ['Webkit', 'ms', 'Moz', 'O'];\n\n// Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an\n// infinite loop, because it iterates over the newly added props too.\nObject.keys(isUnitlessNumber).forEach(function (prop) {\n prefixes.forEach(function (prefix) {\n isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];\n });\n});\n\n/**\n * Convert a value into the proper css writable value. The style name `name`\n * should be logical (no hyphens), as specified\n * in `CSSProperty.isUnitlessNumber`.\n *\n * @param {string} name CSS property name such as `topMargin`.\n * @param {*} value CSS property value such as `10px`.\n * @return {string} Normalized style value with dimensions applied.\n */\nfunction dangerousStyleValue(name, value, isCustomProperty) {\n // Note that we've removed escapeTextForBrowser() calls here since the\n // whole string will be escaped when the attribute is injected into\n // the markup. If you provide unsafe user data here they can inject\n // arbitrary CSS which may be problematic (I couldn't repro this):\n // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet\n // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/\n // This is not an XSS hole but instead a potential CSS injection issue\n // which has lead to a greater discussion about how we're going to\n // trust URLs moving forward. See #2115901\n\n var isEmpty = value == null || typeof value === 'boolean' || value === '';\n if (isEmpty) {\n return '';\n }\n\n if (!isCustomProperty && typeof value === 'number' && value !== 0 && !(isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name])) {\n return value + 'px'; // Presumes implicit 'px' suffix for unitless numbers\n }\n\n return ('' + value).trim();\n}\n\nvar uppercasePattern = /([A-Z])/g;\nvar msPattern = /^ms-/;\n\n/**\n * Hyphenates a camelcased CSS property name, for example:\n *\n * > hyphenateStyleName('backgroundColor')\n * < \"background-color\"\n * > hyphenateStyleName('MozTransition')\n * < \"-moz-transition\"\n * > hyphenateStyleName('msTransition')\n * < \"-ms-transition\"\n *\n * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix\n * is converted to `-ms-`.\n */\nfunction hyphenateStyleName(name) {\n return name.replace(uppercasePattern, '-$1').toLowerCase().replace(msPattern, '-ms-');\n}\n\nvar warnValidStyle = function () {};\n\n{\n // 'msTransform' is correct, but the other prefixes should be capitalized\n var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/;\n var msPattern$1 = /^-ms-/;\n var hyphenPattern = /-(.)/g;\n\n // style values shouldn't contain a semicolon\n var badStyleValueWithSemicolonPattern = /;\\s*$/;\n\n var warnedStyleNames = {};\n var warnedStyleValues = {};\n var warnedForNaNValue = false;\n var warnedForInfinityValue = false;\n\n var camelize = function (string) {\n return string.replace(hyphenPattern, function (_, character) {\n return character.toUpperCase();\n });\n };\n\n var warnHyphenatedStyleName = function (name) {\n if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n return;\n }\n\n warnedStyleNames[name] = true;\n warning$1(false, 'Unsupported style property %s. Did you mean %s?', name,\n // As Andi Smith suggests\n // (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix\n // is converted to lowercase `ms`.\n camelize(name.replace(msPattern$1, 'ms-')));\n };\n\n var warnBadVendoredStyleName = function (name) {\n if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n return;\n }\n\n warnedStyleNames[name] = true;\n warning$1(false, 'Unsupported vendor-prefixed style property %s. Did you mean %s?', name, name.charAt(0).toUpperCase() + name.slice(1));\n };\n\n var warnStyleValueWithSemicolon = function (name, value) {\n if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) {\n return;\n }\n\n warnedStyleValues[value] = true;\n warning$1(false, \"Style property values shouldn't contain a semicolon. \" + 'Try \"%s: %s\" instead.', name, value.replace(badStyleValueWithSemicolonPattern, ''));\n };\n\n var warnStyleValueIsNaN = function (name, value) {\n if (warnedForNaNValue) {\n return;\n }\n\n warnedForNaNValue = true;\n warning$1(false, '`NaN` is an invalid value for the `%s` css style property.', name);\n };\n\n var warnStyleValueIsInfinity = function (name, value) {\n if (warnedForInfinityValue) {\n return;\n }\n\n warnedForInfinityValue = true;\n warning$1(false, '`Infinity` is an invalid value for the `%s` css style property.', name);\n };\n\n warnValidStyle = function (name, value) {\n if (name.indexOf('-') > -1) {\n warnHyphenatedStyleName(name);\n } else if (badVendoredStyleNamePattern.test(name)) {\n warnBadVendoredStyleName(name);\n } else if (badStyleValueWithSemicolonPattern.test(value)) {\n warnStyleValueWithSemicolon(name, value);\n }\n\n if (typeof value === 'number') {\n if (isNaN(value)) {\n warnStyleValueIsNaN(name, value);\n } else if (!isFinite(value)) {\n warnStyleValueIsInfinity(name, value);\n }\n }\n };\n}\n\nvar warnValidStyle$1 = warnValidStyle;\n\n/**\n * Operations for dealing with CSS properties.\n */\n\n/**\n * This creates a string that is expected to be equivalent to the style\n * attribute generated by server-side rendering. It by-passes warnings and\n * security checks so it's not safe to use this value for anything other than\n * comparison. It is only used in DEV for SSR validation.\n */\nfunction createDangerousStringForStyles(styles) {\n {\n var serialized = '';\n var delimiter = '';\n for (var styleName in styles) {\n if (!styles.hasOwnProperty(styleName)) {\n continue;\n }\n var styleValue = styles[styleName];\n if (styleValue != null) {\n var isCustomProperty = styleName.indexOf('--') === 0;\n serialized += delimiter + hyphenateStyleName(styleName) + ':';\n serialized += dangerousStyleValue(styleName, styleValue, isCustomProperty);\n\n delimiter = ';';\n }\n }\n return serialized || null;\n }\n}\n\n/**\n * Sets the value for multiple styles on a node. If a value is specified as\n * '' (empty string), the corresponding style property will be unset.\n *\n * @param {DOMElement} node\n * @param {object} styles\n */\nfunction setValueForStyles(node, styles) {\n var style = node.style;\n for (var styleName in styles) {\n if (!styles.hasOwnProperty(styleName)) {\n continue;\n }\n var isCustomProperty = styleName.indexOf('--') === 0;\n {\n if (!isCustomProperty) {\n warnValidStyle$1(styleName, styles[styleName]);\n }\n }\n var styleValue = dangerousStyleValue(styleName, styles[styleName], isCustomProperty);\n if (styleName === 'float') {\n styleName = 'cssFloat';\n }\n if (isCustomProperty) {\n style.setProperty(styleName, styleValue);\n } else {\n style[styleName] = styleValue;\n }\n }\n}\n\nfunction isValueEmpty(value) {\n return value == null || typeof value === 'boolean' || value === '';\n}\n\n/**\n * Given {color: 'red', overflow: 'hidden'} returns {\n * color: 'color',\n * overflowX: 'overflow',\n * overflowY: 'overflow',\n * }. This can be read as \"the overflowY property was set by the overflow\n * shorthand\". That is, the values are the property that each was derived from.\n */\nfunction expandShorthandMap(styles) {\n var expanded = {};\n for (var key in styles) {\n var longhands = shorthandToLonghand[key] || [key];\n for (var i = 0; i < longhands.length; i++) {\n expanded[longhands[i]] = key;\n }\n }\n return expanded;\n}\n\n/**\n * When mixing shorthand and longhand property names, we warn during updates if\n * we expect an incorrect result to occur. In particular, we warn for:\n *\n * Updating a shorthand property (longhand gets overwritten):\n * {font: 'foo', fontVariant: 'bar'} -> {font: 'baz', fontVariant: 'bar'}\n * becomes .style.font = 'baz'\n * Removing a shorthand property (longhand gets lost too):\n * {font: 'foo', fontVariant: 'bar'} -> {fontVariant: 'bar'}\n * becomes .style.font = ''\n * Removing a longhand property (should revert to shorthand; doesn't):\n * {font: 'foo', fontVariant: 'bar'} -> {font: 'foo'}\n * becomes .style.fontVariant = ''\n */\nfunction validateShorthandPropertyCollisionInDev(styleUpdates, nextStyles) {\n if (!warnAboutShorthandPropertyCollision) {\n return;\n }\n\n if (!nextStyles) {\n return;\n }\n\n var expandedUpdates = expandShorthandMap(styleUpdates);\n var expandedStyles = expandShorthandMap(nextStyles);\n var warnedAbout = {};\n for (var key in expandedUpdates) {\n var originalKey = expandedUpdates[key];\n var correctOriginalKey = expandedStyles[key];\n if (correctOriginalKey && originalKey !== correctOriginalKey) {\n var warningKey = originalKey + ',' + correctOriginalKey;\n if (warnedAbout[warningKey]) {\n continue;\n }\n warnedAbout[warningKey] = true;\n warning$1(false, '%s a style property during rerender (%s) when a ' + 'conflicting property is set (%s) can lead to styling bugs. To ' + \"avoid this, don't mix shorthand and non-shorthand properties \" + 'for the same value; instead, replace the shorthand with ' + 'separate values.', isValueEmpty(styleUpdates[originalKey]) ? 'Removing' : 'Updating', originalKey, correctOriginalKey);\n }\n }\n}\n\n// For HTML, certain tags should omit their close tag. We keep a whitelist for\n// those special-case tags.\n\nvar omittedCloseTags = {\n area: true,\n base: true,\n br: true,\n col: true,\n embed: true,\n hr: true,\n img: true,\n input: true,\n keygen: true,\n link: true,\n meta: true,\n param: true,\n source: true,\n track: true,\n wbr: true\n // NOTE: menuitem's close tag should be omitted, but that causes problems.\n};\n\n// For HTML, certain tags cannot have children. This has the same purpose as\n// `omittedCloseTags` except that `menuitem` should still have its closing tag.\n\nvar voidElementTags = _assign({\n menuitem: true\n}, omittedCloseTags);\n\n// TODO: We can remove this if we add invariantWithStack()\n// or add stack by default to invariants where possible.\nvar HTML$1 = '__html';\n\nvar ReactDebugCurrentFrame$2 = null;\n{\n ReactDebugCurrentFrame$2 = ReactSharedInternals.ReactDebugCurrentFrame;\n}\n\nfunction assertValidProps(tag, props) {\n if (!props) {\n return;\n }\n // Note the use of `==` which checks for null or undefined.\n if (voidElementTags[tag]) {\n !(props.children == null && props.dangerouslySetInnerHTML == null) ? invariant(false, '%s is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.%s', tag, ReactDebugCurrentFrame$2.getStackAddendum()) : void 0;\n }\n if (props.dangerouslySetInnerHTML != null) {\n !(props.children == null) ? invariant(false, 'Can only set one of `children` or `props.dangerouslySetInnerHTML`.') : void 0;\n !(typeof props.dangerouslySetInnerHTML === 'object' && HTML$1 in props.dangerouslySetInnerHTML) ? invariant(false, '`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://fb.me/react-invariant-dangerously-set-inner-html for more information.') : void 0;\n }\n {\n !(props.suppressContentEditableWarning || !props.contentEditable || props.children == null) ? warning$1(false, 'A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.') : void 0;\n }\n !(props.style == null || typeof props.style === 'object') ? invariant(false, 'The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + \\'em\\'}} when using JSX.%s', ReactDebugCurrentFrame$2.getStackAddendum()) : void 0;\n}\n\nfunction isCustomComponent(tagName, props) {\n if (tagName.indexOf('-') === -1) {\n return typeof props.is === 'string';\n }\n switch (tagName) {\n // These are reserved SVG and MathML elements.\n // We don't mind this whitelist too much because we expect it to never grow.\n // The alternative is to track the namespace in a few places which is convoluted.\n // https://w3c.github.io/webcomponents/spec/custom/#custom-elements-core-concepts\n case 'annotation-xml':\n case 'color-profile':\n case 'font-face':\n case 'font-face-src':\n case 'font-face-uri':\n case 'font-face-format':\n case 'font-face-name':\n case 'missing-glyph':\n return false;\n default:\n return true;\n }\n}\n\n// When adding attributes to the HTML or SVG whitelist, be sure to\n// also add them to this module to ensure casing and incorrect name\n// warnings.\nvar possibleStandardNames = {\n // HTML\n accept: 'accept',\n acceptcharset: 'acceptCharset',\n 'accept-charset': 'acceptCharset',\n accesskey: 'accessKey',\n action: 'action',\n allowfullscreen: 'allowFullScreen',\n alt: 'alt',\n as: 'as',\n async: 'async',\n autocapitalize: 'autoCapitalize',\n autocomplete: 'autoComplete',\n autocorrect: 'autoCorrect',\n autofocus: 'autoFocus',\n autoplay: 'autoPlay',\n autosave: 'autoSave',\n capture: 'capture',\n cellpadding: 'cellPadding',\n cellspacing: 'cellSpacing',\n challenge: 'challenge',\n charset: 'charSet',\n checked: 'checked',\n children: 'children',\n cite: 'cite',\n class: 'className',\n classid: 'classID',\n classname: 'className',\n cols: 'cols',\n colspan: 'colSpan',\n content: 'content',\n contenteditable: 'contentEditable',\n contextmenu: 'contextMenu',\n controls: 'controls',\n controlslist: 'controlsList',\n coords: 'coords',\n crossorigin: 'crossOrigin',\n dangerouslysetinnerhtml: 'dangerouslySetInnerHTML',\n data: 'data',\n datetime: 'dateTime',\n default: 'default',\n defaultchecked: 'defaultChecked',\n defaultvalue: 'defaultValue',\n defer: 'defer',\n dir: 'dir',\n disabled: 'disabled',\n download: 'download',\n draggable: 'draggable',\n enctype: 'encType',\n for: 'htmlFor',\n form: 'form',\n formmethod: 'formMethod',\n formaction: 'formAction',\n formenctype: 'formEncType',\n formnovalidate: 'formNoValidate',\n formtarget: 'formTarget',\n frameborder: 'frameBorder',\n headers: 'headers',\n height: 'height',\n hidden: 'hidden',\n high: 'high',\n href: 'href',\n hreflang: 'hrefLang',\n htmlfor: 'htmlFor',\n httpequiv: 'httpEquiv',\n 'http-equiv': 'httpEquiv',\n icon: 'icon',\n id: 'id',\n innerhtml: 'innerHTML',\n inputmode: 'inputMode',\n integrity: 'integrity',\n is: 'is',\n itemid: 'itemID',\n itemprop: 'itemProp',\n itemref: 'itemRef',\n itemscope: 'itemScope',\n itemtype: 'itemType',\n keyparams: 'keyParams',\n keytype: 'keyType',\n kind: 'kind',\n label: 'label',\n lang: 'lang',\n list: 'list',\n loop: 'loop',\n low: 'low',\n manifest: 'manifest',\n marginwidth: 'marginWidth',\n marginheight: 'marginHeight',\n max: 'max',\n maxlength: 'maxLength',\n media: 'media',\n mediagroup: 'mediaGroup',\n method: 'method',\n min: 'min',\n minlength: 'minLength',\n multiple: 'multiple',\n muted: 'muted',\n name: 'name',\n nomodule: 'noModule',\n nonce: 'nonce',\n novalidate: 'noValidate',\n open: 'open',\n optimum: 'optimum',\n pattern: 'pattern',\n placeholder: 'placeholder',\n playsinline: 'playsInline',\n poster: 'poster',\n preload: 'preload',\n profile: 'profile',\n radiogroup: 'radioGroup',\n readonly: 'readOnly',\n referrerpolicy: 'referrerPolicy',\n rel: 'rel',\n required: 'required',\n reversed: 'reversed',\n role: 'role',\n rows: 'rows',\n rowspan: 'rowSpan',\n sandbox: 'sandbox',\n scope: 'scope',\n scoped: 'scoped',\n scrolling: 'scrolling',\n seamless: 'seamless',\n selected: 'selected',\n shape: 'shape',\n size: 'size',\n sizes: 'sizes',\n span: 'span',\n spellcheck: 'spellCheck',\n src: 'src',\n srcdoc: 'srcDoc',\n srclang: 'srcLang',\n srcset: 'srcSet',\n start: 'start',\n step: 'step',\n style: 'style',\n summary: 'summary',\n tabindex: 'tabIndex',\n target: 'target',\n title: 'title',\n type: 'type',\n usemap: 'useMap',\n value: 'value',\n width: 'width',\n wmode: 'wmode',\n wrap: 'wrap',\n\n // SVG\n about: 'about',\n accentheight: 'accentHeight',\n 'accent-height': 'accentHeight',\n accumulate: 'accumulate',\n additive: 'additive',\n alignmentbaseline: 'alignmentBaseline',\n 'alignment-baseline': 'alignmentBaseline',\n allowreorder: 'allowReorder',\n alphabetic: 'alphabetic',\n amplitude: 'amplitude',\n arabicform: 'arabicForm',\n 'arabic-form': 'arabicForm',\n ascent: 'ascent',\n attributename: 'attributeName',\n attributetype: 'attributeType',\n autoreverse: 'autoReverse',\n azimuth: 'azimuth',\n basefrequency: 'baseFrequency',\n baselineshift: 'baselineShift',\n 'baseline-shift': 'baselineShift',\n baseprofile: 'baseProfile',\n bbox: 'bbox',\n begin: 'begin',\n bias: 'bias',\n by: 'by',\n calcmode: 'calcMode',\n capheight: 'capHeight',\n 'cap-height': 'capHeight',\n clip: 'clip',\n clippath: 'clipPath',\n 'clip-path': 'clipPath',\n clippathunits: 'clipPathUnits',\n cliprule: 'clipRule',\n 'clip-rule': 'clipRule',\n color: 'color',\n colorinterpolation: 'colorInterpolation',\n 'color-interpolation': 'colorInterpolation',\n colorinterpolationfilters: 'colorInterpolationFilters',\n 'color-interpolation-filters': 'colorInterpolationFilters',\n colorprofile: 'colorProfile',\n 'color-profile': 'colorProfile',\n colorrendering: 'colorRendering',\n 'color-rendering': 'colorRendering',\n contentscripttype: 'contentScriptType',\n contentstyletype: 'contentStyleType',\n cursor: 'cursor',\n cx: 'cx',\n cy: 'cy',\n d: 'd',\n datatype: 'datatype',\n decelerate: 'decelerate',\n descent: 'descent',\n diffuseconstant: 'diffuseConstant',\n direction: 'direction',\n display: 'display',\n divisor: 'divisor',\n dominantbaseline: 'dominantBaseline',\n 'dominant-baseline': 'dominantBaseline',\n dur: 'dur',\n dx: 'dx',\n dy: 'dy',\n edgemode: 'edgeMode',\n elevation: 'elevation',\n enablebackground: 'enableBackground',\n 'enable-background': 'enableBackground',\n end: 'end',\n exponent: 'exponent',\n externalresourcesrequired: 'externalResourcesRequired',\n fill: 'fill',\n fillopacity: 'fillOpacity',\n 'fill-opacity': 'fillOpacity',\n fillrule: 'fillRule',\n 'fill-rule': 'fillRule',\n filter: 'filter',\n filterres: 'filterRes',\n filterunits: 'filterUnits',\n floodopacity: 'floodOpacity',\n 'flood-opacity': 'floodOpacity',\n floodcolor: 'floodColor',\n 'flood-color': 'floodColor',\n focusable: 'focusable',\n fontfamily: 'fontFamily',\n 'font-family': 'fontFamily',\n fontsize: 'fontSize',\n 'font-size': 'fontSize',\n fontsizeadjust: 'fontSizeAdjust',\n 'font-size-adjust': 'fontSizeAdjust',\n fontstretch: 'fontStretch',\n 'font-stretch': 'fontStretch',\n fontstyle: 'fontStyle',\n 'font-style': 'fontStyle',\n fontvariant: 'fontVariant',\n 'font-variant': 'fontVariant',\n fontweight: 'fontWeight',\n 'font-weight': 'fontWeight',\n format: 'format',\n from: 'from',\n fx: 'fx',\n fy: 'fy',\n g1: 'g1',\n g2: 'g2',\n glyphname: 'glyphName',\n 'glyph-name': 'glyphName',\n glyphorientationhorizontal: 'glyphOrientationHorizontal',\n 'glyph-orientation-horizontal': 'glyphOrientationHorizontal',\n glyphorientationvertical: 'glyphOrientationVertical',\n 'glyph-orientation-vertical': 'glyphOrientationVertical',\n glyphref: 'glyphRef',\n gradienttransform: 'gradientTransform',\n gradientunits: 'gradientUnits',\n hanging: 'hanging',\n horizadvx: 'horizAdvX',\n 'horiz-adv-x': 'horizAdvX',\n horizoriginx: 'horizOriginX',\n 'horiz-origin-x': 'horizOriginX',\n ideographic: 'ideographic',\n imagerendering: 'imageRendering',\n 'image-rendering': 'imageRendering',\n in2: 'in2',\n in: 'in',\n inlist: 'inlist',\n intercept: 'intercept',\n k1: 'k1',\n k2: 'k2',\n k3: 'k3',\n k4: 'k4',\n k: 'k',\n kernelmatrix: 'kernelMatrix',\n kernelunitlength: 'kernelUnitLength',\n kerning: 'kerning',\n keypoints: 'keyPoints',\n keysplines: 'keySplines',\n keytimes: 'keyTimes',\n lengthadjust: 'lengthAdjust',\n letterspacing: 'letterSpacing',\n 'letter-spacing': 'letterSpacing',\n lightingcolor: 'lightingColor',\n 'lighting-color': 'lightingColor',\n limitingconeangle: 'limitingConeAngle',\n local: 'local',\n markerend: 'markerEnd',\n 'marker-end': 'markerEnd',\n markerheight: 'markerHeight',\n markermid: 'markerMid',\n 'marker-mid': 'markerMid',\n markerstart: 'markerStart',\n 'marker-start': 'markerStart',\n markerunits: 'markerUnits',\n markerwidth: 'markerWidth',\n mask: 'mask',\n maskcontentunits: 'maskContentUnits',\n maskunits: 'maskUnits',\n mathematical: 'mathematical',\n mode: 'mode',\n numoctaves: 'numOctaves',\n offset: 'offset',\n opacity: 'opacity',\n operator: 'operator',\n order: 'order',\n orient: 'orient',\n orientation: 'orientation',\n origin: 'origin',\n overflow: 'overflow',\n overlineposition: 'overlinePosition',\n 'overline-position': 'overlinePosition',\n overlinethickness: 'overlineThickness',\n 'overline-thickness': 'overlineThickness',\n paintorder: 'paintOrder',\n 'paint-order': 'paintOrder',\n panose1: 'panose1',\n 'panose-1': 'panose1',\n pathlength: 'pathLength',\n patterncontentunits: 'patternContentUnits',\n patterntransform: 'patternTransform',\n patternunits: 'patternUnits',\n pointerevents: 'pointerEvents',\n 'pointer-events': 'pointerEvents',\n points: 'points',\n pointsatx: 'pointsAtX',\n pointsaty: 'pointsAtY',\n pointsatz: 'pointsAtZ',\n prefix: 'prefix',\n preservealpha: 'preserveAlpha',\n preserveaspectratio: 'preserveAspectRatio',\n primitiveunits: 'primitiveUnits',\n property: 'property',\n r: 'r',\n radius: 'radius',\n refx: 'refX',\n refy: 'refY',\n renderingintent: 'renderingIntent',\n 'rendering-intent': 'renderingIntent',\n repeatcount: 'repeatCount',\n repeatdur: 'repeatDur',\n requiredextensions: 'requiredExtensions',\n requiredfeatures: 'requiredFeatures',\n resource: 'resource',\n restart: 'restart',\n result: 'result',\n results: 'results',\n rotate: 'rotate',\n rx: 'rx',\n ry: 'ry',\n scale: 'scale',\n security: 'security',\n seed: 'seed',\n shaperendering: 'shapeRendering',\n 'shape-rendering': 'shapeRendering',\n slope: 'slope',\n spacing: 'spacing',\n specularconstant: 'specularConstant',\n specularexponent: 'specularExponent',\n speed: 'speed',\n spreadmethod: 'spreadMethod',\n startoffset: 'startOffset',\n stddeviation: 'stdDeviation',\n stemh: 'stemh',\n stemv: 'stemv',\n stitchtiles: 'stitchTiles',\n stopcolor: 'stopColor',\n 'stop-color': 'stopColor',\n stopopacity: 'stopOpacity',\n 'stop-opacity': 'stopOpacity',\n strikethroughposition: 'strikethroughPosition',\n 'strikethrough-position': 'strikethroughPosition',\n strikethroughthickness: 'strikethroughThickness',\n 'strikethrough-thickness': 'strikethroughThickness',\n string: 'string',\n stroke: 'stroke',\n strokedasharray: 'strokeDasharray',\n 'stroke-dasharray': 'strokeDasharray',\n strokedashoffset: 'strokeDashoffset',\n 'stroke-dashoffset': 'strokeDashoffset',\n strokelinecap: 'strokeLinecap',\n 'stroke-linecap': 'strokeLinecap',\n strokelinejoin: 'strokeLinejoin',\n 'stroke-linejoin': 'strokeLinejoin',\n strokemiterlimit: 'strokeMiterlimit',\n 'stroke-miterlimit': 'strokeMiterlimit',\n strokewidth: 'strokeWidth',\n 'stroke-width': 'strokeWidth',\n strokeopacity: 'strokeOpacity',\n 'stroke-opacity': 'strokeOpacity',\n suppresscontenteditablewarning: 'suppressContentEditableWarning',\n suppresshydrationwarning: 'suppressHydrationWarning',\n surfacescale: 'surfaceScale',\n systemlanguage: 'systemLanguage',\n tablevalues: 'tableValues',\n targetx: 'targetX',\n targety: 'targetY',\n textanchor: 'textAnchor',\n 'text-anchor': 'textAnchor',\n textdecoration: 'textDecoration',\n 'text-decoration': 'textDecoration',\n textlength: 'textLength',\n textrendering: 'textRendering',\n 'text-rendering': 'textRendering',\n to: 'to',\n transform: 'transform',\n typeof: 'typeof',\n u1: 'u1',\n u2: 'u2',\n underlineposition: 'underlinePosition',\n 'underline-position': 'underlinePosition',\n underlinethickness: 'underlineThickness',\n 'underline-thickness': 'underlineThickness',\n unicode: 'unicode',\n unicodebidi: 'unicodeBidi',\n 'unicode-bidi': 'unicodeBidi',\n unicoderange: 'unicodeRange',\n 'unicode-range': 'unicodeRange',\n unitsperem: 'unitsPerEm',\n 'units-per-em': 'unitsPerEm',\n unselectable: 'unselectable',\n valphabetic: 'vAlphabetic',\n 'v-alphabetic': 'vAlphabetic',\n values: 'values',\n vectoreffect: 'vectorEffect',\n 'vector-effect': 'vectorEffect',\n version: 'version',\n vertadvy: 'vertAdvY',\n 'vert-adv-y': 'vertAdvY',\n vertoriginx: 'vertOriginX',\n 'vert-origin-x': 'vertOriginX',\n vertoriginy: 'vertOriginY',\n 'vert-origin-y': 'vertOriginY',\n vhanging: 'vHanging',\n 'v-hanging': 'vHanging',\n videographic: 'vIdeographic',\n 'v-ideographic': 'vIdeographic',\n viewbox: 'viewBox',\n viewtarget: 'viewTarget',\n visibility: 'visibility',\n vmathematical: 'vMathematical',\n 'v-mathematical': 'vMathematical',\n vocab: 'vocab',\n widths: 'widths',\n wordspacing: 'wordSpacing',\n 'word-spacing': 'wordSpacing',\n writingmode: 'writingMode',\n 'writing-mode': 'writingMode',\n x1: 'x1',\n x2: 'x2',\n x: 'x',\n xchannelselector: 'xChannelSelector',\n xheight: 'xHeight',\n 'x-height': 'xHeight',\n xlinkactuate: 'xlinkActuate',\n 'xlink:actuate': 'xlinkActuate',\n xlinkarcrole: 'xlinkArcrole',\n 'xlink:arcrole': 'xlinkArcrole',\n xlinkhref: 'xlinkHref',\n 'xlink:href': 'xlinkHref',\n xlinkrole: 'xlinkRole',\n 'xlink:role': 'xlinkRole',\n xlinkshow: 'xlinkShow',\n 'xlink:show': 'xlinkShow',\n xlinktitle: 'xlinkTitle',\n 'xlink:title': 'xlinkTitle',\n xlinktype: 'xlinkType',\n 'xlink:type': 'xlinkType',\n xmlbase: 'xmlBase',\n 'xml:base': 'xmlBase',\n xmllang: 'xmlLang',\n 'xml:lang': 'xmlLang',\n xmlns: 'xmlns',\n 'xml:space': 'xmlSpace',\n xmlnsxlink: 'xmlnsXlink',\n 'xmlns:xlink': 'xmlnsXlink',\n xmlspace: 'xmlSpace',\n y1: 'y1',\n y2: 'y2',\n y: 'y',\n ychannelselector: 'yChannelSelector',\n z: 'z',\n zoomandpan: 'zoomAndPan'\n};\n\nvar ariaProperties = {\n 'aria-current': 0, // state\n 'aria-details': 0,\n 'aria-disabled': 0, // state\n 'aria-hidden': 0, // state\n 'aria-invalid': 0, // state\n 'aria-keyshortcuts': 0,\n 'aria-label': 0,\n 'aria-roledescription': 0,\n // Widget Attributes\n 'aria-autocomplete': 0,\n 'aria-checked': 0,\n 'aria-expanded': 0,\n 'aria-haspopup': 0,\n 'aria-level': 0,\n 'aria-modal': 0,\n 'aria-multiline': 0,\n 'aria-multiselectable': 0,\n 'aria-orientation': 0,\n 'aria-placeholder': 0,\n 'aria-pressed': 0,\n 'aria-readonly': 0,\n 'aria-required': 0,\n 'aria-selected': 0,\n 'aria-sort': 0,\n 'aria-valuemax': 0,\n 'aria-valuemin': 0,\n 'aria-valuenow': 0,\n 'aria-valuetext': 0,\n // Live Region Attributes\n 'aria-atomic': 0,\n 'aria-busy': 0,\n 'aria-live': 0,\n 'aria-relevant': 0,\n // Drag-and-Drop Attributes\n 'aria-dropeffect': 0,\n 'aria-grabbed': 0,\n // Relationship Attributes\n 'aria-activedescendant': 0,\n 'aria-colcount': 0,\n 'aria-colindex': 0,\n 'aria-colspan': 0,\n 'aria-controls': 0,\n 'aria-describedby': 0,\n 'aria-errormessage': 0,\n 'aria-flowto': 0,\n 'aria-labelledby': 0,\n 'aria-owns': 0,\n 'aria-posinset': 0,\n 'aria-rowcount': 0,\n 'aria-rowindex': 0,\n 'aria-rowspan': 0,\n 'aria-setsize': 0\n};\n\nvar warnedProperties = {};\nvar rARIA = new RegExp('^(aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$');\nvar rARIACamel = new RegExp('^(aria)[A-Z][' + ATTRIBUTE_NAME_CHAR + ']*$');\n\nvar hasOwnProperty$2 = Object.prototype.hasOwnProperty;\n\nfunction validateProperty(tagName, name) {\n if (hasOwnProperty$2.call(warnedProperties, name) && warnedProperties[name]) {\n return true;\n }\n\n if (rARIACamel.test(name)) {\n var ariaName = 'aria-' + name.slice(4).toLowerCase();\n var correctName = ariaProperties.hasOwnProperty(ariaName) ? ariaName : null;\n\n // If this is an aria-* attribute, but is not listed in the known DOM\n // DOM properties, then it is an invalid aria-* attribute.\n if (correctName == null) {\n warning$1(false, 'Invalid ARIA attribute `%s`. ARIA attributes follow the pattern aria-* and must be lowercase.', name);\n warnedProperties[name] = true;\n return true;\n }\n // aria-* attributes should be lowercase; suggest the lowercase version.\n if (name !== correctName) {\n warning$1(false, 'Invalid ARIA attribute `%s`. Did you mean `%s`?', name, correctName);\n warnedProperties[name] = true;\n return true;\n }\n }\n\n if (rARIA.test(name)) {\n var lowerCasedName = name.toLowerCase();\n var standardName = ariaProperties.hasOwnProperty(lowerCasedName) ? lowerCasedName : null;\n\n // If this is an aria-* attribute, but is not listed in the known DOM\n // DOM properties, then it is an invalid aria-* attribute.\n if (standardName == null) {\n warnedProperties[name] = true;\n return false;\n }\n // aria-* attributes should be lowercase; suggest the lowercase version.\n if (name !== standardName) {\n warning$1(false, 'Unknown ARIA attribute `%s`. Did you mean `%s`?', name, standardName);\n warnedProperties[name] = true;\n return true;\n }\n }\n\n return true;\n}\n\nfunction warnInvalidARIAProps(type, props) {\n var invalidProps = [];\n\n for (var key in props) {\n var isValid = validateProperty(type, key);\n if (!isValid) {\n invalidProps.push(key);\n }\n }\n\n var unknownPropString = invalidProps.map(function (prop) {\n return '`' + prop + '`';\n }).join(', ');\n\n if (invalidProps.length === 1) {\n warning$1(false, 'Invalid aria prop %s on <%s> tag. ' + 'For details, see https://fb.me/invalid-aria-prop', unknownPropString, type);\n } else if (invalidProps.length > 1) {\n warning$1(false, 'Invalid aria props %s on <%s> tag. ' + 'For details, see https://fb.me/invalid-aria-prop', unknownPropString, type);\n }\n}\n\nfunction validateProperties(type, props) {\n if (isCustomComponent(type, props)) {\n return;\n }\n warnInvalidARIAProps(type, props);\n}\n\nvar didWarnValueNull = false;\n\nfunction validateProperties$1(type, props) {\n if (type !== 'input' && type !== 'textarea' && type !== 'select') {\n return;\n }\n\n if (props != null && props.value === null && !didWarnValueNull) {\n didWarnValueNull = true;\n if (type === 'select' && props.multiple) {\n warning$1(false, '`value` prop on `%s` should not be null. ' + 'Consider using an empty array when `multiple` is set to `true` ' + 'to clear the component or `undefined` for uncontrolled components.', type);\n } else {\n warning$1(false, '`value` prop on `%s` should not be null. ' + 'Consider using an empty string to clear the component or `undefined` ' + 'for uncontrolled components.', type);\n }\n }\n}\n\nvar validateProperty$1 = function () {};\n\n{\n var warnedProperties$1 = {};\n var _hasOwnProperty = Object.prototype.hasOwnProperty;\n var EVENT_NAME_REGEX = /^on./;\n var INVALID_EVENT_NAME_REGEX = /^on[^A-Z]/;\n var rARIA$1 = new RegExp('^(aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$');\n var rARIACamel$1 = new RegExp('^(aria)[A-Z][' + ATTRIBUTE_NAME_CHAR + ']*$');\n\n validateProperty$1 = function (tagName, name, value, canUseEventSystem) {\n if (_hasOwnProperty.call(warnedProperties$1, name) && warnedProperties$1[name]) {\n return true;\n }\n\n var lowerCasedName = name.toLowerCase();\n if (lowerCasedName === 'onfocusin' || lowerCasedName === 'onfocusout') {\n warning$1(false, 'React uses onFocus and onBlur instead of onFocusIn and onFocusOut. ' + 'All React events are normalized to bubble, so onFocusIn and onFocusOut ' + 'are not needed/supported by React.');\n warnedProperties$1[name] = true;\n return true;\n }\n\n // We can't rely on the event system being injected on the server.\n if (canUseEventSystem) {\n if (registrationNameModules.hasOwnProperty(name)) {\n return true;\n }\n var registrationName = possibleRegistrationNames.hasOwnProperty(lowerCasedName) ? possibleRegistrationNames[lowerCasedName] : null;\n if (registrationName != null) {\n warning$1(false, 'Invalid event handler property `%s`. Did you mean `%s`?', name, registrationName);\n warnedProperties$1[name] = true;\n return true;\n }\n if (EVENT_NAME_REGEX.test(name)) {\n warning$1(false, 'Unknown event handler property `%s`. It will be ignored.', name);\n warnedProperties$1[name] = true;\n return true;\n }\n } else if (EVENT_NAME_REGEX.test(name)) {\n // If no event plugins have been injected, we are in a server environment.\n // So we can't tell if the event name is correct for sure, but we can filter\n // out known bad ones like `onclick`. We can't suggest a specific replacement though.\n if (INVALID_EVENT_NAME_REGEX.test(name)) {\n warning$1(false, 'Invalid event handler property `%s`. ' + 'React events use the camelCase naming convention, for example `onClick`.', name);\n }\n warnedProperties$1[name] = true;\n return true;\n }\n\n // Let the ARIA attribute hook validate ARIA attributes\n if (rARIA$1.test(name) || rARIACamel$1.test(name)) {\n return true;\n }\n\n if (lowerCasedName === 'innerhtml') {\n warning$1(false, 'Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.');\n warnedProperties$1[name] = true;\n return true;\n }\n\n if (lowerCasedName === 'aria') {\n warning$1(false, 'The `aria` attribute is reserved for future use in React. ' + 'Pass individual `aria-` attributes instead.');\n warnedProperties$1[name] = true;\n return true;\n }\n\n if (lowerCasedName === 'is' && value !== null && value !== undefined && typeof value !== 'string') {\n warning$1(false, 'Received a `%s` for a string attribute `is`. If this is expected, cast ' + 'the value to a string.', typeof value);\n warnedProperties$1[name] = true;\n return true;\n }\n\n if (typeof value === 'number' && isNaN(value)) {\n warning$1(false, 'Received NaN for the `%s` attribute. If this is expected, cast ' + 'the value to a string.', name);\n warnedProperties$1[name] = true;\n return true;\n }\n\n var propertyInfo = getPropertyInfo(name);\n var isReserved = propertyInfo !== null && propertyInfo.type === RESERVED;\n\n // Known attributes should match the casing specified in the property config.\n if (possibleStandardNames.hasOwnProperty(lowerCasedName)) {\n var standardName = possibleStandardNames[lowerCasedName];\n if (standardName !== name) {\n warning$1(false, 'Invalid DOM property `%s`. Did you mean `%s`?', name, standardName);\n warnedProperties$1[name] = true;\n return true;\n }\n } else if (!isReserved && name !== lowerCasedName) {\n // Unknown attributes should have lowercase casing since that's how they\n // will be cased anyway with server rendering.\n warning$1(false, 'React does not recognize the `%s` prop on a DOM element. If you ' + 'intentionally want it to appear in the DOM as a custom ' + 'attribute, spell it as lowercase `%s` instead. ' + 'If you accidentally passed it from a parent component, remove ' + 'it from the DOM element.', name, lowerCasedName);\n warnedProperties$1[name] = true;\n return true;\n }\n\n if (typeof value === 'boolean' && shouldRemoveAttributeWithWarning(name, value, propertyInfo, false)) {\n if (value) {\n warning$1(false, 'Received `%s` for a non-boolean attribute `%s`.\\n\\n' + 'If you want to write it to the DOM, pass a string instead: ' + '%s=\"%s\" or %s={value.toString()}.', value, name, name, value, name);\n } else {\n warning$1(false, 'Received `%s` for a non-boolean attribute `%s`.\\n\\n' + 'If you want to write it to the DOM, pass a string instead: ' + '%s=\"%s\" or %s={value.toString()}.\\n\\n' + 'If you used to conditionally omit it with %s={condition && value}, ' + 'pass %s={condition ? value : undefined} instead.', value, name, name, value, name, name, name);\n }\n warnedProperties$1[name] = true;\n return true;\n }\n\n // Now that we've validated casing, do not validate\n // data types for reserved props\n if (isReserved) {\n return true;\n }\n\n // Warn when a known attribute is a bad type\n if (shouldRemoveAttributeWithWarning(name, value, propertyInfo, false)) {\n warnedProperties$1[name] = true;\n return false;\n }\n\n // Warn when passing the strings 'false' or 'true' into a boolean prop\n if ((value === 'false' || value === 'true') && propertyInfo !== null && propertyInfo.type === BOOLEAN) {\n warning$1(false, 'Received the string `%s` for the boolean attribute `%s`. ' + '%s ' + 'Did you mean %s={%s}?', value, name, value === 'false' ? 'The browser will interpret it as a truthy value.' : 'Although this works, it will not work as expected if you pass the string \"false\".', name, value);\n warnedProperties$1[name] = true;\n return true;\n }\n\n return true;\n };\n}\n\nvar warnUnknownProperties = function (type, props, canUseEventSystem) {\n var unknownProps = [];\n for (var key in props) {\n var isValid = validateProperty$1(type, key, props[key], canUseEventSystem);\n if (!isValid) {\n unknownProps.push(key);\n }\n }\n\n var unknownPropString = unknownProps.map(function (prop) {\n return '`' + prop + '`';\n }).join(', ');\n if (unknownProps.length === 1) {\n warning$1(false, 'Invalid value for prop %s on <%s> tag. Either remove it from the element, ' + 'or pass a string or number value to keep it in the DOM. ' + 'For details, see https://fb.me/react-attribute-behavior', unknownPropString, type);\n } else if (unknownProps.length > 1) {\n warning$1(false, 'Invalid values for props %s on <%s> tag. Either remove them from the element, ' + 'or pass a string or number value to keep them in the DOM. ' + 'For details, see https://fb.me/react-attribute-behavior', unknownPropString, type);\n }\n};\n\nfunction validateProperties$2(type, props, canUseEventSystem) {\n if (isCustomComponent(type, props)) {\n return;\n }\n warnUnknownProperties(type, props, canUseEventSystem);\n}\n\n// TODO: direct imports like some-package/src/* are bad. Fix me.\nvar didWarnInvalidHydration = false;\nvar didWarnShadyDOM = false;\n\nvar DANGEROUSLY_SET_INNER_HTML = 'dangerouslySetInnerHTML';\nvar SUPPRESS_CONTENT_EDITABLE_WARNING = 'suppressContentEditableWarning';\nvar SUPPRESS_HYDRATION_WARNING$1 = 'suppressHydrationWarning';\nvar AUTOFOCUS = 'autoFocus';\nvar CHILDREN = 'children';\nvar STYLE$1 = 'style';\nvar HTML = '__html';\n\nvar HTML_NAMESPACE = Namespaces.html;\n\n\nvar warnedUnknownTags = void 0;\nvar suppressHydrationWarning = void 0;\n\nvar validatePropertiesInDevelopment = void 0;\nvar warnForTextDifference = void 0;\nvar warnForPropDifference = void 0;\nvar warnForExtraAttributes = void 0;\nvar warnForInvalidEventListener = void 0;\nvar canDiffStyleForHydrationWarning = void 0;\n\nvar normalizeMarkupForTextOrAttribute = void 0;\nvar normalizeHTML = void 0;\n\n{\n warnedUnknownTags = {\n // Chrome is the only major browser not shipping <time>. But as of July\n // 2017 it intends to ship it due to widespread usage. We intentionally\n // *don't* warn for <time> even if it's unrecognized by Chrome because\n // it soon will be, and many apps have been using it anyway.\n time: true,\n // There are working polyfills for <dialog>. Let people use it.\n dialog: true,\n // Electron ships a custom <webview> tag to display external web content in\n // an isolated frame and process.\n // This tag is not present in non Electron environments such as JSDom which\n // is often used for testing purposes.\n // @see https://electronjs.org/docs/api/webview-tag\n webview: true\n };\n\n validatePropertiesInDevelopment = function (type, props) {\n validateProperties(type, props);\n validateProperties$1(type, props);\n validateProperties$2(type, props, /* canUseEventSystem */true);\n };\n\n // IE 11 parses & normalizes the style attribute as opposed to other\n // browsers. It adds spaces and sorts the properties in some\n // non-alphabetical order. Handling that would require sorting CSS\n // properties in the client & server versions or applying\n // `expectedStyle` to a temporary DOM node to read its `style` attribute\n // normalized. Since it only affects IE, we're skipping style warnings\n // in that browser completely in favor of doing all that work.\n // See https://github.com/facebook/react/issues/11807\n canDiffStyleForHydrationWarning = canUseDOM && !document.documentMode;\n\n // HTML parsing normalizes CR and CRLF to LF.\n // It also can turn \\u0000 into \\uFFFD inside attributes.\n // https://www.w3.org/TR/html5/single-page.html#preprocessing-the-input-stream\n // If we have a mismatch, it might be caused by that.\n // We will still patch up in this case but not fire the warning.\n var NORMALIZE_NEWLINES_REGEX = /\\r\\n?/g;\n var NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\\u0000|\\uFFFD/g;\n\n normalizeMarkupForTextOrAttribute = function (markup) {\n var markupString = typeof markup === 'string' ? markup : '' + markup;\n return markupString.replace(NORMALIZE_NEWLINES_REGEX, '\\n').replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, '');\n };\n\n warnForTextDifference = function (serverText, clientText) {\n if (didWarnInvalidHydration) {\n return;\n }\n var normalizedClientText = normalizeMarkupForTextOrAttribute(clientText);\n var normalizedServerText = normalizeMarkupForTextOrAttribute(serverText);\n if (normalizedServerText === normalizedClientText) {\n return;\n }\n didWarnInvalidHydration = true;\n warningWithoutStack$1(false, 'Text content did not match. Server: \"%s\" Client: \"%s\"', normalizedServerText, normalizedClientText);\n };\n\n warnForPropDifference = function (propName, serverValue, clientValue) {\n if (didWarnInvalidHydration) {\n return;\n }\n var normalizedClientValue = normalizeMarkupForTextOrAttribute(clientValue);\n var normalizedServerValue = normalizeMarkupForTextOrAttribute(serverValue);\n if (normalizedServerValue === normalizedClientValue) {\n return;\n }\n didWarnInvalidHydration = true;\n warningWithoutStack$1(false, 'Prop `%s` did not match. Server: %s Client: %s', propName, JSON.stringify(normalizedServerValue), JSON.stringify(normalizedClientValue));\n };\n\n warnForExtraAttributes = function (attributeNames) {\n if (didWarnInvalidHydration) {\n return;\n }\n didWarnInvalidHydration = true;\n var names = [];\n attributeNames.forEach(function (name) {\n names.push(name);\n });\n warningWithoutStack$1(false, 'Extra attributes from the server: %s', names);\n };\n\n warnForInvalidEventListener = function (registrationName, listener) {\n if (listener === false) {\n warning$1(false, 'Expected `%s` listener to be a function, instead got `false`.\\n\\n' + 'If you used to conditionally omit it with %s={condition && value}, ' + 'pass %s={condition ? value : undefined} instead.', registrationName, registrationName, registrationName);\n } else {\n warning$1(false, 'Expected `%s` listener to be a function, instead got a value of `%s` type.', registrationName, typeof listener);\n }\n };\n\n // Parse the HTML and read it back to normalize the HTML string so that it\n // can be used for comparison.\n normalizeHTML = function (parent, html) {\n // We could have created a separate document here to avoid\n // re-initializing custom elements if they exist. But this breaks\n // how <noscript> is being handled. So we use the same document.\n // See the discussion in https://github.com/facebook/react/pull/11157.\n var testElement = parent.namespaceURI === HTML_NAMESPACE ? parent.ownerDocument.createElement(parent.tagName) : parent.ownerDocument.createElementNS(parent.namespaceURI, parent.tagName);\n testElement.innerHTML = html;\n return testElement.innerHTML;\n };\n}\n\nfunction ensureListeningTo(rootContainerElement, registrationName) {\n var isDocumentOrFragment = rootContainerElement.nodeType === DOCUMENT_NODE || rootContainerElement.nodeType === DOCUMENT_FRAGMENT_NODE;\n var doc = isDocumentOrFragment ? rootContainerElement : rootContainerElement.ownerDocument;\n listenTo(registrationName, doc);\n}\n\nfunction getOwnerDocumentFromRootContainer(rootContainerElement) {\n return rootContainerElement.nodeType === DOCUMENT_NODE ? rootContainerElement : rootContainerElement.ownerDocument;\n}\n\nfunction noop() {}\n\nfunction trapClickOnNonInteractiveElement(node) {\n // Mobile Safari does not fire properly bubble click events on\n // non-interactive elements, which means delegated click listeners do not\n // fire. The workaround for this bug involves attaching an empty click\n // listener on the target node.\n // http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html\n // Just set it using the onclick property so that we don't have to manage any\n // bookkeeping for it. Not sure if we need to clear it when the listener is\n // removed.\n // TODO: Only do this for the relevant Safaris maybe?\n node.onclick = noop;\n}\n\nfunction setInitialDOMProperties(tag, domElement, rootContainerElement, nextProps, isCustomComponentTag) {\n for (var propKey in nextProps) {\n if (!nextProps.hasOwnProperty(propKey)) {\n continue;\n }\n var nextProp = nextProps[propKey];\n if (propKey === STYLE$1) {\n {\n if (nextProp) {\n // Freeze the next style object so that we can assume it won't be\n // mutated. We have already warned for this in the past.\n Object.freeze(nextProp);\n }\n }\n // Relies on `updateStylesByID` not mutating `styleUpdates`.\n setValueForStyles(domElement, nextProp);\n } else if (propKey === DANGEROUSLY_SET_INNER_HTML) {\n var nextHtml = nextProp ? nextProp[HTML] : undefined;\n if (nextHtml != null) {\n setInnerHTML(domElement, nextHtml);\n }\n } else if (propKey === CHILDREN) {\n if (typeof nextProp === 'string') {\n // Avoid setting initial textContent when the text is empty. In IE11 setting\n // textContent on a <textarea> will cause the placeholder to not\n // show within the <textarea> until it has been focused and blurred again.\n // https://github.com/facebook/react/issues/6731#issuecomment-254874553\n var canSetTextContent = tag !== 'textarea' || nextProp !== '';\n if (canSetTextContent) {\n setTextContent(domElement, nextProp);\n }\n } else if (typeof nextProp === 'number') {\n setTextContent(domElement, '' + nextProp);\n }\n } else if (propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING$1) {\n // Noop\n } else if (propKey === AUTOFOCUS) {\n // We polyfill it separately on the client during commit.\n // We could have excluded it in the property list instead of\n // adding a special case here, but then it wouldn't be emitted\n // on server rendering (but we *do* want to emit it in SSR).\n } else if (registrationNameModules.hasOwnProperty(propKey)) {\n if (nextProp != null) {\n if ( true && typeof nextProp !== 'function') {\n warnForInvalidEventListener(propKey, nextProp);\n }\n ensureListeningTo(rootContainerElement, propKey);\n }\n } else if (nextProp != null) {\n setValueForProperty(domElement, propKey, nextProp, isCustomComponentTag);\n }\n }\n}\n\nfunction updateDOMProperties(domElement, updatePayload, wasCustomComponentTag, isCustomComponentTag) {\n // TODO: Handle wasCustomComponentTag\n for (var i = 0; i < updatePayload.length; i += 2) {\n var propKey = updatePayload[i];\n var propValue = updatePayload[i + 1];\n if (propKey === STYLE$1) {\n setValueForStyles(domElement, propValue);\n } else if (propKey === DANGEROUSLY_SET_INNER_HTML) {\n setInnerHTML(domElement, propValue);\n } else if (propKey === CHILDREN) {\n setTextContent(domElement, propValue);\n } else {\n setValueForProperty(domElement, propKey, propValue, isCustomComponentTag);\n }\n }\n}\n\nfunction createElement(type, props, rootContainerElement, parentNamespace) {\n var isCustomComponentTag = void 0;\n\n // We create tags in the namespace of their parent container, except HTML\n // tags get no namespace.\n var ownerDocument = getOwnerDocumentFromRootContainer(rootContainerElement);\n var domElement = void 0;\n var namespaceURI = parentNamespace;\n if (namespaceURI === HTML_NAMESPACE) {\n namespaceURI = getIntrinsicNamespace(type);\n }\n if (namespaceURI === HTML_NAMESPACE) {\n {\n isCustomComponentTag = isCustomComponent(type, props);\n // Should this check be gated by parent namespace? Not sure we want to\n // allow <SVG> or <mATH>.\n !(isCustomComponentTag || type === type.toLowerCase()) ? warning$1(false, '<%s /> is using incorrect casing. ' + 'Use PascalCase for React components, ' + 'or lowercase for HTML elements.', type) : void 0;\n }\n\n if (type === 'script') {\n // Create the script via .innerHTML so its \"parser-inserted\" flag is\n // set to true and it does not execute\n var div = ownerDocument.createElement('div');\n div.innerHTML = '<script><' + '/script>'; // eslint-disable-line\n // This is guaranteed to yield a script element.\n var firstChild = div.firstChild;\n domElement = div.removeChild(firstChild);\n } else if (typeof props.is === 'string') {\n // $FlowIssue `createElement` should be updated for Web Components\n domElement = ownerDocument.createElement(type, { is: props.is });\n } else {\n // Separate else branch instead of using `props.is || undefined` above because of a Firefox bug.\n // See discussion in https://github.com/facebook/react/pull/6896\n // and discussion in https://bugzilla.mozilla.org/show_bug.cgi?id=1276240\n domElement = ownerDocument.createElement(type);\n // Normally attributes are assigned in `setInitialDOMProperties`, however the `multiple` and `size`\n // attributes on `select`s needs to be added before `option`s are inserted.\n // This prevents:\n // - a bug where the `select` does not scroll to the correct option because singular\n // `select` elements automatically pick the first item #13222\n // - a bug where the `select` set the first item as selected despite the `size` attribute #14239\n // See https://github.com/facebook/react/issues/13222\n // and https://github.com/facebook/react/issues/14239\n if (type === 'select') {\n var node = domElement;\n if (props.multiple) {\n node.multiple = true;\n } else if (props.size) {\n // Setting a size greater than 1 causes a select to behave like `multiple=true`, where\n // it is possible that no option is selected.\n //\n // This is only necessary when a select in \"single selection mode\".\n node.size = props.size;\n }\n }\n }\n } else {\n domElement = ownerDocument.createElementNS(namespaceURI, type);\n }\n\n {\n if (namespaceURI === HTML_NAMESPACE) {\n if (!isCustomComponentTag && Object.prototype.toString.call(domElement) === '[object HTMLUnknownElement]' && !Object.prototype.hasOwnProperty.call(warnedUnknownTags, type)) {\n warnedUnknownTags[type] = true;\n warning$1(false, 'The tag <%s> is unrecognized in this browser. ' + 'If you meant to render a React component, start its name with ' + 'an uppercase letter.', type);\n }\n }\n }\n\n return domElement;\n}\n\nfunction createTextNode(text, rootContainerElement) {\n return getOwnerDocumentFromRootContainer(rootContainerElement).createTextNode(text);\n}\n\nfunction setInitialProperties(domElement, tag, rawProps, rootContainerElement) {\n var isCustomComponentTag = isCustomComponent(tag, rawProps);\n {\n validatePropertiesInDevelopment(tag, rawProps);\n if (isCustomComponentTag && !didWarnShadyDOM && domElement.shadyRoot) {\n warning$1(false, '%s is using shady DOM. Using shady DOM with React can ' + 'cause things to break subtly.', getCurrentFiberOwnerNameInDevOrNull() || 'A component');\n didWarnShadyDOM = true;\n }\n }\n\n // TODO: Make sure that we check isMounted before firing any of these events.\n var props = void 0;\n switch (tag) {\n case 'iframe':\n case 'object':\n trapBubbledEvent(TOP_LOAD, domElement);\n props = rawProps;\n break;\n case 'video':\n case 'audio':\n // Create listener for each media event\n for (var i = 0; i < mediaEventTypes.length; i++) {\n trapBubbledEvent(mediaEventTypes[i], domElement);\n }\n props = rawProps;\n break;\n case 'source':\n trapBubbledEvent(TOP_ERROR, domElement);\n props = rawProps;\n break;\n case 'img':\n case 'image':\n case 'link':\n trapBubbledEvent(TOP_ERROR, domElement);\n trapBubbledEvent(TOP_LOAD, domElement);\n props = rawProps;\n break;\n case 'form':\n trapBubbledEvent(TOP_RESET, domElement);\n trapBubbledEvent(TOP_SUBMIT, domElement);\n props = rawProps;\n break;\n case 'details':\n trapBubbledEvent(TOP_TOGGLE, domElement);\n props = rawProps;\n break;\n case 'input':\n initWrapperState(domElement, rawProps);\n props = getHostProps(domElement, rawProps);\n trapBubbledEvent(TOP_INVALID, domElement);\n // For controlled components we always need to ensure we're listening\n // to onChange. Even if there is no listener.\n ensureListeningTo(rootContainerElement, 'onChange');\n break;\n case 'option':\n validateProps(domElement, rawProps);\n props = getHostProps$1(domElement, rawProps);\n break;\n case 'select':\n initWrapperState$1(domElement, rawProps);\n props = getHostProps$2(domElement, rawProps);\n trapBubbledEvent(TOP_INVALID, domElement);\n // For controlled components we always need to ensure we're listening\n // to onChange. Even if there is no listener.\n ensureListeningTo(rootContainerElement, 'onChange');\n break;\n case 'textarea':\n initWrapperState$2(domElement, rawProps);\n props = getHostProps$3(domElement, rawProps);\n trapBubbledEvent(TOP_INVALID, domElement);\n // For controlled components we always need to ensure we're listening\n // to onChange. Even if there is no listener.\n ensureListeningTo(rootContainerElement, 'onChange');\n break;\n default:\n props = rawProps;\n }\n\n assertValidProps(tag, props);\n\n setInitialDOMProperties(tag, domElement, rootContainerElement, props, isCustomComponentTag);\n\n switch (tag) {\n case 'input':\n // TODO: Make sure we check if this is still unmounted or do any clean\n // up necessary since we never stop tracking anymore.\n track(domElement);\n postMountWrapper(domElement, rawProps, false);\n break;\n case 'textarea':\n // TODO: Make sure we check if this is still unmounted or do any clean\n // up necessary since we never stop tracking anymore.\n track(domElement);\n postMountWrapper$3(domElement, rawProps);\n break;\n case 'option':\n postMountWrapper$1(domElement, rawProps);\n break;\n case 'select':\n postMountWrapper$2(domElement, rawProps);\n break;\n default:\n if (typeof props.onClick === 'function') {\n // TODO: This cast may not be sound for SVG, MathML or custom elements.\n trapClickOnNonInteractiveElement(domElement);\n }\n break;\n }\n}\n\n// Calculate the diff between the two objects.\nfunction diffProperties(domElement, tag, lastRawProps, nextRawProps, rootContainerElement) {\n {\n validatePropertiesInDevelopment(tag, nextRawProps);\n }\n\n var updatePayload = null;\n\n var lastProps = void 0;\n var nextProps = void 0;\n switch (tag) {\n case 'input':\n lastProps = getHostProps(domElement, lastRawProps);\n nextProps = getHostProps(domElement, nextRawProps);\n updatePayload = [];\n break;\n case 'option':\n lastProps = getHostProps$1(domElement, lastRawProps);\n nextProps = getHostProps$1(domElement, nextRawProps);\n updatePayload = [];\n break;\n case 'select':\n lastProps = getHostProps$2(domElement, lastRawProps);\n nextProps = getHostProps$2(domElement, nextRawProps);\n updatePayload = [];\n break;\n case 'textarea':\n lastProps = getHostProps$3(domElement, lastRawProps);\n nextProps = getHostProps$3(domElement, nextRawProps);\n updatePayload = [];\n break;\n default:\n lastProps = lastRawProps;\n nextProps = nextRawProps;\n if (typeof lastProps.onClick !== 'function' && typeof nextProps.onClick === 'function') {\n // TODO: This cast may not be sound for SVG, MathML or custom elements.\n trapClickOnNonInteractiveElement(domElement);\n }\n break;\n }\n\n assertValidProps(tag, nextProps);\n\n var propKey = void 0;\n var styleName = void 0;\n var styleUpdates = null;\n for (propKey in lastProps) {\n if (nextProps.hasOwnProperty(propKey) || !lastProps.hasOwnProperty(propKey) || lastProps[propKey] == null) {\n continue;\n }\n if (propKey === STYLE$1) {\n var lastStyle = lastProps[propKey];\n for (styleName in lastStyle) {\n if (lastStyle.hasOwnProperty(styleName)) {\n if (!styleUpdates) {\n styleUpdates = {};\n }\n styleUpdates[styleName] = '';\n }\n }\n } else if (propKey === DANGEROUSLY_SET_INNER_HTML || propKey === CHILDREN) {\n // Noop. This is handled by the clear text mechanism.\n } else if (propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING$1) {\n // Noop\n } else if (propKey === AUTOFOCUS) {\n // Noop. It doesn't work on updates anyway.\n } else if (registrationNameModules.hasOwnProperty(propKey)) {\n // This is a special case. If any listener updates we need to ensure\n // that the \"current\" fiber pointer gets updated so we need a commit\n // to update this element.\n if (!updatePayload) {\n updatePayload = [];\n }\n } else {\n // For all other deleted properties we add it to the queue. We use\n // the whitelist in the commit phase instead.\n (updatePayload = updatePayload || []).push(propKey, null);\n }\n }\n for (propKey in nextProps) {\n var nextProp = nextProps[propKey];\n var lastProp = lastProps != null ? lastProps[propKey] : undefined;\n if (!nextProps.hasOwnProperty(propKey) || nextProp === lastProp || nextProp == null && lastProp == null) {\n continue;\n }\n if (propKey === STYLE$1) {\n {\n if (nextProp) {\n // Freeze the next style object so that we can assume it won't be\n // mutated. We have already warned for this in the past.\n Object.freeze(nextProp);\n }\n }\n if (lastProp) {\n // Unset styles on `lastProp` but not on `nextProp`.\n for (styleName in lastProp) {\n if (lastProp.hasOwnProperty(styleName) && (!nextProp || !nextProp.hasOwnProperty(styleName))) {\n if (!styleUpdates) {\n styleUpdates = {};\n }\n styleUpdates[styleName] = '';\n }\n }\n // Update styles that changed since `lastProp`.\n for (styleName in nextProp) {\n if (nextProp.hasOwnProperty(styleName) && lastProp[styleName] !== nextProp[styleName]) {\n if (!styleUpdates) {\n styleUpdates = {};\n }\n styleUpdates[styleName] = nextProp[styleName];\n }\n }\n } else {\n // Relies on `updateStylesByID` not mutating `styleUpdates`.\n if (!styleUpdates) {\n if (!updatePayload) {\n updatePayload = [];\n }\n updatePayload.push(propKey, styleUpdates);\n }\n styleUpdates = nextProp;\n }\n } else if (propKey === DANGEROUSLY_SET_INNER_HTML) {\n var nextHtml = nextProp ? nextProp[HTML] : undefined;\n var lastHtml = lastProp ? lastProp[HTML] : undefined;\n if (nextHtml != null) {\n if (lastHtml !== nextHtml) {\n (updatePayload = updatePayload || []).push(propKey, '' + nextHtml);\n }\n } else {\n // TODO: It might be too late to clear this if we have children\n // inserted already.\n }\n } else if (propKey === CHILDREN) {\n if (lastProp !== nextProp && (typeof nextProp === 'string' || typeof nextProp === 'number')) {\n (updatePayload = updatePayload || []).push(propKey, '' + nextProp);\n }\n } else if (propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING$1) {\n // Noop\n } else if (registrationNameModules.hasOwnProperty(propKey)) {\n if (nextProp != null) {\n // We eagerly listen to this even though we haven't committed yet.\n if ( true && typeof nextProp !== 'function') {\n warnForInvalidEventListener(propKey, nextProp);\n }\n ensureListeningTo(rootContainerElement, propKey);\n }\n if (!updatePayload && lastProp !== nextProp) {\n // This is a special case. If any listener updates we need to ensure\n // that the \"current\" props pointer gets updated so we need a commit\n // to update this element.\n updatePayload = [];\n }\n } else {\n // For any other property we always add it to the queue and then we\n // filter it out using the whitelist during the commit.\n (updatePayload = updatePayload || []).push(propKey, nextProp);\n }\n }\n if (styleUpdates) {\n {\n validateShorthandPropertyCollisionInDev(styleUpdates, nextProps[STYLE$1]);\n }\n (updatePayload = updatePayload || []).push(STYLE$1, styleUpdates);\n }\n return updatePayload;\n}\n\n// Apply the diff.\nfunction updateProperties(domElement, updatePayload, tag, lastRawProps, nextRawProps) {\n // Update checked *before* name.\n // In the middle of an update, it is possible to have multiple checked.\n // When a checked radio tries to change name, browser makes another radio's checked false.\n if (tag === 'input' && nextRawProps.type === 'radio' && nextRawProps.name != null) {\n updateChecked(domElement, nextRawProps);\n }\n\n var wasCustomComponentTag = isCustomComponent(tag, lastRawProps);\n var isCustomComponentTag = isCustomComponent(tag, nextRawProps);\n // Apply the diff.\n updateDOMProperties(domElement, updatePayload, wasCustomComponentTag, isCustomComponentTag);\n\n // TODO: Ensure that an update gets scheduled if any of the special props\n // changed.\n switch (tag) {\n case 'input':\n // Update the wrapper around inputs *after* updating props. This has to\n // happen after `updateDOMProperties`. Otherwise HTML5 input validations\n // raise warnings and prevent the new value from being assigned.\n updateWrapper(domElement, nextRawProps);\n break;\n case 'textarea':\n updateWrapper$1(domElement, nextRawProps);\n break;\n case 'select':\n // <select> value update needs to occur after <option> children\n // reconciliation\n postUpdateWrapper(domElement, nextRawProps);\n break;\n }\n}\n\nfunction getPossibleStandardName(propName) {\n {\n var lowerCasedName = propName.toLowerCase();\n if (!possibleStandardNames.hasOwnProperty(lowerCasedName)) {\n return null;\n }\n return possibleStandardNames[lowerCasedName] || null;\n }\n return null;\n}\n\nfunction diffHydratedProperties(domElement, tag, rawProps, parentNamespace, rootContainerElement) {\n var isCustomComponentTag = void 0;\n var extraAttributeNames = void 0;\n\n {\n suppressHydrationWarning = rawProps[SUPPRESS_HYDRATION_WARNING$1] === true;\n isCustomComponentTag = isCustomComponent(tag, rawProps);\n validatePropertiesInDevelopment(tag, rawProps);\n if (isCustomComponentTag && !didWarnShadyDOM && domElement.shadyRoot) {\n warning$1(false, '%s is using shady DOM. Using shady DOM with React can ' + 'cause things to break subtly.', getCurrentFiberOwnerNameInDevOrNull() || 'A component');\n didWarnShadyDOM = true;\n }\n }\n\n // TODO: Make sure that we check isMounted before firing any of these events.\n switch (tag) {\n case 'iframe':\n case 'object':\n trapBubbledEvent(TOP_LOAD, domElement);\n break;\n case 'video':\n case 'audio':\n // Create listener for each media event\n for (var i = 0; i < mediaEventTypes.length; i++) {\n trapBubbledEvent(mediaEventTypes[i], domElement);\n }\n break;\n case 'source':\n trapBubbledEvent(TOP_ERROR, domElement);\n break;\n case 'img':\n case 'image':\n case 'link':\n trapBubbledEvent(TOP_ERROR, domElement);\n trapBubbledEvent(TOP_LOAD, domElement);\n break;\n case 'form':\n trapBubbledEvent(TOP_RESET, domElement);\n trapBubbledEvent(TOP_SUBMIT, domElement);\n break;\n case 'details':\n trapBubbledEvent(TOP_TOGGLE, domElement);\n break;\n case 'input':\n initWrapperState(domElement, rawProps);\n trapBubbledEvent(TOP_INVALID, domElement);\n // For controlled components we always need to ensure we're listening\n // to onChange. Even if there is no listener.\n ensureListeningTo(rootContainerElement, 'onChange');\n break;\n case 'option':\n validateProps(domElement, rawProps);\n break;\n case 'select':\n initWrapperState$1(domElement, rawProps);\n trapBubbledEvent(TOP_INVALID, domElement);\n // For controlled components we always need to ensure we're listening\n // to onChange. Even if there is no listener.\n ensureListeningTo(rootContainerElement, 'onChange');\n break;\n case 'textarea':\n initWrapperState$2(domElement, rawProps);\n trapBubbledEvent(TOP_INVALID, domElement);\n // For controlled components we always need to ensure we're listening\n // to onChange. Even if there is no listener.\n ensureListeningTo(rootContainerElement, 'onChange');\n break;\n }\n\n assertValidProps(tag, rawProps);\n\n {\n extraAttributeNames = new Set();\n var attributes = domElement.attributes;\n for (var _i = 0; _i < attributes.length; _i++) {\n var name = attributes[_i].name.toLowerCase();\n switch (name) {\n // Built-in SSR attribute is whitelisted\n case 'data-reactroot':\n break;\n // Controlled attributes are not validated\n // TODO: Only ignore them on controlled tags.\n case 'value':\n break;\n case 'checked':\n break;\n case 'selected':\n break;\n default:\n // Intentionally use the original name.\n // See discussion in https://github.com/facebook/react/pull/10676.\n extraAttributeNames.add(attributes[_i].name);\n }\n }\n }\n\n var updatePayload = null;\n for (var propKey in rawProps) {\n if (!rawProps.hasOwnProperty(propKey)) {\n continue;\n }\n var nextProp = rawProps[propKey];\n if (propKey === CHILDREN) {\n // For text content children we compare against textContent. This\n // might match additional HTML that is hidden when we read it using\n // textContent. E.g. \"foo\" will match \"f<span>oo</span>\" but that still\n // satisfies our requirement. Our requirement is not to produce perfect\n // HTML and attributes. Ideally we should preserve structure but it's\n // ok not to if the visible content is still enough to indicate what\n // even listeners these nodes might be wired up to.\n // TODO: Warn if there is more than a single textNode as a child.\n // TODO: Should we use domElement.firstChild.nodeValue to compare?\n if (typeof nextProp === 'string') {\n if (domElement.textContent !== nextProp) {\n if ( true && !suppressHydrationWarning) {\n warnForTextDifference(domElement.textContent, nextProp);\n }\n updatePayload = [CHILDREN, nextProp];\n }\n } else if (typeof nextProp === 'number') {\n if (domElement.textContent !== '' + nextProp) {\n if ( true && !suppressHydrationWarning) {\n warnForTextDifference(domElement.textContent, nextProp);\n }\n updatePayload = [CHILDREN, '' + nextProp];\n }\n }\n } else if (registrationNameModules.hasOwnProperty(propKey)) {\n if (nextProp != null) {\n if ( true && typeof nextProp !== 'function') {\n warnForInvalidEventListener(propKey, nextProp);\n }\n ensureListeningTo(rootContainerElement, propKey);\n }\n } else if ( true &&\n // Convince Flow we've calculated it (it's DEV-only in this method.)\n typeof isCustomComponentTag === 'boolean') {\n // Validate that the properties correspond to their expected values.\n var serverValue = void 0;\n var propertyInfo = getPropertyInfo(propKey);\n if (suppressHydrationWarning) {\n // Don't bother comparing. We're ignoring all these warnings.\n } else if (propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING$1 ||\n // Controlled attributes are not validated\n // TODO: Only ignore them on controlled tags.\n propKey === 'value' || propKey === 'checked' || propKey === 'selected') {\n // Noop\n } else if (propKey === DANGEROUSLY_SET_INNER_HTML) {\n var serverHTML = domElement.innerHTML;\n var nextHtml = nextProp ? nextProp[HTML] : undefined;\n var expectedHTML = normalizeHTML(domElement, nextHtml != null ? nextHtml : '');\n if (expectedHTML !== serverHTML) {\n warnForPropDifference(propKey, serverHTML, expectedHTML);\n }\n } else if (propKey === STYLE$1) {\n // $FlowFixMe - Should be inferred as not undefined.\n extraAttributeNames.delete(propKey);\n\n if (canDiffStyleForHydrationWarning) {\n var expectedStyle = createDangerousStringForStyles(nextProp);\n serverValue = domElement.getAttribute('style');\n if (expectedStyle !== serverValue) {\n warnForPropDifference(propKey, serverValue, expectedStyle);\n }\n }\n } else if (isCustomComponentTag) {\n // $FlowFixMe - Should be inferred as not undefined.\n extraAttributeNames.delete(propKey.toLowerCase());\n serverValue = getValueForAttribute(domElement, propKey, nextProp);\n\n if (nextProp !== serverValue) {\n warnForPropDifference(propKey, serverValue, nextProp);\n }\n } else if (!shouldIgnoreAttribute(propKey, propertyInfo, isCustomComponentTag) && !shouldRemoveAttribute(propKey, nextProp, propertyInfo, isCustomComponentTag)) {\n var isMismatchDueToBadCasing = false;\n if (propertyInfo !== null) {\n // $FlowFixMe - Should be inferred as not undefined.\n extraAttributeNames.delete(propertyInfo.attributeName);\n serverValue = getValueForProperty(domElement, propKey, nextProp, propertyInfo);\n } else {\n var ownNamespace = parentNamespace;\n if (ownNamespace === HTML_NAMESPACE) {\n ownNamespace = getIntrinsicNamespace(tag);\n }\n if (ownNamespace === HTML_NAMESPACE) {\n // $FlowFixMe - Should be inferred as not undefined.\n extraAttributeNames.delete(propKey.toLowerCase());\n } else {\n var standardName = getPossibleStandardName(propKey);\n if (standardName !== null && standardName !== propKey) {\n // If an SVG prop is supplied with bad casing, it will\n // be successfully parsed from HTML, but will produce a mismatch\n // (and would be incorrectly rendered on the client).\n // However, we already warn about bad casing elsewhere.\n // So we'll skip the misleading extra mismatch warning in this case.\n isMismatchDueToBadCasing = true;\n // $FlowFixMe - Should be inferred as not undefined.\n extraAttributeNames.delete(standardName);\n }\n // $FlowFixMe - Should be inferred as not undefined.\n extraAttributeNames.delete(propKey);\n }\n serverValue = getValueForAttribute(domElement, propKey, nextProp);\n }\n\n if (nextProp !== serverValue && !isMismatchDueToBadCasing) {\n warnForPropDifference(propKey, serverValue, nextProp);\n }\n }\n }\n }\n\n {\n // $FlowFixMe - Should be inferred as not undefined.\n if (extraAttributeNames.size > 0 && !suppressHydrationWarning) {\n // $FlowFixMe - Should be inferred as not undefined.\n warnForExtraAttributes(extraAttributeNames);\n }\n }\n\n switch (tag) {\n case 'input':\n // TODO: Make sure we check if this is still unmounted or do any clean\n // up necessary since we never stop tracking anymore.\n track(domElement);\n postMountWrapper(domElement, rawProps, true);\n break;\n case 'textarea':\n // TODO: Make sure we check if this is still unmounted or do any clean\n // up necessary since we never stop tracking anymore.\n track(domElement);\n postMountWrapper$3(domElement, rawProps);\n break;\n case 'select':\n case 'option':\n // For input and textarea we current always set the value property at\n // post mount to force it to diverge from attributes. However, for\n // option and select we don't quite do the same thing and select\n // is not resilient to the DOM state changing so we don't do that here.\n // TODO: Consider not doing this for input and textarea.\n break;\n default:\n if (typeof rawProps.onClick === 'function') {\n // TODO: This cast may not be sound for SVG, MathML or custom elements.\n trapClickOnNonInteractiveElement(domElement);\n }\n break;\n }\n\n return updatePayload;\n}\n\nfunction diffHydratedText(textNode, text) {\n var isDifferent = textNode.nodeValue !== text;\n return isDifferent;\n}\n\nfunction warnForUnmatchedText(textNode, text) {\n {\n warnForTextDifference(textNode.nodeValue, text);\n }\n}\n\nfunction warnForDeletedHydratableElement(parentNode, child) {\n {\n if (didWarnInvalidHydration) {\n return;\n }\n didWarnInvalidHydration = true;\n warningWithoutStack$1(false, 'Did not expect server HTML to contain a <%s> in <%s>.', child.nodeName.toLowerCase(), parentNode.nodeName.toLowerCase());\n }\n}\n\nfunction warnForDeletedHydratableText(parentNode, child) {\n {\n if (didWarnInvalidHydration) {\n return;\n }\n didWarnInvalidHydration = true;\n warningWithoutStack$1(false, 'Did not expect server HTML to contain the text node \"%s\" in <%s>.', child.nodeValue, parentNode.nodeName.toLowerCase());\n }\n}\n\nfunction warnForInsertedHydratedElement(parentNode, tag, props) {\n {\n if (didWarnInvalidHydration) {\n return;\n }\n didWarnInvalidHydration = true;\n warningWithoutStack$1(false, 'Expected server HTML to contain a matching <%s> in <%s>.', tag, parentNode.nodeName.toLowerCase());\n }\n}\n\nfunction warnForInsertedHydratedText(parentNode, text) {\n {\n if (text === '') {\n // We expect to insert empty text nodes since they're not represented in\n // the HTML.\n // TODO: Remove this special case if we can just avoid inserting empty\n // text nodes.\n return;\n }\n if (didWarnInvalidHydration) {\n return;\n }\n didWarnInvalidHydration = true;\n warningWithoutStack$1(false, 'Expected server HTML to contain a matching text node for \"%s\" in <%s>.', text, parentNode.nodeName.toLowerCase());\n }\n}\n\nfunction restoreControlledState$1(domElement, tag, props) {\n switch (tag) {\n case 'input':\n restoreControlledState(domElement, props);\n return;\n case 'textarea':\n restoreControlledState$3(domElement, props);\n return;\n case 'select':\n restoreControlledState$2(domElement, props);\n return;\n }\n}\n\n// TODO: direct imports like some-package/src/* are bad. Fix me.\nvar validateDOMNesting = function () {};\nvar updatedAncestorInfo = function () {};\n\n{\n // This validation code was written based on the HTML5 parsing spec:\n // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\n //\n // Note: this does not catch all invalid nesting, nor does it try to (as it's\n // not clear what practical benefit doing so provides); instead, we warn only\n // for cases where the parser will give a parse tree differing from what React\n // intended. For example, <b><div></div></b> is invalid but we don't warn\n // because it still parses correctly; we do warn for other cases like nested\n // <p> tags where the beginning of the second element implicitly closes the\n // first, causing a confusing mess.\n\n // https://html.spec.whatwg.org/multipage/syntax.html#special\n var specialTags = ['address', 'applet', 'area', 'article', 'aside', 'base', 'basefont', 'bgsound', 'blockquote', 'body', 'br', 'button', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dir', 'div', 'dl', 'dt', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'iframe', 'img', 'input', 'isindex', 'li', 'link', 'listing', 'main', 'marquee', 'menu', 'menuitem', 'meta', 'nav', 'noembed', 'noframes', 'noscript', 'object', 'ol', 'p', 'param', 'plaintext', 'pre', 'script', 'section', 'select', 'source', 'style', 'summary', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul', 'wbr', 'xmp'];\n\n // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\n var inScopeTags = ['applet', 'caption', 'html', 'table', 'td', 'th', 'marquee', 'object', 'template',\n\n // https://html.spec.whatwg.org/multipage/syntax.html#html-integration-point\n // TODO: Distinguish by namespace here -- for <title>, including it here\n // errs on the side of fewer warnings\n 'foreignObject', 'desc', 'title'];\n\n // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-button-scope\n var buttonScopeTags = inScopeTags.concat(['button']);\n\n // https://html.spec.whatwg.org/multipage/syntax.html#generate-implied-end-tags\n var impliedEndTags = ['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt'];\n\n var emptyAncestorInfo = {\n current: null,\n\n formTag: null,\n aTagInScope: null,\n buttonTagInScope: null,\n nobrTagInScope: null,\n pTagInButtonScope: null,\n\n listItemTagAutoclosing: null,\n dlItemTagAutoclosing: null\n };\n\n updatedAncestorInfo = function (oldInfo, tag) {\n var ancestorInfo = _assign({}, oldInfo || emptyAncestorInfo);\n var info = { tag: tag };\n\n if (inScopeTags.indexOf(tag) !== -1) {\n ancestorInfo.aTagInScope = null;\n ancestorInfo.buttonTagInScope = null;\n ancestorInfo.nobrTagInScope = null;\n }\n if (buttonScopeTags.indexOf(tag) !== -1) {\n ancestorInfo.pTagInButtonScope = null;\n }\n\n // See rules for 'li', 'dd', 'dt' start tags in\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n if (specialTags.indexOf(tag) !== -1 && tag !== 'address' && tag !== 'div' && tag !== 'p') {\n ancestorInfo.listItemTagAutoclosing = null;\n ancestorInfo.dlItemTagAutoclosing = null;\n }\n\n ancestorInfo.current = info;\n\n if (tag === 'form') {\n ancestorInfo.formTag = info;\n }\n if (tag === 'a') {\n ancestorInfo.aTagInScope = info;\n }\n if (tag === 'button') {\n ancestorInfo.buttonTagInScope = info;\n }\n if (tag === 'nobr') {\n ancestorInfo.nobrTagInScope = info;\n }\n if (tag === 'p') {\n ancestorInfo.pTagInButtonScope = info;\n }\n if (tag === 'li') {\n ancestorInfo.listItemTagAutoclosing = info;\n }\n if (tag === 'dd' || tag === 'dt') {\n ancestorInfo.dlItemTagAutoclosing = info;\n }\n\n return ancestorInfo;\n };\n\n /**\n * Returns whether\n */\n var isTagValidWithParent = function (tag, parentTag) {\n // First, let's check if we're in an unusual parsing mode...\n switch (parentTag) {\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inselect\n case 'select':\n return tag === 'option' || tag === 'optgroup' || tag === '#text';\n case 'optgroup':\n return tag === 'option' || tag === '#text';\n // Strictly speaking, seeing an <option> doesn't mean we're in a <select>\n // but\n case 'option':\n return tag === '#text';\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intd\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incaption\n // No special behavior since these rules fall back to \"in body\" mode for\n // all except special table nodes which cause bad parsing behavior anyway.\n\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intr\n case 'tr':\n return tag === 'th' || tag === 'td' || tag === 'style' || tag === 'script' || tag === 'template';\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intbody\n case 'tbody':\n case 'thead':\n case 'tfoot':\n return tag === 'tr' || tag === 'style' || tag === 'script' || tag === 'template';\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incolgroup\n case 'colgroup':\n return tag === 'col' || tag === 'template';\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intable\n case 'table':\n return tag === 'caption' || tag === 'colgroup' || tag === 'tbody' || tag === 'tfoot' || tag === 'thead' || tag === 'style' || tag === 'script' || tag === 'template';\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inhead\n case 'head':\n return tag === 'base' || tag === 'basefont' || tag === 'bgsound' || tag === 'link' || tag === 'meta' || tag === 'title' || tag === 'noscript' || tag === 'noframes' || tag === 'style' || tag === 'script' || tag === 'template';\n // https://html.spec.whatwg.org/multipage/semantics.html#the-html-element\n case 'html':\n return tag === 'head' || tag === 'body';\n case '#document':\n return tag === 'html';\n }\n\n // Probably in the \"in body\" parsing mode, so we outlaw only tag combos\n // where the parsing rules cause implicit opens or closes to be added.\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n switch (tag) {\n case 'h1':\n case 'h2':\n case 'h3':\n case 'h4':\n case 'h5':\n case 'h6':\n return parentTag !== 'h1' && parentTag !== 'h2' && parentTag !== 'h3' && parentTag !== 'h4' && parentTag !== 'h5' && parentTag !== 'h6';\n\n case 'rp':\n case 'rt':\n return impliedEndTags.indexOf(parentTag) === -1;\n\n case 'body':\n case 'caption':\n case 'col':\n case 'colgroup':\n case 'frame':\n case 'head':\n case 'html':\n case 'tbody':\n case 'td':\n case 'tfoot':\n case 'th':\n case 'thead':\n case 'tr':\n // These tags are only valid with a few parents that have special child\n // parsing rules -- if we're down here, then none of those matched and\n // so we allow it only if we don't know what the parent is, as all other\n // cases are invalid.\n return parentTag == null;\n }\n\n return true;\n };\n\n /**\n * Returns whether\n */\n var findInvalidAncestorForTag = function (tag, ancestorInfo) {\n switch (tag) {\n case 'address':\n case 'article':\n case 'aside':\n case 'blockquote':\n case 'center':\n case 'details':\n case 'dialog':\n case 'dir':\n case 'div':\n case 'dl':\n case 'fieldset':\n case 'figcaption':\n case 'figure':\n case 'footer':\n case 'header':\n case 'hgroup':\n case 'main':\n case 'menu':\n case 'nav':\n case 'ol':\n case 'p':\n case 'section':\n case 'summary':\n case 'ul':\n case 'pre':\n case 'listing':\n case 'table':\n case 'hr':\n case 'xmp':\n case 'h1':\n case 'h2':\n case 'h3':\n case 'h4':\n case 'h5':\n case 'h6':\n return ancestorInfo.pTagInButtonScope;\n\n case 'form':\n return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope;\n\n case 'li':\n return ancestorInfo.listItemTagAutoclosing;\n\n case 'dd':\n case 'dt':\n return ancestorInfo.dlItemTagAutoclosing;\n\n case 'button':\n return ancestorInfo.buttonTagInScope;\n\n case 'a':\n // Spec says something about storing a list of markers, but it sounds\n // equivalent to this check.\n return ancestorInfo.aTagInScope;\n\n case 'nobr':\n return ancestorInfo.nobrTagInScope;\n }\n\n return null;\n };\n\n var didWarn = {};\n\n validateDOMNesting = function (childTag, childText, ancestorInfo) {\n ancestorInfo = ancestorInfo || emptyAncestorInfo;\n var parentInfo = ancestorInfo.current;\n var parentTag = parentInfo && parentInfo.tag;\n\n if (childText != null) {\n !(childTag == null) ? warningWithoutStack$1(false, 'validateDOMNesting: when childText is passed, childTag should be null') : void 0;\n childTag = '#text';\n }\n\n var invalidParent = isTagValidWithParent(childTag, parentTag) ? null : parentInfo;\n var invalidAncestor = invalidParent ? null : findInvalidAncestorForTag(childTag, ancestorInfo);\n var invalidParentOrAncestor = invalidParent || invalidAncestor;\n if (!invalidParentOrAncestor) {\n return;\n }\n\n var ancestorTag = invalidParentOrAncestor.tag;\n var addendum = getCurrentFiberStackInDev();\n\n var warnKey = !!invalidParent + '|' + childTag + '|' + ancestorTag + '|' + addendum;\n if (didWarn[warnKey]) {\n return;\n }\n didWarn[warnKey] = true;\n\n var tagDisplayName = childTag;\n var whitespaceInfo = '';\n if (childTag === '#text') {\n if (/\\S/.test(childText)) {\n tagDisplayName = 'Text nodes';\n } else {\n tagDisplayName = 'Whitespace text nodes';\n whitespaceInfo = \" Make sure you don't have any extra whitespace between tags on \" + 'each line of your source code.';\n }\n } else {\n tagDisplayName = '<' + childTag + '>';\n }\n\n if (invalidParent) {\n var info = '';\n if (ancestorTag === 'table' && childTag === 'tr') {\n info += ' Add a <tbody> to your code to match the DOM tree generated by ' + 'the browser.';\n }\n warningWithoutStack$1(false, 'validateDOMNesting(...): %s cannot appear as a child of <%s>.%s%s%s', tagDisplayName, ancestorTag, whitespaceInfo, info, addendum);\n } else {\n warningWithoutStack$1(false, 'validateDOMNesting(...): %s cannot appear as a descendant of ' + '<%s>.%s', tagDisplayName, ancestorTag, addendum);\n }\n };\n}\n\n// Renderers that don't support persistence\n// can re-export everything from this module.\n\nfunction shim() {\n invariant(false, 'The current renderer does not support persistence. This error is likely caused by a bug in React. Please file an issue.');\n}\n\n// Persistence (when unsupported)\nvar supportsPersistence = false;\nvar cloneInstance = shim;\nvar createContainerChildSet = shim;\nvar appendChildToContainerChildSet = shim;\nvar finalizeContainerChildren = shim;\nvar replaceContainerChildren = shim;\nvar cloneHiddenInstance = shim;\nvar cloneUnhiddenInstance = shim;\nvar createHiddenTextInstance = shim;\n\nvar SUPPRESS_HYDRATION_WARNING = void 0;\n{\n SUPPRESS_HYDRATION_WARNING = 'suppressHydrationWarning';\n}\n\nvar SUSPENSE_START_DATA = '$';\nvar SUSPENSE_END_DATA = '/$';\n\nvar STYLE = 'style';\n\nvar eventsEnabled = null;\nvar selectionInformation = null;\n\nfunction shouldAutoFocusHostComponent(type, props) {\n switch (type) {\n case 'button':\n case 'input':\n case 'select':\n case 'textarea':\n return !!props.autoFocus;\n }\n return false;\n}\n\nfunction getRootHostContext(rootContainerInstance) {\n var type = void 0;\n var namespace = void 0;\n var nodeType = rootContainerInstance.nodeType;\n switch (nodeType) {\n case DOCUMENT_NODE:\n case DOCUMENT_FRAGMENT_NODE:\n {\n type = nodeType === DOCUMENT_NODE ? '#document' : '#fragment';\n var root = rootContainerInstance.documentElement;\n namespace = root ? root.namespaceURI : getChildNamespace(null, '');\n break;\n }\n default:\n {\n var container = nodeType === COMMENT_NODE ? rootContainerInstance.parentNode : rootContainerInstance;\n var ownNamespace = container.namespaceURI || null;\n type = container.tagName;\n namespace = getChildNamespace(ownNamespace, type);\n break;\n }\n }\n {\n var validatedTag = type.toLowerCase();\n var _ancestorInfo = updatedAncestorInfo(null, validatedTag);\n return { namespace: namespace, ancestorInfo: _ancestorInfo };\n }\n return namespace;\n}\n\nfunction getChildHostContext(parentHostContext, type, rootContainerInstance) {\n {\n var parentHostContextDev = parentHostContext;\n var _namespace = getChildNamespace(parentHostContextDev.namespace, type);\n var _ancestorInfo2 = updatedAncestorInfo(parentHostContextDev.ancestorInfo, type);\n return { namespace: _namespace, ancestorInfo: _ancestorInfo2 };\n }\n var parentNamespace = parentHostContext;\n return getChildNamespace(parentNamespace, type);\n}\n\nfunction getPublicInstance(instance) {\n return instance;\n}\n\nfunction prepareForCommit(containerInfo) {\n eventsEnabled = isEnabled();\n selectionInformation = getSelectionInformation();\n setEnabled(false);\n}\n\nfunction resetAfterCommit(containerInfo) {\n restoreSelection(selectionInformation);\n selectionInformation = null;\n setEnabled(eventsEnabled);\n eventsEnabled = null;\n}\n\nfunction createInstance(type, props, rootContainerInstance, hostContext, internalInstanceHandle) {\n var parentNamespace = void 0;\n {\n // TODO: take namespace into account when validating.\n var hostContextDev = hostContext;\n validateDOMNesting(type, null, hostContextDev.ancestorInfo);\n if (typeof props.children === 'string' || typeof props.children === 'number') {\n var string = '' + props.children;\n var ownAncestorInfo = updatedAncestorInfo(hostContextDev.ancestorInfo, type);\n validateDOMNesting(null, string, ownAncestorInfo);\n }\n parentNamespace = hostContextDev.namespace;\n }\n var domElement = createElement(type, props, rootContainerInstance, parentNamespace);\n precacheFiberNode(internalInstanceHandle, domElement);\n updateFiberProps(domElement, props);\n return domElement;\n}\n\nfunction appendInitialChild(parentInstance, child) {\n parentInstance.appendChild(child);\n}\n\nfunction finalizeInitialChildren(domElement, type, props, rootContainerInstance, hostContext) {\n setInitialProperties(domElement, type, props, rootContainerInstance);\n return shouldAutoFocusHostComponent(type, props);\n}\n\nfunction prepareUpdate(domElement, type, oldProps, newProps, rootContainerInstance, hostContext) {\n {\n var hostContextDev = hostContext;\n if (typeof newProps.children !== typeof oldProps.children && (typeof newProps.children === 'string' || typeof newProps.children === 'number')) {\n var string = '' + newProps.children;\n var ownAncestorInfo = updatedAncestorInfo(hostContextDev.ancestorInfo, type);\n validateDOMNesting(null, string, ownAncestorInfo);\n }\n }\n return diffProperties(domElement, type, oldProps, newProps, rootContainerInstance);\n}\n\nfunction shouldSetTextContent(type, props) {\n return type === 'textarea' || type === 'option' || type === 'noscript' || typeof props.children === 'string' || typeof props.children === 'number' || typeof props.dangerouslySetInnerHTML === 'object' && props.dangerouslySetInnerHTML !== null && props.dangerouslySetInnerHTML.__html != null;\n}\n\nfunction shouldDeprioritizeSubtree(type, props) {\n return !!props.hidden;\n}\n\nfunction createTextInstance(text, rootContainerInstance, hostContext, internalInstanceHandle) {\n {\n var hostContextDev = hostContext;\n validateDOMNesting(null, text, hostContextDev.ancestorInfo);\n }\n var textNode = createTextNode(text, rootContainerInstance);\n precacheFiberNode(internalInstanceHandle, textNode);\n return textNode;\n}\n\nvar isPrimaryRenderer = true;\n// This initialization code may run even on server environments\n// if a component just imports ReactDOM (e.g. for findDOMNode).\n// Some environments might not have setTimeout or clearTimeout.\nvar scheduleTimeout = typeof setTimeout === 'function' ? setTimeout : undefined;\nvar cancelTimeout = typeof clearTimeout === 'function' ? clearTimeout : undefined;\nvar noTimeout = -1;\nvar schedulePassiveEffects = scheduler.unstable_scheduleCallback;\nvar cancelPassiveEffects = scheduler.unstable_cancelCallback;\n\n// -------------------\n// Mutation\n// -------------------\n\nvar supportsMutation = true;\n\nfunction commitMount(domElement, type, newProps, internalInstanceHandle) {\n // Despite the naming that might imply otherwise, this method only\n // fires if there is an `Update` effect scheduled during mounting.\n // This happens if `finalizeInitialChildren` returns `true` (which it\n // does to implement the `autoFocus` attribute on the client). But\n // there are also other cases when this might happen (such as patching\n // up text content during hydration mismatch). So we'll check this again.\n if (shouldAutoFocusHostComponent(type, newProps)) {\n domElement.focus();\n }\n}\n\nfunction commitUpdate(domElement, updatePayload, type, oldProps, newProps, internalInstanceHandle) {\n // Update the props handle so that we know which props are the ones with\n // with current event handlers.\n updateFiberProps(domElement, newProps);\n // Apply the diff to the DOM node.\n updateProperties(domElement, updatePayload, type, oldProps, newProps);\n}\n\nfunction resetTextContent(domElement) {\n setTextContent(domElement, '');\n}\n\nfunction commitTextUpdate(textInstance, oldText, newText) {\n textInstance.nodeValue = newText;\n}\n\nfunction appendChild(parentInstance, child) {\n parentInstance.appendChild(child);\n}\n\nfunction appendChildToContainer(container, child) {\n var parentNode = void 0;\n if (container.nodeType === COMMENT_NODE) {\n parentNode = container.parentNode;\n parentNode.insertBefore(child, container);\n } else {\n parentNode = container;\n parentNode.appendChild(child);\n }\n // This container might be used for a portal.\n // If something inside a portal is clicked, that click should bubble\n // through the React tree. However, on Mobile Safari the click would\n // never bubble through the *DOM* tree unless an ancestor with onclick\n // event exists. So we wouldn't see it and dispatch it.\n // This is why we ensure that non React root containers have inline onclick\n // defined.\n // https://github.com/facebook/react/issues/11918\n var reactRootContainer = container._reactRootContainer;\n if ((reactRootContainer === null || reactRootContainer === undefined) && parentNode.onclick === null) {\n // TODO: This cast may not be sound for SVG, MathML or custom elements.\n trapClickOnNonInteractiveElement(parentNode);\n }\n}\n\nfunction insertBefore(parentInstance, child, beforeChild) {\n parentInstance.insertBefore(child, beforeChild);\n}\n\nfunction insertInContainerBefore(container, child, beforeChild) {\n if (container.nodeType === COMMENT_NODE) {\n container.parentNode.insertBefore(child, beforeChild);\n } else {\n container.insertBefore(child, beforeChild);\n }\n}\n\nfunction removeChild(parentInstance, child) {\n parentInstance.removeChild(child);\n}\n\nfunction removeChildFromContainer(container, child) {\n if (container.nodeType === COMMENT_NODE) {\n container.parentNode.removeChild(child);\n } else {\n container.removeChild(child);\n }\n}\n\nfunction clearSuspenseBoundary(parentInstance, suspenseInstance) {\n var node = suspenseInstance;\n // Delete all nodes within this suspense boundary.\n // There might be nested nodes so we need to keep track of how\n // deep we are and only break out when we're back on top.\n var depth = 0;\n do {\n var nextNode = node.nextSibling;\n parentInstance.removeChild(node);\n if (nextNode && nextNode.nodeType === COMMENT_NODE) {\n var data = nextNode.data;\n if (data === SUSPENSE_END_DATA) {\n if (depth === 0) {\n parentInstance.removeChild(nextNode);\n return;\n } else {\n depth--;\n }\n } else if (data === SUSPENSE_START_DATA) {\n depth++;\n }\n }\n node = nextNode;\n } while (node);\n // TODO: Warn, we didn't find the end comment boundary.\n}\n\nfunction clearSuspenseBoundaryFromContainer(container, suspenseInstance) {\n if (container.nodeType === COMMENT_NODE) {\n clearSuspenseBoundary(container.parentNode, suspenseInstance);\n } else if (container.nodeType === ELEMENT_NODE) {\n clearSuspenseBoundary(container, suspenseInstance);\n } else {\n // Document nodes should never contain suspense boundaries.\n }\n}\n\nfunction hideInstance(instance) {\n // TODO: Does this work for all element types? What about MathML? Should we\n // pass host context to this method?\n instance = instance;\n instance.style.display = 'none';\n}\n\nfunction hideTextInstance(textInstance) {\n textInstance.nodeValue = '';\n}\n\nfunction unhideInstance(instance, props) {\n instance = instance;\n var styleProp = props[STYLE];\n var display = styleProp !== undefined && styleProp !== null && styleProp.hasOwnProperty('display') ? styleProp.display : null;\n instance.style.display = dangerousStyleValue('display', display);\n}\n\nfunction unhideTextInstance(textInstance, text) {\n textInstance.nodeValue = text;\n}\n\n// -------------------\n// Hydration\n// -------------------\n\nvar supportsHydration = true;\n\nfunction canHydrateInstance(instance, type, props) {\n if (instance.nodeType !== ELEMENT_NODE || type.toLowerCase() !== instance.nodeName.toLowerCase()) {\n return null;\n }\n // This has now been refined to an element node.\n return instance;\n}\n\nfunction canHydrateTextInstance(instance, text) {\n if (text === '' || instance.nodeType !== TEXT_NODE) {\n // Empty strings are not parsed by HTML so there won't be a correct match here.\n return null;\n }\n // This has now been refined to a text node.\n return instance;\n}\n\nfunction canHydrateSuspenseInstance(instance) {\n if (instance.nodeType !== COMMENT_NODE) {\n // Empty strings are not parsed by HTML so there won't be a correct match here.\n return null;\n }\n // This has now been refined to a suspense node.\n return instance;\n}\n\nfunction getNextHydratableSibling(instance) {\n var node = instance.nextSibling;\n // Skip non-hydratable nodes.\n while (node && node.nodeType !== ELEMENT_NODE && node.nodeType !== TEXT_NODE && (!enableSuspenseServerRenderer || node.nodeType !== COMMENT_NODE || node.data !== SUSPENSE_START_DATA)) {\n node = node.nextSibling;\n }\n return node;\n}\n\nfunction getFirstHydratableChild(parentInstance) {\n var next = parentInstance.firstChild;\n // Skip non-hydratable nodes.\n while (next && next.nodeType !== ELEMENT_NODE && next.nodeType !== TEXT_NODE && (!enableSuspenseServerRenderer || next.nodeType !== COMMENT_NODE || next.data !== SUSPENSE_START_DATA)) {\n next = next.nextSibling;\n }\n return next;\n}\n\nfunction hydrateInstance(instance, type, props, rootContainerInstance, hostContext, internalInstanceHandle) {\n precacheFiberNode(internalInstanceHandle, instance);\n // TODO: Possibly defer this until the commit phase where all the events\n // get attached.\n updateFiberProps(instance, props);\n var parentNamespace = void 0;\n {\n var hostContextDev = hostContext;\n parentNamespace = hostContextDev.namespace;\n }\n return diffHydratedProperties(instance, type, props, parentNamespace, rootContainerInstance);\n}\n\nfunction hydrateTextInstance(textInstance, text, internalInstanceHandle) {\n precacheFiberNode(internalInstanceHandle, textInstance);\n return diffHydratedText(textInstance, text);\n}\n\nfunction getNextHydratableInstanceAfterSuspenseInstance(suspenseInstance) {\n var node = suspenseInstance.nextSibling;\n // Skip past all nodes within this suspense boundary.\n // There might be nested nodes so we need to keep track of how\n // deep we are and only break out when we're back on top.\n var depth = 0;\n while (node) {\n if (node.nodeType === COMMENT_NODE) {\n var data = node.data;\n if (data === SUSPENSE_END_DATA) {\n if (depth === 0) {\n return getNextHydratableSibling(node);\n } else {\n depth--;\n }\n } else if (data === SUSPENSE_START_DATA) {\n depth++;\n }\n }\n node = node.nextSibling;\n }\n // TODO: Warn, we didn't find the end comment boundary.\n return null;\n}\n\nfunction didNotMatchHydratedContainerTextInstance(parentContainer, textInstance, text) {\n {\n warnForUnmatchedText(textInstance, text);\n }\n}\n\nfunction didNotMatchHydratedTextInstance(parentType, parentProps, parentInstance, textInstance, text) {\n if ( true && parentProps[SUPPRESS_HYDRATION_WARNING] !== true) {\n warnForUnmatchedText(textInstance, text);\n }\n}\n\nfunction didNotHydrateContainerInstance(parentContainer, instance) {\n {\n if (instance.nodeType === ELEMENT_NODE) {\n warnForDeletedHydratableElement(parentContainer, instance);\n } else if (instance.nodeType === COMMENT_NODE) {\n // TODO: warnForDeletedHydratableSuspenseBoundary\n } else {\n warnForDeletedHydratableText(parentContainer, instance);\n }\n }\n}\n\nfunction didNotHydrateInstance(parentType, parentProps, parentInstance, instance) {\n if ( true && parentProps[SUPPRESS_HYDRATION_WARNING] !== true) {\n if (instance.nodeType === ELEMENT_NODE) {\n warnForDeletedHydratableElement(parentInstance, instance);\n } else if (instance.nodeType === COMMENT_NODE) {\n // TODO: warnForDeletedHydratableSuspenseBoundary\n } else {\n warnForDeletedHydratableText(parentInstance, instance);\n }\n }\n}\n\nfunction didNotFindHydratableContainerInstance(parentContainer, type, props) {\n {\n warnForInsertedHydratedElement(parentContainer, type, props);\n }\n}\n\nfunction didNotFindHydratableContainerTextInstance(parentContainer, text) {\n {\n warnForInsertedHydratedText(parentContainer, text);\n }\n}\n\n\n\nfunction didNotFindHydratableInstance(parentType, parentProps, parentInstance, type, props) {\n if ( true && parentProps[SUPPRESS_HYDRATION_WARNING] !== true) {\n warnForInsertedHydratedElement(parentInstance, type, props);\n }\n}\n\nfunction didNotFindHydratableTextInstance(parentType, parentProps, parentInstance, text) {\n if ( true && parentProps[SUPPRESS_HYDRATION_WARNING] !== true) {\n warnForInsertedHydratedText(parentInstance, text);\n }\n}\n\nfunction didNotFindHydratableSuspenseInstance(parentType, parentProps, parentInstance) {\n if ( true && parentProps[SUPPRESS_HYDRATION_WARNING] !== true) {\n // TODO: warnForInsertedHydratedSuspense(parentInstance);\n }\n}\n\n// Prefix measurements so that it's possible to filter them.\n// Longer prefixes are hard to read in DevTools.\nvar reactEmoji = '\\u269B';\nvar warningEmoji = '\\u26D4';\nvar supportsUserTiming = typeof performance !== 'undefined' && typeof performance.mark === 'function' && typeof performance.clearMarks === 'function' && typeof performance.measure === 'function' && typeof performance.clearMeasures === 'function';\n\n// Keep track of current fiber so that we know the path to unwind on pause.\n// TODO: this looks the same as nextUnitOfWork in scheduler. Can we unify them?\nvar currentFiber = null;\n// If we're in the middle of user code, which fiber and method is it?\n// Reusing `currentFiber` would be confusing for this because user code fiber\n// can change during commit phase too, but we don't need to unwind it (since\n// lifecycles in the commit phase don't resemble a tree).\nvar currentPhase = null;\nvar currentPhaseFiber = null;\n// Did lifecycle hook schedule an update? This is often a performance problem,\n// so we will keep track of it, and include it in the report.\n// Track commits caused by cascading updates.\nvar isCommitting = false;\nvar hasScheduledUpdateInCurrentCommit = false;\nvar hasScheduledUpdateInCurrentPhase = false;\nvar commitCountInCurrentWorkLoop = 0;\nvar effectCountInCurrentCommit = 0;\nvar isWaitingForCallback = false;\n// During commits, we only show a measurement once per method name\n// to avoid stretch the commit phase with measurement overhead.\nvar labelsInCurrentCommit = new Set();\n\nvar formatMarkName = function (markName) {\n return reactEmoji + ' ' + markName;\n};\n\nvar formatLabel = function (label, warning) {\n var prefix = warning ? warningEmoji + ' ' : reactEmoji + ' ';\n var suffix = warning ? ' Warning: ' + warning : '';\n return '' + prefix + label + suffix;\n};\n\nvar beginMark = function (markName) {\n performance.mark(formatMarkName(markName));\n};\n\nvar clearMark = function (markName) {\n performance.clearMarks(formatMarkName(markName));\n};\n\nvar endMark = function (label, markName, warning) {\n var formattedMarkName = formatMarkName(markName);\n var formattedLabel = formatLabel(label, warning);\n try {\n performance.measure(formattedLabel, formattedMarkName);\n } catch (err) {}\n // If previous mark was missing for some reason, this will throw.\n // This could only happen if React crashed in an unexpected place earlier.\n // Don't pile on with more errors.\n\n // Clear marks immediately to avoid growing buffer.\n performance.clearMarks(formattedMarkName);\n performance.clearMeasures(formattedLabel);\n};\n\nvar getFiberMarkName = function (label, debugID) {\n return label + ' (#' + debugID + ')';\n};\n\nvar getFiberLabel = function (componentName, isMounted, phase) {\n if (phase === null) {\n // These are composite component total time measurements.\n return componentName + ' [' + (isMounted ? 'update' : 'mount') + ']';\n } else {\n // Composite component methods.\n return componentName + '.' + phase;\n }\n};\n\nvar beginFiberMark = function (fiber, phase) {\n var componentName = getComponentName(fiber.type) || 'Unknown';\n var debugID = fiber._debugID;\n var isMounted = fiber.alternate !== null;\n var label = getFiberLabel(componentName, isMounted, phase);\n\n if (isCommitting && labelsInCurrentCommit.has(label)) {\n // During the commit phase, we don't show duplicate labels because\n // there is a fixed overhead for every measurement, and we don't\n // want to stretch the commit phase beyond necessary.\n return false;\n }\n labelsInCurrentCommit.add(label);\n\n var markName = getFiberMarkName(label, debugID);\n beginMark(markName);\n return true;\n};\n\nvar clearFiberMark = function (fiber, phase) {\n var componentName = getComponentName(fiber.type) || 'Unknown';\n var debugID = fiber._debugID;\n var isMounted = fiber.alternate !== null;\n var label = getFiberLabel(componentName, isMounted, phase);\n var markName = getFiberMarkName(label, debugID);\n clearMark(markName);\n};\n\nvar endFiberMark = function (fiber, phase, warning) {\n var componentName = getComponentName(fiber.type) || 'Unknown';\n var debugID = fiber._debugID;\n var isMounted = fiber.alternate !== null;\n var label = getFiberLabel(componentName, isMounted, phase);\n var markName = getFiberMarkName(label, debugID);\n endMark(label, markName, warning);\n};\n\nvar shouldIgnoreFiber = function (fiber) {\n // Host components should be skipped in the timeline.\n // We could check typeof fiber.type, but does this work with RN?\n switch (fiber.tag) {\n case HostRoot:\n case HostComponent:\n case HostText:\n case HostPortal:\n case Fragment:\n case ContextProvider:\n case ContextConsumer:\n case Mode:\n return true;\n default:\n return false;\n }\n};\n\nvar clearPendingPhaseMeasurement = function () {\n if (currentPhase !== null && currentPhaseFiber !== null) {\n clearFiberMark(currentPhaseFiber, currentPhase);\n }\n currentPhaseFiber = null;\n currentPhase = null;\n hasScheduledUpdateInCurrentPhase = false;\n};\n\nvar pauseTimers = function () {\n // Stops all currently active measurements so that they can be resumed\n // if we continue in a later deferred loop from the same unit of work.\n var fiber = currentFiber;\n while (fiber) {\n if (fiber._debugIsCurrentlyTiming) {\n endFiberMark(fiber, null, null);\n }\n fiber = fiber.return;\n }\n};\n\nvar resumeTimersRecursively = function (fiber) {\n if (fiber.return !== null) {\n resumeTimersRecursively(fiber.return);\n }\n if (fiber._debugIsCurrentlyTiming) {\n beginFiberMark(fiber, null);\n }\n};\n\nvar resumeTimers = function () {\n // Resumes all measurements that were active during the last deferred loop.\n if (currentFiber !== null) {\n resumeTimersRecursively(currentFiber);\n }\n};\n\nfunction recordEffect() {\n if (enableUserTimingAPI) {\n effectCountInCurrentCommit++;\n }\n}\n\nfunction recordScheduleUpdate() {\n if (enableUserTimingAPI) {\n if (isCommitting) {\n hasScheduledUpdateInCurrentCommit = true;\n }\n if (currentPhase !== null && currentPhase !== 'componentWillMount' && currentPhase !== 'componentWillReceiveProps') {\n hasScheduledUpdateInCurrentPhase = true;\n }\n }\n}\n\nfunction startRequestCallbackTimer() {\n if (enableUserTimingAPI) {\n if (supportsUserTiming && !isWaitingForCallback) {\n isWaitingForCallback = true;\n beginMark('(Waiting for async callback...)');\n }\n }\n}\n\nfunction stopRequestCallbackTimer(didExpire, expirationTime) {\n if (enableUserTimingAPI) {\n if (supportsUserTiming) {\n isWaitingForCallback = false;\n var warning = didExpire ? 'React was blocked by main thread' : null;\n endMark('(Waiting for async callback... will force flush in ' + expirationTime + ' ms)', '(Waiting for async callback...)', warning);\n }\n }\n}\n\nfunction startWorkTimer(fiber) {\n if (enableUserTimingAPI) {\n if (!supportsUserTiming || shouldIgnoreFiber(fiber)) {\n return;\n }\n // If we pause, this is the fiber to unwind from.\n currentFiber = fiber;\n if (!beginFiberMark(fiber, null)) {\n return;\n }\n fiber._debugIsCurrentlyTiming = true;\n }\n}\n\nfunction cancelWorkTimer(fiber) {\n if (enableUserTimingAPI) {\n if (!supportsUserTiming || shouldIgnoreFiber(fiber)) {\n return;\n }\n // Remember we shouldn't complete measurement for this fiber.\n // Otherwise flamechart will be deep even for small updates.\n fiber._debugIsCurrentlyTiming = false;\n clearFiberMark(fiber, null);\n }\n}\n\nfunction stopWorkTimer(fiber) {\n if (enableUserTimingAPI) {\n if (!supportsUserTiming || shouldIgnoreFiber(fiber)) {\n return;\n }\n // If we pause, its parent is the fiber to unwind from.\n currentFiber = fiber.return;\n if (!fiber._debugIsCurrentlyTiming) {\n return;\n }\n fiber._debugIsCurrentlyTiming = false;\n endFiberMark(fiber, null, null);\n }\n}\n\nfunction stopFailedWorkTimer(fiber) {\n if (enableUserTimingAPI) {\n if (!supportsUserTiming || shouldIgnoreFiber(fiber)) {\n return;\n }\n // If we pause, its parent is the fiber to unwind from.\n currentFiber = fiber.return;\n if (!fiber._debugIsCurrentlyTiming) {\n return;\n }\n fiber._debugIsCurrentlyTiming = false;\n var warning = fiber.tag === SuspenseComponent || fiber.tag === DehydratedSuspenseComponent ? 'Rendering was suspended' : 'An error was thrown inside this error boundary';\n endFiberMark(fiber, null, warning);\n }\n}\n\nfunction startPhaseTimer(fiber, phase) {\n if (enableUserTimingAPI) {\n if (!supportsUserTiming) {\n return;\n }\n clearPendingPhaseMeasurement();\n if (!beginFiberMark(fiber, phase)) {\n return;\n }\n currentPhaseFiber = fiber;\n currentPhase = phase;\n }\n}\n\nfunction stopPhaseTimer() {\n if (enableUserTimingAPI) {\n if (!supportsUserTiming) {\n return;\n }\n if (currentPhase !== null && currentPhaseFiber !== null) {\n var warning = hasScheduledUpdateInCurrentPhase ? 'Scheduled a cascading update' : null;\n endFiberMark(currentPhaseFiber, currentPhase, warning);\n }\n currentPhase = null;\n currentPhaseFiber = null;\n }\n}\n\nfunction startWorkLoopTimer(nextUnitOfWork) {\n if (enableUserTimingAPI) {\n currentFiber = nextUnitOfWork;\n if (!supportsUserTiming) {\n return;\n }\n commitCountInCurrentWorkLoop = 0;\n // This is top level call.\n // Any other measurements are performed within.\n beginMark('(React Tree Reconciliation)');\n // Resume any measurements that were in progress during the last loop.\n resumeTimers();\n }\n}\n\nfunction stopWorkLoopTimer(interruptedBy, didCompleteRoot) {\n if (enableUserTimingAPI) {\n if (!supportsUserTiming) {\n return;\n }\n var warning = null;\n if (interruptedBy !== null) {\n if (interruptedBy.tag === HostRoot) {\n warning = 'A top-level update interrupted the previous render';\n } else {\n var componentName = getComponentName(interruptedBy.type) || 'Unknown';\n warning = 'An update to ' + componentName + ' interrupted the previous render';\n }\n } else if (commitCountInCurrentWorkLoop > 1) {\n warning = 'There were cascading updates';\n }\n commitCountInCurrentWorkLoop = 0;\n var label = didCompleteRoot ? '(React Tree Reconciliation: Completed Root)' : '(React Tree Reconciliation: Yielded)';\n // Pause any measurements until the next loop.\n pauseTimers();\n endMark(label, '(React Tree Reconciliation)', warning);\n }\n}\n\nfunction startCommitTimer() {\n if (enableUserTimingAPI) {\n if (!supportsUserTiming) {\n return;\n }\n isCommitting = true;\n hasScheduledUpdateInCurrentCommit = false;\n labelsInCurrentCommit.clear();\n beginMark('(Committing Changes)');\n }\n}\n\nfunction stopCommitTimer() {\n if (enableUserTimingAPI) {\n if (!supportsUserTiming) {\n return;\n }\n\n var warning = null;\n if (hasScheduledUpdateInCurrentCommit) {\n warning = 'Lifecycle hook scheduled a cascading update';\n } else if (commitCountInCurrentWorkLoop > 0) {\n warning = 'Caused by a cascading update in earlier commit';\n }\n hasScheduledUpdateInCurrentCommit = false;\n commitCountInCurrentWorkLoop++;\n isCommitting = false;\n labelsInCurrentCommit.clear();\n\n endMark('(Committing Changes)', '(Committing Changes)', warning);\n }\n}\n\nfunction startCommitSnapshotEffectsTimer() {\n if (enableUserTimingAPI) {\n if (!supportsUserTiming) {\n return;\n }\n effectCountInCurrentCommit = 0;\n beginMark('(Committing Snapshot Effects)');\n }\n}\n\nfunction stopCommitSnapshotEffectsTimer() {\n if (enableUserTimingAPI) {\n if (!supportsUserTiming) {\n return;\n }\n var count = effectCountInCurrentCommit;\n effectCountInCurrentCommit = 0;\n endMark('(Committing Snapshot Effects: ' + count + ' Total)', '(Committing Snapshot Effects)', null);\n }\n}\n\nfunction startCommitHostEffectsTimer() {\n if (enableUserTimingAPI) {\n if (!supportsUserTiming) {\n return;\n }\n effectCountInCurrentCommit = 0;\n beginMark('(Committing Host Effects)');\n }\n}\n\nfunction stopCommitHostEffectsTimer() {\n if (enableUserTimingAPI) {\n if (!supportsUserTiming) {\n return;\n }\n var count = effectCountInCurrentCommit;\n effectCountInCurrentCommit = 0;\n endMark('(Committing Host Effects: ' + count + ' Total)', '(Committing Host Effects)', null);\n }\n}\n\nfunction startCommitLifeCyclesTimer() {\n if (enableUserTimingAPI) {\n if (!supportsUserTiming) {\n return;\n }\n effectCountInCurrentCommit = 0;\n beginMark('(Calling Lifecycle Methods)');\n }\n}\n\nfunction stopCommitLifeCyclesTimer() {\n if (enableUserTimingAPI) {\n if (!supportsUserTiming) {\n return;\n }\n var count = effectCountInCurrentCommit;\n effectCountInCurrentCommit = 0;\n endMark('(Calling Lifecycle Methods: ' + count + ' Total)', '(Calling Lifecycle Methods)', null);\n }\n}\n\nvar valueStack = [];\n\nvar fiberStack = void 0;\n\n{\n fiberStack = [];\n}\n\nvar index = -1;\n\nfunction createCursor(defaultValue) {\n return {\n current: defaultValue\n };\n}\n\nfunction pop(cursor, fiber) {\n if (index < 0) {\n {\n warningWithoutStack$1(false, 'Unexpected pop.');\n }\n return;\n }\n\n {\n if (fiber !== fiberStack[index]) {\n warningWithoutStack$1(false, 'Unexpected Fiber popped.');\n }\n }\n\n cursor.current = valueStack[index];\n\n valueStack[index] = null;\n\n {\n fiberStack[index] = null;\n }\n\n index--;\n}\n\nfunction push(cursor, value, fiber) {\n index++;\n\n valueStack[index] = cursor.current;\n\n {\n fiberStack[index] = fiber;\n }\n\n cursor.current = value;\n}\n\nfunction checkThatStackIsEmpty() {\n {\n if (index !== -1) {\n warningWithoutStack$1(false, 'Expected an empty stack. Something was not reset properly.');\n }\n }\n}\n\nfunction resetStackAfterFatalErrorInDev() {\n {\n index = -1;\n valueStack.length = 0;\n fiberStack.length = 0;\n }\n}\n\nvar warnedAboutMissingGetChildContext = void 0;\n\n{\n warnedAboutMissingGetChildContext = {};\n}\n\nvar emptyContextObject = {};\n{\n Object.freeze(emptyContextObject);\n}\n\n// A cursor to the current merged context object on the stack.\nvar contextStackCursor = createCursor(emptyContextObject);\n// A cursor to a boolean indicating whether the context has changed.\nvar didPerformWorkStackCursor = createCursor(false);\n// Keep track of the previous context object that was on the stack.\n// We use this to get access to the parent context after we have already\n// pushed the next context provider, and now need to merge their contexts.\nvar previousContext = emptyContextObject;\n\nfunction getUnmaskedContext(workInProgress, Component, didPushOwnContextIfProvider) {\n if (didPushOwnContextIfProvider && isContextProvider(Component)) {\n // If the fiber is a context provider itself, when we read its context\n // we may have already pushed its own child context on the stack. A context\n // provider should not \"see\" its own child context. Therefore we read the\n // previous (parent) context instead for a context provider.\n return previousContext;\n }\n return contextStackCursor.current;\n}\n\nfunction cacheContext(workInProgress, unmaskedContext, maskedContext) {\n var instance = workInProgress.stateNode;\n instance.__reactInternalMemoizedUnmaskedChildContext = unmaskedContext;\n instance.__reactInternalMemoizedMaskedChildContext = maskedContext;\n}\n\nfunction getMaskedContext(workInProgress, unmaskedContext) {\n var type = workInProgress.type;\n var contextTypes = type.contextTypes;\n if (!contextTypes) {\n return emptyContextObject;\n }\n\n // Avoid recreating masked context unless unmasked context has changed.\n // Failing to do this will result in unnecessary calls to componentWillReceiveProps.\n // This may trigger infinite loops if componentWillReceiveProps calls setState.\n var instance = workInProgress.stateNode;\n if (instance && instance.__reactInternalMemoizedUnmaskedChildContext === unmaskedContext) {\n return instance.__reactInternalMemoizedMaskedChildContext;\n }\n\n var context = {};\n for (var key in contextTypes) {\n context[key] = unmaskedContext[key];\n }\n\n {\n var name = getComponentName(type) || 'Unknown';\n checkPropTypes(contextTypes, context, 'context', name, getCurrentFiberStackInDev);\n }\n\n // Cache unmasked context so we can avoid recreating masked context unless necessary.\n // Context is created before the class component is instantiated so check for instance.\n if (instance) {\n cacheContext(workInProgress, unmaskedContext, context);\n }\n\n return context;\n}\n\nfunction hasContextChanged() {\n return didPerformWorkStackCursor.current;\n}\n\nfunction isContextProvider(type) {\n var childContextTypes = type.childContextTypes;\n return childContextTypes !== null && childContextTypes !== undefined;\n}\n\nfunction popContext(fiber) {\n pop(didPerformWorkStackCursor, fiber);\n pop(contextStackCursor, fiber);\n}\n\nfunction popTopLevelContextObject(fiber) {\n pop(didPerformWorkStackCursor, fiber);\n pop(contextStackCursor, fiber);\n}\n\nfunction pushTopLevelContextObject(fiber, context, didChange) {\n !(contextStackCursor.current === emptyContextObject) ? invariant(false, 'Unexpected context found on stack. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n\n push(contextStackCursor, context, fiber);\n push(didPerformWorkStackCursor, didChange, fiber);\n}\n\nfunction processChildContext(fiber, type, parentContext) {\n var instance = fiber.stateNode;\n var childContextTypes = type.childContextTypes;\n\n // TODO (bvaughn) Replace this behavior with an invariant() in the future.\n // It has only been added in Fiber to match the (unintentional) behavior in Stack.\n if (typeof instance.getChildContext !== 'function') {\n {\n var componentName = getComponentName(type) || 'Unknown';\n\n if (!warnedAboutMissingGetChildContext[componentName]) {\n warnedAboutMissingGetChildContext[componentName] = true;\n warningWithoutStack$1(false, '%s.childContextTypes is specified but there is no getChildContext() method ' + 'on the instance. You can either define getChildContext() on %s or remove ' + 'childContextTypes from it.', componentName, componentName);\n }\n }\n return parentContext;\n }\n\n var childContext = void 0;\n {\n setCurrentPhase('getChildContext');\n }\n startPhaseTimer(fiber, 'getChildContext');\n childContext = instance.getChildContext();\n stopPhaseTimer();\n {\n setCurrentPhase(null);\n }\n for (var contextKey in childContext) {\n !(contextKey in childContextTypes) ? invariant(false, '%s.getChildContext(): key \"%s\" is not defined in childContextTypes.', getComponentName(type) || 'Unknown', contextKey) : void 0;\n }\n {\n var name = getComponentName(type) || 'Unknown';\n checkPropTypes(childContextTypes, childContext, 'child context', name,\n // In practice, there is one case in which we won't get a stack. It's when\n // somebody calls unstable_renderSubtreeIntoContainer() and we process\n // context from the parent component instance. The stack will be missing\n // because it's outside of the reconciliation, and so the pointer has not\n // been set. This is rare and doesn't matter. We'll also remove that API.\n getCurrentFiberStackInDev);\n }\n\n return _assign({}, parentContext, childContext);\n}\n\nfunction pushContextProvider(workInProgress) {\n var instance = workInProgress.stateNode;\n // We push the context as early as possible to ensure stack integrity.\n // If the instance does not exist yet, we will push null at first,\n // and replace it on the stack later when invalidating the context.\n var memoizedMergedChildContext = instance && instance.__reactInternalMemoizedMergedChildContext || emptyContextObject;\n\n // Remember the parent context so we can merge with it later.\n // Inherit the parent's did-perform-work value to avoid inadvertently blocking updates.\n previousContext = contextStackCursor.current;\n push(contextStackCursor, memoizedMergedChildContext, workInProgress);\n push(didPerformWorkStackCursor, didPerformWorkStackCursor.current, workInProgress);\n\n return true;\n}\n\nfunction invalidateContextProvider(workInProgress, type, didChange) {\n var instance = workInProgress.stateNode;\n !instance ? invariant(false, 'Expected to have an instance by this point. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n\n if (didChange) {\n // Merge parent and own context.\n // Skip this if we're not updating due to sCU.\n // This avoids unnecessarily recomputing memoized values.\n var mergedContext = processChildContext(workInProgress, type, previousContext);\n instance.__reactInternalMemoizedMergedChildContext = mergedContext;\n\n // Replace the old (or empty) context with the new one.\n // It is important to unwind the context in the reverse order.\n pop(didPerformWorkStackCursor, workInProgress);\n pop(contextStackCursor, workInProgress);\n // Now push the new context and mark that it has changed.\n push(contextStackCursor, mergedContext, workInProgress);\n push(didPerformWorkStackCursor, didChange, workInProgress);\n } else {\n pop(didPerformWorkStackCursor, workInProgress);\n push(didPerformWorkStackCursor, didChange, workInProgress);\n }\n}\n\nfunction findCurrentUnmaskedContext(fiber) {\n // Currently this is only used with renderSubtreeIntoContainer; not sure if it\n // makes sense elsewhere\n !(isFiberMounted(fiber) && fiber.tag === ClassComponent) ? invariant(false, 'Expected subtree parent to be a mounted class component. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n\n var node = fiber;\n do {\n switch (node.tag) {\n case HostRoot:\n return node.stateNode.context;\n case ClassComponent:\n {\n var Component = node.type;\n if (isContextProvider(Component)) {\n return node.stateNode.__reactInternalMemoizedMergedChildContext;\n }\n break;\n }\n }\n node = node.return;\n } while (node !== null);\n invariant(false, 'Found unexpected detached subtree parent. This error is likely caused by a bug in React. Please file an issue.');\n}\n\nvar onCommitFiberRoot = null;\nvar onCommitFiberUnmount = null;\nvar hasLoggedError = false;\n\nfunction catchErrors(fn) {\n return function (arg) {\n try {\n return fn(arg);\n } catch (err) {\n if ( true && !hasLoggedError) {\n hasLoggedError = true;\n warningWithoutStack$1(false, 'React DevTools encountered an error: %s', err);\n }\n }\n };\n}\n\nvar isDevToolsPresent = typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined';\n\nfunction injectInternals(internals) {\n if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') {\n // No DevTools\n return false;\n }\n var hook = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n if (hook.isDisabled) {\n // This isn't a real property on the hook, but it can be set to opt out\n // of DevTools integration and associated warnings and logs.\n // https://github.com/facebook/react/issues/3877\n return true;\n }\n if (!hook.supportsFiber) {\n {\n warningWithoutStack$1(false, 'The installed version of React DevTools is too old and will not work ' + 'with the current version of React. Please update React DevTools. ' + 'https://fb.me/react-devtools');\n }\n // DevTools exists, even though it doesn't support Fiber.\n return true;\n }\n try {\n var rendererID = hook.inject(internals);\n // We have successfully injected, so now it is safe to set up hooks.\n onCommitFiberRoot = catchErrors(function (root) {\n return hook.onCommitFiberRoot(rendererID, root);\n });\n onCommitFiberUnmount = catchErrors(function (fiber) {\n return hook.onCommitFiberUnmount(rendererID, fiber);\n });\n } catch (err) {\n // Catch all errors because it is unsafe to throw during initialization.\n {\n warningWithoutStack$1(false, 'React DevTools encountered an error: %s.', err);\n }\n }\n // DevTools exists\n return true;\n}\n\nfunction onCommitRoot(root) {\n if (typeof onCommitFiberRoot === 'function') {\n onCommitFiberRoot(root);\n }\n}\n\nfunction onCommitUnmount(fiber) {\n if (typeof onCommitFiberUnmount === 'function') {\n onCommitFiberUnmount(fiber);\n }\n}\n\n// Max 31 bit integer. The max integer size in V8 for 32-bit systems.\n// Math.pow(2, 30) - 1\n// 0b111111111111111111111111111111\nvar maxSigned31BitInt = 1073741823;\n\nvar NoWork = 0;\nvar Never = 1;\nvar Sync = maxSigned31BitInt;\n\nvar UNIT_SIZE = 10;\nvar MAGIC_NUMBER_OFFSET = maxSigned31BitInt - 1;\n\n// 1 unit of expiration time represents 10ms.\nfunction msToExpirationTime(ms) {\n // Always add an offset so that we don't clash with the magic number for NoWork.\n return MAGIC_NUMBER_OFFSET - (ms / UNIT_SIZE | 0);\n}\n\nfunction expirationTimeToMs(expirationTime) {\n return (MAGIC_NUMBER_OFFSET - expirationTime) * UNIT_SIZE;\n}\n\nfunction ceiling(num, precision) {\n return ((num / precision | 0) + 1) * precision;\n}\n\nfunction computeExpirationBucket(currentTime, expirationInMs, bucketSizeMs) {\n return MAGIC_NUMBER_OFFSET - ceiling(MAGIC_NUMBER_OFFSET - currentTime + expirationInMs / UNIT_SIZE, bucketSizeMs / UNIT_SIZE);\n}\n\nvar LOW_PRIORITY_EXPIRATION = 5000;\nvar LOW_PRIORITY_BATCH_SIZE = 250;\n\nfunction computeAsyncExpiration(currentTime) {\n return computeExpirationBucket(currentTime, LOW_PRIORITY_EXPIRATION, LOW_PRIORITY_BATCH_SIZE);\n}\n\n// We intentionally set a higher expiration time for interactive updates in\n// dev than in production.\n//\n// If the main thread is being blocked so long that you hit the expiration,\n// it's a problem that could be solved with better scheduling.\n//\n// People will be more likely to notice this and fix it with the long\n// expiration time in development.\n//\n// In production we opt for better UX at the risk of masking scheduling\n// problems, by expiring fast.\nvar HIGH_PRIORITY_EXPIRATION = 500;\nvar HIGH_PRIORITY_BATCH_SIZE = 100;\n\nfunction computeInteractiveExpiration(currentTime) {\n return computeExpirationBucket(currentTime, HIGH_PRIORITY_EXPIRATION, HIGH_PRIORITY_BATCH_SIZE);\n}\n\nvar NoContext = 0;\nvar ConcurrentMode = 1;\nvar StrictMode = 2;\nvar ProfileMode = 4;\n\nvar hasBadMapPolyfill = void 0;\n\n{\n hasBadMapPolyfill = false;\n try {\n var nonExtensibleObject = Object.preventExtensions({});\n var testMap = new Map([[nonExtensibleObject, null]]);\n var testSet = new Set([nonExtensibleObject]);\n // This is necessary for Rollup to not consider these unused.\n // https://github.com/rollup/rollup/issues/1771\n // TODO: we can remove these if Rollup fixes the bug.\n testMap.set(0, 0);\n testSet.add(0);\n } catch (e) {\n // TODO: Consider warning about bad polyfills\n hasBadMapPolyfill = true;\n }\n}\n\n// A Fiber is work on a Component that needs to be done or was done. There can\n// be more than one per component.\n\n\nvar debugCounter = void 0;\n\n{\n debugCounter = 1;\n}\n\nfunction FiberNode(tag, pendingProps, key, mode) {\n // Instance\n this.tag = tag;\n this.key = key;\n this.elementType = null;\n this.type = null;\n this.stateNode = null;\n\n // Fiber\n this.return = null;\n this.child = null;\n this.sibling = null;\n this.index = 0;\n\n this.ref = null;\n\n this.pendingProps = pendingProps;\n this.memoizedProps = null;\n this.updateQueue = null;\n this.memoizedState = null;\n this.contextDependencies = null;\n\n this.mode = mode;\n\n // Effects\n this.effectTag = NoEffect;\n this.nextEffect = null;\n\n this.firstEffect = null;\n this.lastEffect = null;\n\n this.expirationTime = NoWork;\n this.childExpirationTime = NoWork;\n\n this.alternate = null;\n\n if (enableProfilerTimer) {\n // Note: The following is done to avoid a v8 performance cliff.\n //\n // Initializing the fields below to smis and later updating them with\n // double values will cause Fibers to end up having separate shapes.\n // This behavior/bug has something to do with Object.preventExtension().\n // Fortunately this only impacts DEV builds.\n // Unfortunately it makes React unusably slow for some applications.\n // To work around this, initialize the fields below with doubles.\n //\n // Learn more about this here:\n // https://github.com/facebook/react/issues/14365\n // https://bugs.chromium.org/p/v8/issues/detail?id=8538\n this.actualDuration = Number.NaN;\n this.actualStartTime = Number.NaN;\n this.selfBaseDuration = Number.NaN;\n this.treeBaseDuration = Number.NaN;\n\n // It's okay to replace the initial doubles with smis after initialization.\n // This won't trigger the performance cliff mentioned above,\n // and it simplifies other profiler code (including DevTools).\n this.actualDuration = 0;\n this.actualStartTime = -1;\n this.selfBaseDuration = 0;\n this.treeBaseDuration = 0;\n }\n\n {\n this._debugID = debugCounter++;\n this._debugSource = null;\n this._debugOwner = null;\n this._debugIsCurrentlyTiming = false;\n this._debugHookTypes = null;\n if (!hasBadMapPolyfill && typeof Object.preventExtensions === 'function') {\n Object.preventExtensions(this);\n }\n }\n}\n\n// This is a constructor function, rather than a POJO constructor, still\n// please ensure we do the following:\n// 1) Nobody should add any instance methods on this. Instance methods can be\n// more difficult to predict when they get optimized and they are almost\n// never inlined properly in static compilers.\n// 2) Nobody should rely on `instanceof Fiber` for type testing. We should\n// always know when it is a fiber.\n// 3) We might want to experiment with using numeric keys since they are easier\n// to optimize in a non-JIT environment.\n// 4) We can easily go from a constructor to a createFiber object literal if that\n// is faster.\n// 5) It should be easy to port this to a C struct and keep a C implementation\n// compatible.\nvar createFiber = function (tag, pendingProps, key, mode) {\n // $FlowFixMe: the shapes are exact here but Flow doesn't like constructors\n return new FiberNode(tag, pendingProps, key, mode);\n};\n\nfunction shouldConstruct(Component) {\n var prototype = Component.prototype;\n return !!(prototype && prototype.isReactComponent);\n}\n\nfunction isSimpleFunctionComponent(type) {\n return typeof type === 'function' && !shouldConstruct(type) && type.defaultProps === undefined;\n}\n\nfunction resolveLazyComponentTag(Component) {\n if (typeof Component === 'function') {\n return shouldConstruct(Component) ? ClassComponent : FunctionComponent;\n } else if (Component !== undefined && Component !== null) {\n var $$typeof = Component.$$typeof;\n if ($$typeof === REACT_FORWARD_REF_TYPE) {\n return ForwardRef;\n }\n if ($$typeof === REACT_MEMO_TYPE) {\n return MemoComponent;\n }\n }\n return IndeterminateComponent;\n}\n\n// This is used to create an alternate fiber to do work on.\nfunction createWorkInProgress(current, pendingProps, expirationTime) {\n var workInProgress = current.alternate;\n if (workInProgress === null) {\n // We use a double buffering pooling technique because we know that we'll\n // only ever need at most two versions of a tree. We pool the \"other\" unused\n // node that we're free to reuse. This is lazily created to avoid allocating\n // extra objects for things that are never updated. It also allow us to\n // reclaim the extra memory if needed.\n workInProgress = createFiber(current.tag, pendingProps, current.key, current.mode);\n workInProgress.elementType = current.elementType;\n workInProgress.type = current.type;\n workInProgress.stateNode = current.stateNode;\n\n {\n // DEV-only fields\n workInProgress._debugID = current._debugID;\n workInProgress._debugSource = current._debugSource;\n workInProgress._debugOwner = current._debugOwner;\n workInProgress._debugHookTypes = current._debugHookTypes;\n }\n\n workInProgress.alternate = current;\n current.alternate = workInProgress;\n } else {\n workInProgress.pendingProps = pendingProps;\n\n // We already have an alternate.\n // Reset the effect tag.\n workInProgress.effectTag = NoEffect;\n\n // The effect list is no longer valid.\n workInProgress.nextEffect = null;\n workInProgress.firstEffect = null;\n workInProgress.lastEffect = null;\n\n if (enableProfilerTimer) {\n // We intentionally reset, rather than copy, actualDuration & actualStartTime.\n // This prevents time from endlessly accumulating in new commits.\n // This has the downside of resetting values for different priority renders,\n // But works for yielding (the common case) and should support resuming.\n workInProgress.actualDuration = 0;\n workInProgress.actualStartTime = -1;\n }\n }\n\n workInProgress.childExpirationTime = current.childExpirationTime;\n workInProgress.expirationTime = current.expirationTime;\n\n workInProgress.child = current.child;\n workInProgress.memoizedProps = current.memoizedProps;\n workInProgress.memoizedState = current.memoizedState;\n workInProgress.updateQueue = current.updateQueue;\n workInProgress.contextDependencies = current.contextDependencies;\n\n // These will be overridden during the parent's reconciliation\n workInProgress.sibling = current.sibling;\n workInProgress.index = current.index;\n workInProgress.ref = current.ref;\n\n if (enableProfilerTimer) {\n workInProgress.selfBaseDuration = current.selfBaseDuration;\n workInProgress.treeBaseDuration = current.treeBaseDuration;\n }\n\n return workInProgress;\n}\n\nfunction createHostRootFiber(isConcurrent) {\n var mode = isConcurrent ? ConcurrentMode | StrictMode : NoContext;\n\n if (enableProfilerTimer && isDevToolsPresent) {\n // Always collect profile timings when DevTools are present.\n // This enables DevTools to start capturing timing at any point–\n // Without some nodes in the tree having empty base times.\n mode |= ProfileMode;\n }\n\n return createFiber(HostRoot, null, null, mode);\n}\n\nfunction createFiberFromTypeAndProps(type, // React$ElementType\nkey, pendingProps, owner, mode, expirationTime) {\n var fiber = void 0;\n\n var fiberTag = IndeterminateComponent;\n // The resolved type is set if we know what the final type will be. I.e. it's not lazy.\n var resolvedType = type;\n if (typeof type === 'function') {\n if (shouldConstruct(type)) {\n fiberTag = ClassComponent;\n }\n } else if (typeof type === 'string') {\n fiberTag = HostComponent;\n } else {\n getTag: switch (type) {\n case REACT_FRAGMENT_TYPE:\n return createFiberFromFragment(pendingProps.children, mode, expirationTime, key);\n case REACT_CONCURRENT_MODE_TYPE:\n return createFiberFromMode(pendingProps, mode | ConcurrentMode | StrictMode, expirationTime, key);\n case REACT_STRICT_MODE_TYPE:\n return createFiberFromMode(pendingProps, mode | StrictMode, expirationTime, key);\n case REACT_PROFILER_TYPE:\n return createFiberFromProfiler(pendingProps, mode, expirationTime, key);\n case REACT_SUSPENSE_TYPE:\n return createFiberFromSuspense(pendingProps, mode, expirationTime, key);\n default:\n {\n if (typeof type === 'object' && type !== null) {\n switch (type.$$typeof) {\n case REACT_PROVIDER_TYPE:\n fiberTag = ContextProvider;\n break getTag;\n case REACT_CONTEXT_TYPE:\n // This is a consumer\n fiberTag = ContextConsumer;\n break getTag;\n case REACT_FORWARD_REF_TYPE:\n fiberTag = ForwardRef;\n break getTag;\n case REACT_MEMO_TYPE:\n fiberTag = MemoComponent;\n break getTag;\n case REACT_LAZY_TYPE:\n fiberTag = LazyComponent;\n resolvedType = null;\n break getTag;\n }\n }\n var info = '';\n {\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and \" + 'named imports.';\n }\n var ownerName = owner ? getComponentName(owner.type) : null;\n if (ownerName) {\n info += '\\n\\nCheck the render method of `' + ownerName + '`.';\n }\n }\n invariant(false, 'Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s', type == null ? type : typeof type, info);\n }\n }\n }\n\n fiber = createFiber(fiberTag, pendingProps, key, mode);\n fiber.elementType = type;\n fiber.type = resolvedType;\n fiber.expirationTime = expirationTime;\n\n return fiber;\n}\n\nfunction createFiberFromElement(element, mode, expirationTime) {\n var owner = null;\n {\n owner = element._owner;\n }\n var type = element.type;\n var key = element.key;\n var pendingProps = element.props;\n var fiber = createFiberFromTypeAndProps(type, key, pendingProps, owner, mode, expirationTime);\n {\n fiber._debugSource = element._source;\n fiber._debugOwner = element._owner;\n }\n return fiber;\n}\n\nfunction createFiberFromFragment(elements, mode, expirationTime, key) {\n var fiber = createFiber(Fragment, elements, key, mode);\n fiber.expirationTime = expirationTime;\n return fiber;\n}\n\nfunction createFiberFromProfiler(pendingProps, mode, expirationTime, key) {\n {\n if (typeof pendingProps.id !== 'string' || typeof pendingProps.onRender !== 'function') {\n warningWithoutStack$1(false, 'Profiler must specify an \"id\" string and \"onRender\" function as props');\n }\n }\n\n var fiber = createFiber(Profiler, pendingProps, key, mode | ProfileMode);\n // TODO: The Profiler fiber shouldn't have a type. It has a tag.\n fiber.elementType = REACT_PROFILER_TYPE;\n fiber.type = REACT_PROFILER_TYPE;\n fiber.expirationTime = expirationTime;\n\n return fiber;\n}\n\nfunction createFiberFromMode(pendingProps, mode, expirationTime, key) {\n var fiber = createFiber(Mode, pendingProps, key, mode);\n\n // TODO: The Mode fiber shouldn't have a type. It has a tag.\n var type = (mode & ConcurrentMode) === NoContext ? REACT_STRICT_MODE_TYPE : REACT_CONCURRENT_MODE_TYPE;\n fiber.elementType = type;\n fiber.type = type;\n\n fiber.expirationTime = expirationTime;\n return fiber;\n}\n\nfunction createFiberFromSuspense(pendingProps, mode, expirationTime, key) {\n var fiber = createFiber(SuspenseComponent, pendingProps, key, mode);\n\n // TODO: The SuspenseComponent fiber shouldn't have a type. It has a tag.\n var type = REACT_SUSPENSE_TYPE;\n fiber.elementType = type;\n fiber.type = type;\n\n fiber.expirationTime = expirationTime;\n return fiber;\n}\n\nfunction createFiberFromText(content, mode, expirationTime) {\n var fiber = createFiber(HostText, content, null, mode);\n fiber.expirationTime = expirationTime;\n return fiber;\n}\n\nfunction createFiberFromHostInstanceForDeletion() {\n var fiber = createFiber(HostComponent, null, null, NoContext);\n // TODO: These should not need a type.\n fiber.elementType = 'DELETED';\n fiber.type = 'DELETED';\n return fiber;\n}\n\nfunction createFiberFromPortal(portal, mode, expirationTime) {\n var pendingProps = portal.children !== null ? portal.children : [];\n var fiber = createFiber(HostPortal, pendingProps, portal.key, mode);\n fiber.expirationTime = expirationTime;\n fiber.stateNode = {\n containerInfo: portal.containerInfo,\n pendingChildren: null, // Used by persistent updates\n implementation: portal.implementation\n };\n return fiber;\n}\n\n// Used for stashing WIP properties to replay failed work in DEV.\nfunction assignFiberPropertiesInDEV(target, source) {\n if (target === null) {\n // This Fiber's initial properties will always be overwritten.\n // We only use a Fiber to ensure the same hidden class so DEV isn't slow.\n target = createFiber(IndeterminateComponent, null, null, NoContext);\n }\n\n // This is intentionally written as a list of all properties.\n // We tried to use Object.assign() instead but this is called in\n // the hottest path, and Object.assign() was too slow:\n // https://github.com/facebook/react/issues/12502\n // This code is DEV-only so size is not a concern.\n\n target.tag = source.tag;\n target.key = source.key;\n target.elementType = source.elementType;\n target.type = source.type;\n target.stateNode = source.stateNode;\n target.return = source.return;\n target.child = source.child;\n target.sibling = source.sibling;\n target.index = source.index;\n target.ref = source.ref;\n target.pendingProps = source.pendingProps;\n target.memoizedProps = source.memoizedProps;\n target.updateQueue = source.updateQueue;\n target.memoizedState = source.memoizedState;\n target.contextDependencies = source.contextDependencies;\n target.mode = source.mode;\n target.effectTag = source.effectTag;\n target.nextEffect = source.nextEffect;\n target.firstEffect = source.firstEffect;\n target.lastEffect = source.lastEffect;\n target.expirationTime = source.expirationTime;\n target.childExpirationTime = source.childExpirationTime;\n target.alternate = source.alternate;\n if (enableProfilerTimer) {\n target.actualDuration = source.actualDuration;\n target.actualStartTime = source.actualStartTime;\n target.selfBaseDuration = source.selfBaseDuration;\n target.treeBaseDuration = source.treeBaseDuration;\n }\n target._debugID = source._debugID;\n target._debugSource = source._debugSource;\n target._debugOwner = source._debugOwner;\n target._debugIsCurrentlyTiming = source._debugIsCurrentlyTiming;\n target._debugHookTypes = source._debugHookTypes;\n return target;\n}\n\n// TODO: This should be lifted into the renderer.\n\n\n// The following attributes are only used by interaction tracing builds.\n// They enable interactions to be associated with their async work,\n// And expose interaction metadata to the React DevTools Profiler plugin.\n// Note that these attributes are only defined when the enableSchedulerTracing flag is enabled.\n\n\n// Exported FiberRoot type includes all properties,\n// To avoid requiring potentially error-prone :any casts throughout the project.\n// Profiling properties are only safe to access in profiling builds (when enableSchedulerTracing is true).\n// The types are defined separately within this file to ensure they stay in sync.\n// (We don't have to use an inline :any cast when enableSchedulerTracing is disabled.)\n\n\nfunction createFiberRoot(containerInfo, isConcurrent, hydrate) {\n // Cyclic construction. This cheats the type system right now because\n // stateNode is any.\n var uninitializedFiber = createHostRootFiber(isConcurrent);\n\n var root = void 0;\n if (enableSchedulerTracing) {\n root = {\n current: uninitializedFiber,\n containerInfo: containerInfo,\n pendingChildren: null,\n\n earliestPendingTime: NoWork,\n latestPendingTime: NoWork,\n earliestSuspendedTime: NoWork,\n latestSuspendedTime: NoWork,\n latestPingedTime: NoWork,\n\n pingCache: null,\n\n didError: false,\n\n pendingCommitExpirationTime: NoWork,\n finishedWork: null,\n timeoutHandle: noTimeout,\n context: null,\n pendingContext: null,\n hydrate: hydrate,\n nextExpirationTimeToWorkOn: NoWork,\n expirationTime: NoWork,\n firstBatch: null,\n nextScheduledRoot: null,\n\n interactionThreadID: tracing.unstable_getThreadID(),\n memoizedInteractions: new Set(),\n pendingInteractionMap: new Map()\n };\n } else {\n root = {\n current: uninitializedFiber,\n containerInfo: containerInfo,\n pendingChildren: null,\n\n pingCache: null,\n\n earliestPendingTime: NoWork,\n latestPendingTime: NoWork,\n earliestSuspendedTime: NoWork,\n latestSuspendedTime: NoWork,\n latestPingedTime: NoWork,\n\n didError: false,\n\n pendingCommitExpirationTime: NoWork,\n finishedWork: null,\n timeoutHandle: noTimeout,\n context: null,\n pendingContext: null,\n hydrate: hydrate,\n nextExpirationTimeToWorkOn: NoWork,\n expirationTime: NoWork,\n firstBatch: null,\n nextScheduledRoot: null\n };\n }\n\n uninitializedFiber.stateNode = root;\n\n // The reason for the way the Flow types are structured in this file,\n // Is to avoid needing :any casts everywhere interaction tracing fields are used.\n // Unfortunately that requires an :any cast for non-interaction tracing capable builds.\n // $FlowFixMe Remove this :any cast and replace it with something better.\n return root;\n}\n\n/**\n * Forked from fbjs/warning:\n * https://github.com/facebook/fbjs/blob/e66ba20ad5be433eb54423f2b097d829324d9de6/packages/fbjs/src/__forks__/warning.js\n *\n * Only change is we use console.warn instead of console.error,\n * and do nothing when 'console' is not supported.\n * This really simplifies the code.\n * ---\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar lowPriorityWarning = function () {};\n\n{\n var printWarning = function (format) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var argIndex = 0;\n var message = 'Warning: ' + format.replace(/%s/g, function () {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.warn(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n\n lowPriorityWarning = function (condition, format) {\n if (format === undefined) {\n throw new Error('`lowPriorityWarning(condition, format, ...args)` requires a warning ' + 'message argument');\n }\n if (!condition) {\n for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n args[_key2 - 2] = arguments[_key2];\n }\n\n printWarning.apply(undefined, [format].concat(args));\n }\n };\n}\n\nvar lowPriorityWarning$1 = lowPriorityWarning;\n\nvar ReactStrictModeWarnings = {\n discardPendingWarnings: function () {},\n flushPendingDeprecationWarnings: function () {},\n flushPendingUnsafeLifecycleWarnings: function () {},\n recordDeprecationWarnings: function (fiber, instance) {},\n recordUnsafeLifecycleWarnings: function (fiber, instance) {},\n recordLegacyContextWarning: function (fiber, instance) {},\n flushLegacyContextWarning: function () {}\n};\n\n{\n var LIFECYCLE_SUGGESTIONS = {\n UNSAFE_componentWillMount: 'componentDidMount',\n UNSAFE_componentWillReceiveProps: 'static getDerivedStateFromProps',\n UNSAFE_componentWillUpdate: 'componentDidUpdate'\n };\n\n var pendingComponentWillMountWarnings = [];\n var pendingComponentWillReceivePropsWarnings = [];\n var pendingComponentWillUpdateWarnings = [];\n var pendingUnsafeLifecycleWarnings = new Map();\n var pendingLegacyContextWarning = new Map();\n\n // Tracks components we have already warned about.\n var didWarnAboutDeprecatedLifecycles = new Set();\n var didWarnAboutUnsafeLifecycles = new Set();\n var didWarnAboutLegacyContext = new Set();\n\n var setToSortedString = function (set) {\n var array = [];\n set.forEach(function (value) {\n array.push(value);\n });\n return array.sort().join(', ');\n };\n\n ReactStrictModeWarnings.discardPendingWarnings = function () {\n pendingComponentWillMountWarnings = [];\n pendingComponentWillReceivePropsWarnings = [];\n pendingComponentWillUpdateWarnings = [];\n pendingUnsafeLifecycleWarnings = new Map();\n pendingLegacyContextWarning = new Map();\n };\n\n ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings = function () {\n pendingUnsafeLifecycleWarnings.forEach(function (lifecycleWarningsMap, strictRoot) {\n var lifecyclesWarningMessages = [];\n\n Object.keys(lifecycleWarningsMap).forEach(function (lifecycle) {\n var lifecycleWarnings = lifecycleWarningsMap[lifecycle];\n if (lifecycleWarnings.length > 0) {\n var componentNames = new Set();\n lifecycleWarnings.forEach(function (fiber) {\n componentNames.add(getComponentName(fiber.type) || 'Component');\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n });\n\n var formatted = lifecycle.replace('UNSAFE_', '');\n var suggestion = LIFECYCLE_SUGGESTIONS[lifecycle];\n var sortedComponentNames = setToSortedString(componentNames);\n\n lifecyclesWarningMessages.push(formatted + ': Please update the following components to use ' + (suggestion + ' instead: ' + sortedComponentNames));\n }\n });\n\n if (lifecyclesWarningMessages.length > 0) {\n var strictRootComponentStack = getStackByFiberInDevAndProd(strictRoot);\n\n warningWithoutStack$1(false, 'Unsafe lifecycle methods were found within a strict-mode tree:%s' + '\\n\\n%s' + '\\n\\nLearn more about this warning here:' + '\\nhttps://fb.me/react-strict-mode-warnings', strictRootComponentStack, lifecyclesWarningMessages.join('\\n\\n'));\n }\n });\n\n pendingUnsafeLifecycleWarnings = new Map();\n };\n\n var findStrictRoot = function (fiber) {\n var maybeStrictRoot = null;\n\n var node = fiber;\n while (node !== null) {\n if (node.mode & StrictMode) {\n maybeStrictRoot = node;\n }\n node = node.return;\n }\n\n return maybeStrictRoot;\n };\n\n ReactStrictModeWarnings.flushPendingDeprecationWarnings = function () {\n if (pendingComponentWillMountWarnings.length > 0) {\n var uniqueNames = new Set();\n pendingComponentWillMountWarnings.forEach(function (fiber) {\n uniqueNames.add(getComponentName(fiber.type) || 'Component');\n didWarnAboutDeprecatedLifecycles.add(fiber.type);\n });\n\n var sortedNames = setToSortedString(uniqueNames);\n\n lowPriorityWarning$1(false, 'componentWillMount is deprecated and will be removed in the next major version. ' + 'Use componentDidMount instead. As a temporary workaround, ' + 'you can rename to UNSAFE_componentWillMount.' + '\\n\\nPlease update the following components: %s' + '\\n\\nLearn more about this warning here:' + '\\nhttps://fb.me/react-async-component-lifecycle-hooks', sortedNames);\n\n pendingComponentWillMountWarnings = [];\n }\n\n if (pendingComponentWillReceivePropsWarnings.length > 0) {\n var _uniqueNames = new Set();\n pendingComponentWillReceivePropsWarnings.forEach(function (fiber) {\n _uniqueNames.add(getComponentName(fiber.type) || 'Component');\n didWarnAboutDeprecatedLifecycles.add(fiber.type);\n });\n\n var _sortedNames = setToSortedString(_uniqueNames);\n\n lowPriorityWarning$1(false, 'componentWillReceiveProps is deprecated and will be removed in the next major version. ' + 'Use static getDerivedStateFromProps instead.' + '\\n\\nPlease update the following components: %s' + '\\n\\nLearn more about this warning here:' + '\\nhttps://fb.me/react-async-component-lifecycle-hooks', _sortedNames);\n\n pendingComponentWillReceivePropsWarnings = [];\n }\n\n if (pendingComponentWillUpdateWarnings.length > 0) {\n var _uniqueNames2 = new Set();\n pendingComponentWillUpdateWarnings.forEach(function (fiber) {\n _uniqueNames2.add(getComponentName(fiber.type) || 'Component');\n didWarnAboutDeprecatedLifecycles.add(fiber.type);\n });\n\n var _sortedNames2 = setToSortedString(_uniqueNames2);\n\n lowPriorityWarning$1(false, 'componentWillUpdate is deprecated and will be removed in the next major version. ' + 'Use componentDidUpdate instead. As a temporary workaround, ' + 'you can rename to UNSAFE_componentWillUpdate.' + '\\n\\nPlease update the following components: %s' + '\\n\\nLearn more about this warning here:' + '\\nhttps://fb.me/react-async-component-lifecycle-hooks', _sortedNames2);\n\n pendingComponentWillUpdateWarnings = [];\n }\n };\n\n ReactStrictModeWarnings.recordDeprecationWarnings = function (fiber, instance) {\n // Dedup strategy: Warn once per component.\n if (didWarnAboutDeprecatedLifecycles.has(fiber.type)) {\n return;\n }\n\n // Don't warn about react-lifecycles-compat polyfilled components.\n if (typeof instance.componentWillMount === 'function' && instance.componentWillMount.__suppressDeprecationWarning !== true) {\n pendingComponentWillMountWarnings.push(fiber);\n }\n if (typeof instance.componentWillReceiveProps === 'function' && instance.componentWillReceiveProps.__suppressDeprecationWarning !== true) {\n pendingComponentWillReceivePropsWarnings.push(fiber);\n }\n if (typeof instance.componentWillUpdate === 'function' && instance.componentWillUpdate.__suppressDeprecationWarning !== true) {\n pendingComponentWillUpdateWarnings.push(fiber);\n }\n };\n\n ReactStrictModeWarnings.recordUnsafeLifecycleWarnings = function (fiber, instance) {\n var strictRoot = findStrictRoot(fiber);\n if (strictRoot === null) {\n warningWithoutStack$1(false, 'Expected to find a StrictMode component in a strict mode tree. ' + 'This error is likely caused by a bug in React. Please file an issue.');\n return;\n }\n\n // Dedup strategy: Warn once per component.\n // This is difficult to track any other way since component names\n // are often vague and are likely to collide between 3rd party libraries.\n // An expand property is probably okay to use here since it's DEV-only,\n // and will only be set in the event of serious warnings.\n if (didWarnAboutUnsafeLifecycles.has(fiber.type)) {\n return;\n }\n\n var warningsForRoot = void 0;\n if (!pendingUnsafeLifecycleWarnings.has(strictRoot)) {\n warningsForRoot = {\n UNSAFE_componentWillMount: [],\n UNSAFE_componentWillReceiveProps: [],\n UNSAFE_componentWillUpdate: []\n };\n\n pendingUnsafeLifecycleWarnings.set(strictRoot, warningsForRoot);\n } else {\n warningsForRoot = pendingUnsafeLifecycleWarnings.get(strictRoot);\n }\n\n var unsafeLifecycles = [];\n if (typeof instance.componentWillMount === 'function' && instance.componentWillMount.__suppressDeprecationWarning !== true || typeof instance.UNSAFE_componentWillMount === 'function') {\n unsafeLifecycles.push('UNSAFE_componentWillMount');\n }\n if (typeof instance.componentWillReceiveProps === 'function' && instance.componentWillReceiveProps.__suppressDeprecationWarning !== true || typeof instance.UNSAFE_componentWillReceiveProps === 'function') {\n unsafeLifecycles.push('UNSAFE_componentWillReceiveProps');\n }\n if (typeof instance.componentWillUpdate === 'function' && instance.componentWillUpdate.__suppressDeprecationWarning !== true || typeof instance.UNSAFE_componentWillUpdate === 'function') {\n unsafeLifecycles.push('UNSAFE_componentWillUpdate');\n }\n\n if (unsafeLifecycles.length > 0) {\n unsafeLifecycles.forEach(function (lifecycle) {\n warningsForRoot[lifecycle].push(fiber);\n });\n }\n };\n\n ReactStrictModeWarnings.recordLegacyContextWarning = function (fiber, instance) {\n var strictRoot = findStrictRoot(fiber);\n if (strictRoot === null) {\n warningWithoutStack$1(false, 'Expected to find a StrictMode component in a strict mode tree. ' + 'This error is likely caused by a bug in React. Please file an issue.');\n return;\n }\n\n // Dedup strategy: Warn once per component.\n if (didWarnAboutLegacyContext.has(fiber.type)) {\n return;\n }\n\n var warningsForRoot = pendingLegacyContextWarning.get(strictRoot);\n\n if (fiber.type.contextTypes != null || fiber.type.childContextTypes != null || instance !== null && typeof instance.getChildContext === 'function') {\n if (warningsForRoot === undefined) {\n warningsForRoot = [];\n pendingLegacyContextWarning.set(strictRoot, warningsForRoot);\n }\n warningsForRoot.push(fiber);\n }\n };\n\n ReactStrictModeWarnings.flushLegacyContextWarning = function () {\n pendingLegacyContextWarning.forEach(function (fiberArray, strictRoot) {\n var uniqueNames = new Set();\n fiberArray.forEach(function (fiber) {\n uniqueNames.add(getComponentName(fiber.type) || 'Component');\n didWarnAboutLegacyContext.add(fiber.type);\n });\n\n var sortedNames = setToSortedString(uniqueNames);\n var strictRootComponentStack = getStackByFiberInDevAndProd(strictRoot);\n\n warningWithoutStack$1(false, 'Legacy context API has been detected within a strict-mode tree: %s' + '\\n\\nPlease update the following components: %s' + '\\n\\nLearn more about this warning here:' + '\\nhttps://fb.me/react-strict-mode-warnings', strictRootComponentStack, sortedNames);\n });\n };\n}\n\n// This lets us hook into Fiber to debug what it's doing.\n// See https://github.com/facebook/react/pull/8033.\n// This is not part of the public API, not even for React DevTools.\n// You may only inject a debugTool if you work on React Fiber itself.\nvar ReactFiberInstrumentation = {\n debugTool: null\n};\n\nvar ReactFiberInstrumentation_1 = ReactFiberInstrumentation;\n\n// TODO: Offscreen updates should never suspend. However, a promise that\n// suspended inside an offscreen subtree should be able to ping at the priority\n// of the outer render.\n\nfunction markPendingPriorityLevel(root, expirationTime) {\n // If there's a gap between completing a failed root and retrying it,\n // additional updates may be scheduled. Clear `didError`, in case the update\n // is sufficient to fix the error.\n root.didError = false;\n\n // Update the latest and earliest pending times\n var earliestPendingTime = root.earliestPendingTime;\n if (earliestPendingTime === NoWork) {\n // No other pending updates.\n root.earliestPendingTime = root.latestPendingTime = expirationTime;\n } else {\n if (earliestPendingTime < expirationTime) {\n // This is the earliest pending update.\n root.earliestPendingTime = expirationTime;\n } else {\n var latestPendingTime = root.latestPendingTime;\n if (latestPendingTime > expirationTime) {\n // This is the latest pending update\n root.latestPendingTime = expirationTime;\n }\n }\n }\n findNextExpirationTimeToWorkOn(expirationTime, root);\n}\n\nfunction markCommittedPriorityLevels(root, earliestRemainingTime) {\n root.didError = false;\n\n if (earliestRemainingTime === NoWork) {\n // Fast path. There's no remaining work. Clear everything.\n root.earliestPendingTime = NoWork;\n root.latestPendingTime = NoWork;\n root.earliestSuspendedTime = NoWork;\n root.latestSuspendedTime = NoWork;\n root.latestPingedTime = NoWork;\n findNextExpirationTimeToWorkOn(NoWork, root);\n return;\n }\n\n if (earliestRemainingTime < root.latestPingedTime) {\n root.latestPingedTime = NoWork;\n }\n\n // Let's see if the previous latest known pending level was just flushed.\n var latestPendingTime = root.latestPendingTime;\n if (latestPendingTime !== NoWork) {\n if (latestPendingTime > earliestRemainingTime) {\n // We've flushed all the known pending levels.\n root.earliestPendingTime = root.latestPendingTime = NoWork;\n } else {\n var earliestPendingTime = root.earliestPendingTime;\n if (earliestPendingTime > earliestRemainingTime) {\n // We've flushed the earliest known pending level. Set this to the\n // latest pending time.\n root.earliestPendingTime = root.latestPendingTime;\n }\n }\n }\n\n // Now let's handle the earliest remaining level in the whole tree. We need to\n // decide whether to treat it as a pending level or as suspended. Check\n // it falls within the range of known suspended levels.\n\n var earliestSuspendedTime = root.earliestSuspendedTime;\n if (earliestSuspendedTime === NoWork) {\n // There's no suspended work. Treat the earliest remaining level as a\n // pending level.\n markPendingPriorityLevel(root, earliestRemainingTime);\n findNextExpirationTimeToWorkOn(NoWork, root);\n return;\n }\n\n var latestSuspendedTime = root.latestSuspendedTime;\n if (earliestRemainingTime < latestSuspendedTime) {\n // The earliest remaining level is later than all the suspended work. That\n // means we've flushed all the suspended work.\n root.earliestSuspendedTime = NoWork;\n root.latestSuspendedTime = NoWork;\n root.latestPingedTime = NoWork;\n\n // There's no suspended work. Treat the earliest remaining level as a\n // pending level.\n markPendingPriorityLevel(root, earliestRemainingTime);\n findNextExpirationTimeToWorkOn(NoWork, root);\n return;\n }\n\n if (earliestRemainingTime > earliestSuspendedTime) {\n // The earliest remaining time is earlier than all the suspended work.\n // Treat it as a pending update.\n markPendingPriorityLevel(root, earliestRemainingTime);\n findNextExpirationTimeToWorkOn(NoWork, root);\n return;\n }\n\n // The earliest remaining time falls within the range of known suspended\n // levels. We should treat this as suspended work.\n findNextExpirationTimeToWorkOn(NoWork, root);\n}\n\nfunction hasLowerPriorityWork(root, erroredExpirationTime) {\n var latestPendingTime = root.latestPendingTime;\n var latestSuspendedTime = root.latestSuspendedTime;\n var latestPingedTime = root.latestPingedTime;\n return latestPendingTime !== NoWork && latestPendingTime < erroredExpirationTime || latestSuspendedTime !== NoWork && latestSuspendedTime < erroredExpirationTime || latestPingedTime !== NoWork && latestPingedTime < erroredExpirationTime;\n}\n\nfunction isPriorityLevelSuspended(root, expirationTime) {\n var earliestSuspendedTime = root.earliestSuspendedTime;\n var latestSuspendedTime = root.latestSuspendedTime;\n return earliestSuspendedTime !== NoWork && expirationTime <= earliestSuspendedTime && expirationTime >= latestSuspendedTime;\n}\n\nfunction markSuspendedPriorityLevel(root, suspendedTime) {\n root.didError = false;\n clearPing(root, suspendedTime);\n\n // First, check the known pending levels and update them if needed.\n var earliestPendingTime = root.earliestPendingTime;\n var latestPendingTime = root.latestPendingTime;\n if (earliestPendingTime === suspendedTime) {\n if (latestPendingTime === suspendedTime) {\n // Both known pending levels were suspended. Clear them.\n root.earliestPendingTime = root.latestPendingTime = NoWork;\n } else {\n // The earliest pending level was suspended. Clear by setting it to the\n // latest pending level.\n root.earliestPendingTime = latestPendingTime;\n }\n } else if (latestPendingTime === suspendedTime) {\n // The latest pending level was suspended. Clear by setting it to the\n // latest pending level.\n root.latestPendingTime = earliestPendingTime;\n }\n\n // Finally, update the known suspended levels.\n var earliestSuspendedTime = root.earliestSuspendedTime;\n var latestSuspendedTime = root.latestSuspendedTime;\n if (earliestSuspendedTime === NoWork) {\n // No other suspended levels.\n root.earliestSuspendedTime = root.latestSuspendedTime = suspendedTime;\n } else {\n if (earliestSuspendedTime < suspendedTime) {\n // This is the earliest suspended level.\n root.earliestSuspendedTime = suspendedTime;\n } else if (latestSuspendedTime > suspendedTime) {\n // This is the latest suspended level\n root.latestSuspendedTime = suspendedTime;\n }\n }\n\n findNextExpirationTimeToWorkOn(suspendedTime, root);\n}\n\nfunction markPingedPriorityLevel(root, pingedTime) {\n root.didError = false;\n\n // TODO: When we add back resuming, we need to ensure the progressed work\n // is thrown out and not reused during the restarted render. One way to\n // invalidate the progressed work is to restart at expirationTime + 1.\n var latestPingedTime = root.latestPingedTime;\n if (latestPingedTime === NoWork || latestPingedTime > pingedTime) {\n root.latestPingedTime = pingedTime;\n }\n findNextExpirationTimeToWorkOn(pingedTime, root);\n}\n\nfunction clearPing(root, completedTime) {\n var latestPingedTime = root.latestPingedTime;\n if (latestPingedTime >= completedTime) {\n root.latestPingedTime = NoWork;\n }\n}\n\nfunction findEarliestOutstandingPriorityLevel(root, renderExpirationTime) {\n var earliestExpirationTime = renderExpirationTime;\n\n var earliestPendingTime = root.earliestPendingTime;\n var earliestSuspendedTime = root.earliestSuspendedTime;\n if (earliestPendingTime > earliestExpirationTime) {\n earliestExpirationTime = earliestPendingTime;\n }\n if (earliestSuspendedTime > earliestExpirationTime) {\n earliestExpirationTime = earliestSuspendedTime;\n }\n return earliestExpirationTime;\n}\n\nfunction didExpireAtExpirationTime(root, currentTime) {\n var expirationTime = root.expirationTime;\n if (expirationTime !== NoWork && currentTime <= expirationTime) {\n // The root has expired. Flush all work up to the current time.\n root.nextExpirationTimeToWorkOn = currentTime;\n }\n}\n\nfunction findNextExpirationTimeToWorkOn(completedExpirationTime, root) {\n var earliestSuspendedTime = root.earliestSuspendedTime;\n var latestSuspendedTime = root.latestSuspendedTime;\n var earliestPendingTime = root.earliestPendingTime;\n var latestPingedTime = root.latestPingedTime;\n\n // Work on the earliest pending time. Failing that, work on the latest\n // pinged time.\n var nextExpirationTimeToWorkOn = earliestPendingTime !== NoWork ? earliestPendingTime : latestPingedTime;\n\n // If there is no pending or pinged work, check if there's suspended work\n // that's lower priority than what we just completed.\n if (nextExpirationTimeToWorkOn === NoWork && (completedExpirationTime === NoWork || latestSuspendedTime < completedExpirationTime)) {\n // The lowest priority suspended work is the work most likely to be\n // committed next. Let's start rendering it again, so that if it times out,\n // it's ready to commit.\n nextExpirationTimeToWorkOn = latestSuspendedTime;\n }\n\n var expirationTime = nextExpirationTimeToWorkOn;\n if (expirationTime !== NoWork && earliestSuspendedTime > expirationTime) {\n // Expire using the earliest known expiration time.\n expirationTime = earliestSuspendedTime;\n }\n\n root.nextExpirationTimeToWorkOn = nextExpirationTimeToWorkOn;\n root.expirationTime = expirationTime;\n}\n\nfunction resolveDefaultProps(Component, baseProps) {\n if (Component && Component.defaultProps) {\n // Resolve default props. Taken from ReactElement\n var props = _assign({}, baseProps);\n var defaultProps = Component.defaultProps;\n for (var propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n return props;\n }\n return baseProps;\n}\n\nfunction readLazyComponentType(lazyComponent) {\n var status = lazyComponent._status;\n var result = lazyComponent._result;\n switch (status) {\n case Resolved:\n {\n var Component = result;\n return Component;\n }\n case Rejected:\n {\n var error = result;\n throw error;\n }\n case Pending:\n {\n var thenable = result;\n throw thenable;\n }\n default:\n {\n lazyComponent._status = Pending;\n var ctor = lazyComponent._ctor;\n var _thenable = ctor();\n _thenable.then(function (moduleObject) {\n if (lazyComponent._status === Pending) {\n var defaultExport = moduleObject.default;\n {\n if (defaultExport === undefined) {\n warning$1(false, 'lazy: Expected the result of a dynamic import() call. ' + 'Instead received: %s\\n\\nYour code should look like: \\n ' + \"const MyComponent = lazy(() => import('./MyComponent'))\", moduleObject);\n }\n }\n lazyComponent._status = Resolved;\n lazyComponent._result = defaultExport;\n }\n }, function (error) {\n if (lazyComponent._status === Pending) {\n lazyComponent._status = Rejected;\n lazyComponent._result = error;\n }\n });\n // Handle synchronous thenables.\n switch (lazyComponent._status) {\n case Resolved:\n return lazyComponent._result;\n case Rejected:\n throw lazyComponent._result;\n }\n lazyComponent._result = _thenable;\n throw _thenable;\n }\n }\n}\n\nvar fakeInternalInstance = {};\nvar isArray$1 = Array.isArray;\n\n// React.Component uses a shared frozen object by default.\n// We'll use it to determine whether we need to initialize legacy refs.\nvar emptyRefsObject = new React.Component().refs;\n\nvar didWarnAboutStateAssignmentForComponent = void 0;\nvar didWarnAboutUninitializedState = void 0;\nvar didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate = void 0;\nvar didWarnAboutLegacyLifecyclesAndDerivedState = void 0;\nvar didWarnAboutUndefinedDerivedState = void 0;\nvar warnOnUndefinedDerivedState = void 0;\nvar warnOnInvalidCallback$1 = void 0;\nvar didWarnAboutDirectlyAssigningPropsToState = void 0;\nvar didWarnAboutContextTypeAndContextTypes = void 0;\nvar didWarnAboutInvalidateContextType = void 0;\n\n{\n didWarnAboutStateAssignmentForComponent = new Set();\n didWarnAboutUninitializedState = new Set();\n didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate = new Set();\n didWarnAboutLegacyLifecyclesAndDerivedState = new Set();\n didWarnAboutDirectlyAssigningPropsToState = new Set();\n didWarnAboutUndefinedDerivedState = new Set();\n didWarnAboutContextTypeAndContextTypes = new Set();\n didWarnAboutInvalidateContextType = new Set();\n\n var didWarnOnInvalidCallback = new Set();\n\n warnOnInvalidCallback$1 = function (callback, callerName) {\n if (callback === null || typeof callback === 'function') {\n return;\n }\n var key = callerName + '_' + callback;\n if (!didWarnOnInvalidCallback.has(key)) {\n didWarnOnInvalidCallback.add(key);\n warningWithoutStack$1(false, '%s(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callerName, callback);\n }\n };\n\n warnOnUndefinedDerivedState = function (type, partialState) {\n if (partialState === undefined) {\n var componentName = getComponentName(type) || 'Component';\n if (!didWarnAboutUndefinedDerivedState.has(componentName)) {\n didWarnAboutUndefinedDerivedState.add(componentName);\n warningWithoutStack$1(false, '%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. ' + 'You have returned undefined.', componentName);\n }\n }\n };\n\n // This is so gross but it's at least non-critical and can be removed if\n // it causes problems. This is meant to give a nicer error message for\n // ReactDOM15.unstable_renderSubtreeIntoContainer(reactDOM16Component,\n // ...)) which otherwise throws a \"_processChildContext is not a function\"\n // exception.\n Object.defineProperty(fakeInternalInstance, '_processChildContext', {\n enumerable: false,\n value: function () {\n invariant(false, '_processChildContext is not available in React 16+. This likely means you have multiple copies of React and are attempting to nest a React 15 tree inside a React 16 tree using unstable_renderSubtreeIntoContainer, which isn\\'t supported. Try to make sure you have only one copy of React (and ideally, switch to ReactDOM.createPortal).');\n }\n });\n Object.freeze(fakeInternalInstance);\n}\n\nfunction applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, nextProps) {\n var prevState = workInProgress.memoizedState;\n\n {\n if (debugRenderPhaseSideEffects || debugRenderPhaseSideEffectsForStrictMode && workInProgress.mode & StrictMode) {\n // Invoke the function an extra time to help detect side-effects.\n getDerivedStateFromProps(nextProps, prevState);\n }\n }\n\n var partialState = getDerivedStateFromProps(nextProps, prevState);\n\n {\n warnOnUndefinedDerivedState(ctor, partialState);\n }\n // Merge the partial state and the previous state.\n var memoizedState = partialState === null || partialState === undefined ? prevState : _assign({}, prevState, partialState);\n workInProgress.memoizedState = memoizedState;\n\n // Once the update queue is empty, persist the derived state onto the\n // base state.\n var updateQueue = workInProgress.updateQueue;\n if (updateQueue !== null && workInProgress.expirationTime === NoWork) {\n updateQueue.baseState = memoizedState;\n }\n}\n\nvar classComponentUpdater = {\n isMounted: isMounted,\n enqueueSetState: function (inst, payload, callback) {\n var fiber = get(inst);\n var currentTime = requestCurrentTime();\n var expirationTime = computeExpirationForFiber(currentTime, fiber);\n\n var update = createUpdate(expirationTime);\n update.payload = payload;\n if (callback !== undefined && callback !== null) {\n {\n warnOnInvalidCallback$1(callback, 'setState');\n }\n update.callback = callback;\n }\n\n flushPassiveEffects();\n enqueueUpdate(fiber, update);\n scheduleWork(fiber, expirationTime);\n },\n enqueueReplaceState: function (inst, payload, callback) {\n var fiber = get(inst);\n var currentTime = requestCurrentTime();\n var expirationTime = computeExpirationForFiber(currentTime, fiber);\n\n var update = createUpdate(expirationTime);\n update.tag = ReplaceState;\n update.payload = payload;\n\n if (callback !== undefined && callback !== null) {\n {\n warnOnInvalidCallback$1(callback, 'replaceState');\n }\n update.callback = callback;\n }\n\n flushPassiveEffects();\n enqueueUpdate(fiber, update);\n scheduleWork(fiber, expirationTime);\n },\n enqueueForceUpdate: function (inst, callback) {\n var fiber = get(inst);\n var currentTime = requestCurrentTime();\n var expirationTime = computeExpirationForFiber(currentTime, fiber);\n\n var update = createUpdate(expirationTime);\n update.tag = ForceUpdate;\n\n if (callback !== undefined && callback !== null) {\n {\n warnOnInvalidCallback$1(callback, 'forceUpdate');\n }\n update.callback = callback;\n }\n\n flushPassiveEffects();\n enqueueUpdate(fiber, update);\n scheduleWork(fiber, expirationTime);\n }\n};\n\nfunction checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext) {\n var instance = workInProgress.stateNode;\n if (typeof instance.shouldComponentUpdate === 'function') {\n startPhaseTimer(workInProgress, 'shouldComponentUpdate');\n var shouldUpdate = instance.shouldComponentUpdate(newProps, newState, nextContext);\n stopPhaseTimer();\n\n {\n !(shouldUpdate !== undefined) ? warningWithoutStack$1(false, '%s.shouldComponentUpdate(): Returned undefined instead of a ' + 'boolean value. Make sure to return true or false.', getComponentName(ctor) || 'Component') : void 0;\n }\n\n return shouldUpdate;\n }\n\n if (ctor.prototype && ctor.prototype.isPureReactComponent) {\n return !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState);\n }\n\n return true;\n}\n\nfunction checkClassInstance(workInProgress, ctor, newProps) {\n var instance = workInProgress.stateNode;\n {\n var name = getComponentName(ctor) || 'Component';\n var renderPresent = instance.render;\n\n if (!renderPresent) {\n if (ctor.prototype && typeof ctor.prototype.render === 'function') {\n warningWithoutStack$1(false, '%s(...): No `render` method found on the returned component ' + 'instance: did you accidentally return an object from the constructor?', name);\n } else {\n warningWithoutStack$1(false, '%s(...): No `render` method found on the returned component ' + 'instance: you may have forgotten to define `render`.', name);\n }\n }\n\n var noGetInitialStateOnES6 = !instance.getInitialState || instance.getInitialState.isReactClassApproved || instance.state;\n !noGetInitialStateOnES6 ? warningWithoutStack$1(false, 'getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?', name) : void 0;\n var noGetDefaultPropsOnES6 = !instance.getDefaultProps || instance.getDefaultProps.isReactClassApproved;\n !noGetDefaultPropsOnES6 ? warningWithoutStack$1(false, 'getDefaultProps was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Use a static property to define defaultProps instead.', name) : void 0;\n var noInstancePropTypes = !instance.propTypes;\n !noInstancePropTypes ? warningWithoutStack$1(false, 'propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.', name) : void 0;\n var noInstanceContextType = !instance.contextType;\n !noInstanceContextType ? warningWithoutStack$1(false, 'contextType was defined as an instance property on %s. Use a static ' + 'property to define contextType instead.', name) : void 0;\n var noInstanceContextTypes = !instance.contextTypes;\n !noInstanceContextTypes ? warningWithoutStack$1(false, 'contextTypes was defined as an instance property on %s. Use a static ' + 'property to define contextTypes instead.', name) : void 0;\n\n if (ctor.contextType && ctor.contextTypes && !didWarnAboutContextTypeAndContextTypes.has(ctor)) {\n didWarnAboutContextTypeAndContextTypes.add(ctor);\n warningWithoutStack$1(false, '%s declares both contextTypes and contextType static properties. ' + 'The legacy contextTypes property will be ignored.', name);\n }\n\n var noComponentShouldUpdate = typeof instance.componentShouldUpdate !== 'function';\n !noComponentShouldUpdate ? warningWithoutStack$1(false, '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', name) : void 0;\n if (ctor.prototype && ctor.prototype.isPureReactComponent && typeof instance.shouldComponentUpdate !== 'undefined') {\n warningWithoutStack$1(false, '%s has a method called shouldComponentUpdate(). ' + 'shouldComponentUpdate should not be used when extending React.PureComponent. ' + 'Please extend React.Component if shouldComponentUpdate is used.', getComponentName(ctor) || 'A pure component');\n }\n var noComponentDidUnmount = typeof instance.componentDidUnmount !== 'function';\n !noComponentDidUnmount ? warningWithoutStack$1(false, '%s has a method called ' + 'componentDidUnmount(). But there is no such lifecycle method. ' + 'Did you mean componentWillUnmount()?', name) : void 0;\n var noComponentDidReceiveProps = typeof instance.componentDidReceiveProps !== 'function';\n !noComponentDidReceiveProps ? warningWithoutStack$1(false, '%s has a method called ' + 'componentDidReceiveProps(). But there is no such lifecycle method. ' + 'If you meant to update the state in response to changing props, ' + 'use componentWillReceiveProps(). If you meant to fetch data or ' + 'run side-effects or mutations after React has updated the UI, use componentDidUpdate().', name) : void 0;\n var noComponentWillRecieveProps = typeof instance.componentWillRecieveProps !== 'function';\n !noComponentWillRecieveProps ? warningWithoutStack$1(false, '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', name) : void 0;\n var noUnsafeComponentWillRecieveProps = typeof instance.UNSAFE_componentWillRecieveProps !== 'function';\n !noUnsafeComponentWillRecieveProps ? warningWithoutStack$1(false, '%s has a method called ' + 'UNSAFE_componentWillRecieveProps(). Did you mean UNSAFE_componentWillReceiveProps()?', name) : void 0;\n var hasMutatedProps = instance.props !== newProps;\n !(instance.props === undefined || !hasMutatedProps) ? warningWithoutStack$1(false, '%s(...): When calling super() in `%s`, make sure to pass ' + \"up the same props that your component's constructor was passed.\", name, name) : void 0;\n var noInstanceDefaultProps = !instance.defaultProps;\n !noInstanceDefaultProps ? warningWithoutStack$1(false, 'Setting defaultProps as an instance property on %s is not supported and will be ignored.' + ' Instead, define defaultProps as a static property on %s.', name, name) : void 0;\n\n if (typeof instance.getSnapshotBeforeUpdate === 'function' && typeof instance.componentDidUpdate !== 'function' && !didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.has(ctor)) {\n didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.add(ctor);\n warningWithoutStack$1(false, '%s: getSnapshotBeforeUpdate() should be used with componentDidUpdate(). ' + 'This component defines getSnapshotBeforeUpdate() only.', getComponentName(ctor));\n }\n\n var noInstanceGetDerivedStateFromProps = typeof instance.getDerivedStateFromProps !== 'function';\n !noInstanceGetDerivedStateFromProps ? warningWithoutStack$1(false, '%s: getDerivedStateFromProps() is defined as an instance method ' + 'and will be ignored. Instead, declare it as a static method.', name) : void 0;\n var noInstanceGetDerivedStateFromCatch = typeof instance.getDerivedStateFromError !== 'function';\n !noInstanceGetDerivedStateFromCatch ? warningWithoutStack$1(false, '%s: getDerivedStateFromError() is defined as an instance method ' + 'and will be ignored. Instead, declare it as a static method.', name) : void 0;\n var noStaticGetSnapshotBeforeUpdate = typeof ctor.getSnapshotBeforeUpdate !== 'function';\n !noStaticGetSnapshotBeforeUpdate ? warningWithoutStack$1(false, '%s: getSnapshotBeforeUpdate() is defined as a static method ' + 'and will be ignored. Instead, declare it as an instance method.', name) : void 0;\n var _state = instance.state;\n if (_state && (typeof _state !== 'object' || isArray$1(_state))) {\n warningWithoutStack$1(false, '%s.state: must be set to an object or null', name);\n }\n if (typeof instance.getChildContext === 'function') {\n !(typeof ctor.childContextTypes === 'object') ? warningWithoutStack$1(false, '%s.getChildContext(): childContextTypes must be defined in order to ' + 'use getChildContext().', name) : void 0;\n }\n }\n}\n\nfunction adoptClassInstance(workInProgress, instance) {\n instance.updater = classComponentUpdater;\n workInProgress.stateNode = instance;\n // The instance needs access to the fiber so that it can schedule updates\n set(instance, workInProgress);\n {\n instance._reactInternalInstance = fakeInternalInstance;\n }\n}\n\nfunction constructClassInstance(workInProgress, ctor, props, renderExpirationTime) {\n var isLegacyContextConsumer = false;\n var unmaskedContext = emptyContextObject;\n var context = null;\n var contextType = ctor.contextType;\n\n {\n if ('contextType' in ctor) {\n var isValid =\n // Allow null for conditional declaration\n contextType === null || contextType !== undefined && contextType.$$typeof === REACT_CONTEXT_TYPE && contextType._context === undefined; // Not a <Context.Consumer>\n\n if (!isValid && !didWarnAboutInvalidateContextType.has(ctor)) {\n didWarnAboutInvalidateContextType.add(ctor);\n\n var addendum = '';\n if (contextType === undefined) {\n addendum = ' However, it is set to undefined. ' + 'This can be caused by a typo or by mixing up named and default imports. ' + 'This can also happen due to a circular dependency, so ' + 'try moving the createContext() call to a separate file.';\n } else if (typeof contextType !== 'object') {\n addendum = ' However, it is set to a ' + typeof contextType + '.';\n } else if (contextType.$$typeof === REACT_PROVIDER_TYPE) {\n addendum = ' Did you accidentally pass the Context.Provider instead?';\n } else if (contextType._context !== undefined) {\n // <Context.Consumer>\n addendum = ' Did you accidentally pass the Context.Consumer instead?';\n } else {\n addendum = ' However, it is set to an object with keys {' + Object.keys(contextType).join(', ') + '}.';\n }\n warningWithoutStack$1(false, '%s defines an invalid contextType. ' + 'contextType should point to the Context object returned by React.createContext().%s', getComponentName(ctor) || 'Component', addendum);\n }\n }\n }\n\n if (typeof contextType === 'object' && contextType !== null) {\n context = readContext(contextType);\n } else {\n unmaskedContext = getUnmaskedContext(workInProgress, ctor, true);\n var contextTypes = ctor.contextTypes;\n isLegacyContextConsumer = contextTypes !== null && contextTypes !== undefined;\n context = isLegacyContextConsumer ? getMaskedContext(workInProgress, unmaskedContext) : emptyContextObject;\n }\n\n // Instantiate twice to help detect side-effects.\n {\n if (debugRenderPhaseSideEffects || debugRenderPhaseSideEffectsForStrictMode && workInProgress.mode & StrictMode) {\n new ctor(props, context); // eslint-disable-line no-new\n }\n }\n\n var instance = new ctor(props, context);\n var state = workInProgress.memoizedState = instance.state !== null && instance.state !== undefined ? instance.state : null;\n adoptClassInstance(workInProgress, instance);\n\n {\n if (typeof ctor.getDerivedStateFromProps === 'function' && state === null) {\n var componentName = getComponentName(ctor) || 'Component';\n if (!didWarnAboutUninitializedState.has(componentName)) {\n didWarnAboutUninitializedState.add(componentName);\n warningWithoutStack$1(false, '`%s` uses `getDerivedStateFromProps` but its initial state is ' + '%s. This is not recommended. Instead, define the initial state by ' + 'assigning an object to `this.state` in the constructor of `%s`. ' + 'This ensures that `getDerivedStateFromProps` arguments have a consistent shape.', componentName, instance.state === null ? 'null' : 'undefined', componentName);\n }\n }\n\n // If new component APIs are defined, \"unsafe\" lifecycles won't be called.\n // Warn about these lifecycles if they are present.\n // Don't warn about react-lifecycles-compat polyfilled methods though.\n if (typeof ctor.getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function') {\n var foundWillMountName = null;\n var foundWillReceivePropsName = null;\n var foundWillUpdateName = null;\n if (typeof instance.componentWillMount === 'function' && instance.componentWillMount.__suppressDeprecationWarning !== true) {\n foundWillMountName = 'componentWillMount';\n } else if (typeof instance.UNSAFE_componentWillMount === 'function') {\n foundWillMountName = 'UNSAFE_componentWillMount';\n }\n if (typeof instance.componentWillReceiveProps === 'function' && instance.componentWillReceiveProps.__suppressDeprecationWarning !== true) {\n foundWillReceivePropsName = 'componentWillReceiveProps';\n } else if (typeof instance.UNSAFE_componentWillReceiveProps === 'function') {\n foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps';\n }\n if (typeof instance.componentWillUpdate === 'function' && instance.componentWillUpdate.__suppressDeprecationWarning !== true) {\n foundWillUpdateName = 'componentWillUpdate';\n } else if (typeof instance.UNSAFE_componentWillUpdate === 'function') {\n foundWillUpdateName = 'UNSAFE_componentWillUpdate';\n }\n if (foundWillMountName !== null || foundWillReceivePropsName !== null || foundWillUpdateName !== null) {\n var _componentName = getComponentName(ctor) || 'Component';\n var newApiName = typeof ctor.getDerivedStateFromProps === 'function' ? 'getDerivedStateFromProps()' : 'getSnapshotBeforeUpdate()';\n if (!didWarnAboutLegacyLifecyclesAndDerivedState.has(_componentName)) {\n didWarnAboutLegacyLifecyclesAndDerivedState.add(_componentName);\n warningWithoutStack$1(false, 'Unsafe legacy lifecycles will not be called for components using new component APIs.\\n\\n' + '%s uses %s but also contains the following legacy lifecycles:%s%s%s\\n\\n' + 'The above lifecycles should be removed. Learn more about this warning here:\\n' + 'https://fb.me/react-async-component-lifecycle-hooks', _componentName, newApiName, foundWillMountName !== null ? '\\n ' + foundWillMountName : '', foundWillReceivePropsName !== null ? '\\n ' + foundWillReceivePropsName : '', foundWillUpdateName !== null ? '\\n ' + foundWillUpdateName : '');\n }\n }\n }\n }\n\n // Cache unmasked context so we can avoid recreating masked context unless necessary.\n // ReactFiberContext usually updates this cache but can't for newly-created instances.\n if (isLegacyContextConsumer) {\n cacheContext(workInProgress, unmaskedContext, context);\n }\n\n return instance;\n}\n\nfunction callComponentWillMount(workInProgress, instance) {\n startPhaseTimer(workInProgress, 'componentWillMount');\n var oldState = instance.state;\n\n if (typeof instance.componentWillMount === 'function') {\n instance.componentWillMount();\n }\n if (typeof instance.UNSAFE_componentWillMount === 'function') {\n instance.UNSAFE_componentWillMount();\n }\n\n stopPhaseTimer();\n\n if (oldState !== instance.state) {\n {\n warningWithoutStack$1(false, '%s.componentWillMount(): Assigning directly to this.state is ' + \"deprecated (except inside a component's \" + 'constructor). Use setState instead.', getComponentName(workInProgress.type) || 'Component');\n }\n classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n }\n}\n\nfunction callComponentWillReceiveProps(workInProgress, instance, newProps, nextContext) {\n var oldState = instance.state;\n startPhaseTimer(workInProgress, 'componentWillReceiveProps');\n if (typeof instance.componentWillReceiveProps === 'function') {\n instance.componentWillReceiveProps(newProps, nextContext);\n }\n if (typeof instance.UNSAFE_componentWillReceiveProps === 'function') {\n instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);\n }\n stopPhaseTimer();\n\n if (instance.state !== oldState) {\n {\n var componentName = getComponentName(workInProgress.type) || 'Component';\n if (!didWarnAboutStateAssignmentForComponent.has(componentName)) {\n didWarnAboutStateAssignmentForComponent.add(componentName);\n warningWithoutStack$1(false, '%s.componentWillReceiveProps(): Assigning directly to ' + \"this.state is deprecated (except inside a component's \" + 'constructor). Use setState instead.', componentName);\n }\n }\n classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n }\n}\n\n// Invokes the mount life-cycles on a previously never rendered instance.\nfunction mountClassInstance(workInProgress, ctor, newProps, renderExpirationTime) {\n {\n checkClassInstance(workInProgress, ctor, newProps);\n }\n\n var instance = workInProgress.stateNode;\n instance.props = newProps;\n instance.state = workInProgress.memoizedState;\n instance.refs = emptyRefsObject;\n\n var contextType = ctor.contextType;\n if (typeof contextType === 'object' && contextType !== null) {\n instance.context = readContext(contextType);\n } else {\n var unmaskedContext = getUnmaskedContext(workInProgress, ctor, true);\n instance.context = getMaskedContext(workInProgress, unmaskedContext);\n }\n\n {\n if (instance.state === newProps) {\n var componentName = getComponentName(ctor) || 'Component';\n if (!didWarnAboutDirectlyAssigningPropsToState.has(componentName)) {\n didWarnAboutDirectlyAssigningPropsToState.add(componentName);\n warningWithoutStack$1(false, '%s: It is not recommended to assign props directly to state ' + \"because updates to props won't be reflected in state. \" + 'In most cases, it is better to use props directly.', componentName);\n }\n }\n\n if (workInProgress.mode & StrictMode) {\n ReactStrictModeWarnings.recordUnsafeLifecycleWarnings(workInProgress, instance);\n\n ReactStrictModeWarnings.recordLegacyContextWarning(workInProgress, instance);\n }\n\n if (warnAboutDeprecatedLifecycles) {\n ReactStrictModeWarnings.recordDeprecationWarnings(workInProgress, instance);\n }\n }\n\n var updateQueue = workInProgress.updateQueue;\n if (updateQueue !== null) {\n processUpdateQueue(workInProgress, updateQueue, newProps, instance, renderExpirationTime);\n instance.state = workInProgress.memoizedState;\n }\n\n var getDerivedStateFromProps = ctor.getDerivedStateFromProps;\n if (typeof getDerivedStateFromProps === 'function') {\n applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, newProps);\n instance.state = workInProgress.memoizedState;\n }\n\n // In order to support react-lifecycles-compat polyfilled components,\n // Unsafe lifecycles should not be invoked for components using the new APIs.\n if (typeof ctor.getDerivedStateFromProps !== 'function' && typeof instance.getSnapshotBeforeUpdate !== 'function' && (typeof instance.UNSAFE_componentWillMount === 'function' || typeof instance.componentWillMount === 'function')) {\n callComponentWillMount(workInProgress, instance);\n // If we had additional state updates during this life-cycle, let's\n // process them now.\n updateQueue = workInProgress.updateQueue;\n if (updateQueue !== null) {\n processUpdateQueue(workInProgress, updateQueue, newProps, instance, renderExpirationTime);\n instance.state = workInProgress.memoizedState;\n }\n }\n\n if (typeof instance.componentDidMount === 'function') {\n workInProgress.effectTag |= Update;\n }\n}\n\nfunction resumeMountClassInstance(workInProgress, ctor, newProps, renderExpirationTime) {\n var instance = workInProgress.stateNode;\n\n var oldProps = workInProgress.memoizedProps;\n instance.props = oldProps;\n\n var oldContext = instance.context;\n var contextType = ctor.contextType;\n var nextContext = void 0;\n if (typeof contextType === 'object' && contextType !== null) {\n nextContext = readContext(contextType);\n } else {\n var nextLegacyUnmaskedContext = getUnmaskedContext(workInProgress, ctor, true);\n nextContext = getMaskedContext(workInProgress, nextLegacyUnmaskedContext);\n }\n\n var getDerivedStateFromProps = ctor.getDerivedStateFromProps;\n var hasNewLifecycles = typeof getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function';\n\n // Note: During these life-cycles, instance.props/instance.state are what\n // ever the previously attempted to render - not the \"current\". However,\n // during componentDidUpdate we pass the \"current\" props.\n\n // In order to support react-lifecycles-compat polyfilled components,\n // Unsafe lifecycles should not be invoked for components using the new APIs.\n if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillReceiveProps === 'function' || typeof instance.componentWillReceiveProps === 'function')) {\n if (oldProps !== newProps || oldContext !== nextContext) {\n callComponentWillReceiveProps(workInProgress, instance, newProps, nextContext);\n }\n }\n\n resetHasForceUpdateBeforeProcessing();\n\n var oldState = workInProgress.memoizedState;\n var newState = instance.state = oldState;\n var updateQueue = workInProgress.updateQueue;\n if (updateQueue !== null) {\n processUpdateQueue(workInProgress, updateQueue, newProps, instance, renderExpirationTime);\n newState = workInProgress.memoizedState;\n }\n if (oldProps === newProps && oldState === newState && !hasContextChanged() && !checkHasForceUpdateAfterProcessing()) {\n // If an update was already in progress, we should schedule an Update\n // effect even though we're bailing out, so that cWU/cDU are called.\n if (typeof instance.componentDidMount === 'function') {\n workInProgress.effectTag |= Update;\n }\n return false;\n }\n\n if (typeof getDerivedStateFromProps === 'function') {\n applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, newProps);\n newState = workInProgress.memoizedState;\n }\n\n var shouldUpdate = checkHasForceUpdateAfterProcessing() || checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext);\n\n if (shouldUpdate) {\n // In order to support react-lifecycles-compat polyfilled components,\n // Unsafe lifecycles should not be invoked for components using the new APIs.\n if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillMount === 'function' || typeof instance.componentWillMount === 'function')) {\n startPhaseTimer(workInProgress, 'componentWillMount');\n if (typeof instance.componentWillMount === 'function') {\n instance.componentWillMount();\n }\n if (typeof instance.UNSAFE_componentWillMount === 'function') {\n instance.UNSAFE_componentWillMount();\n }\n stopPhaseTimer();\n }\n if (typeof instance.componentDidMount === 'function') {\n workInProgress.effectTag |= Update;\n }\n } else {\n // If an update was already in progress, we should schedule an Update\n // effect even though we're bailing out, so that cWU/cDU are called.\n if (typeof instance.componentDidMount === 'function') {\n workInProgress.effectTag |= Update;\n }\n\n // If shouldComponentUpdate returned false, we should still update the\n // memoized state to indicate that this work can be reused.\n workInProgress.memoizedProps = newProps;\n workInProgress.memoizedState = newState;\n }\n\n // Update the existing instance's state, props, and context pointers even\n // if shouldComponentUpdate returns false.\n instance.props = newProps;\n instance.state = newState;\n instance.context = nextContext;\n\n return shouldUpdate;\n}\n\n// Invokes the update life-cycles and returns false if it shouldn't rerender.\nfunction updateClassInstance(current, workInProgress, ctor, newProps, renderExpirationTime) {\n var instance = workInProgress.stateNode;\n\n var oldProps = workInProgress.memoizedProps;\n instance.props = workInProgress.type === workInProgress.elementType ? oldProps : resolveDefaultProps(workInProgress.type, oldProps);\n\n var oldContext = instance.context;\n var contextType = ctor.contextType;\n var nextContext = void 0;\n if (typeof contextType === 'object' && contextType !== null) {\n nextContext = readContext(contextType);\n } else {\n var nextUnmaskedContext = getUnmaskedContext(workInProgress, ctor, true);\n nextContext = getMaskedContext(workInProgress, nextUnmaskedContext);\n }\n\n var getDerivedStateFromProps = ctor.getDerivedStateFromProps;\n var hasNewLifecycles = typeof getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function';\n\n // Note: During these life-cycles, instance.props/instance.state are what\n // ever the previously attempted to render - not the \"current\". However,\n // during componentDidUpdate we pass the \"current\" props.\n\n // In order to support react-lifecycles-compat polyfilled components,\n // Unsafe lifecycles should not be invoked for components using the new APIs.\n if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillReceiveProps === 'function' || typeof instance.componentWillReceiveProps === 'function')) {\n if (oldProps !== newProps || oldContext !== nextContext) {\n callComponentWillReceiveProps(workInProgress, instance, newProps, nextContext);\n }\n }\n\n resetHasForceUpdateBeforeProcessing();\n\n var oldState = workInProgress.memoizedState;\n var newState = instance.state = oldState;\n var updateQueue = workInProgress.updateQueue;\n if (updateQueue !== null) {\n processUpdateQueue(workInProgress, updateQueue, newProps, instance, renderExpirationTime);\n newState = workInProgress.memoizedState;\n }\n\n if (oldProps === newProps && oldState === newState && !hasContextChanged() && !checkHasForceUpdateAfterProcessing()) {\n // If an update was already in progress, we should schedule an Update\n // effect even though we're bailing out, so that cWU/cDU are called.\n if (typeof instance.componentDidUpdate === 'function') {\n if (oldProps !== current.memoizedProps || oldState !== current.memoizedState) {\n workInProgress.effectTag |= Update;\n }\n }\n if (typeof instance.getSnapshotBeforeUpdate === 'function') {\n if (oldProps !== current.memoizedProps || oldState !== current.memoizedState) {\n workInProgress.effectTag |= Snapshot;\n }\n }\n return false;\n }\n\n if (typeof getDerivedStateFromProps === 'function') {\n applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, newProps);\n newState = workInProgress.memoizedState;\n }\n\n var shouldUpdate = checkHasForceUpdateAfterProcessing() || checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext);\n\n if (shouldUpdate) {\n // In order to support react-lifecycles-compat polyfilled components,\n // Unsafe lifecycles should not be invoked for components using the new APIs.\n if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillUpdate === 'function' || typeof instance.componentWillUpdate === 'function')) {\n startPhaseTimer(workInProgress, 'componentWillUpdate');\n if (typeof instance.componentWillUpdate === 'function') {\n instance.componentWillUpdate(newProps, newState, nextContext);\n }\n if (typeof instance.UNSAFE_componentWillUpdate === 'function') {\n instance.UNSAFE_componentWillUpdate(newProps, newState, nextContext);\n }\n stopPhaseTimer();\n }\n if (typeof instance.componentDidUpdate === 'function') {\n workInProgress.effectTag |= Update;\n }\n if (typeof instance.getSnapshotBeforeUpdate === 'function') {\n workInProgress.effectTag |= Snapshot;\n }\n } else {\n // If an update was already in progress, we should schedule an Update\n // effect even though we're bailing out, so that cWU/cDU are called.\n if (typeof instance.componentDidUpdate === 'function') {\n if (oldProps !== current.memoizedProps || oldState !== current.memoizedState) {\n workInProgress.effectTag |= Update;\n }\n }\n if (typeof instance.getSnapshotBeforeUpdate === 'function') {\n if (oldProps !== current.memoizedProps || oldState !== current.memoizedState) {\n workInProgress.effectTag |= Snapshot;\n }\n }\n\n // If shouldComponentUpdate returned false, we should still update the\n // memoized props/state to indicate that this work can be reused.\n workInProgress.memoizedProps = newProps;\n workInProgress.memoizedState = newState;\n }\n\n // Update the existing instance's state, props, and context pointers even\n // if shouldComponentUpdate returns false.\n instance.props = newProps;\n instance.state = newState;\n instance.context = nextContext;\n\n return shouldUpdate;\n}\n\nvar didWarnAboutMaps = void 0;\nvar didWarnAboutGenerators = void 0;\nvar didWarnAboutStringRefInStrictMode = void 0;\nvar ownerHasKeyUseWarning = void 0;\nvar ownerHasFunctionTypeWarning = void 0;\nvar warnForMissingKey = function (child) {};\n\n{\n didWarnAboutMaps = false;\n didWarnAboutGenerators = false;\n didWarnAboutStringRefInStrictMode = {};\n\n /**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n ownerHasKeyUseWarning = {};\n ownerHasFunctionTypeWarning = {};\n\n warnForMissingKey = function (child) {\n if (child === null || typeof child !== 'object') {\n return;\n }\n if (!child._store || child._store.validated || child.key != null) {\n return;\n }\n !(typeof child._store === 'object') ? invariant(false, 'React Component in warnForMissingKey should have a _store. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n child._store.validated = true;\n\n var currentComponentErrorInfo = 'Each child in a list should have a unique ' + '\"key\" prop. See https://fb.me/react-warning-keys for ' + 'more information.' + getCurrentFiberStackInDev();\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true;\n\n warning$1(false, 'Each child in a list should have a unique ' + '\"key\" prop. See https://fb.me/react-warning-keys for ' + 'more information.');\n };\n}\n\nvar isArray = Array.isArray;\n\nfunction coerceRef(returnFiber, current$$1, element) {\n var mixedRef = element.ref;\n if (mixedRef !== null && typeof mixedRef !== 'function' && typeof mixedRef !== 'object') {\n {\n if (returnFiber.mode & StrictMode) {\n var componentName = getComponentName(returnFiber.type) || 'Component';\n if (!didWarnAboutStringRefInStrictMode[componentName]) {\n warningWithoutStack$1(false, 'A string ref, \"%s\", has been found within a strict mode tree. ' + 'String refs are a source of potential bugs and should be avoided. ' + 'We recommend using createRef() instead.' + '\\n%s' + '\\n\\nLearn more about using refs safely here:' + '\\nhttps://fb.me/react-strict-mode-string-ref', mixedRef, getStackByFiberInDevAndProd(returnFiber));\n didWarnAboutStringRefInStrictMode[componentName] = true;\n }\n }\n }\n\n if (element._owner) {\n var owner = element._owner;\n var inst = void 0;\n if (owner) {\n var ownerFiber = owner;\n !(ownerFiber.tag === ClassComponent) ? invariant(false, 'Function components cannot have refs. Did you mean to use React.forwardRef()?') : void 0;\n inst = ownerFiber.stateNode;\n }\n !inst ? invariant(false, 'Missing owner for string ref %s. This error is likely caused by a bug in React. Please file an issue.', mixedRef) : void 0;\n var stringRef = '' + mixedRef;\n // Check if previous string ref matches new string ref\n if (current$$1 !== null && current$$1.ref !== null && typeof current$$1.ref === 'function' && current$$1.ref._stringRef === stringRef) {\n return current$$1.ref;\n }\n var ref = function (value) {\n var refs = inst.refs;\n if (refs === emptyRefsObject) {\n // This is a lazy pooled frozen object, so we need to initialize.\n refs = inst.refs = {};\n }\n if (value === null) {\n delete refs[stringRef];\n } else {\n refs[stringRef] = value;\n }\n };\n ref._stringRef = stringRef;\n return ref;\n } else {\n !(typeof mixedRef === 'string') ? invariant(false, 'Expected ref to be a function, a string, an object returned by React.createRef(), or null.') : void 0;\n !element._owner ? invariant(false, 'Element ref was specified as a string (%s) but no owner was set. This could happen for one of the following reasons:\\n1. You may be adding a ref to a function component\\n2. You may be adding a ref to a component that was not created inside a component\\'s render method\\n3. You have multiple copies of React loaded\\nSee https://fb.me/react-refs-must-have-owner for more information.', mixedRef) : void 0;\n }\n }\n return mixedRef;\n}\n\nfunction throwOnInvalidObjectType(returnFiber, newChild) {\n if (returnFiber.type !== 'textarea') {\n var addendum = '';\n {\n addendum = ' If you meant to render a collection of children, use an array ' + 'instead.' + getCurrentFiberStackInDev();\n }\n invariant(false, 'Objects are not valid as a React child (found: %s).%s', Object.prototype.toString.call(newChild) === '[object Object]' ? 'object with keys {' + Object.keys(newChild).join(', ') + '}' : newChild, addendum);\n }\n}\n\nfunction warnOnFunctionType() {\n var currentComponentErrorInfo = 'Functions are not valid as a React child. This may happen if ' + 'you return a Component instead of <Component /> from render. ' + 'Or maybe you meant to call this function rather than return it.' + getCurrentFiberStackInDev();\n\n if (ownerHasFunctionTypeWarning[currentComponentErrorInfo]) {\n return;\n }\n ownerHasFunctionTypeWarning[currentComponentErrorInfo] = true;\n\n warning$1(false, 'Functions are not valid as a React child. This may happen if ' + 'you return a Component instead of <Component /> from render. ' + 'Or maybe you meant to call this function rather than return it.');\n}\n\n// This wrapper function exists because I expect to clone the code in each path\n// to be able to optimize each path individually by branching early. This needs\n// a compiler or we can do it manually. Helpers that don't need this branching\n// live outside of this function.\nfunction ChildReconciler(shouldTrackSideEffects) {\n function deleteChild(returnFiber, childToDelete) {\n if (!shouldTrackSideEffects) {\n // Noop.\n return;\n }\n // Deletions are added in reversed order so we add it to the front.\n // At this point, the return fiber's effect list is empty except for\n // deletions, so we can just append the deletion to the list. The remaining\n // effects aren't added until the complete phase. Once we implement\n // resuming, this may not be true.\n var last = returnFiber.lastEffect;\n if (last !== null) {\n last.nextEffect = childToDelete;\n returnFiber.lastEffect = childToDelete;\n } else {\n returnFiber.firstEffect = returnFiber.lastEffect = childToDelete;\n }\n childToDelete.nextEffect = null;\n childToDelete.effectTag = Deletion;\n }\n\n function deleteRemainingChildren(returnFiber, currentFirstChild) {\n if (!shouldTrackSideEffects) {\n // Noop.\n return null;\n }\n\n // TODO: For the shouldClone case, this could be micro-optimized a bit by\n // assuming that after the first child we've already added everything.\n var childToDelete = currentFirstChild;\n while (childToDelete !== null) {\n deleteChild(returnFiber, childToDelete);\n childToDelete = childToDelete.sibling;\n }\n return null;\n }\n\n function mapRemainingChildren(returnFiber, currentFirstChild) {\n // Add the remaining children to a temporary map so that we can find them by\n // keys quickly. Implicit (null) keys get added to this set with their index\n var existingChildren = new Map();\n\n var existingChild = currentFirstChild;\n while (existingChild !== null) {\n if (existingChild.key !== null) {\n existingChildren.set(existingChild.key, existingChild);\n } else {\n existingChildren.set(existingChild.index, existingChild);\n }\n existingChild = existingChild.sibling;\n }\n return existingChildren;\n }\n\n function useFiber(fiber, pendingProps, expirationTime) {\n // We currently set sibling to null and index to 0 here because it is easy\n // to forget to do before returning it. E.g. for the single child case.\n var clone = createWorkInProgress(fiber, pendingProps, expirationTime);\n clone.index = 0;\n clone.sibling = null;\n return clone;\n }\n\n function placeChild(newFiber, lastPlacedIndex, newIndex) {\n newFiber.index = newIndex;\n if (!shouldTrackSideEffects) {\n // Noop.\n return lastPlacedIndex;\n }\n var current$$1 = newFiber.alternate;\n if (current$$1 !== null) {\n var oldIndex = current$$1.index;\n if (oldIndex < lastPlacedIndex) {\n // This is a move.\n newFiber.effectTag = Placement;\n return lastPlacedIndex;\n } else {\n // This item can stay in place.\n return oldIndex;\n }\n } else {\n // This is an insertion.\n newFiber.effectTag = Placement;\n return lastPlacedIndex;\n }\n }\n\n function placeSingleChild(newFiber) {\n // This is simpler for the single child case. We only need to do a\n // placement for inserting new children.\n if (shouldTrackSideEffects && newFiber.alternate === null) {\n newFiber.effectTag = Placement;\n }\n return newFiber;\n }\n\n function updateTextNode(returnFiber, current$$1, textContent, expirationTime) {\n if (current$$1 === null || current$$1.tag !== HostText) {\n // Insert\n var created = createFiberFromText(textContent, returnFiber.mode, expirationTime);\n created.return = returnFiber;\n return created;\n } else {\n // Update\n var existing = useFiber(current$$1, textContent, expirationTime);\n existing.return = returnFiber;\n return existing;\n }\n }\n\n function updateElement(returnFiber, current$$1, element, expirationTime) {\n if (current$$1 !== null && current$$1.elementType === element.type) {\n // Move based on index\n var existing = useFiber(current$$1, element.props, expirationTime);\n existing.ref = coerceRef(returnFiber, current$$1, element);\n existing.return = returnFiber;\n {\n existing._debugSource = element._source;\n existing._debugOwner = element._owner;\n }\n return existing;\n } else {\n // Insert\n var created = createFiberFromElement(element, returnFiber.mode, expirationTime);\n created.ref = coerceRef(returnFiber, current$$1, element);\n created.return = returnFiber;\n return created;\n }\n }\n\n function updatePortal(returnFiber, current$$1, portal, expirationTime) {\n if (current$$1 === null || current$$1.tag !== HostPortal || current$$1.stateNode.containerInfo !== portal.containerInfo || current$$1.stateNode.implementation !== portal.implementation) {\n // Insert\n var created = createFiberFromPortal(portal, returnFiber.mode, expirationTime);\n created.return = returnFiber;\n return created;\n } else {\n // Update\n var existing = useFiber(current$$1, portal.children || [], expirationTime);\n existing.return = returnFiber;\n return existing;\n }\n }\n\n function updateFragment(returnFiber, current$$1, fragment, expirationTime, key) {\n if (current$$1 === null || current$$1.tag !== Fragment) {\n // Insert\n var created = createFiberFromFragment(fragment, returnFiber.mode, expirationTime, key);\n created.return = returnFiber;\n return created;\n } else {\n // Update\n var existing = useFiber(current$$1, fragment, expirationTime);\n existing.return = returnFiber;\n return existing;\n }\n }\n\n function createChild(returnFiber, newChild, expirationTime) {\n if (typeof newChild === 'string' || typeof newChild === 'number') {\n // Text nodes don't have keys. If the previous node is implicitly keyed\n // we can continue to replace it without aborting even if it is not a text\n // node.\n var created = createFiberFromText('' + newChild, returnFiber.mode, expirationTime);\n created.return = returnFiber;\n return created;\n }\n\n if (typeof newChild === 'object' && newChild !== null) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n {\n var _created = createFiberFromElement(newChild, returnFiber.mode, expirationTime);\n _created.ref = coerceRef(returnFiber, null, newChild);\n _created.return = returnFiber;\n return _created;\n }\n case REACT_PORTAL_TYPE:\n {\n var _created2 = createFiberFromPortal(newChild, returnFiber.mode, expirationTime);\n _created2.return = returnFiber;\n return _created2;\n }\n }\n\n if (isArray(newChild) || getIteratorFn(newChild)) {\n var _created3 = createFiberFromFragment(newChild, returnFiber.mode, expirationTime, null);\n _created3.return = returnFiber;\n return _created3;\n }\n\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n\n {\n if (typeof newChild === 'function') {\n warnOnFunctionType();\n }\n }\n\n return null;\n }\n\n function updateSlot(returnFiber, oldFiber, newChild, expirationTime) {\n // Update the fiber if the keys match, otherwise return null.\n\n var key = oldFiber !== null ? oldFiber.key : null;\n\n if (typeof newChild === 'string' || typeof newChild === 'number') {\n // Text nodes don't have keys. If the previous node is implicitly keyed\n // we can continue to replace it without aborting even if it is not a text\n // node.\n if (key !== null) {\n return null;\n }\n return updateTextNode(returnFiber, oldFiber, '' + newChild, expirationTime);\n }\n\n if (typeof newChild === 'object' && newChild !== null) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n {\n if (newChild.key === key) {\n if (newChild.type === REACT_FRAGMENT_TYPE) {\n return updateFragment(returnFiber, oldFiber, newChild.props.children, expirationTime, key);\n }\n return updateElement(returnFiber, oldFiber, newChild, expirationTime);\n } else {\n return null;\n }\n }\n case REACT_PORTAL_TYPE:\n {\n if (newChild.key === key) {\n return updatePortal(returnFiber, oldFiber, newChild, expirationTime);\n } else {\n return null;\n }\n }\n }\n\n if (isArray(newChild) || getIteratorFn(newChild)) {\n if (key !== null) {\n return null;\n }\n\n return updateFragment(returnFiber, oldFiber, newChild, expirationTime, null);\n }\n\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n\n {\n if (typeof newChild === 'function') {\n warnOnFunctionType();\n }\n }\n\n return null;\n }\n\n function updateFromMap(existingChildren, returnFiber, newIdx, newChild, expirationTime) {\n if (typeof newChild === 'string' || typeof newChild === 'number') {\n // Text nodes don't have keys, so we neither have to check the old nor\n // new node for the key. If both are text nodes, they match.\n var matchedFiber = existingChildren.get(newIdx) || null;\n return updateTextNode(returnFiber, matchedFiber, '' + newChild, expirationTime);\n }\n\n if (typeof newChild === 'object' && newChild !== null) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n {\n var _matchedFiber = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null;\n if (newChild.type === REACT_FRAGMENT_TYPE) {\n return updateFragment(returnFiber, _matchedFiber, newChild.props.children, expirationTime, newChild.key);\n }\n return updateElement(returnFiber, _matchedFiber, newChild, expirationTime);\n }\n case REACT_PORTAL_TYPE:\n {\n var _matchedFiber2 = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null;\n return updatePortal(returnFiber, _matchedFiber2, newChild, expirationTime);\n }\n }\n\n if (isArray(newChild) || getIteratorFn(newChild)) {\n var _matchedFiber3 = existingChildren.get(newIdx) || null;\n return updateFragment(returnFiber, _matchedFiber3, newChild, expirationTime, null);\n }\n\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n\n {\n if (typeof newChild === 'function') {\n warnOnFunctionType();\n }\n }\n\n return null;\n }\n\n /**\n * Warns if there is a duplicate or missing key\n */\n function warnOnInvalidKey(child, knownKeys) {\n {\n if (typeof child !== 'object' || child === null) {\n return knownKeys;\n }\n switch (child.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n warnForMissingKey(child);\n var key = child.key;\n if (typeof key !== 'string') {\n break;\n }\n if (knownKeys === null) {\n knownKeys = new Set();\n knownKeys.add(key);\n break;\n }\n if (!knownKeys.has(key)) {\n knownKeys.add(key);\n break;\n }\n warning$1(false, 'Encountered two children with the same key, `%s`. ' + 'Keys should be unique so that components maintain their identity ' + 'across updates. Non-unique keys may cause children to be ' + 'duplicated and/or omitted — the behavior is unsupported and ' + 'could change in a future version.', key);\n break;\n default:\n break;\n }\n }\n return knownKeys;\n }\n\n function reconcileChildrenArray(returnFiber, currentFirstChild, newChildren, expirationTime) {\n // This algorithm can't optimize by searching from both ends since we\n // don't have backpointers on fibers. I'm trying to see how far we can get\n // with that model. If it ends up not being worth the tradeoffs, we can\n // add it later.\n\n // Even with a two ended optimization, we'd want to optimize for the case\n // where there are few changes and brute force the comparison instead of\n // going for the Map. It'd like to explore hitting that path first in\n // forward-only mode and only go for the Map once we notice that we need\n // lots of look ahead. This doesn't handle reversal as well as two ended\n // search but that's unusual. Besides, for the two ended optimization to\n // work on Iterables, we'd need to copy the whole set.\n\n // In this first iteration, we'll just live with hitting the bad case\n // (adding everything to a Map) in for every insert/move.\n\n // If you change this code, also update reconcileChildrenIterator() which\n // uses the same algorithm.\n\n {\n // First, validate keys.\n var knownKeys = null;\n for (var i = 0; i < newChildren.length; i++) {\n var child = newChildren[i];\n knownKeys = warnOnInvalidKey(child, knownKeys);\n }\n }\n\n var resultingFirstChild = null;\n var previousNewFiber = null;\n\n var oldFiber = currentFirstChild;\n var lastPlacedIndex = 0;\n var newIdx = 0;\n var nextOldFiber = null;\n for (; oldFiber !== null && newIdx < newChildren.length; newIdx++) {\n if (oldFiber.index > newIdx) {\n nextOldFiber = oldFiber;\n oldFiber = null;\n } else {\n nextOldFiber = oldFiber.sibling;\n }\n var newFiber = updateSlot(returnFiber, oldFiber, newChildren[newIdx], expirationTime);\n if (newFiber === null) {\n // TODO: This breaks on empty slots like null children. That's\n // unfortunate because it triggers the slow path all the time. We need\n // a better way to communicate whether this was a miss or null,\n // boolean, undefined, etc.\n if (oldFiber === null) {\n oldFiber = nextOldFiber;\n }\n break;\n }\n if (shouldTrackSideEffects) {\n if (oldFiber && newFiber.alternate === null) {\n // We matched the slot, but we didn't reuse the existing fiber, so we\n // need to delete the existing child.\n deleteChild(returnFiber, oldFiber);\n }\n }\n lastPlacedIndex = placeChild(newFiber, lastPlacedIndex, newIdx);\n if (previousNewFiber === null) {\n // TODO: Move out of the loop. This only happens for the first run.\n resultingFirstChild = newFiber;\n } else {\n // TODO: Defer siblings if we're not at the right index for this slot.\n // I.e. if we had null values before, then we want to defer this\n // for each null value. However, we also don't want to call updateSlot\n // with the previous one.\n previousNewFiber.sibling = newFiber;\n }\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n\n if (newIdx === newChildren.length) {\n // We've reached the end of the new children. We can delete the rest.\n deleteRemainingChildren(returnFiber, oldFiber);\n return resultingFirstChild;\n }\n\n if (oldFiber === null) {\n // If we don't have any more existing children we can choose a fast path\n // since the rest will all be insertions.\n for (; newIdx < newChildren.length; newIdx++) {\n var _newFiber = createChild(returnFiber, newChildren[newIdx], expirationTime);\n if (!_newFiber) {\n continue;\n }\n lastPlacedIndex = placeChild(_newFiber, lastPlacedIndex, newIdx);\n if (previousNewFiber === null) {\n // TODO: Move out of the loop. This only happens for the first run.\n resultingFirstChild = _newFiber;\n } else {\n previousNewFiber.sibling = _newFiber;\n }\n previousNewFiber = _newFiber;\n }\n return resultingFirstChild;\n }\n\n // Add all children to a key map for quick lookups.\n var existingChildren = mapRemainingChildren(returnFiber, oldFiber);\n\n // Keep scanning and use the map to restore deleted items as moves.\n for (; newIdx < newChildren.length; newIdx++) {\n var _newFiber2 = updateFromMap(existingChildren, returnFiber, newIdx, newChildren[newIdx], expirationTime);\n if (_newFiber2) {\n if (shouldTrackSideEffects) {\n if (_newFiber2.alternate !== null) {\n // The new fiber is a work in progress, but if there exists a\n // current, that means that we reused the fiber. We need to delete\n // it from the child list so that we don't add it to the deletion\n // list.\n existingChildren.delete(_newFiber2.key === null ? newIdx : _newFiber2.key);\n }\n }\n lastPlacedIndex = placeChild(_newFiber2, lastPlacedIndex, newIdx);\n if (previousNewFiber === null) {\n resultingFirstChild = _newFiber2;\n } else {\n previousNewFiber.sibling = _newFiber2;\n }\n previousNewFiber = _newFiber2;\n }\n }\n\n if (shouldTrackSideEffects) {\n // Any existing children that weren't consumed above were deleted. We need\n // to add them to the deletion list.\n existingChildren.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n }\n\n return resultingFirstChild;\n }\n\n function reconcileChildrenIterator(returnFiber, currentFirstChild, newChildrenIterable, expirationTime) {\n // This is the same implementation as reconcileChildrenArray(),\n // but using the iterator instead.\n\n var iteratorFn = getIteratorFn(newChildrenIterable);\n !(typeof iteratorFn === 'function') ? invariant(false, 'An object is not an iterable. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n\n {\n // We don't support rendering Generators because it's a mutation.\n // See https://github.com/facebook/react/issues/12995\n if (typeof Symbol === 'function' &&\n // $FlowFixMe Flow doesn't know about toStringTag\n newChildrenIterable[Symbol.toStringTag] === 'Generator') {\n !didWarnAboutGenerators ? warning$1(false, 'Using Generators as children is unsupported and will likely yield ' + 'unexpected results because enumerating a generator mutates it. ' + 'You may convert it to an array with `Array.from()` or the ' + '`[...spread]` operator before rendering. Keep in mind ' + 'you might need to polyfill these features for older browsers.') : void 0;\n didWarnAboutGenerators = true;\n }\n\n // Warn about using Maps as children\n if (newChildrenIterable.entries === iteratorFn) {\n !didWarnAboutMaps ? warning$1(false, 'Using Maps as children is unsupported and will likely yield ' + 'unexpected results. Convert it to a sequence/iterable of keyed ' + 'ReactElements instead.') : void 0;\n didWarnAboutMaps = true;\n }\n\n // First, validate keys.\n // We'll get a different iterator later for the main pass.\n var _newChildren = iteratorFn.call(newChildrenIterable);\n if (_newChildren) {\n var knownKeys = null;\n var _step = _newChildren.next();\n for (; !_step.done; _step = _newChildren.next()) {\n var child = _step.value;\n knownKeys = warnOnInvalidKey(child, knownKeys);\n }\n }\n }\n\n var newChildren = iteratorFn.call(newChildrenIterable);\n !(newChildren != null) ? invariant(false, 'An iterable object provided no iterator.') : void 0;\n\n var resultingFirstChild = null;\n var previousNewFiber = null;\n\n var oldFiber = currentFirstChild;\n var lastPlacedIndex = 0;\n var newIdx = 0;\n var nextOldFiber = null;\n\n var step = newChildren.next();\n for (; oldFiber !== null && !step.done; newIdx++, step = newChildren.next()) {\n if (oldFiber.index > newIdx) {\n nextOldFiber = oldFiber;\n oldFiber = null;\n } else {\n nextOldFiber = oldFiber.sibling;\n }\n var newFiber = updateSlot(returnFiber, oldFiber, step.value, expirationTime);\n if (newFiber === null) {\n // TODO: This breaks on empty slots like null children. That's\n // unfortunate because it triggers the slow path all the time. We need\n // a better way to communicate whether this was a miss or null,\n // boolean, undefined, etc.\n if (!oldFiber) {\n oldFiber = nextOldFiber;\n }\n break;\n }\n if (shouldTrackSideEffects) {\n if (oldFiber && newFiber.alternate === null) {\n // We matched the slot, but we didn't reuse the existing fiber, so we\n // need to delete the existing child.\n deleteChild(returnFiber, oldFiber);\n }\n }\n lastPlacedIndex = placeChild(newFiber, lastPlacedIndex, newIdx);\n if (previousNewFiber === null) {\n // TODO: Move out of the loop. This only happens for the first run.\n resultingFirstChild = newFiber;\n } else {\n // TODO: Defer siblings if we're not at the right index for this slot.\n // I.e. if we had null values before, then we want to defer this\n // for each null value. However, we also don't want to call updateSlot\n // with the previous one.\n previousNewFiber.sibling = newFiber;\n }\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n\n if (step.done) {\n // We've reached the end of the new children. We can delete the rest.\n deleteRemainingChildren(returnFiber, oldFiber);\n return resultingFirstChild;\n }\n\n if (oldFiber === null) {\n // If we don't have any more existing children we can choose a fast path\n // since the rest will all be insertions.\n for (; !step.done; newIdx++, step = newChildren.next()) {\n var _newFiber3 = createChild(returnFiber, step.value, expirationTime);\n if (_newFiber3 === null) {\n continue;\n }\n lastPlacedIndex = placeChild(_newFiber3, lastPlacedIndex, newIdx);\n if (previousNewFiber === null) {\n // TODO: Move out of the loop. This only happens for the first run.\n resultingFirstChild = _newFiber3;\n } else {\n previousNewFiber.sibling = _newFiber3;\n }\n previousNewFiber = _newFiber3;\n }\n return resultingFirstChild;\n }\n\n // Add all children to a key map for quick lookups.\n var existingChildren = mapRemainingChildren(returnFiber, oldFiber);\n\n // Keep scanning and use the map to restore deleted items as moves.\n for (; !step.done; newIdx++, step = newChildren.next()) {\n var _newFiber4 = updateFromMap(existingChildren, returnFiber, newIdx, step.value, expirationTime);\n if (_newFiber4 !== null) {\n if (shouldTrackSideEffects) {\n if (_newFiber4.alternate !== null) {\n // The new fiber is a work in progress, but if there exists a\n // current, that means that we reused the fiber. We need to delete\n // it from the child list so that we don't add it to the deletion\n // list.\n existingChildren.delete(_newFiber4.key === null ? newIdx : _newFiber4.key);\n }\n }\n lastPlacedIndex = placeChild(_newFiber4, lastPlacedIndex, newIdx);\n if (previousNewFiber === null) {\n resultingFirstChild = _newFiber4;\n } else {\n previousNewFiber.sibling = _newFiber4;\n }\n previousNewFiber = _newFiber4;\n }\n }\n\n if (shouldTrackSideEffects) {\n // Any existing children that weren't consumed above were deleted. We need\n // to add them to the deletion list.\n existingChildren.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n }\n\n return resultingFirstChild;\n }\n\n function reconcileSingleTextNode(returnFiber, currentFirstChild, textContent, expirationTime) {\n // There's no need to check for keys on text nodes since we don't have a\n // way to define them.\n if (currentFirstChild !== null && currentFirstChild.tag === HostText) {\n // We already have an existing node so let's just update it and delete\n // the rest.\n deleteRemainingChildren(returnFiber, currentFirstChild.sibling);\n var existing = useFiber(currentFirstChild, textContent, expirationTime);\n existing.return = returnFiber;\n return existing;\n }\n // The existing first child is not a text node so we need to create one\n // and delete the existing ones.\n deleteRemainingChildren(returnFiber, currentFirstChild);\n var created = createFiberFromText(textContent, returnFiber.mode, expirationTime);\n created.return = returnFiber;\n return created;\n }\n\n function reconcileSingleElement(returnFiber, currentFirstChild, element, expirationTime) {\n var key = element.key;\n var child = currentFirstChild;\n while (child !== null) {\n // TODO: If key === null and child.key === null, then this only applies to\n // the first item in the list.\n if (child.key === key) {\n if (child.tag === Fragment ? element.type === REACT_FRAGMENT_TYPE : child.elementType === element.type) {\n deleteRemainingChildren(returnFiber, child.sibling);\n var existing = useFiber(child, element.type === REACT_FRAGMENT_TYPE ? element.props.children : element.props, expirationTime);\n existing.ref = coerceRef(returnFiber, child, element);\n existing.return = returnFiber;\n {\n existing._debugSource = element._source;\n existing._debugOwner = element._owner;\n }\n return existing;\n } else {\n deleteRemainingChildren(returnFiber, child);\n break;\n }\n } else {\n deleteChild(returnFiber, child);\n }\n child = child.sibling;\n }\n\n if (element.type === REACT_FRAGMENT_TYPE) {\n var created = createFiberFromFragment(element.props.children, returnFiber.mode, expirationTime, element.key);\n created.return = returnFiber;\n return created;\n } else {\n var _created4 = createFiberFromElement(element, returnFiber.mode, expirationTime);\n _created4.ref = coerceRef(returnFiber, currentFirstChild, element);\n _created4.return = returnFiber;\n return _created4;\n }\n }\n\n function reconcileSinglePortal(returnFiber, currentFirstChild, portal, expirationTime) {\n var key = portal.key;\n var child = currentFirstChild;\n while (child !== null) {\n // TODO: If key === null and child.key === null, then this only applies to\n // the first item in the list.\n if (child.key === key) {\n if (child.tag === HostPortal && child.stateNode.containerInfo === portal.containerInfo && child.stateNode.implementation === portal.implementation) {\n deleteRemainingChildren(returnFiber, child.sibling);\n var existing = useFiber(child, portal.children || [], expirationTime);\n existing.return = returnFiber;\n return existing;\n } else {\n deleteRemainingChildren(returnFiber, child);\n break;\n }\n } else {\n deleteChild(returnFiber, child);\n }\n child = child.sibling;\n }\n\n var created = createFiberFromPortal(portal, returnFiber.mode, expirationTime);\n created.return = returnFiber;\n return created;\n }\n\n // This API will tag the children with the side-effect of the reconciliation\n // itself. They will be added to the side-effect list as we pass through the\n // children and the parent.\n function reconcileChildFibers(returnFiber, currentFirstChild, newChild, expirationTime) {\n // This function is not recursive.\n // If the top level item is an array, we treat it as a set of children,\n // not as a fragment. Nested arrays on the other hand will be treated as\n // fragment nodes. Recursion happens at the normal flow.\n\n // Handle top level unkeyed fragments as if they were arrays.\n // This leads to an ambiguity between <>{[...]}</> and <>...</>.\n // We treat the ambiguous cases above the same.\n var isUnkeyedTopLevelFragment = typeof newChild === 'object' && newChild !== null && newChild.type === REACT_FRAGMENT_TYPE && newChild.key === null;\n if (isUnkeyedTopLevelFragment) {\n newChild = newChild.props.children;\n }\n\n // Handle object types\n var isObject = typeof newChild === 'object' && newChild !== null;\n\n if (isObject) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return placeSingleChild(reconcileSingleElement(returnFiber, currentFirstChild, newChild, expirationTime));\n case REACT_PORTAL_TYPE:\n return placeSingleChild(reconcileSinglePortal(returnFiber, currentFirstChild, newChild, expirationTime));\n }\n }\n\n if (typeof newChild === 'string' || typeof newChild === 'number') {\n return placeSingleChild(reconcileSingleTextNode(returnFiber, currentFirstChild, '' + newChild, expirationTime));\n }\n\n if (isArray(newChild)) {\n return reconcileChildrenArray(returnFiber, currentFirstChild, newChild, expirationTime);\n }\n\n if (getIteratorFn(newChild)) {\n return reconcileChildrenIterator(returnFiber, currentFirstChild, newChild, expirationTime);\n }\n\n if (isObject) {\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n\n {\n if (typeof newChild === 'function') {\n warnOnFunctionType();\n }\n }\n if (typeof newChild === 'undefined' && !isUnkeyedTopLevelFragment) {\n // If the new child is undefined, and the return fiber is a composite\n // component, throw an error. If Fiber return types are disabled,\n // we already threw above.\n switch (returnFiber.tag) {\n case ClassComponent:\n {\n {\n var instance = returnFiber.stateNode;\n if (instance.render._isMockFunction) {\n // We allow auto-mocks to proceed as if they're returning null.\n break;\n }\n }\n }\n // Intentionally fall through to the next case, which handles both\n // functions and classes\n // eslint-disable-next-lined no-fallthrough\n case FunctionComponent:\n {\n var Component = returnFiber.type;\n invariant(false, '%s(...): Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null.', Component.displayName || Component.name || 'Component');\n }\n }\n }\n\n // Remaining cases are all treated as empty.\n return deleteRemainingChildren(returnFiber, currentFirstChild);\n }\n\n return reconcileChildFibers;\n}\n\nvar reconcileChildFibers = ChildReconciler(true);\nvar mountChildFibers = ChildReconciler(false);\n\nfunction cloneChildFibers(current$$1, workInProgress) {\n !(current$$1 === null || workInProgress.child === current$$1.child) ? invariant(false, 'Resuming work not yet implemented.') : void 0;\n\n if (workInProgress.child === null) {\n return;\n }\n\n var currentChild = workInProgress.child;\n var newChild = createWorkInProgress(currentChild, currentChild.pendingProps, currentChild.expirationTime);\n workInProgress.child = newChild;\n\n newChild.return = workInProgress;\n while (currentChild.sibling !== null) {\n currentChild = currentChild.sibling;\n newChild = newChild.sibling = createWorkInProgress(currentChild, currentChild.pendingProps, currentChild.expirationTime);\n newChild.return = workInProgress;\n }\n newChild.sibling = null;\n}\n\nvar NO_CONTEXT = {};\n\nvar contextStackCursor$1 = createCursor(NO_CONTEXT);\nvar contextFiberStackCursor = createCursor(NO_CONTEXT);\nvar rootInstanceStackCursor = createCursor(NO_CONTEXT);\n\nfunction requiredContext(c) {\n !(c !== NO_CONTEXT) ? invariant(false, 'Expected host context to exist. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n return c;\n}\n\nfunction getRootHostContainer() {\n var rootInstance = requiredContext(rootInstanceStackCursor.current);\n return rootInstance;\n}\n\nfunction pushHostContainer(fiber, nextRootInstance) {\n // Push current root instance onto the stack;\n // This allows us to reset root when portals are popped.\n push(rootInstanceStackCursor, nextRootInstance, fiber);\n // Track the context and the Fiber that provided it.\n // This enables us to pop only Fibers that provide unique contexts.\n push(contextFiberStackCursor, fiber, fiber);\n\n // Finally, we need to push the host context to the stack.\n // However, we can't just call getRootHostContext() and push it because\n // we'd have a different number of entries on the stack depending on\n // whether getRootHostContext() throws somewhere in renderer code or not.\n // So we push an empty value first. This lets us safely unwind on errors.\n push(contextStackCursor$1, NO_CONTEXT, fiber);\n var nextRootContext = getRootHostContext(nextRootInstance);\n // Now that we know this function doesn't throw, replace it.\n pop(contextStackCursor$1, fiber);\n push(contextStackCursor$1, nextRootContext, fiber);\n}\n\nfunction popHostContainer(fiber) {\n pop(contextStackCursor$1, fiber);\n pop(contextFiberStackCursor, fiber);\n pop(rootInstanceStackCursor, fiber);\n}\n\nfunction getHostContext() {\n var context = requiredContext(contextStackCursor$1.current);\n return context;\n}\n\nfunction pushHostContext(fiber) {\n var rootInstance = requiredContext(rootInstanceStackCursor.current);\n var context = requiredContext(contextStackCursor$1.current);\n var nextContext = getChildHostContext(context, fiber.type, rootInstance);\n\n // Don't push this Fiber's context unless it's unique.\n if (context === nextContext) {\n return;\n }\n\n // Track the context and the Fiber that provided it.\n // This enables us to pop only Fibers that provide unique contexts.\n push(contextFiberStackCursor, fiber, fiber);\n push(contextStackCursor$1, nextContext, fiber);\n}\n\nfunction popHostContext(fiber) {\n // Do not pop unless this Fiber provided the current context.\n // pushHostContext() only pushes Fibers that provide unique contexts.\n if (contextFiberStackCursor.current !== fiber) {\n return;\n }\n\n pop(contextStackCursor$1, fiber);\n pop(contextFiberStackCursor, fiber);\n}\n\nvar NoEffect$1 = /* */0;\nvar UnmountSnapshot = /* */2;\nvar UnmountMutation = /* */4;\nvar MountMutation = /* */8;\nvar UnmountLayout = /* */16;\nvar MountLayout = /* */32;\nvar MountPassive = /* */64;\nvar UnmountPassive = /* */128;\n\nvar ReactCurrentDispatcher$1 = ReactSharedInternals.ReactCurrentDispatcher;\n\n\nvar didWarnAboutMismatchedHooksForComponent = void 0;\n{\n didWarnAboutMismatchedHooksForComponent = new Set();\n}\n\n// These are set right before calling the component.\nvar renderExpirationTime = NoWork;\n// The work-in-progress fiber. I've named it differently to distinguish it from\n// the work-in-progress hook.\nvar currentlyRenderingFiber$1 = null;\n\n// Hooks are stored as a linked list on the fiber's memoizedState field. The\n// current hook list is the list that belongs to the current fiber. The\n// work-in-progress hook list is a new list that will be added to the\n// work-in-progress fiber.\nvar currentHook = null;\nvar nextCurrentHook = null;\nvar firstWorkInProgressHook = null;\nvar workInProgressHook = null;\nvar nextWorkInProgressHook = null;\n\nvar remainingExpirationTime = NoWork;\nvar componentUpdateQueue = null;\nvar sideEffectTag = 0;\n\n// Updates scheduled during render will trigger an immediate re-render at the\n// end of the current pass. We can't store these updates on the normal queue,\n// because if the work is aborted, they should be discarded. Because this is\n// a relatively rare case, we also don't want to add an additional field to\n// either the hook or queue object types. So we store them in a lazily create\n// map of queue -> render-phase updates, which are discarded once the component\n// completes without re-rendering.\n\n// Whether an update was scheduled during the currently executing render pass.\nvar didScheduleRenderPhaseUpdate = false;\n// Lazily created map of render-phase updates\nvar renderPhaseUpdates = null;\n// Counter to prevent infinite loops.\nvar numberOfReRenders = 0;\nvar RE_RENDER_LIMIT = 25;\n\n// In DEV, this is the name of the currently executing primitive hook\nvar currentHookNameInDev = null;\n\n// In DEV, this list ensures that hooks are called in the same order between renders.\n// The list stores the order of hooks used during the initial render (mount).\n// Subsequent renders (updates) reference this list.\nvar hookTypesDev = null;\nvar hookTypesUpdateIndexDev = -1;\n\nfunction mountHookTypesDev() {\n {\n var hookName = currentHookNameInDev;\n\n if (hookTypesDev === null) {\n hookTypesDev = [hookName];\n } else {\n hookTypesDev.push(hookName);\n }\n }\n}\n\nfunction updateHookTypesDev() {\n {\n var hookName = currentHookNameInDev;\n\n if (hookTypesDev !== null) {\n hookTypesUpdateIndexDev++;\n if (hookTypesDev[hookTypesUpdateIndexDev] !== hookName) {\n warnOnHookMismatchInDev(hookName);\n }\n }\n }\n}\n\nfunction warnOnHookMismatchInDev(currentHookName) {\n {\n var componentName = getComponentName(currentlyRenderingFiber$1.type);\n if (!didWarnAboutMismatchedHooksForComponent.has(componentName)) {\n didWarnAboutMismatchedHooksForComponent.add(componentName);\n\n if (hookTypesDev !== null) {\n var table = '';\n\n var secondColumnStart = 30;\n\n for (var i = 0; i <= hookTypesUpdateIndexDev; i++) {\n var oldHookName = hookTypesDev[i];\n var newHookName = i === hookTypesUpdateIndexDev ? currentHookName : oldHookName;\n\n var row = i + 1 + '. ' + oldHookName;\n\n // Extra space so second column lines up\n // lol @ IE not supporting String#repeat\n while (row.length < secondColumnStart) {\n row += ' ';\n }\n\n row += newHookName + '\\n';\n\n table += row;\n }\n\n warning$1(false, 'React has detected a change in the order of Hooks called by %s. ' + 'This will lead to bugs and errors if not fixed. ' + 'For more information, read the Rules of Hooks: https://fb.me/rules-of-hooks\\n\\n' + ' Previous render Next render\\n' + ' ------------------------------------------------------\\n' + '%s' + ' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n', componentName, table);\n }\n }\n }\n}\n\nfunction throwInvalidHookError() {\n invariant(false, 'Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://fb.me/react-invalid-hook-call for tips about how to debug and fix this problem.');\n}\n\nfunction areHookInputsEqual(nextDeps, prevDeps) {\n if (prevDeps === null) {\n {\n warning$1(false, '%s received a final argument during this render, but not during ' + 'the previous render. Even though the final argument is optional, ' + 'its type cannot change between renders.', currentHookNameInDev);\n }\n return false;\n }\n\n {\n // Don't bother comparing lengths in prod because these arrays should be\n // passed inline.\n if (nextDeps.length !== prevDeps.length) {\n warning$1(false, 'The final argument passed to %s changed size between renders. The ' + 'order and size of this array must remain constant.\\n\\n' + 'Previous: %s\\n' + 'Incoming: %s', currentHookNameInDev, '[' + nextDeps.join(', ') + ']', '[' + prevDeps.join(', ') + ']');\n }\n }\n for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++) {\n if (is(nextDeps[i], prevDeps[i])) {\n continue;\n }\n return false;\n }\n return true;\n}\n\nfunction renderWithHooks(current, workInProgress, Component, props, refOrContext, nextRenderExpirationTime) {\n renderExpirationTime = nextRenderExpirationTime;\n currentlyRenderingFiber$1 = workInProgress;\n nextCurrentHook = current !== null ? current.memoizedState : null;\n\n {\n hookTypesDev = current !== null ? current._debugHookTypes : null;\n hookTypesUpdateIndexDev = -1;\n }\n\n // The following should have already been reset\n // currentHook = null;\n // workInProgressHook = null;\n\n // remainingExpirationTime = NoWork;\n // componentUpdateQueue = null;\n\n // didScheduleRenderPhaseUpdate = false;\n // renderPhaseUpdates = null;\n // numberOfReRenders = 0;\n // sideEffectTag = 0;\n\n // TODO Warn if no hooks are used at all during mount, then some are used during update.\n // Currently we will identify the update render as a mount because nextCurrentHook === null.\n // This is tricky because it's valid for certain types of components (e.g. React.lazy)\n\n // Using nextCurrentHook to differentiate between mount/update only works if at least one stateful hook is used.\n // Non-stateful hooks (e.g. context) don't get added to memoizedState,\n // so nextCurrentHook would be null during updates and mounts.\n {\n if (nextCurrentHook !== null) {\n ReactCurrentDispatcher$1.current = HooksDispatcherOnUpdateInDEV;\n } else if (hookTypesDev !== null) {\n // This dispatcher handles an edge case where a component is updating,\n // but no stateful hooks have been used.\n // We want to match the production code behavior (which will use HooksDispatcherOnMount),\n // but with the extra DEV validation to ensure hooks ordering hasn't changed.\n // This dispatcher does that.\n ReactCurrentDispatcher$1.current = HooksDispatcherOnMountWithHookTypesInDEV;\n } else {\n ReactCurrentDispatcher$1.current = HooksDispatcherOnMountInDEV;\n }\n }\n\n var children = Component(props, refOrContext);\n\n if (didScheduleRenderPhaseUpdate) {\n do {\n didScheduleRenderPhaseUpdate = false;\n numberOfReRenders += 1;\n\n // Start over from the beginning of the list\n nextCurrentHook = current !== null ? current.memoizedState : null;\n nextWorkInProgressHook = firstWorkInProgressHook;\n\n currentHook = null;\n workInProgressHook = null;\n componentUpdateQueue = null;\n\n {\n // Also validate hook order for cascading updates.\n hookTypesUpdateIndexDev = -1;\n }\n\n ReactCurrentDispatcher$1.current = HooksDispatcherOnUpdateInDEV;\n\n children = Component(props, refOrContext);\n } while (didScheduleRenderPhaseUpdate);\n\n renderPhaseUpdates = null;\n numberOfReRenders = 0;\n }\n\n // We can assume the previous dispatcher is always this one, since we set it\n // at the beginning of the render phase and there's no re-entrancy.\n ReactCurrentDispatcher$1.current = ContextOnlyDispatcher;\n\n var renderedWork = currentlyRenderingFiber$1;\n\n renderedWork.memoizedState = firstWorkInProgressHook;\n renderedWork.expirationTime = remainingExpirationTime;\n renderedWork.updateQueue = componentUpdateQueue;\n renderedWork.effectTag |= sideEffectTag;\n\n {\n renderedWork._debugHookTypes = hookTypesDev;\n }\n\n // This check uses currentHook so that it works the same in DEV and prod bundles.\n // hookTypesDev could catch more cases (e.g. context) but only in DEV bundles.\n var didRenderTooFewHooks = currentHook !== null && currentHook.next !== null;\n\n renderExpirationTime = NoWork;\n currentlyRenderingFiber$1 = null;\n\n currentHook = null;\n nextCurrentHook = null;\n firstWorkInProgressHook = null;\n workInProgressHook = null;\n nextWorkInProgressHook = null;\n\n {\n currentHookNameInDev = null;\n hookTypesDev = null;\n hookTypesUpdateIndexDev = -1;\n }\n\n remainingExpirationTime = NoWork;\n componentUpdateQueue = null;\n sideEffectTag = 0;\n\n // These were reset above\n // didScheduleRenderPhaseUpdate = false;\n // renderPhaseUpdates = null;\n // numberOfReRenders = 0;\n\n !!didRenderTooFewHooks ? invariant(false, 'Rendered fewer hooks than expected. This may be caused by an accidental early return statement.') : void 0;\n\n return children;\n}\n\nfunction bailoutHooks(current, workInProgress, expirationTime) {\n workInProgress.updateQueue = current.updateQueue;\n workInProgress.effectTag &= ~(Passive | Update);\n if (current.expirationTime <= expirationTime) {\n current.expirationTime = NoWork;\n }\n}\n\nfunction resetHooks() {\n // We can assume the previous dispatcher is always this one, since we set it\n // at the beginning of the render phase and there's no re-entrancy.\n ReactCurrentDispatcher$1.current = ContextOnlyDispatcher;\n\n // This is used to reset the state of this module when a component throws.\n // It's also called inside mountIndeterminateComponent if we determine the\n // component is a module-style component.\n renderExpirationTime = NoWork;\n currentlyRenderingFiber$1 = null;\n\n currentHook = null;\n nextCurrentHook = null;\n firstWorkInProgressHook = null;\n workInProgressHook = null;\n nextWorkInProgressHook = null;\n\n {\n hookTypesDev = null;\n hookTypesUpdateIndexDev = -1;\n\n currentHookNameInDev = null;\n }\n\n remainingExpirationTime = NoWork;\n componentUpdateQueue = null;\n sideEffectTag = 0;\n\n didScheduleRenderPhaseUpdate = false;\n renderPhaseUpdates = null;\n numberOfReRenders = 0;\n}\n\nfunction mountWorkInProgressHook() {\n var hook = {\n memoizedState: null,\n\n baseState: null,\n queue: null,\n baseUpdate: null,\n\n next: null\n };\n\n if (workInProgressHook === null) {\n // This is the first hook in the list\n firstWorkInProgressHook = workInProgressHook = hook;\n } else {\n // Append to the end of the list\n workInProgressHook = workInProgressHook.next = hook;\n }\n return workInProgressHook;\n}\n\nfunction updateWorkInProgressHook() {\n // This function is used both for updates and for re-renders triggered by a\n // render phase update. It assumes there is either a current hook we can\n // clone, or a work-in-progress hook from a previous render pass that we can\n // use as a base. When we reach the end of the base list, we must switch to\n // the dispatcher used for mounts.\n if (nextWorkInProgressHook !== null) {\n // There's already a work-in-progress. Reuse it.\n workInProgressHook = nextWorkInProgressHook;\n nextWorkInProgressHook = workInProgressHook.next;\n\n currentHook = nextCurrentHook;\n nextCurrentHook = currentHook !== null ? currentHook.next : null;\n } else {\n // Clone from the current hook.\n !(nextCurrentHook !== null) ? invariant(false, 'Rendered more hooks than during the previous render.') : void 0;\n currentHook = nextCurrentHook;\n\n var newHook = {\n memoizedState: currentHook.memoizedState,\n\n baseState: currentHook.baseState,\n queue: currentHook.queue,\n baseUpdate: currentHook.baseUpdate,\n\n next: null\n };\n\n if (workInProgressHook === null) {\n // This is the first hook in the list.\n workInProgressHook = firstWorkInProgressHook = newHook;\n } else {\n // Append to the end of the list.\n workInProgressHook = workInProgressHook.next = newHook;\n }\n nextCurrentHook = currentHook.next;\n }\n return workInProgressHook;\n}\n\nfunction createFunctionComponentUpdateQueue() {\n return {\n lastEffect: null\n };\n}\n\nfunction basicStateReducer(state, action) {\n return typeof action === 'function' ? action(state) : action;\n}\n\nfunction mountReducer(reducer, initialArg, init) {\n var hook = mountWorkInProgressHook();\n var initialState = void 0;\n if (init !== undefined) {\n initialState = init(initialArg);\n } else {\n initialState = initialArg;\n }\n hook.memoizedState = hook.baseState = initialState;\n var queue = hook.queue = {\n last: null,\n dispatch: null,\n lastRenderedReducer: reducer,\n lastRenderedState: initialState\n };\n var dispatch = queue.dispatch = dispatchAction.bind(null,\n // Flow doesn't know this is non-null, but we do.\n currentlyRenderingFiber$1, queue);\n return [hook.memoizedState, dispatch];\n}\n\nfunction updateReducer(reducer, initialArg, init) {\n var hook = updateWorkInProgressHook();\n var queue = hook.queue;\n !(queue !== null) ? invariant(false, 'Should have a queue. This is likely a bug in React. Please file an issue.') : void 0;\n\n queue.lastRenderedReducer = reducer;\n\n if (numberOfReRenders > 0) {\n // This is a re-render. Apply the new render phase updates to the previous\n var _dispatch = queue.dispatch;\n if (renderPhaseUpdates !== null) {\n // Render phase updates are stored in a map of queue -> linked list\n var firstRenderPhaseUpdate = renderPhaseUpdates.get(queue);\n if (firstRenderPhaseUpdate !== undefined) {\n renderPhaseUpdates.delete(queue);\n var newState = hook.memoizedState;\n var update = firstRenderPhaseUpdate;\n do {\n // Process this render phase update. We don't have to check the\n // priority because it will always be the same as the current\n // render's.\n var _action = update.action;\n newState = reducer(newState, _action);\n update = update.next;\n } while (update !== null);\n\n // Mark that the fiber performed work, but only if the new state is\n // different from the current state.\n if (!is(newState, hook.memoizedState)) {\n markWorkInProgressReceivedUpdate();\n }\n\n hook.memoizedState = newState;\n // Don't persist the state accumlated from the render phase updates to\n // the base state unless the queue is empty.\n // TODO: Not sure if this is the desired semantics, but it's what we\n // do for gDSFP. I can't remember why.\n if (hook.baseUpdate === queue.last) {\n hook.baseState = newState;\n }\n\n queue.lastRenderedState = newState;\n\n return [newState, _dispatch];\n }\n }\n return [hook.memoizedState, _dispatch];\n }\n\n // The last update in the entire queue\n var last = queue.last;\n // The last update that is part of the base state.\n var baseUpdate = hook.baseUpdate;\n var baseState = hook.baseState;\n\n // Find the first unprocessed update.\n var first = void 0;\n if (baseUpdate !== null) {\n if (last !== null) {\n // For the first update, the queue is a circular linked list where\n // `queue.last.next = queue.first`. Once the first update commits, and\n // the `baseUpdate` is no longer empty, we can unravel the list.\n last.next = null;\n }\n first = baseUpdate.next;\n } else {\n first = last !== null ? last.next : null;\n }\n if (first !== null) {\n var _newState = baseState;\n var newBaseState = null;\n var newBaseUpdate = null;\n var prevUpdate = baseUpdate;\n var _update = first;\n var didSkip = false;\n do {\n var updateExpirationTime = _update.expirationTime;\n if (updateExpirationTime < renderExpirationTime) {\n // Priority is insufficient. Skip this update. If this is the first\n // skipped update, the previous update/state is the new base\n // update/state.\n if (!didSkip) {\n didSkip = true;\n newBaseUpdate = prevUpdate;\n newBaseState = _newState;\n }\n // Update the remaining priority in the queue.\n if (updateExpirationTime > remainingExpirationTime) {\n remainingExpirationTime = updateExpirationTime;\n }\n } else {\n // Process this update.\n if (_update.eagerReducer === reducer) {\n // If this update was processed eagerly, and its reducer matches the\n // current reducer, we can use the eagerly computed state.\n _newState = _update.eagerState;\n } else {\n var _action2 = _update.action;\n _newState = reducer(_newState, _action2);\n }\n }\n prevUpdate = _update;\n _update = _update.next;\n } while (_update !== null && _update !== first);\n\n if (!didSkip) {\n newBaseUpdate = prevUpdate;\n newBaseState = _newState;\n }\n\n // Mark that the fiber performed work, but only if the new state is\n // different from the current state.\n if (!is(_newState, hook.memoizedState)) {\n markWorkInProgressReceivedUpdate();\n }\n\n hook.memoizedState = _newState;\n hook.baseUpdate = newBaseUpdate;\n hook.baseState = newBaseState;\n\n queue.lastRenderedState = _newState;\n }\n\n var dispatch = queue.dispatch;\n return [hook.memoizedState, dispatch];\n}\n\nfunction mountState(initialState) {\n var hook = mountWorkInProgressHook();\n if (typeof initialState === 'function') {\n initialState = initialState();\n }\n hook.memoizedState = hook.baseState = initialState;\n var queue = hook.queue = {\n last: null,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: initialState\n };\n var dispatch = queue.dispatch = dispatchAction.bind(null,\n // Flow doesn't know this is non-null, but we do.\n currentlyRenderingFiber$1, queue);\n return [hook.memoizedState, dispatch];\n}\n\nfunction updateState(initialState) {\n return updateReducer(basicStateReducer, initialState);\n}\n\nfunction pushEffect(tag, create, destroy, deps) {\n var effect = {\n tag: tag,\n create: create,\n destroy: destroy,\n deps: deps,\n // Circular\n next: null\n };\n if (componentUpdateQueue === null) {\n componentUpdateQueue = createFunctionComponentUpdateQueue();\n componentUpdateQueue.lastEffect = effect.next = effect;\n } else {\n var _lastEffect = componentUpdateQueue.lastEffect;\n if (_lastEffect === null) {\n componentUpdateQueue.lastEffect = effect.next = effect;\n } else {\n var firstEffect = _lastEffect.next;\n _lastEffect.next = effect;\n effect.next = firstEffect;\n componentUpdateQueue.lastEffect = effect;\n }\n }\n return effect;\n}\n\nfunction mountRef(initialValue) {\n var hook = mountWorkInProgressHook();\n var ref = { current: initialValue };\n {\n Object.seal(ref);\n }\n hook.memoizedState = ref;\n return ref;\n}\n\nfunction updateRef(initialValue) {\n var hook = updateWorkInProgressHook();\n return hook.memoizedState;\n}\n\nfunction mountEffectImpl(fiberEffectTag, hookEffectTag, create, deps) {\n var hook = mountWorkInProgressHook();\n var nextDeps = deps === undefined ? null : deps;\n sideEffectTag |= fiberEffectTag;\n hook.memoizedState = pushEffect(hookEffectTag, create, undefined, nextDeps);\n}\n\nfunction updateEffectImpl(fiberEffectTag, hookEffectTag, create, deps) {\n var hook = updateWorkInProgressHook();\n var nextDeps = deps === undefined ? null : deps;\n var destroy = undefined;\n\n if (currentHook !== null) {\n var prevEffect = currentHook.memoizedState;\n destroy = prevEffect.destroy;\n if (nextDeps !== null) {\n var prevDeps = prevEffect.deps;\n if (areHookInputsEqual(nextDeps, prevDeps)) {\n pushEffect(NoEffect$1, create, destroy, nextDeps);\n return;\n }\n }\n }\n\n sideEffectTag |= fiberEffectTag;\n hook.memoizedState = pushEffect(hookEffectTag, create, destroy, nextDeps);\n}\n\nfunction mountEffect(create, deps) {\n return mountEffectImpl(Update | Passive, UnmountPassive | MountPassive, create, deps);\n}\n\nfunction updateEffect(create, deps) {\n return updateEffectImpl(Update | Passive, UnmountPassive | MountPassive, create, deps);\n}\n\nfunction mountLayoutEffect(create, deps) {\n return mountEffectImpl(Update, UnmountMutation | MountLayout, create, deps);\n}\n\nfunction updateLayoutEffect(create, deps) {\n return updateEffectImpl(Update, UnmountMutation | MountLayout, create, deps);\n}\n\nfunction imperativeHandleEffect(create, ref) {\n if (typeof ref === 'function') {\n var refCallback = ref;\n var _inst = create();\n refCallback(_inst);\n return function () {\n refCallback(null);\n };\n } else if (ref !== null && ref !== undefined) {\n var refObject = ref;\n {\n !refObject.hasOwnProperty('current') ? warning$1(false, 'Expected useImperativeHandle() first argument to either be a ' + 'ref callback or React.createRef() object. Instead received: %s.', 'an object with keys {' + Object.keys(refObject).join(', ') + '}') : void 0;\n }\n var _inst2 = create();\n refObject.current = _inst2;\n return function () {\n refObject.current = null;\n };\n }\n}\n\nfunction mountImperativeHandle(ref, create, deps) {\n {\n !(typeof create === 'function') ? warning$1(false, 'Expected useImperativeHandle() second argument to be a function ' + 'that creates a handle. Instead received: %s.', create !== null ? typeof create : 'null') : void 0;\n }\n\n // TODO: If deps are provided, should we skip comparing the ref itself?\n var effectDeps = deps !== null && deps !== undefined ? deps.concat([ref]) : null;\n\n return mountEffectImpl(Update, UnmountMutation | MountLayout, imperativeHandleEffect.bind(null, create, ref), effectDeps);\n}\n\nfunction updateImperativeHandle(ref, create, deps) {\n {\n !(typeof create === 'function') ? warning$1(false, 'Expected useImperativeHandle() second argument to be a function ' + 'that creates a handle. Instead received: %s.', create !== null ? typeof create : 'null') : void 0;\n }\n\n // TODO: If deps are provided, should we skip comparing the ref itself?\n var effectDeps = deps !== null && deps !== undefined ? deps.concat([ref]) : null;\n\n return updateEffectImpl(Update, UnmountMutation | MountLayout, imperativeHandleEffect.bind(null, create, ref), effectDeps);\n}\n\nfunction mountDebugValue(value, formatterFn) {\n // This hook is normally a no-op.\n // The react-debug-hooks package injects its own implementation\n // so that e.g. DevTools can display custom hook values.\n}\n\nvar updateDebugValue = mountDebugValue;\n\nfunction mountCallback(callback, deps) {\n var hook = mountWorkInProgressHook();\n var nextDeps = deps === undefined ? null : deps;\n hook.memoizedState = [callback, nextDeps];\n return callback;\n}\n\nfunction updateCallback(callback, deps) {\n var hook = updateWorkInProgressHook();\n var nextDeps = deps === undefined ? null : deps;\n var prevState = hook.memoizedState;\n if (prevState !== null) {\n if (nextDeps !== null) {\n var prevDeps = prevState[1];\n if (areHookInputsEqual(nextDeps, prevDeps)) {\n return prevState[0];\n }\n }\n }\n hook.memoizedState = [callback, nextDeps];\n return callback;\n}\n\nfunction mountMemo(nextCreate, deps) {\n var hook = mountWorkInProgressHook();\n var nextDeps = deps === undefined ? null : deps;\n var nextValue = nextCreate();\n hook.memoizedState = [nextValue, nextDeps];\n return nextValue;\n}\n\nfunction updateMemo(nextCreate, deps) {\n var hook = updateWorkInProgressHook();\n var nextDeps = deps === undefined ? null : deps;\n var prevState = hook.memoizedState;\n if (prevState !== null) {\n // Assume these are defined. If they're not, areHookInputsEqual will warn.\n if (nextDeps !== null) {\n var prevDeps = prevState[1];\n if (areHookInputsEqual(nextDeps, prevDeps)) {\n return prevState[0];\n }\n }\n }\n var nextValue = nextCreate();\n hook.memoizedState = [nextValue, nextDeps];\n return nextValue;\n}\n\n// in a test-like environment, we want to warn if dispatchAction()\n// is called outside of a batchedUpdates/TestUtils.act(...) call.\nvar shouldWarnForUnbatchedSetState = false;\n\n{\n // jest isn't a 'global', it's just exposed to tests via a wrapped function\n // further, this isn't a test file, so flow doesn't recognize the symbol. So...\n // $FlowExpectedError - because requirements don't give a damn about your type sigs.\n if ('undefined' !== typeof jest) {\n shouldWarnForUnbatchedSetState = true;\n }\n}\n\nfunction dispatchAction(fiber, queue, action) {\n !(numberOfReRenders < RE_RENDER_LIMIT) ? invariant(false, 'Too many re-renders. React limits the number of renders to prevent an infinite loop.') : void 0;\n\n {\n !(arguments.length <= 3) ? warning$1(false, \"State updates from the useState() and useReducer() Hooks don't support the \" + 'second callback argument. To execute a side effect after ' + 'rendering, declare it in the component body with useEffect().') : void 0;\n }\n\n var alternate = fiber.alternate;\n if (fiber === currentlyRenderingFiber$1 || alternate !== null && alternate === currentlyRenderingFiber$1) {\n // This is a render phase update. Stash it in a lazily-created map of\n // queue -> linked list of updates. After this render pass, we'll restart\n // and apply the stashed updates on top of the work-in-progress hook.\n didScheduleRenderPhaseUpdate = true;\n var update = {\n expirationTime: renderExpirationTime,\n action: action,\n eagerReducer: null,\n eagerState: null,\n next: null\n };\n if (renderPhaseUpdates === null) {\n renderPhaseUpdates = new Map();\n }\n var firstRenderPhaseUpdate = renderPhaseUpdates.get(queue);\n if (firstRenderPhaseUpdate === undefined) {\n renderPhaseUpdates.set(queue, update);\n } else {\n // Append the update to the end of the list.\n var lastRenderPhaseUpdate = firstRenderPhaseUpdate;\n while (lastRenderPhaseUpdate.next !== null) {\n lastRenderPhaseUpdate = lastRenderPhaseUpdate.next;\n }\n lastRenderPhaseUpdate.next = update;\n }\n } else {\n flushPassiveEffects();\n\n var currentTime = requestCurrentTime();\n var _expirationTime = computeExpirationForFiber(currentTime, fiber);\n\n var _update2 = {\n expirationTime: _expirationTime,\n action: action,\n eagerReducer: null,\n eagerState: null,\n next: null\n };\n\n // Append the update to the end of the list.\n var _last = queue.last;\n if (_last === null) {\n // This is the first update. Create a circular list.\n _update2.next = _update2;\n } else {\n var first = _last.next;\n if (first !== null) {\n // Still circular.\n _update2.next = first;\n }\n _last.next = _update2;\n }\n queue.last = _update2;\n\n if (fiber.expirationTime === NoWork && (alternate === null || alternate.expirationTime === NoWork)) {\n // The queue is currently empty, which means we can eagerly compute the\n // next state before entering the render phase. If the new state is the\n // same as the current state, we may be able to bail out entirely.\n var _lastRenderedReducer = queue.lastRenderedReducer;\n if (_lastRenderedReducer !== null) {\n var prevDispatcher = void 0;\n {\n prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n }\n try {\n var currentState = queue.lastRenderedState;\n var _eagerState = _lastRenderedReducer(currentState, action);\n // Stash the eagerly computed state, and the reducer used to compute\n // it, on the update object. If the reducer hasn't changed by the\n // time we enter the render phase, then the eager state can be used\n // without calling the reducer again.\n _update2.eagerReducer = _lastRenderedReducer;\n _update2.eagerState = _eagerState;\n if (is(_eagerState, currentState)) {\n // Fast path. We can bail out without scheduling React to re-render.\n // It's still possible that we'll need to rebase this update later,\n // if the component re-renders for a different reason and by that\n // time the reducer has changed.\n return;\n }\n } catch (error) {\n // Suppress the error. It will throw again in the render phase.\n } finally {\n {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n }\n }\n }\n {\n if (shouldWarnForUnbatchedSetState === true) {\n warnIfNotCurrentlyBatchingInDev(fiber);\n }\n }\n scheduleWork(fiber, _expirationTime);\n }\n}\n\nvar ContextOnlyDispatcher = {\n readContext: readContext,\n\n useCallback: throwInvalidHookError,\n useContext: throwInvalidHookError,\n useEffect: throwInvalidHookError,\n useImperativeHandle: throwInvalidHookError,\n useLayoutEffect: throwInvalidHookError,\n useMemo: throwInvalidHookError,\n useReducer: throwInvalidHookError,\n useRef: throwInvalidHookError,\n useState: throwInvalidHookError,\n useDebugValue: throwInvalidHookError\n};\n\nvar HooksDispatcherOnMountInDEV = null;\nvar HooksDispatcherOnMountWithHookTypesInDEV = null;\nvar HooksDispatcherOnUpdateInDEV = null;\nvar InvalidNestedHooksDispatcherOnMountInDEV = null;\nvar InvalidNestedHooksDispatcherOnUpdateInDEV = null;\n\n{\n var warnInvalidContextAccess = function () {\n warning$1(false, 'Context can only be read while React is rendering. ' + 'In classes, you can read it in the render method or getDerivedStateFromProps. ' + 'In function components, you can read it directly in the function body, but not ' + 'inside Hooks like useReducer() or useMemo().');\n };\n\n var warnInvalidHookAccess = function () {\n warning$1(false, 'Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. ' + 'You can only call Hooks at the top level of your React function. ' + 'For more information, see ' + 'https://fb.me/rules-of-hooks');\n };\n\n HooksDispatcherOnMountInDEV = {\n readContext: function (context, observedBits) {\n return readContext(context, observedBits);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = 'useCallback';\n mountHookTypesDev();\n return mountCallback(callback, deps);\n },\n useContext: function (context, observedBits) {\n currentHookNameInDev = 'useContext';\n mountHookTypesDev();\n return readContext(context, observedBits);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = 'useEffect';\n mountHookTypesDev();\n return mountEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = 'useImperativeHandle';\n mountHookTypesDev();\n return mountImperativeHandle(ref, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = 'useLayoutEffect';\n mountHookTypesDev();\n return mountLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = 'useMemo';\n mountHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountMemo(create, deps);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = 'useReducer';\n mountHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountReducer(reducer, initialArg, init);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = 'useRef';\n mountHookTypesDev();\n return mountRef(initialValue);\n },\n useState: function (initialState) {\n currentHookNameInDev = 'useState';\n mountHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountState(initialState);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useDebugValue: function (value, formatterFn) {\n currentHookNameInDev = 'useDebugValue';\n mountHookTypesDev();\n return mountDebugValue(value, formatterFn);\n }\n };\n\n HooksDispatcherOnMountWithHookTypesInDEV = {\n readContext: function (context, observedBits) {\n return readContext(context, observedBits);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = 'useCallback';\n updateHookTypesDev();\n return mountCallback(callback, deps);\n },\n useContext: function (context, observedBits) {\n currentHookNameInDev = 'useContext';\n updateHookTypesDev();\n return readContext(context, observedBits);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = 'useEffect';\n updateHookTypesDev();\n return mountEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = 'useImperativeHandle';\n updateHookTypesDev();\n return mountImperativeHandle(ref, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = 'useLayoutEffect';\n updateHookTypesDev();\n return mountLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = 'useMemo';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountMemo(create, deps);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = 'useReducer';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountReducer(reducer, initialArg, init);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = 'useRef';\n updateHookTypesDev();\n return mountRef(initialValue);\n },\n useState: function (initialState) {\n currentHookNameInDev = 'useState';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountState(initialState);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useDebugValue: function (value, formatterFn) {\n currentHookNameInDev = 'useDebugValue';\n updateHookTypesDev();\n return mountDebugValue(value, formatterFn);\n }\n };\n\n HooksDispatcherOnUpdateInDEV = {\n readContext: function (context, observedBits) {\n return readContext(context, observedBits);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = 'useCallback';\n updateHookTypesDev();\n return updateCallback(callback, deps);\n },\n useContext: function (context, observedBits) {\n currentHookNameInDev = 'useContext';\n updateHookTypesDev();\n return readContext(context, observedBits);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = 'useEffect';\n updateHookTypesDev();\n return updateEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = 'useImperativeHandle';\n updateHookTypesDev();\n return updateImperativeHandle(ref, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = 'useLayoutEffect';\n updateHookTypesDev();\n return updateLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = 'useMemo';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return updateMemo(create, deps);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = 'useReducer';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return updateReducer(reducer, initialArg, init);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = 'useRef';\n updateHookTypesDev();\n return updateRef(initialValue);\n },\n useState: function (initialState) {\n currentHookNameInDev = 'useState';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return updateState(initialState);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useDebugValue: function (value, formatterFn) {\n currentHookNameInDev = 'useDebugValue';\n updateHookTypesDev();\n return updateDebugValue(value, formatterFn);\n }\n };\n\n InvalidNestedHooksDispatcherOnMountInDEV = {\n readContext: function (context, observedBits) {\n warnInvalidContextAccess();\n return readContext(context, observedBits);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = 'useCallback';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountCallback(callback, deps);\n },\n useContext: function (context, observedBits) {\n currentHookNameInDev = 'useContext';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return readContext(context, observedBits);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = 'useEffect';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = 'useImperativeHandle';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountImperativeHandle(ref, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = 'useLayoutEffect';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = 'useMemo';\n warnInvalidHookAccess();\n mountHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountMemo(create, deps);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = 'useReducer';\n warnInvalidHookAccess();\n mountHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountReducer(reducer, initialArg, init);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = 'useRef';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountRef(initialValue);\n },\n useState: function (initialState) {\n currentHookNameInDev = 'useState';\n warnInvalidHookAccess();\n mountHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountState(initialState);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useDebugValue: function (value, formatterFn) {\n currentHookNameInDev = 'useDebugValue';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountDebugValue(value, formatterFn);\n }\n };\n\n InvalidNestedHooksDispatcherOnUpdateInDEV = {\n readContext: function (context, observedBits) {\n warnInvalidContextAccess();\n return readContext(context, observedBits);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = 'useCallback';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateCallback(callback, deps);\n },\n useContext: function (context, observedBits) {\n currentHookNameInDev = 'useContext';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return readContext(context, observedBits);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = 'useEffect';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = 'useImperativeHandle';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateImperativeHandle(ref, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = 'useLayoutEffect';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = 'useMemo';\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return updateMemo(create, deps);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = 'useReducer';\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return updateReducer(reducer, initialArg, init);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = 'useRef';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateRef(initialValue);\n },\n useState: function (initialState) {\n currentHookNameInDev = 'useState';\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return updateState(initialState);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useDebugValue: function (value, formatterFn) {\n currentHookNameInDev = 'useDebugValue';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateDebugValue(value, formatterFn);\n }\n };\n}\n\nvar commitTime = 0;\nvar profilerStartTime = -1;\n\nfunction getCommitTime() {\n return commitTime;\n}\n\nfunction recordCommitTime() {\n if (!enableProfilerTimer) {\n return;\n }\n commitTime = scheduler.unstable_now();\n}\n\nfunction startProfilerTimer(fiber) {\n if (!enableProfilerTimer) {\n return;\n }\n\n profilerStartTime = scheduler.unstable_now();\n\n if (fiber.actualStartTime < 0) {\n fiber.actualStartTime = scheduler.unstable_now();\n }\n}\n\nfunction stopProfilerTimerIfRunning(fiber) {\n if (!enableProfilerTimer) {\n return;\n }\n profilerStartTime = -1;\n}\n\nfunction stopProfilerTimerIfRunningAndRecordDelta(fiber, overrideBaseTime) {\n if (!enableProfilerTimer) {\n return;\n }\n\n if (profilerStartTime >= 0) {\n var elapsedTime = scheduler.unstable_now() - profilerStartTime;\n fiber.actualDuration += elapsedTime;\n if (overrideBaseTime) {\n fiber.selfBaseDuration = elapsedTime;\n }\n profilerStartTime = -1;\n }\n}\n\n// The deepest Fiber on the stack involved in a hydration context.\n// This may have been an insertion or a hydration.\nvar hydrationParentFiber = null;\nvar nextHydratableInstance = null;\nvar isHydrating = false;\n\nfunction enterHydrationState(fiber) {\n if (!supportsHydration) {\n return false;\n }\n\n var parentInstance = fiber.stateNode.containerInfo;\n nextHydratableInstance = getFirstHydratableChild(parentInstance);\n hydrationParentFiber = fiber;\n isHydrating = true;\n return true;\n}\n\nfunction reenterHydrationStateFromDehydratedSuspenseInstance(fiber) {\n if (!supportsHydration) {\n return false;\n }\n\n var suspenseInstance = fiber.stateNode;\n nextHydratableInstance = getNextHydratableSibling(suspenseInstance);\n popToNextHostParent(fiber);\n isHydrating = true;\n return true;\n}\n\nfunction deleteHydratableInstance(returnFiber, instance) {\n {\n switch (returnFiber.tag) {\n case HostRoot:\n didNotHydrateContainerInstance(returnFiber.stateNode.containerInfo, instance);\n break;\n case HostComponent:\n didNotHydrateInstance(returnFiber.type, returnFiber.memoizedProps, returnFiber.stateNode, instance);\n break;\n }\n }\n\n var childToDelete = createFiberFromHostInstanceForDeletion();\n childToDelete.stateNode = instance;\n childToDelete.return = returnFiber;\n childToDelete.effectTag = Deletion;\n\n // This might seem like it belongs on progressedFirstDeletion. However,\n // these children are not part of the reconciliation list of children.\n // Even if we abort and rereconcile the children, that will try to hydrate\n // again and the nodes are still in the host tree so these will be\n // recreated.\n if (returnFiber.lastEffect !== null) {\n returnFiber.lastEffect.nextEffect = childToDelete;\n returnFiber.lastEffect = childToDelete;\n } else {\n returnFiber.firstEffect = returnFiber.lastEffect = childToDelete;\n }\n}\n\nfunction insertNonHydratedInstance(returnFiber, fiber) {\n fiber.effectTag |= Placement;\n {\n switch (returnFiber.tag) {\n case HostRoot:\n {\n var parentContainer = returnFiber.stateNode.containerInfo;\n switch (fiber.tag) {\n case HostComponent:\n var type = fiber.type;\n var props = fiber.pendingProps;\n didNotFindHydratableContainerInstance(parentContainer, type, props);\n break;\n case HostText:\n var text = fiber.pendingProps;\n didNotFindHydratableContainerTextInstance(parentContainer, text);\n break;\n case SuspenseComponent:\n \n break;\n }\n break;\n }\n case HostComponent:\n {\n var parentType = returnFiber.type;\n var parentProps = returnFiber.memoizedProps;\n var parentInstance = returnFiber.stateNode;\n switch (fiber.tag) {\n case HostComponent:\n var _type = fiber.type;\n var _props = fiber.pendingProps;\n didNotFindHydratableInstance(parentType, parentProps, parentInstance, _type, _props);\n break;\n case HostText:\n var _text = fiber.pendingProps;\n didNotFindHydratableTextInstance(parentType, parentProps, parentInstance, _text);\n break;\n case SuspenseComponent:\n didNotFindHydratableSuspenseInstance(parentType, parentProps, parentInstance);\n break;\n }\n break;\n }\n default:\n return;\n }\n }\n}\n\nfunction tryHydrate(fiber, nextInstance) {\n switch (fiber.tag) {\n case HostComponent:\n {\n var type = fiber.type;\n var props = fiber.pendingProps;\n var instance = canHydrateInstance(nextInstance, type, props);\n if (instance !== null) {\n fiber.stateNode = instance;\n return true;\n }\n return false;\n }\n case HostText:\n {\n var text = fiber.pendingProps;\n var textInstance = canHydrateTextInstance(nextInstance, text);\n if (textInstance !== null) {\n fiber.stateNode = textInstance;\n return true;\n }\n return false;\n }\n case SuspenseComponent:\n {\n if (enableSuspenseServerRenderer) {\n var suspenseInstance = canHydrateSuspenseInstance(nextInstance);\n if (suspenseInstance !== null) {\n // Downgrade the tag to a dehydrated component until we've hydrated it.\n fiber.tag = DehydratedSuspenseComponent;\n fiber.stateNode = suspenseInstance;\n return true;\n }\n }\n return false;\n }\n default:\n return false;\n }\n}\n\nfunction tryToClaimNextHydratableInstance(fiber) {\n if (!isHydrating) {\n return;\n }\n var nextInstance = nextHydratableInstance;\n if (!nextInstance) {\n // Nothing to hydrate. Make it an insertion.\n insertNonHydratedInstance(hydrationParentFiber, fiber);\n isHydrating = false;\n hydrationParentFiber = fiber;\n return;\n }\n var firstAttemptedInstance = nextInstance;\n if (!tryHydrate(fiber, nextInstance)) {\n // If we can't hydrate this instance let's try the next one.\n // We use this as a heuristic. It's based on intuition and not data so it\n // might be flawed or unnecessary.\n nextInstance = getNextHydratableSibling(firstAttemptedInstance);\n if (!nextInstance || !tryHydrate(fiber, nextInstance)) {\n // Nothing to hydrate. Make it an insertion.\n insertNonHydratedInstance(hydrationParentFiber, fiber);\n isHydrating = false;\n hydrationParentFiber = fiber;\n return;\n }\n // We matched the next one, we'll now assume that the first one was\n // superfluous and we'll delete it. Since we can't eagerly delete it\n // we'll have to schedule a deletion. To do that, this node needs a dummy\n // fiber associated with it.\n deleteHydratableInstance(hydrationParentFiber, firstAttemptedInstance);\n }\n hydrationParentFiber = fiber;\n nextHydratableInstance = getFirstHydratableChild(nextInstance);\n}\n\nfunction prepareToHydrateHostInstance(fiber, rootContainerInstance, hostContext) {\n if (!supportsHydration) {\n invariant(false, 'Expected prepareToHydrateHostInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.');\n }\n\n var instance = fiber.stateNode;\n var updatePayload = hydrateInstance(instance, fiber.type, fiber.memoizedProps, rootContainerInstance, hostContext, fiber);\n // TODO: Type this specific to this type of component.\n fiber.updateQueue = updatePayload;\n // If the update payload indicates that there is a change or if there\n // is a new ref we mark this as an update.\n if (updatePayload !== null) {\n return true;\n }\n return false;\n}\n\nfunction prepareToHydrateHostTextInstance(fiber) {\n if (!supportsHydration) {\n invariant(false, 'Expected prepareToHydrateHostTextInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.');\n }\n\n var textInstance = fiber.stateNode;\n var textContent = fiber.memoizedProps;\n var shouldUpdate = hydrateTextInstance(textInstance, textContent, fiber);\n {\n if (shouldUpdate) {\n // We assume that prepareToHydrateHostTextInstance is called in a context where the\n // hydration parent is the parent host component of this host text.\n var returnFiber = hydrationParentFiber;\n if (returnFiber !== null) {\n switch (returnFiber.tag) {\n case HostRoot:\n {\n var parentContainer = returnFiber.stateNode.containerInfo;\n didNotMatchHydratedContainerTextInstance(parentContainer, textInstance, textContent);\n break;\n }\n case HostComponent:\n {\n var parentType = returnFiber.type;\n var parentProps = returnFiber.memoizedProps;\n var parentInstance = returnFiber.stateNode;\n didNotMatchHydratedTextInstance(parentType, parentProps, parentInstance, textInstance, textContent);\n break;\n }\n }\n }\n }\n }\n return shouldUpdate;\n}\n\nfunction skipPastDehydratedSuspenseInstance(fiber) {\n if (!supportsHydration) {\n invariant(false, 'Expected skipPastDehydratedSuspenseInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.');\n }\n var suspenseInstance = fiber.stateNode;\n !suspenseInstance ? invariant(false, 'Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n nextHydratableInstance = getNextHydratableInstanceAfterSuspenseInstance(suspenseInstance);\n}\n\nfunction popToNextHostParent(fiber) {\n var parent = fiber.return;\n while (parent !== null && parent.tag !== HostComponent && parent.tag !== HostRoot && parent.tag !== DehydratedSuspenseComponent) {\n parent = parent.return;\n }\n hydrationParentFiber = parent;\n}\n\nfunction popHydrationState(fiber) {\n if (!supportsHydration) {\n return false;\n }\n if (fiber !== hydrationParentFiber) {\n // We're deeper than the current hydration context, inside an inserted\n // tree.\n return false;\n }\n if (!isHydrating) {\n // If we're not currently hydrating but we're in a hydration context, then\n // we were an insertion and now need to pop up reenter hydration of our\n // siblings.\n popToNextHostParent(fiber);\n isHydrating = true;\n return false;\n }\n\n var type = fiber.type;\n\n // If we have any remaining hydratable nodes, we need to delete them now.\n // We only do this deeper than head and body since they tend to have random\n // other nodes in them. We also ignore components with pure text content in\n // side of them.\n // TODO: Better heuristic.\n if (fiber.tag !== HostComponent || type !== 'head' && type !== 'body' && !shouldSetTextContent(type, fiber.memoizedProps)) {\n var nextInstance = nextHydratableInstance;\n while (nextInstance) {\n deleteHydratableInstance(fiber, nextInstance);\n nextInstance = getNextHydratableSibling(nextInstance);\n }\n }\n\n popToNextHostParent(fiber);\n nextHydratableInstance = hydrationParentFiber ? getNextHydratableSibling(fiber.stateNode) : null;\n return true;\n}\n\nfunction resetHydrationState() {\n if (!supportsHydration) {\n return;\n }\n\n hydrationParentFiber = null;\n nextHydratableInstance = null;\n isHydrating = false;\n}\n\nvar ReactCurrentOwner$3 = ReactSharedInternals.ReactCurrentOwner;\n\nvar didReceiveUpdate = false;\n\nvar didWarnAboutBadClass = void 0;\nvar didWarnAboutContextTypeOnFunctionComponent = void 0;\nvar didWarnAboutGetDerivedStateOnFunctionComponent = void 0;\nvar didWarnAboutFunctionRefs = void 0;\nvar didWarnAboutReassigningProps = void 0;\n\n{\n didWarnAboutBadClass = {};\n didWarnAboutContextTypeOnFunctionComponent = {};\n didWarnAboutGetDerivedStateOnFunctionComponent = {};\n didWarnAboutFunctionRefs = {};\n didWarnAboutReassigningProps = false;\n}\n\nfunction reconcileChildren(current$$1, workInProgress, nextChildren, renderExpirationTime) {\n if (current$$1 === null) {\n // If this is a fresh new component that hasn't been rendered yet, we\n // won't update its child set by applying minimal side-effects. Instead,\n // we will add them all to the child before it gets rendered. That means\n // we can optimize this reconciliation pass by not tracking side-effects.\n workInProgress.child = mountChildFibers(workInProgress, null, nextChildren, renderExpirationTime);\n } else {\n // If the current child is the same as the work in progress, it means that\n // we haven't yet started any work on these children. Therefore, we use\n // the clone algorithm to create a copy of all the current children.\n\n // If we had any progressed work already, that is invalid at this point so\n // let's throw it out.\n workInProgress.child = reconcileChildFibers(workInProgress, current$$1.child, nextChildren, renderExpirationTime);\n }\n}\n\nfunction forceUnmountCurrentAndReconcile(current$$1, workInProgress, nextChildren, renderExpirationTime) {\n // This function is fork of reconcileChildren. It's used in cases where we\n // want to reconcile without matching against the existing set. This has the\n // effect of all current children being unmounted; even if the type and key\n // are the same, the old child is unmounted and a new child is created.\n //\n // To do this, we're going to go through the reconcile algorithm twice. In\n // the first pass, we schedule a deletion for all the current children by\n // passing null.\n workInProgress.child = reconcileChildFibers(workInProgress, current$$1.child, null, renderExpirationTime);\n // In the second pass, we mount the new children. The trick here is that we\n // pass null in place of where we usually pass the current child set. This has\n // the effect of remounting all children regardless of whether their their\n // identity matches.\n workInProgress.child = reconcileChildFibers(workInProgress, null, nextChildren, renderExpirationTime);\n}\n\nfunction updateForwardRef(current$$1, workInProgress, Component, nextProps, renderExpirationTime) {\n // TODO: current can be non-null here even if the component\n // hasn't yet mounted. This happens after the first render suspends.\n // We'll need to figure out if this is fine or can cause issues.\n\n {\n if (workInProgress.type !== workInProgress.elementType) {\n // Lazy component props can't be validated in createElement\n // because they're only guaranteed to be resolved here.\n var innerPropTypes = Component.propTypes;\n if (innerPropTypes) {\n checkPropTypes(innerPropTypes, nextProps, // Resolved props\n 'prop', getComponentName(Component), getCurrentFiberStackInDev);\n }\n }\n }\n\n var render = Component.render;\n var ref = workInProgress.ref;\n\n // The rest is a fork of updateFunctionComponent\n var nextChildren = void 0;\n prepareToReadContext(workInProgress, renderExpirationTime);\n {\n ReactCurrentOwner$3.current = workInProgress;\n setCurrentPhase('render');\n nextChildren = renderWithHooks(current$$1, workInProgress, render, nextProps, ref, renderExpirationTime);\n if (debugRenderPhaseSideEffects || debugRenderPhaseSideEffectsForStrictMode && workInProgress.mode & StrictMode) {\n // Only double-render components with Hooks\n if (workInProgress.memoizedState !== null) {\n nextChildren = renderWithHooks(current$$1, workInProgress, render, nextProps, ref, renderExpirationTime);\n }\n }\n setCurrentPhase(null);\n }\n\n if (current$$1 !== null && !didReceiveUpdate) {\n bailoutHooks(current$$1, workInProgress, renderExpirationTime);\n return bailoutOnAlreadyFinishedWork(current$$1, workInProgress, renderExpirationTime);\n }\n\n // React DevTools reads this flag.\n workInProgress.effectTag |= PerformedWork;\n reconcileChildren(current$$1, workInProgress, nextChildren, renderExpirationTime);\n return workInProgress.child;\n}\n\nfunction updateMemoComponent(current$$1, workInProgress, Component, nextProps, updateExpirationTime, renderExpirationTime) {\n if (current$$1 === null) {\n var type = Component.type;\n if (isSimpleFunctionComponent(type) && Component.compare === null &&\n // SimpleMemoComponent codepath doesn't resolve outer props either.\n Component.defaultProps === undefined) {\n // If this is a plain function component without default props,\n // and with only the default shallow comparison, we upgrade it\n // to a SimpleMemoComponent to allow fast path updates.\n workInProgress.tag = SimpleMemoComponent;\n workInProgress.type = type;\n {\n validateFunctionComponentInDev(workInProgress, type);\n }\n return updateSimpleMemoComponent(current$$1, workInProgress, type, nextProps, updateExpirationTime, renderExpirationTime);\n }\n {\n var innerPropTypes = type.propTypes;\n if (innerPropTypes) {\n // Inner memo component props aren't currently validated in createElement.\n // We could move it there, but we'd still need this for lazy code path.\n checkPropTypes(innerPropTypes, nextProps, // Resolved props\n 'prop', getComponentName(type), getCurrentFiberStackInDev);\n }\n }\n var child = createFiberFromTypeAndProps(Component.type, null, nextProps, null, workInProgress.mode, renderExpirationTime);\n child.ref = workInProgress.ref;\n child.return = workInProgress;\n workInProgress.child = child;\n return child;\n }\n {\n var _type = Component.type;\n var _innerPropTypes = _type.propTypes;\n if (_innerPropTypes) {\n // Inner memo component props aren't currently validated in createElement.\n // We could move it there, but we'd still need this for lazy code path.\n checkPropTypes(_innerPropTypes, nextProps, // Resolved props\n 'prop', getComponentName(_type), getCurrentFiberStackInDev);\n }\n }\n var currentChild = current$$1.child; // This is always exactly one child\n if (updateExpirationTime < renderExpirationTime) {\n // This will be the props with resolved defaultProps,\n // unlike current.memoizedProps which will be the unresolved ones.\n var prevProps = currentChild.memoizedProps;\n // Default to shallow comparison\n var compare = Component.compare;\n compare = compare !== null ? compare : shallowEqual;\n if (compare(prevProps, nextProps) && current$$1.ref === workInProgress.ref) {\n return bailoutOnAlreadyFinishedWork(current$$1, workInProgress, renderExpirationTime);\n }\n }\n // React DevTools reads this flag.\n workInProgress.effectTag |= PerformedWork;\n var newChild = createWorkInProgress(currentChild, nextProps, renderExpirationTime);\n newChild.ref = workInProgress.ref;\n newChild.return = workInProgress;\n workInProgress.child = newChild;\n return newChild;\n}\n\nfunction updateSimpleMemoComponent(current$$1, workInProgress, Component, nextProps, updateExpirationTime, renderExpirationTime) {\n // TODO: current can be non-null here even if the component\n // hasn't yet mounted. This happens when the inner render suspends.\n // We'll need to figure out if this is fine or can cause issues.\n\n {\n if (workInProgress.type !== workInProgress.elementType) {\n // Lazy component props can't be validated in createElement\n // because they're only guaranteed to be resolved here.\n var outerMemoType = workInProgress.elementType;\n if (outerMemoType.$$typeof === REACT_LAZY_TYPE) {\n // We warn when you define propTypes on lazy()\n // so let's just skip over it to find memo() outer wrapper.\n // Inner props for memo are validated later.\n outerMemoType = refineResolvedLazyComponent(outerMemoType);\n }\n var outerPropTypes = outerMemoType && outerMemoType.propTypes;\n if (outerPropTypes) {\n checkPropTypes(outerPropTypes, nextProps, // Resolved (SimpleMemoComponent has no defaultProps)\n 'prop', getComponentName(outerMemoType), getCurrentFiberStackInDev);\n }\n // Inner propTypes will be validated in the function component path.\n }\n }\n if (current$$1 !== null) {\n var prevProps = current$$1.memoizedProps;\n if (shallowEqual(prevProps, nextProps) && current$$1.ref === workInProgress.ref) {\n didReceiveUpdate = false;\n if (updateExpirationTime < renderExpirationTime) {\n return bailoutOnAlreadyFinishedWork(current$$1, workInProgress, renderExpirationTime);\n }\n }\n }\n return updateFunctionComponent(current$$1, workInProgress, Component, nextProps, renderExpirationTime);\n}\n\nfunction updateFragment(current$$1, workInProgress, renderExpirationTime) {\n var nextChildren = workInProgress.pendingProps;\n reconcileChildren(current$$1, workInProgress, nextChildren, renderExpirationTime);\n return workInProgress.child;\n}\n\nfunction updateMode(current$$1, workInProgress, renderExpirationTime) {\n var nextChildren = workInProgress.pendingProps.children;\n reconcileChildren(current$$1, workInProgress, nextChildren, renderExpirationTime);\n return workInProgress.child;\n}\n\nfunction updateProfiler(current$$1, workInProgress, renderExpirationTime) {\n if (enableProfilerTimer) {\n workInProgress.effectTag |= Update;\n }\n var nextProps = workInProgress.pendingProps;\n var nextChildren = nextProps.children;\n reconcileChildren(current$$1, workInProgress, nextChildren, renderExpirationTime);\n return workInProgress.child;\n}\n\nfunction markRef(current$$1, workInProgress) {\n var ref = workInProgress.ref;\n if (current$$1 === null && ref !== null || current$$1 !== null && current$$1.ref !== ref) {\n // Schedule a Ref effect\n workInProgress.effectTag |= Ref;\n }\n}\n\nfunction updateFunctionComponent(current$$1, workInProgress, Component, nextProps, renderExpirationTime) {\n {\n if (workInProgress.type !== workInProgress.elementType) {\n // Lazy component props can't be validated in createElement\n // because they're only guaranteed to be resolved here.\n var innerPropTypes = Component.propTypes;\n if (innerPropTypes) {\n checkPropTypes(innerPropTypes, nextProps, // Resolved props\n 'prop', getComponentName(Component), getCurrentFiberStackInDev);\n }\n }\n }\n\n var unmaskedContext = getUnmaskedContext(workInProgress, Component, true);\n var context = getMaskedContext(workInProgress, unmaskedContext);\n\n var nextChildren = void 0;\n prepareToReadContext(workInProgress, renderExpirationTime);\n {\n ReactCurrentOwner$3.current = workInProgress;\n setCurrentPhase('render');\n nextChildren = renderWithHooks(current$$1, workInProgress, Component, nextProps, context, renderExpirationTime);\n if (debugRenderPhaseSideEffects || debugRenderPhaseSideEffectsForStrictMode && workInProgress.mode & StrictMode) {\n // Only double-render components with Hooks\n if (workInProgress.memoizedState !== null) {\n nextChildren = renderWithHooks(current$$1, workInProgress, Component, nextProps, context, renderExpirationTime);\n }\n }\n setCurrentPhase(null);\n }\n\n if (current$$1 !== null && !didReceiveUpdate) {\n bailoutHooks(current$$1, workInProgress, renderExpirationTime);\n return bailoutOnAlreadyFinishedWork(current$$1, workInProgress, renderExpirationTime);\n }\n\n // React DevTools reads this flag.\n workInProgress.effectTag |= PerformedWork;\n reconcileChildren(current$$1, workInProgress, nextChildren, renderExpirationTime);\n return workInProgress.child;\n}\n\nfunction updateClassComponent(current$$1, workInProgress, Component, nextProps, renderExpirationTime) {\n {\n if (workInProgress.type !== workInProgress.elementType) {\n // Lazy component props can't be validated in createElement\n // because they're only guaranteed to be resolved here.\n var innerPropTypes = Component.propTypes;\n if (innerPropTypes) {\n checkPropTypes(innerPropTypes, nextProps, // Resolved props\n 'prop', getComponentName(Component), getCurrentFiberStackInDev);\n }\n }\n }\n\n // Push context providers early to prevent context stack mismatches.\n // During mounting we don't know the child context yet as the instance doesn't exist.\n // We will invalidate the child context in finishClassComponent() right after rendering.\n var hasContext = void 0;\n if (isContextProvider(Component)) {\n hasContext = true;\n pushContextProvider(workInProgress);\n } else {\n hasContext = false;\n }\n prepareToReadContext(workInProgress, renderExpirationTime);\n\n var instance = workInProgress.stateNode;\n var shouldUpdate = void 0;\n if (instance === null) {\n if (current$$1 !== null) {\n // An class component without an instance only mounts if it suspended\n // inside a non- concurrent tree, in an inconsistent state. We want to\n // tree it like a new mount, even though an empty version of it already\n // committed. Disconnect the alternate pointers.\n current$$1.alternate = null;\n workInProgress.alternate = null;\n // Since this is conceptually a new fiber, schedule a Placement effect\n workInProgress.effectTag |= Placement;\n }\n // In the initial pass we might need to construct the instance.\n constructClassInstance(workInProgress, Component, nextProps, renderExpirationTime);\n mountClassInstance(workInProgress, Component, nextProps, renderExpirationTime);\n shouldUpdate = true;\n } else if (current$$1 === null) {\n // In a resume, we'll already have an instance we can reuse.\n shouldUpdate = resumeMountClassInstance(workInProgress, Component, nextProps, renderExpirationTime);\n } else {\n shouldUpdate = updateClassInstance(current$$1, workInProgress, Component, nextProps, renderExpirationTime);\n }\n var nextUnitOfWork = finishClassComponent(current$$1, workInProgress, Component, shouldUpdate, hasContext, renderExpirationTime);\n {\n var inst = workInProgress.stateNode;\n if (inst.props !== nextProps) {\n !didWarnAboutReassigningProps ? warning$1(false, 'It looks like %s is reassigning its own `this.props` while rendering. ' + 'This is not supported and can lead to confusing bugs.', getComponentName(workInProgress.type) || 'a component') : void 0;\n didWarnAboutReassigningProps = true;\n }\n }\n return nextUnitOfWork;\n}\n\nfunction finishClassComponent(current$$1, workInProgress, Component, shouldUpdate, hasContext, renderExpirationTime) {\n // Refs should update even if shouldComponentUpdate returns false\n markRef(current$$1, workInProgress);\n\n var didCaptureError = (workInProgress.effectTag & DidCapture) !== NoEffect;\n\n if (!shouldUpdate && !didCaptureError) {\n // Context providers should defer to sCU for rendering\n if (hasContext) {\n invalidateContextProvider(workInProgress, Component, false);\n }\n\n return bailoutOnAlreadyFinishedWork(current$$1, workInProgress, renderExpirationTime);\n }\n\n var instance = workInProgress.stateNode;\n\n // Rerender\n ReactCurrentOwner$3.current = workInProgress;\n var nextChildren = void 0;\n if (didCaptureError && typeof Component.getDerivedStateFromError !== 'function') {\n // If we captured an error, but getDerivedStateFrom catch is not defined,\n // unmount all the children. componentDidCatch will schedule an update to\n // re-render a fallback. This is temporary until we migrate everyone to\n // the new API.\n // TODO: Warn in a future release.\n nextChildren = null;\n\n if (enableProfilerTimer) {\n stopProfilerTimerIfRunning(workInProgress);\n }\n } else {\n {\n setCurrentPhase('render');\n nextChildren = instance.render();\n if (debugRenderPhaseSideEffects || debugRenderPhaseSideEffectsForStrictMode && workInProgress.mode & StrictMode) {\n instance.render();\n }\n setCurrentPhase(null);\n }\n }\n\n // React DevTools reads this flag.\n workInProgress.effectTag |= PerformedWork;\n if (current$$1 !== null && didCaptureError) {\n // If we're recovering from an error, reconcile without reusing any of\n // the existing children. Conceptually, the normal children and the children\n // that are shown on error are two different sets, so we shouldn't reuse\n // normal children even if their identities match.\n forceUnmountCurrentAndReconcile(current$$1, workInProgress, nextChildren, renderExpirationTime);\n } else {\n reconcileChildren(current$$1, workInProgress, nextChildren, renderExpirationTime);\n }\n\n // Memoize state using the values we just used to render.\n // TODO: Restructure so we never read values from the instance.\n workInProgress.memoizedState = instance.state;\n\n // The context might have changed so we need to recalculate it.\n if (hasContext) {\n invalidateContextProvider(workInProgress, Component, true);\n }\n\n return workInProgress.child;\n}\n\nfunction pushHostRootContext(workInProgress) {\n var root = workInProgress.stateNode;\n if (root.pendingContext) {\n pushTopLevelContextObject(workInProgress, root.pendingContext, root.pendingContext !== root.context);\n } else if (root.context) {\n // Should always be set\n pushTopLevelContextObject(workInProgress, root.context, false);\n }\n pushHostContainer(workInProgress, root.containerInfo);\n}\n\nfunction updateHostRoot(current$$1, workInProgress, renderExpirationTime) {\n pushHostRootContext(workInProgress);\n var updateQueue = workInProgress.updateQueue;\n !(updateQueue !== null) ? invariant(false, 'If the root does not have an updateQueue, we should have already bailed out. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n var nextProps = workInProgress.pendingProps;\n var prevState = workInProgress.memoizedState;\n var prevChildren = prevState !== null ? prevState.element : null;\n processUpdateQueue(workInProgress, updateQueue, nextProps, null, renderExpirationTime);\n var nextState = workInProgress.memoizedState;\n // Caution: React DevTools currently depends on this property\n // being called \"element\".\n var nextChildren = nextState.element;\n if (nextChildren === prevChildren) {\n // If the state is the same as before, that's a bailout because we had\n // no work that expires at this time.\n resetHydrationState();\n return bailoutOnAlreadyFinishedWork(current$$1, workInProgress, renderExpirationTime);\n }\n var root = workInProgress.stateNode;\n if ((current$$1 === null || current$$1.child === null) && root.hydrate && enterHydrationState(workInProgress)) {\n // If we don't have any current children this might be the first pass.\n // We always try to hydrate. If this isn't a hydration pass there won't\n // be any children to hydrate which is effectively the same thing as\n // not hydrating.\n\n // This is a bit of a hack. We track the host root as a placement to\n // know that we're currently in a mounting state. That way isMounted\n // works as expected. We must reset this before committing.\n // TODO: Delete this when we delete isMounted and findDOMNode.\n workInProgress.effectTag |= Placement;\n\n // Ensure that children mount into this root without tracking\n // side-effects. This ensures that we don't store Placement effects on\n // nodes that will be hydrated.\n workInProgress.child = mountChildFibers(workInProgress, null, nextChildren, renderExpirationTime);\n } else {\n // Otherwise reset hydration state in case we aborted and resumed another\n // root.\n reconcileChildren(current$$1, workInProgress, nextChildren, renderExpirationTime);\n resetHydrationState();\n }\n return workInProgress.child;\n}\n\nfunction updateHostComponent(current$$1, workInProgress, renderExpirationTime) {\n pushHostContext(workInProgress);\n\n if (current$$1 === null) {\n tryToClaimNextHydratableInstance(workInProgress);\n }\n\n var type = workInProgress.type;\n var nextProps = workInProgress.pendingProps;\n var prevProps = current$$1 !== null ? current$$1.memoizedProps : null;\n\n var nextChildren = nextProps.children;\n var isDirectTextChild = shouldSetTextContent(type, nextProps);\n\n if (isDirectTextChild) {\n // We special case a direct text child of a host node. This is a common\n // case. We won't handle it as a reified child. We will instead handle\n // this in the host environment that also have access to this prop. That\n // avoids allocating another HostText fiber and traversing it.\n nextChildren = null;\n } else if (prevProps !== null && shouldSetTextContent(type, prevProps)) {\n // If we're switching from a direct text child to a normal child, or to\n // empty, we need to schedule the text content to be reset.\n workInProgress.effectTag |= ContentReset;\n }\n\n markRef(current$$1, workInProgress);\n\n // Check the host config to see if the children are offscreen/hidden.\n if (renderExpirationTime !== Never && workInProgress.mode & ConcurrentMode && shouldDeprioritizeSubtree(type, nextProps)) {\n // Schedule this fiber to re-render at offscreen priority. Then bailout.\n workInProgress.expirationTime = workInProgress.childExpirationTime = Never;\n return null;\n }\n\n reconcileChildren(current$$1, workInProgress, nextChildren, renderExpirationTime);\n return workInProgress.child;\n}\n\nfunction updateHostText(current$$1, workInProgress) {\n if (current$$1 === null) {\n tryToClaimNextHydratableInstance(workInProgress);\n }\n // Nothing to do here. This is terminal. We'll do the completion step\n // immediately after.\n return null;\n}\n\nfunction mountLazyComponent(_current, workInProgress, elementType, updateExpirationTime, renderExpirationTime) {\n if (_current !== null) {\n // An lazy component only mounts if it suspended inside a non-\n // concurrent tree, in an inconsistent state. We want to treat it like\n // a new mount, even though an empty version of it already committed.\n // Disconnect the alternate pointers.\n _current.alternate = null;\n workInProgress.alternate = null;\n // Since this is conceptually a new fiber, schedule a Placement effect\n workInProgress.effectTag |= Placement;\n }\n\n var props = workInProgress.pendingProps;\n // We can't start a User Timing measurement with correct label yet.\n // Cancel and resume right after we know the tag.\n cancelWorkTimer(workInProgress);\n var Component = readLazyComponentType(elementType);\n // Store the unwrapped component in the type.\n workInProgress.type = Component;\n var resolvedTag = workInProgress.tag = resolveLazyComponentTag(Component);\n startWorkTimer(workInProgress);\n var resolvedProps = resolveDefaultProps(Component, props);\n var child = void 0;\n switch (resolvedTag) {\n case FunctionComponent:\n {\n {\n validateFunctionComponentInDev(workInProgress, Component);\n }\n child = updateFunctionComponent(null, workInProgress, Component, resolvedProps, renderExpirationTime);\n break;\n }\n case ClassComponent:\n {\n child = updateClassComponent(null, workInProgress, Component, resolvedProps, renderExpirationTime);\n break;\n }\n case ForwardRef:\n {\n child = updateForwardRef(null, workInProgress, Component, resolvedProps, renderExpirationTime);\n break;\n }\n case MemoComponent:\n {\n {\n if (workInProgress.type !== workInProgress.elementType) {\n var outerPropTypes = Component.propTypes;\n if (outerPropTypes) {\n checkPropTypes(outerPropTypes, resolvedProps, // Resolved for outer only\n 'prop', getComponentName(Component), getCurrentFiberStackInDev);\n }\n }\n }\n child = updateMemoComponent(null, workInProgress, Component, resolveDefaultProps(Component.type, resolvedProps), // The inner type can have defaults too\n updateExpirationTime, renderExpirationTime);\n break;\n }\n default:\n {\n var hint = '';\n {\n if (Component !== null && typeof Component === 'object' && Component.$$typeof === REACT_LAZY_TYPE) {\n hint = ' Did you wrap a component in React.lazy() more than once?';\n }\n }\n // This message intentionally doesn't mention ForwardRef or MemoComponent\n // because the fact that it's a separate type of work is an\n // implementation detail.\n invariant(false, 'Element type is invalid. Received a promise that resolves to: %s. Lazy element type must resolve to a class or function.%s', Component, hint);\n }\n }\n return child;\n}\n\nfunction mountIncompleteClassComponent(_current, workInProgress, Component, nextProps, renderExpirationTime) {\n if (_current !== null) {\n // An incomplete component only mounts if it suspended inside a non-\n // concurrent tree, in an inconsistent state. We want to treat it like\n // a new mount, even though an empty version of it already committed.\n // Disconnect the alternate pointers.\n _current.alternate = null;\n workInProgress.alternate = null;\n // Since this is conceptually a new fiber, schedule a Placement effect\n workInProgress.effectTag |= Placement;\n }\n\n // Promote the fiber to a class and try rendering again.\n workInProgress.tag = ClassComponent;\n\n // The rest of this function is a fork of `updateClassComponent`\n\n // Push context providers early to prevent context stack mismatches.\n // During mounting we don't know the child context yet as the instance doesn't exist.\n // We will invalidate the child context in finishClassComponent() right after rendering.\n var hasContext = void 0;\n if (isContextProvider(Component)) {\n hasContext = true;\n pushContextProvider(workInProgress);\n } else {\n hasContext = false;\n }\n prepareToReadContext(workInProgress, renderExpirationTime);\n\n constructClassInstance(workInProgress, Component, nextProps, renderExpirationTime);\n mountClassInstance(workInProgress, Component, nextProps, renderExpirationTime);\n\n return finishClassComponent(null, workInProgress, Component, true, hasContext, renderExpirationTime);\n}\n\nfunction mountIndeterminateComponent(_current, workInProgress, Component, renderExpirationTime) {\n if (_current !== null) {\n // An indeterminate component only mounts if it suspended inside a non-\n // concurrent tree, in an inconsistent state. We want to treat it like\n // a new mount, even though an empty version of it already committed.\n // Disconnect the alternate pointers.\n _current.alternate = null;\n workInProgress.alternate = null;\n // Since this is conceptually a new fiber, schedule a Placement effect\n workInProgress.effectTag |= Placement;\n }\n\n var props = workInProgress.pendingProps;\n var unmaskedContext = getUnmaskedContext(workInProgress, Component, false);\n var context = getMaskedContext(workInProgress, unmaskedContext);\n\n prepareToReadContext(workInProgress, renderExpirationTime);\n\n var value = void 0;\n\n {\n if (Component.prototype && typeof Component.prototype.render === 'function') {\n var componentName = getComponentName(Component) || 'Unknown';\n\n if (!didWarnAboutBadClass[componentName]) {\n warningWithoutStack$1(false, \"The <%s /> component appears to have a render method, but doesn't extend React.Component. \" + 'This is likely to cause errors. Change %s to extend React.Component instead.', componentName, componentName);\n didWarnAboutBadClass[componentName] = true;\n }\n }\n\n if (workInProgress.mode & StrictMode) {\n ReactStrictModeWarnings.recordLegacyContextWarning(workInProgress, null);\n }\n\n ReactCurrentOwner$3.current = workInProgress;\n value = renderWithHooks(null, workInProgress, Component, props, context, renderExpirationTime);\n }\n // React DevTools reads this flag.\n workInProgress.effectTag |= PerformedWork;\n\n if (typeof value === 'object' && value !== null && typeof value.render === 'function' && value.$$typeof === undefined) {\n // Proceed under the assumption that this is a class instance\n workInProgress.tag = ClassComponent;\n\n // Throw out any hooks that were used.\n resetHooks();\n\n // Push context providers early to prevent context stack mismatches.\n // During mounting we don't know the child context yet as the instance doesn't exist.\n // We will invalidate the child context in finishClassComponent() right after rendering.\n var hasContext = false;\n if (isContextProvider(Component)) {\n hasContext = true;\n pushContextProvider(workInProgress);\n } else {\n hasContext = false;\n }\n\n workInProgress.memoizedState = value.state !== null && value.state !== undefined ? value.state : null;\n\n var getDerivedStateFromProps = Component.getDerivedStateFromProps;\n if (typeof getDerivedStateFromProps === 'function') {\n applyDerivedStateFromProps(workInProgress, Component, getDerivedStateFromProps, props);\n }\n\n adoptClassInstance(workInProgress, value);\n mountClassInstance(workInProgress, Component, props, renderExpirationTime);\n return finishClassComponent(null, workInProgress, Component, true, hasContext, renderExpirationTime);\n } else {\n // Proceed under the assumption that this is a function component\n workInProgress.tag = FunctionComponent;\n {\n if (debugRenderPhaseSideEffects || debugRenderPhaseSideEffectsForStrictMode && workInProgress.mode & StrictMode) {\n // Only double-render components with Hooks\n if (workInProgress.memoizedState !== null) {\n value = renderWithHooks(null, workInProgress, Component, props, context, renderExpirationTime);\n }\n }\n }\n reconcileChildren(null, workInProgress, value, renderExpirationTime);\n {\n validateFunctionComponentInDev(workInProgress, Component);\n }\n return workInProgress.child;\n }\n}\n\nfunction validateFunctionComponentInDev(workInProgress, Component) {\n if (Component) {\n !!Component.childContextTypes ? warningWithoutStack$1(false, '%s(...): childContextTypes cannot be defined on a function component.', Component.displayName || Component.name || 'Component') : void 0;\n }\n if (workInProgress.ref !== null) {\n var info = '';\n var ownerName = getCurrentFiberOwnerNameInDevOrNull();\n if (ownerName) {\n info += '\\n\\nCheck the render method of `' + ownerName + '`.';\n }\n\n var warningKey = ownerName || workInProgress._debugID || '';\n var debugSource = workInProgress._debugSource;\n if (debugSource) {\n warningKey = debugSource.fileName + ':' + debugSource.lineNumber;\n }\n if (!didWarnAboutFunctionRefs[warningKey]) {\n didWarnAboutFunctionRefs[warningKey] = true;\n warning$1(false, 'Function components cannot be given refs. ' + 'Attempts to access this ref will fail. ' + 'Did you mean to use React.forwardRef()?%s', info);\n }\n }\n\n if (typeof Component.getDerivedStateFromProps === 'function') {\n var componentName = getComponentName(Component) || 'Unknown';\n\n if (!didWarnAboutGetDerivedStateOnFunctionComponent[componentName]) {\n warningWithoutStack$1(false, '%s: Function components do not support getDerivedStateFromProps.', componentName);\n didWarnAboutGetDerivedStateOnFunctionComponent[componentName] = true;\n }\n }\n\n if (typeof Component.contextType === 'object' && Component.contextType !== null) {\n var _componentName = getComponentName(Component) || 'Unknown';\n\n if (!didWarnAboutContextTypeOnFunctionComponent[_componentName]) {\n warningWithoutStack$1(false, '%s: Function components do not support contextType.', _componentName);\n didWarnAboutContextTypeOnFunctionComponent[_componentName] = true;\n }\n }\n}\n\nfunction updateSuspenseComponent(current$$1, workInProgress, renderExpirationTime) {\n var mode = workInProgress.mode;\n var nextProps = workInProgress.pendingProps;\n\n // We should attempt to render the primary children unless this boundary\n // already suspended during this render (`alreadyCaptured` is true).\n var nextState = workInProgress.memoizedState;\n\n var nextDidTimeout = void 0;\n if ((workInProgress.effectTag & DidCapture) === NoEffect) {\n // This is the first attempt.\n nextState = null;\n nextDidTimeout = false;\n } else {\n // Something in this boundary's subtree already suspended. Switch to\n // rendering the fallback children.\n nextState = {\n timedOutAt: nextState !== null ? nextState.timedOutAt : NoWork\n };\n nextDidTimeout = true;\n workInProgress.effectTag &= ~DidCapture;\n }\n\n // This next part is a bit confusing. If the children timeout, we switch to\n // showing the fallback children in place of the \"primary\" children.\n // However, we don't want to delete the primary children because then their\n // state will be lost (both the React state and the host state, e.g.\n // uncontrolled form inputs). Instead we keep them mounted and hide them.\n // Both the fallback children AND the primary children are rendered at the\n // same time. Once the primary children are un-suspended, we can delete\n // the fallback children — don't need to preserve their state.\n //\n // The two sets of children are siblings in the host environment, but\n // semantically, for purposes of reconciliation, they are two separate sets.\n // So we store them using two fragment fibers.\n //\n // However, we want to avoid allocating extra fibers for every placeholder.\n // They're only necessary when the children time out, because that's the\n // only time when both sets are mounted.\n //\n // So, the extra fragment fibers are only used if the children time out.\n // Otherwise, we render the primary children directly. This requires some\n // custom reconciliation logic to preserve the state of the primary\n // children. It's essentially a very basic form of re-parenting.\n\n // `child` points to the child fiber. In the normal case, this is the first\n // fiber of the primary children set. In the timed-out case, it's a\n // a fragment fiber containing the primary children.\n var child = void 0;\n // `next` points to the next fiber React should render. In the normal case,\n // it's the same as `child`: the first fiber of the primary children set.\n // In the timed-out case, it's a fragment fiber containing the *fallback*\n // children -- we skip over the primary children entirely.\n var next = void 0;\n if (current$$1 === null) {\n if (enableSuspenseServerRenderer) {\n // If we're currently hydrating, try to hydrate this boundary.\n // But only if this has a fallback.\n if (nextProps.fallback !== undefined) {\n tryToClaimNextHydratableInstance(workInProgress);\n // This could've changed the tag if this was a dehydrated suspense component.\n if (workInProgress.tag === DehydratedSuspenseComponent) {\n return updateDehydratedSuspenseComponent(null, workInProgress, renderExpirationTime);\n }\n }\n }\n\n // This is the initial mount. This branch is pretty simple because there's\n // no previous state that needs to be preserved.\n if (nextDidTimeout) {\n // Mount separate fragments for primary and fallback children.\n var nextFallbackChildren = nextProps.fallback;\n var primaryChildFragment = createFiberFromFragment(null, mode, NoWork, null);\n\n if ((workInProgress.mode & ConcurrentMode) === NoContext) {\n // Outside of concurrent mode, we commit the effects from the\n var progressedState = workInProgress.memoizedState;\n var progressedPrimaryChild = progressedState !== null ? workInProgress.child.child : workInProgress.child;\n primaryChildFragment.child = progressedPrimaryChild;\n }\n\n var fallbackChildFragment = createFiberFromFragment(nextFallbackChildren, mode, renderExpirationTime, null);\n primaryChildFragment.sibling = fallbackChildFragment;\n child = primaryChildFragment;\n // Skip the primary children, and continue working on the\n // fallback children.\n next = fallbackChildFragment;\n child.return = next.return = workInProgress;\n } else {\n // Mount the primary children without an intermediate fragment fiber.\n var nextPrimaryChildren = nextProps.children;\n child = next = mountChildFibers(workInProgress, null, nextPrimaryChildren, renderExpirationTime);\n }\n } else {\n // This is an update. This branch is more complicated because we need to\n // ensure the state of the primary children is preserved.\n var prevState = current$$1.memoizedState;\n var prevDidTimeout = prevState !== null;\n if (prevDidTimeout) {\n // The current tree already timed out. That means each child set is\n var currentPrimaryChildFragment = current$$1.child;\n var currentFallbackChildFragment = currentPrimaryChildFragment.sibling;\n if (nextDidTimeout) {\n // Still timed out. Reuse the current primary children by cloning\n // its fragment. We're going to skip over these entirely.\n var _nextFallbackChildren = nextProps.fallback;\n var _primaryChildFragment = createWorkInProgress(currentPrimaryChildFragment, currentPrimaryChildFragment.pendingProps, NoWork);\n\n if ((workInProgress.mode & ConcurrentMode) === NoContext) {\n // Outside of concurrent mode, we commit the effects from the\n var _progressedState = workInProgress.memoizedState;\n var _progressedPrimaryChild = _progressedState !== null ? workInProgress.child.child : workInProgress.child;\n if (_progressedPrimaryChild !== currentPrimaryChildFragment.child) {\n _primaryChildFragment.child = _progressedPrimaryChild;\n }\n }\n\n // Because primaryChildFragment is a new fiber that we're inserting as the\n // parent of a new tree, we need to set its treeBaseDuration.\n if (enableProfilerTimer && workInProgress.mode & ProfileMode) {\n // treeBaseDuration is the sum of all the child tree base durations.\n var treeBaseDuration = 0;\n var hiddenChild = _primaryChildFragment.child;\n while (hiddenChild !== null) {\n treeBaseDuration += hiddenChild.treeBaseDuration;\n hiddenChild = hiddenChild.sibling;\n }\n _primaryChildFragment.treeBaseDuration = treeBaseDuration;\n }\n\n // Clone the fallback child fragment, too. These we'll continue\n // working on.\n var _fallbackChildFragment = _primaryChildFragment.sibling = createWorkInProgress(currentFallbackChildFragment, _nextFallbackChildren, currentFallbackChildFragment.expirationTime);\n child = _primaryChildFragment;\n _primaryChildFragment.childExpirationTime = NoWork;\n // Skip the primary children, and continue working on the\n // fallback children.\n next = _fallbackChildFragment;\n child.return = next.return = workInProgress;\n } else {\n // No longer suspended. Switch back to showing the primary children,\n // and remove the intermediate fragment fiber.\n var _nextPrimaryChildren = nextProps.children;\n var currentPrimaryChild = currentPrimaryChildFragment.child;\n var primaryChild = reconcileChildFibers(workInProgress, currentPrimaryChild, _nextPrimaryChildren, renderExpirationTime);\n\n // If this render doesn't suspend, we need to delete the fallback\n // children. Wait until the complete phase, after we've confirmed the\n // fallback is no longer needed.\n // TODO: Would it be better to store the fallback fragment on\n // the stateNode?\n\n // Continue rendering the children, like we normally do.\n child = next = primaryChild;\n }\n } else {\n // The current tree has not already timed out. That means the primary\n // children are not wrapped in a fragment fiber.\n var _currentPrimaryChild = current$$1.child;\n if (nextDidTimeout) {\n // Timed out. Wrap the children in a fragment fiber to keep them\n // separate from the fallback children.\n var _nextFallbackChildren2 = nextProps.fallback;\n var _primaryChildFragment2 = createFiberFromFragment(\n // It shouldn't matter what the pending props are because we aren't\n // going to render this fragment.\n null, mode, NoWork, null);\n _primaryChildFragment2.child = _currentPrimaryChild;\n\n // Even though we're creating a new fiber, there are no new children,\n // because we're reusing an already mounted tree. So we don't need to\n // schedule a placement.\n // primaryChildFragment.effectTag |= Placement;\n\n if ((workInProgress.mode & ConcurrentMode) === NoContext) {\n // Outside of concurrent mode, we commit the effects from the\n var _progressedState2 = workInProgress.memoizedState;\n var _progressedPrimaryChild2 = _progressedState2 !== null ? workInProgress.child.child : workInProgress.child;\n _primaryChildFragment2.child = _progressedPrimaryChild2;\n }\n\n // Because primaryChildFragment is a new fiber that we're inserting as the\n // parent of a new tree, we need to set its treeBaseDuration.\n if (enableProfilerTimer && workInProgress.mode & ProfileMode) {\n // treeBaseDuration is the sum of all the child tree base durations.\n var _treeBaseDuration = 0;\n var _hiddenChild = _primaryChildFragment2.child;\n while (_hiddenChild !== null) {\n _treeBaseDuration += _hiddenChild.treeBaseDuration;\n _hiddenChild = _hiddenChild.sibling;\n }\n _primaryChildFragment2.treeBaseDuration = _treeBaseDuration;\n }\n\n // Create a fragment from the fallback children, too.\n var _fallbackChildFragment2 = _primaryChildFragment2.sibling = createFiberFromFragment(_nextFallbackChildren2, mode, renderExpirationTime, null);\n _fallbackChildFragment2.effectTag |= Placement;\n child = _primaryChildFragment2;\n _primaryChildFragment2.childExpirationTime = NoWork;\n // Skip the primary children, and continue working on the\n // fallback children.\n next = _fallbackChildFragment2;\n child.return = next.return = workInProgress;\n } else {\n // Still haven't timed out. Continue rendering the children, like we\n // normally do.\n var _nextPrimaryChildren2 = nextProps.children;\n next = child = reconcileChildFibers(workInProgress, _currentPrimaryChild, _nextPrimaryChildren2, renderExpirationTime);\n }\n }\n workInProgress.stateNode = current$$1.stateNode;\n }\n\n workInProgress.memoizedState = nextState;\n workInProgress.child = child;\n return next;\n}\n\nfunction updateDehydratedSuspenseComponent(current$$1, workInProgress, renderExpirationTime) {\n if (current$$1 === null) {\n // During the first pass, we'll bail out and not drill into the children.\n // Instead, we'll leave the content in place and try to hydrate it later.\n workInProgress.expirationTime = Never;\n return null;\n }\n // We use childExpirationTime to indicate that a child might depend on context, so if\n // any context has changed, we need to treat is as if the input might have changed.\n var hasContextChanged$$1 = current$$1.childExpirationTime >= renderExpirationTime;\n if (didReceiveUpdate || hasContextChanged$$1) {\n // This boundary has changed since the first render. This means that we are now unable to\n // hydrate it. We might still be able to hydrate it using an earlier expiration time but\n // during this render we can't. Instead, we're going to delete the whole subtree and\n // instead inject a new real Suspense boundary to take its place, which may render content\n // or fallback. The real Suspense boundary will suspend for a while so we have some time\n // to ensure it can produce real content, but all state and pending events will be lost.\n\n // Detach from the current dehydrated boundary.\n current$$1.alternate = null;\n workInProgress.alternate = null;\n\n // Insert a deletion in the effect list.\n var returnFiber = workInProgress.return;\n !(returnFiber !== null) ? invariant(false, 'Suspense boundaries are never on the root. This is probably a bug in React.') : void 0;\n var last = returnFiber.lastEffect;\n if (last !== null) {\n last.nextEffect = current$$1;\n returnFiber.lastEffect = current$$1;\n } else {\n returnFiber.firstEffect = returnFiber.lastEffect = current$$1;\n }\n current$$1.nextEffect = null;\n current$$1.effectTag = Deletion;\n\n // Upgrade this work in progress to a real Suspense component.\n workInProgress.tag = SuspenseComponent;\n workInProgress.stateNode = null;\n workInProgress.memoizedState = null;\n // This is now an insertion.\n workInProgress.effectTag |= Placement;\n // Retry as a real Suspense component.\n return updateSuspenseComponent(null, workInProgress, renderExpirationTime);\n }\n if ((workInProgress.effectTag & DidCapture) === NoEffect) {\n // This is the first attempt.\n reenterHydrationStateFromDehydratedSuspenseInstance(workInProgress);\n var nextProps = workInProgress.pendingProps;\n var nextChildren = nextProps.children;\n workInProgress.child = mountChildFibers(workInProgress, null, nextChildren, renderExpirationTime);\n return workInProgress.child;\n } else {\n // Something suspended. Leave the existing children in place.\n // TODO: In non-concurrent mode, should we commit the nodes we have hydrated so far?\n workInProgress.child = null;\n return null;\n }\n}\n\nfunction updatePortalComponent(current$$1, workInProgress, renderExpirationTime) {\n pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n var nextChildren = workInProgress.pendingProps;\n if (current$$1 === null) {\n // Portals are special because we don't append the children during mount\n // but at commit. Therefore we need to track insertions which the normal\n // flow doesn't do during mount. This doesn't happen at the root because\n // the root always starts with a \"current\" with a null child.\n // TODO: Consider unifying this with how the root works.\n workInProgress.child = reconcileChildFibers(workInProgress, null, nextChildren, renderExpirationTime);\n } else {\n reconcileChildren(current$$1, workInProgress, nextChildren, renderExpirationTime);\n }\n return workInProgress.child;\n}\n\nfunction updateContextProvider(current$$1, workInProgress, renderExpirationTime) {\n var providerType = workInProgress.type;\n var context = providerType._context;\n\n var newProps = workInProgress.pendingProps;\n var oldProps = workInProgress.memoizedProps;\n\n var newValue = newProps.value;\n\n {\n var providerPropTypes = workInProgress.type.propTypes;\n\n if (providerPropTypes) {\n checkPropTypes(providerPropTypes, newProps, 'prop', 'Context.Provider', getCurrentFiberStackInDev);\n }\n }\n\n pushProvider(workInProgress, newValue);\n\n if (oldProps !== null) {\n var oldValue = oldProps.value;\n var changedBits = calculateChangedBits(context, newValue, oldValue);\n if (changedBits === 0) {\n // No change. Bailout early if children are the same.\n if (oldProps.children === newProps.children && !hasContextChanged()) {\n return bailoutOnAlreadyFinishedWork(current$$1, workInProgress, renderExpirationTime);\n }\n } else {\n // The context value changed. Search for matching consumers and schedule\n // them to update.\n propagateContextChange(workInProgress, context, changedBits, renderExpirationTime);\n }\n }\n\n var newChildren = newProps.children;\n reconcileChildren(current$$1, workInProgress, newChildren, renderExpirationTime);\n return workInProgress.child;\n}\n\nvar hasWarnedAboutUsingContextAsConsumer = false;\n\nfunction updateContextConsumer(current$$1, workInProgress, renderExpirationTime) {\n var context = workInProgress.type;\n // The logic below for Context differs depending on PROD or DEV mode. In\n // DEV mode, we create a separate object for Context.Consumer that acts\n // like a proxy to Context. This proxy object adds unnecessary code in PROD\n // so we use the old behaviour (Context.Consumer references Context) to\n // reduce size and overhead. The separate object references context via\n // a property called \"_context\", which also gives us the ability to check\n // in DEV mode if this property exists or not and warn if it does not.\n {\n if (context._context === undefined) {\n // This may be because it's a Context (rather than a Consumer).\n // Or it may be because it's older React where they're the same thing.\n // We only want to warn if we're sure it's a new React.\n if (context !== context.Consumer) {\n if (!hasWarnedAboutUsingContextAsConsumer) {\n hasWarnedAboutUsingContextAsConsumer = true;\n warning$1(false, 'Rendering <Context> directly is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Consumer> instead?');\n }\n }\n } else {\n context = context._context;\n }\n }\n var newProps = workInProgress.pendingProps;\n var render = newProps.children;\n\n {\n !(typeof render === 'function') ? warningWithoutStack$1(false, 'A context consumer was rendered with multiple children, or a child ' + \"that isn't a function. A context consumer expects a single child \" + 'that is a function. If you did pass a function, make sure there ' + 'is no trailing or leading whitespace around it.') : void 0;\n }\n\n prepareToReadContext(workInProgress, renderExpirationTime);\n var newValue = readContext(context, newProps.unstable_observedBits);\n var newChildren = void 0;\n {\n ReactCurrentOwner$3.current = workInProgress;\n setCurrentPhase('render');\n newChildren = render(newValue);\n setCurrentPhase(null);\n }\n\n // React DevTools reads this flag.\n workInProgress.effectTag |= PerformedWork;\n reconcileChildren(current$$1, workInProgress, newChildren, renderExpirationTime);\n return workInProgress.child;\n}\n\nfunction markWorkInProgressReceivedUpdate() {\n didReceiveUpdate = true;\n}\n\nfunction bailoutOnAlreadyFinishedWork(current$$1, workInProgress, renderExpirationTime) {\n cancelWorkTimer(workInProgress);\n\n if (current$$1 !== null) {\n // Reuse previous context list\n workInProgress.contextDependencies = current$$1.contextDependencies;\n }\n\n if (enableProfilerTimer) {\n // Don't update \"base\" render times for bailouts.\n stopProfilerTimerIfRunning(workInProgress);\n }\n\n // Check if the children have any pending work.\n var childExpirationTime = workInProgress.childExpirationTime;\n if (childExpirationTime < renderExpirationTime) {\n // The children don't have any work either. We can skip them.\n // TODO: Once we add back resuming, we should check if the children are\n // a work-in-progress set. If so, we need to transfer their effects.\n return null;\n } else {\n // This fiber doesn't have work, but its subtree does. Clone the child\n // fibers and continue.\n cloneChildFibers(current$$1, workInProgress);\n return workInProgress.child;\n }\n}\n\nfunction beginWork(current$$1, workInProgress, renderExpirationTime) {\n var updateExpirationTime = workInProgress.expirationTime;\n\n if (current$$1 !== null) {\n var oldProps = current$$1.memoizedProps;\n var newProps = workInProgress.pendingProps;\n\n if (oldProps !== newProps || hasContextChanged()) {\n // If props or context changed, mark the fiber as having performed work.\n // This may be unset if the props are determined to be equal later (memo).\n didReceiveUpdate = true;\n } else if (updateExpirationTime < renderExpirationTime) {\n didReceiveUpdate = false;\n // This fiber does not have any pending work. Bailout without entering\n // the begin phase. There's still some bookkeeping we that needs to be done\n // in this optimized path, mostly pushing stuff onto the stack.\n switch (workInProgress.tag) {\n case HostRoot:\n pushHostRootContext(workInProgress);\n resetHydrationState();\n break;\n case HostComponent:\n pushHostContext(workInProgress);\n break;\n case ClassComponent:\n {\n var Component = workInProgress.type;\n if (isContextProvider(Component)) {\n pushContextProvider(workInProgress);\n }\n break;\n }\n case HostPortal:\n pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n break;\n case ContextProvider:\n {\n var newValue = workInProgress.memoizedProps.value;\n pushProvider(workInProgress, newValue);\n break;\n }\n case Profiler:\n if (enableProfilerTimer) {\n workInProgress.effectTag |= Update;\n }\n break;\n case SuspenseComponent:\n {\n var state = workInProgress.memoizedState;\n var didTimeout = state !== null;\n if (didTimeout) {\n // If this boundary is currently timed out, we need to decide\n // whether to retry the primary children, or to skip over it and\n // go straight to the fallback. Check the priority of the primary\n var primaryChildFragment = workInProgress.child;\n var primaryChildExpirationTime = primaryChildFragment.childExpirationTime;\n if (primaryChildExpirationTime !== NoWork && primaryChildExpirationTime >= renderExpirationTime) {\n // The primary children have pending work. Use the normal path\n // to attempt to render the primary children again.\n return updateSuspenseComponent(current$$1, workInProgress, renderExpirationTime);\n } else {\n // The primary children do not have pending work with sufficient\n // priority. Bailout.\n var child = bailoutOnAlreadyFinishedWork(current$$1, workInProgress, renderExpirationTime);\n if (child !== null) {\n // The fallback children have pending work. Skip over the\n // primary children and work on the fallback.\n return child.sibling;\n } else {\n return null;\n }\n }\n }\n break;\n }\n case DehydratedSuspenseComponent:\n {\n if (enableSuspenseServerRenderer) {\n // We know that this component will suspend again because if it has\n // been unsuspended it has committed as a regular Suspense component.\n // If it needs to be retried, it should have work scheduled on it.\n workInProgress.effectTag |= DidCapture;\n break;\n }\n }\n }\n return bailoutOnAlreadyFinishedWork(current$$1, workInProgress, renderExpirationTime);\n }\n } else {\n didReceiveUpdate = false;\n }\n\n // Before entering the begin phase, clear the expiration time.\n workInProgress.expirationTime = NoWork;\n\n switch (workInProgress.tag) {\n case IndeterminateComponent:\n {\n var elementType = workInProgress.elementType;\n return mountIndeterminateComponent(current$$1, workInProgress, elementType, renderExpirationTime);\n }\n case LazyComponent:\n {\n var _elementType = workInProgress.elementType;\n return mountLazyComponent(current$$1, workInProgress, _elementType, updateExpirationTime, renderExpirationTime);\n }\n case FunctionComponent:\n {\n var _Component = workInProgress.type;\n var unresolvedProps = workInProgress.pendingProps;\n var resolvedProps = workInProgress.elementType === _Component ? unresolvedProps : resolveDefaultProps(_Component, unresolvedProps);\n return updateFunctionComponent(current$$1, workInProgress, _Component, resolvedProps, renderExpirationTime);\n }\n case ClassComponent:\n {\n var _Component2 = workInProgress.type;\n var _unresolvedProps = workInProgress.pendingProps;\n var _resolvedProps = workInProgress.elementType === _Component2 ? _unresolvedProps : resolveDefaultProps(_Component2, _unresolvedProps);\n return updateClassComponent(current$$1, workInProgress, _Component2, _resolvedProps, renderExpirationTime);\n }\n case HostRoot:\n return updateHostRoot(current$$1, workInProgress, renderExpirationTime);\n case HostComponent:\n return updateHostComponent(current$$1, workInProgress, renderExpirationTime);\n case HostText:\n return updateHostText(current$$1, workInProgress);\n case SuspenseComponent:\n return updateSuspenseComponent(current$$1, workInProgress, renderExpirationTime);\n case HostPortal:\n return updatePortalComponent(current$$1, workInProgress, renderExpirationTime);\n case ForwardRef:\n {\n var type = workInProgress.type;\n var _unresolvedProps2 = workInProgress.pendingProps;\n var _resolvedProps2 = workInProgress.elementType === type ? _unresolvedProps2 : resolveDefaultProps(type, _unresolvedProps2);\n return updateForwardRef(current$$1, workInProgress, type, _resolvedProps2, renderExpirationTime);\n }\n case Fragment:\n return updateFragment(current$$1, workInProgress, renderExpirationTime);\n case Mode:\n return updateMode(current$$1, workInProgress, renderExpirationTime);\n case Profiler:\n return updateProfiler(current$$1, workInProgress, renderExpirationTime);\n case ContextProvider:\n return updateContextProvider(current$$1, workInProgress, renderExpirationTime);\n case ContextConsumer:\n return updateContextConsumer(current$$1, workInProgress, renderExpirationTime);\n case MemoComponent:\n {\n var _type2 = workInProgress.type;\n var _unresolvedProps3 = workInProgress.pendingProps;\n // Resolve outer props first, then resolve inner props.\n var _resolvedProps3 = resolveDefaultProps(_type2, _unresolvedProps3);\n {\n if (workInProgress.type !== workInProgress.elementType) {\n var outerPropTypes = _type2.propTypes;\n if (outerPropTypes) {\n checkPropTypes(outerPropTypes, _resolvedProps3, // Resolved for outer only\n 'prop', getComponentName(_type2), getCurrentFiberStackInDev);\n }\n }\n }\n _resolvedProps3 = resolveDefaultProps(_type2.type, _resolvedProps3);\n return updateMemoComponent(current$$1, workInProgress, _type2, _resolvedProps3, updateExpirationTime, renderExpirationTime);\n }\n case SimpleMemoComponent:\n {\n return updateSimpleMemoComponent(current$$1, workInProgress, workInProgress.type, workInProgress.pendingProps, updateExpirationTime, renderExpirationTime);\n }\n case IncompleteClassComponent:\n {\n var _Component3 = workInProgress.type;\n var _unresolvedProps4 = workInProgress.pendingProps;\n var _resolvedProps4 = workInProgress.elementType === _Component3 ? _unresolvedProps4 : resolveDefaultProps(_Component3, _unresolvedProps4);\n return mountIncompleteClassComponent(current$$1, workInProgress, _Component3, _resolvedProps4, renderExpirationTime);\n }\n case DehydratedSuspenseComponent:\n {\n if (enableSuspenseServerRenderer) {\n return updateDehydratedSuspenseComponent(current$$1, workInProgress, renderExpirationTime);\n }\n break;\n }\n }\n invariant(false, 'Unknown unit of work tag. This error is likely caused by a bug in React. Please file an issue.');\n}\n\nvar valueCursor = createCursor(null);\n\nvar rendererSigil = void 0;\n{\n // Use this to detect multiple renderers using the same context\n rendererSigil = {};\n}\n\nvar currentlyRenderingFiber = null;\nvar lastContextDependency = null;\nvar lastContextWithAllBitsObserved = null;\n\nvar isDisallowedContextReadInDEV = false;\n\nfunction resetContextDependences() {\n // This is called right before React yields execution, to ensure `readContext`\n // cannot be called outside the render phase.\n currentlyRenderingFiber = null;\n lastContextDependency = null;\n lastContextWithAllBitsObserved = null;\n {\n isDisallowedContextReadInDEV = false;\n }\n}\n\nfunction enterDisallowedContextReadInDEV() {\n {\n isDisallowedContextReadInDEV = true;\n }\n}\n\nfunction exitDisallowedContextReadInDEV() {\n {\n isDisallowedContextReadInDEV = false;\n }\n}\n\nfunction pushProvider(providerFiber, nextValue) {\n var context = providerFiber.type._context;\n\n if (isPrimaryRenderer) {\n push(valueCursor, context._currentValue, providerFiber);\n\n context._currentValue = nextValue;\n {\n !(context._currentRenderer === undefined || context._currentRenderer === null || context._currentRenderer === rendererSigil) ? warningWithoutStack$1(false, 'Detected multiple renderers concurrently rendering the ' + 'same context provider. This is currently unsupported.') : void 0;\n context._currentRenderer = rendererSigil;\n }\n } else {\n push(valueCursor, context._currentValue2, providerFiber);\n\n context._currentValue2 = nextValue;\n {\n !(context._currentRenderer2 === undefined || context._currentRenderer2 === null || context._currentRenderer2 === rendererSigil) ? warningWithoutStack$1(false, 'Detected multiple renderers concurrently rendering the ' + 'same context provider. This is currently unsupported.') : void 0;\n context._currentRenderer2 = rendererSigil;\n }\n }\n}\n\nfunction popProvider(providerFiber) {\n var currentValue = valueCursor.current;\n\n pop(valueCursor, providerFiber);\n\n var context = providerFiber.type._context;\n if (isPrimaryRenderer) {\n context._currentValue = currentValue;\n } else {\n context._currentValue2 = currentValue;\n }\n}\n\nfunction calculateChangedBits(context, newValue, oldValue) {\n if (is(oldValue, newValue)) {\n // No change\n return 0;\n } else {\n var changedBits = typeof context._calculateChangedBits === 'function' ? context._calculateChangedBits(oldValue, newValue) : maxSigned31BitInt;\n\n {\n !((changedBits & maxSigned31BitInt) === changedBits) ? warning$1(false, 'calculateChangedBits: Expected the return value to be a ' + '31-bit integer. Instead received: %s', changedBits) : void 0;\n }\n return changedBits | 0;\n }\n}\n\nfunction scheduleWorkOnParentPath(parent, renderExpirationTime) {\n // Update the child expiration time of all the ancestors, including\n // the alternates.\n var node = parent;\n while (node !== null) {\n var alternate = node.alternate;\n if (node.childExpirationTime < renderExpirationTime) {\n node.childExpirationTime = renderExpirationTime;\n if (alternate !== null && alternate.childExpirationTime < renderExpirationTime) {\n alternate.childExpirationTime = renderExpirationTime;\n }\n } else if (alternate !== null && alternate.childExpirationTime < renderExpirationTime) {\n alternate.childExpirationTime = renderExpirationTime;\n } else {\n // Neither alternate was updated, which means the rest of the\n // ancestor path already has sufficient priority.\n break;\n }\n node = node.return;\n }\n}\n\nfunction propagateContextChange(workInProgress, context, changedBits, renderExpirationTime) {\n var fiber = workInProgress.child;\n if (fiber !== null) {\n // Set the return pointer of the child to the work-in-progress fiber.\n fiber.return = workInProgress;\n }\n while (fiber !== null) {\n var nextFiber = void 0;\n\n // Visit this fiber.\n var list = fiber.contextDependencies;\n if (list !== null) {\n nextFiber = fiber.child;\n\n var dependency = list.first;\n while (dependency !== null) {\n // Check if the context matches.\n if (dependency.context === context && (dependency.observedBits & changedBits) !== 0) {\n // Match! Schedule an update on this fiber.\n\n if (fiber.tag === ClassComponent) {\n // Schedule a force update on the work-in-progress.\n var update = createUpdate(renderExpirationTime);\n update.tag = ForceUpdate;\n // TODO: Because we don't have a work-in-progress, this will add the\n // update to the current fiber, too, which means it will persist even if\n // this render is thrown away. Since it's a race condition, not sure it's\n // worth fixing.\n enqueueUpdate(fiber, update);\n }\n\n if (fiber.expirationTime < renderExpirationTime) {\n fiber.expirationTime = renderExpirationTime;\n }\n var alternate = fiber.alternate;\n if (alternate !== null && alternate.expirationTime < renderExpirationTime) {\n alternate.expirationTime = renderExpirationTime;\n }\n\n scheduleWorkOnParentPath(fiber.return, renderExpirationTime);\n\n // Mark the expiration time on the list, too.\n if (list.expirationTime < renderExpirationTime) {\n list.expirationTime = renderExpirationTime;\n }\n\n // Since we already found a match, we can stop traversing the\n // dependency list.\n break;\n }\n dependency = dependency.next;\n }\n } else if (fiber.tag === ContextProvider) {\n // Don't scan deeper if this is a matching provider\n nextFiber = fiber.type === workInProgress.type ? null : fiber.child;\n } else if (enableSuspenseServerRenderer && fiber.tag === DehydratedSuspenseComponent) {\n // If a dehydrated suspense component is in this subtree, we don't know\n // if it will have any context consumers in it. The best we can do is\n // mark it as having updates on its children.\n if (fiber.expirationTime < renderExpirationTime) {\n fiber.expirationTime = renderExpirationTime;\n }\n var _alternate = fiber.alternate;\n if (_alternate !== null && _alternate.expirationTime < renderExpirationTime) {\n _alternate.expirationTime = renderExpirationTime;\n }\n // This is intentionally passing this fiber as the parent\n // because we want to schedule this fiber as having work\n // on its children. We'll use the childExpirationTime on\n // this fiber to indicate that a context has changed.\n scheduleWorkOnParentPath(fiber, renderExpirationTime);\n nextFiber = fiber.sibling;\n } else {\n // Traverse down.\n nextFiber = fiber.child;\n }\n\n if (nextFiber !== null) {\n // Set the return pointer of the child to the work-in-progress fiber.\n nextFiber.return = fiber;\n } else {\n // No child. Traverse to next sibling.\n nextFiber = fiber;\n while (nextFiber !== null) {\n if (nextFiber === workInProgress) {\n // We're back to the root of this subtree. Exit.\n nextFiber = null;\n break;\n }\n var sibling = nextFiber.sibling;\n if (sibling !== null) {\n // Set the return pointer of the sibling to the work-in-progress fiber.\n sibling.return = nextFiber.return;\n nextFiber = sibling;\n break;\n }\n // No more siblings. Traverse up.\n nextFiber = nextFiber.return;\n }\n }\n fiber = nextFiber;\n }\n}\n\nfunction prepareToReadContext(workInProgress, renderExpirationTime) {\n currentlyRenderingFiber = workInProgress;\n lastContextDependency = null;\n lastContextWithAllBitsObserved = null;\n\n var currentDependencies = workInProgress.contextDependencies;\n if (currentDependencies !== null && currentDependencies.expirationTime >= renderExpirationTime) {\n // Context list has a pending update. Mark that this fiber performed work.\n markWorkInProgressReceivedUpdate();\n }\n\n // Reset the work-in-progress list\n workInProgress.contextDependencies = null;\n}\n\nfunction readContext(context, observedBits) {\n {\n // This warning would fire if you read context inside a Hook like useMemo.\n // Unlike the class check below, it's not enforced in production for perf.\n !!isDisallowedContextReadInDEV ? warning$1(false, 'Context can only be read while React is rendering. ' + 'In classes, you can read it in the render method or getDerivedStateFromProps. ' + 'In function components, you can read it directly in the function body, but not ' + 'inside Hooks like useReducer() or useMemo().') : void 0;\n }\n\n if (lastContextWithAllBitsObserved === context) {\n // Nothing to do. We already observe everything in this context.\n } else if (observedBits === false || observedBits === 0) {\n // Do not observe any updates.\n } else {\n var resolvedObservedBits = void 0; // Avoid deopting on observable arguments or heterogeneous types.\n if (typeof observedBits !== 'number' || observedBits === maxSigned31BitInt) {\n // Observe all updates.\n lastContextWithAllBitsObserved = context;\n resolvedObservedBits = maxSigned31BitInt;\n } else {\n resolvedObservedBits = observedBits;\n }\n\n var contextItem = {\n context: context,\n observedBits: resolvedObservedBits,\n next: null\n };\n\n if (lastContextDependency === null) {\n !(currentlyRenderingFiber !== null) ? invariant(false, 'Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo().') : void 0;\n\n // This is the first dependency for this component. Create a new list.\n lastContextDependency = contextItem;\n currentlyRenderingFiber.contextDependencies = {\n first: contextItem,\n expirationTime: NoWork\n };\n } else {\n // Append a new context item.\n lastContextDependency = lastContextDependency.next = contextItem;\n }\n }\n return isPrimaryRenderer ? context._currentValue : context._currentValue2;\n}\n\n// UpdateQueue is a linked list of prioritized updates.\n//\n// Like fibers, update queues come in pairs: a current queue, which represents\n// the visible state of the screen, and a work-in-progress queue, which can be\n// mutated and processed asynchronously before it is committed — a form of\n// double buffering. If a work-in-progress render is discarded before finishing,\n// we create a new work-in-progress by cloning the current queue.\n//\n// Both queues share a persistent, singly-linked list structure. To schedule an\n// update, we append it to the end of both queues. Each queue maintains a\n// pointer to first update in the persistent list that hasn't been processed.\n// The work-in-progress pointer always has a position equal to or greater than\n// the current queue, since we always work on that one. The current queue's\n// pointer is only updated during the commit phase, when we swap in the\n// work-in-progress.\n//\n// For example:\n//\n// Current pointer: A - B - C - D - E - F\n// Work-in-progress pointer: D - E - F\n// ^\n// The work-in-progress queue has\n// processed more updates than current.\n//\n// The reason we append to both queues is because otherwise we might drop\n// updates without ever processing them. For example, if we only add updates to\n// the work-in-progress queue, some updates could be lost whenever a work-in\n// -progress render restarts by cloning from current. Similarly, if we only add\n// updates to the current queue, the updates will be lost whenever an already\n// in-progress queue commits and swaps with the current queue. However, by\n// adding to both queues, we guarantee that the update will be part of the next\n// work-in-progress. (And because the work-in-progress queue becomes the\n// current queue once it commits, there's no danger of applying the same\n// update twice.)\n//\n// Prioritization\n// --------------\n//\n// Updates are not sorted by priority, but by insertion; new updates are always\n// appended to the end of the list.\n//\n// The priority is still important, though. When processing the update queue\n// during the render phase, only the updates with sufficient priority are\n// included in the result. If we skip an update because it has insufficient\n// priority, it remains in the queue to be processed later, during a lower\n// priority render. Crucially, all updates subsequent to a skipped update also\n// remain in the queue *regardless of their priority*. That means high priority\n// updates are sometimes processed twice, at two separate priorities. We also\n// keep track of a base state, that represents the state before the first\n// update in the queue is applied.\n//\n// For example:\n//\n// Given a base state of '', and the following queue of updates\n//\n// A1 - B2 - C1 - D2\n//\n// where the number indicates the priority, and the update is applied to the\n// previous state by appending a letter, React will process these updates as\n// two separate renders, one per distinct priority level:\n//\n// First render, at priority 1:\n// Base state: ''\n// Updates: [A1, C1]\n// Result state: 'AC'\n//\n// Second render, at priority 2:\n// Base state: 'A' <- The base state does not include C1,\n// because B2 was skipped.\n// Updates: [B2, C1, D2] <- C1 was rebased on top of B2\n// Result state: 'ABCD'\n//\n// Because we process updates in insertion order, and rebase high priority\n// updates when preceding updates are skipped, the final result is deterministic\n// regardless of priority. Intermediate state may vary according to system\n// resources, but the final state is always the same.\n\nvar UpdateState = 0;\nvar ReplaceState = 1;\nvar ForceUpdate = 2;\nvar CaptureUpdate = 3;\n\n// Global state that is reset at the beginning of calling `processUpdateQueue`.\n// It should only be read right after calling `processUpdateQueue`, via\n// `checkHasForceUpdateAfterProcessing`.\nvar hasForceUpdate = false;\n\nvar didWarnUpdateInsideUpdate = void 0;\nvar currentlyProcessingQueue = void 0;\nvar resetCurrentlyProcessingQueue = void 0;\n{\n didWarnUpdateInsideUpdate = false;\n currentlyProcessingQueue = null;\n resetCurrentlyProcessingQueue = function () {\n currentlyProcessingQueue = null;\n };\n}\n\nfunction createUpdateQueue(baseState) {\n var queue = {\n baseState: baseState,\n firstUpdate: null,\n lastUpdate: null,\n firstCapturedUpdate: null,\n lastCapturedUpdate: null,\n firstEffect: null,\n lastEffect: null,\n firstCapturedEffect: null,\n lastCapturedEffect: null\n };\n return queue;\n}\n\nfunction cloneUpdateQueue(currentQueue) {\n var queue = {\n baseState: currentQueue.baseState,\n firstUpdate: currentQueue.firstUpdate,\n lastUpdate: currentQueue.lastUpdate,\n\n // TODO: With resuming, if we bail out and resuse the child tree, we should\n // keep these effects.\n firstCapturedUpdate: null,\n lastCapturedUpdate: null,\n\n firstEffect: null,\n lastEffect: null,\n\n firstCapturedEffect: null,\n lastCapturedEffect: null\n };\n return queue;\n}\n\nfunction createUpdate(expirationTime) {\n return {\n expirationTime: expirationTime,\n\n tag: UpdateState,\n payload: null,\n callback: null,\n\n next: null,\n nextEffect: null\n };\n}\n\nfunction appendUpdateToQueue(queue, update) {\n // Append the update to the end of the list.\n if (queue.lastUpdate === null) {\n // Queue is empty\n queue.firstUpdate = queue.lastUpdate = update;\n } else {\n queue.lastUpdate.next = update;\n queue.lastUpdate = update;\n }\n}\n\nfunction enqueueUpdate(fiber, update) {\n // Update queues are created lazily.\n var alternate = fiber.alternate;\n var queue1 = void 0;\n var queue2 = void 0;\n if (alternate === null) {\n // There's only one fiber.\n queue1 = fiber.updateQueue;\n queue2 = null;\n if (queue1 === null) {\n queue1 = fiber.updateQueue = createUpdateQueue(fiber.memoizedState);\n }\n } else {\n // There are two owners.\n queue1 = fiber.updateQueue;\n queue2 = alternate.updateQueue;\n if (queue1 === null) {\n if (queue2 === null) {\n // Neither fiber has an update queue. Create new ones.\n queue1 = fiber.updateQueue = createUpdateQueue(fiber.memoizedState);\n queue2 = alternate.updateQueue = createUpdateQueue(alternate.memoizedState);\n } else {\n // Only one fiber has an update queue. Clone to create a new one.\n queue1 = fiber.updateQueue = cloneUpdateQueue(queue2);\n }\n } else {\n if (queue2 === null) {\n // Only one fiber has an update queue. Clone to create a new one.\n queue2 = alternate.updateQueue = cloneUpdateQueue(queue1);\n } else {\n // Both owners have an update queue.\n }\n }\n }\n if (queue2 === null || queue1 === queue2) {\n // There's only a single queue.\n appendUpdateToQueue(queue1, update);\n } else {\n // There are two queues. We need to append the update to both queues,\n // while accounting for the persistent structure of the list — we don't\n // want the same update to be added multiple times.\n if (queue1.lastUpdate === null || queue2.lastUpdate === null) {\n // One of the queues is not empty. We must add the update to both queues.\n appendUpdateToQueue(queue1, update);\n appendUpdateToQueue(queue2, update);\n } else {\n // Both queues are non-empty. The last update is the same in both lists,\n // because of structural sharing. So, only append to one of the lists.\n appendUpdateToQueue(queue1, update);\n // But we still need to update the `lastUpdate` pointer of queue2.\n queue2.lastUpdate = update;\n }\n }\n\n {\n if (fiber.tag === ClassComponent && (currentlyProcessingQueue === queue1 || queue2 !== null && currentlyProcessingQueue === queue2) && !didWarnUpdateInsideUpdate) {\n warningWithoutStack$1(false, 'An update (setState, replaceState, or forceUpdate) was scheduled ' + 'from inside an update function. Update functions should be pure, ' + 'with zero side-effects. Consider using componentDidUpdate or a ' + 'callback.');\n didWarnUpdateInsideUpdate = true;\n }\n }\n}\n\nfunction enqueueCapturedUpdate(workInProgress, update) {\n // Captured updates go into a separate list, and only on the work-in-\n // progress queue.\n var workInProgressQueue = workInProgress.updateQueue;\n if (workInProgressQueue === null) {\n workInProgressQueue = workInProgress.updateQueue = createUpdateQueue(workInProgress.memoizedState);\n } else {\n // TODO: I put this here rather than createWorkInProgress so that we don't\n // clone the queue unnecessarily. There's probably a better way to\n // structure this.\n workInProgressQueue = ensureWorkInProgressQueueIsAClone(workInProgress, workInProgressQueue);\n }\n\n // Append the update to the end of the list.\n if (workInProgressQueue.lastCapturedUpdate === null) {\n // This is the first render phase update\n workInProgressQueue.firstCapturedUpdate = workInProgressQueue.lastCapturedUpdate = update;\n } else {\n workInProgressQueue.lastCapturedUpdate.next = update;\n workInProgressQueue.lastCapturedUpdate = update;\n }\n}\n\nfunction ensureWorkInProgressQueueIsAClone(workInProgress, queue) {\n var current = workInProgress.alternate;\n if (current !== null) {\n // If the work-in-progress queue is equal to the current queue,\n // we need to clone it first.\n if (queue === current.updateQueue) {\n queue = workInProgress.updateQueue = cloneUpdateQueue(queue);\n }\n }\n return queue;\n}\n\nfunction getStateFromUpdate(workInProgress, queue, update, prevState, nextProps, instance) {\n switch (update.tag) {\n case ReplaceState:\n {\n var _payload = update.payload;\n if (typeof _payload === 'function') {\n // Updater function\n {\n enterDisallowedContextReadInDEV();\n if (debugRenderPhaseSideEffects || debugRenderPhaseSideEffectsForStrictMode && workInProgress.mode & StrictMode) {\n _payload.call(instance, prevState, nextProps);\n }\n }\n var nextState = _payload.call(instance, prevState, nextProps);\n {\n exitDisallowedContextReadInDEV();\n }\n return nextState;\n }\n // State object\n return _payload;\n }\n case CaptureUpdate:\n {\n workInProgress.effectTag = workInProgress.effectTag & ~ShouldCapture | DidCapture;\n }\n // Intentional fallthrough\n case UpdateState:\n {\n var _payload2 = update.payload;\n var partialState = void 0;\n if (typeof _payload2 === 'function') {\n // Updater function\n {\n enterDisallowedContextReadInDEV();\n if (debugRenderPhaseSideEffects || debugRenderPhaseSideEffectsForStrictMode && workInProgress.mode & StrictMode) {\n _payload2.call(instance, prevState, nextProps);\n }\n }\n partialState = _payload2.call(instance, prevState, nextProps);\n {\n exitDisallowedContextReadInDEV();\n }\n } else {\n // Partial state object\n partialState = _payload2;\n }\n if (partialState === null || partialState === undefined) {\n // Null and undefined are treated as no-ops.\n return prevState;\n }\n // Merge the partial state and the previous state.\n return _assign({}, prevState, partialState);\n }\n case ForceUpdate:\n {\n hasForceUpdate = true;\n return prevState;\n }\n }\n return prevState;\n}\n\nfunction processUpdateQueue(workInProgress, queue, props, instance, renderExpirationTime) {\n hasForceUpdate = false;\n\n queue = ensureWorkInProgressQueueIsAClone(workInProgress, queue);\n\n {\n currentlyProcessingQueue = queue;\n }\n\n // These values may change as we process the queue.\n var newBaseState = queue.baseState;\n var newFirstUpdate = null;\n var newExpirationTime = NoWork;\n\n // Iterate through the list of updates to compute the result.\n var update = queue.firstUpdate;\n var resultState = newBaseState;\n while (update !== null) {\n var updateExpirationTime = update.expirationTime;\n if (updateExpirationTime < renderExpirationTime) {\n // This update does not have sufficient priority. Skip it.\n if (newFirstUpdate === null) {\n // This is the first skipped update. It will be the first update in\n // the new list.\n newFirstUpdate = update;\n // Since this is the first update that was skipped, the current result\n // is the new base state.\n newBaseState = resultState;\n }\n // Since this update will remain in the list, update the remaining\n // expiration time.\n if (newExpirationTime < updateExpirationTime) {\n newExpirationTime = updateExpirationTime;\n }\n } else {\n // This update does have sufficient priority. Process it and compute\n // a new result.\n resultState = getStateFromUpdate(workInProgress, queue, update, resultState, props, instance);\n var _callback = update.callback;\n if (_callback !== null) {\n workInProgress.effectTag |= Callback;\n // Set this to null, in case it was mutated during an aborted render.\n update.nextEffect = null;\n if (queue.lastEffect === null) {\n queue.firstEffect = queue.lastEffect = update;\n } else {\n queue.lastEffect.nextEffect = update;\n queue.lastEffect = update;\n }\n }\n }\n // Continue to the next update.\n update = update.next;\n }\n\n // Separately, iterate though the list of captured updates.\n var newFirstCapturedUpdate = null;\n update = queue.firstCapturedUpdate;\n while (update !== null) {\n var _updateExpirationTime = update.expirationTime;\n if (_updateExpirationTime < renderExpirationTime) {\n // This update does not have sufficient priority. Skip it.\n if (newFirstCapturedUpdate === null) {\n // This is the first skipped captured update. It will be the first\n // update in the new list.\n newFirstCapturedUpdate = update;\n // If this is the first update that was skipped, the current result is\n // the new base state.\n if (newFirstUpdate === null) {\n newBaseState = resultState;\n }\n }\n // Since this update will remain in the list, update the remaining\n // expiration time.\n if (newExpirationTime < _updateExpirationTime) {\n newExpirationTime = _updateExpirationTime;\n }\n } else {\n // This update does have sufficient priority. Process it and compute\n // a new result.\n resultState = getStateFromUpdate(workInProgress, queue, update, resultState, props, instance);\n var _callback2 = update.callback;\n if (_callback2 !== null) {\n workInProgress.effectTag |= Callback;\n // Set this to null, in case it was mutated during an aborted render.\n update.nextEffect = null;\n if (queue.lastCapturedEffect === null) {\n queue.firstCapturedEffect = queue.lastCapturedEffect = update;\n } else {\n queue.lastCapturedEffect.nextEffect = update;\n queue.lastCapturedEffect = update;\n }\n }\n }\n update = update.next;\n }\n\n if (newFirstUpdate === null) {\n queue.lastUpdate = null;\n }\n if (newFirstCapturedUpdate === null) {\n queue.lastCapturedUpdate = null;\n } else {\n workInProgress.effectTag |= Callback;\n }\n if (newFirstUpdate === null && newFirstCapturedUpdate === null) {\n // We processed every update, without skipping. That means the new base\n // state is the same as the result state.\n newBaseState = resultState;\n }\n\n queue.baseState = newBaseState;\n queue.firstUpdate = newFirstUpdate;\n queue.firstCapturedUpdate = newFirstCapturedUpdate;\n\n // Set the remaining expiration time to be whatever is remaining in the queue.\n // This should be fine because the only two other things that contribute to\n // expiration time are props and context. We're already in the middle of the\n // begin phase by the time we start processing the queue, so we've already\n // dealt with the props. Context in components that specify\n // shouldComponentUpdate is tricky; but we'll have to account for\n // that regardless.\n workInProgress.expirationTime = newExpirationTime;\n workInProgress.memoizedState = resultState;\n\n {\n currentlyProcessingQueue = null;\n }\n}\n\nfunction callCallback(callback, context) {\n !(typeof callback === 'function') ? invariant(false, 'Invalid argument passed as callback. Expected a function. Instead received: %s', callback) : void 0;\n callback.call(context);\n}\n\nfunction resetHasForceUpdateBeforeProcessing() {\n hasForceUpdate = false;\n}\n\nfunction checkHasForceUpdateAfterProcessing() {\n return hasForceUpdate;\n}\n\nfunction commitUpdateQueue(finishedWork, finishedQueue, instance, renderExpirationTime) {\n // If the finished render included captured updates, and there are still\n // lower priority updates left over, we need to keep the captured updates\n // in the queue so that they are rebased and not dropped once we process the\n // queue again at the lower priority.\n if (finishedQueue.firstCapturedUpdate !== null) {\n // Join the captured update list to the end of the normal list.\n if (finishedQueue.lastUpdate !== null) {\n finishedQueue.lastUpdate.next = finishedQueue.firstCapturedUpdate;\n finishedQueue.lastUpdate = finishedQueue.lastCapturedUpdate;\n }\n // Clear the list of captured updates.\n finishedQueue.firstCapturedUpdate = finishedQueue.lastCapturedUpdate = null;\n }\n\n // Commit the effects\n commitUpdateEffects(finishedQueue.firstEffect, instance);\n finishedQueue.firstEffect = finishedQueue.lastEffect = null;\n\n commitUpdateEffects(finishedQueue.firstCapturedEffect, instance);\n finishedQueue.firstCapturedEffect = finishedQueue.lastCapturedEffect = null;\n}\n\nfunction commitUpdateEffects(effect, instance) {\n while (effect !== null) {\n var _callback3 = effect.callback;\n if (_callback3 !== null) {\n effect.callback = null;\n callCallback(_callback3, instance);\n }\n effect = effect.nextEffect;\n }\n}\n\nfunction createCapturedValue(value, source) {\n // If the value is an error, call this function immediately after it is thrown\n // so the stack is accurate.\n return {\n value: value,\n source: source,\n stack: getStackByFiberInDevAndProd(source)\n };\n}\n\nfunction markUpdate(workInProgress) {\n // Tag the fiber with an update effect. This turns a Placement into\n // a PlacementAndUpdate.\n workInProgress.effectTag |= Update;\n}\n\nfunction markRef$1(workInProgress) {\n workInProgress.effectTag |= Ref;\n}\n\nvar appendAllChildren = void 0;\nvar updateHostContainer = void 0;\nvar updateHostComponent$1 = void 0;\nvar updateHostText$1 = void 0;\nif (supportsMutation) {\n // Mutation mode\n\n appendAllChildren = function (parent, workInProgress, needsVisibilityToggle, isHidden) {\n // We only have the top Fiber that was created but we need recurse down its\n // children to find all the terminal nodes.\n var node = workInProgress.child;\n while (node !== null) {\n if (node.tag === HostComponent || node.tag === HostText) {\n appendInitialChild(parent, node.stateNode);\n } else if (node.tag === HostPortal) {\n // If we have a portal child, then we don't want to traverse\n // down its children. Instead, we'll get insertions from each child in\n // the portal directly.\n } else if (node.child !== null) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n if (node === workInProgress) {\n return;\n }\n while (node.sibling === null) {\n if (node.return === null || node.return === workInProgress) {\n return;\n }\n node = node.return;\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n };\n\n updateHostContainer = function (workInProgress) {\n // Noop\n };\n updateHostComponent$1 = function (current, workInProgress, type, newProps, rootContainerInstance) {\n // If we have an alternate, that means this is an update and we need to\n // schedule a side-effect to do the updates.\n var oldProps = current.memoizedProps;\n if (oldProps === newProps) {\n // In mutation mode, this is sufficient for a bailout because\n // we won't touch this node even if children changed.\n return;\n }\n\n // If we get updated because one of our children updated, we don't\n // have newProps so we'll have to reuse them.\n // TODO: Split the update API as separate for the props vs. children.\n // Even better would be if children weren't special cased at all tho.\n var instance = workInProgress.stateNode;\n var currentHostContext = getHostContext();\n // TODO: Experiencing an error where oldProps is null. Suggests a host\n // component is hitting the resume path. Figure out why. Possibly\n // related to `hidden`.\n var updatePayload = prepareUpdate(instance, type, oldProps, newProps, rootContainerInstance, currentHostContext);\n // TODO: Type this specific to this type of component.\n workInProgress.updateQueue = updatePayload;\n // If the update payload indicates that there is a change or if there\n // is a new ref we mark this as an update. All the work is done in commitWork.\n if (updatePayload) {\n markUpdate(workInProgress);\n }\n };\n updateHostText$1 = function (current, workInProgress, oldText, newText) {\n // If the text differs, mark it as an update. All the work in done in commitWork.\n if (oldText !== newText) {\n markUpdate(workInProgress);\n }\n };\n} else if (supportsPersistence) {\n // Persistent host tree mode\n\n appendAllChildren = function (parent, workInProgress, needsVisibilityToggle, isHidden) {\n // We only have the top Fiber that was created but we need recurse down its\n // children to find all the terminal nodes.\n var node = workInProgress.child;\n while (node !== null) {\n // eslint-disable-next-line no-labels\n branches: if (node.tag === HostComponent) {\n var instance = node.stateNode;\n if (needsVisibilityToggle) {\n var props = node.memoizedProps;\n var type = node.type;\n if (isHidden) {\n // This child is inside a timed out tree. Hide it.\n instance = cloneHiddenInstance(instance, type, props, node);\n } else {\n // This child was previously inside a timed out tree. If it was not\n // updated during this render, it may need to be unhidden. Clone\n // again to be sure.\n instance = cloneUnhiddenInstance(instance, type, props, node);\n }\n node.stateNode = instance;\n }\n appendInitialChild(parent, instance);\n } else if (node.tag === HostText) {\n var _instance = node.stateNode;\n if (needsVisibilityToggle) {\n var text = node.memoizedProps;\n var rootContainerInstance = getRootHostContainer();\n var currentHostContext = getHostContext();\n if (isHidden) {\n _instance = createHiddenTextInstance(text, rootContainerInstance, currentHostContext, workInProgress);\n } else {\n _instance = createTextInstance(text, rootContainerInstance, currentHostContext, workInProgress);\n }\n node.stateNode = _instance;\n }\n appendInitialChild(parent, _instance);\n } else if (node.tag === HostPortal) {\n // If we have a portal child, then we don't want to traverse\n // down its children. Instead, we'll get insertions from each child in\n // the portal directly.\n } else if (node.tag === SuspenseComponent) {\n var current = node.alternate;\n if (current !== null) {\n var oldState = current.memoizedState;\n var newState = node.memoizedState;\n var oldIsHidden = oldState !== null;\n var newIsHidden = newState !== null;\n if (oldIsHidden !== newIsHidden) {\n // The placeholder either just timed out or switched back to the normal\n // children after having previously timed out. Toggle the visibility of\n // the direct host children.\n var primaryChildParent = newIsHidden ? node.child : node;\n if (primaryChildParent !== null) {\n appendAllChildren(parent, primaryChildParent, true, newIsHidden);\n }\n // eslint-disable-next-line no-labels\n break branches;\n }\n }\n if (node.child !== null) {\n // Continue traversing like normal\n node.child.return = node;\n node = node.child;\n continue;\n }\n } else if (node.child !== null) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n // $FlowFixMe This is correct but Flow is confused by the labeled break.\n node = node;\n if (node === workInProgress) {\n return;\n }\n while (node.sibling === null) {\n if (node.return === null || node.return === workInProgress) {\n return;\n }\n node = node.return;\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n };\n\n // An unfortunate fork of appendAllChildren because we have two different parent types.\n var appendAllChildrenToContainer = function (containerChildSet, workInProgress, needsVisibilityToggle, isHidden) {\n // We only have the top Fiber that was created but we need recurse down its\n // children to find all the terminal nodes.\n var node = workInProgress.child;\n while (node !== null) {\n // eslint-disable-next-line no-labels\n branches: if (node.tag === HostComponent) {\n var instance = node.stateNode;\n if (needsVisibilityToggle) {\n var props = node.memoizedProps;\n var type = node.type;\n if (isHidden) {\n // This child is inside a timed out tree. Hide it.\n instance = cloneHiddenInstance(instance, type, props, node);\n } else {\n // This child was previously inside a timed out tree. If it was not\n // updated during this render, it may need to be unhidden. Clone\n // again to be sure.\n instance = cloneUnhiddenInstance(instance, type, props, node);\n }\n node.stateNode = instance;\n }\n appendChildToContainerChildSet(containerChildSet, instance);\n } else if (node.tag === HostText) {\n var _instance2 = node.stateNode;\n if (needsVisibilityToggle) {\n var text = node.memoizedProps;\n var rootContainerInstance = getRootHostContainer();\n var currentHostContext = getHostContext();\n if (isHidden) {\n _instance2 = createHiddenTextInstance(text, rootContainerInstance, currentHostContext, workInProgress);\n } else {\n _instance2 = createTextInstance(text, rootContainerInstance, currentHostContext, workInProgress);\n }\n node.stateNode = _instance2;\n }\n appendChildToContainerChildSet(containerChildSet, _instance2);\n } else if (node.tag === HostPortal) {\n // If we have a portal child, then we don't want to traverse\n // down its children. Instead, we'll get insertions from each child in\n // the portal directly.\n } else if (node.tag === SuspenseComponent) {\n var current = node.alternate;\n if (current !== null) {\n var oldState = current.memoizedState;\n var newState = node.memoizedState;\n var oldIsHidden = oldState !== null;\n var newIsHidden = newState !== null;\n if (oldIsHidden !== newIsHidden) {\n // The placeholder either just timed out or switched back to the normal\n // children after having previously timed out. Toggle the visibility of\n // the direct host children.\n var primaryChildParent = newIsHidden ? node.child : node;\n if (primaryChildParent !== null) {\n appendAllChildrenToContainer(containerChildSet, primaryChildParent, true, newIsHidden);\n }\n // eslint-disable-next-line no-labels\n break branches;\n }\n }\n if (node.child !== null) {\n // Continue traversing like normal\n node.child.return = node;\n node = node.child;\n continue;\n }\n } else if (node.child !== null) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n // $FlowFixMe This is correct but Flow is confused by the labeled break.\n node = node;\n if (node === workInProgress) {\n return;\n }\n while (node.sibling === null) {\n if (node.return === null || node.return === workInProgress) {\n return;\n }\n node = node.return;\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n };\n updateHostContainer = function (workInProgress) {\n var portalOrRoot = workInProgress.stateNode;\n var childrenUnchanged = workInProgress.firstEffect === null;\n if (childrenUnchanged) {\n // No changes, just reuse the existing instance.\n } else {\n var container = portalOrRoot.containerInfo;\n var newChildSet = createContainerChildSet(container);\n // If children might have changed, we have to add them all to the set.\n appendAllChildrenToContainer(newChildSet, workInProgress, false, false);\n portalOrRoot.pendingChildren = newChildSet;\n // Schedule an update on the container to swap out the container.\n markUpdate(workInProgress);\n finalizeContainerChildren(container, newChildSet);\n }\n };\n updateHostComponent$1 = function (current, workInProgress, type, newProps, rootContainerInstance) {\n var currentInstance = current.stateNode;\n var oldProps = current.memoizedProps;\n // If there are no effects associated with this node, then none of our children had any updates.\n // This guarantees that we can reuse all of them.\n var childrenUnchanged = workInProgress.firstEffect === null;\n if (childrenUnchanged && oldProps === newProps) {\n // No changes, just reuse the existing instance.\n // Note that this might release a previous clone.\n workInProgress.stateNode = currentInstance;\n return;\n }\n var recyclableInstance = workInProgress.stateNode;\n var currentHostContext = getHostContext();\n var updatePayload = null;\n if (oldProps !== newProps) {\n updatePayload = prepareUpdate(recyclableInstance, type, oldProps, newProps, rootContainerInstance, currentHostContext);\n }\n if (childrenUnchanged && updatePayload === null) {\n // No changes, just reuse the existing instance.\n // Note that this might release a previous clone.\n workInProgress.stateNode = currentInstance;\n return;\n }\n var newInstance = cloneInstance(currentInstance, updatePayload, type, oldProps, newProps, workInProgress, childrenUnchanged, recyclableInstance);\n if (finalizeInitialChildren(newInstance, type, newProps, rootContainerInstance, currentHostContext)) {\n markUpdate(workInProgress);\n }\n workInProgress.stateNode = newInstance;\n if (childrenUnchanged) {\n // If there are no other effects in this tree, we need to flag this node as having one.\n // Even though we're not going to use it for anything.\n // Otherwise parents won't know that there are new children to propagate upwards.\n markUpdate(workInProgress);\n } else {\n // If children might have changed, we have to add them all to the set.\n appendAllChildren(newInstance, workInProgress, false, false);\n }\n };\n updateHostText$1 = function (current, workInProgress, oldText, newText) {\n if (oldText !== newText) {\n // If the text content differs, we'll create a new text instance for it.\n var rootContainerInstance = getRootHostContainer();\n var currentHostContext = getHostContext();\n workInProgress.stateNode = createTextInstance(newText, rootContainerInstance, currentHostContext, workInProgress);\n // We'll have to mark it as having an effect, even though we won't use the effect for anything.\n // This lets the parents know that at least one of their children has changed.\n markUpdate(workInProgress);\n }\n };\n} else {\n // No host operations\n updateHostContainer = function (workInProgress) {\n // Noop\n };\n updateHostComponent$1 = function (current, workInProgress, type, newProps, rootContainerInstance) {\n // Noop\n };\n updateHostText$1 = function (current, workInProgress, oldText, newText) {\n // Noop\n };\n}\n\nfunction completeWork(current, workInProgress, renderExpirationTime) {\n var newProps = workInProgress.pendingProps;\n\n switch (workInProgress.tag) {\n case IndeterminateComponent:\n break;\n case LazyComponent:\n break;\n case SimpleMemoComponent:\n case FunctionComponent:\n break;\n case ClassComponent:\n {\n var Component = workInProgress.type;\n if (isContextProvider(Component)) {\n popContext(workInProgress);\n }\n break;\n }\n case HostRoot:\n {\n popHostContainer(workInProgress);\n popTopLevelContextObject(workInProgress);\n var fiberRoot = workInProgress.stateNode;\n if (fiberRoot.pendingContext) {\n fiberRoot.context = fiberRoot.pendingContext;\n fiberRoot.pendingContext = null;\n }\n if (current === null || current.child === null) {\n // If we hydrated, pop so that we can delete any remaining children\n // that weren't hydrated.\n popHydrationState(workInProgress);\n // This resets the hacky state to fix isMounted before committing.\n // TODO: Delete this when we delete isMounted and findDOMNode.\n workInProgress.effectTag &= ~Placement;\n }\n updateHostContainer(workInProgress);\n break;\n }\n case HostComponent:\n {\n popHostContext(workInProgress);\n var rootContainerInstance = getRootHostContainer();\n var type = workInProgress.type;\n if (current !== null && workInProgress.stateNode != null) {\n updateHostComponent$1(current, workInProgress, type, newProps, rootContainerInstance);\n\n if (current.ref !== workInProgress.ref) {\n markRef$1(workInProgress);\n }\n } else {\n if (!newProps) {\n !(workInProgress.stateNode !== null) ? invariant(false, 'We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n // This can happen when we abort work.\n break;\n }\n\n var currentHostContext = getHostContext();\n // TODO: Move createInstance to beginWork and keep it on a context\n // \"stack\" as the parent. Then append children as we go in beginWork\n // or completeWork depending on we want to add then top->down or\n // bottom->up. Top->down is faster in IE11.\n var wasHydrated = popHydrationState(workInProgress);\n if (wasHydrated) {\n // TODO: Move this and createInstance step into the beginPhase\n // to consolidate.\n if (prepareToHydrateHostInstance(workInProgress, rootContainerInstance, currentHostContext)) {\n // If changes to the hydrated node needs to be applied at the\n // commit-phase we mark this as such.\n markUpdate(workInProgress);\n }\n } else {\n var instance = createInstance(type, newProps, rootContainerInstance, currentHostContext, workInProgress);\n\n appendAllChildren(instance, workInProgress, false, false);\n\n // Certain renderers require commit-time effects for initial mount.\n // (eg DOM renderer supports auto-focus for certain elements).\n // Make sure such renderers get scheduled for later work.\n if (finalizeInitialChildren(instance, type, newProps, rootContainerInstance, currentHostContext)) {\n markUpdate(workInProgress);\n }\n workInProgress.stateNode = instance;\n }\n\n if (workInProgress.ref !== null) {\n // If there is a ref on a host node we need to schedule a callback\n markRef$1(workInProgress);\n }\n }\n break;\n }\n case HostText:\n {\n var newText = newProps;\n if (current && workInProgress.stateNode != null) {\n var oldText = current.memoizedProps;\n // If we have an alternate, that means this is an update and we need\n // to schedule a side-effect to do the updates.\n updateHostText$1(current, workInProgress, oldText, newText);\n } else {\n if (typeof newText !== 'string') {\n !(workInProgress.stateNode !== null) ? invariant(false, 'We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n // This can happen when we abort work.\n }\n var _rootContainerInstance = getRootHostContainer();\n var _currentHostContext = getHostContext();\n var _wasHydrated = popHydrationState(workInProgress);\n if (_wasHydrated) {\n if (prepareToHydrateHostTextInstance(workInProgress)) {\n markUpdate(workInProgress);\n }\n } else {\n workInProgress.stateNode = createTextInstance(newText, _rootContainerInstance, _currentHostContext, workInProgress);\n }\n }\n break;\n }\n case ForwardRef:\n break;\n case SuspenseComponent:\n {\n var nextState = workInProgress.memoizedState;\n if ((workInProgress.effectTag & DidCapture) !== NoEffect) {\n // Something suspended. Re-render with the fallback children.\n workInProgress.expirationTime = renderExpirationTime;\n // Do not reset the effect list.\n return workInProgress;\n }\n\n var nextDidTimeout = nextState !== null;\n var prevDidTimeout = current !== null && current.memoizedState !== null;\n\n if (current !== null && !nextDidTimeout && prevDidTimeout) {\n // We just switched from the fallback to the normal children. Delete\n // the fallback.\n // TODO: Would it be better to store the fallback fragment on\n var currentFallbackChild = current.child.sibling;\n if (currentFallbackChild !== null) {\n // Deletions go at the beginning of the return fiber's effect list\n var first = workInProgress.firstEffect;\n if (first !== null) {\n workInProgress.firstEffect = currentFallbackChild;\n currentFallbackChild.nextEffect = first;\n } else {\n workInProgress.firstEffect = workInProgress.lastEffect = currentFallbackChild;\n currentFallbackChild.nextEffect = null;\n }\n currentFallbackChild.effectTag = Deletion;\n }\n }\n\n if (nextDidTimeout || prevDidTimeout) {\n // If the children are hidden, or if they were previous hidden, schedule\n // an effect to toggle their visibility. This is also used to attach a\n // retry listener to the promise.\n workInProgress.effectTag |= Update;\n }\n break;\n }\n case Fragment:\n break;\n case Mode:\n break;\n case Profiler:\n break;\n case HostPortal:\n popHostContainer(workInProgress);\n updateHostContainer(workInProgress);\n break;\n case ContextProvider:\n // Pop provider fiber\n popProvider(workInProgress);\n break;\n case ContextConsumer:\n break;\n case MemoComponent:\n break;\n case IncompleteClassComponent:\n {\n // Same as class component case. I put it down here so that the tags are\n // sequential to ensure this switch is compiled to a jump table.\n var _Component = workInProgress.type;\n if (isContextProvider(_Component)) {\n popContext(workInProgress);\n }\n break;\n }\n case DehydratedSuspenseComponent:\n {\n if (enableSuspenseServerRenderer) {\n if (current === null) {\n var _wasHydrated2 = popHydrationState(workInProgress);\n !_wasHydrated2 ? invariant(false, 'A dehydrated suspense component was completed without a hydrated node. This is probably a bug in React.') : void 0;\n skipPastDehydratedSuspenseInstance(workInProgress);\n } else if ((workInProgress.effectTag & DidCapture) === NoEffect) {\n // This boundary did not suspend so it's now hydrated.\n // To handle any future suspense cases, we're going to now upgrade it\n // to a Suspense component. We detach it from the existing current fiber.\n current.alternate = null;\n workInProgress.alternate = null;\n workInProgress.tag = SuspenseComponent;\n workInProgress.memoizedState = null;\n workInProgress.stateNode = null;\n }\n }\n break;\n }\n default:\n invariant(false, 'Unknown unit of work tag. This error is likely caused by a bug in React. Please file an issue.');\n }\n\n return null;\n}\n\nfunction shouldCaptureSuspense(workInProgress) {\n // In order to capture, the Suspense component must have a fallback prop.\n if (workInProgress.memoizedProps.fallback === undefined) {\n return false;\n }\n // If it was the primary children that just suspended, capture and render the\n // fallback. Otherwise, don't capture and bubble to the next boundary.\n var nextState = workInProgress.memoizedState;\n return nextState === null;\n}\n\n// This module is forked in different environments.\n// By default, return `true` to log errors to the console.\n// Forks can return `false` if this isn't desirable.\nfunction showErrorDialog(capturedError) {\n return true;\n}\n\nfunction logCapturedError(capturedError) {\n var logError = showErrorDialog(capturedError);\n\n // Allow injected showErrorDialog() to prevent default console.error logging.\n // This enables renderers like ReactNative to better manage redbox behavior.\n if (logError === false) {\n return;\n }\n\n var error = capturedError.error;\n {\n var componentName = capturedError.componentName,\n componentStack = capturedError.componentStack,\n errorBoundaryName = capturedError.errorBoundaryName,\n errorBoundaryFound = capturedError.errorBoundaryFound,\n willRetry = capturedError.willRetry;\n\n // Browsers support silencing uncaught errors by calling\n // `preventDefault()` in window `error` handler.\n // We record this information as an expando on the error.\n\n if (error != null && error._suppressLogging) {\n if (errorBoundaryFound && willRetry) {\n // The error is recoverable and was silenced.\n // Ignore it and don't print the stack addendum.\n // This is handy for testing error boundaries without noise.\n return;\n }\n // The error is fatal. Since the silencing might have\n // been accidental, we'll surface it anyway.\n // However, the browser would have silenced the original error\n // so we'll print it first, and then print the stack addendum.\n console.error(error);\n // For a more detailed description of this block, see:\n // https://github.com/facebook/react/pull/13384\n }\n\n var componentNameMessage = componentName ? 'The above error occurred in the <' + componentName + '> component:' : 'The above error occurred in one of your React components:';\n\n var errorBoundaryMessage = void 0;\n // errorBoundaryFound check is sufficient; errorBoundaryName check is to satisfy Flow.\n if (errorBoundaryFound && errorBoundaryName) {\n if (willRetry) {\n errorBoundaryMessage = 'React will try to recreate this component tree from scratch ' + ('using the error boundary you provided, ' + errorBoundaryName + '.');\n } else {\n errorBoundaryMessage = 'This error was initially handled by the error boundary ' + errorBoundaryName + '.\\n' + 'Recreating the tree from scratch failed so React will unmount the tree.';\n }\n } else {\n errorBoundaryMessage = 'Consider adding an error boundary to your tree to customize error handling behavior.\\n' + 'Visit https://fb.me/react-error-boundaries to learn more about error boundaries.';\n }\n var combinedMessage = '' + componentNameMessage + componentStack + '\\n\\n' + ('' + errorBoundaryMessage);\n\n // In development, we provide our own message with just the component stack.\n // We don't include the original error message and JS stack because the browser\n // has already printed it. Even if the application swallows the error, it is still\n // displayed by the browser thanks to the DEV-only fake event trick in ReactErrorUtils.\n console.error(combinedMessage);\n }\n}\n\nvar didWarnAboutUndefinedSnapshotBeforeUpdate = null;\n{\n didWarnAboutUndefinedSnapshotBeforeUpdate = new Set();\n}\n\nvar PossiblyWeakSet$1 = typeof WeakSet === 'function' ? WeakSet : Set;\n\nfunction logError(boundary, errorInfo) {\n var source = errorInfo.source;\n var stack = errorInfo.stack;\n if (stack === null && source !== null) {\n stack = getStackByFiberInDevAndProd(source);\n }\n\n var capturedError = {\n componentName: source !== null ? getComponentName(source.type) : null,\n componentStack: stack !== null ? stack : '',\n error: errorInfo.value,\n errorBoundary: null,\n errorBoundaryName: null,\n errorBoundaryFound: false,\n willRetry: false\n };\n\n if (boundary !== null && boundary.tag === ClassComponent) {\n capturedError.errorBoundary = boundary.stateNode;\n capturedError.errorBoundaryName = getComponentName(boundary.type);\n capturedError.errorBoundaryFound = true;\n capturedError.willRetry = true;\n }\n\n try {\n logCapturedError(capturedError);\n } catch (e) {\n // This method must not throw, or React internal state will get messed up.\n // If console.error is overridden, or logCapturedError() shows a dialog that throws,\n // we want to report this error outside of the normal stack as a last resort.\n // https://github.com/facebook/react/issues/13188\n setTimeout(function () {\n throw e;\n });\n }\n}\n\nvar callComponentWillUnmountWithTimer = function (current$$1, instance) {\n startPhaseTimer(current$$1, 'componentWillUnmount');\n instance.props = current$$1.memoizedProps;\n instance.state = current$$1.memoizedState;\n instance.componentWillUnmount();\n stopPhaseTimer();\n};\n\n// Capture errors so they don't interrupt unmounting.\nfunction safelyCallComponentWillUnmount(current$$1, instance) {\n {\n invokeGuardedCallback(null, callComponentWillUnmountWithTimer, null, current$$1, instance);\n if (hasCaughtError()) {\n var unmountError = clearCaughtError();\n captureCommitPhaseError(current$$1, unmountError);\n }\n }\n}\n\nfunction safelyDetachRef(current$$1) {\n var ref = current$$1.ref;\n if (ref !== null) {\n if (typeof ref === 'function') {\n {\n invokeGuardedCallback(null, ref, null, null);\n if (hasCaughtError()) {\n var refError = clearCaughtError();\n captureCommitPhaseError(current$$1, refError);\n }\n }\n } else {\n ref.current = null;\n }\n }\n}\n\nfunction safelyCallDestroy(current$$1, destroy) {\n {\n invokeGuardedCallback(null, destroy, null);\n if (hasCaughtError()) {\n var error = clearCaughtError();\n captureCommitPhaseError(current$$1, error);\n }\n }\n}\n\nfunction commitBeforeMutationLifeCycles(current$$1, finishedWork) {\n switch (finishedWork.tag) {\n case FunctionComponent:\n case ForwardRef:\n case SimpleMemoComponent:\n {\n commitHookEffectList(UnmountSnapshot, NoEffect$1, finishedWork);\n return;\n }\n case ClassComponent:\n {\n if (finishedWork.effectTag & Snapshot) {\n if (current$$1 !== null) {\n var prevProps = current$$1.memoizedProps;\n var prevState = current$$1.memoizedState;\n startPhaseTimer(finishedWork, 'getSnapshotBeforeUpdate');\n var instance = finishedWork.stateNode;\n // We could update instance props and state here,\n // but instead we rely on them being set during last render.\n // TODO: revisit this when we implement resuming.\n {\n if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {\n !(instance.props === finishedWork.memoizedProps) ? warning$1(false, 'Expected %s props to match memoized props before ' + 'getSnapshotBeforeUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance') : void 0;\n !(instance.state === finishedWork.memoizedState) ? warning$1(false, 'Expected %s state to match memoized state before ' + 'getSnapshotBeforeUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance') : void 0;\n }\n }\n var snapshot = instance.getSnapshotBeforeUpdate(finishedWork.elementType === finishedWork.type ? prevProps : resolveDefaultProps(finishedWork.type, prevProps), prevState);\n {\n var didWarnSet = didWarnAboutUndefinedSnapshotBeforeUpdate;\n if (snapshot === undefined && !didWarnSet.has(finishedWork.type)) {\n didWarnSet.add(finishedWork.type);\n warningWithoutStack$1(false, '%s.getSnapshotBeforeUpdate(): A snapshot value (or null) ' + 'must be returned. You have returned undefined.', getComponentName(finishedWork.type));\n }\n }\n instance.__reactInternalSnapshotBeforeUpdate = snapshot;\n stopPhaseTimer();\n }\n }\n return;\n }\n case HostRoot:\n case HostComponent:\n case HostText:\n case HostPortal:\n case IncompleteClassComponent:\n // Nothing to do for these component types\n return;\n default:\n {\n invariant(false, 'This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.');\n }\n }\n}\n\nfunction commitHookEffectList(unmountTag, mountTag, finishedWork) {\n var updateQueue = finishedWork.updateQueue;\n var lastEffect = updateQueue !== null ? updateQueue.lastEffect : null;\n if (lastEffect !== null) {\n var firstEffect = lastEffect.next;\n var effect = firstEffect;\n do {\n if ((effect.tag & unmountTag) !== NoEffect$1) {\n // Unmount\n var destroy = effect.destroy;\n effect.destroy = undefined;\n if (destroy !== undefined) {\n destroy();\n }\n }\n if ((effect.tag & mountTag) !== NoEffect$1) {\n // Mount\n var create = effect.create;\n effect.destroy = create();\n\n {\n var _destroy = effect.destroy;\n if (_destroy !== undefined && typeof _destroy !== 'function') {\n var addendum = void 0;\n if (_destroy === null) {\n addendum = ' You returned null. If your effect does not require clean ' + 'up, return undefined (or nothing).';\n } else if (typeof _destroy.then === 'function') {\n addendum = '\\n\\nIt looks like you wrote useEffect(async () => ...) or returned a Promise. ' + 'Instead, write the async function inside your effect ' + 'and call it immediately:\\n\\n' + 'useEffect(() => {\\n' + ' async function fetchData() {\\n' + ' // You can await here\\n' + ' const response = await MyAPI.getData(someId);\\n' + ' // ...\\n' + ' }\\n' + ' fetchData();\\n' + '}, [someId]); // Or [] if effect doesn\\'t need props or state\\n\\n' + 'Learn more about data fetching with Hooks: https://fb.me/react-hooks-data-fetching';\n } else {\n addendum = ' You returned: ' + _destroy;\n }\n warningWithoutStack$1(false, 'An effect function must not return anything besides a function, ' + 'which is used for clean-up.%s%s', addendum, getStackByFiberInDevAndProd(finishedWork));\n }\n }\n }\n effect = effect.next;\n } while (effect !== firstEffect);\n }\n}\n\nfunction commitPassiveHookEffects(finishedWork) {\n commitHookEffectList(UnmountPassive, NoEffect$1, finishedWork);\n commitHookEffectList(NoEffect$1, MountPassive, finishedWork);\n}\n\nfunction commitLifeCycles(finishedRoot, current$$1, finishedWork, committedExpirationTime) {\n switch (finishedWork.tag) {\n case FunctionComponent:\n case ForwardRef:\n case SimpleMemoComponent:\n {\n commitHookEffectList(UnmountLayout, MountLayout, finishedWork);\n break;\n }\n case ClassComponent:\n {\n var instance = finishedWork.stateNode;\n if (finishedWork.effectTag & Update) {\n if (current$$1 === null) {\n startPhaseTimer(finishedWork, 'componentDidMount');\n // We could update instance props and state here,\n // but instead we rely on them being set during last render.\n // TODO: revisit this when we implement resuming.\n {\n if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {\n !(instance.props === finishedWork.memoizedProps) ? warning$1(false, 'Expected %s props to match memoized props before ' + 'componentDidMount. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance') : void 0;\n !(instance.state === finishedWork.memoizedState) ? warning$1(false, 'Expected %s state to match memoized state before ' + 'componentDidMount. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance') : void 0;\n }\n }\n instance.componentDidMount();\n stopPhaseTimer();\n } else {\n var prevProps = finishedWork.elementType === finishedWork.type ? current$$1.memoizedProps : resolveDefaultProps(finishedWork.type, current$$1.memoizedProps);\n var prevState = current$$1.memoizedState;\n startPhaseTimer(finishedWork, 'componentDidUpdate');\n // We could update instance props and state here,\n // but instead we rely on them being set during last render.\n // TODO: revisit this when we implement resuming.\n {\n if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {\n !(instance.props === finishedWork.memoizedProps) ? warning$1(false, 'Expected %s props to match memoized props before ' + 'componentDidUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance') : void 0;\n !(instance.state === finishedWork.memoizedState) ? warning$1(false, 'Expected %s state to match memoized state before ' + 'componentDidUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance') : void 0;\n }\n }\n instance.componentDidUpdate(prevProps, prevState, instance.__reactInternalSnapshotBeforeUpdate);\n stopPhaseTimer();\n }\n }\n var updateQueue = finishedWork.updateQueue;\n if (updateQueue !== null) {\n {\n if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {\n !(instance.props === finishedWork.memoizedProps) ? warning$1(false, 'Expected %s props to match memoized props before ' + 'processing the update queue. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance') : void 0;\n !(instance.state === finishedWork.memoizedState) ? warning$1(false, 'Expected %s state to match memoized state before ' + 'processing the update queue. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance') : void 0;\n }\n }\n // We could update instance props and state here,\n // but instead we rely on them being set during last render.\n // TODO: revisit this when we implement resuming.\n commitUpdateQueue(finishedWork, updateQueue, instance, committedExpirationTime);\n }\n return;\n }\n case HostRoot:\n {\n var _updateQueue = finishedWork.updateQueue;\n if (_updateQueue !== null) {\n var _instance = null;\n if (finishedWork.child !== null) {\n switch (finishedWork.child.tag) {\n case HostComponent:\n _instance = getPublicInstance(finishedWork.child.stateNode);\n break;\n case ClassComponent:\n _instance = finishedWork.child.stateNode;\n break;\n }\n }\n commitUpdateQueue(finishedWork, _updateQueue, _instance, committedExpirationTime);\n }\n return;\n }\n case HostComponent:\n {\n var _instance2 = finishedWork.stateNode;\n\n // Renderers may schedule work to be done after host components are mounted\n // (eg DOM renderer may schedule auto-focus for inputs and form controls).\n // These effects should only be committed when components are first mounted,\n // aka when there is no current/alternate.\n if (current$$1 === null && finishedWork.effectTag & Update) {\n var type = finishedWork.type;\n var props = finishedWork.memoizedProps;\n commitMount(_instance2, type, props, finishedWork);\n }\n\n return;\n }\n case HostText:\n {\n // We have no life-cycles associated with text.\n return;\n }\n case HostPortal:\n {\n // We have no life-cycles associated with portals.\n return;\n }\n case Profiler:\n {\n if (enableProfilerTimer) {\n var onRender = finishedWork.memoizedProps.onRender;\n\n if (enableSchedulerTracing) {\n onRender(finishedWork.memoizedProps.id, current$$1 === null ? 'mount' : 'update', finishedWork.actualDuration, finishedWork.treeBaseDuration, finishedWork.actualStartTime, getCommitTime(), finishedRoot.memoizedInteractions);\n } else {\n onRender(finishedWork.memoizedProps.id, current$$1 === null ? 'mount' : 'update', finishedWork.actualDuration, finishedWork.treeBaseDuration, finishedWork.actualStartTime, getCommitTime());\n }\n }\n return;\n }\n case SuspenseComponent:\n break;\n case IncompleteClassComponent:\n break;\n default:\n {\n invariant(false, 'This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.');\n }\n }\n}\n\nfunction hideOrUnhideAllChildren(finishedWork, isHidden) {\n if (supportsMutation) {\n // We only have the top Fiber that was inserted but we need to recurse down its\n var node = finishedWork;\n while (true) {\n if (node.tag === HostComponent) {\n var instance = node.stateNode;\n if (isHidden) {\n hideInstance(instance);\n } else {\n unhideInstance(node.stateNode, node.memoizedProps);\n }\n } else if (node.tag === HostText) {\n var _instance3 = node.stateNode;\n if (isHidden) {\n hideTextInstance(_instance3);\n } else {\n unhideTextInstance(_instance3, node.memoizedProps);\n }\n } else if (node.tag === SuspenseComponent && node.memoizedState !== null) {\n // Found a nested Suspense component that timed out. Skip over the\n var fallbackChildFragment = node.child.sibling;\n fallbackChildFragment.return = node;\n node = fallbackChildFragment;\n continue;\n } else if (node.child !== null) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n if (node === finishedWork) {\n return;\n }\n while (node.sibling === null) {\n if (node.return === null || node.return === finishedWork) {\n return;\n }\n node = node.return;\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n }\n}\n\nfunction commitAttachRef(finishedWork) {\n var ref = finishedWork.ref;\n if (ref !== null) {\n var instance = finishedWork.stateNode;\n var instanceToUse = void 0;\n switch (finishedWork.tag) {\n case HostComponent:\n instanceToUse = getPublicInstance(instance);\n break;\n default:\n instanceToUse = instance;\n }\n if (typeof ref === 'function') {\n ref(instanceToUse);\n } else {\n {\n if (!ref.hasOwnProperty('current')) {\n warningWithoutStack$1(false, 'Unexpected ref object provided for %s. ' + 'Use either a ref-setter function or React.createRef().%s', getComponentName(finishedWork.type), getStackByFiberInDevAndProd(finishedWork));\n }\n }\n\n ref.current = instanceToUse;\n }\n }\n}\n\nfunction commitDetachRef(current$$1) {\n var currentRef = current$$1.ref;\n if (currentRef !== null) {\n if (typeof currentRef === 'function') {\n currentRef(null);\n } else {\n currentRef.current = null;\n }\n }\n}\n\n// User-originating errors (lifecycles and refs) should not interrupt\n// deletion, so don't let them throw. Host-originating errors should\n// interrupt deletion, so it's okay\nfunction commitUnmount(current$$1) {\n onCommitUnmount(current$$1);\n\n switch (current$$1.tag) {\n case FunctionComponent:\n case ForwardRef:\n case MemoComponent:\n case SimpleMemoComponent:\n {\n var updateQueue = current$$1.updateQueue;\n if (updateQueue !== null) {\n var lastEffect = updateQueue.lastEffect;\n if (lastEffect !== null) {\n var firstEffect = lastEffect.next;\n var effect = firstEffect;\n do {\n var destroy = effect.destroy;\n if (destroy !== undefined) {\n safelyCallDestroy(current$$1, destroy);\n }\n effect = effect.next;\n } while (effect !== firstEffect);\n }\n }\n break;\n }\n case ClassComponent:\n {\n safelyDetachRef(current$$1);\n var instance = current$$1.stateNode;\n if (typeof instance.componentWillUnmount === 'function') {\n safelyCallComponentWillUnmount(current$$1, instance);\n }\n return;\n }\n case HostComponent:\n {\n safelyDetachRef(current$$1);\n return;\n }\n case HostPortal:\n {\n // TODO: this is recursive.\n // We are also not using this parent because\n // the portal will get pushed immediately.\n if (supportsMutation) {\n unmountHostComponents(current$$1);\n } else if (supportsPersistence) {\n emptyPortalContainer(current$$1);\n }\n return;\n }\n }\n}\n\nfunction commitNestedUnmounts(root) {\n // While we're inside a removed host node we don't want to call\n // removeChild on the inner nodes because they're removed by the top\n // call anyway. We also want to call componentWillUnmount on all\n // composites before this host node is removed from the tree. Therefore\n var node = root;\n while (true) {\n commitUnmount(node);\n // Visit children because they may contain more composite or host nodes.\n // Skip portals because commitUnmount() currently visits them recursively.\n if (node.child !== null && (\n // If we use mutation we drill down into portals using commitUnmount above.\n // If we don't use mutation we drill down into portals here instead.\n !supportsMutation || node.tag !== HostPortal)) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n if (node === root) {\n return;\n }\n while (node.sibling === null) {\n if (node.return === null || node.return === root) {\n return;\n }\n node = node.return;\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n}\n\nfunction detachFiber(current$$1) {\n // Cut off the return pointers to disconnect it from the tree. Ideally, we\n // should clear the child pointer of the parent alternate to let this\n // get GC:ed but we don't know which for sure which parent is the current\n // one so we'll settle for GC:ing the subtree of this child. This child\n // itself will be GC:ed when the parent updates the next time.\n current$$1.return = null;\n current$$1.child = null;\n current$$1.memoizedState = null;\n current$$1.updateQueue = null;\n var alternate = current$$1.alternate;\n if (alternate !== null) {\n alternate.return = null;\n alternate.child = null;\n alternate.memoizedState = null;\n alternate.updateQueue = null;\n }\n}\n\nfunction emptyPortalContainer(current$$1) {\n if (!supportsPersistence) {\n return;\n }\n\n var portal = current$$1.stateNode;\n var containerInfo = portal.containerInfo;\n\n var emptyChildSet = createContainerChildSet(containerInfo);\n replaceContainerChildren(containerInfo, emptyChildSet);\n}\n\nfunction commitContainer(finishedWork) {\n if (!supportsPersistence) {\n return;\n }\n\n switch (finishedWork.tag) {\n case ClassComponent:\n {\n return;\n }\n case HostComponent:\n {\n return;\n }\n case HostText:\n {\n return;\n }\n case HostRoot:\n case HostPortal:\n {\n var portalOrRoot = finishedWork.stateNode;\n var containerInfo = portalOrRoot.containerInfo,\n _pendingChildren = portalOrRoot.pendingChildren;\n\n replaceContainerChildren(containerInfo, _pendingChildren);\n return;\n }\n default:\n {\n invariant(false, 'This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.');\n }\n }\n}\n\nfunction getHostParentFiber(fiber) {\n var parent = fiber.return;\n while (parent !== null) {\n if (isHostParent(parent)) {\n return parent;\n }\n parent = parent.return;\n }\n invariant(false, 'Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.');\n}\n\nfunction isHostParent(fiber) {\n return fiber.tag === HostComponent || fiber.tag === HostRoot || fiber.tag === HostPortal;\n}\n\nfunction getHostSibling(fiber) {\n // We're going to search forward into the tree until we find a sibling host\n // node. Unfortunately, if multiple insertions are done in a row we have to\n // search past them. This leads to exponential search for the next sibling.\n var node = fiber;\n siblings: while (true) {\n // If we didn't find anything, let's try the next sibling.\n while (node.sibling === null) {\n if (node.return === null || isHostParent(node.return)) {\n // If we pop out of the root or hit the parent the fiber we are the\n // last sibling.\n return null;\n }\n node = node.return;\n }\n node.sibling.return = node.return;\n node = node.sibling;\n while (node.tag !== HostComponent && node.tag !== HostText && node.tag !== DehydratedSuspenseComponent) {\n // If it is not host node and, we might have a host node inside it.\n // Try to search down until we find one.\n if (node.effectTag & Placement) {\n // If we don't have a child, try the siblings instead.\n continue siblings;\n }\n // If we don't have a child, try the siblings instead.\n // We also skip portals because they are not part of this host tree.\n if (node.child === null || node.tag === HostPortal) {\n continue siblings;\n } else {\n node.child.return = node;\n node = node.child;\n }\n }\n // Check if this host node is stable or about to be placed.\n if (!(node.effectTag & Placement)) {\n // Found it!\n return node.stateNode;\n }\n }\n}\n\nfunction commitPlacement(finishedWork) {\n if (!supportsMutation) {\n return;\n }\n\n // Recursively insert all host nodes into the parent.\n var parentFiber = getHostParentFiber(finishedWork);\n\n // Note: these two variables *must* always be updated together.\n var parent = void 0;\n var isContainer = void 0;\n\n switch (parentFiber.tag) {\n case HostComponent:\n parent = parentFiber.stateNode;\n isContainer = false;\n break;\n case HostRoot:\n parent = parentFiber.stateNode.containerInfo;\n isContainer = true;\n break;\n case HostPortal:\n parent = parentFiber.stateNode.containerInfo;\n isContainer = true;\n break;\n default:\n invariant(false, 'Invalid host parent fiber. This error is likely caused by a bug in React. Please file an issue.');\n }\n if (parentFiber.effectTag & ContentReset) {\n // Reset the text content of the parent before doing any insertions\n resetTextContent(parent);\n // Clear ContentReset from the effect tag\n parentFiber.effectTag &= ~ContentReset;\n }\n\n var before = getHostSibling(finishedWork);\n // We only have the top Fiber that was inserted but we need to recurse down its\n // children to find all the terminal nodes.\n var node = finishedWork;\n while (true) {\n if (node.tag === HostComponent || node.tag === HostText) {\n if (before) {\n if (isContainer) {\n insertInContainerBefore(parent, node.stateNode, before);\n } else {\n insertBefore(parent, node.stateNode, before);\n }\n } else {\n if (isContainer) {\n appendChildToContainer(parent, node.stateNode);\n } else {\n appendChild(parent, node.stateNode);\n }\n }\n } else if (node.tag === HostPortal) {\n // If the insertion itself is a portal, then we don't want to traverse\n // down its children. Instead, we'll get insertions from each child in\n // the portal directly.\n } else if (node.child !== null) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n if (node === finishedWork) {\n return;\n }\n while (node.sibling === null) {\n if (node.return === null || node.return === finishedWork) {\n return;\n }\n node = node.return;\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n}\n\nfunction unmountHostComponents(current$$1) {\n // We only have the top Fiber that was deleted but we need to recurse down its\n var node = current$$1;\n\n // Each iteration, currentParent is populated with node's host parent if not\n // currentParentIsValid.\n var currentParentIsValid = false;\n\n // Note: these two variables *must* always be updated together.\n var currentParent = void 0;\n var currentParentIsContainer = void 0;\n\n while (true) {\n if (!currentParentIsValid) {\n var parent = node.return;\n findParent: while (true) {\n !(parent !== null) ? invariant(false, 'Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n switch (parent.tag) {\n case HostComponent:\n currentParent = parent.stateNode;\n currentParentIsContainer = false;\n break findParent;\n case HostRoot:\n currentParent = parent.stateNode.containerInfo;\n currentParentIsContainer = true;\n break findParent;\n case HostPortal:\n currentParent = parent.stateNode.containerInfo;\n currentParentIsContainer = true;\n break findParent;\n }\n parent = parent.return;\n }\n currentParentIsValid = true;\n }\n\n if (node.tag === HostComponent || node.tag === HostText) {\n commitNestedUnmounts(node);\n // After all the children have unmounted, it is now safe to remove the\n // node from the tree.\n if (currentParentIsContainer) {\n removeChildFromContainer(currentParent, node.stateNode);\n } else {\n removeChild(currentParent, node.stateNode);\n }\n // Don't visit children because we already visited them.\n } else if (enableSuspenseServerRenderer && node.tag === DehydratedSuspenseComponent) {\n // Delete the dehydrated suspense boundary and all of its content.\n if (currentParentIsContainer) {\n clearSuspenseBoundaryFromContainer(currentParent, node.stateNode);\n } else {\n clearSuspenseBoundary(currentParent, node.stateNode);\n }\n } else if (node.tag === HostPortal) {\n if (node.child !== null) {\n // When we go into a portal, it becomes the parent to remove from.\n // We will reassign it back when we pop the portal on the way up.\n currentParent = node.stateNode.containerInfo;\n currentParentIsContainer = true;\n // Visit children because portals might contain host components.\n node.child.return = node;\n node = node.child;\n continue;\n }\n } else {\n commitUnmount(node);\n // Visit children because we may find more host components below.\n if (node.child !== null) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n }\n if (node === current$$1) {\n return;\n }\n while (node.sibling === null) {\n if (node.return === null || node.return === current$$1) {\n return;\n }\n node = node.return;\n if (node.tag === HostPortal) {\n // When we go out of the portal, we need to restore the parent.\n // Since we don't keep a stack of them, we will search for it.\n currentParentIsValid = false;\n }\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n}\n\nfunction commitDeletion(current$$1) {\n if (supportsMutation) {\n // Recursively delete all host nodes from the parent.\n // Detach refs and call componentWillUnmount() on the whole subtree.\n unmountHostComponents(current$$1);\n } else {\n // Detach refs and call componentWillUnmount() on the whole subtree.\n commitNestedUnmounts(current$$1);\n }\n detachFiber(current$$1);\n}\n\nfunction commitWork(current$$1, finishedWork) {\n if (!supportsMutation) {\n switch (finishedWork.tag) {\n case FunctionComponent:\n case ForwardRef:\n case MemoComponent:\n case SimpleMemoComponent:\n {\n // Note: We currently never use MountMutation, but useLayout uses\n // UnmountMutation.\n commitHookEffectList(UnmountMutation, MountMutation, finishedWork);\n return;\n }\n }\n\n commitContainer(finishedWork);\n return;\n }\n\n switch (finishedWork.tag) {\n case FunctionComponent:\n case ForwardRef:\n case MemoComponent:\n case SimpleMemoComponent:\n {\n // Note: We currently never use MountMutation, but useLayout uses\n // UnmountMutation.\n commitHookEffectList(UnmountMutation, MountMutation, finishedWork);\n return;\n }\n case ClassComponent:\n {\n return;\n }\n case HostComponent:\n {\n var instance = finishedWork.stateNode;\n if (instance != null) {\n // Commit the work prepared earlier.\n var newProps = finishedWork.memoizedProps;\n // For hydration we reuse the update path but we treat the oldProps\n // as the newProps. The updatePayload will contain the real change in\n // this case.\n var oldProps = current$$1 !== null ? current$$1.memoizedProps : newProps;\n var type = finishedWork.type;\n // TODO: Type the updateQueue to be specific to host components.\n var updatePayload = finishedWork.updateQueue;\n finishedWork.updateQueue = null;\n if (updatePayload !== null) {\n commitUpdate(instance, updatePayload, type, oldProps, newProps, finishedWork);\n }\n }\n return;\n }\n case HostText:\n {\n !(finishedWork.stateNode !== null) ? invariant(false, 'This should have a text node initialized. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n var textInstance = finishedWork.stateNode;\n var newText = finishedWork.memoizedProps;\n // For hydration we reuse the update path but we treat the oldProps\n // as the newProps. The updatePayload will contain the real change in\n // this case.\n var oldText = current$$1 !== null ? current$$1.memoizedProps : newText;\n commitTextUpdate(textInstance, oldText, newText);\n return;\n }\n case HostRoot:\n {\n return;\n }\n case Profiler:\n {\n return;\n }\n case SuspenseComponent:\n {\n var newState = finishedWork.memoizedState;\n\n var newDidTimeout = void 0;\n var primaryChildParent = finishedWork;\n if (newState === null) {\n newDidTimeout = false;\n } else {\n newDidTimeout = true;\n primaryChildParent = finishedWork.child;\n if (newState.timedOutAt === NoWork) {\n // If the children had not already timed out, record the time.\n // This is used to compute the elapsed time during subsequent\n // attempts to render the children.\n newState.timedOutAt = requestCurrentTime();\n }\n }\n\n if (primaryChildParent !== null) {\n hideOrUnhideAllChildren(primaryChildParent, newDidTimeout);\n }\n\n // If this boundary just timed out, then it will have a set of thenables.\n // For each thenable, attach a listener so that when it resolves, React\n // attempts to re-render the boundary in the primary (pre-timeout) state.\n var thenables = finishedWork.updateQueue;\n if (thenables !== null) {\n finishedWork.updateQueue = null;\n var retryCache = finishedWork.stateNode;\n if (retryCache === null) {\n retryCache = finishedWork.stateNode = new PossiblyWeakSet$1();\n }\n thenables.forEach(function (thenable) {\n // Memoize using the boundary fiber to prevent redundant listeners.\n var retry = retryTimedOutBoundary.bind(null, finishedWork, thenable);\n if (enableSchedulerTracing) {\n retry = tracing.unstable_wrap(retry);\n }\n if (!retryCache.has(thenable)) {\n retryCache.add(thenable);\n thenable.then(retry, retry);\n }\n });\n }\n\n return;\n }\n case IncompleteClassComponent:\n {\n return;\n }\n default:\n {\n invariant(false, 'This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.');\n }\n }\n}\n\nfunction commitResetTextContent(current$$1) {\n if (!supportsMutation) {\n return;\n }\n resetTextContent(current$$1.stateNode);\n}\n\nvar PossiblyWeakSet = typeof WeakSet === 'function' ? WeakSet : Set;\nvar PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n\nfunction createRootErrorUpdate(fiber, errorInfo, expirationTime) {\n var update = createUpdate(expirationTime);\n // Unmount the root by rendering null.\n update.tag = CaptureUpdate;\n // Caution: React DevTools currently depends on this property\n // being called \"element\".\n update.payload = { element: null };\n var error = errorInfo.value;\n update.callback = function () {\n onUncaughtError(error);\n logError(fiber, errorInfo);\n };\n return update;\n}\n\nfunction createClassErrorUpdate(fiber, errorInfo, expirationTime) {\n var update = createUpdate(expirationTime);\n update.tag = CaptureUpdate;\n var getDerivedStateFromError = fiber.type.getDerivedStateFromError;\n if (typeof getDerivedStateFromError === 'function') {\n var error = errorInfo.value;\n update.payload = function () {\n return getDerivedStateFromError(error);\n };\n }\n\n var inst = fiber.stateNode;\n if (inst !== null && typeof inst.componentDidCatch === 'function') {\n update.callback = function callback() {\n if (typeof getDerivedStateFromError !== 'function') {\n // To preserve the preexisting retry behavior of error boundaries,\n // we keep track of which ones already failed during this batch.\n // This gets reset before we yield back to the browser.\n // TODO: Warn in strict mode if getDerivedStateFromError is\n // not defined.\n markLegacyErrorBoundaryAsFailed(this);\n }\n var error = errorInfo.value;\n var stack = errorInfo.stack;\n logError(fiber, errorInfo);\n this.componentDidCatch(error, {\n componentStack: stack !== null ? stack : ''\n });\n {\n if (typeof getDerivedStateFromError !== 'function') {\n // If componentDidCatch is the only error boundary method defined,\n // then it needs to call setState to recover from errors.\n // If no state update is scheduled then the boundary will swallow the error.\n !(fiber.expirationTime === Sync) ? warningWithoutStack$1(false, '%s: Error boundaries should implement getDerivedStateFromError(). ' + 'In that method, return a state update to display an error message or fallback UI.', getComponentName(fiber.type) || 'Unknown') : void 0;\n }\n }\n };\n }\n return update;\n}\n\nfunction attachPingListener(root, renderExpirationTime, thenable) {\n // Attach a listener to the promise to \"ping\" the root and retry. But\n // only if one does not already exist for the current render expiration\n // time (which acts like a \"thread ID\" here).\n var pingCache = root.pingCache;\n var threadIDs = void 0;\n if (pingCache === null) {\n pingCache = root.pingCache = new PossiblyWeakMap();\n threadIDs = new Set();\n pingCache.set(thenable, threadIDs);\n } else {\n threadIDs = pingCache.get(thenable);\n if (threadIDs === undefined) {\n threadIDs = new Set();\n pingCache.set(thenable, threadIDs);\n }\n }\n if (!threadIDs.has(renderExpirationTime)) {\n // Memoize using the thread ID to prevent redundant listeners.\n threadIDs.add(renderExpirationTime);\n var ping = pingSuspendedRoot.bind(null, root, thenable, renderExpirationTime);\n if (enableSchedulerTracing) {\n ping = tracing.unstable_wrap(ping);\n }\n thenable.then(ping, ping);\n }\n}\n\nfunction throwException(root, returnFiber, sourceFiber, value, renderExpirationTime) {\n // The source fiber did not complete.\n sourceFiber.effectTag |= Incomplete;\n // Its effect list is no longer valid.\n sourceFiber.firstEffect = sourceFiber.lastEffect = null;\n\n if (value !== null && typeof value === 'object' && typeof value.then === 'function') {\n // This is a thenable.\n var thenable = value;\n\n // Find the earliest timeout threshold of all the placeholders in the\n // ancestor path. We could avoid this traversal by storing the thresholds on\n // the stack, but we choose not to because we only hit this path if we're\n // IO-bound (i.e. if something suspends). Whereas the stack is used even in\n // the non-IO- bound case.\n var _workInProgress = returnFiber;\n var earliestTimeoutMs = -1;\n var startTimeMs = -1;\n do {\n if (_workInProgress.tag === SuspenseComponent) {\n var current$$1 = _workInProgress.alternate;\n if (current$$1 !== null) {\n var currentState = current$$1.memoizedState;\n if (currentState !== null) {\n // Reached a boundary that already timed out. Do not search\n // any further.\n var timedOutAt = currentState.timedOutAt;\n startTimeMs = expirationTimeToMs(timedOutAt);\n // Do not search any further.\n break;\n }\n }\n var timeoutPropMs = _workInProgress.pendingProps.maxDuration;\n if (typeof timeoutPropMs === 'number') {\n if (timeoutPropMs <= 0) {\n earliestTimeoutMs = 0;\n } else if (earliestTimeoutMs === -1 || timeoutPropMs < earliestTimeoutMs) {\n earliestTimeoutMs = timeoutPropMs;\n }\n }\n }\n // If there is a DehydratedSuspenseComponent we don't have to do anything because\n // if something suspends inside it, we will simply leave that as dehydrated. It\n // will never timeout.\n _workInProgress = _workInProgress.return;\n } while (_workInProgress !== null);\n\n // Schedule the nearest Suspense to re-render the timed out view.\n _workInProgress = returnFiber;\n do {\n if (_workInProgress.tag === SuspenseComponent && shouldCaptureSuspense(_workInProgress)) {\n // Found the nearest boundary.\n\n // Stash the promise on the boundary fiber. If the boundary times out, we'll\n var thenables = _workInProgress.updateQueue;\n if (thenables === null) {\n var updateQueue = new Set();\n updateQueue.add(thenable);\n _workInProgress.updateQueue = updateQueue;\n } else {\n thenables.add(thenable);\n }\n\n // If the boundary is outside of concurrent mode, we should *not*\n // suspend the commit. Pretend as if the suspended component rendered\n // null and keep rendering. In the commit phase, we'll schedule a\n // subsequent synchronous update to re-render the Suspense.\n //\n // Note: It doesn't matter whether the component that suspended was\n // inside a concurrent mode tree. If the Suspense is outside of it, we\n // should *not* suspend the commit.\n if ((_workInProgress.mode & ConcurrentMode) === NoEffect) {\n _workInProgress.effectTag |= DidCapture;\n\n // We're going to commit this fiber even though it didn't complete.\n // But we shouldn't call any lifecycle methods or callbacks. Remove\n // all lifecycle effect tags.\n sourceFiber.effectTag &= ~(LifecycleEffectMask | Incomplete);\n\n if (sourceFiber.tag === ClassComponent) {\n var currentSourceFiber = sourceFiber.alternate;\n if (currentSourceFiber === null) {\n // This is a new mount. Change the tag so it's not mistaken for a\n // completed class component. For example, we should not call\n // componentWillUnmount if it is deleted.\n sourceFiber.tag = IncompleteClassComponent;\n } else {\n // When we try rendering again, we should not reuse the current fiber,\n // since it's known to be in an inconsistent state. Use a force updte to\n // prevent a bail out.\n var update = createUpdate(Sync);\n update.tag = ForceUpdate;\n enqueueUpdate(sourceFiber, update);\n }\n }\n\n // The source fiber did not complete. Mark it with Sync priority to\n // indicate that it still has pending work.\n sourceFiber.expirationTime = Sync;\n\n // Exit without suspending.\n return;\n }\n\n // Confirmed that the boundary is in a concurrent mode tree. Continue\n // with the normal suspend path.\n\n attachPingListener(root, renderExpirationTime, thenable);\n\n var absoluteTimeoutMs = void 0;\n if (earliestTimeoutMs === -1) {\n // If no explicit threshold is given, default to an arbitrarily large\n // value. The actual size doesn't matter because the threshold for the\n // whole tree will be clamped to the expiration time.\n absoluteTimeoutMs = maxSigned31BitInt;\n } else {\n if (startTimeMs === -1) {\n // This suspend happened outside of any already timed-out\n // placeholders. We don't know exactly when the update was\n // scheduled, but we can infer an approximate start time from the\n // expiration time. First, find the earliest uncommitted expiration\n // time in the tree, including work that is suspended. Then subtract\n // the offset used to compute an async update's expiration time.\n // This will cause high priority (interactive) work to expire\n // earlier than necessary, but we can account for this by adjusting\n // for the Just Noticeable Difference.\n var earliestExpirationTime = findEarliestOutstandingPriorityLevel(root, renderExpirationTime);\n var earliestExpirationTimeMs = expirationTimeToMs(earliestExpirationTime);\n startTimeMs = earliestExpirationTimeMs - LOW_PRIORITY_EXPIRATION;\n }\n absoluteTimeoutMs = startTimeMs + earliestTimeoutMs;\n }\n\n // Mark the earliest timeout in the suspended fiber's ancestor path.\n // After completing the root, we'll take the largest of all the\n // suspended fiber's timeouts and use it to compute a timeout for the\n // whole tree.\n renderDidSuspend(root, absoluteTimeoutMs, renderExpirationTime);\n\n _workInProgress.effectTag |= ShouldCapture;\n _workInProgress.expirationTime = renderExpirationTime;\n return;\n } else if (enableSuspenseServerRenderer && _workInProgress.tag === DehydratedSuspenseComponent) {\n attachPingListener(root, renderExpirationTime, thenable);\n\n // Since we already have a current fiber, we can eagerly add a retry listener.\n var retryCache = _workInProgress.memoizedState;\n if (retryCache === null) {\n retryCache = _workInProgress.memoizedState = new PossiblyWeakSet();\n var _current = _workInProgress.alternate;\n !_current ? invariant(false, 'A dehydrated suspense boundary must commit before trying to render. This is probably a bug in React.') : void 0;\n _current.memoizedState = retryCache;\n }\n // Memoize using the boundary fiber to prevent redundant listeners.\n if (!retryCache.has(thenable)) {\n retryCache.add(thenable);\n var retry = retryTimedOutBoundary.bind(null, _workInProgress, thenable);\n if (enableSchedulerTracing) {\n retry = tracing.unstable_wrap(retry);\n }\n thenable.then(retry, retry);\n }\n _workInProgress.effectTag |= ShouldCapture;\n _workInProgress.expirationTime = renderExpirationTime;\n return;\n }\n // This boundary already captured during this render. Continue to the next\n // boundary.\n _workInProgress = _workInProgress.return;\n } while (_workInProgress !== null);\n // No boundary was found. Fallthrough to error mode.\n // TODO: Use invariant so the message is stripped in prod?\n value = new Error((getComponentName(sourceFiber.type) || 'A React component') + ' suspended while rendering, but no fallback UI was specified.\\n' + '\\n' + 'Add a <Suspense fallback=...> component higher in the tree to ' + 'provide a loading indicator or placeholder to display.' + getStackByFiberInDevAndProd(sourceFiber));\n }\n\n // We didn't find a boundary that could handle this type of exception. Start\n // over and traverse parent path again, this time treating the exception\n // as an error.\n renderDidError();\n value = createCapturedValue(value, sourceFiber);\n var workInProgress = returnFiber;\n do {\n switch (workInProgress.tag) {\n case HostRoot:\n {\n var _errorInfo = value;\n workInProgress.effectTag |= ShouldCapture;\n workInProgress.expirationTime = renderExpirationTime;\n var _update = createRootErrorUpdate(workInProgress, _errorInfo, renderExpirationTime);\n enqueueCapturedUpdate(workInProgress, _update);\n return;\n }\n case ClassComponent:\n // Capture and retry\n var errorInfo = value;\n var ctor = workInProgress.type;\n var instance = workInProgress.stateNode;\n if ((workInProgress.effectTag & DidCapture) === NoEffect && (typeof ctor.getDerivedStateFromError === 'function' || instance !== null && typeof instance.componentDidCatch === 'function' && !isAlreadyFailedLegacyErrorBoundary(instance))) {\n workInProgress.effectTag |= ShouldCapture;\n workInProgress.expirationTime = renderExpirationTime;\n // Schedule the error boundary to re-render using updated state\n var _update2 = createClassErrorUpdate(workInProgress, errorInfo, renderExpirationTime);\n enqueueCapturedUpdate(workInProgress, _update2);\n return;\n }\n break;\n default:\n break;\n }\n workInProgress = workInProgress.return;\n } while (workInProgress !== null);\n}\n\nfunction unwindWork(workInProgress, renderExpirationTime) {\n switch (workInProgress.tag) {\n case ClassComponent:\n {\n var Component = workInProgress.type;\n if (isContextProvider(Component)) {\n popContext(workInProgress);\n }\n var effectTag = workInProgress.effectTag;\n if (effectTag & ShouldCapture) {\n workInProgress.effectTag = effectTag & ~ShouldCapture | DidCapture;\n return workInProgress;\n }\n return null;\n }\n case HostRoot:\n {\n popHostContainer(workInProgress);\n popTopLevelContextObject(workInProgress);\n var _effectTag = workInProgress.effectTag;\n !((_effectTag & DidCapture) === NoEffect) ? invariant(false, 'The root failed to unmount after an error. This is likely a bug in React. Please file an issue.') : void 0;\n workInProgress.effectTag = _effectTag & ~ShouldCapture | DidCapture;\n return workInProgress;\n }\n case HostComponent:\n {\n // TODO: popHydrationState\n popHostContext(workInProgress);\n return null;\n }\n case SuspenseComponent:\n {\n var _effectTag2 = workInProgress.effectTag;\n if (_effectTag2 & ShouldCapture) {\n workInProgress.effectTag = _effectTag2 & ~ShouldCapture | DidCapture;\n // Captured a suspense effect. Re-render the boundary.\n return workInProgress;\n }\n return null;\n }\n case DehydratedSuspenseComponent:\n {\n if (enableSuspenseServerRenderer) {\n // TODO: popHydrationState\n var _effectTag3 = workInProgress.effectTag;\n if (_effectTag3 & ShouldCapture) {\n workInProgress.effectTag = _effectTag3 & ~ShouldCapture | DidCapture;\n // Captured a suspense effect. Re-render the boundary.\n return workInProgress;\n }\n }\n return null;\n }\n case HostPortal:\n popHostContainer(workInProgress);\n return null;\n case ContextProvider:\n popProvider(workInProgress);\n return null;\n default:\n return null;\n }\n}\n\nfunction unwindInterruptedWork(interruptedWork) {\n switch (interruptedWork.tag) {\n case ClassComponent:\n {\n var childContextTypes = interruptedWork.type.childContextTypes;\n if (childContextTypes !== null && childContextTypes !== undefined) {\n popContext(interruptedWork);\n }\n break;\n }\n case HostRoot:\n {\n popHostContainer(interruptedWork);\n popTopLevelContextObject(interruptedWork);\n break;\n }\n case HostComponent:\n {\n popHostContext(interruptedWork);\n break;\n }\n case HostPortal:\n popHostContainer(interruptedWork);\n break;\n case ContextProvider:\n popProvider(interruptedWork);\n break;\n default:\n break;\n }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar ReactCurrentOwner$2 = ReactSharedInternals.ReactCurrentOwner;\n\n\nvar didWarnAboutStateTransition = void 0;\nvar didWarnSetStateChildContext = void 0;\nvar warnAboutUpdateOnUnmounted = void 0;\nvar warnAboutInvalidUpdates = void 0;\n\nif (enableSchedulerTracing) {\n // Provide explicit error message when production+profiling bundle of e.g. react-dom\n // is used with production (non-profiling) bundle of scheduler/tracing\n !(tracing.__interactionsRef != null && tracing.__interactionsRef.current != null) ? invariant(false, 'It is not supported to run the profiling version of a renderer (for example, `react-dom/profiling`) without also replacing the `scheduler/tracing` module with `scheduler/tracing-profiling`. Your bundler might have a setting for aliasing both modules. Learn more at http://fb.me/react-profiling') : void 0;\n}\n\n{\n didWarnAboutStateTransition = false;\n didWarnSetStateChildContext = false;\n var didWarnStateUpdateForUnmountedComponent = {};\n\n warnAboutUpdateOnUnmounted = function (fiber, isClass) {\n // We show the whole stack but dedupe on the top component's name because\n // the problematic code almost always lies inside that component.\n var componentName = getComponentName(fiber.type) || 'ReactComponent';\n if (didWarnStateUpdateForUnmountedComponent[componentName]) {\n return;\n }\n warningWithoutStack$1(false, \"Can't perform a React state update on an unmounted component. This \" + 'is a no-op, but it indicates a memory leak in your application. To ' + 'fix, cancel all subscriptions and asynchronous tasks in %s.%s', isClass ? 'the componentWillUnmount method' : 'a useEffect cleanup function', getStackByFiberInDevAndProd(fiber));\n didWarnStateUpdateForUnmountedComponent[componentName] = true;\n };\n\n warnAboutInvalidUpdates = function (instance) {\n switch (phase) {\n case 'getChildContext':\n if (didWarnSetStateChildContext) {\n return;\n }\n warningWithoutStack$1(false, 'setState(...): Cannot call setState() inside getChildContext()');\n didWarnSetStateChildContext = true;\n break;\n case 'render':\n if (didWarnAboutStateTransition) {\n return;\n }\n warningWithoutStack$1(false, 'Cannot update during an existing state transition (such as within ' + '`render`). Render methods should be a pure function of props and state.');\n didWarnAboutStateTransition = true;\n break;\n }\n };\n}\n\n// Used to ensure computeUniqueAsyncExpiration is monotonically decreasing.\nvar lastUniqueAsyncExpiration = Sync - 1;\n\nvar isWorking = false;\n\n// The next work in progress fiber that we're currently working on.\nvar nextUnitOfWork = null;\nvar nextRoot = null;\n// The time at which we're currently rendering work.\nvar nextRenderExpirationTime = NoWork;\nvar nextLatestAbsoluteTimeoutMs = -1;\nvar nextRenderDidError = false;\n\n// The next fiber with an effect that we're currently committing.\nvar nextEffect = null;\n\nvar isCommitting$1 = false;\nvar rootWithPendingPassiveEffects = null;\nvar passiveEffectCallbackHandle = null;\nvar passiveEffectCallback = null;\n\nvar legacyErrorBoundariesThatAlreadyFailed = null;\n\n// Used for performance tracking.\nvar interruptedBy = null;\n\nvar stashedWorkInProgressProperties = void 0;\nvar replayUnitOfWork = void 0;\nvar mayReplayFailedUnitOfWork = void 0;\nvar isReplayingFailedUnitOfWork = void 0;\nvar originalReplayError = void 0;\nvar rethrowOriginalError = void 0;\nif ( true && replayFailedUnitOfWorkWithInvokeGuardedCallback) {\n stashedWorkInProgressProperties = null;\n mayReplayFailedUnitOfWork = true;\n isReplayingFailedUnitOfWork = false;\n originalReplayError = null;\n replayUnitOfWork = function (failedUnitOfWork, thrownValue, isYieldy) {\n if (thrownValue !== null && typeof thrownValue === 'object' && typeof thrownValue.then === 'function') {\n // Don't replay promises. Treat everything else like an error.\n // TODO: Need to figure out a different strategy if/when we add\n // support for catching other types.\n return;\n }\n\n // Restore the original state of the work-in-progress\n if (stashedWorkInProgressProperties === null) {\n // This should never happen. Don't throw because this code is DEV-only.\n warningWithoutStack$1(false, 'Could not replay rendering after an error. This is likely a bug in React. ' + 'Please file an issue.');\n return;\n }\n assignFiberPropertiesInDEV(failedUnitOfWork, stashedWorkInProgressProperties);\n\n switch (failedUnitOfWork.tag) {\n case HostRoot:\n popHostContainer(failedUnitOfWork);\n popTopLevelContextObject(failedUnitOfWork);\n break;\n case HostComponent:\n popHostContext(failedUnitOfWork);\n break;\n case ClassComponent:\n {\n var Component = failedUnitOfWork.type;\n if (isContextProvider(Component)) {\n popContext(failedUnitOfWork);\n }\n break;\n }\n case HostPortal:\n popHostContainer(failedUnitOfWork);\n break;\n case ContextProvider:\n popProvider(failedUnitOfWork);\n break;\n }\n // Replay the begin phase.\n isReplayingFailedUnitOfWork = true;\n originalReplayError = thrownValue;\n invokeGuardedCallback(null, workLoop, null, isYieldy);\n isReplayingFailedUnitOfWork = false;\n originalReplayError = null;\n if (hasCaughtError()) {\n var replayError = clearCaughtError();\n if (replayError != null && thrownValue != null) {\n try {\n // Reading the expando property is intentionally\n // inside `try` because it might be a getter or Proxy.\n if (replayError._suppressLogging) {\n // Also suppress logging for the original error.\n thrownValue._suppressLogging = true;\n }\n } catch (inner) {\n // Ignore.\n }\n }\n } else {\n // If the begin phase did not fail the second time, set this pointer\n // back to the original value.\n nextUnitOfWork = failedUnitOfWork;\n }\n };\n rethrowOriginalError = function () {\n throw originalReplayError;\n };\n}\n\nfunction resetStack() {\n if (nextUnitOfWork !== null) {\n var interruptedWork = nextUnitOfWork.return;\n while (interruptedWork !== null) {\n unwindInterruptedWork(interruptedWork);\n interruptedWork = interruptedWork.return;\n }\n }\n\n {\n ReactStrictModeWarnings.discardPendingWarnings();\n checkThatStackIsEmpty();\n }\n\n nextRoot = null;\n nextRenderExpirationTime = NoWork;\n nextLatestAbsoluteTimeoutMs = -1;\n nextRenderDidError = false;\n nextUnitOfWork = null;\n}\n\nfunction commitAllHostEffects() {\n while (nextEffect !== null) {\n {\n setCurrentFiber(nextEffect);\n }\n recordEffect();\n\n var effectTag = nextEffect.effectTag;\n\n if (effectTag & ContentReset) {\n commitResetTextContent(nextEffect);\n }\n\n if (effectTag & Ref) {\n var current$$1 = nextEffect.alternate;\n if (current$$1 !== null) {\n commitDetachRef(current$$1);\n }\n }\n\n // The following switch statement is only concerned about placement,\n // updates, and deletions. To avoid needing to add a case for every\n // possible bitmap value, we remove the secondary effects from the\n // effect tag and switch on that value.\n var primaryEffectTag = effectTag & (Placement | Update | Deletion);\n switch (primaryEffectTag) {\n case Placement:\n {\n commitPlacement(nextEffect);\n // Clear the \"placement\" from effect tag so that we know that this is inserted, before\n // any life-cycles like componentDidMount gets called.\n // TODO: findDOMNode doesn't rely on this any more but isMounted\n // does and isMounted is deprecated anyway so we should be able\n // to kill this.\n nextEffect.effectTag &= ~Placement;\n break;\n }\n case PlacementAndUpdate:\n {\n // Placement\n commitPlacement(nextEffect);\n // Clear the \"placement\" from effect tag so that we know that this is inserted, before\n // any life-cycles like componentDidMount gets called.\n nextEffect.effectTag &= ~Placement;\n\n // Update\n var _current = nextEffect.alternate;\n commitWork(_current, nextEffect);\n break;\n }\n case Update:\n {\n var _current2 = nextEffect.alternate;\n commitWork(_current2, nextEffect);\n break;\n }\n case Deletion:\n {\n commitDeletion(nextEffect);\n break;\n }\n }\n nextEffect = nextEffect.nextEffect;\n }\n\n {\n resetCurrentFiber();\n }\n}\n\nfunction commitBeforeMutationLifecycles() {\n while (nextEffect !== null) {\n {\n setCurrentFiber(nextEffect);\n }\n\n var effectTag = nextEffect.effectTag;\n if (effectTag & Snapshot) {\n recordEffect();\n var current$$1 = nextEffect.alternate;\n commitBeforeMutationLifeCycles(current$$1, nextEffect);\n }\n\n nextEffect = nextEffect.nextEffect;\n }\n\n {\n resetCurrentFiber();\n }\n}\n\nfunction commitAllLifeCycles(finishedRoot, committedExpirationTime) {\n {\n ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings();\n ReactStrictModeWarnings.flushLegacyContextWarning();\n\n if (warnAboutDeprecatedLifecycles) {\n ReactStrictModeWarnings.flushPendingDeprecationWarnings();\n }\n }\n while (nextEffect !== null) {\n {\n setCurrentFiber(nextEffect);\n }\n var effectTag = nextEffect.effectTag;\n\n if (effectTag & (Update | Callback)) {\n recordEffect();\n var current$$1 = nextEffect.alternate;\n commitLifeCycles(finishedRoot, current$$1, nextEffect, committedExpirationTime);\n }\n\n if (effectTag & Ref) {\n recordEffect();\n commitAttachRef(nextEffect);\n }\n\n if (effectTag & Passive) {\n rootWithPendingPassiveEffects = finishedRoot;\n }\n\n nextEffect = nextEffect.nextEffect;\n }\n {\n resetCurrentFiber();\n }\n}\n\nfunction commitPassiveEffects(root, firstEffect) {\n rootWithPendingPassiveEffects = null;\n passiveEffectCallbackHandle = null;\n passiveEffectCallback = null;\n\n // Set this to true to prevent re-entrancy\n var previousIsRendering = isRendering;\n isRendering = true;\n\n var effect = firstEffect;\n do {\n {\n setCurrentFiber(effect);\n }\n\n if (effect.effectTag & Passive) {\n var didError = false;\n var error = void 0;\n {\n invokeGuardedCallback(null, commitPassiveHookEffects, null, effect);\n if (hasCaughtError()) {\n didError = true;\n error = clearCaughtError();\n }\n }\n if (didError) {\n captureCommitPhaseError(effect, error);\n }\n }\n effect = effect.nextEffect;\n } while (effect !== null);\n {\n resetCurrentFiber();\n }\n\n isRendering = previousIsRendering;\n\n // Check if work was scheduled by one of the effects\n var rootExpirationTime = root.expirationTime;\n if (rootExpirationTime !== NoWork) {\n requestWork(root, rootExpirationTime);\n }\n // Flush any sync work that was scheduled by effects\n if (!isBatchingUpdates && !isRendering) {\n performSyncWork();\n }\n}\n\nfunction isAlreadyFailedLegacyErrorBoundary(instance) {\n return legacyErrorBoundariesThatAlreadyFailed !== null && legacyErrorBoundariesThatAlreadyFailed.has(instance);\n}\n\nfunction markLegacyErrorBoundaryAsFailed(instance) {\n if (legacyErrorBoundariesThatAlreadyFailed === null) {\n legacyErrorBoundariesThatAlreadyFailed = new Set([instance]);\n } else {\n legacyErrorBoundariesThatAlreadyFailed.add(instance);\n }\n}\n\nfunction flushPassiveEffects() {\n if (passiveEffectCallbackHandle !== null) {\n cancelPassiveEffects(passiveEffectCallbackHandle);\n }\n if (passiveEffectCallback !== null) {\n // We call the scheduled callback instead of commitPassiveEffects directly\n // to ensure tracing works correctly.\n passiveEffectCallback();\n }\n}\n\nfunction commitRoot(root, finishedWork) {\n isWorking = true;\n isCommitting$1 = true;\n startCommitTimer();\n\n !(root.current !== finishedWork) ? invariant(false, 'Cannot commit the same tree as before. This is probably a bug related to the return field. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n var committedExpirationTime = root.pendingCommitExpirationTime;\n !(committedExpirationTime !== NoWork) ? invariant(false, 'Cannot commit an incomplete root. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n root.pendingCommitExpirationTime = NoWork;\n\n // Update the pending priority levels to account for the work that we are\n // about to commit. This needs to happen before calling the lifecycles, since\n // they may schedule additional updates.\n var updateExpirationTimeBeforeCommit = finishedWork.expirationTime;\n var childExpirationTimeBeforeCommit = finishedWork.childExpirationTime;\n var earliestRemainingTimeBeforeCommit = childExpirationTimeBeforeCommit > updateExpirationTimeBeforeCommit ? childExpirationTimeBeforeCommit : updateExpirationTimeBeforeCommit;\n markCommittedPriorityLevels(root, earliestRemainingTimeBeforeCommit);\n\n var prevInteractions = null;\n if (enableSchedulerTracing) {\n // Restore any pending interactions at this point,\n // So that cascading work triggered during the render phase will be accounted for.\n prevInteractions = tracing.__interactionsRef.current;\n tracing.__interactionsRef.current = root.memoizedInteractions;\n }\n\n // Reset this to null before calling lifecycles\n ReactCurrentOwner$2.current = null;\n\n var firstEffect = void 0;\n if (finishedWork.effectTag > PerformedWork) {\n // A fiber's effect list consists only of its children, not itself. So if\n // the root has an effect, we need to add it to the end of the list. The\n // resulting list is the set that would belong to the root's parent, if\n // it had one; that is, all the effects in the tree including the root.\n if (finishedWork.lastEffect !== null) {\n finishedWork.lastEffect.nextEffect = finishedWork;\n firstEffect = finishedWork.firstEffect;\n } else {\n firstEffect = finishedWork;\n }\n } else {\n // There is no effect on the root.\n firstEffect = finishedWork.firstEffect;\n }\n\n prepareForCommit(root.containerInfo);\n\n // Invoke instances of getSnapshotBeforeUpdate before mutation.\n nextEffect = firstEffect;\n startCommitSnapshotEffectsTimer();\n while (nextEffect !== null) {\n var didError = false;\n var error = void 0;\n {\n invokeGuardedCallback(null, commitBeforeMutationLifecycles, null);\n if (hasCaughtError()) {\n didError = true;\n error = clearCaughtError();\n }\n }\n if (didError) {\n !(nextEffect !== null) ? invariant(false, 'Should have next effect. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n captureCommitPhaseError(nextEffect, error);\n // Clean-up\n if (nextEffect !== null) {\n nextEffect = nextEffect.nextEffect;\n }\n }\n }\n stopCommitSnapshotEffectsTimer();\n\n if (enableProfilerTimer) {\n // Mark the current commit time to be shared by all Profilers in this batch.\n // This enables them to be grouped later.\n recordCommitTime();\n }\n\n // Commit all the side-effects within a tree. We'll do this in two passes.\n // The first pass performs all the host insertions, updates, deletions and\n // ref unmounts.\n nextEffect = firstEffect;\n startCommitHostEffectsTimer();\n while (nextEffect !== null) {\n var _didError = false;\n var _error = void 0;\n {\n invokeGuardedCallback(null, commitAllHostEffects, null);\n if (hasCaughtError()) {\n _didError = true;\n _error = clearCaughtError();\n }\n }\n if (_didError) {\n !(nextEffect !== null) ? invariant(false, 'Should have next effect. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n captureCommitPhaseError(nextEffect, _error);\n // Clean-up\n if (nextEffect !== null) {\n nextEffect = nextEffect.nextEffect;\n }\n }\n }\n stopCommitHostEffectsTimer();\n\n resetAfterCommit(root.containerInfo);\n\n // The work-in-progress tree is now the current tree. This must come after\n // the first pass of the commit phase, so that the previous tree is still\n // current during componentWillUnmount, but before the second pass, so that\n // the finished work is current during componentDidMount/Update.\n root.current = finishedWork;\n\n // In the second pass we'll perform all life-cycles and ref callbacks.\n // Life-cycles happen as a separate pass so that all placements, updates,\n // and deletions in the entire tree have already been invoked.\n // This pass also triggers any renderer-specific initial effects.\n nextEffect = firstEffect;\n startCommitLifeCyclesTimer();\n while (nextEffect !== null) {\n var _didError2 = false;\n var _error2 = void 0;\n {\n invokeGuardedCallback(null, commitAllLifeCycles, null, root, committedExpirationTime);\n if (hasCaughtError()) {\n _didError2 = true;\n _error2 = clearCaughtError();\n }\n }\n if (_didError2) {\n !(nextEffect !== null) ? invariant(false, 'Should have next effect. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n captureCommitPhaseError(nextEffect, _error2);\n if (nextEffect !== null) {\n nextEffect = nextEffect.nextEffect;\n }\n }\n }\n\n if (firstEffect !== null && rootWithPendingPassiveEffects !== null) {\n // This commit included a passive effect. These do not need to fire until\n // after the next paint. Schedule an callback to fire them in an async\n // event. To ensure serial execution, the callback will be flushed early if\n // we enter rootWithPendingPassiveEffects commit phase before then.\n var callback = commitPassiveEffects.bind(null, root, firstEffect);\n if (enableSchedulerTracing) {\n // TODO: Avoid this extra callback by mutating the tracing ref directly,\n // like we do at the beginning of commitRoot. I've opted not to do that\n // here because that code is still in flux.\n callback = tracing.unstable_wrap(callback);\n }\n passiveEffectCallbackHandle = scheduler.unstable_runWithPriority(scheduler.unstable_NormalPriority, function () {\n return schedulePassiveEffects(callback);\n });\n passiveEffectCallback = callback;\n }\n\n isCommitting$1 = false;\n isWorking = false;\n stopCommitLifeCyclesTimer();\n stopCommitTimer();\n onCommitRoot(finishedWork.stateNode);\n if ( true && ReactFiberInstrumentation_1.debugTool) {\n ReactFiberInstrumentation_1.debugTool.onCommitWork(finishedWork);\n }\n\n var updateExpirationTimeAfterCommit = finishedWork.expirationTime;\n var childExpirationTimeAfterCommit = finishedWork.childExpirationTime;\n var earliestRemainingTimeAfterCommit = childExpirationTimeAfterCommit > updateExpirationTimeAfterCommit ? childExpirationTimeAfterCommit : updateExpirationTimeAfterCommit;\n if (earliestRemainingTimeAfterCommit === NoWork) {\n // If there's no remaining work, we can clear the set of already failed\n // error boundaries.\n legacyErrorBoundariesThatAlreadyFailed = null;\n }\n onCommit(root, earliestRemainingTimeAfterCommit);\n\n if (enableSchedulerTracing) {\n tracing.__interactionsRef.current = prevInteractions;\n\n var subscriber = void 0;\n\n try {\n subscriber = tracing.__subscriberRef.current;\n if (subscriber !== null && root.memoizedInteractions.size > 0) {\n var threadID = computeThreadID(committedExpirationTime, root.interactionThreadID);\n subscriber.onWorkStopped(root.memoizedInteractions, threadID);\n }\n } catch (error) {\n // It's not safe for commitRoot() to throw.\n // Store the error for now and we'll re-throw in finishRendering().\n if (!hasUnhandledError) {\n hasUnhandledError = true;\n unhandledError = error;\n }\n } finally {\n // Clear completed interactions from the pending Map.\n // Unless the render was suspended or cascading work was scheduled,\n // In which case– leave pending interactions until the subsequent render.\n var pendingInteractionMap = root.pendingInteractionMap;\n pendingInteractionMap.forEach(function (scheduledInteractions, scheduledExpirationTime) {\n // Only decrement the pending interaction count if we're done.\n // If there's still work at the current priority,\n // That indicates that we are waiting for suspense data.\n if (scheduledExpirationTime > earliestRemainingTimeAfterCommit) {\n pendingInteractionMap.delete(scheduledExpirationTime);\n\n scheduledInteractions.forEach(function (interaction) {\n interaction.__count--;\n\n if (subscriber !== null && interaction.__count === 0) {\n try {\n subscriber.onInteractionScheduledWorkCompleted(interaction);\n } catch (error) {\n // It's not safe for commitRoot() to throw.\n // Store the error for now and we'll re-throw in finishRendering().\n if (!hasUnhandledError) {\n hasUnhandledError = true;\n unhandledError = error;\n }\n }\n }\n });\n }\n });\n }\n }\n}\n\nfunction resetChildExpirationTime(workInProgress, renderTime) {\n if (renderTime !== Never && workInProgress.childExpirationTime === Never) {\n // The children of this component are hidden. Don't bubble their\n // expiration times.\n return;\n }\n\n var newChildExpirationTime = NoWork;\n\n // Bubble up the earliest expiration time.\n if (enableProfilerTimer && workInProgress.mode & ProfileMode) {\n // We're in profiling mode.\n // Let's use this same traversal to update the render durations.\n var actualDuration = workInProgress.actualDuration;\n var treeBaseDuration = workInProgress.selfBaseDuration;\n\n // When a fiber is cloned, its actualDuration is reset to 0.\n // This value will only be updated if work is done on the fiber (i.e. it doesn't bailout).\n // When work is done, it should bubble to the parent's actualDuration.\n // If the fiber has not been cloned though, (meaning no work was done),\n // Then this value will reflect the amount of time spent working on a previous render.\n // In that case it should not bubble.\n // We determine whether it was cloned by comparing the child pointer.\n var shouldBubbleActualDurations = workInProgress.alternate === null || workInProgress.child !== workInProgress.alternate.child;\n\n var child = workInProgress.child;\n while (child !== null) {\n var childUpdateExpirationTime = child.expirationTime;\n var childChildExpirationTime = child.childExpirationTime;\n if (childUpdateExpirationTime > newChildExpirationTime) {\n newChildExpirationTime = childUpdateExpirationTime;\n }\n if (childChildExpirationTime > newChildExpirationTime) {\n newChildExpirationTime = childChildExpirationTime;\n }\n if (shouldBubbleActualDurations) {\n actualDuration += child.actualDuration;\n }\n treeBaseDuration += child.treeBaseDuration;\n child = child.sibling;\n }\n workInProgress.actualDuration = actualDuration;\n workInProgress.treeBaseDuration = treeBaseDuration;\n } else {\n var _child = workInProgress.child;\n while (_child !== null) {\n var _childUpdateExpirationTime = _child.expirationTime;\n var _childChildExpirationTime = _child.childExpirationTime;\n if (_childUpdateExpirationTime > newChildExpirationTime) {\n newChildExpirationTime = _childUpdateExpirationTime;\n }\n if (_childChildExpirationTime > newChildExpirationTime) {\n newChildExpirationTime = _childChildExpirationTime;\n }\n _child = _child.sibling;\n }\n }\n\n workInProgress.childExpirationTime = newChildExpirationTime;\n}\n\nfunction completeUnitOfWork(workInProgress) {\n // Attempt to complete the current unit of work, then move to the\n // next sibling. If there are no more siblings, return to the\n // parent fiber.\n while (true) {\n // The current, flushed, state of this fiber is the alternate.\n // Ideally nothing should rely on this, but relying on it here\n // means that we don't need an additional field on the work in\n // progress.\n var current$$1 = workInProgress.alternate;\n {\n setCurrentFiber(workInProgress);\n }\n\n var returnFiber = workInProgress.return;\n var siblingFiber = workInProgress.sibling;\n\n if ((workInProgress.effectTag & Incomplete) === NoEffect) {\n if ( true && replayFailedUnitOfWorkWithInvokeGuardedCallback) {\n // Don't replay if it fails during completion phase.\n mayReplayFailedUnitOfWork = false;\n }\n // This fiber completed.\n // Remember we're completing this unit so we can find a boundary if it fails.\n nextUnitOfWork = workInProgress;\n if (enableProfilerTimer) {\n if (workInProgress.mode & ProfileMode) {\n startProfilerTimer(workInProgress);\n }\n nextUnitOfWork = completeWork(current$$1, workInProgress, nextRenderExpirationTime);\n if (workInProgress.mode & ProfileMode) {\n // Update render duration assuming we didn't error.\n stopProfilerTimerIfRunningAndRecordDelta(workInProgress, false);\n }\n } else {\n nextUnitOfWork = completeWork(current$$1, workInProgress, nextRenderExpirationTime);\n }\n if ( true && replayFailedUnitOfWorkWithInvokeGuardedCallback) {\n // We're out of completion phase so replaying is fine now.\n mayReplayFailedUnitOfWork = true;\n }\n stopWorkTimer(workInProgress);\n resetChildExpirationTime(workInProgress, nextRenderExpirationTime);\n {\n resetCurrentFiber();\n }\n\n if (nextUnitOfWork !== null) {\n // Completing this fiber spawned new work. Work on that next.\n return nextUnitOfWork;\n }\n\n if (returnFiber !== null &&\n // Do not append effects to parents if a sibling failed to complete\n (returnFiber.effectTag & Incomplete) === NoEffect) {\n // Append all the effects of the subtree and this fiber onto the effect\n // list of the parent. The completion order of the children affects the\n // side-effect order.\n if (returnFiber.firstEffect === null) {\n returnFiber.firstEffect = workInProgress.firstEffect;\n }\n if (workInProgress.lastEffect !== null) {\n if (returnFiber.lastEffect !== null) {\n returnFiber.lastEffect.nextEffect = workInProgress.firstEffect;\n }\n returnFiber.lastEffect = workInProgress.lastEffect;\n }\n\n // If this fiber had side-effects, we append it AFTER the children's\n // side-effects. We can perform certain side-effects earlier if\n // needed, by doing multiple passes over the effect list. We don't want\n // to schedule our own side-effect on our own list because if end up\n // reusing children we'll schedule this effect onto itself since we're\n // at the end.\n var effectTag = workInProgress.effectTag;\n // Skip both NoWork and PerformedWork tags when creating the effect list.\n // PerformedWork effect is read by React DevTools but shouldn't be committed.\n if (effectTag > PerformedWork) {\n if (returnFiber.lastEffect !== null) {\n returnFiber.lastEffect.nextEffect = workInProgress;\n } else {\n returnFiber.firstEffect = workInProgress;\n }\n returnFiber.lastEffect = workInProgress;\n }\n }\n\n if ( true && ReactFiberInstrumentation_1.debugTool) {\n ReactFiberInstrumentation_1.debugTool.onCompleteWork(workInProgress);\n }\n\n if (siblingFiber !== null) {\n // If there is more work to do in this returnFiber, do that next.\n return siblingFiber;\n } else if (returnFiber !== null) {\n // If there's no more work in this returnFiber. Complete the returnFiber.\n workInProgress = returnFiber;\n continue;\n } else {\n // We've reached the root.\n return null;\n }\n } else {\n if (enableProfilerTimer && workInProgress.mode & ProfileMode) {\n // Record the render duration for the fiber that errored.\n stopProfilerTimerIfRunningAndRecordDelta(workInProgress, false);\n\n // Include the time spent working on failed children before continuing.\n var actualDuration = workInProgress.actualDuration;\n var child = workInProgress.child;\n while (child !== null) {\n actualDuration += child.actualDuration;\n child = child.sibling;\n }\n workInProgress.actualDuration = actualDuration;\n }\n\n // This fiber did not complete because something threw. Pop values off\n // the stack without entering the complete phase. If this is a boundary,\n // capture values if possible.\n var next = unwindWork(workInProgress, nextRenderExpirationTime);\n // Because this fiber did not complete, don't reset its expiration time.\n if (workInProgress.effectTag & DidCapture) {\n // Restarting an error boundary\n stopFailedWorkTimer(workInProgress);\n } else {\n stopWorkTimer(workInProgress);\n }\n\n {\n resetCurrentFiber();\n }\n\n if (next !== null) {\n stopWorkTimer(workInProgress);\n if ( true && ReactFiberInstrumentation_1.debugTool) {\n ReactFiberInstrumentation_1.debugTool.onCompleteWork(workInProgress);\n }\n\n // If completing this work spawned new work, do that next. We'll come\n // back here again.\n // Since we're restarting, remove anything that is not a host effect\n // from the effect tag.\n next.effectTag &= HostEffectMask;\n return next;\n }\n\n if (returnFiber !== null) {\n // Mark the parent fiber as incomplete and clear its effect list.\n returnFiber.firstEffect = returnFiber.lastEffect = null;\n returnFiber.effectTag |= Incomplete;\n }\n\n if ( true && ReactFiberInstrumentation_1.debugTool) {\n ReactFiberInstrumentation_1.debugTool.onCompleteWork(workInProgress);\n }\n\n if (siblingFiber !== null) {\n // If there is more work to do in this returnFiber, do that next.\n return siblingFiber;\n } else if (returnFiber !== null) {\n // If there's no more work in this returnFiber. Complete the returnFiber.\n workInProgress = returnFiber;\n continue;\n } else {\n return null;\n }\n }\n }\n\n // Without this explicit null return Flow complains of invalid return type\n // TODO Remove the above while(true) loop\n // eslint-disable-next-line no-unreachable\n return null;\n}\n\nfunction performUnitOfWork(workInProgress) {\n // The current, flushed, state of this fiber is the alternate.\n // Ideally nothing should rely on this, but relying on it here\n // means that we don't need an additional field on the work in\n // progress.\n var current$$1 = workInProgress.alternate;\n\n // See if beginning this work spawns more work.\n startWorkTimer(workInProgress);\n {\n setCurrentFiber(workInProgress);\n }\n\n if ( true && replayFailedUnitOfWorkWithInvokeGuardedCallback) {\n stashedWorkInProgressProperties = assignFiberPropertiesInDEV(stashedWorkInProgressProperties, workInProgress);\n }\n\n var next = void 0;\n if (enableProfilerTimer) {\n if (workInProgress.mode & ProfileMode) {\n startProfilerTimer(workInProgress);\n }\n\n next = beginWork(current$$1, workInProgress, nextRenderExpirationTime);\n workInProgress.memoizedProps = workInProgress.pendingProps;\n\n if (workInProgress.mode & ProfileMode) {\n // Record the render duration assuming we didn't bailout (or error).\n stopProfilerTimerIfRunningAndRecordDelta(workInProgress, true);\n }\n } else {\n next = beginWork(current$$1, workInProgress, nextRenderExpirationTime);\n workInProgress.memoizedProps = workInProgress.pendingProps;\n }\n\n {\n resetCurrentFiber();\n if (isReplayingFailedUnitOfWork) {\n // Currently replaying a failed unit of work. This should be unreachable,\n // because the render phase is meant to be idempotent, and it should\n // have thrown again. Since it didn't, rethrow the original error, so\n // React's internal stack is not misaligned.\n rethrowOriginalError();\n }\n }\n if ( true && ReactFiberInstrumentation_1.debugTool) {\n ReactFiberInstrumentation_1.debugTool.onBeginWork(workInProgress);\n }\n\n if (next === null) {\n // If this doesn't spawn new work, complete the current work.\n next = completeUnitOfWork(workInProgress);\n }\n\n ReactCurrentOwner$2.current = null;\n\n return next;\n}\n\nfunction workLoop(isYieldy) {\n if (!isYieldy) {\n // Flush work without yielding\n while (nextUnitOfWork !== null) {\n nextUnitOfWork = performUnitOfWork(nextUnitOfWork);\n }\n } else {\n // Flush asynchronous work until there's a higher priority event\n while (nextUnitOfWork !== null && !shouldYieldToRenderer()) {\n nextUnitOfWork = performUnitOfWork(nextUnitOfWork);\n }\n }\n}\n\nfunction renderRoot(root, isYieldy) {\n !!isWorking ? invariant(false, 'renderRoot was called recursively. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n\n flushPassiveEffects();\n\n isWorking = true;\n var previousDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = ContextOnlyDispatcher;\n\n var expirationTime = root.nextExpirationTimeToWorkOn;\n\n // Check if we're starting from a fresh stack, or if we're resuming from\n // previously yielded work.\n if (expirationTime !== nextRenderExpirationTime || root !== nextRoot || nextUnitOfWork === null) {\n // Reset the stack and start working from the root.\n resetStack();\n nextRoot = root;\n nextRenderExpirationTime = expirationTime;\n nextUnitOfWork = createWorkInProgress(nextRoot.current, null, nextRenderExpirationTime);\n root.pendingCommitExpirationTime = NoWork;\n\n if (enableSchedulerTracing) {\n // Determine which interactions this batch of work currently includes,\n // So that we can accurately attribute time spent working on it,\n var interactions = new Set();\n root.pendingInteractionMap.forEach(function (scheduledInteractions, scheduledExpirationTime) {\n if (scheduledExpirationTime >= expirationTime) {\n scheduledInteractions.forEach(function (interaction) {\n return interactions.add(interaction);\n });\n }\n });\n\n // Store the current set of interactions on the FiberRoot for a few reasons:\n // We can re-use it in hot functions like renderRoot() without having to recalculate it.\n // We will also use it in commitWork() to pass to any Profiler onRender() hooks.\n // This also provides DevTools with a way to access it when the onCommitRoot() hook is called.\n root.memoizedInteractions = interactions;\n\n if (interactions.size > 0) {\n var subscriber = tracing.__subscriberRef.current;\n if (subscriber !== null) {\n var threadID = computeThreadID(expirationTime, root.interactionThreadID);\n try {\n subscriber.onWorkStarted(interactions, threadID);\n } catch (error) {\n // Work thrown by an interaction tracing subscriber should be rethrown,\n // But only once it's safe (to avoid leaving the scheduler in an invalid state).\n // Store the error for now and we'll re-throw in finishRendering().\n if (!hasUnhandledError) {\n hasUnhandledError = true;\n unhandledError = error;\n }\n }\n }\n }\n }\n }\n\n var prevInteractions = null;\n if (enableSchedulerTracing) {\n // We're about to start new traced work.\n // Restore pending interactions so cascading work triggered during the render phase will be accounted for.\n prevInteractions = tracing.__interactionsRef.current;\n tracing.__interactionsRef.current = root.memoizedInteractions;\n }\n\n var didFatal = false;\n\n startWorkLoopTimer(nextUnitOfWork);\n\n do {\n try {\n workLoop(isYieldy);\n } catch (thrownValue) {\n resetContextDependences();\n resetHooks();\n\n // Reset in case completion throws.\n // This is only used in DEV and when replaying is on.\n var mayReplay = void 0;\n if ( true && replayFailedUnitOfWorkWithInvokeGuardedCallback) {\n mayReplay = mayReplayFailedUnitOfWork;\n mayReplayFailedUnitOfWork = true;\n }\n\n if (nextUnitOfWork === null) {\n // This is a fatal error.\n didFatal = true;\n onUncaughtError(thrownValue);\n } else {\n if (enableProfilerTimer && nextUnitOfWork.mode & ProfileMode) {\n // Record the time spent rendering before an error was thrown.\n // This avoids inaccurate Profiler durations in the case of a suspended render.\n stopProfilerTimerIfRunningAndRecordDelta(nextUnitOfWork, true);\n }\n\n {\n // Reset global debug state\n // We assume this is defined in DEV\n resetCurrentlyProcessingQueue();\n }\n\n if ( true && replayFailedUnitOfWorkWithInvokeGuardedCallback) {\n if (mayReplay) {\n var failedUnitOfWork = nextUnitOfWork;\n replayUnitOfWork(failedUnitOfWork, thrownValue, isYieldy);\n }\n }\n\n // TODO: we already know this isn't true in some cases.\n // At least this shows a nicer error message until we figure out the cause.\n // https://github.com/facebook/react/issues/12449#issuecomment-386727431\n !(nextUnitOfWork !== null) ? invariant(false, 'Failed to replay rendering after an error. This is likely caused by a bug in React. Please file an issue with a reproducing case to help us find it.') : void 0;\n\n var sourceFiber = nextUnitOfWork;\n var returnFiber = sourceFiber.return;\n if (returnFiber === null) {\n // This is the root. The root could capture its own errors. However,\n // we don't know if it errors before or after we pushed the host\n // context. This information is needed to avoid a stack mismatch.\n // Because we're not sure, treat this as a fatal error. We could track\n // which phase it fails in, but doesn't seem worth it. At least\n // for now.\n didFatal = true;\n onUncaughtError(thrownValue);\n } else {\n throwException(root, returnFiber, sourceFiber, thrownValue, nextRenderExpirationTime);\n nextUnitOfWork = completeUnitOfWork(sourceFiber);\n continue;\n }\n }\n }\n break;\n } while (true);\n\n if (enableSchedulerTracing) {\n // Traced work is done for now; restore the previous interactions.\n tracing.__interactionsRef.current = prevInteractions;\n }\n\n // We're done performing work. Time to clean up.\n isWorking = false;\n ReactCurrentDispatcher.current = previousDispatcher;\n resetContextDependences();\n resetHooks();\n\n // Yield back to main thread.\n if (didFatal) {\n var _didCompleteRoot = false;\n stopWorkLoopTimer(interruptedBy, _didCompleteRoot);\n interruptedBy = null;\n // There was a fatal error.\n {\n resetStackAfterFatalErrorInDev();\n }\n // `nextRoot` points to the in-progress root. A non-null value indicates\n // that we're in the middle of an async render. Set it to null to indicate\n // there's no more work to be done in the current batch.\n nextRoot = null;\n onFatal(root);\n return;\n }\n\n if (nextUnitOfWork !== null) {\n // There's still remaining async work in this tree, but we ran out of time\n // in the current frame. Yield back to the renderer. Unless we're\n // interrupted by a higher priority update, we'll continue later from where\n // we left off.\n var _didCompleteRoot2 = false;\n stopWorkLoopTimer(interruptedBy, _didCompleteRoot2);\n interruptedBy = null;\n onYield(root);\n return;\n }\n\n // We completed the whole tree.\n var didCompleteRoot = true;\n stopWorkLoopTimer(interruptedBy, didCompleteRoot);\n var rootWorkInProgress = root.current.alternate;\n !(rootWorkInProgress !== null) ? invariant(false, 'Finished root should have a work-in-progress. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n\n // `nextRoot` points to the in-progress root. A non-null value indicates\n // that we're in the middle of an async render. Set it to null to indicate\n // there's no more work to be done in the current batch.\n nextRoot = null;\n interruptedBy = null;\n\n if (nextRenderDidError) {\n // There was an error\n if (hasLowerPriorityWork(root, expirationTime)) {\n // There's lower priority work. If so, it may have the effect of fixing\n // the exception that was just thrown. Exit without committing. This is\n // similar to a suspend, but without a timeout because we're not waiting\n // for a promise to resolve. React will restart at the lower\n // priority level.\n markSuspendedPriorityLevel(root, expirationTime);\n var suspendedExpirationTime = expirationTime;\n var rootExpirationTime = root.expirationTime;\n onSuspend(root, rootWorkInProgress, suspendedExpirationTime, rootExpirationTime, -1 // Indicates no timeout\n );\n return;\n } else if (\n // There's no lower priority work, but we're rendering asynchronously.\n // Synchronously attempt to render the same level one more time. This is\n // similar to a suspend, but without a timeout because we're not waiting\n // for a promise to resolve.\n !root.didError && isYieldy) {\n root.didError = true;\n var _suspendedExpirationTime = root.nextExpirationTimeToWorkOn = expirationTime;\n var _rootExpirationTime = root.expirationTime = Sync;\n onSuspend(root, rootWorkInProgress, _suspendedExpirationTime, _rootExpirationTime, -1 // Indicates no timeout\n );\n return;\n }\n }\n\n if (isYieldy && nextLatestAbsoluteTimeoutMs !== -1) {\n // The tree was suspended.\n var _suspendedExpirationTime2 = expirationTime;\n markSuspendedPriorityLevel(root, _suspendedExpirationTime2);\n\n // Find the earliest uncommitted expiration time in the tree, including\n // work that is suspended. The timeout threshold cannot be longer than\n // the overall expiration.\n var earliestExpirationTime = findEarliestOutstandingPriorityLevel(root, expirationTime);\n var earliestExpirationTimeMs = expirationTimeToMs(earliestExpirationTime);\n if (earliestExpirationTimeMs < nextLatestAbsoluteTimeoutMs) {\n nextLatestAbsoluteTimeoutMs = earliestExpirationTimeMs;\n }\n\n // Subtract the current time from the absolute timeout to get the number\n // of milliseconds until the timeout. In other words, convert an absolute\n // timestamp to a relative time. This is the value that is passed\n // to `setTimeout`.\n var currentTimeMs = expirationTimeToMs(requestCurrentTime());\n var msUntilTimeout = nextLatestAbsoluteTimeoutMs - currentTimeMs;\n msUntilTimeout = msUntilTimeout < 0 ? 0 : msUntilTimeout;\n\n // TODO: Account for the Just Noticeable Difference\n\n var _rootExpirationTime2 = root.expirationTime;\n onSuspend(root, rootWorkInProgress, _suspendedExpirationTime2, _rootExpirationTime2, msUntilTimeout);\n return;\n }\n\n // Ready to commit.\n onComplete(root, rootWorkInProgress, expirationTime);\n}\n\nfunction captureCommitPhaseError(sourceFiber, value) {\n var expirationTime = Sync;\n var fiber = sourceFiber.return;\n while (fiber !== null) {\n switch (fiber.tag) {\n case ClassComponent:\n var ctor = fiber.type;\n var instance = fiber.stateNode;\n if (typeof ctor.getDerivedStateFromError === 'function' || typeof instance.componentDidCatch === 'function' && !isAlreadyFailedLegacyErrorBoundary(instance)) {\n var errorInfo = createCapturedValue(value, sourceFiber);\n var update = createClassErrorUpdate(fiber, errorInfo, expirationTime);\n enqueueUpdate(fiber, update);\n scheduleWork(fiber, expirationTime);\n return;\n }\n break;\n case HostRoot:\n {\n var _errorInfo = createCapturedValue(value, sourceFiber);\n var _update = createRootErrorUpdate(fiber, _errorInfo, expirationTime);\n enqueueUpdate(fiber, _update);\n scheduleWork(fiber, expirationTime);\n return;\n }\n }\n fiber = fiber.return;\n }\n\n if (sourceFiber.tag === HostRoot) {\n // Error was thrown at the root. There is no parent, so the root\n // itself should capture it.\n var rootFiber = sourceFiber;\n var _errorInfo2 = createCapturedValue(value, rootFiber);\n var _update2 = createRootErrorUpdate(rootFiber, _errorInfo2, expirationTime);\n enqueueUpdate(rootFiber, _update2);\n scheduleWork(rootFiber, expirationTime);\n }\n}\n\nfunction computeThreadID(expirationTime, interactionThreadID) {\n // Interaction threads are unique per root and expiration time.\n return expirationTime * 1000 + interactionThreadID;\n}\n\n// Creates a unique async expiration time.\nfunction computeUniqueAsyncExpiration() {\n var currentTime = requestCurrentTime();\n var result = computeAsyncExpiration(currentTime);\n if (result >= lastUniqueAsyncExpiration) {\n // Since we assume the current time monotonically increases, we only hit\n // this branch when computeUniqueAsyncExpiration is fired multiple times\n // within a 200ms window (or whatever the async bucket size is).\n result = lastUniqueAsyncExpiration - 1;\n }\n lastUniqueAsyncExpiration = result;\n return lastUniqueAsyncExpiration;\n}\n\nfunction computeExpirationForFiber(currentTime, fiber) {\n var priorityLevel = scheduler.unstable_getCurrentPriorityLevel();\n\n var expirationTime = void 0;\n if ((fiber.mode & ConcurrentMode) === NoContext) {\n // Outside of concurrent mode, updates are always synchronous.\n expirationTime = Sync;\n } else if (isWorking && !isCommitting$1) {\n // During render phase, updates expire during as the current render.\n expirationTime = nextRenderExpirationTime;\n } else {\n switch (priorityLevel) {\n case scheduler.unstable_ImmediatePriority:\n expirationTime = Sync;\n break;\n case scheduler.unstable_UserBlockingPriority:\n expirationTime = computeInteractiveExpiration(currentTime);\n break;\n case scheduler.unstable_NormalPriority:\n // This is a normal, concurrent update\n expirationTime = computeAsyncExpiration(currentTime);\n break;\n case scheduler.unstable_LowPriority:\n case scheduler.unstable_IdlePriority:\n expirationTime = Never;\n break;\n default:\n invariant(false, 'Unknown priority level. This error is likely caused by a bug in React. Please file an issue.');\n }\n\n // If we're in the middle of rendering a tree, do not update at the same\n // expiration time that is already rendering.\n if (nextRoot !== null && expirationTime === nextRenderExpirationTime) {\n expirationTime -= 1;\n }\n }\n\n // Keep track of the lowest pending interactive expiration time. This\n // allows us to synchronously flush all interactive updates\n // when needed.\n // TODO: Move this to renderer?\n if (priorityLevel === scheduler.unstable_UserBlockingPriority && (lowestPriorityPendingInteractiveExpirationTime === NoWork || expirationTime < lowestPriorityPendingInteractiveExpirationTime)) {\n lowestPriorityPendingInteractiveExpirationTime = expirationTime;\n }\n\n return expirationTime;\n}\n\nfunction renderDidSuspend(root, absoluteTimeoutMs, suspendedTime) {\n // Schedule the timeout.\n if (absoluteTimeoutMs >= 0 && nextLatestAbsoluteTimeoutMs < absoluteTimeoutMs) {\n nextLatestAbsoluteTimeoutMs = absoluteTimeoutMs;\n }\n}\n\nfunction renderDidError() {\n nextRenderDidError = true;\n}\n\nfunction pingSuspendedRoot(root, thenable, pingTime) {\n // A promise that previously suspended React from committing has resolved.\n // If React is still suspended, try again at the previous level (pingTime).\n\n var pingCache = root.pingCache;\n if (pingCache !== null) {\n // The thenable resolved, so we no longer need to memoize, because it will\n // never be thrown again.\n pingCache.delete(thenable);\n }\n\n if (nextRoot !== null && nextRenderExpirationTime === pingTime) {\n // Received a ping at the same priority level at which we're currently\n // rendering. Restart from the root.\n nextRoot = null;\n } else {\n // Confirm that the root is still suspended at this level. Otherwise exit.\n if (isPriorityLevelSuspended(root, pingTime)) {\n // Ping at the original level\n markPingedPriorityLevel(root, pingTime);\n var rootExpirationTime = root.expirationTime;\n if (rootExpirationTime !== NoWork) {\n requestWork(root, rootExpirationTime);\n }\n }\n }\n}\n\nfunction retryTimedOutBoundary(boundaryFiber, thenable) {\n // The boundary fiber (a Suspense component) previously timed out and was\n // rendered in its fallback state. One of the promises that suspended it has\n // resolved, which means at least part of the tree was likely unblocked. Try\n var retryCache = void 0;\n if (enableSuspenseServerRenderer) {\n switch (boundaryFiber.tag) {\n case SuspenseComponent:\n retryCache = boundaryFiber.stateNode;\n break;\n case DehydratedSuspenseComponent:\n retryCache = boundaryFiber.memoizedState;\n break;\n default:\n invariant(false, 'Pinged unknown suspense boundary type. This is probably a bug in React.');\n }\n } else {\n retryCache = boundaryFiber.stateNode;\n }\n if (retryCache !== null) {\n // The thenable resolved, so we no longer need to memoize, because it will\n // never be thrown again.\n retryCache.delete(thenable);\n }\n\n var currentTime = requestCurrentTime();\n var retryTime = computeExpirationForFiber(currentTime, boundaryFiber);\n var root = scheduleWorkToRoot(boundaryFiber, retryTime);\n if (root !== null) {\n markPendingPriorityLevel(root, retryTime);\n var rootExpirationTime = root.expirationTime;\n if (rootExpirationTime !== NoWork) {\n requestWork(root, rootExpirationTime);\n }\n }\n}\n\nfunction scheduleWorkToRoot(fiber, expirationTime) {\n recordScheduleUpdate();\n\n {\n if (fiber.tag === ClassComponent) {\n var instance = fiber.stateNode;\n warnAboutInvalidUpdates(instance);\n }\n }\n\n // Update the source fiber's expiration time\n if (fiber.expirationTime < expirationTime) {\n fiber.expirationTime = expirationTime;\n }\n var alternate = fiber.alternate;\n if (alternate !== null && alternate.expirationTime < expirationTime) {\n alternate.expirationTime = expirationTime;\n }\n // Walk the parent path to the root and update the child expiration time.\n var node = fiber.return;\n var root = null;\n if (node === null && fiber.tag === HostRoot) {\n root = fiber.stateNode;\n } else {\n while (node !== null) {\n alternate = node.alternate;\n if (node.childExpirationTime < expirationTime) {\n node.childExpirationTime = expirationTime;\n if (alternate !== null && alternate.childExpirationTime < expirationTime) {\n alternate.childExpirationTime = expirationTime;\n }\n } else if (alternate !== null && alternate.childExpirationTime < expirationTime) {\n alternate.childExpirationTime = expirationTime;\n }\n if (node.return === null && node.tag === HostRoot) {\n root = node.stateNode;\n break;\n }\n node = node.return;\n }\n }\n\n if (enableSchedulerTracing) {\n if (root !== null) {\n var interactions = tracing.__interactionsRef.current;\n if (interactions.size > 0) {\n var pendingInteractionMap = root.pendingInteractionMap;\n var pendingInteractions = pendingInteractionMap.get(expirationTime);\n if (pendingInteractions != null) {\n interactions.forEach(function (interaction) {\n if (!pendingInteractions.has(interaction)) {\n // Update the pending async work count for previously unscheduled interaction.\n interaction.__count++;\n }\n\n pendingInteractions.add(interaction);\n });\n } else {\n pendingInteractionMap.set(expirationTime, new Set(interactions));\n\n // Update the pending async work count for the current interactions.\n interactions.forEach(function (interaction) {\n interaction.__count++;\n });\n }\n\n var subscriber = tracing.__subscriberRef.current;\n if (subscriber !== null) {\n var threadID = computeThreadID(expirationTime, root.interactionThreadID);\n subscriber.onWorkScheduled(interactions, threadID);\n }\n }\n }\n }\n return root;\n}\n\nfunction warnIfNotCurrentlyBatchingInDev(fiber) {\n {\n if (isRendering === false && isBatchingUpdates === false) {\n warningWithoutStack$1(false, 'An update to %s inside a test was not wrapped in act(...).\\n\\n' + 'When testing, code that causes React state updates should be wrapped into act(...):\\n\\n' + 'act(() => {\\n' + ' /* fire events that update state */\\n' + '});\\n' + '/* assert on the output */\\n\\n' + \"This ensures that you're testing the behavior the user would see in the browser.\" + ' Learn more at https://fb.me/react-wrap-tests-with-act' + '%s', getComponentName(fiber.type), getStackByFiberInDevAndProd(fiber));\n }\n }\n}\n\nfunction scheduleWork(fiber, expirationTime) {\n var root = scheduleWorkToRoot(fiber, expirationTime);\n if (root === null) {\n {\n switch (fiber.tag) {\n case ClassComponent:\n warnAboutUpdateOnUnmounted(fiber, true);\n break;\n case FunctionComponent:\n case ForwardRef:\n case MemoComponent:\n case SimpleMemoComponent:\n warnAboutUpdateOnUnmounted(fiber, false);\n break;\n }\n }\n return;\n }\n\n if (!isWorking && nextRenderExpirationTime !== NoWork && expirationTime > nextRenderExpirationTime) {\n // This is an interruption. (Used for performance tracking.)\n interruptedBy = fiber;\n resetStack();\n }\n markPendingPriorityLevel(root, expirationTime);\n if (\n // If we're in the render phase, we don't need to schedule this root\n // for an update, because we'll do it before we exit...\n !isWorking || isCommitting$1 ||\n // ...unless this is a different root than the one we're rendering.\n nextRoot !== root) {\n var rootExpirationTime = root.expirationTime;\n requestWork(root, rootExpirationTime);\n }\n if (nestedUpdateCount > NESTED_UPDATE_LIMIT) {\n // Reset this back to zero so subsequent updates don't throw.\n nestedUpdateCount = 0;\n invariant(false, 'Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops.');\n }\n}\n\nfunction syncUpdates(fn, a, b, c, d) {\n return scheduler.unstable_runWithPriority(scheduler.unstable_ImmediatePriority, function () {\n return fn(a, b, c, d);\n });\n}\n\n// TODO: Everything below this is written as if it has been lifted to the\n// renderers. I'll do this in a follow-up.\n\n// Linked-list of roots\nvar firstScheduledRoot = null;\nvar lastScheduledRoot = null;\n\nvar callbackExpirationTime = NoWork;\nvar callbackID = void 0;\nvar isRendering = false;\nvar nextFlushedRoot = null;\nvar nextFlushedExpirationTime = NoWork;\nvar lowestPriorityPendingInteractiveExpirationTime = NoWork;\nvar hasUnhandledError = false;\nvar unhandledError = null;\n\nvar isBatchingUpdates = false;\nvar isUnbatchingUpdates = false;\n\nvar completedBatches = null;\n\nvar originalStartTimeMs = scheduler.unstable_now();\nvar currentRendererTime = msToExpirationTime(originalStartTimeMs);\nvar currentSchedulerTime = currentRendererTime;\n\n// Use these to prevent an infinite loop of nested updates\nvar NESTED_UPDATE_LIMIT = 50;\nvar nestedUpdateCount = 0;\nvar lastCommittedRootDuringThisBatch = null;\n\nfunction recomputeCurrentRendererTime() {\n var currentTimeMs = scheduler.unstable_now() - originalStartTimeMs;\n currentRendererTime = msToExpirationTime(currentTimeMs);\n}\n\nfunction scheduleCallbackWithExpirationTime(root, expirationTime) {\n if (callbackExpirationTime !== NoWork) {\n // A callback is already scheduled. Check its expiration time (timeout).\n if (expirationTime < callbackExpirationTime) {\n // Existing callback has sufficient timeout. Exit.\n return;\n } else {\n if (callbackID !== null) {\n // Existing callback has insufficient timeout. Cancel and schedule a\n // new one.\n scheduler.unstable_cancelCallback(callbackID);\n }\n }\n // The request callback timer is already running. Don't start a new one.\n } else {\n startRequestCallbackTimer();\n }\n\n callbackExpirationTime = expirationTime;\n var currentMs = scheduler.unstable_now() - originalStartTimeMs;\n var expirationTimeMs = expirationTimeToMs(expirationTime);\n var timeout = expirationTimeMs - currentMs;\n callbackID = scheduler.unstable_scheduleCallback(performAsyncWork, { timeout: timeout });\n}\n\n// For every call to renderRoot, one of onFatal, onComplete, onSuspend, and\n// onYield is called upon exiting. We use these in lieu of returning a tuple.\n// I've also chosen not to inline them into renderRoot because these will\n// eventually be lifted into the renderer.\nfunction onFatal(root) {\n root.finishedWork = null;\n}\n\nfunction onComplete(root, finishedWork, expirationTime) {\n root.pendingCommitExpirationTime = expirationTime;\n root.finishedWork = finishedWork;\n}\n\nfunction onSuspend(root, finishedWork, suspendedExpirationTime, rootExpirationTime, msUntilTimeout) {\n root.expirationTime = rootExpirationTime;\n if (msUntilTimeout === 0 && !shouldYieldToRenderer()) {\n // Don't wait an additional tick. Commit the tree immediately.\n root.pendingCommitExpirationTime = suspendedExpirationTime;\n root.finishedWork = finishedWork;\n } else if (msUntilTimeout > 0) {\n // Wait `msUntilTimeout` milliseconds before committing.\n root.timeoutHandle = scheduleTimeout(onTimeout.bind(null, root, finishedWork, suspendedExpirationTime), msUntilTimeout);\n }\n}\n\nfunction onYield(root) {\n root.finishedWork = null;\n}\n\nfunction onTimeout(root, finishedWork, suspendedExpirationTime) {\n // The root timed out. Commit it.\n root.pendingCommitExpirationTime = suspendedExpirationTime;\n root.finishedWork = finishedWork;\n // Read the current time before entering the commit phase. We can be\n // certain this won't cause tearing related to batching of event updates\n // because we're at the top of a timer event.\n recomputeCurrentRendererTime();\n currentSchedulerTime = currentRendererTime;\n flushRoot(root, suspendedExpirationTime);\n}\n\nfunction onCommit(root, expirationTime) {\n root.expirationTime = expirationTime;\n root.finishedWork = null;\n}\n\nfunction requestCurrentTime() {\n // requestCurrentTime is called by the scheduler to compute an expiration\n // time.\n //\n // Expiration times are computed by adding to the current time (the start\n // time). However, if two updates are scheduled within the same event, we\n // should treat their start times as simultaneous, even if the actual clock\n // time has advanced between the first and second call.\n\n // In other words, because expiration times determine how updates are batched,\n // we want all updates of like priority that occur within the same event to\n // receive the same expiration time. Otherwise we get tearing.\n //\n // We keep track of two separate times: the current \"renderer\" time and the\n // current \"scheduler\" time. The renderer time can be updated whenever; it\n // only exists to minimize the calls performance.now.\n //\n // But the scheduler time can only be updated if there's no pending work, or\n // if we know for certain that we're not in the middle of an event.\n\n if (isRendering) {\n // We're already rendering. Return the most recently read time.\n return currentSchedulerTime;\n }\n // Check if there's pending work.\n findHighestPriorityRoot();\n if (nextFlushedExpirationTime === NoWork || nextFlushedExpirationTime === Never) {\n // If there's no pending work, or if the pending work is offscreen, we can\n // read the current time without risk of tearing.\n recomputeCurrentRendererTime();\n currentSchedulerTime = currentRendererTime;\n return currentSchedulerTime;\n }\n // There's already pending work. We might be in the middle of a browser\n // event. If we were to read the current time, it could cause multiple updates\n // within the same event to receive different expiration times, leading to\n // tearing. Return the last read time. During the next idle callback, the\n // time will be updated.\n return currentSchedulerTime;\n}\n\n// requestWork is called by the scheduler whenever a root receives an update.\n// It's up to the renderer to call renderRoot at some point in the future.\nfunction requestWork(root, expirationTime) {\n addRootToSchedule(root, expirationTime);\n if (isRendering) {\n // Prevent reentrancy. Remaining work will be scheduled at the end of\n // the currently rendering batch.\n return;\n }\n\n if (isBatchingUpdates) {\n // Flush work at the end of the batch.\n if (isUnbatchingUpdates) {\n // ...unless we're inside unbatchedUpdates, in which case we should\n // flush it now.\n nextFlushedRoot = root;\n nextFlushedExpirationTime = Sync;\n performWorkOnRoot(root, Sync, false);\n }\n return;\n }\n\n // TODO: Get rid of Sync and use current time?\n if (expirationTime === Sync) {\n performSyncWork();\n } else {\n scheduleCallbackWithExpirationTime(root, expirationTime);\n }\n}\n\nfunction addRootToSchedule(root, expirationTime) {\n // Add the root to the schedule.\n // Check if this root is already part of the schedule.\n if (root.nextScheduledRoot === null) {\n // This root is not already scheduled. Add it.\n root.expirationTime = expirationTime;\n if (lastScheduledRoot === null) {\n firstScheduledRoot = lastScheduledRoot = root;\n root.nextScheduledRoot = root;\n } else {\n lastScheduledRoot.nextScheduledRoot = root;\n lastScheduledRoot = root;\n lastScheduledRoot.nextScheduledRoot = firstScheduledRoot;\n }\n } else {\n // This root is already scheduled, but its priority may have increased.\n var remainingExpirationTime = root.expirationTime;\n if (expirationTime > remainingExpirationTime) {\n // Update the priority.\n root.expirationTime = expirationTime;\n }\n }\n}\n\nfunction findHighestPriorityRoot() {\n var highestPriorityWork = NoWork;\n var highestPriorityRoot = null;\n if (lastScheduledRoot !== null) {\n var previousScheduledRoot = lastScheduledRoot;\n var root = firstScheduledRoot;\n while (root !== null) {\n var remainingExpirationTime = root.expirationTime;\n if (remainingExpirationTime === NoWork) {\n // This root no longer has work. Remove it from the scheduler.\n\n // TODO: This check is redudant, but Flow is confused by the branch\n // below where we set lastScheduledRoot to null, even though we break\n // from the loop right after.\n !(previousScheduledRoot !== null && lastScheduledRoot !== null) ? invariant(false, 'Should have a previous and last root. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n if (root === root.nextScheduledRoot) {\n // This is the only root in the list.\n root.nextScheduledRoot = null;\n firstScheduledRoot = lastScheduledRoot = null;\n break;\n } else if (root === firstScheduledRoot) {\n // This is the first root in the list.\n var next = root.nextScheduledRoot;\n firstScheduledRoot = next;\n lastScheduledRoot.nextScheduledRoot = next;\n root.nextScheduledRoot = null;\n } else if (root === lastScheduledRoot) {\n // This is the last root in the list.\n lastScheduledRoot = previousScheduledRoot;\n lastScheduledRoot.nextScheduledRoot = firstScheduledRoot;\n root.nextScheduledRoot = null;\n break;\n } else {\n previousScheduledRoot.nextScheduledRoot = root.nextScheduledRoot;\n root.nextScheduledRoot = null;\n }\n root = previousScheduledRoot.nextScheduledRoot;\n } else {\n if (remainingExpirationTime > highestPriorityWork) {\n // Update the priority, if it's higher\n highestPriorityWork = remainingExpirationTime;\n highestPriorityRoot = root;\n }\n if (root === lastScheduledRoot) {\n break;\n }\n if (highestPriorityWork === Sync) {\n // Sync is highest priority by definition so\n // we can stop searching.\n break;\n }\n previousScheduledRoot = root;\n root = root.nextScheduledRoot;\n }\n }\n }\n\n nextFlushedRoot = highestPriorityRoot;\n nextFlushedExpirationTime = highestPriorityWork;\n}\n\n// TODO: This wrapper exists because many of the older tests (the ones that use\n// flushDeferredPri) rely on the number of times `shouldYield` is called. We\n// should get rid of it.\nvar didYield = false;\nfunction shouldYieldToRenderer() {\n if (didYield) {\n return true;\n }\n if (scheduler.unstable_shouldYield()) {\n didYield = true;\n return true;\n }\n return false;\n}\n\nfunction performAsyncWork() {\n try {\n if (!shouldYieldToRenderer()) {\n // The callback timed out. That means at least one update has expired.\n // Iterate through the root schedule. If they contain expired work, set\n // the next render expiration time to the current time. This has the effect\n // of flushing all expired work in a single batch, instead of flushing each\n // level one at a time.\n if (firstScheduledRoot !== null) {\n recomputeCurrentRendererTime();\n var root = firstScheduledRoot;\n do {\n didExpireAtExpirationTime(root, currentRendererTime);\n // The root schedule is circular, so this is never null.\n root = root.nextScheduledRoot;\n } while (root !== firstScheduledRoot);\n }\n }\n performWork(NoWork, true);\n } finally {\n didYield = false;\n }\n}\n\nfunction performSyncWork() {\n performWork(Sync, false);\n}\n\nfunction performWork(minExpirationTime, isYieldy) {\n // Keep working on roots until there's no more work, or until there's a higher\n // priority event.\n findHighestPriorityRoot();\n\n if (isYieldy) {\n recomputeCurrentRendererTime();\n currentSchedulerTime = currentRendererTime;\n\n if (enableUserTimingAPI) {\n var didExpire = nextFlushedExpirationTime > currentRendererTime;\n var timeout = expirationTimeToMs(nextFlushedExpirationTime);\n stopRequestCallbackTimer(didExpire, timeout);\n }\n\n while (nextFlushedRoot !== null && nextFlushedExpirationTime !== NoWork && minExpirationTime <= nextFlushedExpirationTime && !(didYield && currentRendererTime > nextFlushedExpirationTime)) {\n performWorkOnRoot(nextFlushedRoot, nextFlushedExpirationTime, currentRendererTime > nextFlushedExpirationTime);\n findHighestPriorityRoot();\n recomputeCurrentRendererTime();\n currentSchedulerTime = currentRendererTime;\n }\n } else {\n while (nextFlushedRoot !== null && nextFlushedExpirationTime !== NoWork && minExpirationTime <= nextFlushedExpirationTime) {\n performWorkOnRoot(nextFlushedRoot, nextFlushedExpirationTime, false);\n findHighestPriorityRoot();\n }\n }\n\n // We're done flushing work. Either we ran out of time in this callback,\n // or there's no more work left with sufficient priority.\n\n // If we're inside a callback, set this to false since we just completed it.\n if (isYieldy) {\n callbackExpirationTime = NoWork;\n callbackID = null;\n }\n // If there's work left over, schedule a new callback.\n if (nextFlushedExpirationTime !== NoWork) {\n scheduleCallbackWithExpirationTime(nextFlushedRoot, nextFlushedExpirationTime);\n }\n\n // Clean-up.\n finishRendering();\n}\n\nfunction flushRoot(root, expirationTime) {\n !!isRendering ? invariant(false, 'work.commit(): Cannot commit while already rendering. This likely means you attempted to commit from inside a lifecycle method.') : void 0;\n // Perform work on root as if the given expiration time is the current time.\n // This has the effect of synchronously flushing all work up to and\n // including the given time.\n nextFlushedRoot = root;\n nextFlushedExpirationTime = expirationTime;\n performWorkOnRoot(root, expirationTime, false);\n // Flush any sync work that was scheduled by lifecycles\n performSyncWork();\n}\n\nfunction finishRendering() {\n nestedUpdateCount = 0;\n lastCommittedRootDuringThisBatch = null;\n\n if (completedBatches !== null) {\n var batches = completedBatches;\n completedBatches = null;\n for (var i = 0; i < batches.length; i++) {\n var batch = batches[i];\n try {\n batch._onComplete();\n } catch (error) {\n if (!hasUnhandledError) {\n hasUnhandledError = true;\n unhandledError = error;\n }\n }\n }\n }\n\n if (hasUnhandledError) {\n var error = unhandledError;\n unhandledError = null;\n hasUnhandledError = false;\n throw error;\n }\n}\n\nfunction performWorkOnRoot(root, expirationTime, isYieldy) {\n !!isRendering ? invariant(false, 'performWorkOnRoot was called recursively. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n\n isRendering = true;\n\n // Check if this is async work or sync/expired work.\n if (!isYieldy) {\n // Flush work without yielding.\n // TODO: Non-yieldy work does not necessarily imply expired work. A renderer\n // may want to perform some work without yielding, but also without\n // requiring the root to complete (by triggering placeholders).\n\n var finishedWork = root.finishedWork;\n if (finishedWork !== null) {\n // This root is already complete. We can commit it.\n completeRoot(root, finishedWork, expirationTime);\n } else {\n root.finishedWork = null;\n // If this root previously suspended, clear its existing timeout, since\n // we're about to try rendering again.\n var timeoutHandle = root.timeoutHandle;\n if (timeoutHandle !== noTimeout) {\n root.timeoutHandle = noTimeout;\n // $FlowFixMe Complains noTimeout is not a TimeoutID, despite the check above\n cancelTimeout(timeoutHandle);\n }\n renderRoot(root, isYieldy);\n finishedWork = root.finishedWork;\n if (finishedWork !== null) {\n // We've completed the root. Commit it.\n completeRoot(root, finishedWork, expirationTime);\n }\n }\n } else {\n // Flush async work.\n var _finishedWork = root.finishedWork;\n if (_finishedWork !== null) {\n // This root is already complete. We can commit it.\n completeRoot(root, _finishedWork, expirationTime);\n } else {\n root.finishedWork = null;\n // If this root previously suspended, clear its existing timeout, since\n // we're about to try rendering again.\n var _timeoutHandle = root.timeoutHandle;\n if (_timeoutHandle !== noTimeout) {\n root.timeoutHandle = noTimeout;\n // $FlowFixMe Complains noTimeout is not a TimeoutID, despite the check above\n cancelTimeout(_timeoutHandle);\n }\n renderRoot(root, isYieldy);\n _finishedWork = root.finishedWork;\n if (_finishedWork !== null) {\n // We've completed the root. Check the if we should yield one more time\n // before committing.\n if (!shouldYieldToRenderer()) {\n // Still time left. Commit the root.\n completeRoot(root, _finishedWork, expirationTime);\n } else {\n // There's no time left. Mark this root as complete. We'll come\n // back and commit it later.\n root.finishedWork = _finishedWork;\n }\n }\n }\n }\n\n isRendering = false;\n}\n\nfunction completeRoot(root, finishedWork, expirationTime) {\n // Check if there's a batch that matches this expiration time.\n var firstBatch = root.firstBatch;\n if (firstBatch !== null && firstBatch._expirationTime >= expirationTime) {\n if (completedBatches === null) {\n completedBatches = [firstBatch];\n } else {\n completedBatches.push(firstBatch);\n }\n if (firstBatch._defer) {\n // This root is blocked from committing by a batch. Unschedule it until\n // we receive another update.\n root.finishedWork = finishedWork;\n root.expirationTime = NoWork;\n return;\n }\n }\n\n // Commit the root.\n root.finishedWork = null;\n\n // Check if this is a nested update (a sync update scheduled during the\n // commit phase).\n if (root === lastCommittedRootDuringThisBatch) {\n // If the next root is the same as the previous root, this is a nested\n // update. To prevent an infinite loop, increment the nested update count.\n nestedUpdateCount++;\n } else {\n // Reset whenever we switch roots.\n lastCommittedRootDuringThisBatch = root;\n nestedUpdateCount = 0;\n }\n scheduler.unstable_runWithPriority(scheduler.unstable_ImmediatePriority, function () {\n commitRoot(root, finishedWork);\n });\n}\n\nfunction onUncaughtError(error) {\n !(nextFlushedRoot !== null) ? invariant(false, 'Should be working on a root. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n // Unschedule this root so we don't work on it again until there's\n // another update.\n nextFlushedRoot.expirationTime = NoWork;\n if (!hasUnhandledError) {\n hasUnhandledError = true;\n unhandledError = error;\n }\n}\n\n// TODO: Batching should be implemented at the renderer level, not inside\n// the reconciler.\nfunction batchedUpdates$1(fn, a) {\n var previousIsBatchingUpdates = isBatchingUpdates;\n isBatchingUpdates = true;\n try {\n return fn(a);\n } finally {\n isBatchingUpdates = previousIsBatchingUpdates;\n if (!isBatchingUpdates && !isRendering) {\n performSyncWork();\n }\n }\n}\n\n// TODO: Batching should be implemented at the renderer level, not inside\n// the reconciler.\nfunction unbatchedUpdates(fn, a) {\n if (isBatchingUpdates && !isUnbatchingUpdates) {\n isUnbatchingUpdates = true;\n try {\n return fn(a);\n } finally {\n isUnbatchingUpdates = false;\n }\n }\n return fn(a);\n}\n\n// TODO: Batching should be implemented at the renderer level, not within\n// the reconciler.\nfunction flushSync(fn, a) {\n !!isRendering ? invariant(false, 'flushSync was called from inside a lifecycle method. It cannot be called when React is already rendering.') : void 0;\n var previousIsBatchingUpdates = isBatchingUpdates;\n isBatchingUpdates = true;\n try {\n return syncUpdates(fn, a);\n } finally {\n isBatchingUpdates = previousIsBatchingUpdates;\n performSyncWork();\n }\n}\n\nfunction interactiveUpdates$1(fn, a, b) {\n // If there are any pending interactive updates, synchronously flush them.\n // This needs to happen before we read any handlers, because the effect of\n // the previous event may influence which handlers are called during\n // this event.\n if (!isBatchingUpdates && !isRendering && lowestPriorityPendingInteractiveExpirationTime !== NoWork) {\n // Synchronously flush pending interactive updates.\n performWork(lowestPriorityPendingInteractiveExpirationTime, false);\n lowestPriorityPendingInteractiveExpirationTime = NoWork;\n }\n var previousIsBatchingUpdates = isBatchingUpdates;\n isBatchingUpdates = true;\n try {\n return scheduler.unstable_runWithPriority(scheduler.unstable_UserBlockingPriority, function () {\n return fn(a, b);\n });\n } finally {\n isBatchingUpdates = previousIsBatchingUpdates;\n if (!isBatchingUpdates && !isRendering) {\n performSyncWork();\n }\n }\n}\n\nfunction flushInteractiveUpdates$1() {\n if (!isRendering && lowestPriorityPendingInteractiveExpirationTime !== NoWork) {\n // Synchronously flush pending interactive updates.\n performWork(lowestPriorityPendingInteractiveExpirationTime, false);\n lowestPriorityPendingInteractiveExpirationTime = NoWork;\n }\n}\n\nfunction flushControlled(fn) {\n var previousIsBatchingUpdates = isBatchingUpdates;\n isBatchingUpdates = true;\n try {\n syncUpdates(fn);\n } finally {\n isBatchingUpdates = previousIsBatchingUpdates;\n if (!isBatchingUpdates && !isRendering) {\n performSyncWork();\n }\n }\n}\n\n// 0 is PROD, 1 is DEV.\n// Might add PROFILE later.\n\n\nvar didWarnAboutNestedUpdates = void 0;\nvar didWarnAboutFindNodeInStrictMode = void 0;\n\n{\n didWarnAboutNestedUpdates = false;\n didWarnAboutFindNodeInStrictMode = {};\n}\n\nfunction getContextForSubtree(parentComponent) {\n if (!parentComponent) {\n return emptyContextObject;\n }\n\n var fiber = get(parentComponent);\n var parentContext = findCurrentUnmaskedContext(fiber);\n\n if (fiber.tag === ClassComponent) {\n var Component = fiber.type;\n if (isContextProvider(Component)) {\n return processChildContext(fiber, Component, parentContext);\n }\n }\n\n return parentContext;\n}\n\nfunction scheduleRootUpdate(current$$1, element, expirationTime, callback) {\n {\n if (phase === 'render' && current !== null && !didWarnAboutNestedUpdates) {\n didWarnAboutNestedUpdates = true;\n warningWithoutStack$1(false, 'Render methods should be a pure function of props and state; ' + 'triggering nested component updates from render is not allowed. ' + 'If necessary, trigger nested updates in componentDidUpdate.\\n\\n' + 'Check the render method of %s.', getComponentName(current.type) || 'Unknown');\n }\n }\n\n var update = createUpdate(expirationTime);\n // Caution: React DevTools currently depends on this property\n // being called \"element\".\n update.payload = { element: element };\n\n callback = callback === undefined ? null : callback;\n if (callback !== null) {\n !(typeof callback === 'function') ? warningWithoutStack$1(false, 'render(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callback) : void 0;\n update.callback = callback;\n }\n\n flushPassiveEffects();\n enqueueUpdate(current$$1, update);\n scheduleWork(current$$1, expirationTime);\n\n return expirationTime;\n}\n\nfunction updateContainerAtExpirationTime(element, container, parentComponent, expirationTime, callback) {\n // TODO: If this is a nested container, this won't be the root.\n var current$$1 = container.current;\n\n {\n if (ReactFiberInstrumentation_1.debugTool) {\n if (current$$1.alternate === null) {\n ReactFiberInstrumentation_1.debugTool.onMountContainer(container);\n } else if (element === null) {\n ReactFiberInstrumentation_1.debugTool.onUnmountContainer(container);\n } else {\n ReactFiberInstrumentation_1.debugTool.onUpdateContainer(container);\n }\n }\n }\n\n var context = getContextForSubtree(parentComponent);\n if (container.context === null) {\n container.context = context;\n } else {\n container.pendingContext = context;\n }\n\n return scheduleRootUpdate(current$$1, element, expirationTime, callback);\n}\n\nfunction findHostInstance(component) {\n var fiber = get(component);\n if (fiber === undefined) {\n if (typeof component.render === 'function') {\n invariant(false, 'Unable to find node on an unmounted component.');\n } else {\n invariant(false, 'Argument appears to not be a ReactComponent. Keys: %s', Object.keys(component));\n }\n }\n var hostFiber = findCurrentHostFiber(fiber);\n if (hostFiber === null) {\n return null;\n }\n return hostFiber.stateNode;\n}\n\nfunction findHostInstanceWithWarning(component, methodName) {\n {\n var fiber = get(component);\n if (fiber === undefined) {\n if (typeof component.render === 'function') {\n invariant(false, 'Unable to find node on an unmounted component.');\n } else {\n invariant(false, 'Argument appears to not be a ReactComponent. Keys: %s', Object.keys(component));\n }\n }\n var hostFiber = findCurrentHostFiber(fiber);\n if (hostFiber === null) {\n return null;\n }\n if (hostFiber.mode & StrictMode) {\n var componentName = getComponentName(fiber.type) || 'Component';\n if (!didWarnAboutFindNodeInStrictMode[componentName]) {\n didWarnAboutFindNodeInStrictMode[componentName] = true;\n if (fiber.mode & StrictMode) {\n warningWithoutStack$1(false, '%s is deprecated in StrictMode. ' + '%s was passed an instance of %s which is inside StrictMode. ' + 'Instead, add a ref directly to the element you want to reference.' + '\\n%s' + '\\n\\nLearn more about using refs safely here:' + '\\nhttps://fb.me/react-strict-mode-find-node', methodName, methodName, componentName, getStackByFiberInDevAndProd(hostFiber));\n } else {\n warningWithoutStack$1(false, '%s is deprecated in StrictMode. ' + '%s was passed an instance of %s which renders StrictMode children. ' + 'Instead, add a ref directly to the element you want to reference.' + '\\n%s' + '\\n\\nLearn more about using refs safely here:' + '\\nhttps://fb.me/react-strict-mode-find-node', methodName, methodName, componentName, getStackByFiberInDevAndProd(hostFiber));\n }\n }\n }\n return hostFiber.stateNode;\n }\n return findHostInstance(component);\n}\n\nfunction createContainer(containerInfo, isConcurrent, hydrate) {\n return createFiberRoot(containerInfo, isConcurrent, hydrate);\n}\n\nfunction updateContainer(element, container, parentComponent, callback) {\n var current$$1 = container.current;\n var currentTime = requestCurrentTime();\n var expirationTime = computeExpirationForFiber(currentTime, current$$1);\n return updateContainerAtExpirationTime(element, container, parentComponent, expirationTime, callback);\n}\n\nfunction getPublicRootInstance(container) {\n var containerFiber = container.current;\n if (!containerFiber.child) {\n return null;\n }\n switch (containerFiber.child.tag) {\n case HostComponent:\n return getPublicInstance(containerFiber.child.stateNode);\n default:\n return containerFiber.child.stateNode;\n }\n}\n\nfunction findHostInstanceWithNoPortals(fiber) {\n var hostFiber = findCurrentHostFiberWithNoPortals(fiber);\n if (hostFiber === null) {\n return null;\n }\n return hostFiber.stateNode;\n}\n\nvar overrideProps = null;\n\n{\n var copyWithSetImpl = function (obj, path, idx, value) {\n if (idx >= path.length) {\n return value;\n }\n var key = path[idx];\n var updated = Array.isArray(obj) ? obj.slice() : _assign({}, obj);\n // $FlowFixMe number or string is fine here\n updated[key] = copyWithSetImpl(obj[key], path, idx + 1, value);\n return updated;\n };\n\n var copyWithSet = function (obj, path, value) {\n return copyWithSetImpl(obj, path, 0, value);\n };\n\n // Support DevTools props for function components, forwardRef, memo, host components, etc.\n overrideProps = function (fiber, path, value) {\n flushPassiveEffects();\n fiber.pendingProps = copyWithSet(fiber.memoizedProps, path, value);\n if (fiber.alternate) {\n fiber.alternate.pendingProps = fiber.pendingProps;\n }\n scheduleWork(fiber, Sync);\n };\n}\n\nfunction injectIntoDevTools(devToolsConfig) {\n var findFiberByHostInstance = devToolsConfig.findFiberByHostInstance;\n var ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\n\n\n return injectInternals(_assign({}, devToolsConfig, {\n overrideProps: overrideProps,\n currentDispatcherRef: ReactCurrentDispatcher,\n findHostInstanceByFiber: function (fiber) {\n var hostFiber = findCurrentHostFiber(fiber);\n if (hostFiber === null) {\n return null;\n }\n return hostFiber.stateNode;\n },\n findFiberByHostInstance: function (instance) {\n if (!findFiberByHostInstance) {\n // Might not be implemented by the renderer.\n return null;\n }\n return findFiberByHostInstance(instance);\n }\n }));\n}\n\n// This file intentionally does *not* have the Flow annotation.\n// Don't add it. See `./inline-typed.js` for an explanation.\n\nfunction createPortal$1(children, containerInfo,\n// TODO: figure out the API for cross-renderer implementation.\nimplementation) {\n var key = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n return {\n // This tag allow us to uniquely identify this as a React Portal\n $$typeof: REACT_PORTAL_TYPE,\n key: key == null ? null : '' + key,\n children: children,\n containerInfo: containerInfo,\n implementation: implementation\n };\n}\n\n// TODO: this is special because it gets imported during build.\n\nvar ReactVersion = '16.8.6';\n\n// TODO: This type is shared between the reconciler and ReactDOM, but will\n// eventually be lifted out to the renderer.\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\n\nvar topLevelUpdateWarnings = void 0;\nvar warnOnInvalidCallback = void 0;\nvar didWarnAboutUnstableCreatePortal = false;\n\n{\n if (typeof Map !== 'function' ||\n // $FlowIssue Flow incorrectly thinks Map has no prototype\n Map.prototype == null || typeof Map.prototype.forEach !== 'function' || typeof Set !== 'function' ||\n // $FlowIssue Flow incorrectly thinks Set has no prototype\n Set.prototype == null || typeof Set.prototype.clear !== 'function' || typeof Set.prototype.forEach !== 'function') {\n warningWithoutStack$1(false, 'React depends on Map and Set built-in types. Make sure that you load a ' + 'polyfill in older browsers. https://fb.me/react-polyfills');\n }\n\n topLevelUpdateWarnings = function (container) {\n if (container._reactRootContainer && container.nodeType !== COMMENT_NODE) {\n var hostInstance = findHostInstanceWithNoPortals(container._reactRootContainer._internalRoot.current);\n if (hostInstance) {\n !(hostInstance.parentNode === container) ? warningWithoutStack$1(false, 'render(...): It looks like the React-rendered content of this ' + 'container was removed without using React. This is not ' + 'supported and will cause errors. Instead, call ' + 'ReactDOM.unmountComponentAtNode to empty a container.') : void 0;\n }\n }\n\n var isRootRenderedBySomeReact = !!container._reactRootContainer;\n var rootEl = getReactRootElementInContainer(container);\n var hasNonRootReactChild = !!(rootEl && getInstanceFromNode$1(rootEl));\n\n !(!hasNonRootReactChild || isRootRenderedBySomeReact) ? warningWithoutStack$1(false, 'render(...): Replacing React-rendered children with a new root ' + 'component. If you intended to update the children of this node, ' + 'you should instead have the existing children update their state ' + 'and render the new components instead of calling ReactDOM.render.') : void 0;\n\n !(container.nodeType !== ELEMENT_NODE || !container.tagName || container.tagName.toUpperCase() !== 'BODY') ? warningWithoutStack$1(false, 'render(): Rendering components directly into document.body is ' + 'discouraged, since its children are often manipulated by third-party ' + 'scripts and browser extensions. This may lead to subtle ' + 'reconciliation issues. Try rendering into a container element created ' + 'for your app.') : void 0;\n };\n\n warnOnInvalidCallback = function (callback, callerName) {\n !(callback === null || typeof callback === 'function') ? warningWithoutStack$1(false, '%s(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callerName, callback) : void 0;\n };\n}\n\nsetRestoreImplementation(restoreControlledState$1);\n\nfunction ReactBatch(root) {\n var expirationTime = computeUniqueAsyncExpiration();\n this._expirationTime = expirationTime;\n this._root = root;\n this._next = null;\n this._callbacks = null;\n this._didComplete = false;\n this._hasChildren = false;\n this._children = null;\n this._defer = true;\n}\nReactBatch.prototype.render = function (children) {\n !this._defer ? invariant(false, 'batch.render: Cannot render a batch that already committed.') : void 0;\n this._hasChildren = true;\n this._children = children;\n var internalRoot = this._root._internalRoot;\n var expirationTime = this._expirationTime;\n var work = new ReactWork();\n updateContainerAtExpirationTime(children, internalRoot, null, expirationTime, work._onCommit);\n return work;\n};\nReactBatch.prototype.then = function (onComplete) {\n if (this._didComplete) {\n onComplete();\n return;\n }\n var callbacks = this._callbacks;\n if (callbacks === null) {\n callbacks = this._callbacks = [];\n }\n callbacks.push(onComplete);\n};\nReactBatch.prototype.commit = function () {\n var internalRoot = this._root._internalRoot;\n var firstBatch = internalRoot.firstBatch;\n !(this._defer && firstBatch !== null) ? invariant(false, 'batch.commit: Cannot commit a batch multiple times.') : void 0;\n\n if (!this._hasChildren) {\n // This batch is empty. Return.\n this._next = null;\n this._defer = false;\n return;\n }\n\n var expirationTime = this._expirationTime;\n\n // Ensure this is the first batch in the list.\n if (firstBatch !== this) {\n // This batch is not the earliest batch. We need to move it to the front.\n // Update its expiration time to be the expiration time of the earliest\n // batch, so that we can flush it without flushing the other batches.\n if (this._hasChildren) {\n expirationTime = this._expirationTime = firstBatch._expirationTime;\n // Rendering this batch again ensures its children will be the final state\n // when we flush (updates are processed in insertion order: last\n // update wins).\n // TODO: This forces a restart. Should we print a warning?\n this.render(this._children);\n }\n\n // Remove the batch from the list.\n var previous = null;\n var batch = firstBatch;\n while (batch !== this) {\n previous = batch;\n batch = batch._next;\n }\n !(previous !== null) ? invariant(false, 'batch.commit: Cannot commit a batch multiple times.') : void 0;\n previous._next = batch._next;\n\n // Add it to the front.\n this._next = firstBatch;\n firstBatch = internalRoot.firstBatch = this;\n }\n\n // Synchronously flush all the work up to this batch's expiration time.\n this._defer = false;\n flushRoot(internalRoot, expirationTime);\n\n // Pop the batch from the list.\n var next = this._next;\n this._next = null;\n firstBatch = internalRoot.firstBatch = next;\n\n // Append the next earliest batch's children to the update queue.\n if (firstBatch !== null && firstBatch._hasChildren) {\n firstBatch.render(firstBatch._children);\n }\n};\nReactBatch.prototype._onComplete = function () {\n if (this._didComplete) {\n return;\n }\n this._didComplete = true;\n var callbacks = this._callbacks;\n if (callbacks === null) {\n return;\n }\n // TODO: Error handling.\n for (var i = 0; i < callbacks.length; i++) {\n var _callback = callbacks[i];\n _callback();\n }\n};\n\nfunction ReactWork() {\n this._callbacks = null;\n this._didCommit = false;\n // TODO: Avoid need to bind by replacing callbacks in the update queue with\n // list of Work objects.\n this._onCommit = this._onCommit.bind(this);\n}\nReactWork.prototype.then = function (onCommit) {\n if (this._didCommit) {\n onCommit();\n return;\n }\n var callbacks = this._callbacks;\n if (callbacks === null) {\n callbacks = this._callbacks = [];\n }\n callbacks.push(onCommit);\n};\nReactWork.prototype._onCommit = function () {\n if (this._didCommit) {\n return;\n }\n this._didCommit = true;\n var callbacks = this._callbacks;\n if (callbacks === null) {\n return;\n }\n // TODO: Error handling.\n for (var i = 0; i < callbacks.length; i++) {\n var _callback2 = callbacks[i];\n !(typeof _callback2 === 'function') ? invariant(false, 'Invalid argument passed as callback. Expected a function. Instead received: %s', _callback2) : void 0;\n _callback2();\n }\n};\n\nfunction ReactRoot(container, isConcurrent, hydrate) {\n var root = createContainer(container, isConcurrent, hydrate);\n this._internalRoot = root;\n}\nReactRoot.prototype.render = function (children, callback) {\n var root = this._internalRoot;\n var work = new ReactWork();\n callback = callback === undefined ? null : callback;\n {\n warnOnInvalidCallback(callback, 'render');\n }\n if (callback !== null) {\n work.then(callback);\n }\n updateContainer(children, root, null, work._onCommit);\n return work;\n};\nReactRoot.prototype.unmount = function (callback) {\n var root = this._internalRoot;\n var work = new ReactWork();\n callback = callback === undefined ? null : callback;\n {\n warnOnInvalidCallback(callback, 'render');\n }\n if (callback !== null) {\n work.then(callback);\n }\n updateContainer(null, root, null, work._onCommit);\n return work;\n};\nReactRoot.prototype.legacy_renderSubtreeIntoContainer = function (parentComponent, children, callback) {\n var root = this._internalRoot;\n var work = new ReactWork();\n callback = callback === undefined ? null : callback;\n {\n warnOnInvalidCallback(callback, 'render');\n }\n if (callback !== null) {\n work.then(callback);\n }\n updateContainer(children, root, parentComponent, work._onCommit);\n return work;\n};\nReactRoot.prototype.createBatch = function () {\n var batch = new ReactBatch(this);\n var expirationTime = batch._expirationTime;\n\n var internalRoot = this._internalRoot;\n var firstBatch = internalRoot.firstBatch;\n if (firstBatch === null) {\n internalRoot.firstBatch = batch;\n batch._next = null;\n } else {\n // Insert sorted by expiration time then insertion order\n var insertAfter = null;\n var insertBefore = firstBatch;\n while (insertBefore !== null && insertBefore._expirationTime >= expirationTime) {\n insertAfter = insertBefore;\n insertBefore = insertBefore._next;\n }\n batch._next = insertBefore;\n if (insertAfter !== null) {\n insertAfter._next = batch;\n }\n }\n\n return batch;\n};\n\n/**\n * True if the supplied DOM node is a valid node element.\n *\n * @param {?DOMElement} node The candidate DOM node.\n * @return {boolean} True if the DOM is a valid DOM node.\n * @internal\n */\nfunction isValidContainer(node) {\n return !!(node && (node.nodeType === ELEMENT_NODE || node.nodeType === DOCUMENT_NODE || node.nodeType === DOCUMENT_FRAGMENT_NODE || node.nodeType === COMMENT_NODE && node.nodeValue === ' react-mount-point-unstable '));\n}\n\nfunction getReactRootElementInContainer(container) {\n if (!container) {\n return null;\n }\n\n if (container.nodeType === DOCUMENT_NODE) {\n return container.documentElement;\n } else {\n return container.firstChild;\n }\n}\n\nfunction shouldHydrateDueToLegacyHeuristic(container) {\n var rootElement = getReactRootElementInContainer(container);\n return !!(rootElement && rootElement.nodeType === ELEMENT_NODE && rootElement.hasAttribute(ROOT_ATTRIBUTE_NAME));\n}\n\nsetBatchingImplementation(batchedUpdates$1, interactiveUpdates$1, flushInteractiveUpdates$1);\n\nvar warnedAboutHydrateAPI = false;\n\nfunction legacyCreateRootFromDOMContainer(container, forceHydrate) {\n var shouldHydrate = forceHydrate || shouldHydrateDueToLegacyHeuristic(container);\n // First clear any existing content.\n if (!shouldHydrate) {\n var warned = false;\n var rootSibling = void 0;\n while (rootSibling = container.lastChild) {\n {\n if (!warned && rootSibling.nodeType === ELEMENT_NODE && rootSibling.hasAttribute(ROOT_ATTRIBUTE_NAME)) {\n warned = true;\n warningWithoutStack$1(false, 'render(): Target node has markup rendered by React, but there ' + 'are unrelated nodes as well. This is most commonly caused by ' + 'white-space inserted around server-rendered markup.');\n }\n }\n container.removeChild(rootSibling);\n }\n }\n {\n if (shouldHydrate && !forceHydrate && !warnedAboutHydrateAPI) {\n warnedAboutHydrateAPI = true;\n lowPriorityWarning$1(false, 'render(): Calling ReactDOM.render() to hydrate server-rendered markup ' + 'will stop working in React v17. Replace the ReactDOM.render() call ' + 'with ReactDOM.hydrate() if you want React to attach to the server HTML.');\n }\n }\n // Legacy roots are not async by default.\n var isConcurrent = false;\n return new ReactRoot(container, isConcurrent, shouldHydrate);\n}\n\nfunction legacyRenderSubtreeIntoContainer(parentComponent, children, container, forceHydrate, callback) {\n {\n topLevelUpdateWarnings(container);\n }\n\n // TODO: Without `any` type, Flow says \"Property cannot be accessed on any\n // member of intersection type.\" Whyyyyyy.\n var root = container._reactRootContainer;\n if (!root) {\n // Initial mount\n root = container._reactRootContainer = legacyCreateRootFromDOMContainer(container, forceHydrate);\n if (typeof callback === 'function') {\n var originalCallback = callback;\n callback = function () {\n var instance = getPublicRootInstance(root._internalRoot);\n originalCallback.call(instance);\n };\n }\n // Initial mount should not be batched.\n unbatchedUpdates(function () {\n if (parentComponent != null) {\n root.legacy_renderSubtreeIntoContainer(parentComponent, children, callback);\n } else {\n root.render(children, callback);\n }\n });\n } else {\n if (typeof callback === 'function') {\n var _originalCallback = callback;\n callback = function () {\n var instance = getPublicRootInstance(root._internalRoot);\n _originalCallback.call(instance);\n };\n }\n // Update\n if (parentComponent != null) {\n root.legacy_renderSubtreeIntoContainer(parentComponent, children, callback);\n } else {\n root.render(children, callback);\n }\n }\n return getPublicRootInstance(root._internalRoot);\n}\n\nfunction createPortal$$1(children, container) {\n var key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n !isValidContainer(container) ? invariant(false, 'Target container is not a DOM element.') : void 0;\n // TODO: pass ReactDOM portal implementation as third argument\n return createPortal$1(children, container, null, key);\n}\n\nvar ReactDOM = {\n createPortal: createPortal$$1,\n\n findDOMNode: function (componentOrElement) {\n {\n var owner = ReactCurrentOwner.current;\n if (owner !== null && owner.stateNode !== null) {\n var warnedAboutRefsInRender = owner.stateNode._warnedAboutRefsInRender;\n !warnedAboutRefsInRender ? warningWithoutStack$1(false, '%s is accessing findDOMNode inside its render(). ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', getComponentName(owner.type) || 'A component') : void 0;\n owner.stateNode._warnedAboutRefsInRender = true;\n }\n }\n if (componentOrElement == null) {\n return null;\n }\n if (componentOrElement.nodeType === ELEMENT_NODE) {\n return componentOrElement;\n }\n {\n return findHostInstanceWithWarning(componentOrElement, 'findDOMNode');\n }\n return findHostInstance(componentOrElement);\n },\n hydrate: function (element, container, callback) {\n !isValidContainer(container) ? invariant(false, 'Target container is not a DOM element.') : void 0;\n {\n !!container._reactHasBeenPassedToCreateRootDEV ? warningWithoutStack$1(false, 'You are calling ReactDOM.hydrate() on a container that was previously ' + 'passed to ReactDOM.%s(). This is not supported. ' + 'Did you mean to call createRoot(container, {hydrate: true}).render(element)?', enableStableConcurrentModeAPIs ? 'createRoot' : 'unstable_createRoot') : void 0;\n }\n // TODO: throw or warn if we couldn't hydrate?\n return legacyRenderSubtreeIntoContainer(null, element, container, true, callback);\n },\n render: function (element, container, callback) {\n !isValidContainer(container) ? invariant(false, 'Target container is not a DOM element.') : void 0;\n {\n !!container._reactHasBeenPassedToCreateRootDEV ? warningWithoutStack$1(false, 'You are calling ReactDOM.render() on a container that was previously ' + 'passed to ReactDOM.%s(). This is not supported. ' + 'Did you mean to call root.render(element)?', enableStableConcurrentModeAPIs ? 'createRoot' : 'unstable_createRoot') : void 0;\n }\n return legacyRenderSubtreeIntoContainer(null, element, container, false, callback);\n },\n unstable_renderSubtreeIntoContainer: function (parentComponent, element, containerNode, callback) {\n !isValidContainer(containerNode) ? invariant(false, 'Target container is not a DOM element.') : void 0;\n !(parentComponent != null && has(parentComponent)) ? invariant(false, 'parentComponent must be a valid React Component') : void 0;\n return legacyRenderSubtreeIntoContainer(parentComponent, element, containerNode, false, callback);\n },\n unmountComponentAtNode: function (container) {\n !isValidContainer(container) ? invariant(false, 'unmountComponentAtNode(...): Target container is not a DOM element.') : void 0;\n\n {\n !!container._reactHasBeenPassedToCreateRootDEV ? warningWithoutStack$1(false, 'You are calling ReactDOM.unmountComponentAtNode() on a container that was previously ' + 'passed to ReactDOM.%s(). This is not supported. Did you mean to call root.unmount()?', enableStableConcurrentModeAPIs ? 'createRoot' : 'unstable_createRoot') : void 0;\n }\n\n if (container._reactRootContainer) {\n {\n var rootEl = getReactRootElementInContainer(container);\n var renderedByDifferentReact = rootEl && !getInstanceFromNode$1(rootEl);\n !!renderedByDifferentReact ? warningWithoutStack$1(false, \"unmountComponentAtNode(): The node you're attempting to unmount \" + 'was rendered by another copy of React.') : void 0;\n }\n\n // Unmount should not be batched.\n unbatchedUpdates(function () {\n legacyRenderSubtreeIntoContainer(null, null, container, false, function () {\n container._reactRootContainer = null;\n });\n });\n // If you call unmountComponentAtNode twice in quick succession, you'll\n // get `true` twice. That's probably fine?\n return true;\n } else {\n {\n var _rootEl = getReactRootElementInContainer(container);\n var hasNonRootReactChild = !!(_rootEl && getInstanceFromNode$1(_rootEl));\n\n // Check if the container itself is a React root node.\n var isContainerReactRoot = container.nodeType === ELEMENT_NODE && isValidContainer(container.parentNode) && !!container.parentNode._reactRootContainer;\n\n !!hasNonRootReactChild ? warningWithoutStack$1(false, \"unmountComponentAtNode(): The node you're attempting to unmount \" + 'was rendered by React and is not a top-level container. %s', isContainerReactRoot ? 'You may have accidentally passed in a React root node instead ' + 'of its container.' : 'Instead, have the parent component update its state and ' + 'rerender in order to remove this component.') : void 0;\n }\n\n return false;\n }\n },\n\n\n // Temporary alias since we already shipped React 16 RC with it.\n // TODO: remove in React 17.\n unstable_createPortal: function () {\n if (!didWarnAboutUnstableCreatePortal) {\n didWarnAboutUnstableCreatePortal = true;\n lowPriorityWarning$1(false, 'The ReactDOM.unstable_createPortal() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactDOM.createPortal() instead. It has the exact same API, ' + 'but without the \"unstable_\" prefix.');\n }\n return createPortal$$1.apply(undefined, arguments);\n },\n\n\n unstable_batchedUpdates: batchedUpdates$1,\n\n unstable_interactiveUpdates: interactiveUpdates$1,\n\n flushSync: flushSync,\n\n unstable_createRoot: createRoot,\n unstable_flushControlled: flushControlled,\n\n __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: {\n // Keep in sync with ReactDOMUnstableNativeDependencies.js\n // and ReactTestUtils.js. This is an array for better minification.\n Events: [getInstanceFromNode$1, getNodeFromInstance$1, getFiberCurrentPropsFromNode$1, injection.injectEventPluginsByName, eventNameDispatchConfigs, accumulateTwoPhaseDispatches, accumulateDirectDispatches, enqueueStateRestore, restoreStateIfNeeded, dispatchEvent, runEventsInBatch]\n }\n};\n\nfunction createRoot(container, options) {\n var functionName = enableStableConcurrentModeAPIs ? 'createRoot' : 'unstable_createRoot';\n !isValidContainer(container) ? invariant(false, '%s(...): Target container is not a DOM element.', functionName) : void 0;\n {\n !!container._reactRootContainer ? warningWithoutStack$1(false, 'You are calling ReactDOM.%s() on a container that was previously ' + 'passed to ReactDOM.render(). This is not supported.', enableStableConcurrentModeAPIs ? 'createRoot' : 'unstable_createRoot') : void 0;\n container._reactHasBeenPassedToCreateRootDEV = true;\n }\n var hydrate = options != null && options.hydrate === true;\n return new ReactRoot(container, true, hydrate);\n}\n\nif (enableStableConcurrentModeAPIs) {\n ReactDOM.createRoot = createRoot;\n ReactDOM.unstable_createRoot = undefined;\n}\n\nvar foundDevTools = injectIntoDevTools({\n findFiberByHostInstance: getClosestInstanceFromNode,\n bundleType: 1,\n version: ReactVersion,\n rendererPackageName: 'react-dom'\n});\n\n{\n if (!foundDevTools && canUseDOM && window.top === window.self) {\n // If we're in Chrome or Firefox, provide a download link if not installed.\n if (navigator.userAgent.indexOf('Chrome') > -1 && navigator.userAgent.indexOf('Edge') === -1 || navigator.userAgent.indexOf('Firefox') > -1) {\n var protocol = window.location.protocol;\n // Don't warn in exotic cases like chrome-extension://.\n if (/^(https?|file):$/.test(protocol)) {\n console.info('%cDownload the React DevTools ' + 'for a better development experience: ' + 'https://fb.me/react-devtools' + (protocol === 'file:' ? '\\nYou might need to use a local HTTP server (instead of file://): ' + 'https://fb.me/react-devtools-faq' : ''), 'font-weight:bold');\n }\n }\n }\n}\n\n\n\nvar ReactDOM$2 = Object.freeze({\n\tdefault: ReactDOM\n});\n\nvar ReactDOM$3 = ( ReactDOM$2 && ReactDOM ) || ReactDOM$2;\n\n// TODO: decide on the top-level export form.\n// This is hacky but makes it work with both Rollup and Jest.\nvar reactDom = ReactDOM$3.default || ReactDOM$3;\n\nmodule.exports = reactDom;\n })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9janMvcmVhY3QtZG9tLmRldmVsb3BtZW50LmpzPzYxYmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTs7OztBQUliLElBQUksSUFBcUM7QUFDekM7QUFDQTs7QUFFQSxZQUFZLG1CQUFPLENBQUMsNENBQU87QUFDM0IsY0FBYyxtQkFBTyxDQUFDLGdGQUFlO0FBQ3JDLHFCQUFxQixtQkFBTyxDQUFDLDhFQUEyQjtBQUN4RCxnQkFBZ0IsbUJBQU8sQ0FBQyxvREFBVztBQUNuQyxjQUFjLG1CQUFPLENBQUMsOERBQW1COztBQUV6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRDtBQUNyRCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7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OztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFF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QUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsYUFBYTtBQUN4QixXQUFXLE9BQU87QUFDbEIsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsMEJBQTBCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVksZUFBZTtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRDQUE0QztBQUM1QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNGQUFzRixhQUFhO0FBQ25HO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsV0FBVztBQUN0QixXQUFXLE9BQU87QUFDbEIsV0FBVyxFQUFFO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsa0RBQWtEO0FBQ2xEOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHlDQUF5Qzs7QUFFekM7OztBQUdBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsa0JBQWtCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsYUFBYTtBQUMvQjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSCxpQkFBaUIsa0NBQWtDO0FBQ25EO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIseUJBQXlCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQix5QkFBeUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsdUJBQXVCO0FBQ2xDLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsdUJBQXVCO0FBQ2xDLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyx1QkFBdUI7QUFDbEMsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLFdBQVc7QUFDdEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLFlBQVksV0FBVztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsdUJBQXVCO0FBQ2xDLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixzQkFBc0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBLHVCQUF1QjtBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxXQUFXO0FBQ3RCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQixzQkFBc0I7QUFDakQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsMkJBQTJCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLDJCQUEyQjtBQUM5QztBQUNBO0FBQ0E7QUFDQSxvQkFBb0IscUJBQXFCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsc0JBQXNCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0NBQW9DO0FBQ3BDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFdBQVc7QUFDdEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxXQUFXO0FBQ3RCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsRUFBRTtBQUNiLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCO0FBQ3hCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNENBQTRDOztBQUU1QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsV0FBVztBQUN0QixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVSxpQ0FBaUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixzQkFBc0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxnQ0FBZ0MsS0FBSztBQUMzQztBQUNBO0FBQ0EsTUFBTSxnQ0FBZ0MsS0FBSztBQUMzQztBQUNBLDREQUE0RDtBQUM1RCxNQUFNLGdDQUFnQyxLQUFLO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscU9BQXFPO0FBQ3JPO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhLQUE4SyxZQUFZO0FBQzFMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUxBQXVMLCtCQUErQjtBQUN0Tjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpS0FBaUssaUJBQWlCO0FBQ2xMLE9BQU87QUFDUCxpS0FBaUssaUJBQWlCLHdEQUF3RCxtQkFBbUIsZ0JBQWdCLDhCQUE4QjtBQUMzUztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLCtHQUErRyxHQUFHO0FBQ2xIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRJQUE0SSxtQkFBbUIsZ0JBQWdCLDhCQUE4QjtBQUM3TSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxZQUFZLEtBQUk7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlCQUFpQiwwQkFBMEI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0M7QUFDL0M7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0Esc0RBQXNELGVBQWU7QUFDckUsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLDRCQUE0QjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxZQUFZLEtBQUk7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQiw0QkFBNEI7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isd0JBQXdCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxLQUFJO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsY0FBYyxLQUFJO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxZQUFZLEtBQUk7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLFVBQVUsS0FBSTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RDtBQUN6RDtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUNBQWlDO0FBQ2pDLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNLEtBQUk7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNLEtBQUk7QUFDVjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0EsTUFBTSxLQUFJO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTSxLQUFJO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTSxLQUFJO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQjtBQUNuQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpRUFBaUU7QUFDakU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsVUFBVSxLQUFJO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHNGQUFzRixhQUFhO0FBQ25HO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRGQUE0RixlQUFlO0FBQzNHO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSx3Q0FBd0M7QUFDeEMsaURBQWlEO0FBQ2pELHFEQUFxRDtBQUNyRCwwREFBMEQ7QUFDMUQsOERBQThEO0FBQzlELDJEQUEyRDtBQUMzRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtHQUFrRztBQUNsRzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNklBQTZJOztBQUU3STtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNULGtFQUFrRSw0Q0FBNEM7QUFDOUc7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtLQUFrSyx5Q0FBeUM7QUFDM007QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQix3QkFBd0I7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsa0RBQWtEO0FBQzVEO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWSw2QkFBNkI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLFVBQVUsNkJBQTZCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxhQUFhO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVSxpQ0FBaUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFlBQVk7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLFVBQVUsWUFBWTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNkNBQTZDLE1BQU07QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLHVCQUF1Qiw4QkFBOEI7QUFDckQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsNENBQTRDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSx5TkFBeU4sMENBQTBDO0FBQ25RO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0Q7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSCxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0RBQXdEO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsOENBQThDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLHlOQUF5TixxQ0FBcUMsd0ZBQXdGLDJCQUEyQixxQkFBcUIsUUFBUSxZQUFZO0FBQzFaLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksS0FBSTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxLQUFJO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsVUFBVSxLQUFJO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxVQUFVLEtBQUk7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxVQUFVLEtBQUk7QUFDZDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsWUFBWSxLQUFJO0FBQ2hCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxVQUFVLEtBQUk7QUFDZDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNLEtBQUk7QUFDVjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLEtBQUk7QUFDVjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsS0FBSTtBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsWUFBWSxLQUFJO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVztBQUNYLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsOE1BQThNLG9EQUFvRCxFQUFFO0FBQ3BRO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0VBQXNFLG1CQUFtQjtBQUN6Rjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUVBQXlFO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixvQkFBb0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnR0FBZ0c7QUFDaEc7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7O0FBRXBCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0RBQStEO0FBQy9EO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixzQkFBc0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsc0JBQXNCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFlBQVk7QUFDdkIsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLGlRQUFpUSxjQUFjO0FBQy9RO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vY2pzL3JlYWN0LWRvbS5kZXZlbG9wbWVudC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuOC42XG4gKiByZWFjdC1kb20uZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cblxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbnZhciBfYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xudmFyIGNoZWNrUHJvcFR5cGVzID0gcmVxdWlyZSgncHJvcC10eXBlcy9jaGVja1Byb3BUeXBlcycpO1xudmFyIHNjaGVkdWxlciA9IHJlcXVpcmUoJ3NjaGVkdWxlcicpO1xudmFyIHRyYWNpbmcgPSByZXF1aXJlKCdzY2hlZHVsZXIvdHJhY2luZycpO1xuXG4vKipcbiAqIFVzZSBpbnZhcmlhbnQoKSB0byBhc3NlcnQgc3RhdGUgd2hpY2ggeW91ciBwcm9ncmFtIGFzc3VtZXMgdG8gYmUgdHJ1ZS5cbiAqXG4gKiBQcm92aWRlIHNwcmludGYtc3R5bGUgZm9ybWF0IChvbmx5ICVzIGlzIHN1cHBvcnRlZCkgYW5kIGFyZ3VtZW50c1xuICogdG8gcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGJyb2tlIGFuZCB3aGF0IHlvdSB3ZXJlXG4gKiBleHBlY3RpbmcuXG4gKlxuICogVGhlIGludmFyaWFudCBtZXNzYWdlIHdpbGwgYmUgc3RyaXBwZWQgaW4gcHJvZHVjdGlvbiwgYnV0IHRoZSBpbnZhcmlhbnRcbiAqIHdpbGwgcmVtYWluIHRvIGVuc3VyZSBsb2dpYyBkb2VzIG5vdCBkaWZmZXIgaW4gcHJvZHVjdGlvbi5cbiAqL1xuXG52YXIgdmFsaWRhdGVGb3JtYXQgPSBmdW5jdGlvbiAoKSB7fTtcblxue1xuICB2YWxpZGF0ZUZvcm1hdCA9IGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YXJpYW50IHJlcXVpcmVzIGFuIGVycm9yIG1lc3NhZ2UgYXJndW1lbnQnKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGludmFyaWFudChjb25kaXRpb24sIGZvcm1hdCwgYSwgYiwgYywgZCwgZSwgZikge1xuICB2YWxpZGF0ZUZvcm1hdChmb3JtYXQpO1xuXG4gIGlmICghY29uZGl0aW9uKSB7XG4gICAgdmFyIGVycm9yID0gdm9pZCAwO1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoJ01pbmlmaWVkIGV4Y2VwdGlvbiBvY2N1cnJlZDsgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50ICcgKyAnZm9yIHRoZSBmdWxsIGVycm9yIG1lc3NhZ2UgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGFyZ3MgPSBbYSwgYiwgYywgZCwgZSwgZl07XG4gICAgICB2YXIgYXJnSW5kZXggPSAwO1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107XG4gICAgICB9KSk7XG4gICAgICBlcnJvci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgIH1cblxuICAgIGVycm9yLmZyYW1lc1RvUG9wID0gMTsgLy8gd2UgZG9uJ3QgY2FyZSBhYm91dCBpbnZhcmlhbnQncyBvd24gZnJhbWVcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG4vLyBSZWx5aW5nIG9uIHRoZSBgaW52YXJpYW50KClgIGltcGxlbWVudGF0aW9uIGxldHMgdXNcbi8vIHByZXNlcnZlIHRoZSBmb3JtYXQgYW5kIHBhcmFtcyBpbiB0aGUgd3d3IGJ1aWxkcy5cblxuIVJlYWN0ID8gaW52YXJpYW50KGZhbHNlLCAnUmVhY3RET00gd2FzIGxvYWRlZCBiZWZvcmUgUmVhY3QuIE1ha2Ugc3VyZSB5b3UgbG9hZCB0aGUgUmVhY3QgcGFja2FnZSBiZWZvcmUgbG9hZGluZyBSZWFjdERPTS4nKSA6IHZvaWQgMDtcblxudmFyIGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGwgPSBmdW5jdGlvbiAobmFtZSwgZnVuYywgY29udGV4dCwgYSwgYiwgYywgZCwgZSwgZikge1xuICB2YXIgZnVuY0FyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDMpO1xuICB0cnkge1xuICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgZnVuY0FyZ3MpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRoaXMub25FcnJvcihlcnJvcik7XG4gIH1cbn07XG5cbntcbiAgLy8gSW4gREVWIG1vZGUsIHdlIHN3YXAgb3V0IGludm9rZUd1YXJkZWRDYWxsYmFjayBmb3IgYSBzcGVjaWFsIHZlcnNpb25cbiAgLy8gdGhhdCBwbGF5cyBtb3JlIG5pY2VseSB3aXRoIHRoZSBicm93c2VyJ3MgRGV2VG9vbHMuIFRoZSBpZGVhIGlzIHRvIHByZXNlcnZlXG4gIC8vIFwiUGF1c2Ugb24gZXhjZXB0aW9uc1wiIGJlaGF2aW9yLiBCZWNhdXNlIFJlYWN0IHdyYXBzIGFsbCB1c2VyLXByb3ZpZGVkXG4gIC8vIGZ1bmN0aW9ucyBpbiBpbnZva2VHdWFyZGVkQ2FsbGJhY2ssIGFuZCB0aGUgcHJvZHVjdGlvbiB2ZXJzaW9uIG9mXG4gIC8vIGludm9rZUd1YXJkZWRDYWxsYmFjayB1c2VzIGEgdHJ5LWNhdGNoLCBhbGwgdXNlciBleGNlcHRpb25zIGFyZSB0cmVhdGVkXG4gIC8vIGxpa2UgY2F1Z2h0IGV4Y2VwdGlvbnMsIGFuZCB0aGUgRGV2VG9vbHMgd29uJ3QgcGF1c2UgdW5sZXNzIHRoZSBkZXZlbG9wZXJcbiAgLy8gdGFrZXMgdGhlIGV4dHJhIHN0ZXAgb2YgZW5hYmxpbmcgcGF1c2Ugb24gY2F1Z2h0IGV4Y2VwdGlvbnMuIFRoaXMgaXNcbiAgLy8gdW5pbnR1aXRpdmUsIHRob3VnaCwgYmVjYXVzZSBldmVuIHRob3VnaCBSZWFjdCBoYXMgY2F1Z2h0IHRoZSBlcnJvciwgZnJvbVxuICAvLyB0aGUgZGV2ZWxvcGVyJ3MgcGVyc3BlY3RpdmUsIHRoZSBlcnJvciBpcyB1bmNhdWdodC5cbiAgLy9cbiAgLy8gVG8gcHJlc2VydmUgdGhlIGV4cGVjdGVkIFwiUGF1c2Ugb24gZXhjZXB0aW9uc1wiIGJlaGF2aW9yLCB3ZSBkb24ndCB1c2UgYVxuICAvLyB0cnktY2F0Y2ggaW4gREVWLiBJbnN0ZWFkLCB3ZSBzeW5jaHJvbm91c2x5IGRpc3BhdGNoIGEgZmFrZSBldmVudCB0byBhIGZha2VcbiAgLy8gRE9NIG5vZGUsIGFuZCBjYWxsIHRoZSB1c2VyLXByb3ZpZGVkIGNhbGxiYWNrIGZyb20gaW5zaWRlIGFuIGV2ZW50IGhhbmRsZXJcbiAgLy8gZm9yIHRoYXQgZmFrZSBldmVudC4gSWYgdGhlIGNhbGxiYWNrIHRocm93cywgdGhlIGVycm9yIGlzIFwiY2FwdHVyZWRcIiB1c2luZ1xuICAvLyBhIGdsb2JhbCBldmVudCBoYW5kbGVyLiBCdXQgYmVjYXVzZSB0aGUgZXJyb3IgaGFwcGVucyBpbiBhIGRpZmZlcmVudFxuICAvLyBldmVudCBsb29wIGNvbnRleHQsIGl0IGRvZXMgbm90IGludGVycnVwdCB0aGUgbm9ybWFsIHByb2dyYW0gZmxvdy5cbiAgLy8gRWZmZWN0aXZlbHksIHRoaXMgZ2l2ZXMgdXMgdHJ5LWNhdGNoIGJlaGF2aW9yIHdpdGhvdXQgYWN0dWFsbHkgdXNpbmdcbiAgLy8gdHJ5LWNhdGNoLiBOZWF0IVxuXG4gIC8vIENoZWNrIHRoYXQgdGhlIGJyb3dzZXIgc3VwcG9ydHMgdGhlIEFQSXMgd2UgbmVlZCB0byBpbXBsZW1lbnQgb3VyIHNwZWNpYWxcbiAgLy8gREVWIHZlcnNpb24gb2YgaW52b2tlR3VhcmRlZENhbGxiYWNrXG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRpc3BhdGNoRXZlbnQgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRXZlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgZmFrZU5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdyZWFjdCcpO1xuXG4gICAgdmFyIGludm9rZUd1YXJkZWRDYWxsYmFja0RldiA9IGZ1bmN0aW9uIChuYW1lLCBmdW5jLCBjb250ZXh0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gICAgICAvLyBJZiBkb2N1bWVudCBkb2Vzbid0IGV4aXN0IHdlIGtub3cgZm9yIHN1cmUgd2Ugd2lsbCBjcmFzaCBpbiB0aGlzIG1ldGhvZFxuICAgICAgLy8gd2hlbiB3ZSBjYWxsIGRvY3VtZW50LmNyZWF0ZUV2ZW50KCkuIEhvd2V2ZXIgdGhpcyBjYW4gY2F1c2UgY29uZnVzaW5nXG4gICAgICAvLyBlcnJvcnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9va2luY3ViYXRvci9jcmVhdGUtcmVhY3QtYXBwL2lzc3Vlcy8zNDgyXG4gICAgICAvLyBTbyB3ZSBwcmVlbXB0aXZlbHkgdGhyb3cgd2l0aCBhIGJldHRlciBtZXNzYWdlIGluc3RlYWQuXG4gICAgICAhKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpID8gaW52YXJpYW50KGZhbHNlLCAnVGhlIGBkb2N1bWVudGAgZ2xvYmFsIHdhcyBkZWZpbmVkIHdoZW4gUmVhY3Qgd2FzIGluaXRpYWxpemVkLCBidXQgaXMgbm90IGRlZmluZWQgYW55bW9yZS4gVGhpcyBjYW4gaGFwcGVuIGluIGEgdGVzdCBlbnZpcm9ubWVudCBpZiBhIGNvbXBvbmVudCBzY2hlZHVsZXMgYW4gdXBkYXRlIGZyb20gYW4gYXN5bmNocm9ub3VzIGNhbGxiYWNrLCBidXQgdGhlIHRlc3QgaGFzIGFscmVhZHkgZmluaXNoZWQgcnVubmluZy4gVG8gc29sdmUgdGhpcywgeW91IGNhbiBlaXRoZXIgdW5tb3VudCB0aGUgY29tcG9uZW50IGF0IHRoZSBlbmQgb2YgeW91ciB0ZXN0IChhbmQgZW5zdXJlIHRoYXQgYW55IGFzeW5jaHJvbm91cyBvcGVyYXRpb25zIGdldCBjYW5jZWxlZCBpbiBgY29tcG9uZW50V2lsbFVubW91bnRgKSwgb3IgeW91IGNhbiBjaGFuZ2UgdGhlIHRlc3QgaXRzZWxmIHRvIGJlIGFzeW5jaHJvbm91cy4nKSA6IHZvaWQgMDtcbiAgICAgIHZhciBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcblxuICAgICAgLy8gS2VlcHMgdHJhY2sgb2Ygd2hldGhlciB0aGUgdXNlci1wcm92aWRlZCBjYWxsYmFjayB0aHJldyBhbiBlcnJvci4gV2VcbiAgICAgIC8vIHNldCB0aGlzIHRvIHRydWUgYXQgdGhlIGJlZ2lubmluZywgdGhlbiBzZXQgaXQgdG8gZmFsc2UgcmlnaHQgYWZ0ZXJcbiAgICAgIC8vIGNhbGxpbmcgdGhlIGZ1bmN0aW9uLiBJZiB0aGUgZnVuY3Rpb24gZXJyb3JzLCBgZGlkRXJyb3JgIHdpbGwgbmV2ZXIgYmVcbiAgICAgIC8vIHNldCB0byBmYWxzZS4gVGhpcyBzdHJhdGVneSB3b3JrcyBldmVuIGlmIHRoZSBicm93c2VyIGlzIGZsYWt5IGFuZFxuICAgICAgLy8gZmFpbHMgdG8gY2FsbCBvdXIgZ2xvYmFsIGVycm9yIGhhbmRsZXIsIGJlY2F1c2UgaXQgZG9lc24ndCByZWx5IG9uXG4gICAgICAvLyB0aGUgZXJyb3IgZXZlbnQgYXQgYWxsLlxuICAgICAgdmFyIGRpZEVycm9yID0gdHJ1ZTtcblxuICAgICAgLy8gS2VlcHMgdHJhY2sgb2YgdGhlIHZhbHVlIG9mIHdpbmRvdy5ldmVudCBzbyB0aGF0IHdlIGNhbiByZXNldCBpdFxuICAgICAgLy8gZHVyaW5nIHRoZSBjYWxsYmFjayB0byBsZXQgdXNlciBjb2RlIGFjY2VzcyB3aW5kb3cuZXZlbnQgaW4gdGhlXG4gICAgICAvLyBicm93c2VycyB0aGF0IHN1cHBvcnQgaXQuXG4gICAgICB2YXIgd2luZG93RXZlbnQgPSB3aW5kb3cuZXZlbnQ7XG5cbiAgICAgIC8vIEtlZXBzIHRyYWNrIG9mIHRoZSBkZXNjcmlwdG9yIG9mIHdpbmRvdy5ldmVudCB0byByZXN0b3JlIGl0IGFmdGVyIGV2ZW50XG4gICAgICAvLyBkaXNwYXRjaGluZzogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzY4OFxuICAgICAgdmFyIHdpbmRvd0V2ZW50RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod2luZG93LCAnZXZlbnQnKTtcblxuICAgICAgLy8gQ3JlYXRlIGFuIGV2ZW50IGhhbmRsZXIgZm9yIG91ciBmYWtlIGV2ZW50LiBXZSB3aWxsIHN5bmNocm9ub3VzbHlcbiAgICAgIC8vIGRpc3BhdGNoIG91ciBmYWtlIGV2ZW50IHVzaW5nIGBkaXNwYXRjaEV2ZW50YC4gSW5zaWRlIHRoZSBoYW5kbGVyLCB3ZVxuICAgICAgLy8gY2FsbCB0aGUgdXNlci1wcm92aWRlZCBjYWxsYmFjay5cbiAgICAgIHZhciBmdW5jQXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMyk7XG4gICAgICBmdW5jdGlvbiBjYWxsQ2FsbGJhY2soKSB7XG4gICAgICAgIC8vIFdlIGltbWVkaWF0ZWx5IHJlbW92ZSB0aGUgY2FsbGJhY2sgZnJvbSBldmVudCBsaXN0ZW5lcnMgc28gdGhhdFxuICAgICAgICAvLyBuZXN0ZWQgYGludm9rZUd1YXJkZWRDYWxsYmFja2AgY2FsbHMgZG8gbm90IGNsYXNoLiBPdGhlcndpc2UsIGFcbiAgICAgICAgLy8gbmVzdGVkIGNhbGwgd291bGQgdHJpZ2dlciB0aGUgZmFrZSBldmVudCBoYW5kbGVycyBvZiBhbnkgY2FsbCBoaWdoZXJcbiAgICAgICAgLy8gaW4gdGhlIHN0YWNrLlxuICAgICAgICBmYWtlTm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKGV2dFR5cGUsIGNhbGxDYWxsYmFjaywgZmFsc2UpO1xuXG4gICAgICAgIC8vIFdlIGNoZWNrIGZvciB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ2V2ZW50JykgdG8gcHJldmVudCB0aGVcbiAgICAgICAgLy8gd2luZG93LmV2ZW50IGFzc2lnbm1lbnQgaW4gYm90aCBJRSA8PSAxMCBhcyB0aGV5IHRocm93IGFuIGVycm9yXG4gICAgICAgIC8vIFwiTWVtYmVyIG5vdCBmb3VuZFwiIGluIHN0cmljdCBtb2RlLCBhbmQgaW4gRmlyZWZveCB3aGljaCBkb2VzIG5vdFxuICAgICAgICAvLyBzdXBwb3J0IHdpbmRvdy5ldmVudC5cbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuZXZlbnQgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnZXZlbnQnKSkge1xuICAgICAgICAgIHdpbmRvdy5ldmVudCA9IHdpbmRvd0V2ZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuYy5hcHBseShjb250ZXh0LCBmdW5jQXJncyk7XG4gICAgICAgIGRpZEVycm9yID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSBhIGdsb2JhbCBlcnJvciBldmVudCBoYW5kbGVyLiBXZSB1c2UgdGhpcyB0byBjYXB0dXJlIHRoZSB2YWx1ZVxuICAgICAgLy8gdGhhdCB3YXMgdGhyb3duLiBJdCdzIHBvc3NpYmxlIHRoYXQgdGhpcyBlcnJvciBoYW5kbGVyIHdpbGwgZmlyZSBtb3JlXG4gICAgICAvLyB0aGFuIG9uY2U7IGZvciBleGFtcGxlLCBpZiBub24tUmVhY3QgY29kZSBhbHNvIGNhbGxzIGBkaXNwYXRjaEV2ZW50YFxuICAgICAgLy8gYW5kIGEgaGFuZGxlciBmb3IgdGhhdCBldmVudCB0aHJvd3MuIFdlIHNob3VsZCBiZSByZXNpbGllbnQgdG8gbW9zdCBvZlxuICAgICAgLy8gdGhvc2UgY2FzZXMuIEV2ZW4gaWYgb3VyIGVycm9yIGV2ZW50IGhhbmRsZXIgZmlyZXMgbW9yZSB0aGFuIG9uY2UsIHRoZVxuICAgICAgLy8gbGFzdCBlcnJvciBldmVudCBpcyBhbHdheXMgdXNlZC4gSWYgdGhlIGNhbGxiYWNrIGFjdHVhbGx5IGRvZXMgZXJyb3IsXG4gICAgICAvLyB3ZSBrbm93IHRoYXQgdGhlIGxhc3QgZXJyb3IgZXZlbnQgaXMgdGhlIGNvcnJlY3Qgb25lLCBiZWNhdXNlIGl0J3Mgbm90XG4gICAgICAvLyBwb3NzaWJsZSBmb3IgYW55dGhpbmcgZWxzZSB0byBoYXZlIGhhcHBlbmVkIGluIGJldHdlZW4gb3VyIGNhbGxiYWNrXG4gICAgICAvLyBlcnJvcmluZyBhbmQgdGhlIGNvZGUgdGhhdCBmb2xsb3dzIHRoZSBgZGlzcGF0Y2hFdmVudGAgY2FsbCBiZWxvdy4gSWZcbiAgICAgIC8vIHRoZSBjYWxsYmFjayBkb2Vzbid0IGVycm9yLCBidXQgdGhlIGVycm9yIGV2ZW50IHdhcyBmaXJlZCwgd2Uga25vdyB0b1xuICAgICAgLy8gaWdub3JlIGl0IGJlY2F1c2UgYGRpZEVycm9yYCB3aWxsIGJlIGZhbHNlLCBhcyBkZXNjcmliZWQgYWJvdmUuXG4gICAgICB2YXIgZXJyb3IgPSB2b2lkIDA7XG4gICAgICAvLyBVc2UgdGhpcyB0byB0cmFjayB3aGV0aGVyIHRoZSBlcnJvciBldmVudCBpcyBldmVyIGNhbGxlZC5cbiAgICAgIHZhciBkaWRTZXRFcnJvciA9IGZhbHNlO1xuICAgICAgdmFyIGlzQ3Jvc3NPcmlnaW5FcnJvciA9IGZhbHNlO1xuXG4gICAgICBmdW5jdGlvbiBoYW5kbGVXaW5kb3dFcnJvcihldmVudCkge1xuICAgICAgICBlcnJvciA9IGV2ZW50LmVycm9yO1xuICAgICAgICBkaWRTZXRFcnJvciA9IHRydWU7XG4gICAgICAgIGlmIChlcnJvciA9PT0gbnVsbCAmJiBldmVudC5jb2xubyA9PT0gMCAmJiBldmVudC5saW5lbm8gPT09IDApIHtcbiAgICAgICAgICBpc0Nyb3NzT3JpZ2luRXJyb3IgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgLy8gU29tZSBvdGhlciBlcnJvciBoYW5kbGVyIGhhcyBwcmV2ZW50ZWQgZGVmYXVsdC5cbiAgICAgICAgICAvLyBCcm93c2VycyBzaWxlbmNlIHRoZSBlcnJvciByZXBvcnQgaWYgdGhpcyBoYXBwZW5zLlxuICAgICAgICAgIC8vIFdlJ2xsIHJlbWVtYmVyIHRoaXMgdG8gbGF0ZXIgZGVjaWRlIHdoZXRoZXIgdG8gbG9nIGl0IG9yIG5vdC5cbiAgICAgICAgICBpZiAoZXJyb3IgIT0gbnVsbCAmJiB0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBlcnJvci5fc3VwcHJlc3NMb2dnaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGlubmVyKSB7XG4gICAgICAgICAgICAgIC8vIElnbm9yZS5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIGEgZmFrZSBldmVudCB0eXBlLlxuICAgICAgdmFyIGV2dFR5cGUgPSAncmVhY3QtJyArIChuYW1lID8gbmFtZSA6ICdpbnZva2VndWFyZGVkY2FsbGJhY2snKTtcblxuICAgICAgLy8gQXR0YWNoIG91ciBldmVudCBoYW5kbGVyc1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgaGFuZGxlV2luZG93RXJyb3IpO1xuICAgICAgZmFrZU5vZGUuYWRkRXZlbnRMaXN0ZW5lcihldnRUeXBlLCBjYWxsQ2FsbGJhY2ssIGZhbHNlKTtcblxuICAgICAgLy8gU3luY2hyb25vdXNseSBkaXNwYXRjaCBvdXIgZmFrZSBldmVudC4gSWYgdGhlIHVzZXItcHJvdmlkZWQgZnVuY3Rpb25cbiAgICAgIC8vIGVycm9ycywgaXQgd2lsbCB0cmlnZ2VyIG91ciBnbG9iYWwgZXJyb3IgaGFuZGxlci5cbiAgICAgIGV2dC5pbml0RXZlbnQoZXZ0VHlwZSwgZmFsc2UsIGZhbHNlKTtcbiAgICAgIGZha2VOb2RlLmRpc3BhdGNoRXZlbnQoZXZ0KTtcblxuICAgICAgaWYgKHdpbmRvd0V2ZW50RGVzY3JpcHRvcikge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCAnZXZlbnQnLCB3aW5kb3dFdmVudERlc2NyaXB0b3IpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGlkRXJyb3IpIHtcbiAgICAgICAgaWYgKCFkaWRTZXRFcnJvcikge1xuICAgICAgICAgIC8vIFRoZSBjYWxsYmFjayBlcnJvcmVkLCBidXQgdGhlIGVycm9yIGV2ZW50IG5ldmVyIGZpcmVkLlxuICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKCdBbiBlcnJvciB3YXMgdGhyb3duIGluc2lkZSBvbmUgb2YgeW91ciBjb21wb25lbnRzLCBidXQgUmVhY3QgJyArIFwiZG9lc24ndCBrbm93IHdoYXQgaXQgd2FzLiBUaGlzIGlzIGxpa2VseSBkdWUgdG8gYnJvd3NlciBcIiArICdmbGFraW5lc3MuIFJlYWN0IGRvZXMgaXRzIGJlc3QgdG8gcHJlc2VydmUgdGhlIFwiUGF1c2Ugb24gJyArICdleGNlcHRpb25zXCIgYmVoYXZpb3Igb2YgdGhlIERldlRvb2xzLCB3aGljaCByZXF1aXJlcyBzb21lICcgKyBcIkRFVi1tb2RlIG9ubHkgdHJpY2tzLiBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlc2UgZG9uJ3Qgd29yayBpbiBcIiArICd5b3VyIGJyb3dzZXIuIFRyeSB0cmlnZ2VyaW5nIHRoZSBlcnJvciBpbiBwcm9kdWN0aW9uIG1vZGUsICcgKyAnb3Igc3dpdGNoaW5nIHRvIGEgbW9kZXJuIGJyb3dzZXIuIElmIHlvdSBzdXNwZWN0IHRoYXQgdGhpcyBpcyAnICsgJ2FjdHVhbGx5IGFuIGlzc3VlIHdpdGggUmVhY3QsIHBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQ3Jvc3NPcmlnaW5FcnJvcikge1xuICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwiQSBjcm9zcy1vcmlnaW4gZXJyb3Igd2FzIHRocm93bi4gUmVhY3QgZG9lc24ndCBoYXZlIGFjY2VzcyB0byBcIiArICd0aGUgYWN0dWFsIGVycm9yIG9iamVjdCBpbiBkZXZlbG9wbWVudC4gJyArICdTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC1jcm9zc29yaWdpbi1lcnJvciBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uRXJyb3IoZXJyb3IpO1xuICAgICAgfVxuXG4gICAgICAvLyBSZW1vdmUgb3VyIGV2ZW50IGxpc3RlbmVyc1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgaGFuZGxlV2luZG93RXJyb3IpO1xuICAgIH07XG5cbiAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2tJbXBsID0gaW52b2tlR3VhcmRlZENhbGxiYWNrRGV2O1xuICB9XG59XG5cbnZhciBpbnZva2VHdWFyZGVkQ2FsbGJhY2tJbXBsJDEgPSBpbnZva2VHdWFyZGVkQ2FsbGJhY2tJbXBsO1xuXG4vLyBVc2VkIGJ5IEZpYmVyIHRvIHNpbXVsYXRlIGEgdHJ5LWNhdGNoLlxudmFyIGhhc0Vycm9yID0gZmFsc2U7XG52YXIgY2F1Z2h0RXJyb3IgPSBudWxsO1xuXG4vLyBVc2VkIGJ5IGV2ZW50IHN5c3RlbSB0byBjYXB0dXJlL3JldGhyb3cgdGhlIGZpcnN0IGVycm9yLlxudmFyIGhhc1JldGhyb3dFcnJvciA9IGZhbHNlO1xudmFyIHJldGhyb3dFcnJvciA9IG51bGw7XG5cbnZhciByZXBvcnRlciA9IHtcbiAgb25FcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gIH1cbn07XG5cbi8qKlxuICogQ2FsbCBhIGZ1bmN0aW9uIHdoaWxlIGd1YXJkaW5nIGFnYWluc3QgZXJyb3JzIHRoYXQgaGFwcGVucyB3aXRoaW4gaXQuXG4gKiBSZXR1cm5zIGFuIGVycm9yIGlmIGl0IHRocm93cywgb3RoZXJ3aXNlIG51bGwuXG4gKlxuICogSW4gcHJvZHVjdGlvbiwgdGhpcyBpcyBpbXBsZW1lbnRlZCB1c2luZyBhIHRyeS1jYXRjaC4gVGhlIHJlYXNvbiB3ZSBkb24ndFxuICogdXNlIGEgdHJ5LWNhdGNoIGRpcmVjdGx5IGlzIHNvIHRoYXQgd2UgY2FuIHN3YXAgb3V0IGEgZGlmZmVyZW50XG4gKiBpbXBsZW1lbnRhdGlvbiBpbiBERVYgbW9kZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBvZiB0aGUgZ3VhcmQgdG8gdXNlIGZvciBsb2dnaW5nIG9yIGRlYnVnZ2luZ1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW52b2tlXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgVGhlIGNvbnRleHQgdG8gdXNlIHdoZW4gY2FsbGluZyB0aGUgZnVuY3Rpb25cbiAqIEBwYXJhbSB7Li4uKn0gYXJncyBBcmd1bWVudHMgZm9yIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIGludm9rZUd1YXJkZWRDYWxsYmFjayhuYW1lLCBmdW5jLCBjb250ZXh0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIGhhc0Vycm9yID0gZmFsc2U7XG4gIGNhdWdodEVycm9yID0gbnVsbDtcbiAgaW52b2tlR3VhcmRlZENhbGxiYWNrSW1wbCQxLmFwcGx5KHJlcG9ydGVyLCBhcmd1bWVudHMpO1xufVxuXG4vKipcbiAqIFNhbWUgYXMgaW52b2tlR3VhcmRlZENhbGxiYWNrLCBidXQgaW5zdGVhZCBvZiByZXR1cm5pbmcgYW4gZXJyb3IsIGl0IHN0b3Jlc1xuICogaXQgaW4gYSBnbG9iYWwgc28gaXQgY2FuIGJlIHJldGhyb3duIGJ5IGByZXRocm93Q2F1Z2h0RXJyb3JgIGxhdGVyLlxuICogVE9ETzogU2VlIGlmIGNhdWdodEVycm9yIGFuZCByZXRocm93RXJyb3IgY2FuIGJlIHVuaWZpZWQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgb2YgdGhlIGd1YXJkIHRvIHVzZSBmb3IgbG9nZ2luZyBvciBkZWJ1Z2dpbmdcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZVxuICogQHBhcmFtIHsqfSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIHVzZSB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0gey4uLip9IGFyZ3MgQXJndW1lbnRzIGZvciBmdW5jdGlvblxuICovXG5mdW5jdGlvbiBpbnZva2VHdWFyZGVkQ2FsbGJhY2tBbmRDYXRjaEZpcnN0RXJyb3IobmFtZSwgZnVuYywgY29udGV4dCwgYSwgYiwgYywgZCwgZSwgZikge1xuICBpbnZva2VHdWFyZGVkQ2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgaWYgKGhhc0Vycm9yKSB7XG4gICAgdmFyIGVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuICAgIGlmICghaGFzUmV0aHJvd0Vycm9yKSB7XG4gICAgICBoYXNSZXRocm93RXJyb3IgPSB0cnVlO1xuICAgICAgcmV0aHJvd0Vycm9yID0gZXJyb3I7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRHVyaW5nIGV4ZWN1dGlvbiBvZiBndWFyZGVkIGZ1bmN0aW9ucyB3ZSB3aWxsIGNhcHR1cmUgdGhlIGZpcnN0IGVycm9yIHdoaWNoXG4gKiB3ZSB3aWxsIHJldGhyb3cgdG8gYmUgaGFuZGxlZCBieSB0aGUgdG9wIGxldmVsIGVycm9yIGhhbmRsZXIuXG4gKi9cbmZ1bmN0aW9uIHJldGhyb3dDYXVnaHRFcnJvcigpIHtcbiAgaWYgKGhhc1JldGhyb3dFcnJvcikge1xuICAgIHZhciBlcnJvciA9IHJldGhyb3dFcnJvcjtcbiAgICBoYXNSZXRocm93RXJyb3IgPSBmYWxzZTtcbiAgICByZXRocm93RXJyb3IgPSBudWxsO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhc0NhdWdodEVycm9yKCkge1xuICByZXR1cm4gaGFzRXJyb3I7XG59XG5cbmZ1bmN0aW9uIGNsZWFyQ2F1Z2h0RXJyb3IoKSB7XG4gIGlmIChoYXNFcnJvcikge1xuICAgIHZhciBlcnJvciA9IGNhdWdodEVycm9yO1xuICAgIGhhc0Vycm9yID0gZmFsc2U7XG4gICAgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICAgIHJldHVybiBlcnJvcjtcbiAgfSBlbHNlIHtcbiAgICBpbnZhcmlhbnQoZmFsc2UsICdjbGVhckNhdWdodEVycm9yIHdhcyBjYWxsZWQgYnV0IG5vIGVycm9yIHdhcyBjYXB0dXJlZC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgfVxufVxuXG4vKipcbiAqIEluamVjdGFibGUgb3JkZXJpbmcgb2YgZXZlbnQgcGx1Z2lucy5cbiAqL1xudmFyIGV2ZW50UGx1Z2luT3JkZXIgPSBudWxsO1xuXG4vKipcbiAqIEluamVjdGFibGUgbWFwcGluZyBmcm9tIG5hbWVzIHRvIGV2ZW50IHBsdWdpbiBtb2R1bGVzLlxuICovXG52YXIgbmFtZXNUb1BsdWdpbnMgPSB7fTtcblxuLyoqXG4gKiBSZWNvbXB1dGVzIHRoZSBwbHVnaW4gbGlzdCB1c2luZyB0aGUgaW5qZWN0ZWQgcGx1Z2lucyBhbmQgcGx1Z2luIG9yZGVyaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHJlY29tcHV0ZVBsdWdpbk9yZGVyaW5nKCkge1xuICBpZiAoIWV2ZW50UGx1Z2luT3JkZXIpIHtcbiAgICAvLyBXYWl0IHVudGlsIGFuIGBldmVudFBsdWdpbk9yZGVyYCBpcyBpbmplY3RlZC5cbiAgICByZXR1cm47XG4gIH1cbiAgZm9yICh2YXIgcGx1Z2luTmFtZSBpbiBuYW1lc1RvUGx1Z2lucykge1xuICAgIHZhciBwbHVnaW5Nb2R1bGUgPSBuYW1lc1RvUGx1Z2luc1twbHVnaW5OYW1lXTtcbiAgICB2YXIgcGx1Z2luSW5kZXggPSBldmVudFBsdWdpbk9yZGVyLmluZGV4T2YocGx1Z2luTmFtZSk7XG4gICAgIShwbHVnaW5JbmRleCA+IC0xKSA/IGludmFyaWFudChmYWxzZSwgJ0V2ZW50UGx1Z2luUmVnaXN0cnk6IENhbm5vdCBpbmplY3QgZXZlbnQgcGx1Z2lucyB0aGF0IGRvIG5vdCBleGlzdCBpbiB0aGUgcGx1Z2luIG9yZGVyaW5nLCBgJXNgLicsIHBsdWdpbk5hbWUpIDogdm9pZCAwO1xuICAgIGlmIChwbHVnaW5zW3BsdWdpbkluZGV4XSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgICFwbHVnaW5Nb2R1bGUuZXh0cmFjdEV2ZW50cyA/IGludmFyaWFudChmYWxzZSwgJ0V2ZW50UGx1Z2luUmVnaXN0cnk6IEV2ZW50IHBsdWdpbnMgbXVzdCBpbXBsZW1lbnQgYW4gYGV4dHJhY3RFdmVudHNgIG1ldGhvZCwgYnV0IGAlc2AgZG9lcyBub3QuJywgcGx1Z2luTmFtZSkgOiB2b2lkIDA7XG4gICAgcGx1Z2luc1twbHVnaW5JbmRleF0gPSBwbHVnaW5Nb2R1bGU7XG4gICAgdmFyIHB1Ymxpc2hlZEV2ZW50cyA9IHBsdWdpbk1vZHVsZS5ldmVudFR5cGVzO1xuICAgIGZvciAodmFyIGV2ZW50TmFtZSBpbiBwdWJsaXNoZWRFdmVudHMpIHtcbiAgICAgICFwdWJsaXNoRXZlbnRGb3JQbHVnaW4ocHVibGlzaGVkRXZlbnRzW2V2ZW50TmFtZV0sIHBsdWdpbk1vZHVsZSwgZXZlbnROYW1lKSA/IGludmFyaWFudChmYWxzZSwgJ0V2ZW50UGx1Z2luUmVnaXN0cnk6IEZhaWxlZCB0byBwdWJsaXNoIGV2ZW50IGAlc2AgZm9yIHBsdWdpbiBgJXNgLicsIGV2ZW50TmFtZSwgcGx1Z2luTmFtZSkgOiB2b2lkIDA7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUHVibGlzaGVzIGFuIGV2ZW50IHNvIHRoYXQgaXQgY2FuIGJlIGRpc3BhdGNoZWQgYnkgdGhlIHN1cHBsaWVkIHBsdWdpbi5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25maWcgRGlzcGF0Y2ggY29uZmlndXJhdGlvbiBmb3IgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtvYmplY3R9IFBsdWdpbk1vZHVsZSBQbHVnaW4gcHVibGlzaGluZyB0aGUgZXZlbnQuXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBldmVudCB3YXMgc3VjY2Vzc2Z1bGx5IHB1Ymxpc2hlZC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHB1Ymxpc2hFdmVudEZvclBsdWdpbihkaXNwYXRjaENvbmZpZywgcGx1Z2luTW9kdWxlLCBldmVudE5hbWUpIHtcbiAgISFldmVudE5hbWVEaXNwYXRjaENvbmZpZ3MuaGFzT3duUHJvcGVydHkoZXZlbnROYW1lKSA/IGludmFyaWFudChmYWxzZSwgJ0V2ZW50UGx1Z2luSHViOiBNb3JlIHRoYW4gb25lIHBsdWdpbiBhdHRlbXB0ZWQgdG8gcHVibGlzaCB0aGUgc2FtZSBldmVudCBuYW1lLCBgJXNgLicsIGV2ZW50TmFtZSkgOiB2b2lkIDA7XG4gIGV2ZW50TmFtZURpc3BhdGNoQ29uZmlnc1tldmVudE5hbWVdID0gZGlzcGF0Y2hDb25maWc7XG5cbiAgdmFyIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzID0gZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM7XG4gIGlmIChwaGFzZWRSZWdpc3RyYXRpb25OYW1lcykge1xuICAgIGZvciAodmFyIHBoYXNlTmFtZSBpbiBwaGFzZWRSZWdpc3RyYXRpb25OYW1lcykge1xuICAgICAgaWYgKHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzLmhhc093blByb3BlcnR5KHBoYXNlTmFtZSkpIHtcbiAgICAgICAgdmFyIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWUgPSBwaGFzZWRSZWdpc3RyYXRpb25OYW1lc1twaGFzZU5hbWVdO1xuICAgICAgICBwdWJsaXNoUmVnaXN0cmF0aW9uTmFtZShwaGFzZWRSZWdpc3RyYXRpb25OYW1lLCBwbHVnaW5Nb2R1bGUsIGV2ZW50TmFtZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWUpIHtcbiAgICBwdWJsaXNoUmVnaXN0cmF0aW9uTmFtZShkaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lLCBwbHVnaW5Nb2R1bGUsIGV2ZW50TmFtZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFB1Ymxpc2hlcyBhIHJlZ2lzdHJhdGlvbiBuYW1lIHRoYXQgaXMgdXNlZCB0byBpZGVudGlmeSBkaXNwYXRjaGVkIGV2ZW50cy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVnaXN0cmF0aW9uTmFtZSBSZWdpc3RyYXRpb24gbmFtZSB0byBhZGQuXG4gKiBAcGFyYW0ge29iamVjdH0gUGx1Z2luTW9kdWxlIFBsdWdpbiBwdWJsaXNoaW5nIHRoZSBldmVudC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHB1Ymxpc2hSZWdpc3RyYXRpb25OYW1lKHJlZ2lzdHJhdGlvbk5hbWUsIHBsdWdpbk1vZHVsZSwgZXZlbnROYW1lKSB7XG4gICEhcmVnaXN0cmF0aW9uTmFtZU1vZHVsZXNbcmVnaXN0cmF0aW9uTmFtZV0gPyBpbnZhcmlhbnQoZmFsc2UsICdFdmVudFBsdWdpbkh1YjogTW9yZSB0aGFuIG9uZSBwbHVnaW4gYXR0ZW1wdGVkIHRvIHB1Ymxpc2ggdGhlIHNhbWUgcmVnaXN0cmF0aW9uIG5hbWUsIGAlc2AuJywgcmVnaXN0cmF0aW9uTmFtZSkgOiB2b2lkIDA7XG4gIHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzW3JlZ2lzdHJhdGlvbk5hbWVdID0gcGx1Z2luTW9kdWxlO1xuICByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzW3JlZ2lzdHJhdGlvbk5hbWVdID0gcGx1Z2luTW9kdWxlLmV2ZW50VHlwZXNbZXZlbnROYW1lXS5kZXBlbmRlbmNpZXM7XG5cbiAge1xuICAgIHZhciBsb3dlckNhc2VkTmFtZSA9IHJlZ2lzdHJhdGlvbk5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzW2xvd2VyQ2FzZWROYW1lXSA9IHJlZ2lzdHJhdGlvbk5hbWU7XG5cbiAgICBpZiAocmVnaXN0cmF0aW9uTmFtZSA9PT0gJ29uRG91YmxlQ2xpY2snKSB7XG4gICAgICBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzLm9uZGJsY2xpY2sgPSByZWdpc3RyYXRpb25OYW1lO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlZ2lzdGVycyBwbHVnaW5zIHNvIHRoYXQgdGhleSBjYW4gZXh0cmFjdCBhbmQgZGlzcGF0Y2ggZXZlbnRzLlxuICpcbiAqIEBzZWUge0V2ZW50UGx1Z2luSHVifVxuICovXG5cbi8qKlxuICogT3JkZXJlZCBsaXN0IG9mIGluamVjdGVkIHBsdWdpbnMuXG4gKi9cbnZhciBwbHVnaW5zID0gW107XG5cbi8qKlxuICogTWFwcGluZyBmcm9tIGV2ZW50IG5hbWUgdG8gZGlzcGF0Y2ggY29uZmlnXG4gKi9cbnZhciBldmVudE5hbWVEaXNwYXRjaENvbmZpZ3MgPSB7fTtcblxuLyoqXG4gKiBNYXBwaW5nIGZyb20gcmVnaXN0cmF0aW9uIG5hbWUgdG8gcGx1Z2luIG1vZHVsZVxuICovXG52YXIgcmVnaXN0cmF0aW9uTmFtZU1vZHVsZXMgPSB7fTtcblxuLyoqXG4gKiBNYXBwaW5nIGZyb20gcmVnaXN0cmF0aW9uIG5hbWUgdG8gZXZlbnQgbmFtZVxuICovXG52YXIgcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcyA9IHt9O1xuXG4vKipcbiAqIE1hcHBpbmcgZnJvbSBsb3dlcmNhc2UgcmVnaXN0cmF0aW9uIG5hbWVzIHRvIHRoZSBwcm9wZXJseSBjYXNlZCB2ZXJzaW9uLFxuICogdXNlZCB0byB3YXJuIGluIHRoZSBjYXNlIG9mIG1pc3NpbmcgZXZlbnQgaGFuZGxlcnMuIEF2YWlsYWJsZVxuICogb25seSBpbiB0cnVlLlxuICogQHR5cGUge09iamVjdH1cbiAqL1xudmFyIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMgPSB7fTtcbi8vIFRydXN0IHRoZSBkZXZlbG9wZXIgdG8gb25seSB1c2UgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lcyBpbiB0cnVlXG5cbi8qKlxuICogSW5qZWN0cyBhbiBvcmRlcmluZyBvZiBwbHVnaW5zIChieSBwbHVnaW4gbmFtZSkuIFRoaXMgYWxsb3dzIHRoZSBvcmRlcmluZ1xuICogdG8gYmUgZGVjb3VwbGVkIGZyb20gaW5qZWN0aW9uIG9mIHRoZSBhY3R1YWwgcGx1Z2lucyBzbyB0aGF0IG9yZGVyaW5nIGlzXG4gKiBhbHdheXMgZGV0ZXJtaW5pc3RpYyByZWdhcmRsZXNzIG9mIHBhY2thZ2luZywgb24tdGhlLWZseSBpbmplY3Rpb24sIGV0Yy5cbiAqXG4gKiBAcGFyYW0ge2FycmF5fSBJbmplY3RlZEV2ZW50UGx1Z2luT3JkZXJcbiAqIEBpbnRlcm5hbFxuICogQHNlZSB7RXZlbnRQbHVnaW5IdWIuaW5qZWN0aW9uLmluamVjdEV2ZW50UGx1Z2luT3JkZXJ9XG4gKi9cbmZ1bmN0aW9uIGluamVjdEV2ZW50UGx1Z2luT3JkZXIoaW5qZWN0ZWRFdmVudFBsdWdpbk9yZGVyKSB7XG4gICEhZXZlbnRQbHVnaW5PcmRlciA/IGludmFyaWFudChmYWxzZSwgJ0V2ZW50UGx1Z2luUmVnaXN0cnk6IENhbm5vdCBpbmplY3QgZXZlbnQgcGx1Z2luIG9yZGVyaW5nIG1vcmUgdGhhbiBvbmNlLiBZb3UgYXJlIGxpa2VseSB0cnlpbmcgdG8gbG9hZCBtb3JlIHRoYW4gb25lIGNvcHkgb2YgUmVhY3QuJykgOiB2b2lkIDA7XG4gIC8vIENsb25lIHRoZSBvcmRlcmluZyBzbyBpdCBjYW5ub3QgYmUgZHluYW1pY2FsbHkgbXV0YXRlZC5cbiAgZXZlbnRQbHVnaW5PcmRlciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGluamVjdGVkRXZlbnRQbHVnaW5PcmRlcik7XG4gIHJlY29tcHV0ZVBsdWdpbk9yZGVyaW5nKCk7XG59XG5cbi8qKlxuICogSW5qZWN0cyBwbHVnaW5zIHRvIGJlIHVzZWQgYnkgYEV2ZW50UGx1Z2luSHViYC4gVGhlIHBsdWdpbiBuYW1lcyBtdXN0IGJlXG4gKiBpbiB0aGUgb3JkZXJpbmcgaW5qZWN0ZWQgYnkgYGluamVjdEV2ZW50UGx1Z2luT3JkZXJgLlxuICpcbiAqIFBsdWdpbnMgY2FuIGJlIGluamVjdGVkIGFzIHBhcnQgb2YgcGFnZSBpbml0aWFsaXphdGlvbiBvciBvbi10aGUtZmx5LlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBpbmplY3RlZE5hbWVzVG9QbHVnaW5zIE1hcCBmcm9tIG5hbWVzIHRvIHBsdWdpbiBtb2R1bGVzLlxuICogQGludGVybmFsXG4gKiBAc2VlIHtFdmVudFBsdWdpbkh1Yi5pbmplY3Rpb24uaW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lfVxuICovXG5mdW5jdGlvbiBpbmplY3RFdmVudFBsdWdpbnNCeU5hbWUoaW5qZWN0ZWROYW1lc1RvUGx1Z2lucykge1xuICB2YXIgaXNPcmRlcmluZ0RpcnR5ID0gZmFsc2U7XG4gIGZvciAodmFyIHBsdWdpbk5hbWUgaW4gaW5qZWN0ZWROYW1lc1RvUGx1Z2lucykge1xuICAgIGlmICghaW5qZWN0ZWROYW1lc1RvUGx1Z2lucy5oYXNPd25Qcm9wZXJ0eShwbHVnaW5OYW1lKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHZhciBwbHVnaW5Nb2R1bGUgPSBpbmplY3RlZE5hbWVzVG9QbHVnaW5zW3BsdWdpbk5hbWVdO1xuICAgIGlmICghbmFtZXNUb1BsdWdpbnMuaGFzT3duUHJvcGVydHkocGx1Z2luTmFtZSkgfHwgbmFtZXNUb1BsdWdpbnNbcGx1Z2luTmFtZV0gIT09IHBsdWdpbk1vZHVsZSkge1xuICAgICAgISFuYW1lc1RvUGx1Z2luc1twbHVnaW5OYW1lXSA/IGludmFyaWFudChmYWxzZSwgJ0V2ZW50UGx1Z2luUmVnaXN0cnk6IENhbm5vdCBpbmplY3QgdHdvIGRpZmZlcmVudCBldmVudCBwbHVnaW5zIHVzaW5nIHRoZSBzYW1lIG5hbWUsIGAlc2AuJywgcGx1Z2luTmFtZSkgOiB2b2lkIDA7XG4gICAgICBuYW1lc1RvUGx1Z2luc1twbHVnaW5OYW1lXSA9IHBsdWdpbk1vZHVsZTtcbiAgICAgIGlzT3JkZXJpbmdEaXJ0eSA9IHRydWU7XG4gICAgfVxuICB9XG4gIGlmIChpc09yZGVyaW5nRGlydHkpIHtcbiAgICByZWNvbXB1dGVQbHVnaW5PcmRlcmluZygpO1xuICB9XG59XG5cbi8qKlxuICogU2ltaWxhciB0byBpbnZhcmlhbnQgYnV0IG9ubHkgbG9ncyBhIHdhcm5pbmcgaWYgdGhlIGNvbmRpdGlvbiBpcyBub3QgbWV0LlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBsb2cgaXNzdWVzIGluIGRldmVsb3BtZW50IGVudmlyb25tZW50cyBpbiBjcml0aWNhbFxuICogcGF0aHMuIFJlbW92aW5nIHRoZSBsb2dnaW5nIGNvZGUgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIHdpbGwga2VlcCB0aGVcbiAqIHNhbWUgbG9naWMgYW5kIGZvbGxvdyB0aGUgc2FtZSBjb2RlIHBhdGhzLlxuICovXG5cbnZhciB3YXJuaW5nV2l0aG91dFN0YWNrID0gZnVuY3Rpb24gKCkge307XG5cbntcbiAgd2FybmluZ1dpdGhvdXRTdGFjayA9IGZ1bmN0aW9uIChjb25kaXRpb24sIGZvcm1hdCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDIgPyBfbGVuIC0gMiA6IDApLCBfa2V5ID0gMjsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMl0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2B3YXJuaW5nV2l0aG91dFN0YWNrKGNvbmRpdGlvbiwgZm9ybWF0LCAuLi5hcmdzKWAgcmVxdWlyZXMgYSB3YXJuaW5nICcgKyAnbWVzc2FnZSBhcmd1bWVudCcpO1xuICAgIH1cbiAgICBpZiAoYXJncy5sZW5ndGggPiA4KSB7XG4gICAgICAvLyBDaGVjayBiZWZvcmUgdGhlIGNvbmRpdGlvbiB0byBjYXRjaCB2aW9sYXRpb25zIGVhcmx5LlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCd3YXJuaW5nV2l0aG91dFN0YWNrKCkgY3VycmVudGx5IHN1cHBvcnRzIGF0IG1vc3QgOCBhcmd1bWVudHMuJyk7XG4gICAgfVxuICAgIGlmIChjb25kaXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdmFyIGFyZ3NXaXRoRm9ybWF0ID0gYXJncy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuICcnICsgaXRlbTtcbiAgICAgIH0pO1xuICAgICAgYXJnc1dpdGhGb3JtYXQudW5zaGlmdCgnV2FybmluZzogJyArIGZvcm1hdCk7XG5cbiAgICAgIC8vIFdlIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIHNwcmVhZCAob3IgLmFwcGx5KSBkaXJlY3RseSBiZWNhdXNlIGl0XG4gICAgICAvLyBicmVha3MgSUU5OiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzNjEwXG4gICAgICBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChjb25zb2xlLmVycm9yLCBjb25zb2xlLCBhcmdzV2l0aEZvcm1hdCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgdmFyIGFyZ0luZGV4ID0gMDtcbiAgICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyBmb3JtYXQucmVwbGFjZSgvJXMvZywgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gYXJnc1thcmdJbmRleCsrXTtcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKHgpIHt9XG4gIH07XG59XG5cbnZhciB3YXJuaW5nV2l0aG91dFN0YWNrJDEgPSB3YXJuaW5nV2l0aG91dFN0YWNrO1xuXG52YXIgZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZSA9IG51bGw7XG52YXIgZ2V0SW5zdGFuY2VGcm9tTm9kZSA9IG51bGw7XG52YXIgZ2V0Tm9kZUZyb21JbnN0YW5jZSA9IG51bGw7XG5cbmZ1bmN0aW9uIHNldENvbXBvbmVudFRyZWUoZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZUltcGwsIGdldEluc3RhbmNlRnJvbU5vZGVJbXBsLCBnZXROb2RlRnJvbUluc3RhbmNlSW1wbCkge1xuICBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlID0gZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZUltcGw7XG4gIGdldEluc3RhbmNlRnJvbU5vZGUgPSBnZXRJbnN0YW5jZUZyb21Ob2RlSW1wbDtcbiAgZ2V0Tm9kZUZyb21JbnN0YW5jZSA9IGdldE5vZGVGcm9tSW5zdGFuY2VJbXBsO1xuICB7XG4gICAgIShnZXROb2RlRnJvbUluc3RhbmNlICYmIGdldEluc3RhbmNlRnJvbU5vZGUpID8gd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnRXZlbnRQbHVnaW5VdGlscy5zZXRDb21wb25lbnRUcmVlKC4uLik6IEluamVjdGVkICcgKyAnbW9kdWxlIGlzIG1pc3NpbmcgZ2V0Tm9kZUZyb21JbnN0YW5jZSBvciBnZXRJbnN0YW5jZUZyb21Ob2RlLicpIDogdm9pZCAwO1xuICB9XG59XG5cbnZhciB2YWxpZGF0ZUV2ZW50RGlzcGF0Y2hlcyA9IHZvaWQgMDtcbntcbiAgdmFsaWRhdGVFdmVudERpc3BhdGNoZXMgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB2YXIgZGlzcGF0Y2hMaXN0ZW5lcnMgPSBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnM7XG4gICAgdmFyIGRpc3BhdGNoSW5zdGFuY2VzID0gZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzO1xuXG4gICAgdmFyIGxpc3RlbmVyc0lzQXJyID0gQXJyYXkuaXNBcnJheShkaXNwYXRjaExpc3RlbmVycyk7XG4gICAgdmFyIGxpc3RlbmVyc0xlbiA9IGxpc3RlbmVyc0lzQXJyID8gZGlzcGF0Y2hMaXN0ZW5lcnMubGVuZ3RoIDogZGlzcGF0Y2hMaXN0ZW5lcnMgPyAxIDogMDtcblxuICAgIHZhciBpbnN0YW5jZXNJc0FyciA9IEFycmF5LmlzQXJyYXkoZGlzcGF0Y2hJbnN0YW5jZXMpO1xuICAgIHZhciBpbnN0YW5jZXNMZW4gPSBpbnN0YW5jZXNJc0FyciA/IGRpc3BhdGNoSW5zdGFuY2VzLmxlbmd0aCA6IGRpc3BhdGNoSW5zdGFuY2VzID8gMSA6IDA7XG5cbiAgICAhKGluc3RhbmNlc0lzQXJyID09PSBsaXN0ZW5lcnNJc0FyciAmJiBpbnN0YW5jZXNMZW4gPT09IGxpc3RlbmVyc0xlbikgPyB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdFdmVudFBsdWdpblV0aWxzOiBJbnZhbGlkIGBldmVudGAuJykgOiB2b2lkIDA7XG4gIH07XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggdGhlIGV2ZW50IHRvIHRoZSBsaXN0ZW5lci5cbiAqIEBwYXJhbSB7U3ludGhldGljRXZlbnR9IGV2ZW50IFN5bnRoZXRpY0V2ZW50IHRvIGhhbmRsZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gbGlzdGVuZXIgQXBwbGljYXRpb24tbGV2ZWwgY2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gaW5zdCBJbnRlcm5hbCBjb21wb25lbnQgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gZXhlY3V0ZURpc3BhdGNoKGV2ZW50LCBsaXN0ZW5lciwgaW5zdCkge1xuICB2YXIgdHlwZSA9IGV2ZW50LnR5cGUgfHwgJ3Vua25vd24tZXZlbnQnO1xuICBldmVudC5jdXJyZW50VGFyZ2V0ID0gZ2V0Tm9kZUZyb21JbnN0YW5jZShpbnN0KTtcbiAgaW52b2tlR3VhcmRlZENhbGxiYWNrQW5kQ2F0Y2hGaXJzdEVycm9yKHR5cGUsIGxpc3RlbmVyLCB1bmRlZmluZWQsIGV2ZW50KTtcbiAgZXZlbnQuY3VycmVudFRhcmdldCA9IG51bGw7XG59XG5cbi8qKlxuICogU3RhbmRhcmQvc2ltcGxlIGl0ZXJhdGlvbiB0aHJvdWdoIGFuIGV2ZW50J3MgY29sbGVjdGVkIGRpc3BhdGNoZXMuXG4gKi9cbmZ1bmN0aW9uIGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlcihldmVudCkge1xuICB2YXIgZGlzcGF0Y2hMaXN0ZW5lcnMgPSBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnM7XG4gIHZhciBkaXNwYXRjaEluc3RhbmNlcyA9IGV2ZW50Ll9kaXNwYXRjaEluc3RhbmNlcztcbiAge1xuICAgIHZhbGlkYXRlRXZlbnREaXNwYXRjaGVzKGV2ZW50KTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheShkaXNwYXRjaExpc3RlbmVycykpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpc3BhdGNoTGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIC8vIExpc3RlbmVycyBhbmQgSW5zdGFuY2VzIGFyZSB0d28gcGFyYWxsZWwgYXJyYXlzIHRoYXQgYXJlIGFsd2F5cyBpbiBzeW5jLlxuICAgICAgZXhlY3V0ZURpc3BhdGNoKGV2ZW50LCBkaXNwYXRjaExpc3RlbmVyc1tpXSwgZGlzcGF0Y2hJbnN0YW5jZXNbaV0pO1xuICAgIH1cbiAgfSBlbHNlIGlmIChkaXNwYXRjaExpc3RlbmVycykge1xuICAgIGV4ZWN1dGVEaXNwYXRjaChldmVudCwgZGlzcGF0Y2hMaXN0ZW5lcnMsIGRpc3BhdGNoSW5zdGFuY2VzKTtcbiAgfVxuICBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMgPSBudWxsO1xuICBldmVudC5fZGlzcGF0Y2hJbnN0YW5jZXMgPSBudWxsO1xufVxuXG4vKipcbiAqIEBzZWUgZXhlY3V0ZURpc3BhdGNoZXNJbk9yZGVyU3RvcEF0VHJ1ZUltcGxcbiAqL1xuXG5cbi8qKlxuICogRXhlY3V0aW9uIG9mIGEgXCJkaXJlY3RcIiBkaXNwYXRjaCAtIHRoZXJlIG11c3QgYmUgYXQgbW9zdCBvbmUgZGlzcGF0Y2hcbiAqIGFjY3VtdWxhdGVkIG9uIHRoZSBldmVudCBvciBpdCBpcyBjb25zaWRlcmVkIGFuIGVycm9yLiBJdCBkb2Vzbid0IHJlYWxseSBtYWtlXG4gKiBzZW5zZSBmb3IgYW4gZXZlbnQgd2l0aCBtdWx0aXBsZSBkaXNwYXRjaGVzIChidWJibGVkKSB0byBrZWVwIHRyYWNrIG9mIHRoZVxuICogcmV0dXJuIHZhbHVlcyBhdCBlYWNoIGRpc3BhdGNoIGV4ZWN1dGlvbiwgYnV0IGl0IGRvZXMgdGVuZCB0byBtYWtlIHNlbnNlIHdoZW5cbiAqIGRlYWxpbmcgd2l0aCBcImRpcmVjdFwiIGRpc3BhdGNoZXMuXG4gKlxuICogQHJldHVybiB7Kn0gVGhlIHJldHVybiB2YWx1ZSBvZiBleGVjdXRpbmcgdGhlIHNpbmdsZSBkaXNwYXRjaC5cbiAqL1xuXG5cbi8qKlxuICogQHBhcmFtIHtTeW50aGV0aWNFdmVudH0gZXZlbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWZmIG51bWJlciBvZiBkaXNwYXRjaGVzIGFjY3VtdWxhdGVkIGlzIGdyZWF0ZXIgdGhhbiAwLlxuICovXG5cbi8qKlxuICogQWNjdW11bGF0ZXMgaXRlbXMgdGhhdCBtdXN0IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZCBpbnRvIHRoZSBmaXJzdCBvbmUuIFRoaXNcbiAqIGlzIHVzZWQgdG8gY29uc2VydmUgbWVtb3J5IGJ5IGF2b2lkaW5nIGFycmF5IGFsbG9jYXRpb25zLCBhbmQgdGh1cyBzYWNyaWZpY2VzXG4gKiBBUEkgY2xlYW5uZXNzLiBTaW5jZSBgY3VycmVudGAgY2FuIGJlIG51bGwgYmVmb3JlIGJlaW5nIHBhc3NlZCBpbiBhbmQgbm90XG4gKiBudWxsIGFmdGVyIHRoaXMgZnVuY3Rpb24sIG1ha2Ugc3VyZSB0byBhc3NpZ24gaXQgYmFjayB0byBgY3VycmVudGA6XG4gKlxuICogYGEgPSBhY2N1bXVsYXRlSW50byhhLCBiKTtgXG4gKlxuICogVGhpcyBBUEkgc2hvdWxkIGJlIHNwYXJpbmdseSB1c2VkLiBUcnkgYGFjY3VtdWxhdGVgIGZvciBzb21ldGhpbmcgY2xlYW5lci5cbiAqXG4gKiBAcmV0dXJuIHsqfGFycmF5PCo+fSBBbiBhY2N1bXVsYXRpb24gb2YgaXRlbXMuXG4gKi9cblxuZnVuY3Rpb24gYWNjdW11bGF0ZUludG8oY3VycmVudCwgbmV4dCkge1xuICAhKG5leHQgIT0gbnVsbCkgPyBpbnZhcmlhbnQoZmFsc2UsICdhY2N1bXVsYXRlSW50byguLi4pOiBBY2N1bXVsYXRlZCBpdGVtcyBtdXN0IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4nKSA6IHZvaWQgMDtcblxuICBpZiAoY3VycmVudCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cblxuICAvLyBCb3RoIGFyZSBub3QgZW1wdHkuIFdhcm5pbmc6IE5ldmVyIGNhbGwgeC5jb25jYXQoeSkgd2hlbiB5b3UgYXJlIG5vdFxuICAvLyBjZXJ0YWluIHRoYXQgeCBpcyBhbiBBcnJheSAoeCBjb3VsZCBiZSBhIHN0cmluZyB3aXRoIGNvbmNhdCBtZXRob2QpLlxuICBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50KSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG5leHQpKSB7XG4gICAgICBjdXJyZW50LnB1c2guYXBwbHkoY3VycmVudCwgbmV4dCk7XG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9XG4gICAgY3VycmVudC5wdXNoKG5leHQpO1xuICAgIHJldHVybiBjdXJyZW50O1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkobmV4dCkpIHtcbiAgICAvLyBBIGJpdCB0b28gZGFuZ2Vyb3VzIHRvIG11dGF0ZSBgbmV4dGAuXG4gICAgcmV0dXJuIFtjdXJyZW50XS5jb25jYXQobmV4dCk7XG4gIH1cblxuICByZXR1cm4gW2N1cnJlbnQsIG5leHRdO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7YXJyYXl9IGFyciBhbiBcImFjY3VtdWxhdGlvblwiIG9mIGl0ZW1zIHdoaWNoIGlzIGVpdGhlciBhbiBBcnJheSBvclxuICogYSBzaW5nbGUgaXRlbS4gVXNlZnVsIHdoZW4gcGFpcmVkIHdpdGggdGhlIGBhY2N1bXVsYXRlYCBtb2R1bGUuIFRoaXMgaXMgYVxuICogc2ltcGxlIHV0aWxpdHkgdGhhdCBhbGxvd3MgdXMgdG8gcmVhc29uIGFib3V0IGEgY29sbGVjdGlvbiBvZiBpdGVtcywgYnV0XG4gKiBoYW5kbGluZyB0aGUgY2FzZSB3aGVuIHRoZXJlIGlzIGV4YWN0bHkgb25lIGl0ZW0gKGFuZCB3ZSBkbyBub3QgbmVlZCB0b1xuICogYWxsb2NhdGUgYW4gYXJyYXkpLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2IgQ2FsbGJhY2sgaW52b2tlZCB3aXRoIGVhY2ggZWxlbWVudCBvciBhIGNvbGxlY3Rpb24uXG4gKiBAcGFyYW0gez99IFtzY29wZV0gU2NvcGUgdXNlZCBhcyBgdGhpc2AgaW4gYSBjYWxsYmFjay5cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaEFjY3VtdWxhdGVkKGFyciwgY2IsIHNjb3BlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICBhcnIuZm9yRWFjaChjYiwgc2NvcGUpO1xuICB9IGVsc2UgaWYgKGFycikge1xuICAgIGNiLmNhbGwoc2NvcGUsIGFycik7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBxdWV1ZSBvZiBldmVudHMgdGhhdCBoYXZlIGFjY3VtdWxhdGVkIHRoZWlyIGRpc3BhdGNoZXMgYW5kIGFyZVxuICogd2FpdGluZyB0byBoYXZlIHRoZWlyIGRpc3BhdGNoZXMgZXhlY3V0ZWQuXG4gKi9cbnZhciBldmVudFF1ZXVlID0gbnVsbDtcblxuLyoqXG4gKiBEaXNwYXRjaGVzIGFuIGV2ZW50IGFuZCByZWxlYXNlcyBpdCBiYWNrIGludG8gdGhlIHBvb2wsIHVubGVzcyBwZXJzaXN0ZW50LlxuICpcbiAqIEBwYXJhbSB7P29iamVjdH0gZXZlbnQgU3ludGhldGljIGV2ZW50IHRvIGJlIGRpc3BhdGNoZWQuXG4gKiBAcHJpdmF0ZVxuICovXG52YXIgZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIGlmIChldmVudCkge1xuICAgIGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlcihldmVudCk7XG5cbiAgICBpZiAoIWV2ZW50LmlzUGVyc2lzdGVudCgpKSB7XG4gICAgICBldmVudC5jb25zdHJ1Y3Rvci5yZWxlYXNlKGV2ZW50KTtcbiAgICB9XG4gIH1cbn07XG52YXIgZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlVG9wTGV2ZWwgPSBmdW5jdGlvbiAoZSkge1xuICByZXR1cm4gZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlKGUpO1xufTtcblxuZnVuY3Rpb24gaXNJbnRlcmFjdGl2ZSh0YWcpIHtcbiAgcmV0dXJuIHRhZyA9PT0gJ2J1dHRvbicgfHwgdGFnID09PSAnaW5wdXQnIHx8IHRhZyA9PT0gJ3NlbGVjdCcgfHwgdGFnID09PSAndGV4dGFyZWEnO1xufVxuXG5mdW5jdGlvbiBzaG91bGRQcmV2ZW50TW91c2VFdmVudChuYW1lLCB0eXBlLCBwcm9wcykge1xuICBzd2l0Y2ggKG5hbWUpIHtcbiAgICBjYXNlICdvbkNsaWNrJzpcbiAgICBjYXNlICdvbkNsaWNrQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Eb3VibGVDbGljayc6XG4gICAgY2FzZSAnb25Eb3VibGVDbGlja0NhcHR1cmUnOlxuICAgIGNhc2UgJ29uTW91c2VEb3duJzpcbiAgICBjYXNlICdvbk1vdXNlRG93bkNhcHR1cmUnOlxuICAgIGNhc2UgJ29uTW91c2VNb3ZlJzpcbiAgICBjYXNlICdvbk1vdXNlTW92ZUNhcHR1cmUnOlxuICAgIGNhc2UgJ29uTW91c2VVcCc6XG4gICAgY2FzZSAnb25Nb3VzZVVwQ2FwdHVyZSc6XG4gICAgICByZXR1cm4gISEocHJvcHMuZGlzYWJsZWQgJiYgaXNJbnRlcmFjdGl2ZSh0eXBlKSk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgaXMgYSB1bmlmaWVkIGludGVyZmFjZSBmb3IgZXZlbnQgcGx1Z2lucyB0byBiZSBpbnN0YWxsZWQgYW5kIGNvbmZpZ3VyZWQuXG4gKlxuICogRXZlbnQgcGx1Z2lucyBjYW4gaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIGBleHRyYWN0RXZlbnRzYCB7ZnVuY3Rpb24oc3RyaW5nLCBET01FdmVudFRhcmdldCwgc3RyaW5nLCBvYmplY3QpOiAqfVxuICogICAgIFJlcXVpcmVkLiBXaGVuIGEgdG9wLWxldmVsIGV2ZW50IGlzIGZpcmVkLCB0aGlzIG1ldGhvZCBpcyBleHBlY3RlZCB0b1xuICogICAgIGV4dHJhY3Qgc3ludGhldGljIGV2ZW50cyB0aGF0IHdpbGwgaW4gdHVybiBiZSBxdWV1ZWQgYW5kIGRpc3BhdGNoZWQuXG4gKlxuICogICBgZXZlbnRUeXBlc2Age29iamVjdH1cbiAqICAgICBPcHRpb25hbCwgcGx1Z2lucyB0aGF0IGZpcmUgZXZlbnRzIG11c3QgcHVibGlzaCBhIG1hcHBpbmcgb2YgcmVnaXN0cmF0aW9uXG4gKiAgICAgbmFtZXMgdGhhdCBhcmUgdXNlZCB0byByZWdpc3RlciBsaXN0ZW5lcnMuIFZhbHVlcyBvZiB0aGlzIG1hcHBpbmcgbXVzdFxuICogICAgIGJlIG9iamVjdHMgdGhhdCBjb250YWluIGByZWdpc3RyYXRpb25OYW1lYCBvciBgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXNgLlxuICpcbiAqICAgYGV4ZWN1dGVEaXNwYXRjaGAge2Z1bmN0aW9uKG9iamVjdCwgZnVuY3Rpb24sIHN0cmluZyl9XG4gKiAgICAgT3B0aW9uYWwsIGFsbG93cyBwbHVnaW5zIHRvIG92ZXJyaWRlIGhvdyBhbiBldmVudCBnZXRzIGRpc3BhdGNoZWQuIEJ5XG4gKiAgICAgZGVmYXVsdCwgdGhlIGxpc3RlbmVyIGlzIHNpbXBseSBpbnZva2VkLlxuICpcbiAqIEVhY2ggcGx1Z2luIHRoYXQgaXMgaW5qZWN0ZWQgaW50byBgRXZlbnRzUGx1Z2luSHViYCBpcyBpbW1lZGlhdGVseSBvcGVyYWJsZS5cbiAqXG4gKiBAcHVibGljXG4gKi9cblxuLyoqXG4gKiBNZXRob2RzIGZvciBpbmplY3RpbmcgZGVwZW5kZW5jaWVzLlxuICovXG52YXIgaW5qZWN0aW9uID0ge1xuICAvKipcbiAgICogQHBhcmFtIHthcnJheX0gSW5qZWN0ZWRFdmVudFBsdWdpbk9yZGVyXG4gICAqIEBwdWJsaWNcbiAgICovXG4gIGluamVjdEV2ZW50UGx1Z2luT3JkZXI6IGluamVjdEV2ZW50UGx1Z2luT3JkZXIsXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBpbmplY3RlZE5hbWVzVG9QbHVnaW5zIE1hcCBmcm9tIG5hbWVzIHRvIHBsdWdpbiBtb2R1bGVzLlxuICAgKi9cbiAgaW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lOiBpbmplY3RFdmVudFBsdWdpbnNCeU5hbWVcbn07XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGluc3QgVGhlIGluc3RhbmNlLCB3aGljaCBpcyB0aGUgc291cmNlIG9mIGV2ZW50cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZWdpc3RyYXRpb25OYW1lIE5hbWUgb2YgbGlzdGVuZXIgKGUuZy4gYG9uQ2xpY2tgKS5cbiAqIEByZXR1cm4gez9mdW5jdGlvbn0gVGhlIHN0b3JlZCBjYWxsYmFjay5cbiAqL1xuZnVuY3Rpb24gZ2V0TGlzdGVuZXIoaW5zdCwgcmVnaXN0cmF0aW9uTmFtZSkge1xuICB2YXIgbGlzdGVuZXIgPSB2b2lkIDA7XG5cbiAgLy8gVE9ETzogc2hvdWxkUHJldmVudE1vdXNlRXZlbnQgaXMgRE9NLXNwZWNpZmljIGFuZCBkZWZpbml0ZWx5IHNob3VsZCBub3RcbiAgLy8gbGl2ZSBoZXJlOyBuZWVkcyB0byBiZSBtb3ZlZCB0byBhIGJldHRlciBwbGFjZSBzb29uXG4gIHZhciBzdGF0ZU5vZGUgPSBpbnN0LnN0YXRlTm9kZTtcbiAgaWYgKCFzdGF0ZU5vZGUpIHtcbiAgICAvLyBXb3JrIGluIHByb2dyZXNzIChleDogb25sb2FkIGV2ZW50cyBpbiBpbmNyZW1lbnRhbCBtb2RlKS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICB2YXIgcHJvcHMgPSBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlKHN0YXRlTm9kZSk7XG4gIGlmICghcHJvcHMpIHtcbiAgICAvLyBXb3JrIGluIHByb2dyZXNzLlxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGxpc3RlbmVyID0gcHJvcHNbcmVnaXN0cmF0aW9uTmFtZV07XG4gIGlmIChzaG91bGRQcmV2ZW50TW91c2VFdmVudChyZWdpc3RyYXRpb25OYW1lLCBpbnN0LnR5cGUsIHByb3BzKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gICEoIWxpc3RlbmVyIHx8IHR5cGVvZiBsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykgPyBpbnZhcmlhbnQoZmFsc2UsICdFeHBlY3RlZCBgJXNgIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24sIGluc3RlYWQgZ290IGEgdmFsdWUgb2YgYCVzYCB0eXBlLicsIHJlZ2lzdHJhdGlvbk5hbWUsIHR5cGVvZiBsaXN0ZW5lcikgOiB2b2lkIDA7XG4gIHJldHVybiBsaXN0ZW5lcjtcbn1cblxuLyoqXG4gKiBBbGxvd3MgcmVnaXN0ZXJlZCBwbHVnaW5zIGFuIG9wcG9ydHVuaXR5IHRvIGV4dHJhY3QgZXZlbnRzIGZyb20gdG9wLWxldmVsXG4gKiBuYXRpdmUgYnJvd3NlciBldmVudHMuXG4gKlxuICogQHJldHVybiB7Kn0gQW4gYWNjdW11bGF0aW9uIG9mIHN5bnRoZXRpYyBldmVudHMuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICB2YXIgZXZlbnRzID0gbnVsbDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwbHVnaW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgLy8gTm90IGV2ZXJ5IHBsdWdpbiBpbiB0aGUgb3JkZXJpbmcgbWF5IGJlIGxvYWRlZCBhdCBydW50aW1lLlxuICAgIHZhciBwb3NzaWJsZVBsdWdpbiA9IHBsdWdpbnNbaV07XG4gICAgaWYgKHBvc3NpYmxlUGx1Z2luKSB7XG4gICAgICB2YXIgZXh0cmFjdGVkRXZlbnRzID0gcG9zc2libGVQbHVnaW4uZXh0cmFjdEV2ZW50cyh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgICBpZiAoZXh0cmFjdGVkRXZlbnRzKSB7XG4gICAgICAgIGV2ZW50cyA9IGFjY3VtdWxhdGVJbnRvKGV2ZW50cywgZXh0cmFjdGVkRXZlbnRzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGV2ZW50cztcbn1cblxuZnVuY3Rpb24gcnVuRXZlbnRzSW5CYXRjaChldmVudHMpIHtcbiAgaWYgKGV2ZW50cyAhPT0gbnVsbCkge1xuICAgIGV2ZW50UXVldWUgPSBhY2N1bXVsYXRlSW50byhldmVudFF1ZXVlLCBldmVudHMpO1xuICB9XG5cbiAgLy8gU2V0IGBldmVudFF1ZXVlYCB0byBudWxsIGJlZm9yZSBwcm9jZXNzaW5nIGl0IHNvIHRoYXQgd2UgY2FuIHRlbGwgaWYgbW9yZVxuICAvLyBldmVudHMgZ2V0IGVucXVldWVkIHdoaWxlIHByb2Nlc3NpbmcuXG4gIHZhciBwcm9jZXNzaW5nRXZlbnRRdWV1ZSA9IGV2ZW50UXVldWU7XG4gIGV2ZW50UXVldWUgPSBudWxsO1xuXG4gIGlmICghcHJvY2Vzc2luZ0V2ZW50UXVldWUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmb3JFYWNoQWNjdW11bGF0ZWQocHJvY2Vzc2luZ0V2ZW50UXVldWUsIGV4ZWN1dGVEaXNwYXRjaGVzQW5kUmVsZWFzZVRvcExldmVsKTtcbiAgISFldmVudFF1ZXVlID8gaW52YXJpYW50KGZhbHNlLCAncHJvY2Vzc0V2ZW50UXVldWUoKTogQWRkaXRpb25hbCBldmVudHMgd2VyZSBlbnF1ZXVlZCB3aGlsZSBwcm9jZXNzaW5nIGFuIGV2ZW50IHF1ZXVlLiBTdXBwb3J0IGZvciB0aGlzIGhhcyBub3QgeWV0IGJlZW4gaW1wbGVtZW50ZWQuJykgOiB2b2lkIDA7XG4gIC8vIFRoaXMgd291bGQgYmUgYSBnb29kIHRpbWUgdG8gcmV0aHJvdyBpZiBhbnkgb2YgdGhlIGV2ZW50IGhhbmRsZXJzIHRocmV3LlxuICByZXRocm93Q2F1Z2h0RXJyb3IoKTtcbn1cblxuZnVuY3Rpb24gcnVuRXh0cmFjdGVkRXZlbnRzSW5CYXRjaCh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICB2YXIgZXZlbnRzID0gZXh0cmFjdEV2ZW50cyh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gIHJ1bkV2ZW50c0luQmF0Y2goZXZlbnRzKTtcbn1cblxudmFyIEZ1bmN0aW9uQ29tcG9uZW50ID0gMDtcbnZhciBDbGFzc0NvbXBvbmVudCA9IDE7XG52YXIgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudCA9IDI7IC8vIEJlZm9yZSB3ZSBrbm93IHdoZXRoZXIgaXQgaXMgZnVuY3Rpb24gb3IgY2xhc3NcbnZhciBIb3N0Um9vdCA9IDM7IC8vIFJvb3Qgb2YgYSBob3N0IHRyZWUuIENvdWxkIGJlIG5lc3RlZCBpbnNpZGUgYW5vdGhlciBub2RlLlxudmFyIEhvc3RQb3J0YWwgPSA0OyAvLyBBIHN1YnRyZWUuIENvdWxkIGJlIGFuIGVudHJ5IHBvaW50IHRvIGEgZGlmZmVyZW50IHJlbmRlcmVyLlxudmFyIEhvc3RDb21wb25lbnQgPSA1O1xudmFyIEhvc3RUZXh0ID0gNjtcbnZhciBGcmFnbWVudCA9IDc7XG52YXIgTW9kZSA9IDg7XG52YXIgQ29udGV4dENvbnN1bWVyID0gOTtcbnZhciBDb250ZXh0UHJvdmlkZXIgPSAxMDtcbnZhciBGb3J3YXJkUmVmID0gMTE7XG52YXIgUHJvZmlsZXIgPSAxMjtcbnZhciBTdXNwZW5zZUNvbXBvbmVudCA9IDEzO1xudmFyIE1lbW9Db21wb25lbnQgPSAxNDtcbnZhciBTaW1wbGVNZW1vQ29tcG9uZW50ID0gMTU7XG52YXIgTGF6eUNvbXBvbmVudCA9IDE2O1xudmFyIEluY29tcGxldGVDbGFzc0NvbXBvbmVudCA9IDE3O1xudmFyIERlaHlkcmF0ZWRTdXNwZW5zZUNvbXBvbmVudCA9IDE4O1xuXG52YXIgcmFuZG9tS2V5ID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMik7XG52YXIgaW50ZXJuYWxJbnN0YW5jZUtleSA9ICdfX3JlYWN0SW50ZXJuYWxJbnN0YW5jZSQnICsgcmFuZG9tS2V5O1xudmFyIGludGVybmFsRXZlbnRIYW5kbGVyc0tleSA9ICdfX3JlYWN0RXZlbnRIYW5kbGVycyQnICsgcmFuZG9tS2V5O1xuXG5mdW5jdGlvbiBwcmVjYWNoZUZpYmVyTm9kZShob3N0SW5zdCwgbm9kZSkge1xuICBub2RlW2ludGVybmFsSW5zdGFuY2VLZXldID0gaG9zdEluc3Q7XG59XG5cbi8qKlxuICogR2l2ZW4gYSBET00gbm9kZSwgcmV0dXJuIHRoZSBjbG9zZXN0IFJlYWN0RE9NQ29tcG9uZW50IG9yXG4gKiBSZWFjdERPTVRleHRDb21wb25lbnQgaW5zdGFuY2UgYW5jZXN0b3IuXG4gKi9cbmZ1bmN0aW9uIGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKG5vZGUpIHtcbiAgaWYgKG5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV0pIHtcbiAgICByZXR1cm4gbm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XTtcbiAgfVxuXG4gIHdoaWxlICghbm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XSkge1xuICAgIGlmIChub2RlLnBhcmVudE5vZGUpIHtcbiAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRvcCBvZiB0aGUgdHJlZS4gVGhpcyBub2RlIG11c3Qgbm90IGJlIHBhcnQgb2YgYSBSZWFjdCB0cmVlIChvciBpc1xuICAgICAgLy8gdW5tb3VudGVkLCBwb3RlbnRpYWxseSkuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICB2YXIgaW5zdCA9IG5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV07XG4gIGlmIChpbnN0LnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBpbnN0LnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAvLyBJbiBGaWJlciwgdGhpcyB3aWxsIGFsd2F5cyBiZSB0aGUgZGVlcGVzdCByb290LlxuICAgIHJldHVybiBpbnN0O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogR2l2ZW4gYSBET00gbm9kZSwgcmV0dXJuIHRoZSBSZWFjdERPTUNvbXBvbmVudCBvciBSZWFjdERPTVRleHRDb21wb25lbnRcbiAqIGluc3RhbmNlLCBvciBudWxsIGlmIHRoZSBub2RlIHdhcyBub3QgcmVuZGVyZWQgYnkgdGhpcyBSZWFjdC5cbiAqL1xuZnVuY3Rpb24gZ2V0SW5zdGFuY2VGcm9tTm9kZSQxKG5vZGUpIHtcbiAgdmFyIGluc3QgPSBub2RlW2ludGVybmFsSW5zdGFuY2VLZXldO1xuICBpZiAoaW5zdCkge1xuICAgIGlmIChpbnN0LnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBpbnN0LnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgIHJldHVybiBpbnN0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogR2l2ZW4gYSBSZWFjdERPTUNvbXBvbmVudCBvciBSZWFjdERPTVRleHRDb21wb25lbnQsIHJldHVybiB0aGUgY29ycmVzcG9uZGluZ1xuICogRE9NIG5vZGUuXG4gKi9cbmZ1bmN0aW9uIGdldE5vZGVGcm9tSW5zdGFuY2UkMShpbnN0KSB7XG4gIGlmIChpbnN0LnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBpbnN0LnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAvLyBJbiBGaWJlciB0aGlzLCBpcyBqdXN0IHRoZSBzdGF0ZSBub2RlIHJpZ2h0IG5vdy4gV2UgYXNzdW1lIGl0IHdpbGwgYmVcbiAgICAvLyBhIGhvc3QgY29tcG9uZW50IG9yIGhvc3QgdGV4dC5cbiAgICByZXR1cm4gaW5zdC5zdGF0ZU5vZGU7XG4gIH1cblxuICAvLyBXaXRob3V0IHRoaXMgZmlyc3QgaW52YXJpYW50LCBwYXNzaW5nIGEgbm9uLURPTS1jb21wb25lbnQgdHJpZ2dlcnMgdGhlIG5leHRcbiAgLy8gaW52YXJpYW50IGZvciBhIG1pc3NpbmcgcGFyZW50LCB3aGljaCBpcyBzdXBlciBjb25mdXNpbmcuXG4gIGludmFyaWFudChmYWxzZSwgJ2dldE5vZGVGcm9tSW5zdGFuY2U6IEludmFsaWQgYXJndW1lbnQuJyk7XG59XG5cbmZ1bmN0aW9uIGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUkMShub2RlKSB7XG4gIHJldHVybiBub2RlW2ludGVybmFsRXZlbnRIYW5kbGVyc0tleV0gfHwgbnVsbDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRmliZXJQcm9wcyhub2RlLCBwcm9wcykge1xuICBub2RlW2ludGVybmFsRXZlbnRIYW5kbGVyc0tleV0gPSBwcm9wcztcbn1cblxuZnVuY3Rpb24gZ2V0UGFyZW50KGluc3QpIHtcbiAgZG8ge1xuICAgIGluc3QgPSBpbnN0LnJldHVybjtcbiAgICAvLyBUT0RPOiBJZiB0aGlzIGlzIGEgSG9zdFJvb3Qgd2UgbWlnaHQgd2FudCB0byBiYWlsIG91dC5cbiAgICAvLyBUaGF0IGlzIGRlcGVuZGluZyBvbiBpZiB3ZSB3YW50IG5lc3RlZCBzdWJ0cmVlcyAobGF5ZXJzKSB0byBidWJibGVcbiAgICAvLyBldmVudHMgdG8gdGhlaXIgcGFyZW50LiBXZSBjb3VsZCBhbHNvIGdvIHRocm91Z2ggcGFyZW50Tm9kZSBvbiB0aGVcbiAgICAvLyBob3N0IG5vZGUgYnV0IHRoYXQgd291bGRuJ3Qgd29yayBmb3IgUmVhY3QgTmF0aXZlIGFuZCBkb2Vzbid0IGxldCB1c1xuICAgIC8vIGRvIHRoZSBwb3J0YWwgZmVhdHVyZS5cbiAgfSB3aGlsZSAoaW5zdCAmJiBpbnN0LnRhZyAhPT0gSG9zdENvbXBvbmVudCk7XG4gIGlmIChpbnN0KSB7XG4gICAgcmV0dXJuIGluc3Q7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIEEgYW5kIEIsIG9yIG51bGwgaWYgdGhleSBhcmUgaW5cbiAqIGRpZmZlcmVudCB0cmVlcy5cbiAqL1xuZnVuY3Rpb24gZ2V0TG93ZXN0Q29tbW9uQW5jZXN0b3IoaW5zdEEsIGluc3RCKSB7XG4gIHZhciBkZXB0aEEgPSAwO1xuICBmb3IgKHZhciB0ZW1wQSA9IGluc3RBOyB0ZW1wQTsgdGVtcEEgPSBnZXRQYXJlbnQodGVtcEEpKSB7XG4gICAgZGVwdGhBKys7XG4gIH1cbiAgdmFyIGRlcHRoQiA9IDA7XG4gIGZvciAodmFyIHRlbXBCID0gaW5zdEI7IHRlbXBCOyB0ZW1wQiA9IGdldFBhcmVudCh0ZW1wQikpIHtcbiAgICBkZXB0aEIrKztcbiAgfVxuXG4gIC8vIElmIEEgaXMgZGVlcGVyLCBjcmF3bCB1cC5cbiAgd2hpbGUgKGRlcHRoQSAtIGRlcHRoQiA+IDApIHtcbiAgICBpbnN0QSA9IGdldFBhcmVudChpbnN0QSk7XG4gICAgZGVwdGhBLS07XG4gIH1cblxuICAvLyBJZiBCIGlzIGRlZXBlciwgY3Jhd2wgdXAuXG4gIHdoaWxlIChkZXB0aEIgLSBkZXB0aEEgPiAwKSB7XG4gICAgaW5zdEIgPSBnZXRQYXJlbnQoaW5zdEIpO1xuICAgIGRlcHRoQi0tO1xuICB9XG5cbiAgLy8gV2FsayBpbiBsb2Nrc3RlcCB1bnRpbCB3ZSBmaW5kIGEgbWF0Y2guXG4gIHZhciBkZXB0aCA9IGRlcHRoQTtcbiAgd2hpbGUgKGRlcHRoLS0pIHtcbiAgICBpZiAoaW5zdEEgPT09IGluc3RCIHx8IGluc3RBID09PSBpbnN0Qi5hbHRlcm5hdGUpIHtcbiAgICAgIHJldHVybiBpbnN0QTtcbiAgICB9XG4gICAgaW5zdEEgPSBnZXRQYXJlbnQoaW5zdEEpO1xuICAgIGluc3RCID0gZ2V0UGFyZW50KGluc3RCKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBSZXR1cm4gaWYgQSBpcyBhbiBhbmNlc3RvciBvZiBCLlxuICovXG5cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHBhcmVudCBpbnN0YW5jZSBvZiB0aGUgcGFzc2VkLWluIGluc3RhbmNlLlxuICovXG5cblxuLyoqXG4gKiBTaW11bGF0ZXMgdGhlIHRyYXZlcnNhbCBvZiBhIHR3by1waGFzZSwgY2FwdHVyZS9idWJibGUgZXZlbnQgZGlzcGF0Y2guXG4gKi9cbmZ1bmN0aW9uIHRyYXZlcnNlVHdvUGhhc2UoaW5zdCwgZm4sIGFyZykge1xuICB2YXIgcGF0aCA9IFtdO1xuICB3aGlsZSAoaW5zdCkge1xuICAgIHBhdGgucHVzaChpbnN0KTtcbiAgICBpbnN0ID0gZ2V0UGFyZW50KGluc3QpO1xuICB9XG4gIHZhciBpID0gdm9pZCAwO1xuICBmb3IgKGkgPSBwYXRoLmxlbmd0aDsgaS0tID4gMDspIHtcbiAgICBmbihwYXRoW2ldLCAnY2FwdHVyZWQnLCBhcmcpO1xuICB9XG4gIGZvciAoaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgZm4ocGF0aFtpXSwgJ2J1YmJsZWQnLCBhcmcpO1xuICB9XG59XG5cbi8qKlxuICogVHJhdmVyc2VzIHRoZSBJRCBoaWVyYXJjaHkgYW5kIGludm9rZXMgdGhlIHN1cHBsaWVkIGBjYmAgb24gYW55IElEcyB0aGF0XG4gKiBzaG91bGQgd291bGQgcmVjZWl2ZSBhIGBtb3VzZUVudGVyYCBvciBgbW91c2VMZWF2ZWAgZXZlbnQuXG4gKlxuICogRG9lcyBub3QgaW52b2tlIHRoZSBjYWxsYmFjayBvbiB0aGUgbmVhcmVzdCBjb21tb24gYW5jZXN0b3IgYmVjYXVzZSBub3RoaW5nXG4gKiBcImVudGVyZWRcIiBvciBcImxlZnRcIiB0aGF0IGVsZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIHRyYXZlcnNlRW50ZXJMZWF2ZShmcm9tLCB0bywgZm4sIGFyZ0Zyb20sIGFyZ1RvKSB7XG4gIHZhciBjb21tb24gPSBmcm9tICYmIHRvID8gZ2V0TG93ZXN0Q29tbW9uQW5jZXN0b3IoZnJvbSwgdG8pIDogbnVsbDtcbiAgdmFyIHBhdGhGcm9tID0gW107XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKCFmcm9tKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKGZyb20gPT09IGNvbW1vbikge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBhbHRlcm5hdGUgPSBmcm9tLmFsdGVybmF0ZTtcbiAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsICYmIGFsdGVybmF0ZSA9PT0gY29tbW9uKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgcGF0aEZyb20ucHVzaChmcm9tKTtcbiAgICBmcm9tID0gZ2V0UGFyZW50KGZyb20pO1xuICB9XG4gIHZhciBwYXRoVG8gPSBbXTtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAoIXRvKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKHRvID09PSBjb21tb24pIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgX2FsdGVybmF0ZSA9IHRvLmFsdGVybmF0ZTtcbiAgICBpZiAoX2FsdGVybmF0ZSAhPT0gbnVsbCAmJiBfYWx0ZXJuYXRlID09PSBjb21tb24pIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBwYXRoVG8ucHVzaCh0byk7XG4gICAgdG8gPSBnZXRQYXJlbnQodG8pO1xuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aEZyb20ubGVuZ3RoOyBpKyspIHtcbiAgICBmbihwYXRoRnJvbVtpXSwgJ2J1YmJsZWQnLCBhcmdGcm9tKTtcbiAgfVxuICBmb3IgKHZhciBfaSA9IHBhdGhUby5sZW5ndGg7IF9pLS0gPiAwOykge1xuICAgIGZuKHBhdGhUb1tfaV0sICdjYXB0dXJlZCcsIGFyZ1RvKTtcbiAgfVxufVxuXG4vKipcbiAqIFNvbWUgZXZlbnQgdHlwZXMgaGF2ZSBhIG5vdGlvbiBvZiBkaWZmZXJlbnQgcmVnaXN0cmF0aW9uIG5hbWVzIGZvciBkaWZmZXJlbnRcbiAqIFwicGhhc2VzXCIgb2YgcHJvcGFnYXRpb24uIFRoaXMgZmluZHMgbGlzdGVuZXJzIGJ5IGEgZ2l2ZW4gcGhhc2UuXG4gKi9cbmZ1bmN0aW9uIGxpc3RlbmVyQXRQaGFzZShpbnN0LCBldmVudCwgcHJvcGFnYXRpb25QaGFzZSkge1xuICB2YXIgcmVnaXN0cmF0aW9uTmFtZSA9IGV2ZW50LmRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzW3Byb3BhZ2F0aW9uUGhhc2VdO1xuICByZXR1cm4gZ2V0TGlzdGVuZXIoaW5zdCwgcmVnaXN0cmF0aW9uTmFtZSk7XG59XG5cbi8qKlxuICogQSBzbWFsbCBzZXQgb2YgcHJvcGFnYXRpb24gcGF0dGVybnMsIGVhY2ggb2Ygd2hpY2ggd2lsbCBhY2NlcHQgYSBzbWFsbCBhbW91bnRcbiAqIG9mIGluZm9ybWF0aW9uLCBhbmQgZ2VuZXJhdGUgYSBzZXQgb2YgXCJkaXNwYXRjaCByZWFkeSBldmVudCBvYmplY3RzXCIgLSB3aGljaFxuICogYXJlIHNldHMgb2YgZXZlbnRzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gYW5ub3RhdGVkIHdpdGggYSBzZXQgb2YgZGlzcGF0Y2hlZFxuICogbGlzdGVuZXIgZnVuY3Rpb25zL2lkcy4gVGhlIEFQSSBpcyBkZXNpZ25lZCB0aGlzIHdheSB0byBkaXNjb3VyYWdlIHRoZXNlXG4gKiBwcm9wYWdhdGlvbiBzdHJhdGVnaWVzIGZyb20gYWN0dWFsbHkgZXhlY3V0aW5nIHRoZSBkaXNwYXRjaGVzLCBzaW5jZSB3ZVxuICogYWx3YXlzIHdhbnQgdG8gY29sbGVjdCB0aGUgZW50aXJlIHNldCBvZiBkaXNwYXRjaGVzIGJlZm9yZSBleGVjdXRpbmcgZXZlbiBhXG4gKiBzaW5nbGUgb25lLlxuICovXG5cbi8qKlxuICogVGFncyBhIGBTeW50aGV0aWNFdmVudGAgd2l0aCBkaXNwYXRjaGVkIGxpc3RlbmVycy4gQ3JlYXRpbmcgdGhpcyBmdW5jdGlvblxuICogaGVyZSwgYWxsb3dzIHVzIHRvIG5vdCBoYXZlIHRvIGJpbmQgb3IgY3JlYXRlIGZ1bmN0aW9ucyBmb3IgZWFjaCBldmVudC5cbiAqIE11dGF0aW5nIHRoZSBldmVudCdzIG1lbWJlcnMgYWxsb3dzIHVzIHRvIG5vdCBoYXZlIHRvIGNyZWF0ZSBhIHdyYXBwaW5nXG4gKiBcImRpc3BhdGNoXCIgb2JqZWN0IHRoYXQgcGFpcnMgdGhlIGV2ZW50IHdpdGggdGhlIGxpc3RlbmVyLlxuICovXG5mdW5jdGlvbiBhY2N1bXVsYXRlRGlyZWN0aW9uYWxEaXNwYXRjaGVzKGluc3QsIHBoYXNlLCBldmVudCkge1xuICB7XG4gICAgIWluc3QgPyB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdEaXNwYXRjaGluZyBpbnN0IG11c3Qgbm90IGJlIG51bGwnKSA6IHZvaWQgMDtcbiAgfVxuICB2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lckF0UGhhc2UoaW5zdCwgZXZlbnQsIHBoYXNlKTtcbiAgaWYgKGxpc3RlbmVyKSB7XG4gICAgZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzID0gYWNjdW11bGF0ZUludG8oZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzLCBsaXN0ZW5lcik7XG4gICAgZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzID0gYWNjdW11bGF0ZUludG8oZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzLCBpbnN0KTtcbiAgfVxufVxuXG4vKipcbiAqIENvbGxlY3QgZGlzcGF0Y2hlcyAobXVzdCBiZSBlbnRpcmVseSBjb2xsZWN0ZWQgYmVmb3JlIGRpc3BhdGNoaW5nIC0gc2VlIHVuaXRcbiAqIHRlc3RzKS4gTGF6aWx5IGFsbG9jYXRlIHRoZSBhcnJheSB0byBjb25zZXJ2ZSBtZW1vcnkuICBXZSBtdXN0IGxvb3AgdGhyb3VnaFxuICogZWFjaCBldmVudCBhbmQgcGVyZm9ybSB0aGUgdHJhdmVyc2FsIGZvciBlYWNoIG9uZS4gV2UgY2Fubm90IHBlcmZvcm0gYVxuICogc2luZ2xlIHRyYXZlcnNhbCBmb3IgdGhlIGVudGlyZSBjb2xsZWN0aW9uIG9mIGV2ZW50cyBiZWNhdXNlIGVhY2ggZXZlbnQgbWF5XG4gKiBoYXZlIGEgZGlmZmVyZW50IHRhcmdldC5cbiAqL1xuZnVuY3Rpb24gYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1NpbmdsZShldmVudCkge1xuICBpZiAoZXZlbnQgJiYgZXZlbnQuZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMpIHtcbiAgICB0cmF2ZXJzZVR3b1BoYXNlKGV2ZW50Ll90YXJnZXRJbnN0LCBhY2N1bXVsYXRlRGlyZWN0aW9uYWxEaXNwYXRjaGVzLCBldmVudCk7XG4gIH1cbn1cblxuLyoqXG4gKiBBY2N1bXVsYXRlcyB3aXRob3V0IHJlZ2FyZCB0byBkaXJlY3Rpb24sIGRvZXMgbm90IGxvb2sgZm9yIHBoYXNlZFxuICogcmVnaXN0cmF0aW9uIG5hbWVzLiBTYW1lIGFzIGBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlc1NpbmdsZWAgYnV0IHdpdGhvdXRcbiAqIHJlcXVpcmluZyB0aGF0IHRoZSBgZGlzcGF0Y2hNYXJrZXJgIGJlIHRoZSBzYW1lIGFzIHRoZSBkaXNwYXRjaGVkIElELlxuICovXG5mdW5jdGlvbiBhY2N1bXVsYXRlRGlzcGF0Y2hlcyhpbnN0LCBpZ25vcmVkRGlyZWN0aW9uLCBldmVudCkge1xuICBpZiAoaW5zdCAmJiBldmVudCAmJiBldmVudC5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lKSB7XG4gICAgdmFyIHJlZ2lzdHJhdGlvbk5hbWUgPSBldmVudC5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lO1xuICAgIHZhciBsaXN0ZW5lciA9IGdldExpc3RlbmVyKGluc3QsIHJlZ2lzdHJhdGlvbk5hbWUpO1xuICAgIGlmIChsaXN0ZW5lcikge1xuICAgICAgZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzID0gYWNjdW11bGF0ZUludG8oZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzLCBsaXN0ZW5lcik7XG4gICAgICBldmVudC5fZGlzcGF0Y2hJbnN0YW5jZXMgPSBhY2N1bXVsYXRlSW50byhldmVudC5fZGlzcGF0Y2hJbnN0YW5jZXMsIGluc3QpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEFjY3VtdWxhdGVzIGRpc3BhdGNoZXMgb24gYW4gYFN5bnRoZXRpY0V2ZW50YCwgYnV0IG9ubHkgZm9yIHRoZVxuICogYGRpc3BhdGNoTWFya2VyYC5cbiAqIEBwYXJhbSB7U3ludGhldGljRXZlbnR9IGV2ZW50XG4gKi9cbmZ1bmN0aW9uIGFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzU2luZ2xlKGV2ZW50KSB7XG4gIGlmIChldmVudCAmJiBldmVudC5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lKSB7XG4gICAgYWNjdW11bGF0ZURpc3BhdGNoZXMoZXZlbnQuX3RhcmdldEluc3QsIG51bGwsIGV2ZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzKGV2ZW50cykge1xuICBmb3JFYWNoQWNjdW11bGF0ZWQoZXZlbnRzLCBhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzU2luZ2xlKTtcbn1cblxuXG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVFbnRlckxlYXZlRGlzcGF0Y2hlcyhsZWF2ZSwgZW50ZXIsIGZyb20sIHRvKSB7XG4gIHRyYXZlcnNlRW50ZXJMZWF2ZShmcm9tLCB0bywgYWNjdW11bGF0ZURpc3BhdGNoZXMsIGxlYXZlLCBlbnRlcik7XG59XG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzKGV2ZW50cykge1xuICBmb3JFYWNoQWNjdW11bGF0ZWQoZXZlbnRzLCBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlc1NpbmdsZSk7XG59XG5cbnZhciBjYW5Vc2VET00gPSAhISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG4vLyBEbyBub3QgdXNlcyB0aGUgYmVsb3cgdHdvIG1ldGhvZHMgZGlyZWN0bHkhXG4vLyBJbnN0ZWFkIHVzZSBjb25zdGFudHMgZXhwb3J0ZWQgZnJvbSBET01Ub3BMZXZlbEV2ZW50VHlwZXMgaW4gUmVhY3RET00uXG4vLyAoSXQgaXMgdGhlIG9ubHkgbW9kdWxlIHRoYXQgaXMgYWxsb3dlZCB0byBhY2Nlc3MgdGhlc2UgbWV0aG9kcy4pXG5cbmZ1bmN0aW9uIHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSh0b3BMZXZlbFR5cGUpIHtcbiAgcmV0dXJuIHRvcExldmVsVHlwZTtcbn1cblxuZnVuY3Rpb24gdW5zYWZlQ2FzdERPTVRvcExldmVsVHlwZVRvU3RyaW5nKHRvcExldmVsVHlwZSkge1xuICByZXR1cm4gdG9wTGV2ZWxUeXBlO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgbWFwcGluZyBvZiBzdGFuZGFyZCB2ZW5kb3IgcHJlZml4ZXMgdXNpbmcgdGhlIGRlZmluZWQgc3R5bGUgcHJvcGVydHkgYW5kIGV2ZW50IG5hbWUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0eWxlUHJvcFxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gbWFrZVByZWZpeE1hcChzdHlsZVByb3AsIGV2ZW50TmFtZSkge1xuICB2YXIgcHJlZml4ZXMgPSB7fTtcblxuICBwcmVmaXhlc1tzdHlsZVByb3AudG9Mb3dlckNhc2UoKV0gPSBldmVudE5hbWUudG9Mb3dlckNhc2UoKTtcbiAgcHJlZml4ZXNbJ1dlYmtpdCcgKyBzdHlsZVByb3BdID0gJ3dlYmtpdCcgKyBldmVudE5hbWU7XG4gIHByZWZpeGVzWydNb3onICsgc3R5bGVQcm9wXSA9ICdtb3onICsgZXZlbnROYW1lO1xuXG4gIHJldHVybiBwcmVmaXhlcztcbn1cblxuLyoqXG4gKiBBIGxpc3Qgb2YgZXZlbnQgbmFtZXMgdG8gYSBjb25maWd1cmFibGUgbGlzdCBvZiB2ZW5kb3IgcHJlZml4ZXMuXG4gKi9cbnZhciB2ZW5kb3JQcmVmaXhlcyA9IHtcbiAgYW5pbWF0aW9uZW5kOiBtYWtlUHJlZml4TWFwKCdBbmltYXRpb24nLCAnQW5pbWF0aW9uRW5kJyksXG4gIGFuaW1hdGlvbml0ZXJhdGlvbjogbWFrZVByZWZpeE1hcCgnQW5pbWF0aW9uJywgJ0FuaW1hdGlvbkl0ZXJhdGlvbicpLFxuICBhbmltYXRpb25zdGFydDogbWFrZVByZWZpeE1hcCgnQW5pbWF0aW9uJywgJ0FuaW1hdGlvblN0YXJ0JyksXG4gIHRyYW5zaXRpb25lbmQ6IG1ha2VQcmVmaXhNYXAoJ1RyYW5zaXRpb24nLCAnVHJhbnNpdGlvbkVuZCcpXG59O1xuXG4vKipcbiAqIEV2ZW50IG5hbWVzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gZGV0ZWN0ZWQgYW5kIHByZWZpeGVkIChpZiBhcHBsaWNhYmxlKS5cbiAqL1xudmFyIHByZWZpeGVkRXZlbnROYW1lcyA9IHt9O1xuXG4vKipcbiAqIEVsZW1lbnQgdG8gY2hlY2sgZm9yIHByZWZpeGVzIG9uLlxuICovXG52YXIgc3R5bGUgPSB7fTtcblxuLyoqXG4gKiBCb290c3RyYXAgaWYgYSBET00gZXhpc3RzLlxuICovXG5pZiAoY2FuVXNlRE9NKSB7XG4gIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jykuc3R5bGU7XG5cbiAgLy8gT24gc29tZSBwbGF0Zm9ybXMsIGluIHBhcnRpY3VsYXIgc29tZSByZWxlYXNlcyBvZiBBbmRyb2lkIDQueCxcbiAgLy8gdGhlIHVuLXByZWZpeGVkIFwiYW5pbWF0aW9uXCIgYW5kIFwidHJhbnNpdGlvblwiIHByb3BlcnRpZXMgYXJlIGRlZmluZWQgb24gdGhlXG4gIC8vIHN0eWxlIG9iamVjdCBidXQgdGhlIGV2ZW50cyB0aGF0IGZpcmUgd2lsbCBzdGlsbCBiZSBwcmVmaXhlZCwgc28gd2UgbmVlZFxuICAvLyB0byBjaGVjayBpZiB0aGUgdW4tcHJlZml4ZWQgZXZlbnRzIGFyZSB1c2FibGUsIGFuZCBpZiBub3QgcmVtb3ZlIHRoZW0gZnJvbSB0aGUgbWFwLlxuICBpZiAoISgnQW5pbWF0aW9uRXZlbnQnIGluIHdpbmRvdykpIHtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uZW5kLmFuaW1hdGlvbjtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uaXRlcmF0aW9uLmFuaW1hdGlvbjtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uc3RhcnQuYW5pbWF0aW9uO1xuICB9XG5cbiAgLy8gU2FtZSBhcyBhYm92ZVxuICBpZiAoISgnVHJhbnNpdGlvbkV2ZW50JyBpbiB3aW5kb3cpKSB7XG4gICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLnRyYW5zaXRpb25lbmQudHJhbnNpdGlvbjtcbiAgfVxufVxuXG4vKipcbiAqIEF0dGVtcHRzIHRvIGRldGVybWluZSB0aGUgY29ycmVjdCB2ZW5kb3IgcHJlZml4ZWQgZXZlbnQgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZShldmVudE5hbWUpIHtcbiAgaWYgKHByZWZpeGVkRXZlbnROYW1lc1tldmVudE5hbWVdKSB7XG4gICAgcmV0dXJuIHByZWZpeGVkRXZlbnROYW1lc1tldmVudE5hbWVdO1xuICB9IGVsc2UgaWYgKCF2ZW5kb3JQcmVmaXhlc1tldmVudE5hbWVdKSB7XG4gICAgcmV0dXJuIGV2ZW50TmFtZTtcbiAgfVxuXG4gIHZhciBwcmVmaXhNYXAgPSB2ZW5kb3JQcmVmaXhlc1tldmVudE5hbWVdO1xuXG4gIGZvciAodmFyIHN0eWxlUHJvcCBpbiBwcmVmaXhNYXApIHtcbiAgICBpZiAocHJlZml4TWFwLmhhc093blByb3BlcnR5KHN0eWxlUHJvcCkgJiYgc3R5bGVQcm9wIGluIHN0eWxlKSB7XG4gICAgICByZXR1cm4gcHJlZml4ZWRFdmVudE5hbWVzW2V2ZW50TmFtZV0gPSBwcmVmaXhNYXBbc3R5bGVQcm9wXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXZlbnROYW1lO1xufVxuXG4vKipcbiAqIFRvIGlkZW50aWZ5IHRvcCBsZXZlbCBldmVudHMgaW4gUmVhY3RET00sIHdlIHVzZSBjb25zdGFudHMgZGVmaW5lZCBieSB0aGlzXG4gKiBtb2R1bGUuIFRoaXMgaXMgdGhlIG9ubHkgbW9kdWxlIHRoYXQgdXNlcyB0aGUgdW5zYWZlKiBtZXRob2RzIHRvIGV4cHJlc3NcbiAqIHRoYXQgdGhlIGNvbnN0YW50cyBhY3R1YWxseSBjb3JyZXNwb25kIHRvIHRoZSBicm93c2VyIGV2ZW50IG5hbWVzLiBUaGlzIGxldHNcbiAqIHVzIHNhdmUgc29tZSBidW5kbGUgc2l6ZSBieSBhdm9pZGluZyBhIHRvcCBsZXZlbCB0eXBlIC0+IGV2ZW50IG5hbWUgbWFwLlxuICogVGhlIHJlc3Qgb2YgUmVhY3RET00gY29kZSBzaG91bGQgaW1wb3J0IHRvcCBsZXZlbCB0eXBlcyBmcm9tIHRoaXMgZmlsZS5cbiAqL1xudmFyIFRPUF9BQk9SVCA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgnYWJvcnQnKTtcbnZhciBUT1BfQU5JTUFUSU9OX0VORCA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZShnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSgnYW5pbWF0aW9uZW5kJykpO1xudmFyIFRPUF9BTklNQVRJT05fSVRFUkFUSU9OID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKCdhbmltYXRpb25pdGVyYXRpb24nKSk7XG52YXIgVE9QX0FOSU1BVElPTl9TVEFSVCA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZShnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSgnYW5pbWF0aW9uc3RhcnQnKSk7XG52YXIgVE9QX0JMVVIgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ2JsdXInKTtcbnZhciBUT1BfQ0FOX1BMQVkgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ2NhbnBsYXknKTtcbnZhciBUT1BfQ0FOX1BMQVlfVEhST1VHSCA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgnY2FucGxheXRocm91Z2gnKTtcbnZhciBUT1BfQ0FOQ0VMID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdjYW5jZWwnKTtcbnZhciBUT1BfQ0hBTkdFID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdjaGFuZ2UnKTtcbnZhciBUT1BfQ0xJQ0sgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ2NsaWNrJyk7XG52YXIgVE9QX0NMT1NFID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdjbG9zZScpO1xudmFyIFRPUF9DT01QT1NJVElPTl9FTkQgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ2NvbXBvc2l0aW9uZW5kJyk7XG52YXIgVE9QX0NPTVBPU0lUSU9OX1NUQVJUID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdjb21wb3NpdGlvbnN0YXJ0Jyk7XG52YXIgVE9QX0NPTVBPU0lUSU9OX1VQREFURSA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgnY29tcG9zaXRpb251cGRhdGUnKTtcbnZhciBUT1BfQ09OVEVYVF9NRU5VID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdjb250ZXh0bWVudScpO1xudmFyIFRPUF9DT1BZID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdjb3B5Jyk7XG52YXIgVE9QX0NVVCA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgnY3V0Jyk7XG52YXIgVE9QX0RPVUJMRV9DTElDSyA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgnZGJsY2xpY2snKTtcbnZhciBUT1BfQVVYX0NMSUNLID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdhdXhjbGljaycpO1xudmFyIFRPUF9EUkFHID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdkcmFnJyk7XG52YXIgVE9QX0RSQUdfRU5EID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdkcmFnZW5kJyk7XG52YXIgVE9QX0RSQUdfRU5URVIgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ2RyYWdlbnRlcicpO1xudmFyIFRPUF9EUkFHX0VYSVQgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ2RyYWdleGl0Jyk7XG52YXIgVE9QX0RSQUdfTEVBVkUgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ2RyYWdsZWF2ZScpO1xudmFyIFRPUF9EUkFHX09WRVIgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ2RyYWdvdmVyJyk7XG52YXIgVE9QX0RSQUdfU1RBUlQgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ2RyYWdzdGFydCcpO1xudmFyIFRPUF9EUk9QID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdkcm9wJyk7XG52YXIgVE9QX0RVUkFUSU9OX0NIQU5HRSA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgnZHVyYXRpb25jaGFuZ2UnKTtcbnZhciBUT1BfRU1QVElFRCA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgnZW1wdGllZCcpO1xudmFyIFRPUF9FTkNSWVBURUQgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ2VuY3J5cHRlZCcpO1xudmFyIFRPUF9FTkRFRCA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgnZW5kZWQnKTtcbnZhciBUT1BfRVJST1IgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ2Vycm9yJyk7XG52YXIgVE9QX0ZPQ1VTID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdmb2N1cycpO1xudmFyIFRPUF9HT1RfUE9JTlRFUl9DQVBUVVJFID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdnb3Rwb2ludGVyY2FwdHVyZScpO1xudmFyIFRPUF9JTlBVVCA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgnaW5wdXQnKTtcbnZhciBUT1BfSU5WQUxJRCA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgnaW52YWxpZCcpO1xudmFyIFRPUF9LRVlfRE9XTiA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgna2V5ZG93bicpO1xudmFyIFRPUF9LRVlfUFJFU1MgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ2tleXByZXNzJyk7XG52YXIgVE9QX0tFWV9VUCA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgna2V5dXAnKTtcbnZhciBUT1BfTE9BRCA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgnbG9hZCcpO1xudmFyIFRPUF9MT0FEX1NUQVJUID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdsb2Fkc3RhcnQnKTtcbnZhciBUT1BfTE9BREVEX0RBVEEgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ2xvYWRlZGRhdGEnKTtcbnZhciBUT1BfTE9BREVEX01FVEFEQVRBID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdsb2FkZWRtZXRhZGF0YScpO1xudmFyIFRPUF9MT1NUX1BPSU5URVJfQ0FQVFVSRSA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgnbG9zdHBvaW50ZXJjYXB0dXJlJyk7XG52YXIgVE9QX01PVVNFX0RPV04gPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ21vdXNlZG93bicpO1xudmFyIFRPUF9NT1VTRV9NT1ZFID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdtb3VzZW1vdmUnKTtcbnZhciBUT1BfTU9VU0VfT1VUID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdtb3VzZW91dCcpO1xudmFyIFRPUF9NT1VTRV9PVkVSID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdtb3VzZW92ZXInKTtcbnZhciBUT1BfTU9VU0VfVVAgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ21vdXNldXAnKTtcbnZhciBUT1BfUEFTVEUgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ3Bhc3RlJyk7XG52YXIgVE9QX1BBVVNFID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdwYXVzZScpO1xudmFyIFRPUF9QTEFZID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdwbGF5Jyk7XG52YXIgVE9QX1BMQVlJTkcgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ3BsYXlpbmcnKTtcbnZhciBUT1BfUE9JTlRFUl9DQU5DRUwgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ3BvaW50ZXJjYW5jZWwnKTtcbnZhciBUT1BfUE9JTlRFUl9ET1dOID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdwb2ludGVyZG93bicpO1xuXG5cbnZhciBUT1BfUE9JTlRFUl9NT1ZFID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdwb2ludGVybW92ZScpO1xudmFyIFRPUF9QT0lOVEVSX09VVCA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgncG9pbnRlcm91dCcpO1xudmFyIFRPUF9QT0lOVEVSX09WRVIgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ3BvaW50ZXJvdmVyJyk7XG52YXIgVE9QX1BPSU5URVJfVVAgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ3BvaW50ZXJ1cCcpO1xudmFyIFRPUF9QUk9HUkVTUyA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgncHJvZ3Jlc3MnKTtcbnZhciBUT1BfUkFURV9DSEFOR0UgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ3JhdGVjaGFuZ2UnKTtcbnZhciBUT1BfUkVTRVQgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ3Jlc2V0Jyk7XG52YXIgVE9QX1NDUk9MTCA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgnc2Nyb2xsJyk7XG52YXIgVE9QX1NFRUtFRCA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgnc2Vla2VkJyk7XG52YXIgVE9QX1NFRUtJTkcgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ3NlZWtpbmcnKTtcbnZhciBUT1BfU0VMRUNUSU9OX0NIQU5HRSA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgnc2VsZWN0aW9uY2hhbmdlJyk7XG52YXIgVE9QX1NUQUxMRUQgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ3N0YWxsZWQnKTtcbnZhciBUT1BfU1VCTUlUID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdzdWJtaXQnKTtcbnZhciBUT1BfU1VTUEVORCA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgnc3VzcGVuZCcpO1xudmFyIFRPUF9URVhUX0lOUFVUID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCd0ZXh0SW5wdXQnKTtcbnZhciBUT1BfVElNRV9VUERBVEUgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ3RpbWV1cGRhdGUnKTtcbnZhciBUT1BfVE9HR0xFID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCd0b2dnbGUnKTtcbnZhciBUT1BfVE9VQ0hfQ0FOQ0VMID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCd0b3VjaGNhbmNlbCcpO1xudmFyIFRPUF9UT1VDSF9FTkQgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ3RvdWNoZW5kJyk7XG52YXIgVE9QX1RPVUNIX01PVkUgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ3RvdWNobW92ZScpO1xudmFyIFRPUF9UT1VDSF9TVEFSVCA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgndG91Y2hzdGFydCcpO1xudmFyIFRPUF9UUkFOU0lUSU9OX0VORCA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZShnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSgndHJhbnNpdGlvbmVuZCcpKTtcbnZhciBUT1BfVk9MVU1FX0NIQU5HRSA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgndm9sdW1lY2hhbmdlJyk7XG52YXIgVE9QX1dBSVRJTkcgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ3dhaXRpbmcnKTtcbnZhciBUT1BfV0hFRUwgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ3doZWVsJyk7XG5cbi8vIExpc3Qgb2YgZXZlbnRzIHRoYXQgbmVlZCB0byBiZSBpbmRpdmlkdWFsbHkgYXR0YWNoZWQgdG8gbWVkaWEgZWxlbWVudHMuXG4vLyBOb3RlIHRoYXQgZXZlbnRzIGluIHRoaXMgbGlzdCB3aWxsICpub3QqIGJlIGxpc3RlbmVkIHRvIGF0IHRoZSB0b3AgbGV2ZWxcbi8vIHVubGVzcyB0aGV5J3JlIGV4cGxpY2l0bHkgd2hpdGVsaXN0ZWQgaW4gYFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5saXN0ZW5Ub2AuXG52YXIgbWVkaWFFdmVudFR5cGVzID0gW1RPUF9BQk9SVCwgVE9QX0NBTl9QTEFZLCBUT1BfQ0FOX1BMQVlfVEhST1VHSCwgVE9QX0RVUkFUSU9OX0NIQU5HRSwgVE9QX0VNUFRJRUQsIFRPUF9FTkNSWVBURUQsIFRPUF9FTkRFRCwgVE9QX0VSUk9SLCBUT1BfTE9BREVEX0RBVEEsIFRPUF9MT0FERURfTUVUQURBVEEsIFRPUF9MT0FEX1NUQVJULCBUT1BfUEFVU0UsIFRPUF9QTEFZLCBUT1BfUExBWUlORywgVE9QX1BST0dSRVNTLCBUT1BfUkFURV9DSEFOR0UsIFRPUF9TRUVLRUQsIFRPUF9TRUVLSU5HLCBUT1BfU1RBTExFRCwgVE9QX1NVU1BFTkQsIFRPUF9USU1FX1VQREFURSwgVE9QX1ZPTFVNRV9DSEFOR0UsIFRPUF9XQUlUSU5HXTtcblxuZnVuY3Rpb24gZ2V0UmF3RXZlbnROYW1lKHRvcExldmVsVHlwZSkge1xuICByZXR1cm4gdW5zYWZlQ2FzdERPTVRvcExldmVsVHlwZVRvU3RyaW5nKHRvcExldmVsVHlwZSk7XG59XG5cbi8qKlxuICogVGhlc2UgdmFyaWFibGVzIHN0b3JlIGluZm9ybWF0aW9uIGFib3V0IHRleHQgY29udGVudCBvZiBhIHRhcmdldCBub2RlLFxuICogYWxsb3dpbmcgY29tcGFyaXNvbiBvZiBjb250ZW50IGJlZm9yZSBhbmQgYWZ0ZXIgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBJZGVudGlmeSB0aGUgbm9kZSB3aGVyZSBzZWxlY3Rpb24gY3VycmVudGx5IGJlZ2lucywgdGhlbiBvYnNlcnZlXG4gKiBib3RoIGl0cyB0ZXh0IGNvbnRlbnQgYW5kIGl0cyBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBET00uIFNpbmNlIHRoZVxuICogYnJvd3NlciBtYXkgbmF0aXZlbHkgcmVwbGFjZSB0aGUgdGFyZ2V0IG5vZGUgZHVyaW5nIGNvbXBvc2l0aW9uLCB3ZSBjYW5cbiAqIHVzZSBpdHMgcG9zaXRpb24gdG8gZmluZCBpdHMgcmVwbGFjZW1lbnQuXG4gKlxuICpcbiAqL1xuXG52YXIgcm9vdCA9IG51bGw7XG52YXIgc3RhcnRUZXh0ID0gbnVsbDtcbnZhciBmYWxsYmFja1RleHQgPSBudWxsO1xuXG5mdW5jdGlvbiBpbml0aWFsaXplKG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHJvb3QgPSBuYXRpdmVFdmVudFRhcmdldDtcbiAgc3RhcnRUZXh0ID0gZ2V0VGV4dCgpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmVzZXQoKSB7XG4gIHJvb3QgPSBudWxsO1xuICBzdGFydFRleHQgPSBudWxsO1xuICBmYWxsYmFja1RleHQgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXREYXRhKCkge1xuICBpZiAoZmFsbGJhY2tUZXh0KSB7XG4gICAgcmV0dXJuIGZhbGxiYWNrVGV4dDtcbiAgfVxuXG4gIHZhciBzdGFydCA9IHZvaWQgMDtcbiAgdmFyIHN0YXJ0VmFsdWUgPSBzdGFydFRleHQ7XG4gIHZhciBzdGFydExlbmd0aCA9IHN0YXJ0VmFsdWUubGVuZ3RoO1xuICB2YXIgZW5kID0gdm9pZCAwO1xuICB2YXIgZW5kVmFsdWUgPSBnZXRUZXh0KCk7XG4gIHZhciBlbmRMZW5ndGggPSBlbmRWYWx1ZS5sZW5ndGg7XG5cbiAgZm9yIChzdGFydCA9IDA7IHN0YXJ0IDwgc3RhcnRMZW5ndGg7IHN0YXJ0KyspIHtcbiAgICBpZiAoc3RhcnRWYWx1ZVtzdGFydF0gIT09IGVuZFZhbHVlW3N0YXJ0XSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgdmFyIG1pbkVuZCA9IHN0YXJ0TGVuZ3RoIC0gc3RhcnQ7XG4gIGZvciAoZW5kID0gMTsgZW5kIDw9IG1pbkVuZDsgZW5kKyspIHtcbiAgICBpZiAoc3RhcnRWYWx1ZVtzdGFydExlbmd0aCAtIGVuZF0gIT09IGVuZFZhbHVlW2VuZExlbmd0aCAtIGVuZF0pIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzbGljZVRhaWwgPSBlbmQgPiAxID8gMSAtIGVuZCA6IHVuZGVmaW5lZDtcbiAgZmFsbGJhY2tUZXh0ID0gZW5kVmFsdWUuc2xpY2Uoc3RhcnQsIHNsaWNlVGFpbCk7XG4gIHJldHVybiBmYWxsYmFja1RleHQ7XG59XG5cbmZ1bmN0aW9uIGdldFRleHQoKSB7XG4gIGlmICgndmFsdWUnIGluIHJvb3QpIHtcbiAgICByZXR1cm4gcm9vdC52YWx1ZTtcbiAgfVxuICByZXR1cm4gcm9vdC50ZXh0Q29udGVudDtcbn1cblxuLyogZXNsaW50IHZhbGlkLXR5cGVvZjogMCAqL1xuXG52YXIgRVZFTlRfUE9PTF9TSVpFID0gMTA7XG5cbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cbnZhciBFdmVudEludGVyZmFjZSA9IHtcbiAgdHlwZTogbnVsbCxcbiAgdGFyZ2V0OiBudWxsLFxuICAvLyBjdXJyZW50VGFyZ2V0IGlzIHNldCB3aGVuIGRpc3BhdGNoaW5nOyBubyB1c2UgaW4gY29weWluZyBpdCBoZXJlXG4gIGN1cnJlbnRUYXJnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcbiAgZXZlbnRQaGFzZTogbnVsbCxcbiAgYnViYmxlczogbnVsbCxcbiAgY2FuY2VsYWJsZTogbnVsbCxcbiAgdGltZVN0YW1wOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gZXZlbnQudGltZVN0YW1wIHx8IERhdGUubm93KCk7XG4gIH0sXG4gIGRlZmF1bHRQcmV2ZW50ZWQ6IG51bGwsXG4gIGlzVHJ1c3RlZDogbnVsbFxufTtcblxuZnVuY3Rpb24gZnVuY3Rpb25UaGF0UmV0dXJuc1RydWUoKSB7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBmdW5jdGlvblRoYXRSZXR1cm5zRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBTeW50aGV0aWMgZXZlbnRzIGFyZSBkaXNwYXRjaGVkIGJ5IGV2ZW50IHBsdWdpbnMsIHR5cGljYWxseSBpbiByZXNwb25zZSB0byBhXG4gKiB0b3AtbGV2ZWwgZXZlbnQgZGVsZWdhdGlvbiBoYW5kbGVyLlxuICpcbiAqIFRoZXNlIHN5c3RlbXMgc2hvdWxkIGdlbmVyYWxseSB1c2UgcG9vbGluZyB0byByZWR1Y2UgdGhlIGZyZXF1ZW5jeSBvZiBnYXJiYWdlXG4gKiBjb2xsZWN0aW9uLiBUaGUgc3lzdGVtIHNob3VsZCBjaGVjayBgaXNQZXJzaXN0ZW50YCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVcbiAqIGV2ZW50IHNob3VsZCBiZSByZWxlYXNlZCBpbnRvIHRoZSBwb29sIGFmdGVyIGJlaW5nIGRpc3BhdGNoZWQuIFVzZXJzIHRoYXRcbiAqIG5lZWQgYSBwZXJzaXN0ZWQgZXZlbnQgc2hvdWxkIGludm9rZSBgcGVyc2lzdGAuXG4gKlxuICogU3ludGhldGljIGV2ZW50cyAoYW5kIHN1YmNsYXNzZXMpIGltcGxlbWVudCB0aGUgRE9NIExldmVsIDMgRXZlbnRzIEFQSSBieVxuICogbm9ybWFsaXppbmcgYnJvd3NlciBxdWlya3MuIFN1YmNsYXNzZXMgZG8gbm90IG5lY2Vzc2FyaWx5IGhhdmUgdG8gaW1wbGVtZW50IGFcbiAqIERPTSBpbnRlcmZhY2U7IGN1c3RvbSBhcHBsaWNhdGlvbi1zcGVjaWZpYyBldmVudHMgY2FuIGFsc28gc3ViY2xhc3MgdGhpcy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25maWcgQ29uZmlndXJhdGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuXG4gKiBAcGFyYW0geyp9IHRhcmdldEluc3QgTWFya2VyIGlkZW50aWZ5aW5nIHRoZSBldmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAcGFyYW0ge0RPTUV2ZW50VGFyZ2V0fSBuYXRpdmVFdmVudFRhcmdldCBUYXJnZXQgbm9kZS5cbiAqL1xuZnVuY3Rpb24gU3ludGhldGljRXZlbnQoZGlzcGF0Y2hDb25maWcsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICB7XG4gICAgLy8gdGhlc2UgaGF2ZSBhIGdldHRlci9zZXR0ZXIgZm9yIHdhcm5pbmdzXG4gICAgZGVsZXRlIHRoaXMubmF0aXZlRXZlbnQ7XG4gICAgZGVsZXRlIHRoaXMucHJldmVudERlZmF1bHQ7XG4gICAgZGVsZXRlIHRoaXMuc3RvcFByb3BhZ2F0aW9uO1xuICAgIGRlbGV0ZSB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZDtcbiAgICBkZWxldGUgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZDtcbiAgfVxuXG4gIHRoaXMuZGlzcGF0Y2hDb25maWcgPSBkaXNwYXRjaENvbmZpZztcbiAgdGhpcy5fdGFyZ2V0SW5zdCA9IHRhcmdldEluc3Q7XG4gIHRoaXMubmF0aXZlRXZlbnQgPSBuYXRpdmVFdmVudDtcblxuICB2YXIgSW50ZXJmYWNlID0gdGhpcy5jb25zdHJ1Y3Rvci5JbnRlcmZhY2U7XG4gIGZvciAodmFyIHByb3BOYW1lIGluIEludGVyZmFjZSkge1xuICAgIGlmICghSW50ZXJmYWNlLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHtcbiAgICAgIGRlbGV0ZSB0aGlzW3Byb3BOYW1lXTsgLy8gdGhpcyBoYXMgYSBnZXR0ZXIvc2V0dGVyIGZvciB3YXJuaW5nc1xuICAgIH1cbiAgICB2YXIgbm9ybWFsaXplID0gSW50ZXJmYWNlW3Byb3BOYW1lXTtcbiAgICBpZiAobm9ybWFsaXplKSB7XG4gICAgICB0aGlzW3Byb3BOYW1lXSA9IG5vcm1hbGl6ZShuYXRpdmVFdmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcm9wTmFtZSA9PT0gJ3RhcmdldCcpIHtcbiAgICAgICAgdGhpcy50YXJnZXQgPSBuYXRpdmVFdmVudFRhcmdldDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNbcHJvcE5hbWVdID0gbmF0aXZlRXZlbnRbcHJvcE5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBkZWZhdWx0UHJldmVudGVkID0gbmF0aXZlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCAhPSBudWxsID8gbmF0aXZlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCA6IG5hdGl2ZUV2ZW50LnJldHVyblZhbHVlID09PSBmYWxzZTtcbiAgaWYgKGRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlO1xuICB9XG4gIHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zRmFsc2U7XG4gIHJldHVybiB0aGlzO1xufVxuXG5fYXNzaWduKFN5bnRoZXRpY0V2ZW50LnByb3RvdHlwZSwge1xuICBwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XG4gICAgdmFyIGV2ZW50ID0gdGhpcy5uYXRpdmVFdmVudDtcbiAgICBpZiAoIWV2ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LnByZXZlbnREZWZhdWx0KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV2ZW50LnJldHVyblZhbHVlICE9PSAndW5rbm93bicpIHtcbiAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gZnVuY3Rpb25UaGF0UmV0dXJuc1RydWU7XG4gIH0sXG5cbiAgc3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV2ZW50ID0gdGhpcy5uYXRpdmVFdmVudDtcbiAgICBpZiAoIWV2ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbikge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXZlbnQuY2FuY2VsQnViYmxlICE9PSAndW5rbm93bicpIHtcbiAgICAgIC8vIFRoZSBDaGFuZ2VFdmVudFBsdWdpbiByZWdpc3RlcnMgYSBcInByb3BlcnR5Y2hhbmdlXCIgZXZlbnQgZm9yXG4gICAgICAvLyBJRS4gVGhpcyBldmVudCBkb2VzIG5vdCBzdXBwb3J0IGJ1YmJsaW5nIG9yIGNhbmNlbGxpbmcsIGFuZFxuICAgICAgLy8gYW55IHJlZmVyZW5jZXMgdG8gY2FuY2VsQnViYmxlIHRocm93IFwiTWVtYmVyIG5vdCBmb3VuZFwiLiAgQVxuICAgICAgLy8gdHlwZW9mIGNoZWNrIG9mIFwidW5rbm93blwiIGNpcmN1bXZlbnRzIHRoaXMgaXNzdWUgKGFuZCBpcyBhbHNvXG4gICAgICAvLyBJRSBzcGVjaWZpYykuXG4gICAgICBldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZTtcbiAgfSxcblxuICAvKipcbiAgICogV2UgcmVsZWFzZSBhbGwgZGlzcGF0Y2hlZCBgU3ludGhldGljRXZlbnRgcyBhZnRlciBlYWNoIGV2ZW50IGxvb3AsIGFkZGluZ1xuICAgKiB0aGVtIGJhY2sgaW50byB0aGUgcG9vbC4gVGhpcyBhbGxvd3MgYSB3YXkgdG8gaG9sZCBvbnRvIGEgcmVmZXJlbmNlIHRoYXRcbiAgICogd29uJ3QgYmUgYWRkZWQgYmFjayBpbnRvIHRoZSBwb29sLlxuICAgKi9cbiAgcGVyc2lzdDogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuaXNQZXJzaXN0ZW50ID0gZnVuY3Rpb25UaGF0UmV0dXJuc1RydWU7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGlzIGV2ZW50IHNob3VsZCBiZSByZWxlYXNlZCBiYWNrIGludG8gdGhlIHBvb2wuXG4gICAqXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhpcyBzaG91bGQgbm90IGJlIHJlbGVhc2VkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBpc1BlcnNpc3RlbnQ6IGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZSxcblxuICAvKipcbiAgICogYFBvb2xlZENsYXNzYCBsb29rcyBmb3IgYGRlc3RydWN0b3JgIG9uIGVhY2ggaW5zdGFuY2UgaXQgcmVsZWFzZXMuXG4gICAqL1xuICBkZXN0cnVjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIEludGVyZmFjZSA9IHRoaXMuY29uc3RydWN0b3IuSW50ZXJmYWNlO1xuICAgIGZvciAodmFyIHByb3BOYW1lIGluIEludGVyZmFjZSkge1xuICAgICAge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcE5hbWUsIGdldFBvb2xlZFdhcm5pbmdQcm9wZXJ0eURlZmluaXRpb24ocHJvcE5hbWUsIEludGVyZmFjZVtwcm9wTmFtZV0pKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5kaXNwYXRjaENvbmZpZyA9IG51bGw7XG4gICAgdGhpcy5fdGFyZ2V0SW5zdCA9IG51bGw7XG4gICAgdGhpcy5uYXRpdmVFdmVudCA9IG51bGw7XG4gICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zRmFsc2U7XG4gICAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZTtcbiAgICB0aGlzLl9kaXNwYXRjaExpc3RlbmVycyA9IG51bGw7XG4gICAgdGhpcy5fZGlzcGF0Y2hJbnN0YW5jZXMgPSBudWxsO1xuICAgIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnbmF0aXZlRXZlbnQnLCBnZXRQb29sZWRXYXJuaW5nUHJvcGVydHlEZWZpbml0aW9uKCduYXRpdmVFdmVudCcsIG51bGwpKTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnaXNEZWZhdWx0UHJldmVudGVkJywgZ2V0UG9vbGVkV2FybmluZ1Byb3BlcnR5RGVmaW5pdGlvbignaXNEZWZhdWx0UHJldmVudGVkJywgZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlKSk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2lzUHJvcGFnYXRpb25TdG9wcGVkJywgZ2V0UG9vbGVkV2FybmluZ1Byb3BlcnR5RGVmaW5pdGlvbignaXNQcm9wYWdhdGlvblN0b3BwZWQnLCBmdW5jdGlvblRoYXRSZXR1cm5zRmFsc2UpKTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAncHJldmVudERlZmF1bHQnLCBnZXRQb29sZWRXYXJuaW5nUHJvcGVydHlEZWZpbml0aW9uKCdwcmV2ZW50RGVmYXVsdCcsIGZ1bmN0aW9uICgpIHt9KSk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3N0b3BQcm9wYWdhdGlvbicsIGdldFBvb2xlZFdhcm5pbmdQcm9wZXJ0eURlZmluaXRpb24oJ3N0b3BQcm9wYWdhdGlvbicsIGZ1bmN0aW9uICgpIHt9KSk7XG4gICAgfVxuICB9XG59KTtcblxuU3ludGhldGljRXZlbnQuSW50ZXJmYWNlID0gRXZlbnRJbnRlcmZhY2U7XG5cbi8qKlxuICogSGVscGVyIHRvIHJlZHVjZSBib2lsZXJwbGF0ZSB3aGVuIGNyZWF0aW5nIHN1YmNsYXNzZXMuXG4gKi9cblN5bnRoZXRpY0V2ZW50LmV4dGVuZCA9IGZ1bmN0aW9uIChJbnRlcmZhY2UpIHtcbiAgdmFyIFN1cGVyID0gdGhpcztcblxuICB2YXIgRSA9IGZ1bmN0aW9uICgpIHt9O1xuICBFLnByb3RvdHlwZSA9IFN1cGVyLnByb3RvdHlwZTtcbiAgdmFyIHByb3RvdHlwZSA9IG5ldyBFKCk7XG5cbiAgZnVuY3Rpb24gQ2xhc3MoKSB7XG4gICAgcmV0dXJuIFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cbiAgX2Fzc2lnbihwcm90b3R5cGUsIENsYXNzLnByb3RvdHlwZSk7XG4gIENsYXNzLnByb3RvdHlwZSA9IHByb3RvdHlwZTtcbiAgQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2xhc3M7XG5cbiAgQ2xhc3MuSW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgU3VwZXIuSW50ZXJmYWNlLCBJbnRlcmZhY2UpO1xuICBDbGFzcy5leHRlbmQgPSBTdXBlci5leHRlbmQ7XG4gIGFkZEV2ZW50UG9vbGluZ1RvKENsYXNzKTtcblxuICByZXR1cm4gQ2xhc3M7XG59O1xuXG5hZGRFdmVudFBvb2xpbmdUbyhTeW50aGV0aWNFdmVudCk7XG5cbi8qKlxuICogSGVscGVyIHRvIG51bGxpZnkgc3ludGhldGljRXZlbnQgaW5zdGFuY2UgcHJvcGVydGllcyB3aGVuIGRlc3RydWN0aW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHByb3BOYW1lXG4gKiBAcGFyYW0gez9vYmplY3R9IGdldFZhbFxuICogQHJldHVybiB7b2JqZWN0fSBkZWZpbmVQcm9wZXJ0eSBvYmplY3RcbiAqL1xuZnVuY3Rpb24gZ2V0UG9vbGVkV2FybmluZ1Byb3BlcnR5RGVmaW5pdGlvbihwcm9wTmFtZSwgZ2V0VmFsKSB7XG4gIHZhciBpc0Z1bmN0aW9uID0gdHlwZW9mIGdldFZhbCA9PT0gJ2Z1bmN0aW9uJztcbiAgcmV0dXJuIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgc2V0OiBzZXQsXG4gICAgZ2V0OiBnZXRcbiAgfTtcblxuICBmdW5jdGlvbiBzZXQodmFsKSB7XG4gICAgdmFyIGFjdGlvbiA9IGlzRnVuY3Rpb24gPyAnc2V0dGluZyB0aGUgbWV0aG9kJyA6ICdzZXR0aW5nIHRoZSBwcm9wZXJ0eSc7XG4gICAgd2FybihhY3Rpb24sICdUaGlzIGlzIGVmZmVjdGl2ZWx5IGEgbm8tb3AnKTtcbiAgICByZXR1cm4gdmFsO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0KCkge1xuICAgIHZhciBhY3Rpb24gPSBpc0Z1bmN0aW9uID8gJ2FjY2Vzc2luZyB0aGUgbWV0aG9kJyA6ICdhY2Nlc3NpbmcgdGhlIHByb3BlcnR5JztcbiAgICB2YXIgcmVzdWx0ID0gaXNGdW5jdGlvbiA/ICdUaGlzIGlzIGEgbm8tb3AgZnVuY3Rpb24nIDogJ1RoaXMgaXMgc2V0IHRvIG51bGwnO1xuICAgIHdhcm4oYWN0aW9uLCByZXN1bHQpO1xuICAgIHJldHVybiBnZXRWYWw7XG4gIH1cblxuICBmdW5jdGlvbiB3YXJuKGFjdGlvbiwgcmVzdWx0KSB7XG4gICAgdmFyIHdhcm5pbmdDb25kaXRpb24gPSBmYWxzZTtcbiAgICAhd2FybmluZ0NvbmRpdGlvbiA/IHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgXCJUaGlzIHN5bnRoZXRpYyBldmVudCBpcyByZXVzZWQgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuIElmIHlvdSdyZSBzZWVpbmcgdGhpcywgXCIgKyBcInlvdSdyZSAlcyBgJXNgIG9uIGEgcmVsZWFzZWQvbnVsbGlmaWVkIHN5bnRoZXRpYyBldmVudC4gJXMuIFwiICsgJ0lmIHlvdSBtdXN0IGtlZXAgdGhlIG9yaWdpbmFsIHN5bnRoZXRpYyBldmVudCBhcm91bmQsIHVzZSBldmVudC5wZXJzaXN0KCkuICcgKyAnU2VlIGh0dHBzOi8vZmIubWUvcmVhY3QtZXZlbnQtcG9vbGluZyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nLCBhY3Rpb24sIHByb3BOYW1lLCByZXN1bHQpIDogdm9pZCAwO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFBvb2xlZEV2ZW50KGRpc3BhdGNoQ29uZmlnLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlSW5zdCkge1xuICB2YXIgRXZlbnRDb25zdHJ1Y3RvciA9IHRoaXM7XG4gIGlmIChFdmVudENvbnN0cnVjdG9yLmV2ZW50UG9vbC5sZW5ndGgpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBFdmVudENvbnN0cnVjdG9yLmV2ZW50UG9vbC5wb3AoKTtcbiAgICBFdmVudENvbnN0cnVjdG9yLmNhbGwoaW5zdGFuY2UsIGRpc3BhdGNoQ29uZmlnLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlSW5zdCk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG4gIHJldHVybiBuZXcgRXZlbnRDb25zdHJ1Y3RvcihkaXNwYXRjaENvbmZpZywgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUluc3QpO1xufVxuXG5mdW5jdGlvbiByZWxlYXNlUG9vbGVkRXZlbnQoZXZlbnQpIHtcbiAgdmFyIEV2ZW50Q29uc3RydWN0b3IgPSB0aGlzO1xuICAhKGV2ZW50IGluc3RhbmNlb2YgRXZlbnRDb25zdHJ1Y3RvcikgPyBpbnZhcmlhbnQoZmFsc2UsICdUcnlpbmcgdG8gcmVsZWFzZSBhbiBldmVudCBpbnN0YW5jZSBpbnRvIGEgcG9vbCBvZiBhIGRpZmZlcmVudCB0eXBlLicpIDogdm9pZCAwO1xuICBldmVudC5kZXN0cnVjdG9yKCk7XG4gIGlmIChFdmVudENvbnN0cnVjdG9yLmV2ZW50UG9vbC5sZW5ndGggPCBFVkVOVF9QT09MX1NJWkUpIHtcbiAgICBFdmVudENvbnN0cnVjdG9yLmV2ZW50UG9vbC5wdXNoKGV2ZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRFdmVudFBvb2xpbmdUbyhFdmVudENvbnN0cnVjdG9yKSB7XG4gIEV2ZW50Q29uc3RydWN0b3IuZXZlbnRQb29sID0gW107XG4gIEV2ZW50Q29uc3RydWN0b3IuZ2V0UG9vbGVkID0gZ2V0UG9vbGVkRXZlbnQ7XG4gIEV2ZW50Q29uc3RydWN0b3IucmVsZWFzZSA9IHJlbGVhc2VQb29sZWRFdmVudDtcbn1cblxuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnRzLWNvbXBvc2l0aW9uZXZlbnRzXG4gKi9cbnZhciBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50ID0gU3ludGhldGljRXZlbnQuZXh0ZW5kKHtcbiAgZGF0YTogbnVsbFxufSk7XG5cbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDEzMTEwNVxuICogICAgICAvI2V2ZW50cy1pbnB1dGV2ZW50c1xuICovXG52YXIgU3ludGhldGljSW5wdXRFdmVudCA9IFN5bnRoZXRpY0V2ZW50LmV4dGVuZCh7XG4gIGRhdGE6IG51bGxcbn0pO1xuXG52YXIgRU5EX0tFWUNPREVTID0gWzksIDEzLCAyNywgMzJdOyAvLyBUYWIsIFJldHVybiwgRXNjLCBTcGFjZVxudmFyIFNUQVJUX0tFWUNPREUgPSAyMjk7XG5cbnZhciBjYW5Vc2VDb21wb3NpdGlvbkV2ZW50ID0gY2FuVXNlRE9NICYmICdDb21wb3NpdGlvbkV2ZW50JyBpbiB3aW5kb3c7XG5cbnZhciBkb2N1bWVudE1vZGUgPSBudWxsO1xuaWYgKGNhblVzZURPTSAmJiAnZG9jdW1lbnRNb2RlJyBpbiBkb2N1bWVudCkge1xuICBkb2N1bWVudE1vZGUgPSBkb2N1bWVudC5kb2N1bWVudE1vZGU7XG59XG5cbi8vIFdlYmtpdCBvZmZlcnMgYSB2ZXJ5IHVzZWZ1bCBgdGV4dElucHV0YCBldmVudCB0aGF0IGNhbiBiZSB1c2VkIHRvXG4vLyBkaXJlY3RseSByZXByZXNlbnQgYGJlZm9yZUlucHV0YC4gVGhlIElFIGB0ZXh0aW5wdXRgIGV2ZW50IGlzIG5vdCBhc1xuLy8gdXNlZnVsLCBzbyB3ZSBkb24ndCB1c2UgaXQuXG52YXIgY2FuVXNlVGV4dElucHV0RXZlbnQgPSBjYW5Vc2VET00gJiYgJ1RleHRFdmVudCcgaW4gd2luZG93ICYmICFkb2N1bWVudE1vZGU7XG5cbi8vIEluIElFOSssIHdlIGhhdmUgYWNjZXNzIHRvIGNvbXBvc2l0aW9uIGV2ZW50cywgYnV0IHRoZSBkYXRhIHN1cHBsaWVkXG4vLyBieSB0aGUgbmF0aXZlIGNvbXBvc2l0aW9uZW5kIGV2ZW50IG1heSBiZSBpbmNvcnJlY3QuIEphcGFuZXNlIGlkZW9ncmFwaGljXG4vLyBzcGFjZXMsIGZvciBpbnN0YW5jZSAoXFx1MzAwMCkgYXJlIG5vdCByZWNvcmRlZCBjb3JyZWN0bHkuXG52YXIgdXNlRmFsbGJhY2tDb21wb3NpdGlvbkRhdGEgPSBjYW5Vc2VET00gJiYgKCFjYW5Vc2VDb21wb3NpdGlvbkV2ZW50IHx8IGRvY3VtZW50TW9kZSAmJiBkb2N1bWVudE1vZGUgPiA4ICYmIGRvY3VtZW50TW9kZSA8PSAxMSk7XG5cbnZhciBTUEFDRUJBUl9DT0RFID0gMzI7XG52YXIgU1BBQ0VCQVJfQ0hBUiA9IFN0cmluZy5mcm9tQ2hhckNvZGUoU1BBQ0VCQVJfQ09ERSk7XG5cbi8vIEV2ZW50cyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSBuYW1lcy5cbnZhciBldmVudFR5cGVzID0ge1xuICBiZWZvcmVJbnB1dDoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiAnb25CZWZvcmVJbnB1dCcsXG4gICAgICBjYXB0dXJlZDogJ29uQmVmb3JlSW5wdXRDYXB0dXJlJ1xuICAgIH0sXG4gICAgZGVwZW5kZW5jaWVzOiBbVE9QX0NPTVBPU0lUSU9OX0VORCwgVE9QX0tFWV9QUkVTUywgVE9QX1RFWFRfSU5QVVQsIFRPUF9QQVNURV1cbiAgfSxcbiAgY29tcG9zaXRpb25FbmQ6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDogJ29uQ29tcG9zaXRpb25FbmQnLFxuICAgICAgY2FwdHVyZWQ6ICdvbkNvbXBvc2l0aW9uRW5kQ2FwdHVyZSdcbiAgICB9LFxuICAgIGRlcGVuZGVuY2llczogW1RPUF9CTFVSLCBUT1BfQ09NUE9TSVRJT05fRU5ELCBUT1BfS0VZX0RPV04sIFRPUF9LRVlfUFJFU1MsIFRPUF9LRVlfVVAsIFRPUF9NT1VTRV9ET1dOXVxuICB9LFxuICBjb21wb3NpdGlvblN0YXJ0OiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6ICdvbkNvbXBvc2l0aW9uU3RhcnQnLFxuICAgICAgY2FwdHVyZWQ6ICdvbkNvbXBvc2l0aW9uU3RhcnRDYXB0dXJlJ1xuICAgIH0sXG4gICAgZGVwZW5kZW5jaWVzOiBbVE9QX0JMVVIsIFRPUF9DT01QT1NJVElPTl9TVEFSVCwgVE9QX0tFWV9ET1dOLCBUT1BfS0VZX1BSRVNTLCBUT1BfS0VZX1VQLCBUT1BfTU9VU0VfRE9XTl1cbiAgfSxcbiAgY29tcG9zaXRpb25VcGRhdGU6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDogJ29uQ29tcG9zaXRpb25VcGRhdGUnLFxuICAgICAgY2FwdHVyZWQ6ICdvbkNvbXBvc2l0aW9uVXBkYXRlQ2FwdHVyZSdcbiAgICB9LFxuICAgIGRlcGVuZGVuY2llczogW1RPUF9CTFVSLCBUT1BfQ09NUE9TSVRJT05fVVBEQVRFLCBUT1BfS0VZX0RPV04sIFRPUF9LRVlfUFJFU1MsIFRPUF9LRVlfVVAsIFRPUF9NT1VTRV9ET1dOXVxuICB9XG59O1xuXG4vLyBUcmFjayB3aGV0aGVyIHdlJ3ZlIGV2ZXIgaGFuZGxlZCBhIGtleXByZXNzIG9uIHRoZSBzcGFjZSBrZXkuXG52YXIgaGFzU3BhY2VLZXlwcmVzcyA9IGZhbHNlO1xuXG4vKipcbiAqIFJldHVybiB3aGV0aGVyIGEgbmF0aXZlIGtleXByZXNzIGV2ZW50IGlzIGFzc3VtZWQgdG8gYmUgYSBjb21tYW5kLlxuICogVGhpcyBpcyByZXF1aXJlZCBiZWNhdXNlIEZpcmVmb3ggZmlyZXMgYGtleXByZXNzYCBldmVudHMgZm9yIGtleSBjb21tYW5kc1xuICogKGN1dCwgY29weSwgc2VsZWN0LWFsbCwgZXRjLikgZXZlbiB0aG91Z2ggbm8gY2hhcmFjdGVyIGlzIGluc2VydGVkLlxuICovXG5mdW5jdGlvbiBpc0tleXByZXNzQ29tbWFuZChuYXRpdmVFdmVudCkge1xuICByZXR1cm4gKG5hdGl2ZUV2ZW50LmN0cmxLZXkgfHwgbmF0aXZlRXZlbnQuYWx0S2V5IHx8IG5hdGl2ZUV2ZW50Lm1ldGFLZXkpICYmXG4gIC8vIGN0cmxLZXkgJiYgYWx0S2V5IGlzIGVxdWl2YWxlbnQgdG8gQWx0R3IsIGFuZCBpcyBub3QgYSBjb21tYW5kLlxuICAhKG5hdGl2ZUV2ZW50LmN0cmxLZXkgJiYgbmF0aXZlRXZlbnQuYWx0S2V5KTtcbn1cblxuLyoqXG4gKiBUcmFuc2xhdGUgbmF0aXZlIHRvcCBsZXZlbCBldmVudHMgaW50byBldmVudCB0eXBlcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUeXBlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGdldENvbXBvc2l0aW9uRXZlbnRUeXBlKHRvcExldmVsVHlwZSkge1xuICBzd2l0Y2ggKHRvcExldmVsVHlwZSkge1xuICAgIGNhc2UgVE9QX0NPTVBPU0lUSU9OX1NUQVJUOlxuICAgICAgcmV0dXJuIGV2ZW50VHlwZXMuY29tcG9zaXRpb25TdGFydDtcbiAgICBjYXNlIFRPUF9DT01QT1NJVElPTl9FTkQ6XG4gICAgICByZXR1cm4gZXZlbnRUeXBlcy5jb21wb3NpdGlvbkVuZDtcbiAgICBjYXNlIFRPUF9DT01QT1NJVElPTl9VUERBVEU6XG4gICAgICByZXR1cm4gZXZlbnRUeXBlcy5jb21wb3NpdGlvblVwZGF0ZTtcbiAgfVxufVxuXG4vKipcbiAqIERvZXMgb3VyIGZhbGxiYWNrIGJlc3QtZ3Vlc3MgbW9kZWwgdGhpbmsgdGhpcyBldmVudCBzaWduaWZpZXMgdGhhdFxuICogY29tcG9zaXRpb24gaGFzIGJlZ3VuP1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudFxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNGYWxsYmFja0NvbXBvc2l0aW9uU3RhcnQodG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCkge1xuICByZXR1cm4gdG9wTGV2ZWxUeXBlID09PSBUT1BfS0VZX0RPV04gJiYgbmF0aXZlRXZlbnQua2V5Q29kZSA9PT0gU1RBUlRfS0VZQ09ERTtcbn1cblxuLyoqXG4gKiBEb2VzIG91ciBmYWxsYmFjayBtb2RlIHRoaW5rIHRoYXQgdGhpcyBldmVudCBpcyB0aGUgZW5kIG9mIGNvbXBvc2l0aW9uP1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudFxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNGYWxsYmFja0NvbXBvc2l0aW9uRW5kKHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpIHtcbiAgc3dpdGNoICh0b3BMZXZlbFR5cGUpIHtcbiAgICBjYXNlIFRPUF9LRVlfVVA6XG4gICAgICAvLyBDb21tYW5kIGtleXMgaW5zZXJ0IG9yIGNsZWFyIElNRSBpbnB1dC5cbiAgICAgIHJldHVybiBFTkRfS0VZQ09ERVMuaW5kZXhPZihuYXRpdmVFdmVudC5rZXlDb2RlKSAhPT0gLTE7XG4gICAgY2FzZSBUT1BfS0VZX0RPV046XG4gICAgICAvLyBFeHBlY3QgSU1FIGtleUNvZGUgb24gZWFjaCBrZXlkb3duLiBJZiB3ZSBnZXQgYW55IG90aGVyXG4gICAgICAvLyBjb2RlIHdlIG11c3QgaGF2ZSBleGl0ZWQgZWFybGllci5cbiAgICAgIHJldHVybiBuYXRpdmVFdmVudC5rZXlDb2RlICE9PSBTVEFSVF9LRVlDT0RFO1xuICAgIGNhc2UgVE9QX0tFWV9QUkVTUzpcbiAgICBjYXNlIFRPUF9NT1VTRV9ET1dOOlxuICAgIGNhc2UgVE9QX0JMVVI6XG4gICAgICAvLyBFdmVudHMgYXJlIG5vdCBwb3NzaWJsZSB3aXRob3V0IGNhbmNlbGxpbmcgSU1FLlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIEdvb2dsZSBJbnB1dCBUb29scyBwcm92aWRlcyBjb21wb3NpdGlvbiBkYXRhIHZpYSBhIEN1c3RvbUV2ZW50LFxuICogd2l0aCB0aGUgYGRhdGFgIHByb3BlcnR5IHBvcHVsYXRlZCBpbiB0aGUgYGRldGFpbGAgb2JqZWN0LiBJZiB0aGlzXG4gKiBpcyBhdmFpbGFibGUgb24gdGhlIGV2ZW50IG9iamVjdCwgdXNlIGl0LiBJZiBub3QsIHRoaXMgaXMgYSBwbGFpblxuICogY29tcG9zaXRpb24gZXZlbnQgYW5kIHdlIGhhdmUgbm90aGluZyBzcGVjaWFsIHRvIGV4dHJhY3QuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50XG4gKiBAcmV0dXJuIHs/c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXREYXRhRnJvbUN1c3RvbUV2ZW50KG5hdGl2ZUV2ZW50KSB7XG4gIHZhciBkZXRhaWwgPSBuYXRpdmVFdmVudC5kZXRhaWw7XG4gIGlmICh0eXBlb2YgZGV0YWlsID09PSAnb2JqZWN0JyAmJiAnZGF0YScgaW4gZGV0YWlsKSB7XG4gICAgcmV0dXJuIGRldGFpbC5kYXRhO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgY29tcG9zaXRpb24gZXZlbnQgd2FzIHRyaWdnZXJlZCBieSBLb3JlYW4gSU1FLlxuICogT3VyIGZhbGxiYWNrIG1vZGUgZG9lcyBub3Qgd29yayB3ZWxsIHdpdGggSUUncyBLb3JlYW4gSU1FLFxuICogc28ganVzdCB1c2UgbmF0aXZlIGNvbXBvc2l0aW9uIGV2ZW50cyB3aGVuIEtvcmVhbiBJTUUgaXMgdXNlZC5cbiAqIEFsdGhvdWdoIENvbXBvc2l0aW9uRXZlbnQubG9jYWxlIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQsXG4gKiBpdCBpcyBhdmFpbGFibGUgaW4gSUUsIHdoZXJlIG91ciBmYWxsYmFjayBtb2RlIGlzIGVuYWJsZWQuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1VzaW5nS29yZWFuSU1FKG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiBuYXRpdmVFdmVudC5sb2NhbGUgPT09ICdrbyc7XG59XG5cbi8vIFRyYWNrIHRoZSBjdXJyZW50IElNRSBjb21wb3NpdGlvbiBzdGF0dXMsIGlmIGFueS5cbnZhciBpc0NvbXBvc2luZyA9IGZhbHNlO1xuXG4vKipcbiAqIEByZXR1cm4gez9vYmplY3R9IEEgU3ludGhldGljQ29tcG9zaXRpb25FdmVudC5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdENvbXBvc2l0aW9uRXZlbnQodG9wTGV2ZWxUeXBlLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgdmFyIGV2ZW50VHlwZSA9IHZvaWQgMDtcbiAgdmFyIGZhbGxiYWNrRGF0YSA9IHZvaWQgMDtcblxuICBpZiAoY2FuVXNlQ29tcG9zaXRpb25FdmVudCkge1xuICAgIGV2ZW50VHlwZSA9IGdldENvbXBvc2l0aW9uRXZlbnRUeXBlKHRvcExldmVsVHlwZSk7XG4gIH0gZWxzZSBpZiAoIWlzQ29tcG9zaW5nKSB7XG4gICAgaWYgKGlzRmFsbGJhY2tDb21wb3NpdGlvblN0YXJ0KHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpKSB7XG4gICAgICBldmVudFR5cGUgPSBldmVudFR5cGVzLmNvbXBvc2l0aW9uU3RhcnQ7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzRmFsbGJhY2tDb21wb3NpdGlvbkVuZCh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KSkge1xuICAgIGV2ZW50VHlwZSA9IGV2ZW50VHlwZXMuY29tcG9zaXRpb25FbmQ7XG4gIH1cblxuICBpZiAoIWV2ZW50VHlwZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHVzZUZhbGxiYWNrQ29tcG9zaXRpb25EYXRhICYmICFpc1VzaW5nS29yZWFuSU1FKG5hdGl2ZUV2ZW50KSkge1xuICAgIC8vIFRoZSBjdXJyZW50IGNvbXBvc2l0aW9uIGlzIHN0b3JlZCBzdGF0aWNhbGx5IGFuZCBtdXN0IG5vdCBiZVxuICAgIC8vIG92ZXJ3cml0dGVuIHdoaWxlIGNvbXBvc2l0aW9uIGNvbnRpbnVlcy5cbiAgICBpZiAoIWlzQ29tcG9zaW5nICYmIGV2ZW50VHlwZSA9PT0gZXZlbnRUeXBlcy5jb21wb3NpdGlvblN0YXJ0KSB7XG4gICAgICBpc0NvbXBvc2luZyA9IGluaXRpYWxpemUobmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSBldmVudFR5cGVzLmNvbXBvc2l0aW9uRW5kKSB7XG4gICAgICBpZiAoaXNDb21wb3NpbmcpIHtcbiAgICAgICAgZmFsbGJhY2tEYXRhID0gZ2V0RGF0YSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBldmVudCA9IFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQuZ2V0UG9vbGVkKGV2ZW50VHlwZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcblxuICBpZiAoZmFsbGJhY2tEYXRhKSB7XG4gICAgLy8gSW5qZWN0IGRhdGEgZ2VuZXJhdGVkIGZyb20gZmFsbGJhY2sgcGF0aCBpbnRvIHRoZSBzeW50aGV0aWMgZXZlbnQuXG4gICAgLy8gVGhpcyBtYXRjaGVzIHRoZSBwcm9wZXJ0eSBvZiBuYXRpdmUgQ29tcG9zaXRpb25FdmVudEludGVyZmFjZS5cbiAgICBldmVudC5kYXRhID0gZmFsbGJhY2tEYXRhO1xuICB9IGVsc2Uge1xuICAgIHZhciBjdXN0b21EYXRhID0gZ2V0RGF0YUZyb21DdXN0b21FdmVudChuYXRpdmVFdmVudCk7XG4gICAgaWYgKGN1c3RvbURhdGEgIT09IG51bGwpIHtcbiAgICAgIGV2ZW50LmRhdGEgPSBjdXN0b21EYXRhO1xuICAgIH1cbiAgfVxuXG4gIGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMoZXZlbnQpO1xuICByZXR1cm4gZXZlbnQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtUb3BMZXZlbFR5cGV9IHRvcExldmVsVHlwZSBOdW1iZXIgZnJvbSBgVG9wTGV2ZWxUeXBlYC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4gez9zdHJpbmd9IFRoZSBzdHJpbmcgY29ycmVzcG9uZGluZyB0byB0aGlzIGBiZWZvcmVJbnB1dGAgZXZlbnQuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZUJlZm9yZUlucHV0Q2hhcnModG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCkge1xuICBzd2l0Y2ggKHRvcExldmVsVHlwZSkge1xuICAgIGNhc2UgVE9QX0NPTVBPU0lUSU9OX0VORDpcbiAgICAgIHJldHVybiBnZXREYXRhRnJvbUN1c3RvbUV2ZW50KG5hdGl2ZUV2ZW50KTtcbiAgICBjYXNlIFRPUF9LRVlfUFJFU1M6XG4gICAgICAvKipcbiAgICAgICAqIElmIG5hdGl2ZSBgdGV4dElucHV0YCBldmVudHMgYXJlIGF2YWlsYWJsZSwgb3VyIGdvYWwgaXMgdG8gbWFrZVxuICAgICAgICogdXNlIG9mIHRoZW0uIEhvd2V2ZXIsIHRoZXJlIGlzIGEgc3BlY2lhbCBjYXNlOiB0aGUgc3BhY2ViYXIga2V5LlxuICAgICAgICogSW4gV2Via2l0LCBwcmV2ZW50aW5nIGRlZmF1bHQgb24gYSBzcGFjZWJhciBgdGV4dElucHV0YCBldmVudFxuICAgICAgICogY2FuY2VscyBjaGFyYWN0ZXIgaW5zZXJ0aW9uLCBidXQgaXQgKmFsc28qIGNhdXNlcyB0aGUgYnJvd3NlclxuICAgICAgICogdG8gZmFsbCBiYWNrIHRvIGl0cyBkZWZhdWx0IHNwYWNlYmFyIGJlaGF2aW9yIG9mIHNjcm9sbGluZyB0aGVcbiAgICAgICAqIHBhZ2UuXG4gICAgICAgKlxuICAgICAgICogVHJhY2tpbmcgYXQ6XG4gICAgICAgKiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MzU1MTAzXG4gICAgICAgKlxuICAgICAgICogVG8gYXZvaWQgdGhpcyBpc3N1ZSwgdXNlIHRoZSBrZXlwcmVzcyBldmVudCBhcyBpZiBubyBgdGV4dElucHV0YFxuICAgICAgICogZXZlbnQgaXMgYXZhaWxhYmxlLlxuICAgICAgICovXG4gICAgICB2YXIgd2hpY2ggPSBuYXRpdmVFdmVudC53aGljaDtcbiAgICAgIGlmICh3aGljaCAhPT0gU1BBQ0VCQVJfQ09ERSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaGFzU3BhY2VLZXlwcmVzcyA9IHRydWU7XG4gICAgICByZXR1cm4gU1BBQ0VCQVJfQ0hBUjtcblxuICAgIGNhc2UgVE9QX1RFWFRfSU5QVVQ6XG4gICAgICAvLyBSZWNvcmQgdGhlIGNoYXJhY3RlcnMgdG8gYmUgYWRkZWQgdG8gdGhlIERPTS5cbiAgICAgIHZhciBjaGFycyA9IG5hdGl2ZUV2ZW50LmRhdGE7XG5cbiAgICAgIC8vIElmIGl0J3MgYSBzcGFjZWJhciBjaGFyYWN0ZXIsIGFzc3VtZSB0aGF0IHdlIGhhdmUgYWxyZWFkeSBoYW5kbGVkXG4gICAgICAvLyBpdCBhdCB0aGUga2V5cHJlc3MgbGV2ZWwgYW5kIGJhaWwgaW1tZWRpYXRlbHkuIEFuZHJvaWQgQ2hyb21lXG4gICAgICAvLyBkb2Vzbid0IGdpdmUgdXMga2V5Y29kZXMsIHNvIHdlIG5lZWQgdG8gaWdub3JlIGl0LlxuICAgICAgaWYgKGNoYXJzID09PSBTUEFDRUJBUl9DSEFSICYmIGhhc1NwYWNlS2V5cHJlc3MpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaGFycztcblxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBGb3Igb3RoZXIgbmF0aXZlIGV2ZW50IHR5cGVzLCBkbyBub3RoaW5nLlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBGb3IgYnJvd3NlcnMgdGhhdCBkbyBub3QgcHJvdmlkZSB0aGUgYHRleHRJbnB1dGAgZXZlbnQsIGV4dHJhY3QgdGhlXG4gKiBhcHByb3ByaWF0ZSBzdHJpbmcgdG8gdXNlIGZvciBTeW50aGV0aWNJbnB1dEV2ZW50LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB0b3BMZXZlbFR5cGUgTnVtYmVyIGZyb20gYFRvcExldmVsRXZlbnRUeXBlc2AuXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAcmV0dXJuIHs/c3RyaW5nfSBUaGUgZmFsbGJhY2sgc3RyaW5nIGZvciB0aGlzIGBiZWZvcmVJbnB1dGAgZXZlbnQuXG4gKi9cbmZ1bmN0aW9uIGdldEZhbGxiYWNrQmVmb3JlSW5wdXRDaGFycyh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KSB7XG4gIC8vIElmIHdlIGFyZSBjdXJyZW50bHkgY29tcG9zaW5nIChJTUUpIGFuZCB1c2luZyBhIGZhbGxiYWNrIHRvIGRvIHNvLFxuICAvLyB0cnkgdG8gZXh0cmFjdCB0aGUgY29tcG9zZWQgY2hhcmFjdGVycyBmcm9tIHRoZSBmYWxsYmFjayBvYmplY3QuXG4gIC8vIElmIGNvbXBvc2l0aW9uIGV2ZW50IGlzIGF2YWlsYWJsZSwgd2UgZXh0cmFjdCBhIHN0cmluZyBvbmx5IGF0XG4gIC8vIGNvbXBvc2l0aW9uZXZlbnQsIG90aGVyd2lzZSBleHRyYWN0IGl0IGF0IGZhbGxiYWNrIGV2ZW50cy5cbiAgaWYgKGlzQ29tcG9zaW5nKSB7XG4gICAgaWYgKHRvcExldmVsVHlwZSA9PT0gVE9QX0NPTVBPU0lUSU9OX0VORCB8fCAhY2FuVXNlQ29tcG9zaXRpb25FdmVudCAmJiBpc0ZhbGxiYWNrQ29tcG9zaXRpb25FbmQodG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCkpIHtcbiAgICAgIHZhciBjaGFycyA9IGdldERhdGEoKTtcbiAgICAgIHJlc2V0KCk7XG4gICAgICBpc0NvbXBvc2luZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuIGNoYXJzO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN3aXRjaCAodG9wTGV2ZWxUeXBlKSB7XG4gICAgY2FzZSBUT1BfUEFTVEU6XG4gICAgICAvLyBJZiBhIHBhc3RlIGV2ZW50IG9jY3VycyBhZnRlciBhIGtleXByZXNzLCB0aHJvdyBvdXQgdGhlIGlucHV0XG4gICAgICAvLyBjaGFycy4gUGFzdGUgZXZlbnRzIHNob3VsZCBub3QgbGVhZCB0byBCZWZvcmVJbnB1dCBldmVudHMuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICBjYXNlIFRPUF9LRVlfUFJFU1M6XG4gICAgICAvKipcbiAgICAgICAqIEFzIG9mIHYyNywgRmlyZWZveCBtYXkgZmlyZSBrZXlwcmVzcyBldmVudHMgZXZlbiB3aGVuIG5vIGNoYXJhY3RlclxuICAgICAgICogd2lsbCBiZSBpbnNlcnRlZC4gQSBmZXcgcG9zc2liaWxpdGllczpcbiAgICAgICAqXG4gICAgICAgKiAtIGB3aGljaGAgaXMgYDBgLiBBcnJvdyBrZXlzLCBFc2Mga2V5LCBldGMuXG4gICAgICAgKlxuICAgICAgICogLSBgd2hpY2hgIGlzIHRoZSBwcmVzc2VkIGtleSBjb2RlLCBidXQgbm8gY2hhciBpcyBhdmFpbGFibGUuXG4gICAgICAgKiAgIEV4OiAnQWx0R3IgKyBkYCBpbiBQb2xpc2guIFRoZXJlIGlzIG5vIG1vZGlmaWVkIGNoYXJhY3RlciBmb3JcbiAgICAgICAqICAgdGhpcyBrZXkgY29tYmluYXRpb24gYW5kIG5vIGNoYXJhY3RlciBpcyBpbnNlcnRlZCBpbnRvIHRoZVxuICAgICAgICogICBkb2N1bWVudCwgYnV0IEZGIGZpcmVzIHRoZSBrZXlwcmVzcyBmb3IgY2hhciBjb2RlIGAxMDBgIGFueXdheS5cbiAgICAgICAqICAgTm8gYGlucHV0YCBldmVudCB3aWxsIG9jY3VyLlxuICAgICAgICpcbiAgICAgICAqIC0gYHdoaWNoYCBpcyB0aGUgcHJlc3NlZCBrZXkgY29kZSwgYnV0IGEgY29tbWFuZCBjb21iaW5hdGlvbiBpc1xuICAgICAgICogICBiZWluZyB1c2VkLiBFeDogYENtZCtDYC4gTm8gY2hhcmFjdGVyIGlzIGluc2VydGVkLCBhbmQgbm9cbiAgICAgICAqICAgYGlucHV0YCBldmVudCB3aWxsIG9jY3VyLlxuICAgICAgICovXG4gICAgICBpZiAoIWlzS2V5cHJlc3NDb21tYW5kKG5hdGl2ZUV2ZW50KSkge1xuICAgICAgICAvLyBJRSBmaXJlcyB0aGUgYGtleXByZXNzYCBldmVudCB3aGVuIGEgdXNlciB0eXBlcyBhbiBlbW9qaSB2aWFcbiAgICAgICAgLy8gVG91Y2gga2V5Ym9hcmQgb2YgV2luZG93cy4gIEluIHN1Y2ggYSBjYXNlLCB0aGUgYGNoYXJgIHByb3BlcnR5XG4gICAgICAgIC8vIGhvbGRzIGFuIGVtb2ppIGNoYXJhY3RlciBsaWtlIGBcXHVEODNEXFx1REUwQWAuICBCZWNhdXNlIGl0cyBsZW5ndGhcbiAgICAgICAgLy8gaXMgMiwgdGhlIHByb3BlcnR5IGB3aGljaGAgZG9lcyBub3QgcmVwcmVzZW50IGFuIGVtb2ppIGNvcnJlY3RseS5cbiAgICAgICAgLy8gSW4gc3VjaCBhIGNhc2UsIHdlIGRpcmVjdGx5IHJldHVybiB0aGUgYGNoYXJgIHByb3BlcnR5IGluc3RlYWQgb2ZcbiAgICAgICAgLy8gdXNpbmcgYHdoaWNoYC5cbiAgICAgICAgaWYgKG5hdGl2ZUV2ZW50LmNoYXIgJiYgbmF0aXZlRXZlbnQuY2hhci5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgcmV0dXJuIG5hdGl2ZUV2ZW50LmNoYXI7XG4gICAgICAgIH0gZWxzZSBpZiAobmF0aXZlRXZlbnQud2hpY2gpIHtcbiAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShuYXRpdmVFdmVudC53aGljaCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIGNhc2UgVE9QX0NPTVBPU0lUSU9OX0VORDpcbiAgICAgIHJldHVybiB1c2VGYWxsYmFja0NvbXBvc2l0aW9uRGF0YSAmJiAhaXNVc2luZ0tvcmVhbklNRShuYXRpdmVFdmVudCkgPyBudWxsIDogbmF0aXZlRXZlbnQuZGF0YTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBFeHRyYWN0IGEgU3ludGhldGljSW5wdXRFdmVudCBmb3IgYGJlZm9yZUlucHV0YCwgYmFzZWQgb24gZWl0aGVyIG5hdGl2ZVxuICogYHRleHRJbnB1dGAgb3IgZmFsbGJhY2sgYmVoYXZpb3IuXG4gKlxuICogQHJldHVybiB7P29iamVjdH0gQSBTeW50aGV0aWNJbnB1dEV2ZW50LlxuICovXG5mdW5jdGlvbiBleHRyYWN0QmVmb3JlSW5wdXRFdmVudCh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICB2YXIgY2hhcnMgPSB2b2lkIDA7XG5cbiAgaWYgKGNhblVzZVRleHRJbnB1dEV2ZW50KSB7XG4gICAgY2hhcnMgPSBnZXROYXRpdmVCZWZvcmVJbnB1dENoYXJzKHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpO1xuICB9IGVsc2Uge1xuICAgIGNoYXJzID0gZ2V0RmFsbGJhY2tCZWZvcmVJbnB1dENoYXJzKHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpO1xuICB9XG5cbiAgLy8gSWYgbm8gY2hhcmFjdGVycyBhcmUgYmVpbmcgaW5zZXJ0ZWQsIG5vIEJlZm9yZUlucHV0IGV2ZW50IHNob3VsZFxuICAvLyBiZSBmaXJlZC5cbiAgaWYgKCFjaGFycykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIGV2ZW50ID0gU3ludGhldGljSW5wdXRFdmVudC5nZXRQb29sZWQoZXZlbnRUeXBlcy5iZWZvcmVJbnB1dCwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcblxuICBldmVudC5kYXRhID0gY2hhcnM7XG4gIGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMoZXZlbnQpO1xuICByZXR1cm4gZXZlbnQ7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGBvbkJlZm9yZUlucHV0YCBldmVudCB0byBtYXRjaFxuICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAxMzExMDUvI2V2ZW50cy1pbnB1dGV2ZW50cy5cbiAqXG4gKiBUaGlzIGV2ZW50IHBsdWdpbiBpcyBiYXNlZCBvbiB0aGUgbmF0aXZlIGB0ZXh0SW5wdXRgIGV2ZW50XG4gKiBhdmFpbGFibGUgaW4gQ2hyb21lLCBTYWZhcmksIE9wZXJhLCBhbmQgSUUuIFRoaXMgZXZlbnQgZmlyZXMgYWZ0ZXJcbiAqIGBvbktleVByZXNzYCBhbmQgYG9uQ29tcG9zaXRpb25FbmRgLCBidXQgYmVmb3JlIGBvbklucHV0YC5cbiAqXG4gKiBgYmVmb3JlSW5wdXRgIGlzIHNwZWMnZCBidXQgbm90IGltcGxlbWVudGVkIGluIGFueSBicm93c2VycywgYW5kXG4gKiB0aGUgYGlucHV0YCBldmVudCBkb2VzIG5vdCBwcm92aWRlIGFueSB1c2VmdWwgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBoYXNcbiAqIGFjdHVhbGx5IGJlZW4gYWRkZWQsIGNvbnRyYXJ5IHRvIHRoZSBzcGVjLiBUaHVzLCBgdGV4dElucHV0YCBpcyB0aGUgYmVzdFxuICogYXZhaWxhYmxlIGV2ZW50IHRvIGlkZW50aWZ5IHRoZSBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSBhY3R1YWxseSBiZWVuIGluc2VydGVkXG4gKiBpbnRvIHRoZSB0YXJnZXQgbm9kZS5cbiAqXG4gKiBUaGlzIHBsdWdpbiBpcyBhbHNvIHJlc3BvbnNpYmxlIGZvciBlbWl0dGluZyBgY29tcG9zaXRpb25gIGV2ZW50cywgdGh1c1xuICogYWxsb3dpbmcgdXMgdG8gc2hhcmUgY29tcG9zaXRpb24gZmFsbGJhY2sgY29kZSBmb3IgYm90aCBgYmVmb3JlSW5wdXRgIGFuZFxuICogYGNvbXBvc2l0aW9uYCBldmVudCB0eXBlcy5cbiAqL1xudmFyIEJlZm9yZUlucHV0RXZlbnRQbHVnaW4gPSB7XG4gIGV2ZW50VHlwZXM6IGV2ZW50VHlwZXMsXG5cbiAgZXh0cmFjdEV2ZW50czogZnVuY3Rpb24gKHRvcExldmVsVHlwZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gICAgdmFyIGNvbXBvc2l0aW9uID0gZXh0cmFjdENvbXBvc2l0aW9uRXZlbnQodG9wTGV2ZWxUeXBlLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuXG4gICAgdmFyIGJlZm9yZUlucHV0ID0gZXh0cmFjdEJlZm9yZUlucHV0RXZlbnQodG9wTGV2ZWxUeXBlLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuXG4gICAgaWYgKGNvbXBvc2l0aW9uID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gYmVmb3JlSW5wdXQ7XG4gICAgfVxuXG4gICAgaWYgKGJlZm9yZUlucHV0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gY29tcG9zaXRpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIFtjb21wb3NpdGlvbiwgYmVmb3JlSW5wdXRdO1xuICB9XG59O1xuXG4vLyBVc2UgdG8gcmVzdG9yZSBjb250cm9sbGVkIHN0YXRlIGFmdGVyIGEgY2hhbmdlIGV2ZW50IGhhcyBmaXJlZC5cblxudmFyIHJlc3RvcmVJbXBsID0gbnVsbDtcbnZhciByZXN0b3JlVGFyZ2V0ID0gbnVsbDtcbnZhciByZXN0b3JlUXVldWUgPSBudWxsO1xuXG5mdW5jdGlvbiByZXN0b3JlU3RhdGVPZlRhcmdldCh0YXJnZXQpIHtcbiAgLy8gV2UgcGVyZm9ybSB0aGlzIHRyYW5zbGF0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIGV2ZW50IGxvb3Agc28gdGhhdCB3ZVxuICAvLyBhbHdheXMgcmVjZWl2ZSB0aGUgY29ycmVjdCBmaWJlciBoZXJlXG4gIHZhciBpbnRlcm5hbEluc3RhbmNlID0gZ2V0SW5zdGFuY2VGcm9tTm9kZSh0YXJnZXQpO1xuICBpZiAoIWludGVybmFsSW5zdGFuY2UpIHtcbiAgICAvLyBVbm1vdW50ZWRcbiAgICByZXR1cm47XG4gIH1cbiAgISh0eXBlb2YgcmVzdG9yZUltcGwgPT09ICdmdW5jdGlvbicpID8gaW52YXJpYW50KGZhbHNlLCAnc2V0UmVzdG9yZUltcGxlbWVudGF0aW9uKCkgbmVlZHMgdG8gYmUgY2FsbGVkIHRvIGhhbmRsZSBhIHRhcmdldCBmb3IgY29udHJvbGxlZCBldmVudHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJykgOiB2b2lkIDA7XG4gIHZhciBwcm9wcyA9IGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUoaW50ZXJuYWxJbnN0YW5jZS5zdGF0ZU5vZGUpO1xuICByZXN0b3JlSW1wbChpbnRlcm5hbEluc3RhbmNlLnN0YXRlTm9kZSwgaW50ZXJuYWxJbnN0YW5jZS50eXBlLCBwcm9wcyk7XG59XG5cbmZ1bmN0aW9uIHNldFJlc3RvcmVJbXBsZW1lbnRhdGlvbihpbXBsKSB7XG4gIHJlc3RvcmVJbXBsID0gaW1wbDtcbn1cblxuZnVuY3Rpb24gZW5xdWV1ZVN0YXRlUmVzdG9yZSh0YXJnZXQpIHtcbiAgaWYgKHJlc3RvcmVUYXJnZXQpIHtcbiAgICBpZiAocmVzdG9yZVF1ZXVlKSB7XG4gICAgICByZXN0b3JlUXVldWUucHVzaCh0YXJnZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN0b3JlUXVldWUgPSBbdGFyZ2V0XTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmVzdG9yZVRhcmdldCA9IHRhcmdldDtcbiAgfVxufVxuXG5mdW5jdGlvbiBuZWVkc1N0YXRlUmVzdG9yZSgpIHtcbiAgcmV0dXJuIHJlc3RvcmVUYXJnZXQgIT09IG51bGwgfHwgcmVzdG9yZVF1ZXVlICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiByZXN0b3JlU3RhdGVJZk5lZWRlZCgpIHtcbiAgaWYgKCFyZXN0b3JlVGFyZ2V0KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciB0YXJnZXQgPSByZXN0b3JlVGFyZ2V0O1xuICB2YXIgcXVldWVkVGFyZ2V0cyA9IHJlc3RvcmVRdWV1ZTtcbiAgcmVzdG9yZVRhcmdldCA9IG51bGw7XG4gIHJlc3RvcmVRdWV1ZSA9IG51bGw7XG5cbiAgcmVzdG9yZVN0YXRlT2ZUYXJnZXQodGFyZ2V0KTtcbiAgaWYgKHF1ZXVlZFRhcmdldHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXVlZFRhcmdldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3RvcmVTdGF0ZU9mVGFyZ2V0KHF1ZXVlZFRhcmdldHNbaV0pO1xuICAgIH1cbiAgfVxufVxuXG4vLyBVc2VkIGFzIGEgd2F5IHRvIGNhbGwgYmF0Y2hlZFVwZGF0ZXMgd2hlbiB3ZSBkb24ndCBoYXZlIGEgcmVmZXJlbmNlIHRvXG4vLyB0aGUgcmVuZGVyZXIuIFN1Y2ggYXMgd2hlbiB3ZSdyZSBkaXNwYXRjaGluZyBldmVudHMgb3IgaWYgdGhpcmQgcGFydHlcbi8vIGxpYnJhcmllcyBuZWVkIHRvIGNhbGwgYmF0Y2hlZFVwZGF0ZXMuIEV2ZW50dWFsbHksIHRoaXMgQVBJIHdpbGwgZ28gYXdheSB3aGVuXG4vLyBldmVyeXRoaW5nIGlzIGJhdGNoZWQgYnkgZGVmYXVsdC4gV2UnbGwgdGhlbiBoYXZlIGEgc2ltaWxhciBBUEkgdG8gb3B0LW91dCBvZlxuLy8gc2NoZWR1bGVkIHdvcmsgYW5kIGluc3RlYWQgZG8gc3luY2hyb25vdXMgd29yay5cblxuLy8gRGVmYXVsdHNcbnZhciBfYmF0Y2hlZFVwZGF0ZXNJbXBsID0gZnVuY3Rpb24gKGZuLCBib29ra2VlcGluZykge1xuICByZXR1cm4gZm4oYm9va2tlZXBpbmcpO1xufTtcbnZhciBfaW50ZXJhY3RpdmVVcGRhdGVzSW1wbCA9IGZ1bmN0aW9uIChmbiwgYSwgYikge1xuICByZXR1cm4gZm4oYSwgYik7XG59O1xudmFyIF9mbHVzaEludGVyYWN0aXZlVXBkYXRlc0ltcGwgPSBmdW5jdGlvbiAoKSB7fTtcblxudmFyIGlzQmF0Y2hpbmcgPSBmYWxzZTtcbmZ1bmN0aW9uIGJhdGNoZWRVcGRhdGVzKGZuLCBib29ra2VlcGluZykge1xuICBpZiAoaXNCYXRjaGluZykge1xuICAgIC8vIElmIHdlIGFyZSBjdXJyZW50bHkgaW5zaWRlIGFub3RoZXIgYmF0Y2gsIHdlIG5lZWQgdG8gd2FpdCB1bnRpbCBpdFxuICAgIC8vIGZ1bGx5IGNvbXBsZXRlcyBiZWZvcmUgcmVzdG9yaW5nIHN0YXRlLlxuICAgIHJldHVybiBmbihib29ra2VlcGluZyk7XG4gIH1cbiAgaXNCYXRjaGluZyA9IHRydWU7XG4gIHRyeSB7XG4gICAgcmV0dXJuIF9iYXRjaGVkVXBkYXRlc0ltcGwoZm4sIGJvb2trZWVwaW5nKTtcbiAgfSBmaW5hbGx5IHtcbiAgICAvLyBIZXJlIHdlIHdhaXQgdW50aWwgYWxsIHVwZGF0ZXMgaGF2ZSBwcm9wYWdhdGVkLCB3aGljaCBpcyBpbXBvcnRhbnRcbiAgICAvLyB3aGVuIHVzaW5nIGNvbnRyb2xsZWQgY29tcG9uZW50cyB3aXRoaW4gbGF5ZXJzOlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTY5OFxuICAgIC8vIFRoZW4gd2UgcmVzdG9yZSBzdGF0ZSBvZiBhbnkgY29udHJvbGxlZCBjb21wb25lbnQuXG4gICAgaXNCYXRjaGluZyA9IGZhbHNlO1xuICAgIHZhciBjb250cm9sbGVkQ29tcG9uZW50c0hhdmVQZW5kaW5nVXBkYXRlcyA9IG5lZWRzU3RhdGVSZXN0b3JlKCk7XG4gICAgaWYgKGNvbnRyb2xsZWRDb21wb25lbnRzSGF2ZVBlbmRpbmdVcGRhdGVzKSB7XG4gICAgICAvLyBJZiBhIGNvbnRyb2xsZWQgZXZlbnQgd2FzIGZpcmVkLCB3ZSBtYXkgbmVlZCB0byByZXN0b3JlIHRoZSBzdGF0ZSBvZlxuICAgICAgLy8gdGhlIERPTSBub2RlIGJhY2sgdG8gdGhlIGNvbnRyb2xsZWQgdmFsdWUuIFRoaXMgaXMgbmVjZXNzYXJ5IHdoZW4gUmVhY3RcbiAgICAgIC8vIGJhaWxzIG91dCBvZiB0aGUgdXBkYXRlIHdpdGhvdXQgdG91Y2hpbmcgdGhlIERPTS5cbiAgICAgIF9mbHVzaEludGVyYWN0aXZlVXBkYXRlc0ltcGwoKTtcbiAgICAgIHJlc3RvcmVTdGF0ZUlmTmVlZGVkKCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGludGVyYWN0aXZlVXBkYXRlcyhmbiwgYSwgYikge1xuICByZXR1cm4gX2ludGVyYWN0aXZlVXBkYXRlc0ltcGwoZm4sIGEsIGIpO1xufVxuXG5cblxuZnVuY3Rpb24gc2V0QmF0Y2hpbmdJbXBsZW1lbnRhdGlvbihiYXRjaGVkVXBkYXRlc0ltcGwsIGludGVyYWN0aXZlVXBkYXRlc0ltcGwsIGZsdXNoSW50ZXJhY3RpdmVVcGRhdGVzSW1wbCkge1xuICBfYmF0Y2hlZFVwZGF0ZXNJbXBsID0gYmF0Y2hlZFVwZGF0ZXNJbXBsO1xuICBfaW50ZXJhY3RpdmVVcGRhdGVzSW1wbCA9IGludGVyYWN0aXZlVXBkYXRlc0ltcGw7XG4gIF9mbHVzaEludGVyYWN0aXZlVXBkYXRlc0ltcGwgPSBmbHVzaEludGVyYWN0aXZlVXBkYXRlc0ltcGw7XG59XG5cbi8qKlxuICogQHNlZSBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90aGUtaW5wdXQtZWxlbWVudC5odG1sI2lucHV0LXR5cGUtYXR0ci1zdW1tYXJ5XG4gKi9cbnZhciBzdXBwb3J0ZWRJbnB1dFR5cGVzID0ge1xuICBjb2xvcjogdHJ1ZSxcbiAgZGF0ZTogdHJ1ZSxcbiAgZGF0ZXRpbWU6IHRydWUsXG4gICdkYXRldGltZS1sb2NhbCc6IHRydWUsXG4gIGVtYWlsOiB0cnVlLFxuICBtb250aDogdHJ1ZSxcbiAgbnVtYmVyOiB0cnVlLFxuICBwYXNzd29yZDogdHJ1ZSxcbiAgcmFuZ2U6IHRydWUsXG4gIHNlYXJjaDogdHJ1ZSxcbiAgdGVsOiB0cnVlLFxuICB0ZXh0OiB0cnVlLFxuICB0aW1lOiB0cnVlLFxuICB1cmw6IHRydWUsXG4gIHdlZWs6IHRydWVcbn07XG5cbmZ1bmN0aW9uIGlzVGV4dElucHV0RWxlbWVudChlbGVtKSB7XG4gIHZhciBub2RlTmFtZSA9IGVsZW0gJiYgZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgaWYgKG5vZGVOYW1lID09PSAnaW5wdXQnKSB7XG4gICAgcmV0dXJuICEhc3VwcG9ydGVkSW5wdXRUeXBlc1tlbGVtLnR5cGVdO1xuICB9XG5cbiAgaWYgKG5vZGVOYW1lID09PSAndGV4dGFyZWEnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogSFRNTCBub2RlVHlwZSB2YWx1ZXMgdGhhdCByZXByZXNlbnQgdGhlIHR5cGUgb2YgdGhlIG5vZGVcbiAqL1xuXG52YXIgRUxFTUVOVF9OT0RFID0gMTtcbnZhciBURVhUX05PREUgPSAzO1xudmFyIENPTU1FTlRfTk9ERSA9IDg7XG52YXIgRE9DVU1FTlRfTk9ERSA9IDk7XG52YXIgRE9DVU1FTlRfRlJBR01FTlRfTk9ERSA9IDExO1xuXG4vKipcbiAqIEdldHMgdGhlIHRhcmdldCBub2RlIGZyb20gYSBuYXRpdmUgYnJvd3NlciBldmVudCBieSBhY2NvdW50aW5nIGZvclxuICogaW5jb25zaXN0ZW5jaWVzIGluIGJyb3dzZXIgRE9NIEFQSXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7RE9NRXZlbnRUYXJnZXR9IFRhcmdldCBub2RlLlxuICovXG5mdW5jdGlvbiBnZXRFdmVudFRhcmdldChuYXRpdmVFdmVudCkge1xuICAvLyBGYWxsYmFjayB0byBuYXRpdmVFdmVudC5zcmNFbGVtZW50IGZvciBJRTlcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMjUwNlxuICB2YXIgdGFyZ2V0ID0gbmF0aXZlRXZlbnQudGFyZ2V0IHx8IG5hdGl2ZUV2ZW50LnNyY0VsZW1lbnQgfHwgd2luZG93O1xuXG4gIC8vIE5vcm1hbGl6ZSBTVkcgPHVzZT4gZWxlbWVudCBldmVudHMgIzQ5NjNcbiAgaWYgKHRhcmdldC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCkge1xuICAgIHRhcmdldCA9IHRhcmdldC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudDtcbiAgfVxuXG4gIC8vIFNhZmFyaSBtYXkgZmlyZSBldmVudHMgb24gdGV4dCBub2RlcyAoTm9kZS5URVhUX05PREUgaXMgMykuXG4gIC8vIEBzZWUgaHR0cDovL3d3dy5xdWlya3Ntb2RlLm9yZy9qcy9ldmVudHNfcHJvcGVydGllcy5odG1sXG4gIHJldHVybiB0YXJnZXQubm9kZVR5cGUgPT09IFRFWFRfTk9ERSA/IHRhcmdldC5wYXJlbnROb2RlIDogdGFyZ2V0O1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhbiBldmVudCBpcyBzdXBwb3J0ZWQgaW4gdGhlIGN1cnJlbnQgZXhlY3V0aW9uIGVudmlyb25tZW50LlxuICpcbiAqIE5PVEU6IFRoaXMgd2lsbCBub3Qgd29yayBjb3JyZWN0bHkgZm9yIG5vbi1nZW5lcmljIGV2ZW50cyBzdWNoIGFzIGBjaGFuZ2VgLFxuICogYHJlc2V0YCwgYGxvYWRgLCBgZXJyb3JgLCBhbmQgYHNlbGVjdGAuXG4gKlxuICogQm9ycm93cyBmcm9tIE1vZGVybml6ci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lU3VmZml4IEV2ZW50IG5hbWUsIGUuZy4gXCJjbGlja1wiLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgZXZlbnQgaXMgc3VwcG9ydGVkLlxuICogQGludGVybmFsXG4gKiBAbGljZW5zZSBNb2Rlcm5penIgMy4wLjBwcmUgKEN1c3RvbSBCdWlsZCkgfCBNSVRcbiAqL1xuZnVuY3Rpb24gaXNFdmVudFN1cHBvcnRlZChldmVudE5hbWVTdWZmaXgpIHtcbiAgaWYgKCFjYW5Vc2VET00pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgZXZlbnROYW1lID0gJ29uJyArIGV2ZW50TmFtZVN1ZmZpeDtcbiAgdmFyIGlzU3VwcG9ydGVkID0gZXZlbnROYW1lIGluIGRvY3VtZW50O1xuXG4gIGlmICghaXNTdXBwb3J0ZWQpIHtcbiAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGV2ZW50TmFtZSwgJ3JldHVybjsnKTtcbiAgICBpc1N1cHBvcnRlZCA9IHR5cGVvZiBlbGVtZW50W2V2ZW50TmFtZV0gPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICByZXR1cm4gaXNTdXBwb3J0ZWQ7XG59XG5cbmZ1bmN0aW9uIGlzQ2hlY2thYmxlKGVsZW0pIHtcbiAgdmFyIHR5cGUgPSBlbGVtLnR5cGU7XG4gIHZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWU7XG4gIHJldHVybiBub2RlTmFtZSAmJiBub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnICYmICh0eXBlID09PSAnY2hlY2tib3gnIHx8IHR5cGUgPT09ICdyYWRpbycpO1xufVxuXG5mdW5jdGlvbiBnZXRUcmFja2VyKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuX3ZhbHVlVHJhY2tlcjtcbn1cblxuZnVuY3Rpb24gZGV0YWNoVHJhY2tlcihub2RlKSB7XG4gIG5vZGUuX3ZhbHVlVHJhY2tlciA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldFZhbHVlRnJvbU5vZGUobm9kZSkge1xuICB2YXIgdmFsdWUgPSAnJztcbiAgaWYgKCFub2RlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgaWYgKGlzQ2hlY2thYmxlKG5vZGUpKSB7XG4gICAgdmFsdWUgPSBub2RlLmNoZWNrZWQgPyAndHJ1ZScgOiAnZmFsc2UnO1xuICB9IGVsc2Uge1xuICAgIHZhbHVlID0gbm9kZS52YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gdHJhY2tWYWx1ZU9uTm9kZShub2RlKSB7XG4gIHZhciB2YWx1ZUZpZWxkID0gaXNDaGVja2FibGUobm9kZSkgPyAnY2hlY2tlZCcgOiAndmFsdWUnO1xuICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobm9kZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHZhbHVlRmllbGQpO1xuXG4gIHZhciBjdXJyZW50VmFsdWUgPSAnJyArIG5vZGVbdmFsdWVGaWVsZF07XG5cbiAgLy8gaWYgc29tZW9uZSBoYXMgYWxyZWFkeSBkZWZpbmVkIGEgdmFsdWUgb3IgU2FmYXJpLCB0aGVuIGJhaWxcbiAgLy8gYW5kIGRvbid0IHRyYWNrIHZhbHVlIHdpbGwgY2F1c2Ugb3ZlciByZXBvcnRpbmcgb2YgY2hhbmdlcyxcbiAgLy8gYnV0IGl0J3MgYmV0dGVyIHRoZW4gYSBoYXJkIGZhaWx1cmVcbiAgLy8gKG5lZWRlZCBmb3IgY2VydGFpbiB0ZXN0cyB0aGF0IHNweU9uIGlucHV0IHZhbHVlcyBhbmQgU2FmYXJpKVxuICBpZiAobm9kZS5oYXNPd25Qcm9wZXJ0eSh2YWx1ZUZpZWxkKSB8fCB0eXBlb2YgZGVzY3JpcHRvciA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBkZXNjcmlwdG9yLnNldCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgZ2V0ID0gZGVzY3JpcHRvci5nZXQsXG4gICAgICBzZXQgPSBkZXNjcmlwdG9yLnNldDtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobm9kZSwgdmFsdWVGaWVsZCwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBnZXQuY2FsbCh0aGlzKTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50VmFsdWUgPSAnJyArIHZhbHVlO1xuICAgICAgc2V0LmNhbGwodGhpcywgdmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIC8vIFdlIGNvdWxkJ3ZlIHBhc3NlZCB0aGlzIHRoZSBmaXJzdCB0aW1lXG4gIC8vIGJ1dCBpdCB0cmlnZ2VycyBhIGJ1ZyBpbiBJRTExIGFuZCBFZGdlIDE0LzE1LlxuICAvLyBDYWxsaW5nIGRlZmluZVByb3BlcnR5KCkgYWdhaW4gc2hvdWxkIGJlIGVxdWl2YWxlbnQuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTE3NjhcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5vZGUsIHZhbHVlRmllbGQsIHtcbiAgICBlbnVtZXJhYmxlOiBkZXNjcmlwdG9yLmVudW1lcmFibGVcbiAgfSk7XG5cbiAgdmFyIHRyYWNrZXIgPSB7XG4gICAgZ2V0VmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBjdXJyZW50VmFsdWU7XG4gICAgfSxcbiAgICBzZXRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50VmFsdWUgPSAnJyArIHZhbHVlO1xuICAgIH0sXG4gICAgc3RvcFRyYWNraW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICBkZXRhY2hUcmFja2VyKG5vZGUpO1xuICAgICAgZGVsZXRlIG5vZGVbdmFsdWVGaWVsZF07XG4gICAgfVxuICB9O1xuICByZXR1cm4gdHJhY2tlcjtcbn1cblxuZnVuY3Rpb24gdHJhY2sobm9kZSkge1xuICBpZiAoZ2V0VHJhY2tlcihub2RlKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFRPRE86IE9uY2UgaXQncyBqdXN0IEZpYmVyIHdlIGNhbiBtb3ZlIHRoaXMgdG8gbm9kZS5fd3JhcHBlclN0YXRlXG4gIG5vZGUuX3ZhbHVlVHJhY2tlciA9IHRyYWNrVmFsdWVPbk5vZGUobm9kZSk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVZhbHVlSWZDaGFuZ2VkKG5vZGUpIHtcbiAgaWYgKCFub2RlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHRyYWNrZXIgPSBnZXRUcmFja2VyKG5vZGUpO1xuICAvLyBpZiB0aGVyZSBpcyBubyB0cmFja2VyIGF0IHRoaXMgcG9pbnQgaXQncyB1bmxpa2VseVxuICAvLyB0aGF0IHRyeWluZyBhZ2FpbiB3aWxsIHN1Y2NlZWRcbiAgaWYgKCF0cmFja2VyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB2YXIgbGFzdFZhbHVlID0gdHJhY2tlci5nZXRWYWx1ZSgpO1xuICB2YXIgbmV4dFZhbHVlID0gZ2V0VmFsdWVGcm9tTm9kZShub2RlKTtcbiAgaWYgKG5leHRWYWx1ZSAhPT0gbGFzdFZhbHVlKSB7XG4gICAgdHJhY2tlci5zZXRWYWx1ZShuZXh0VmFsdWUpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxudmFyIFJlYWN0U2hhcmVkSW50ZXJuYWxzID0gUmVhY3QuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ7XG5cbi8vIFByZXZlbnQgbmV3ZXIgcmVuZGVyZXJzIGZyb20gUlRFIHdoZW4gdXNlZCB3aXRoIG9sZGVyIHJlYWN0IHBhY2thZ2UgdmVyc2lvbnMuXG4vLyBDdXJyZW50IG93bmVyIGFuZCBkaXNwYXRjaGVyIHVzZWQgdG8gc2hhcmUgdGhlIHNhbWUgcmVmLFxuLy8gYnV0IFBSICMxNDU0OCBzcGxpdCB0aGVtIG91dCB0byBiZXR0ZXIgc3VwcG9ydCB0aGUgcmVhY3QtZGVidWctdG9vbHMgcGFja2FnZS5cbmlmICghUmVhY3RTaGFyZWRJbnRlcm5hbHMuaGFzT3duUHJvcGVydHkoJ1JlYWN0Q3VycmVudERpc3BhdGNoZXInKSkge1xuICBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyID0ge1xuICAgIGN1cnJlbnQ6IG51bGxcbiAgfTtcbn1cblxudmFyIEJFRk9SRV9TTEFTSF9SRSA9IC9eKC4qKVtcXFxcXFwvXS87XG5cbnZhciBkZXNjcmliZUNvbXBvbmVudEZyYW1lID0gZnVuY3Rpb24gKG5hbWUsIHNvdXJjZSwgb3duZXJOYW1lKSB7XG4gIHZhciBzb3VyY2VJbmZvID0gJyc7XG4gIGlmIChzb3VyY2UpIHtcbiAgICB2YXIgcGF0aCA9IHNvdXJjZS5maWxlTmFtZTtcbiAgICB2YXIgZmlsZU5hbWUgPSBwYXRoLnJlcGxhY2UoQkVGT1JFX1NMQVNIX1JFLCAnJyk7XG4gICAge1xuICAgICAgLy8gSW4gREVWLCBpbmNsdWRlIGNvZGUgZm9yIGEgY29tbW9uIHNwZWNpYWwgY2FzZTpcbiAgICAgIC8vIHByZWZlciBcImZvbGRlci9pbmRleC5qc1wiIGluc3RlYWQgb2YganVzdCBcImluZGV4LmpzXCIuXG4gICAgICBpZiAoL15pbmRleFxcLi8udGVzdChmaWxlTmFtZSkpIHtcbiAgICAgICAgdmFyIG1hdGNoID0gcGF0aC5tYXRjaChCRUZPUkVfU0xBU0hfUkUpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICB2YXIgcGF0aEJlZm9yZVNsYXNoID0gbWF0Y2hbMV07XG4gICAgICAgICAgaWYgKHBhdGhCZWZvcmVTbGFzaCkge1xuICAgICAgICAgICAgdmFyIGZvbGRlck5hbWUgPSBwYXRoQmVmb3JlU2xhc2gucmVwbGFjZShCRUZPUkVfU0xBU0hfUkUsICcnKTtcbiAgICAgICAgICAgIGZpbGVOYW1lID0gZm9sZGVyTmFtZSArICcvJyArIGZpbGVOYW1lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBzb3VyY2VJbmZvID0gJyAoYXQgJyArIGZpbGVOYW1lICsgJzonICsgc291cmNlLmxpbmVOdW1iZXIgKyAnKSc7XG4gIH0gZWxzZSBpZiAob3duZXJOYW1lKSB7XG4gICAgc291cmNlSW5mbyA9ICcgKGNyZWF0ZWQgYnkgJyArIG93bmVyTmFtZSArICcpJztcbiAgfVxuICByZXR1cm4gJ1xcbiAgICBpbiAnICsgKG5hbWUgfHwgJ1Vua25vd24nKSArIHNvdXJjZUluZm87XG59O1xuXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxudmFyIGhhc1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcjtcblxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSA6IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpIDogMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpIDogMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpIDogMHhlYWNjO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpIDogMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpIDogMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKSA6IDB4ZWFjZTtcblxudmFyIFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuY29uY3VycmVudF9tb2RlJykgOiAweGVhY2Y7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZvcndhcmRfcmVmJykgOiAweGVhZDA7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlJykgOiAweGVhZDE7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubWVtbycpIDogMHhlYWQzO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmxhenknKSA6IDB4ZWFkNDtcblxudmFyIE1BWUJFX0lURVJBVE9SX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLml0ZXJhdG9yO1xudmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InO1xuXG5mdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgaWYgKG1heWJlSXRlcmFibGUgPT09IG51bGwgfHwgdHlwZW9mIG1heWJlSXRlcmFibGUgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgdmFyIG1heWJlSXRlcmF0b3IgPSBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtNQVlCRV9JVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdO1xuICBpZiAodHlwZW9mIG1heWJlSXRlcmF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF5YmVJdGVyYXRvcjtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIFBlbmRpbmcgPSAwO1xudmFyIFJlc29sdmVkID0gMTtcbnZhciBSZWplY3RlZCA9IDI7XG5cbmZ1bmN0aW9uIHJlZmluZVJlc29sdmVkTGF6eUNvbXBvbmVudChsYXp5Q29tcG9uZW50KSB7XG4gIHJldHVybiBsYXp5Q29tcG9uZW50Ll9zdGF0dXMgPT09IFJlc29sdmVkID8gbGF6eUNvbXBvbmVudC5fcmVzdWx0IDogbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0V3JhcHBlZE5hbWUob3V0ZXJUeXBlLCBpbm5lclR5cGUsIHdyYXBwZXJOYW1lKSB7XG4gIHZhciBmdW5jdGlvbk5hbWUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgJyc7XG4gIHJldHVybiBvdXRlclR5cGUuZGlzcGxheU5hbWUgfHwgKGZ1bmN0aW9uTmFtZSAhPT0gJycgPyB3cmFwcGVyTmFtZSArICcoJyArIGZ1bmN0aW9uTmFtZSArICcpJyA6IHdyYXBwZXJOYW1lKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB7XG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICAvLyBIb3N0IHJvb3QsIHRleHQgbm9kZSBvciBqdXN0IGludmFsaWQgdHlwZS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICB7XG4gICAgaWYgKHR5cGVvZiB0eXBlLnRhZyA9PT0gJ251bWJlcicpIHtcbiAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ1JlY2VpdmVkIGFuIHVuZXhwZWN0ZWQgb2JqZWN0IGluIGdldENvbXBvbmVudE5hbWUoKS4gJyArICdUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBudWxsO1xuICB9XG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFOlxuICAgICAgcmV0dXJuICdDb25jdXJyZW50TW9kZSc7XG4gICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgcmV0dXJuICdGcmFnbWVudCc7XG4gICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgIHJldHVybiAnUG9ydGFsJztcbiAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICByZXR1cm4gJ1Byb2ZpbGVyJztcbiAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N0cmljdE1vZGUnO1xuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2UnO1xuICB9XG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICByZXR1cm4gJ0NvbnRleHQuQ29uc3VtZXInO1xuICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICByZXR1cm4gJ0NvbnRleHQuUHJvdmlkZXInO1xuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUodHlwZSwgdHlwZS5yZW5kZXIsICdGb3J3YXJkUmVmJyk7XG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUodHlwZS50eXBlKTtcbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHRoZW5hYmxlID0gdHlwZTtcbiAgICAgICAgICB2YXIgcmVzb2x2ZWRUaGVuYWJsZSA9IHJlZmluZVJlc29sdmVkTGF6eUNvbXBvbmVudCh0aGVuYWJsZSk7XG4gICAgICAgICAgaWYgKHJlc29sdmVkVGhlbmFibGUpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKHJlc29sdmVkVGhlbmFibGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuXG5mdW5jdGlvbiBkZXNjcmliZUZpYmVyKGZpYmVyKSB7XG4gIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgY2FzZSBIb3N0VGV4dDpcbiAgICBjYXNlIEZyYWdtZW50OlxuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgIGNhc2UgQ29udGV4dENvbnN1bWVyOlxuICAgICAgcmV0dXJuICcnO1xuICAgIGRlZmF1bHQ6XG4gICAgICB2YXIgb3duZXIgPSBmaWJlci5fZGVidWdPd25lcjtcbiAgICAgIHZhciBzb3VyY2UgPSBmaWJlci5fZGVidWdTb3VyY2U7XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSk7XG4gICAgICB2YXIgb3duZXJOYW1lID0gbnVsbDtcbiAgICAgIGlmIChvd25lcikge1xuICAgICAgICBvd25lck5hbWUgPSBnZXRDb21wb25lbnROYW1lKG93bmVyLnR5cGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRlc2NyaWJlQ29tcG9uZW50RnJhbWUobmFtZSwgc291cmNlLCBvd25lck5hbWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFN0YWNrQnlGaWJlckluRGV2QW5kUHJvZCh3b3JrSW5Qcm9ncmVzcykge1xuICB2YXIgaW5mbyA9ICcnO1xuICB2YXIgbm9kZSA9IHdvcmtJblByb2dyZXNzO1xuICBkbyB7XG4gICAgaW5mbyArPSBkZXNjcmliZUZpYmVyKG5vZGUpO1xuICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgfSB3aGlsZSAobm9kZSk7XG4gIHJldHVybiBpbmZvO1xufVxuXG52YXIgY3VycmVudCA9IG51bGw7XG52YXIgcGhhc2UgPSBudWxsO1xuXG5mdW5jdGlvbiBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpIHtcbiAge1xuICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIG93bmVyID0gY3VycmVudC5fZGVidWdPd25lcjtcbiAgICBpZiAob3duZXIgIT09IG51bGwgJiYgdHlwZW9mIG93bmVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUob3duZXIudHlwZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50RmliZXJTdGFja0luRGV2KCkge1xuICB7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgLy8gU2FmZSBiZWNhdXNlIGlmIGN1cnJlbnQgZmliZXIgZXhpc3RzLCB3ZSBhcmUgcmVjb25jaWxpbmcsXG4gICAgLy8gYW5kIGl0IGlzIGd1YXJhbnRlZWQgdG8gYmUgdGhlIHdvcmstaW4tcHJvZ3Jlc3MgdmVyc2lvbi5cbiAgICByZXR1cm4gZ2V0U3RhY2tCeUZpYmVySW5EZXZBbmRQcm9kKGN1cnJlbnQpO1xuICB9XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gcmVzZXRDdXJyZW50RmliZXIoKSB7XG4gIHtcbiAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjayA9IG51bGw7XG4gICAgY3VycmVudCA9IG51bGw7XG4gICAgcGhhc2UgPSBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldEN1cnJlbnRGaWJlcihmaWJlcikge1xuICB7XG4gICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRDdXJyZW50U3RhY2sgPSBnZXRDdXJyZW50RmliZXJTdGFja0luRGV2O1xuICAgIGN1cnJlbnQgPSBmaWJlcjtcbiAgICBwaGFzZSA9IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0Q3VycmVudFBoYXNlKGxpZmVDeWNsZVBoYXNlKSB7XG4gIHtcbiAgICBwaGFzZSA9IGxpZmVDeWNsZVBoYXNlO1xuICB9XG59XG5cbi8qKlxuICogU2ltaWxhciB0byBpbnZhcmlhbnQgYnV0IG9ubHkgbG9ncyBhIHdhcm5pbmcgaWYgdGhlIGNvbmRpdGlvbiBpcyBub3QgbWV0LlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBsb2cgaXNzdWVzIGluIGRldmVsb3BtZW50IGVudmlyb25tZW50cyBpbiBjcml0aWNhbFxuICogcGF0aHMuIFJlbW92aW5nIHRoZSBsb2dnaW5nIGNvZGUgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIHdpbGwga2VlcCB0aGVcbiAqIHNhbWUgbG9naWMgYW5kIGZvbGxvdyB0aGUgc2FtZSBjb2RlIHBhdGhzLlxuICovXG5cbnZhciB3YXJuaW5nID0gd2FybmluZ1dpdGhvdXRTdGFjayQxO1xuXG57XG4gIHdhcm5pbmcgPSBmdW5jdGlvbiAoY29uZGl0aW9uLCBmb3JtYXQpIHtcbiAgICBpZiAoY29uZGl0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbiAgICB2YXIgc3RhY2sgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldFN0YWNrQWRkZW5kdW0oKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvd2FybmluZy1hbmQtaW52YXJpYW50LWFyZ3NcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDIgPyBfbGVuIC0gMiA6IDApLCBfa2V5ID0gMjsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMl0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgd2FybmluZ1dpdGhvdXRTdGFjayQxLmFwcGx5KHVuZGVmaW5lZCwgW2ZhbHNlLCBmb3JtYXQgKyAnJXMnXS5jb25jYXQoYXJncywgW3N0YWNrXSkpO1xuICB9O1xufVxuXG52YXIgd2FybmluZyQxID0gd2FybmluZztcblxuLy8gQSByZXNlcnZlZCBhdHRyaWJ1dGUuXG4vLyBJdCBpcyBoYW5kbGVkIGJ5IFJlYWN0IHNlcGFyYXRlbHkgYW5kIHNob3VsZG4ndCBiZSB3cml0dGVuIHRvIHRoZSBET00uXG52YXIgUkVTRVJWRUQgPSAwO1xuXG4vLyBBIHNpbXBsZSBzdHJpbmcgYXR0cmlidXRlLlxuLy8gQXR0cmlidXRlcyB0aGF0IGFyZW4ndCBpbiB0aGUgd2hpdGVsaXN0IGFyZSBwcmVzdW1lZCB0byBoYXZlIHRoaXMgdHlwZS5cbnZhciBTVFJJTkcgPSAxO1xuXG4vLyBBIHN0cmluZyBhdHRyaWJ1dGUgdGhhdCBhY2NlcHRzIGJvb2xlYW5zIGluIFJlYWN0LiBJbiBIVE1MLCB0aGVzZSBhcmUgY2FsbGVkXG4vLyBcImVudW1lcmF0ZWRcIiBhdHRyaWJ1dGVzIHdpdGggXCJ0cnVlXCIgYW5kIFwiZmFsc2VcIiBhcyBwb3NzaWJsZSB2YWx1ZXMuXG4vLyBXaGVuIHRydWUsIGl0IHNob3VsZCBiZSBzZXQgdG8gYSBcInRydWVcIiBzdHJpbmcuXG4vLyBXaGVuIGZhbHNlLCBpdCBzaG91bGQgYmUgc2V0IHRvIGEgXCJmYWxzZVwiIHN0cmluZy5cbnZhciBCT09MRUFOSVNIX1NUUklORyA9IDI7XG5cbi8vIEEgcmVhbCBib29sZWFuIGF0dHJpYnV0ZS5cbi8vIFdoZW4gdHJ1ZSwgaXQgc2hvdWxkIGJlIHByZXNlbnQgKHNldCBlaXRoZXIgdG8gYW4gZW1wdHkgc3RyaW5nIG9yIGl0cyBuYW1lKS5cbi8vIFdoZW4gZmFsc2UsIGl0IHNob3VsZCBiZSBvbWl0dGVkLlxudmFyIEJPT0xFQU4gPSAzO1xuXG4vLyBBbiBhdHRyaWJ1dGUgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIGZsYWcgYXMgd2VsbCBhcyB3aXRoIGEgdmFsdWUuXG4vLyBXaGVuIHRydWUsIGl0IHNob3VsZCBiZSBwcmVzZW50IChzZXQgZWl0aGVyIHRvIGFuIGVtcHR5IHN0cmluZyBvciBpdHMgbmFtZSkuXG4vLyBXaGVuIGZhbHNlLCBpdCBzaG91bGQgYmUgb21pdHRlZC5cbi8vIEZvciBhbnkgb3RoZXIgdmFsdWUsIHNob3VsZCBiZSBwcmVzZW50IHdpdGggdGhhdCB2YWx1ZS5cbnZhciBPVkVSTE9BREVEX0JPT0xFQU4gPSA0O1xuXG4vLyBBbiBhdHRyaWJ1dGUgdGhhdCBtdXN0IGJlIG51bWVyaWMgb3IgcGFyc2UgYXMgYSBudW1lcmljLlxuLy8gV2hlbiBmYWxzeSwgaXQgc2hvdWxkIGJlIHJlbW92ZWQuXG52YXIgTlVNRVJJQyA9IDU7XG5cbi8vIEFuIGF0dHJpYnV0ZSB0aGF0IG11c3QgYmUgcG9zaXRpdmUgbnVtZXJpYyBvciBwYXJzZSBhcyBhIHBvc2l0aXZlIG51bWVyaWMuXG4vLyBXaGVuIGZhbHN5LCBpdCBzaG91bGQgYmUgcmVtb3ZlZC5cbnZhciBQT1NJVElWRV9OVU1FUklDID0gNjtcblxuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xudmFyIEFUVFJJQlVURV9OQU1FX1NUQVJUX0NIQVIgPSAnOkEtWl9hLXpcXFxcdTAwQzAtXFxcXHUwMEQ2XFxcXHUwMEQ4LVxcXFx1MDBGNlxcXFx1MDBGOC1cXFxcdTAyRkZcXFxcdTAzNzAtXFxcXHUwMzdEXFxcXHUwMzdGLVxcXFx1MUZGRlxcXFx1MjAwQy1cXFxcdTIwMERcXFxcdTIwNzAtXFxcXHUyMThGXFxcXHUyQzAwLVxcXFx1MkZFRlxcXFx1MzAwMS1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZGRCc7XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4gKi9cbnZhciBBVFRSSUJVVEVfTkFNRV9DSEFSID0gQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUiArICdcXFxcLS4wLTlcXFxcdTAwQjdcXFxcdTAzMDAtXFxcXHUwMzZGXFxcXHUyMDNGLVxcXFx1MjA0MCc7XG5cblxudmFyIFJPT1RfQVRUUklCVVRFX05BTUUgPSAnZGF0YS1yZWFjdHJvb3QnO1xudmFyIFZBTElEX0FUVFJJQlVURV9OQU1FX1JFR0VYID0gbmV3IFJlZ0V4cCgnXlsnICsgQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUiArICddWycgKyBBVFRSSUJVVEVfTkFNRV9DSEFSICsgJ10qJCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIGlsbGVnYWxBdHRyaWJ1dGVOYW1lQ2FjaGUgPSB7fTtcbnZhciB2YWxpZGF0ZWRBdHRyaWJ1dGVOYW1lQ2FjaGUgPSB7fTtcblxuZnVuY3Rpb24gaXNBdHRyaWJ1dGVOYW1lU2FmZShhdHRyaWJ1dGVOYW1lKSB7XG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbGlkYXRlZEF0dHJpYnV0ZU5hbWVDYWNoZSwgYXR0cmlidXRlTmFtZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChpbGxlZ2FsQXR0cmlidXRlTmFtZUNhY2hlLCBhdHRyaWJ1dGVOYW1lKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoVkFMSURfQVRUUklCVVRFX05BTUVfUkVHRVgudGVzdChhdHRyaWJ1dGVOYW1lKSkge1xuICAgIHZhbGlkYXRlZEF0dHJpYnV0ZU5hbWVDYWNoZVthdHRyaWJ1dGVOYW1lXSA9IHRydWU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWxsZWdhbEF0dHJpYnV0ZU5hbWVDYWNoZVthdHRyaWJ1dGVOYW1lXSA9IHRydWU7XG4gIHtcbiAgICB3YXJuaW5nJDEoZmFsc2UsICdJbnZhbGlkIGF0dHJpYnV0ZSBuYW1lOiBgJXNgJywgYXR0cmlidXRlTmFtZSk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBzaG91bGRJZ25vcmVBdHRyaWJ1dGUobmFtZSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICBpZiAocHJvcGVydHlJbmZvICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHByb3BlcnR5SW5mby50eXBlID09PSBSRVNFUlZFRDtcbiAgfVxuICBpZiAoaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKG5hbWUubGVuZ3RoID4gMiAmJiAobmFtZVswXSA9PT0gJ28nIHx8IG5hbWVbMF0gPT09ICdPJykgJiYgKG5hbWVbMV0gPT09ICduJyB8fCBuYW1lWzFdID09PSAnTicpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBzaG91bGRSZW1vdmVBdHRyaWJ1dGVXaXRoV2FybmluZyhuYW1lLCB2YWx1ZSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICBpZiAocHJvcGVydHlJbmZvICE9PSBudWxsICYmIHByb3BlcnR5SW5mby50eXBlID09PSBSRVNFUlZFRCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAvLyAkRmxvd0lzc3VlIHN5bWJvbCBpcyBwZXJmZWN0bHkgdmFsaWQgaGVyZVxuICAgIGNhc2UgJ3N5bWJvbCc6XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHtcbiAgICAgICAgaWYgKGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wZXJ0eUluZm8gIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gIXByb3BlcnR5SW5mby5hY2NlcHRzQm9vbGVhbnM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHByZWZpeCA9IG5hbWUudG9Mb3dlckNhc2UoKS5zbGljZSgwLCA1KTtcbiAgICAgICAgICByZXR1cm4gcHJlZml4ICE9PSAnZGF0YS0nICYmIHByZWZpeCAhPT0gJ2FyaWEtJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkUmVtb3ZlQXR0cmlidXRlKG5hbWUsIHZhbHVlLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHNob3VsZFJlbW92ZUF0dHJpYnV0ZVdpdGhXYXJuaW5nKG5hbWUsIHZhbHVlLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAocHJvcGVydHlJbmZvICE9PSBudWxsKSB7XG4gICAgc3dpdGNoIChwcm9wZXJ0eUluZm8udHlwZSkge1xuICAgICAgY2FzZSBCT09MRUFOOlxuICAgICAgICByZXR1cm4gIXZhbHVlO1xuICAgICAgY2FzZSBPVkVSTE9BREVEX0JPT0xFQU46XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gZmFsc2U7XG4gICAgICBjYXNlIE5VTUVSSUM6XG4gICAgICAgIHJldHVybiBpc05hTih2YWx1ZSk7XG4gICAgICBjYXNlIFBPU0lUSVZFX05VTUVSSUM6XG4gICAgICAgIHJldHVybiBpc05hTih2YWx1ZSkgfHwgdmFsdWUgPCAxO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldFByb3BlcnR5SW5mbyhuYW1lKSB7XG4gIHJldHVybiBwcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KG5hbWUpID8gcHJvcGVydGllc1tuYW1lXSA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCB0eXBlLCBtdXN0VXNlUHJvcGVydHksIGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZU5hbWVzcGFjZSkge1xuICB0aGlzLmFjY2VwdHNCb29sZWFucyA9IHR5cGUgPT09IEJPT0xFQU5JU0hfU1RSSU5HIHx8IHR5cGUgPT09IEJPT0xFQU4gfHwgdHlwZSA9PT0gT1ZFUkxPQURFRF9CT09MRUFOO1xuICB0aGlzLmF0dHJpYnV0ZU5hbWUgPSBhdHRyaWJ1dGVOYW1lO1xuICB0aGlzLmF0dHJpYnV0ZU5hbWVzcGFjZSA9IGF0dHJpYnV0ZU5hbWVzcGFjZTtcbiAgdGhpcy5tdXN0VXNlUHJvcGVydHkgPSBtdXN0VXNlUHJvcGVydHk7XG4gIHRoaXMucHJvcGVydHlOYW1lID0gbmFtZTtcbiAgdGhpcy50eXBlID0gdHlwZTtcbn1cblxuLy8gV2hlbiBhZGRpbmcgYXR0cmlidXRlcyB0byB0aGlzIGxpc3QsIGJlIHN1cmUgdG8gYWxzbyBhZGQgdGhlbSB0b1xuLy8gdGhlIGBwb3NzaWJsZVN0YW5kYXJkTmFtZXNgIG1vZHVsZSB0byBlbnN1cmUgY2FzaW5nIGFuZCBpbmNvcnJlY3Rcbi8vIG5hbWUgd2FybmluZ3MuXG52YXIgcHJvcGVydGllcyA9IHt9O1xuXG4vLyBUaGVzZSBwcm9wcyBhcmUgcmVzZXJ2ZWQgYnkgUmVhY3QuIFRoZXkgc2hvdWxkbid0IGJlIHdyaXR0ZW4gdG8gdGhlIERPTS5cblsnY2hpbGRyZW4nLCAnZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwnLFxuLy8gVE9ETzogVGhpcyBwcmV2ZW50cyB0aGUgYXNzaWdubWVudCBvZiBkZWZhdWx0VmFsdWUgdG8gcmVndWxhclxuLy8gZWxlbWVudHMgKG5vdCBqdXN0IGlucHV0cykuIE5vdyB0aGF0IFJlYWN0RE9NSW5wdXQgYXNzaWducyB0byB0aGVcbi8vIGRlZmF1bHRWYWx1ZSBwcm9wZXJ0eSAtLSBkbyB3ZSBuZWVkIHRoaXM/XG4nZGVmYXVsdFZhbHVlJywgJ2RlZmF1bHRDaGVja2VkJywgJ2lubmVySFRNTCcsICdzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcnLCAnc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nJywgJ3N0eWxlJ10uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBSRVNFUlZFRCwgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwpO1xufSAvLyBhdHRyaWJ1dGVOYW1lc3BhY2Vcbik7XG5cbi8vIEEgZmV3IFJlYWN0IHN0cmluZyBhdHRyaWJ1dGVzIGhhdmUgYSBkaWZmZXJlbnQgbmFtZS5cbi8vIFRoaXMgaXMgYSBtYXBwaW5nIGZyb20gUmVhY3QgcHJvcCBuYW1lcyB0byB0aGUgYXR0cmlidXRlIG5hbWVzLlxuW1snYWNjZXB0Q2hhcnNldCcsICdhY2NlcHQtY2hhcnNldCddLCBbJ2NsYXNzTmFtZScsICdjbGFzcyddLCBbJ2h0bWxGb3InLCAnZm9yJ10sIFsnaHR0cEVxdWl2JywgJ2h0dHAtZXF1aXYnXV0uZm9yRWFjaChmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgbmFtZSA9IF9yZWZbMF0sXG4gICAgICBhdHRyaWJ1dGVOYW1lID0gX3JlZlsxXTtcblxuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBTVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgYXR0cmlidXRlTmFtZSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsKTtcbn0gLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4pO1xuXG4vLyBUaGVzZSBhcmUgXCJlbnVtZXJhdGVkXCIgSFRNTCBhdHRyaWJ1dGVzIHRoYXQgYWNjZXB0IFwidHJ1ZVwiIGFuZCBcImZhbHNlXCIuXG4vLyBJbiBSZWFjdCwgd2UgbGV0IHVzZXJzIHBhc3MgYHRydWVgIGFuZCBgZmFsc2VgIGV2ZW4gdGhvdWdoIHRlY2huaWNhbGx5XG4vLyB0aGVzZSBhcmVuJ3QgYm9vbGVhbiBhdHRyaWJ1dGVzICh0aGV5IGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MpLlxuWydjb250ZW50RWRpdGFibGUnLCAnZHJhZ2dhYmxlJywgJ3NwZWxsQ2hlY2snLCAndmFsdWUnXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIEJPT0xFQU5JU0hfU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUudG9Mb3dlckNhc2UoKSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsKTtcbn0gLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4pO1xuXG4vLyBUaGVzZSBhcmUgXCJlbnVtZXJhdGVkXCIgU1ZHIGF0dHJpYnV0ZXMgdGhhdCBhY2NlcHQgXCJ0cnVlXCIgYW5kIFwiZmFsc2VcIi5cbi8vIEluIFJlYWN0LCB3ZSBsZXQgdXNlcnMgcGFzcyBgdHJ1ZWAgYW5kIGBmYWxzZWAgZXZlbiB0aG91Z2ggdGVjaG5pY2FsbHlcbi8vIHRoZXNlIGFyZW4ndCBib29sZWFuIGF0dHJpYnV0ZXMgKHRoZXkgYXJlIGNvZXJjZWQgdG8gc3RyaW5ncykuXG4vLyBTaW5jZSB0aGVzZSBhcmUgU1ZHIGF0dHJpYnV0ZXMsIHRoZWlyIGF0dHJpYnV0ZSBuYW1lcyBhcmUgY2FzZS1zZW5zaXRpdmUuXG5bJ2F1dG9SZXZlcnNlJywgJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLCAnZm9jdXNhYmxlJywgJ3ByZXNlcnZlQWxwaGEnXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIEJPT0xFQU5JU0hfU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCk7XG59IC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuKTtcblxuLy8gVGhlc2UgYXJlIEhUTUwgYm9vbGVhbiBhdHRyaWJ1dGVzLlxuWydhbGxvd0Z1bGxTY3JlZW4nLCAnYXN5bmMnLFxuLy8gTm90ZTogdGhlcmUgaXMgYSBzcGVjaWFsIGNhc2UgdGhhdCBwcmV2ZW50cyBpdCBmcm9tIGJlaW5nIHdyaXR0ZW4gdG8gdGhlIERPTVxuLy8gb24gdGhlIGNsaWVudCBzaWRlIGJlY2F1c2UgdGhlIGJyb3dzZXJzIGFyZSBpbmNvbnNpc3RlbnQuIEluc3RlYWQgd2UgY2FsbCBmb2N1cygpLlxuJ2F1dG9Gb2N1cycsICdhdXRvUGxheScsICdjb250cm9scycsICdkZWZhdWx0JywgJ2RlZmVyJywgJ2Rpc2FibGVkJywgJ2Zvcm1Ob1ZhbGlkYXRlJywgJ2hpZGRlbicsICdsb29wJywgJ25vTW9kdWxlJywgJ25vVmFsaWRhdGUnLCAnb3BlbicsICdwbGF5c0lubGluZScsICdyZWFkT25seScsICdyZXF1aXJlZCcsICdyZXZlcnNlZCcsICdzY29wZWQnLCAnc2VhbWxlc3MnLFxuLy8gTWljcm9kYXRhXG4naXRlbVNjb3BlJ10uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBCT09MRUFOLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUudG9Mb3dlckNhc2UoKSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsKTtcbn0gLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4pO1xuXG4vLyBUaGVzZSBhcmUgdGhlIGZldyBSZWFjdCBwcm9wcyB0aGF0IHdlIHNldCBhcyBET00gcHJvcGVydGllc1xuLy8gcmF0aGVyIHRoYW4gYXR0cmlidXRlcy4gVGhlc2UgYXJlIGFsbCBib29sZWFucy5cblsnY2hlY2tlZCcsXG4vLyBOb3RlOiBgb3B0aW9uLnNlbGVjdGVkYCBpcyBub3QgdXBkYXRlZCBpZiBgc2VsZWN0Lm11bHRpcGxlYCBpc1xuLy8gZGlzYWJsZWQgd2l0aCBgcmVtb3ZlQXR0cmlidXRlYC4gV2UgaGF2ZSBzcGVjaWFsIGxvZ2ljIGZvciBoYW5kbGluZyB0aGlzLlxuJ211bHRpcGxlJywgJ211dGVkJywgJ3NlbGVjdGVkJ10uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBCT09MRUFOLCB0cnVlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsKTtcbn0gLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4pO1xuXG4vLyBUaGVzZSBhcmUgSFRNTCBhdHRyaWJ1dGVzIHRoYXQgYXJlIFwib3ZlcmxvYWRlZCBib29sZWFuc1wiOiB0aGV5IGJlaGF2ZSBsaWtlXG4vLyBib29sZWFucywgYnV0IGNhbiBhbHNvIGFjY2VwdCBhIHN0cmluZyB2YWx1ZS5cblsnY2FwdHVyZScsICdkb3dubG9hZCddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgT1ZFUkxPQURFRF9CT09MRUFOLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCk7XG59IC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuKTtcblxuLy8gVGhlc2UgYXJlIEhUTUwgYXR0cmlidXRlcyB0aGF0IG11c3QgYmUgcG9zaXRpdmUgbnVtYmVycy5cblsnY29scycsICdyb3dzJywgJ3NpemUnLCAnc3BhbiddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgUE9TSVRJVkVfTlVNRVJJQywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwpO1xufSAvLyBhdHRyaWJ1dGVOYW1lc3BhY2Vcbik7XG5cbi8vIFRoZXNlIGFyZSBIVE1MIGF0dHJpYnV0ZXMgdGhhdCBtdXN0IGJlIG51bWJlcnMuXG5bJ3Jvd1NwYW4nLCAnc3RhcnQnXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIE5VTUVSSUMsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZS50b0xvd2VyQ2FzZSgpLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwpO1xufSAvLyBhdHRyaWJ1dGVOYW1lc3BhY2Vcbik7XG5cbnZhciBDQU1FTElaRSA9IC9bXFwtXFw6XShbYS16XSkvZztcbnZhciBjYXBpdGFsaXplID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gIHJldHVybiB0b2tlblsxXS50b1VwcGVyQ2FzZSgpO1xufTtcblxuLy8gVGhpcyBpcyBhIGxpc3Qgb2YgYWxsIFNWRyBhdHRyaWJ1dGVzIHRoYXQgbmVlZCBzcGVjaWFsIGNhc2luZywgbmFtZXNwYWNpbmcsXG4vLyBvciBib29sZWFuIHZhbHVlIGFzc2lnbm1lbnQuIFJlZ3VsYXIgYXR0cmlidXRlcyB0aGF0IGp1c3QgYWNjZXB0IHN0cmluZ3Ncbi8vIGFuZCBoYXZlIHRoZSBzYW1lIG5hbWVzIGFyZSBvbWl0dGVkLCBqdXN0IGxpa2UgaW4gdGhlIEhUTUwgd2hpdGVsaXN0LlxuLy8gU29tZSBvZiB0aGVzZSBhdHRyaWJ1dGVzIGNhbiBiZSBoYXJkIHRvIGZpbmQuIFRoaXMgbGlzdCB3YXMgY3JlYXRlZCBieVxuLy8gc2NyYXBwaW5nIHRoZSBNRE4gZG9jdW1lbnRhdGlvbi5cblsnYWNjZW50LWhlaWdodCcsICdhbGlnbm1lbnQtYmFzZWxpbmUnLCAnYXJhYmljLWZvcm0nLCAnYmFzZWxpbmUtc2hpZnQnLCAnY2FwLWhlaWdodCcsICdjbGlwLXBhdGgnLCAnY2xpcC1ydWxlJywgJ2NvbG9yLWludGVycG9sYXRpb24nLCAnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzJywgJ2NvbG9yLXByb2ZpbGUnLCAnY29sb3ItcmVuZGVyaW5nJywgJ2RvbWluYW50LWJhc2VsaW5lJywgJ2VuYWJsZS1iYWNrZ3JvdW5kJywgJ2ZpbGwtb3BhY2l0eScsICdmaWxsLXJ1bGUnLCAnZmxvb2QtY29sb3InLCAnZmxvb2Qtb3BhY2l0eScsICdmb250LWZhbWlseScsICdmb250LXNpemUnLCAnZm9udC1zaXplLWFkanVzdCcsICdmb250LXN0cmV0Y2gnLCAnZm9udC1zdHlsZScsICdmb250LXZhcmlhbnQnLCAnZm9udC13ZWlnaHQnLCAnZ2x5cGgtbmFtZScsICdnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsJywgJ2dseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsJywgJ2hvcml6LWFkdi14JywgJ2hvcml6LW9yaWdpbi14JywgJ2ltYWdlLXJlbmRlcmluZycsICdsZXR0ZXItc3BhY2luZycsICdsaWdodGluZy1jb2xvcicsICdtYXJrZXItZW5kJywgJ21hcmtlci1taWQnLCAnbWFya2VyLXN0YXJ0JywgJ292ZXJsaW5lLXBvc2l0aW9uJywgJ292ZXJsaW5lLXRoaWNrbmVzcycsICdwYWludC1vcmRlcicsICdwYW5vc2UtMScsICdwb2ludGVyLWV2ZW50cycsICdyZW5kZXJpbmctaW50ZW50JywgJ3NoYXBlLXJlbmRlcmluZycsICdzdG9wLWNvbG9yJywgJ3N0b3Atb3BhY2l0eScsICdzdHJpa2V0aHJvdWdoLXBvc2l0aW9uJywgJ3N0cmlrZXRocm91Z2gtdGhpY2tuZXNzJywgJ3N0cm9rZS1kYXNoYXJyYXknLCAnc3Ryb2tlLWRhc2hvZmZzZXQnLCAnc3Ryb2tlLWxpbmVjYXAnLCAnc3Ryb2tlLWxpbmVqb2luJywgJ3N0cm9rZS1taXRlcmxpbWl0JywgJ3N0cm9rZS1vcGFjaXR5JywgJ3N0cm9rZS13aWR0aCcsICd0ZXh0LWFuY2hvcicsICd0ZXh0LWRlY29yYXRpb24nLCAndGV4dC1yZW5kZXJpbmcnLCAndW5kZXJsaW5lLXBvc2l0aW9uJywgJ3VuZGVybGluZS10aGlja25lc3MnLCAndW5pY29kZS1iaWRpJywgJ3VuaWNvZGUtcmFuZ2UnLCAndW5pdHMtcGVyLWVtJywgJ3YtYWxwaGFiZXRpYycsICd2LWhhbmdpbmcnLCAndi1pZGVvZ3JhcGhpYycsICd2LW1hdGhlbWF0aWNhbCcsICd2ZWN0b3ItZWZmZWN0JywgJ3ZlcnQtYWR2LXknLCAndmVydC1vcmlnaW4teCcsICd2ZXJ0LW9yaWdpbi15JywgJ3dvcmQtc3BhY2luZycsICd3cml0aW5nLW1vZGUnLCAneG1sbnM6eGxpbmsnLCAneC1oZWlnaHQnXS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lKSB7XG4gIHZhciBuYW1lID0gYXR0cmlidXRlTmFtZS5yZXBsYWNlKENBTUVMSVpFLCBjYXBpdGFsaXplKTtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUsIG51bGwpO1xufSAvLyBhdHRyaWJ1dGVOYW1lc3BhY2Vcbik7XG5cbi8vIFN0cmluZyBTVkcgYXR0cmlidXRlcyB3aXRoIHRoZSB4bGluayBuYW1lc3BhY2UuXG5bJ3hsaW5rOmFjdHVhdGUnLCAneGxpbms6YXJjcm9sZScsICd4bGluazpocmVmJywgJ3hsaW5rOnJvbGUnLCAneGxpbms6c2hvdycsICd4bGluazp0aXRsZScsICd4bGluazp0eXBlJ10uZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWUucmVwbGFjZShDQU1FTElaRSwgY2FwaXRhbGl6ZSk7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLCAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycpO1xufSk7XG5cbi8vIFN0cmluZyBTVkcgYXR0cmlidXRlcyB3aXRoIHRoZSB4bWwgbmFtZXNwYWNlLlxuWyd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnXS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lKSB7XG4gIHZhciBuYW1lID0gYXR0cmlidXRlTmFtZS5yZXBsYWNlKENBTUVMSVpFLCBjYXBpdGFsaXplKTtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUsICdodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UnKTtcbn0pO1xuXG4vLyBUaGVzZSBhdHRyaWJ1dGUgZXhpc3RzIGJvdGggaW4gSFRNTCBhbmQgU1ZHLlxuLy8gVGhlIGF0dHJpYnV0ZSBuYW1lIGlzIGNhc2Utc2Vuc2l0aXZlIGluIFNWRyBzbyB3ZSBjYW4ndCBqdXN0IHVzZVxuLy8gdGhlIFJlYWN0IG5hbWUgbGlrZSB3ZSBkbyBmb3IgYXR0cmlidXRlcyB0aGF0IGV4aXN0IG9ubHkgaW4gSFRNTC5cblsndGFiSW5kZXgnLCAnY3Jvc3NPcmlnaW4nXS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lKSB7XG4gIHByb3BlcnRpZXNbYXR0cmlidXRlTmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKGF0dHJpYnV0ZU5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLnRvTG93ZXJDYXNlKCksIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCk7XG59IC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuKTtcblxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIGZvciBhIHByb3BlcnR5IG9uIGEgbm9kZS4gT25seSB1c2VkIGluIERFViBmb3IgU1NSIHZhbGlkYXRpb24uXG4gKiBUaGUgXCJleHBlY3RlZFwiIGFyZ3VtZW50IGlzIHVzZWQgYXMgYSBoaW50IG9mIHdoYXQgdGhlIGV4cGVjdGVkIHZhbHVlIGlzLlxuICogU29tZSBwcm9wZXJ0aWVzIGhhdmUgbXVsdGlwbGUgZXF1aXZhbGVudCB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlRm9yUHJvcGVydHkobm9kZSwgbmFtZSwgZXhwZWN0ZWQsIHByb3BlcnR5SW5mbykge1xuICB7XG4gICAgaWYgKHByb3BlcnR5SW5mby5tdXN0VXNlUHJvcGVydHkpIHtcbiAgICAgIHZhciBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eUluZm8ucHJvcGVydHlOYW1lO1xuXG4gICAgICByZXR1cm4gbm9kZVtwcm9wZXJ0eU5hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgYXR0cmlidXRlTmFtZSA9IHByb3BlcnR5SW5mby5hdHRyaWJ1dGVOYW1lO1xuXG4gICAgICB2YXIgc3RyaW5nVmFsdWUgPSBudWxsO1xuXG4gICAgICBpZiAocHJvcGVydHlJbmZvLnR5cGUgPT09IE9WRVJMT0FERURfQk9PTEVBTikge1xuICAgICAgICBpZiAobm9kZS5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSkpIHtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgICAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNob3VsZFJlbW92ZUF0dHJpYnV0ZShuYW1lLCBleHBlY3RlZCwgcHJvcGVydHlJbmZvLCBmYWxzZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHZhbHVlID09PSAnJyArIGV4cGVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhwZWN0ZWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChub2RlLmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSkge1xuICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlQXR0cmlidXRlKG5hbWUsIGV4cGVjdGVkLCBwcm9wZXJ0eUluZm8sIGZhbHNlKSkge1xuICAgICAgICAgIC8vIFdlIGhhZCBhbiBhdHRyaWJ1dGUgYnV0IHNob3VsZG4ndCBoYXZlIGhhZCBvbmUsIHNvIHJlYWQgaXRcbiAgICAgICAgICAvLyBmb3IgdGhlIGVycm9yIG1lc3NhZ2UuXG4gICAgICAgICAgcmV0dXJuIG5vZGUuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wZXJ0eUluZm8udHlwZSA9PT0gQk9PTEVBTikge1xuICAgICAgICAgIC8vIElmIHRoaXMgd2FzIGEgYm9vbGVhbiwgaXQgZG9lc24ndCBtYXR0ZXIgd2hhdCB0aGUgdmFsdWUgaXNcbiAgICAgICAgICAvLyB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgaXQgaXMgdGhlIHNhbWUgYXMgdGhlIGV4cGVjdGVkLlxuICAgICAgICAgIHJldHVybiBleHBlY3RlZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBFdmVuIGlmIHRoaXMgcHJvcGVydHkgdXNlcyBhIG5hbWVzcGFjZSB3ZSB1c2UgZ2V0QXR0cmlidXRlXG4gICAgICAgIC8vIGJlY2F1c2Ugd2UgYXNzdW1lIGl0cyBuYW1lc3BhY2VkIG5hbWUgaXMgdGhlIHNhbWUgYXMgb3VyIGNvbmZpZy5cbiAgICAgICAgLy8gVG8gdXNlIGdldEF0dHJpYnV0ZU5TIHdlIG5lZWQgdGhlIGxvY2FsIG5hbWUgd2hpY2ggd2UgZG9uJ3QgaGF2ZVxuICAgICAgICAvLyBpbiBvdXIgY29uZmlnIGF0bS5cbiAgICAgICAgc3RyaW5nVmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNob3VsZFJlbW92ZUF0dHJpYnV0ZShuYW1lLCBleHBlY3RlZCwgcHJvcGVydHlJbmZvLCBmYWxzZSkpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlID09PSBudWxsID8gZXhwZWN0ZWQgOiBzdHJpbmdWYWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoc3RyaW5nVmFsdWUgPT09ICcnICsgZXhwZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEdldCB0aGUgdmFsdWUgZm9yIGEgYXR0cmlidXRlIG9uIGEgbm9kZS4gT25seSB1c2VkIGluIERFViBmb3IgU1NSIHZhbGlkYXRpb24uXG4gKiBUaGUgdGhpcmQgYXJndW1lbnQgaXMgdXNlZCBhcyBhIGhpbnQgb2Ygd2hhdCB0aGUgZXhwZWN0ZWQgdmFsdWUgaXMuIFNvbWVcbiAqIGF0dHJpYnV0ZXMgaGF2ZSBtdWx0aXBsZSBlcXVpdmFsZW50IHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWVGb3JBdHRyaWJ1dGUobm9kZSwgbmFtZSwgZXhwZWN0ZWQpIHtcbiAge1xuICAgIGlmICghaXNBdHRyaWJ1dGVOYW1lU2FmZShuYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIW5vZGUuaGFzQXR0cmlidXRlKG5hbWUpKSB7XG4gICAgICByZXR1cm4gZXhwZWN0ZWQgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG51bGw7XG4gICAgfVxuICAgIHZhciB2YWx1ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICAgIGlmICh2YWx1ZSA9PT0gJycgKyBleHBlY3RlZCkge1xuICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBTZXRzIHRoZSB2YWx1ZSBmb3IgYSBwcm9wZXJ0eSBvbiBhIG5vZGUuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICovXG5mdW5jdGlvbiBzZXRWYWx1ZUZvclByb3BlcnR5KG5vZGUsIG5hbWUsIHZhbHVlLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICB2YXIgcHJvcGVydHlJbmZvID0gZ2V0UHJvcGVydHlJbmZvKG5hbWUpO1xuICBpZiAoc2hvdWxkSWdub3JlQXR0cmlidXRlKG5hbWUsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChzaG91bGRSZW1vdmVBdHRyaWJ1dGUobmFtZSwgdmFsdWUsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpKSB7XG4gICAgdmFsdWUgPSBudWxsO1xuICB9XG4gIC8vIElmIHRoZSBwcm9wIGlzbid0IGluIHRoZSBzcGVjaWFsIGxpc3QsIHRyZWF0IGl0IGFzIGEgc2ltcGxlIGF0dHJpYnV0ZS5cbiAgaWYgKGlzQ3VzdG9tQ29tcG9uZW50VGFnIHx8IHByb3BlcnR5SW5mbyA9PT0gbnVsbCkge1xuICAgIGlmIChpc0F0dHJpYnV0ZU5hbWVTYWZlKG5hbWUpKSB7XG4gICAgICB2YXIgX2F0dHJpYnV0ZU5hbWUgPSBuYW1lO1xuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKF9hdHRyaWJ1dGVOYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKF9hdHRyaWJ1dGVOYW1lLCAnJyArIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBtdXN0VXNlUHJvcGVydHkgPSBwcm9wZXJ0eUluZm8ubXVzdFVzZVByb3BlcnR5O1xuXG4gIGlmIChtdXN0VXNlUHJvcGVydHkpIHtcbiAgICB2YXIgcHJvcGVydHlOYW1lID0gcHJvcGVydHlJbmZvLnByb3BlcnR5TmFtZTtcblxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgdmFyIHR5cGUgPSBwcm9wZXJ0eUluZm8udHlwZTtcblxuICAgICAgbm9kZVtwcm9wZXJ0eU5hbWVdID0gdHlwZSA9PT0gQk9PTEVBTiA/IGZhbHNlIDogJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENvbnRyYXJ5IHRvIGBzZXRBdHRyaWJ1dGVgLCBvYmplY3QgcHJvcGVydGllcyBhcmUgcHJvcGVybHlcbiAgICAgIC8vIGB0b1N0cmluZ2BlZCBieSBJRTgvOS5cbiAgICAgIG5vZGVbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbiAgLy8gVGhlIHJlc3QgYXJlIHRyZWF0ZWQgYXMgYXR0cmlidXRlcyB3aXRoIHNwZWNpYWwgY2FzZXMuXG4gIHZhciBhdHRyaWJ1dGVOYW1lID0gcHJvcGVydHlJbmZvLmF0dHJpYnV0ZU5hbWUsXG4gICAgICBhdHRyaWJ1dGVOYW1lc3BhY2UgPSBwcm9wZXJ0eUluZm8uYXR0cmlidXRlTmFtZXNwYWNlO1xuXG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICB9IGVsc2Uge1xuICAgIHZhciBfdHlwZSA9IHByb3BlcnR5SW5mby50eXBlO1xuXG4gICAgdmFyIGF0dHJpYnV0ZVZhbHVlID0gdm9pZCAwO1xuICAgIGlmIChfdHlwZSA9PT0gQk9PTEVBTiB8fCBfdHlwZSA9PT0gT1ZFUkxPQURFRF9CT09MRUFOICYmIHZhbHVlID09PSB0cnVlKSB7XG4gICAgICBhdHRyaWJ1dGVWYWx1ZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBgc2V0QXR0cmlidXRlYCB3aXRoIG9iamVjdHMgYmVjb21lcyBvbmx5IGBbb2JqZWN0XWAgaW4gSUU4LzksXG4gICAgICAvLyAoJycgKyB2YWx1ZSkgbWFrZXMgaXQgb3V0cHV0IHRoZSBjb3JyZWN0IHRvU3RyaW5nKCktdmFsdWUuXG4gICAgICBhdHRyaWJ1dGVWYWx1ZSA9ICcnICsgdmFsdWU7XG4gICAgfVxuICAgIGlmIChhdHRyaWJ1dGVOYW1lc3BhY2UpIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlTlMoYXR0cmlidXRlTmFtZXNwYWNlLCBhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZVZhbHVlKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gRmxvdyBkb2VzIG5vdCBhbGxvdyBzdHJpbmcgY29uY2F0ZW5hdGlvbiBvZiBtb3N0IG5vbi1zdHJpbmcgdHlwZXMuIFRvIHdvcmtcbi8vIGFyb3VuZCB0aGlzIGxpbWl0YXRpb24sIHdlIHVzZSBhbiBvcGFxdWUgdHlwZSB0aGF0IGNhbiBvbmx5IGJlIG9idGFpbmVkIGJ5XG4vLyBwYXNzaW5nIHRoZSB2YWx1ZSB0aHJvdWdoIGdldFRvU3RyaW5nVmFsdWUgZmlyc3QuXG5mdW5jdGlvbiB0b1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gJycgKyB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gZ2V0VG9TdHJpbmdWYWx1ZSh2YWx1ZSkge1xuICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIGZ1bmN0aW9uLCBzeW1ib2wgYXJlIGFzc2lnbmVkIGFzIGVtcHR5IHN0cmluZ3NcbiAgICAgIHJldHVybiAnJztcbiAgfVxufVxuXG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxID0gbnVsbDtcblxudmFyIFJlYWN0Q29udHJvbGxlZFZhbHVlUHJvcFR5cGVzID0ge1xuICBjaGVja1Byb3BUeXBlczogbnVsbFxufTtcblxue1xuICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuXG4gIHZhciBoYXNSZWFkT25seVZhbHVlID0ge1xuICAgIGJ1dHRvbjogdHJ1ZSxcbiAgICBjaGVja2JveDogdHJ1ZSxcbiAgICBpbWFnZTogdHJ1ZSxcbiAgICBoaWRkZW46IHRydWUsXG4gICAgcmFkaW86IHRydWUsXG4gICAgcmVzZXQ6IHRydWUsXG4gICAgc3VibWl0OiB0cnVlXG4gIH07XG5cbiAgdmFyIHByb3BUeXBlcyA9IHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgICAgaWYgKGhhc1JlYWRPbmx5VmFsdWVbcHJvcHMudHlwZV0gfHwgcHJvcHMub25DaGFuZ2UgfHwgcHJvcHMucmVhZE9ubHkgfHwgcHJvcHMuZGlzYWJsZWQgfHwgcHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IEVycm9yKCdZb3UgcHJvdmlkZWQgYSBgdmFsdWVgIHByb3AgdG8gYSBmb3JtIGZpZWxkIHdpdGhvdXQgYW4gJyArICdgb25DaGFuZ2VgIGhhbmRsZXIuIFRoaXMgd2lsbCByZW5kZXIgYSByZWFkLW9ubHkgZmllbGQuIElmICcgKyAndGhlIGZpZWxkIHNob3VsZCBiZSBtdXRhYmxlIHVzZSBgZGVmYXVsdFZhbHVlYC4gT3RoZXJ3aXNlLCAnICsgJ3NldCBlaXRoZXIgYG9uQ2hhbmdlYCBvciBgcmVhZE9ubHlgLicpO1xuICAgIH0sXG4gICAgY2hlY2tlZDogZnVuY3Rpb24gKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgICAgaWYgKHByb3BzLm9uQ2hhbmdlIHx8IHByb3BzLnJlYWRPbmx5IHx8IHByb3BzLmRpc2FibGVkIHx8IHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBFcnJvcignWW91IHByb3ZpZGVkIGEgYGNoZWNrZWRgIHByb3AgdG8gYSBmb3JtIGZpZWxkIHdpdGhvdXQgYW4gJyArICdgb25DaGFuZ2VgIGhhbmRsZXIuIFRoaXMgd2lsbCByZW5kZXIgYSByZWFkLW9ubHkgZmllbGQuIElmICcgKyAndGhlIGZpZWxkIHNob3VsZCBiZSBtdXRhYmxlIHVzZSBgZGVmYXVsdENoZWNrZWRgLiBPdGhlcndpc2UsICcgKyAnc2V0IGVpdGhlciBgb25DaGFuZ2VgIG9yIGByZWFkT25seWAuJyk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBQcm92aWRlIGEgbGlua2VkIGB2YWx1ZWAgYXR0cmlidXRlIGZvciBjb250cm9sbGVkIGZvcm1zLiBZb3Ugc2hvdWxkIG5vdCB1c2VcbiAgICogdGhpcyBvdXRzaWRlIG9mIHRoZSBSZWFjdERPTSBjb250cm9sbGVkIGZvcm0gY29tcG9uZW50cy5cbiAgICovXG4gIFJlYWN0Q29udHJvbGxlZFZhbHVlUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gZnVuY3Rpb24gKHRhZ05hbWUsIHByb3BzKSB7XG4gICAgY2hlY2tQcm9wVHlwZXMocHJvcFR5cGVzLCBwcm9wcywgJ3Byb3AnLCB0YWdOYW1lLCBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuZ2V0U3RhY2tBZGRlbmR1bSk7XG4gIH07XG59XG5cbnZhciBlbmFibGVVc2VyVGltaW5nQVBJID0gdHJ1ZTtcblxuLy8gSGVscHMgaWRlbnRpZnkgc2lkZSBlZmZlY3RzIGluIGJlZ2luLXBoYXNlIGxpZmVjeWNsZSBob29rcyBhbmQgc2V0U3RhdGUgcmVkdWNlcnM6XG52YXIgZGVidWdSZW5kZXJQaGFzZVNpZGVFZmZlY3RzID0gZmFsc2U7XG5cbi8vIEluIHNvbWUgY2FzZXMsIFN0cmljdE1vZGUgc2hvdWxkIGFsc28gZG91YmxlLXJlbmRlciBsaWZlY3ljbGVzLlxuLy8gVGhpcyBjYW4gYmUgY29uZnVzaW5nIGZvciB0ZXN0cyB0aG91Z2gsXG4vLyBBbmQgaXQgY2FuIGJlIGJhZCBmb3IgcGVyZm9ybWFuY2UgaW4gcHJvZHVjdGlvbi5cbi8vIFRoaXMgZmVhdHVyZSBmbGFnIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIGJlaGF2aW9yOlxudmFyIGRlYnVnUmVuZGVyUGhhc2VTaWRlRWZmZWN0c0ZvclN0cmljdE1vZGUgPSB0cnVlO1xuXG4vLyBUbyBwcmVzZXJ2ZSB0aGUgXCJQYXVzZSBvbiBjYXVnaHQgZXhjZXB0aW9uc1wiIGJlaGF2aW9yIG9mIHRoZSBkZWJ1Z2dlciwgd2Vcbi8vIHJlcGxheSB0aGUgYmVnaW4gcGhhc2Ugb2YgYSBmYWlsZWQgY29tcG9uZW50IGluc2lkZSBpbnZva2VHdWFyZGVkQ2FsbGJhY2suXG52YXIgcmVwbGF5RmFpbGVkVW5pdE9mV29ya1dpdGhJbnZva2VHdWFyZGVkQ2FsbGJhY2sgPSB0cnVlO1xuXG4vLyBXYXJuIGFib3V0IGRlcHJlY2F0ZWQsIGFzeW5jLXVuc2FmZSBsaWZlY3ljbGVzOyByZWxhdGVzIHRvIFJGQyAjNjpcbnZhciB3YXJuQWJvdXREZXByZWNhdGVkTGlmZWN5Y2xlcyA9IGZhbHNlO1xuXG4vLyBHYXRoZXIgYWR2YW5jZWQgdGltaW5nIG1ldHJpY3MgZm9yIFByb2ZpbGVyIHN1YnRyZWVzLlxudmFyIGVuYWJsZVByb2ZpbGVyVGltZXIgPSB0cnVlO1xuXG4vLyBUcmFjZSB3aGljaCBpbnRlcmFjdGlvbnMgdHJpZ2dlciBlYWNoIGNvbW1pdC5cbnZhciBlbmFibGVTY2hlZHVsZXJUcmFjaW5nID0gdHJ1ZTtcblxuLy8gT25seSB1c2VkIGluIHd3dyBidWlsZHMuXG52YXIgZW5hYmxlU3VzcGVuc2VTZXJ2ZXJSZW5kZXJlciA9IGZhbHNlOyAvLyBUT0RPOiB0cnVlPyBIZXJlIGl0IG1pZ2h0IGp1c3QgYmUgZmFsc2UuXG5cbi8vIE9ubHkgdXNlZCBpbiB3d3cgYnVpbGRzLlxuXG5cbi8vIE9ubHkgdXNlZCBpbiB3d3cgYnVpbGRzLlxuXG5cbi8vIFJlYWN0IEZpcmU6IHByZXZlbnQgdGhlIHZhbHVlIGFuZCBjaGVja2VkIGF0dHJpYnV0ZXMgZnJvbSBzeW5jaW5nXG4vLyB3aXRoIHRoZWlyIHJlbGF0ZWQgRE9NIHByb3BlcnRpZXNcbnZhciBkaXNhYmxlSW5wdXRBdHRyaWJ1dGVTeW5jaW5nID0gZmFsc2U7XG5cbi8vIFRoZXNlIEFQSXMgd2lsbCBubyBsb25nZXIgYmUgXCJ1bnN0YWJsZVwiIGluIHRoZSB1cGNvbWluZyAxNi43IHJlbGVhc2UsXG4vLyBDb250cm9sIHRoaXMgYmVoYXZpb3Igd2l0aCBhIGZsYWcgdG8gc3VwcG9ydCAxNi42IG1pbm9yIHJlbGVhc2VzIGluIHRoZSBtZWFud2hpbGUuXG52YXIgZW5hYmxlU3RhYmxlQ29uY3VycmVudE1vZGVBUElzID0gZmFsc2U7XG5cbnZhciB3YXJuQWJvdXRTaG9ydGhhbmRQcm9wZXJ0eUNvbGxpc2lvbiA9IGZhbHNlO1xuXG4vLyBUT0RPOiBkaXJlY3QgaW1wb3J0cyBsaWtlIHNvbWUtcGFja2FnZS9zcmMvKiBhcmUgYmFkLiBGaXggbWUuXG52YXIgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlID0gZmFsc2U7XG52YXIgZGlkV2FybkNoZWNrZWREZWZhdWx0Q2hlY2tlZCA9IGZhbHNlO1xudmFyIGRpZFdhcm5Db250cm9sbGVkVG9VbmNvbnRyb2xsZWQgPSBmYWxzZTtcbnZhciBkaWRXYXJuVW5jb250cm9sbGVkVG9Db250cm9sbGVkID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGlzQ29udHJvbGxlZChwcm9wcykge1xuICB2YXIgdXNlc0NoZWNrZWQgPSBwcm9wcy50eXBlID09PSAnY2hlY2tib3gnIHx8IHByb3BzLnR5cGUgPT09ICdyYWRpbyc7XG4gIHJldHVybiB1c2VzQ2hlY2tlZCA/IHByb3BzLmNoZWNrZWQgIT0gbnVsbCA6IHByb3BzLnZhbHVlICE9IG51bGw7XG59XG5cbi8qKlxuICogSW1wbGVtZW50cyBhbiA8aW5wdXQ+IGhvc3QgY29tcG9uZW50IHRoYXQgYWxsb3dzIHNldHRpbmcgdGhlc2Ugb3B0aW9uYWxcbiAqIHByb3BzOiBgY2hlY2tlZGAsIGB2YWx1ZWAsIGBkZWZhdWx0Q2hlY2tlZGAsIGFuZCBgZGVmYXVsdFZhbHVlYC5cbiAqXG4gKiBJZiBgY2hlY2tlZGAgb3IgYHZhbHVlYCBhcmUgbm90IHN1cHBsaWVkIChvciBudWxsL3VuZGVmaW5lZCksIHVzZXIgYWN0aW9uc1xuICogdGhhdCBhZmZlY3QgdGhlIGNoZWNrZWQgc3RhdGUgb3IgdmFsdWUgd2lsbCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuXG4gKlxuICogSWYgdGhleSBhcmUgc3VwcGxpZWQgKGFuZCBub3QgbnVsbC91bmRlZmluZWQpLCB0aGUgcmVuZGVyZWQgZWxlbWVudCB3aWxsIG5vdFxuICogdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LiBJbnN0ZWFkLCB0aGUgcHJvcHMgbXVzdCBjaGFuZ2UgaW4gb3JkZXIgZm9yXG4gKiB0aGUgcmVuZGVyZWQgZWxlbWVudCB0byBiZSB1cGRhdGVkLlxuICpcbiAqIFRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGwgYmUgaW5pdGlhbGl6ZWQgYXMgdW5jaGVja2VkIChvciBgZGVmYXVsdENoZWNrZWRgKVxuICogd2l0aCBhbiBlbXB0eSB2YWx1ZSAob3IgYGRlZmF1bHRWYWx1ZWApLlxuICpcbiAqIFNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIxMDI1L3RoZS1pbnB1dC1lbGVtZW50Lmh0bWxcbiAqL1xuXG5mdW5jdGlvbiBnZXRIb3N0UHJvcHMoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB2YXIgY2hlY2tlZCA9IHByb3BzLmNoZWNrZWQ7XG5cbiAgdmFyIGhvc3RQcm9wcyA9IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgZGVmYXVsdENoZWNrZWQ6IHVuZGVmaW5lZCxcbiAgICBkZWZhdWx0VmFsdWU6IHVuZGVmaW5lZCxcbiAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgIGNoZWNrZWQ6IGNoZWNrZWQgIT0gbnVsbCA/IGNoZWNrZWQgOiBub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbENoZWNrZWRcbiAgfSk7XG5cbiAgcmV0dXJuIGhvc3RQcm9wcztcbn1cblxuZnVuY3Rpb24gaW5pdFdyYXBwZXJTdGF0ZShlbGVtZW50LCBwcm9wcykge1xuICB7XG4gICAgUmVhY3RDb250cm9sbGVkVmFsdWVQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoJ2lucHV0JywgcHJvcHMpO1xuXG4gICAgaWYgKHByb3BzLmNoZWNrZWQgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5kZWZhdWx0Q2hlY2tlZCAhPT0gdW5kZWZpbmVkICYmICFkaWRXYXJuQ2hlY2tlZERlZmF1bHRDaGVja2VkKSB7XG4gICAgICB3YXJuaW5nJDEoZmFsc2UsICclcyBjb250YWlucyBhbiBpbnB1dCBvZiB0eXBlICVzIHdpdGggYm90aCBjaGVja2VkIGFuZCBkZWZhdWx0Q2hlY2tlZCBwcm9wcy4gJyArICdJbnB1dCBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAnICsgJyhzcGVjaWZ5IGVpdGhlciB0aGUgY2hlY2tlZCBwcm9wLCBvciB0aGUgZGVmYXVsdENoZWNrZWQgcHJvcCwgYnV0IG5vdCAnICsgJ2JvdGgpLiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIGlucHV0ICcgKyAnZWxlbWVudCBhbmQgcmVtb3ZlIG9uZSBvZiB0aGVzZSBwcm9wcy4gTW9yZSBpbmZvOiAnICsgJ2h0dHBzOi8vZmIubWUvcmVhY3QtY29udHJvbGxlZC1jb21wb25lbnRzJywgZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKSB8fCAnQSBjb21wb25lbnQnLCBwcm9wcy50eXBlKTtcbiAgICAgIGRpZFdhcm5DaGVja2VkRGVmYXVsdENoZWNrZWQgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAocHJvcHMudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlKSB7XG4gICAgICB3YXJuaW5nJDEoZmFsc2UsICclcyBjb250YWlucyBhbiBpbnB1dCBvZiB0eXBlICVzIHdpdGggYm90aCB2YWx1ZSBhbmQgZGVmYXVsdFZhbHVlIHByb3BzLiAnICsgJ0lucHV0IGVsZW1lbnRzIG11c3QgYmUgZWl0aGVyIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkICcgKyAnKHNwZWNpZnkgZWl0aGVyIHRoZSB2YWx1ZSBwcm9wLCBvciB0aGUgZGVmYXVsdFZhbHVlIHByb3AsIGJ1dCBub3QgJyArICdib3RoKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCAnICsgJ2VsZW1lbnQgYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogJyArICdodHRwczovL2ZiLm1lL3JlYWN0LWNvbnRyb2xsZWQtY29tcG9uZW50cycsIGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCkgfHwgJ0EgY29tcG9uZW50JywgcHJvcHMudHlwZSk7XG4gICAgICBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIGRlZmF1bHRWYWx1ZSA9IHByb3BzLmRlZmF1bHRWYWx1ZSA9PSBudWxsID8gJycgOiBwcm9wcy5kZWZhdWx0VmFsdWU7XG5cbiAgbm9kZS5fd3JhcHBlclN0YXRlID0ge1xuICAgIGluaXRpYWxDaGVja2VkOiBwcm9wcy5jaGVja2VkICE9IG51bGwgPyBwcm9wcy5jaGVja2VkIDogcHJvcHMuZGVmYXVsdENoZWNrZWQsXG4gICAgaW5pdGlhbFZhbHVlOiBnZXRUb1N0cmluZ1ZhbHVlKHByb3BzLnZhbHVlICE9IG51bGwgPyBwcm9wcy52YWx1ZSA6IGRlZmF1bHRWYWx1ZSksXG4gICAgY29udHJvbGxlZDogaXNDb250cm9sbGVkKHByb3BzKVxuICB9O1xufVxuXG5mdW5jdGlvbiB1cGRhdGVDaGVja2VkKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIGNoZWNrZWQgPSBwcm9wcy5jaGVja2VkO1xuICBpZiAoY2hlY2tlZCAhPSBudWxsKSB7XG4gICAgc2V0VmFsdWVGb3JQcm9wZXJ0eShub2RlLCAnY2hlY2tlZCcsIGNoZWNrZWQsIGZhbHNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVXcmFwcGVyKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAge1xuICAgIHZhciBfY29udHJvbGxlZCA9IGlzQ29udHJvbGxlZChwcm9wcyk7XG5cbiAgICBpZiAoIW5vZGUuX3dyYXBwZXJTdGF0ZS5jb250cm9sbGVkICYmIF9jb250cm9sbGVkICYmICFkaWRXYXJuVW5jb250cm9sbGVkVG9Db250cm9sbGVkKSB7XG4gICAgICB3YXJuaW5nJDEoZmFsc2UsICdBIGNvbXBvbmVudCBpcyBjaGFuZ2luZyBhbiB1bmNvbnRyb2xsZWQgaW5wdXQgb2YgdHlwZSAlcyB0byBiZSBjb250cm9sbGVkLiAnICsgJ0lucHV0IGVsZW1lbnRzIHNob3VsZCBub3Qgc3dpdGNoIGZyb20gdW5jb250cm9sbGVkIHRvIGNvbnRyb2xsZWQgKG9yIHZpY2UgdmVyc2EpLiAnICsgJ0RlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgaW5wdXQgJyArICdlbGVtZW50IGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNvbXBvbmVudC4gTW9yZSBpbmZvOiBodHRwczovL2ZiLm1lL3JlYWN0LWNvbnRyb2xsZWQtY29tcG9uZW50cycsIHByb3BzLnR5cGUpO1xuICAgICAgZGlkV2FyblVuY29udHJvbGxlZFRvQ29udHJvbGxlZCA9IHRydWU7XG4gICAgfVxuICAgIGlmIChub2RlLl93cmFwcGVyU3RhdGUuY29udHJvbGxlZCAmJiAhX2NvbnRyb2xsZWQgJiYgIWRpZFdhcm5Db250cm9sbGVkVG9VbmNvbnRyb2xsZWQpIHtcbiAgICAgIHdhcm5pbmckMShmYWxzZSwgJ0EgY29tcG9uZW50IGlzIGNoYW5naW5nIGEgY29udHJvbGxlZCBpbnB1dCBvZiB0eXBlICVzIHRvIGJlIHVuY29udHJvbGxlZC4gJyArICdJbnB1dCBlbGVtZW50cyBzaG91bGQgbm90IHN3aXRjaCBmcm9tIGNvbnRyb2xsZWQgdG8gdW5jb250cm9sbGVkIChvciB2aWNlIHZlcnNhKS4gJyArICdEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIGlucHV0ICcgKyAnZWxlbWVudCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb21wb25lbnQuIE1vcmUgaW5mbzogaHR0cHM6Ly9mYi5tZS9yZWFjdC1jb250cm9sbGVkLWNvbXBvbmVudHMnLCBwcm9wcy50eXBlKTtcbiAgICAgIGRpZFdhcm5Db250cm9sbGVkVG9VbmNvbnRyb2xsZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUNoZWNrZWQoZWxlbWVudCwgcHJvcHMpO1xuXG4gIHZhciB2YWx1ZSA9IGdldFRvU3RyaW5nVmFsdWUocHJvcHMudmFsdWUpO1xuICB2YXIgdHlwZSA9IHByb3BzLnR5cGU7XG5cbiAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICBpZiAodHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gMCAmJiBub2RlLnZhbHVlID09PSAnJyB8fFxuICAgICAgLy8gV2UgZXhwbGljaXRseSB3YW50IHRvIGNvZXJjZSB0byBudW1iZXIgaGVyZSBpZiBwb3NzaWJsZS5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgbm9kZS52YWx1ZSAhPSB2YWx1ZSkge1xuICAgICAgICBub2RlLnZhbHVlID0gdG9TdHJpbmcodmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobm9kZS52YWx1ZSAhPT0gdG9TdHJpbmcodmFsdWUpKSB7XG4gICAgICBub2RlLnZhbHVlID0gdG9TdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlID09PSAnc3VibWl0JyB8fCB0eXBlID09PSAncmVzZXQnKSB7XG4gICAgLy8gU3VibWl0L3Jlc2V0IGlucHV0cyBuZWVkIHRoZSBhdHRyaWJ1dGUgcmVtb3ZlZCBjb21wbGV0ZWx5IHRvIGF2b2lkXG4gICAgLy8gYmxhbmstdGV4dCBidXR0b25zLlxuICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKCd2YWx1ZScpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChkaXNhYmxlSW5wdXRBdHRyaWJ1dGVTeW5jaW5nKSB7XG4gICAgLy8gV2hlbiBub3Qgc3luY2luZyB0aGUgdmFsdWUgYXR0cmlidXRlLCBSZWFjdCBvbmx5IGFzc2lnbnMgYSBuZXcgdmFsdWVcbiAgICAvLyB3aGVuZXZlciB0aGUgZGVmYXVsdFZhbHVlIFJlYWN0IHByb3AgaGFzIGNoYW5nZWQuIFdoZW4gbm90IHByZXNlbnQsXG4gICAgLy8gUmVhY3QgZG9lcyBub3RoaW5nXG4gICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KCdkZWZhdWx0VmFsdWUnKSkge1xuICAgICAgc2V0RGVmYXVsdFZhbHVlKG5vZGUsIHByb3BzLnR5cGUsIGdldFRvU3RyaW5nVmFsdWUocHJvcHMuZGVmYXVsdFZhbHVlKSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFdoZW4gc3luY2luZyB0aGUgdmFsdWUgYXR0cmlidXRlLCB0aGUgdmFsdWUgY29tZXMgZnJvbSBhIGNhc2NhZGUgb2ZcbiAgICAvLyBwcm9wZXJ0aWVzOlxuICAgIC8vICAxLiBUaGUgdmFsdWUgUmVhY3QgcHJvcGVydHlcbiAgICAvLyAgMi4gVGhlIGRlZmF1bHRWYWx1ZSBSZWFjdCBwcm9wZXJ0eVxuICAgIC8vICAzLiBPdGhlcndpc2UgdGhlcmUgc2hvdWxkIGJlIG5vIGNoYW5nZVxuICAgIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eSgndmFsdWUnKSkge1xuICAgICAgc2V0RGVmYXVsdFZhbHVlKG5vZGUsIHByb3BzLnR5cGUsIHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHByb3BzLmhhc093blByb3BlcnR5KCdkZWZhdWx0VmFsdWUnKSkge1xuICAgICAgc2V0RGVmYXVsdFZhbHVlKG5vZGUsIHByb3BzLnR5cGUsIGdldFRvU3RyaW5nVmFsdWUocHJvcHMuZGVmYXVsdFZhbHVlKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGRpc2FibGVJbnB1dEF0dHJpYnV0ZVN5bmNpbmcpIHtcbiAgICAvLyBXaGVuIG5vdCBzeW5jaW5nIHRoZSBjaGVja2VkIGF0dHJpYnV0ZSwgdGhlIGF0dHJpYnV0ZSBpcyBkaXJlY3RseVxuICAgIC8vIGNvbnRyb2xsYWJsZSBmcm9tIHRoZSBkZWZhdWx0VmFsdWUgUmVhY3QgcHJvcGVydHkuIEl0IG5lZWRzIHRvIGJlXG4gICAgLy8gdXBkYXRlZCBhcyBuZXcgcHJvcHMgY29tZSBpbi5cbiAgICBpZiAocHJvcHMuZGVmYXVsdENoZWNrZWQgPT0gbnVsbCkge1xuICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ2NoZWNrZWQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZS5kZWZhdWx0Q2hlY2tlZCA9ICEhcHJvcHMuZGVmYXVsdENoZWNrZWQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFdoZW4gc3luY2luZyB0aGUgY2hlY2tlZCBhdHRyaWJ1dGUsIGl0IG9ubHkgY2hhbmdlcyB3aGVuIGl0IG5lZWRzXG4gICAgLy8gdG8gYmUgcmVtb3ZlZCwgc3VjaCBhcyB0cmFuc2l0aW9uaW5nIGZyb20gYSBjaGVja2JveCBpbnRvIGEgdGV4dCBpbnB1dFxuICAgIGlmIChwcm9wcy5jaGVja2VkID09IG51bGwgJiYgcHJvcHMuZGVmYXVsdENoZWNrZWQgIT0gbnVsbCkge1xuICAgICAgbm9kZS5kZWZhdWx0Q2hlY2tlZCA9ICEhcHJvcHMuZGVmYXVsdENoZWNrZWQ7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHBvc3RNb3VudFdyYXBwZXIoZWxlbWVudCwgcHJvcHMsIGlzSHlkcmF0aW5nKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcblxuICAvLyBEbyBub3QgYXNzaWduIHZhbHVlIGlmIGl0IGlzIGFscmVhZHkgc2V0LiBUaGlzIHByZXZlbnRzIHVzZXIgdGV4dCBpbnB1dFxuICAvLyBmcm9tIGJlaW5nIGxvc3QgZHVyaW5nIFNTUiBoeWRyYXRpb24uXG4gIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eSgndmFsdWUnKSB8fCBwcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdFZhbHVlJykpIHtcbiAgICB2YXIgdHlwZSA9IHByb3BzLnR5cGU7XG4gICAgdmFyIGlzQnV0dG9uID0gdHlwZSA9PT0gJ3N1Ym1pdCcgfHwgdHlwZSA9PT0gJ3Jlc2V0JztcblxuICAgIC8vIEF2b2lkIHNldHRpbmcgdmFsdWUgYXR0cmlidXRlIG9uIHN1Ym1pdC9yZXNldCBpbnB1dHMgYXMgaXQgb3ZlcnJpZGVzIHRoZVxuICAgIC8vIGRlZmF1bHQgdmFsdWUgcHJvdmlkZWQgYnkgdGhlIGJyb3dzZXIuIFNlZTogIzEyODcyXG4gICAgaWYgKGlzQnV0dG9uICYmIChwcm9wcy52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHByb3BzLnZhbHVlID09PSBudWxsKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBfaW5pdGlhbFZhbHVlID0gdG9TdHJpbmcobm9kZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSk7XG5cbiAgICAvLyBEbyBub3QgYXNzaWduIHZhbHVlIGlmIGl0IGlzIGFscmVhZHkgc2V0LiBUaGlzIHByZXZlbnRzIHVzZXIgdGV4dCBpbnB1dFxuICAgIC8vIGZyb20gYmVpbmcgbG9zdCBkdXJpbmcgU1NSIGh5ZHJhdGlvbi5cbiAgICBpZiAoIWlzSHlkcmF0aW5nKSB7XG4gICAgICBpZiAoZGlzYWJsZUlucHV0QXR0cmlidXRlU3luY2luZykge1xuICAgICAgICB2YXIgdmFsdWUgPSBnZXRUb1N0cmluZ1ZhbHVlKHByb3BzLnZhbHVlKTtcblxuICAgICAgICAvLyBXaGVuIG5vdCBzeW5jaW5nIHRoZSB2YWx1ZSBhdHRyaWJ1dGUsIHRoZSB2YWx1ZSBwcm9wZXJ0eSBwb2ludHNcbiAgICAgICAgLy8gZGlyZWN0bHkgdG8gdGhlIFJlYWN0IHByb3AuIE9ubHkgYXNzaWduIGl0IGlmIGl0IGV4aXN0cy5cbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAvLyBBbHdheXMgYXNzaWduIG9uIGJ1dHRvbnMgc28gdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBhc3NpZ24gYW5cbiAgICAgICAgICAvLyBlbXB0eSBzdHJpbmcgdG8gY2xlYXIgYnV0dG9uIHRleHQuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBPdGhlcndpc2UsIGRvIG5vdCByZS1hc3NpZ24gdGhlIHZhbHVlIHByb3BlcnR5IGlmIGlzIGVtcHR5LiBUaGlzXG4gICAgICAgICAgLy8gcG90ZW50aWFsbHkgYXZvaWRzIGEgRE9NIHdyaXRlIGFuZCBwcmV2ZW50cyBGaXJlZm94ICh+NjAuMC4xKSBmcm9tXG4gICAgICAgICAgLy8gcHJlbWF0dXJlbHkgbWFya2luZyByZXF1aXJlZCBpbnB1dHMgYXMgaW52YWxpZC4gRXF1YWxpdHkgaXMgY29tcGFyZWRcbiAgICAgICAgICAvLyB0byB0aGUgY3VycmVudCB2YWx1ZSBpbiBjYXNlIHRoZSBicm93c2VyIHByb3ZpZGVkIHZhbHVlIGlzIG5vdCBhblxuICAgICAgICAgIC8vIGVtcHR5IHN0cmluZy5cbiAgICAgICAgICBpZiAoaXNCdXR0b24gfHwgdmFsdWUgIT09IG5vZGUudmFsdWUpIHtcbiAgICAgICAgICAgIG5vZGUudmFsdWUgPSB0b1N0cmluZyh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBXaGVuIHN5bmNpbmcgdGhlIHZhbHVlIGF0dHJpYnV0ZSwgdGhlIHZhbHVlIHByb3BlcnR5IHNob3VsZCB1c2VcbiAgICAgICAgLy8gdGhlIHdyYXBwZXJTdGF0ZS5faW5pdGlhbFZhbHVlIHByb3BlcnR5LiBUaGlzIHVzZXM6XG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgMS4gVGhlIHZhbHVlIFJlYWN0IHByb3BlcnR5IHdoZW4gcHJlc2VudFxuICAgICAgICAvLyAgIDIuIFRoZSBkZWZhdWx0VmFsdWUgUmVhY3QgcHJvcGVydHkgd2hlbiBwcmVzZW50XG4gICAgICAgIC8vICAgMy4gQW4gZW1wdHkgc3RyaW5nXG4gICAgICAgIGlmIChfaW5pdGlhbFZhbHVlICE9PSBub2RlLnZhbHVlKSB7XG4gICAgICAgICAgbm9kZS52YWx1ZSA9IF9pbml0aWFsVmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGlzYWJsZUlucHV0QXR0cmlidXRlU3luY2luZykge1xuICAgICAgLy8gV2hlbiBub3Qgc3luY2luZyB0aGUgdmFsdWUgYXR0cmlidXRlLCBhc3NpZ24gdGhlIHZhbHVlIGF0dHJpYnV0ZVxuICAgICAgLy8gZGlyZWN0bHkgZnJvbSB0aGUgZGVmYXVsdFZhbHVlIFJlYWN0IHByb3BlcnR5ICh3aGVuIHByZXNlbnQpXG4gICAgICB2YXIgZGVmYXVsdFZhbHVlID0gZ2V0VG9TdHJpbmdWYWx1ZShwcm9wcy5kZWZhdWx0VmFsdWUpO1xuICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIG5vZGUuZGVmYXVsdFZhbHVlID0gdG9TdHJpbmcoZGVmYXVsdFZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlLCB0aGUgdmFsdWUgYXR0cmlidXRlIGlzIHN5bmNocm9uaXplZCB0byB0aGUgcHJvcGVydHksXG4gICAgICAvLyBzbyB3ZSBhc3NpZ24gZGVmYXVsdFZhbHVlIHRvIHRoZSBzYW1lIHRoaW5nIGFzIHRoZSB2YWx1ZSBwcm9wZXJ0eVxuICAgICAgLy8gYXNzaWdubWVudCBzdGVwIGFib3ZlLlxuICAgICAgbm9kZS5kZWZhdWx0VmFsdWUgPSBfaW5pdGlhbFZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIC8vIE5vcm1hbGx5LCB3ZSdkIGp1c3QgZG8gYG5vZGUuY2hlY2tlZCA9IG5vZGUuY2hlY2tlZGAgdXBvbiBpbml0aWFsIG1vdW50LCBsZXNzIHRoaXMgYnVnXG4gIC8vIHRoaXMgaXMgbmVlZGVkIHRvIHdvcmsgYXJvdW5kIGEgY2hyb21lIGJ1ZyB3aGVyZSBzZXR0aW5nIGRlZmF1bHRDaGVja2VkXG4gIC8vIHdpbGwgc29tZXRpbWVzIGluZmx1ZW5jZSB0aGUgdmFsdWUgb2YgY2hlY2tlZCAoZXZlbiBhZnRlciBkZXRhY2htZW50KS5cbiAgLy8gUmVmZXJlbmNlOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD02MDg0MTZcbiAgLy8gV2UgbmVlZCB0byB0ZW1wb3JhcmlseSB1bnNldCBuYW1lIHRvIGF2b2lkIGRpc3J1cHRpbmcgcmFkaW8gYnV0dG9uIGdyb3Vwcy5cbiAgdmFyIG5hbWUgPSBub2RlLm5hbWU7XG4gIGlmIChuYW1lICE9PSAnJykge1xuICAgIG5vZGUubmFtZSA9ICcnO1xuICB9XG5cbiAgaWYgKGRpc2FibGVJbnB1dEF0dHJpYnV0ZVN5bmNpbmcpIHtcbiAgICAvLyBXaGVuIG5vdCBzeW5jaW5nIHRoZSBjaGVja2VkIGF0dHJpYnV0ZSwgdGhlIGNoZWNrZWQgcHJvcGVydHlcbiAgICAvLyBuZXZlciBnZXRzIGFzc2lnbmVkLiBJdCBtdXN0IGJlIG1hbnVhbGx5IHNldC4gV2UgZG9uJ3Qgd2FudFxuICAgIC8vIHRvIGRvIHRoaXMgd2hlbiBoeWRyYXRpbmcgc28gdGhhdCBleGlzdGluZyB1c2VyIGlucHV0IGlzbid0XG4gICAgLy8gbW9kaWZpZWRcbiAgICBpZiAoIWlzSHlkcmF0aW5nKSB7XG4gICAgICB1cGRhdGVDaGVja2VkKGVsZW1lbnQsIHByb3BzKTtcbiAgICB9XG5cbiAgICAvLyBPbmx5IGFzc2lnbiB0aGUgY2hlY2tlZCBhdHRyaWJ1dGUgaWYgaXQgaXMgZGVmaW5lZC4gVGhpcyBzYXZlc1xuICAgIC8vIGEgRE9NIHdyaXRlIHdoZW4gY29udHJvbGxpbmcgdGhlIGNoZWNrZWQgYXR0cmlidXRlIGlzbid0IG5lZWRlZFxuICAgIC8vICh0ZXh0IGlucHV0cywgc3VibWl0L3Jlc2V0KVxuICAgIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdENoZWNrZWQnKSkge1xuICAgICAgbm9kZS5kZWZhdWx0Q2hlY2tlZCA9ICFub2RlLmRlZmF1bHRDaGVja2VkO1xuICAgICAgbm9kZS5kZWZhdWx0Q2hlY2tlZCA9ICEhcHJvcHMuZGVmYXVsdENoZWNrZWQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFdoZW4gc3luY2luZyB0aGUgY2hlY2tlZCBhdHRyaWJ1dGUsIGJvdGggdGhlIGNoZWNrZWQgcHJvcGVydHkgYW5kXG4gICAgLy8gYXR0cmlidXRlIGFyZSBhc3NpZ25lZCBhdCB0aGUgc2FtZSB0aW1lIHVzaW5nIGRlZmF1bHRDaGVja2VkLiBUaGlzIHVzZXM6XG4gICAgLy9cbiAgICAvLyAgIDEuIFRoZSBjaGVja2VkIFJlYWN0IHByb3BlcnR5IHdoZW4gcHJlc2VudFxuICAgIC8vICAgMi4gVGhlIGRlZmF1bHRDaGVja2VkIFJlYWN0IHByb3BlcnR5IHdoZW4gcHJlc2VudFxuICAgIC8vICAgMy4gT3RoZXJ3aXNlLCBmYWxzZVxuICAgIG5vZGUuZGVmYXVsdENoZWNrZWQgPSAhbm9kZS5kZWZhdWx0Q2hlY2tlZDtcbiAgICBub2RlLmRlZmF1bHRDaGVja2VkID0gISFub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbENoZWNrZWQ7XG4gIH1cblxuICBpZiAobmFtZSAhPT0gJycpIHtcbiAgICBub2RlLm5hbWUgPSBuYW1lO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc3RvcmVDb250cm9sbGVkU3RhdGUoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB1cGRhdGVXcmFwcGVyKG5vZGUsIHByb3BzKTtcbiAgdXBkYXRlTmFtZWRDb3VzaW5zKG5vZGUsIHByb3BzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTmFtZWRDb3VzaW5zKHJvb3ROb2RlLCBwcm9wcykge1xuICB2YXIgbmFtZSA9IHByb3BzLm5hbWU7XG4gIGlmIChwcm9wcy50eXBlID09PSAncmFkaW8nICYmIG5hbWUgIT0gbnVsbCkge1xuICAgIHZhciBxdWVyeVJvb3QgPSByb290Tm9kZTtcblxuICAgIHdoaWxlIChxdWVyeVJvb3QucGFyZW50Tm9kZSkge1xuICAgICAgcXVlcnlSb290ID0gcXVlcnlSb290LnBhcmVudE5vZGU7XG4gICAgfVxuXG4gICAgLy8gSWYgYHJvb3ROb2RlLmZvcm1gIHdhcyBub24tbnVsbCwgdGhlbiB3ZSBjb3VsZCB0cnkgYGZvcm0uZWxlbWVudHNgLFxuICAgIC8vIGJ1dCB0aGF0IHNvbWV0aW1lcyBiZWhhdmVzIHN0cmFuZ2VseSBpbiBJRTguIFdlIGNvdWxkIGFsc28gdHJ5IHVzaW5nXG4gICAgLy8gYGZvcm0uZ2V0RWxlbWVudHNCeU5hbWVgLCBidXQgdGhhdCB3aWxsIG9ubHkgcmV0dXJuIGRpcmVjdCBjaGlsZHJlblxuICAgIC8vIGFuZCB3b24ndCBpbmNsdWRlIGlucHV0cyB0aGF0IHVzZSB0aGUgSFRNTDUgYGZvcm09YCBhdHRyaWJ1dGUuIFNpbmNlXG4gICAgLy8gdGhlIGlucHV0IG1pZ2h0IG5vdCBldmVuIGJlIGluIGEgZm9ybS4gSXQgbWlnaHQgbm90IGV2ZW4gYmUgaW4gdGhlXG4gICAgLy8gZG9jdW1lbnQuIExldCdzIGp1c3QgdXNlIHRoZSBsb2NhbCBgcXVlcnlTZWxlY3RvckFsbGAgdG8gZW5zdXJlIHdlIGRvbid0XG4gICAgLy8gbWlzcyBhbnl0aGluZy5cbiAgICB2YXIgZ3JvdXAgPSBxdWVyeVJvb3QucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbbmFtZT0nICsgSlNPTi5zdHJpbmdpZnkoJycgKyBuYW1lKSArICddW3R5cGU9XCJyYWRpb1wiXScpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncm91cC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG90aGVyTm9kZSA9IGdyb3VwW2ldO1xuICAgICAgaWYgKG90aGVyTm9kZSA9PT0gcm9vdE5vZGUgfHwgb3RoZXJOb2RlLmZvcm0gIT09IHJvb3ROb2RlLmZvcm0pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBUaGlzIHdpbGwgdGhyb3cgaWYgcmFkaW8gYnV0dG9ucyByZW5kZXJlZCBieSBkaWZmZXJlbnQgY29waWVzIG9mIFJlYWN0XG4gICAgICAvLyBhbmQgdGhlIHNhbWUgbmFtZSBhcmUgcmVuZGVyZWQgaW50byB0aGUgc2FtZSBmb3JtIChzYW1lIGFzICMxOTM5KS5cbiAgICAgIC8vIFRoYXQncyBwcm9iYWJseSBva2F5OyB3ZSBkb24ndCBzdXBwb3J0IGl0IGp1c3QgYXMgd2UgZG9uJ3Qgc3VwcG9ydFxuICAgICAgLy8gbWl4aW5nIFJlYWN0IHJhZGlvIGJ1dHRvbnMgd2l0aCBub24tUmVhY3Qgb25lcy5cbiAgICAgIHZhciBvdGhlclByb3BzID0gZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZSQxKG90aGVyTm9kZSk7XG4gICAgICAhb3RoZXJQcm9wcyA/IGludmFyaWFudChmYWxzZSwgJ1JlYWN0RE9NSW5wdXQ6IE1peGluZyBSZWFjdCBhbmQgbm9uLVJlYWN0IHJhZGlvIGlucHV0cyB3aXRoIHRoZSBzYW1lIGBuYW1lYCBpcyBub3Qgc3VwcG9ydGVkLicpIDogdm9pZCAwO1xuXG4gICAgICAvLyBXZSBuZWVkIHVwZGF0ZSB0aGUgdHJhY2tlZCB2YWx1ZSBvbiB0aGUgbmFtZWQgY291c2luIHNpbmNlIHRoZSB2YWx1ZVxuICAgICAgLy8gd2FzIGNoYW5nZWQgYnV0IHRoZSBpbnB1dCBzYXcgbm8gZXZlbnQgb3IgdmFsdWUgc2V0XG4gICAgICB1cGRhdGVWYWx1ZUlmQ2hhbmdlZChvdGhlck5vZGUpO1xuXG4gICAgICAvLyBJZiB0aGlzIGlzIGEgY29udHJvbGxlZCByYWRpbyBidXR0b24gZ3JvdXAsIGZvcmNpbmcgdGhlIGlucHV0IHRoYXRcbiAgICAgIC8vIHdhcyBwcmV2aW91c2x5IGNoZWNrZWQgdG8gdXBkYXRlIHdpbGwgY2F1c2UgaXQgdG8gYmUgY29tZSByZS1jaGVja2VkXG4gICAgICAvLyBhcyBhcHByb3ByaWF0ZS5cbiAgICAgIHVwZGF0ZVdyYXBwZXIob3RoZXJOb2RlLCBvdGhlclByb3BzKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gSW4gQ2hyb21lLCBhc3NpZ25pbmcgZGVmYXVsdFZhbHVlIHRvIGNlcnRhaW4gaW5wdXQgdHlwZXMgdHJpZ2dlcnMgaW5wdXQgdmFsaWRhdGlvbi5cbi8vIEZvciBudW1iZXIgaW5wdXRzLCB0aGUgZGlzcGxheSB2YWx1ZSBsb3NlcyB0cmFpbGluZyBkZWNpbWFsIHBvaW50cy4gRm9yIGVtYWlsIGlucHV0cyxcbi8vIENocm9tZSByYWlzZXMgXCJUaGUgc3BlY2lmaWVkIHZhbHVlIDx4PiBpcyBub3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIuXG4vL1xuLy8gSGVyZSB3ZSBjaGVjayB0byBzZWUgaWYgdGhlIGRlZmF1bHRWYWx1ZSBoYXMgYWN0dWFsbHkgY2hhbmdlZCwgYXZvaWRpbmcgdGhlc2UgcHJvYmxlbXNcbi8vIHdoZW4gdGhlIHVzZXIgaXMgaW5wdXR0aW5nIHRleHRcbi8vXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzcyNTNcbmZ1bmN0aW9uIHNldERlZmF1bHRWYWx1ZShub2RlLCB0eXBlLCB2YWx1ZSkge1xuICBpZiAoXG4gIC8vIEZvY3VzZWQgbnVtYmVyIGlucHV0cyBzeW5jaHJvbml6ZSBvbiBibHVyLiBTZWUgQ2hhbmdlRXZlbnRQbHVnaW4uanNcbiAgdHlwZSAhPT0gJ251bWJlcicgfHwgbm9kZS5vd25lckRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IG5vZGUpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgbm9kZS5kZWZhdWx0VmFsdWUgPSB0b1N0cmluZyhub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKG5vZGUuZGVmYXVsdFZhbHVlICE9PSB0b1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgIG5vZGUuZGVmYXVsdFZhbHVlID0gdG9TdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgZXZlbnRUeXBlcyQxID0ge1xuICBjaGFuZ2U6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDogJ29uQ2hhbmdlJyxcbiAgICAgIGNhcHR1cmVkOiAnb25DaGFuZ2VDYXB0dXJlJ1xuICAgIH0sXG4gICAgZGVwZW5kZW5jaWVzOiBbVE9QX0JMVVIsIFRPUF9DSEFOR0UsIFRPUF9DTElDSywgVE9QX0ZPQ1VTLCBUT1BfSU5QVVQsIFRPUF9LRVlfRE9XTiwgVE9QX0tFWV9VUCwgVE9QX1NFTEVDVElPTl9DSEFOR0VdXG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUFuZEFjY3VtdWxhdGVDaGFuZ2VFdmVudChpbnN0LCBuYXRpdmVFdmVudCwgdGFyZ2V0KSB7XG4gIHZhciBldmVudCA9IFN5bnRoZXRpY0V2ZW50LmdldFBvb2xlZChldmVudFR5cGVzJDEuY2hhbmdlLCBpbnN0LCBuYXRpdmVFdmVudCwgdGFyZ2V0KTtcbiAgZXZlbnQudHlwZSA9ICdjaGFuZ2UnO1xuICAvLyBGbGFnIHRoaXMgZXZlbnQgbG9vcCBhcyBuZWVkaW5nIHN0YXRlIHJlc3RvcmUuXG4gIGVucXVldWVTdGF0ZVJlc3RvcmUodGFyZ2V0KTtcbiAgYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyhldmVudCk7XG4gIHJldHVybiBldmVudDtcbn1cbi8qKlxuICogRm9yIElFIHNoaW1zXG4gKi9cbnZhciBhY3RpdmVFbGVtZW50ID0gbnVsbDtcbnZhciBhY3RpdmVFbGVtZW50SW5zdCA9IG51bGw7XG5cbi8qKlxuICogU0VDVElPTjogaGFuZGxlIGBjaGFuZ2VgIGV2ZW50XG4gKi9cbmZ1bmN0aW9uIHNob3VsZFVzZUNoYW5nZUV2ZW50KGVsZW0pIHtcbiAgdmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBub2RlTmFtZSA9PT0gJ3NlbGVjdCcgfHwgbm9kZU5hbWUgPT09ICdpbnB1dCcgJiYgZWxlbS50eXBlID09PSAnZmlsZSc7XG59XG5cbmZ1bmN0aW9uIG1hbnVhbERpc3BhdGNoQ2hhbmdlRXZlbnQobmF0aXZlRXZlbnQpIHtcbiAgdmFyIGV2ZW50ID0gY3JlYXRlQW5kQWNjdW11bGF0ZUNoYW5nZUV2ZW50KGFjdGl2ZUVsZW1lbnRJbnN0LCBuYXRpdmVFdmVudCwgZ2V0RXZlbnRUYXJnZXQobmF0aXZlRXZlbnQpKTtcblxuICAvLyBJZiBjaGFuZ2UgYW5kIHByb3BlcnR5Y2hhbmdlIGJ1YmJsZWQsIHdlJ2QganVzdCBiaW5kIHRvIGl0IGxpa2UgYWxsIHRoZVxuICAvLyBvdGhlciBldmVudHMgYW5kIGhhdmUgaXQgZ28gdGhyb3VnaCBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuIFNpbmNlIGl0XG4gIC8vIGRvZXNuJ3QsIHdlIG1hbnVhbGx5IGxpc3RlbiBmb3IgdGhlIGV2ZW50cyBhbmQgc28gd2UgaGF2ZSB0byBlbnF1ZXVlIGFuZFxuICAvLyBwcm9jZXNzIHRoZSBhYnN0cmFjdCBldmVudCBtYW51YWxseS5cbiAgLy9cbiAgLy8gQmF0Y2hpbmcgaXMgbmVjZXNzYXJ5IGhlcmUgaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgYWxsIGV2ZW50IGhhbmRsZXJzIHJ1blxuICAvLyBiZWZvcmUgdGhlIG5leHQgcmVyZW5kZXIgKGluY2x1ZGluZyBldmVudCBoYW5kbGVycyBhdHRhY2hlZCB0byBhbmNlc3RvclxuICAvLyBlbGVtZW50cyBpbnN0ZWFkIG9mIGRpcmVjdGx5IG9uIHRoZSBpbnB1dCkuIFdpdGhvdXQgdGhpcywgY29udHJvbGxlZFxuICAvLyBjb21wb25lbnRzIGRvbid0IHdvcmsgcHJvcGVybHkgaW4gY29uanVuY3Rpb24gd2l0aCBldmVudCBidWJibGluZyBiZWNhdXNlXG4gIC8vIHRoZSBjb21wb25lbnQgaXMgcmVyZW5kZXJlZCBhbmQgdGhlIHZhbHVlIHJldmVydGVkIGJlZm9yZSBhbGwgdGhlIGV2ZW50XG4gIC8vIGhhbmRsZXJzIGNhbiBydW4uIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzcwOC5cbiAgYmF0Y2hlZFVwZGF0ZXMocnVuRXZlbnRJbkJhdGNoLCBldmVudCk7XG59XG5cbmZ1bmN0aW9uIHJ1bkV2ZW50SW5CYXRjaChldmVudCkge1xuICBydW5FdmVudHNJbkJhdGNoKGV2ZW50KTtcbn1cblxuZnVuY3Rpb24gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKHRhcmdldEluc3QpIHtcbiAgdmFyIHRhcmdldE5vZGUgPSBnZXROb2RlRnJvbUluc3RhbmNlJDEodGFyZ2V0SW5zdCk7XG4gIGlmICh1cGRhdGVWYWx1ZUlmQ2hhbmdlZCh0YXJnZXROb2RlKSkge1xuICAgIHJldHVybiB0YXJnZXRJbnN0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JDaGFuZ2VFdmVudCh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QpIHtcbiAgaWYgKHRvcExldmVsVHlwZSA9PT0gVE9QX0NIQU5HRSkge1xuICAgIHJldHVybiB0YXJnZXRJbnN0O1xuICB9XG59XG5cbi8qKlxuICogU0VDVElPTjogaGFuZGxlIGBpbnB1dGAgZXZlbnRcbiAqL1xudmFyIGlzSW5wdXRFdmVudFN1cHBvcnRlZCA9IGZhbHNlO1xuaWYgKGNhblVzZURPTSkge1xuICAvLyBJRTkgY2xhaW1zIHRvIHN1cHBvcnQgdGhlIGlucHV0IGV2ZW50IGJ1dCBmYWlscyB0byB0cmlnZ2VyIGl0IHdoZW5cbiAgLy8gZGVsZXRpbmcgdGV4dCwgc28gd2UgaWdub3JlIGl0cyBpbnB1dCBldmVudHMuXG4gIGlzSW5wdXRFdmVudFN1cHBvcnRlZCA9IGlzRXZlbnRTdXBwb3J0ZWQoJ2lucHV0JykgJiYgKCFkb2N1bWVudC5kb2N1bWVudE1vZGUgfHwgZG9jdW1lbnQuZG9jdW1lbnRNb2RlID4gOSk7XG59XG5cbi8qKlxuICogKEZvciBJRSA8PTkpIFN0YXJ0cyB0cmFja2luZyBwcm9wZXJ0eWNoYW5nZSBldmVudHMgb24gdGhlIHBhc3NlZC1pbiBlbGVtZW50XG4gKiBhbmQgb3ZlcnJpZGUgdGhlIHZhbHVlIHByb3BlcnR5IHNvIHRoYXQgd2UgY2FuIGRpc3Rpbmd1aXNoIHVzZXIgZXZlbnRzIGZyb21cbiAqIHZhbHVlIGNoYW5nZXMgaW4gSlMuXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0V2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSh0YXJnZXQsIHRhcmdldEluc3QpIHtcbiAgYWN0aXZlRWxlbWVudCA9IHRhcmdldDtcbiAgYWN0aXZlRWxlbWVudEluc3QgPSB0YXJnZXRJbnN0O1xuICBhY3RpdmVFbGVtZW50LmF0dGFjaEV2ZW50KCdvbnByb3BlcnR5Y2hhbmdlJywgaGFuZGxlUHJvcGVydHlDaGFuZ2UpO1xufVxuXG4vKipcbiAqIChGb3IgSUUgPD05KSBSZW1vdmVzIHRoZSBldmVudCBsaXN0ZW5lcnMgZnJvbSB0aGUgY3VycmVudGx5LXRyYWNrZWQgZWxlbWVudCxcbiAqIGlmIGFueSBleGlzdHMuXG4gKi9cbmZ1bmN0aW9uIHN0b3BXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKCkge1xuICBpZiAoIWFjdGl2ZUVsZW1lbnQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYWN0aXZlRWxlbWVudC5kZXRhY2hFdmVudCgnb25wcm9wZXJ0eWNoYW5nZScsIGhhbmRsZVByb3BlcnR5Q2hhbmdlKTtcbiAgYWN0aXZlRWxlbWVudCA9IG51bGw7XG4gIGFjdGl2ZUVsZW1lbnRJbnN0ID0gbnVsbDtcbn1cblxuLyoqXG4gKiAoRm9yIElFIDw9OSkgSGFuZGxlcyBhIHByb3BlcnR5Y2hhbmdlIGV2ZW50LCBzZW5kaW5nIGEgYGNoYW5nZWAgZXZlbnQgaWZcbiAqIHRoZSB2YWx1ZSBvZiB0aGUgYWN0aXZlIGVsZW1lbnQgaGFzIGNoYW5nZWQuXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZVByb3BlcnR5Q2hhbmdlKG5hdGl2ZUV2ZW50KSB7XG4gIGlmIChuYXRpdmVFdmVudC5wcm9wZXJ0eU5hbWUgIT09ICd2YWx1ZScpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGdldEluc3RJZlZhbHVlQ2hhbmdlZChhY3RpdmVFbGVtZW50SW5zdCkpIHtcbiAgICBtYW51YWxEaXNwYXRjaENoYW5nZUV2ZW50KG5hdGl2ZUV2ZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVFdmVudHNGb3JJbnB1dEV2ZW50UG9seWZpbGwodG9wTGV2ZWxUeXBlLCB0YXJnZXQsIHRhcmdldEluc3QpIHtcbiAgaWYgKHRvcExldmVsVHlwZSA9PT0gVE9QX0ZPQ1VTKSB7XG4gICAgLy8gSW4gSUU5LCBwcm9wZXJ0eWNoYW5nZSBmaXJlcyBmb3IgbW9zdCBpbnB1dCBldmVudHMgYnV0IGlzIGJ1Z2d5IGFuZFxuICAgIC8vIGRvZXNuJ3QgZmlyZSB3aGVuIHRleHQgaXMgZGVsZXRlZCwgYnV0IGNvbnZlbmllbnRseSwgc2VsZWN0aW9uY2hhbmdlXG4gICAgLy8gYXBwZWFycyB0byBmaXJlIGluIGFsbCBvZiB0aGUgcmVtYWluaW5nIGNhc2VzIHNvIHdlIGNhdGNoIHRob3NlIGFuZFxuICAgIC8vIGZvcndhcmQgdGhlIGV2ZW50IGlmIHRoZSB2YWx1ZSBoYXMgY2hhbmdlZFxuICAgIC8vIEluIGVpdGhlciBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIGNhbGwgdGhlIGV2ZW50IGhhbmRsZXIgaWYgdGhlIHZhbHVlXG4gICAgLy8gaXMgY2hhbmdlZCBmcm9tIEpTIHNvIHdlIHJlZGVmaW5lIGEgc2V0dGVyIGZvciBgLnZhbHVlYCB0aGF0IHVwZGF0ZXNcbiAgICAvLyBvdXIgYWN0aXZlRWxlbWVudFZhbHVlIHZhcmlhYmxlLCBhbGxvd2luZyB1cyB0byBpZ25vcmUgdGhvc2UgY2hhbmdlc1xuICAgIC8vXG4gICAgLy8gc3RvcFdhdGNoaW5nKCkgc2hvdWxkIGJlIGEgbm9vcCBoZXJlIGJ1dCB3ZSBjYWxsIGl0IGp1c3QgaW4gY2FzZSB3ZVxuICAgIC8vIG1pc3NlZCBhIGJsdXIgZXZlbnQgc29tZWhvdy5cbiAgICBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpO1xuICAgIHN0YXJ0V2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSh0YXJnZXQsIHRhcmdldEluc3QpO1xuICB9IGVsc2UgaWYgKHRvcExldmVsVHlwZSA9PT0gVE9QX0JMVVIpIHtcbiAgICBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpO1xuICB9XG59XG5cbi8vIEZvciBJRTggYW5kIElFOS5cbmZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JJbnB1dEV2ZW50UG9seWZpbGwodG9wTGV2ZWxUeXBlLCB0YXJnZXRJbnN0KSB7XG4gIGlmICh0b3BMZXZlbFR5cGUgPT09IFRPUF9TRUxFQ1RJT05fQ0hBTkdFIHx8IHRvcExldmVsVHlwZSA9PT0gVE9QX0tFWV9VUCB8fCB0b3BMZXZlbFR5cGUgPT09IFRPUF9LRVlfRE9XTikge1xuICAgIC8vIE9uIHRoZSBzZWxlY3Rpb25jaGFuZ2UgZXZlbnQsIHRoZSB0YXJnZXQgaXMganVzdCBkb2N1bWVudCB3aGljaCBpc24ndFxuICAgIC8vIGhlbHBmdWwgZm9yIHVzIHNvIGp1c3QgY2hlY2sgYWN0aXZlRWxlbWVudCBpbnN0ZWFkLlxuICAgIC8vXG4gICAgLy8gOTklIG9mIHRoZSB0aW1lLCBrZXlkb3duIGFuZCBrZXl1cCBhcmVuJ3QgbmVjZXNzYXJ5LiBJRTggZmFpbHMgdG8gZmlyZVxuICAgIC8vIHByb3BlcnR5Y2hhbmdlIG9uIHRoZSBmaXJzdCBpbnB1dCBldmVudCBhZnRlciBzZXR0aW5nIGB2YWx1ZWAgZnJvbSBhXG4gICAgLy8gc2NyaXB0IGFuZCBmaXJlcyBvbmx5IGtleWRvd24sIGtleXByZXNzLCBrZXl1cC4gQ2F0Y2hpbmcga2V5dXAgdXN1YWxseVxuICAgIC8vIGdldHMgaXQgYW5kIGNhdGNoaW5nIGtleWRvd24gbGV0cyB1cyBmaXJlIGFuIGV2ZW50IGZvciB0aGUgZmlyc3RcbiAgICAvLyBrZXlzdHJva2UgaWYgdXNlciBkb2VzIGEga2V5IHJlcGVhdCAoaXQnbGwgYmUgYSBsaXR0bGUgZGVsYXllZDogcmlnaHRcbiAgICAvLyBiZWZvcmUgdGhlIHNlY29uZCBrZXlzdHJva2UpLiBPdGhlciBpbnB1dCBtZXRob2RzIChlLmcuLCBwYXN0ZSkgc2VlbSB0b1xuICAgIC8vIGZpcmUgc2VsZWN0aW9uY2hhbmdlIG5vcm1hbGx5LlxuICAgIHJldHVybiBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQoYWN0aXZlRWxlbWVudEluc3QpO1xuICB9XG59XG5cbi8qKlxuICogU0VDVElPTjogaGFuZGxlIGBjbGlja2AgZXZlbnRcbiAqL1xuZnVuY3Rpb24gc2hvdWxkVXNlQ2xpY2tFdmVudChlbGVtKSB7XG4gIC8vIFVzZSB0aGUgYGNsaWNrYCBldmVudCB0byBkZXRlY3QgY2hhbmdlcyB0byBjaGVja2JveCBhbmQgcmFkaW8gaW5wdXRzLlxuICAvLyBUaGlzIGFwcHJvYWNoIHdvcmtzIGFjcm9zcyBhbGwgYnJvd3NlcnMsIHdoZXJlYXMgYGNoYW5nZWAgZG9lcyBub3QgZmlyZVxuICAvLyB1bnRpbCBgYmx1cmAgaW4gSUU4LlxuICB2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lO1xuICByZXR1cm4gbm9kZU5hbWUgJiYgbm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0JyAmJiAoZWxlbS50eXBlID09PSAnY2hlY2tib3gnIHx8IGVsZW0udHlwZSA9PT0gJ3JhZGlvJyk7XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JDbGlja0V2ZW50KHRvcExldmVsVHlwZSwgdGFyZ2V0SW5zdCkge1xuICBpZiAodG9wTGV2ZWxUeXBlID09PSBUT1BfQ0xJQ0spIHtcbiAgICByZXR1cm4gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKHRhcmdldEluc3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JJbnB1dE9yQ2hhbmdlRXZlbnQodG9wTGV2ZWxUeXBlLCB0YXJnZXRJbnN0KSB7XG4gIGlmICh0b3BMZXZlbFR5cGUgPT09IFRPUF9JTlBVVCB8fCB0b3BMZXZlbFR5cGUgPT09IFRPUF9DSEFOR0UpIHtcbiAgICByZXR1cm4gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKHRhcmdldEluc3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUNvbnRyb2xsZWRJbnB1dEJsdXIobm9kZSkge1xuICB2YXIgc3RhdGUgPSBub2RlLl93cmFwcGVyU3RhdGU7XG5cbiAgaWYgKCFzdGF0ZSB8fCAhc3RhdGUuY29udHJvbGxlZCB8fCBub2RlLnR5cGUgIT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFkaXNhYmxlSW5wdXRBdHRyaWJ1dGVTeW5jaW5nKSB7XG4gICAgLy8gSWYgY29udHJvbGxlZCwgYXNzaWduIHRoZSB2YWx1ZSBhdHRyaWJ1dGUgdG8gdGhlIGN1cnJlbnQgdmFsdWUgb24gYmx1clxuICAgIHNldERlZmF1bHRWYWx1ZShub2RlLCAnbnVtYmVyJywgbm9kZS52YWx1ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIHBsdWdpbiBjcmVhdGVzIGFuIGBvbkNoYW5nZWAgZXZlbnQgdGhhdCBub3JtYWxpemVzIGNoYW5nZSBldmVudHNcbiAqIGFjcm9zcyBmb3JtIGVsZW1lbnRzLiBUaGlzIGV2ZW50IGZpcmVzIGF0IGEgdGltZSB3aGVuIGl0J3MgcG9zc2libGUgdG9cbiAqIGNoYW5nZSB0aGUgZWxlbWVudCdzIHZhbHVlIHdpdGhvdXQgc2VlaW5nIGEgZmxpY2tlci5cbiAqXG4gKiBTdXBwb3J0ZWQgZWxlbWVudHMgYXJlOlxuICogLSBpbnB1dCAoc2VlIGBpc1RleHRJbnB1dEVsZW1lbnRgKVxuICogLSB0ZXh0YXJlYVxuICogLSBzZWxlY3RcbiAqL1xudmFyIENoYW5nZUV2ZW50UGx1Z2luID0ge1xuICBldmVudFR5cGVzOiBldmVudFR5cGVzJDEsXG5cbiAgX2lzSW5wdXRFdmVudFN1cHBvcnRlZDogaXNJbnB1dEV2ZW50U3VwcG9ydGVkLFxuXG4gIGV4dHJhY3RFdmVudHM6IGZ1bmN0aW9uICh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICAgIHZhciB0YXJnZXROb2RlID0gdGFyZ2V0SW5zdCA/IGdldE5vZGVGcm9tSW5zdGFuY2UkMSh0YXJnZXRJbnN0KSA6IHdpbmRvdztcblxuICAgIHZhciBnZXRUYXJnZXRJbnN0RnVuYyA9IHZvaWQgMCxcbiAgICAgICAgaGFuZGxlRXZlbnRGdW5jID0gdm9pZCAwO1xuICAgIGlmIChzaG91bGRVc2VDaGFuZ2VFdmVudCh0YXJnZXROb2RlKSkge1xuICAgICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9yQ2hhbmdlRXZlbnQ7XG4gICAgfSBlbHNlIGlmIChpc1RleHRJbnB1dEVsZW1lbnQodGFyZ2V0Tm9kZSkpIHtcbiAgICAgIGlmIChpc0lucHV0RXZlbnRTdXBwb3J0ZWQpIHtcbiAgICAgICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRPckNoYW5nZUV2ZW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRFdmVudFBvbHlmaWxsO1xuICAgICAgICBoYW5kbGVFdmVudEZ1bmMgPSBoYW5kbGVFdmVudHNGb3JJbnB1dEV2ZW50UG9seWZpbGw7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzaG91bGRVc2VDbGlja0V2ZW50KHRhcmdldE5vZGUpKSB7XG4gICAgICBnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JDbGlja0V2ZW50O1xuICAgIH1cblxuICAgIGlmIChnZXRUYXJnZXRJbnN0RnVuYykge1xuICAgICAgdmFyIGluc3QgPSBnZXRUYXJnZXRJbnN0RnVuYyh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QpO1xuICAgICAgaWYgKGluc3QpIHtcbiAgICAgICAgdmFyIGV2ZW50ID0gY3JlYXRlQW5kQWNjdW11bGF0ZUNoYW5nZUV2ZW50KGluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgICAgIHJldHVybiBldmVudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGFuZGxlRXZlbnRGdW5jKSB7XG4gICAgICBoYW5kbGVFdmVudEZ1bmModG9wTGV2ZWxUeXBlLCB0YXJnZXROb2RlLCB0YXJnZXRJbnN0KTtcbiAgICB9XG5cbiAgICAvLyBXaGVuIGJsdXJyaW5nLCBzZXQgdGhlIHZhbHVlIGF0dHJpYnV0ZSBmb3IgbnVtYmVyIGlucHV0c1xuICAgIGlmICh0b3BMZXZlbFR5cGUgPT09IFRPUF9CTFVSKSB7XG4gICAgICBoYW5kbGVDb250cm9sbGVkSW5wdXRCbHVyKHRhcmdldE5vZGUpO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBNb2R1bGUgdGhhdCBpcyBpbmplY3RhYmxlIGludG8gYEV2ZW50UGx1Z2luSHViYCwgdGhhdCBzcGVjaWZpZXMgYVxuICogZGV0ZXJtaW5pc3RpYyBvcmRlcmluZyBvZiBgRXZlbnRQbHVnaW5gcy4gQSBjb252ZW5pZW50IHdheSB0byByZWFzb24gYWJvdXRcbiAqIHBsdWdpbnMsIHdpdGhvdXQgaGF2aW5nIHRvIHBhY2thZ2UgZXZlcnkgb25lIG9mIHRoZW0uIFRoaXMgaXMgYmV0dGVyIHRoYW5cbiAqIGhhdmluZyBwbHVnaW5zIGJlIG9yZGVyZWQgaW4gdGhlIHNhbWUgb3JkZXIgdGhhdCB0aGV5IGFyZSBpbmplY3RlZCBiZWNhdXNlXG4gKiB0aGF0IG9yZGVyaW5nIHdvdWxkIGJlIGluZmx1ZW5jZWQgYnkgdGhlIHBhY2thZ2luZyBvcmRlci5cbiAqIGBSZXNwb25kZXJFdmVudFBsdWdpbmAgbXVzdCBvY2N1ciBiZWZvcmUgYFNpbXBsZUV2ZW50UGx1Z2luYCBzbyB0aGF0XG4gKiBwcmV2ZW50aW5nIGRlZmF1bHQgb24gZXZlbnRzIGlzIGNvbnZlbmllbnQgaW4gYFNpbXBsZUV2ZW50UGx1Z2luYCBoYW5kbGVycy5cbiAqL1xudmFyIERPTUV2ZW50UGx1Z2luT3JkZXIgPSBbJ1Jlc3BvbmRlckV2ZW50UGx1Z2luJywgJ1NpbXBsZUV2ZW50UGx1Z2luJywgJ0VudGVyTGVhdmVFdmVudFBsdWdpbicsICdDaGFuZ2VFdmVudFBsdWdpbicsICdTZWxlY3RFdmVudFBsdWdpbicsICdCZWZvcmVJbnB1dEV2ZW50UGx1Z2luJ107XG5cbnZhciBTeW50aGV0aWNVSUV2ZW50ID0gU3ludGhldGljRXZlbnQuZXh0ZW5kKHtcbiAgdmlldzogbnVsbCxcbiAgZGV0YWlsOiBudWxsXG59KTtcblxudmFyIG1vZGlmaWVyS2V5VG9Qcm9wID0ge1xuICBBbHQ6ICdhbHRLZXknLFxuICBDb250cm9sOiAnY3RybEtleScsXG4gIE1ldGE6ICdtZXRhS2V5JyxcbiAgU2hpZnQ6ICdzaGlmdEtleSdcbn07XG5cbi8vIE9sZGVyIGJyb3dzZXJzIChTYWZhcmkgPD0gMTAsIGlPUyBTYWZhcmkgPD0gMTAuMikgZG8gbm90IHN1cHBvcnRcbi8vIGdldE1vZGlmaWVyU3RhdGUuIElmIGdldE1vZGlmaWVyU3RhdGUgaXMgbm90IHN1cHBvcnRlZCwgd2UgbWFwIGl0IHRvIGEgc2V0IG9mXG4vLyBtb2RpZmllciBrZXlzIGV4cG9zZWQgYnkgdGhlIGV2ZW50LiBJbiB0aGlzIGNhc2UsIExvY2sta2V5cyBhcmUgbm90IHN1cHBvcnRlZC5cbi8qKlxuICogVHJhbnNsYXRpb24gZnJvbSBtb2RpZmllciBrZXkgdG8gdGhlIGFzc29jaWF0ZWQgcHJvcGVydHkgaW4gdGhlIGV2ZW50LlxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2tleXMtTW9kaWZpZXJzXG4gKi9cblxuZnVuY3Rpb24gbW9kaWZpZXJTdGF0ZUdldHRlcihrZXlBcmcpIHtcbiAgdmFyIHN5bnRoZXRpY0V2ZW50ID0gdGhpcztcbiAgdmFyIG5hdGl2ZUV2ZW50ID0gc3ludGhldGljRXZlbnQubmF0aXZlRXZlbnQ7XG4gIGlmIChuYXRpdmVFdmVudC5nZXRNb2RpZmllclN0YXRlKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUV2ZW50LmdldE1vZGlmaWVyU3RhdGUoa2V5QXJnKTtcbiAgfVxuICB2YXIga2V5UHJvcCA9IG1vZGlmaWVyS2V5VG9Qcm9wW2tleUFyZ107XG4gIHJldHVybiBrZXlQcm9wID8gISFuYXRpdmVFdmVudFtrZXlQcm9wXSA6IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRFdmVudE1vZGlmaWVyU3RhdGUobmF0aXZlRXZlbnQpIHtcbiAgcmV0dXJuIG1vZGlmaWVyU3RhdGVHZXR0ZXI7XG59XG5cbnZhciBwcmV2aW91c1NjcmVlblggPSAwO1xudmFyIHByZXZpb3VzU2NyZWVuWSA9IDA7XG4vLyBVc2UgZmxhZ3MgdG8gc2lnbmFsIG1vdmVtZW50WC9ZIGhhcyBhbHJlYWR5IGJlZW4gc2V0XG52YXIgaXNNb3ZlbWVudFhTZXQgPSBmYWxzZTtcbnZhciBpc01vdmVtZW50WVNldCA9IGZhbHNlO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgTW91c2VFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cbnZhciBTeW50aGV0aWNNb3VzZUV2ZW50ID0gU3ludGhldGljVUlFdmVudC5leHRlbmQoe1xuICBzY3JlZW5YOiBudWxsLFxuICBzY3JlZW5ZOiBudWxsLFxuICBjbGllbnRYOiBudWxsLFxuICBjbGllbnRZOiBudWxsLFxuICBwYWdlWDogbnVsbCxcbiAgcGFnZVk6IG51bGwsXG4gIGN0cmxLZXk6IG51bGwsXG4gIHNoaWZ0S2V5OiBudWxsLFxuICBhbHRLZXk6IG51bGwsXG4gIG1ldGFLZXk6IG51bGwsXG4gIGdldE1vZGlmaWVyU3RhdGU6IGdldEV2ZW50TW9kaWZpZXJTdGF0ZSxcbiAgYnV0dG9uOiBudWxsLFxuICBidXR0b25zOiBudWxsLFxuICByZWxhdGVkVGFyZ2V0OiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gZXZlbnQucmVsYXRlZFRhcmdldCB8fCAoZXZlbnQuZnJvbUVsZW1lbnQgPT09IGV2ZW50LnNyY0VsZW1lbnQgPyBldmVudC50b0VsZW1lbnQgOiBldmVudC5mcm9tRWxlbWVudCk7XG4gIH0sXG4gIG1vdmVtZW50WDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKCdtb3ZlbWVudFgnIGluIGV2ZW50KSB7XG4gICAgICByZXR1cm4gZXZlbnQubW92ZW1lbnRYO1xuICAgIH1cblxuICAgIHZhciBzY3JlZW5YID0gcHJldmlvdXNTY3JlZW5YO1xuICAgIHByZXZpb3VzU2NyZWVuWCA9IGV2ZW50LnNjcmVlblg7XG5cbiAgICBpZiAoIWlzTW92ZW1lbnRYU2V0KSB7XG4gICAgICBpc01vdmVtZW50WFNldCA9IHRydWU7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gZXZlbnQudHlwZSA9PT0gJ21vdXNlbW92ZScgPyBldmVudC5zY3JlZW5YIC0gc2NyZWVuWCA6IDA7XG4gIH0sXG4gIG1vdmVtZW50WTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKCdtb3ZlbWVudFknIGluIGV2ZW50KSB7XG4gICAgICByZXR1cm4gZXZlbnQubW92ZW1lbnRZO1xuICAgIH1cblxuICAgIHZhciBzY3JlZW5ZID0gcHJldmlvdXNTY3JlZW5ZO1xuICAgIHByZXZpb3VzU2NyZWVuWSA9IGV2ZW50LnNjcmVlblk7XG5cbiAgICBpZiAoIWlzTW92ZW1lbnRZU2V0KSB7XG4gICAgICBpc01vdmVtZW50WVNldCA9IHRydWU7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gZXZlbnQudHlwZSA9PT0gJ21vdXNlbW92ZScgPyBldmVudC5zY3JlZW5ZIC0gc2NyZWVuWSA6IDA7XG4gIH1cbn0pO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgUG9pbnRlckV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL3BvaW50ZXJldmVudHMvXG4gKi9cbnZhciBTeW50aGV0aWNQb2ludGVyRXZlbnQgPSBTeW50aGV0aWNNb3VzZUV2ZW50LmV4dGVuZCh7XG4gIHBvaW50ZXJJZDogbnVsbCxcbiAgd2lkdGg6IG51bGwsXG4gIGhlaWdodDogbnVsbCxcbiAgcHJlc3N1cmU6IG51bGwsXG4gIHRhbmdlbnRpYWxQcmVzc3VyZTogbnVsbCxcbiAgdGlsdFg6IG51bGwsXG4gIHRpbHRZOiBudWxsLFxuICB0d2lzdDogbnVsbCxcbiAgcG9pbnRlclR5cGU6IG51bGwsXG4gIGlzUHJpbWFyeTogbnVsbFxufSk7XG5cbnZhciBldmVudFR5cGVzJDIgPSB7XG4gIG1vdXNlRW50ZXI6IHtcbiAgICByZWdpc3RyYXRpb25OYW1lOiAnb25Nb3VzZUVudGVyJyxcbiAgICBkZXBlbmRlbmNpZXM6IFtUT1BfTU9VU0VfT1VULCBUT1BfTU9VU0VfT1ZFUl1cbiAgfSxcbiAgbW91c2VMZWF2ZToge1xuICAgIHJlZ2lzdHJhdGlvbk5hbWU6ICdvbk1vdXNlTGVhdmUnLFxuICAgIGRlcGVuZGVuY2llczogW1RPUF9NT1VTRV9PVVQsIFRPUF9NT1VTRV9PVkVSXVxuICB9LFxuICBwb2ludGVyRW50ZXI6IHtcbiAgICByZWdpc3RyYXRpb25OYW1lOiAnb25Qb2ludGVyRW50ZXInLFxuICAgIGRlcGVuZGVuY2llczogW1RPUF9QT0lOVEVSX09VVCwgVE9QX1BPSU5URVJfT1ZFUl1cbiAgfSxcbiAgcG9pbnRlckxlYXZlOiB7XG4gICAgcmVnaXN0cmF0aW9uTmFtZTogJ29uUG9pbnRlckxlYXZlJyxcbiAgICBkZXBlbmRlbmNpZXM6IFtUT1BfUE9JTlRFUl9PVVQsIFRPUF9QT0lOVEVSX09WRVJdXG4gIH1cbn07XG5cbnZhciBFbnRlckxlYXZlRXZlbnRQbHVnaW4gPSB7XG4gIGV2ZW50VHlwZXM6IGV2ZW50VHlwZXMkMixcblxuICAvKipcbiAgICogRm9yIGFsbW9zdCBldmVyeSBpbnRlcmFjdGlvbiB3ZSBjYXJlIGFib3V0LCB0aGVyZSB3aWxsIGJlIGJvdGggYSB0b3AtbGV2ZWxcbiAgICogYG1vdXNlb3ZlcmAgYW5kIGBtb3VzZW91dGAgZXZlbnQgdGhhdCBvY2N1cnMuIE9ubHkgdXNlIGBtb3VzZW91dGAgc28gdGhhdFxuICAgKiB3ZSBkbyBub3QgZXh0cmFjdCBkdXBsaWNhdGUgZXZlbnRzLiBIb3dldmVyLCBtb3ZpbmcgdGhlIG1vdXNlIGludG8gdGhlXG4gICAqIGJyb3dzZXIgZnJvbSBvdXRzaWRlIHdpbGwgbm90IGZpcmUgYSBgbW91c2VvdXRgIGV2ZW50LiBJbiB0aGlzIGNhc2UsIHdlIHVzZVxuICAgKiB0aGUgYG1vdXNlb3ZlcmAgdG9wLWxldmVsIGV2ZW50LlxuICAgKi9cbiAgZXh0cmFjdEV2ZW50czogZnVuY3Rpb24gKHRvcExldmVsVHlwZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gICAgdmFyIGlzT3ZlckV2ZW50ID0gdG9wTGV2ZWxUeXBlID09PSBUT1BfTU9VU0VfT1ZFUiB8fCB0b3BMZXZlbFR5cGUgPT09IFRPUF9QT0lOVEVSX09WRVI7XG4gICAgdmFyIGlzT3V0RXZlbnQgPSB0b3BMZXZlbFR5cGUgPT09IFRPUF9NT1VTRV9PVVQgfHwgdG9wTGV2ZWxUeXBlID09PSBUT1BfUE9JTlRFUl9PVVQ7XG5cbiAgICBpZiAoaXNPdmVyRXZlbnQgJiYgKG5hdGl2ZUV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgbmF0aXZlRXZlbnQuZnJvbUVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIWlzT3V0RXZlbnQgJiYgIWlzT3ZlckV2ZW50KSB7XG4gICAgICAvLyBNdXN0IG5vdCBiZSBhIG1vdXNlIG9yIHBvaW50ZXIgaW4gb3Igb3V0IC0gaWdub3JpbmcuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgd2luID0gdm9pZCAwO1xuICAgIGlmIChuYXRpdmVFdmVudFRhcmdldC53aW5kb3cgPT09IG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gICAgICAvLyBgbmF0aXZlRXZlbnRUYXJnZXRgIGlzIHByb2JhYmx5IGEgd2luZG93IG9iamVjdC5cbiAgICAgIHdpbiA9IG5hdGl2ZUV2ZW50VGFyZ2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUT0RPOiBGaWd1cmUgb3V0IHdoeSBgb3duZXJEb2N1bWVudGAgaXMgc29tZXRpbWVzIHVuZGVmaW5lZCBpbiBJRTguXG4gICAgICB2YXIgZG9jID0gbmF0aXZlRXZlbnRUYXJnZXQub3duZXJEb2N1bWVudDtcbiAgICAgIGlmIChkb2MpIHtcbiAgICAgICAgd2luID0gZG9jLmRlZmF1bHRWaWV3IHx8IGRvYy5wYXJlbnRXaW5kb3c7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aW4gPSB3aW5kb3c7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGZyb20gPSB2b2lkIDA7XG4gICAgdmFyIHRvID0gdm9pZCAwO1xuICAgIGlmIChpc091dEV2ZW50KSB7XG4gICAgICBmcm9tID0gdGFyZ2V0SW5zdDtcbiAgICAgIHZhciByZWxhdGVkID0gbmF0aXZlRXZlbnQucmVsYXRlZFRhcmdldCB8fCBuYXRpdmVFdmVudC50b0VsZW1lbnQ7XG4gICAgICB0byA9IHJlbGF0ZWQgPyBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShyZWxhdGVkKSA6IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE1vdmluZyB0byBhIG5vZGUgZnJvbSBvdXRzaWRlIHRoZSB3aW5kb3cuXG4gICAgICBmcm9tID0gbnVsbDtcbiAgICAgIHRvID0gdGFyZ2V0SW5zdDtcbiAgICB9XG5cbiAgICBpZiAoZnJvbSA9PT0gdG8pIHtcbiAgICAgIC8vIE5vdGhpbmcgcGVydGFpbnMgdG8gb3VyIG1hbmFnZWQgY29tcG9uZW50cy5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBldmVudEludGVyZmFjZSA9IHZvaWQgMCxcbiAgICAgICAgbGVhdmVFdmVudFR5cGUgPSB2b2lkIDAsXG4gICAgICAgIGVudGVyRXZlbnRUeXBlID0gdm9pZCAwLFxuICAgICAgICBldmVudFR5cGVQcmVmaXggPSB2b2lkIDA7XG5cbiAgICBpZiAodG9wTGV2ZWxUeXBlID09PSBUT1BfTU9VU0VfT1VUIHx8IHRvcExldmVsVHlwZSA9PT0gVE9QX01PVVNFX09WRVIpIHtcbiAgICAgIGV2ZW50SW50ZXJmYWNlID0gU3ludGhldGljTW91c2VFdmVudDtcbiAgICAgIGxlYXZlRXZlbnRUeXBlID0gZXZlbnRUeXBlcyQyLm1vdXNlTGVhdmU7XG4gICAgICBlbnRlckV2ZW50VHlwZSA9IGV2ZW50VHlwZXMkMi5tb3VzZUVudGVyO1xuICAgICAgZXZlbnRUeXBlUHJlZml4ID0gJ21vdXNlJztcbiAgICB9IGVsc2UgaWYgKHRvcExldmVsVHlwZSA9PT0gVE9QX1BPSU5URVJfT1VUIHx8IHRvcExldmVsVHlwZSA9PT0gVE9QX1BPSU5URVJfT1ZFUikge1xuICAgICAgZXZlbnRJbnRlcmZhY2UgPSBTeW50aGV0aWNQb2ludGVyRXZlbnQ7XG4gICAgICBsZWF2ZUV2ZW50VHlwZSA9IGV2ZW50VHlwZXMkMi5wb2ludGVyTGVhdmU7XG4gICAgICBlbnRlckV2ZW50VHlwZSA9IGV2ZW50VHlwZXMkMi5wb2ludGVyRW50ZXI7XG4gICAgICBldmVudFR5cGVQcmVmaXggPSAncG9pbnRlcic7XG4gICAgfVxuXG4gICAgdmFyIGZyb21Ob2RlID0gZnJvbSA9PSBudWxsID8gd2luIDogZ2V0Tm9kZUZyb21JbnN0YW5jZSQxKGZyb20pO1xuICAgIHZhciB0b05vZGUgPSB0byA9PSBudWxsID8gd2luIDogZ2V0Tm9kZUZyb21JbnN0YW5jZSQxKHRvKTtcblxuICAgIHZhciBsZWF2ZSA9IGV2ZW50SW50ZXJmYWNlLmdldFBvb2xlZChsZWF2ZUV2ZW50VHlwZSwgZnJvbSwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICBsZWF2ZS50eXBlID0gZXZlbnRUeXBlUHJlZml4ICsgJ2xlYXZlJztcbiAgICBsZWF2ZS50YXJnZXQgPSBmcm9tTm9kZTtcbiAgICBsZWF2ZS5yZWxhdGVkVGFyZ2V0ID0gdG9Ob2RlO1xuXG4gICAgdmFyIGVudGVyID0gZXZlbnRJbnRlcmZhY2UuZ2V0UG9vbGVkKGVudGVyRXZlbnRUeXBlLCB0bywgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICBlbnRlci50eXBlID0gZXZlbnRUeXBlUHJlZml4ICsgJ2VudGVyJztcbiAgICBlbnRlci50YXJnZXQgPSB0b05vZGU7XG4gICAgZW50ZXIucmVsYXRlZFRhcmdldCA9IGZyb21Ob2RlO1xuXG4gICAgYWNjdW11bGF0ZUVudGVyTGVhdmVEaXNwYXRjaGVzKGxlYXZlLCBlbnRlciwgZnJvbSwgdG8pO1xuXG4gICAgcmV0dXJuIFtsZWF2ZSwgZW50ZXJdO1xuICB9XG59O1xuXG4vKipcbiAqIGlubGluZWQgT2JqZWN0LmlzIHBvbHlmaWxsIHRvIGF2b2lkIHJlcXVpcmluZyBjb25zdW1lcnMgc2hpcCB0aGVpciBvd25cbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9pc1xuICovXG5mdW5jdGlvbiBpcyh4LCB5KSB7XG4gIHJldHVybiB4ID09PSB5ICYmICh4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSkgfHwgeCAhPT0geCAmJiB5ICE9PSB5IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIDtcbn1cblxudmFyIGhhc093blByb3BlcnR5JDEgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFBlcmZvcm1zIGVxdWFsaXR5IGJ5IGl0ZXJhdGluZyB0aHJvdWdoIGtleXMgb24gYW4gb2JqZWN0IGFuZCByZXR1cm5pbmcgZmFsc2VcbiAqIHdoZW4gYW55IGtleSBoYXMgdmFsdWVzIHdoaWNoIGFyZSBub3Qgc3RyaWN0bHkgZXF1YWwgYmV0d2VlbiB0aGUgYXJndW1lbnRzLlxuICogUmV0dXJucyB0cnVlIHdoZW4gdGhlIHZhbHVlcyBvZiBhbGwga2V5cyBhcmUgc3RyaWN0bHkgZXF1YWwuXG4gKi9cbmZ1bmN0aW9uIHNoYWxsb3dFcXVhbChvYmpBLCBvYmpCKSB7XG4gIGlmIChpcyhvYmpBLCBvYmpCKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmpBICE9PSAnb2JqZWN0JyB8fCBvYmpBID09PSBudWxsIHx8IHR5cGVvZiBvYmpCICE9PSAnb2JqZWN0JyB8fCBvYmpCID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGtleXNBID0gT2JqZWN0LmtleXMob2JqQSk7XG4gIHZhciBrZXlzQiA9IE9iamVjdC5rZXlzKG9iakIpO1xuXG4gIGlmIChrZXlzQS5sZW5ndGggIT09IGtleXNCLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIFRlc3QgZm9yIEEncyBrZXlzIGRpZmZlcmVudCBmcm9tIEIuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5c0EubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIWhhc093blByb3BlcnR5JDEuY2FsbChvYmpCLCBrZXlzQVtpXSkgfHwgIWlzKG9iakFba2V5c0FbaV1dLCBvYmpCW2tleXNBW2ldXSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBgUmVhY3RJbnN0YW5jZU1hcGAgbWFpbnRhaW5zIGEgbWFwcGluZyBmcm9tIGEgcHVibGljIGZhY2luZyBzdGF0ZWZ1bFxuICogaW5zdGFuY2UgKGtleSkgYW5kIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiAodmFsdWUpLiBUaGlzIGFsbG93cyBwdWJsaWNcbiAqIG1ldGhvZHMgdG8gYWNjZXB0IHRoZSB1c2VyIGZhY2luZyBpbnN0YW5jZSBhcyBhbiBhcmd1bWVudCBhbmQgbWFwIHRoZW0gYmFja1xuICogdG8gaW50ZXJuYWwgbWV0aG9kcy5cbiAqXG4gKiBOb3RlIHRoYXQgdGhpcyBtb2R1bGUgaXMgY3VycmVudGx5IHNoYXJlZCBhbmQgYXNzdW1lZCB0byBiZSBzdGF0ZWxlc3MuXG4gKiBJZiB0aGlzIGJlY29tZXMgYW4gYWN0dWFsIE1hcCwgdGhhdCB3aWxsIGJyZWFrLlxuICovXG5cbi8qKlxuICogVGhpcyBBUEkgc2hvdWxkIGJlIGNhbGxlZCBgZGVsZXRlYCBidXQgd2UnZCBoYXZlIHRvIG1ha2Ugc3VyZSB0byBhbHdheXNcbiAqIHRyYW5zZm9ybSB0aGVzZSB0byBzdHJpbmdzIGZvciBJRSBzdXBwb3J0LiBXaGVuIHRoaXMgdHJhbnNmb3JtIGlzIGZ1bGx5XG4gKiBzdXBwb3J0ZWQgd2UgY2FuIHJlbmFtZSBpdC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldChrZXkpIHtcbiAgcmV0dXJuIGtleS5fcmVhY3RJbnRlcm5hbEZpYmVyO1xufVxuXG5mdW5jdGlvbiBoYXMoa2V5KSB7XG4gIHJldHVybiBrZXkuX3JlYWN0SW50ZXJuYWxGaWJlciAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICBrZXkuX3JlYWN0SW50ZXJuYWxGaWJlciA9IHZhbHVlO1xufVxuXG4vLyBEb24ndCBjaGFuZ2UgdGhlc2UgdHdvIHZhbHVlcy4gVGhleSdyZSB1c2VkIGJ5IFJlYWN0IERldiBUb29scy5cbnZhciBOb0VmZmVjdCA9IC8qICAgICAgICAgICAgICAqLzA7XG52YXIgUGVyZm9ybWVkV29yayA9IC8qICAgICAgICAgKi8xO1xuXG4vLyBZb3UgY2FuIGNoYW5nZSB0aGUgcmVzdCAoYW5kIGFkZCBtb3JlKS5cbnZhciBQbGFjZW1lbnQgPSAvKiAgICAgICAgICAgICAqLzI7XG52YXIgVXBkYXRlID0gLyogICAgICAgICAgICAgICAgKi80O1xudmFyIFBsYWNlbWVudEFuZFVwZGF0ZSA9IC8qICAgICovNjtcbnZhciBEZWxldGlvbiA9IC8qICAgICAgICAgICAgICAqLzg7XG52YXIgQ29udGVudFJlc2V0ID0gLyogICAgICAgICAgKi8xNjtcbnZhciBDYWxsYmFjayA9IC8qICAgICAgICAgICAgICAqLzMyO1xudmFyIERpZENhcHR1cmUgPSAvKiAgICAgICAgICAgICovNjQ7XG52YXIgUmVmID0gLyogICAgICAgICAgICAgICAgICAgKi8xMjg7XG52YXIgU25hcHNob3QgPSAvKiAgICAgICAgICAgICAgKi8yNTY7XG52YXIgUGFzc2l2ZSA9IC8qICAgICAgICAgICAgICAgKi81MTI7XG5cbi8vIFBhc3NpdmUgJiBVcGRhdGUgJiBDYWxsYmFjayAmIFJlZiAmIFNuYXBzaG90XG52YXIgTGlmZWN5Y2xlRWZmZWN0TWFzayA9IC8qICAgKi85MzI7XG5cbi8vIFVuaW9uIG9mIGFsbCBob3N0IGVmZmVjdHNcbnZhciBIb3N0RWZmZWN0TWFzayA9IC8qICAgICAgICAqLzEwMjM7XG5cbnZhciBJbmNvbXBsZXRlID0gLyogICAgICAgICAgICAqLzEwMjQ7XG52YXIgU2hvdWxkQ2FwdHVyZSA9IC8qICAgICAgICAgKi8yMDQ4O1xuXG52YXIgUmVhY3RDdXJyZW50T3duZXIkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyO1xuXG52YXIgTU9VTlRJTkcgPSAxO1xudmFyIE1PVU5URUQgPSAyO1xudmFyIFVOTU9VTlRFRCA9IDM7XG5cbmZ1bmN0aW9uIGlzRmliZXJNb3VudGVkSW1wbChmaWJlcikge1xuICB2YXIgbm9kZSA9IGZpYmVyO1xuICBpZiAoIWZpYmVyLmFsdGVybmF0ZSkge1xuICAgIC8vIElmIHRoZXJlIGlzIG5vIGFsdGVybmF0ZSwgdGhpcyBtaWdodCBiZSBhIG5ldyB0cmVlIHRoYXQgaXNuJ3QgaW5zZXJ0ZWRcbiAgICAvLyB5ZXQuIElmIGl0IGlzLCB0aGVuIGl0IHdpbGwgaGF2ZSBhIHBlbmRpbmcgaW5zZXJ0aW9uIGVmZmVjdCBvbiBpdC5cbiAgICBpZiAoKG5vZGUuZWZmZWN0VGFnICYgUGxhY2VtZW50KSAhPT0gTm9FZmZlY3QpIHtcbiAgICAgIHJldHVybiBNT1VOVElORztcbiAgICB9XG4gICAgd2hpbGUgKG5vZGUucmV0dXJuKSB7XG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICBpZiAoKG5vZGUuZWZmZWN0VGFnICYgUGxhY2VtZW50KSAhPT0gTm9FZmZlY3QpIHtcbiAgICAgICAgcmV0dXJuIE1PVU5USU5HO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAobm9kZS5yZXR1cm4pIHtcbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG4gIH1cbiAgaWYgKG5vZGUudGFnID09PSBIb3N0Um9vdCkge1xuICAgIC8vIFRPRE86IENoZWNrIGlmIHRoaXMgd2FzIGEgbmVzdGVkIEhvc3RSb290IHdoZW4gdXNlZCB3aXRoXG4gICAgLy8gcmVuZGVyQ29udGFpbmVySW50b1N1YnRyZWUuXG4gICAgcmV0dXJuIE1PVU5URUQ7XG4gIH1cbiAgLy8gSWYgd2UgZGlkbid0IGhpdCB0aGUgcm9vdCwgdGhhdCBtZWFucyB0aGF0IHdlJ3JlIGluIGFuIGRpc2Nvbm5lY3RlZCB0cmVlXG4gIC8vIHRoYXQgaGFzIGJlZW4gdW5tb3VudGVkLlxuICByZXR1cm4gVU5NT1VOVEVEO1xufVxuXG5mdW5jdGlvbiBpc0ZpYmVyTW91bnRlZChmaWJlcikge1xuICByZXR1cm4gaXNGaWJlck1vdW50ZWRJbXBsKGZpYmVyKSA9PT0gTU9VTlRFRDtcbn1cblxuZnVuY3Rpb24gaXNNb3VudGVkKGNvbXBvbmVudCkge1xuICB7XG4gICAgdmFyIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50O1xuICAgIGlmIChvd25lciAhPT0gbnVsbCAmJiBvd25lci50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICB2YXIgb3duZXJGaWJlciA9IG93bmVyO1xuICAgICAgdmFyIGluc3RhbmNlID0gb3duZXJGaWJlci5zdGF0ZU5vZGU7XG4gICAgICAhaW5zdGFuY2UuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyID8gd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnJXMgaXMgYWNjZXNzaW5nIGlzTW91bnRlZCBpbnNpZGUgaXRzIHJlbmRlcigpIGZ1bmN0aW9uLiAnICsgJ3JlbmRlcigpIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlLiBJdCBzaG91bGQgJyArICduZXZlciBhY2Nlc3Mgc29tZXRoaW5nIHRoYXQgcmVxdWlyZXMgc3RhbGUgZGF0YSBmcm9tIHRoZSBwcmV2aW91cyAnICsgJ3JlbmRlciwgc3VjaCBhcyByZWZzLiBNb3ZlIHRoaXMgbG9naWMgdG8gY29tcG9uZW50RGlkTW91bnQgYW5kICcgKyAnY29tcG9uZW50RGlkVXBkYXRlIGluc3RlYWQuJywgZ2V0Q29tcG9uZW50TmFtZShvd25lckZpYmVyLnR5cGUpIHx8ICdBIGNvbXBvbmVudCcpIDogdm9pZCAwO1xuICAgICAgaW5zdGFuY2UuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB2YXIgZmliZXIgPSBnZXQoY29tcG9uZW50KTtcbiAgaWYgKCFmaWJlcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gaXNGaWJlck1vdW50ZWRJbXBsKGZpYmVyKSA9PT0gTU9VTlRFRDtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0SXNNb3VudGVkKGZpYmVyKSB7XG4gICEoaXNGaWJlck1vdW50ZWRJbXBsKGZpYmVyKSA9PT0gTU9VTlRFRCkgPyBpbnZhcmlhbnQoZmFsc2UsICdVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuJykgOiB2b2lkIDA7XG59XG5cbmZ1bmN0aW9uIGZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoKGZpYmVyKSB7XG4gIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG4gIGlmICghYWx0ZXJuYXRlKSB7XG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gYWx0ZXJuYXRlLCB0aGVuIHdlIG9ubHkgbmVlZCB0byBjaGVjayBpZiBpdCBpcyBtb3VudGVkLlxuICAgIHZhciBzdGF0ZSA9IGlzRmliZXJNb3VudGVkSW1wbChmaWJlcik7XG4gICAgIShzdGF0ZSAhPT0gVU5NT1VOVEVEKSA/IGludmFyaWFudChmYWxzZSwgJ1VuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC4nKSA6IHZvaWQgMDtcbiAgICBpZiAoc3RhdGUgPT09IE1PVU5USU5HKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGZpYmVyO1xuICB9XG4gIC8vIElmIHdlIGhhdmUgdHdvIHBvc3NpYmxlIGJyYW5jaGVzLCB3ZSdsbCB3YWxrIGJhY2t3YXJkcyB1cCB0byB0aGUgcm9vdFxuICAvLyB0byBzZWUgd2hhdCBwYXRoIHRoZSByb290IHBvaW50cyB0by4gT24gdGhlIHdheSB3ZSBtYXkgaGl0IG9uZSBvZiB0aGVcbiAgLy8gc3BlY2lhbCBjYXNlcyBhbmQgd2UnbGwgZGVhbCB3aXRoIHRoZW0uXG4gIHZhciBhID0gZmliZXI7XG4gIHZhciBiID0gYWx0ZXJuYXRlO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIHZhciBwYXJlbnRBID0gYS5yZXR1cm47XG4gICAgdmFyIHBhcmVudEIgPSBwYXJlbnRBID8gcGFyZW50QS5hbHRlcm5hdGUgOiBudWxsO1xuICAgIGlmICghcGFyZW50QSB8fCAhcGFyZW50Qikge1xuICAgICAgLy8gV2UncmUgYXQgdGhlIHJvb3QuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBJZiBib3RoIGNvcGllcyBvZiB0aGUgcGFyZW50IGZpYmVyIHBvaW50IHRvIHRoZSBzYW1lIGNoaWxkLCB3ZSBjYW5cbiAgICAvLyBhc3N1bWUgdGhhdCB0aGUgY2hpbGQgaXMgY3VycmVudC4gVGhpcyBoYXBwZW5zIHdoZW4gd2UgYmFpbG91dCBvbiBsb3dcbiAgICAvLyBwcmlvcml0eTogdGhlIGJhaWxlZCBvdXQgZmliZXIncyBjaGlsZCByZXVzZXMgdGhlIGN1cnJlbnQgY2hpbGQuXG4gICAgaWYgKHBhcmVudEEuY2hpbGQgPT09IHBhcmVudEIuY2hpbGQpIHtcbiAgICAgIHZhciBjaGlsZCA9IHBhcmVudEEuY2hpbGQ7XG4gICAgICB3aGlsZSAoY2hpbGQpIHtcbiAgICAgICAgaWYgKGNoaWxkID09PSBhKSB7XG4gICAgICAgICAgLy8gV2UndmUgZGV0ZXJtaW5lZCB0aGF0IEEgaXMgdGhlIGN1cnJlbnQgYnJhbmNoLlxuICAgICAgICAgIGFzc2VydElzTW91bnRlZChwYXJlbnRBKTtcbiAgICAgICAgICByZXR1cm4gZmliZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoaWxkID09PSBiKSB7XG4gICAgICAgICAgLy8gV2UndmUgZGV0ZXJtaW5lZCB0aGF0IEIgaXMgdGhlIGN1cnJlbnQgYnJhbmNoLlxuICAgICAgICAgIGFzc2VydElzTW91bnRlZChwYXJlbnRBKTtcbiAgICAgICAgICByZXR1cm4gYWx0ZXJuYXRlO1xuICAgICAgICB9XG4gICAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICAgIH1cbiAgICAgIC8vIFdlIHNob3VsZCBuZXZlciBoYXZlIGFuIGFsdGVybmF0ZSBmb3IgYW55IG1vdW50aW5nIG5vZGUuIFNvIHRoZSBvbmx5XG4gICAgICAvLyB3YXkgdGhpcyBjb3VsZCBwb3NzaWJseSBoYXBwZW4gaXMgaWYgdGhpcyB3YXMgdW5tb3VudGVkLCBpZiBhdCBhbGwuXG4gICAgICBpbnZhcmlhbnQoZmFsc2UsICdVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuJyk7XG4gICAgfVxuXG4gICAgaWYgKGEucmV0dXJuICE9PSBiLnJldHVybikge1xuICAgICAgLy8gVGhlIHJldHVybiBwb2ludGVyIG9mIEEgYW5kIHRoZSByZXR1cm4gcG9pbnRlciBvZiBCIHBvaW50IHRvIGRpZmZlcmVudFxuICAgICAgLy8gZmliZXJzLiBXZSBhc3N1bWUgdGhhdCByZXR1cm4gcG9pbnRlcnMgbmV2ZXIgY3Jpc3MtY3Jvc3MsIHNvIEEgbXVzdFxuICAgICAgLy8gYmVsb25nIHRvIHRoZSBjaGlsZCBzZXQgb2YgQS5yZXR1cm4sIGFuZCBCIG11c3QgYmVsb25nIHRvIHRoZSBjaGlsZFxuICAgICAgLy8gc2V0IG9mIEIucmV0dXJuLlxuICAgICAgYSA9IHBhcmVudEE7XG4gICAgICBiID0gcGFyZW50QjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlIHJldHVybiBwb2ludGVycyBwb2ludCB0byB0aGUgc2FtZSBmaWJlci4gV2UnbGwgaGF2ZSB0byB1c2UgdGhlXG4gICAgICAvLyBkZWZhdWx0LCBzbG93IHBhdGg6IHNjYW4gdGhlIGNoaWxkIHNldHMgb2YgZWFjaCBwYXJlbnQgYWx0ZXJuYXRlIHRvIHNlZVxuICAgICAgLy8gd2hpY2ggY2hpbGQgYmVsb25ncyB0byB3aGljaCBzZXQuXG4gICAgICAvL1xuICAgICAgLy8gU2VhcmNoIHBhcmVudCBBJ3MgY2hpbGQgc2V0XG4gICAgICB2YXIgZGlkRmluZENoaWxkID0gZmFsc2U7XG4gICAgICB2YXIgX2NoaWxkID0gcGFyZW50QS5jaGlsZDtcbiAgICAgIHdoaWxlIChfY2hpbGQpIHtcbiAgICAgICAgaWYgKF9jaGlsZCA9PT0gYSkge1xuICAgICAgICAgIGRpZEZpbmRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgYSA9IHBhcmVudEE7XG4gICAgICAgICAgYiA9IHBhcmVudEI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF9jaGlsZCA9PT0gYikge1xuICAgICAgICAgIGRpZEZpbmRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgYiA9IHBhcmVudEE7XG4gICAgICAgICAgYSA9IHBhcmVudEI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgX2NoaWxkID0gX2NoaWxkLnNpYmxpbmc7XG4gICAgICB9XG4gICAgICBpZiAoIWRpZEZpbmRDaGlsZCkge1xuICAgICAgICAvLyBTZWFyY2ggcGFyZW50IEIncyBjaGlsZCBzZXRcbiAgICAgICAgX2NoaWxkID0gcGFyZW50Qi5jaGlsZDtcbiAgICAgICAgd2hpbGUgKF9jaGlsZCkge1xuICAgICAgICAgIGlmIChfY2hpbGQgPT09IGEpIHtcbiAgICAgICAgICAgIGRpZEZpbmRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgICBhID0gcGFyZW50QjtcbiAgICAgICAgICAgIGIgPSBwYXJlbnRBO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChfY2hpbGQgPT09IGIpIHtcbiAgICAgICAgICAgIGRpZEZpbmRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgICBiID0gcGFyZW50QjtcbiAgICAgICAgICAgIGEgPSBwYXJlbnRBO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9jaGlsZCA9IF9jaGlsZC5zaWJsaW5nO1xuICAgICAgICB9XG4gICAgICAgICFkaWRGaW5kQ2hpbGQgPyBpbnZhcmlhbnQoZmFsc2UsICdDaGlsZCB3YXMgbm90IGZvdW5kIGluIGVpdGhlciBwYXJlbnQgc2V0LiBUaGlzIGluZGljYXRlcyBhIGJ1ZyBpbiBSZWFjdCByZWxhdGVkIHRvIHRoZSByZXR1cm4gcG9pbnRlci4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJykgOiB2b2lkIDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgIShhLmFsdGVybmF0ZSA9PT0gYikgPyBpbnZhcmlhbnQoZmFsc2UsICdSZXR1cm4gZmliZXJzIHNob3VsZCBhbHdheXMgYmUgZWFjaCBvdGhlcnNcXCcgYWx0ZXJuYXRlcy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKSA6IHZvaWQgMDtcbiAgfVxuICAvLyBJZiB0aGUgcm9vdCBpcyBub3QgYSBob3N0IGNvbnRhaW5lciwgd2UncmUgaW4gYSBkaXNjb25uZWN0ZWQgdHJlZS4gSS5lLlxuICAvLyB1bm1vdW50ZWQuXG4gICEoYS50YWcgPT09IEhvc3RSb290KSA/IGludmFyaWFudChmYWxzZSwgJ1VuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC4nKSA6IHZvaWQgMDtcbiAgaWYgKGEuc3RhdGVOb2RlLmN1cnJlbnQgPT09IGEpIHtcbiAgICAvLyBXZSd2ZSBkZXRlcm1pbmVkIHRoYXQgQSBpcyB0aGUgY3VycmVudCBicmFuY2guXG4gICAgcmV0dXJuIGZpYmVyO1xuICB9XG4gIC8vIE90aGVyd2lzZSBCIGhhcyB0byBiZSBjdXJyZW50IGJyYW5jaC5cbiAgcmV0dXJuIGFsdGVybmF0ZTtcbn1cblxuZnVuY3Rpb24gZmluZEN1cnJlbnRIb3N0RmliZXIocGFyZW50KSB7XG4gIHZhciBjdXJyZW50UGFyZW50ID0gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGgocGFyZW50KTtcbiAgaWYgKCFjdXJyZW50UGFyZW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBOZXh0IHdlJ2xsIGRyaWxsIGRvd24gdGhpcyBjb21wb25lbnQgdG8gZmluZCB0aGUgZmlyc3QgSG9zdENvbXBvbmVudC9UZXh0LlxuICB2YXIgbm9kZSA9IGN1cnJlbnRQYXJlbnQ7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKG5vZGUudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IG5vZGUudGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfSBlbHNlIGlmIChub2RlLmNoaWxkKSB7XG4gICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAobm9kZSA9PT0gY3VycmVudFBhcmVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHdoaWxlICghbm9kZS5zaWJsaW5nKSB7XG4gICAgICBpZiAoIW5vZGUucmV0dXJuIHx8IG5vZGUucmV0dXJuID09PSBjdXJyZW50UGFyZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfVxuICAvLyBGbG93IG5lZWRzIHRoZSByZXR1cm4gbnVsbCBoZXJlLCBidXQgRVNMaW50IGNvbXBsYWlucyBhYm91dCBpdC5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVucmVhY2hhYmxlXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBmaW5kQ3VycmVudEhvc3RGaWJlcldpdGhOb1BvcnRhbHMocGFyZW50KSB7XG4gIHZhciBjdXJyZW50UGFyZW50ID0gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGgocGFyZW50KTtcbiAgaWYgKCFjdXJyZW50UGFyZW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBOZXh0IHdlJ2xsIGRyaWxsIGRvd24gdGhpcyBjb21wb25lbnQgdG8gZmluZCB0aGUgZmlyc3QgSG9zdENvbXBvbmVudC9UZXh0LlxuICB2YXIgbm9kZSA9IGN1cnJlbnRQYXJlbnQ7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKG5vZGUudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IG5vZGUudGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfSBlbHNlIGlmIChub2RlLmNoaWxkICYmIG5vZGUudGFnICE9PSBIb3N0UG9ydGFsKSB7XG4gICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAobm9kZSA9PT0gY3VycmVudFBhcmVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHdoaWxlICghbm9kZS5zaWJsaW5nKSB7XG4gICAgICBpZiAoIW5vZGUucmV0dXJuIHx8IG5vZGUucmV0dXJuID09PSBjdXJyZW50UGFyZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfVxuICAvLyBGbG93IG5lZWRzIHRoZSByZXR1cm4gbnVsbCBoZXJlLCBidXQgRVNMaW50IGNvbXBsYWlucyBhYm91dCBpdC5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVucmVhY2hhYmxlXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBhZGRFdmVudEJ1YmJsZUxpc3RlbmVyKGVsZW1lbnQsIGV2ZW50VHlwZSwgbGlzdGVuZXIpIHtcbiAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIGZhbHNlKTtcbn1cblxuZnVuY3Rpb24gYWRkRXZlbnRDYXB0dXJlTGlzdGVuZXIoZWxlbWVudCwgZXZlbnRUeXBlLCBsaXN0ZW5lcikge1xuICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwgdHJ1ZSk7XG59XG5cbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWFuaW1hdGlvbnMvI0FuaW1hdGlvbkV2ZW50LWludGVyZmFjZVxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQW5pbWF0aW9uRXZlbnRcbiAqL1xudmFyIFN5bnRoZXRpY0FuaW1hdGlvbkV2ZW50ID0gU3ludGhldGljRXZlbnQuZXh0ZW5kKHtcbiAgYW5pbWF0aW9uTmFtZTogbnVsbCxcbiAgZWxhcHNlZFRpbWU6IG51bGwsXG4gIHBzZXVkb0VsZW1lbnQ6IG51bGxcbn0pO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvY2xpcGJvYXJkLWFwaXMvXG4gKi9cbnZhciBTeW50aGV0aWNDbGlwYm9hcmRFdmVudCA9IFN5bnRoZXRpY0V2ZW50LmV4dGVuZCh7XG4gIGNsaXBib2FyZERhdGE6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiAnY2xpcGJvYXJkRGF0YScgaW4gZXZlbnQgPyBldmVudC5jbGlwYm9hcmREYXRhIDogd2luZG93LmNsaXBib2FyZERhdGE7XG4gIH1cbn0pO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgRm9jdXNFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cbnZhciBTeW50aGV0aWNGb2N1c0V2ZW50ID0gU3ludGhldGljVUlFdmVudC5leHRlbmQoe1xuICByZWxhdGVkVGFyZ2V0OiBudWxsXG59KTtcblxuLyoqXG4gKiBgY2hhckNvZGVgIHJlcHJlc2VudHMgdGhlIGFjdHVhbCBcImNoYXJhY3RlciBjb2RlXCIgYW5kIGlzIHNhZmUgdG8gdXNlIHdpdGhcbiAqIGBTdHJpbmcuZnJvbUNoYXJDb2RlYC4gQXMgc3VjaCwgb25seSBrZXlzIHRoYXQgY29ycmVzcG9uZCB0byBwcmludGFibGVcbiAqIGNoYXJhY3RlcnMgcHJvZHVjZSBhIHZhbGlkIGBjaGFyQ29kZWAsIHRoZSBvbmx5IGV4Y2VwdGlvbiB0byB0aGlzIGlzIEVudGVyLlxuICogVGhlIFRhYi1rZXkgaXMgY29uc2lkZXJlZCBub24tcHJpbnRhYmxlIGFuZCBkb2VzIG5vdCBoYXZlIGEgYGNoYXJDb2RlYCxcbiAqIHByZXN1bWFibHkgYmVjYXVzZSBpdCBkb2VzIG5vdCBwcm9kdWNlIGEgdGFiLWNoYXJhY3RlciBpbiBicm93c2Vycy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IE5vcm1hbGl6ZWQgYGNoYXJDb2RlYCBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCkge1xuICB2YXIgY2hhckNvZGUgPSB2b2lkIDA7XG4gIHZhciBrZXlDb2RlID0gbmF0aXZlRXZlbnQua2V5Q29kZTtcblxuICBpZiAoJ2NoYXJDb2RlJyBpbiBuYXRpdmVFdmVudCkge1xuICAgIGNoYXJDb2RlID0gbmF0aXZlRXZlbnQuY2hhckNvZGU7XG5cbiAgICAvLyBGRiBkb2VzIG5vdCBzZXQgYGNoYXJDb2RlYCBmb3IgdGhlIEVudGVyLWtleSwgY2hlY2sgYWdhaW5zdCBga2V5Q29kZWAuXG4gICAgaWYgKGNoYXJDb2RlID09PSAwICYmIGtleUNvZGUgPT09IDEzKSB7XG4gICAgICBjaGFyQ29kZSA9IDEzO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJRTggZG9lcyBub3QgaW1wbGVtZW50IGBjaGFyQ29kZWAsIGJ1dCBga2V5Q29kZWAgaGFzIHRoZSBjb3JyZWN0IHZhbHVlLlxuICAgIGNoYXJDb2RlID0ga2V5Q29kZTtcbiAgfVxuXG4gIC8vIElFIGFuZCBFZGdlIChvbiBXaW5kb3dzKSBhbmQgQ2hyb21lIC8gU2FmYXJpIChvbiBXaW5kb3dzIGFuZCBMaW51eClcbiAgLy8gcmVwb3J0IEVudGVyIGFzIGNoYXJDb2RlIDEwIHdoZW4gY3RybCBpcyBwcmVzc2VkLlxuICBpZiAoY2hhckNvZGUgPT09IDEwKSB7XG4gICAgY2hhckNvZGUgPSAxMztcbiAgfVxuXG4gIC8vIFNvbWUgbm9uLXByaW50YWJsZSBrZXlzIGFyZSByZXBvcnRlZCBpbiBgY2hhckNvZGVgL2BrZXlDb2RlYCwgZGlzY2FyZCB0aGVtLlxuICAvLyBNdXN0IG5vdCBkaXNjYXJkIHRoZSAobm9uLSlwcmludGFibGUgRW50ZXIta2V5LlxuICBpZiAoY2hhckNvZGUgPj0gMzIgfHwgY2hhckNvZGUgPT09IDEzKSB7XG4gICAgcmV0dXJuIGNoYXJDb2RlO1xuICB9XG5cbiAgcmV0dXJuIDA7XG59XG5cbi8qKlxuICogTm9ybWFsaXphdGlvbiBvZiBkZXByZWNhdGVkIEhUTUw1IGBrZXlgIHZhbHVlc1xuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudCNLZXlfbmFtZXNcbiAqL1xudmFyIG5vcm1hbGl6ZUtleSA9IHtcbiAgRXNjOiAnRXNjYXBlJyxcbiAgU3BhY2ViYXI6ICcgJyxcbiAgTGVmdDogJ0Fycm93TGVmdCcsXG4gIFVwOiAnQXJyb3dVcCcsXG4gIFJpZ2h0OiAnQXJyb3dSaWdodCcsXG4gIERvd246ICdBcnJvd0Rvd24nLFxuICBEZWw6ICdEZWxldGUnLFxuICBXaW46ICdPUycsXG4gIE1lbnU6ICdDb250ZXh0TWVudScsXG4gIEFwcHM6ICdDb250ZXh0TWVudScsXG4gIFNjcm9sbDogJ1Njcm9sbExvY2snLFxuICBNb3pQcmludGFibGVLZXk6ICdVbmlkZW50aWZpZWQnXG59O1xuXG4vKipcbiAqIFRyYW5zbGF0aW9uIGZyb20gbGVnYWN5IGBrZXlDb2RlYCB0byBIVE1MNSBga2V5YFxuICogT25seSBzcGVjaWFsIGtleXMgc3VwcG9ydGVkLCBhbGwgb3RoZXJzIGRlcGVuZCBvbiBrZXlib2FyZCBsYXlvdXQgb3IgYnJvd3NlclxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudCNLZXlfbmFtZXNcbiAqL1xudmFyIHRyYW5zbGF0ZVRvS2V5ID0ge1xuICAnOCc6ICdCYWNrc3BhY2UnLFxuICAnOSc6ICdUYWInLFxuICAnMTInOiAnQ2xlYXInLFxuICAnMTMnOiAnRW50ZXInLFxuICAnMTYnOiAnU2hpZnQnLFxuICAnMTcnOiAnQ29udHJvbCcsXG4gICcxOCc6ICdBbHQnLFxuICAnMTknOiAnUGF1c2UnLFxuICAnMjAnOiAnQ2Fwc0xvY2snLFxuICAnMjcnOiAnRXNjYXBlJyxcbiAgJzMyJzogJyAnLFxuICAnMzMnOiAnUGFnZVVwJyxcbiAgJzM0JzogJ1BhZ2VEb3duJyxcbiAgJzM1JzogJ0VuZCcsXG4gICczNic6ICdIb21lJyxcbiAgJzM3JzogJ0Fycm93TGVmdCcsXG4gICczOCc6ICdBcnJvd1VwJyxcbiAgJzM5JzogJ0Fycm93UmlnaHQnLFxuICAnNDAnOiAnQXJyb3dEb3duJyxcbiAgJzQ1JzogJ0luc2VydCcsXG4gICc0Nic6ICdEZWxldGUnLFxuICAnMTEyJzogJ0YxJyxcbiAgJzExMyc6ICdGMicsXG4gICcxMTQnOiAnRjMnLFxuICAnMTE1JzogJ0Y0JyxcbiAgJzExNic6ICdGNScsXG4gICcxMTcnOiAnRjYnLFxuICAnMTE4JzogJ0Y3JyxcbiAgJzExOSc6ICdGOCcsXG4gICcxMjAnOiAnRjknLFxuICAnMTIxJzogJ0YxMCcsXG4gICcxMjInOiAnRjExJyxcbiAgJzEyMyc6ICdGMTInLFxuICAnMTQ0JzogJ051bUxvY2snLFxuICAnMTQ1JzogJ1Njcm9sbExvY2snLFxuICAnMjI0JzogJ01ldGEnXG59O1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4ge3N0cmluZ30gTm9ybWFsaXplZCBga2V5YCBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gZ2V0RXZlbnRLZXkobmF0aXZlRXZlbnQpIHtcbiAgaWYgKG5hdGl2ZUV2ZW50LmtleSkge1xuICAgIC8vIE5vcm1hbGl6ZSBpbmNvbnNpc3RlbnQgdmFsdWVzIHJlcG9ydGVkIGJ5IGJyb3dzZXJzIGR1ZSB0b1xuICAgIC8vIGltcGxlbWVudGF0aW9ucyBvZiBhIHdvcmtpbmcgZHJhZnQgc3BlY2lmaWNhdGlvbi5cblxuICAgIC8vIEZpcmVGb3ggaW1wbGVtZW50cyBga2V5YCBidXQgcmV0dXJucyBgTW96UHJpbnRhYmxlS2V5YCBmb3IgYWxsXG4gICAgLy8gcHJpbnRhYmxlIGNoYXJhY3RlcnMgKG5vcm1hbGl6ZWQgdG8gYFVuaWRlbnRpZmllZGApLCBpZ25vcmUgaXQuXG4gICAgdmFyIGtleSA9IG5vcm1hbGl6ZUtleVtuYXRpdmVFdmVudC5rZXldIHx8IG5hdGl2ZUV2ZW50LmtleTtcbiAgICBpZiAoa2V5ICE9PSAnVW5pZGVudGlmaWVkJykge1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gIH1cblxuICAvLyBCcm93c2VyIGRvZXMgbm90IGltcGxlbWVudCBga2V5YCwgcG9seWZpbGwgYXMgbXVjaCBvZiBpdCBhcyB3ZSBjYW4uXG4gIGlmIChuYXRpdmVFdmVudC50eXBlID09PSAna2V5cHJlc3MnKSB7XG4gICAgdmFyIGNoYXJDb2RlID0gZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCk7XG5cbiAgICAvLyBUaGUgZW50ZXIta2V5IGlzIHRlY2huaWNhbGx5IGJvdGggcHJpbnRhYmxlIGFuZCBub24tcHJpbnRhYmxlIGFuZCBjYW5cbiAgICAvLyB0aHVzIGJlIGNhcHR1cmVkIGJ5IGBrZXlwcmVzc2AsIG5vIG90aGVyIG5vbi1wcmludGFibGUga2V5IHNob3VsZC5cbiAgICByZXR1cm4gY2hhckNvZGUgPT09IDEzID8gJ0VudGVyJyA6IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUpO1xuICB9XG4gIGlmIChuYXRpdmVFdmVudC50eXBlID09PSAna2V5ZG93bicgfHwgbmF0aXZlRXZlbnQudHlwZSA9PT0gJ2tleXVwJykge1xuICAgIC8vIFdoaWxlIHVzZXIga2V5Ym9hcmQgbGF5b3V0IGRldGVybWluZXMgdGhlIGFjdHVhbCBtZWFuaW5nIG9mIGVhY2hcbiAgICAvLyBga2V5Q29kZWAgdmFsdWUsIGFsbW9zdCBhbGwgZnVuY3Rpb24ga2V5cyBoYXZlIGEgdW5pdmVyc2FsIHZhbHVlLlxuICAgIHJldHVybiB0cmFuc2xhdGVUb0tleVtuYXRpdmVFdmVudC5rZXlDb2RlXSB8fCAnVW5pZGVudGlmaWVkJztcbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogQGludGVyZmFjZSBLZXlib2FyZEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xudmFyIFN5bnRoZXRpY0tleWJvYXJkRXZlbnQgPSBTeW50aGV0aWNVSUV2ZW50LmV4dGVuZCh7XG4gIGtleTogZ2V0RXZlbnRLZXksXG4gIGxvY2F0aW9uOiBudWxsLFxuICBjdHJsS2V5OiBudWxsLFxuICBzaGlmdEtleTogbnVsbCxcbiAgYWx0S2V5OiBudWxsLFxuICBtZXRhS2V5OiBudWxsLFxuICByZXBlYXQ6IG51bGwsXG4gIGxvY2FsZTogbnVsbCxcbiAgZ2V0TW9kaWZpZXJTdGF0ZTogZ2V0RXZlbnRNb2RpZmllclN0YXRlLFxuICAvLyBMZWdhY3kgSW50ZXJmYWNlXG4gIGNoYXJDb2RlOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAvLyBgY2hhckNvZGVgIGlzIHRoZSByZXN1bHQgb2YgYSBLZXlQcmVzcyBldmVudCBhbmQgcmVwcmVzZW50cyB0aGUgdmFsdWUgb2ZcbiAgICAvLyB0aGUgYWN0dWFsIHByaW50YWJsZSBjaGFyYWN0ZXIuXG5cbiAgICAvLyBLZXlQcmVzcyBpcyBkZXByZWNhdGVkLCBidXQgaXRzIHJlcGxhY2VtZW50IGlzIG5vdCB5ZXQgZmluYWwgYW5kIG5vdFxuICAgIC8vIGltcGxlbWVudGVkIGluIGFueSBtYWpvciBicm93c2VyLiBPbmx5IEtleVByZXNzIGhhcyBjaGFyQ29kZS5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleXByZXNzJykge1xuICAgICAgcmV0dXJuIGdldEV2ZW50Q2hhckNvZGUoZXZlbnQpO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfSxcbiAga2V5Q29kZTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgLy8gYGtleUNvZGVgIGlzIHRoZSByZXN1bHQgb2YgYSBLZXlEb3duL1VwIGV2ZW50IGFuZCByZXByZXNlbnRzIHRoZSB2YWx1ZSBvZlxuICAgIC8vIHBoeXNpY2FsIGtleWJvYXJkIGtleS5cblxuICAgIC8vIFRoZSBhY3R1YWwgbWVhbmluZyBvZiB0aGUgdmFsdWUgZGVwZW5kcyBvbiB0aGUgdXNlcnMnIGtleWJvYXJkIGxheW91dFxuICAgIC8vIHdoaWNoIGNhbm5vdCBiZSBkZXRlY3RlZC4gQXNzdW1pbmcgdGhhdCBpdCBpcyBhIFVTIGtleWJvYXJkIGxheW91dFxuICAgIC8vIHByb3ZpZGVzIGEgc3VycHJpc2luZ2x5IGFjY3VyYXRlIG1hcHBpbmcgZm9yIFVTIGFuZCBFdXJvcGVhbiB1c2Vycy5cbiAgICAvLyBEdWUgdG8gdGhpcywgaXQgaXMgbGVmdCB0byB0aGUgdXNlciB0byBpbXBsZW1lbnQgYXQgdGhpcyB0aW1lLlxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5ZG93bicgfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJykge1xuICAgICAgcmV0dXJuIGV2ZW50LmtleUNvZGU7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9LFxuICB3aGljaDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgLy8gYHdoaWNoYCBpcyBhbiBhbGlhcyBmb3IgZWl0aGVyIGBrZXlDb2RlYCBvciBgY2hhckNvZGVgIGRlcGVuZGluZyBvbiB0aGVcbiAgICAvLyB0eXBlIG9mIHRoZSBldmVudC5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleXByZXNzJykge1xuICAgICAgcmV0dXJuIGdldEV2ZW50Q2hhckNvZGUoZXZlbnQpO1xuICAgIH1cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcpIHtcbiAgICAgIHJldHVybiBldmVudC5rZXlDb2RlO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfVxufSk7XG5cbi8qKlxuICogQGludGVyZmFjZSBEcmFnRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG52YXIgU3ludGhldGljRHJhZ0V2ZW50ID0gU3ludGhldGljTW91c2VFdmVudC5leHRlbmQoe1xuICBkYXRhVHJhbnNmZXI6IG51bGxcbn0pO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgVG91Y2hFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi90b3VjaC1ldmVudHMvXG4gKi9cbnZhciBTeW50aGV0aWNUb3VjaEV2ZW50ID0gU3ludGhldGljVUlFdmVudC5leHRlbmQoe1xuICB0b3VjaGVzOiBudWxsLFxuICB0YXJnZXRUb3VjaGVzOiBudWxsLFxuICBjaGFuZ2VkVG91Y2hlczogbnVsbCxcbiAgYWx0S2V5OiBudWxsLFxuICBtZXRhS2V5OiBudWxsLFxuICBjdHJsS2V5OiBudWxsLFxuICBzaGlmdEtleTogbnVsbCxcbiAgZ2V0TW9kaWZpZXJTdGF0ZTogZ2V0RXZlbnRNb2RpZmllclN0YXRlXG59KTtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDkvV0QtY3NzMy10cmFuc2l0aW9ucy0yMDA5MDMyMC8jdHJhbnNpdGlvbi1ldmVudHMtXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9UcmFuc2l0aW9uRXZlbnRcbiAqL1xudmFyIFN5bnRoZXRpY1RyYW5zaXRpb25FdmVudCA9IFN5bnRoZXRpY0V2ZW50LmV4dGVuZCh7XG4gIHByb3BlcnR5TmFtZTogbnVsbCxcbiAgZWxhcHNlZFRpbWU6IG51bGwsXG4gIHBzZXVkb0VsZW1lbnQ6IG51bGxcbn0pO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgV2hlZWxFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cbnZhciBTeW50aGV0aWNXaGVlbEV2ZW50ID0gU3ludGhldGljTW91c2VFdmVudC5leHRlbmQoe1xuICBkZWx0YVg6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiAnZGVsdGFYJyBpbiBldmVudCA/IGV2ZW50LmRlbHRhWCA6IC8vIEZhbGxiYWNrIHRvIGB3aGVlbERlbHRhWGAgZm9yIFdlYmtpdCBhbmQgbm9ybWFsaXplIChyaWdodCBpcyBwb3NpdGl2ZSkuXG4gICAgJ3doZWVsRGVsdGFYJyBpbiBldmVudCA/IC1ldmVudC53aGVlbERlbHRhWCA6IDA7XG4gIH0sXG4gIGRlbHRhWTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuICdkZWx0YVknIGluIGV2ZW50ID8gZXZlbnQuZGVsdGFZIDogLy8gRmFsbGJhY2sgdG8gYHdoZWVsRGVsdGFZYCBmb3IgV2Via2l0IGFuZCBub3JtYWxpemUgKGRvd24gaXMgcG9zaXRpdmUpLlxuICAgICd3aGVlbERlbHRhWScgaW4gZXZlbnQgPyAtZXZlbnQud2hlZWxEZWx0YVkgOiAvLyBGYWxsYmFjayB0byBgd2hlZWxEZWx0YWAgZm9yIElFPDkgYW5kIG5vcm1hbGl6ZSAoZG93biBpcyBwb3NpdGl2ZSkuXG4gICAgJ3doZWVsRGVsdGEnIGluIGV2ZW50ID8gLWV2ZW50LndoZWVsRGVsdGEgOiAwO1xuICB9LFxuXG4gIGRlbHRhWjogbnVsbCxcblxuICAvLyBCcm93c2VycyB3aXRob3V0IFwiZGVsdGFNb2RlXCIgaXMgcmVwb3J0aW5nIGluIHJhdyB3aGVlbCBkZWx0YSB3aGVyZSBvbmVcbiAgLy8gbm90Y2ggb24gdGhlIHNjcm9sbCBpcyBhbHdheXMgKy8tIDEyMCwgcm91Z2hseSBlcXVpdmFsZW50IHRvIHBpeGVscy5cbiAgLy8gQSBnb29kIGFwcHJveGltYXRpb24gb2YgRE9NX0RFTFRBX0xJTkUgKDEpIGlzIDUlIG9mIHZpZXdwb3J0IHNpemUgb3JcbiAgLy8gfjQwIHBpeGVscywgZm9yIERPTV9ERUxUQV9TQ1JFRU4gKDIpIGl0IGlzIDg3LjUlIG9mIHZpZXdwb3J0IHNpemUuXG4gIGRlbHRhTW9kZTogbnVsbFxufSk7XG5cbi8qKlxuICogVHVybnNcbiAqIFsnYWJvcnQnLCAuLi5dXG4gKiBpbnRvXG4gKiBldmVudFR5cGVzID0ge1xuICogICAnYWJvcnQnOiB7XG4gKiAgICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAqICAgICAgIGJ1YmJsZWQ6ICdvbkFib3J0JyxcbiAqICAgICAgIGNhcHR1cmVkOiAnb25BYm9ydENhcHR1cmUnLFxuICogICAgIH0sXG4gKiAgICAgZGVwZW5kZW5jaWVzOiBbVE9QX0FCT1JUXSxcbiAqICAgfSxcbiAqICAgLi4uXG4gKiB9O1xuICogdG9wTGV2ZWxFdmVudHNUb0Rpc3BhdGNoQ29uZmlnID0gbmV3IE1hcChbXG4gKiAgIFtUT1BfQUJPUlQsIHsgc2FtZUNvbmZpZyB9XSxcbiAqIF0pO1xuICovXG5cbnZhciBpbnRlcmFjdGl2ZUV2ZW50VHlwZU5hbWVzID0gW1tUT1BfQkxVUiwgJ2JsdXInXSwgW1RPUF9DQU5DRUwsICdjYW5jZWwnXSwgW1RPUF9DTElDSywgJ2NsaWNrJ10sIFtUT1BfQ0xPU0UsICdjbG9zZSddLCBbVE9QX0NPTlRFWFRfTUVOVSwgJ2NvbnRleHRNZW51J10sIFtUT1BfQ09QWSwgJ2NvcHknXSwgW1RPUF9DVVQsICdjdXQnXSwgW1RPUF9BVVhfQ0xJQ0ssICdhdXhDbGljayddLCBbVE9QX0RPVUJMRV9DTElDSywgJ2RvdWJsZUNsaWNrJ10sIFtUT1BfRFJBR19FTkQsICdkcmFnRW5kJ10sIFtUT1BfRFJBR19TVEFSVCwgJ2RyYWdTdGFydCddLCBbVE9QX0RST1AsICdkcm9wJ10sIFtUT1BfRk9DVVMsICdmb2N1cyddLCBbVE9QX0lOUFVULCAnaW5wdXQnXSwgW1RPUF9JTlZBTElELCAnaW52YWxpZCddLCBbVE9QX0tFWV9ET1dOLCAna2V5RG93biddLCBbVE9QX0tFWV9QUkVTUywgJ2tleVByZXNzJ10sIFtUT1BfS0VZX1VQLCAna2V5VXAnXSwgW1RPUF9NT1VTRV9ET1dOLCAnbW91c2VEb3duJ10sIFtUT1BfTU9VU0VfVVAsICdtb3VzZVVwJ10sIFtUT1BfUEFTVEUsICdwYXN0ZSddLCBbVE9QX1BBVVNFLCAncGF1c2UnXSwgW1RPUF9QTEFZLCAncGxheSddLCBbVE9QX1BPSU5URVJfQ0FOQ0VMLCAncG9pbnRlckNhbmNlbCddLCBbVE9QX1BPSU5URVJfRE9XTiwgJ3BvaW50ZXJEb3duJ10sIFtUT1BfUE9JTlRFUl9VUCwgJ3BvaW50ZXJVcCddLCBbVE9QX1JBVEVfQ0hBTkdFLCAncmF0ZUNoYW5nZSddLCBbVE9QX1JFU0VULCAncmVzZXQnXSwgW1RPUF9TRUVLRUQsICdzZWVrZWQnXSwgW1RPUF9TVUJNSVQsICdzdWJtaXQnXSwgW1RPUF9UT1VDSF9DQU5DRUwsICd0b3VjaENhbmNlbCddLCBbVE9QX1RPVUNIX0VORCwgJ3RvdWNoRW5kJ10sIFtUT1BfVE9VQ0hfU1RBUlQsICd0b3VjaFN0YXJ0J10sIFtUT1BfVk9MVU1FX0NIQU5HRSwgJ3ZvbHVtZUNoYW5nZSddXTtcbnZhciBub25JbnRlcmFjdGl2ZUV2ZW50VHlwZU5hbWVzID0gW1tUT1BfQUJPUlQsICdhYm9ydCddLCBbVE9QX0FOSU1BVElPTl9FTkQsICdhbmltYXRpb25FbmQnXSwgW1RPUF9BTklNQVRJT05fSVRFUkFUSU9OLCAnYW5pbWF0aW9uSXRlcmF0aW9uJ10sIFtUT1BfQU5JTUFUSU9OX1NUQVJULCAnYW5pbWF0aW9uU3RhcnQnXSwgW1RPUF9DQU5fUExBWSwgJ2NhblBsYXknXSwgW1RPUF9DQU5fUExBWV9USFJPVUdILCAnY2FuUGxheVRocm91Z2gnXSwgW1RPUF9EUkFHLCAnZHJhZyddLCBbVE9QX0RSQUdfRU5URVIsICdkcmFnRW50ZXInXSwgW1RPUF9EUkFHX0VYSVQsICdkcmFnRXhpdCddLCBbVE9QX0RSQUdfTEVBVkUsICdkcmFnTGVhdmUnXSwgW1RPUF9EUkFHX09WRVIsICdkcmFnT3ZlciddLCBbVE9QX0RVUkFUSU9OX0NIQU5HRSwgJ2R1cmF0aW9uQ2hhbmdlJ10sIFtUT1BfRU1QVElFRCwgJ2VtcHRpZWQnXSwgW1RPUF9FTkNSWVBURUQsICdlbmNyeXB0ZWQnXSwgW1RPUF9FTkRFRCwgJ2VuZGVkJ10sIFtUT1BfRVJST1IsICdlcnJvciddLCBbVE9QX0dPVF9QT0lOVEVSX0NBUFRVUkUsICdnb3RQb2ludGVyQ2FwdHVyZSddLCBbVE9QX0xPQUQsICdsb2FkJ10sIFtUT1BfTE9BREVEX0RBVEEsICdsb2FkZWREYXRhJ10sIFtUT1BfTE9BREVEX01FVEFEQVRBLCAnbG9hZGVkTWV0YWRhdGEnXSwgW1RPUF9MT0FEX1NUQVJULCAnbG9hZFN0YXJ0J10sIFtUT1BfTE9TVF9QT0lOVEVSX0NBUFRVUkUsICdsb3N0UG9pbnRlckNhcHR1cmUnXSwgW1RPUF9NT1VTRV9NT1ZFLCAnbW91c2VNb3ZlJ10sIFtUT1BfTU9VU0VfT1VULCAnbW91c2VPdXQnXSwgW1RPUF9NT1VTRV9PVkVSLCAnbW91c2VPdmVyJ10sIFtUT1BfUExBWUlORywgJ3BsYXlpbmcnXSwgW1RPUF9QT0lOVEVSX01PVkUsICdwb2ludGVyTW92ZSddLCBbVE9QX1BPSU5URVJfT1VULCAncG9pbnRlck91dCddLCBbVE9QX1BPSU5URVJfT1ZFUiwgJ3BvaW50ZXJPdmVyJ10sIFtUT1BfUFJPR1JFU1MsICdwcm9ncmVzcyddLCBbVE9QX1NDUk9MTCwgJ3Njcm9sbCddLCBbVE9QX1NFRUtJTkcsICdzZWVraW5nJ10sIFtUT1BfU1RBTExFRCwgJ3N0YWxsZWQnXSwgW1RPUF9TVVNQRU5ELCAnc3VzcGVuZCddLCBbVE9QX1RJTUVfVVBEQVRFLCAndGltZVVwZGF0ZSddLCBbVE9QX1RPR0dMRSwgJ3RvZ2dsZSddLCBbVE9QX1RPVUNIX01PVkUsICd0b3VjaE1vdmUnXSwgW1RPUF9UUkFOU0lUSU9OX0VORCwgJ3RyYW5zaXRpb25FbmQnXSwgW1RPUF9XQUlUSU5HLCAnd2FpdGluZyddLCBbVE9QX1dIRUVMLCAnd2hlZWwnXV07XG5cbnZhciBldmVudFR5cGVzJDQgPSB7fTtcbnZhciB0b3BMZXZlbEV2ZW50c1RvRGlzcGF0Y2hDb25maWcgPSB7fTtcblxuZnVuY3Rpb24gYWRkRXZlbnRUeXBlTmFtZVRvQ29uZmlnKF9yZWYsIGlzSW50ZXJhY3RpdmUpIHtcbiAgdmFyIHRvcEV2ZW50ID0gX3JlZlswXSxcbiAgICAgIGV2ZW50ID0gX3JlZlsxXTtcblxuICB2YXIgY2FwaXRhbGl6ZWRFdmVudCA9IGV2ZW50WzBdLnRvVXBwZXJDYXNlKCkgKyBldmVudC5zbGljZSgxKTtcbiAgdmFyIG9uRXZlbnQgPSAnb24nICsgY2FwaXRhbGl6ZWRFdmVudDtcblxuICB2YXIgdHlwZSA9IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDogb25FdmVudCxcbiAgICAgIGNhcHR1cmVkOiBvbkV2ZW50ICsgJ0NhcHR1cmUnXG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IFt0b3BFdmVudF0sXG4gICAgaXNJbnRlcmFjdGl2ZTogaXNJbnRlcmFjdGl2ZVxuICB9O1xuICBldmVudFR5cGVzJDRbZXZlbnRdID0gdHlwZTtcbiAgdG9wTGV2ZWxFdmVudHNUb0Rpc3BhdGNoQ29uZmlnW3RvcEV2ZW50XSA9IHR5cGU7XG59XG5cbmludGVyYWN0aXZlRXZlbnRUeXBlTmFtZXMuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnRUdXBsZSkge1xuICBhZGRFdmVudFR5cGVOYW1lVG9Db25maWcoZXZlbnRUdXBsZSwgdHJ1ZSk7XG59KTtcbm5vbkludGVyYWN0aXZlRXZlbnRUeXBlTmFtZXMuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnRUdXBsZSkge1xuICBhZGRFdmVudFR5cGVOYW1lVG9Db25maWcoZXZlbnRUdXBsZSwgZmFsc2UpO1xufSk7XG5cbi8vIE9ubHkgdXNlZCBpbiBERVYgZm9yIGV4aGF1c3RpdmVuZXNzIHZhbGlkYXRpb24uXG52YXIga25vd25IVE1MVG9wTGV2ZWxUeXBlcyA9IFtUT1BfQUJPUlQsIFRPUF9DQU5DRUwsIFRPUF9DQU5fUExBWSwgVE9QX0NBTl9QTEFZX1RIUk9VR0gsIFRPUF9DTE9TRSwgVE9QX0RVUkFUSU9OX0NIQU5HRSwgVE9QX0VNUFRJRUQsIFRPUF9FTkNSWVBURUQsIFRPUF9FTkRFRCwgVE9QX0VSUk9SLCBUT1BfSU5QVVQsIFRPUF9JTlZBTElELCBUT1BfTE9BRCwgVE9QX0xPQURFRF9EQVRBLCBUT1BfTE9BREVEX01FVEFEQVRBLCBUT1BfTE9BRF9TVEFSVCwgVE9QX1BBVVNFLCBUT1BfUExBWSwgVE9QX1BMQVlJTkcsIFRPUF9QUk9HUkVTUywgVE9QX1JBVEVfQ0hBTkdFLCBUT1BfUkVTRVQsIFRPUF9TRUVLRUQsIFRPUF9TRUVLSU5HLCBUT1BfU1RBTExFRCwgVE9QX1NVQk1JVCwgVE9QX1NVU1BFTkQsIFRPUF9USU1FX1VQREFURSwgVE9QX1RPR0dMRSwgVE9QX1ZPTFVNRV9DSEFOR0UsIFRPUF9XQUlUSU5HXTtcblxudmFyIFNpbXBsZUV2ZW50UGx1Z2luID0ge1xuICBldmVudFR5cGVzOiBldmVudFR5cGVzJDQsXG5cbiAgaXNJbnRlcmFjdGl2ZVRvcExldmVsRXZlbnRUeXBlOiBmdW5jdGlvbiAodG9wTGV2ZWxUeXBlKSB7XG4gICAgdmFyIGNvbmZpZyA9IHRvcExldmVsRXZlbnRzVG9EaXNwYXRjaENvbmZpZ1t0b3BMZXZlbFR5cGVdO1xuICAgIHJldHVybiBjb25maWcgIT09IHVuZGVmaW5lZCAmJiBjb25maWcuaXNJbnRlcmFjdGl2ZSA9PT0gdHJ1ZTtcbiAgfSxcblxuXG4gIGV4dHJhY3RFdmVudHM6IGZ1bmN0aW9uICh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICAgIHZhciBkaXNwYXRjaENvbmZpZyA9IHRvcExldmVsRXZlbnRzVG9EaXNwYXRjaENvbmZpZ1t0b3BMZXZlbFR5cGVdO1xuICAgIGlmICghZGlzcGF0Y2hDb25maWcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgRXZlbnRDb25zdHJ1Y3RvciA9IHZvaWQgMDtcbiAgICBzd2l0Y2ggKHRvcExldmVsVHlwZSkge1xuICAgICAgY2FzZSBUT1BfS0VZX1BSRVNTOlxuICAgICAgICAvLyBGaXJlZm94IGNyZWF0ZXMgYSBrZXlwcmVzcyBldmVudCBmb3IgZnVuY3Rpb24ga2V5cyB0b28uIFRoaXMgcmVtb3Zlc1xuICAgICAgICAvLyB0aGUgdW53YW50ZWQga2V5cHJlc3MgZXZlbnRzLiBFbnRlciBpcyBob3dldmVyIGJvdGggcHJpbnRhYmxlIGFuZFxuICAgICAgICAvLyBub24tcHJpbnRhYmxlLiBPbmUgd291bGQgZXhwZWN0IFRhYiB0byBiZSBhcyB3ZWxsIChidXQgaXQgaXNuJ3QpLlxuICAgICAgICBpZiAoZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCkgPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgY2FzZSBUT1BfS0VZX0RPV046XG4gICAgICBjYXNlIFRPUF9LRVlfVVA6XG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNLZXlib2FyZEV2ZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVE9QX0JMVVI6XG4gICAgICBjYXNlIFRPUF9GT0NVUzpcbiAgICAgICAgRXZlbnRDb25zdHJ1Y3RvciA9IFN5bnRoZXRpY0ZvY3VzRXZlbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUT1BfQ0xJQ0s6XG4gICAgICAgIC8vIEZpcmVmb3ggY3JlYXRlcyBhIGNsaWNrIGV2ZW50IG9uIHJpZ2h0IG1vdXNlIGNsaWNrcy4gVGhpcyByZW1vdmVzIHRoZVxuICAgICAgICAvLyB1bndhbnRlZCBjbGljayBldmVudHMuXG4gICAgICAgIGlmIChuYXRpdmVFdmVudC5idXR0b24gPT09IDIpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgY2FzZSBUT1BfQVVYX0NMSUNLOlxuICAgICAgY2FzZSBUT1BfRE9VQkxFX0NMSUNLOlxuICAgICAgY2FzZSBUT1BfTU9VU0VfRE9XTjpcbiAgICAgIGNhc2UgVE9QX01PVVNFX01PVkU6XG4gICAgICBjYXNlIFRPUF9NT1VTRV9VUDpcbiAgICAgIC8vIFRPRE86IERpc2FibGVkIGVsZW1lbnRzIHNob3VsZCBub3QgcmVzcG9uZCB0byBtb3VzZSBldmVudHNcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgIGNhc2UgVE9QX01PVVNFX09VVDpcbiAgICAgIGNhc2UgVE9QX01PVVNFX09WRVI6XG4gICAgICBjYXNlIFRPUF9DT05URVhUX01FTlU6XG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNNb3VzZUV2ZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVE9QX0RSQUc6XG4gICAgICBjYXNlIFRPUF9EUkFHX0VORDpcbiAgICAgIGNhc2UgVE9QX0RSQUdfRU5URVI6XG4gICAgICBjYXNlIFRPUF9EUkFHX0VYSVQ6XG4gICAgICBjYXNlIFRPUF9EUkFHX0xFQVZFOlxuICAgICAgY2FzZSBUT1BfRFJBR19PVkVSOlxuICAgICAgY2FzZSBUT1BfRFJBR19TVEFSVDpcbiAgICAgIGNhc2UgVE9QX0RST1A6XG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNEcmFnRXZlbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUT1BfVE9VQ0hfQ0FOQ0VMOlxuICAgICAgY2FzZSBUT1BfVE9VQ0hfRU5EOlxuICAgICAgY2FzZSBUT1BfVE9VQ0hfTU9WRTpcbiAgICAgIGNhc2UgVE9QX1RPVUNIX1NUQVJUOlxuICAgICAgICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhldGljVG91Y2hFdmVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFRPUF9BTklNQVRJT05fRU5EOlxuICAgICAgY2FzZSBUT1BfQU5JTUFUSU9OX0lURVJBVElPTjpcbiAgICAgIGNhc2UgVE9QX0FOSU1BVElPTl9TVEFSVDpcbiAgICAgICAgRXZlbnRDb25zdHJ1Y3RvciA9IFN5bnRoZXRpY0FuaW1hdGlvbkV2ZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVE9QX1RSQU5TSVRJT05fRU5EOlxuICAgICAgICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhldGljVHJhbnNpdGlvbkV2ZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVE9QX1NDUk9MTDpcbiAgICAgICAgRXZlbnRDb25zdHJ1Y3RvciA9IFN5bnRoZXRpY1VJRXZlbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUT1BfV0hFRUw6XG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNXaGVlbEV2ZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVE9QX0NPUFk6XG4gICAgICBjYXNlIFRPUF9DVVQ6XG4gICAgICBjYXNlIFRPUF9QQVNURTpcbiAgICAgICAgRXZlbnRDb25zdHJ1Y3RvciA9IFN5bnRoZXRpY0NsaXBib2FyZEV2ZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVE9QX0dPVF9QT0lOVEVSX0NBUFRVUkU6XG4gICAgICBjYXNlIFRPUF9MT1NUX1BPSU5URVJfQ0FQVFVSRTpcbiAgICAgIGNhc2UgVE9QX1BPSU5URVJfQ0FOQ0VMOlxuICAgICAgY2FzZSBUT1BfUE9JTlRFUl9ET1dOOlxuICAgICAgY2FzZSBUT1BfUE9JTlRFUl9NT1ZFOlxuICAgICAgY2FzZSBUT1BfUE9JTlRFUl9PVVQ6XG4gICAgICBjYXNlIFRPUF9QT0lOVEVSX09WRVI6XG4gICAgICBjYXNlIFRPUF9QT0lOVEVSX1VQOlxuICAgICAgICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhldGljUG9pbnRlckV2ZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoa25vd25IVE1MVG9wTGV2ZWxUeXBlcy5pbmRleE9mKHRvcExldmVsVHlwZSkgPT09IC0xKSB7XG4gICAgICAgICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdTaW1wbGVFdmVudFBsdWdpbjogVW5oYW5kbGVkIGV2ZW50IHR5cGUsIGAlc2AuIFRoaXMgd2FybmluZyAnICsgJ2lzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicsIHRvcExldmVsVHlwZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEhUTUwgRXZlbnRzXG4gICAgICAgIC8vIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvaW5kZXguaHRtbCNldmVudHMtMFxuICAgICAgICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhldGljRXZlbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZXZlbnQgPSBFdmVudENvbnN0cnVjdG9yLmdldFBvb2xlZChkaXNwYXRjaENvbmZpZywgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICBhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzKGV2ZW50KTtcbiAgICByZXR1cm4gZXZlbnQ7XG4gIH1cbn07XG5cbnZhciBpc0ludGVyYWN0aXZlVG9wTGV2ZWxFdmVudFR5cGUgPSBTaW1wbGVFdmVudFBsdWdpbi5pc0ludGVyYWN0aXZlVG9wTGV2ZWxFdmVudFR5cGU7XG5cblxudmFyIENBTExCQUNLX0JPT0tLRUVQSU5HX1BPT0xfU0laRSA9IDEwO1xudmFyIGNhbGxiYWNrQm9va2tlZXBpbmdQb29sID0gW107XG5cbi8qKlxuICogRmluZCB0aGUgZGVlcGVzdCBSZWFjdCBjb21wb25lbnQgY29tcGxldGVseSBjb250YWluaW5nIHRoZSByb290IG9mIHRoZVxuICogcGFzc2VkLWluIGluc3RhbmNlIChmb3IgdXNlIHdoZW4gZW50aXJlIFJlYWN0IHRyZWVzIGFyZSBuZXN0ZWQgd2l0aGluIGVhY2hcbiAqIG90aGVyKS4gSWYgUmVhY3QgdHJlZXMgYXJlIG5vdCBuZXN0ZWQsIHJldHVybnMgbnVsbC5cbiAqL1xuZnVuY3Rpb24gZmluZFJvb3RDb250YWluZXJOb2RlKGluc3QpIHtcbiAgLy8gVE9ETzogSXQgbWF5IGJlIGEgZ29vZCBpZGVhIHRvIGNhY2hlIHRoaXMgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSBET01cbiAgLy8gdHJhdmVyc2FsLCBidXQgY2FjaGluZyBpcyBkaWZmaWN1bHQgdG8gZG8gY29ycmVjdGx5IHdpdGhvdXQgdXNpbmcgYVxuICAvLyBtdXRhdGlvbiBvYnNlcnZlciB0byBsaXN0ZW4gZm9yIGFsbCBET00gY2hhbmdlcy5cbiAgd2hpbGUgKGluc3QucmV0dXJuKSB7XG4gICAgaW5zdCA9IGluc3QucmV0dXJuO1xuICB9XG4gIGlmIChpbnN0LnRhZyAhPT0gSG9zdFJvb3QpIHtcbiAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgd2UncmUgaW4gYSBkZXRhY2hlZCB0cmVlLlxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBpbnN0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xufVxuXG4vLyBVc2VkIHRvIHN0b3JlIGFuY2VzdG9yIGhpZXJhcmNoeSBpbiB0b3AgbGV2ZWwgY2FsbGJhY2tcbmZ1bmN0aW9uIGdldFRvcExldmVsQ2FsbGJhY2tCb29rS2VlcGluZyh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50LCB0YXJnZXRJbnN0KSB7XG4gIGlmIChjYWxsYmFja0Jvb2trZWVwaW5nUG9vbC5sZW5ndGgpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBjYWxsYmFja0Jvb2trZWVwaW5nUG9vbC5wb3AoKTtcbiAgICBpbnN0YW5jZS50b3BMZXZlbFR5cGUgPSB0b3BMZXZlbFR5cGU7XG4gICAgaW5zdGFuY2UubmF0aXZlRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICBpbnN0YW5jZS50YXJnZXRJbnN0ID0gdGFyZ2V0SW5zdDtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB0b3BMZXZlbFR5cGU6IHRvcExldmVsVHlwZSxcbiAgICBuYXRpdmVFdmVudDogbmF0aXZlRXZlbnQsXG4gICAgdGFyZ2V0SW5zdDogdGFyZ2V0SW5zdCxcbiAgICBhbmNlc3RvcnM6IFtdXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlbGVhc2VUb3BMZXZlbENhbGxiYWNrQm9va0tlZXBpbmcoaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UudG9wTGV2ZWxUeXBlID0gbnVsbDtcbiAgaW5zdGFuY2UubmF0aXZlRXZlbnQgPSBudWxsO1xuICBpbnN0YW5jZS50YXJnZXRJbnN0ID0gbnVsbDtcbiAgaW5zdGFuY2UuYW5jZXN0b3JzLmxlbmd0aCA9IDA7XG4gIGlmIChjYWxsYmFja0Jvb2trZWVwaW5nUG9vbC5sZW5ndGggPCBDQUxMQkFDS19CT09LS0VFUElOR19QT09MX1NJWkUpIHtcbiAgICBjYWxsYmFja0Jvb2trZWVwaW5nUG9vbC5wdXNoKGluc3RhbmNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVUb3BMZXZlbChib29rS2VlcGluZykge1xuICB2YXIgdGFyZ2V0SW5zdCA9IGJvb2tLZWVwaW5nLnRhcmdldEluc3Q7XG5cbiAgLy8gTG9vcCB0aHJvdWdoIHRoZSBoaWVyYXJjaHksIGluIGNhc2UgdGhlcmUncyBhbnkgbmVzdGVkIGNvbXBvbmVudHMuXG4gIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgd2UgYnVpbGQgdGhlIGFycmF5IG9mIGFuY2VzdG9ycyBiZWZvcmUgY2FsbGluZyBhbnlcbiAgLy8gZXZlbnQgaGFuZGxlcnMsIGJlY2F1c2UgZXZlbnQgaGFuZGxlcnMgY2FuIG1vZGlmeSB0aGUgRE9NLCBsZWFkaW5nIHRvXG4gIC8vIGluY29uc2lzdGVuY2llcyB3aXRoIFJlYWN0TW91bnQncyBub2RlIGNhY2hlLiBTZWUgIzExMDUuXG4gIHZhciBhbmNlc3RvciA9IHRhcmdldEluc3Q7XG4gIGRvIHtcbiAgICBpZiAoIWFuY2VzdG9yKSB7XG4gICAgICBib29rS2VlcGluZy5hbmNlc3RvcnMucHVzaChhbmNlc3Rvcik7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIHJvb3QgPSBmaW5kUm9vdENvbnRhaW5lck5vZGUoYW5jZXN0b3IpO1xuICAgIGlmICghcm9vdCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGJvb2tLZWVwaW5nLmFuY2VzdG9ycy5wdXNoKGFuY2VzdG9yKTtcbiAgICBhbmNlc3RvciA9IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHJvb3QpO1xuICB9IHdoaWxlIChhbmNlc3Rvcik7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBib29rS2VlcGluZy5hbmNlc3RvcnMubGVuZ3RoOyBpKyspIHtcbiAgICB0YXJnZXRJbnN0ID0gYm9va0tlZXBpbmcuYW5jZXN0b3JzW2ldO1xuICAgIHJ1bkV4dHJhY3RlZEV2ZW50c0luQmF0Y2goYm9va0tlZXBpbmcudG9wTGV2ZWxUeXBlLCB0YXJnZXRJbnN0LCBib29rS2VlcGluZy5uYXRpdmVFdmVudCwgZ2V0RXZlbnRUYXJnZXQoYm9va0tlZXBpbmcubmF0aXZlRXZlbnQpKTtcbiAgfVxufVxuXG4vLyBUT0RPOiBjYW4gd2Ugc3RvcCBleHBvcnRpbmcgdGhlc2U/XG52YXIgX2VuYWJsZWQgPSB0cnVlO1xuXG5mdW5jdGlvbiBzZXRFbmFibGVkKGVuYWJsZWQpIHtcbiAgX2VuYWJsZWQgPSAhIWVuYWJsZWQ7XG59XG5cbmZ1bmN0aW9uIGlzRW5hYmxlZCgpIHtcbiAgcmV0dXJuIF9lbmFibGVkO1xufVxuXG4vKipcbiAqIFRyYXBzIHRvcC1sZXZlbCBldmVudHMgYnkgdXNpbmcgZXZlbnQgYnViYmxpbmcuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHRvcExldmVsVHlwZSBOdW1iZXIgZnJvbSBgVG9wTGV2ZWxFdmVudFR5cGVzYC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50IEVsZW1lbnQgb24gd2hpY2ggdG8gYXR0YWNoIGxpc3RlbmVyLlxuICogQHJldHVybiB7P29iamVjdH0gQW4gb2JqZWN0IHdpdGggYSByZW1vdmUgZnVuY3Rpb24gd2hpY2ggd2lsbCBmb3JjZWZ1bGx5XG4gKiAgICAgICAgICAgICAgICAgIHJlbW92ZSB0aGUgbGlzdGVuZXIuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gdHJhcEJ1YmJsZWRFdmVudCh0b3BMZXZlbFR5cGUsIGVsZW1lbnQpIHtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgdmFyIGRpc3BhdGNoID0gaXNJbnRlcmFjdGl2ZVRvcExldmVsRXZlbnRUeXBlKHRvcExldmVsVHlwZSkgPyBkaXNwYXRjaEludGVyYWN0aXZlRXZlbnQgOiBkaXNwYXRjaEV2ZW50O1xuXG4gIGFkZEV2ZW50QnViYmxlTGlzdGVuZXIoZWxlbWVudCwgZ2V0UmF3RXZlbnROYW1lKHRvcExldmVsVHlwZSksXG4gIC8vIENoZWNrIGlmIGludGVyYWN0aXZlIGFuZCB3cmFwIGluIGludGVyYWN0aXZlVXBkYXRlc1xuICBkaXNwYXRjaC5iaW5kKG51bGwsIHRvcExldmVsVHlwZSkpO1xufVxuXG4vKipcbiAqIFRyYXBzIGEgdG9wLWxldmVsIGV2ZW50IGJ5IHVzaW5nIGV2ZW50IGNhcHR1cmluZy5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gdG9wTGV2ZWxUeXBlIE51bWJlciBmcm9tIGBUb3BMZXZlbEV2ZW50VHlwZXNgLlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnQgRWxlbWVudCBvbiB3aGljaCB0byBhdHRhY2ggbGlzdGVuZXIuXG4gKiBAcmV0dXJuIHs/b2JqZWN0fSBBbiBvYmplY3Qgd2l0aCBhIHJlbW92ZSBmdW5jdGlvbiB3aGljaCB3aWxsIGZvcmNlZnVsbHlcbiAqICAgICAgICAgICAgICAgICAgcmVtb3ZlIHRoZSBsaXN0ZW5lci5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiB0cmFwQ2FwdHVyZWRFdmVudCh0b3BMZXZlbFR5cGUsIGVsZW1lbnQpIHtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgdmFyIGRpc3BhdGNoID0gaXNJbnRlcmFjdGl2ZVRvcExldmVsRXZlbnRUeXBlKHRvcExldmVsVHlwZSkgPyBkaXNwYXRjaEludGVyYWN0aXZlRXZlbnQgOiBkaXNwYXRjaEV2ZW50O1xuXG4gIGFkZEV2ZW50Q2FwdHVyZUxpc3RlbmVyKGVsZW1lbnQsIGdldFJhd0V2ZW50TmFtZSh0b3BMZXZlbFR5cGUpLFxuICAvLyBDaGVjayBpZiBpbnRlcmFjdGl2ZSBhbmQgd3JhcCBpbiBpbnRlcmFjdGl2ZVVwZGF0ZXNcbiAgZGlzcGF0Y2guYmluZChudWxsLCB0b3BMZXZlbFR5cGUpKTtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hJbnRlcmFjdGl2ZUV2ZW50KHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpIHtcbiAgaW50ZXJhY3RpdmVVcGRhdGVzKGRpc3BhdGNoRXZlbnQsIHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaEV2ZW50KHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpIHtcbiAgaWYgKCFfZW5hYmxlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBuYXRpdmVFdmVudFRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KTtcbiAgdmFyIHRhcmdldEluc3QgPSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShuYXRpdmVFdmVudFRhcmdldCk7XG4gIGlmICh0YXJnZXRJbnN0ICE9PSBudWxsICYmIHR5cGVvZiB0YXJnZXRJbnN0LnRhZyA9PT0gJ251bWJlcicgJiYgIWlzRmliZXJNb3VudGVkKHRhcmdldEluc3QpKSB7XG4gICAgLy8gSWYgd2UgZ2V0IGFuIGV2ZW50IChleDogaW1nIG9ubG9hZCkgYmVmb3JlIGNvbW1pdHRpbmcgdGhhdFxuICAgIC8vIGNvbXBvbmVudCdzIG1vdW50LCBpZ25vcmUgaXQgZm9yIG5vdyAodGhhdCBpcywgdHJlYXQgaXQgYXMgaWYgaXQgd2FzIGFuXG4gICAgLy8gZXZlbnQgb24gYSBub24tUmVhY3QgdHJlZSkuIFdlIG1pZ2h0IGFsc28gY29uc2lkZXIgcXVldWVpbmcgZXZlbnRzIGFuZFxuICAgIC8vIGRpc3BhdGNoaW5nIHRoZW0gYWZ0ZXIgdGhlIG1vdW50LlxuICAgIHRhcmdldEluc3QgPSBudWxsO1xuICB9XG5cbiAgdmFyIGJvb2tLZWVwaW5nID0gZ2V0VG9wTGV2ZWxDYWxsYmFja0Jvb2tLZWVwaW5nKHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQsIHRhcmdldEluc3QpO1xuXG4gIHRyeSB7XG4gICAgLy8gRXZlbnQgcXVldWUgYmVpbmcgcHJvY2Vzc2VkIGluIHRoZSBzYW1lIGN5Y2xlIGFsbG93c1xuICAgIC8vIGBwcmV2ZW50RGVmYXVsdGAuXG4gICAgYmF0Y2hlZFVwZGF0ZXMoaGFuZGxlVG9wTGV2ZWwsIGJvb2tLZWVwaW5nKTtcbiAgfSBmaW5hbGx5IHtcbiAgICByZWxlYXNlVG9wTGV2ZWxDYWxsYmFja0Jvb2tLZWVwaW5nKGJvb2tLZWVwaW5nKTtcbiAgfVxufVxuXG4vKipcbiAqIFN1bW1hcnkgb2YgYFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlcmAgZXZlbnQgaGFuZGxpbmc6XG4gKlxuICogIC0gVG9wLWxldmVsIGRlbGVnYXRpb24gaXMgdXNlZCB0byB0cmFwIG1vc3QgbmF0aXZlIGJyb3dzZXIgZXZlbnRzLiBUaGlzXG4gKiAgICBtYXkgb25seSBvY2N1ciBpbiB0aGUgbWFpbiB0aHJlYWQgYW5kIGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZlxuICogICAgUmVhY3RET01FdmVudExpc3RlbmVyLCB3aGljaCBpcyBpbmplY3RlZCBhbmQgY2FuIHRoZXJlZm9yZSBzdXBwb3J0XG4gKiAgICBwbHVnZ2FibGUgZXZlbnQgc291cmNlcy4gVGhpcyBpcyB0aGUgb25seSB3b3JrIHRoYXQgb2NjdXJzIGluIHRoZSBtYWluXG4gKiAgICB0aHJlYWQuXG4gKlxuICogIC0gV2Ugbm9ybWFsaXplIGFuZCBkZS1kdXBsaWNhdGUgZXZlbnRzIHRvIGFjY291bnQgZm9yIGJyb3dzZXIgcXVpcmtzLiBUaGlzXG4gKiAgICBtYXkgYmUgZG9uZSBpbiB0aGUgd29ya2VyIHRocmVhZC5cbiAqXG4gKiAgLSBGb3J3YXJkIHRoZXNlIG5hdGl2ZSBldmVudHMgKHdpdGggdGhlIGFzc29jaWF0ZWQgdG9wLWxldmVsIHR5cGUgdXNlZCB0b1xuICogICAgdHJhcCBpdCkgdG8gYEV2ZW50UGx1Z2luSHViYCwgd2hpY2ggaW4gdHVybiB3aWxsIGFzayBwbHVnaW5zIGlmIHRoZXkgd2FudFxuICogICAgdG8gZXh0cmFjdCBhbnkgc3ludGhldGljIGV2ZW50cy5cbiAqXG4gKiAgLSBUaGUgYEV2ZW50UGx1Z2luSHViYCB3aWxsIHRoZW4gcHJvY2VzcyBlYWNoIGV2ZW50IGJ5IGFubm90YXRpbmcgdGhlbSB3aXRoXG4gKiAgICBcImRpc3BhdGNoZXNcIiwgYSBzZXF1ZW5jZSBvZiBsaXN0ZW5lcnMgYW5kIElEcyB0aGF0IGNhcmUgYWJvdXQgdGhhdCBldmVudC5cbiAqXG4gKiAgLSBUaGUgYEV2ZW50UGx1Z2luSHViYCB0aGVuIGRpc3BhdGNoZXMgdGhlIGV2ZW50cy5cbiAqXG4gKiBPdmVydmlldyBvZiBSZWFjdCBhbmQgdGhlIGV2ZW50IHN5c3RlbTpcbiAqXG4gKiArLS0tLS0tLS0tLS0tKyAgICAuXG4gKiB8ICAgIERPTSAgICAgfCAgICAuXG4gKiArLS0tLS0tLS0tLS0tKyAgICAuXG4gKiAgICAgICB8ICAgICAgICAgICAuXG4gKiAgICAgICB2ICAgICAgICAgICAuXG4gKiArLS0tLS0tLS0tLS0tKyAgICAuXG4gKiB8IFJlYWN0RXZlbnQgfCAgICAuXG4gKiB8ICBMaXN0ZW5lciAgfCAgICAuXG4gKiArLS0tLS0tLS0tLS0tKyAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLStcbiAqICAgICAgIHwgICAgICAgICAgIC4gICAgICAgICAgICAgICArLS0tLS0tLS0rfFNpbXBsZUV2ZW50fFxuICogICAgICAgfCAgICAgICAgICAgLiAgICAgICAgICAgICAgIHwgICAgICAgICB8UGx1Z2luICAgICB8XG4gKiArLS0tLS18LS0tLS0tKyAgICAuICAgICAgICAgICAgICAgdiAgICAgICAgICstLS0tLS0tLS0tLStcbiAqIHwgICAgIHwgICAgICB8ICAgIC4gICAgKy0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLStcbiAqIHwgICAgICstLS0tLS0tLS0tLS4tLS0+fEV2ZW50UGx1Z2luSHVifCAgICAgICAgICAgICAgICAgICAgfCAgICBFdmVudCAgIHxcbiAqIHwgICAgICAgICAgICB8ICAgIC4gICAgfCAgICAgICAgICAgICAgfCAgICAgKy0tLS0tLS0tLS0tKyAgfCBQcm9wYWdhdG9yc3xcbiAqIHwgUmVhY3RFdmVudCB8ICAgIC4gICAgfCAgICAgICAgICAgICAgfCAgICAgfFRhcEV2ZW50ICAgfCAgfC0tLS0tLS0tLS0tLXxcbiAqIHwgIEVtaXR0ZXIgICB8ICAgIC4gICAgfCAgICAgICAgICAgICAgfDwtLS0rfFBsdWdpbiAgICAgfCAgfG90aGVyIHBsdWdpbnxcbiAqIHwgICAgICAgICAgICB8ICAgIC4gICAgfCAgICAgICAgICAgICAgfCAgICAgKy0tLS0tLS0tLS0tKyAgfCAgdXRpbGl0aWVzIHxcbiAqIHwgICAgICstLS0tLS0tLS0tLS4tLS0+fCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLStcbiAqIHwgICAgIHwgICAgICB8ICAgIC4gICAgKy0tLS0tLS0tLS0tLS0tK1xuICogKy0tLS0tfC0tLS0tLSsgICAgLiAgICAgICAgICAgICAgICBeICAgICAgICArLS0tLS0tLS0tLS0rXG4gKiAgICAgICB8ICAgICAgICAgICAuICAgICAgICAgICAgICAgIHwgICAgICAgIHxFbnRlci9MZWF2ZXxcbiAqICAgICAgICsgICAgICAgICAgIC4gICAgICAgICAgICAgICAgKy0tLS0tLS0rfFBsdWdpbiAgICAgfFxuICogKy0tLS0tLS0tLS0tLS0rICAgLiAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4gKiB8IGFwcGxpY2F0aW9uIHwgICAuXG4gKiB8LS0tLS0tLS0tLS0tLXwgICAuXG4gKiB8ICAgICAgICAgICAgIHwgICAuXG4gKiB8ICAgICAgICAgICAgIHwgICAuXG4gKiArLS0tLS0tLS0tLS0tLSsgICAuXG4gKiAgICAgICAgICAgICAgICAgICAuXG4gKiAgICBSZWFjdCBDb3JlICAgICAuICBHZW5lcmFsIFB1cnBvc2UgRXZlbnQgUGx1Z2luIFN5c3RlbVxuICovXG5cbnZhciBhbHJlYWR5TGlzdGVuaW5nVG8gPSB7fTtcbnZhciByZWFjdFRvcExpc3RlbmVyc0NvdW50ZXIgPSAwO1xuXG4vKipcbiAqIFRvIGVuc3VyZSBubyBjb25mbGljdHMgd2l0aCBvdGhlciBwb3RlbnRpYWwgUmVhY3QgaW5zdGFuY2VzIG9uIHRoZSBwYWdlXG4gKi9cbnZhciB0b3BMaXN0ZW5lcnNJREtleSA9ICdfcmVhY3RMaXN0ZW5lcnNJRCcgKyAoJycgKyBNYXRoLnJhbmRvbSgpKS5zbGljZSgyKTtcblxuZnVuY3Rpb24gZ2V0TGlzdGVuaW5nRm9yRG9jdW1lbnQobW91bnRBdCkge1xuICAvLyBJbiBJRTgsIGBtb3VudEF0YCBpcyBhIGhvc3Qgb2JqZWN0IGFuZCBkb2Vzbid0IGhhdmUgYGhhc093blByb3BlcnR5YFxuICAvLyBkaXJlY3RseS5cbiAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW91bnRBdCwgdG9wTGlzdGVuZXJzSURLZXkpKSB7XG4gICAgbW91bnRBdFt0b3BMaXN0ZW5lcnNJREtleV0gPSByZWFjdFRvcExpc3RlbmVyc0NvdW50ZXIrKztcbiAgICBhbHJlYWR5TGlzdGVuaW5nVG9bbW91bnRBdFt0b3BMaXN0ZW5lcnNJREtleV1dID0ge307XG4gIH1cbiAgcmV0dXJuIGFscmVhZHlMaXN0ZW5pbmdUb1ttb3VudEF0W3RvcExpc3RlbmVyc0lES2V5XV07XG59XG5cbi8qKlxuICogV2UgbGlzdGVuIGZvciBidWJibGVkIHRvdWNoIGV2ZW50cyBvbiB0aGUgZG9jdW1lbnQgb2JqZWN0LlxuICpcbiAqIEZpcmVmb3ggdjguMDEgKGFuZCBwb3NzaWJseSBvdGhlcnMpIGV4aGliaXRlZCBzdHJhbmdlIGJlaGF2aW9yIHdoZW5cbiAqIG1vdW50aW5nIGBvbm1vdXNlbW92ZWAgZXZlbnRzIGF0IHNvbWUgbm9kZSB0aGF0IHdhcyBub3QgdGhlIGRvY3VtZW50XG4gKiBlbGVtZW50LiBUaGUgc3ltcHRvbXMgd2VyZSB0aGF0IGlmIHlvdXIgbW91c2UgaXMgbm90IG1vdmluZyBvdmVyIHNvbWV0aGluZ1xuICogY29udGFpbmVkIHdpdGhpbiB0aGF0IG1vdW50IHBvaW50IChmb3IgZXhhbXBsZSBvbiB0aGUgYmFja2dyb3VuZCkgdGhlXG4gKiB0b3AtbGV2ZWwgbGlzdGVuZXJzIGZvciBgb25tb3VzZW1vdmVgIHdvbid0IGJlIGNhbGxlZC4gSG93ZXZlciwgaWYgeW91XG4gKiByZWdpc3RlciB0aGUgYG1vdXNlbW92ZWAgb24gdGhlIGRvY3VtZW50IG9iamVjdCwgdGhlbiBpdCB3aWxsIG9mIGNvdXJzZVxuICogY2F0Y2ggYWxsIGBtb3VzZW1vdmVgcy4gVGhpcyBhbG9uZyB3aXRoIGlPUyBxdWlya3MsIGp1c3RpZmllcyByZXN0cmljdGluZ1xuICogdG9wLWxldmVsIGxpc3RlbmVycyB0byB0aGUgZG9jdW1lbnQgb2JqZWN0IG9ubHksIGF0IGxlYXN0IGZvciB0aGVzZVxuICogbW92ZW1lbnQgdHlwZXMgb2YgZXZlbnRzIGFuZCBwb3NzaWJseSBhbGwgZXZlbnRzLlxuICpcbiAqIEBzZWUgaHR0cDovL3d3dy5xdWlya3Ntb2RlLm9yZy9ibG9nL2FyY2hpdmVzLzIwMTAvMDkvY2xpY2tfZXZlbnRfZGVsLmh0bWxcbiAqXG4gKiBBbHNvLCBga2V5dXBgL2BrZXlwcmVzc2AvYGtleWRvd25gIGRvIG5vdCBidWJibGUgdG8gdGhlIHdpbmRvdyBvbiBJRSwgYnV0XG4gKiB0aGV5IGJ1YmJsZSB0byBkb2N1bWVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVnaXN0cmF0aW9uTmFtZSBOYW1lIG9mIGxpc3RlbmVyIChlLmcuIGBvbkNsaWNrYCkuXG4gKiBAcGFyYW0ge29iamVjdH0gbW91bnRBdCBDb250YWluZXIgd2hlcmUgdG8gbW91bnQgdGhlIGxpc3RlbmVyXG4gKi9cbmZ1bmN0aW9uIGxpc3RlblRvKHJlZ2lzdHJhdGlvbk5hbWUsIG1vdW50QXQpIHtcbiAgdmFyIGlzTGlzdGVuaW5nID0gZ2V0TGlzdGVuaW5nRm9yRG9jdW1lbnQobW91bnRBdCk7XG4gIHZhciBkZXBlbmRlbmNpZXMgPSByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzW3JlZ2lzdHJhdGlvbk5hbWVdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZGVwZW5kZW5jaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlcGVuZGVuY3kgPSBkZXBlbmRlbmNpZXNbaV07XG4gICAgaWYgKCEoaXNMaXN0ZW5pbmcuaGFzT3duUHJvcGVydHkoZGVwZW5kZW5jeSkgJiYgaXNMaXN0ZW5pbmdbZGVwZW5kZW5jeV0pKSB7XG4gICAgICBzd2l0Y2ggKGRlcGVuZGVuY3kpIHtcbiAgICAgICAgY2FzZSBUT1BfU0NST0xMOlxuICAgICAgICAgIHRyYXBDYXB0dXJlZEV2ZW50KFRPUF9TQ1JPTEwsIG1vdW50QXQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFRPUF9GT0NVUzpcbiAgICAgICAgY2FzZSBUT1BfQkxVUjpcbiAgICAgICAgICB0cmFwQ2FwdHVyZWRFdmVudChUT1BfRk9DVVMsIG1vdW50QXQpO1xuICAgICAgICAgIHRyYXBDYXB0dXJlZEV2ZW50KFRPUF9CTFVSLCBtb3VudEF0KTtcbiAgICAgICAgICAvLyBXZSBzZXQgdGhlIGZsYWcgZm9yIGEgc2luZ2xlIGRlcGVuZGVuY3kgbGF0ZXIgaW4gdGhpcyBmdW5jdGlvbixcbiAgICAgICAgICAvLyBidXQgdGhpcyBlbnN1cmVzIHdlIG1hcmsgYm90aCBhcyBhdHRhY2hlZCByYXRoZXIgdGhhbiBqdXN0IG9uZS5cbiAgICAgICAgICBpc0xpc3RlbmluZ1tUT1BfQkxVUl0gPSB0cnVlO1xuICAgICAgICAgIGlzTGlzdGVuaW5nW1RPUF9GT0NVU10gPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFRPUF9DQU5DRUw6XG4gICAgICAgIGNhc2UgVE9QX0NMT1NFOlxuICAgICAgICAgIGlmIChpc0V2ZW50U3VwcG9ydGVkKGdldFJhd0V2ZW50TmFtZShkZXBlbmRlbmN5KSkpIHtcbiAgICAgICAgICAgIHRyYXBDYXB0dXJlZEV2ZW50KGRlcGVuZGVuY3ksIG1vdW50QXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBUT1BfSU5WQUxJRDpcbiAgICAgICAgY2FzZSBUT1BfU1VCTUlUOlxuICAgICAgICBjYXNlIFRPUF9SRVNFVDpcbiAgICAgICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhlbSBvbiB0aGUgdGFyZ2V0IERPTSBlbGVtZW50cy5cbiAgICAgICAgICAvLyBTb21lIG9mIHRoZW0gYnViYmxlIHNvIHdlIGRvbid0IHdhbnQgdGhlbSB0byBmaXJlIHR3aWNlLlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIC8vIEJ5IGRlZmF1bHQsIGxpc3RlbiBvbiB0aGUgdG9wIGxldmVsIHRvIGFsbCBub24tbWVkaWEgZXZlbnRzLlxuICAgICAgICAgIC8vIE1lZGlhIGV2ZW50cyBkb24ndCBidWJibGUgc28gYWRkaW5nIHRoZSBsaXN0ZW5lciB3b3VsZG4ndCBkbyBhbnl0aGluZy5cbiAgICAgICAgICB2YXIgaXNNZWRpYUV2ZW50ID0gbWVkaWFFdmVudFR5cGVzLmluZGV4T2YoZGVwZW5kZW5jeSkgIT09IC0xO1xuICAgICAgICAgIGlmICghaXNNZWRpYUV2ZW50KSB7XG4gICAgICAgICAgICB0cmFwQnViYmxlZEV2ZW50KGRlcGVuZGVuY3ksIG1vdW50QXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlzTGlzdGVuaW5nW2RlcGVuZGVuY3ldID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNMaXN0ZW5pbmdUb0FsbERlcGVuZGVuY2llcyhyZWdpc3RyYXRpb25OYW1lLCBtb3VudEF0KSB7XG4gIHZhciBpc0xpc3RlbmluZyA9IGdldExpc3RlbmluZ0ZvckRvY3VtZW50KG1vdW50QXQpO1xuICB2YXIgZGVwZW5kZW5jaWVzID0gcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llc1tyZWdpc3RyYXRpb25OYW1lXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZXBlbmRlbmNpZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZGVwZW5kZW5jeSA9IGRlcGVuZGVuY2llc1tpXTtcbiAgICBpZiAoIShpc0xpc3RlbmluZy5oYXNPd25Qcm9wZXJ0eShkZXBlbmRlbmN5KSAmJiBpc0xpc3RlbmluZ1tkZXBlbmRlbmN5XSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldEFjdGl2ZUVsZW1lbnQoZG9jKSB7XG4gIGRvYyA9IGRvYyB8fCAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyA/IGRvY3VtZW50IDogdW5kZWZpbmVkKTtcbiAgaWYgKHR5cGVvZiBkb2MgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gZG9jLmFjdGl2ZUVsZW1lbnQgfHwgZG9jLmJvZHk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZG9jLmJvZHk7XG4gIH1cbn1cblxuLyoqXG4gKiBHaXZlbiBhbnkgbm9kZSByZXR1cm4gdGhlIGZpcnN0IGxlYWYgbm9kZSB3aXRob3V0IGNoaWxkcmVuLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX0gbm9kZVxuICogQHJldHVybiB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX1cbiAqL1xuZnVuY3Rpb24gZ2V0TGVhZk5vZGUobm9kZSkge1xuICB3aGlsZSAobm9kZSAmJiBub2RlLmZpcnN0Q2hpbGQpIHtcbiAgICBub2RlID0gbm9kZS5maXJzdENoaWxkO1xuICB9XG4gIHJldHVybiBub2RlO1xufVxuXG4vKipcbiAqIEdldCB0aGUgbmV4dCBzaWJsaW5nIHdpdGhpbiBhIGNvbnRhaW5lci4gVGhpcyB3aWxsIHdhbGsgdXAgdGhlXG4gKiBET00gaWYgYSBub2RlJ3Mgc2libGluZ3MgaGF2ZSBiZWVuIGV4aGF1c3RlZC5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IG5vZGVcbiAqIEByZXR1cm4gez9ET01FbGVtZW50fERPTVRleHROb2RlfVxuICovXG5mdW5jdGlvbiBnZXRTaWJsaW5nTm9kZShub2RlKSB7XG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUubmV4dFNpYmxpbmcpIHtcbiAgICAgIHJldHVybiBub2RlLm5leHRTaWJsaW5nO1xuICAgIH1cbiAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICB9XG59XG5cbi8qKlxuICogR2V0IG9iamVjdCBkZXNjcmliaW5nIHRoZSBub2RlcyB3aGljaCBjb250YWluIGNoYXJhY3RlcnMgYXQgb2Zmc2V0LlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX0gcm9vdFxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICogQHJldHVybiB7P29iamVjdH1cbiAqL1xuZnVuY3Rpb24gZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldChyb290LCBvZmZzZXQpIHtcbiAgdmFyIG5vZGUgPSBnZXRMZWFmTm9kZShyb290KTtcbiAgdmFyIG5vZGVTdGFydCA9IDA7XG4gIHZhciBub2RlRW5kID0gMDtcblxuICB3aGlsZSAobm9kZSkge1xuICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBURVhUX05PREUpIHtcbiAgICAgIG5vZGVFbmQgPSBub2RlU3RhcnQgKyBub2RlLnRleHRDb250ZW50Lmxlbmd0aDtcblxuICAgICAgaWYgKG5vZGVTdGFydCA8PSBvZmZzZXQgJiYgbm9kZUVuZCA+PSBvZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgIG9mZnNldDogb2Zmc2V0IC0gbm9kZVN0YXJ0XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIG5vZGVTdGFydCA9IG5vZGVFbmQ7XG4gICAgfVxuXG4gICAgbm9kZSA9IGdldExlYWZOb2RlKGdldFNpYmxpbmdOb2RlKG5vZGUpKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gb3V0ZXJOb2RlXG4gKiBAcmV0dXJuIHs/b2JqZWN0fVxuICovXG5mdW5jdGlvbiBnZXRPZmZzZXRzKG91dGVyTm9kZSkge1xuICB2YXIgb3duZXJEb2N1bWVudCA9IG91dGVyTm9kZS5vd25lckRvY3VtZW50O1xuXG4gIHZhciB3aW4gPSBvd25lckRvY3VtZW50ICYmIG93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgd2luZG93O1xuICB2YXIgc2VsZWN0aW9uID0gd2luLmdldFNlbGVjdGlvbiAmJiB3aW4uZ2V0U2VsZWN0aW9uKCk7XG5cbiAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBhbmNob3JOb2RlID0gc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICBhbmNob3JPZmZzZXQgPSBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgZm9jdXNOb2RlID0gc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgIGZvY3VzT2Zmc2V0ID0gc2VsZWN0aW9uLmZvY3VzT2Zmc2V0O1xuXG4gIC8vIEluIEZpcmVmb3gsIGFuY2hvck5vZGUgYW5kIGZvY3VzTm9kZSBjYW4gYmUgXCJhbm9ueW1vdXMgZGl2c1wiLCBlLmcuIHRoZVxuICAvLyB1cC9kb3duIGJ1dHRvbnMgb24gYW4gPGlucHV0IHR5cGU9XCJudW1iZXJcIj4uIEFub255bW91cyBkaXZzIGRvIG5vdCBzZWVtIHRvXG4gIC8vIGV4cG9zZSBwcm9wZXJ0aWVzLCB0cmlnZ2VyaW5nIGEgXCJQZXJtaXNzaW9uIGRlbmllZCBlcnJvclwiIGlmIGFueSBvZiBpdHNcbiAgLy8gcHJvcGVydGllcyBhcmUgYWNjZXNzZWQuIFRoZSBvbmx5IHNlZW1pbmdseSBwb3NzaWJsZSB3YXkgdG8gYXZvaWQgZXJyb3JpbmdcbiAgLy8gaXMgdG8gYWNjZXNzIGEgcHJvcGVydHkgdGhhdCB0eXBpY2FsbHkgd29ya3MgZm9yIG5vbi1hbm9ueW1vdXMgZGl2cyBhbmRcbiAgLy8gY2F0Y2ggYW55IGVycm9yIHRoYXQgbWF5IG90aGVyd2lzZSBhcmlzZS4gU2VlXG4gIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTIwODQyN1xuXG4gIHRyeSB7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLWV4cHJlc3Npb25zICovXG4gICAgYW5jaG9yTm9kZS5ub2RlVHlwZTtcbiAgICBmb2N1c05vZGUubm9kZVR5cGU7XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtZXhwcmVzc2lvbnMgKi9cbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGdldE1vZGVybk9mZnNldHNGcm9tUG9pbnRzKG91dGVyTm9kZSwgYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0LCBmb2N1c05vZGUsIGZvY3VzT2Zmc2V0KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHtzdGFydCwgZW5kfSB3aGVyZSBgc3RhcnRgIGlzIHRoZSBjaGFyYWN0ZXIvY29kZXBvaW50IGluZGV4IG9mXG4gKiAoYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0KSB3aXRoaW4gdGhlIHRleHRDb250ZW50IG9mIGBvdXRlck5vZGVgLCBhbmRcbiAqIGBlbmRgIGlzIHRoZSBpbmRleCBvZiAoZm9jdXNOb2RlLCBmb2N1c09mZnNldCkuXG4gKlxuICogUmV0dXJucyBudWxsIGlmIHlvdSBwYXNzIGluIGdhcmJhZ2UgaW5wdXQgYnV0IHdlIHNob3VsZCBwcm9iYWJseSBqdXN0IGNyYXNoLlxuICpcbiAqIEV4cG9ydGVkIG9ubHkgZm9yIHRlc3RpbmcuXG4gKi9cbmZ1bmN0aW9uIGdldE1vZGVybk9mZnNldHNGcm9tUG9pbnRzKG91dGVyTm9kZSwgYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0LCBmb2N1c05vZGUsIGZvY3VzT2Zmc2V0KSB7XG4gIHZhciBsZW5ndGggPSAwO1xuICB2YXIgc3RhcnQgPSAtMTtcbiAgdmFyIGVuZCA9IC0xO1xuICB2YXIgaW5kZXhXaXRoaW5BbmNob3IgPSAwO1xuICB2YXIgaW5kZXhXaXRoaW5Gb2N1cyA9IDA7XG4gIHZhciBub2RlID0gb3V0ZXJOb2RlO1xuICB2YXIgcGFyZW50Tm9kZSA9IG51bGw7XG5cbiAgb3V0ZXI6IHdoaWxlICh0cnVlKSB7XG4gICAgdmFyIG5leHQgPSBudWxsO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChub2RlID09PSBhbmNob3JOb2RlICYmIChhbmNob3JPZmZzZXQgPT09IDAgfHwgbm9kZS5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFKSkge1xuICAgICAgICBzdGFydCA9IGxlbmd0aCArIGFuY2hvck9mZnNldDtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlID09PSBmb2N1c05vZGUgJiYgKGZvY3VzT2Zmc2V0ID09PSAwIHx8IG5vZGUubm9kZVR5cGUgPT09IFRFWFRfTk9ERSkpIHtcbiAgICAgICAgZW5kID0gbGVuZ3RoICsgZm9jdXNPZmZzZXQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBURVhUX05PREUpIHtcbiAgICAgICAgbGVuZ3RoICs9IG5vZGUubm9kZVZhbHVlLmxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgaWYgKChuZXh0ID0gbm9kZS5maXJzdENoaWxkKSA9PT0gbnVsbCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIC8vIE1vdmluZyBmcm9tIGBub2RlYCB0byBpdHMgZmlyc3QgY2hpbGQgYG5leHRgLlxuICAgICAgcGFyZW50Tm9kZSA9IG5vZGU7XG4gICAgICBub2RlID0gbmV4dDtcbiAgICB9XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKG5vZGUgPT09IG91dGVyTm9kZSkge1xuICAgICAgICAvLyBJZiBgb3V0ZXJOb2RlYCBoYXMgY2hpbGRyZW4sIHRoaXMgaXMgYWx3YXlzIHRoZSBzZWNvbmQgdGltZSB2aXNpdGluZ1xuICAgICAgICAvLyBpdC4gSWYgaXQgaGFzIG5vIGNoaWxkcmVuLCB0aGlzIGlzIHN0aWxsIHRoZSBmaXJzdCBsb29wLCBhbmQgdGhlIG9ubHlcbiAgICAgICAgLy8gdmFsaWQgc2VsZWN0aW9uIGlzIGFuY2hvck5vZGUgYW5kIGZvY3VzTm9kZSBib3RoIGVxdWFsIHRvIHRoaXMgbm9kZVxuICAgICAgICAvLyBhbmQgYm90aCBvZmZzZXRzIDAsIGluIHdoaWNoIGNhc2Ugd2Ugd2lsbCBoYXZlIGhhbmRsZWQgYWJvdmUuXG4gICAgICAgIGJyZWFrIG91dGVyO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmVudE5vZGUgPT09IGFuY2hvck5vZGUgJiYgKytpbmRleFdpdGhpbkFuY2hvciA9PT0gYW5jaG9yT2Zmc2V0KSB7XG4gICAgICAgIHN0YXJ0ID0gbGVuZ3RoO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmVudE5vZGUgPT09IGZvY3VzTm9kZSAmJiArK2luZGV4V2l0aGluRm9jdXMgPT09IGZvY3VzT2Zmc2V0KSB7XG4gICAgICAgIGVuZCA9IGxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGlmICgobmV4dCA9IG5vZGUubmV4dFNpYmxpbmcpICE9PSBudWxsKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgbm9kZSA9IHBhcmVudE5vZGU7XG4gICAgICBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgIH1cblxuICAgIC8vIE1vdmluZyBmcm9tIGBub2RlYCB0byBpdHMgbmV4dCBzaWJsaW5nIGBuZXh0YC5cbiAgICBub2RlID0gbmV4dDtcbiAgfVxuXG4gIGlmIChzdGFydCA9PT0gLTEgfHwgZW5kID09PSAtMSkge1xuICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4gKFdvdWxkIGhhcHBlbiBpZiB0aGUgYW5jaG9yL2ZvY3VzIG5vZGVzIGFyZW4ndFxuICAgIC8vIGFjdHVhbGx5IGluc2lkZSB0aGUgcGFzc2VkLWluIG5vZGUuKVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydDogc3RhcnQsXG4gICAgZW5kOiBlbmRcbiAgfTtcbn1cblxuLyoqXG4gKiBJbiBtb2Rlcm4gbm9uLUlFIGJyb3dzZXJzLCB3ZSBjYW4gc3VwcG9ydCBib3RoIGZvcndhcmQgYW5kIGJhY2t3YXJkXG4gKiBzZWxlY3Rpb25zLlxuICpcbiAqIE5vdGU6IElFMTArIHN1cHBvcnRzIHRoZSBTZWxlY3Rpb24gb2JqZWN0LCBidXQgaXQgZG9lcyBub3Qgc3VwcG9ydFxuICogdGhlIGBleHRlbmRgIG1ldGhvZCwgd2hpY2ggbWVhbnMgdGhhdCBldmVuIGluIG1vZGVybiBJRSwgaXQncyBub3QgcG9zc2libGVcbiAqIHRvIHByb2dyYW1tYXRpY2FsbHkgY3JlYXRlIGEgYmFja3dhcmQgc2VsZWN0aW9uLiBUaHVzLCBmb3IgYWxsIElFXG4gKiB2ZXJzaW9ucywgd2UgdXNlIHRoZSBvbGQgSUUgQVBJIHRvIGNyZWF0ZSBvdXIgc2VsZWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IG5vZGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBvZmZzZXRzXG4gKi9cbmZ1bmN0aW9uIHNldE9mZnNldHMobm9kZSwgb2Zmc2V0cykge1xuICB2YXIgZG9jID0gbm9kZS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50O1xuICB2YXIgd2luID0gZG9jICYmIGRvYy5kZWZhdWx0VmlldyB8fCB3aW5kb3c7XG5cbiAgLy8gRWRnZSBmYWlscyB3aXRoIFwiT2JqZWN0IGV4cGVjdGVkXCIgaW4gc29tZSBzY2VuYXJpb3MuXG4gIC8vIChGb3IgaW5zdGFuY2U6IFRpbnlNQ0UgZWRpdG9yIHVzZWQgaW4gYSBsaXN0IGNvbXBvbmVudCB0aGF0IHN1cHBvcnRzIHBhc3RpbmcgdG8gYWRkIG1vcmUsXG4gIC8vIGZhaWxzIHdoZW4gcGFzdGluZyAxMDArIGl0ZW1zKVxuICBpZiAoIXdpbi5nZXRTZWxlY3Rpb24pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgc2VsZWN0aW9uID0gd2luLmdldFNlbGVjdGlvbigpO1xuICB2YXIgbGVuZ3RoID0gbm9kZS50ZXh0Q29udGVudC5sZW5ndGg7XG4gIHZhciBzdGFydCA9IE1hdGgubWluKG9mZnNldHMuc3RhcnQsIGxlbmd0aCk7XG4gIHZhciBlbmQgPSBvZmZzZXRzLmVuZCA9PT0gdW5kZWZpbmVkID8gc3RhcnQgOiBNYXRoLm1pbihvZmZzZXRzLmVuZCwgbGVuZ3RoKTtcblxuICAvLyBJRSAxMSB1c2VzIG1vZGVybiBzZWxlY3Rpb24sIGJ1dCBkb2Vzbid0IHN1cHBvcnQgdGhlIGV4dGVuZCBtZXRob2QuXG4gIC8vIEZsaXAgYmFja3dhcmQgc2VsZWN0aW9ucywgc28gd2UgY2FuIHNldCB3aXRoIGEgc2luZ2xlIHJhbmdlLlxuICBpZiAoIXNlbGVjdGlvbi5leHRlbmQgJiYgc3RhcnQgPiBlbmQpIHtcbiAgICB2YXIgdGVtcCA9IGVuZDtcbiAgICBlbmQgPSBzdGFydDtcbiAgICBzdGFydCA9IHRlbXA7XG4gIH1cblxuICB2YXIgc3RhcnRNYXJrZXIgPSBnZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0KG5vZGUsIHN0YXJ0KTtcbiAgdmFyIGVuZE1hcmtlciA9IGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQobm9kZSwgZW5kKTtcblxuICBpZiAoc3RhcnRNYXJrZXIgJiYgZW5kTWFya2VyKSB7XG4gICAgaWYgKHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAxICYmIHNlbGVjdGlvbi5hbmNob3JOb2RlID09PSBzdGFydE1hcmtlci5ub2RlICYmIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQgPT09IHN0YXJ0TWFya2VyLm9mZnNldCAmJiBzZWxlY3Rpb24uZm9jdXNOb2RlID09PSBlbmRNYXJrZXIubm9kZSAmJiBzZWxlY3Rpb24uZm9jdXNPZmZzZXQgPT09IGVuZE1hcmtlci5vZmZzZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHJhbmdlID0gZG9jLmNyZWF0ZVJhbmdlKCk7XG4gICAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnRNYXJrZXIubm9kZSwgc3RhcnRNYXJrZXIub2Zmc2V0KTtcbiAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG5cbiAgICBpZiAoc3RhcnQgPiBlbmQpIHtcbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XG4gICAgICBzZWxlY3Rpb24uZXh0ZW5kKGVuZE1hcmtlci5ub2RlLCBlbmRNYXJrZXIub2Zmc2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmFuZ2Uuc2V0RW5kKGVuZE1hcmtlci5ub2RlLCBlbmRNYXJrZXIub2Zmc2V0KTtcbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzVGV4dE5vZGUobm9kZSkge1xuICByZXR1cm4gbm9kZSAmJiBub2RlLm5vZGVUeXBlID09PSBURVhUX05PREU7XG59XG5cbmZ1bmN0aW9uIGNvbnRhaW5zTm9kZShvdXRlck5vZGUsIGlubmVyTm9kZSkge1xuICBpZiAoIW91dGVyTm9kZSB8fCAhaW5uZXJOb2RlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2UgaWYgKG91dGVyTm9kZSA9PT0gaW5uZXJOb2RlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoaXNUZXh0Tm9kZShvdXRlck5vZGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2UgaWYgKGlzVGV4dE5vZGUoaW5uZXJOb2RlKSkge1xuICAgIHJldHVybiBjb250YWluc05vZGUob3V0ZXJOb2RlLCBpbm5lck5vZGUucGFyZW50Tm9kZSk7XG4gIH0gZWxzZSBpZiAoJ2NvbnRhaW5zJyBpbiBvdXRlck5vZGUpIHtcbiAgICByZXR1cm4gb3V0ZXJOb2RlLmNvbnRhaW5zKGlubmVyTm9kZSk7XG4gIH0gZWxzZSBpZiAob3V0ZXJOb2RlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSB7XG4gICAgcmV0dXJuICEhKG91dGVyTm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihpbm5lck5vZGUpICYgMTYpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0luRG9jdW1lbnQobm9kZSkge1xuICByZXR1cm4gbm9kZSAmJiBub2RlLm93bmVyRG9jdW1lbnQgJiYgY29udGFpbnNOb2RlKG5vZGUub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIG5vZGUpO1xufVxuXG5mdW5jdGlvbiBpc1NhbWVPcmlnaW5GcmFtZShpZnJhbWUpIHtcbiAgdHJ5IHtcbiAgICAvLyBBY2Nlc3NpbmcgdGhlIGNvbnRlbnREb2N1bWVudCBvZiBhIEhUTUxJZnJhbWVFbGVtZW50IGNhbiBjYXVzZSB0aGUgYnJvd3NlclxuICAgIC8vIHRvIHRocm93LCBlLmcuIGlmIGl0IGhhcyBhIGNyb3NzLW9yaWdpbiBzcmMgYXR0cmlidXRlLlxuICAgIC8vIFNhZmFyaSB3aWxsIHNob3cgYW4gZXJyb3IgaW4gdGhlIGNvbnNvbGUgd2hlbiB0aGUgYWNjZXNzIHJlc3VsdHMgaW4gXCJCbG9ja2VkIGEgZnJhbWUgd2l0aCBvcmlnaW5cIi4gZS5nOlxuICAgIC8vIGlmcmFtZS5jb250ZW50RG9jdW1lbnQuZGVmYXVsdFZpZXc7XG4gICAgLy8gQSBzYWZldHkgd2F5IGlzIHRvIGFjY2VzcyBvbmUgb2YgdGhlIGNyb3NzIG9yaWdpbiBwcm9wZXJ0aWVzOiBXaW5kb3cgb3IgTG9jYXRpb25cbiAgICAvLyBXaGljaCBtaWdodCByZXN1bHQgaW4gXCJTZWN1cml0eUVycm9yXCIgRE9NIEV4Y2VwdGlvbiBhbmQgaXQgaXMgY29tcGF0aWJsZSB0byBTYWZhcmkuXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvYnJvd3NlcnMuaHRtbCNpbnRlZ3JhdGlvbi13aXRoLWlkbFxuXG4gICAgcmV0dXJuIHR5cGVvZiBpZnJhbWUuY29udGVudFdpbmRvdy5sb2NhdGlvbi5ocmVmID09PSAnc3RyaW5nJztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEFjdGl2ZUVsZW1lbnREZWVwKCkge1xuICB2YXIgd2luID0gd2luZG93O1xuICB2YXIgZWxlbWVudCA9IGdldEFjdGl2ZUVsZW1lbnQoKTtcbiAgd2hpbGUgKGVsZW1lbnQgaW5zdGFuY2VvZiB3aW4uSFRNTElGcmFtZUVsZW1lbnQpIHtcbiAgICBpZiAoaXNTYW1lT3JpZ2luRnJhbWUoZWxlbWVudCkpIHtcbiAgICAgIHdpbiA9IGVsZW1lbnQuY29udGVudFdpbmRvdztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICAgIGVsZW1lbnQgPSBnZXRBY3RpdmVFbGVtZW50KHdpbi5kb2N1bWVudCk7XG4gIH1cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5cbi8qKlxuICogQFJlYWN0SW5wdXRTZWxlY3Rpb246IFJlYWN0IGlucHV0IHNlbGVjdGlvbiBtb2R1bGUuIEJhc2VkIG9uIFNlbGVjdGlvbi5qcyxcbiAqIGJ1dCBtb2RpZmllZCB0byBiZSBzdWl0YWJsZSBmb3IgcmVhY3QgYW5kIGhhcyBhIGNvdXBsZSBvZiBidWcgZml4ZXMgKGRvZXNuJ3RcbiAqIGFzc3VtZSBidXR0b25zIGhhdmUgcmFuZ2Ugc2VsZWN0aW9ucyBhbGxvd2VkKS5cbiAqIElucHV0IHNlbGVjdGlvbiBtb2R1bGUgZm9yIFJlYWN0LlxuICovXG5cbi8qKlxuICogQGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllczogd2UgZ2V0IHRoZSBlbGVtZW50IHR5cGVzIHRoYXQgc3VwcG9ydCBzZWxlY3Rpb25cbiAqIGZyb20gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jZG8tbm90LWFwcGx5LCBsb29raW5nIGF0IGBzZWxlY3Rpb25TdGFydGBcbiAqIGFuZCBgc2VsZWN0aW9uRW5kYCByb3dzLlxuICovXG5mdW5jdGlvbiBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMoZWxlbSkge1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtICYmIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gbm9kZU5hbWUgJiYgKG5vZGVOYW1lID09PSAnaW5wdXQnICYmIChlbGVtLnR5cGUgPT09ICd0ZXh0JyB8fCBlbGVtLnR5cGUgPT09ICdzZWFyY2gnIHx8IGVsZW0udHlwZSA9PT0gJ3RlbCcgfHwgZWxlbS50eXBlID09PSAndXJsJyB8fCBlbGVtLnR5cGUgPT09ICdwYXNzd29yZCcpIHx8IG5vZGVOYW1lID09PSAndGV4dGFyZWEnIHx8IGVsZW0uY29udGVudEVkaXRhYmxlID09PSAndHJ1ZScpO1xufVxuXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb25JbmZvcm1hdGlvbigpIHtcbiAgdmFyIGZvY3VzZWRFbGVtID0gZ2V0QWN0aXZlRWxlbWVudERlZXAoKTtcbiAgcmV0dXJuIHtcbiAgICBmb2N1c2VkRWxlbTogZm9jdXNlZEVsZW0sXG4gICAgc2VsZWN0aW9uUmFuZ2U6IGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhmb2N1c2VkRWxlbSkgPyBnZXRTZWxlY3Rpb24kMShmb2N1c2VkRWxlbSkgOiBudWxsXG4gIH07XG59XG5cbi8qKlxuICogQHJlc3RvcmVTZWxlY3Rpb246IElmIGFueSBzZWxlY3Rpb24gaW5mb3JtYXRpb24gd2FzIHBvdGVudGlhbGx5IGxvc3QsXG4gKiByZXN0b3JlIGl0LiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHBlcmZvcm1pbmcgb3BlcmF0aW9ucyB0aGF0IGNvdWxkIHJlbW92ZSBkb21cbiAqIG5vZGVzIGFuZCBwbGFjZSB0aGVtIGJhY2sgaW4sIHJlc3VsdGluZyBpbiBmb2N1cyBiZWluZyBsb3N0LlxuICovXG5mdW5jdGlvbiByZXN0b3JlU2VsZWN0aW9uKHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24pIHtcbiAgdmFyIGN1ckZvY3VzZWRFbGVtID0gZ2V0QWN0aXZlRWxlbWVudERlZXAoKTtcbiAgdmFyIHByaW9yRm9jdXNlZEVsZW0gPSBwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uLmZvY3VzZWRFbGVtO1xuICB2YXIgcHJpb3JTZWxlY3Rpb25SYW5nZSA9IHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24uc2VsZWN0aW9uUmFuZ2U7XG4gIGlmIChjdXJGb2N1c2VkRWxlbSAhPT0gcHJpb3JGb2N1c2VkRWxlbSAmJiBpc0luRG9jdW1lbnQocHJpb3JGb2N1c2VkRWxlbSkpIHtcbiAgICBpZiAocHJpb3JTZWxlY3Rpb25SYW5nZSAhPT0gbnVsbCAmJiBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMocHJpb3JGb2N1c2VkRWxlbSkpIHtcbiAgICAgIHNldFNlbGVjdGlvbihwcmlvckZvY3VzZWRFbGVtLCBwcmlvclNlbGVjdGlvblJhbmdlKTtcbiAgICB9XG5cbiAgICAvLyBGb2N1c2luZyBhIG5vZGUgY2FuIGNoYW5nZSB0aGUgc2Nyb2xsIHBvc2l0aW9uLCB3aGljaCBpcyB1bmRlc2lyYWJsZVxuICAgIHZhciBhbmNlc3RvcnMgPSBbXTtcbiAgICB2YXIgYW5jZXN0b3IgPSBwcmlvckZvY3VzZWRFbGVtO1xuICAgIHdoaWxlIChhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudE5vZGUpIHtcbiAgICAgIGlmIChhbmNlc3Rvci5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgIGFuY2VzdG9ycy5wdXNoKHtcbiAgICAgICAgICBlbGVtZW50OiBhbmNlc3RvcixcbiAgICAgICAgICBsZWZ0OiBhbmNlc3Rvci5zY3JvbGxMZWZ0LFxuICAgICAgICAgIHRvcDogYW5jZXN0b3Iuc2Nyb2xsVG9wXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcHJpb3JGb2N1c2VkRWxlbS5mb2N1cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcHJpb3JGb2N1c2VkRWxlbS5mb2N1cygpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW5jZXN0b3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaW5mbyA9IGFuY2VzdG9yc1tpXTtcbiAgICAgIGluZm8uZWxlbWVudC5zY3JvbGxMZWZ0ID0gaW5mby5sZWZ0O1xuICAgICAgaW5mby5lbGVtZW50LnNjcm9sbFRvcCA9IGluZm8udG9wO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBnZXRTZWxlY3Rpb246IEdldHMgdGhlIHNlbGVjdGlvbiBib3VuZHMgb2YgYSBmb2N1c2VkIHRleHRhcmVhLCBpbnB1dCBvclxuICogY29udGVudEVkaXRhYmxlIG5vZGUuXG4gKiAtQGlucHV0OiBMb29rIHVwIHNlbGVjdGlvbiBib3VuZHMgb2YgdGhpcyBpbnB1dFxuICogLUByZXR1cm4ge3N0YXJ0OiBzZWxlY3Rpb25TdGFydCwgZW5kOiBzZWxlY3Rpb25FbmR9XG4gKi9cbmZ1bmN0aW9uIGdldFNlbGVjdGlvbiQxKGlucHV0KSB7XG4gIHZhciBzZWxlY3Rpb24gPSB2b2lkIDA7XG5cbiAgaWYgKCdzZWxlY3Rpb25TdGFydCcgaW4gaW5wdXQpIHtcbiAgICAvLyBNb2Rlcm4gYnJvd3NlciB3aXRoIGlucHV0IG9yIHRleHRhcmVhLlxuICAgIHNlbGVjdGlvbiA9IHtcbiAgICAgIHN0YXJ0OiBpbnB1dC5zZWxlY3Rpb25TdGFydCxcbiAgICAgIGVuZDogaW5wdXQuc2VsZWN0aW9uRW5kXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICAvLyBDb250ZW50IGVkaXRhYmxlIG9yIG9sZCBJRSB0ZXh0YXJlYS5cbiAgICBzZWxlY3Rpb24gPSBnZXRPZmZzZXRzKGlucHV0KTtcbiAgfVxuXG4gIHJldHVybiBzZWxlY3Rpb24gfHwgeyBzdGFydDogMCwgZW5kOiAwIH07XG59XG5cbi8qKlxuICogQHNldFNlbGVjdGlvbjogU2V0cyB0aGUgc2VsZWN0aW9uIGJvdW5kcyBvZiBhIHRleHRhcmVhIG9yIGlucHV0IGFuZCBmb2N1c2VzXG4gKiB0aGUgaW5wdXQuXG4gKiAtQGlucHV0ICAgICBTZXQgc2VsZWN0aW9uIGJvdW5kcyBvZiB0aGlzIGlucHV0IG9yIHRleHRhcmVhXG4gKiAtQG9mZnNldHMgICBPYmplY3Qgb2Ygc2FtZSBmb3JtIHRoYXQgaXMgcmV0dXJuZWQgZnJvbSBnZXQqXG4gKi9cbmZ1bmN0aW9uIHNldFNlbGVjdGlvbihpbnB1dCwgb2Zmc2V0cykge1xuICB2YXIgc3RhcnQgPSBvZmZzZXRzLnN0YXJ0LFxuICAgICAgZW5kID0gb2Zmc2V0cy5lbmQ7XG5cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5kID0gc3RhcnQ7XG4gIH1cblxuICBpZiAoJ3NlbGVjdGlvblN0YXJ0JyBpbiBpbnB1dCkge1xuICAgIGlucHV0LnNlbGVjdGlvblN0YXJ0ID0gc3RhcnQ7XG4gICAgaW5wdXQuc2VsZWN0aW9uRW5kID0gTWF0aC5taW4oZW5kLCBpbnB1dC52YWx1ZS5sZW5ndGgpO1xuICB9IGVsc2Uge1xuICAgIHNldE9mZnNldHMoaW5wdXQsIG9mZnNldHMpO1xuICB9XG59XG5cbnZhciBza2lwU2VsZWN0aW9uQ2hhbmdlRXZlbnQgPSBjYW5Vc2VET00gJiYgJ2RvY3VtZW50TW9kZScgaW4gZG9jdW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRNb2RlIDw9IDExO1xuXG52YXIgZXZlbnRUeXBlcyQzID0ge1xuICBzZWxlY3Q6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDogJ29uU2VsZWN0JyxcbiAgICAgIGNhcHR1cmVkOiAnb25TZWxlY3RDYXB0dXJlJ1xuICAgIH0sXG4gICAgZGVwZW5kZW5jaWVzOiBbVE9QX0JMVVIsIFRPUF9DT05URVhUX01FTlUsIFRPUF9EUkFHX0VORCwgVE9QX0ZPQ1VTLCBUT1BfS0VZX0RPV04sIFRPUF9LRVlfVVAsIFRPUF9NT1VTRV9ET1dOLCBUT1BfTU9VU0VfVVAsIFRPUF9TRUxFQ1RJT05fQ0hBTkdFXVxuICB9XG59O1xuXG52YXIgYWN0aXZlRWxlbWVudCQxID0gbnVsbDtcbnZhciBhY3RpdmVFbGVtZW50SW5zdCQxID0gbnVsbDtcbnZhciBsYXN0U2VsZWN0aW9uID0gbnVsbDtcbnZhciBtb3VzZURvd24gPSBmYWxzZTtcblxuLyoqXG4gKiBHZXQgYW4gb2JqZWN0IHdoaWNoIGlzIGEgdW5pcXVlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbi5cbiAqXG4gKiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgbm90IGJlIGNvbnNpc3RlbnQgYWNyb3NzIG5vZGVzIG9yIGJyb3dzZXJzLCBidXRcbiAqIHR3byBpZGVudGljYWwgc2VsZWN0aW9ucyBvbiB0aGUgc2FtZSBub2RlIHdpbGwgcmV0dXJuIGlkZW50aWNhbCBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb24obm9kZSkge1xuICBpZiAoJ3NlbGVjdGlvblN0YXJ0JyBpbiBub2RlICYmIGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhub2RlKSkge1xuICAgIHJldHVybiB7XG4gICAgICBzdGFydDogbm9kZS5zZWxlY3Rpb25TdGFydCxcbiAgICAgIGVuZDogbm9kZS5zZWxlY3Rpb25FbmRcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHZhciB3aW4gPSBub2RlLm93bmVyRG9jdW1lbnQgJiYgbm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdztcbiAgICB2YXIgc2VsZWN0aW9uID0gd2luLmdldFNlbGVjdGlvbigpO1xuICAgIHJldHVybiB7XG4gICAgICBhbmNob3JOb2RlOiBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgIGFuY2hvck9mZnNldDogc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgIGZvY3VzTm9kZTogc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgIGZvY3VzT2Zmc2V0OiBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogR2V0IGRvY3VtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgZXZlbnQgdGFyZ2V0LlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudFRhcmdldFxuICogQHJldHVybiB7RG9jdW1lbnR9XG4gKi9cbmZ1bmN0aW9uIGdldEV2ZW50VGFyZ2V0RG9jdW1lbnQoZXZlbnRUYXJnZXQpIHtcbiAgcmV0dXJuIGV2ZW50VGFyZ2V0LndpbmRvdyA9PT0gZXZlbnRUYXJnZXQgPyBldmVudFRhcmdldC5kb2N1bWVudCA6IGV2ZW50VGFyZ2V0Lm5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFID8gZXZlbnRUYXJnZXQgOiBldmVudFRhcmdldC5vd25lckRvY3VtZW50O1xufVxuXG4vKipcbiAqIFBvbGwgc2VsZWN0aW9uIHRvIHNlZSB3aGV0aGVyIGl0J3MgY2hhbmdlZC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnRcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudFRhcmdldFxuICogQHJldHVybiB7P1N5bnRoZXRpY0V2ZW50fVxuICovXG5mdW5jdGlvbiBjb25zdHJ1Y3RTZWxlY3RFdmVudChuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgLy8gRW5zdXJlIHdlIGhhdmUgdGhlIHJpZ2h0IGVsZW1lbnQsIGFuZCB0aGF0IHRoZSB1c2VyIGlzIG5vdCBkcmFnZ2luZyBhXG4gIC8vIHNlbGVjdGlvbiAodGhpcyBtYXRjaGVzIG5hdGl2ZSBgc2VsZWN0YCBldmVudCBiZWhhdmlvcikuIEluIEhUTUw1LCBzZWxlY3RcbiAgLy8gZmlyZXMgb25seSBvbiBpbnB1dCBhbmQgdGV4dGFyZWEgdGh1cyBpZiB0aGVyZSdzIG5vIGZvY3VzZWQgZWxlbWVudCB3ZVxuICAvLyB3b24ndCBkaXNwYXRjaC5cbiAgdmFyIGRvYyA9IGdldEV2ZW50VGFyZ2V0RG9jdW1lbnQobmF0aXZlRXZlbnRUYXJnZXQpO1xuXG4gIGlmIChtb3VzZURvd24gfHwgYWN0aXZlRWxlbWVudCQxID09IG51bGwgfHwgYWN0aXZlRWxlbWVudCQxICE9PSBnZXRBY3RpdmVFbGVtZW50KGRvYykpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIE9ubHkgZmlyZSB3aGVuIHNlbGVjdGlvbiBoYXMgYWN0dWFsbHkgY2hhbmdlZC5cbiAgdmFyIGN1cnJlbnRTZWxlY3Rpb24gPSBnZXRTZWxlY3Rpb24oYWN0aXZlRWxlbWVudCQxKTtcbiAgaWYgKCFsYXN0U2VsZWN0aW9uIHx8ICFzaGFsbG93RXF1YWwobGFzdFNlbGVjdGlvbiwgY3VycmVudFNlbGVjdGlvbikpIHtcbiAgICBsYXN0U2VsZWN0aW9uID0gY3VycmVudFNlbGVjdGlvbjtcblxuICAgIHZhciBzeW50aGV0aWNFdmVudCA9IFN5bnRoZXRpY0V2ZW50LmdldFBvb2xlZChldmVudFR5cGVzJDMuc2VsZWN0LCBhY3RpdmVFbGVtZW50SW5zdCQxLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuXG4gICAgc3ludGhldGljRXZlbnQudHlwZSA9ICdzZWxlY3QnO1xuICAgIHN5bnRoZXRpY0V2ZW50LnRhcmdldCA9IGFjdGl2ZUVsZW1lbnQkMTtcblxuICAgIGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMoc3ludGhldGljRXZlbnQpO1xuXG4gICAgcmV0dXJuIHN5bnRoZXRpY0V2ZW50O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogVGhpcyBwbHVnaW4gY3JlYXRlcyBhbiBgb25TZWxlY3RgIGV2ZW50IHRoYXQgbm9ybWFsaXplcyBzZWxlY3QgZXZlbnRzXG4gKiBhY3Jvc3MgZm9ybSBlbGVtZW50cy5cbiAqXG4gKiBTdXBwb3J0ZWQgZWxlbWVudHMgYXJlOlxuICogLSBpbnB1dCAoc2VlIGBpc1RleHRJbnB1dEVsZW1lbnRgKVxuICogLSB0ZXh0YXJlYVxuICogLSBjb250ZW50RWRpdGFibGVcbiAqXG4gKiBUaGlzIGRpZmZlcnMgZnJvbSBuYXRpdmUgYnJvd3NlciBpbXBsZW1lbnRhdGlvbnMgaW4gdGhlIGZvbGxvd2luZyB3YXlzOlxuICogLSBGaXJlcyBvbiBjb250ZW50RWRpdGFibGUgZmllbGRzIGFzIHdlbGwgYXMgaW5wdXRzLlxuICogLSBGaXJlcyBmb3IgY29sbGFwc2VkIHNlbGVjdGlvbi5cbiAqIC0gRmlyZXMgYWZ0ZXIgdXNlciBpbnB1dC5cbiAqL1xudmFyIFNlbGVjdEV2ZW50UGx1Z2luID0ge1xuICBldmVudFR5cGVzOiBldmVudFR5cGVzJDMsXG5cbiAgZXh0cmFjdEV2ZW50czogZnVuY3Rpb24gKHRvcExldmVsVHlwZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gICAgdmFyIGRvYyA9IGdldEV2ZW50VGFyZ2V0RG9jdW1lbnQobmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIC8vIFRyYWNrIHdoZXRoZXIgYWxsIGxpc3RlbmVycyBleGlzdHMgZm9yIHRoaXMgcGx1Z2luLiBJZiBub25lIGV4aXN0LCB3ZSBkb1xuICAgIC8vIG5vdCBleHRyYWN0IGV2ZW50cy4gU2VlICMzNjM5LlxuICAgIGlmICghZG9jIHx8ICFpc0xpc3RlbmluZ1RvQWxsRGVwZW5kZW5jaWVzKCdvblNlbGVjdCcsIGRvYykpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciB0YXJnZXROb2RlID0gdGFyZ2V0SW5zdCA/IGdldE5vZGVGcm9tSW5zdGFuY2UkMSh0YXJnZXRJbnN0KSA6IHdpbmRvdztcblxuICAgIHN3aXRjaCAodG9wTGV2ZWxUeXBlKSB7XG4gICAgICAvLyBUcmFjayB0aGUgaW5wdXQgbm9kZSB0aGF0IGhhcyBmb2N1cy5cbiAgICAgIGNhc2UgVE9QX0ZPQ1VTOlxuICAgICAgICBpZiAoaXNUZXh0SW5wdXRFbGVtZW50KHRhcmdldE5vZGUpIHx8IHRhcmdldE5vZGUuY29udGVudEVkaXRhYmxlID09PSAndHJ1ZScpIHtcbiAgICAgICAgICBhY3RpdmVFbGVtZW50JDEgPSB0YXJnZXROb2RlO1xuICAgICAgICAgIGFjdGl2ZUVsZW1lbnRJbnN0JDEgPSB0YXJnZXRJbnN0O1xuICAgICAgICAgIGxhc3RTZWxlY3Rpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUT1BfQkxVUjpcbiAgICAgICAgYWN0aXZlRWxlbWVudCQxID0gbnVsbDtcbiAgICAgICAgYWN0aXZlRWxlbWVudEluc3QkMSA9IG51bGw7XG4gICAgICAgIGxhc3RTZWxlY3Rpb24gPSBudWxsO1xuICAgICAgICBicmVhaztcbiAgICAgIC8vIERvbid0IGZpcmUgdGhlIGV2ZW50IHdoaWxlIHRoZSB1c2VyIGlzIGRyYWdnaW5nLiBUaGlzIG1hdGNoZXMgdGhlXG4gICAgICAvLyBzZW1hbnRpY3Mgb2YgdGhlIG5hdGl2ZSBzZWxlY3QgZXZlbnQuXG4gICAgICBjYXNlIFRPUF9NT1VTRV9ET1dOOlxuICAgICAgICBtb3VzZURvd24gPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVE9QX0NPTlRFWFRfTUVOVTpcbiAgICAgIGNhc2UgVE9QX01PVVNFX1VQOlxuICAgICAgY2FzZSBUT1BfRFJBR19FTkQ6XG4gICAgICAgIG1vdXNlRG93biA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gY29uc3RydWN0U2VsZWN0RXZlbnQobmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICAgIC8vIENocm9tZSBhbmQgSUUgZmlyZSBub24tc3RhbmRhcmQgZXZlbnQgd2hlbiBzZWxlY3Rpb24gaXMgY2hhbmdlZCAoYW5kXG4gICAgICAvLyBzb21ldGltZXMgd2hlbiBpdCBoYXNuJ3QpLiBJRSdzIGV2ZW50IGZpcmVzIG91dCBvZiBvcmRlciB3aXRoIHJlc3BlY3RcbiAgICAgIC8vIHRvIGtleSBhbmQgaW5wdXQgZXZlbnRzIG9uIGRlbGV0aW9uLCBzbyB3ZSBkaXNjYXJkIGl0LlxuICAgICAgLy9cbiAgICAgIC8vIEZpcmVmb3ggZG9lc24ndCBzdXBwb3J0IHNlbGVjdGlvbmNoYW5nZSwgc28gY2hlY2sgc2VsZWN0aW9uIHN0YXR1c1xuICAgICAgLy8gYWZ0ZXIgZWFjaCBrZXkgZW50cnkuIFRoZSBzZWxlY3Rpb24gY2hhbmdlcyBhZnRlciBrZXlkb3duIGFuZCBiZWZvcmVcbiAgICAgIC8vIGtleXVwLCBidXQgd2UgY2hlY2sgb24ga2V5ZG93biBhcyB3ZWxsIGluIHRoZSBjYXNlIG9mIGhvbGRpbmcgZG93biBhXG4gICAgICAvLyBrZXksIHdoZW4gbXVsdGlwbGUga2V5ZG93biBldmVudHMgYXJlIGZpcmVkIGJ1dCBvbmx5IG9uZSBrZXl1cCBpcy5cbiAgICAgIC8vIFRoaXMgaXMgYWxzbyBvdXIgYXBwcm9hY2ggZm9yIElFIGhhbmRsaW5nLCBmb3IgdGhlIHJlYXNvbiBhYm92ZS5cbiAgICAgIGNhc2UgVE9QX1NFTEVDVElPTl9DSEFOR0U6XG4gICAgICAgIGlmIChza2lwU2VsZWN0aW9uQ2hhbmdlRXZlbnQpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgY2FzZSBUT1BfS0VZX0RPV046XG4gICAgICBjYXNlIFRPUF9LRVlfVVA6XG4gICAgICAgIHJldHVybiBjb25zdHJ1Y3RTZWxlY3RFdmVudChuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuXG4vKipcbiAqIEluamVjdCBtb2R1bGVzIGZvciByZXNvbHZpbmcgRE9NIGhpZXJhcmNoeSBhbmQgcGx1Z2luIG9yZGVyaW5nLlxuICovXG5pbmplY3Rpb24uaW5qZWN0RXZlbnRQbHVnaW5PcmRlcihET01FdmVudFBsdWdpbk9yZGVyKTtcbnNldENvbXBvbmVudFRyZWUoZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZSQxLCBnZXRJbnN0YW5jZUZyb21Ob2RlJDEsIGdldE5vZGVGcm9tSW5zdGFuY2UkMSk7XG5cbi8qKlxuICogU29tZSBpbXBvcnRhbnQgZXZlbnQgcGx1Z2lucyBpbmNsdWRlZCBieSBkZWZhdWx0ICh3aXRob3V0IGhhdmluZyB0byByZXF1aXJlXG4gKiB0aGVtKS5cbiAqL1xuaW5qZWN0aW9uLmluamVjdEV2ZW50UGx1Z2luc0J5TmFtZSh7XG4gIFNpbXBsZUV2ZW50UGx1Z2luOiBTaW1wbGVFdmVudFBsdWdpbixcbiAgRW50ZXJMZWF2ZUV2ZW50UGx1Z2luOiBFbnRlckxlYXZlRXZlbnRQbHVnaW4sXG4gIENoYW5nZUV2ZW50UGx1Z2luOiBDaGFuZ2VFdmVudFBsdWdpbixcbiAgU2VsZWN0RXZlbnRQbHVnaW46IFNlbGVjdEV2ZW50UGx1Z2luLFxuICBCZWZvcmVJbnB1dEV2ZW50UGx1Z2luOiBCZWZvcmVJbnB1dEV2ZW50UGx1Z2luXG59KTtcblxudmFyIGRpZFdhcm5TZWxlY3RlZFNldE9uT3B0aW9uID0gZmFsc2U7XG52YXIgZGlkV2FybkludmFsaWRDaGlsZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBmbGF0dGVuQ2hpbGRyZW4oY2hpbGRyZW4pIHtcbiAgdmFyIGNvbnRlbnQgPSAnJztcblxuICAvLyBGbGF0dGVuIGNoaWxkcmVuLiBXZSdsbCB3YXJuIGlmIHRoZXkgYXJlIGludmFsaWRcbiAgLy8gZHVyaW5nIHZhbGlkYXRlUHJvcHMoKSB3aGljaCBydW5zIGZvciBoeWRyYXRpb24gdG9vLlxuICAvLyBOb3RlIHRoYXQgdGhpcyB3b3VsZCB0aHJvdyBvbiBub24tZWxlbWVudCBvYmplY3RzLlxuICAvLyBFbGVtZW50cyBhcmUgc3RyaW5naWZpZWQgKHdoaWNoIGlzIG5vcm1hbGx5IGlycmVsZXZhbnRcbiAgLy8gYnV0IG1hdHRlcnMgZm9yIDxmYnQ+KS5cbiAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChjaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgaWYgKGNoaWxkID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29udGVudCArPSBjaGlsZDtcbiAgICAvLyBOb3RlOiB3ZSBkb24ndCB3YXJuIGFib3V0IGludmFsaWQgY2hpbGRyZW4gaGVyZS5cbiAgICAvLyBJbnN0ZWFkLCB0aGlzIGlzIGRvbmUgc2VwYXJhdGVseSBiZWxvdyBzbyB0aGF0XG4gICAgLy8gaXQgaGFwcGVucyBkdXJpbmcgdGhlIGh5ZHJhdGlvbiBjb2RlcGF0aCB0b28uXG4gIH0pO1xuXG4gIHJldHVybiBjb250ZW50O1xufVxuXG4vKipcbiAqIEltcGxlbWVudHMgYW4gPG9wdGlvbj4gaG9zdCBjb21wb25lbnQgdGhhdCB3YXJucyB3aGVuIGBzZWxlY3RlZGAgaXMgc2V0LlxuICovXG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcHMoZWxlbWVudCwgcHJvcHMpIHtcbiAge1xuICAgIC8vIFRoaXMgbWlycm9ycyB0aGUgY29kZXBhdGggYWJvdmUsIGJ1dCBydW5zIGZvciBoeWRyYXRpb24gdG9vLlxuICAgIC8vIFdhcm4gYWJvdXQgaW52YWxpZCBjaGlsZHJlbiBoZXJlIHNvIHRoYXQgY2xpZW50IGFuZCBoeWRyYXRpb24gYXJlIGNvbnNpc3RlbnQuXG4gICAgLy8gVE9ETzogdGhpcyBzZWVtcyBsaWtlIGl0IGNvdWxkIGNhdXNlIGEgREVWLW9ubHkgdGhyb3cgZm9yIGh5ZHJhdGlvblxuICAgIC8vIGlmIGNoaWxkcmVuIGNvbnRhaW5zIGEgbm9uLWVsZW1lbnQgb2JqZWN0LiBXZSBzaG91bGQgdHJ5IHRvIGF2b2lkIHRoYXQuXG4gICAgaWYgKHR5cGVvZiBwcm9wcy5jaGlsZHJlbiA9PT0gJ29iamVjdCcgJiYgcHJvcHMuY2hpbGRyZW4gIT09IG51bGwpIHtcbiAgICAgIFJlYWN0LkNoaWxkcmVuLmZvckVhY2gocHJvcHMuY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICBpZiAoY2hpbGQgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGNoaWxkID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgY2hpbGQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgY2hpbGQudHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkaWRXYXJuSW52YWxpZENoaWxkKSB7XG4gICAgICAgICAgZGlkV2FybkludmFsaWRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgd2FybmluZyQxKGZhbHNlLCAnT25seSBzdHJpbmdzIGFuZCBudW1iZXJzIGFyZSBzdXBwb3J0ZWQgYXMgPG9wdGlvbj4gY2hpbGRyZW4uJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFRPRE86IFJlbW92ZSBzdXBwb3J0IGZvciBgc2VsZWN0ZWRgIGluIDxvcHRpb24+LlxuICAgIGlmIChwcm9wcy5zZWxlY3RlZCAhPSBudWxsICYmICFkaWRXYXJuU2VsZWN0ZWRTZXRPbk9wdGlvbikge1xuICAgICAgd2FybmluZyQxKGZhbHNlLCAnVXNlIHRoZSBgZGVmYXVsdFZhbHVlYCBvciBgdmFsdWVgIHByb3BzIG9uIDxzZWxlY3Q+IGluc3RlYWQgb2YgJyArICdzZXR0aW5nIGBzZWxlY3RlZGAgb24gPG9wdGlvbj4uJyk7XG4gICAgICBkaWRXYXJuU2VsZWN0ZWRTZXRPbk9wdGlvbiA9IHRydWU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHBvc3RNb3VudFdyYXBwZXIkMShlbGVtZW50LCBwcm9wcykge1xuICAvLyB2YWx1ZT1cIlwiIHNob3VsZCBtYWtlIGEgdmFsdWUgYXR0cmlidXRlICgjNjIxOSlcbiAgaWYgKHByb3BzLnZhbHVlICE9IG51bGwpIHtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgndmFsdWUnLCB0b1N0cmluZyhnZXRUb1N0cmluZ1ZhbHVlKHByb3BzLnZhbHVlKSkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEhvc3RQcm9wcyQxKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBob3N0UHJvcHMgPSBfYXNzaWduKHsgY2hpbGRyZW46IHVuZGVmaW5lZCB9LCBwcm9wcyk7XG4gIHZhciBjb250ZW50ID0gZmxhdHRlbkNoaWxkcmVuKHByb3BzLmNoaWxkcmVuKTtcblxuICBpZiAoY29udGVudCkge1xuICAgIGhvc3RQcm9wcy5jaGlsZHJlbiA9IGNvbnRlbnQ7XG4gIH1cblxuICByZXR1cm4gaG9zdFByb3BzO1xufVxuXG4vLyBUT0RPOiBkaXJlY3QgaW1wb3J0cyBsaWtlIHNvbWUtcGFja2FnZS9zcmMvKiBhcmUgYmFkLiBGaXggbWUuXG52YXIgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDEgPSB2b2lkIDA7XG5cbntcbiAgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDEgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkge1xuICB2YXIgb3duZXJOYW1lID0gZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKTtcbiAgaWYgKG93bmVyTmFtZSkge1xuICAgIHJldHVybiAnXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBvd25lck5hbWUgKyAnYC4nO1xuICB9XG4gIHJldHVybiAnJztcbn1cblxudmFyIHZhbHVlUHJvcE5hbWVzID0gWyd2YWx1ZScsICdkZWZhdWx0VmFsdWUnXTtcblxuLyoqXG4gKiBWYWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBgdmFsdWVgIGFuZCBgZGVmYXVsdFZhbHVlYC5cbiAqL1xuZnVuY3Rpb24gY2hlY2tTZWxlY3RQcm9wVHlwZXMocHJvcHMpIHtcbiAgUmVhY3RDb250cm9sbGVkVmFsdWVQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoJ3NlbGVjdCcsIHByb3BzKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlUHJvcE5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHByb3BOYW1lID0gdmFsdWVQcm9wTmFtZXNbaV07XG4gICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KHByb3BzW3Byb3BOYW1lXSk7XG4gICAgaWYgKHByb3BzLm11bHRpcGxlICYmICFpc0FycmF5KSB7XG4gICAgICB3YXJuaW5nJDEoZmFsc2UsICdUaGUgYCVzYCBwcm9wIHN1cHBsaWVkIHRvIDxzZWxlY3Q+IG11c3QgYmUgYW4gYXJyYXkgaWYgJyArICdgbXVsdGlwbGVgIGlzIHRydWUuJXMnLCBwcm9wTmFtZSwgZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkpO1xuICAgIH0gZWxzZSBpZiAoIXByb3BzLm11bHRpcGxlICYmIGlzQXJyYXkpIHtcbiAgICAgIHdhcm5pbmckMShmYWxzZSwgJ1RoZSBgJXNgIHByb3Agc3VwcGxpZWQgdG8gPHNlbGVjdD4gbXVzdCBiZSBhIHNjYWxhciAnICsgJ3ZhbHVlIGlmIGBtdWx0aXBsZWAgaXMgZmFsc2UuJXMnLCBwcm9wTmFtZSwgZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVPcHRpb25zKG5vZGUsIG11bHRpcGxlLCBwcm9wVmFsdWUsIHNldERlZmF1bHRTZWxlY3RlZCkge1xuICB2YXIgb3B0aW9ucyA9IG5vZGUub3B0aW9ucztcblxuICBpZiAobXVsdGlwbGUpIHtcbiAgICB2YXIgc2VsZWN0ZWRWYWx1ZXMgPSBwcm9wVmFsdWU7XG4gICAgdmFyIHNlbGVjdGVkVmFsdWUgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGVjdGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBQcmVmaXggdG8gYXZvaWQgY2hhb3Mgd2l0aCBzcGVjaWFsIGtleXMuXG4gICAgICBzZWxlY3RlZFZhbHVlWyckJyArIHNlbGVjdGVkVmFsdWVzW2ldXSA9IHRydWU7XG4gICAgfVxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBvcHRpb25zLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIHNlbGVjdGVkID0gc2VsZWN0ZWRWYWx1ZS5oYXNPd25Qcm9wZXJ0eSgnJCcgKyBvcHRpb25zW19pXS52YWx1ZSk7XG4gICAgICBpZiAob3B0aW9uc1tfaV0uc2VsZWN0ZWQgIT09IHNlbGVjdGVkKSB7XG4gICAgICAgIG9wdGlvbnNbX2ldLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgICB9XG4gICAgICBpZiAoc2VsZWN0ZWQgJiYgc2V0RGVmYXVsdFNlbGVjdGVkKSB7XG4gICAgICAgIG9wdGlvbnNbX2ldLmRlZmF1bHRTZWxlY3RlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIERvIG5vdCBzZXQgYHNlbGVjdC52YWx1ZWAgYXMgZXhhY3QgYmVoYXZpb3IgaXNuJ3QgY29uc2lzdGVudCBhY3Jvc3MgYWxsXG4gICAgLy8gYnJvd3NlcnMgZm9yIGFsbCBjYXNlcy5cbiAgICB2YXIgX3NlbGVjdGVkVmFsdWUgPSB0b1N0cmluZyhnZXRUb1N0cmluZ1ZhbHVlKHByb3BWYWx1ZSkpO1xuICAgIHZhciBkZWZhdWx0U2VsZWN0ZWQgPSBudWxsO1xuICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IG9wdGlvbnMubGVuZ3RoOyBfaTIrKykge1xuICAgICAgaWYgKG9wdGlvbnNbX2kyXS52YWx1ZSA9PT0gX3NlbGVjdGVkVmFsdWUpIHtcbiAgICAgICAgb3B0aW9uc1tfaTJdLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHNldERlZmF1bHRTZWxlY3RlZCkge1xuICAgICAgICAgIG9wdGlvbnNbX2kyXS5kZWZhdWx0U2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChkZWZhdWx0U2VsZWN0ZWQgPT09IG51bGwgJiYgIW9wdGlvbnNbX2kyXS5kaXNhYmxlZCkge1xuICAgICAgICBkZWZhdWx0U2VsZWN0ZWQgPSBvcHRpb25zW19pMl07XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkZWZhdWx0U2VsZWN0ZWQgIT09IG51bGwpIHtcbiAgICAgIGRlZmF1bHRTZWxlY3RlZC5zZWxlY3RlZCA9IHRydWU7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogSW1wbGVtZW50cyBhIDxzZWxlY3Q+IGhvc3QgY29tcG9uZW50IHRoYXQgYWxsb3dzIG9wdGlvbmFsbHkgc2V0dGluZyB0aGVcbiAqIHByb3BzIGB2YWx1ZWAgYW5kIGBkZWZhdWx0VmFsdWVgLiBJZiBgbXVsdGlwbGVgIGlzIGZhbHNlLCB0aGUgcHJvcCBtdXN0IGJlIGFcbiAqIHN0cmluZ2FibGUuIElmIGBtdWx0aXBsZWAgaXMgdHJ1ZSwgdGhlIHByb3AgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdhYmxlcy5cbiAqXG4gKiBJZiBgdmFsdWVgIGlzIG5vdCBzdXBwbGllZCAob3IgbnVsbC91bmRlZmluZWQpLCB1c2VyIGFjdGlvbnMgdGhhdCBjaGFuZ2UgdGhlXG4gKiBzZWxlY3RlZCBvcHRpb24gd2lsbCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIHJlbmRlcmVkIG9wdGlvbnMuXG4gKlxuICogSWYgaXQgaXMgc3VwcGxpZWQgKGFuZCBub3QgbnVsbC91bmRlZmluZWQpLCB0aGUgcmVuZGVyZWQgb3B0aW9ucyB3aWxsIG5vdFxuICogdXBkYXRlIGluIHJlc3BvbnNlIHRvIHVzZXIgYWN0aW9ucy4gSW5zdGVhZCwgdGhlIGB2YWx1ZWAgcHJvcCBtdXN0IGNoYW5nZSBpblxuICogb3JkZXIgZm9yIHRoZSByZW5kZXJlZCBvcHRpb25zIHRvIHVwZGF0ZS5cbiAqXG4gKiBJZiBgZGVmYXVsdFZhbHVlYCBpcyBwcm92aWRlZCwgYW55IG9wdGlvbnMgd2l0aCB0aGUgc3VwcGxpZWQgdmFsdWVzIHdpbGwgYmVcbiAqIHNlbGVjdGVkLlxuICovXG5cbmZ1bmN0aW9uIGdldEhvc3RQcm9wcyQyKGVsZW1lbnQsIHByb3BzKSB7XG4gIHJldHVybiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgIHZhbHVlOiB1bmRlZmluZWRcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGluaXRXcmFwcGVyU3RhdGUkMShlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHtcbiAgICBjaGVja1NlbGVjdFByb3BUeXBlcyhwcm9wcyk7XG4gIH1cblxuICBub2RlLl93cmFwcGVyU3RhdGUgPSB7XG4gICAgd2FzTXVsdGlwbGU6ICEhcHJvcHMubXVsdGlwbGVcbiAgfTtcblxuICB7XG4gICAgaWYgKHByb3BzLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSQxKSB7XG4gICAgICB3YXJuaW5nJDEoZmFsc2UsICdTZWxlY3QgZWxlbWVudHMgbXVzdCBiZSBlaXRoZXIgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgJyArICcoc3BlY2lmeSBlaXRoZXIgdGhlIHZhbHVlIHByb3AsIG9yIHRoZSBkZWZhdWx0VmFsdWUgcHJvcCwgYnV0IG5vdCAnICsgJ2JvdGgpLiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIHNlbGVjdCAnICsgJ2VsZW1lbnQgYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogJyArICdodHRwczovL2ZiLm1lL3JlYWN0LWNvbnRyb2xsZWQtY29tcG9uZW50cycpO1xuICAgICAgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDEgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwb3N0TW91bnRXcmFwcGVyJDIoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICBub2RlLm11bHRpcGxlID0gISFwcm9wcy5tdWx0aXBsZTtcbiAgdmFyIHZhbHVlID0gcHJvcHMudmFsdWU7XG4gIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIXByb3BzLm11bHRpcGxlLCB2YWx1ZSwgZmFsc2UpO1xuICB9IGVsc2UgaWYgKHByb3BzLmRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7XG4gICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIXByb3BzLm11bHRpcGxlLCBwcm9wcy5kZWZhdWx0VmFsdWUsIHRydWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBvc3RVcGRhdGVXcmFwcGVyKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIHdhc011bHRpcGxlID0gbm9kZS5fd3JhcHBlclN0YXRlLndhc011bHRpcGxlO1xuICBub2RlLl93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGUgPSAhIXByb3BzLm11bHRpcGxlO1xuXG4gIHZhciB2YWx1ZSA9IHByb3BzLnZhbHVlO1xuICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgIHVwZGF0ZU9wdGlvbnMobm9kZSwgISFwcm9wcy5tdWx0aXBsZSwgdmFsdWUsIGZhbHNlKTtcbiAgfSBlbHNlIGlmICh3YXNNdWx0aXBsZSAhPT0gISFwcm9wcy5tdWx0aXBsZSkge1xuICAgIC8vIEZvciBzaW1wbGljaXR5LCByZWFwcGx5IGBkZWZhdWx0VmFsdWVgIGlmIGBtdWx0aXBsZWAgaXMgdG9nZ2xlZC5cbiAgICBpZiAocHJvcHMuZGVmYXVsdFZhbHVlICE9IG51bGwpIHtcbiAgICAgIHVwZGF0ZU9wdGlvbnMobm9kZSwgISFwcm9wcy5tdWx0aXBsZSwgcHJvcHMuZGVmYXVsdFZhbHVlLCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmV2ZXJ0IHRoZSBzZWxlY3QgYmFjayB0byBpdHMgZGVmYXVsdCB1bnNlbGVjdGVkIHN0YXRlLlxuICAgICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIXByb3BzLm11bHRpcGxlLCBwcm9wcy5tdWx0aXBsZSA/IFtdIDogJycsIGZhbHNlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZSQyKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIHZhbHVlID0gcHJvcHMudmFsdWU7XG5cbiAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICB1cGRhdGVPcHRpb25zKG5vZGUsICEhcHJvcHMubXVsdGlwbGUsIHZhbHVlLCBmYWxzZSk7XG4gIH1cbn1cblxudmFyIGRpZFdhcm5WYWxEZWZhdWx0VmFsID0gZmFsc2U7XG5cbi8qKlxuICogSW1wbGVtZW50cyBhIDx0ZXh0YXJlYT4gaG9zdCBjb21wb25lbnQgdGhhdCBhbGxvd3Mgc2V0dGluZyBgdmFsdWVgLCBhbmRcbiAqIGBkZWZhdWx0VmFsdWVgLiBUaGlzIGRpZmZlcnMgZnJvbSB0aGUgdHJhZGl0aW9uYWwgRE9NIEFQSSBiZWNhdXNlIHZhbHVlIGlzXG4gKiB1c3VhbGx5IHNldCBhcyBQQ0RBVEEgY2hpbGRyZW4uXG4gKlxuICogSWYgYHZhbHVlYCBpcyBub3Qgc3VwcGxpZWQgKG9yIG51bGwvdW5kZWZpbmVkKSwgdXNlciBhY3Rpb25zIHRoYXQgYWZmZWN0IHRoZVxuICogdmFsdWUgd2lsbCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuXG4gKlxuICogSWYgYHZhbHVlYCBpcyBzdXBwbGllZCAoYW5kIG5vdCBudWxsL3VuZGVmaW5lZCksIHRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGxcbiAqIG5vdCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuIEluc3RlYWQsIHRoZSBgdmFsdWVgIHByb3AgbXVzdCBjaGFuZ2UgaW5cbiAqIG9yZGVyIGZvciB0aGUgcmVuZGVyZWQgZWxlbWVudCB0byBiZSB1cGRhdGVkLlxuICpcbiAqIFRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGwgYmUgaW5pdGlhbGl6ZWQgd2l0aCBhbiBlbXB0eSB2YWx1ZSwgdGhlIHByb3BcbiAqIGBkZWZhdWx0VmFsdWVgIGlmIHNwZWNpZmllZCwgb3IgdGhlIGNoaWxkcmVuIGNvbnRlbnQgKGRlcHJlY2F0ZWQpLlxuICovXG5cbmZ1bmN0aW9uIGdldEhvc3RQcm9wcyQzKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgIShwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCA9PSBudWxsKSA/IGludmFyaWFudChmYWxzZSwgJ2BkYW5nZXJvdXNseVNldElubmVySFRNTGAgZG9lcyBub3QgbWFrZSBzZW5zZSBvbiA8dGV4dGFyZWE+LicpIDogdm9pZCAwO1xuXG4gIC8vIEFsd2F5cyBzZXQgY2hpbGRyZW4gdG8gdGhlIHNhbWUgdGhpbmcuIEluIElFOSwgdGhlIHNlbGVjdGlvbiByYW5nZSB3aWxsXG4gIC8vIGdldCByZXNldCBpZiBgdGV4dENvbnRlbnRgIGlzIG11dGF0ZWQuICBXZSBjb3VsZCBhZGQgYSBjaGVjayBpbiBzZXRUZXh0Q29udGVudFxuICAvLyB0byBvbmx5IHNldCB0aGUgdmFsdWUgaWYvd2hlbiB0aGUgdmFsdWUgZGlmZmVycyBmcm9tIHRoZSBub2RlIHZhbHVlICh3aGljaCB3b3VsZFxuICAvLyBjb21wbGV0ZWx5IHNvbHZlIHRoaXMgSUU5IGJ1ZyksIGJ1dCBTZWJhc3RpYW4rU29waGllIHNlZW1lZCB0byBsaWtlIHRoaXNcbiAgLy8gc29sdXRpb24uIFRoZSB2YWx1ZSBjYW4gYmUgYSBib29sZWFuIG9yIG9iamVjdCBzbyB0aGF0J3Mgd2h5IGl0J3MgZm9yY2VkXG4gIC8vIHRvIGJlIGEgc3RyaW5nLlxuICB2YXIgaG9zdFByb3BzID0gX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgIGRlZmF1bHRWYWx1ZTogdW5kZWZpbmVkLFxuICAgIGNoaWxkcmVuOiB0b1N0cmluZyhub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlKVxuICB9KTtcblxuICByZXR1cm4gaG9zdFByb3BzO1xufVxuXG5mdW5jdGlvbiBpbml0V3JhcHBlclN0YXRlJDIoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB7XG4gICAgUmVhY3RDb250cm9sbGVkVmFsdWVQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoJ3RleHRhcmVhJywgcHJvcHMpO1xuICAgIGlmIChwcm9wcy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmICFkaWRXYXJuVmFsRGVmYXVsdFZhbCkge1xuICAgICAgd2FybmluZyQxKGZhbHNlLCAnJXMgY29udGFpbnMgYSB0ZXh0YXJlYSB3aXRoIGJvdGggdmFsdWUgYW5kIGRlZmF1bHRWYWx1ZSBwcm9wcy4gJyArICdUZXh0YXJlYSBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAnICsgJyhzcGVjaWZ5IGVpdGhlciB0aGUgdmFsdWUgcHJvcCwgb3IgdGhlIGRlZmF1bHRWYWx1ZSBwcm9wLCBidXQgbm90ICcgKyAnYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgdGV4dGFyZWEgJyArICdhbmQgcmVtb3ZlIG9uZSBvZiB0aGVzZSBwcm9wcy4gTW9yZSBpbmZvOiAnICsgJ2h0dHBzOi8vZmIubWUvcmVhY3QtY29udHJvbGxlZC1jb21wb25lbnRzJywgZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKSB8fCAnQSBjb21wb25lbnQnKTtcbiAgICAgIGRpZFdhcm5WYWxEZWZhdWx0VmFsID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB2YXIgaW5pdGlhbFZhbHVlID0gcHJvcHMudmFsdWU7XG5cbiAgLy8gT25seSBib3RoZXIgZmV0Y2hpbmcgZGVmYXVsdCB2YWx1ZSBpZiB3ZSdyZSBnb2luZyB0byB1c2UgaXRcbiAgaWYgKGluaXRpYWxWYWx1ZSA9PSBudWxsKSB7XG4gICAgdmFyIGRlZmF1bHRWYWx1ZSA9IHByb3BzLmRlZmF1bHRWYWx1ZTtcbiAgICAvLyBUT0RPICh5dW5nc3RlcnMpOiBSZW1vdmUgc3VwcG9ydCBmb3IgY2hpbGRyZW4gY29udGVudCBpbiA8dGV4dGFyZWE+LlxuICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuO1xuICAgIGlmIChjaGlsZHJlbiAhPSBudWxsKSB7XG4gICAgICB7XG4gICAgICAgIHdhcm5pbmckMShmYWxzZSwgJ1VzZSB0aGUgYGRlZmF1bHRWYWx1ZWAgb3IgYHZhbHVlYCBwcm9wcyBpbnN0ZWFkIG9mIHNldHRpbmcgJyArICdjaGlsZHJlbiBvbiA8dGV4dGFyZWE+LicpO1xuICAgICAgfVxuICAgICAgIShkZWZhdWx0VmFsdWUgPT0gbnVsbCkgPyBpbnZhcmlhbnQoZmFsc2UsICdJZiB5b3Ugc3VwcGx5IGBkZWZhdWx0VmFsdWVgIG9uIGEgPHRleHRhcmVhPiwgZG8gbm90IHBhc3MgY2hpbGRyZW4uJykgOiB2b2lkIDA7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgIShjaGlsZHJlbi5sZW5ndGggPD0gMSkgPyBpbnZhcmlhbnQoZmFsc2UsICc8dGV4dGFyZWE+IGNhbiBvbmx5IGhhdmUgYXQgbW9zdCBvbmUgY2hpbGQuJykgOiB2b2lkIDA7XG4gICAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW5bMF07XG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHRWYWx1ZSA9IGNoaWxkcmVuO1xuICAgIH1cbiAgICBpZiAoZGVmYXVsdFZhbHVlID09IG51bGwpIHtcbiAgICAgIGRlZmF1bHRWYWx1ZSA9ICcnO1xuICAgIH1cbiAgICBpbml0aWFsVmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICBub2RlLl93cmFwcGVyU3RhdGUgPSB7XG4gICAgaW5pdGlhbFZhbHVlOiBnZXRUb1N0cmluZ1ZhbHVlKGluaXRpYWxWYWx1ZSlcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlV3JhcHBlciQxKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIHZhbHVlID0gZ2V0VG9TdHJpbmdWYWx1ZShwcm9wcy52YWx1ZSk7XG4gIHZhciBkZWZhdWx0VmFsdWUgPSBnZXRUb1N0cmluZ1ZhbHVlKHByb3BzLmRlZmF1bHRWYWx1ZSk7XG4gIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgLy8gQ2FzdCBgdmFsdWVgIHRvIGEgc3RyaW5nIHRvIGVuc3VyZSB0aGUgdmFsdWUgaXMgc2V0IGNvcnJlY3RseS4gV2hpbGVcbiAgICAvLyBicm93c2VycyB0eXBpY2FsbHkgZG8gdGhpcyBhcyBuZWNlc3NhcnksIGpzZG9tIGRvZXNuJ3QuXG4gICAgdmFyIG5ld1ZhbHVlID0gdG9TdHJpbmcodmFsdWUpO1xuICAgIC8vIFRvIGF2b2lkIHNpZGUgZWZmZWN0cyAoc3VjaCBhcyBsb3NpbmcgdGV4dCBzZWxlY3Rpb24pLCBvbmx5IHNldCB2YWx1ZSBpZiBjaGFuZ2VkXG4gICAgaWYgKG5ld1ZhbHVlICE9PSBub2RlLnZhbHVlKSB7XG4gICAgICBub2RlLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgfVxuICAgIGlmIChwcm9wcy5kZWZhdWx0VmFsdWUgPT0gbnVsbCAmJiBub2RlLmRlZmF1bHRWYWx1ZSAhPT0gbmV3VmFsdWUpIHtcbiAgICAgIG5vZGUuZGVmYXVsdFZhbHVlID0gbmV3VmFsdWU7XG4gICAgfVxuICB9XG4gIGlmIChkZWZhdWx0VmFsdWUgIT0gbnVsbCkge1xuICAgIG5vZGUuZGVmYXVsdFZhbHVlID0gdG9TdHJpbmcoZGVmYXVsdFZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb3N0TW91bnRXcmFwcGVyJDMoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICAvLyBUaGlzIGlzIGluIHBvc3RNb3VudCBiZWNhdXNlIHdlIG5lZWQgYWNjZXNzIHRvIHRoZSBET00gbm9kZSwgd2hpY2ggaXMgbm90XG4gIC8vIGF2YWlsYWJsZSB1bnRpbCBhZnRlciB0aGUgY29tcG9uZW50IGhhcyBtb3VudGVkLlxuICB2YXIgdGV4dENvbnRlbnQgPSBub2RlLnRleHRDb250ZW50O1xuXG4gIC8vIE9ubHkgc2V0IG5vZGUudmFsdWUgaWYgdGV4dENvbnRlbnQgaXMgZXF1YWwgdG8gdGhlIGV4cGVjdGVkXG4gIC8vIGluaXRpYWwgdmFsdWUuIEluIElFMTAvSUUxMSB0aGVyZSBpcyBhIGJ1ZyB3aGVyZSB0aGUgcGxhY2Vob2xkZXIgYXR0cmlidXRlXG4gIC8vIHdpbGwgcG9wdWxhdGUgdGV4dENvbnRlbnQgYXMgd2VsbC5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubWljcm9zb2Z0LmNvbS9taWNyb3NvZnQtZWRnZS9wbGF0Zm9ybS9pc3N1ZXMvMTAxNTI1L1xuICBpZiAodGV4dENvbnRlbnQgPT09IG5vZGUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUpIHtcbiAgICBub2RlLnZhbHVlID0gdGV4dENvbnRlbnQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZSQzKGVsZW1lbnQsIHByb3BzKSB7XG4gIC8vIERPTSBjb21wb25lbnQgaXMgc3RpbGwgbW91bnRlZDsgdXBkYXRlXG4gIHVwZGF0ZVdyYXBwZXIkMShlbGVtZW50LCBwcm9wcyk7XG59XG5cbnZhciBIVE1MX05BTUVTUEFDRSQxID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnO1xudmFyIE1BVEhfTkFNRVNQQUNFID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwnO1xudmFyIFNWR19OQU1FU1BBQ0UgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnO1xuXG52YXIgTmFtZXNwYWNlcyA9IHtcbiAgaHRtbDogSFRNTF9OQU1FU1BBQ0UkMSxcbiAgbWF0aG1sOiBNQVRIX05BTUVTUEFDRSxcbiAgc3ZnOiBTVkdfTkFNRVNQQUNFXG59O1xuXG4vLyBBc3N1bWVzIHRoZXJlIGlzIG5vIHBhcmVudCBuYW1lc3BhY2UuXG5mdW5jdGlvbiBnZXRJbnRyaW5zaWNOYW1lc3BhY2UodHlwZSkge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdzdmcnOlxuICAgICAgcmV0dXJuIFNWR19OQU1FU1BBQ0U7XG4gICAgY2FzZSAnbWF0aCc6XG4gICAgICByZXR1cm4gTUFUSF9OQU1FU1BBQ0U7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBIVE1MX05BTUVTUEFDRSQxO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldENoaWxkTmFtZXNwYWNlKHBhcmVudE5hbWVzcGFjZSwgdHlwZSkge1xuICBpZiAocGFyZW50TmFtZXNwYWNlID09IG51bGwgfHwgcGFyZW50TmFtZXNwYWNlID09PSBIVE1MX05BTUVTUEFDRSQxKSB7XG4gICAgLy8gTm8gKG9yIGRlZmF1bHQpIHBhcmVudCBuYW1lc3BhY2U6IHBvdGVudGlhbCBlbnRyeSBwb2ludC5cbiAgICByZXR1cm4gZ2V0SW50cmluc2ljTmFtZXNwYWNlKHR5cGUpO1xuICB9XG4gIGlmIChwYXJlbnROYW1lc3BhY2UgPT09IFNWR19OQU1FU1BBQ0UgJiYgdHlwZSA9PT0gJ2ZvcmVpZ25PYmplY3QnKSB7XG4gICAgLy8gV2UncmUgbGVhdmluZyBTVkcuXG4gICAgcmV0dXJuIEhUTUxfTkFNRVNQQUNFJDE7XG4gIH1cbiAgLy8gQnkgZGVmYXVsdCwgcGFzcyBuYW1lc3BhY2UgYmVsb3cuXG4gIHJldHVybiBwYXJlbnROYW1lc3BhY2U7XG59XG5cbi8qIGdsb2JhbHMgTVNBcHAgKi9cblxuLyoqXG4gKiBDcmVhdGUgYSBmdW5jdGlvbiB3aGljaCBoYXMgJ3Vuc2FmZScgcHJpdmlsZWdlcyAocmVxdWlyZWQgYnkgd2luZG93czggYXBwcylcbiAqL1xudmFyIGNyZWF0ZU1pY3Jvc29mdFVuc2FmZUxvY2FsRnVuY3Rpb24gPSBmdW5jdGlvbiAoZnVuYykge1xuICBpZiAodHlwZW9mIE1TQXBwICE9PSAndW5kZWZpbmVkJyAmJiBNU0FwcC5leGVjVW5zYWZlTG9jYWxGdW5jdGlvbikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoYXJnMCwgYXJnMSwgYXJnMiwgYXJnMykge1xuICAgICAgTVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZnVuYyhhcmcwLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZ1bmM7XG4gIH1cbn07XG5cbi8vIFNWRyB0ZW1wIGNvbnRhaW5lciBmb3IgSUUgbGFja2luZyBpbm5lckhUTUxcbnZhciByZXVzYWJsZVNWR0NvbnRhaW5lciA9IHZvaWQgMDtcblxuLyoqXG4gKiBTZXQgdGhlIGlubmVySFRNTCBwcm9wZXJ0eSBvZiBhIG5vZGVcbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sXG4gKiBAaW50ZXJuYWxcbiAqL1xudmFyIHNldElubmVySFRNTCA9IGNyZWF0ZU1pY3Jvc29mdFVuc2FmZUxvY2FsRnVuY3Rpb24oZnVuY3Rpb24gKG5vZGUsIGh0bWwpIHtcbiAgLy8gSUUgZG9lcyBub3QgaGF2ZSBpbm5lckhUTUwgZm9yIFNWRyBub2Rlcywgc28gaW5zdGVhZCB3ZSBpbmplY3QgdGhlXG4gIC8vIG5ldyBtYXJrdXAgaW4gYSB0ZW1wIG5vZGUgYW5kIHRoZW4gbW92ZSB0aGUgY2hpbGQgbm9kZXMgYWNyb3NzIGludG9cbiAgLy8gdGhlIHRhcmdldCBub2RlXG5cbiAgaWYgKG5vZGUubmFtZXNwYWNlVVJJID09PSBOYW1lc3BhY2VzLnN2ZyAmJiAhKCdpbm5lckhUTUwnIGluIG5vZGUpKSB7XG4gICAgcmV1c2FibGVTVkdDb250YWluZXIgPSByZXVzYWJsZVNWR0NvbnRhaW5lciB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICByZXVzYWJsZVNWR0NvbnRhaW5lci5pbm5lckhUTUwgPSAnPHN2Zz4nICsgaHRtbCArICc8L3N2Zz4nO1xuICAgIHZhciBzdmdOb2RlID0gcmV1c2FibGVTVkdDb250YWluZXIuZmlyc3RDaGlsZDtcbiAgICB3aGlsZSAobm9kZS5maXJzdENoaWxkKSB7XG4gICAgICBub2RlLnJlbW92ZUNoaWxkKG5vZGUuZmlyc3RDaGlsZCk7XG4gICAgfVxuICAgIHdoaWxlIChzdmdOb2RlLmZpcnN0Q2hpbGQpIHtcbiAgICAgIG5vZGUuYXBwZW5kQ2hpbGQoc3ZnTm9kZS5maXJzdENoaWxkKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbm9kZS5pbm5lckhUTUwgPSBodG1sO1xuICB9XG59KTtcblxuLyoqXG4gKiBTZXQgdGhlIHRleHRDb250ZW50IHByb3BlcnR5IG9mIGEgbm9kZS4gRm9yIHRleHQgdXBkYXRlcywgaXQncyBmYXN0ZXJcbiAqIHRvIHNldCB0aGUgYG5vZGVWYWx1ZWAgb2YgdGhlIFRleHQgbm9kZSBkaXJlY3RseSBpbnN0ZWFkIG9mIHVzaW5nXG4gKiBgLnRleHRDb250ZW50YCB3aGljaCB3aWxsIHJlbW92ZSB0aGUgZXhpc3Rpbmcgbm9kZSBhbmQgY3JlYXRlIGEgbmV3IG9uZS5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAaW50ZXJuYWxcbiAqL1xudmFyIHNldFRleHRDb250ZW50ID0gZnVuY3Rpb24gKG5vZGUsIHRleHQpIHtcbiAgaWYgKHRleHQpIHtcbiAgICB2YXIgZmlyc3RDaGlsZCA9IG5vZGUuZmlyc3RDaGlsZDtcblxuICAgIGlmIChmaXJzdENoaWxkICYmIGZpcnN0Q2hpbGQgPT09IG5vZGUubGFzdENoaWxkICYmIGZpcnN0Q2hpbGQubm9kZVR5cGUgPT09IFRFWFRfTk9ERSkge1xuICAgICAgZmlyc3RDaGlsZC5ub2RlVmFsdWUgPSB0ZXh0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICBub2RlLnRleHRDb250ZW50ID0gdGV4dDtcbn07XG5cbi8vIExpc3QgZGVyaXZlZCBmcm9tIEdlY2tvIHNvdXJjZSBjb2RlOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvZ2Vja28tZGV2L2Jsb2IvNGU2MzhlZmM3MS9sYXlvdXQvc3R5bGUvdGVzdC9wcm9wZXJ0eV9kYXRhYmFzZS5qc1xudmFyIHNob3J0aGFuZFRvTG9uZ2hhbmQgPSB7XG4gIGFuaW1hdGlvbjogWydhbmltYXRpb25EZWxheScsICdhbmltYXRpb25EaXJlY3Rpb24nLCAnYW5pbWF0aW9uRHVyYXRpb24nLCAnYW5pbWF0aW9uRmlsbE1vZGUnLCAnYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQnLCAnYW5pbWF0aW9uTmFtZScsICdhbmltYXRpb25QbGF5U3RhdGUnLCAnYW5pbWF0aW9uVGltaW5nRnVuY3Rpb24nXSxcbiAgYmFja2dyb3VuZDogWydiYWNrZ3JvdW5kQXR0YWNobWVudCcsICdiYWNrZ3JvdW5kQ2xpcCcsICdiYWNrZ3JvdW5kQ29sb3InLCAnYmFja2dyb3VuZEltYWdlJywgJ2JhY2tncm91bmRPcmlnaW4nLCAnYmFja2dyb3VuZFBvc2l0aW9uWCcsICdiYWNrZ3JvdW5kUG9zaXRpb25ZJywgJ2JhY2tncm91bmRSZXBlYXQnLCAnYmFja2dyb3VuZFNpemUnXSxcbiAgYmFja2dyb3VuZFBvc2l0aW9uOiBbJ2JhY2tncm91bmRQb3NpdGlvblgnLCAnYmFja2dyb3VuZFBvc2l0aW9uWSddLFxuICBib3JkZXI6IFsnYm9yZGVyQm90dG9tQ29sb3InLCAnYm9yZGVyQm90dG9tU3R5bGUnLCAnYm9yZGVyQm90dG9tV2lkdGgnLCAnYm9yZGVySW1hZ2VPdXRzZXQnLCAnYm9yZGVySW1hZ2VSZXBlYXQnLCAnYm9yZGVySW1hZ2VTbGljZScsICdib3JkZXJJbWFnZVNvdXJjZScsICdib3JkZXJJbWFnZVdpZHRoJywgJ2JvcmRlckxlZnRDb2xvcicsICdib3JkZXJMZWZ0U3R5bGUnLCAnYm9yZGVyTGVmdFdpZHRoJywgJ2JvcmRlclJpZ2h0Q29sb3InLCAnYm9yZGVyUmlnaHRTdHlsZScsICdib3JkZXJSaWdodFdpZHRoJywgJ2JvcmRlclRvcENvbG9yJywgJ2JvcmRlclRvcFN0eWxlJywgJ2JvcmRlclRvcFdpZHRoJ10sXG4gIGJvcmRlckJsb2NrRW5kOiBbJ2JvcmRlckJsb2NrRW5kQ29sb3InLCAnYm9yZGVyQmxvY2tFbmRTdHlsZScsICdib3JkZXJCbG9ja0VuZFdpZHRoJ10sXG4gIGJvcmRlckJsb2NrU3RhcnQ6IFsnYm9yZGVyQmxvY2tTdGFydENvbG9yJywgJ2JvcmRlckJsb2NrU3RhcnRTdHlsZScsICdib3JkZXJCbG9ja1N0YXJ0V2lkdGgnXSxcbiAgYm9yZGVyQm90dG9tOiBbJ2JvcmRlckJvdHRvbUNvbG9yJywgJ2JvcmRlckJvdHRvbVN0eWxlJywgJ2JvcmRlckJvdHRvbVdpZHRoJ10sXG4gIGJvcmRlckNvbG9yOiBbJ2JvcmRlckJvdHRvbUNvbG9yJywgJ2JvcmRlckxlZnRDb2xvcicsICdib3JkZXJSaWdodENvbG9yJywgJ2JvcmRlclRvcENvbG9yJ10sXG4gIGJvcmRlckltYWdlOiBbJ2JvcmRlckltYWdlT3V0c2V0JywgJ2JvcmRlckltYWdlUmVwZWF0JywgJ2JvcmRlckltYWdlU2xpY2UnLCAnYm9yZGVySW1hZ2VTb3VyY2UnLCAnYm9yZGVySW1hZ2VXaWR0aCddLFxuICBib3JkZXJJbmxpbmVFbmQ6IFsnYm9yZGVySW5saW5lRW5kQ29sb3InLCAnYm9yZGVySW5saW5lRW5kU3R5bGUnLCAnYm9yZGVySW5saW5lRW5kV2lkdGgnXSxcbiAgYm9yZGVySW5saW5lU3RhcnQ6IFsnYm9yZGVySW5saW5lU3RhcnRDb2xvcicsICdib3JkZXJJbmxpbmVTdGFydFN0eWxlJywgJ2JvcmRlcklubGluZVN0YXJ0V2lkdGgnXSxcbiAgYm9yZGVyTGVmdDogWydib3JkZXJMZWZ0Q29sb3InLCAnYm9yZGVyTGVmdFN0eWxlJywgJ2JvcmRlckxlZnRXaWR0aCddLFxuICBib3JkZXJSYWRpdXM6IFsnYm9yZGVyQm90dG9tTGVmdFJhZGl1cycsICdib3JkZXJCb3R0b21SaWdodFJhZGl1cycsICdib3JkZXJUb3BMZWZ0UmFkaXVzJywgJ2JvcmRlclRvcFJpZ2h0UmFkaXVzJ10sXG4gIGJvcmRlclJpZ2h0OiBbJ2JvcmRlclJpZ2h0Q29sb3InLCAnYm9yZGVyUmlnaHRTdHlsZScsICdib3JkZXJSaWdodFdpZHRoJ10sXG4gIGJvcmRlclN0eWxlOiBbJ2JvcmRlckJvdHRvbVN0eWxlJywgJ2JvcmRlckxlZnRTdHlsZScsICdib3JkZXJSaWdodFN0eWxlJywgJ2JvcmRlclRvcFN0eWxlJ10sXG4gIGJvcmRlclRvcDogWydib3JkZXJUb3BDb2xvcicsICdib3JkZXJUb3BTdHlsZScsICdib3JkZXJUb3BXaWR0aCddLFxuICBib3JkZXJXaWR0aDogWydib3JkZXJCb3R0b21XaWR0aCcsICdib3JkZXJMZWZ0V2lkdGgnLCAnYm9yZGVyUmlnaHRXaWR0aCcsICdib3JkZXJUb3BXaWR0aCddLFxuICBjb2x1bW5SdWxlOiBbJ2NvbHVtblJ1bGVDb2xvcicsICdjb2x1bW5SdWxlU3R5bGUnLCAnY29sdW1uUnVsZVdpZHRoJ10sXG4gIGNvbHVtbnM6IFsnY29sdW1uQ291bnQnLCAnY29sdW1uV2lkdGgnXSxcbiAgZmxleDogWydmbGV4QmFzaXMnLCAnZmxleEdyb3cnLCAnZmxleFNocmluayddLFxuICBmbGV4RmxvdzogWydmbGV4RGlyZWN0aW9uJywgJ2ZsZXhXcmFwJ10sXG4gIGZvbnQ6IFsnZm9udEZhbWlseScsICdmb250RmVhdHVyZVNldHRpbmdzJywgJ2ZvbnRLZXJuaW5nJywgJ2ZvbnRMYW5ndWFnZU92ZXJyaWRlJywgJ2ZvbnRTaXplJywgJ2ZvbnRTaXplQWRqdXN0JywgJ2ZvbnRTdHJldGNoJywgJ2ZvbnRTdHlsZScsICdmb250VmFyaWFudCcsICdmb250VmFyaWFudEFsdGVybmF0ZXMnLCAnZm9udFZhcmlhbnRDYXBzJywgJ2ZvbnRWYXJpYW50RWFzdEFzaWFuJywgJ2ZvbnRWYXJpYW50TGlnYXR1cmVzJywgJ2ZvbnRWYXJpYW50TnVtZXJpYycsICdmb250VmFyaWFudFBvc2l0aW9uJywgJ2ZvbnRXZWlnaHQnLCAnbGluZUhlaWdodCddLFxuICBmb250VmFyaWFudDogWydmb250VmFyaWFudEFsdGVybmF0ZXMnLCAnZm9udFZhcmlhbnRDYXBzJywgJ2ZvbnRWYXJpYW50RWFzdEFzaWFuJywgJ2ZvbnRWYXJpYW50TGlnYXR1cmVzJywgJ2ZvbnRWYXJpYW50TnVtZXJpYycsICdmb250VmFyaWFudFBvc2l0aW9uJ10sXG4gIGdhcDogWydjb2x1bW5HYXAnLCAncm93R2FwJ10sXG4gIGdyaWQ6IFsnZ3JpZEF1dG9Db2x1bW5zJywgJ2dyaWRBdXRvRmxvdycsICdncmlkQXV0b1Jvd3MnLCAnZ3JpZFRlbXBsYXRlQXJlYXMnLCAnZ3JpZFRlbXBsYXRlQ29sdW1ucycsICdncmlkVGVtcGxhdGVSb3dzJ10sXG4gIGdyaWRBcmVhOiBbJ2dyaWRDb2x1bW5FbmQnLCAnZ3JpZENvbHVtblN0YXJ0JywgJ2dyaWRSb3dFbmQnLCAnZ3JpZFJvd1N0YXJ0J10sXG4gIGdyaWRDb2x1bW46IFsnZ3JpZENvbHVtbkVuZCcsICdncmlkQ29sdW1uU3RhcnQnXSxcbiAgZ3JpZENvbHVtbkdhcDogWydjb2x1bW5HYXAnXSxcbiAgZ3JpZEdhcDogWydjb2x1bW5HYXAnLCAncm93R2FwJ10sXG4gIGdyaWRSb3c6IFsnZ3JpZFJvd0VuZCcsICdncmlkUm93U3RhcnQnXSxcbiAgZ3JpZFJvd0dhcDogWydyb3dHYXAnXSxcbiAgZ3JpZFRlbXBsYXRlOiBbJ2dyaWRUZW1wbGF0ZUFyZWFzJywgJ2dyaWRUZW1wbGF0ZUNvbHVtbnMnLCAnZ3JpZFRlbXBsYXRlUm93cyddLFxuICBsaXN0U3R5bGU6IFsnbGlzdFN0eWxlSW1hZ2UnLCAnbGlzdFN0eWxlUG9zaXRpb24nLCAnbGlzdFN0eWxlVHlwZSddLFxuICBtYXJnaW46IFsnbWFyZ2luQm90dG9tJywgJ21hcmdpbkxlZnQnLCAnbWFyZ2luUmlnaHQnLCAnbWFyZ2luVG9wJ10sXG4gIG1hcmtlcjogWydtYXJrZXJFbmQnLCAnbWFya2VyTWlkJywgJ21hcmtlclN0YXJ0J10sXG4gIG1hc2s6IFsnbWFza0NsaXAnLCAnbWFza0NvbXBvc2l0ZScsICdtYXNrSW1hZ2UnLCAnbWFza01vZGUnLCAnbWFza09yaWdpbicsICdtYXNrUG9zaXRpb25YJywgJ21hc2tQb3NpdGlvblknLCAnbWFza1JlcGVhdCcsICdtYXNrU2l6ZSddLFxuICBtYXNrUG9zaXRpb246IFsnbWFza1Bvc2l0aW9uWCcsICdtYXNrUG9zaXRpb25ZJ10sXG4gIG91dGxpbmU6IFsnb3V0bGluZUNvbG9yJywgJ291dGxpbmVTdHlsZScsICdvdXRsaW5lV2lkdGgnXSxcbiAgb3ZlcmZsb3c6IFsnb3ZlcmZsb3dYJywgJ292ZXJmbG93WSddLFxuICBwYWRkaW5nOiBbJ3BhZGRpbmdCb3R0b20nLCAncGFkZGluZ0xlZnQnLCAncGFkZGluZ1JpZ2h0JywgJ3BhZGRpbmdUb3AnXSxcbiAgcGxhY2VDb250ZW50OiBbJ2FsaWduQ29udGVudCcsICdqdXN0aWZ5Q29udGVudCddLFxuICBwbGFjZUl0ZW1zOiBbJ2FsaWduSXRlbXMnLCAnanVzdGlmeUl0ZW1zJ10sXG4gIHBsYWNlU2VsZjogWydhbGlnblNlbGYnLCAnanVzdGlmeVNlbGYnXSxcbiAgdGV4dERlY29yYXRpb246IFsndGV4dERlY29yYXRpb25Db2xvcicsICd0ZXh0RGVjb3JhdGlvbkxpbmUnLCAndGV4dERlY29yYXRpb25TdHlsZSddLFxuICB0ZXh0RW1waGFzaXM6IFsndGV4dEVtcGhhc2lzQ29sb3InLCAndGV4dEVtcGhhc2lzU3R5bGUnXSxcbiAgdHJhbnNpdGlvbjogWyd0cmFuc2l0aW9uRGVsYXknLCAndHJhbnNpdGlvbkR1cmF0aW9uJywgJ3RyYW5zaXRpb25Qcm9wZXJ0eScsICd0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24nXSxcbiAgd29yZFdyYXA6IFsnb3ZlcmZsb3dXcmFwJ11cbn07XG5cbi8qKlxuICogQ1NTIHByb3BlcnRpZXMgd2hpY2ggYWNjZXB0IG51bWJlcnMgYnV0IGFyZSBub3QgaW4gdW5pdHMgb2YgXCJweFwiLlxuICovXG52YXIgaXNVbml0bGVzc051bWJlciA9IHtcbiAgYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6IHRydWUsXG4gIGJvcmRlckltYWdlT3V0c2V0OiB0cnVlLFxuICBib3JkZXJJbWFnZVNsaWNlOiB0cnVlLFxuICBib3JkZXJJbWFnZVdpZHRoOiB0cnVlLFxuICBib3hGbGV4OiB0cnVlLFxuICBib3hGbGV4R3JvdXA6IHRydWUsXG4gIGJveE9yZGluYWxHcm91cDogdHJ1ZSxcbiAgY29sdW1uQ291bnQ6IHRydWUsXG4gIGNvbHVtbnM6IHRydWUsXG4gIGZsZXg6IHRydWUsXG4gIGZsZXhHcm93OiB0cnVlLFxuICBmbGV4UG9zaXRpdmU6IHRydWUsXG4gIGZsZXhTaHJpbms6IHRydWUsXG4gIGZsZXhOZWdhdGl2ZTogdHJ1ZSxcbiAgZmxleE9yZGVyOiB0cnVlLFxuICBncmlkQXJlYTogdHJ1ZSxcbiAgZ3JpZFJvdzogdHJ1ZSxcbiAgZ3JpZFJvd0VuZDogdHJ1ZSxcbiAgZ3JpZFJvd1NwYW46IHRydWUsXG4gIGdyaWRSb3dTdGFydDogdHJ1ZSxcbiAgZ3JpZENvbHVtbjogdHJ1ZSxcbiAgZ3JpZENvbHVtbkVuZDogdHJ1ZSxcbiAgZ3JpZENvbHVtblNwYW46IHRydWUsXG4gIGdyaWRDb2x1bW5TdGFydDogdHJ1ZSxcbiAgZm9udFdlaWdodDogdHJ1ZSxcbiAgbGluZUNsYW1wOiB0cnVlLFxuICBsaW5lSGVpZ2h0OiB0cnVlLFxuICBvcGFjaXR5OiB0cnVlLFxuICBvcmRlcjogdHJ1ZSxcbiAgb3JwaGFuczogdHJ1ZSxcbiAgdGFiU2l6ZTogdHJ1ZSxcbiAgd2lkb3dzOiB0cnVlLFxuICB6SW5kZXg6IHRydWUsXG4gIHpvb206IHRydWUsXG5cbiAgLy8gU1ZHLXJlbGF0ZWQgcHJvcGVydGllc1xuICBmaWxsT3BhY2l0eTogdHJ1ZSxcbiAgZmxvb2RPcGFjaXR5OiB0cnVlLFxuICBzdG9wT3BhY2l0eTogdHJ1ZSxcbiAgc3Ryb2tlRGFzaGFycmF5OiB0cnVlLFxuICBzdHJva2VEYXNob2Zmc2V0OiB0cnVlLFxuICBzdHJva2VNaXRlcmxpbWl0OiB0cnVlLFxuICBzdHJva2VPcGFjaXR5OiB0cnVlLFxuICBzdHJva2VXaWR0aDogdHJ1ZVxufTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4IHZlbmRvci1zcGVjaWZpYyBwcmVmaXgsIGVnOiBXZWJraXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgc3R5bGUgbmFtZSwgZWc6IHRyYW5zaXRpb25EdXJhdGlvblxuICogQHJldHVybiB7c3RyaW5nfSBzdHlsZSBuYW1lIHByZWZpeGVkIHdpdGggYHByZWZpeGAsIHByb3Blcmx5IGNhbWVsQ2FzZWQsIGVnOlxuICogV2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uXG4gKi9cbmZ1bmN0aW9uIHByZWZpeEtleShwcmVmaXgsIGtleSkge1xuICByZXR1cm4gcHJlZml4ICsga2V5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsga2V5LnN1YnN0cmluZygxKTtcbn1cblxuLyoqXG4gKiBTdXBwb3J0IHN0eWxlIG5hbWVzIHRoYXQgbWF5IGNvbWUgcGFzc2VkIGluIHByZWZpeGVkIGJ5IGFkZGluZyBwZXJtdXRhdGlvbnNcbiAqIG9mIHZlbmRvciBwcmVmaXhlcy5cbiAqL1xudmFyIHByZWZpeGVzID0gWydXZWJraXQnLCAnbXMnLCAnTW96JywgJ08nXTtcblxuLy8gVXNpbmcgT2JqZWN0LmtleXMgaGVyZSwgb3IgZWxzZSB0aGUgdmFuaWxsYSBmb3ItaW4gbG9vcCBtYWtlcyBJRTggZ28gaW50byBhblxuLy8gaW5maW5pdGUgbG9vcCwgYmVjYXVzZSBpdCBpdGVyYXRlcyBvdmVyIHRoZSBuZXdseSBhZGRlZCBwcm9wcyB0b28uXG5PYmplY3Qua2V5cyhpc1VuaXRsZXNzTnVtYmVyKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gIHByZWZpeGVzLmZvckVhY2goZnVuY3Rpb24gKHByZWZpeCkge1xuICAgIGlzVW5pdGxlc3NOdW1iZXJbcHJlZml4S2V5KHByZWZpeCwgcHJvcCldID0gaXNVbml0bGVzc051bWJlcltwcm9wXTtcbiAgfSk7XG59KTtcblxuLyoqXG4gKiBDb252ZXJ0IGEgdmFsdWUgaW50byB0aGUgcHJvcGVyIGNzcyB3cml0YWJsZSB2YWx1ZS4gVGhlIHN0eWxlIG5hbWUgYG5hbWVgXG4gKiBzaG91bGQgYmUgbG9naWNhbCAobm8gaHlwaGVucyksIGFzIHNwZWNpZmllZFxuICogaW4gYENTU1Byb3BlcnR5LmlzVW5pdGxlc3NOdW1iZXJgLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIENTUyBwcm9wZXJ0eSBuYW1lIHN1Y2ggYXMgYHRvcE1hcmdpbmAuXG4gKiBAcGFyYW0geyp9IHZhbHVlIENTUyBwcm9wZXJ0eSB2YWx1ZSBzdWNoIGFzIGAxMHB4YC5cbiAqIEByZXR1cm4ge3N0cmluZ30gTm9ybWFsaXplZCBzdHlsZSB2YWx1ZSB3aXRoIGRpbWVuc2lvbnMgYXBwbGllZC5cbiAqL1xuZnVuY3Rpb24gZGFuZ2Vyb3VzU3R5bGVWYWx1ZShuYW1lLCB2YWx1ZSwgaXNDdXN0b21Qcm9wZXJ0eSkge1xuICAvLyBOb3RlIHRoYXQgd2UndmUgcmVtb3ZlZCBlc2NhcGVUZXh0Rm9yQnJvd3NlcigpIGNhbGxzIGhlcmUgc2luY2UgdGhlXG4gIC8vIHdob2xlIHN0cmluZyB3aWxsIGJlIGVzY2FwZWQgd2hlbiB0aGUgYXR0cmlidXRlIGlzIGluamVjdGVkIGludG9cbiAgLy8gdGhlIG1hcmt1cC4gSWYgeW91IHByb3ZpZGUgdW5zYWZlIHVzZXIgZGF0YSBoZXJlIHRoZXkgY2FuIGluamVjdFxuICAvLyBhcmJpdHJhcnkgQ1NTIHdoaWNoIG1heSBiZSBwcm9ibGVtYXRpYyAoSSBjb3VsZG4ndCByZXBybyB0aGlzKTpcbiAgLy8gaHR0cHM6Ly93d3cub3dhc3Aub3JnL2luZGV4LnBocC9YU1NfRmlsdGVyX0V2YXNpb25fQ2hlYXRfU2hlZXRcbiAgLy8gaHR0cDovL3d3dy50aGVzcGFubmVyLmNvLnVrLzIwMDcvMTEvMjYvdWx0aW1hdGUteHNzLWNzcy1pbmplY3Rpb24vXG4gIC8vIFRoaXMgaXMgbm90IGFuIFhTUyBob2xlIGJ1dCBpbnN0ZWFkIGEgcG90ZW50aWFsIENTUyBpbmplY3Rpb24gaXNzdWVcbiAgLy8gd2hpY2ggaGFzIGxlYWQgdG8gYSBncmVhdGVyIGRpc2N1c3Npb24gYWJvdXQgaG93IHdlJ3JlIGdvaW5nIHRvXG4gIC8vIHRydXN0IFVSTHMgbW92aW5nIGZvcndhcmQuIFNlZSAjMjExNTkwMVxuXG4gIHZhciBpc0VtcHR5ID0gdmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCB2YWx1ZSA9PT0gJyc7XG4gIGlmIChpc0VtcHR5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKCFpc0N1c3RvbVByb3BlcnR5ICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IDAgJiYgIShpc1VuaXRsZXNzTnVtYmVyLmhhc093blByb3BlcnR5KG5hbWUpICYmIGlzVW5pdGxlc3NOdW1iZXJbbmFtZV0pKSB7XG4gICAgcmV0dXJuIHZhbHVlICsgJ3B4JzsgLy8gUHJlc3VtZXMgaW1wbGljaXQgJ3B4JyBzdWZmaXggZm9yIHVuaXRsZXNzIG51bWJlcnNcbiAgfVxuXG4gIHJldHVybiAoJycgKyB2YWx1ZSkudHJpbSgpO1xufVxuXG52YXIgdXBwZXJjYXNlUGF0dGVybiA9IC8oW0EtWl0pL2c7XG52YXIgbXNQYXR0ZXJuID0gL15tcy0vO1xuXG4vKipcbiAqIEh5cGhlbmF0ZXMgYSBjYW1lbGNhc2VkIENTUyBwcm9wZXJ0eSBuYW1lLCBmb3IgZXhhbXBsZTpcbiAqXG4gKiAgID4gaHlwaGVuYXRlU3R5bGVOYW1lKCdiYWNrZ3JvdW5kQ29sb3InKVxuICogICA8IFwiYmFja2dyb3VuZC1jb2xvclwiXG4gKiAgID4gaHlwaGVuYXRlU3R5bGVOYW1lKCdNb3pUcmFuc2l0aW9uJylcbiAqICAgPCBcIi1tb3otdHJhbnNpdGlvblwiXG4gKiAgID4gaHlwaGVuYXRlU3R5bGVOYW1lKCdtc1RyYW5zaXRpb24nKVxuICogICA8IFwiLW1zLXRyYW5zaXRpb25cIlxuICpcbiAqIEFzIE1vZGVybml6ciBzdWdnZXN0cyAoaHR0cDovL21vZGVybml6ci5jb20vZG9jcy8jcHJlZml4ZWQpLCBhbiBgbXNgIHByZWZpeFxuICogaXMgY29udmVydGVkIHRvIGAtbXMtYC5cbiAqL1xuZnVuY3Rpb24gaHlwaGVuYXRlU3R5bGVOYW1lKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUucmVwbGFjZSh1cHBlcmNhc2VQYXR0ZXJuLCAnLSQxJykudG9Mb3dlckNhc2UoKS5yZXBsYWNlKG1zUGF0dGVybiwgJy1tcy0nKTtcbn1cblxudmFyIHdhcm5WYWxpZFN0eWxlID0gZnVuY3Rpb24gKCkge307XG5cbntcbiAgLy8gJ21zVHJhbnNmb3JtJyBpcyBjb3JyZWN0LCBidXQgdGhlIG90aGVyIHByZWZpeGVzIHNob3VsZCBiZSBjYXBpdGFsaXplZFxuICB2YXIgYmFkVmVuZG9yZWRTdHlsZU5hbWVQYXR0ZXJuID0gL14oPzp3ZWJraXR8bW96fG8pW0EtWl0vO1xuICB2YXIgbXNQYXR0ZXJuJDEgPSAvXi1tcy0vO1xuICB2YXIgaHlwaGVuUGF0dGVybiA9IC8tKC4pL2c7XG5cbiAgLy8gc3R5bGUgdmFsdWVzIHNob3VsZG4ndCBjb250YWluIGEgc2VtaWNvbG9uXG4gIHZhciBiYWRTdHlsZVZhbHVlV2l0aFNlbWljb2xvblBhdHRlcm4gPSAvO1xccyokLztcblxuICB2YXIgd2FybmVkU3R5bGVOYW1lcyA9IHt9O1xuICB2YXIgd2FybmVkU3R5bGVWYWx1ZXMgPSB7fTtcbiAgdmFyIHdhcm5lZEZvck5hTlZhbHVlID0gZmFsc2U7XG4gIHZhciB3YXJuZWRGb3JJbmZpbml0eVZhbHVlID0gZmFsc2U7XG5cbiAgdmFyIGNhbWVsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICAgIHJldHVybiBzdHJpbmcucmVwbGFjZShoeXBoZW5QYXR0ZXJuLCBmdW5jdGlvbiAoXywgY2hhcmFjdGVyKSB7XG4gICAgICByZXR1cm4gY2hhcmFjdGVyLnRvVXBwZXJDYXNlKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgdmFyIHdhcm5IeXBoZW5hdGVkU3R5bGVOYW1lID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICBpZiAod2FybmVkU3R5bGVOYW1lcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiB3YXJuZWRTdHlsZU5hbWVzW25hbWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2FybmVkU3R5bGVOYW1lc1tuYW1lXSA9IHRydWU7XG4gICAgd2FybmluZyQxKGZhbHNlLCAnVW5zdXBwb3J0ZWQgc3R5bGUgcHJvcGVydHkgJXMuIERpZCB5b3UgbWVhbiAlcz8nLCBuYW1lLFxuICAgIC8vIEFzIEFuZGkgU21pdGggc3VnZ2VzdHNcbiAgICAvLyAoaHR0cDovL3d3dy5hbmRpc21pdGguY29tL2Jsb2cvMjAxMi8wMi9tb2Rlcm5penItcHJlZml4ZWQvKSwgYW4gYC1tc2AgcHJlZml4XG4gICAgLy8gaXMgY29udmVydGVkIHRvIGxvd2VyY2FzZSBgbXNgLlxuICAgIGNhbWVsaXplKG5hbWUucmVwbGFjZShtc1BhdHRlcm4kMSwgJ21zLScpKSk7XG4gIH07XG5cbiAgdmFyIHdhcm5CYWRWZW5kb3JlZFN0eWxlTmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgaWYgKHdhcm5lZFN0eWxlTmFtZXMuaGFzT3duUHJvcGVydHkobmFtZSkgJiYgd2FybmVkU3R5bGVOYW1lc1tuYW1lXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0gPSB0cnVlO1xuICAgIHdhcm5pbmckMShmYWxzZSwgJ1Vuc3VwcG9ydGVkIHZlbmRvci1wcmVmaXhlZCBzdHlsZSBwcm9wZXJ0eSAlcy4gRGlkIHlvdSBtZWFuICVzPycsIG5hbWUsIG5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKDEpKTtcbiAgfTtcblxuICB2YXIgd2FyblN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKHdhcm5lZFN0eWxlVmFsdWVzLmhhc093blByb3BlcnR5KHZhbHVlKSAmJiB3YXJuZWRTdHlsZVZhbHVlc1t2YWx1ZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRTdHlsZVZhbHVlc1t2YWx1ZV0gPSB0cnVlO1xuICAgIHdhcm5pbmckMShmYWxzZSwgXCJTdHlsZSBwcm9wZXJ0eSB2YWx1ZXMgc2hvdWxkbid0IGNvbnRhaW4gYSBzZW1pY29sb24uIFwiICsgJ1RyeSBcIiVzOiAlc1wiIGluc3RlYWQuJywgbmFtZSwgdmFsdWUucmVwbGFjZShiYWRTdHlsZVZhbHVlV2l0aFNlbWljb2xvblBhdHRlcm4sICcnKSk7XG4gIH07XG5cbiAgdmFyIHdhcm5TdHlsZVZhbHVlSXNOYU4gPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICBpZiAod2FybmVkRm9yTmFOVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRGb3JOYU5WYWx1ZSA9IHRydWU7XG4gICAgd2FybmluZyQxKGZhbHNlLCAnYE5hTmAgaXMgYW4gaW52YWxpZCB2YWx1ZSBmb3IgdGhlIGAlc2AgY3NzIHN0eWxlIHByb3BlcnR5LicsIG5hbWUpO1xuICB9O1xuXG4gIHZhciB3YXJuU3R5bGVWYWx1ZUlzSW5maW5pdHkgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICBpZiAod2FybmVkRm9ySW5maW5pdHlWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZEZvckluZmluaXR5VmFsdWUgPSB0cnVlO1xuICAgIHdhcm5pbmckMShmYWxzZSwgJ2BJbmZpbml0eWAgaXMgYW4gaW52YWxpZCB2YWx1ZSBmb3IgdGhlIGAlc2AgY3NzIHN0eWxlIHByb3BlcnR5LicsIG5hbWUpO1xuICB9O1xuXG4gIHdhcm5WYWxpZFN0eWxlID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKG5hbWUuaW5kZXhPZignLScpID4gLTEpIHtcbiAgICAgIHdhcm5IeXBoZW5hdGVkU3R5bGVOYW1lKG5hbWUpO1xuICAgIH0gZWxzZSBpZiAoYmFkVmVuZG9yZWRTdHlsZU5hbWVQYXR0ZXJuLnRlc3QobmFtZSkpIHtcbiAgICAgIHdhcm5CYWRWZW5kb3JlZFN0eWxlTmFtZShuYW1lKTtcbiAgICB9IGVsc2UgaWYgKGJhZFN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uUGF0dGVybi50ZXN0KHZhbHVlKSkge1xuICAgICAgd2FyblN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uKG5hbWUsIHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgICAgICB3YXJuU3R5bGVWYWx1ZUlzTmFOKG5hbWUsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoIWlzRmluaXRlKHZhbHVlKSkge1xuICAgICAgICB3YXJuU3R5bGVWYWx1ZUlzSW5maW5pdHkobmFtZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxudmFyIHdhcm5WYWxpZFN0eWxlJDEgPSB3YXJuVmFsaWRTdHlsZTtcblxuLyoqXG4gKiBPcGVyYXRpb25zIGZvciBkZWFsaW5nIHdpdGggQ1NTIHByb3BlcnRpZXMuXG4gKi9cblxuLyoqXG4gKiBUaGlzIGNyZWF0ZXMgYSBzdHJpbmcgdGhhdCBpcyBleHBlY3RlZCB0byBiZSBlcXVpdmFsZW50IHRvIHRoZSBzdHlsZVxuICogYXR0cmlidXRlIGdlbmVyYXRlZCBieSBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuIEl0IGJ5LXBhc3NlcyB3YXJuaW5ncyBhbmRcbiAqIHNlY3VyaXR5IGNoZWNrcyBzbyBpdCdzIG5vdCBzYWZlIHRvIHVzZSB0aGlzIHZhbHVlIGZvciBhbnl0aGluZyBvdGhlciB0aGFuXG4gKiBjb21wYXJpc29uLiBJdCBpcyBvbmx5IHVzZWQgaW4gREVWIGZvciBTU1IgdmFsaWRhdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRGFuZ2Vyb3VzU3RyaW5nRm9yU3R5bGVzKHN0eWxlcykge1xuICB7XG4gICAgdmFyIHNlcmlhbGl6ZWQgPSAnJztcbiAgICB2YXIgZGVsaW1pdGVyID0gJyc7XG4gICAgZm9yICh2YXIgc3R5bGVOYW1lIGluIHN0eWxlcykge1xuICAgICAgaWYgKCFzdHlsZXMuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBzdHlsZVZhbHVlID0gc3R5bGVzW3N0eWxlTmFtZV07XG4gICAgICBpZiAoc3R5bGVWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIHZhciBpc0N1c3RvbVByb3BlcnR5ID0gc3R5bGVOYW1lLmluZGV4T2YoJy0tJykgPT09IDA7XG4gICAgICAgIHNlcmlhbGl6ZWQgKz0gZGVsaW1pdGVyICsgaHlwaGVuYXRlU3R5bGVOYW1lKHN0eWxlTmFtZSkgKyAnOic7XG4gICAgICAgIHNlcmlhbGl6ZWQgKz0gZGFuZ2Vyb3VzU3R5bGVWYWx1ZShzdHlsZU5hbWUsIHN0eWxlVmFsdWUsIGlzQ3VzdG9tUHJvcGVydHkpO1xuXG4gICAgICAgIGRlbGltaXRlciA9ICc7JztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNlcmlhbGl6ZWQgfHwgbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIFNldHMgdGhlIHZhbHVlIGZvciBtdWx0aXBsZSBzdHlsZXMgb24gYSBub2RlLiAgSWYgYSB2YWx1ZSBpcyBzcGVjaWZpZWQgYXNcbiAqICcnIChlbXB0eSBzdHJpbmcpLCB0aGUgY29ycmVzcG9uZGluZyBzdHlsZSBwcm9wZXJ0eSB3aWxsIGJlIHVuc2V0LlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtvYmplY3R9IHN0eWxlc1xuICovXG5mdW5jdGlvbiBzZXRWYWx1ZUZvclN0eWxlcyhub2RlLCBzdHlsZXMpIHtcbiAgdmFyIHN0eWxlID0gbm9kZS5zdHlsZTtcbiAgZm9yICh2YXIgc3R5bGVOYW1lIGluIHN0eWxlcykge1xuICAgIGlmICghc3R5bGVzLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB2YXIgaXNDdXN0b21Qcm9wZXJ0eSA9IHN0eWxlTmFtZS5pbmRleE9mKCctLScpID09PSAwO1xuICAgIHtcbiAgICAgIGlmICghaXNDdXN0b21Qcm9wZXJ0eSkge1xuICAgICAgICB3YXJuVmFsaWRTdHlsZSQxKHN0eWxlTmFtZSwgc3R5bGVzW3N0eWxlTmFtZV0pO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgc3R5bGVWYWx1ZSA9IGRhbmdlcm91c1N0eWxlVmFsdWUoc3R5bGVOYW1lLCBzdHlsZXNbc3R5bGVOYW1lXSwgaXNDdXN0b21Qcm9wZXJ0eSk7XG4gICAgaWYgKHN0eWxlTmFtZSA9PT0gJ2Zsb2F0Jykge1xuICAgICAgc3R5bGVOYW1lID0gJ2Nzc0Zsb2F0JztcbiAgICB9XG4gICAgaWYgKGlzQ3VzdG9tUHJvcGVydHkpIHtcbiAgICAgIHN0eWxlLnNldFByb3BlcnR5KHN0eWxlTmFtZSwgc3R5bGVWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlW3N0eWxlTmFtZV0gPSBzdHlsZVZhbHVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc1ZhbHVlRW1wdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgfHwgdmFsdWUgPT09ICcnO1xufVxuXG4vKipcbiAqIEdpdmVuIHtjb2xvcjogJ3JlZCcsIG92ZXJmbG93OiAnaGlkZGVuJ30gcmV0dXJucyB7XG4gKiAgIGNvbG9yOiAnY29sb3InLFxuICogICBvdmVyZmxvd1g6ICdvdmVyZmxvdycsXG4gKiAgIG92ZXJmbG93WTogJ292ZXJmbG93JyxcbiAqIH0uIFRoaXMgY2FuIGJlIHJlYWQgYXMgXCJ0aGUgb3ZlcmZsb3dZIHByb3BlcnR5IHdhcyBzZXQgYnkgdGhlIG92ZXJmbG93XG4gKiBzaG9ydGhhbmRcIi4gVGhhdCBpcywgdGhlIHZhbHVlcyBhcmUgdGhlIHByb3BlcnR5IHRoYXQgZWFjaCB3YXMgZGVyaXZlZCBmcm9tLlxuICovXG5mdW5jdGlvbiBleHBhbmRTaG9ydGhhbmRNYXAoc3R5bGVzKSB7XG4gIHZhciBleHBhbmRlZCA9IHt9O1xuICBmb3IgKHZhciBrZXkgaW4gc3R5bGVzKSB7XG4gICAgdmFyIGxvbmdoYW5kcyA9IHNob3J0aGFuZFRvTG9uZ2hhbmRba2V5XSB8fCBba2V5XTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxvbmdoYW5kcy5sZW5ndGg7IGkrKykge1xuICAgICAgZXhwYW5kZWRbbG9uZ2hhbmRzW2ldXSA9IGtleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGV4cGFuZGVkO1xufVxuXG4vKipcbiAqIFdoZW4gbWl4aW5nIHNob3J0aGFuZCBhbmQgbG9uZ2hhbmQgcHJvcGVydHkgbmFtZXMsIHdlIHdhcm4gZHVyaW5nIHVwZGF0ZXMgaWZcbiAqIHdlIGV4cGVjdCBhbiBpbmNvcnJlY3QgcmVzdWx0IHRvIG9jY3VyLiBJbiBwYXJ0aWN1bGFyLCB3ZSB3YXJuIGZvcjpcbiAqXG4gKiBVcGRhdGluZyBhIHNob3J0aGFuZCBwcm9wZXJ0eSAobG9uZ2hhbmQgZ2V0cyBvdmVyd3JpdHRlbik6XG4gKiAgIHtmb250OiAnZm9vJywgZm9udFZhcmlhbnQ6ICdiYXInfSAtPiB7Zm9udDogJ2JheicsIGZvbnRWYXJpYW50OiAnYmFyJ31cbiAqICAgYmVjb21lcyAuc3R5bGUuZm9udCA9ICdiYXonXG4gKiBSZW1vdmluZyBhIHNob3J0aGFuZCBwcm9wZXJ0eSAobG9uZ2hhbmQgZ2V0cyBsb3N0IHRvbyk6XG4gKiAgIHtmb250OiAnZm9vJywgZm9udFZhcmlhbnQ6ICdiYXInfSAtPiB7Zm9udFZhcmlhbnQ6ICdiYXInfVxuICogICBiZWNvbWVzIC5zdHlsZS5mb250ID0gJydcbiAqIFJlbW92aW5nIGEgbG9uZ2hhbmQgcHJvcGVydHkgKHNob3VsZCByZXZlcnQgdG8gc2hvcnRoYW5kOyBkb2Vzbid0KTpcbiAqICAge2ZvbnQ6ICdmb28nLCBmb250VmFyaWFudDogJ2Jhcid9IC0+IHtmb250OiAnZm9vJ31cbiAqICAgYmVjb21lcyAuc3R5bGUuZm9udFZhcmlhbnQgPSAnJ1xuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVNob3J0aGFuZFByb3BlcnR5Q29sbGlzaW9uSW5EZXYoc3R5bGVVcGRhdGVzLCBuZXh0U3R5bGVzKSB7XG4gIGlmICghd2FybkFib3V0U2hvcnRoYW5kUHJvcGVydHlDb2xsaXNpb24pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIW5leHRTdHlsZXMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZXhwYW5kZWRVcGRhdGVzID0gZXhwYW5kU2hvcnRoYW5kTWFwKHN0eWxlVXBkYXRlcyk7XG4gIHZhciBleHBhbmRlZFN0eWxlcyA9IGV4cGFuZFNob3J0aGFuZE1hcChuZXh0U3R5bGVzKTtcbiAgdmFyIHdhcm5lZEFib3V0ID0ge307XG4gIGZvciAodmFyIGtleSBpbiBleHBhbmRlZFVwZGF0ZXMpIHtcbiAgICB2YXIgb3JpZ2luYWxLZXkgPSBleHBhbmRlZFVwZGF0ZXNba2V5XTtcbiAgICB2YXIgY29ycmVjdE9yaWdpbmFsS2V5ID0gZXhwYW5kZWRTdHlsZXNba2V5XTtcbiAgICBpZiAoY29ycmVjdE9yaWdpbmFsS2V5ICYmIG9yaWdpbmFsS2V5ICE9PSBjb3JyZWN0T3JpZ2luYWxLZXkpIHtcbiAgICAgIHZhciB3YXJuaW5nS2V5ID0gb3JpZ2luYWxLZXkgKyAnLCcgKyBjb3JyZWN0T3JpZ2luYWxLZXk7XG4gICAgICBpZiAod2FybmVkQWJvdXRbd2FybmluZ0tleV0pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB3YXJuZWRBYm91dFt3YXJuaW5nS2V5XSA9IHRydWU7XG4gICAgICB3YXJuaW5nJDEoZmFsc2UsICclcyBhIHN0eWxlIHByb3BlcnR5IGR1cmluZyByZXJlbmRlciAoJXMpIHdoZW4gYSAnICsgJ2NvbmZsaWN0aW5nIHByb3BlcnR5IGlzIHNldCAoJXMpIGNhbiBsZWFkIHRvIHN0eWxpbmcgYnVncy4gVG8gJyArIFwiYXZvaWQgdGhpcywgZG9uJ3QgbWl4IHNob3J0aGFuZCBhbmQgbm9uLXNob3J0aGFuZCBwcm9wZXJ0aWVzIFwiICsgJ2ZvciB0aGUgc2FtZSB2YWx1ZTsgaW5zdGVhZCwgcmVwbGFjZSB0aGUgc2hvcnRoYW5kIHdpdGggJyArICdzZXBhcmF0ZSB2YWx1ZXMuJywgaXNWYWx1ZUVtcHR5KHN0eWxlVXBkYXRlc1tvcmlnaW5hbEtleV0pID8gJ1JlbW92aW5nJyA6ICdVcGRhdGluZycsIG9yaWdpbmFsS2V5LCBjb3JyZWN0T3JpZ2luYWxLZXkpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBGb3IgSFRNTCwgY2VydGFpbiB0YWdzIHNob3VsZCBvbWl0IHRoZWlyIGNsb3NlIHRhZy4gV2Uga2VlcCBhIHdoaXRlbGlzdCBmb3Jcbi8vIHRob3NlIHNwZWNpYWwtY2FzZSB0YWdzLlxuXG52YXIgb21pdHRlZENsb3NlVGFncyA9IHtcbiAgYXJlYTogdHJ1ZSxcbiAgYmFzZTogdHJ1ZSxcbiAgYnI6IHRydWUsXG4gIGNvbDogdHJ1ZSxcbiAgZW1iZWQ6IHRydWUsXG4gIGhyOiB0cnVlLFxuICBpbWc6IHRydWUsXG4gIGlucHV0OiB0cnVlLFxuICBrZXlnZW46IHRydWUsXG4gIGxpbms6IHRydWUsXG4gIG1ldGE6IHRydWUsXG4gIHBhcmFtOiB0cnVlLFxuICBzb3VyY2U6IHRydWUsXG4gIHRyYWNrOiB0cnVlLFxuICB3YnI6IHRydWVcbiAgLy8gTk9URTogbWVudWl0ZW0ncyBjbG9zZSB0YWcgc2hvdWxkIGJlIG9taXR0ZWQsIGJ1dCB0aGF0IGNhdXNlcyBwcm9ibGVtcy5cbn07XG5cbi8vIEZvciBIVE1MLCBjZXJ0YWluIHRhZ3MgY2Fubm90IGhhdmUgY2hpbGRyZW4uIFRoaXMgaGFzIHRoZSBzYW1lIHB1cnBvc2UgYXNcbi8vIGBvbWl0dGVkQ2xvc2VUYWdzYCBleGNlcHQgdGhhdCBgbWVudWl0ZW1gIHNob3VsZCBzdGlsbCBoYXZlIGl0cyBjbG9zaW5nIHRhZy5cblxudmFyIHZvaWRFbGVtZW50VGFncyA9IF9hc3NpZ24oe1xuICBtZW51aXRlbTogdHJ1ZVxufSwgb21pdHRlZENsb3NlVGFncyk7XG5cbi8vIFRPRE86IFdlIGNhbiByZW1vdmUgdGhpcyBpZiB3ZSBhZGQgaW52YXJpYW50V2l0aFN0YWNrKClcbi8vIG9yIGFkZCBzdGFjayBieSBkZWZhdWx0IHRvIGludmFyaWFudHMgd2hlcmUgcG9zc2libGUuXG52YXIgSFRNTCQxID0gJ19faHRtbCc7XG5cbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDIgPSBudWxsO1xue1xuICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRWYWxpZFByb3BzKHRhZywgcHJvcHMpIHtcbiAgaWYgKCFwcm9wcykge1xuICAgIHJldHVybjtcbiAgfVxuICAvLyBOb3RlIHRoZSB1c2Ugb2YgYD09YCB3aGljaCBjaGVja3MgZm9yIG51bGwgb3IgdW5kZWZpbmVkLlxuICBpZiAodm9pZEVsZW1lbnRUYWdzW3RhZ10pIHtcbiAgICAhKHByb3BzLmNoaWxkcmVuID09IG51bGwgJiYgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPT0gbnVsbCkgPyBpbnZhcmlhbnQoZmFsc2UsICclcyBpcyBhIHZvaWQgZWxlbWVudCB0YWcgYW5kIG11c3QgbmVpdGhlciBoYXZlIGBjaGlsZHJlbmAgbm9yIHVzZSBgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLiVzJywgdGFnLCBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDIuZ2V0U3RhY2tBZGRlbmR1bSgpKSA6IHZvaWQgMDtcbiAgfVxuICBpZiAocHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgIT0gbnVsbCkge1xuICAgICEocHJvcHMuY2hpbGRyZW4gPT0gbnVsbCkgPyBpbnZhcmlhbnQoZmFsc2UsICdDYW4gb25seSBzZXQgb25lIG9mIGBjaGlsZHJlbmAgb3IgYHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYC4nKSA6IHZvaWQgMDtcbiAgICAhKHR5cGVvZiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCA9PT0gJ29iamVjdCcgJiYgSFRNTCQxIGluIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKSA/IGludmFyaWFudChmYWxzZSwgJ2Bwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTGAgbXVzdCBiZSBpbiB0aGUgZm9ybSBge19faHRtbDogLi4ufWAuIFBsZWFzZSB2aXNpdCBodHRwczovL2ZiLm1lL3JlYWN0LWludmFyaWFudC1kYW5nZXJvdXNseS1zZXQtaW5uZXItaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nKSA6IHZvaWQgMDtcbiAgfVxuICB7XG4gICAgIShwcm9wcy5zdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcgfHwgIXByb3BzLmNvbnRlbnRFZGl0YWJsZSB8fCBwcm9wcy5jaGlsZHJlbiA9PSBudWxsKSA/IHdhcm5pbmckMShmYWxzZSwgJ0EgY29tcG9uZW50IGlzIGBjb250ZW50RWRpdGFibGVgIGFuZCBjb250YWlucyBgY2hpbGRyZW5gIG1hbmFnZWQgYnkgJyArICdSZWFjdC4gSXQgaXMgbm93IHlvdXIgcmVzcG9uc2liaWxpdHkgdG8gZ3VhcmFudGVlIHRoYXQgbm9uZSBvZiAnICsgJ3Rob3NlIG5vZGVzIGFyZSB1bmV4cGVjdGVkbHkgbW9kaWZpZWQgb3IgZHVwbGljYXRlZC4gVGhpcyBpcyAnICsgJ3Byb2JhYmx5IG5vdCBpbnRlbnRpb25hbC4nKSA6IHZvaWQgMDtcbiAgfVxuICAhKHByb3BzLnN0eWxlID09IG51bGwgfHwgdHlwZW9mIHByb3BzLnN0eWxlID09PSAnb2JqZWN0JykgPyBpbnZhcmlhbnQoZmFsc2UsICdUaGUgYHN0eWxlYCBwcm9wIGV4cGVjdHMgYSBtYXBwaW5nIGZyb20gc3R5bGUgcHJvcGVydGllcyB0byB2YWx1ZXMsIG5vdCBhIHN0cmluZy4gRm9yIGV4YW1wbGUsIHN0eWxlPXt7bWFyZ2luUmlnaHQ6IHNwYWNpbmcgKyBcXCdlbVxcJ319IHdoZW4gdXNpbmcgSlNYLiVzJywgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQyLmdldFN0YWNrQWRkZW5kdW0oKSkgOiB2b2lkIDA7XG59XG5cbmZ1bmN0aW9uIGlzQ3VzdG9tQ29tcG9uZW50KHRhZ05hbWUsIHByb3BzKSB7XG4gIGlmICh0YWdOYW1lLmluZGV4T2YoJy0nKSA9PT0gLTEpIHtcbiAgICByZXR1cm4gdHlwZW9mIHByb3BzLmlzID09PSAnc3RyaW5nJztcbiAgfVxuICBzd2l0Y2ggKHRhZ05hbWUpIHtcbiAgICAvLyBUaGVzZSBhcmUgcmVzZXJ2ZWQgU1ZHIGFuZCBNYXRoTUwgZWxlbWVudHMuXG4gICAgLy8gV2UgZG9uJ3QgbWluZCB0aGlzIHdoaXRlbGlzdCB0b28gbXVjaCBiZWNhdXNlIHdlIGV4cGVjdCBpdCB0byBuZXZlciBncm93LlxuICAgIC8vIFRoZSBhbHRlcm5hdGl2ZSBpcyB0byB0cmFjayB0aGUgbmFtZXNwYWNlIGluIGEgZmV3IHBsYWNlcyB3aGljaCBpcyBjb252b2x1dGVkLlxuICAgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJjb21wb25lbnRzL3NwZWMvY3VzdG9tLyNjdXN0b20tZWxlbWVudHMtY29yZS1jb25jZXB0c1xuICAgIGNhc2UgJ2Fubm90YXRpb24teG1sJzpcbiAgICBjYXNlICdjb2xvci1wcm9maWxlJzpcbiAgICBjYXNlICdmb250LWZhY2UnOlxuICAgIGNhc2UgJ2ZvbnQtZmFjZS1zcmMnOlxuICAgIGNhc2UgJ2ZvbnQtZmFjZS11cmknOlxuICAgIGNhc2UgJ2ZvbnQtZmFjZS1mb3JtYXQnOlxuICAgIGNhc2UgJ2ZvbnQtZmFjZS1uYW1lJzpcbiAgICBjYXNlICdtaXNzaW5nLWdseXBoJzpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLy8gV2hlbiBhZGRpbmcgYXR0cmlidXRlcyB0byB0aGUgSFRNTCBvciBTVkcgd2hpdGVsaXN0LCBiZSBzdXJlIHRvXG4vLyBhbHNvIGFkZCB0aGVtIHRvIHRoaXMgbW9kdWxlIHRvIGVuc3VyZSBjYXNpbmcgYW5kIGluY29ycmVjdCBuYW1lXG4vLyB3YXJuaW5ncy5cbnZhciBwb3NzaWJsZVN0YW5kYXJkTmFtZXMgPSB7XG4gIC8vIEhUTUxcbiAgYWNjZXB0OiAnYWNjZXB0JyxcbiAgYWNjZXB0Y2hhcnNldDogJ2FjY2VwdENoYXJzZXQnLFxuICAnYWNjZXB0LWNoYXJzZXQnOiAnYWNjZXB0Q2hhcnNldCcsXG4gIGFjY2Vzc2tleTogJ2FjY2Vzc0tleScsXG4gIGFjdGlvbjogJ2FjdGlvbicsXG4gIGFsbG93ZnVsbHNjcmVlbjogJ2FsbG93RnVsbFNjcmVlbicsXG4gIGFsdDogJ2FsdCcsXG4gIGFzOiAnYXMnLFxuICBhc3luYzogJ2FzeW5jJyxcbiAgYXV0b2NhcGl0YWxpemU6ICdhdXRvQ2FwaXRhbGl6ZScsXG4gIGF1dG9jb21wbGV0ZTogJ2F1dG9Db21wbGV0ZScsXG4gIGF1dG9jb3JyZWN0OiAnYXV0b0NvcnJlY3QnLFxuICBhdXRvZm9jdXM6ICdhdXRvRm9jdXMnLFxuICBhdXRvcGxheTogJ2F1dG9QbGF5JyxcbiAgYXV0b3NhdmU6ICdhdXRvU2F2ZScsXG4gIGNhcHR1cmU6ICdjYXB0dXJlJyxcbiAgY2VsbHBhZGRpbmc6ICdjZWxsUGFkZGluZycsXG4gIGNlbGxzcGFjaW5nOiAnY2VsbFNwYWNpbmcnLFxuICBjaGFsbGVuZ2U6ICdjaGFsbGVuZ2UnLFxuICBjaGFyc2V0OiAnY2hhclNldCcsXG4gIGNoZWNrZWQ6ICdjaGVja2VkJyxcbiAgY2hpbGRyZW46ICdjaGlsZHJlbicsXG4gIGNpdGU6ICdjaXRlJyxcbiAgY2xhc3M6ICdjbGFzc05hbWUnLFxuICBjbGFzc2lkOiAnY2xhc3NJRCcsXG4gIGNsYXNzbmFtZTogJ2NsYXNzTmFtZScsXG4gIGNvbHM6ICdjb2xzJyxcbiAgY29sc3BhbjogJ2NvbFNwYW4nLFxuICBjb250ZW50OiAnY29udGVudCcsXG4gIGNvbnRlbnRlZGl0YWJsZTogJ2NvbnRlbnRFZGl0YWJsZScsXG4gIGNvbnRleHRtZW51OiAnY29udGV4dE1lbnUnLFxuICBjb250cm9sczogJ2NvbnRyb2xzJyxcbiAgY29udHJvbHNsaXN0OiAnY29udHJvbHNMaXN0JyxcbiAgY29vcmRzOiAnY29vcmRzJyxcbiAgY3Jvc3NvcmlnaW46ICdjcm9zc09yaWdpbicsXG4gIGRhbmdlcm91c2x5c2V0aW5uZXJodG1sOiAnZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwnLFxuICBkYXRhOiAnZGF0YScsXG4gIGRhdGV0aW1lOiAnZGF0ZVRpbWUnLFxuICBkZWZhdWx0OiAnZGVmYXVsdCcsXG4gIGRlZmF1bHRjaGVja2VkOiAnZGVmYXVsdENoZWNrZWQnLFxuICBkZWZhdWx0dmFsdWU6ICdkZWZhdWx0VmFsdWUnLFxuICBkZWZlcjogJ2RlZmVyJyxcbiAgZGlyOiAnZGlyJyxcbiAgZGlzYWJsZWQ6ICdkaXNhYmxlZCcsXG4gIGRvd25sb2FkOiAnZG93bmxvYWQnLFxuICBkcmFnZ2FibGU6ICdkcmFnZ2FibGUnLFxuICBlbmN0eXBlOiAnZW5jVHlwZScsXG4gIGZvcjogJ2h0bWxGb3InLFxuICBmb3JtOiAnZm9ybScsXG4gIGZvcm1tZXRob2Q6ICdmb3JtTWV0aG9kJyxcbiAgZm9ybWFjdGlvbjogJ2Zvcm1BY3Rpb24nLFxuICBmb3JtZW5jdHlwZTogJ2Zvcm1FbmNUeXBlJyxcbiAgZm9ybW5vdmFsaWRhdGU6ICdmb3JtTm9WYWxpZGF0ZScsXG4gIGZvcm10YXJnZXQ6ICdmb3JtVGFyZ2V0JyxcbiAgZnJhbWVib3JkZXI6ICdmcmFtZUJvcmRlcicsXG4gIGhlYWRlcnM6ICdoZWFkZXJzJyxcbiAgaGVpZ2h0OiAnaGVpZ2h0JyxcbiAgaGlkZGVuOiAnaGlkZGVuJyxcbiAgaGlnaDogJ2hpZ2gnLFxuICBocmVmOiAnaHJlZicsXG4gIGhyZWZsYW5nOiAnaHJlZkxhbmcnLFxuICBodG1sZm9yOiAnaHRtbEZvcicsXG4gIGh0dHBlcXVpdjogJ2h0dHBFcXVpdicsXG4gICdodHRwLWVxdWl2JzogJ2h0dHBFcXVpdicsXG4gIGljb246ICdpY29uJyxcbiAgaWQ6ICdpZCcsXG4gIGlubmVyaHRtbDogJ2lubmVySFRNTCcsXG4gIGlucHV0bW9kZTogJ2lucHV0TW9kZScsXG4gIGludGVncml0eTogJ2ludGVncml0eScsXG4gIGlzOiAnaXMnLFxuICBpdGVtaWQ6ICdpdGVtSUQnLFxuICBpdGVtcHJvcDogJ2l0ZW1Qcm9wJyxcbiAgaXRlbXJlZjogJ2l0ZW1SZWYnLFxuICBpdGVtc2NvcGU6ICdpdGVtU2NvcGUnLFxuICBpdGVtdHlwZTogJ2l0ZW1UeXBlJyxcbiAga2V5cGFyYW1zOiAna2V5UGFyYW1zJyxcbiAga2V5dHlwZTogJ2tleVR5cGUnLFxuICBraW5kOiAna2luZCcsXG4gIGxhYmVsOiAnbGFiZWwnLFxuICBsYW5nOiAnbGFuZycsXG4gIGxpc3Q6ICdsaXN0JyxcbiAgbG9vcDogJ2xvb3AnLFxuICBsb3c6ICdsb3cnLFxuICBtYW5pZmVzdDogJ21hbmlmZXN0JyxcbiAgbWFyZ2lud2lkdGg6ICdtYXJnaW5XaWR0aCcsXG4gIG1hcmdpbmhlaWdodDogJ21hcmdpbkhlaWdodCcsXG4gIG1heDogJ21heCcsXG4gIG1heGxlbmd0aDogJ21heExlbmd0aCcsXG4gIG1lZGlhOiAnbWVkaWEnLFxuICBtZWRpYWdyb3VwOiAnbWVkaWFHcm91cCcsXG4gIG1ldGhvZDogJ21ldGhvZCcsXG4gIG1pbjogJ21pbicsXG4gIG1pbmxlbmd0aDogJ21pbkxlbmd0aCcsXG4gIG11bHRpcGxlOiAnbXVsdGlwbGUnLFxuICBtdXRlZDogJ211dGVkJyxcbiAgbmFtZTogJ25hbWUnLFxuICBub21vZHVsZTogJ25vTW9kdWxlJyxcbiAgbm9uY2U6ICdub25jZScsXG4gIG5vdmFsaWRhdGU6ICdub1ZhbGlkYXRlJyxcbiAgb3BlbjogJ29wZW4nLFxuICBvcHRpbXVtOiAnb3B0aW11bScsXG4gIHBhdHRlcm46ICdwYXR0ZXJuJyxcbiAgcGxhY2Vob2xkZXI6ICdwbGFjZWhvbGRlcicsXG4gIHBsYXlzaW5saW5lOiAncGxheXNJbmxpbmUnLFxuICBwb3N0ZXI6ICdwb3N0ZXInLFxuICBwcmVsb2FkOiAncHJlbG9hZCcsXG4gIHByb2ZpbGU6ICdwcm9maWxlJyxcbiAgcmFkaW9ncm91cDogJ3JhZGlvR3JvdXAnLFxuICByZWFkb25seTogJ3JlYWRPbmx5JyxcbiAgcmVmZXJyZXJwb2xpY3k6ICdyZWZlcnJlclBvbGljeScsXG4gIHJlbDogJ3JlbCcsXG4gIHJlcXVpcmVkOiAncmVxdWlyZWQnLFxuICByZXZlcnNlZDogJ3JldmVyc2VkJyxcbiAgcm9sZTogJ3JvbGUnLFxuICByb3dzOiAncm93cycsXG4gIHJvd3NwYW46ICdyb3dTcGFuJyxcbiAgc2FuZGJveDogJ3NhbmRib3gnLFxuICBzY29wZTogJ3Njb3BlJyxcbiAgc2NvcGVkOiAnc2NvcGVkJyxcbiAgc2Nyb2xsaW5nOiAnc2Nyb2xsaW5nJyxcbiAgc2VhbWxlc3M6ICdzZWFtbGVzcycsXG4gIHNlbGVjdGVkOiAnc2VsZWN0ZWQnLFxuICBzaGFwZTogJ3NoYXBlJyxcbiAgc2l6ZTogJ3NpemUnLFxuICBzaXplczogJ3NpemVzJyxcbiAgc3BhbjogJ3NwYW4nLFxuICBzcGVsbGNoZWNrOiAnc3BlbGxDaGVjaycsXG4gIHNyYzogJ3NyYycsXG4gIHNyY2RvYzogJ3NyY0RvYycsXG4gIHNyY2xhbmc6ICdzcmNMYW5nJyxcbiAgc3Jjc2V0OiAnc3JjU2V0JyxcbiAgc3RhcnQ6ICdzdGFydCcsXG4gIHN0ZXA6ICdzdGVwJyxcbiAgc3R5bGU6ICdzdHlsZScsXG4gIHN1bW1hcnk6ICdzdW1tYXJ5JyxcbiAgdGFiaW5kZXg6ICd0YWJJbmRleCcsXG4gIHRhcmdldDogJ3RhcmdldCcsXG4gIHRpdGxlOiAndGl0bGUnLFxuICB0eXBlOiAndHlwZScsXG4gIHVzZW1hcDogJ3VzZU1hcCcsXG4gIHZhbHVlOiAndmFsdWUnLFxuICB3aWR0aDogJ3dpZHRoJyxcbiAgd21vZGU6ICd3bW9kZScsXG4gIHdyYXA6ICd3cmFwJyxcblxuICAvLyBTVkdcbiAgYWJvdXQ6ICdhYm91dCcsXG4gIGFjY2VudGhlaWdodDogJ2FjY2VudEhlaWdodCcsXG4gICdhY2NlbnQtaGVpZ2h0JzogJ2FjY2VudEhlaWdodCcsXG4gIGFjY3VtdWxhdGU6ICdhY2N1bXVsYXRlJyxcbiAgYWRkaXRpdmU6ICdhZGRpdGl2ZScsXG4gIGFsaWdubWVudGJhc2VsaW5lOiAnYWxpZ25tZW50QmFzZWxpbmUnLFxuICAnYWxpZ25tZW50LWJhc2VsaW5lJzogJ2FsaWdubWVudEJhc2VsaW5lJyxcbiAgYWxsb3dyZW9yZGVyOiAnYWxsb3dSZW9yZGVyJyxcbiAgYWxwaGFiZXRpYzogJ2FscGhhYmV0aWMnLFxuICBhbXBsaXR1ZGU6ICdhbXBsaXR1ZGUnLFxuICBhcmFiaWNmb3JtOiAnYXJhYmljRm9ybScsXG4gICdhcmFiaWMtZm9ybSc6ICdhcmFiaWNGb3JtJyxcbiAgYXNjZW50OiAnYXNjZW50JyxcbiAgYXR0cmlidXRlbmFtZTogJ2F0dHJpYnV0ZU5hbWUnLFxuICBhdHRyaWJ1dGV0eXBlOiAnYXR0cmlidXRlVHlwZScsXG4gIGF1dG9yZXZlcnNlOiAnYXV0b1JldmVyc2UnLFxuICBhemltdXRoOiAnYXppbXV0aCcsXG4gIGJhc2VmcmVxdWVuY3k6ICdiYXNlRnJlcXVlbmN5JyxcbiAgYmFzZWxpbmVzaGlmdDogJ2Jhc2VsaW5lU2hpZnQnLFxuICAnYmFzZWxpbmUtc2hpZnQnOiAnYmFzZWxpbmVTaGlmdCcsXG4gIGJhc2Vwcm9maWxlOiAnYmFzZVByb2ZpbGUnLFxuICBiYm94OiAnYmJveCcsXG4gIGJlZ2luOiAnYmVnaW4nLFxuICBiaWFzOiAnYmlhcycsXG4gIGJ5OiAnYnknLFxuICBjYWxjbW9kZTogJ2NhbGNNb2RlJyxcbiAgY2FwaGVpZ2h0OiAnY2FwSGVpZ2h0JyxcbiAgJ2NhcC1oZWlnaHQnOiAnY2FwSGVpZ2h0JyxcbiAgY2xpcDogJ2NsaXAnLFxuICBjbGlwcGF0aDogJ2NsaXBQYXRoJyxcbiAgJ2NsaXAtcGF0aCc6ICdjbGlwUGF0aCcsXG4gIGNsaXBwYXRodW5pdHM6ICdjbGlwUGF0aFVuaXRzJyxcbiAgY2xpcHJ1bGU6ICdjbGlwUnVsZScsXG4gICdjbGlwLXJ1bGUnOiAnY2xpcFJ1bGUnLFxuICBjb2xvcjogJ2NvbG9yJyxcbiAgY29sb3JpbnRlcnBvbGF0aW9uOiAnY29sb3JJbnRlcnBvbGF0aW9uJyxcbiAgJ2NvbG9yLWludGVycG9sYXRpb24nOiAnY29sb3JJbnRlcnBvbGF0aW9uJyxcbiAgY29sb3JpbnRlcnBvbGF0aW9uZmlsdGVyczogJ2NvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMnLFxuICAnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzJzogJ2NvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMnLFxuICBjb2xvcnByb2ZpbGU6ICdjb2xvclByb2ZpbGUnLFxuICAnY29sb3ItcHJvZmlsZSc6ICdjb2xvclByb2ZpbGUnLFxuICBjb2xvcnJlbmRlcmluZzogJ2NvbG9yUmVuZGVyaW5nJyxcbiAgJ2NvbG9yLXJlbmRlcmluZyc6ICdjb2xvclJlbmRlcmluZycsXG4gIGNvbnRlbnRzY3JpcHR0eXBlOiAnY29udGVudFNjcmlwdFR5cGUnLFxuICBjb250ZW50c3R5bGV0eXBlOiAnY29udGVudFN0eWxlVHlwZScsXG4gIGN1cnNvcjogJ2N1cnNvcicsXG4gIGN4OiAnY3gnLFxuICBjeTogJ2N5JyxcbiAgZDogJ2QnLFxuICBkYXRhdHlwZTogJ2RhdGF0eXBlJyxcbiAgZGVjZWxlcmF0ZTogJ2RlY2VsZXJhdGUnLFxuICBkZXNjZW50OiAnZGVzY2VudCcsXG4gIGRpZmZ1c2Vjb25zdGFudDogJ2RpZmZ1c2VDb25zdGFudCcsXG4gIGRpcmVjdGlvbjogJ2RpcmVjdGlvbicsXG4gIGRpc3BsYXk6ICdkaXNwbGF5JyxcbiAgZGl2aXNvcjogJ2Rpdmlzb3InLFxuICBkb21pbmFudGJhc2VsaW5lOiAnZG9taW5hbnRCYXNlbGluZScsXG4gICdkb21pbmFudC1iYXNlbGluZSc6ICdkb21pbmFudEJhc2VsaW5lJyxcbiAgZHVyOiAnZHVyJyxcbiAgZHg6ICdkeCcsXG4gIGR5OiAnZHknLFxuICBlZGdlbW9kZTogJ2VkZ2VNb2RlJyxcbiAgZWxldmF0aW9uOiAnZWxldmF0aW9uJyxcbiAgZW5hYmxlYmFja2dyb3VuZDogJ2VuYWJsZUJhY2tncm91bmQnLFxuICAnZW5hYmxlLWJhY2tncm91bmQnOiAnZW5hYmxlQmFja2dyb3VuZCcsXG4gIGVuZDogJ2VuZCcsXG4gIGV4cG9uZW50OiAnZXhwb25lbnQnLFxuICBleHRlcm5hbHJlc291cmNlc3JlcXVpcmVkOiAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsXG4gIGZpbGw6ICdmaWxsJyxcbiAgZmlsbG9wYWNpdHk6ICdmaWxsT3BhY2l0eScsXG4gICdmaWxsLW9wYWNpdHknOiAnZmlsbE9wYWNpdHknLFxuICBmaWxscnVsZTogJ2ZpbGxSdWxlJyxcbiAgJ2ZpbGwtcnVsZSc6ICdmaWxsUnVsZScsXG4gIGZpbHRlcjogJ2ZpbHRlcicsXG4gIGZpbHRlcnJlczogJ2ZpbHRlclJlcycsXG4gIGZpbHRlcnVuaXRzOiAnZmlsdGVyVW5pdHMnLFxuICBmbG9vZG9wYWNpdHk6ICdmbG9vZE9wYWNpdHknLFxuICAnZmxvb2Qtb3BhY2l0eSc6ICdmbG9vZE9wYWNpdHknLFxuICBmbG9vZGNvbG9yOiAnZmxvb2RDb2xvcicsXG4gICdmbG9vZC1jb2xvcic6ICdmbG9vZENvbG9yJyxcbiAgZm9jdXNhYmxlOiAnZm9jdXNhYmxlJyxcbiAgZm9udGZhbWlseTogJ2ZvbnRGYW1pbHknLFxuICAnZm9udC1mYW1pbHknOiAnZm9udEZhbWlseScsXG4gIGZvbnRzaXplOiAnZm9udFNpemUnLFxuICAnZm9udC1zaXplJzogJ2ZvbnRTaXplJyxcbiAgZm9udHNpemVhZGp1c3Q6ICdmb250U2l6ZUFkanVzdCcsXG4gICdmb250LXNpemUtYWRqdXN0JzogJ2ZvbnRTaXplQWRqdXN0JyxcbiAgZm9udHN0cmV0Y2g6ICdmb250U3RyZXRjaCcsXG4gICdmb250LXN0cmV0Y2gnOiAnZm9udFN0cmV0Y2gnLFxuICBmb250c3R5bGU6ICdmb250U3R5bGUnLFxuICAnZm9udC1zdHlsZSc6ICdmb250U3R5bGUnLFxuICBmb250dmFyaWFudDogJ2ZvbnRWYXJpYW50JyxcbiAgJ2ZvbnQtdmFyaWFudCc6ICdmb250VmFyaWFudCcsXG4gIGZvbnR3ZWlnaHQ6ICdmb250V2VpZ2h0JyxcbiAgJ2ZvbnQtd2VpZ2h0JzogJ2ZvbnRXZWlnaHQnLFxuICBmb3JtYXQ6ICdmb3JtYXQnLFxuICBmcm9tOiAnZnJvbScsXG4gIGZ4OiAnZngnLFxuICBmeTogJ2Z5JyxcbiAgZzE6ICdnMScsXG4gIGcyOiAnZzInLFxuICBnbHlwaG5hbWU6ICdnbHlwaE5hbWUnLFxuICAnZ2x5cGgtbmFtZSc6ICdnbHlwaE5hbWUnLFxuICBnbHlwaG9yaWVudGF0aW9uaG9yaXpvbnRhbDogJ2dseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsJyxcbiAgJ2dseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWwnOiAnZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWwnLFxuICBnbHlwaG9yaWVudGF0aW9udmVydGljYWw6ICdnbHlwaE9yaWVudGF0aW9uVmVydGljYWwnLFxuICAnZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwnOiAnZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsJyxcbiAgZ2x5cGhyZWY6ICdnbHlwaFJlZicsXG4gIGdyYWRpZW50dHJhbnNmb3JtOiAnZ3JhZGllbnRUcmFuc2Zvcm0nLFxuICBncmFkaWVudHVuaXRzOiAnZ3JhZGllbnRVbml0cycsXG4gIGhhbmdpbmc6ICdoYW5naW5nJyxcbiAgaG9yaXphZHZ4OiAnaG9yaXpBZHZYJyxcbiAgJ2hvcml6LWFkdi14JzogJ2hvcml6QWR2WCcsXG4gIGhvcml6b3JpZ2lueDogJ2hvcml6T3JpZ2luWCcsXG4gICdob3Jpei1vcmlnaW4teCc6ICdob3Jpek9yaWdpblgnLFxuICBpZGVvZ3JhcGhpYzogJ2lkZW9ncmFwaGljJyxcbiAgaW1hZ2VyZW5kZXJpbmc6ICdpbWFnZVJlbmRlcmluZycsXG4gICdpbWFnZS1yZW5kZXJpbmcnOiAnaW1hZ2VSZW5kZXJpbmcnLFxuICBpbjI6ICdpbjInLFxuICBpbjogJ2luJyxcbiAgaW5saXN0OiAnaW5saXN0JyxcbiAgaW50ZXJjZXB0OiAnaW50ZXJjZXB0JyxcbiAgazE6ICdrMScsXG4gIGsyOiAnazInLFxuICBrMzogJ2szJyxcbiAgazQ6ICdrNCcsXG4gIGs6ICdrJyxcbiAga2VybmVsbWF0cml4OiAna2VybmVsTWF0cml4JyxcbiAga2VybmVsdW5pdGxlbmd0aDogJ2tlcm5lbFVuaXRMZW5ndGgnLFxuICBrZXJuaW5nOiAna2VybmluZycsXG4gIGtleXBvaW50czogJ2tleVBvaW50cycsXG4gIGtleXNwbGluZXM6ICdrZXlTcGxpbmVzJyxcbiAga2V5dGltZXM6ICdrZXlUaW1lcycsXG4gIGxlbmd0aGFkanVzdDogJ2xlbmd0aEFkanVzdCcsXG4gIGxldHRlcnNwYWNpbmc6ICdsZXR0ZXJTcGFjaW5nJyxcbiAgJ2xldHRlci1zcGFjaW5nJzogJ2xldHRlclNwYWNpbmcnLFxuICBsaWdodGluZ2NvbG9yOiAnbGlnaHRpbmdDb2xvcicsXG4gICdsaWdodGluZy1jb2xvcic6ICdsaWdodGluZ0NvbG9yJyxcbiAgbGltaXRpbmdjb25lYW5nbGU6ICdsaW1pdGluZ0NvbmVBbmdsZScsXG4gIGxvY2FsOiAnbG9jYWwnLFxuICBtYXJrZXJlbmQ6ICdtYXJrZXJFbmQnLFxuICAnbWFya2VyLWVuZCc6ICdtYXJrZXJFbmQnLFxuICBtYXJrZXJoZWlnaHQ6ICdtYXJrZXJIZWlnaHQnLFxuICBtYXJrZXJtaWQ6ICdtYXJrZXJNaWQnLFxuICAnbWFya2VyLW1pZCc6ICdtYXJrZXJNaWQnLFxuICBtYXJrZXJzdGFydDogJ21hcmtlclN0YXJ0JyxcbiAgJ21hcmtlci1zdGFydCc6ICdtYXJrZXJTdGFydCcsXG4gIG1hcmtlcnVuaXRzOiAnbWFya2VyVW5pdHMnLFxuICBtYXJrZXJ3aWR0aDogJ21hcmtlcldpZHRoJyxcbiAgbWFzazogJ21hc2snLFxuICBtYXNrY29udGVudHVuaXRzOiAnbWFza0NvbnRlbnRVbml0cycsXG4gIG1hc2t1bml0czogJ21hc2tVbml0cycsXG4gIG1hdGhlbWF0aWNhbDogJ21hdGhlbWF0aWNhbCcsXG4gIG1vZGU6ICdtb2RlJyxcbiAgbnVtb2N0YXZlczogJ251bU9jdGF2ZXMnLFxuICBvZmZzZXQ6ICdvZmZzZXQnLFxuICBvcGFjaXR5OiAnb3BhY2l0eScsXG4gIG9wZXJhdG9yOiAnb3BlcmF0b3InLFxuICBvcmRlcjogJ29yZGVyJyxcbiAgb3JpZW50OiAnb3JpZW50JyxcbiAgb3JpZW50YXRpb246ICdvcmllbnRhdGlvbicsXG4gIG9yaWdpbjogJ29yaWdpbicsXG4gIG92ZXJmbG93OiAnb3ZlcmZsb3cnLFxuICBvdmVybGluZXBvc2l0aW9uOiAnb3ZlcmxpbmVQb3NpdGlvbicsXG4gICdvdmVybGluZS1wb3NpdGlvbic6ICdvdmVybGluZVBvc2l0aW9uJyxcbiAgb3ZlcmxpbmV0aGlja25lc3M6ICdvdmVybGluZVRoaWNrbmVzcycsXG4gICdvdmVybGluZS10aGlja25lc3MnOiAnb3ZlcmxpbmVUaGlja25lc3MnLFxuICBwYWludG9yZGVyOiAncGFpbnRPcmRlcicsXG4gICdwYWludC1vcmRlcic6ICdwYWludE9yZGVyJyxcbiAgcGFub3NlMTogJ3Bhbm9zZTEnLFxuICAncGFub3NlLTEnOiAncGFub3NlMScsXG4gIHBhdGhsZW5ndGg6ICdwYXRoTGVuZ3RoJyxcbiAgcGF0dGVybmNvbnRlbnR1bml0czogJ3BhdHRlcm5Db250ZW50VW5pdHMnLFxuICBwYXR0ZXJudHJhbnNmb3JtOiAncGF0dGVyblRyYW5zZm9ybScsXG4gIHBhdHRlcm51bml0czogJ3BhdHRlcm5Vbml0cycsXG4gIHBvaW50ZXJldmVudHM6ICdwb2ludGVyRXZlbnRzJyxcbiAgJ3BvaW50ZXItZXZlbnRzJzogJ3BvaW50ZXJFdmVudHMnLFxuICBwb2ludHM6ICdwb2ludHMnLFxuICBwb2ludHNhdHg6ICdwb2ludHNBdFgnLFxuICBwb2ludHNhdHk6ICdwb2ludHNBdFknLFxuICBwb2ludHNhdHo6ICdwb2ludHNBdFonLFxuICBwcmVmaXg6ICdwcmVmaXgnLFxuICBwcmVzZXJ2ZWFscGhhOiAncHJlc2VydmVBbHBoYScsXG4gIHByZXNlcnZlYXNwZWN0cmF0aW86ICdwcmVzZXJ2ZUFzcGVjdFJhdGlvJyxcbiAgcHJpbWl0aXZldW5pdHM6ICdwcmltaXRpdmVVbml0cycsXG4gIHByb3BlcnR5OiAncHJvcGVydHknLFxuICByOiAncicsXG4gIHJhZGl1czogJ3JhZGl1cycsXG4gIHJlZng6ICdyZWZYJyxcbiAgcmVmeTogJ3JlZlknLFxuICByZW5kZXJpbmdpbnRlbnQ6ICdyZW5kZXJpbmdJbnRlbnQnLFxuICAncmVuZGVyaW5nLWludGVudCc6ICdyZW5kZXJpbmdJbnRlbnQnLFxuICByZXBlYXRjb3VudDogJ3JlcGVhdENvdW50JyxcbiAgcmVwZWF0ZHVyOiAncmVwZWF0RHVyJyxcbiAgcmVxdWlyZWRleHRlbnNpb25zOiAncmVxdWlyZWRFeHRlbnNpb25zJyxcbiAgcmVxdWlyZWRmZWF0dXJlczogJ3JlcXVpcmVkRmVhdHVyZXMnLFxuICByZXNvdXJjZTogJ3Jlc291cmNlJyxcbiAgcmVzdGFydDogJ3Jlc3RhcnQnLFxuICByZXN1bHQ6ICdyZXN1bHQnLFxuICByZXN1bHRzOiAncmVzdWx0cycsXG4gIHJvdGF0ZTogJ3JvdGF0ZScsXG4gIHJ4OiAncngnLFxuICByeTogJ3J5JyxcbiAgc2NhbGU6ICdzY2FsZScsXG4gIHNlY3VyaXR5OiAnc2VjdXJpdHknLFxuICBzZWVkOiAnc2VlZCcsXG4gIHNoYXBlcmVuZGVyaW5nOiAnc2hhcGVSZW5kZXJpbmcnLFxuICAnc2hhcGUtcmVuZGVyaW5nJzogJ3NoYXBlUmVuZGVyaW5nJyxcbiAgc2xvcGU6ICdzbG9wZScsXG4gIHNwYWNpbmc6ICdzcGFjaW5nJyxcbiAgc3BlY3VsYXJjb25zdGFudDogJ3NwZWN1bGFyQ29uc3RhbnQnLFxuICBzcGVjdWxhcmV4cG9uZW50OiAnc3BlY3VsYXJFeHBvbmVudCcsXG4gIHNwZWVkOiAnc3BlZWQnLFxuICBzcHJlYWRtZXRob2Q6ICdzcHJlYWRNZXRob2QnLFxuICBzdGFydG9mZnNldDogJ3N0YXJ0T2Zmc2V0JyxcbiAgc3RkZGV2aWF0aW9uOiAnc3RkRGV2aWF0aW9uJyxcbiAgc3RlbWg6ICdzdGVtaCcsXG4gIHN0ZW12OiAnc3RlbXYnLFxuICBzdGl0Y2h0aWxlczogJ3N0aXRjaFRpbGVzJyxcbiAgc3RvcGNvbG9yOiAnc3RvcENvbG9yJyxcbiAgJ3N0b3AtY29sb3InOiAnc3RvcENvbG9yJyxcbiAgc3RvcG9wYWNpdHk6ICdzdG9wT3BhY2l0eScsXG4gICdzdG9wLW9wYWNpdHknOiAnc3RvcE9wYWNpdHknLFxuICBzdHJpa2V0aHJvdWdocG9zaXRpb246ICdzdHJpa2V0aHJvdWdoUG9zaXRpb24nLFxuICAnc3RyaWtldGhyb3VnaC1wb3NpdGlvbic6ICdzdHJpa2V0aHJvdWdoUG9zaXRpb24nLFxuICBzdHJpa2V0aHJvdWdodGhpY2tuZXNzOiAnc3RyaWtldGhyb3VnaFRoaWNrbmVzcycsXG4gICdzdHJpa2V0aHJvdWdoLXRoaWNrbmVzcyc6ICdzdHJpa2V0aHJvdWdoVGhpY2tuZXNzJyxcbiAgc3RyaW5nOiAnc3RyaW5nJyxcbiAgc3Ryb2tlOiAnc3Ryb2tlJyxcbiAgc3Ryb2tlZGFzaGFycmF5OiAnc3Ryb2tlRGFzaGFycmF5JyxcbiAgJ3N0cm9rZS1kYXNoYXJyYXknOiAnc3Ryb2tlRGFzaGFycmF5JyxcbiAgc3Ryb2tlZGFzaG9mZnNldDogJ3N0cm9rZURhc2hvZmZzZXQnLFxuICAnc3Ryb2tlLWRhc2hvZmZzZXQnOiAnc3Ryb2tlRGFzaG9mZnNldCcsXG4gIHN0cm9rZWxpbmVjYXA6ICdzdHJva2VMaW5lY2FwJyxcbiAgJ3N0cm9rZS1saW5lY2FwJzogJ3N0cm9rZUxpbmVjYXAnLFxuICBzdHJva2VsaW5lam9pbjogJ3N0cm9rZUxpbmVqb2luJyxcbiAgJ3N0cm9rZS1saW5lam9pbic6ICdzdHJva2VMaW5lam9pbicsXG4gIHN0cm9rZW1pdGVybGltaXQ6ICdzdHJva2VNaXRlcmxpbWl0JyxcbiAgJ3N0cm9rZS1taXRlcmxpbWl0JzogJ3N0cm9rZU1pdGVybGltaXQnLFxuICBzdHJva2V3aWR0aDogJ3N0cm9rZVdpZHRoJyxcbiAgJ3N0cm9rZS13aWR0aCc6ICdzdHJva2VXaWR0aCcsXG4gIHN0cm9rZW9wYWNpdHk6ICdzdHJva2VPcGFjaXR5JyxcbiAgJ3N0cm9rZS1vcGFjaXR5JzogJ3N0cm9rZU9wYWNpdHknLFxuICBzdXBwcmVzc2NvbnRlbnRlZGl0YWJsZXdhcm5pbmc6ICdzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcnLFxuICBzdXBwcmVzc2h5ZHJhdGlvbndhcm5pbmc6ICdzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcnLFxuICBzdXJmYWNlc2NhbGU6ICdzdXJmYWNlU2NhbGUnLFxuICBzeXN0ZW1sYW5ndWFnZTogJ3N5c3RlbUxhbmd1YWdlJyxcbiAgdGFibGV2YWx1ZXM6ICd0YWJsZVZhbHVlcycsXG4gIHRhcmdldHg6ICd0YXJnZXRYJyxcbiAgdGFyZ2V0eTogJ3RhcmdldFknLFxuICB0ZXh0YW5jaG9yOiAndGV4dEFuY2hvcicsXG4gICd0ZXh0LWFuY2hvcic6ICd0ZXh0QW5jaG9yJyxcbiAgdGV4dGRlY29yYXRpb246ICd0ZXh0RGVjb3JhdGlvbicsXG4gICd0ZXh0LWRlY29yYXRpb24nOiAndGV4dERlY29yYXRpb24nLFxuICB0ZXh0bGVuZ3RoOiAndGV4dExlbmd0aCcsXG4gIHRleHRyZW5kZXJpbmc6ICd0ZXh0UmVuZGVyaW5nJyxcbiAgJ3RleHQtcmVuZGVyaW5nJzogJ3RleHRSZW5kZXJpbmcnLFxuICB0bzogJ3RvJyxcbiAgdHJhbnNmb3JtOiAndHJhbnNmb3JtJyxcbiAgdHlwZW9mOiAndHlwZW9mJyxcbiAgdTE6ICd1MScsXG4gIHUyOiAndTInLFxuICB1bmRlcmxpbmVwb3NpdGlvbjogJ3VuZGVybGluZVBvc2l0aW9uJyxcbiAgJ3VuZGVybGluZS1wb3NpdGlvbic6ICd1bmRlcmxpbmVQb3NpdGlvbicsXG4gIHVuZGVybGluZXRoaWNrbmVzczogJ3VuZGVybGluZVRoaWNrbmVzcycsXG4gICd1bmRlcmxpbmUtdGhpY2tuZXNzJzogJ3VuZGVybGluZVRoaWNrbmVzcycsXG4gIHVuaWNvZGU6ICd1bmljb2RlJyxcbiAgdW5pY29kZWJpZGk6ICd1bmljb2RlQmlkaScsXG4gICd1bmljb2RlLWJpZGknOiAndW5pY29kZUJpZGknLFxuICB1bmljb2RlcmFuZ2U6ICd1bmljb2RlUmFuZ2UnLFxuICAndW5pY29kZS1yYW5nZSc6ICd1bmljb2RlUmFuZ2UnLFxuICB1bml0c3BlcmVtOiAndW5pdHNQZXJFbScsXG4gICd1bml0cy1wZXItZW0nOiAndW5pdHNQZXJFbScsXG4gIHVuc2VsZWN0YWJsZTogJ3Vuc2VsZWN0YWJsZScsXG4gIHZhbHBoYWJldGljOiAndkFscGhhYmV0aWMnLFxuICAndi1hbHBoYWJldGljJzogJ3ZBbHBoYWJldGljJyxcbiAgdmFsdWVzOiAndmFsdWVzJyxcbiAgdmVjdG9yZWZmZWN0OiAndmVjdG9yRWZmZWN0JyxcbiAgJ3ZlY3Rvci1lZmZlY3QnOiAndmVjdG9yRWZmZWN0JyxcbiAgdmVyc2lvbjogJ3ZlcnNpb24nLFxuICB2ZXJ0YWR2eTogJ3ZlcnRBZHZZJyxcbiAgJ3ZlcnQtYWR2LXknOiAndmVydEFkdlknLFxuICB2ZXJ0b3JpZ2lueDogJ3ZlcnRPcmlnaW5YJyxcbiAgJ3ZlcnQtb3JpZ2luLXgnOiAndmVydE9yaWdpblgnLFxuICB2ZXJ0b3JpZ2lueTogJ3ZlcnRPcmlnaW5ZJyxcbiAgJ3ZlcnQtb3JpZ2luLXknOiAndmVydE9yaWdpblknLFxuICB2aGFuZ2luZzogJ3ZIYW5naW5nJyxcbiAgJ3YtaGFuZ2luZyc6ICd2SGFuZ2luZycsXG4gIHZpZGVvZ3JhcGhpYzogJ3ZJZGVvZ3JhcGhpYycsXG4gICd2LWlkZW9ncmFwaGljJzogJ3ZJZGVvZ3JhcGhpYycsXG4gIHZpZXdib3g6ICd2aWV3Qm94JyxcbiAgdmlld3RhcmdldDogJ3ZpZXdUYXJnZXQnLFxuICB2aXNpYmlsaXR5OiAndmlzaWJpbGl0eScsXG4gIHZtYXRoZW1hdGljYWw6ICd2TWF0aGVtYXRpY2FsJyxcbiAgJ3YtbWF0aGVtYXRpY2FsJzogJ3ZNYXRoZW1hdGljYWwnLFxuICB2b2NhYjogJ3ZvY2FiJyxcbiAgd2lkdGhzOiAnd2lkdGhzJyxcbiAgd29yZHNwYWNpbmc6ICd3b3JkU3BhY2luZycsXG4gICd3b3JkLXNwYWNpbmcnOiAnd29yZFNwYWNpbmcnLFxuICB3cml0aW5nbW9kZTogJ3dyaXRpbmdNb2RlJyxcbiAgJ3dyaXRpbmctbW9kZSc6ICd3cml0aW5nTW9kZScsXG4gIHgxOiAneDEnLFxuICB4MjogJ3gyJyxcbiAgeDogJ3gnLFxuICB4Y2hhbm5lbHNlbGVjdG9yOiAneENoYW5uZWxTZWxlY3RvcicsXG4gIHhoZWlnaHQ6ICd4SGVpZ2h0JyxcbiAgJ3gtaGVpZ2h0JzogJ3hIZWlnaHQnLFxuICB4bGlua2FjdHVhdGU6ICd4bGlua0FjdHVhdGUnLFxuICAneGxpbms6YWN0dWF0ZSc6ICd4bGlua0FjdHVhdGUnLFxuICB4bGlua2FyY3JvbGU6ICd4bGlua0FyY3JvbGUnLFxuICAneGxpbms6YXJjcm9sZSc6ICd4bGlua0FyY3JvbGUnLFxuICB4bGlua2hyZWY6ICd4bGlua0hyZWYnLFxuICAneGxpbms6aHJlZic6ICd4bGlua0hyZWYnLFxuICB4bGlua3JvbGU6ICd4bGlua1JvbGUnLFxuICAneGxpbms6cm9sZSc6ICd4bGlua1JvbGUnLFxuICB4bGlua3Nob3c6ICd4bGlua1Nob3cnLFxuICAneGxpbms6c2hvdyc6ICd4bGlua1Nob3cnLFxuICB4bGlua3RpdGxlOiAneGxpbmtUaXRsZScsXG4gICd4bGluazp0aXRsZSc6ICd4bGlua1RpdGxlJyxcbiAgeGxpbmt0eXBlOiAneGxpbmtUeXBlJyxcbiAgJ3hsaW5rOnR5cGUnOiAneGxpbmtUeXBlJyxcbiAgeG1sYmFzZTogJ3htbEJhc2UnLFxuICAneG1sOmJhc2UnOiAneG1sQmFzZScsXG4gIHhtbGxhbmc6ICd4bWxMYW5nJyxcbiAgJ3htbDpsYW5nJzogJ3htbExhbmcnLFxuICB4bWxuczogJ3htbG5zJyxcbiAgJ3htbDpzcGFjZSc6ICd4bWxTcGFjZScsXG4gIHhtbG5zeGxpbms6ICd4bWxuc1hsaW5rJyxcbiAgJ3htbG5zOnhsaW5rJzogJ3htbG5zWGxpbmsnLFxuICB4bWxzcGFjZTogJ3htbFNwYWNlJyxcbiAgeTE6ICd5MScsXG4gIHkyOiAneTInLFxuICB5OiAneScsXG4gIHljaGFubmVsc2VsZWN0b3I6ICd5Q2hhbm5lbFNlbGVjdG9yJyxcbiAgejogJ3onLFxuICB6b29tYW5kcGFuOiAnem9vbUFuZFBhbidcbn07XG5cbnZhciBhcmlhUHJvcGVydGllcyA9IHtcbiAgJ2FyaWEtY3VycmVudCc6IDAsIC8vIHN0YXRlXG4gICdhcmlhLWRldGFpbHMnOiAwLFxuICAnYXJpYS1kaXNhYmxlZCc6IDAsIC8vIHN0YXRlXG4gICdhcmlhLWhpZGRlbic6IDAsIC8vIHN0YXRlXG4gICdhcmlhLWludmFsaWQnOiAwLCAvLyBzdGF0ZVxuICAnYXJpYS1rZXlzaG9ydGN1dHMnOiAwLFxuICAnYXJpYS1sYWJlbCc6IDAsXG4gICdhcmlhLXJvbGVkZXNjcmlwdGlvbic6IDAsXG4gIC8vIFdpZGdldCBBdHRyaWJ1dGVzXG4gICdhcmlhLWF1dG9jb21wbGV0ZSc6IDAsXG4gICdhcmlhLWNoZWNrZWQnOiAwLFxuICAnYXJpYS1leHBhbmRlZCc6IDAsXG4gICdhcmlhLWhhc3BvcHVwJzogMCxcbiAgJ2FyaWEtbGV2ZWwnOiAwLFxuICAnYXJpYS1tb2RhbCc6IDAsXG4gICdhcmlhLW11bHRpbGluZSc6IDAsXG4gICdhcmlhLW11bHRpc2VsZWN0YWJsZSc6IDAsXG4gICdhcmlhLW9yaWVudGF0aW9uJzogMCxcbiAgJ2FyaWEtcGxhY2Vob2xkZXInOiAwLFxuICAnYXJpYS1wcmVzc2VkJzogMCxcbiAgJ2FyaWEtcmVhZG9ubHknOiAwLFxuICAnYXJpYS1yZXF1aXJlZCc6IDAsXG4gICdhcmlhLXNlbGVjdGVkJzogMCxcbiAgJ2FyaWEtc29ydCc6IDAsXG4gICdhcmlhLXZhbHVlbWF4JzogMCxcbiAgJ2FyaWEtdmFsdWVtaW4nOiAwLFxuICAnYXJpYS12YWx1ZW5vdyc6IDAsXG4gICdhcmlhLXZhbHVldGV4dCc6IDAsXG4gIC8vIExpdmUgUmVnaW9uIEF0dHJpYnV0ZXNcbiAgJ2FyaWEtYXRvbWljJzogMCxcbiAgJ2FyaWEtYnVzeSc6IDAsXG4gICdhcmlhLWxpdmUnOiAwLFxuICAnYXJpYS1yZWxldmFudCc6IDAsXG4gIC8vIERyYWctYW5kLURyb3AgQXR0cmlidXRlc1xuICAnYXJpYS1kcm9wZWZmZWN0JzogMCxcbiAgJ2FyaWEtZ3JhYmJlZCc6IDAsXG4gIC8vIFJlbGF0aW9uc2hpcCBBdHRyaWJ1dGVzXG4gICdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnOiAwLFxuICAnYXJpYS1jb2xjb3VudCc6IDAsXG4gICdhcmlhLWNvbGluZGV4JzogMCxcbiAgJ2FyaWEtY29sc3Bhbic6IDAsXG4gICdhcmlhLWNvbnRyb2xzJzogMCxcbiAgJ2FyaWEtZGVzY3JpYmVkYnknOiAwLFxuICAnYXJpYS1lcnJvcm1lc3NhZ2UnOiAwLFxuICAnYXJpYS1mbG93dG8nOiAwLFxuICAnYXJpYS1sYWJlbGxlZGJ5JzogMCxcbiAgJ2FyaWEtb3ducyc6IDAsXG4gICdhcmlhLXBvc2luc2V0JzogMCxcbiAgJ2FyaWEtcm93Y291bnQnOiAwLFxuICAnYXJpYS1yb3dpbmRleCc6IDAsXG4gICdhcmlhLXJvd3NwYW4nOiAwLFxuICAnYXJpYS1zZXRzaXplJzogMFxufTtcblxudmFyIHdhcm5lZFByb3BlcnRpZXMgPSB7fTtcbnZhciByQVJJQSA9IG5ldyBSZWdFeHAoJ14oYXJpYSktWycgKyBBVFRSSUJVVEVfTkFNRV9DSEFSICsgJ10qJCcpO1xudmFyIHJBUklBQ2FtZWwgPSBuZXcgUmVnRXhwKCdeKGFyaWEpW0EtWl1bJyArIEFUVFJJQlVURV9OQU1FX0NIQVIgKyAnXSokJyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSQyID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0eSh0YWdOYW1lLCBuYW1lKSB7XG4gIGlmIChoYXNPd25Qcm9wZXJ0eSQyLmNhbGwod2FybmVkUHJvcGVydGllcywgbmFtZSkgJiYgd2FybmVkUHJvcGVydGllc1tuYW1lXSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHJBUklBQ2FtZWwudGVzdChuYW1lKSkge1xuICAgIHZhciBhcmlhTmFtZSA9ICdhcmlhLScgKyBuYW1lLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIGNvcnJlY3ROYW1lID0gYXJpYVByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoYXJpYU5hbWUpID8gYXJpYU5hbWUgOiBudWxsO1xuXG4gICAgLy8gSWYgdGhpcyBpcyBhbiBhcmlhLSogYXR0cmlidXRlLCBidXQgaXMgbm90IGxpc3RlZCBpbiB0aGUga25vd24gRE9NXG4gICAgLy8gRE9NIHByb3BlcnRpZXMsIHRoZW4gaXQgaXMgYW4gaW52YWxpZCBhcmlhLSogYXR0cmlidXRlLlxuICAgIGlmIChjb3JyZWN0TmFtZSA9PSBudWxsKSB7XG4gICAgICB3YXJuaW5nJDEoZmFsc2UsICdJbnZhbGlkIEFSSUEgYXR0cmlidXRlIGAlc2AuIEFSSUEgYXR0cmlidXRlcyBmb2xsb3cgdGhlIHBhdHRlcm4gYXJpYS0qIGFuZCBtdXN0IGJlIGxvd2VyY2FzZS4nLCBuYW1lKTtcbiAgICAgIHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIGFyaWEtKiBhdHRyaWJ1dGVzIHNob3VsZCBiZSBsb3dlcmNhc2U7IHN1Z2dlc3QgdGhlIGxvd2VyY2FzZSB2ZXJzaW9uLlxuICAgIGlmIChuYW1lICE9PSBjb3JyZWN0TmFtZSkge1xuICAgICAgd2FybmluZyQxKGZhbHNlLCAnSW52YWxpZCBBUklBIGF0dHJpYnV0ZSBgJXNgLiBEaWQgeW91IG1lYW4gYCVzYD8nLCBuYW1lLCBjb3JyZWN0TmFtZSk7XG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChyQVJJQS50ZXN0KG5hbWUpKSB7XG4gICAgdmFyIGxvd2VyQ2FzZWROYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBzdGFuZGFyZE5hbWUgPSBhcmlhUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShsb3dlckNhc2VkTmFtZSkgPyBsb3dlckNhc2VkTmFtZSA6IG51bGw7XG5cbiAgICAvLyBJZiB0aGlzIGlzIGFuIGFyaWEtKiBhdHRyaWJ1dGUsIGJ1dCBpcyBub3QgbGlzdGVkIGluIHRoZSBrbm93biBET01cbiAgICAvLyBET00gcHJvcGVydGllcywgdGhlbiBpdCBpcyBhbiBpbnZhbGlkIGFyaWEtKiBhdHRyaWJ1dGUuXG4gICAgaWYgKHN0YW5kYXJkTmFtZSA9PSBudWxsKSB7XG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gYXJpYS0qIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIGxvd2VyY2FzZTsgc3VnZ2VzdCB0aGUgbG93ZXJjYXNlIHZlcnNpb24uXG4gICAgaWYgKG5hbWUgIT09IHN0YW5kYXJkTmFtZSkge1xuICAgICAgd2FybmluZyQxKGZhbHNlLCAnVW5rbm93biBBUklBIGF0dHJpYnV0ZSBgJXNgLiBEaWQgeW91IG1lYW4gYCVzYD8nLCBuYW1lLCBzdGFuZGFyZE5hbWUpO1xuICAgICAgd2FybmVkUHJvcGVydGllc1tuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gd2FybkludmFsaWRBUklBUHJvcHModHlwZSwgcHJvcHMpIHtcbiAgdmFyIGludmFsaWRQcm9wcyA9IFtdO1xuXG4gIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgIHZhciBpc1ZhbGlkID0gdmFsaWRhdGVQcm9wZXJ0eSh0eXBlLCBrZXkpO1xuICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgaW52YWxpZFByb3BzLnB1c2goa2V5KTtcbiAgICB9XG4gIH1cblxuICB2YXIgdW5rbm93blByb3BTdHJpbmcgPSBpbnZhbGlkUHJvcHMubWFwKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgcmV0dXJuICdgJyArIHByb3AgKyAnYCc7XG4gIH0pLmpvaW4oJywgJyk7XG5cbiAgaWYgKGludmFsaWRQcm9wcy5sZW5ndGggPT09IDEpIHtcbiAgICB3YXJuaW5nJDEoZmFsc2UsICdJbnZhbGlkIGFyaWEgcHJvcCAlcyBvbiA8JXM+IHRhZy4gJyArICdGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vZmIubWUvaW52YWxpZC1hcmlhLXByb3AnLCB1bmtub3duUHJvcFN0cmluZywgdHlwZSk7XG4gIH0gZWxzZSBpZiAoaW52YWxpZFByb3BzLmxlbmd0aCA+IDEpIHtcbiAgICB3YXJuaW5nJDEoZmFsc2UsICdJbnZhbGlkIGFyaWEgcHJvcHMgJXMgb24gPCVzPiB0YWcuICcgKyAnRm9yIGRldGFpbHMsIHNlZSBodHRwczovL2ZiLm1lL2ludmFsaWQtYXJpYS1wcm9wJywgdW5rbm93blByb3BTdHJpbmcsIHR5cGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydGllcyh0eXBlLCBwcm9wcykge1xuICBpZiAoaXNDdXN0b21Db21wb25lbnQodHlwZSwgcHJvcHMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHdhcm5JbnZhbGlkQVJJQVByb3BzKHR5cGUsIHByb3BzKTtcbn1cblxudmFyIGRpZFdhcm5WYWx1ZU51bGwgPSBmYWxzZTtcblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0aWVzJDEodHlwZSwgcHJvcHMpIHtcbiAgaWYgKHR5cGUgIT09ICdpbnB1dCcgJiYgdHlwZSAhPT0gJ3RleHRhcmVhJyAmJiB0eXBlICE9PSAnc2VsZWN0Jykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChwcm9wcyAhPSBudWxsICYmIHByb3BzLnZhbHVlID09PSBudWxsICYmICFkaWRXYXJuVmFsdWVOdWxsKSB7XG4gICAgZGlkV2FyblZhbHVlTnVsbCA9IHRydWU7XG4gICAgaWYgKHR5cGUgPT09ICdzZWxlY3QnICYmIHByb3BzLm11bHRpcGxlKSB7XG4gICAgICB3YXJuaW5nJDEoZmFsc2UsICdgdmFsdWVgIHByb3Agb24gYCVzYCBzaG91bGQgbm90IGJlIG51bGwuICcgKyAnQ29uc2lkZXIgdXNpbmcgYW4gZW1wdHkgYXJyYXkgd2hlbiBgbXVsdGlwbGVgIGlzIHNldCB0byBgdHJ1ZWAgJyArICd0byBjbGVhciB0aGUgY29tcG9uZW50IG9yIGB1bmRlZmluZWRgIGZvciB1bmNvbnRyb2xsZWQgY29tcG9uZW50cy4nLCB0eXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2FybmluZyQxKGZhbHNlLCAnYHZhbHVlYCBwcm9wIG9uIGAlc2Agc2hvdWxkIG5vdCBiZSBudWxsLiAnICsgJ0NvbnNpZGVyIHVzaW5nIGFuIGVtcHR5IHN0cmluZyB0byBjbGVhciB0aGUgY29tcG9uZW50IG9yIGB1bmRlZmluZWRgICcgKyAnZm9yIHVuY29udHJvbGxlZCBjb21wb25lbnRzLicsIHR5cGUpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgdmFsaWRhdGVQcm9wZXJ0eSQxID0gZnVuY3Rpb24gKCkge307XG5cbntcbiAgdmFyIHdhcm5lZFByb3BlcnRpZXMkMSA9IHt9O1xuICB2YXIgX2hhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbiAgdmFyIEVWRU5UX05BTUVfUkVHRVggPSAvXm9uLi87XG4gIHZhciBJTlZBTElEX0VWRU5UX05BTUVfUkVHRVggPSAvXm9uW15BLVpdLztcbiAgdmFyIHJBUklBJDEgPSBuZXcgUmVnRXhwKCdeKGFyaWEpLVsnICsgQVRUUklCVVRFX05BTUVfQ0hBUiArICddKiQnKTtcbiAgdmFyIHJBUklBQ2FtZWwkMSA9IG5ldyBSZWdFeHAoJ14oYXJpYSlbQS1aXVsnICsgQVRUUklCVVRFX05BTUVfQ0hBUiArICddKiQnKTtcblxuICB2YWxpZGF0ZVByb3BlcnR5JDEgPSBmdW5jdGlvbiAodGFnTmFtZSwgbmFtZSwgdmFsdWUsIGNhblVzZUV2ZW50U3lzdGVtKSB7XG4gICAgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKHdhcm5lZFByb3BlcnRpZXMkMSwgbmFtZSkgJiYgd2FybmVkUHJvcGVydGllcyQxW25hbWVdKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgbG93ZXJDYXNlZE5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGxvd2VyQ2FzZWROYW1lID09PSAnb25mb2N1c2luJyB8fCBsb3dlckNhc2VkTmFtZSA9PT0gJ29uZm9jdXNvdXQnKSB7XG4gICAgICB3YXJuaW5nJDEoZmFsc2UsICdSZWFjdCB1c2VzIG9uRm9jdXMgYW5kIG9uQmx1ciBpbnN0ZWFkIG9mIG9uRm9jdXNJbiBhbmQgb25Gb2N1c091dC4gJyArICdBbGwgUmVhY3QgZXZlbnRzIGFyZSBub3JtYWxpemVkIHRvIGJ1YmJsZSwgc28gb25Gb2N1c0luIGFuZCBvbkZvY3VzT3V0ICcgKyAnYXJlIG5vdCBuZWVkZWQvc3VwcG9ydGVkIGJ5IFJlYWN0LicpO1xuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIFdlIGNhbid0IHJlbHkgb24gdGhlIGV2ZW50IHN5c3RlbSBiZWluZyBpbmplY3RlZCBvbiB0aGUgc2VydmVyLlxuICAgIGlmIChjYW5Vc2VFdmVudFN5c3RlbSkge1xuICAgICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgdmFyIHJlZ2lzdHJhdGlvbk5hbWUgPSBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzLmhhc093blByb3BlcnR5KGxvd2VyQ2FzZWROYW1lKSA/IHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXNbbG93ZXJDYXNlZE5hbWVdIDogbnVsbDtcbiAgICAgIGlmIChyZWdpc3RyYXRpb25OYW1lICE9IG51bGwpIHtcbiAgICAgICAgd2FybmluZyQxKGZhbHNlLCAnSW52YWxpZCBldmVudCBoYW5kbGVyIHByb3BlcnR5IGAlc2AuIERpZCB5b3UgbWVhbiBgJXNgPycsIG5hbWUsIHJlZ2lzdHJhdGlvbk5hbWUpO1xuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChFVkVOVF9OQU1FX1JFR0VYLnRlc3QobmFtZSkpIHtcbiAgICAgICAgd2FybmluZyQxKGZhbHNlLCAnVW5rbm93biBldmVudCBoYW5kbGVyIHByb3BlcnR5IGAlc2AuIEl0IHdpbGwgYmUgaWdub3JlZC4nLCBuYW1lKTtcbiAgICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChFVkVOVF9OQU1FX1JFR0VYLnRlc3QobmFtZSkpIHtcbiAgICAgIC8vIElmIG5vIGV2ZW50IHBsdWdpbnMgaGF2ZSBiZWVuIGluamVjdGVkLCB3ZSBhcmUgaW4gYSBzZXJ2ZXIgZW52aXJvbm1lbnQuXG4gICAgICAvLyBTbyB3ZSBjYW4ndCB0ZWxsIGlmIHRoZSBldmVudCBuYW1lIGlzIGNvcnJlY3QgZm9yIHN1cmUsIGJ1dCB3ZSBjYW4gZmlsdGVyXG4gICAgICAvLyBvdXQga25vd24gYmFkIG9uZXMgbGlrZSBgb25jbGlja2AuIFdlIGNhbid0IHN1Z2dlc3QgYSBzcGVjaWZpYyByZXBsYWNlbWVudCB0aG91Z2guXG4gICAgICBpZiAoSU5WQUxJRF9FVkVOVF9OQU1FX1JFR0VYLnRlc3QobmFtZSkpIHtcbiAgICAgICAgd2FybmluZyQxKGZhbHNlLCAnSW52YWxpZCBldmVudCBoYW5kbGVyIHByb3BlcnR5IGAlc2AuICcgKyAnUmVhY3QgZXZlbnRzIHVzZSB0aGUgY2FtZWxDYXNlIG5hbWluZyBjb252ZW50aW9uLCBmb3IgZXhhbXBsZSBgb25DbGlja2AuJywgbmFtZSk7XG4gICAgICB9XG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gTGV0IHRoZSBBUklBIGF0dHJpYnV0ZSBob29rIHZhbGlkYXRlIEFSSUEgYXR0cmlidXRlc1xuICAgIGlmIChyQVJJQSQxLnRlc3QobmFtZSkgfHwgckFSSUFDYW1lbCQxLnRlc3QobmFtZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChsb3dlckNhc2VkTmFtZSA9PT0gJ2lubmVyaHRtbCcpIHtcbiAgICAgIHdhcm5pbmckMShmYWxzZSwgJ0RpcmVjdGx5IHNldHRpbmcgcHJvcGVydHkgYGlubmVySFRNTGAgaXMgbm90IHBlcm1pdHRlZC4gJyArICdGb3IgbW9yZSBpbmZvcm1hdGlvbiwgbG9va3VwIGRvY3VtZW50YXRpb24gb24gYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYC4nKTtcbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobG93ZXJDYXNlZE5hbWUgPT09ICdhcmlhJykge1xuICAgICAgd2FybmluZyQxKGZhbHNlLCAnVGhlIGBhcmlhYCBhdHRyaWJ1dGUgaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgaW4gUmVhY3QuICcgKyAnUGFzcyBpbmRpdmlkdWFsIGBhcmlhLWAgYXR0cmlidXRlcyBpbnN0ZWFkLicpO1xuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChsb3dlckNhc2VkTmFtZSA9PT0gJ2lzJyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHdhcm5pbmckMShmYWxzZSwgJ1JlY2VpdmVkIGEgYCVzYCBmb3IgYSBzdHJpbmcgYXR0cmlidXRlIGBpc2AuIElmIHRoaXMgaXMgZXhwZWN0ZWQsIGNhc3QgJyArICd0aGUgdmFsdWUgdG8gYSBzdHJpbmcuJywgdHlwZW9mIHZhbHVlKTtcbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBpc05hTih2YWx1ZSkpIHtcbiAgICAgIHdhcm5pbmckMShmYWxzZSwgJ1JlY2VpdmVkIE5hTiBmb3IgdGhlIGAlc2AgYXR0cmlidXRlLiBJZiB0aGlzIGlzIGV4cGVjdGVkLCBjYXN0ICcgKyAndGhlIHZhbHVlIHRvIGEgc3RyaW5nLicsIG5hbWUpO1xuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHZhciBwcm9wZXJ0eUluZm8gPSBnZXRQcm9wZXJ0eUluZm8obmFtZSk7XG4gICAgdmFyIGlzUmVzZXJ2ZWQgPSBwcm9wZXJ0eUluZm8gIT09IG51bGwgJiYgcHJvcGVydHlJbmZvLnR5cGUgPT09IFJFU0VSVkVEO1xuXG4gICAgLy8gS25vd24gYXR0cmlidXRlcyBzaG91bGQgbWF0Y2ggdGhlIGNhc2luZyBzcGVjaWZpZWQgaW4gdGhlIHByb3BlcnR5IGNvbmZpZy5cbiAgICBpZiAocG9zc2libGVTdGFuZGFyZE5hbWVzLmhhc093blByb3BlcnR5KGxvd2VyQ2FzZWROYW1lKSkge1xuICAgICAgdmFyIHN0YW5kYXJkTmFtZSA9IHBvc3NpYmxlU3RhbmRhcmROYW1lc1tsb3dlckNhc2VkTmFtZV07XG4gICAgICBpZiAoc3RhbmRhcmROYW1lICE9PSBuYW1lKSB7XG4gICAgICAgIHdhcm5pbmckMShmYWxzZSwgJ0ludmFsaWQgRE9NIHByb3BlcnR5IGAlc2AuIERpZCB5b3UgbWVhbiBgJXNgPycsIG5hbWUsIHN0YW5kYXJkTmFtZSk7XG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIWlzUmVzZXJ2ZWQgJiYgbmFtZSAhPT0gbG93ZXJDYXNlZE5hbWUpIHtcbiAgICAgIC8vIFVua25vd24gYXR0cmlidXRlcyBzaG91bGQgaGF2ZSBsb3dlcmNhc2UgY2FzaW5nIHNpbmNlIHRoYXQncyBob3cgdGhleVxuICAgICAgLy8gd2lsbCBiZSBjYXNlZCBhbnl3YXkgd2l0aCBzZXJ2ZXIgcmVuZGVyaW5nLlxuICAgICAgd2FybmluZyQxKGZhbHNlLCAnUmVhY3QgZG9lcyBub3QgcmVjb2duaXplIHRoZSBgJXNgIHByb3Agb24gYSBET00gZWxlbWVudC4gSWYgeW91ICcgKyAnaW50ZW50aW9uYWxseSB3YW50IGl0IHRvIGFwcGVhciBpbiB0aGUgRE9NIGFzIGEgY3VzdG9tICcgKyAnYXR0cmlidXRlLCBzcGVsbCBpdCBhcyBsb3dlcmNhc2UgYCVzYCBpbnN0ZWFkLiAnICsgJ0lmIHlvdSBhY2NpZGVudGFsbHkgcGFzc2VkIGl0IGZyb20gYSBwYXJlbnQgY29tcG9uZW50LCByZW1vdmUgJyArICdpdCBmcm9tIHRoZSBET00gZWxlbWVudC4nLCBuYW1lLCBsb3dlckNhc2VkTmFtZSk7XG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nICYmIHNob3VsZFJlbW92ZUF0dHJpYnV0ZVdpdGhXYXJuaW5nKG5hbWUsIHZhbHVlLCBwcm9wZXJ0eUluZm8sIGZhbHNlKSkge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHdhcm5pbmckMShmYWxzZSwgJ1JlY2VpdmVkIGAlc2AgZm9yIGEgbm9uLWJvb2xlYW4gYXR0cmlidXRlIGAlc2AuXFxuXFxuJyArICdJZiB5b3Ugd2FudCB0byB3cml0ZSBpdCB0byB0aGUgRE9NLCBwYXNzIGEgc3RyaW5nIGluc3RlYWQ6ICcgKyAnJXM9XCIlc1wiIG9yICVzPXt2YWx1ZS50b1N0cmluZygpfS4nLCB2YWx1ZSwgbmFtZSwgbmFtZSwgdmFsdWUsIG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2FybmluZyQxKGZhbHNlLCAnUmVjZWl2ZWQgYCVzYCBmb3IgYSBub24tYm9vbGVhbiBhdHRyaWJ1dGUgYCVzYC5cXG5cXG4nICsgJ0lmIHlvdSB3YW50IHRvIHdyaXRlIGl0IHRvIHRoZSBET00sIHBhc3MgYSBzdHJpbmcgaW5zdGVhZDogJyArICclcz1cIiVzXCIgb3IgJXM9e3ZhbHVlLnRvU3RyaW5nKCl9LlxcblxcbicgKyAnSWYgeW91IHVzZWQgdG8gY29uZGl0aW9uYWxseSBvbWl0IGl0IHdpdGggJXM9e2NvbmRpdGlvbiAmJiB2YWx1ZX0sICcgKyAncGFzcyAlcz17Y29uZGl0aW9uID8gdmFsdWUgOiB1bmRlZmluZWR9IGluc3RlYWQuJywgdmFsdWUsIG5hbWUsIG5hbWUsIHZhbHVlLCBuYW1lLCBuYW1lLCBuYW1lKTtcbiAgICAgIH1cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBOb3cgdGhhdCB3ZSd2ZSB2YWxpZGF0ZWQgY2FzaW5nLCBkbyBub3QgdmFsaWRhdGVcbiAgICAvLyBkYXRhIHR5cGVzIGZvciByZXNlcnZlZCBwcm9wc1xuICAgIGlmIChpc1Jlc2VydmVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBXYXJuIHdoZW4gYSBrbm93biBhdHRyaWJ1dGUgaXMgYSBiYWQgdHlwZVxuICAgIGlmIChzaG91bGRSZW1vdmVBdHRyaWJ1dGVXaXRoV2FybmluZyhuYW1lLCB2YWx1ZSwgcHJvcGVydHlJbmZvLCBmYWxzZSkpIHtcbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gV2FybiB3aGVuIHBhc3NpbmcgdGhlIHN0cmluZ3MgJ2ZhbHNlJyBvciAndHJ1ZScgaW50byBhIGJvb2xlYW4gcHJvcFxuICAgIGlmICgodmFsdWUgPT09ICdmYWxzZScgfHwgdmFsdWUgPT09ICd0cnVlJykgJiYgcHJvcGVydHlJbmZvICE9PSBudWxsICYmIHByb3BlcnR5SW5mby50eXBlID09PSBCT09MRUFOKSB7XG4gICAgICB3YXJuaW5nJDEoZmFsc2UsICdSZWNlaXZlZCB0aGUgc3RyaW5nIGAlc2AgZm9yIHRoZSBib29sZWFuIGF0dHJpYnV0ZSBgJXNgLiAnICsgJyVzICcgKyAnRGlkIHlvdSBtZWFuICVzPXslc30/JywgdmFsdWUsIG5hbWUsIHZhbHVlID09PSAnZmFsc2UnID8gJ1RoZSBicm93c2VyIHdpbGwgaW50ZXJwcmV0IGl0IGFzIGEgdHJ1dGh5IHZhbHVlLicgOiAnQWx0aG91Z2ggdGhpcyB3b3JrcywgaXQgd2lsbCBub3Qgd29yayBhcyBleHBlY3RlZCBpZiB5b3UgcGFzcyB0aGUgc3RyaW5nIFwiZmFsc2VcIi4nLCBuYW1lLCB2YWx1ZSk7XG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG59XG5cbnZhciB3YXJuVW5rbm93blByb3BlcnRpZXMgPSBmdW5jdGlvbiAodHlwZSwgcHJvcHMsIGNhblVzZUV2ZW50U3lzdGVtKSB7XG4gIHZhciB1bmtub3duUHJvcHMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgdmFyIGlzVmFsaWQgPSB2YWxpZGF0ZVByb3BlcnR5JDEodHlwZSwga2V5LCBwcm9wc1trZXldLCBjYW5Vc2VFdmVudFN5c3RlbSk7XG4gICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICB1bmtub3duUHJvcHMucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuXG4gIHZhciB1bmtub3duUHJvcFN0cmluZyA9IHVua25vd25Qcm9wcy5tYXAoZnVuY3Rpb24gKHByb3ApIHtcbiAgICByZXR1cm4gJ2AnICsgcHJvcCArICdgJztcbiAgfSkuam9pbignLCAnKTtcbiAgaWYgKHVua25vd25Qcm9wcy5sZW5ndGggPT09IDEpIHtcbiAgICB3YXJuaW5nJDEoZmFsc2UsICdJbnZhbGlkIHZhbHVlIGZvciBwcm9wICVzIG9uIDwlcz4gdGFnLiBFaXRoZXIgcmVtb3ZlIGl0IGZyb20gdGhlIGVsZW1lbnQsICcgKyAnb3IgcGFzcyBhIHN0cmluZyBvciBudW1iZXIgdmFsdWUgdG8ga2VlcCBpdCBpbiB0aGUgRE9NLiAnICsgJ0ZvciBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC1hdHRyaWJ1dGUtYmVoYXZpb3InLCB1bmtub3duUHJvcFN0cmluZywgdHlwZSk7XG4gIH0gZWxzZSBpZiAodW5rbm93blByb3BzLmxlbmd0aCA+IDEpIHtcbiAgICB3YXJuaW5nJDEoZmFsc2UsICdJbnZhbGlkIHZhbHVlcyBmb3IgcHJvcHMgJXMgb24gPCVzPiB0YWcuIEVpdGhlciByZW1vdmUgdGhlbSBmcm9tIHRoZSBlbGVtZW50LCAnICsgJ29yIHBhc3MgYSBzdHJpbmcgb3IgbnVtYmVyIHZhbHVlIHRvIGtlZXAgdGhlbSBpbiB0aGUgRE9NLiAnICsgJ0ZvciBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC1hdHRyaWJ1dGUtYmVoYXZpb3InLCB1bmtub3duUHJvcFN0cmluZywgdHlwZSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydGllcyQyKHR5cGUsIHByb3BzLCBjYW5Vc2VFdmVudFN5c3RlbSkge1xuICBpZiAoaXNDdXN0b21Db21wb25lbnQodHlwZSwgcHJvcHMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHdhcm5Vbmtub3duUHJvcGVydGllcyh0eXBlLCBwcm9wcywgY2FuVXNlRXZlbnRTeXN0ZW0pO1xufVxuXG4vLyBUT0RPOiBkaXJlY3QgaW1wb3J0cyBsaWtlIHNvbWUtcGFja2FnZS9zcmMvKiBhcmUgYmFkLiBGaXggbWUuXG52YXIgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSBmYWxzZTtcbnZhciBkaWRXYXJuU2hhZHlET00gPSBmYWxzZTtcblxudmFyIERBTkdFUk9VU0xZX1NFVF9JTk5FUl9IVE1MID0gJ2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MJztcbnZhciBTVVBQUkVTU19DT05URU5UX0VESVRBQkxFX1dBUk5JTkcgPSAnc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nJztcbnZhciBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxID0gJ3N1cHByZXNzSHlkcmF0aW9uV2FybmluZyc7XG52YXIgQVVUT0ZPQ1VTID0gJ2F1dG9Gb2N1cyc7XG52YXIgQ0hJTERSRU4gPSAnY2hpbGRyZW4nO1xudmFyIFNUWUxFJDEgPSAnc3R5bGUnO1xudmFyIEhUTUwgPSAnX19odG1sJztcblxudmFyIEhUTUxfTkFNRVNQQUNFID0gTmFtZXNwYWNlcy5odG1sO1xuXG5cbnZhciB3YXJuZWRVbmtub3duVGFncyA9IHZvaWQgMDtcbnZhciBzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcgPSB2b2lkIDA7XG5cbnZhciB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50ID0gdm9pZCAwO1xudmFyIHdhcm5Gb3JUZXh0RGlmZmVyZW5jZSA9IHZvaWQgMDtcbnZhciB3YXJuRm9yUHJvcERpZmZlcmVuY2UgPSB2b2lkIDA7XG52YXIgd2FybkZvckV4dHJhQXR0cmlidXRlcyA9IHZvaWQgMDtcbnZhciB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIgPSB2b2lkIDA7XG52YXIgY2FuRGlmZlN0eWxlRm9ySHlkcmF0aW9uV2FybmluZyA9IHZvaWQgMDtcblxudmFyIG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZSA9IHZvaWQgMDtcbnZhciBub3JtYWxpemVIVE1MID0gdm9pZCAwO1xuXG57XG4gIHdhcm5lZFVua25vd25UYWdzID0ge1xuICAgIC8vIENocm9tZSBpcyB0aGUgb25seSBtYWpvciBicm93c2VyIG5vdCBzaGlwcGluZyA8dGltZT4uIEJ1dCBhcyBvZiBKdWx5XG4gICAgLy8gMjAxNyBpdCBpbnRlbmRzIHRvIHNoaXAgaXQgZHVlIHRvIHdpZGVzcHJlYWQgdXNhZ2UuIFdlIGludGVudGlvbmFsbHlcbiAgICAvLyAqZG9uJ3QqIHdhcm4gZm9yIDx0aW1lPiBldmVuIGlmIGl0J3MgdW5yZWNvZ25pemVkIGJ5IENocm9tZSBiZWNhdXNlXG4gICAgLy8gaXQgc29vbiB3aWxsIGJlLCBhbmQgbWFueSBhcHBzIGhhdmUgYmVlbiB1c2luZyBpdCBhbnl3YXkuXG4gICAgdGltZTogdHJ1ZSxcbiAgICAvLyBUaGVyZSBhcmUgd29ya2luZyBwb2x5ZmlsbHMgZm9yIDxkaWFsb2c+LiBMZXQgcGVvcGxlIHVzZSBpdC5cbiAgICBkaWFsb2c6IHRydWUsXG4gICAgLy8gRWxlY3Ryb24gc2hpcHMgYSBjdXN0b20gPHdlYnZpZXc+IHRhZyB0byBkaXNwbGF5IGV4dGVybmFsIHdlYiBjb250ZW50IGluXG4gICAgLy8gYW4gaXNvbGF0ZWQgZnJhbWUgYW5kIHByb2Nlc3MuXG4gICAgLy8gVGhpcyB0YWcgaXMgbm90IHByZXNlbnQgaW4gbm9uIEVsZWN0cm9uIGVudmlyb25tZW50cyBzdWNoIGFzIEpTRG9tIHdoaWNoXG4gICAgLy8gaXMgb2Z0ZW4gdXNlZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAgICAvLyBAc2VlIGh0dHBzOi8vZWxlY3Ryb25qcy5vcmcvZG9jcy9hcGkvd2Vidmlldy10YWdcbiAgICB3ZWJ2aWV3OiB0cnVlXG4gIH07XG5cbiAgdmFsaWRhdGVQcm9wZXJ0aWVzSW5EZXZlbG9wbWVudCA9IGZ1bmN0aW9uICh0eXBlLCBwcm9wcykge1xuICAgIHZhbGlkYXRlUHJvcGVydGllcyh0eXBlLCBwcm9wcyk7XG4gICAgdmFsaWRhdGVQcm9wZXJ0aWVzJDEodHlwZSwgcHJvcHMpO1xuICAgIHZhbGlkYXRlUHJvcGVydGllcyQyKHR5cGUsIHByb3BzLCAvKiBjYW5Vc2VFdmVudFN5c3RlbSAqL3RydWUpO1xuICB9O1xuXG4gIC8vIElFIDExIHBhcnNlcyAmIG5vcm1hbGl6ZXMgdGhlIHN0eWxlIGF0dHJpYnV0ZSBhcyBvcHBvc2VkIHRvIG90aGVyXG4gIC8vIGJyb3dzZXJzLiBJdCBhZGRzIHNwYWNlcyBhbmQgc29ydHMgdGhlIHByb3BlcnRpZXMgaW4gc29tZVxuICAvLyBub24tYWxwaGFiZXRpY2FsIG9yZGVyLiBIYW5kbGluZyB0aGF0IHdvdWxkIHJlcXVpcmUgc29ydGluZyBDU1NcbiAgLy8gcHJvcGVydGllcyBpbiB0aGUgY2xpZW50ICYgc2VydmVyIHZlcnNpb25zIG9yIGFwcGx5aW5nXG4gIC8vIGBleHBlY3RlZFN0eWxlYCB0byBhIHRlbXBvcmFyeSBET00gbm9kZSB0byByZWFkIGl0cyBgc3R5bGVgIGF0dHJpYnV0ZVxuICAvLyBub3JtYWxpemVkLiBTaW5jZSBpdCBvbmx5IGFmZmVjdHMgSUUsIHdlJ3JlIHNraXBwaW5nIHN0eWxlIHdhcm5pbmdzXG4gIC8vIGluIHRoYXQgYnJvd3NlciBjb21wbGV0ZWx5IGluIGZhdm9yIG9mIGRvaW5nIGFsbCB0aGF0IHdvcmsuXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzExODA3XG4gIGNhbkRpZmZTdHlsZUZvckh5ZHJhdGlvbldhcm5pbmcgPSBjYW5Vc2VET00gJiYgIWRvY3VtZW50LmRvY3VtZW50TW9kZTtcblxuICAvLyBIVE1MIHBhcnNpbmcgbm9ybWFsaXplcyBDUiBhbmQgQ1JMRiB0byBMRi5cbiAgLy8gSXQgYWxzbyBjYW4gdHVybiBcXHUwMDAwIGludG8gXFx1RkZGRCBpbnNpZGUgYXR0cmlidXRlcy5cbiAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1L3NpbmdsZS1wYWdlLmh0bWwjcHJlcHJvY2Vzc2luZy10aGUtaW5wdXQtc3RyZWFtXG4gIC8vIElmIHdlIGhhdmUgYSBtaXNtYXRjaCwgaXQgbWlnaHQgYmUgY2F1c2VkIGJ5IHRoYXQuXG4gIC8vIFdlIHdpbGwgc3RpbGwgcGF0Y2ggdXAgaW4gdGhpcyBjYXNlIGJ1dCBub3QgZmlyZSB0aGUgd2FybmluZy5cbiAgdmFyIE5PUk1BTElaRV9ORVdMSU5FU19SRUdFWCA9IC9cXHJcXG4/L2c7XG4gIHZhciBOT1JNQUxJWkVfTlVMTF9BTkRfUkVQTEFDRU1FTlRfUkVHRVggPSAvXFx1MDAwMHxcXHVGRkZEL2c7XG5cbiAgbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlID0gZnVuY3Rpb24gKG1hcmt1cCkge1xuICAgIHZhciBtYXJrdXBTdHJpbmcgPSB0eXBlb2YgbWFya3VwID09PSAnc3RyaW5nJyA/IG1hcmt1cCA6ICcnICsgbWFya3VwO1xuICAgIHJldHVybiBtYXJrdXBTdHJpbmcucmVwbGFjZShOT1JNQUxJWkVfTkVXTElORVNfUkVHRVgsICdcXG4nKS5yZXBsYWNlKE5PUk1BTElaRV9OVUxMX0FORF9SRVBMQUNFTUVOVF9SRUdFWCwgJycpO1xuICB9O1xuXG4gIHdhcm5Gb3JUZXh0RGlmZmVyZW5jZSA9IGZ1bmN0aW9uIChzZXJ2ZXJUZXh0LCBjbGllbnRUZXh0KSB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBub3JtYWxpemVkQ2xpZW50VGV4dCA9IG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZShjbGllbnRUZXh0KTtcbiAgICB2YXIgbm9ybWFsaXplZFNlcnZlclRleHQgPSBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUoc2VydmVyVGV4dCk7XG4gICAgaWYgKG5vcm1hbGl6ZWRTZXJ2ZXJUZXh0ID09PSBub3JtYWxpemVkQ2xpZW50VGV4dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG4gICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnVGV4dCBjb250ZW50IGRpZCBub3QgbWF0Y2guIFNlcnZlcjogXCIlc1wiIENsaWVudDogXCIlc1wiJywgbm9ybWFsaXplZFNlcnZlclRleHQsIG5vcm1hbGl6ZWRDbGllbnRUZXh0KTtcbiAgfTtcblxuICB3YXJuRm9yUHJvcERpZmZlcmVuY2UgPSBmdW5jdGlvbiAocHJvcE5hbWUsIHNlcnZlclZhbHVlLCBjbGllbnRWYWx1ZSkge1xuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgbm9ybWFsaXplZENsaWVudFZhbHVlID0gbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKGNsaWVudFZhbHVlKTtcbiAgICB2YXIgbm9ybWFsaXplZFNlcnZlclZhbHVlID0gbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKHNlcnZlclZhbHVlKTtcbiAgICBpZiAobm9ybWFsaXplZFNlcnZlclZhbHVlID09PSBub3JtYWxpemVkQ2xpZW50VmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ1Byb3AgYCVzYCBkaWQgbm90IG1hdGNoLiBTZXJ2ZXI6ICVzIENsaWVudDogJXMnLCBwcm9wTmFtZSwgSlNPTi5zdHJpbmdpZnkobm9ybWFsaXplZFNlcnZlclZhbHVlKSwgSlNPTi5zdHJpbmdpZnkobm9ybWFsaXplZENsaWVudFZhbHVlKSk7XG4gIH07XG5cbiAgd2FybkZvckV4dHJhQXR0cmlidXRlcyA9IGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lcykge1xuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG4gICAgdmFyIG5hbWVzID0gW107XG4gICAgYXR0cmlidXRlTmFtZXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgbmFtZXMucHVzaChuYW1lKTtcbiAgICB9KTtcbiAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdFeHRyYSBhdHRyaWJ1dGVzIGZyb20gdGhlIHNlcnZlcjogJXMnLCBuYW1lcyk7XG4gIH07XG5cbiAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gKHJlZ2lzdHJhdGlvbk5hbWUsIGxpc3RlbmVyKSB7XG4gICAgaWYgKGxpc3RlbmVyID09PSBmYWxzZSkge1xuICAgICAgd2FybmluZyQxKGZhbHNlLCAnRXhwZWN0ZWQgYCVzYCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLCBpbnN0ZWFkIGdvdCBgZmFsc2VgLlxcblxcbicgKyAnSWYgeW91IHVzZWQgdG8gY29uZGl0aW9uYWxseSBvbWl0IGl0IHdpdGggJXM9e2NvbmRpdGlvbiAmJiB2YWx1ZX0sICcgKyAncGFzcyAlcz17Y29uZGl0aW9uID8gdmFsdWUgOiB1bmRlZmluZWR9IGluc3RlYWQuJywgcmVnaXN0cmF0aW9uTmFtZSwgcmVnaXN0cmF0aW9uTmFtZSwgcmVnaXN0cmF0aW9uTmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdhcm5pbmckMShmYWxzZSwgJ0V4cGVjdGVkIGAlc2AgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbiwgaW5zdGVhZCBnb3QgYSB2YWx1ZSBvZiBgJXNgIHR5cGUuJywgcmVnaXN0cmF0aW9uTmFtZSwgdHlwZW9mIGxpc3RlbmVyKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gUGFyc2UgdGhlIEhUTUwgYW5kIHJlYWQgaXQgYmFjayB0byBub3JtYWxpemUgdGhlIEhUTUwgc3RyaW5nIHNvIHRoYXQgaXRcbiAgLy8gY2FuIGJlIHVzZWQgZm9yIGNvbXBhcmlzb24uXG4gIG5vcm1hbGl6ZUhUTUwgPSBmdW5jdGlvbiAocGFyZW50LCBodG1sKSB7XG4gICAgLy8gV2UgY291bGQgaGF2ZSBjcmVhdGVkIGEgc2VwYXJhdGUgZG9jdW1lbnQgaGVyZSB0byBhdm9pZFxuICAgIC8vIHJlLWluaXRpYWxpemluZyBjdXN0b20gZWxlbWVudHMgaWYgdGhleSBleGlzdC4gQnV0IHRoaXMgYnJlYWtzXG4gICAgLy8gaG93IDxub3NjcmlwdD4gaXMgYmVpbmcgaGFuZGxlZC4gU28gd2UgdXNlIHRoZSBzYW1lIGRvY3VtZW50LlxuICAgIC8vIFNlZSB0aGUgZGlzY3Vzc2lvbiBpbiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8xMTE1Ny5cbiAgICB2YXIgdGVzdEVsZW1lbnQgPSBwYXJlbnQubmFtZXNwYWNlVVJJID09PSBIVE1MX05BTUVTUEFDRSA/IHBhcmVudC5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocGFyZW50LnRhZ05hbWUpIDogcGFyZW50Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHBhcmVudC5uYW1lc3BhY2VVUkksIHBhcmVudC50YWdOYW1lKTtcbiAgICB0ZXN0RWxlbWVudC5pbm5lckhUTUwgPSBodG1sO1xuICAgIHJldHVybiB0ZXN0RWxlbWVudC5pbm5lckhUTUw7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGVuc3VyZUxpc3RlbmluZ1RvKHJvb3RDb250YWluZXJFbGVtZW50LCByZWdpc3RyYXRpb25OYW1lKSB7XG4gIHZhciBpc0RvY3VtZW50T3JGcmFnbWVudCA9IHJvb3RDb250YWluZXJFbGVtZW50Lm5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFIHx8IHJvb3RDb250YWluZXJFbGVtZW50Lm5vZGVUeXBlID09PSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFO1xuICB2YXIgZG9jID0gaXNEb2N1bWVudE9yRnJhZ21lbnQgPyByb290Q29udGFpbmVyRWxlbWVudCA6IHJvb3RDb250YWluZXJFbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG4gIGxpc3RlblRvKHJlZ2lzdHJhdGlvbk5hbWUsIGRvYyk7XG59XG5cbmZ1bmN0aW9uIGdldE93bmVyRG9jdW1lbnRGcm9tUm9vdENvbnRhaW5lcihyb290Q29udGFpbmVyRWxlbWVudCkge1xuICByZXR1cm4gcm9vdENvbnRhaW5lckVsZW1lbnQubm9kZVR5cGUgPT09IERPQ1VNRU5UX05PREUgPyByb290Q29udGFpbmVyRWxlbWVudCA6IHJvb3RDb250YWluZXJFbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG59XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5mdW5jdGlvbiB0cmFwQ2xpY2tPbk5vbkludGVyYWN0aXZlRWxlbWVudChub2RlKSB7XG4gIC8vIE1vYmlsZSBTYWZhcmkgZG9lcyBub3QgZmlyZSBwcm9wZXJseSBidWJibGUgY2xpY2sgZXZlbnRzIG9uXG4gIC8vIG5vbi1pbnRlcmFjdGl2ZSBlbGVtZW50cywgd2hpY2ggbWVhbnMgZGVsZWdhdGVkIGNsaWNrIGxpc3RlbmVycyBkbyBub3RcbiAgLy8gZmlyZS4gVGhlIHdvcmthcm91bmQgZm9yIHRoaXMgYnVnIGludm9sdmVzIGF0dGFjaGluZyBhbiBlbXB0eSBjbGlja1xuICAvLyBsaXN0ZW5lciBvbiB0aGUgdGFyZ2V0IG5vZGUuXG4gIC8vIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvYmxvZy9hcmNoaXZlcy8yMDEwLzA5L2NsaWNrX2V2ZW50X2RlbC5odG1sXG4gIC8vIEp1c3Qgc2V0IGl0IHVzaW5nIHRoZSBvbmNsaWNrIHByb3BlcnR5IHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBtYW5hZ2UgYW55XG4gIC8vIGJvb2trZWVwaW5nIGZvciBpdC4gTm90IHN1cmUgaWYgd2UgbmVlZCB0byBjbGVhciBpdCB3aGVuIHRoZSBsaXN0ZW5lciBpc1xuICAvLyByZW1vdmVkLlxuICAvLyBUT0RPOiBPbmx5IGRvIHRoaXMgZm9yIHRoZSByZWxldmFudCBTYWZhcmlzIG1heWJlP1xuICBub2RlLm9uY2xpY2sgPSBub29wO1xufVxuXG5mdW5jdGlvbiBzZXRJbml0aWFsRE9NUHJvcGVydGllcyh0YWcsIGRvbUVsZW1lbnQsIHJvb3RDb250YWluZXJFbGVtZW50LCBuZXh0UHJvcHMsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gIGZvciAodmFyIHByb3BLZXkgaW4gbmV4dFByb3BzKSB7XG4gICAgaWYgKCFuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB2YXIgbmV4dFByb3AgPSBuZXh0UHJvcHNbcHJvcEtleV07XG4gICAgaWYgKHByb3BLZXkgPT09IFNUWUxFJDEpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKG5leHRQcm9wKSB7XG4gICAgICAgICAgLy8gRnJlZXplIHRoZSBuZXh0IHN0eWxlIG9iamVjdCBzbyB0aGF0IHdlIGNhbiBhc3N1bWUgaXQgd29uJ3QgYmVcbiAgICAgICAgICAvLyBtdXRhdGVkLiBXZSBoYXZlIGFscmVhZHkgd2FybmVkIGZvciB0aGlzIGluIHRoZSBwYXN0LlxuICAgICAgICAgIE9iamVjdC5mcmVlemUobmV4dFByb3ApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBSZWxpZXMgb24gYHVwZGF0ZVN0eWxlc0J5SURgIG5vdCBtdXRhdGluZyBgc3R5bGVVcGRhdGVzYC5cbiAgICAgIHNldFZhbHVlRm9yU3R5bGVzKGRvbUVsZW1lbnQsIG5leHRQcm9wKTtcbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IERBTkdFUk9VU0xZX1NFVF9JTk5FUl9IVE1MKSB7XG4gICAgICB2YXIgbmV4dEh0bWwgPSBuZXh0UHJvcCA/IG5leHRQcm9wW0hUTUxdIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKG5leHRIdG1sICE9IG51bGwpIHtcbiAgICAgICAgc2V0SW5uZXJIVE1MKGRvbUVsZW1lbnQsIG5leHRIdG1sKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IENISUxEUkVOKSB7XG4gICAgICBpZiAodHlwZW9mIG5leHRQcm9wID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBBdm9pZCBzZXR0aW5nIGluaXRpYWwgdGV4dENvbnRlbnQgd2hlbiB0aGUgdGV4dCBpcyBlbXB0eS4gSW4gSUUxMSBzZXR0aW5nXG4gICAgICAgIC8vIHRleHRDb250ZW50IG9uIGEgPHRleHRhcmVhPiB3aWxsIGNhdXNlIHRoZSBwbGFjZWhvbGRlciB0byBub3RcbiAgICAgICAgLy8gc2hvdyB3aXRoaW4gdGhlIDx0ZXh0YXJlYT4gdW50aWwgaXQgaGFzIGJlZW4gZm9jdXNlZCBhbmQgYmx1cnJlZCBhZ2Fpbi5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy82NzMxI2lzc3VlY29tbWVudC0yNTQ4NzQ1NTNcbiAgICAgICAgdmFyIGNhblNldFRleHRDb250ZW50ID0gdGFnICE9PSAndGV4dGFyZWEnIHx8IG5leHRQcm9wICE9PSAnJztcbiAgICAgICAgaWYgKGNhblNldFRleHRDb250ZW50KSB7XG4gICAgICAgICAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgbmV4dFByb3ApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgJycgKyBuZXh0UHJvcCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBTVVBQUkVTU19DT05URU5UX0VESVRBQkxFX1dBUk5JTkcgfHwgcHJvcEtleSA9PT0gU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMSkge1xuICAgICAgLy8gTm9vcFxuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gQVVUT0ZPQ1VTKSB7XG4gICAgICAvLyBXZSBwb2x5ZmlsbCBpdCBzZXBhcmF0ZWx5IG9uIHRoZSBjbGllbnQgZHVyaW5nIGNvbW1pdC5cbiAgICAgIC8vIFdlIGNvdWxkIGhhdmUgZXhjbHVkZWQgaXQgaW4gdGhlIHByb3BlcnR5IGxpc3QgaW5zdGVhZCBvZlxuICAgICAgLy8gYWRkaW5nIGEgc3BlY2lhbCBjYXNlIGhlcmUsIGJ1dCB0aGVuIGl0IHdvdWxkbid0IGJlIGVtaXR0ZWRcbiAgICAgIC8vIG9uIHNlcnZlciByZW5kZXJpbmcgKGJ1dCB3ZSAqZG8qIHdhbnQgdG8gZW1pdCBpdCBpbiBTU1IpLlxuICAgIH0gZWxzZSBpZiAocmVnaXN0cmF0aW9uTmFtZU1vZHVsZXMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgIGlmIChuZXh0UHJvcCAhPSBudWxsKSB7XG4gICAgICAgIGlmICh0cnVlICYmIHR5cGVvZiBuZXh0UHJvcCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihwcm9wS2V5LCBuZXh0UHJvcCk7XG4gICAgICAgIH1cbiAgICAgICAgZW5zdXJlTGlzdGVuaW5nVG8ocm9vdENvbnRhaW5lckVsZW1lbnQsIHByb3BLZXkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobmV4dFByb3AgIT0gbnVsbCkge1xuICAgICAgc2V0VmFsdWVGb3JQcm9wZXJ0eShkb21FbGVtZW50LCBwcm9wS2V5LCBuZXh0UHJvcCwgaXNDdXN0b21Db21wb25lbnRUYWcpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVET01Qcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHVwZGF0ZVBheWxvYWQsIHdhc0N1c3RvbUNvbXBvbmVudFRhZywgaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgLy8gVE9ETzogSGFuZGxlIHdhc0N1c3RvbUNvbXBvbmVudFRhZ1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHVwZGF0ZVBheWxvYWQubGVuZ3RoOyBpICs9IDIpIHtcbiAgICB2YXIgcHJvcEtleSA9IHVwZGF0ZVBheWxvYWRbaV07XG4gICAgdmFyIHByb3BWYWx1ZSA9IHVwZGF0ZVBheWxvYWRbaSArIDFdO1xuICAgIGlmIChwcm9wS2V5ID09PSBTVFlMRSQxKSB7XG4gICAgICBzZXRWYWx1ZUZvclN0eWxlcyhkb21FbGVtZW50LCBwcm9wVmFsdWUpO1xuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gREFOR0VST1VTTFlfU0VUX0lOTkVSX0hUTUwpIHtcbiAgICAgIHNldElubmVySFRNTChkb21FbGVtZW50LCBwcm9wVmFsdWUpO1xuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gQ0hJTERSRU4pIHtcbiAgICAgIHNldFRleHRDb250ZW50KGRvbUVsZW1lbnQsIHByb3BWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFZhbHVlRm9yUHJvcGVydHkoZG9tRWxlbWVudCwgcHJvcEtleSwgcHJvcFZhbHVlLCBpc0N1c3RvbUNvbXBvbmVudFRhZyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQodHlwZSwgcHJvcHMsIHJvb3RDb250YWluZXJFbGVtZW50LCBwYXJlbnROYW1lc3BhY2UpIHtcbiAgdmFyIGlzQ3VzdG9tQ29tcG9uZW50VGFnID0gdm9pZCAwO1xuXG4gIC8vIFdlIGNyZWF0ZSB0YWdzIGluIHRoZSBuYW1lc3BhY2Ugb2YgdGhlaXIgcGFyZW50IGNvbnRhaW5lciwgZXhjZXB0IEhUTUxcbiAgLy8gdGFncyBnZXQgbm8gbmFtZXNwYWNlLlxuICB2YXIgb3duZXJEb2N1bWVudCA9IGdldE93bmVyRG9jdW1lbnRGcm9tUm9vdENvbnRhaW5lcihyb290Q29udGFpbmVyRWxlbWVudCk7XG4gIHZhciBkb21FbGVtZW50ID0gdm9pZCAwO1xuICB2YXIgbmFtZXNwYWNlVVJJID0gcGFyZW50TmFtZXNwYWNlO1xuICBpZiAobmFtZXNwYWNlVVJJID09PSBIVE1MX05BTUVTUEFDRSkge1xuICAgIG5hbWVzcGFjZVVSSSA9IGdldEludHJpbnNpY05hbWVzcGFjZSh0eXBlKTtcbiAgfVxuICBpZiAobmFtZXNwYWNlVVJJID09PSBIVE1MX05BTUVTUEFDRSkge1xuICAgIHtcbiAgICAgIGlzQ3VzdG9tQ29tcG9uZW50VGFnID0gaXNDdXN0b21Db21wb25lbnQodHlwZSwgcHJvcHMpO1xuICAgICAgLy8gU2hvdWxkIHRoaXMgY2hlY2sgYmUgZ2F0ZWQgYnkgcGFyZW50IG5hbWVzcGFjZT8gTm90IHN1cmUgd2Ugd2FudCB0b1xuICAgICAgLy8gYWxsb3cgPFNWRz4gb3IgPG1BVEg+LlxuICAgICAgIShpc0N1c3RvbUNvbXBvbmVudFRhZyB8fCB0eXBlID09PSB0eXBlLnRvTG93ZXJDYXNlKCkpID8gd2FybmluZyQxKGZhbHNlLCAnPCVzIC8+IGlzIHVzaW5nIGluY29ycmVjdCBjYXNpbmcuICcgKyAnVXNlIFBhc2NhbENhc2UgZm9yIFJlYWN0IGNvbXBvbmVudHMsICcgKyAnb3IgbG93ZXJjYXNlIGZvciBIVE1MIGVsZW1lbnRzLicsIHR5cGUpIDogdm9pZCAwO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnc2NyaXB0Jykge1xuICAgICAgLy8gQ3JlYXRlIHRoZSBzY3JpcHQgdmlhIC5pbm5lckhUTUwgc28gaXRzIFwicGFyc2VyLWluc2VydGVkXCIgZmxhZyBpc1xuICAgICAgLy8gc2V0IHRvIHRydWUgYW5kIGl0IGRvZXMgbm90IGV4ZWN1dGVcbiAgICAgIHZhciBkaXYgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgZGl2LmlubmVySFRNTCA9ICc8c2NyaXB0PjwnICsgJy9zY3JpcHQ+JzsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgLy8gVGhpcyBpcyBndWFyYW50ZWVkIHRvIHlpZWxkIGEgc2NyaXB0IGVsZW1lbnQuXG4gICAgICB2YXIgZmlyc3RDaGlsZCA9IGRpdi5maXJzdENoaWxkO1xuICAgICAgZG9tRWxlbWVudCA9IGRpdi5yZW1vdmVDaGlsZChmaXJzdENoaWxkKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBwcm9wcy5pcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vICRGbG93SXNzdWUgYGNyZWF0ZUVsZW1lbnRgIHNob3VsZCBiZSB1cGRhdGVkIGZvciBXZWIgQ29tcG9uZW50c1xuICAgICAgZG9tRWxlbWVudCA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlLCB7IGlzOiBwcm9wcy5pcyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2VwYXJhdGUgZWxzZSBicmFuY2ggaW5zdGVhZCBvZiB1c2luZyBgcHJvcHMuaXMgfHwgdW5kZWZpbmVkYCBhYm92ZSBiZWNhdXNlIG9mIGEgRmlyZWZveCBidWcuXG4gICAgICAvLyBTZWUgZGlzY3Vzc2lvbiBpbiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC82ODk2XG4gICAgICAvLyBhbmQgZGlzY3Vzc2lvbiBpbiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc2MjQwXG4gICAgICBkb21FbGVtZW50ID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KHR5cGUpO1xuICAgICAgLy8gTm9ybWFsbHkgYXR0cmlidXRlcyBhcmUgYXNzaWduZWQgaW4gYHNldEluaXRpYWxET01Qcm9wZXJ0aWVzYCwgaG93ZXZlciB0aGUgYG11bHRpcGxlYCBhbmQgYHNpemVgXG4gICAgICAvLyBhdHRyaWJ1dGVzIG9uIGBzZWxlY3RgcyBuZWVkcyB0byBiZSBhZGRlZCBiZWZvcmUgYG9wdGlvbmBzIGFyZSBpbnNlcnRlZC5cbiAgICAgIC8vIFRoaXMgcHJldmVudHM6XG4gICAgICAvLyAtIGEgYnVnIHdoZXJlIHRoZSBgc2VsZWN0YCBkb2VzIG5vdCBzY3JvbGwgdG8gdGhlIGNvcnJlY3Qgb3B0aW9uIGJlY2F1c2Ugc2luZ3VsYXJcbiAgICAgIC8vICBgc2VsZWN0YCBlbGVtZW50cyBhdXRvbWF0aWNhbGx5IHBpY2sgdGhlIGZpcnN0IGl0ZW0gIzEzMjIyXG4gICAgICAvLyAtIGEgYnVnIHdoZXJlIHRoZSBgc2VsZWN0YCBzZXQgdGhlIGZpcnN0IGl0ZW0gYXMgc2VsZWN0ZWQgZGVzcGl0ZSB0aGUgYHNpemVgIGF0dHJpYnV0ZSAjMTQyMzlcbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzMjIyXG4gICAgICAvLyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNDIzOVxuICAgICAgaWYgKHR5cGUgPT09ICdzZWxlY3QnKSB7XG4gICAgICAgIHZhciBub2RlID0gZG9tRWxlbWVudDtcbiAgICAgICAgaWYgKHByb3BzLm11bHRpcGxlKSB7XG4gICAgICAgICAgbm9kZS5tdWx0aXBsZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvcHMuc2l6ZSkge1xuICAgICAgICAgIC8vIFNldHRpbmcgYSBzaXplIGdyZWF0ZXIgdGhhbiAxIGNhdXNlcyBhIHNlbGVjdCB0byBiZWhhdmUgbGlrZSBgbXVsdGlwbGU9dHJ1ZWAsIHdoZXJlXG4gICAgICAgICAgLy8gaXQgaXMgcG9zc2libGUgdGhhdCBubyBvcHRpb24gaXMgc2VsZWN0ZWQuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBUaGlzIGlzIG9ubHkgbmVjZXNzYXJ5IHdoZW4gYSBzZWxlY3QgaW4gXCJzaW5nbGUgc2VsZWN0aW9uIG1vZGVcIi5cbiAgICAgICAgICBub2RlLnNpemUgPSBwcm9wcy5zaXplO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGRvbUVsZW1lbnQgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2VVUkksIHR5cGUpO1xuICB9XG5cbiAge1xuICAgIGlmIChuYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAgICBpZiAoIWlzQ3VzdG9tQ29tcG9uZW50VGFnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkb21FbGVtZW50KSA9PT0gJ1tvYmplY3QgSFRNTFVua25vd25FbGVtZW50XScgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh3YXJuZWRVbmtub3duVGFncywgdHlwZSkpIHtcbiAgICAgICAgd2FybmVkVW5rbm93blRhZ3NbdHlwZV0gPSB0cnVlO1xuICAgICAgICB3YXJuaW5nJDEoZmFsc2UsICdUaGUgdGFnIDwlcz4gaXMgdW5yZWNvZ25pemVkIGluIHRoaXMgYnJvd3Nlci4gJyArICdJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgUmVhY3QgY29tcG9uZW50LCBzdGFydCBpdHMgbmFtZSB3aXRoICcgKyAnYW4gdXBwZXJjYXNlIGxldHRlci4nLCB0eXBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZG9tRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlVGV4dE5vZGUodGV4dCwgcm9vdENvbnRhaW5lckVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldE93bmVyRG9jdW1lbnRGcm9tUm9vdENvbnRhaW5lcihyb290Q29udGFpbmVyRWxlbWVudCkuY3JlYXRlVGV4dE5vZGUodGV4dCk7XG59XG5cbmZ1bmN0aW9uIHNldEluaXRpYWxQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHRhZywgcmF3UHJvcHMsIHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIHZhciBpc0N1c3RvbUNvbXBvbmVudFRhZyA9IGlzQ3VzdG9tQ29tcG9uZW50KHRhZywgcmF3UHJvcHMpO1xuICB7XG4gICAgdmFsaWRhdGVQcm9wZXJ0aWVzSW5EZXZlbG9wbWVudCh0YWcsIHJhd1Byb3BzKTtcbiAgICBpZiAoaXNDdXN0b21Db21wb25lbnRUYWcgJiYgIWRpZFdhcm5TaGFkeURPTSAmJiBkb21FbGVtZW50LnNoYWR5Um9vdCkge1xuICAgICAgd2FybmluZyQxKGZhbHNlLCAnJXMgaXMgdXNpbmcgc2hhZHkgRE9NLiBVc2luZyBzaGFkeSBET00gd2l0aCBSZWFjdCBjYW4gJyArICdjYXVzZSB0aGluZ3MgdG8gYnJlYWsgc3VidGx5LicsIGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCkgfHwgJ0EgY29tcG9uZW50Jyk7XG4gICAgICBkaWRXYXJuU2hhZHlET00gPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRPRE86IE1ha2Ugc3VyZSB0aGF0IHdlIGNoZWNrIGlzTW91bnRlZCBiZWZvcmUgZmlyaW5nIGFueSBvZiB0aGVzZSBldmVudHMuXG4gIHZhciBwcm9wcyA9IHZvaWQgMDtcbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdpZnJhbWUnOlxuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICB0cmFwQnViYmxlZEV2ZW50KFRPUF9MT0FELCBkb21FbGVtZW50KTtcbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd2aWRlbyc6XG4gICAgY2FzZSAnYXVkaW8nOlxuICAgICAgLy8gQ3JlYXRlIGxpc3RlbmVyIGZvciBlYWNoIG1lZGlhIGV2ZW50XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lZGlhRXZlbnRUeXBlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0cmFwQnViYmxlZEV2ZW50KG1lZGlhRXZlbnRUeXBlc1tpXSwgZG9tRWxlbWVudCk7XG4gICAgICB9XG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnc291cmNlJzpcbiAgICAgIHRyYXBCdWJibGVkRXZlbnQoVE9QX0VSUk9SLCBkb21FbGVtZW50KTtcbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdpbWcnOlxuICAgIGNhc2UgJ2ltYWdlJzpcbiAgICBjYXNlICdsaW5rJzpcbiAgICAgIHRyYXBCdWJibGVkRXZlbnQoVE9QX0VSUk9SLCBkb21FbGVtZW50KTtcbiAgICAgIHRyYXBCdWJibGVkRXZlbnQoVE9QX0xPQUQsIGRvbUVsZW1lbnQpO1xuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2Zvcm0nOlxuICAgICAgdHJhcEJ1YmJsZWRFdmVudChUT1BfUkVTRVQsIGRvbUVsZW1lbnQpO1xuICAgICAgdHJhcEJ1YmJsZWRFdmVudChUT1BfU1VCTUlULCBkb21FbGVtZW50KTtcbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdkZXRhaWxzJzpcbiAgICAgIHRyYXBCdWJibGVkRXZlbnQoVE9QX1RPR0dMRSwgZG9tRWxlbWVudCk7XG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgaW5pdFdyYXBwZXJTdGF0ZShkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBwcm9wcyA9IGdldEhvc3RQcm9wcyhkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICB0cmFwQnViYmxlZEV2ZW50KFRPUF9JTlZBTElELCBkb21FbGVtZW50KTtcbiAgICAgIC8vIEZvciBjb250cm9sbGVkIGNvbXBvbmVudHMgd2UgYWx3YXlzIG5lZWQgdG8gZW5zdXJlIHdlJ3JlIGxpc3RlbmluZ1xuICAgICAgLy8gdG8gb25DaGFuZ2UuIEV2ZW4gaWYgdGhlcmUgaXMgbm8gbGlzdGVuZXIuXG4gICAgICBlbnN1cmVMaXN0ZW5pbmdUbyhyb290Q29udGFpbmVyRWxlbWVudCwgJ29uQ2hhbmdlJyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdvcHRpb24nOlxuICAgICAgdmFsaWRhdGVQcm9wcyhkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBwcm9wcyA9IGdldEhvc3RQcm9wcyQxKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICBpbml0V3JhcHBlclN0YXRlJDEoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgcHJvcHMgPSBnZXRIb3N0UHJvcHMkMihkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICB0cmFwQnViYmxlZEV2ZW50KFRPUF9JTlZBTElELCBkb21FbGVtZW50KTtcbiAgICAgIC8vIEZvciBjb250cm9sbGVkIGNvbXBvbmVudHMgd2UgYWx3YXlzIG5lZWQgdG8gZW5zdXJlIHdlJ3JlIGxpc3RlbmluZ1xuICAgICAgLy8gdG8gb25DaGFuZ2UuIEV2ZW4gaWYgdGhlcmUgaXMgbm8gbGlzdGVuZXIuXG4gICAgICBlbnN1cmVMaXN0ZW5pbmdUbyhyb290Q29udGFpbmVyRWxlbWVudCwgJ29uQ2hhbmdlJyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICBpbml0V3JhcHBlclN0YXRlJDIoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgcHJvcHMgPSBnZXRIb3N0UHJvcHMkMyhkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICB0cmFwQnViYmxlZEV2ZW50KFRPUF9JTlZBTElELCBkb21FbGVtZW50KTtcbiAgICAgIC8vIEZvciBjb250cm9sbGVkIGNvbXBvbmVudHMgd2UgYWx3YXlzIG5lZWQgdG8gZW5zdXJlIHdlJ3JlIGxpc3RlbmluZ1xuICAgICAgLy8gdG8gb25DaGFuZ2UuIEV2ZW4gaWYgdGhlcmUgaXMgbm8gbGlzdGVuZXIuXG4gICAgICBlbnN1cmVMaXN0ZW5pbmdUbyhyb290Q29udGFpbmVyRWxlbWVudCwgJ29uQ2hhbmdlJyk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgfVxuXG4gIGFzc2VydFZhbGlkUHJvcHModGFnLCBwcm9wcyk7XG5cbiAgc2V0SW5pdGlhbERPTVByb3BlcnRpZXModGFnLCBkb21FbGVtZW50LCByb290Q29udGFpbmVyRWxlbWVudCwgcHJvcHMsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKTtcblxuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIC8vIFRPRE86IE1ha2Ugc3VyZSB3ZSBjaGVjayBpZiB0aGlzIGlzIHN0aWxsIHVubW91bnRlZCBvciBkbyBhbnkgY2xlYW5cbiAgICAgIC8vIHVwIG5lY2Vzc2FyeSBzaW5jZSB3ZSBuZXZlciBzdG9wIHRyYWNraW5nIGFueW1vcmUuXG4gICAgICB0cmFjayhkb21FbGVtZW50KTtcbiAgICAgIHBvc3RNb3VudFdyYXBwZXIoZG9tRWxlbWVudCwgcmF3UHJvcHMsIGZhbHNlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIC8vIFRPRE86IE1ha2Ugc3VyZSB3ZSBjaGVjayBpZiB0aGlzIGlzIHN0aWxsIHVubW91bnRlZCBvciBkbyBhbnkgY2xlYW5cbiAgICAgIC8vIHVwIG5lY2Vzc2FyeSBzaW5jZSB3ZSBuZXZlciBzdG9wIHRyYWNraW5nIGFueW1vcmUuXG4gICAgICB0cmFjayhkb21FbGVtZW50KTtcbiAgICAgIHBvc3RNb3VudFdyYXBwZXIkMyhkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdvcHRpb24nOlxuICAgICAgcG9zdE1vdW50V3JhcHBlciQxKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICBwb3N0TW91bnRXcmFwcGVyJDIoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGlmICh0eXBlb2YgcHJvcHMub25DbGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBUT0RPOiBUaGlzIGNhc3QgbWF5IG5vdCBiZSBzb3VuZCBmb3IgU1ZHLCBNYXRoTUwgb3IgY3VzdG9tIGVsZW1lbnRzLlxuICAgICAgICB0cmFwQ2xpY2tPbk5vbkludGVyYWN0aXZlRWxlbWVudChkb21FbGVtZW50KTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICB9XG59XG5cbi8vIENhbGN1bGF0ZSB0aGUgZGlmZiBiZXR3ZWVuIHRoZSB0d28gb2JqZWN0cy5cbmZ1bmN0aW9uIGRpZmZQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHRhZywgbGFzdFJhd1Byb3BzLCBuZXh0UmF3UHJvcHMsIHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIHtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50KHRhZywgbmV4dFJhd1Byb3BzKTtcbiAgfVxuXG4gIHZhciB1cGRhdGVQYXlsb2FkID0gbnVsbDtcblxuICB2YXIgbGFzdFByb3BzID0gdm9pZCAwO1xuICB2YXIgbmV4dFByb3BzID0gdm9pZCAwO1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIGxhc3RQcm9wcyA9IGdldEhvc3RQcm9wcyhkb21FbGVtZW50LCBsYXN0UmF3UHJvcHMpO1xuICAgICAgbmV4dFByb3BzID0gZ2V0SG9zdFByb3BzKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICBicmVhaztcbiAgICBjYXNlICdvcHRpb24nOlxuICAgICAgbGFzdFByb3BzID0gZ2V0SG9zdFByb3BzJDEoZG9tRWxlbWVudCwgbGFzdFJhd1Byb3BzKTtcbiAgICAgIG5leHRQcm9wcyA9IGdldEhvc3RQcm9wcyQxKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgbGFzdFByb3BzID0gZ2V0SG9zdFByb3BzJDIoZG9tRWxlbWVudCwgbGFzdFJhd1Byb3BzKTtcbiAgICAgIG5leHRQcm9wcyA9IGdldEhvc3RQcm9wcyQyKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICBsYXN0UHJvcHMgPSBnZXRIb3N0UHJvcHMkMyhkb21FbGVtZW50LCBsYXN0UmF3UHJvcHMpO1xuICAgICAgbmV4dFByb3BzID0gZ2V0SG9zdFByb3BzJDMoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBsYXN0UHJvcHMgPSBsYXN0UmF3UHJvcHM7XG4gICAgICBuZXh0UHJvcHMgPSBuZXh0UmF3UHJvcHM7XG4gICAgICBpZiAodHlwZW9mIGxhc3RQcm9wcy5vbkNsaWNrICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBuZXh0UHJvcHMub25DbGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBUT0RPOiBUaGlzIGNhc3QgbWF5IG5vdCBiZSBzb3VuZCBmb3IgU1ZHLCBNYXRoTUwgb3IgY3VzdG9tIGVsZW1lbnRzLlxuICAgICAgICB0cmFwQ2xpY2tPbk5vbkludGVyYWN0aXZlRWxlbWVudChkb21FbGVtZW50KTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgYXNzZXJ0VmFsaWRQcm9wcyh0YWcsIG5leHRQcm9wcyk7XG5cbiAgdmFyIHByb3BLZXkgPSB2b2lkIDA7XG4gIHZhciBzdHlsZU5hbWUgPSB2b2lkIDA7XG4gIHZhciBzdHlsZVVwZGF0ZXMgPSBudWxsO1xuICBmb3IgKHByb3BLZXkgaW4gbGFzdFByb3BzKSB7XG4gICAgaWYgKG5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSB8fCAhbGFzdFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpIHx8IGxhc3RQcm9wc1twcm9wS2V5XSA9PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHByb3BLZXkgPT09IFNUWUxFJDEpIHtcbiAgICAgIHZhciBsYXN0U3R5bGUgPSBsYXN0UHJvcHNbcHJvcEtleV07XG4gICAgICBmb3IgKHN0eWxlTmFtZSBpbiBsYXN0U3R5bGUpIHtcbiAgICAgICAgaWYgKGxhc3RTdHlsZS5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSB7XG4gICAgICAgICAgaWYgKCFzdHlsZVVwZGF0ZXMpIHtcbiAgICAgICAgICAgIHN0eWxlVXBkYXRlcyA9IHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdHlsZVVwZGF0ZXNbc3R5bGVOYW1lXSA9ICcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBEQU5HRVJPVVNMWV9TRVRfSU5ORVJfSFRNTCB8fCBwcm9wS2V5ID09PSBDSElMRFJFTikge1xuICAgICAgLy8gTm9vcC4gVGhpcyBpcyBoYW5kbGVkIGJ5IHRoZSBjbGVhciB0ZXh0IG1lY2hhbmlzbS5cbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IFNVUFBSRVNTX0NPTlRFTlRfRURJVEFCTEVfV0FSTklORyB8fCBwcm9wS2V5ID09PSBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxKSB7XG4gICAgICAvLyBOb29wXG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBBVVRPRk9DVVMpIHtcbiAgICAgIC8vIE5vb3AuIEl0IGRvZXNuJ3Qgd29yayBvbiB1cGRhdGVzIGFueXdheS5cbiAgICB9IGVsc2UgaWYgKHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlLiBJZiBhbnkgbGlzdGVuZXIgdXBkYXRlcyB3ZSBuZWVkIHRvIGVuc3VyZVxuICAgICAgLy8gdGhhdCB0aGUgXCJjdXJyZW50XCIgZmliZXIgcG9pbnRlciBnZXRzIHVwZGF0ZWQgc28gd2UgbmVlZCBhIGNvbW1pdFxuICAgICAgLy8gdG8gdXBkYXRlIHRoaXMgZWxlbWVudC5cbiAgICAgIGlmICghdXBkYXRlUGF5bG9hZCkge1xuICAgICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvciBhbGwgb3RoZXIgZGVsZXRlZCBwcm9wZXJ0aWVzIHdlIGFkZCBpdCB0byB0aGUgcXVldWUuIFdlIHVzZVxuICAgICAgLy8gdGhlIHdoaXRlbGlzdCBpbiB0aGUgY29tbWl0IHBoYXNlIGluc3RlYWQuXG4gICAgICAodXBkYXRlUGF5bG9hZCA9IHVwZGF0ZVBheWxvYWQgfHwgW10pLnB1c2gocHJvcEtleSwgbnVsbCk7XG4gICAgfVxuICB9XG4gIGZvciAocHJvcEtleSBpbiBuZXh0UHJvcHMpIHtcbiAgICB2YXIgbmV4dFByb3AgPSBuZXh0UHJvcHNbcHJvcEtleV07XG4gICAgdmFyIGxhc3RQcm9wID0gbGFzdFByb3BzICE9IG51bGwgPyBsYXN0UHJvcHNbcHJvcEtleV0gOiB1bmRlZmluZWQ7XG4gICAgaWYgKCFuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkgfHwgbmV4dFByb3AgPT09IGxhc3RQcm9wIHx8IG5leHRQcm9wID09IG51bGwgJiYgbGFzdFByb3AgPT0gbnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChwcm9wS2V5ID09PSBTVFlMRSQxKSB7XG4gICAgICB7XG4gICAgICAgIGlmIChuZXh0UHJvcCkge1xuICAgICAgICAgIC8vIEZyZWV6ZSB0aGUgbmV4dCBzdHlsZSBvYmplY3Qgc28gdGhhdCB3ZSBjYW4gYXNzdW1lIGl0IHdvbid0IGJlXG4gICAgICAgICAgLy8gbXV0YXRlZC4gV2UgaGF2ZSBhbHJlYWR5IHdhcm5lZCBmb3IgdGhpcyBpbiB0aGUgcGFzdC5cbiAgICAgICAgICBPYmplY3QuZnJlZXplKG5leHRQcm9wKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGxhc3RQcm9wKSB7XG4gICAgICAgIC8vIFVuc2V0IHN0eWxlcyBvbiBgbGFzdFByb3BgIGJ1dCBub3Qgb24gYG5leHRQcm9wYC5cbiAgICAgICAgZm9yIChzdHlsZU5hbWUgaW4gbGFzdFByb3ApIHtcbiAgICAgICAgICBpZiAobGFzdFByb3AuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSAmJiAoIW5leHRQcm9wIHx8ICFuZXh0UHJvcC5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSkge1xuICAgICAgICAgICAgaWYgKCFzdHlsZVVwZGF0ZXMpIHtcbiAgICAgICAgICAgICAgc3R5bGVVcGRhdGVzID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdHlsZVVwZGF0ZXNbc3R5bGVOYW1lXSA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBVcGRhdGUgc3R5bGVzIHRoYXQgY2hhbmdlZCBzaW5jZSBgbGFzdFByb3BgLlxuICAgICAgICBmb3IgKHN0eWxlTmFtZSBpbiBuZXh0UHJvcCkge1xuICAgICAgICAgIGlmIChuZXh0UHJvcC5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpICYmIGxhc3RQcm9wW3N0eWxlTmFtZV0gIT09IG5leHRQcm9wW3N0eWxlTmFtZV0pIHtcbiAgICAgICAgICAgIGlmICghc3R5bGVVcGRhdGVzKSB7XG4gICAgICAgICAgICAgIHN0eWxlVXBkYXRlcyA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3R5bGVVcGRhdGVzW3N0eWxlTmFtZV0gPSBuZXh0UHJvcFtzdHlsZU5hbWVdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVsaWVzIG9uIGB1cGRhdGVTdHlsZXNCeUlEYCBub3QgbXV0YXRpbmcgYHN0eWxlVXBkYXRlc2AuXG4gICAgICAgIGlmICghc3R5bGVVcGRhdGVzKSB7XG4gICAgICAgICAgaWYgKCF1cGRhdGVQYXlsb2FkKSB7XG4gICAgICAgICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICAgICAgfVxuICAgICAgICAgIHVwZGF0ZVBheWxvYWQucHVzaChwcm9wS2V5LCBzdHlsZVVwZGF0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIHN0eWxlVXBkYXRlcyA9IG5leHRQcm9wO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gREFOR0VST1VTTFlfU0VUX0lOTkVSX0hUTUwpIHtcbiAgICAgIHZhciBuZXh0SHRtbCA9IG5leHRQcm9wID8gbmV4dFByb3BbSFRNTF0gOiB1bmRlZmluZWQ7XG4gICAgICB2YXIgbGFzdEh0bWwgPSBsYXN0UHJvcCA/IGxhc3RQcm9wW0hUTUxdIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKG5leHRIdG1sICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGxhc3RIdG1sICE9PSBuZXh0SHRtbCkge1xuICAgICAgICAgICh1cGRhdGVQYXlsb2FkID0gdXBkYXRlUGF5bG9hZCB8fCBbXSkucHVzaChwcm9wS2V5LCAnJyArIG5leHRIdG1sKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVE9ETzogSXQgbWlnaHQgYmUgdG9vIGxhdGUgdG8gY2xlYXIgdGhpcyBpZiB3ZSBoYXZlIGNoaWxkcmVuXG4gICAgICAgIC8vIGluc2VydGVkIGFscmVhZHkuXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBDSElMRFJFTikge1xuICAgICAgaWYgKGxhc3RQcm9wICE9PSBuZXh0UHJvcCAmJiAodHlwZW9mIG5leHRQcm9wID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbmV4dFByb3AgPT09ICdudW1iZXInKSkge1xuICAgICAgICAodXBkYXRlUGF5bG9hZCA9IHVwZGF0ZVBheWxvYWQgfHwgW10pLnB1c2gocHJvcEtleSwgJycgKyBuZXh0UHJvcCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBTVVBQUkVTU19DT05URU5UX0VESVRBQkxFX1dBUk5JTkcgfHwgcHJvcEtleSA9PT0gU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMSkge1xuICAgICAgLy8gTm9vcFxuICAgIH0gZWxzZSBpZiAocmVnaXN0cmF0aW9uTmFtZU1vZHVsZXMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgIGlmIChuZXh0UHJvcCAhPSBudWxsKSB7XG4gICAgICAgIC8vIFdlIGVhZ2VybHkgbGlzdGVuIHRvIHRoaXMgZXZlbiB0aG91Z2ggd2UgaGF2ZW4ndCBjb21taXR0ZWQgeWV0LlxuICAgICAgICBpZiAodHJ1ZSAmJiB0eXBlb2YgbmV4dFByb3AgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIocHJvcEtleSwgbmV4dFByb3ApO1xuICAgICAgICB9XG4gICAgICAgIGVuc3VyZUxpc3RlbmluZ1RvKHJvb3RDb250YWluZXJFbGVtZW50LCBwcm9wS2V5KTtcbiAgICAgIH1cbiAgICAgIGlmICghdXBkYXRlUGF5bG9hZCAmJiBsYXN0UHJvcCAhPT0gbmV4dFByb3ApIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZS4gSWYgYW55IGxpc3RlbmVyIHVwZGF0ZXMgd2UgbmVlZCB0byBlbnN1cmVcbiAgICAgICAgLy8gdGhhdCB0aGUgXCJjdXJyZW50XCIgcHJvcHMgcG9pbnRlciBnZXRzIHVwZGF0ZWQgc28gd2UgbmVlZCBhIGNvbW1pdFxuICAgICAgICAvLyB0byB1cGRhdGUgdGhpcyBlbGVtZW50LlxuICAgICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvciBhbnkgb3RoZXIgcHJvcGVydHkgd2UgYWx3YXlzIGFkZCBpdCB0byB0aGUgcXVldWUgYW5kIHRoZW4gd2VcbiAgICAgIC8vIGZpbHRlciBpdCBvdXQgdXNpbmcgdGhlIHdoaXRlbGlzdCBkdXJpbmcgdGhlIGNvbW1pdC5cbiAgICAgICh1cGRhdGVQYXlsb2FkID0gdXBkYXRlUGF5bG9hZCB8fCBbXSkucHVzaChwcm9wS2V5LCBuZXh0UHJvcCk7XG4gICAgfVxuICB9XG4gIGlmIChzdHlsZVVwZGF0ZXMpIHtcbiAgICB7XG4gICAgICB2YWxpZGF0ZVNob3J0aGFuZFByb3BlcnR5Q29sbGlzaW9uSW5EZXYoc3R5bGVVcGRhdGVzLCBuZXh0UHJvcHNbU1RZTEUkMV0pO1xuICAgIH1cbiAgICAodXBkYXRlUGF5bG9hZCA9IHVwZGF0ZVBheWxvYWQgfHwgW10pLnB1c2goU1RZTEUkMSwgc3R5bGVVcGRhdGVzKTtcbiAgfVxuICByZXR1cm4gdXBkYXRlUGF5bG9hZDtcbn1cblxuLy8gQXBwbHkgdGhlIGRpZmYuXG5mdW5jdGlvbiB1cGRhdGVQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHVwZGF0ZVBheWxvYWQsIHRhZywgbGFzdFJhd1Byb3BzLCBuZXh0UmF3UHJvcHMpIHtcbiAgLy8gVXBkYXRlIGNoZWNrZWQgKmJlZm9yZSogbmFtZS5cbiAgLy8gSW4gdGhlIG1pZGRsZSBvZiBhbiB1cGRhdGUsIGl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgbXVsdGlwbGUgY2hlY2tlZC5cbiAgLy8gV2hlbiBhIGNoZWNrZWQgcmFkaW8gdHJpZXMgdG8gY2hhbmdlIG5hbWUsIGJyb3dzZXIgbWFrZXMgYW5vdGhlciByYWRpbydzIGNoZWNrZWQgZmFsc2UuXG4gIGlmICh0YWcgPT09ICdpbnB1dCcgJiYgbmV4dFJhd1Byb3BzLnR5cGUgPT09ICdyYWRpbycgJiYgbmV4dFJhd1Byb3BzLm5hbWUgIT0gbnVsbCkge1xuICAgIHVwZGF0ZUNoZWNrZWQoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgfVxuXG4gIHZhciB3YXNDdXN0b21Db21wb25lbnRUYWcgPSBpc0N1c3RvbUNvbXBvbmVudCh0YWcsIGxhc3RSYXdQcm9wcyk7XG4gIHZhciBpc0N1c3RvbUNvbXBvbmVudFRhZyA9IGlzQ3VzdG9tQ29tcG9uZW50KHRhZywgbmV4dFJhd1Byb3BzKTtcbiAgLy8gQXBwbHkgdGhlIGRpZmYuXG4gIHVwZGF0ZURPTVByb3BlcnRpZXMoZG9tRWxlbWVudCwgdXBkYXRlUGF5bG9hZCwgd2FzQ3VzdG9tQ29tcG9uZW50VGFnLCBpc0N1c3RvbUNvbXBvbmVudFRhZyk7XG5cbiAgLy8gVE9ETzogRW5zdXJlIHRoYXQgYW4gdXBkYXRlIGdldHMgc2NoZWR1bGVkIGlmIGFueSBvZiB0aGUgc3BlY2lhbCBwcm9wc1xuICAvLyBjaGFuZ2VkLlxuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIC8vIFVwZGF0ZSB0aGUgd3JhcHBlciBhcm91bmQgaW5wdXRzICphZnRlciogdXBkYXRpbmcgcHJvcHMuIFRoaXMgaGFzIHRvXG4gICAgICAvLyBoYXBwZW4gYWZ0ZXIgYHVwZGF0ZURPTVByb3BlcnRpZXNgLiBPdGhlcndpc2UgSFRNTDUgaW5wdXQgdmFsaWRhdGlvbnNcbiAgICAgIC8vIHJhaXNlIHdhcm5pbmdzIGFuZCBwcmV2ZW50IHRoZSBuZXcgdmFsdWUgZnJvbSBiZWluZyBhc3NpZ25lZC5cbiAgICAgIHVwZGF0ZVdyYXBwZXIoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIHVwZGF0ZVdyYXBwZXIkMShkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIC8vIDxzZWxlY3Q+IHZhbHVlIHVwZGF0ZSBuZWVkcyB0byBvY2N1ciBhZnRlciA8b3B0aW9uPiBjaGlsZHJlblxuICAgICAgLy8gcmVjb25jaWxpYXRpb25cbiAgICAgIHBvc3RVcGRhdGVXcmFwcGVyKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICBicmVhaztcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRQb3NzaWJsZVN0YW5kYXJkTmFtZShwcm9wTmFtZSkge1xuICB7XG4gICAgdmFyIGxvd2VyQ2FzZWROYW1lID0gcHJvcE5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoIXBvc3NpYmxlU3RhbmRhcmROYW1lcy5oYXNPd25Qcm9wZXJ0eShsb3dlckNhc2VkTmFtZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gcG9zc2libGVTdGFuZGFyZE5hbWVzW2xvd2VyQ2FzZWROYW1lXSB8fCBudWxsO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBkaWZmSHlkcmF0ZWRQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHRhZywgcmF3UHJvcHMsIHBhcmVudE5hbWVzcGFjZSwgcm9vdENvbnRhaW5lckVsZW1lbnQpIHtcbiAgdmFyIGlzQ3VzdG9tQ29tcG9uZW50VGFnID0gdm9pZCAwO1xuICB2YXIgZXh0cmFBdHRyaWJ1dGVOYW1lcyA9IHZvaWQgMDtcblxuICB7XG4gICAgc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nID0gcmF3UHJvcHNbU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMV0gPT09IHRydWU7XG4gICAgaXNDdXN0b21Db21wb25lbnRUYWcgPSBpc0N1c3RvbUNvbXBvbmVudCh0YWcsIHJhd1Byb3BzKTtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50KHRhZywgcmF3UHJvcHMpO1xuICAgIGlmIChpc0N1c3RvbUNvbXBvbmVudFRhZyAmJiAhZGlkV2FyblNoYWR5RE9NICYmIGRvbUVsZW1lbnQuc2hhZHlSb290KSB7XG4gICAgICB3YXJuaW5nJDEoZmFsc2UsICclcyBpcyB1c2luZyBzaGFkeSBET00uIFVzaW5nIHNoYWR5IERPTSB3aXRoIFJlYWN0IGNhbiAnICsgJ2NhdXNlIHRoaW5ncyB0byBicmVhayBzdWJ0bHkuJywgZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKSB8fCAnQSBjb21wb25lbnQnKTtcbiAgICAgIGRpZFdhcm5TaGFkeURPTSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETzogTWFrZSBzdXJlIHRoYXQgd2UgY2hlY2sgaXNNb3VudGVkIGJlZm9yZSBmaXJpbmcgYW55IG9mIHRoZXNlIGV2ZW50cy5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdpZnJhbWUnOlxuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICB0cmFwQnViYmxlZEV2ZW50KFRPUF9MT0FELCBkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3ZpZGVvJzpcbiAgICBjYXNlICdhdWRpbyc6XG4gICAgICAvLyBDcmVhdGUgbGlzdGVuZXIgZm9yIGVhY2ggbWVkaWEgZXZlbnRcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVkaWFFdmVudFR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRyYXBCdWJibGVkRXZlbnQobWVkaWFFdmVudFR5cGVzW2ldLCBkb21FbGVtZW50KTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3NvdXJjZSc6XG4gICAgICB0cmFwQnViYmxlZEV2ZW50KFRPUF9FUlJPUiwgZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdpbWcnOlxuICAgIGNhc2UgJ2ltYWdlJzpcbiAgICBjYXNlICdsaW5rJzpcbiAgICAgIHRyYXBCdWJibGVkRXZlbnQoVE9QX0VSUk9SLCBkb21FbGVtZW50KTtcbiAgICAgIHRyYXBCdWJibGVkRXZlbnQoVE9QX0xPQUQsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZm9ybSc6XG4gICAgICB0cmFwQnViYmxlZEV2ZW50KFRPUF9SRVNFVCwgZG9tRWxlbWVudCk7XG4gICAgICB0cmFwQnViYmxlZEV2ZW50KFRPUF9TVUJNSVQsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZGV0YWlscyc6XG4gICAgICB0cmFwQnViYmxlZEV2ZW50KFRPUF9UT0dHTEUsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgaW5pdFdyYXBwZXJTdGF0ZShkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICB0cmFwQnViYmxlZEV2ZW50KFRPUF9JTlZBTElELCBkb21FbGVtZW50KTtcbiAgICAgIC8vIEZvciBjb250cm9sbGVkIGNvbXBvbmVudHMgd2UgYWx3YXlzIG5lZWQgdG8gZW5zdXJlIHdlJ3JlIGxpc3RlbmluZ1xuICAgICAgLy8gdG8gb25DaGFuZ2UuIEV2ZW4gaWYgdGhlcmUgaXMgbm8gbGlzdGVuZXIuXG4gICAgICBlbnN1cmVMaXN0ZW5pbmdUbyhyb290Q29udGFpbmVyRWxlbWVudCwgJ29uQ2hhbmdlJyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdvcHRpb24nOlxuICAgICAgdmFsaWRhdGVQcm9wcyhkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgaW5pdFdyYXBwZXJTdGF0ZSQxKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIHRyYXBCdWJibGVkRXZlbnQoVE9QX0lOVkFMSUQsIGRvbUVsZW1lbnQpO1xuICAgICAgLy8gRm9yIGNvbnRyb2xsZWQgY29tcG9uZW50cyB3ZSBhbHdheXMgbmVlZCB0byBlbnN1cmUgd2UncmUgbGlzdGVuaW5nXG4gICAgICAvLyB0byBvbkNoYW5nZS4gRXZlbiBpZiB0aGVyZSBpcyBubyBsaXN0ZW5lci5cbiAgICAgIGVuc3VyZUxpc3RlbmluZ1RvKHJvb3RDb250YWluZXJFbGVtZW50LCAnb25DaGFuZ2UnKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIGluaXRXcmFwcGVyU3RhdGUkMihkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICB0cmFwQnViYmxlZEV2ZW50KFRPUF9JTlZBTElELCBkb21FbGVtZW50KTtcbiAgICAgIC8vIEZvciBjb250cm9sbGVkIGNvbXBvbmVudHMgd2UgYWx3YXlzIG5lZWQgdG8gZW5zdXJlIHdlJ3JlIGxpc3RlbmluZ1xuICAgICAgLy8gdG8gb25DaGFuZ2UuIEV2ZW4gaWYgdGhlcmUgaXMgbm8gbGlzdGVuZXIuXG4gICAgICBlbnN1cmVMaXN0ZW5pbmdUbyhyb290Q29udGFpbmVyRWxlbWVudCwgJ29uQ2hhbmdlJyk7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGFzc2VydFZhbGlkUHJvcHModGFnLCByYXdQcm9wcyk7XG5cbiAge1xuICAgIGV4dHJhQXR0cmlidXRlTmFtZXMgPSBuZXcgU2V0KCk7XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSBkb21FbGVtZW50LmF0dHJpYnV0ZXM7XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGF0dHJpYnV0ZXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgbmFtZSA9IGF0dHJpYnV0ZXNbX2ldLm5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgICAvLyBCdWlsdC1pbiBTU1IgYXR0cmlidXRlIGlzIHdoaXRlbGlzdGVkXG4gICAgICAgIGNhc2UgJ2RhdGEtcmVhY3Ryb290JzpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgLy8gQ29udHJvbGxlZCBhdHRyaWJ1dGVzIGFyZSBub3QgdmFsaWRhdGVkXG4gICAgICAgIC8vIFRPRE86IE9ubHkgaWdub3JlIHRoZW0gb24gY29udHJvbGxlZCB0YWdzLlxuICAgICAgICBjYXNlICd2YWx1ZSc6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2NoZWNrZWQnOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzZWxlY3RlZCc6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gSW50ZW50aW9uYWxseSB1c2UgdGhlIG9yaWdpbmFsIG5hbWUuXG4gICAgICAgICAgLy8gU2VlIGRpc2N1c3Npb24gaW4gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTA2NzYuXG4gICAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5hZGQoYXR0cmlidXRlc1tfaV0ubmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIHVwZGF0ZVBheWxvYWQgPSBudWxsO1xuICBmb3IgKHZhciBwcm9wS2V5IGluIHJhd1Byb3BzKSB7XG4gICAgaWYgKCFyYXdQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHZhciBuZXh0UHJvcCA9IHJhd1Byb3BzW3Byb3BLZXldO1xuICAgIGlmIChwcm9wS2V5ID09PSBDSElMRFJFTikge1xuICAgICAgLy8gRm9yIHRleHQgY29udGVudCBjaGlsZHJlbiB3ZSBjb21wYXJlIGFnYWluc3QgdGV4dENvbnRlbnQuIFRoaXNcbiAgICAgIC8vIG1pZ2h0IG1hdGNoIGFkZGl0aW9uYWwgSFRNTCB0aGF0IGlzIGhpZGRlbiB3aGVuIHdlIHJlYWQgaXQgdXNpbmdcbiAgICAgIC8vIHRleHRDb250ZW50LiBFLmcuIFwiZm9vXCIgd2lsbCBtYXRjaCBcImY8c3Bhbj5vbzwvc3Bhbj5cIiBidXQgdGhhdCBzdGlsbFxuICAgICAgLy8gc2F0aXNmaWVzIG91ciByZXF1aXJlbWVudC4gT3VyIHJlcXVpcmVtZW50IGlzIG5vdCB0byBwcm9kdWNlIHBlcmZlY3RcbiAgICAgIC8vIEhUTUwgYW5kIGF0dHJpYnV0ZXMuIElkZWFsbHkgd2Ugc2hvdWxkIHByZXNlcnZlIHN0cnVjdHVyZSBidXQgaXQnc1xuICAgICAgLy8gb2sgbm90IHRvIGlmIHRoZSB2aXNpYmxlIGNvbnRlbnQgaXMgc3RpbGwgZW5vdWdoIHRvIGluZGljYXRlIHdoYXRcbiAgICAgIC8vIGV2ZW4gbGlzdGVuZXJzIHRoZXNlIG5vZGVzIG1pZ2h0IGJlIHdpcmVkIHVwIHRvLlxuICAgICAgLy8gVE9ETzogV2FybiBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gYSBzaW5nbGUgdGV4dE5vZGUgYXMgYSBjaGlsZC5cbiAgICAgIC8vIFRPRE86IFNob3VsZCB3ZSB1c2UgZG9tRWxlbWVudC5maXJzdENoaWxkLm5vZGVWYWx1ZSB0byBjb21wYXJlP1xuICAgICAgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKGRvbUVsZW1lbnQudGV4dENvbnRlbnQgIT09IG5leHRQcm9wKSB7XG4gICAgICAgICAgaWYgKHRydWUgJiYgIXN1cHByZXNzSHlkcmF0aW9uV2FybmluZykge1xuICAgICAgICAgICAgd2FybkZvclRleHREaWZmZXJlbmNlKGRvbUVsZW1lbnQudGV4dENvbnRlbnQsIG5leHRQcm9wKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdXBkYXRlUGF5bG9hZCA9IFtDSElMRFJFTiwgbmV4dFByb3BdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgaWYgKGRvbUVsZW1lbnQudGV4dENvbnRlbnQgIT09ICcnICsgbmV4dFByb3ApIHtcbiAgICAgICAgICBpZiAodHJ1ZSAmJiAhc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nKSB7XG4gICAgICAgICAgICB3YXJuRm9yVGV4dERpZmZlcmVuY2UoZG9tRWxlbWVudC50ZXh0Q29udGVudCwgbmV4dFByb3ApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB1cGRhdGVQYXlsb2FkID0gW0NISUxEUkVOLCAnJyArIG5leHRQcm9wXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmVnaXN0cmF0aW9uTmFtZU1vZHVsZXMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgIGlmIChuZXh0UHJvcCAhPSBudWxsKSB7XG4gICAgICAgIGlmICh0cnVlICYmIHR5cGVvZiBuZXh0UHJvcCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihwcm9wS2V5LCBuZXh0UHJvcCk7XG4gICAgICAgIH1cbiAgICAgICAgZW5zdXJlTGlzdGVuaW5nVG8ocm9vdENvbnRhaW5lckVsZW1lbnQsIHByb3BLZXkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHJ1ZSAmJlxuICAgIC8vIENvbnZpbmNlIEZsb3cgd2UndmUgY2FsY3VsYXRlZCBpdCAoaXQncyBERVYtb25seSBpbiB0aGlzIG1ldGhvZC4pXG4gICAgdHlwZW9mIGlzQ3VzdG9tQ29tcG9uZW50VGFnID09PSAnYm9vbGVhbicpIHtcbiAgICAgIC8vIFZhbGlkYXRlIHRoYXQgdGhlIHByb3BlcnRpZXMgY29ycmVzcG9uZCB0byB0aGVpciBleHBlY3RlZCB2YWx1ZXMuXG4gICAgICB2YXIgc2VydmVyVmFsdWUgPSB2b2lkIDA7XG4gICAgICB2YXIgcHJvcGVydHlJbmZvID0gZ2V0UHJvcGVydHlJbmZvKHByb3BLZXkpO1xuICAgICAgaWYgKHN1cHByZXNzSHlkcmF0aW9uV2FybmluZykge1xuICAgICAgICAvLyBEb24ndCBib3RoZXIgY29tcGFyaW5nLiBXZSdyZSBpZ25vcmluZyBhbGwgdGhlc2Ugd2FybmluZ3MuXG4gICAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IFNVUFBSRVNTX0NPTlRFTlRfRURJVEFCTEVfV0FSTklORyB8fCBwcm9wS2V5ID09PSBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxIHx8XG4gICAgICAvLyBDb250cm9sbGVkIGF0dHJpYnV0ZXMgYXJlIG5vdCB2YWxpZGF0ZWRcbiAgICAgIC8vIFRPRE86IE9ubHkgaWdub3JlIHRoZW0gb24gY29udHJvbGxlZCB0YWdzLlxuICAgICAgcHJvcEtleSA9PT0gJ3ZhbHVlJyB8fCBwcm9wS2V5ID09PSAnY2hlY2tlZCcgfHwgcHJvcEtleSA9PT0gJ3NlbGVjdGVkJykge1xuICAgICAgICAvLyBOb29wXG4gICAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IERBTkdFUk9VU0xZX1NFVF9JTk5FUl9IVE1MKSB7XG4gICAgICAgIHZhciBzZXJ2ZXJIVE1MID0gZG9tRWxlbWVudC5pbm5lckhUTUw7XG4gICAgICAgIHZhciBuZXh0SHRtbCA9IG5leHRQcm9wID8gbmV4dFByb3BbSFRNTF0gOiB1bmRlZmluZWQ7XG4gICAgICAgIHZhciBleHBlY3RlZEhUTUwgPSBub3JtYWxpemVIVE1MKGRvbUVsZW1lbnQsIG5leHRIdG1sICE9IG51bGwgPyBuZXh0SHRtbCA6ICcnKTtcbiAgICAgICAgaWYgKGV4cGVjdGVkSFRNTCAhPT0gc2VydmVySFRNTCkge1xuICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShwcm9wS2V5LCBzZXJ2ZXJIVE1MLCBleHBlY3RlZEhUTUwpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IFNUWUxFJDEpIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmRlbGV0ZShwcm9wS2V5KTtcblxuICAgICAgICBpZiAoY2FuRGlmZlN0eWxlRm9ySHlkcmF0aW9uV2FybmluZykge1xuICAgICAgICAgIHZhciBleHBlY3RlZFN0eWxlID0gY3JlYXRlRGFuZ2Vyb3VzU3RyaW5nRm9yU3R5bGVzKG5leHRQcm9wKTtcbiAgICAgICAgICBzZXJ2ZXJWYWx1ZSA9IGRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdzdHlsZScpO1xuICAgICAgICAgIGlmIChleHBlY3RlZFN0eWxlICE9PSBzZXJ2ZXJWYWx1ZSkge1xuICAgICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKHByb3BLZXksIHNlcnZlclZhbHVlLCBleHBlY3RlZFN0eWxlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmRlbGV0ZShwcm9wS2V5LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBzZXJ2ZXJWYWx1ZSA9IGdldFZhbHVlRm9yQXR0cmlidXRlKGRvbUVsZW1lbnQsIHByb3BLZXksIG5leHRQcm9wKTtcblxuICAgICAgICBpZiAobmV4dFByb3AgIT09IHNlcnZlclZhbHVlKSB7XG4gICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKHByb3BLZXksIHNlcnZlclZhbHVlLCBuZXh0UHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXNob3VsZElnbm9yZUF0dHJpYnV0ZShwcm9wS2V5LCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSAmJiAhc2hvdWxkUmVtb3ZlQXR0cmlidXRlKHByb3BLZXksIG5leHRQcm9wLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSkge1xuICAgICAgICB2YXIgaXNNaXNtYXRjaER1ZVRvQmFkQ2FzaW5nID0gZmFsc2U7XG4gICAgICAgIGlmIChwcm9wZXJ0eUluZm8gIT09IG51bGwpIHtcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG4gICAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5kZWxldGUocHJvcGVydHlJbmZvLmF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICAgIHNlcnZlclZhbHVlID0gZ2V0VmFsdWVGb3JQcm9wZXJ0eShkb21FbGVtZW50LCBwcm9wS2V5LCBuZXh0UHJvcCwgcHJvcGVydHlJbmZvKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgb3duTmFtZXNwYWNlID0gcGFyZW50TmFtZXNwYWNlO1xuICAgICAgICAgIGlmIChvd25OYW1lc3BhY2UgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAgICAgICAgICBvd25OYW1lc3BhY2UgPSBnZXRJbnRyaW5zaWNOYW1lc3BhY2UodGFnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG93bk5hbWVzcGFjZSA9PT0gSFRNTF9OQU1FU1BBQ0UpIHtcbiAgICAgICAgICAgIC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cbiAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHByb3BLZXkudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBzdGFuZGFyZE5hbWUgPSBnZXRQb3NzaWJsZVN0YW5kYXJkTmFtZShwcm9wS2V5KTtcbiAgICAgICAgICAgIGlmIChzdGFuZGFyZE5hbWUgIT09IG51bGwgJiYgc3RhbmRhcmROYW1lICE9PSBwcm9wS2V5KSB7XG4gICAgICAgICAgICAgIC8vIElmIGFuIFNWRyBwcm9wIGlzIHN1cHBsaWVkIHdpdGggYmFkIGNhc2luZywgaXQgd2lsbFxuICAgICAgICAgICAgICAvLyBiZSBzdWNjZXNzZnVsbHkgcGFyc2VkIGZyb20gSFRNTCwgYnV0IHdpbGwgcHJvZHVjZSBhIG1pc21hdGNoXG4gICAgICAgICAgICAgIC8vIChhbmQgd291bGQgYmUgaW5jb3JyZWN0bHkgcmVuZGVyZWQgb24gdGhlIGNsaWVudCkuXG4gICAgICAgICAgICAgIC8vIEhvd2V2ZXIsIHdlIGFscmVhZHkgd2FybiBhYm91dCBiYWQgY2FzaW5nIGVsc2V3aGVyZS5cbiAgICAgICAgICAgICAgLy8gU28gd2UnbGwgc2tpcCB0aGUgbWlzbGVhZGluZyBleHRyYSBtaXNtYXRjaCB3YXJuaW5nIGluIHRoaXMgY2FzZS5cbiAgICAgICAgICAgICAgaXNNaXNtYXRjaER1ZVRvQmFkQ2FzaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmRlbGV0ZShzdGFuZGFyZE5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5kZWxldGUocHJvcEtleSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNlcnZlclZhbHVlID0gZ2V0VmFsdWVGb3JBdHRyaWJ1dGUoZG9tRWxlbWVudCwgcHJvcEtleSwgbmV4dFByb3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHRQcm9wICE9PSBzZXJ2ZXJWYWx1ZSAmJiAhaXNNaXNtYXRjaER1ZVRvQmFkQ2FzaW5nKSB7XG4gICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKHByb3BLZXksIHNlcnZlclZhbHVlLCBuZXh0UHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB7XG4gICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgIGlmIChleHRyYUF0dHJpYnV0ZU5hbWVzLnNpemUgPiAwICYmICFzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcpIHtcbiAgICAgIC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cbiAgICAgIHdhcm5Gb3JFeHRyYUF0dHJpYnV0ZXMoZXh0cmFBdHRyaWJ1dGVOYW1lcyk7XG4gICAgfVxuICB9XG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICAvLyBUT0RPOiBNYWtlIHN1cmUgd2UgY2hlY2sgaWYgdGhpcyBpcyBzdGlsbCB1bm1vdW50ZWQgb3IgZG8gYW55IGNsZWFuXG4gICAgICAvLyB1cCBuZWNlc3Nhcnkgc2luY2Ugd2UgbmV2ZXIgc3RvcCB0cmFja2luZyBhbnltb3JlLlxuICAgICAgdHJhY2soZG9tRWxlbWVudCk7XG4gICAgICBwb3N0TW91bnRXcmFwcGVyKGRvbUVsZW1lbnQsIHJhd1Byb3BzLCB0cnVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIC8vIFRPRE86IE1ha2Ugc3VyZSB3ZSBjaGVjayBpZiB0aGlzIGlzIHN0aWxsIHVubW91bnRlZCBvciBkbyBhbnkgY2xlYW5cbiAgICAgIC8vIHVwIG5lY2Vzc2FyeSBzaW5jZSB3ZSBuZXZlciBzdG9wIHRyYWNraW5nIGFueW1vcmUuXG4gICAgICB0cmFjayhkb21FbGVtZW50KTtcbiAgICAgIHBvc3RNb3VudFdyYXBwZXIkMyhkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzZWxlY3QnOlxuICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICAvLyBGb3IgaW5wdXQgYW5kIHRleHRhcmVhIHdlIGN1cnJlbnQgYWx3YXlzIHNldCB0aGUgdmFsdWUgcHJvcGVydHkgYXRcbiAgICAgIC8vIHBvc3QgbW91bnQgdG8gZm9yY2UgaXQgdG8gZGl2ZXJnZSBmcm9tIGF0dHJpYnV0ZXMuIEhvd2V2ZXIsIGZvclxuICAgICAgLy8gb3B0aW9uIGFuZCBzZWxlY3Qgd2UgZG9uJ3QgcXVpdGUgZG8gdGhlIHNhbWUgdGhpbmcgYW5kIHNlbGVjdFxuICAgICAgLy8gaXMgbm90IHJlc2lsaWVudCB0byB0aGUgRE9NIHN0YXRlIGNoYW5naW5nIHNvIHdlIGRvbid0IGRvIHRoYXQgaGVyZS5cbiAgICAgIC8vIFRPRE86IENvbnNpZGVyIG5vdCBkb2luZyB0aGlzIGZvciBpbnB1dCBhbmQgdGV4dGFyZWEuXG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKHR5cGVvZiByYXdQcm9wcy5vbkNsaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIFRPRE86IFRoaXMgY2FzdCBtYXkgbm90IGJlIHNvdW5kIGZvciBTVkcsIE1hdGhNTCBvciBjdXN0b20gZWxlbWVudHMuXG4gICAgICAgIHRyYXBDbGlja09uTm9uSW50ZXJhY3RpdmVFbGVtZW50KGRvbUVsZW1lbnQpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlUGF5bG9hZDtcbn1cblxuZnVuY3Rpb24gZGlmZkh5ZHJhdGVkVGV4dCh0ZXh0Tm9kZSwgdGV4dCkge1xuICB2YXIgaXNEaWZmZXJlbnQgPSB0ZXh0Tm9kZS5ub2RlVmFsdWUgIT09IHRleHQ7XG4gIHJldHVybiBpc0RpZmZlcmVudDtcbn1cblxuZnVuY3Rpb24gd2FybkZvclVubWF0Y2hlZFRleHQodGV4dE5vZGUsIHRleHQpIHtcbiAge1xuICAgIHdhcm5Gb3JUZXh0RGlmZmVyZW5jZSh0ZXh0Tm9kZS5ub2RlVmFsdWUsIHRleHQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZUVsZW1lbnQocGFyZW50Tm9kZSwgY2hpbGQpIHtcbiAge1xuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG4gICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnRGlkIG5vdCBleHBlY3Qgc2VydmVyIEhUTUwgdG8gY29udGFpbiBhIDwlcz4gaW4gPCVzPi4nLCBjaGlsZC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCBwYXJlbnROb2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZVRleHQocGFyZW50Tm9kZSwgY2hpbGQpIHtcbiAge1xuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG4gICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnRGlkIG5vdCBleHBlY3Qgc2VydmVyIEhUTUwgdG8gY29udGFpbiB0aGUgdGV4dCBub2RlIFwiJXNcIiBpbiA8JXM+LicsIGNoaWxkLm5vZGVWYWx1ZSwgcGFyZW50Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZEVsZW1lbnQocGFyZW50Tm9kZSwgdGFnLCBwcm9wcykge1xuICB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcbiAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdFeHBlY3RlZCBzZXJ2ZXIgSFRNTCB0byBjb250YWluIGEgbWF0Y2hpbmcgPCVzPiBpbiA8JXM+LicsIHRhZywgcGFyZW50Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZFRleHQocGFyZW50Tm9kZSwgdGV4dCkge1xuICB7XG4gICAgaWYgKHRleHQgPT09ICcnKSB7XG4gICAgICAvLyBXZSBleHBlY3QgdG8gaW5zZXJ0IGVtcHR5IHRleHQgbm9kZXMgc2luY2UgdGhleSdyZSBub3QgcmVwcmVzZW50ZWQgaW5cbiAgICAgIC8vIHRoZSBIVE1MLlxuICAgICAgLy8gVE9ETzogUmVtb3ZlIHRoaXMgc3BlY2lhbCBjYXNlIGlmIHdlIGNhbiBqdXN0IGF2b2lkIGluc2VydGluZyBlbXB0eVxuICAgICAgLy8gdGV4dCBub2Rlcy5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcbiAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdFeHBlY3RlZCBzZXJ2ZXIgSFRNTCB0byBjb250YWluIGEgbWF0Y2hpbmcgdGV4dCBub2RlIGZvciBcIiVzXCIgaW4gPCVzPi4nLCB0ZXh0LCBwYXJlbnROb2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc3RvcmVDb250cm9sbGVkU3RhdGUkMShkb21FbGVtZW50LCB0YWcsIHByb3BzKSB7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZShkb21FbGVtZW50LCBwcm9wcyk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZSQzKGRvbUVsZW1lbnQsIHByb3BzKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZSQyKGRvbUVsZW1lbnQsIHByb3BzKTtcbiAgICAgIHJldHVybjtcbiAgfVxufVxuXG4vLyBUT0RPOiBkaXJlY3QgaW1wb3J0cyBsaWtlIHNvbWUtcGFja2FnZS9zcmMvKiBhcmUgYmFkLiBGaXggbWUuXG52YXIgdmFsaWRhdGVET01OZXN0aW5nID0gZnVuY3Rpb24gKCkge307XG52YXIgdXBkYXRlZEFuY2VzdG9ySW5mbyA9IGZ1bmN0aW9uICgpIHt9O1xuXG57XG4gIC8vIFRoaXMgdmFsaWRhdGlvbiBjb2RlIHdhcyB3cml0dGVuIGJhc2VkIG9uIHRoZSBIVE1MNSBwYXJzaW5nIHNwZWM6XG4gIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2hhcy1hbi1lbGVtZW50LWluLXNjb3BlXG4gIC8vXG4gIC8vIE5vdGU6IHRoaXMgZG9lcyBub3QgY2F0Y2ggYWxsIGludmFsaWQgbmVzdGluZywgbm9yIGRvZXMgaXQgdHJ5IHRvIChhcyBpdCdzXG4gIC8vIG5vdCBjbGVhciB3aGF0IHByYWN0aWNhbCBiZW5lZml0IGRvaW5nIHNvIHByb3ZpZGVzKTsgaW5zdGVhZCwgd2Ugd2FybiBvbmx5XG4gIC8vIGZvciBjYXNlcyB3aGVyZSB0aGUgcGFyc2VyIHdpbGwgZ2l2ZSBhIHBhcnNlIHRyZWUgZGlmZmVyaW5nIGZyb20gd2hhdCBSZWFjdFxuICAvLyBpbnRlbmRlZC4gRm9yIGV4YW1wbGUsIDxiPjxkaXY+PC9kaXY+PC9iPiBpcyBpbnZhbGlkIGJ1dCB3ZSBkb24ndCB3YXJuXG4gIC8vIGJlY2F1c2UgaXQgc3RpbGwgcGFyc2VzIGNvcnJlY3RseTsgd2UgZG8gd2FybiBmb3Igb3RoZXIgY2FzZXMgbGlrZSBuZXN0ZWRcbiAgLy8gPHA+IHRhZ3Mgd2hlcmUgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2Vjb25kIGVsZW1lbnQgaW1wbGljaXRseSBjbG9zZXMgdGhlXG4gIC8vIGZpcnN0LCBjYXVzaW5nIGEgY29uZnVzaW5nIG1lc3MuXG5cbiAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjc3BlY2lhbFxuICB2YXIgc3BlY2lhbFRhZ3MgPSBbJ2FkZHJlc3MnLCAnYXBwbGV0JywgJ2FyZWEnLCAnYXJ0aWNsZScsICdhc2lkZScsICdiYXNlJywgJ2Jhc2Vmb250JywgJ2Jnc291bmQnLCAnYmxvY2txdW90ZScsICdib2R5JywgJ2JyJywgJ2J1dHRvbicsICdjYXB0aW9uJywgJ2NlbnRlcicsICdjb2wnLCAnY29sZ3JvdXAnLCAnZGQnLCAnZGV0YWlscycsICdkaXInLCAnZGl2JywgJ2RsJywgJ2R0JywgJ2VtYmVkJywgJ2ZpZWxkc2V0JywgJ2ZpZ2NhcHRpb24nLCAnZmlndXJlJywgJ2Zvb3RlcicsICdmb3JtJywgJ2ZyYW1lJywgJ2ZyYW1lc2V0JywgJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2JywgJ2hlYWQnLCAnaGVhZGVyJywgJ2hncm91cCcsICdocicsICdodG1sJywgJ2lmcmFtZScsICdpbWcnLCAnaW5wdXQnLCAnaXNpbmRleCcsICdsaScsICdsaW5rJywgJ2xpc3RpbmcnLCAnbWFpbicsICdtYXJxdWVlJywgJ21lbnUnLCAnbWVudWl0ZW0nLCAnbWV0YScsICduYXYnLCAnbm9lbWJlZCcsICdub2ZyYW1lcycsICdub3NjcmlwdCcsICdvYmplY3QnLCAnb2wnLCAncCcsICdwYXJhbScsICdwbGFpbnRleHQnLCAncHJlJywgJ3NjcmlwdCcsICdzZWN0aW9uJywgJ3NlbGVjdCcsICdzb3VyY2UnLCAnc3R5bGUnLCAnc3VtbWFyeScsICd0YWJsZScsICd0Ym9keScsICd0ZCcsICd0ZW1wbGF0ZScsICd0ZXh0YXJlYScsICd0Zm9vdCcsICd0aCcsICd0aGVhZCcsICd0aXRsZScsICd0cicsICd0cmFjaycsICd1bCcsICd3YnInLCAneG1wJ107XG5cbiAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjaGFzLWFuLWVsZW1lbnQtaW4tc2NvcGVcbiAgdmFyIGluU2NvcGVUYWdzID0gWydhcHBsZXQnLCAnY2FwdGlvbicsICdodG1sJywgJ3RhYmxlJywgJ3RkJywgJ3RoJywgJ21hcnF1ZWUnLCAnb2JqZWN0JywgJ3RlbXBsYXRlJyxcblxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNodG1sLWludGVncmF0aW9uLXBvaW50XG4gIC8vIFRPRE86IERpc3Rpbmd1aXNoIGJ5IG5hbWVzcGFjZSBoZXJlIC0tIGZvciA8dGl0bGU+LCBpbmNsdWRpbmcgaXQgaGVyZVxuICAvLyBlcnJzIG9uIHRoZSBzaWRlIG9mIGZld2VyIHdhcm5pbmdzXG4gICdmb3JlaWduT2JqZWN0JywgJ2Rlc2MnLCAndGl0bGUnXTtcblxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNoYXMtYW4tZWxlbWVudC1pbi1idXR0b24tc2NvcGVcbiAgdmFyIGJ1dHRvblNjb3BlVGFncyA9IGluU2NvcGVUYWdzLmNvbmNhdChbJ2J1dHRvbiddKTtcblxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNnZW5lcmF0ZS1pbXBsaWVkLWVuZC10YWdzXG4gIHZhciBpbXBsaWVkRW5kVGFncyA9IFsnZGQnLCAnZHQnLCAnbGknLCAnb3B0aW9uJywgJ29wdGdyb3VwJywgJ3AnLCAncnAnLCAncnQnXTtcblxuICB2YXIgZW1wdHlBbmNlc3RvckluZm8gPSB7XG4gICAgY3VycmVudDogbnVsbCxcblxuICAgIGZvcm1UYWc6IG51bGwsXG4gICAgYVRhZ0luU2NvcGU6IG51bGwsXG4gICAgYnV0dG9uVGFnSW5TY29wZTogbnVsbCxcbiAgICBub2JyVGFnSW5TY29wZTogbnVsbCxcbiAgICBwVGFnSW5CdXR0b25TY29wZTogbnVsbCxcblxuICAgIGxpc3RJdGVtVGFnQXV0b2Nsb3Npbmc6IG51bGwsXG4gICAgZGxJdGVtVGFnQXV0b2Nsb3Npbmc6IG51bGxcbiAgfTtcblxuICB1cGRhdGVkQW5jZXN0b3JJbmZvID0gZnVuY3Rpb24gKG9sZEluZm8sIHRhZykge1xuICAgIHZhciBhbmNlc3RvckluZm8gPSBfYXNzaWduKHt9LCBvbGRJbmZvIHx8IGVtcHR5QW5jZXN0b3JJbmZvKTtcbiAgICB2YXIgaW5mbyA9IHsgdGFnOiB0YWcgfTtcblxuICAgIGlmIChpblNjb3BlVGFncy5pbmRleE9mKHRhZykgIT09IC0xKSB7XG4gICAgICBhbmNlc3RvckluZm8uYVRhZ0luU2NvcGUgPSBudWxsO1xuICAgICAgYW5jZXN0b3JJbmZvLmJ1dHRvblRhZ0luU2NvcGUgPSBudWxsO1xuICAgICAgYW5jZXN0b3JJbmZvLm5vYnJUYWdJblNjb3BlID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKGJ1dHRvblNjb3BlVGFncy5pbmRleE9mKHRhZykgIT09IC0xKSB7XG4gICAgICBhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9uU2NvcGUgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIFNlZSBydWxlcyBmb3IgJ2xpJywgJ2RkJywgJ2R0JyBzdGFydCB0YWdzIGluXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluYm9keVxuICAgIGlmIChzcGVjaWFsVGFncy5pbmRleE9mKHRhZykgIT09IC0xICYmIHRhZyAhPT0gJ2FkZHJlc3MnICYmIHRhZyAhPT0gJ2RpdicgJiYgdGFnICE9PSAncCcpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5saXN0SXRlbVRhZ0F1dG9jbG9zaW5nID0gbnVsbDtcbiAgICAgIGFuY2VzdG9ySW5mby5kbEl0ZW1UYWdBdXRvY2xvc2luZyA9IG51bGw7XG4gICAgfVxuXG4gICAgYW5jZXN0b3JJbmZvLmN1cnJlbnQgPSBpbmZvO1xuXG4gICAgaWYgKHRhZyA9PT0gJ2Zvcm0nKSB7XG4gICAgICBhbmNlc3RvckluZm8uZm9ybVRhZyA9IGluZm87XG4gICAgfVxuICAgIGlmICh0YWcgPT09ICdhJykge1xuICAgICAgYW5jZXN0b3JJbmZvLmFUYWdJblNjb3BlID0gaW5mbztcbiAgICB9XG4gICAgaWYgKHRhZyA9PT0gJ2J1dHRvbicpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5idXR0b25UYWdJblNjb3BlID0gaW5mbztcbiAgICB9XG4gICAgaWYgKHRhZyA9PT0gJ25vYnInKSB7XG4gICAgICBhbmNlc3RvckluZm8ubm9iclRhZ0luU2NvcGUgPSBpbmZvO1xuICAgIH1cbiAgICBpZiAodGFnID09PSAncCcpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5wVGFnSW5CdXR0b25TY29wZSA9IGluZm87XG4gICAgfVxuICAgIGlmICh0YWcgPT09ICdsaScpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5saXN0SXRlbVRhZ0F1dG9jbG9zaW5nID0gaW5mbztcbiAgICB9XG4gICAgaWYgKHRhZyA9PT0gJ2RkJyB8fCB0YWcgPT09ICdkdCcpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5kbEl0ZW1UYWdBdXRvY2xvc2luZyA9IGluZm87XG4gICAgfVxuXG4gICAgcmV0dXJuIGFuY2VzdG9ySW5mbztcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyXG4gICAqL1xuICB2YXIgaXNUYWdWYWxpZFdpdGhQYXJlbnQgPSBmdW5jdGlvbiAodGFnLCBwYXJlbnRUYWcpIHtcbiAgICAvLyBGaXJzdCwgbGV0J3MgY2hlY2sgaWYgd2UncmUgaW4gYW4gdW51c3VhbCBwYXJzaW5nIG1vZGUuLi5cbiAgICBzd2l0Y2ggKHBhcmVudFRhZykge1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluc2VsZWN0XG4gICAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnb3B0aW9uJyB8fCB0YWcgPT09ICdvcHRncm91cCcgfHwgdGFnID09PSAnI3RleHQnO1xuICAgICAgY2FzZSAnb3B0Z3JvdXAnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnb3B0aW9uJyB8fCB0YWcgPT09ICcjdGV4dCc7XG4gICAgICAvLyBTdHJpY3RseSBzcGVha2luZywgc2VlaW5nIGFuIDxvcHRpb24+IGRvZXNuJ3QgbWVhbiB3ZSdyZSBpbiBhIDxzZWxlY3Q+XG4gICAgICAvLyBidXRcbiAgICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICcjdGV4dCc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW50ZFxuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluY2FwdGlvblxuICAgICAgLy8gTm8gc3BlY2lhbCBiZWhhdmlvciBzaW5jZSB0aGVzZSBydWxlcyBmYWxsIGJhY2sgdG8gXCJpbiBib2R5XCIgbW9kZSBmb3JcbiAgICAgIC8vIGFsbCBleGNlcHQgc3BlY2lhbCB0YWJsZSBub2RlcyB3aGljaCBjYXVzZSBiYWQgcGFyc2luZyBiZWhhdmlvciBhbnl3YXkuXG5cbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbnRyXG4gICAgICBjYXNlICd0cic6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICd0aCcgfHwgdGFnID09PSAndGQnIHx8IHRhZyA9PT0gJ3N0eWxlJyB8fCB0YWcgPT09ICdzY3JpcHQnIHx8IHRhZyA9PT0gJ3RlbXBsYXRlJztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbnRib2R5XG4gICAgICBjYXNlICd0Ym9keSc6XG4gICAgICBjYXNlICd0aGVhZCc6XG4gICAgICBjYXNlICd0Zm9vdCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICd0cicgfHwgdGFnID09PSAnc3R5bGUnIHx8IHRhZyA9PT0gJ3NjcmlwdCcgfHwgdGFnID09PSAndGVtcGxhdGUnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluY29sZ3JvdXBcbiAgICAgIGNhc2UgJ2NvbGdyb3VwJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2NvbCcgfHwgdGFnID09PSAndGVtcGxhdGUnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWludGFibGVcbiAgICAgIGNhc2UgJ3RhYmxlJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2NhcHRpb24nIHx8IHRhZyA9PT0gJ2NvbGdyb3VwJyB8fCB0YWcgPT09ICd0Ym9keScgfHwgdGFnID09PSAndGZvb3QnIHx8IHRhZyA9PT0gJ3RoZWFkJyB8fCB0YWcgPT09ICdzdHlsZScgfHwgdGFnID09PSAnc2NyaXB0JyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5oZWFkXG4gICAgICBjYXNlICdoZWFkJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2Jhc2UnIHx8IHRhZyA9PT0gJ2Jhc2Vmb250JyB8fCB0YWcgPT09ICdiZ3NvdW5kJyB8fCB0YWcgPT09ICdsaW5rJyB8fCB0YWcgPT09ICdtZXRhJyB8fCB0YWcgPT09ICd0aXRsZScgfHwgdGFnID09PSAnbm9zY3JpcHQnIHx8IHRhZyA9PT0gJ25vZnJhbWVzJyB8fCB0YWcgPT09ICdzdHlsZScgfHwgdGFnID09PSAnc2NyaXB0JyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zZW1hbnRpY3MuaHRtbCN0aGUtaHRtbC1lbGVtZW50XG4gICAgICBjYXNlICdodG1sJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2hlYWQnIHx8IHRhZyA9PT0gJ2JvZHknO1xuICAgICAgY2FzZSAnI2RvY3VtZW50JzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2h0bWwnO1xuICAgIH1cblxuICAgIC8vIFByb2JhYmx5IGluIHRoZSBcImluIGJvZHlcIiBwYXJzaW5nIG1vZGUsIHNvIHdlIG91dGxhdyBvbmx5IHRhZyBjb21ib3NcbiAgICAvLyB3aGVyZSB0aGUgcGFyc2luZyBydWxlcyBjYXVzZSBpbXBsaWNpdCBvcGVucyBvciBjbG9zZXMgdG8gYmUgYWRkZWQuXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluYm9keVxuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlICdoMSc6XG4gICAgICBjYXNlICdoMic6XG4gICAgICBjYXNlICdoMyc6XG4gICAgICBjYXNlICdoNCc6XG4gICAgICBjYXNlICdoNSc6XG4gICAgICBjYXNlICdoNic6XG4gICAgICAgIHJldHVybiBwYXJlbnRUYWcgIT09ICdoMScgJiYgcGFyZW50VGFnICE9PSAnaDInICYmIHBhcmVudFRhZyAhPT0gJ2gzJyAmJiBwYXJlbnRUYWcgIT09ICdoNCcgJiYgcGFyZW50VGFnICE9PSAnaDUnICYmIHBhcmVudFRhZyAhPT0gJ2g2JztcblxuICAgICAgY2FzZSAncnAnOlxuICAgICAgY2FzZSAncnQnOlxuICAgICAgICByZXR1cm4gaW1wbGllZEVuZFRhZ3MuaW5kZXhPZihwYXJlbnRUYWcpID09PSAtMTtcblxuICAgICAgY2FzZSAnYm9keSc6XG4gICAgICBjYXNlICdjYXB0aW9uJzpcbiAgICAgIGNhc2UgJ2NvbCc6XG4gICAgICBjYXNlICdjb2xncm91cCc6XG4gICAgICBjYXNlICdmcmFtZSc6XG4gICAgICBjYXNlICdoZWFkJzpcbiAgICAgIGNhc2UgJ2h0bWwnOlxuICAgICAgY2FzZSAndGJvZHknOlxuICAgICAgY2FzZSAndGQnOlxuICAgICAgY2FzZSAndGZvb3QnOlxuICAgICAgY2FzZSAndGgnOlxuICAgICAgY2FzZSAndGhlYWQnOlxuICAgICAgY2FzZSAndHInOlxuICAgICAgICAvLyBUaGVzZSB0YWdzIGFyZSBvbmx5IHZhbGlkIHdpdGggYSBmZXcgcGFyZW50cyB0aGF0IGhhdmUgc3BlY2lhbCBjaGlsZFxuICAgICAgICAvLyBwYXJzaW5nIHJ1bGVzIC0tIGlmIHdlJ3JlIGRvd24gaGVyZSwgdGhlbiBub25lIG9mIHRob3NlIG1hdGNoZWQgYW5kXG4gICAgICAgIC8vIHNvIHdlIGFsbG93IGl0IG9ubHkgaWYgd2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBwYXJlbnQgaXMsIGFzIGFsbCBvdGhlclxuICAgICAgICAvLyBjYXNlcyBhcmUgaW52YWxpZC5cbiAgICAgICAgcmV0dXJuIHBhcmVudFRhZyA9PSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXJcbiAgICovXG4gIHZhciBmaW5kSW52YWxpZEFuY2VzdG9yRm9yVGFnID0gZnVuY3Rpb24gKHRhZywgYW5jZXN0b3JJbmZvKSB7XG4gICAgc3dpdGNoICh0YWcpIHtcbiAgICAgIGNhc2UgJ2FkZHJlc3MnOlxuICAgICAgY2FzZSAnYXJ0aWNsZSc6XG4gICAgICBjYXNlICdhc2lkZSc6XG4gICAgICBjYXNlICdibG9ja3F1b3RlJzpcbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICBjYXNlICdkZXRhaWxzJzpcbiAgICAgIGNhc2UgJ2RpYWxvZyc6XG4gICAgICBjYXNlICdkaXInOlxuICAgICAgY2FzZSAnZGl2JzpcbiAgICAgIGNhc2UgJ2RsJzpcbiAgICAgIGNhc2UgJ2ZpZWxkc2V0JzpcbiAgICAgIGNhc2UgJ2ZpZ2NhcHRpb24nOlxuICAgICAgY2FzZSAnZmlndXJlJzpcbiAgICAgIGNhc2UgJ2Zvb3Rlcic6XG4gICAgICBjYXNlICdoZWFkZXInOlxuICAgICAgY2FzZSAnaGdyb3VwJzpcbiAgICAgIGNhc2UgJ21haW4nOlxuICAgICAgY2FzZSAnbWVudSc6XG4gICAgICBjYXNlICduYXYnOlxuICAgICAgY2FzZSAnb2wnOlxuICAgICAgY2FzZSAncCc6XG4gICAgICBjYXNlICdzZWN0aW9uJzpcbiAgICAgIGNhc2UgJ3N1bW1hcnknOlxuICAgICAgY2FzZSAndWwnOlxuICAgICAgY2FzZSAncHJlJzpcbiAgICAgIGNhc2UgJ2xpc3RpbmcnOlxuICAgICAgY2FzZSAndGFibGUnOlxuICAgICAgY2FzZSAnaHInOlxuICAgICAgY2FzZSAneG1wJzpcbiAgICAgIGNhc2UgJ2gxJzpcbiAgICAgIGNhc2UgJ2gyJzpcbiAgICAgIGNhc2UgJ2gzJzpcbiAgICAgIGNhc2UgJ2g0JzpcbiAgICAgIGNhc2UgJ2g1JzpcbiAgICAgIGNhc2UgJ2g2JzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5wVGFnSW5CdXR0b25TY29wZTtcblxuICAgICAgY2FzZSAnZm9ybSc6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8uZm9ybVRhZyB8fCBhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9uU2NvcGU7XG5cbiAgICAgIGNhc2UgJ2xpJzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5saXN0SXRlbVRhZ0F1dG9jbG9zaW5nO1xuXG4gICAgICBjYXNlICdkZCc6XG4gICAgICBjYXNlICdkdCc6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8uZGxJdGVtVGFnQXV0b2Nsb3Npbmc7XG5cbiAgICAgIGNhc2UgJ2J1dHRvbic6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8uYnV0dG9uVGFnSW5TY29wZTtcblxuICAgICAgY2FzZSAnYSc6XG4gICAgICAgIC8vIFNwZWMgc2F5cyBzb21ldGhpbmcgYWJvdXQgc3RvcmluZyBhIGxpc3Qgb2YgbWFya2VycywgYnV0IGl0IHNvdW5kc1xuICAgICAgICAvLyBlcXVpdmFsZW50IHRvIHRoaXMgY2hlY2suXG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8uYVRhZ0luU2NvcGU7XG5cbiAgICAgIGNhc2UgJ25vYnInOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLm5vYnJUYWdJblNjb3BlO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIHZhciBkaWRXYXJuID0ge307XG5cbiAgdmFsaWRhdGVET01OZXN0aW5nID0gZnVuY3Rpb24gKGNoaWxkVGFnLCBjaGlsZFRleHQsIGFuY2VzdG9ySW5mbykge1xuICAgIGFuY2VzdG9ySW5mbyA9IGFuY2VzdG9ySW5mbyB8fCBlbXB0eUFuY2VzdG9ySW5mbztcbiAgICB2YXIgcGFyZW50SW5mbyA9IGFuY2VzdG9ySW5mby5jdXJyZW50O1xuICAgIHZhciBwYXJlbnRUYWcgPSBwYXJlbnRJbmZvICYmIHBhcmVudEluZm8udGFnO1xuXG4gICAgaWYgKGNoaWxkVGV4dCAhPSBudWxsKSB7XG4gICAgICAhKGNoaWxkVGFnID09IG51bGwpID8gd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAndmFsaWRhdGVET01OZXN0aW5nOiB3aGVuIGNoaWxkVGV4dCBpcyBwYXNzZWQsIGNoaWxkVGFnIHNob3VsZCBiZSBudWxsJykgOiB2b2lkIDA7XG4gICAgICBjaGlsZFRhZyA9ICcjdGV4dCc7XG4gICAgfVxuXG4gICAgdmFyIGludmFsaWRQYXJlbnQgPSBpc1RhZ1ZhbGlkV2l0aFBhcmVudChjaGlsZFRhZywgcGFyZW50VGFnKSA/IG51bGwgOiBwYXJlbnRJbmZvO1xuICAgIHZhciBpbnZhbGlkQW5jZXN0b3IgPSBpbnZhbGlkUGFyZW50ID8gbnVsbCA6IGZpbmRJbnZhbGlkQW5jZXN0b3JGb3JUYWcoY2hpbGRUYWcsIGFuY2VzdG9ySW5mbyk7XG4gICAgdmFyIGludmFsaWRQYXJlbnRPckFuY2VzdG9yID0gaW52YWxpZFBhcmVudCB8fCBpbnZhbGlkQW5jZXN0b3I7XG4gICAgaWYgKCFpbnZhbGlkUGFyZW50T3JBbmNlc3Rvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBhbmNlc3RvclRhZyA9IGludmFsaWRQYXJlbnRPckFuY2VzdG9yLnRhZztcbiAgICB2YXIgYWRkZW5kdW0gPSBnZXRDdXJyZW50RmliZXJTdGFja0luRGV2KCk7XG5cbiAgICB2YXIgd2FybktleSA9ICEhaW52YWxpZFBhcmVudCArICd8JyArIGNoaWxkVGFnICsgJ3wnICsgYW5jZXN0b3JUYWcgKyAnfCcgKyBhZGRlbmR1bTtcbiAgICBpZiAoZGlkV2Fyblt3YXJuS2V5XSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkaWRXYXJuW3dhcm5LZXldID0gdHJ1ZTtcblxuICAgIHZhciB0YWdEaXNwbGF5TmFtZSA9IGNoaWxkVGFnO1xuICAgIHZhciB3aGl0ZXNwYWNlSW5mbyA9ICcnO1xuICAgIGlmIChjaGlsZFRhZyA9PT0gJyN0ZXh0Jykge1xuICAgICAgaWYgKC9cXFMvLnRlc3QoY2hpbGRUZXh0KSkge1xuICAgICAgICB0YWdEaXNwbGF5TmFtZSA9ICdUZXh0IG5vZGVzJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhZ0Rpc3BsYXlOYW1lID0gJ1doaXRlc3BhY2UgdGV4dCBub2Rlcyc7XG4gICAgICAgIHdoaXRlc3BhY2VJbmZvID0gXCIgTWFrZSBzdXJlIHlvdSBkb24ndCBoYXZlIGFueSBleHRyYSB3aGl0ZXNwYWNlIGJldHdlZW4gdGFncyBvbiBcIiArICdlYWNoIGxpbmUgb2YgeW91ciBzb3VyY2UgY29kZS4nO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0YWdEaXNwbGF5TmFtZSA9ICc8JyArIGNoaWxkVGFnICsgJz4nO1xuICAgIH1cblxuICAgIGlmIChpbnZhbGlkUGFyZW50KSB7XG4gICAgICB2YXIgaW5mbyA9ICcnO1xuICAgICAgaWYgKGFuY2VzdG9yVGFnID09PSAndGFibGUnICYmIGNoaWxkVGFnID09PSAndHInKSB7XG4gICAgICAgIGluZm8gKz0gJyBBZGQgYSA8dGJvZHk+IHRvIHlvdXIgY29kZSB0byBtYXRjaCB0aGUgRE9NIHRyZWUgZ2VuZXJhdGVkIGJ5ICcgKyAndGhlIGJyb3dzZXIuJztcbiAgICAgIH1cbiAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ3ZhbGlkYXRlRE9NTmVzdGluZyguLi4pOiAlcyBjYW5ub3QgYXBwZWFyIGFzIGEgY2hpbGQgb2YgPCVzPi4lcyVzJXMnLCB0YWdEaXNwbGF5TmFtZSwgYW5jZXN0b3JUYWcsIHdoaXRlc3BhY2VJbmZvLCBpbmZvLCBhZGRlbmR1bSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ3ZhbGlkYXRlRE9NTmVzdGluZyguLi4pOiAlcyBjYW5ub3QgYXBwZWFyIGFzIGEgZGVzY2VuZGFudCBvZiAnICsgJzwlcz4uJXMnLCB0YWdEaXNwbGF5TmFtZSwgYW5jZXN0b3JUYWcsIGFkZGVuZHVtKTtcbiAgICB9XG4gIH07XG59XG5cbi8vIFJlbmRlcmVycyB0aGF0IGRvbid0IHN1cHBvcnQgcGVyc2lzdGVuY2Vcbi8vIGNhbiByZS1leHBvcnQgZXZlcnl0aGluZyBmcm9tIHRoaXMgbW9kdWxlLlxuXG5mdW5jdGlvbiBzaGltKCkge1xuICBpbnZhcmlhbnQoZmFsc2UsICdUaGUgY3VycmVudCByZW5kZXJlciBkb2VzIG5vdCBzdXBwb3J0IHBlcnNpc3RlbmNlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xufVxuXG4vLyBQZXJzaXN0ZW5jZSAod2hlbiB1bnN1cHBvcnRlZClcbnZhciBzdXBwb3J0c1BlcnNpc3RlbmNlID0gZmFsc2U7XG52YXIgY2xvbmVJbnN0YW5jZSA9IHNoaW07XG52YXIgY3JlYXRlQ29udGFpbmVyQ2hpbGRTZXQgPSBzaGltO1xudmFyIGFwcGVuZENoaWxkVG9Db250YWluZXJDaGlsZFNldCA9IHNoaW07XG52YXIgZmluYWxpemVDb250YWluZXJDaGlsZHJlbiA9IHNoaW07XG52YXIgcmVwbGFjZUNvbnRhaW5lckNoaWxkcmVuID0gc2hpbTtcbnZhciBjbG9uZUhpZGRlbkluc3RhbmNlID0gc2hpbTtcbnZhciBjbG9uZVVuaGlkZGVuSW5zdGFuY2UgPSBzaGltO1xudmFyIGNyZWF0ZUhpZGRlblRleHRJbnN0YW5jZSA9IHNoaW07XG5cbnZhciBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyA9IHZvaWQgMDtcbntcbiAgU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkcgPSAnc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nJztcbn1cblxudmFyIFNVU1BFTlNFX1NUQVJUX0RBVEEgPSAnJCc7XG52YXIgU1VTUEVOU0VfRU5EX0RBVEEgPSAnLyQnO1xuXG52YXIgU1RZTEUgPSAnc3R5bGUnO1xuXG52YXIgZXZlbnRzRW5hYmxlZCA9IG51bGw7XG52YXIgc2VsZWN0aW9uSW5mb3JtYXRpb24gPSBudWxsO1xuXG5mdW5jdGlvbiBzaG91bGRBdXRvRm9jdXNIb3N0Q29tcG9uZW50KHR5cGUsIHByb3BzKSB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ2J1dHRvbic6XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgcmV0dXJuICEhcHJvcHMuYXV0b0ZvY3VzO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0Um9vdEhvc3RDb250ZXh0KHJvb3RDb250YWluZXJJbnN0YW5jZSkge1xuICB2YXIgdHlwZSA9IHZvaWQgMDtcbiAgdmFyIG5hbWVzcGFjZSA9IHZvaWQgMDtcbiAgdmFyIG5vZGVUeXBlID0gcm9vdENvbnRhaW5lckluc3RhbmNlLm5vZGVUeXBlO1xuICBzd2l0Y2ggKG5vZGVUeXBlKSB7XG4gICAgY2FzZSBET0NVTUVOVF9OT0RFOlxuICAgIGNhc2UgRE9DVU1FTlRfRlJBR01FTlRfTk9ERTpcbiAgICAgIHtcbiAgICAgICAgdHlwZSA9IG5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFID8gJyNkb2N1bWVudCcgOiAnI2ZyYWdtZW50JztcbiAgICAgICAgdmFyIHJvb3QgPSByb290Q29udGFpbmVySW5zdGFuY2UuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICBuYW1lc3BhY2UgPSByb290ID8gcm9vdC5uYW1lc3BhY2VVUkkgOiBnZXRDaGlsZE5hbWVzcGFjZShudWxsLCAnJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHZhciBjb250YWluZXIgPSBub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFID8gcm9vdENvbnRhaW5lckluc3RhbmNlLnBhcmVudE5vZGUgOiByb290Q29udGFpbmVySW5zdGFuY2U7XG4gICAgICAgIHZhciBvd25OYW1lc3BhY2UgPSBjb250YWluZXIubmFtZXNwYWNlVVJJIHx8IG51bGw7XG4gICAgICAgIHR5cGUgPSBjb250YWluZXIudGFnTmFtZTtcbiAgICAgICAgbmFtZXNwYWNlID0gZ2V0Q2hpbGROYW1lc3BhY2Uob3duTmFtZXNwYWNlLCB0eXBlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gIH1cbiAge1xuICAgIHZhciB2YWxpZGF0ZWRUYWcgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIF9hbmNlc3RvckluZm8gPSB1cGRhdGVkQW5jZXN0b3JJbmZvKG51bGwsIHZhbGlkYXRlZFRhZyk7XG4gICAgcmV0dXJuIHsgbmFtZXNwYWNlOiBuYW1lc3BhY2UsIGFuY2VzdG9ySW5mbzogX2FuY2VzdG9ySW5mbyB9O1xuICB9XG4gIHJldHVybiBuYW1lc3BhY2U7XG59XG5cbmZ1bmN0aW9uIGdldENoaWxkSG9zdENvbnRleHQocGFyZW50SG9zdENvbnRleHQsIHR5cGUsIHJvb3RDb250YWluZXJJbnN0YW5jZSkge1xuICB7XG4gICAgdmFyIHBhcmVudEhvc3RDb250ZXh0RGV2ID0gcGFyZW50SG9zdENvbnRleHQ7XG4gICAgdmFyIF9uYW1lc3BhY2UgPSBnZXRDaGlsZE5hbWVzcGFjZShwYXJlbnRIb3N0Q29udGV4dERldi5uYW1lc3BhY2UsIHR5cGUpO1xuICAgIHZhciBfYW5jZXN0b3JJbmZvMiA9IHVwZGF0ZWRBbmNlc3RvckluZm8ocGFyZW50SG9zdENvbnRleHREZXYuYW5jZXN0b3JJbmZvLCB0eXBlKTtcbiAgICByZXR1cm4geyBuYW1lc3BhY2U6IF9uYW1lc3BhY2UsIGFuY2VzdG9ySW5mbzogX2FuY2VzdG9ySW5mbzIgfTtcbiAgfVxuICB2YXIgcGFyZW50TmFtZXNwYWNlID0gcGFyZW50SG9zdENvbnRleHQ7XG4gIHJldHVybiBnZXRDaGlsZE5hbWVzcGFjZShwYXJlbnROYW1lc3BhY2UsIHR5cGUpO1xufVxuXG5mdW5jdGlvbiBnZXRQdWJsaWNJbnN0YW5jZShpbnN0YW5jZSkge1xuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVGb3JDb21taXQoY29udGFpbmVySW5mbykge1xuICBldmVudHNFbmFibGVkID0gaXNFbmFibGVkKCk7XG4gIHNlbGVjdGlvbkluZm9ybWF0aW9uID0gZ2V0U2VsZWN0aW9uSW5mb3JtYXRpb24oKTtcbiAgc2V0RW5hYmxlZChmYWxzZSk7XG59XG5cbmZ1bmN0aW9uIHJlc2V0QWZ0ZXJDb21taXQoY29udGFpbmVySW5mbykge1xuICByZXN0b3JlU2VsZWN0aW9uKHNlbGVjdGlvbkluZm9ybWF0aW9uKTtcbiAgc2VsZWN0aW9uSW5mb3JtYXRpb24gPSBudWxsO1xuICBzZXRFbmFibGVkKGV2ZW50c0VuYWJsZWQpO1xuICBldmVudHNFbmFibGVkID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UodHlwZSwgcHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgdmFyIHBhcmVudE5hbWVzcGFjZSA9IHZvaWQgMDtcbiAge1xuICAgIC8vIFRPRE86IHRha2UgbmFtZXNwYWNlIGludG8gYWNjb3VudCB3aGVuIHZhbGlkYXRpbmcuXG4gICAgdmFyIGhvc3RDb250ZXh0RGV2ID0gaG9zdENvbnRleHQ7XG4gICAgdmFsaWRhdGVET01OZXN0aW5nKHR5cGUsIG51bGwsIGhvc3RDb250ZXh0RGV2LmFuY2VzdG9ySW5mbyk7XG4gICAgaWYgKHR5cGVvZiBwcm9wcy5jaGlsZHJlbiA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHByb3BzLmNoaWxkcmVuID09PSAnbnVtYmVyJykge1xuICAgICAgdmFyIHN0cmluZyA9ICcnICsgcHJvcHMuY2hpbGRyZW47XG4gICAgICB2YXIgb3duQW5jZXN0b3JJbmZvID0gdXBkYXRlZEFuY2VzdG9ySW5mbyhob3N0Q29udGV4dERldi5hbmNlc3RvckluZm8sIHR5cGUpO1xuICAgICAgdmFsaWRhdGVET01OZXN0aW5nKG51bGwsIHN0cmluZywgb3duQW5jZXN0b3JJbmZvKTtcbiAgICB9XG4gICAgcGFyZW50TmFtZXNwYWNlID0gaG9zdENvbnRleHREZXYubmFtZXNwYWNlO1xuICB9XG4gIHZhciBkb21FbGVtZW50ID0gY3JlYXRlRWxlbWVudCh0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBwYXJlbnROYW1lc3BhY2UpO1xuICBwcmVjYWNoZUZpYmVyTm9kZShpbnRlcm5hbEluc3RhbmNlSGFuZGxlLCBkb21FbGVtZW50KTtcbiAgdXBkYXRlRmliZXJQcm9wcyhkb21FbGVtZW50LCBwcm9wcyk7XG4gIHJldHVybiBkb21FbGVtZW50O1xufVxuXG5mdW5jdGlvbiBhcHBlbmRJbml0aWFsQ2hpbGQocGFyZW50SW5zdGFuY2UsIGNoaWxkKSB7XG4gIHBhcmVudEluc3RhbmNlLmFwcGVuZENoaWxkKGNoaWxkKTtcbn1cblxuZnVuY3Rpb24gZmluYWxpemVJbml0aWFsQ2hpbGRyZW4oZG9tRWxlbWVudCwgdHlwZSwgcHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQpIHtcbiAgc2V0SW5pdGlhbFByb3BlcnRpZXMoZG9tRWxlbWVudCwgdHlwZSwgcHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSk7XG4gIHJldHVybiBzaG91bGRBdXRvRm9jdXNIb3N0Q29tcG9uZW50KHR5cGUsIHByb3BzKTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZVVwZGF0ZShkb21FbGVtZW50LCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQpIHtcbiAge1xuICAgIHZhciBob3N0Q29udGV4dERldiA9IGhvc3RDb250ZXh0O1xuICAgIGlmICh0eXBlb2YgbmV3UHJvcHMuY2hpbGRyZW4gIT09IHR5cGVvZiBvbGRQcm9wcy5jaGlsZHJlbiAmJiAodHlwZW9mIG5ld1Byb3BzLmNoaWxkcmVuID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbmV3UHJvcHMuY2hpbGRyZW4gPT09ICdudW1iZXInKSkge1xuICAgICAgdmFyIHN0cmluZyA9ICcnICsgbmV3UHJvcHMuY2hpbGRyZW47XG4gICAgICB2YXIgb3duQW5jZXN0b3JJbmZvID0gdXBkYXRlZEFuY2VzdG9ySW5mbyhob3N0Q29udGV4dERldi5hbmNlc3RvckluZm8sIHR5cGUpO1xuICAgICAgdmFsaWRhdGVET01OZXN0aW5nKG51bGwsIHN0cmluZywgb3duQW5jZXN0b3JJbmZvKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRpZmZQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHR5cGUsIG9sZFByb3BzLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkU2V0VGV4dENvbnRlbnQodHlwZSwgcHJvcHMpIHtcbiAgcmV0dXJuIHR5cGUgPT09ICd0ZXh0YXJlYScgfHwgdHlwZSA9PT0gJ29wdGlvbicgfHwgdHlwZSA9PT0gJ25vc2NyaXB0JyB8fCB0eXBlb2YgcHJvcHMuY2hpbGRyZW4gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBwcm9wcy5jaGlsZHJlbiA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID09PSAnb2JqZWN0JyAmJiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCAhPT0gbnVsbCAmJiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWwgIT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gc2hvdWxkRGVwcmlvcml0aXplU3VidHJlZSh0eXBlLCBwcm9wcykge1xuICByZXR1cm4gISFwcm9wcy5oaWRkZW47XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVRleHRJbnN0YW5jZSh0ZXh0LCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0LCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIHtcbiAgICB2YXIgaG9zdENvbnRleHREZXYgPSBob3N0Q29udGV4dDtcbiAgICB2YWxpZGF0ZURPTU5lc3RpbmcobnVsbCwgdGV4dCwgaG9zdENvbnRleHREZXYuYW5jZXN0b3JJbmZvKTtcbiAgfVxuICB2YXIgdGV4dE5vZGUgPSBjcmVhdGVUZXh0Tm9kZSh0ZXh0LCByb290Q29udGFpbmVySW5zdGFuY2UpO1xuICBwcmVjYWNoZUZpYmVyTm9kZShpbnRlcm5hbEluc3RhbmNlSGFuZGxlLCB0ZXh0Tm9kZSk7XG4gIHJldHVybiB0ZXh0Tm9kZTtcbn1cblxudmFyIGlzUHJpbWFyeVJlbmRlcmVyID0gdHJ1ZTtcbi8vIFRoaXMgaW5pdGlhbGl6YXRpb24gY29kZSBtYXkgcnVuIGV2ZW4gb24gc2VydmVyIGVudmlyb25tZW50c1xuLy8gaWYgYSBjb21wb25lbnQganVzdCBpbXBvcnRzIFJlYWN0RE9NIChlLmcuIGZvciBmaW5kRE9NTm9kZSkuXG4vLyBTb21lIGVudmlyb25tZW50cyBtaWdodCBub3QgaGF2ZSBzZXRUaW1lb3V0IG9yIGNsZWFyVGltZW91dC5cbnZhciBzY2hlZHVsZVRpbWVvdXQgPSB0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJyA/IHNldFRpbWVvdXQgOiB1bmRlZmluZWQ7XG52YXIgY2FuY2VsVGltZW91dCA9IHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicgPyBjbGVhclRpbWVvdXQgOiB1bmRlZmluZWQ7XG52YXIgbm9UaW1lb3V0ID0gLTE7XG52YXIgc2NoZWR1bGVQYXNzaXZlRWZmZWN0cyA9IHNjaGVkdWxlci51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrO1xudmFyIGNhbmNlbFBhc3NpdmVFZmZlY3RzID0gc2NoZWR1bGVyLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyAgICAgTXV0YXRpb25cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIHN1cHBvcnRzTXV0YXRpb24gPSB0cnVlO1xuXG5mdW5jdGlvbiBjb21taXRNb3VudChkb21FbGVtZW50LCB0eXBlLCBuZXdQcm9wcywgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSkge1xuICAvLyBEZXNwaXRlIHRoZSBuYW1pbmcgdGhhdCBtaWdodCBpbXBseSBvdGhlcndpc2UsIHRoaXMgbWV0aG9kIG9ubHlcbiAgLy8gZmlyZXMgaWYgdGhlcmUgaXMgYW4gYFVwZGF0ZWAgZWZmZWN0IHNjaGVkdWxlZCBkdXJpbmcgbW91bnRpbmcuXG4gIC8vIFRoaXMgaGFwcGVucyBpZiBgZmluYWxpemVJbml0aWFsQ2hpbGRyZW5gIHJldHVybnMgYHRydWVgICh3aGljaCBpdFxuICAvLyBkb2VzIHRvIGltcGxlbWVudCB0aGUgYGF1dG9Gb2N1c2AgYXR0cmlidXRlIG9uIHRoZSBjbGllbnQpLiBCdXRcbiAgLy8gdGhlcmUgYXJlIGFsc28gb3RoZXIgY2FzZXMgd2hlbiB0aGlzIG1pZ2h0IGhhcHBlbiAoc3VjaCBhcyBwYXRjaGluZ1xuICAvLyB1cCB0ZXh0IGNvbnRlbnQgZHVyaW5nIGh5ZHJhdGlvbiBtaXNtYXRjaCkuIFNvIHdlJ2xsIGNoZWNrIHRoaXMgYWdhaW4uXG4gIGlmIChzaG91bGRBdXRvRm9jdXNIb3N0Q29tcG9uZW50KHR5cGUsIG5ld1Byb3BzKSkge1xuICAgIGRvbUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRVcGRhdGUoZG9tRWxlbWVudCwgdXBkYXRlUGF5bG9hZCwgdHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzLCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIC8vIFVwZGF0ZSB0aGUgcHJvcHMgaGFuZGxlIHNvIHRoYXQgd2Uga25vdyB3aGljaCBwcm9wcyBhcmUgdGhlIG9uZXMgd2l0aFxuICAvLyB3aXRoIGN1cnJlbnQgZXZlbnQgaGFuZGxlcnMuXG4gIHVwZGF0ZUZpYmVyUHJvcHMoZG9tRWxlbWVudCwgbmV3UHJvcHMpO1xuICAvLyBBcHBseSB0aGUgZGlmZiB0byB0aGUgRE9NIG5vZGUuXG4gIHVwZGF0ZVByb3BlcnRpZXMoZG9tRWxlbWVudCwgdXBkYXRlUGF5bG9hZCwgdHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzKTtcbn1cblxuZnVuY3Rpb24gcmVzZXRUZXh0Q29udGVudChkb21FbGVtZW50KSB7XG4gIHNldFRleHRDb250ZW50KGRvbUVsZW1lbnQsICcnKTtcbn1cblxuZnVuY3Rpb24gY29tbWl0VGV4dFVwZGF0ZSh0ZXh0SW5zdGFuY2UsIG9sZFRleHQsIG5ld1RleHQpIHtcbiAgdGV4dEluc3RhbmNlLm5vZGVWYWx1ZSA9IG5ld1RleHQ7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZENoaWxkKHBhcmVudEluc3RhbmNlLCBjaGlsZCkge1xuICBwYXJlbnRJbnN0YW5jZS5hcHBlbmRDaGlsZChjaGlsZCk7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZENoaWxkVG9Db250YWluZXIoY29udGFpbmVyLCBjaGlsZCkge1xuICB2YXIgcGFyZW50Tm9kZSA9IHZvaWQgMDtcbiAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgcGFyZW50Tm9kZSA9IGNvbnRhaW5lci5wYXJlbnROb2RlO1xuICAgIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGNoaWxkLCBjb250YWluZXIpO1xuICB9IGVsc2Uge1xuICAgIHBhcmVudE5vZGUgPSBjb250YWluZXI7XG4gICAgcGFyZW50Tm9kZS5hcHBlbmRDaGlsZChjaGlsZCk7XG4gIH1cbiAgLy8gVGhpcyBjb250YWluZXIgbWlnaHQgYmUgdXNlZCBmb3IgYSBwb3J0YWwuXG4gIC8vIElmIHNvbWV0aGluZyBpbnNpZGUgYSBwb3J0YWwgaXMgY2xpY2tlZCwgdGhhdCBjbGljayBzaG91bGQgYnViYmxlXG4gIC8vIHRocm91Z2ggdGhlIFJlYWN0IHRyZWUuIEhvd2V2ZXIsIG9uIE1vYmlsZSBTYWZhcmkgdGhlIGNsaWNrIHdvdWxkXG4gIC8vIG5ldmVyIGJ1YmJsZSB0aHJvdWdoIHRoZSAqRE9NKiB0cmVlIHVubGVzcyBhbiBhbmNlc3RvciB3aXRoIG9uY2xpY2tcbiAgLy8gZXZlbnQgZXhpc3RzLiBTbyB3ZSB3b3VsZG4ndCBzZWUgaXQgYW5kIGRpc3BhdGNoIGl0LlxuICAvLyBUaGlzIGlzIHdoeSB3ZSBlbnN1cmUgdGhhdCBub24gUmVhY3Qgcm9vdCBjb250YWluZXJzIGhhdmUgaW5saW5lIG9uY2xpY2tcbiAgLy8gZGVmaW5lZC5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMTkxOFxuICB2YXIgcmVhY3RSb290Q29udGFpbmVyID0gY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXI7XG4gIGlmICgocmVhY3RSb290Q29udGFpbmVyID09PSBudWxsIHx8IHJlYWN0Um9vdENvbnRhaW5lciA9PT0gdW5kZWZpbmVkKSAmJiBwYXJlbnROb2RlLm9uY2xpY2sgPT09IG51bGwpIHtcbiAgICAvLyBUT0RPOiBUaGlzIGNhc3QgbWF5IG5vdCBiZSBzb3VuZCBmb3IgU1ZHLCBNYXRoTUwgb3IgY3VzdG9tIGVsZW1lbnRzLlxuICAgIHRyYXBDbGlja09uTm9uSW50ZXJhY3RpdmVFbGVtZW50KHBhcmVudE5vZGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluc2VydEJlZm9yZShwYXJlbnRJbnN0YW5jZSwgY2hpbGQsIGJlZm9yZUNoaWxkKSB7XG4gIHBhcmVudEluc3RhbmNlLmluc2VydEJlZm9yZShjaGlsZCwgYmVmb3JlQ2hpbGQpO1xufVxuXG5mdW5jdGlvbiBpbnNlcnRJbkNvbnRhaW5lckJlZm9yZShjb250YWluZXIsIGNoaWxkLCBiZWZvcmVDaGlsZCkge1xuICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHtcbiAgICBjb250YWluZXIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY2hpbGQsIGJlZm9yZUNoaWxkKTtcbiAgfSBlbHNlIHtcbiAgICBjb250YWluZXIuaW5zZXJ0QmVmb3JlKGNoaWxkLCBiZWZvcmVDaGlsZCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ2hpbGQocGFyZW50SW5zdGFuY2UsIGNoaWxkKSB7XG4gIHBhcmVudEluc3RhbmNlLnJlbW92ZUNoaWxkKGNoaWxkKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ2hpbGRGcm9tQ29udGFpbmVyKGNvbnRhaW5lciwgY2hpbGQpIHtcbiAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgY29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICB9IGVsc2Uge1xuICAgIGNvbnRhaW5lci5yZW1vdmVDaGlsZChjaGlsZCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2xlYXJTdXNwZW5zZUJvdW5kYXJ5KHBhcmVudEluc3RhbmNlLCBzdXNwZW5zZUluc3RhbmNlKSB7XG4gIHZhciBub2RlID0gc3VzcGVuc2VJbnN0YW5jZTtcbiAgLy8gRGVsZXRlIGFsbCBub2RlcyB3aXRoaW4gdGhpcyBzdXNwZW5zZSBib3VuZGFyeS5cbiAgLy8gVGhlcmUgbWlnaHQgYmUgbmVzdGVkIG5vZGVzIHNvIHdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiBob3dcbiAgLy8gZGVlcCB3ZSBhcmUgYW5kIG9ubHkgYnJlYWsgb3V0IHdoZW4gd2UncmUgYmFjayBvbiB0b3AuXG4gIHZhciBkZXB0aCA9IDA7XG4gIGRvIHtcbiAgICB2YXIgbmV4dE5vZGUgPSBub2RlLm5leHRTaWJsaW5nO1xuICAgIHBhcmVudEluc3RhbmNlLnJlbW92ZUNoaWxkKG5vZGUpO1xuICAgIGlmIChuZXh0Tm9kZSAmJiBuZXh0Tm9kZS5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgICB2YXIgZGF0YSA9IG5leHROb2RlLmRhdGE7XG4gICAgICBpZiAoZGF0YSA9PT0gU1VTUEVOU0VfRU5EX0RBVEEpIHtcbiAgICAgICAgaWYgKGRlcHRoID09PSAwKSB7XG4gICAgICAgICAgcGFyZW50SW5zdGFuY2UucmVtb3ZlQ2hpbGQobmV4dE5vZGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZXB0aC0tO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGRhdGEgPT09IFNVU1BFTlNFX1NUQVJUX0RBVEEpIHtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgIH1cbiAgICB9XG4gICAgbm9kZSA9IG5leHROb2RlO1xuICB9IHdoaWxlIChub2RlKTtcbiAgLy8gVE9ETzogV2Fybiwgd2UgZGlkbid0IGZpbmQgdGhlIGVuZCBjb21tZW50IGJvdW5kYXJ5LlxufVxuXG5mdW5jdGlvbiBjbGVhclN1c3BlbnNlQm91bmRhcnlGcm9tQ29udGFpbmVyKGNvbnRhaW5lciwgc3VzcGVuc2VJbnN0YW5jZSkge1xuICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHtcbiAgICBjbGVhclN1c3BlbnNlQm91bmRhcnkoY29udGFpbmVyLnBhcmVudE5vZGUsIHN1c3BlbnNlSW5zdGFuY2UpO1xuICB9IGVsc2UgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgY2xlYXJTdXNwZW5zZUJvdW5kYXJ5KGNvbnRhaW5lciwgc3VzcGVuc2VJbnN0YW5jZSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gRG9jdW1lbnQgbm9kZXMgc2hvdWxkIG5ldmVyIGNvbnRhaW4gc3VzcGVuc2UgYm91bmRhcmllcy5cbiAgfVxufVxuXG5mdW5jdGlvbiBoaWRlSW5zdGFuY2UoaW5zdGFuY2UpIHtcbiAgLy8gVE9ETzogRG9lcyB0aGlzIHdvcmsgZm9yIGFsbCBlbGVtZW50IHR5cGVzPyBXaGF0IGFib3V0IE1hdGhNTD8gU2hvdWxkIHdlXG4gIC8vIHBhc3MgaG9zdCBjb250ZXh0IHRvIHRoaXMgbWV0aG9kP1xuICBpbnN0YW5jZSA9IGluc3RhbmNlO1xuICBpbnN0YW5jZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xufVxuXG5mdW5jdGlvbiBoaWRlVGV4dEluc3RhbmNlKHRleHRJbnN0YW5jZSkge1xuICB0ZXh0SW5zdGFuY2Uubm9kZVZhbHVlID0gJyc7XG59XG5cbmZ1bmN0aW9uIHVuaGlkZUluc3RhbmNlKGluc3RhbmNlLCBwcm9wcykge1xuICBpbnN0YW5jZSA9IGluc3RhbmNlO1xuICB2YXIgc3R5bGVQcm9wID0gcHJvcHNbU1RZTEVdO1xuICB2YXIgZGlzcGxheSA9IHN0eWxlUHJvcCAhPT0gdW5kZWZpbmVkICYmIHN0eWxlUHJvcCAhPT0gbnVsbCAmJiBzdHlsZVByb3AuaGFzT3duUHJvcGVydHkoJ2Rpc3BsYXknKSA/IHN0eWxlUHJvcC5kaXNwbGF5IDogbnVsbDtcbiAgaW5zdGFuY2Uuc3R5bGUuZGlzcGxheSA9IGRhbmdlcm91c1N0eWxlVmFsdWUoJ2Rpc3BsYXknLCBkaXNwbGF5KTtcbn1cblxuZnVuY3Rpb24gdW5oaWRlVGV4dEluc3RhbmNlKHRleHRJbnN0YW5jZSwgdGV4dCkge1xuICB0ZXh0SW5zdGFuY2Uubm9kZVZhbHVlID0gdGV4dDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gICAgIEh5ZHJhdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgc3VwcG9ydHNIeWRyYXRpb24gPSB0cnVlO1xuXG5mdW5jdGlvbiBjYW5IeWRyYXRlSW5zdGFuY2UoaW5zdGFuY2UsIHR5cGUsIHByb3BzKSB7XG4gIGlmIChpbnN0YW5jZS5ub2RlVHlwZSAhPT0gRUxFTUVOVF9OT0RFIHx8IHR5cGUudG9Mb3dlckNhc2UoKSAhPT0gaW5zdGFuY2Uubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8vIFRoaXMgaGFzIG5vdyBiZWVuIHJlZmluZWQgdG8gYW4gZWxlbWVudCBub2RlLlxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbmZ1bmN0aW9uIGNhbkh5ZHJhdGVUZXh0SW5zdGFuY2UoaW5zdGFuY2UsIHRleHQpIHtcbiAgaWYgKHRleHQgPT09ICcnIHx8IGluc3RhbmNlLm5vZGVUeXBlICE9PSBURVhUX05PREUpIHtcbiAgICAvLyBFbXB0eSBzdHJpbmdzIGFyZSBub3QgcGFyc2VkIGJ5IEhUTUwgc28gdGhlcmUgd29uJ3QgYmUgYSBjb3JyZWN0IG1hdGNoIGhlcmUuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gVGhpcyBoYXMgbm93IGJlZW4gcmVmaW5lZCB0byBhIHRleHQgbm9kZS5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG5mdW5jdGlvbiBjYW5IeWRyYXRlU3VzcGVuc2VJbnN0YW5jZShpbnN0YW5jZSkge1xuICBpZiAoaW5zdGFuY2Uubm9kZVR5cGUgIT09IENPTU1FTlRfTk9ERSkge1xuICAgIC8vIEVtcHR5IHN0cmluZ3MgYXJlIG5vdCBwYXJzZWQgYnkgSFRNTCBzbyB0aGVyZSB3b24ndCBiZSBhIGNvcnJlY3QgbWF0Y2ggaGVyZS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvLyBUaGlzIGhhcyBub3cgYmVlbiByZWZpbmVkIHRvIGEgc3VzcGVuc2Ugbm9kZS5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG5mdW5jdGlvbiBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcoaW5zdGFuY2UpIHtcbiAgdmFyIG5vZGUgPSBpbnN0YW5jZS5uZXh0U2libGluZztcbiAgLy8gU2tpcCBub24taHlkcmF0YWJsZSBub2Rlcy5cbiAgd2hpbGUgKG5vZGUgJiYgbm9kZS5ub2RlVHlwZSAhPT0gRUxFTUVOVF9OT0RFICYmIG5vZGUubm9kZVR5cGUgIT09IFRFWFRfTk9ERSAmJiAoIWVuYWJsZVN1c3BlbnNlU2VydmVyUmVuZGVyZXIgfHwgbm9kZS5ub2RlVHlwZSAhPT0gQ09NTUVOVF9OT0RFIHx8IG5vZGUuZGF0YSAhPT0gU1VTUEVOU0VfU1RBUlRfREFUQSkpIHtcbiAgICBub2RlID0gbm9kZS5uZXh0U2libGluZztcbiAgfVxuICByZXR1cm4gbm9kZTtcbn1cblxuZnVuY3Rpb24gZ2V0Rmlyc3RIeWRyYXRhYmxlQ2hpbGQocGFyZW50SW5zdGFuY2UpIHtcbiAgdmFyIG5leHQgPSBwYXJlbnRJbnN0YW5jZS5maXJzdENoaWxkO1xuICAvLyBTa2lwIG5vbi1oeWRyYXRhYmxlIG5vZGVzLlxuICB3aGlsZSAobmV4dCAmJiBuZXh0Lm5vZGVUeXBlICE9PSBFTEVNRU5UX05PREUgJiYgbmV4dC5ub2RlVHlwZSAhPT0gVEVYVF9OT0RFICYmICghZW5hYmxlU3VzcGVuc2VTZXJ2ZXJSZW5kZXJlciB8fCBuZXh0Lm5vZGVUeXBlICE9PSBDT01NRU5UX05PREUgfHwgbmV4dC5kYXRhICE9PSBTVVNQRU5TRV9TVEFSVF9EQVRBKSkge1xuICAgIG5leHQgPSBuZXh0Lm5leHRTaWJsaW5nO1xuICB9XG4gIHJldHVybiBuZXh0O1xufVxuXG5mdW5jdGlvbiBoeWRyYXRlSW5zdGFuY2UoaW5zdGFuY2UsIHR5cGUsIHByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0LCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIHByZWNhY2hlRmliZXJOb2RlKGludGVybmFsSW5zdGFuY2VIYW5kbGUsIGluc3RhbmNlKTtcbiAgLy8gVE9ETzogUG9zc2libHkgZGVmZXIgdGhpcyB1bnRpbCB0aGUgY29tbWl0IHBoYXNlIHdoZXJlIGFsbCB0aGUgZXZlbnRzXG4gIC8vIGdldCBhdHRhY2hlZC5cbiAgdXBkYXRlRmliZXJQcm9wcyhpbnN0YW5jZSwgcHJvcHMpO1xuICB2YXIgcGFyZW50TmFtZXNwYWNlID0gdm9pZCAwO1xuICB7XG4gICAgdmFyIGhvc3RDb250ZXh0RGV2ID0gaG9zdENvbnRleHQ7XG4gICAgcGFyZW50TmFtZXNwYWNlID0gaG9zdENvbnRleHREZXYubmFtZXNwYWNlO1xuICB9XG4gIHJldHVybiBkaWZmSHlkcmF0ZWRQcm9wZXJ0aWVzKGluc3RhbmNlLCB0eXBlLCBwcm9wcywgcGFyZW50TmFtZXNwYWNlLCByb290Q29udGFpbmVySW5zdGFuY2UpO1xufVxuXG5mdW5jdGlvbiBoeWRyYXRlVGV4dEluc3RhbmNlKHRleHRJbnN0YW5jZSwgdGV4dCwgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSkge1xuICBwcmVjYWNoZUZpYmVyTm9kZShpbnRlcm5hbEluc3RhbmNlSGFuZGxlLCB0ZXh0SW5zdGFuY2UpO1xuICByZXR1cm4gZGlmZkh5ZHJhdGVkVGV4dCh0ZXh0SW5zdGFuY2UsIHRleHQpO1xufVxuXG5mdW5jdGlvbiBnZXROZXh0SHlkcmF0YWJsZUluc3RhbmNlQWZ0ZXJTdXNwZW5zZUluc3RhbmNlKHN1c3BlbnNlSW5zdGFuY2UpIHtcbiAgdmFyIG5vZGUgPSBzdXNwZW5zZUluc3RhbmNlLm5leHRTaWJsaW5nO1xuICAvLyBTa2lwIHBhc3QgYWxsIG5vZGVzIHdpdGhpbiB0aGlzIHN1c3BlbnNlIGJvdW5kYXJ5LlxuICAvLyBUaGVyZSBtaWdodCBiZSBuZXN0ZWQgbm9kZXMgc28gd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIGhvd1xuICAvLyBkZWVwIHdlIGFyZSBhbmQgb25seSBicmVhayBvdXQgd2hlbiB3ZSdyZSBiYWNrIG9uIHRvcC5cbiAgdmFyIGRlcHRoID0gMDtcbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgICB2YXIgZGF0YSA9IG5vZGUuZGF0YTtcbiAgICAgIGlmIChkYXRhID09PSBTVVNQRU5TRV9FTkRfREFUQSkge1xuICAgICAgICBpZiAoZGVwdGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gZ2V0TmV4dEh5ZHJhdGFibGVTaWJsaW5nKG5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlcHRoLS07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PT0gU1VTUEVOU0VfU1RBUlRfREFUQSkge1xuICAgICAgICBkZXB0aCsrO1xuICAgICAgfVxuICAgIH1cbiAgICBub2RlID0gbm9kZS5uZXh0U2libGluZztcbiAgfVxuICAvLyBUT0RPOiBXYXJuLCB3ZSBkaWRuJ3QgZmluZCB0aGUgZW5kIGNvbW1lbnQgYm91bmRhcnkuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBkaWROb3RNYXRjaEh5ZHJhdGVkQ29udGFpbmVyVGV4dEluc3RhbmNlKHBhcmVudENvbnRhaW5lciwgdGV4dEluc3RhbmNlLCB0ZXh0KSB7XG4gIHtcbiAgICB3YXJuRm9yVW5tYXRjaGVkVGV4dCh0ZXh0SW5zdGFuY2UsIHRleHQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRpZE5vdE1hdGNoSHlkcmF0ZWRUZXh0SW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCB0ZXh0SW5zdGFuY2UsIHRleHQpIHtcbiAgaWYgKHRydWUgJiYgcGFyZW50UHJvcHNbU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkddICE9PSB0cnVlKSB7XG4gICAgd2FybkZvclVubWF0Y2hlZFRleHQodGV4dEluc3RhbmNlLCB0ZXh0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkaWROb3RIeWRyYXRlQ29udGFpbmVySW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCBpbnN0YW5jZSkge1xuICB7XG4gICAgaWYgKGluc3RhbmNlLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUpIHtcbiAgICAgIHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZUVsZW1lbnQocGFyZW50Q29udGFpbmVyLCBpbnN0YW5jZSk7XG4gICAgfSBlbHNlIGlmIChpbnN0YW5jZS5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgICAvLyBUT0RPOiB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVTdXNwZW5zZUJvdW5kYXJ5XG4gICAgfSBlbHNlIHtcbiAgICAgIHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZVRleHQocGFyZW50Q29udGFpbmVyLCBpbnN0YW5jZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRpZE5vdEh5ZHJhdGVJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIGluc3RhbmNlKSB7XG4gIGlmICh0cnVlICYmIHBhcmVudFByb3BzW1NVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HXSAhPT0gdHJ1ZSkge1xuICAgIGlmIChpbnN0YW5jZS5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgICB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVFbGVtZW50KHBhcmVudEluc3RhbmNlLCBpbnN0YW5jZSk7XG4gICAgfSBlbHNlIGlmIChpbnN0YW5jZS5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgICAvLyBUT0RPOiB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVTdXNwZW5zZUJvdW5kYXJ5XG4gICAgfSBlbHNlIHtcbiAgICAgIHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZVRleHQocGFyZW50SW5zdGFuY2UsIGluc3RhbmNlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZGlkTm90RmluZEh5ZHJhdGFibGVDb250YWluZXJJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIHR5cGUsIHByb3BzKSB7XG4gIHtcbiAgICB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZEVsZW1lbnQocGFyZW50Q29udGFpbmVyLCB0eXBlLCBwcm9wcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGlkTm90RmluZEh5ZHJhdGFibGVDb250YWluZXJUZXh0SW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0ZXh0KSB7XG4gIHtcbiAgICB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZFRleHQocGFyZW50Q29udGFpbmVyLCB0ZXh0KTtcbiAgfVxufVxuXG5cblxuZnVuY3Rpb24gZGlkTm90RmluZEh5ZHJhdGFibGVJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIHR5cGUsIHByb3BzKSB7XG4gIGlmICh0cnVlICYmIHBhcmVudFByb3BzW1NVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HXSAhPT0gdHJ1ZSkge1xuICAgIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkRWxlbWVudChwYXJlbnRJbnN0YW5jZSwgdHlwZSwgcHJvcHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRpZE5vdEZpbmRIeWRyYXRhYmxlVGV4dEluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgdGV4dCkge1xuICBpZiAodHJ1ZSAmJiBwYXJlbnRQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklOR10gIT09IHRydWUpIHtcbiAgICB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZFRleHQocGFyZW50SW5zdGFuY2UsIHRleHQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRpZE5vdEZpbmRIeWRyYXRhYmxlU3VzcGVuc2VJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UpIHtcbiAgaWYgKHRydWUgJiYgcGFyZW50UHJvcHNbU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkddICE9PSB0cnVlKSB7XG4gICAgLy8gVE9ETzogd2FybkZvckluc2VydGVkSHlkcmF0ZWRTdXNwZW5zZShwYXJlbnRJbnN0YW5jZSk7XG4gIH1cbn1cblxuLy8gUHJlZml4IG1lYXN1cmVtZW50cyBzbyB0aGF0IGl0J3MgcG9zc2libGUgdG8gZmlsdGVyIHRoZW0uXG4vLyBMb25nZXIgcHJlZml4ZXMgYXJlIGhhcmQgdG8gcmVhZCBpbiBEZXZUb29scy5cbnZhciByZWFjdEVtb2ppID0gJ1xcdTI2OUInO1xudmFyIHdhcm5pbmdFbW9qaSA9ICdcXHUyNkQ0JztcbnZhciBzdXBwb3J0c1VzZXJUaW1pbmcgPSB0eXBlb2YgcGVyZm9ybWFuY2UgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBwZXJmb3JtYW5jZS5tYXJrID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBwZXJmb3JtYW5jZS5jbGVhck1hcmtzID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBwZXJmb3JtYW5jZS5tZWFzdXJlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBwZXJmb3JtYW5jZS5jbGVhck1lYXN1cmVzID09PSAnZnVuY3Rpb24nO1xuXG4vLyBLZWVwIHRyYWNrIG9mIGN1cnJlbnQgZmliZXIgc28gdGhhdCB3ZSBrbm93IHRoZSBwYXRoIHRvIHVud2luZCBvbiBwYXVzZS5cbi8vIFRPRE86IHRoaXMgbG9va3MgdGhlIHNhbWUgYXMgbmV4dFVuaXRPZldvcmsgaW4gc2NoZWR1bGVyLiBDYW4gd2UgdW5pZnkgdGhlbT9cbnZhciBjdXJyZW50RmliZXIgPSBudWxsO1xuLy8gSWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiB1c2VyIGNvZGUsIHdoaWNoIGZpYmVyIGFuZCBtZXRob2QgaXMgaXQ/XG4vLyBSZXVzaW5nIGBjdXJyZW50RmliZXJgIHdvdWxkIGJlIGNvbmZ1c2luZyBmb3IgdGhpcyBiZWNhdXNlIHVzZXIgY29kZSBmaWJlclxuLy8gY2FuIGNoYW5nZSBkdXJpbmcgY29tbWl0IHBoYXNlIHRvbywgYnV0IHdlIGRvbid0IG5lZWQgdG8gdW53aW5kIGl0IChzaW5jZVxuLy8gbGlmZWN5Y2xlcyBpbiB0aGUgY29tbWl0IHBoYXNlIGRvbid0IHJlc2VtYmxlIGEgdHJlZSkuXG52YXIgY3VycmVudFBoYXNlID0gbnVsbDtcbnZhciBjdXJyZW50UGhhc2VGaWJlciA9IG51bGw7XG4vLyBEaWQgbGlmZWN5Y2xlIGhvb2sgc2NoZWR1bGUgYW4gdXBkYXRlPyBUaGlzIGlzIG9mdGVuIGEgcGVyZm9ybWFuY2UgcHJvYmxlbSxcbi8vIHNvIHdlIHdpbGwga2VlcCB0cmFjayBvZiBpdCwgYW5kIGluY2x1ZGUgaXQgaW4gdGhlIHJlcG9ydC5cbi8vIFRyYWNrIGNvbW1pdHMgY2F1c2VkIGJ5IGNhc2NhZGluZyB1cGRhdGVzLlxudmFyIGlzQ29tbWl0dGluZyA9IGZhbHNlO1xudmFyIGhhc1NjaGVkdWxlZFVwZGF0ZUluQ3VycmVudENvbW1pdCA9IGZhbHNlO1xudmFyIGhhc1NjaGVkdWxlZFVwZGF0ZUluQ3VycmVudFBoYXNlID0gZmFsc2U7XG52YXIgY29tbWl0Q291bnRJbkN1cnJlbnRXb3JrTG9vcCA9IDA7XG52YXIgZWZmZWN0Q291bnRJbkN1cnJlbnRDb21taXQgPSAwO1xudmFyIGlzV2FpdGluZ0ZvckNhbGxiYWNrID0gZmFsc2U7XG4vLyBEdXJpbmcgY29tbWl0cywgd2Ugb25seSBzaG93IGEgbWVhc3VyZW1lbnQgb25jZSBwZXIgbWV0aG9kIG5hbWVcbi8vIHRvIGF2b2lkIHN0cmV0Y2ggdGhlIGNvbW1pdCBwaGFzZSB3aXRoIG1lYXN1cmVtZW50IG92ZXJoZWFkLlxudmFyIGxhYmVsc0luQ3VycmVudENvbW1pdCA9IG5ldyBTZXQoKTtcblxudmFyIGZvcm1hdE1hcmtOYW1lID0gZnVuY3Rpb24gKG1hcmtOYW1lKSB7XG4gIHJldHVybiByZWFjdEVtb2ppICsgJyAnICsgbWFya05hbWU7XG59O1xuXG52YXIgZm9ybWF0TGFiZWwgPSBmdW5jdGlvbiAobGFiZWwsIHdhcm5pbmcpIHtcbiAgdmFyIHByZWZpeCA9IHdhcm5pbmcgPyB3YXJuaW5nRW1vamkgKyAnICcgOiByZWFjdEVtb2ppICsgJyAnO1xuICB2YXIgc3VmZml4ID0gd2FybmluZyA/ICcgV2FybmluZzogJyArIHdhcm5pbmcgOiAnJztcbiAgcmV0dXJuICcnICsgcHJlZml4ICsgbGFiZWwgKyBzdWZmaXg7XG59O1xuXG52YXIgYmVnaW5NYXJrID0gZnVuY3Rpb24gKG1hcmtOYW1lKSB7XG4gIHBlcmZvcm1hbmNlLm1hcmsoZm9ybWF0TWFya05hbWUobWFya05hbWUpKTtcbn07XG5cbnZhciBjbGVhck1hcmsgPSBmdW5jdGlvbiAobWFya05hbWUpIHtcbiAgcGVyZm9ybWFuY2UuY2xlYXJNYXJrcyhmb3JtYXRNYXJrTmFtZShtYXJrTmFtZSkpO1xufTtcblxudmFyIGVuZE1hcmsgPSBmdW5jdGlvbiAobGFiZWwsIG1hcmtOYW1lLCB3YXJuaW5nKSB7XG4gIHZhciBmb3JtYXR0ZWRNYXJrTmFtZSA9IGZvcm1hdE1hcmtOYW1lKG1hcmtOYW1lKTtcbiAgdmFyIGZvcm1hdHRlZExhYmVsID0gZm9ybWF0TGFiZWwobGFiZWwsIHdhcm5pbmcpO1xuICB0cnkge1xuICAgIHBlcmZvcm1hbmNlLm1lYXN1cmUoZm9ybWF0dGVkTGFiZWwsIGZvcm1hdHRlZE1hcmtOYW1lKTtcbiAgfSBjYXRjaCAoZXJyKSB7fVxuICAvLyBJZiBwcmV2aW91cyBtYXJrIHdhcyBtaXNzaW5nIGZvciBzb21lIHJlYXNvbiwgdGhpcyB3aWxsIHRocm93LlxuICAvLyBUaGlzIGNvdWxkIG9ubHkgaGFwcGVuIGlmIFJlYWN0IGNyYXNoZWQgaW4gYW4gdW5leHBlY3RlZCBwbGFjZSBlYXJsaWVyLlxuICAvLyBEb24ndCBwaWxlIG9uIHdpdGggbW9yZSBlcnJvcnMuXG5cbiAgLy8gQ2xlYXIgbWFya3MgaW1tZWRpYXRlbHkgdG8gYXZvaWQgZ3Jvd2luZyBidWZmZXIuXG4gIHBlcmZvcm1hbmNlLmNsZWFyTWFya3MoZm9ybWF0dGVkTWFya05hbWUpO1xuICBwZXJmb3JtYW5jZS5jbGVhck1lYXN1cmVzKGZvcm1hdHRlZExhYmVsKTtcbn07XG5cbnZhciBnZXRGaWJlck1hcmtOYW1lID0gZnVuY3Rpb24gKGxhYmVsLCBkZWJ1Z0lEKSB7XG4gIHJldHVybiBsYWJlbCArICcgKCMnICsgZGVidWdJRCArICcpJztcbn07XG5cbnZhciBnZXRGaWJlckxhYmVsID0gZnVuY3Rpb24gKGNvbXBvbmVudE5hbWUsIGlzTW91bnRlZCwgcGhhc2UpIHtcbiAgaWYgKHBoYXNlID09PSBudWxsKSB7XG4gICAgLy8gVGhlc2UgYXJlIGNvbXBvc2l0ZSBjb21wb25lbnQgdG90YWwgdGltZSBtZWFzdXJlbWVudHMuXG4gICAgcmV0dXJuIGNvbXBvbmVudE5hbWUgKyAnIFsnICsgKGlzTW91bnRlZCA/ICd1cGRhdGUnIDogJ21vdW50JykgKyAnXSc7XG4gIH0gZWxzZSB7XG4gICAgLy8gQ29tcG9zaXRlIGNvbXBvbmVudCBtZXRob2RzLlxuICAgIHJldHVybiBjb21wb25lbnROYW1lICsgJy4nICsgcGhhc2U7XG4gIH1cbn07XG5cbnZhciBiZWdpbkZpYmVyTWFyayA9IGZ1bmN0aW9uIChmaWJlciwgcGhhc2UpIHtcbiAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdVbmtub3duJztcbiAgdmFyIGRlYnVnSUQgPSBmaWJlci5fZGVidWdJRDtcbiAgdmFyIGlzTW91bnRlZCA9IGZpYmVyLmFsdGVybmF0ZSAhPT0gbnVsbDtcbiAgdmFyIGxhYmVsID0gZ2V0RmliZXJMYWJlbChjb21wb25lbnROYW1lLCBpc01vdW50ZWQsIHBoYXNlKTtcblxuICBpZiAoaXNDb21taXR0aW5nICYmIGxhYmVsc0luQ3VycmVudENvbW1pdC5oYXMobGFiZWwpKSB7XG4gICAgLy8gRHVyaW5nIHRoZSBjb21taXQgcGhhc2UsIHdlIGRvbid0IHNob3cgZHVwbGljYXRlIGxhYmVscyBiZWNhdXNlXG4gICAgLy8gdGhlcmUgaXMgYSBmaXhlZCBvdmVyaGVhZCBmb3IgZXZlcnkgbWVhc3VyZW1lbnQsIGFuZCB3ZSBkb24ndFxuICAgIC8vIHdhbnQgdG8gc3RyZXRjaCB0aGUgY29tbWl0IHBoYXNlIGJleW9uZCBuZWNlc3NhcnkuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGxhYmVsc0luQ3VycmVudENvbW1pdC5hZGQobGFiZWwpO1xuXG4gIHZhciBtYXJrTmFtZSA9IGdldEZpYmVyTWFya05hbWUobGFiZWwsIGRlYnVnSUQpO1xuICBiZWdpbk1hcmsobWFya05hbWUpO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbnZhciBjbGVhckZpYmVyTWFyayA9IGZ1bmN0aW9uIChmaWJlciwgcGhhc2UpIHtcbiAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdVbmtub3duJztcbiAgdmFyIGRlYnVnSUQgPSBmaWJlci5fZGVidWdJRDtcbiAgdmFyIGlzTW91bnRlZCA9IGZpYmVyLmFsdGVybmF0ZSAhPT0gbnVsbDtcbiAgdmFyIGxhYmVsID0gZ2V0RmliZXJMYWJlbChjb21wb25lbnROYW1lLCBpc01vdW50ZWQsIHBoYXNlKTtcbiAgdmFyIG1hcmtOYW1lID0gZ2V0RmliZXJNYXJrTmFtZShsYWJlbCwgZGVidWdJRCk7XG4gIGNsZWFyTWFyayhtYXJrTmFtZSk7XG59O1xuXG52YXIgZW5kRmliZXJNYXJrID0gZnVuY3Rpb24gKGZpYmVyLCBwaGFzZSwgd2FybmluZykge1xuICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ1Vua25vd24nO1xuICB2YXIgZGVidWdJRCA9IGZpYmVyLl9kZWJ1Z0lEO1xuICB2YXIgaXNNb3VudGVkID0gZmliZXIuYWx0ZXJuYXRlICE9PSBudWxsO1xuICB2YXIgbGFiZWwgPSBnZXRGaWJlckxhYmVsKGNvbXBvbmVudE5hbWUsIGlzTW91bnRlZCwgcGhhc2UpO1xuICB2YXIgbWFya05hbWUgPSBnZXRGaWJlck1hcmtOYW1lKGxhYmVsLCBkZWJ1Z0lEKTtcbiAgZW5kTWFyayhsYWJlbCwgbWFya05hbWUsIHdhcm5pbmcpO1xufTtcblxudmFyIHNob3VsZElnbm9yZUZpYmVyID0gZnVuY3Rpb24gKGZpYmVyKSB7XG4gIC8vIEhvc3QgY29tcG9uZW50cyBzaG91bGQgYmUgc2tpcHBlZCBpbiB0aGUgdGltZWxpbmUuXG4gIC8vIFdlIGNvdWxkIGNoZWNrIHR5cGVvZiBmaWJlci50eXBlLCBidXQgZG9lcyB0aGlzIHdvcmsgd2l0aCBSTj9cbiAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICBjYXNlIEhvc3RSb290OlxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICBjYXNlIEZyYWdtZW50OlxuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgIGNhc2UgQ29udGV4dENvbnN1bWVyOlxuICAgIGNhc2UgTW9kZTpcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbnZhciBjbGVhclBlbmRpbmdQaGFzZU1lYXN1cmVtZW50ID0gZnVuY3Rpb24gKCkge1xuICBpZiAoY3VycmVudFBoYXNlICE9PSBudWxsICYmIGN1cnJlbnRQaGFzZUZpYmVyICE9PSBudWxsKSB7XG4gICAgY2xlYXJGaWJlck1hcmsoY3VycmVudFBoYXNlRmliZXIsIGN1cnJlbnRQaGFzZSk7XG4gIH1cbiAgY3VycmVudFBoYXNlRmliZXIgPSBudWxsO1xuICBjdXJyZW50UGhhc2UgPSBudWxsO1xuICBoYXNTY2hlZHVsZWRVcGRhdGVJbkN1cnJlbnRQaGFzZSA9IGZhbHNlO1xufTtcblxudmFyIHBhdXNlVGltZXJzID0gZnVuY3Rpb24gKCkge1xuICAvLyBTdG9wcyBhbGwgY3VycmVudGx5IGFjdGl2ZSBtZWFzdXJlbWVudHMgc28gdGhhdCB0aGV5IGNhbiBiZSByZXN1bWVkXG4gIC8vIGlmIHdlIGNvbnRpbnVlIGluIGEgbGF0ZXIgZGVmZXJyZWQgbG9vcCBmcm9tIHRoZSBzYW1lIHVuaXQgb2Ygd29yay5cbiAgdmFyIGZpYmVyID0gY3VycmVudEZpYmVyO1xuICB3aGlsZSAoZmliZXIpIHtcbiAgICBpZiAoZmliZXIuX2RlYnVnSXNDdXJyZW50bHlUaW1pbmcpIHtcbiAgICAgIGVuZEZpYmVyTWFyayhmaWJlciwgbnVsbCwgbnVsbCk7XG4gICAgfVxuICAgIGZpYmVyID0gZmliZXIucmV0dXJuO1xuICB9XG59O1xuXG52YXIgcmVzdW1lVGltZXJzUmVjdXJzaXZlbHkgPSBmdW5jdGlvbiAoZmliZXIpIHtcbiAgaWYgKGZpYmVyLnJldHVybiAhPT0gbnVsbCkge1xuICAgIHJlc3VtZVRpbWVyc1JlY3Vyc2l2ZWx5KGZpYmVyLnJldHVybik7XG4gIH1cbiAgaWYgKGZpYmVyLl9kZWJ1Z0lzQ3VycmVudGx5VGltaW5nKSB7XG4gICAgYmVnaW5GaWJlck1hcmsoZmliZXIsIG51bGwpO1xuICB9XG59O1xuXG52YXIgcmVzdW1lVGltZXJzID0gZnVuY3Rpb24gKCkge1xuICAvLyBSZXN1bWVzIGFsbCBtZWFzdXJlbWVudHMgdGhhdCB3ZXJlIGFjdGl2ZSBkdXJpbmcgdGhlIGxhc3QgZGVmZXJyZWQgbG9vcC5cbiAgaWYgKGN1cnJlbnRGaWJlciAhPT0gbnVsbCkge1xuICAgIHJlc3VtZVRpbWVyc1JlY3Vyc2l2ZWx5KGN1cnJlbnRGaWJlcik7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHJlY29yZEVmZmVjdCgpIHtcbiAgaWYgKGVuYWJsZVVzZXJUaW1pbmdBUEkpIHtcbiAgICBlZmZlY3RDb3VudEluQ3VycmVudENvbW1pdCsrO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlY29yZFNjaGVkdWxlVXBkYXRlKCkge1xuICBpZiAoZW5hYmxlVXNlclRpbWluZ0FQSSkge1xuICAgIGlmIChpc0NvbW1pdHRpbmcpIHtcbiAgICAgIGhhc1NjaGVkdWxlZFVwZGF0ZUluQ3VycmVudENvbW1pdCA9IHRydWU7XG4gICAgfVxuICAgIGlmIChjdXJyZW50UGhhc2UgIT09IG51bGwgJiYgY3VycmVudFBoYXNlICE9PSAnY29tcG9uZW50V2lsbE1vdW50JyAmJiBjdXJyZW50UGhhc2UgIT09ICdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJykge1xuICAgICAgaGFzU2NoZWR1bGVkVXBkYXRlSW5DdXJyZW50UGhhc2UgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzdGFydFJlcXVlc3RDYWxsYmFja1RpbWVyKCkge1xuICBpZiAoZW5hYmxlVXNlclRpbWluZ0FQSSkge1xuICAgIGlmIChzdXBwb3J0c1VzZXJUaW1pbmcgJiYgIWlzV2FpdGluZ0ZvckNhbGxiYWNrKSB7XG4gICAgICBpc1dhaXRpbmdGb3JDYWxsYmFjayA9IHRydWU7XG4gICAgICBiZWdpbk1hcmsoJyhXYWl0aW5nIGZvciBhc3luYyBjYWxsYmFjay4uLiknKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RvcFJlcXVlc3RDYWxsYmFja1RpbWVyKGRpZEV4cGlyZSwgZXhwaXJhdGlvblRpbWUpIHtcbiAgaWYgKGVuYWJsZVVzZXJUaW1pbmdBUEkpIHtcbiAgICBpZiAoc3VwcG9ydHNVc2VyVGltaW5nKSB7XG4gICAgICBpc1dhaXRpbmdGb3JDYWxsYmFjayA9IGZhbHNlO1xuICAgICAgdmFyIHdhcm5pbmcgPSBkaWRFeHBpcmUgPyAnUmVhY3Qgd2FzIGJsb2NrZWQgYnkgbWFpbiB0aHJlYWQnIDogbnVsbDtcbiAgICAgIGVuZE1hcmsoJyhXYWl0aW5nIGZvciBhc3luYyBjYWxsYmFjay4uLiB3aWxsIGZvcmNlIGZsdXNoIGluICcgKyBleHBpcmF0aW9uVGltZSArICcgbXMpJywgJyhXYWl0aW5nIGZvciBhc3luYyBjYWxsYmFjay4uLiknLCB3YXJuaW5nKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RhcnRXb3JrVGltZXIoZmliZXIpIHtcbiAgaWYgKGVuYWJsZVVzZXJUaW1pbmdBUEkpIHtcbiAgICBpZiAoIXN1cHBvcnRzVXNlclRpbWluZyB8fCBzaG91bGRJZ25vcmVGaWJlcihmaWJlcikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gSWYgd2UgcGF1c2UsIHRoaXMgaXMgdGhlIGZpYmVyIHRvIHVud2luZCBmcm9tLlxuICAgIGN1cnJlbnRGaWJlciA9IGZpYmVyO1xuICAgIGlmICghYmVnaW5GaWJlck1hcmsoZmliZXIsIG51bGwpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZpYmVyLl9kZWJ1Z0lzQ3VycmVudGx5VGltaW5nID0gdHJ1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYW5jZWxXb3JrVGltZXIoZmliZXIpIHtcbiAgaWYgKGVuYWJsZVVzZXJUaW1pbmdBUEkpIHtcbiAgICBpZiAoIXN1cHBvcnRzVXNlclRpbWluZyB8fCBzaG91bGRJZ25vcmVGaWJlcihmaWJlcikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gUmVtZW1iZXIgd2Ugc2hvdWxkbid0IGNvbXBsZXRlIG1lYXN1cmVtZW50IGZvciB0aGlzIGZpYmVyLlxuICAgIC8vIE90aGVyd2lzZSBmbGFtZWNoYXJ0IHdpbGwgYmUgZGVlcCBldmVuIGZvciBzbWFsbCB1cGRhdGVzLlxuICAgIGZpYmVyLl9kZWJ1Z0lzQ3VycmVudGx5VGltaW5nID0gZmFsc2U7XG4gICAgY2xlYXJGaWJlck1hcmsoZmliZXIsIG51bGwpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0b3BXb3JrVGltZXIoZmliZXIpIHtcbiAgaWYgKGVuYWJsZVVzZXJUaW1pbmdBUEkpIHtcbiAgICBpZiAoIXN1cHBvcnRzVXNlclRpbWluZyB8fCBzaG91bGRJZ25vcmVGaWJlcihmaWJlcikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gSWYgd2UgcGF1c2UsIGl0cyBwYXJlbnQgaXMgdGhlIGZpYmVyIHRvIHVud2luZCBmcm9tLlxuICAgIGN1cnJlbnRGaWJlciA9IGZpYmVyLnJldHVybjtcbiAgICBpZiAoIWZpYmVyLl9kZWJ1Z0lzQ3VycmVudGx5VGltaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZpYmVyLl9kZWJ1Z0lzQ3VycmVudGx5VGltaW5nID0gZmFsc2U7XG4gICAgZW5kRmliZXJNYXJrKGZpYmVyLCBudWxsLCBudWxsKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdG9wRmFpbGVkV29ya1RpbWVyKGZpYmVyKSB7XG4gIGlmIChlbmFibGVVc2VyVGltaW5nQVBJKSB7XG4gICAgaWYgKCFzdXBwb3J0c1VzZXJUaW1pbmcgfHwgc2hvdWxkSWdub3JlRmliZXIoZmliZXIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIElmIHdlIHBhdXNlLCBpdHMgcGFyZW50IGlzIHRoZSBmaWJlciB0byB1bndpbmQgZnJvbS5cbiAgICBjdXJyZW50RmliZXIgPSBmaWJlci5yZXR1cm47XG4gICAgaWYgKCFmaWJlci5fZGVidWdJc0N1cnJlbnRseVRpbWluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmaWJlci5fZGVidWdJc0N1cnJlbnRseVRpbWluZyA9IGZhbHNlO1xuICAgIHZhciB3YXJuaW5nID0gZmliZXIudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCB8fCBmaWJlci50YWcgPT09IERlaHlkcmF0ZWRTdXNwZW5zZUNvbXBvbmVudCA/ICdSZW5kZXJpbmcgd2FzIHN1c3BlbmRlZCcgOiAnQW4gZXJyb3Igd2FzIHRocm93biBpbnNpZGUgdGhpcyBlcnJvciBib3VuZGFyeSc7XG4gICAgZW5kRmliZXJNYXJrKGZpYmVyLCBudWxsLCB3YXJuaW5nKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdGFydFBoYXNlVGltZXIoZmliZXIsIHBoYXNlKSB7XG4gIGlmIChlbmFibGVVc2VyVGltaW5nQVBJKSB7XG4gICAgaWYgKCFzdXBwb3J0c1VzZXJUaW1pbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY2xlYXJQZW5kaW5nUGhhc2VNZWFzdXJlbWVudCgpO1xuICAgIGlmICghYmVnaW5GaWJlck1hcmsoZmliZXIsIHBoYXNlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjdXJyZW50UGhhc2VGaWJlciA9IGZpYmVyO1xuICAgIGN1cnJlbnRQaGFzZSA9IHBoYXNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0b3BQaGFzZVRpbWVyKCkge1xuICBpZiAoZW5hYmxlVXNlclRpbWluZ0FQSSkge1xuICAgIGlmICghc3VwcG9ydHNVc2VyVGltaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChjdXJyZW50UGhhc2UgIT09IG51bGwgJiYgY3VycmVudFBoYXNlRmliZXIgIT09IG51bGwpIHtcbiAgICAgIHZhciB3YXJuaW5nID0gaGFzU2NoZWR1bGVkVXBkYXRlSW5DdXJyZW50UGhhc2UgPyAnU2NoZWR1bGVkIGEgY2FzY2FkaW5nIHVwZGF0ZScgOiBudWxsO1xuICAgICAgZW5kRmliZXJNYXJrKGN1cnJlbnRQaGFzZUZpYmVyLCBjdXJyZW50UGhhc2UsIHdhcm5pbmcpO1xuICAgIH1cbiAgICBjdXJyZW50UGhhc2UgPSBudWxsO1xuICAgIGN1cnJlbnRQaGFzZUZpYmVyID0gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdGFydFdvcmtMb29wVGltZXIobmV4dFVuaXRPZldvcmspIHtcbiAgaWYgKGVuYWJsZVVzZXJUaW1pbmdBUEkpIHtcbiAgICBjdXJyZW50RmliZXIgPSBuZXh0VW5pdE9mV29yaztcbiAgICBpZiAoIXN1cHBvcnRzVXNlclRpbWluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb21taXRDb3VudEluQ3VycmVudFdvcmtMb29wID0gMDtcbiAgICAvLyBUaGlzIGlzIHRvcCBsZXZlbCBjYWxsLlxuICAgIC8vIEFueSBvdGhlciBtZWFzdXJlbWVudHMgYXJlIHBlcmZvcm1lZCB3aXRoaW4uXG4gICAgYmVnaW5NYXJrKCcoUmVhY3QgVHJlZSBSZWNvbmNpbGlhdGlvbiknKTtcbiAgICAvLyBSZXN1bWUgYW55IG1lYXN1cmVtZW50cyB0aGF0IHdlcmUgaW4gcHJvZ3Jlc3MgZHVyaW5nIHRoZSBsYXN0IGxvb3AuXG4gICAgcmVzdW1lVGltZXJzKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RvcFdvcmtMb29wVGltZXIoaW50ZXJydXB0ZWRCeSwgZGlkQ29tcGxldGVSb290KSB7XG4gIGlmIChlbmFibGVVc2VyVGltaW5nQVBJKSB7XG4gICAgaWYgKCFzdXBwb3J0c1VzZXJUaW1pbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHdhcm5pbmcgPSBudWxsO1xuICAgIGlmIChpbnRlcnJ1cHRlZEJ5ICE9PSBudWxsKSB7XG4gICAgICBpZiAoaW50ZXJydXB0ZWRCeS50YWcgPT09IEhvc3RSb290KSB7XG4gICAgICAgIHdhcm5pbmcgPSAnQSB0b3AtbGV2ZWwgdXBkYXRlIGludGVycnVwdGVkIHRoZSBwcmV2aW91cyByZW5kZXInO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGludGVycnVwdGVkQnkudHlwZSkgfHwgJ1Vua25vd24nO1xuICAgICAgICB3YXJuaW5nID0gJ0FuIHVwZGF0ZSB0byAnICsgY29tcG9uZW50TmFtZSArICcgaW50ZXJydXB0ZWQgdGhlIHByZXZpb3VzIHJlbmRlcic7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjb21taXRDb3VudEluQ3VycmVudFdvcmtMb29wID4gMSkge1xuICAgICAgd2FybmluZyA9ICdUaGVyZSB3ZXJlIGNhc2NhZGluZyB1cGRhdGVzJztcbiAgICB9XG4gICAgY29tbWl0Q291bnRJbkN1cnJlbnRXb3JrTG9vcCA9IDA7XG4gICAgdmFyIGxhYmVsID0gZGlkQ29tcGxldGVSb290ID8gJyhSZWFjdCBUcmVlIFJlY29uY2lsaWF0aW9uOiBDb21wbGV0ZWQgUm9vdCknIDogJyhSZWFjdCBUcmVlIFJlY29uY2lsaWF0aW9uOiBZaWVsZGVkKSc7XG4gICAgLy8gUGF1c2UgYW55IG1lYXN1cmVtZW50cyB1bnRpbCB0aGUgbmV4dCBsb29wLlxuICAgIHBhdXNlVGltZXJzKCk7XG4gICAgZW5kTWFyayhsYWJlbCwgJyhSZWFjdCBUcmVlIFJlY29uY2lsaWF0aW9uKScsIHdhcm5pbmcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0YXJ0Q29tbWl0VGltZXIoKSB7XG4gIGlmIChlbmFibGVVc2VyVGltaW5nQVBJKSB7XG4gICAgaWYgKCFzdXBwb3J0c1VzZXJUaW1pbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaXNDb21taXR0aW5nID0gdHJ1ZTtcbiAgICBoYXNTY2hlZHVsZWRVcGRhdGVJbkN1cnJlbnRDb21taXQgPSBmYWxzZTtcbiAgICBsYWJlbHNJbkN1cnJlbnRDb21taXQuY2xlYXIoKTtcbiAgICBiZWdpbk1hcmsoJyhDb21taXR0aW5nIENoYW5nZXMpJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RvcENvbW1pdFRpbWVyKCkge1xuICBpZiAoZW5hYmxlVXNlclRpbWluZ0FQSSkge1xuICAgIGlmICghc3VwcG9ydHNVc2VyVGltaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHdhcm5pbmcgPSBudWxsO1xuICAgIGlmIChoYXNTY2hlZHVsZWRVcGRhdGVJbkN1cnJlbnRDb21taXQpIHtcbiAgICAgIHdhcm5pbmcgPSAnTGlmZWN5Y2xlIGhvb2sgc2NoZWR1bGVkIGEgY2FzY2FkaW5nIHVwZGF0ZSc7XG4gICAgfSBlbHNlIGlmIChjb21taXRDb3VudEluQ3VycmVudFdvcmtMb29wID4gMCkge1xuICAgICAgd2FybmluZyA9ICdDYXVzZWQgYnkgYSBjYXNjYWRpbmcgdXBkYXRlIGluIGVhcmxpZXIgY29tbWl0JztcbiAgICB9XG4gICAgaGFzU2NoZWR1bGVkVXBkYXRlSW5DdXJyZW50Q29tbWl0ID0gZmFsc2U7XG4gICAgY29tbWl0Q291bnRJbkN1cnJlbnRXb3JrTG9vcCsrO1xuICAgIGlzQ29tbWl0dGluZyA9IGZhbHNlO1xuICAgIGxhYmVsc0luQ3VycmVudENvbW1pdC5jbGVhcigpO1xuXG4gICAgZW5kTWFyaygnKENvbW1pdHRpbmcgQ2hhbmdlcyknLCAnKENvbW1pdHRpbmcgQ2hhbmdlcyknLCB3YXJuaW5nKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdGFydENvbW1pdFNuYXBzaG90RWZmZWN0c1RpbWVyKCkge1xuICBpZiAoZW5hYmxlVXNlclRpbWluZ0FQSSkge1xuICAgIGlmICghc3VwcG9ydHNVc2VyVGltaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVmZmVjdENvdW50SW5DdXJyZW50Q29tbWl0ID0gMDtcbiAgICBiZWdpbk1hcmsoJyhDb21taXR0aW5nIFNuYXBzaG90IEVmZmVjdHMpJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RvcENvbW1pdFNuYXBzaG90RWZmZWN0c1RpbWVyKCkge1xuICBpZiAoZW5hYmxlVXNlclRpbWluZ0FQSSkge1xuICAgIGlmICghc3VwcG9ydHNVc2VyVGltaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBjb3VudCA9IGVmZmVjdENvdW50SW5DdXJyZW50Q29tbWl0O1xuICAgIGVmZmVjdENvdW50SW5DdXJyZW50Q29tbWl0ID0gMDtcbiAgICBlbmRNYXJrKCcoQ29tbWl0dGluZyBTbmFwc2hvdCBFZmZlY3RzOiAnICsgY291bnQgKyAnIFRvdGFsKScsICcoQ29tbWl0dGluZyBTbmFwc2hvdCBFZmZlY3RzKScsIG51bGwpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0YXJ0Q29tbWl0SG9zdEVmZmVjdHNUaW1lcigpIHtcbiAgaWYgKGVuYWJsZVVzZXJUaW1pbmdBUEkpIHtcbiAgICBpZiAoIXN1cHBvcnRzVXNlclRpbWluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZmZlY3RDb3VudEluQ3VycmVudENvbW1pdCA9IDA7XG4gICAgYmVnaW5NYXJrKCcoQ29tbWl0dGluZyBIb3N0IEVmZmVjdHMpJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RvcENvbW1pdEhvc3RFZmZlY3RzVGltZXIoKSB7XG4gIGlmIChlbmFibGVVc2VyVGltaW5nQVBJKSB7XG4gICAgaWYgKCFzdXBwb3J0c1VzZXJUaW1pbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGNvdW50ID0gZWZmZWN0Q291bnRJbkN1cnJlbnRDb21taXQ7XG4gICAgZWZmZWN0Q291bnRJbkN1cnJlbnRDb21taXQgPSAwO1xuICAgIGVuZE1hcmsoJyhDb21taXR0aW5nIEhvc3QgRWZmZWN0czogJyArIGNvdW50ICsgJyBUb3RhbCknLCAnKENvbW1pdHRpbmcgSG9zdCBFZmZlY3RzKScsIG51bGwpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0YXJ0Q29tbWl0TGlmZUN5Y2xlc1RpbWVyKCkge1xuICBpZiAoZW5hYmxlVXNlclRpbWluZ0FQSSkge1xuICAgIGlmICghc3VwcG9ydHNVc2VyVGltaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVmZmVjdENvdW50SW5DdXJyZW50Q29tbWl0ID0gMDtcbiAgICBiZWdpbk1hcmsoJyhDYWxsaW5nIExpZmVjeWNsZSBNZXRob2RzKScpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0b3BDb21taXRMaWZlQ3ljbGVzVGltZXIoKSB7XG4gIGlmIChlbmFibGVVc2VyVGltaW5nQVBJKSB7XG4gICAgaWYgKCFzdXBwb3J0c1VzZXJUaW1pbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGNvdW50ID0gZWZmZWN0Q291bnRJbkN1cnJlbnRDb21taXQ7XG4gICAgZWZmZWN0Q291bnRJbkN1cnJlbnRDb21taXQgPSAwO1xuICAgIGVuZE1hcmsoJyhDYWxsaW5nIExpZmVjeWNsZSBNZXRob2RzOiAnICsgY291bnQgKyAnIFRvdGFsKScsICcoQ2FsbGluZyBMaWZlY3ljbGUgTWV0aG9kcyknLCBudWxsKTtcbiAgfVxufVxuXG52YXIgdmFsdWVTdGFjayA9IFtdO1xuXG52YXIgZmliZXJTdGFjayA9IHZvaWQgMDtcblxue1xuICBmaWJlclN0YWNrID0gW107XG59XG5cbnZhciBpbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjcmVhdGVDdXJzb3IoZGVmYXVsdFZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgY3VycmVudDogZGVmYXVsdFZhbHVlXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBvcChjdXJzb3IsIGZpYmVyKSB7XG4gIGlmIChpbmRleCA8IDApIHtcbiAgICB7XG4gICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdVbmV4cGVjdGVkIHBvcC4nKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAge1xuICAgIGlmIChmaWJlciAhPT0gZmliZXJTdGFja1tpbmRleF0pIHtcbiAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ1VuZXhwZWN0ZWQgRmliZXIgcG9wcGVkLicpO1xuICAgIH1cbiAgfVxuXG4gIGN1cnNvci5jdXJyZW50ID0gdmFsdWVTdGFja1tpbmRleF07XG5cbiAgdmFsdWVTdGFja1tpbmRleF0gPSBudWxsO1xuXG4gIHtcbiAgICBmaWJlclN0YWNrW2luZGV4XSA9IG51bGw7XG4gIH1cblxuICBpbmRleC0tO1xufVxuXG5mdW5jdGlvbiBwdXNoKGN1cnNvciwgdmFsdWUsIGZpYmVyKSB7XG4gIGluZGV4Kys7XG5cbiAgdmFsdWVTdGFja1tpbmRleF0gPSBjdXJzb3IuY3VycmVudDtcblxuICB7XG4gICAgZmliZXJTdGFja1tpbmRleF0gPSBmaWJlcjtcbiAgfVxuXG4gIGN1cnNvci5jdXJyZW50ID0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGNoZWNrVGhhdFN0YWNrSXNFbXB0eSgpIHtcbiAge1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ0V4cGVjdGVkIGFuIGVtcHR5IHN0YWNrLiBTb21ldGhpbmcgd2FzIG5vdCByZXNldCBwcm9wZXJseS4nKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzZXRTdGFja0FmdGVyRmF0YWxFcnJvckluRGV2KCkge1xuICB7XG4gICAgaW5kZXggPSAtMTtcbiAgICB2YWx1ZVN0YWNrLmxlbmd0aCA9IDA7XG4gICAgZmliZXJTdGFjay5sZW5ndGggPSAwO1xuICB9XG59XG5cbnZhciB3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHQgPSB2b2lkIDA7XG5cbntcbiAgd2FybmVkQWJvdXRNaXNzaW5nR2V0Q2hpbGRDb250ZXh0ID0ge307XG59XG5cbnZhciBlbXB0eUNvbnRleHRPYmplY3QgPSB7fTtcbntcbiAgT2JqZWN0LmZyZWV6ZShlbXB0eUNvbnRleHRPYmplY3QpO1xufVxuXG4vLyBBIGN1cnNvciB0byB0aGUgY3VycmVudCBtZXJnZWQgY29udGV4dCBvYmplY3Qgb24gdGhlIHN0YWNrLlxudmFyIGNvbnRleHRTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihlbXB0eUNvbnRleHRPYmplY3QpO1xuLy8gQSBjdXJzb3IgdG8gYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgY29udGV4dCBoYXMgY2hhbmdlZC5cbnZhciBkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKGZhbHNlKTtcbi8vIEtlZXAgdHJhY2sgb2YgdGhlIHByZXZpb3VzIGNvbnRleHQgb2JqZWN0IHRoYXQgd2FzIG9uIHRoZSBzdGFjay5cbi8vIFdlIHVzZSB0aGlzIHRvIGdldCBhY2Nlc3MgdG8gdGhlIHBhcmVudCBjb250ZXh0IGFmdGVyIHdlIGhhdmUgYWxyZWFkeVxuLy8gcHVzaGVkIHRoZSBuZXh0IGNvbnRleHQgcHJvdmlkZXIsIGFuZCBub3cgbmVlZCB0byBtZXJnZSB0aGVpciBjb250ZXh0cy5cbnZhciBwcmV2aW91c0NvbnRleHQgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG5cbmZ1bmN0aW9uIGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBkaWRQdXNoT3duQ29udGV4dElmUHJvdmlkZXIpIHtcbiAgaWYgKGRpZFB1c2hPd25Db250ZXh0SWZQcm92aWRlciAmJiBpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgLy8gSWYgdGhlIGZpYmVyIGlzIGEgY29udGV4dCBwcm92aWRlciBpdHNlbGYsIHdoZW4gd2UgcmVhZCBpdHMgY29udGV4dFxuICAgIC8vIHdlIG1heSBoYXZlIGFscmVhZHkgcHVzaGVkIGl0cyBvd24gY2hpbGQgY29udGV4dCBvbiB0aGUgc3RhY2suIEEgY29udGV4dFxuICAgIC8vIHByb3ZpZGVyIHNob3VsZCBub3QgXCJzZWVcIiBpdHMgb3duIGNoaWxkIGNvbnRleHQuIFRoZXJlZm9yZSB3ZSByZWFkIHRoZVxuICAgIC8vIHByZXZpb3VzIChwYXJlbnQpIGNvbnRleHQgaW5zdGVhZCBmb3IgYSBjb250ZXh0IHByb3ZpZGVyLlxuICAgIHJldHVybiBwcmV2aW91c0NvbnRleHQ7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHRTdGFja0N1cnNvci5jdXJyZW50O1xufVxuXG5mdW5jdGlvbiBjYWNoZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCwgbWFza2VkQ29udGV4dCkge1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQgPSB1bm1hc2tlZENvbnRleHQ7XG4gIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0ID0gbWFza2VkQ29udGV4dDtcbn1cblxuZnVuY3Rpb24gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KSB7XG4gIHZhciB0eXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgdmFyIGNvbnRleHRUeXBlcyA9IHR5cGUuY29udGV4dFR5cGVzO1xuICBpZiAoIWNvbnRleHRUeXBlcykge1xuICAgIHJldHVybiBlbXB0eUNvbnRleHRPYmplY3Q7XG4gIH1cblxuICAvLyBBdm9pZCByZWNyZWF0aW5nIG1hc2tlZCBjb250ZXh0IHVubGVzcyB1bm1hc2tlZCBjb250ZXh0IGhhcyBjaGFuZ2VkLlxuICAvLyBGYWlsaW5nIHRvIGRvIHRoaXMgd2lsbCByZXN1bHQgaW4gdW5uZWNlc3NhcnkgY2FsbHMgdG8gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcy5cbiAgLy8gVGhpcyBtYXkgdHJpZ2dlciBpbmZpbml0ZSBsb29wcyBpZiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIGNhbGxzIHNldFN0YXRlLlxuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0ID09PSB1bm1hc2tlZENvbnRleHQpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNYXNrZWRDaGlsZENvbnRleHQ7XG4gIH1cblxuICB2YXIgY29udGV4dCA9IHt9O1xuICBmb3IgKHZhciBrZXkgaW4gY29udGV4dFR5cGVzKSB7XG4gICAgY29udGV4dFtrZXldID0gdW5tYXNrZWRDb250ZXh0W2tleV07XG4gIH1cblxuICB7XG4gICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKHR5cGUpIHx8ICdVbmtub3duJztcbiAgICBjaGVja1Byb3BUeXBlcyhjb250ZXh0VHlwZXMsIGNvbnRleHQsICdjb250ZXh0JywgbmFtZSwgZ2V0Q3VycmVudEZpYmVyU3RhY2tJbkRldik7XG4gIH1cblxuICAvLyBDYWNoZSB1bm1hc2tlZCBjb250ZXh0IHNvIHdlIGNhbiBhdm9pZCByZWNyZWF0aW5nIG1hc2tlZCBjb250ZXh0IHVubGVzcyBuZWNlc3NhcnkuXG4gIC8vIENvbnRleHQgaXMgY3JlYXRlZCBiZWZvcmUgdGhlIGNsYXNzIGNvbXBvbmVudCBpcyBpbnN0YW50aWF0ZWQgc28gY2hlY2sgZm9yIGluc3RhbmNlLlxuICBpZiAoaW5zdGFuY2UpIHtcbiAgICBjYWNoZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gY29udGV4dDtcbn1cblxuZnVuY3Rpb24gaGFzQ29udGV4dENoYW5nZWQoKSB7XG4gIHJldHVybiBkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLmN1cnJlbnQ7XG59XG5cbmZ1bmN0aW9uIGlzQ29udGV4dFByb3ZpZGVyKHR5cGUpIHtcbiAgdmFyIGNoaWxkQ29udGV4dFR5cGVzID0gdHlwZS5jaGlsZENvbnRleHRUeXBlcztcbiAgcmV0dXJuIGNoaWxkQ29udGV4dFR5cGVzICE9PSBudWxsICYmIGNoaWxkQ29udGV4dFR5cGVzICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHBvcENvbnRleHQoZmliZXIpIHtcbiAgcG9wKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgcG9wKGNvbnRleHRTdGFja0N1cnNvciwgZmliZXIpO1xufVxuXG5mdW5jdGlvbiBwb3BUb3BMZXZlbENvbnRleHRPYmplY3QoZmliZXIpIHtcbiAgcG9wKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgcG9wKGNvbnRleHRTdGFja0N1cnNvciwgZmliZXIpO1xufVxuXG5mdW5jdGlvbiBwdXNoVG9wTGV2ZWxDb250ZXh0T2JqZWN0KGZpYmVyLCBjb250ZXh0LCBkaWRDaGFuZ2UpIHtcbiAgIShjb250ZXh0U3RhY2tDdXJzb3IuY3VycmVudCA9PT0gZW1wdHlDb250ZXh0T2JqZWN0KSA/IGludmFyaWFudChmYWxzZSwgJ1VuZXhwZWN0ZWQgY29udGV4dCBmb3VuZCBvbiBzdGFjay4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKSA6IHZvaWQgMDtcblxuICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciwgY29udGV4dCwgZmliZXIpO1xuICBwdXNoKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGRpZENoYW5nZSwgZmliZXIpO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzQ2hpbGRDb250ZXh0KGZpYmVyLCB0eXBlLCBwYXJlbnRDb250ZXh0KSB7XG4gIHZhciBpbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZTtcbiAgdmFyIGNoaWxkQ29udGV4dFR5cGVzID0gdHlwZS5jaGlsZENvbnRleHRUeXBlcztcblxuICAvLyBUT0RPIChidmF1Z2huKSBSZXBsYWNlIHRoaXMgYmVoYXZpb3Igd2l0aCBhbiBpbnZhcmlhbnQoKSBpbiB0aGUgZnV0dXJlLlxuICAvLyBJdCBoYXMgb25seSBiZWVuIGFkZGVkIGluIEZpYmVyIHRvIG1hdGNoIHRoZSAodW5pbnRlbnRpb25hbCkgYmVoYXZpb3IgaW4gU3RhY2suXG4gIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKHR5cGUpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKCF3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHRbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgd2FybmVkQWJvdXRNaXNzaW5nR2V0Q2hpbGRDb250ZXh0W2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnJXMuY2hpbGRDb250ZXh0VHlwZXMgaXMgc3BlY2lmaWVkIGJ1dCB0aGVyZSBpcyBubyBnZXRDaGlsZENvbnRleHQoKSBtZXRob2QgJyArICdvbiB0aGUgaW5zdGFuY2UuIFlvdSBjYW4gZWl0aGVyIGRlZmluZSBnZXRDaGlsZENvbnRleHQoKSBvbiAlcyBvciByZW1vdmUgJyArICdjaGlsZENvbnRleHRUeXBlcyBmcm9tIGl0LicsIGNvbXBvbmVudE5hbWUsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGFyZW50Q29udGV4dDtcbiAgfVxuXG4gIHZhciBjaGlsZENvbnRleHQgPSB2b2lkIDA7XG4gIHtcbiAgICBzZXRDdXJyZW50UGhhc2UoJ2dldENoaWxkQ29udGV4dCcpO1xuICB9XG4gIHN0YXJ0UGhhc2VUaW1lcihmaWJlciwgJ2dldENoaWxkQ29udGV4dCcpO1xuICBjaGlsZENvbnRleHQgPSBpbnN0YW5jZS5nZXRDaGlsZENvbnRleHQoKTtcbiAgc3RvcFBoYXNlVGltZXIoKTtcbiAge1xuICAgIHNldEN1cnJlbnRQaGFzZShudWxsKTtcbiAgfVxuICBmb3IgKHZhciBjb250ZXh0S2V5IGluIGNoaWxkQ29udGV4dCkge1xuICAgICEoY29udGV4dEtleSBpbiBjaGlsZENvbnRleHRUeXBlcykgPyBpbnZhcmlhbnQoZmFsc2UsICclcy5nZXRDaGlsZENvbnRleHQoKToga2V5IFwiJXNcIiBpcyBub3QgZGVmaW5lZCBpbiBjaGlsZENvbnRleHRUeXBlcy4nLCBnZXRDb21wb25lbnROYW1lKHR5cGUpIHx8ICdVbmtub3duJywgY29udGV4dEtleSkgOiB2b2lkIDA7XG4gIH1cbiAge1xuICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB8fCAnVW5rbm93bic7XG4gICAgY2hlY2tQcm9wVHlwZXMoY2hpbGRDb250ZXh0VHlwZXMsIGNoaWxkQ29udGV4dCwgJ2NoaWxkIGNvbnRleHQnLCBuYW1lLFxuICAgIC8vIEluIHByYWN0aWNlLCB0aGVyZSBpcyBvbmUgY2FzZSBpbiB3aGljaCB3ZSB3b24ndCBnZXQgYSBzdGFjay4gSXQncyB3aGVuXG4gICAgLy8gc29tZWJvZHkgY2FsbHMgdW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIoKSBhbmQgd2UgcHJvY2Vzc1xuICAgIC8vIGNvbnRleHQgZnJvbSB0aGUgcGFyZW50IGNvbXBvbmVudCBpbnN0YW5jZS4gVGhlIHN0YWNrIHdpbGwgYmUgbWlzc2luZ1xuICAgIC8vIGJlY2F1c2UgaXQncyBvdXRzaWRlIG9mIHRoZSByZWNvbmNpbGlhdGlvbiwgYW5kIHNvIHRoZSBwb2ludGVyIGhhcyBub3RcbiAgICAvLyBiZWVuIHNldC4gVGhpcyBpcyByYXJlIGFuZCBkb2Vzbid0IG1hdHRlci4gV2UnbGwgYWxzbyByZW1vdmUgdGhhdCBBUEkuXG4gICAgZ2V0Q3VycmVudEZpYmVyU3RhY2tJbkRldik7XG4gIH1cblxuICByZXR1cm4gX2Fzc2lnbih7fSwgcGFyZW50Q29udGV4dCwgY2hpbGRDb250ZXh0KTtcbn1cblxuZnVuY3Rpb24gcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcykge1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gIC8vIFdlIHB1c2ggdGhlIGNvbnRleHQgYXMgZWFybHkgYXMgcG9zc2libGUgdG8gZW5zdXJlIHN0YWNrIGludGVncml0eS5cbiAgLy8gSWYgdGhlIGluc3RhbmNlIGRvZXMgbm90IGV4aXN0IHlldCwgd2Ugd2lsbCBwdXNoIG51bGwgYXQgZmlyc3QsXG4gIC8vIGFuZCByZXBsYWNlIGl0IG9uIHRoZSBzdGFjayBsYXRlciB3aGVuIGludmFsaWRhdGluZyB0aGUgY29udGV4dC5cbiAgdmFyIG1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0ID0gaW5zdGFuY2UgJiYgaW5zdGFuY2UuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQgfHwgZW1wdHlDb250ZXh0T2JqZWN0O1xuXG4gIC8vIFJlbWVtYmVyIHRoZSBwYXJlbnQgY29udGV4dCBzbyB3ZSBjYW4gbWVyZ2Ugd2l0aCBpdCBsYXRlci5cbiAgLy8gSW5oZXJpdCB0aGUgcGFyZW50J3MgZGlkLXBlcmZvcm0td29yayB2YWx1ZSB0byBhdm9pZCBpbmFkdmVydGVudGx5IGJsb2NraW5nIHVwZGF0ZXMuXG4gIHByZXZpb3VzQ29udGV4dCA9IGNvbnRleHRTdGFja0N1cnNvci5jdXJyZW50O1xuICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciwgbWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbiAgcHVzaChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLmN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaW52YWxpZGF0ZUNvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgdHlwZSwgZGlkQ2hhbmdlKSB7XG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgIWluc3RhbmNlID8gaW52YXJpYW50KGZhbHNlLCAnRXhwZWN0ZWQgdG8gaGF2ZSBhbiBpbnN0YW5jZSBieSB0aGlzIHBvaW50LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpIDogdm9pZCAwO1xuXG4gIGlmIChkaWRDaGFuZ2UpIHtcbiAgICAvLyBNZXJnZSBwYXJlbnQgYW5kIG93biBjb250ZXh0LlxuICAgIC8vIFNraXAgdGhpcyBpZiB3ZSdyZSBub3QgdXBkYXRpbmcgZHVlIHRvIHNDVS5cbiAgICAvLyBUaGlzIGF2b2lkcyB1bm5lY2Vzc2FyaWx5IHJlY29tcHV0aW5nIG1lbW9pemVkIHZhbHVlcy5cbiAgICB2YXIgbWVyZ2VkQ29udGV4dCA9IHByb2Nlc3NDaGlsZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHR5cGUsIHByZXZpb3VzQ29udGV4dCk7XG4gICAgaW5zdGFuY2UuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQgPSBtZXJnZWRDb250ZXh0O1xuXG4gICAgLy8gUmVwbGFjZSB0aGUgb2xkIChvciBlbXB0eSkgY29udGV4dCB3aXRoIHRoZSBuZXcgb25lLlxuICAgIC8vIEl0IGlzIGltcG9ydGFudCB0byB1bndpbmQgdGhlIGNvbnRleHQgaW4gdGhlIHJldmVyc2Ugb3JkZXIuXG4gICAgcG9wKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIHdvcmtJblByb2dyZXNzKTtcbiAgICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgLy8gTm93IHB1c2ggdGhlIG5ldyBjb250ZXh0IGFuZCBtYXJrIHRoYXQgaXQgaGFzIGNoYW5nZWQuXG4gICAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IsIG1lcmdlZENvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbiAgICBwdXNoKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGRpZENoYW5nZSwgd29ya0luUHJvZ3Jlc3MpO1xuICB9IGVsc2Uge1xuICAgIHBvcChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgcHVzaChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBkaWRDaGFuZ2UsIHdvcmtJblByb2dyZXNzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kQ3VycmVudFVubWFza2VkQ29udGV4dChmaWJlcikge1xuICAvLyBDdXJyZW50bHkgdGhpcyBpcyBvbmx5IHVzZWQgd2l0aCByZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcjsgbm90IHN1cmUgaWYgaXRcbiAgLy8gbWFrZXMgc2Vuc2UgZWxzZXdoZXJlXG4gICEoaXNGaWJlck1vdW50ZWQoZmliZXIpICYmIGZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpID8gaW52YXJpYW50KGZhbHNlLCAnRXhwZWN0ZWQgc3VidHJlZSBwYXJlbnQgdG8gYmUgYSBtb3VudGVkIGNsYXNzIGNvbXBvbmVudC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKSA6IHZvaWQgMDtcblxuICB2YXIgbm9kZSA9IGZpYmVyO1xuICBkbyB7XG4gICAgc3dpdGNoIChub2RlLnRhZykge1xuICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgcmV0dXJuIG5vZGUuc3RhdGVOb2RlLmNvbnRleHQ7XG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIENvbXBvbmVudCA9IG5vZGUudHlwZTtcbiAgICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGUuc3RhdGVOb2RlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gIH0gd2hpbGUgKG5vZGUgIT09IG51bGwpO1xuICBpbnZhcmlhbnQoZmFsc2UsICdGb3VuZCB1bmV4cGVjdGVkIGRldGFjaGVkIHN1YnRyZWUgcGFyZW50LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xufVxuXG52YXIgb25Db21taXRGaWJlclJvb3QgPSBudWxsO1xudmFyIG9uQ29tbWl0RmliZXJVbm1vdW50ID0gbnVsbDtcbnZhciBoYXNMb2dnZWRFcnJvciA9IGZhbHNlO1xuXG5mdW5jdGlvbiBjYXRjaEVycm9ycyhmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oYXJnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0cnVlICYmICFoYXNMb2dnZWRFcnJvcikge1xuICAgICAgICBoYXNMb2dnZWRFcnJvciA9IHRydWU7XG4gICAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ1JlYWN0IERldlRvb2xzIGVuY291bnRlcmVkIGFuIGVycm9yOiAlcycsIGVycik7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG52YXIgaXNEZXZUb29sc1ByZXNlbnQgPSB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICE9PSAndW5kZWZpbmVkJztcblxuZnVuY3Rpb24gaW5qZWN0SW50ZXJuYWxzKGludGVybmFscykge1xuICBpZiAodHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBObyBEZXZUb29sc1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgaG9vayA9IF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcbiAgaWYgKGhvb2suaXNEaXNhYmxlZCkge1xuICAgIC8vIFRoaXMgaXNuJ3QgYSByZWFsIHByb3BlcnR5IG9uIHRoZSBob29rLCBidXQgaXQgY2FuIGJlIHNldCB0byBvcHQgb3V0XG4gICAgLy8gb2YgRGV2VG9vbHMgaW50ZWdyYXRpb24gYW5kIGFzc29jaWF0ZWQgd2FybmluZ3MgYW5kIGxvZ3MuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zODc3XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKCFob29rLnN1cHBvcnRzRmliZXIpIHtcbiAgICB7XG4gICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdUaGUgaW5zdGFsbGVkIHZlcnNpb24gb2YgUmVhY3QgRGV2VG9vbHMgaXMgdG9vIG9sZCBhbmQgd2lsbCBub3Qgd29yayAnICsgJ3dpdGggdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBSZWFjdC4gUGxlYXNlIHVwZGF0ZSBSZWFjdCBEZXZUb29scy4gJyArICdodHRwczovL2ZiLm1lL3JlYWN0LWRldnRvb2xzJyk7XG4gICAgfVxuICAgIC8vIERldlRvb2xzIGV4aXN0cywgZXZlbiB0aG91Z2ggaXQgZG9lc24ndCBzdXBwb3J0IEZpYmVyLlxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHRyeSB7XG4gICAgdmFyIHJlbmRlcmVySUQgPSBob29rLmluamVjdChpbnRlcm5hbHMpO1xuICAgIC8vIFdlIGhhdmUgc3VjY2Vzc2Z1bGx5IGluamVjdGVkLCBzbyBub3cgaXQgaXMgc2FmZSB0byBzZXQgdXAgaG9va3MuXG4gICAgb25Db21taXRGaWJlclJvb3QgPSBjYXRjaEVycm9ycyhmdW5jdGlvbiAocm9vdCkge1xuICAgICAgcmV0dXJuIGhvb2sub25Db21taXRGaWJlclJvb3QocmVuZGVyZXJJRCwgcm9vdCk7XG4gICAgfSk7XG4gICAgb25Db21taXRGaWJlclVubW91bnQgPSBjYXRjaEVycm9ycyhmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgIHJldHVybiBob29rLm9uQ29tbWl0RmliZXJVbm1vdW50KHJlbmRlcmVySUQsIGZpYmVyKTtcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gQ2F0Y2ggYWxsIGVycm9ycyBiZWNhdXNlIGl0IGlzIHVuc2FmZSB0byB0aHJvdyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uXG4gICAge1xuICAgICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnUmVhY3QgRGV2VG9vbHMgZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzLicsIGVycik7XG4gICAgfVxuICB9XG4gIC8vIERldlRvb2xzIGV4aXN0c1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gb25Db21taXRSb290KHJvb3QpIHtcbiAgaWYgKHR5cGVvZiBvbkNvbW1pdEZpYmVyUm9vdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG9uQ29tbWl0RmliZXJSb290KHJvb3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uQ29tbWl0VW5tb3VudChmaWJlcikge1xuICBpZiAodHlwZW9mIG9uQ29tbWl0RmliZXJVbm1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgb25Db21taXRGaWJlclVubW91bnQoZmliZXIpO1xuICB9XG59XG5cbi8vIE1heCAzMSBiaXQgaW50ZWdlci4gVGhlIG1heCBpbnRlZ2VyIHNpemUgaW4gVjggZm9yIDMyLWJpdCBzeXN0ZW1zLlxuLy8gTWF0aC5wb3coMiwgMzApIC0gMVxuLy8gMGIxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTFcbnZhciBtYXhTaWduZWQzMUJpdEludCA9IDEwNzM3NDE4MjM7XG5cbnZhciBOb1dvcmsgPSAwO1xudmFyIE5ldmVyID0gMTtcbnZhciBTeW5jID0gbWF4U2lnbmVkMzFCaXRJbnQ7XG5cbnZhciBVTklUX1NJWkUgPSAxMDtcbnZhciBNQUdJQ19OVU1CRVJfT0ZGU0VUID0gbWF4U2lnbmVkMzFCaXRJbnQgLSAxO1xuXG4vLyAxIHVuaXQgb2YgZXhwaXJhdGlvbiB0aW1lIHJlcHJlc2VudHMgMTBtcy5cbmZ1bmN0aW9uIG1zVG9FeHBpcmF0aW9uVGltZShtcykge1xuICAvLyBBbHdheXMgYWRkIGFuIG9mZnNldCBzbyB0aGF0IHdlIGRvbid0IGNsYXNoIHdpdGggdGhlIG1hZ2ljIG51bWJlciBmb3IgTm9Xb3JrLlxuICByZXR1cm4gTUFHSUNfTlVNQkVSX09GRlNFVCAtIChtcyAvIFVOSVRfU0laRSB8IDApO1xufVxuXG5mdW5jdGlvbiBleHBpcmF0aW9uVGltZVRvTXMoZXhwaXJhdGlvblRpbWUpIHtcbiAgcmV0dXJuIChNQUdJQ19OVU1CRVJfT0ZGU0VUIC0gZXhwaXJhdGlvblRpbWUpICogVU5JVF9TSVpFO1xufVxuXG5mdW5jdGlvbiBjZWlsaW5nKG51bSwgcHJlY2lzaW9uKSB7XG4gIHJldHVybiAoKG51bSAvIHByZWNpc2lvbiB8IDApICsgMSkgKiBwcmVjaXNpb247XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVFeHBpcmF0aW9uQnVja2V0KGN1cnJlbnRUaW1lLCBleHBpcmF0aW9uSW5NcywgYnVja2V0U2l6ZU1zKSB7XG4gIHJldHVybiBNQUdJQ19OVU1CRVJfT0ZGU0VUIC0gY2VpbGluZyhNQUdJQ19OVU1CRVJfT0ZGU0VUIC0gY3VycmVudFRpbWUgKyBleHBpcmF0aW9uSW5NcyAvIFVOSVRfU0laRSwgYnVja2V0U2l6ZU1zIC8gVU5JVF9TSVpFKTtcbn1cblxudmFyIExPV19QUklPUklUWV9FWFBJUkFUSU9OID0gNTAwMDtcbnZhciBMT1dfUFJJT1JJVFlfQkFUQ0hfU0laRSA9IDI1MDtcblxuZnVuY3Rpb24gY29tcHV0ZUFzeW5jRXhwaXJhdGlvbihjdXJyZW50VGltZSkge1xuICByZXR1cm4gY29tcHV0ZUV4cGlyYXRpb25CdWNrZXQoY3VycmVudFRpbWUsIExPV19QUklPUklUWV9FWFBJUkFUSU9OLCBMT1dfUFJJT1JJVFlfQkFUQ0hfU0laRSk7XG59XG5cbi8vIFdlIGludGVudGlvbmFsbHkgc2V0IGEgaGlnaGVyIGV4cGlyYXRpb24gdGltZSBmb3IgaW50ZXJhY3RpdmUgdXBkYXRlcyBpblxuLy8gZGV2IHRoYW4gaW4gcHJvZHVjdGlvbi5cbi8vXG4vLyBJZiB0aGUgbWFpbiB0aHJlYWQgaXMgYmVpbmcgYmxvY2tlZCBzbyBsb25nIHRoYXQgeW91IGhpdCB0aGUgZXhwaXJhdGlvbixcbi8vIGl0J3MgYSBwcm9ibGVtIHRoYXQgY291bGQgYmUgc29sdmVkIHdpdGggYmV0dGVyIHNjaGVkdWxpbmcuXG4vL1xuLy8gUGVvcGxlIHdpbGwgYmUgbW9yZSBsaWtlbHkgdG8gbm90aWNlIHRoaXMgYW5kIGZpeCBpdCB3aXRoIHRoZSBsb25nXG4vLyBleHBpcmF0aW9uIHRpbWUgaW4gZGV2ZWxvcG1lbnQuXG4vL1xuLy8gSW4gcHJvZHVjdGlvbiB3ZSBvcHQgZm9yIGJldHRlciBVWCBhdCB0aGUgcmlzayBvZiBtYXNraW5nIHNjaGVkdWxpbmdcbi8vIHByb2JsZW1zLCBieSBleHBpcmluZyBmYXN0LlxudmFyIEhJR0hfUFJJT1JJVFlfRVhQSVJBVElPTiA9IDUwMDtcbnZhciBISUdIX1BSSU9SSVRZX0JBVENIX1NJWkUgPSAxMDA7XG5cbmZ1bmN0aW9uIGNvbXB1dGVJbnRlcmFjdGl2ZUV4cGlyYXRpb24oY3VycmVudFRpbWUpIHtcbiAgcmV0dXJuIGNvbXB1dGVFeHBpcmF0aW9uQnVja2V0KGN1cnJlbnRUaW1lLCBISUdIX1BSSU9SSVRZX0VYUElSQVRJT04sIEhJR0hfUFJJT1JJVFlfQkFUQ0hfU0laRSk7XG59XG5cbnZhciBOb0NvbnRleHQgPSAwO1xudmFyIENvbmN1cnJlbnRNb2RlID0gMTtcbnZhciBTdHJpY3RNb2RlID0gMjtcbnZhciBQcm9maWxlTW9kZSA9IDQ7XG5cbnZhciBoYXNCYWRNYXBQb2x5ZmlsbCA9IHZvaWQgMDtcblxue1xuICBoYXNCYWRNYXBQb2x5ZmlsbCA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBub25FeHRlbnNpYmxlT2JqZWN0ID0gT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KTtcbiAgICB2YXIgdGVzdE1hcCA9IG5ldyBNYXAoW1tub25FeHRlbnNpYmxlT2JqZWN0LCBudWxsXV0pO1xuICAgIHZhciB0ZXN0U2V0ID0gbmV3IFNldChbbm9uRXh0ZW5zaWJsZU9iamVjdF0pO1xuICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBSb2xsdXAgdG8gbm90IGNvbnNpZGVyIHRoZXNlIHVudXNlZC5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcm9sbHVwL3JvbGx1cC9pc3N1ZXMvMTc3MVxuICAgIC8vIFRPRE86IHdlIGNhbiByZW1vdmUgdGhlc2UgaWYgUm9sbHVwIGZpeGVzIHRoZSBidWcuXG4gICAgdGVzdE1hcC5zZXQoMCwgMCk7XG4gICAgdGVzdFNldC5hZGQoMCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBUT0RPOiBDb25zaWRlciB3YXJuaW5nIGFib3V0IGJhZCBwb2x5ZmlsbHNcbiAgICBoYXNCYWRNYXBQb2x5ZmlsbCA9IHRydWU7XG4gIH1cbn1cblxuLy8gQSBGaWJlciBpcyB3b3JrIG9uIGEgQ29tcG9uZW50IHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBvciB3YXMgZG9uZS4gVGhlcmUgY2FuXG4vLyBiZSBtb3JlIHRoYW4gb25lIHBlciBjb21wb25lbnQuXG5cblxudmFyIGRlYnVnQ291bnRlciA9IHZvaWQgMDtcblxue1xuICBkZWJ1Z0NvdW50ZXIgPSAxO1xufVxuXG5mdW5jdGlvbiBGaWJlck5vZGUodGFnLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSkge1xuICAvLyBJbnN0YW5jZVxuICB0aGlzLnRhZyA9IHRhZztcbiAgdGhpcy5rZXkgPSBrZXk7XG4gIHRoaXMuZWxlbWVudFR5cGUgPSBudWxsO1xuICB0aGlzLnR5cGUgPSBudWxsO1xuICB0aGlzLnN0YXRlTm9kZSA9IG51bGw7XG5cbiAgLy8gRmliZXJcbiAgdGhpcy5yZXR1cm4gPSBudWxsO1xuICB0aGlzLmNoaWxkID0gbnVsbDtcbiAgdGhpcy5zaWJsaW5nID0gbnVsbDtcbiAgdGhpcy5pbmRleCA9IDA7XG5cbiAgdGhpcy5yZWYgPSBudWxsO1xuXG4gIHRoaXMucGVuZGluZ1Byb3BzID0gcGVuZGluZ1Byb3BzO1xuICB0aGlzLm1lbW9pemVkUHJvcHMgPSBudWxsO1xuICB0aGlzLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgdGhpcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgdGhpcy5jb250ZXh0RGVwZW5kZW5jaWVzID0gbnVsbDtcblxuICB0aGlzLm1vZGUgPSBtb2RlO1xuXG4gIC8vIEVmZmVjdHNcbiAgdGhpcy5lZmZlY3RUYWcgPSBOb0VmZmVjdDtcbiAgdGhpcy5uZXh0RWZmZWN0ID0gbnVsbDtcblxuICB0aGlzLmZpcnN0RWZmZWN0ID0gbnVsbDtcbiAgdGhpcy5sYXN0RWZmZWN0ID0gbnVsbDtcblxuICB0aGlzLmV4cGlyYXRpb25UaW1lID0gTm9Xb3JrO1xuICB0aGlzLmNoaWxkRXhwaXJhdGlvblRpbWUgPSBOb1dvcms7XG5cbiAgdGhpcy5hbHRlcm5hdGUgPSBudWxsO1xuXG4gIGlmIChlbmFibGVQcm9maWxlclRpbWVyKSB7XG4gICAgLy8gTm90ZTogVGhlIGZvbGxvd2luZyBpcyBkb25lIHRvIGF2b2lkIGEgdjggcGVyZm9ybWFuY2UgY2xpZmYuXG4gICAgLy9cbiAgICAvLyBJbml0aWFsaXppbmcgdGhlIGZpZWxkcyBiZWxvdyB0byBzbWlzIGFuZCBsYXRlciB1cGRhdGluZyB0aGVtIHdpdGhcbiAgICAvLyBkb3VibGUgdmFsdWVzIHdpbGwgY2F1c2UgRmliZXJzIHRvIGVuZCB1cCBoYXZpbmcgc2VwYXJhdGUgc2hhcGVzLlxuICAgIC8vIFRoaXMgYmVoYXZpb3IvYnVnIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBPYmplY3QucHJldmVudEV4dGVuc2lvbigpLlxuICAgIC8vIEZvcnR1bmF0ZWx5IHRoaXMgb25seSBpbXBhY3RzIERFViBidWlsZHMuXG4gICAgLy8gVW5mb3J0dW5hdGVseSBpdCBtYWtlcyBSZWFjdCB1bnVzYWJseSBzbG93IGZvciBzb21lIGFwcGxpY2F0aW9ucy5cbiAgICAvLyBUbyB3b3JrIGFyb3VuZCB0aGlzLCBpbml0aWFsaXplIHRoZSBmaWVsZHMgYmVsb3cgd2l0aCBkb3VibGVzLlxuICAgIC8vXG4gICAgLy8gTGVhcm4gbW9yZSBhYm91dCB0aGlzIGhlcmU6XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNDM2NVxuICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTg1MzhcbiAgICB0aGlzLmFjdHVhbER1cmF0aW9uID0gTnVtYmVyLk5hTjtcbiAgICB0aGlzLmFjdHVhbFN0YXJ0VGltZSA9IE51bWJlci5OYU47XG4gICAgdGhpcy5zZWxmQmFzZUR1cmF0aW9uID0gTnVtYmVyLk5hTjtcbiAgICB0aGlzLnRyZWVCYXNlRHVyYXRpb24gPSBOdW1iZXIuTmFOO1xuXG4gICAgLy8gSXQncyBva2F5IHRvIHJlcGxhY2UgdGhlIGluaXRpYWwgZG91YmxlcyB3aXRoIHNtaXMgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uXG4gICAgLy8gVGhpcyB3b24ndCB0cmlnZ2VyIHRoZSBwZXJmb3JtYW5jZSBjbGlmZiBtZW50aW9uZWQgYWJvdmUsXG4gICAgLy8gYW5kIGl0IHNpbXBsaWZpZXMgb3RoZXIgcHJvZmlsZXIgY29kZSAoaW5jbHVkaW5nIERldlRvb2xzKS5cbiAgICB0aGlzLmFjdHVhbER1cmF0aW9uID0gMDtcbiAgICB0aGlzLmFjdHVhbFN0YXJ0VGltZSA9IC0xO1xuICAgIHRoaXMuc2VsZkJhc2VEdXJhdGlvbiA9IDA7XG4gICAgdGhpcy50cmVlQmFzZUR1cmF0aW9uID0gMDtcbiAgfVxuXG4gIHtcbiAgICB0aGlzLl9kZWJ1Z0lEID0gZGVidWdDb3VudGVyKys7XG4gICAgdGhpcy5fZGVidWdTb3VyY2UgPSBudWxsO1xuICAgIHRoaXMuX2RlYnVnT3duZXIgPSBudWxsO1xuICAgIHRoaXMuX2RlYnVnSXNDdXJyZW50bHlUaW1pbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9kZWJ1Z0hvb2tUeXBlcyA9IG51bGw7XG4gICAgaWYgKCFoYXNCYWRNYXBQb2x5ZmlsbCAmJiB0eXBlb2YgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBPYmplY3QucHJldmVudEV4dGVuc2lvbnModGhpcyk7XG4gICAgfVxuICB9XG59XG5cbi8vIFRoaXMgaXMgYSBjb25zdHJ1Y3RvciBmdW5jdGlvbiwgcmF0aGVyIHRoYW4gYSBQT0pPIGNvbnN0cnVjdG9yLCBzdGlsbFxuLy8gcGxlYXNlIGVuc3VyZSB3ZSBkbyB0aGUgZm9sbG93aW5nOlxuLy8gMSkgTm9ib2R5IHNob3VsZCBhZGQgYW55IGluc3RhbmNlIG1ldGhvZHMgb24gdGhpcy4gSW5zdGFuY2UgbWV0aG9kcyBjYW4gYmVcbi8vICAgIG1vcmUgZGlmZmljdWx0IHRvIHByZWRpY3Qgd2hlbiB0aGV5IGdldCBvcHRpbWl6ZWQgYW5kIHRoZXkgYXJlIGFsbW9zdFxuLy8gICAgbmV2ZXIgaW5saW5lZCBwcm9wZXJseSBpbiBzdGF0aWMgY29tcGlsZXJzLlxuLy8gMikgTm9ib2R5IHNob3VsZCByZWx5IG9uIGBpbnN0YW5jZW9mIEZpYmVyYCBmb3IgdHlwZSB0ZXN0aW5nLiBXZSBzaG91bGRcbi8vICAgIGFsd2F5cyBrbm93IHdoZW4gaXQgaXMgYSBmaWJlci5cbi8vIDMpIFdlIG1pZ2h0IHdhbnQgdG8gZXhwZXJpbWVudCB3aXRoIHVzaW5nIG51bWVyaWMga2V5cyBzaW5jZSB0aGV5IGFyZSBlYXNpZXJcbi8vICAgIHRvIG9wdGltaXplIGluIGEgbm9uLUpJVCBlbnZpcm9ubWVudC5cbi8vIDQpIFdlIGNhbiBlYXNpbHkgZ28gZnJvbSBhIGNvbnN0cnVjdG9yIHRvIGEgY3JlYXRlRmliZXIgb2JqZWN0IGxpdGVyYWwgaWYgdGhhdFxuLy8gICAgaXMgZmFzdGVyLlxuLy8gNSkgSXQgc2hvdWxkIGJlIGVhc3kgdG8gcG9ydCB0aGlzIHRvIGEgQyBzdHJ1Y3QgYW5kIGtlZXAgYSBDIGltcGxlbWVudGF0aW9uXG4vLyAgICBjb21wYXRpYmxlLlxudmFyIGNyZWF0ZUZpYmVyID0gZnVuY3Rpb24gKHRhZywgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpIHtcbiAgLy8gJEZsb3dGaXhNZTogdGhlIHNoYXBlcyBhcmUgZXhhY3QgaGVyZSBidXQgRmxvdyBkb2Vzbid0IGxpa2UgY29uc3RydWN0b3JzXG4gIHJldHVybiBuZXcgRmliZXJOb2RlKHRhZywgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpO1xufTtcblxuZnVuY3Rpb24gc2hvdWxkQ29uc3RydWN0KENvbXBvbmVudCkge1xuICB2YXIgcHJvdG90eXBlID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbiAgcmV0dXJuICEhKHByb3RvdHlwZSAmJiBwcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCk7XG59XG5cbmZ1bmN0aW9uIGlzU2ltcGxlRnVuY3Rpb25Db21wb25lbnQodHlwZSkge1xuICByZXR1cm4gdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgJiYgIXNob3VsZENvbnN0cnVjdCh0eXBlKSAmJiB0eXBlLmRlZmF1bHRQcm9wcyA9PT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlTGF6eUNvbXBvbmVudFRhZyhDb21wb25lbnQpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gc2hvdWxkQ29uc3RydWN0KENvbXBvbmVudCkgPyBDbGFzc0NvbXBvbmVudCA6IEZ1bmN0aW9uQ29tcG9uZW50O1xuICB9IGVsc2UgaWYgKENvbXBvbmVudCAhPT0gdW5kZWZpbmVkICYmIENvbXBvbmVudCAhPT0gbnVsbCkge1xuICAgIHZhciAkJHR5cGVvZiA9IENvbXBvbmVudC4kJHR5cGVvZjtcbiAgICBpZiAoJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUpIHtcbiAgICAgIHJldHVybiBGb3J3YXJkUmVmO1xuICAgIH1cbiAgICBpZiAoJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSkge1xuICAgICAgcmV0dXJuIE1lbW9Db21wb25lbnQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBJbmRldGVybWluYXRlQ29tcG9uZW50O1xufVxuXG4vLyBUaGlzIGlzIHVzZWQgdG8gY3JlYXRlIGFuIGFsdGVybmF0ZSBmaWJlciB0byBkbyB3b3JrIG9uLlxuZnVuY3Rpb24gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudCwgcGVuZGluZ1Byb3BzLCBleHBpcmF0aW9uVGltZSkge1xuICB2YXIgd29ya0luUHJvZ3Jlc3MgPSBjdXJyZW50LmFsdGVybmF0ZTtcbiAgaWYgKHdvcmtJblByb2dyZXNzID09PSBudWxsKSB7XG4gICAgLy8gV2UgdXNlIGEgZG91YmxlIGJ1ZmZlcmluZyBwb29saW5nIHRlY2huaXF1ZSBiZWNhdXNlIHdlIGtub3cgdGhhdCB3ZSdsbFxuICAgIC8vIG9ubHkgZXZlciBuZWVkIGF0IG1vc3QgdHdvIHZlcnNpb25zIG9mIGEgdHJlZS4gV2UgcG9vbCB0aGUgXCJvdGhlclwiIHVudXNlZFxuICAgIC8vIG5vZGUgdGhhdCB3ZSdyZSBmcmVlIHRvIHJldXNlLiBUaGlzIGlzIGxhemlseSBjcmVhdGVkIHRvIGF2b2lkIGFsbG9jYXRpbmdcbiAgICAvLyBleHRyYSBvYmplY3RzIGZvciB0aGluZ3MgdGhhdCBhcmUgbmV2ZXIgdXBkYXRlZC4gSXQgYWxzbyBhbGxvdyB1cyB0b1xuICAgIC8vIHJlY2xhaW0gdGhlIGV4dHJhIG1lbW9yeSBpZiBuZWVkZWQuXG4gICAgd29ya0luUHJvZ3Jlc3MgPSBjcmVhdGVGaWJlcihjdXJyZW50LnRhZywgcGVuZGluZ1Byb3BzLCBjdXJyZW50LmtleSwgY3VycmVudC5tb2RlKTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9IGN1cnJlbnQuZWxlbWVudFR5cGU7XG4gICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IGN1cnJlbnQudHlwZTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBjdXJyZW50LnN0YXRlTm9kZTtcblxuICAgIHtcbiAgICAgIC8vIERFVi1vbmx5IGZpZWxkc1xuICAgICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnSUQgPSBjdXJyZW50Ll9kZWJ1Z0lEO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnU291cmNlID0gY3VycmVudC5fZGVidWdTb3VyY2U7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdPd25lciA9IGN1cnJlbnQuX2RlYnVnT3duZXI7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdIb29rVHlwZXMgPSBjdXJyZW50Ll9kZWJ1Z0hvb2tUeXBlcztcbiAgICB9XG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPSBjdXJyZW50O1xuICAgIGN1cnJlbnQuYWx0ZXJuYXRlID0gd29ya0luUHJvZ3Jlc3M7XG4gIH0gZWxzZSB7XG4gICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzID0gcGVuZGluZ1Byb3BzO1xuXG4gICAgLy8gV2UgYWxyZWFkeSBoYXZlIGFuIGFsdGVybmF0ZS5cbiAgICAvLyBSZXNldCB0aGUgZWZmZWN0IHRhZy5cbiAgICB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgPSBOb0VmZmVjdDtcblxuICAgIC8vIFRoZSBlZmZlY3QgbGlzdCBpcyBubyBsb25nZXIgdmFsaWQuXG4gICAgd29ya0luUHJvZ3Jlc3MubmV4dEVmZmVjdCA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MuZmlyc3RFZmZlY3QgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QgPSBudWxsO1xuXG4gICAgaWYgKGVuYWJsZVByb2ZpbGVyVGltZXIpIHtcbiAgICAgIC8vIFdlIGludGVudGlvbmFsbHkgcmVzZXQsIHJhdGhlciB0aGFuIGNvcHksIGFjdHVhbER1cmF0aW9uICYgYWN0dWFsU3RhcnRUaW1lLlxuICAgICAgLy8gVGhpcyBwcmV2ZW50cyB0aW1lIGZyb20gZW5kbGVzc2x5IGFjY3VtdWxhdGluZyBpbiBuZXcgY29tbWl0cy5cbiAgICAgIC8vIFRoaXMgaGFzIHRoZSBkb3duc2lkZSBvZiByZXNldHRpbmcgdmFsdWVzIGZvciBkaWZmZXJlbnQgcHJpb3JpdHkgcmVuZGVycyxcbiAgICAgIC8vIEJ1dCB3b3JrcyBmb3IgeWllbGRpbmcgKHRoZSBjb21tb24gY2FzZSkgYW5kIHNob3VsZCBzdXBwb3J0IHJlc3VtaW5nLlxuICAgICAgd29ya0luUHJvZ3Jlc3MuYWN0dWFsRHVyYXRpb24gPSAwO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuYWN0dWFsU3RhcnRUaW1lID0gLTE7XG4gICAgfVxuICB9XG5cbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGRFeHBpcmF0aW9uVGltZSA9IGN1cnJlbnQuY2hpbGRFeHBpcmF0aW9uVGltZTtcbiAgd29ya0luUHJvZ3Jlc3MuZXhwaXJhdGlvblRpbWUgPSBjdXJyZW50LmV4cGlyYXRpb25UaW1lO1xuXG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudC5jaGlsZDtcbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuICB3b3JrSW5Qcm9ncmVzcy5jb250ZXh0RGVwZW5kZW5jaWVzID0gY3VycmVudC5jb250ZXh0RGVwZW5kZW5jaWVzO1xuXG4gIC8vIFRoZXNlIHdpbGwgYmUgb3ZlcnJpZGRlbiBkdXJpbmcgdGhlIHBhcmVudCdzIHJlY29uY2lsaWF0aW9uXG4gIHdvcmtJblByb2dyZXNzLnNpYmxpbmcgPSBjdXJyZW50LnNpYmxpbmc7XG4gIHdvcmtJblByb2dyZXNzLmluZGV4ID0gY3VycmVudC5pbmRleDtcbiAgd29ya0luUHJvZ3Jlc3MucmVmID0gY3VycmVudC5yZWY7XG5cbiAgaWYgKGVuYWJsZVByb2ZpbGVyVGltZXIpIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5zZWxmQmFzZUR1cmF0aW9uID0gY3VycmVudC5zZWxmQmFzZUR1cmF0aW9uO1xuICAgIHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gPSBjdXJyZW50LnRyZWVCYXNlRHVyYXRpb247XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUhvc3RSb290RmliZXIoaXNDb25jdXJyZW50KSB7XG4gIHZhciBtb2RlID0gaXNDb25jdXJyZW50ID8gQ29uY3VycmVudE1vZGUgfCBTdHJpY3RNb2RlIDogTm9Db250ZXh0O1xuXG4gIGlmIChlbmFibGVQcm9maWxlclRpbWVyICYmIGlzRGV2VG9vbHNQcmVzZW50KSB7XG4gICAgLy8gQWx3YXlzIGNvbGxlY3QgcHJvZmlsZSB0aW1pbmdzIHdoZW4gRGV2VG9vbHMgYXJlIHByZXNlbnQuXG4gICAgLy8gVGhpcyBlbmFibGVzIERldlRvb2xzIHRvIHN0YXJ0IGNhcHR1cmluZyB0aW1pbmcgYXQgYW55IHBvaW504oCTXG4gICAgLy8gV2l0aG91dCBzb21lIG5vZGVzIGluIHRoZSB0cmVlIGhhdmluZyBlbXB0eSBiYXNlIHRpbWVzLlxuICAgIG1vZGUgfD0gUHJvZmlsZU1vZGU7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlRmliZXIoSG9zdFJvb3QsIG51bGwsIG51bGwsIG1vZGUpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHModHlwZSwgLy8gUmVhY3QkRWxlbWVudFR5cGVcbmtleSwgcGVuZGluZ1Byb3BzLCBvd25lciwgbW9kZSwgZXhwaXJhdGlvblRpbWUpIHtcbiAgdmFyIGZpYmVyID0gdm9pZCAwO1xuXG4gIHZhciBmaWJlclRhZyA9IEluZGV0ZXJtaW5hdGVDb21wb25lbnQ7XG4gIC8vIFRoZSByZXNvbHZlZCB0eXBlIGlzIHNldCBpZiB3ZSBrbm93IHdoYXQgdGhlIGZpbmFsIHR5cGUgd2lsbCBiZS4gSS5lLiBpdCdzIG5vdCBsYXp5LlxuICB2YXIgcmVzb2x2ZWRUeXBlID0gdHlwZTtcbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKHNob3VsZENvbnN0cnVjdCh0eXBlKSkge1xuICAgICAgZmliZXJUYWcgPSBDbGFzc0NvbXBvbmVudDtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgZmliZXJUYWcgPSBIb3N0Q29tcG9uZW50O1xuICB9IGVsc2Uge1xuICAgIGdldFRhZzogc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21GcmFnbWVudChwZW5kaW5nUHJvcHMuY2hpbGRyZW4sIG1vZGUsIGV4cGlyYXRpb25UaW1lLCBrZXkpO1xuICAgICAgY2FzZSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbU1vZGUocGVuZGluZ1Byb3BzLCBtb2RlIHwgQ29uY3VycmVudE1vZGUgfCBTdHJpY3RNb2RlLCBleHBpcmF0aW9uVGltZSwga2V5KTtcbiAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbU1vZGUocGVuZGluZ1Byb3BzLCBtb2RlIHwgU3RyaWN0TW9kZSwgZXhwaXJhdGlvblRpbWUsIGtleSk7XG4gICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21Qcm9maWxlcihwZW5kaW5nUHJvcHMsIG1vZGUsIGV4cGlyYXRpb25UaW1lLCBrZXkpO1xuICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tU3VzcGVuc2UocGVuZGluZ1Byb3BzLCBtb2RlLCBleHBpcmF0aW9uVGltZSwga2V5KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgICAgICAgICAgZmliZXJUYWcgPSBDb250ZXh0UHJvdmlkZXI7XG4gICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgY29uc3VtZXJcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IENvbnRleHRDb25zdW1lcjtcbiAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IEZvcndhcmRSZWY7XG4gICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IE1lbW9Db21wb25lbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IExhenlDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZWRUeXBlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBpbmZvID0gJyc7XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiBPYmplY3Qua2V5cyh0eXBlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgaW5mbyArPSAnIFlvdSBsaWtlbHkgZm9yZ290IHRvIGV4cG9ydCB5b3VyIGNvbXBvbmVudCBmcm9tIHRoZSBmaWxlICcgKyBcIml0J3MgZGVmaW5lZCBpbiwgb3IgeW91IG1pZ2h0IGhhdmUgbWl4ZWQgdXAgZGVmYXVsdCBhbmQgXCIgKyAnbmFtZWQgaW1wb3J0cy4nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG93bmVyTmFtZSA9IG93bmVyID8gZ2V0Q29tcG9uZW50TmFtZShvd25lci50eXBlKSA6IG51bGw7XG4gICAgICAgICAgICBpZiAob3duZXJOYW1lKSB7XG4gICAgICAgICAgICAgIGluZm8gKz0gJ1xcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgb3duZXJOYW1lICsgJ2AuJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaW52YXJpYW50KGZhbHNlLCAnRWxlbWVudCB0eXBlIGlzIGludmFsaWQ6IGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgYnVpbHQtaW4gY29tcG9uZW50cykgb3IgYSBjbGFzcy9mdW5jdGlvbiAoZm9yIGNvbXBvc2l0ZSBjb21wb25lbnRzKSBidXQgZ290OiAlcy4lcycsIHR5cGUgPT0gbnVsbCA/IHR5cGUgOiB0eXBlb2YgdHlwZSwgaW5mbyk7XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmaWJlciA9IGNyZWF0ZUZpYmVyKGZpYmVyVGFnLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7XG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gdHlwZTtcbiAgZmliZXIudHlwZSA9IHJlc29sdmVkVHlwZTtcbiAgZmliZXIuZXhwaXJhdGlvblRpbWUgPSBleHBpcmF0aW9uVGltZTtcblxuICByZXR1cm4gZmliZXI7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQoZWxlbWVudCwgbW9kZSwgZXhwaXJhdGlvblRpbWUpIHtcbiAgdmFyIG93bmVyID0gbnVsbDtcbiAge1xuICAgIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gIH1cbiAgdmFyIHR5cGUgPSBlbGVtZW50LnR5cGU7XG4gIHZhciBrZXkgPSBlbGVtZW50LmtleTtcbiAgdmFyIHBlbmRpbmdQcm9wcyA9IGVsZW1lbnQucHJvcHM7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyh0eXBlLCBrZXksIHBlbmRpbmdQcm9wcywgb3duZXIsIG1vZGUsIGV4cGlyYXRpb25UaW1lKTtcbiAge1xuICAgIGZpYmVyLl9kZWJ1Z1NvdXJjZSA9IGVsZW1lbnQuX3NvdXJjZTtcbiAgICBmaWJlci5fZGVidWdPd25lciA9IGVsZW1lbnQuX293bmVyO1xuICB9XG4gIHJldHVybiBmaWJlcjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZWxlbWVudHMsIG1vZGUsIGV4cGlyYXRpb25UaW1lLCBrZXkpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoRnJhZ21lbnQsIGVsZW1lbnRzLCBrZXksIG1vZGUpO1xuICBmaWJlci5leHBpcmF0aW9uVGltZSA9IGV4cGlyYXRpb25UaW1lO1xuICByZXR1cm4gZmliZXI7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVByb2ZpbGVyKHBlbmRpbmdQcm9wcywgbW9kZSwgZXhwaXJhdGlvblRpbWUsIGtleSkge1xuICB7XG4gICAgaWYgKHR5cGVvZiBwZW5kaW5nUHJvcHMuaWQgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiBwZW5kaW5nUHJvcHMub25SZW5kZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ1Byb2ZpbGVyIG11c3Qgc3BlY2lmeSBhbiBcImlkXCIgc3RyaW5nIGFuZCBcIm9uUmVuZGVyXCIgZnVuY3Rpb24gYXMgcHJvcHMnKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihQcm9maWxlciwgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUgfCBQcm9maWxlTW9kZSk7XG4gIC8vIFRPRE86IFRoZSBQcm9maWxlciBmaWJlciBzaG91bGRuJ3QgaGF2ZSBhIHR5cGUuIEl0IGhhcyBhIHRhZy5cbiAgZmliZXIuZWxlbWVudFR5cGUgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xuICBmaWJlci50eXBlID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbiAgZmliZXIuZXhwaXJhdGlvblRpbWUgPSBleHBpcmF0aW9uVGltZTtcblxuICByZXR1cm4gZmliZXI7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbU1vZGUocGVuZGluZ1Byb3BzLCBtb2RlLCBleHBpcmF0aW9uVGltZSwga2V5KSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKE1vZGUsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTtcblxuICAvLyBUT0RPOiBUaGUgTW9kZSBmaWJlciBzaG91bGRuJ3QgaGF2ZSBhIHR5cGUuIEl0IGhhcyBhIHRhZy5cbiAgdmFyIHR5cGUgPSAobW9kZSAmIENvbmN1cnJlbnRNb2RlKSA9PT0gTm9Db250ZXh0ID8gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA6IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFO1xuICBmaWJlci5lbGVtZW50VHlwZSA9IHR5cGU7XG4gIGZpYmVyLnR5cGUgPSB0eXBlO1xuXG4gIGZpYmVyLmV4cGlyYXRpb25UaW1lID0gZXhwaXJhdGlvblRpbWU7XG4gIHJldHVybiBmaWJlcjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tU3VzcGVuc2UocGVuZGluZ1Byb3BzLCBtb2RlLCBleHBpcmF0aW9uVGltZSwga2V5KSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKFN1c3BlbnNlQ29tcG9uZW50LCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7XG5cbiAgLy8gVE9ETzogVGhlIFN1c3BlbnNlQ29tcG9uZW50IGZpYmVyIHNob3VsZG4ndCBoYXZlIGEgdHlwZS4gSXQgaGFzIGEgdGFnLlxuICB2YXIgdHlwZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gdHlwZTtcbiAgZmliZXIudHlwZSA9IHR5cGU7XG5cbiAgZmliZXIuZXhwaXJhdGlvblRpbWUgPSBleHBpcmF0aW9uVGltZTtcbiAgcmV0dXJuIGZpYmVyO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21UZXh0KGNvbnRlbnQsIG1vZGUsIGV4cGlyYXRpb25UaW1lKSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKEhvc3RUZXh0LCBjb250ZW50LCBudWxsLCBtb2RlKTtcbiAgZmliZXIuZXhwaXJhdGlvblRpbWUgPSBleHBpcmF0aW9uVGltZTtcbiAgcmV0dXJuIGZpYmVyO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21Ib3N0SW5zdGFuY2VGb3JEZWxldGlvbigpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoSG9zdENvbXBvbmVudCwgbnVsbCwgbnVsbCwgTm9Db250ZXh0KTtcbiAgLy8gVE9ETzogVGhlc2Ugc2hvdWxkIG5vdCBuZWVkIGEgdHlwZS5cbiAgZmliZXIuZWxlbWVudFR5cGUgPSAnREVMRVRFRCc7XG4gIGZpYmVyLnR5cGUgPSAnREVMRVRFRCc7XG4gIHJldHVybiBmaWJlcjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tUG9ydGFsKHBvcnRhbCwgbW9kZSwgZXhwaXJhdGlvblRpbWUpIHtcbiAgdmFyIHBlbmRpbmdQcm9wcyA9IHBvcnRhbC5jaGlsZHJlbiAhPT0gbnVsbCA/IHBvcnRhbC5jaGlsZHJlbiA6IFtdO1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihIb3N0UG9ydGFsLCBwZW5kaW5nUHJvcHMsIHBvcnRhbC5rZXksIG1vZGUpO1xuICBmaWJlci5leHBpcmF0aW9uVGltZSA9IGV4cGlyYXRpb25UaW1lO1xuICBmaWJlci5zdGF0ZU5vZGUgPSB7XG4gICAgY29udGFpbmVySW5mbzogcG9ydGFsLmNvbnRhaW5lckluZm8sXG4gICAgcGVuZGluZ0NoaWxkcmVuOiBudWxsLCAvLyBVc2VkIGJ5IHBlcnNpc3RlbnQgdXBkYXRlc1xuICAgIGltcGxlbWVudGF0aW9uOiBwb3J0YWwuaW1wbGVtZW50YXRpb25cbiAgfTtcbiAgcmV0dXJuIGZpYmVyO1xufVxuXG4vLyBVc2VkIGZvciBzdGFzaGluZyBXSVAgcHJvcGVydGllcyB0byByZXBsYXkgZmFpbGVkIHdvcmsgaW4gREVWLlxuZnVuY3Rpb24gYXNzaWduRmliZXJQcm9wZXJ0aWVzSW5ERVYodGFyZ2V0LCBzb3VyY2UpIHtcbiAgaWYgKHRhcmdldCA9PT0gbnVsbCkge1xuICAgIC8vIFRoaXMgRmliZXIncyBpbml0aWFsIHByb3BlcnRpZXMgd2lsbCBhbHdheXMgYmUgb3ZlcndyaXR0ZW4uXG4gICAgLy8gV2Ugb25seSB1c2UgYSBGaWJlciB0byBlbnN1cmUgdGhlIHNhbWUgaGlkZGVuIGNsYXNzIHNvIERFViBpc24ndCBzbG93LlxuICAgIHRhcmdldCA9IGNyZWF0ZUZpYmVyKEluZGV0ZXJtaW5hdGVDb21wb25lbnQsIG51bGwsIG51bGwsIE5vQ29udGV4dCk7XG4gIH1cblxuICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgd3JpdHRlbiBhcyBhIGxpc3Qgb2YgYWxsIHByb3BlcnRpZXMuXG4gIC8vIFdlIHRyaWVkIHRvIHVzZSBPYmplY3QuYXNzaWduKCkgaW5zdGVhZCBidXQgdGhpcyBpcyBjYWxsZWQgaW5cbiAgLy8gdGhlIGhvdHRlc3QgcGF0aCwgYW5kIE9iamVjdC5hc3NpZ24oKSB3YXMgdG9vIHNsb3c6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTI1MDJcbiAgLy8gVGhpcyBjb2RlIGlzIERFVi1vbmx5IHNvIHNpemUgaXMgbm90IGEgY29uY2Vybi5cblxuICB0YXJnZXQudGFnID0gc291cmNlLnRhZztcbiAgdGFyZ2V0LmtleSA9IHNvdXJjZS5rZXk7XG4gIHRhcmdldC5lbGVtZW50VHlwZSA9IHNvdXJjZS5lbGVtZW50VHlwZTtcbiAgdGFyZ2V0LnR5cGUgPSBzb3VyY2UudHlwZTtcbiAgdGFyZ2V0LnN0YXRlTm9kZSA9IHNvdXJjZS5zdGF0ZU5vZGU7XG4gIHRhcmdldC5yZXR1cm4gPSBzb3VyY2UucmV0dXJuO1xuICB0YXJnZXQuY2hpbGQgPSBzb3VyY2UuY2hpbGQ7XG4gIHRhcmdldC5zaWJsaW5nID0gc291cmNlLnNpYmxpbmc7XG4gIHRhcmdldC5pbmRleCA9IHNvdXJjZS5pbmRleDtcbiAgdGFyZ2V0LnJlZiA9IHNvdXJjZS5yZWY7XG4gIHRhcmdldC5wZW5kaW5nUHJvcHMgPSBzb3VyY2UucGVuZGluZ1Byb3BzO1xuICB0YXJnZXQubWVtb2l6ZWRQcm9wcyA9IHNvdXJjZS5tZW1vaXplZFByb3BzO1xuICB0YXJnZXQudXBkYXRlUXVldWUgPSBzb3VyY2UudXBkYXRlUXVldWU7XG4gIHRhcmdldC5tZW1vaXplZFN0YXRlID0gc291cmNlLm1lbW9pemVkU3RhdGU7XG4gIHRhcmdldC5jb250ZXh0RGVwZW5kZW5jaWVzID0gc291cmNlLmNvbnRleHREZXBlbmRlbmNpZXM7XG4gIHRhcmdldC5tb2RlID0gc291cmNlLm1vZGU7XG4gIHRhcmdldC5lZmZlY3RUYWcgPSBzb3VyY2UuZWZmZWN0VGFnO1xuICB0YXJnZXQubmV4dEVmZmVjdCA9IHNvdXJjZS5uZXh0RWZmZWN0O1xuICB0YXJnZXQuZmlyc3RFZmZlY3QgPSBzb3VyY2UuZmlyc3RFZmZlY3Q7XG4gIHRhcmdldC5sYXN0RWZmZWN0ID0gc291cmNlLmxhc3RFZmZlY3Q7XG4gIHRhcmdldC5leHBpcmF0aW9uVGltZSA9IHNvdXJjZS5leHBpcmF0aW9uVGltZTtcbiAgdGFyZ2V0LmNoaWxkRXhwaXJhdGlvblRpbWUgPSBzb3VyY2UuY2hpbGRFeHBpcmF0aW9uVGltZTtcbiAgdGFyZ2V0LmFsdGVybmF0ZSA9IHNvdXJjZS5hbHRlcm5hdGU7XG4gIGlmIChlbmFibGVQcm9maWxlclRpbWVyKSB7XG4gICAgdGFyZ2V0LmFjdHVhbER1cmF0aW9uID0gc291cmNlLmFjdHVhbER1cmF0aW9uO1xuICAgIHRhcmdldC5hY3R1YWxTdGFydFRpbWUgPSBzb3VyY2UuYWN0dWFsU3RhcnRUaW1lO1xuICAgIHRhcmdldC5zZWxmQmFzZUR1cmF0aW9uID0gc291cmNlLnNlbGZCYXNlRHVyYXRpb247XG4gICAgdGFyZ2V0LnRyZWVCYXNlRHVyYXRpb24gPSBzb3VyY2UudHJlZUJhc2VEdXJhdGlvbjtcbiAgfVxuICB0YXJnZXQuX2RlYnVnSUQgPSBzb3VyY2UuX2RlYnVnSUQ7XG4gIHRhcmdldC5fZGVidWdTb3VyY2UgPSBzb3VyY2UuX2RlYnVnU291cmNlO1xuICB0YXJnZXQuX2RlYnVnT3duZXIgPSBzb3VyY2UuX2RlYnVnT3duZXI7XG4gIHRhcmdldC5fZGVidWdJc0N1cnJlbnRseVRpbWluZyA9IHNvdXJjZS5fZGVidWdJc0N1cnJlbnRseVRpbWluZztcbiAgdGFyZ2V0Ll9kZWJ1Z0hvb2tUeXBlcyA9IHNvdXJjZS5fZGVidWdIb29rVHlwZXM7XG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbi8vIFRPRE86IFRoaXMgc2hvdWxkIGJlIGxpZnRlZCBpbnRvIHRoZSByZW5kZXJlci5cblxuXG4vLyBUaGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgYXJlIG9ubHkgdXNlZCBieSBpbnRlcmFjdGlvbiB0cmFjaW5nIGJ1aWxkcy5cbi8vIFRoZXkgZW5hYmxlIGludGVyYWN0aW9ucyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlaXIgYXN5bmMgd29yayxcbi8vIEFuZCBleHBvc2UgaW50ZXJhY3Rpb24gbWV0YWRhdGEgdG8gdGhlIFJlYWN0IERldlRvb2xzIFByb2ZpbGVyIHBsdWdpbi5cbi8vIE5vdGUgdGhhdCB0aGVzZSBhdHRyaWJ1dGVzIGFyZSBvbmx5IGRlZmluZWQgd2hlbiB0aGUgZW5hYmxlU2NoZWR1bGVyVHJhY2luZyBmbGFnIGlzIGVuYWJsZWQuXG5cblxuLy8gRXhwb3J0ZWQgRmliZXJSb290IHR5cGUgaW5jbHVkZXMgYWxsIHByb3BlcnRpZXMsXG4vLyBUbyBhdm9pZCByZXF1aXJpbmcgcG90ZW50aWFsbHkgZXJyb3ItcHJvbmUgOmFueSBjYXN0cyB0aHJvdWdob3V0IHRoZSBwcm9qZWN0LlxuLy8gUHJvZmlsaW5nIHByb3BlcnRpZXMgYXJlIG9ubHkgc2FmZSB0byBhY2Nlc3MgaW4gcHJvZmlsaW5nIGJ1aWxkcyAod2hlbiBlbmFibGVTY2hlZHVsZXJUcmFjaW5nIGlzIHRydWUpLlxuLy8gVGhlIHR5cGVzIGFyZSBkZWZpbmVkIHNlcGFyYXRlbHkgd2l0aGluIHRoaXMgZmlsZSB0byBlbnN1cmUgdGhleSBzdGF5IGluIHN5bmMuXG4vLyAoV2UgZG9uJ3QgaGF2ZSB0byB1c2UgYW4gaW5saW5lIDphbnkgY2FzdCB3aGVuIGVuYWJsZVNjaGVkdWxlclRyYWNpbmcgaXMgZGlzYWJsZWQuKVxuXG5cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyUm9vdChjb250YWluZXJJbmZvLCBpc0NvbmN1cnJlbnQsIGh5ZHJhdGUpIHtcbiAgLy8gQ3ljbGljIGNvbnN0cnVjdGlvbi4gVGhpcyBjaGVhdHMgdGhlIHR5cGUgc3lzdGVtIHJpZ2h0IG5vdyBiZWNhdXNlXG4gIC8vIHN0YXRlTm9kZSBpcyBhbnkuXG4gIHZhciB1bmluaXRpYWxpemVkRmliZXIgPSBjcmVhdGVIb3N0Um9vdEZpYmVyKGlzQ29uY3VycmVudCk7XG5cbiAgdmFyIHJvb3QgPSB2b2lkIDA7XG4gIGlmIChlbmFibGVTY2hlZHVsZXJUcmFjaW5nKSB7XG4gICAgcm9vdCA9IHtcbiAgICAgIGN1cnJlbnQ6IHVuaW5pdGlhbGl6ZWRGaWJlcixcbiAgICAgIGNvbnRhaW5lckluZm86IGNvbnRhaW5lckluZm8sXG4gICAgICBwZW5kaW5nQ2hpbGRyZW46IG51bGwsXG5cbiAgICAgIGVhcmxpZXN0UGVuZGluZ1RpbWU6IE5vV29yayxcbiAgICAgIGxhdGVzdFBlbmRpbmdUaW1lOiBOb1dvcmssXG4gICAgICBlYXJsaWVzdFN1c3BlbmRlZFRpbWU6IE5vV29yayxcbiAgICAgIGxhdGVzdFN1c3BlbmRlZFRpbWU6IE5vV29yayxcbiAgICAgIGxhdGVzdFBpbmdlZFRpbWU6IE5vV29yayxcblxuICAgICAgcGluZ0NhY2hlOiBudWxsLFxuXG4gICAgICBkaWRFcnJvcjogZmFsc2UsXG5cbiAgICAgIHBlbmRpbmdDb21taXRFeHBpcmF0aW9uVGltZTogTm9Xb3JrLFxuICAgICAgZmluaXNoZWRXb3JrOiBudWxsLFxuICAgICAgdGltZW91dEhhbmRsZTogbm9UaW1lb3V0LFxuICAgICAgY29udGV4dDogbnVsbCxcbiAgICAgIHBlbmRpbmdDb250ZXh0OiBudWxsLFxuICAgICAgaHlkcmF0ZTogaHlkcmF0ZSxcbiAgICAgIG5leHRFeHBpcmF0aW9uVGltZVRvV29ya09uOiBOb1dvcmssXG4gICAgICBleHBpcmF0aW9uVGltZTogTm9Xb3JrLFxuICAgICAgZmlyc3RCYXRjaDogbnVsbCxcbiAgICAgIG5leHRTY2hlZHVsZWRSb290OiBudWxsLFxuXG4gICAgICBpbnRlcmFjdGlvblRocmVhZElEOiB0cmFjaW5nLnVuc3RhYmxlX2dldFRocmVhZElEKCksXG4gICAgICBtZW1vaXplZEludGVyYWN0aW9uczogbmV3IFNldCgpLFxuICAgICAgcGVuZGluZ0ludGVyYWN0aW9uTWFwOiBuZXcgTWFwKClcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJvb3QgPSB7XG4gICAgICBjdXJyZW50OiB1bmluaXRpYWxpemVkRmliZXIsXG4gICAgICBjb250YWluZXJJbmZvOiBjb250YWluZXJJbmZvLFxuICAgICAgcGVuZGluZ0NoaWxkcmVuOiBudWxsLFxuXG4gICAgICBwaW5nQ2FjaGU6IG51bGwsXG5cbiAgICAgIGVhcmxpZXN0UGVuZGluZ1RpbWU6IE5vV29yayxcbiAgICAgIGxhdGVzdFBlbmRpbmdUaW1lOiBOb1dvcmssXG4gICAgICBlYXJsaWVzdFN1c3BlbmRlZFRpbWU6IE5vV29yayxcbiAgICAgIGxhdGVzdFN1c3BlbmRlZFRpbWU6IE5vV29yayxcbiAgICAgIGxhdGVzdFBpbmdlZFRpbWU6IE5vV29yayxcblxuICAgICAgZGlkRXJyb3I6IGZhbHNlLFxuXG4gICAgICBwZW5kaW5nQ29tbWl0RXhwaXJhdGlvblRpbWU6IE5vV29yayxcbiAgICAgIGZpbmlzaGVkV29yazogbnVsbCxcbiAgICAgIHRpbWVvdXRIYW5kbGU6IG5vVGltZW91dCxcbiAgICAgIGNvbnRleHQ6IG51bGwsXG4gICAgICBwZW5kaW5nQ29udGV4dDogbnVsbCxcbiAgICAgIGh5ZHJhdGU6IGh5ZHJhdGUsXG4gICAgICBuZXh0RXhwaXJhdGlvblRpbWVUb1dvcmtPbjogTm9Xb3JrLFxuICAgICAgZXhwaXJhdGlvblRpbWU6IE5vV29yayxcbiAgICAgIGZpcnN0QmF0Y2g6IG51bGwsXG4gICAgICBuZXh0U2NoZWR1bGVkUm9vdDogbnVsbFxuICAgIH07XG4gIH1cblxuICB1bmluaXRpYWxpemVkRmliZXIuc3RhdGVOb2RlID0gcm9vdDtcblxuICAvLyBUaGUgcmVhc29uIGZvciB0aGUgd2F5IHRoZSBGbG93IHR5cGVzIGFyZSBzdHJ1Y3R1cmVkIGluIHRoaXMgZmlsZSxcbiAgLy8gSXMgdG8gYXZvaWQgbmVlZGluZyA6YW55IGNhc3RzIGV2ZXJ5d2hlcmUgaW50ZXJhY3Rpb24gdHJhY2luZyBmaWVsZHMgYXJlIHVzZWQuXG4gIC8vIFVuZm9ydHVuYXRlbHkgdGhhdCByZXF1aXJlcyBhbiA6YW55IGNhc3QgZm9yIG5vbi1pbnRlcmFjdGlvbiB0cmFjaW5nIGNhcGFibGUgYnVpbGRzLlxuICAvLyAkRmxvd0ZpeE1lIFJlbW92ZSB0aGlzIDphbnkgY2FzdCBhbmQgcmVwbGFjZSBpdCB3aXRoIHNvbWV0aGluZyBiZXR0ZXIuXG4gIHJldHVybiByb290O1xufVxuXG4vKipcbiAqIEZvcmtlZCBmcm9tIGZianMvd2FybmluZzpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mYmpzL2Jsb2IvZTY2YmEyMGFkNWJlNDMzZWI1NDQyM2YyYjA5N2Q4MjkzMjRkOWRlNi9wYWNrYWdlcy9mYmpzL3NyYy9fX2ZvcmtzX18vd2FybmluZy5qc1xuICpcbiAqIE9ubHkgY2hhbmdlIGlzIHdlIHVzZSBjb25zb2xlLndhcm4gaW5zdGVhZCBvZiBjb25zb2xlLmVycm9yLFxuICogYW5kIGRvIG5vdGhpbmcgd2hlbiAnY29uc29sZScgaXMgbm90IHN1cHBvcnRlZC5cbiAqIFRoaXMgcmVhbGx5IHNpbXBsaWZpZXMgdGhlIGNvZGUuXG4gKiAtLS1cbiAqIFNpbWlsYXIgdG8gaW52YXJpYW50IGJ1dCBvbmx5IGxvZ3MgYSB3YXJuaW5nIGlmIHRoZSBjb25kaXRpb24gaXMgbm90IG1ldC5cbiAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gbG9nIGlzc3VlcyBpbiBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMgaW4gY3JpdGljYWxcbiAqIHBhdGhzLiBSZW1vdmluZyB0aGUgbG9nZ2luZyBjb2RlIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50cyB3aWxsIGtlZXAgdGhlXG4gKiBzYW1lIGxvZ2ljIGFuZCBmb2xsb3cgdGhlIHNhbWUgY29kZSBwYXRocy5cbiAqL1xuXG52YXIgbG93UHJpb3JpdHlXYXJuaW5nID0gZnVuY3Rpb24gKCkge307XG5cbntcbiAgdmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBhcmdJbmRleCA9IDA7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gYXJnc1thcmdJbmRleCsrXTtcbiAgICB9KTtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKHgpIHt9XG4gIH07XG5cbiAgbG93UHJpb3JpdHlXYXJuaW5nID0gZnVuY3Rpb24gKGNvbmRpdGlvbiwgZm9ybWF0KSB7XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Bsb3dQcmlvcml0eVdhcm5pbmcoY29uZGl0aW9uLCBmb3JtYXQsIC4uLmFyZ3MpYCByZXF1aXJlcyBhIHdhcm5pbmcgJyArICdtZXNzYWdlIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuMiA+IDIgPyBfbGVuMiAtIDIgOiAwKSwgX2tleTIgPSAyOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTIgLSAyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICB9XG5cbiAgICAgIHByaW50V2FybmluZy5hcHBseSh1bmRlZmluZWQsIFtmb3JtYXRdLmNvbmNhdChhcmdzKSk7XG4gICAgfVxuICB9O1xufVxuXG52YXIgbG93UHJpb3JpdHlXYXJuaW5nJDEgPSBsb3dQcmlvcml0eVdhcm5pbmc7XG5cbnZhciBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncyA9IHtcbiAgZGlzY2FyZFBlbmRpbmdXYXJuaW5nczogZnVuY3Rpb24gKCkge30sXG4gIGZsdXNoUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZ3M6IGZ1bmN0aW9uICgpIHt9LFxuICBmbHVzaFBlbmRpbmdVbnNhZmVMaWZlY3ljbGVXYXJuaW5nczogZnVuY3Rpb24gKCkge30sXG4gIHJlY29yZERlcHJlY2F0aW9uV2FybmluZ3M6IGZ1bmN0aW9uIChmaWJlciwgaW5zdGFuY2UpIHt9LFxuICByZWNvcmRVbnNhZmVMaWZlY3ljbGVXYXJuaW5nczogZnVuY3Rpb24gKGZpYmVyLCBpbnN0YW5jZSkge30sXG4gIHJlY29yZExlZ2FjeUNvbnRleHRXYXJuaW5nOiBmdW5jdGlvbiAoZmliZXIsIGluc3RhbmNlKSB7fSxcbiAgZmx1c2hMZWdhY3lDb250ZXh0V2FybmluZzogZnVuY3Rpb24gKCkge31cbn07XG5cbntcbiAgdmFyIExJRkVDWUNMRV9TVUdHRVNUSU9OUyA9IHtcbiAgICBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50OiAnY29tcG9uZW50RGlkTW91bnQnLFxuICAgIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzOiAnc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcycsXG4gICAgVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGU6ICdjb21wb25lbnREaWRVcGRhdGUnXG4gIH07XG5cbiAgdmFyIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ1Vuc2FmZUxpZmVjeWNsZVdhcm5pbmdzID0gbmV3IE1hcCgpO1xuICB2YXIgcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nID0gbmV3IE1hcCgpO1xuXG4gIC8vIFRyYWNrcyBjb21wb25lbnRzIHdlIGhhdmUgYWxyZWFkeSB3YXJuZWQgYWJvdXQuXG4gIHZhciBkaWRXYXJuQWJvdXREZXByZWNhdGVkTGlmZWN5Y2xlcyA9IG5ldyBTZXQoKTtcbiAgdmFyIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMgPSBuZXcgU2V0KCk7XG4gIHZhciBkaWRXYXJuQWJvdXRMZWdhY3lDb250ZXh0ID0gbmV3IFNldCgpO1xuXG4gIHZhciBzZXRUb1NvcnRlZFN0cmluZyA9IGZ1bmN0aW9uIChzZXQpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICBzZXQuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGFycmF5LnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiBhcnJheS5zb3J0KCkuam9pbignLCAnKTtcbiAgfTtcblxuICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5kaXNjYXJkUGVuZGluZ1dhcm5pbmdzID0gZnVuY3Rpb24gKCkge1xuICAgIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICAgIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ1Vuc2FmZUxpZmVjeWNsZVdhcm5pbmdzID0gbmV3IE1hcCgpO1xuICAgIHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZyA9IG5ldyBNYXAoKTtcbiAgfTtcblxuICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5mbHVzaFBlbmRpbmdVbnNhZmVMaWZlY3ljbGVXYXJuaW5ncyA9IGZ1bmN0aW9uICgpIHtcbiAgICBwZW5kaW5nVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAobGlmZWN5Y2xlV2FybmluZ3NNYXAsIHN0cmljdFJvb3QpIHtcbiAgICAgIHZhciBsaWZlY3ljbGVzV2FybmluZ01lc3NhZ2VzID0gW107XG5cbiAgICAgIE9iamVjdC5rZXlzKGxpZmVjeWNsZVdhcm5pbmdzTWFwKS5mb3JFYWNoKGZ1bmN0aW9uIChsaWZlY3ljbGUpIHtcbiAgICAgICAgdmFyIGxpZmVjeWNsZVdhcm5pbmdzID0gbGlmZWN5Y2xlV2FybmluZ3NNYXBbbGlmZWN5Y2xlXTtcbiAgICAgICAgaWYgKGxpZmVjeWNsZVdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB2YXIgY29tcG9uZW50TmFtZXMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgbGlmZWN5Y2xlV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudE5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdmFyIGZvcm1hdHRlZCA9IGxpZmVjeWNsZS5yZXBsYWNlKCdVTlNBRkVfJywgJycpO1xuICAgICAgICAgIHZhciBzdWdnZXN0aW9uID0gTElGRUNZQ0xFX1NVR0dFU1RJT05TW2xpZmVjeWNsZV07XG4gICAgICAgICAgdmFyIHNvcnRlZENvbXBvbmVudE5hbWVzID0gc2V0VG9Tb3J0ZWRTdHJpbmcoY29tcG9uZW50TmFtZXMpO1xuXG4gICAgICAgICAgbGlmZWN5Y2xlc1dhcm5pbmdNZXNzYWdlcy5wdXNoKGZvcm1hdHRlZCArICc6IFBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzIHRvIHVzZSAnICsgKHN1Z2dlc3Rpb24gKyAnIGluc3RlYWQ6ICcgKyBzb3J0ZWRDb21wb25lbnROYW1lcykpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKGxpZmVjeWNsZXNXYXJuaW5nTWVzc2FnZXMubGVuZ3RoID4gMCkge1xuICAgICAgICB2YXIgc3RyaWN0Um9vdENvbXBvbmVudFN0YWNrID0gZ2V0U3RhY2tCeUZpYmVySW5EZXZBbmRQcm9kKHN0cmljdFJvb3QpO1xuXG4gICAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ1Vuc2FmZSBsaWZlY3ljbGUgbWV0aG9kcyB3ZXJlIGZvdW5kIHdpdGhpbiBhIHN0cmljdC1tb2RlIHRyZWU6JXMnICsgJ1xcblxcbiVzJyArICdcXG5cXG5MZWFybiBtb3JlIGFib3V0IHRoaXMgd2FybmluZyBoZXJlOicgKyAnXFxuaHR0cHM6Ly9mYi5tZS9yZWFjdC1zdHJpY3QtbW9kZS13YXJuaW5ncycsIHN0cmljdFJvb3RDb21wb25lbnRTdGFjaywgbGlmZWN5Y2xlc1dhcm5pbmdNZXNzYWdlcy5qb2luKCdcXG5cXG4nKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBwZW5kaW5nVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MgPSBuZXcgTWFwKCk7XG4gIH07XG5cbiAgdmFyIGZpbmRTdHJpY3RSb290ID0gZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgdmFyIG1heWJlU3RyaWN0Um9vdCA9IG51bGw7XG5cbiAgICB2YXIgbm9kZSA9IGZpYmVyO1xuICAgIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICBtYXliZVN0cmljdFJvb3QgPSBub2RlO1xuICAgICAgfVxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBtYXliZVN0cmljdFJvb3Q7XG4gIH07XG5cbiAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5ncyA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAocGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciB1bmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICB1bmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dERlcHJlY2F0ZWRMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgc29ydGVkTmFtZXMgPSBzZXRUb1NvcnRlZFN0cmluZyh1bmlxdWVOYW1lcyk7XG5cbiAgICAgIGxvd1ByaW9yaXR5V2FybmluZyQxKGZhbHNlLCAnY29tcG9uZW50V2lsbE1vdW50IGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uLiAnICsgJ1VzZSBjb21wb25lbnREaWRNb3VudCBpbnN0ZWFkLiBBcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kLCAnICsgJ3lvdSBjYW4gcmVuYW1lIHRvIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQuJyArICdcXG5cXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnICsgJ1xcblxcbkxlYXJuIG1vcmUgYWJvdXQgdGhpcyB3YXJuaW5nIGhlcmU6JyArICdcXG5odHRwczovL2ZiLm1lL3JlYWN0LWFzeW5jLWNvbXBvbmVudC1saWZlY3ljbGUtaG9va3MnLCBzb3J0ZWROYW1lcyk7XG5cbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICAgIH1cblxuICAgIGlmIChwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciBfdW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIF91bmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dERlcHJlY2F0ZWRMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgX3NvcnRlZE5hbWVzID0gc2V0VG9Tb3J0ZWRTdHJpbmcoX3VuaXF1ZU5hbWVzKTtcblxuICAgICAgbG93UHJpb3JpdHlXYXJuaW5nJDEoZmFsc2UsICdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uLiAnICsgJ1VzZSBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIGluc3RlYWQuJyArICdcXG5cXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnICsgJ1xcblxcbkxlYXJuIG1vcmUgYWJvdXQgdGhpcyB3YXJuaW5nIGhlcmU6JyArICdcXG5odHRwczovL2ZiLm1lL3JlYWN0LWFzeW5jLWNvbXBvbmVudC1saWZlY3ljbGUtaG9va3MnLCBfc29ydGVkTmFtZXMpO1xuXG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gICAgfVxuXG4gICAgaWYgKHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgdmFyIF91bmlxdWVOYW1lczIgPSBuZXcgU2V0KCk7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIF91bmlxdWVOYW1lczIuYWRkKGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXREZXByZWNhdGVkTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICB9KTtcblxuICAgICAgdmFyIF9zb3J0ZWROYW1lczIgPSBzZXRUb1NvcnRlZFN0cmluZyhfdW5pcXVlTmFtZXMyKTtcblxuICAgICAgbG93UHJpb3JpdHlXYXJuaW5nJDEoZmFsc2UsICdjb21wb25lbnRXaWxsVXBkYXRlIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uLiAnICsgJ1VzZSBjb21wb25lbnREaWRVcGRhdGUgaW5zdGVhZC4gQXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCwgJyArICd5b3UgY2FuIHJlbmFtZSB0byBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZS4nICsgJ1xcblxcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycgKyAnXFxuXFxuTGVhcm4gbW9yZSBhYm91dCB0aGlzIHdhcm5pbmcgaGVyZTonICsgJ1xcbmh0dHBzOi8vZmIubWUvcmVhY3QtYXN5bmMtY29tcG9uZW50LWxpZmVjeWNsZS1ob29rcycsIF9zb3J0ZWROYW1lczIpO1xuXG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gICAgfVxuICB9O1xuXG4gIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZERlcHJlY2F0aW9uV2FybmluZ3MgPSBmdW5jdGlvbiAoZmliZXIsIGluc3RhbmNlKSB7XG4gICAgLy8gRGVkdXAgc3RyYXRlZ3k6IFdhcm4gb25jZSBwZXIgY29tcG9uZW50LlxuICAgIGlmIChkaWRXYXJuQWJvdXREZXByZWNhdGVkTGlmZWN5Y2xlcy5oYXMoZmliZXIudHlwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEb24ndCB3YXJuIGFib3V0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cy5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicgJiYgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcy5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicgJiYgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZS5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgIH1cbiAgfTtcblxuICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRVbnNhZmVMaWZlY3ljbGVXYXJuaW5ncyA9IGZ1bmN0aW9uIChmaWJlciwgaW5zdGFuY2UpIHtcbiAgICB2YXIgc3RyaWN0Um9vdCA9IGZpbmRTdHJpY3RSb290KGZpYmVyKTtcbiAgICBpZiAoc3RyaWN0Um9vdCA9PT0gbnVsbCkge1xuICAgICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnRXhwZWN0ZWQgdG8gZmluZCBhIFN0cmljdE1vZGUgY29tcG9uZW50IGluIGEgc3RyaWN0IG1vZGUgdHJlZS4gJyArICdUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIERlZHVwIHN0cmF0ZWd5OiBXYXJuIG9uY2UgcGVyIGNvbXBvbmVudC5cbiAgICAvLyBUaGlzIGlzIGRpZmZpY3VsdCB0byB0cmFjayBhbnkgb3RoZXIgd2F5IHNpbmNlIGNvbXBvbmVudCBuYW1lc1xuICAgIC8vIGFyZSBvZnRlbiB2YWd1ZSBhbmQgYXJlIGxpa2VseSB0byBjb2xsaWRlIGJldHdlZW4gM3JkIHBhcnR5IGxpYnJhcmllcy5cbiAgICAvLyBBbiBleHBhbmQgcHJvcGVydHkgaXMgcHJvYmFibHkgb2theSB0byB1c2UgaGVyZSBzaW5jZSBpdCdzIERFVi1vbmx5LFxuICAgIC8vIGFuZCB3aWxsIG9ubHkgYmUgc2V0IGluIHRoZSBldmVudCBvZiBzZXJpb3VzIHdhcm5pbmdzLlxuICAgIGlmIChkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmhhcyhmaWJlci50eXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB3YXJuaW5nc0ZvclJvb3QgPSB2b2lkIDA7XG4gICAgaWYgKCFwZW5kaW5nVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MuaGFzKHN0cmljdFJvb3QpKSB7XG4gICAgICB3YXJuaW5nc0ZvclJvb3QgPSB7XG4gICAgICAgIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQ6IFtdLFxuICAgICAgICBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wczogW10sXG4gICAgICAgIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlOiBbXVxuICAgICAgfTtcblxuICAgICAgcGVuZGluZ1Vuc2FmZUxpZmVjeWNsZVdhcm5pbmdzLnNldChzdHJpY3RSb290LCB3YXJuaW5nc0ZvclJvb3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICB3YXJuaW5nc0ZvclJvb3QgPSBwZW5kaW5nVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MuZ2V0KHN0cmljdFJvb3QpO1xuICAgIH1cblxuICAgIHZhciB1bnNhZmVMaWZlY3ljbGVzID0gW107XG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicgJiYgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50Ll9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUgfHwgdHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHVuc2FmZUxpZmVjeWNsZXMucHVzaCgnVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCcpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicgJiYgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcy5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlIHx8IHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdW5zYWZlTGlmZWN5Y2xlcy5wdXNoKCdVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcycpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicgJiYgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZS5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlIHx8IHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdW5zYWZlTGlmZWN5Y2xlcy5wdXNoKCdVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZScpO1xuICAgIH1cblxuICAgIGlmICh1bnNhZmVMaWZlY3ljbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHVuc2FmZUxpZmVjeWNsZXMuZm9yRWFjaChmdW5jdGlvbiAobGlmZWN5Y2xlKSB7XG4gICAgICAgIHdhcm5pbmdzRm9yUm9vdFtsaWZlY3ljbGVdLnB1c2goZmliZXIpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZExlZ2FjeUNvbnRleHRXYXJuaW5nID0gZnVuY3Rpb24gKGZpYmVyLCBpbnN0YW5jZSkge1xuICAgIHZhciBzdHJpY3RSb290ID0gZmluZFN0cmljdFJvb3QoZmliZXIpO1xuICAgIGlmIChzdHJpY3RSb290ID09PSBudWxsKSB7XG4gICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdFeHBlY3RlZCB0byBmaW5kIGEgU3RyaWN0TW9kZSBjb21wb25lbnQgaW4gYSBzdHJpY3QgbW9kZSB0cmVlLiAnICsgJ1RoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRGVkdXAgc3RyYXRlZ3k6IFdhcm4gb25jZSBwZXIgY29tcG9uZW50LlxuICAgIGlmIChkaWRXYXJuQWJvdXRMZWdhY3lDb250ZXh0LmhhcyhmaWJlci50eXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB3YXJuaW5nc0ZvclJvb3QgPSBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcuZ2V0KHN0cmljdFJvb3QpO1xuXG4gICAgaWYgKGZpYmVyLnR5cGUuY29udGV4dFR5cGVzICE9IG51bGwgfHwgZmliZXIudHlwZS5jaGlsZENvbnRleHRUeXBlcyAhPSBudWxsIHx8IGluc3RhbmNlICE9PSBudWxsICYmIHR5cGVvZiBpbnN0YW5jZS5nZXRDaGlsZENvbnRleHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICh3YXJuaW5nc0ZvclJvb3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB3YXJuaW5nc0ZvclJvb3QgPSBbXTtcbiAgICAgICAgcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nLnNldChzdHJpY3RSb290LCB3YXJuaW5nc0ZvclJvb3QpO1xuICAgICAgfVxuICAgICAgd2FybmluZ3NGb3JSb290LnB1c2goZmliZXIpO1xuICAgIH1cbiAgfTtcblxuICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5mbHVzaExlZ2FjeUNvbnRleHRXYXJuaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlckFycmF5LCBzdHJpY3RSb290KSB7XG4gICAgICB2YXIgdW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG4gICAgICBmaWJlckFycmF5LmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIHVuaXF1ZU5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgICAgZGlkV2FybkFib3V0TGVnYWN5Q29udGV4dC5hZGQoZmliZXIudHlwZSk7XG4gICAgICB9KTtcblxuICAgICAgdmFyIHNvcnRlZE5hbWVzID0gc2V0VG9Tb3J0ZWRTdHJpbmcodW5pcXVlTmFtZXMpO1xuICAgICAgdmFyIHN0cmljdFJvb3RDb21wb25lbnRTdGFjayA9IGdldFN0YWNrQnlGaWJlckluRGV2QW5kUHJvZChzdHJpY3RSb290KTtcblxuICAgICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnTGVnYWN5IGNvbnRleHQgQVBJIGhhcyBiZWVuIGRldGVjdGVkIHdpdGhpbiBhIHN0cmljdC1tb2RlIHRyZWU6ICVzJyArICdcXG5cXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnICsgJ1xcblxcbkxlYXJuIG1vcmUgYWJvdXQgdGhpcyB3YXJuaW5nIGhlcmU6JyArICdcXG5odHRwczovL2ZiLm1lL3JlYWN0LXN0cmljdC1tb2RlLXdhcm5pbmdzJywgc3RyaWN0Um9vdENvbXBvbmVudFN0YWNrLCBzb3J0ZWROYW1lcyk7XG4gICAgfSk7XG4gIH07XG59XG5cbi8vIFRoaXMgbGV0cyB1cyBob29rIGludG8gRmliZXIgdG8gZGVidWcgd2hhdCBpdCdzIGRvaW5nLlxuLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzgwMzMuXG4vLyBUaGlzIGlzIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLCBub3QgZXZlbiBmb3IgUmVhY3QgRGV2VG9vbHMuXG4vLyBZb3UgbWF5IG9ubHkgaW5qZWN0IGEgZGVidWdUb29sIGlmIHlvdSB3b3JrIG9uIFJlYWN0IEZpYmVyIGl0c2VsZi5cbnZhciBSZWFjdEZpYmVySW5zdHJ1bWVudGF0aW9uID0ge1xuICBkZWJ1Z1Rvb2w6IG51bGxcbn07XG5cbnZhciBSZWFjdEZpYmVySW5zdHJ1bWVudGF0aW9uXzEgPSBSZWFjdEZpYmVySW5zdHJ1bWVudGF0aW9uO1xuXG4vLyBUT0RPOiBPZmZzY3JlZW4gdXBkYXRlcyBzaG91bGQgbmV2ZXIgc3VzcGVuZC4gSG93ZXZlciwgYSBwcm9taXNlIHRoYXRcbi8vIHN1c3BlbmRlZCBpbnNpZGUgYW4gb2Zmc2NyZWVuIHN1YnRyZWUgc2hvdWxkIGJlIGFibGUgdG8gcGluZyBhdCB0aGUgcHJpb3JpdHlcbi8vIG9mIHRoZSBvdXRlciByZW5kZXIuXG5cbmZ1bmN0aW9uIG1hcmtQZW5kaW5nUHJpb3JpdHlMZXZlbChyb290LCBleHBpcmF0aW9uVGltZSkge1xuICAvLyBJZiB0aGVyZSdzIGEgZ2FwIGJldHdlZW4gY29tcGxldGluZyBhIGZhaWxlZCByb290IGFuZCByZXRyeWluZyBpdCxcbiAgLy8gYWRkaXRpb25hbCB1cGRhdGVzIG1heSBiZSBzY2hlZHVsZWQuIENsZWFyIGBkaWRFcnJvcmAsIGluIGNhc2UgdGhlIHVwZGF0ZVxuICAvLyBpcyBzdWZmaWNpZW50IHRvIGZpeCB0aGUgZXJyb3IuXG4gIHJvb3QuZGlkRXJyb3IgPSBmYWxzZTtcblxuICAvLyBVcGRhdGUgdGhlIGxhdGVzdCBhbmQgZWFybGllc3QgcGVuZGluZyB0aW1lc1xuICB2YXIgZWFybGllc3RQZW5kaW5nVGltZSA9IHJvb3QuZWFybGllc3RQZW5kaW5nVGltZTtcbiAgaWYgKGVhcmxpZXN0UGVuZGluZ1RpbWUgPT09IE5vV29yaykge1xuICAgIC8vIE5vIG90aGVyIHBlbmRpbmcgdXBkYXRlcy5cbiAgICByb290LmVhcmxpZXN0UGVuZGluZ1RpbWUgPSByb290LmxhdGVzdFBlbmRpbmdUaW1lID0gZXhwaXJhdGlvblRpbWU7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGVhcmxpZXN0UGVuZGluZ1RpbWUgPCBleHBpcmF0aW9uVGltZSkge1xuICAgICAgLy8gVGhpcyBpcyB0aGUgZWFybGllc3QgcGVuZGluZyB1cGRhdGUuXG4gICAgICByb290LmVhcmxpZXN0UGVuZGluZ1RpbWUgPSBleHBpcmF0aW9uVGltZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGxhdGVzdFBlbmRpbmdUaW1lID0gcm9vdC5sYXRlc3RQZW5kaW5nVGltZTtcbiAgICAgIGlmIChsYXRlc3RQZW5kaW5nVGltZSA+IGV4cGlyYXRpb25UaW1lKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgdGhlIGxhdGVzdCBwZW5kaW5nIHVwZGF0ZVxuICAgICAgICByb290LmxhdGVzdFBlbmRpbmdUaW1lID0gZXhwaXJhdGlvblRpbWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGZpbmROZXh0RXhwaXJhdGlvblRpbWVUb1dvcmtPbihleHBpcmF0aW9uVGltZSwgcm9vdCk7XG59XG5cbmZ1bmN0aW9uIG1hcmtDb21taXR0ZWRQcmlvcml0eUxldmVscyhyb290LCBlYXJsaWVzdFJlbWFpbmluZ1RpbWUpIHtcbiAgcm9vdC5kaWRFcnJvciA9IGZhbHNlO1xuXG4gIGlmIChlYXJsaWVzdFJlbWFpbmluZ1RpbWUgPT09IE5vV29yaykge1xuICAgIC8vIEZhc3QgcGF0aC4gVGhlcmUncyBubyByZW1haW5pbmcgd29yay4gQ2xlYXIgZXZlcnl0aGluZy5cbiAgICByb290LmVhcmxpZXN0UGVuZGluZ1RpbWUgPSBOb1dvcms7XG4gICAgcm9vdC5sYXRlc3RQZW5kaW5nVGltZSA9IE5vV29yaztcbiAgICByb290LmVhcmxpZXN0U3VzcGVuZGVkVGltZSA9IE5vV29yaztcbiAgICByb290LmxhdGVzdFN1c3BlbmRlZFRpbWUgPSBOb1dvcms7XG4gICAgcm9vdC5sYXRlc3RQaW5nZWRUaW1lID0gTm9Xb3JrO1xuICAgIGZpbmROZXh0RXhwaXJhdGlvblRpbWVUb1dvcmtPbihOb1dvcmssIHJvb3QpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChlYXJsaWVzdFJlbWFpbmluZ1RpbWUgPCByb290LmxhdGVzdFBpbmdlZFRpbWUpIHtcbiAgICByb290LmxhdGVzdFBpbmdlZFRpbWUgPSBOb1dvcms7XG4gIH1cblxuICAvLyBMZXQncyBzZWUgaWYgdGhlIHByZXZpb3VzIGxhdGVzdCBrbm93biBwZW5kaW5nIGxldmVsIHdhcyBqdXN0IGZsdXNoZWQuXG4gIHZhciBsYXRlc3RQZW5kaW5nVGltZSA9IHJvb3QubGF0ZXN0UGVuZGluZ1RpbWU7XG4gIGlmIChsYXRlc3RQZW5kaW5nVGltZSAhPT0gTm9Xb3JrKSB7XG4gICAgaWYgKGxhdGVzdFBlbmRpbmdUaW1lID4gZWFybGllc3RSZW1haW5pbmdUaW1lKSB7XG4gICAgICAvLyBXZSd2ZSBmbHVzaGVkIGFsbCB0aGUga25vd24gcGVuZGluZyBsZXZlbHMuXG4gICAgICByb290LmVhcmxpZXN0UGVuZGluZ1RpbWUgPSByb290LmxhdGVzdFBlbmRpbmdUaW1lID0gTm9Xb3JrO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZWFybGllc3RQZW5kaW5nVGltZSA9IHJvb3QuZWFybGllc3RQZW5kaW5nVGltZTtcbiAgICAgIGlmIChlYXJsaWVzdFBlbmRpbmdUaW1lID4gZWFybGllc3RSZW1haW5pbmdUaW1lKSB7XG4gICAgICAgIC8vIFdlJ3ZlIGZsdXNoZWQgdGhlIGVhcmxpZXN0IGtub3duIHBlbmRpbmcgbGV2ZWwuIFNldCB0aGlzIHRvIHRoZVxuICAgICAgICAvLyBsYXRlc3QgcGVuZGluZyB0aW1lLlxuICAgICAgICByb290LmVhcmxpZXN0UGVuZGluZ1RpbWUgPSByb290LmxhdGVzdFBlbmRpbmdUaW1lO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIE5vdyBsZXQncyBoYW5kbGUgdGhlIGVhcmxpZXN0IHJlbWFpbmluZyBsZXZlbCBpbiB0aGUgd2hvbGUgdHJlZS4gV2UgbmVlZCB0b1xuICAvLyBkZWNpZGUgd2hldGhlciB0byB0cmVhdCBpdCBhcyBhIHBlbmRpbmcgbGV2ZWwgb3IgYXMgc3VzcGVuZGVkLiBDaGVja1xuICAvLyBpdCBmYWxscyB3aXRoaW4gdGhlIHJhbmdlIG9mIGtub3duIHN1c3BlbmRlZCBsZXZlbHMuXG5cbiAgdmFyIGVhcmxpZXN0U3VzcGVuZGVkVGltZSA9IHJvb3QuZWFybGllc3RTdXNwZW5kZWRUaW1lO1xuICBpZiAoZWFybGllc3RTdXNwZW5kZWRUaW1lID09PSBOb1dvcmspIHtcbiAgICAvLyBUaGVyZSdzIG5vIHN1c3BlbmRlZCB3b3JrLiBUcmVhdCB0aGUgZWFybGllc3QgcmVtYWluaW5nIGxldmVsIGFzIGFcbiAgICAvLyBwZW5kaW5nIGxldmVsLlxuICAgIG1hcmtQZW5kaW5nUHJpb3JpdHlMZXZlbChyb290LCBlYXJsaWVzdFJlbWFpbmluZ1RpbWUpO1xuICAgIGZpbmROZXh0RXhwaXJhdGlvblRpbWVUb1dvcmtPbihOb1dvcmssIHJvb3QpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBsYXRlc3RTdXNwZW5kZWRUaW1lID0gcm9vdC5sYXRlc3RTdXNwZW5kZWRUaW1lO1xuICBpZiAoZWFybGllc3RSZW1haW5pbmdUaW1lIDwgbGF0ZXN0U3VzcGVuZGVkVGltZSkge1xuICAgIC8vIFRoZSBlYXJsaWVzdCByZW1haW5pbmcgbGV2ZWwgaXMgbGF0ZXIgdGhhbiBhbGwgdGhlIHN1c3BlbmRlZCB3b3JrLiBUaGF0XG4gICAgLy8gbWVhbnMgd2UndmUgZmx1c2hlZCBhbGwgdGhlIHN1c3BlbmRlZCB3b3JrLlxuICAgIHJvb3QuZWFybGllc3RTdXNwZW5kZWRUaW1lID0gTm9Xb3JrO1xuICAgIHJvb3QubGF0ZXN0U3VzcGVuZGVkVGltZSA9IE5vV29yaztcbiAgICByb290LmxhdGVzdFBpbmdlZFRpbWUgPSBOb1dvcms7XG5cbiAgICAvLyBUaGVyZSdzIG5vIHN1c3BlbmRlZCB3b3JrLiBUcmVhdCB0aGUgZWFybGllc3QgcmVtYWluaW5nIGxldmVsIGFzIGFcbiAgICAvLyBwZW5kaW5nIGxldmVsLlxuICAgIG1hcmtQZW5kaW5nUHJpb3JpdHlMZXZlbChyb290LCBlYXJsaWVzdFJlbWFpbmluZ1RpbWUpO1xuICAgIGZpbmROZXh0RXhwaXJhdGlvblRpbWVUb1dvcmtPbihOb1dvcmssIHJvb3QpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChlYXJsaWVzdFJlbWFpbmluZ1RpbWUgPiBlYXJsaWVzdFN1c3BlbmRlZFRpbWUpIHtcbiAgICAvLyBUaGUgZWFybGllc3QgcmVtYWluaW5nIHRpbWUgaXMgZWFybGllciB0aGFuIGFsbCB0aGUgc3VzcGVuZGVkIHdvcmsuXG4gICAgLy8gVHJlYXQgaXQgYXMgYSBwZW5kaW5nIHVwZGF0ZS5cbiAgICBtYXJrUGVuZGluZ1ByaW9yaXR5TGV2ZWwocm9vdCwgZWFybGllc3RSZW1haW5pbmdUaW1lKTtcbiAgICBmaW5kTmV4dEV4cGlyYXRpb25UaW1lVG9Xb3JrT24oTm9Xb3JrLCByb290KTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBUaGUgZWFybGllc3QgcmVtYWluaW5nIHRpbWUgZmFsbHMgd2l0aGluIHRoZSByYW5nZSBvZiBrbm93biBzdXNwZW5kZWRcbiAgLy8gbGV2ZWxzLiBXZSBzaG91bGQgdHJlYXQgdGhpcyBhcyBzdXNwZW5kZWQgd29yay5cbiAgZmluZE5leHRFeHBpcmF0aW9uVGltZVRvV29ya09uKE5vV29yaywgcm9vdCk7XG59XG5cbmZ1bmN0aW9uIGhhc0xvd2VyUHJpb3JpdHlXb3JrKHJvb3QsIGVycm9yZWRFeHBpcmF0aW9uVGltZSkge1xuICB2YXIgbGF0ZXN0UGVuZGluZ1RpbWUgPSByb290LmxhdGVzdFBlbmRpbmdUaW1lO1xuICB2YXIgbGF0ZXN0U3VzcGVuZGVkVGltZSA9IHJvb3QubGF0ZXN0U3VzcGVuZGVkVGltZTtcbiAgdmFyIGxhdGVzdFBpbmdlZFRpbWUgPSByb290LmxhdGVzdFBpbmdlZFRpbWU7XG4gIHJldHVybiBsYXRlc3RQZW5kaW5nVGltZSAhPT0gTm9Xb3JrICYmIGxhdGVzdFBlbmRpbmdUaW1lIDwgZXJyb3JlZEV4cGlyYXRpb25UaW1lIHx8IGxhdGVzdFN1c3BlbmRlZFRpbWUgIT09IE5vV29yayAmJiBsYXRlc3RTdXNwZW5kZWRUaW1lIDwgZXJyb3JlZEV4cGlyYXRpb25UaW1lIHx8IGxhdGVzdFBpbmdlZFRpbWUgIT09IE5vV29yayAmJiBsYXRlc3RQaW5nZWRUaW1lIDwgZXJyb3JlZEV4cGlyYXRpb25UaW1lO1xufVxuXG5mdW5jdGlvbiBpc1ByaW9yaXR5TGV2ZWxTdXNwZW5kZWQocm9vdCwgZXhwaXJhdGlvblRpbWUpIHtcbiAgdmFyIGVhcmxpZXN0U3VzcGVuZGVkVGltZSA9IHJvb3QuZWFybGllc3RTdXNwZW5kZWRUaW1lO1xuICB2YXIgbGF0ZXN0U3VzcGVuZGVkVGltZSA9IHJvb3QubGF0ZXN0U3VzcGVuZGVkVGltZTtcbiAgcmV0dXJuIGVhcmxpZXN0U3VzcGVuZGVkVGltZSAhPT0gTm9Xb3JrICYmIGV4cGlyYXRpb25UaW1lIDw9IGVhcmxpZXN0U3VzcGVuZGVkVGltZSAmJiBleHBpcmF0aW9uVGltZSA+PSBsYXRlc3RTdXNwZW5kZWRUaW1lO1xufVxuXG5mdW5jdGlvbiBtYXJrU3VzcGVuZGVkUHJpb3JpdHlMZXZlbChyb290LCBzdXNwZW5kZWRUaW1lKSB7XG4gIHJvb3QuZGlkRXJyb3IgPSBmYWxzZTtcbiAgY2xlYXJQaW5nKHJvb3QsIHN1c3BlbmRlZFRpbWUpO1xuXG4gIC8vIEZpcnN0LCBjaGVjayB0aGUga25vd24gcGVuZGluZyBsZXZlbHMgYW5kIHVwZGF0ZSB0aGVtIGlmIG5lZWRlZC5cbiAgdmFyIGVhcmxpZXN0UGVuZGluZ1RpbWUgPSByb290LmVhcmxpZXN0UGVuZGluZ1RpbWU7XG4gIHZhciBsYXRlc3RQZW5kaW5nVGltZSA9IHJvb3QubGF0ZXN0UGVuZGluZ1RpbWU7XG4gIGlmIChlYXJsaWVzdFBlbmRpbmdUaW1lID09PSBzdXNwZW5kZWRUaW1lKSB7XG4gICAgaWYgKGxhdGVzdFBlbmRpbmdUaW1lID09PSBzdXNwZW5kZWRUaW1lKSB7XG4gICAgICAvLyBCb3RoIGtub3duIHBlbmRpbmcgbGV2ZWxzIHdlcmUgc3VzcGVuZGVkLiBDbGVhciB0aGVtLlxuICAgICAgcm9vdC5lYXJsaWVzdFBlbmRpbmdUaW1lID0gcm9vdC5sYXRlc3RQZW5kaW5nVGltZSA9IE5vV29yaztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlIGVhcmxpZXN0IHBlbmRpbmcgbGV2ZWwgd2FzIHN1c3BlbmRlZC4gQ2xlYXIgYnkgc2V0dGluZyBpdCB0byB0aGVcbiAgICAgIC8vIGxhdGVzdCBwZW5kaW5nIGxldmVsLlxuICAgICAgcm9vdC5lYXJsaWVzdFBlbmRpbmdUaW1lID0gbGF0ZXN0UGVuZGluZ1RpbWU7XG4gICAgfVxuICB9IGVsc2UgaWYgKGxhdGVzdFBlbmRpbmdUaW1lID09PSBzdXNwZW5kZWRUaW1lKSB7XG4gICAgLy8gVGhlIGxhdGVzdCBwZW5kaW5nIGxldmVsIHdhcyBzdXNwZW5kZWQuIENsZWFyIGJ5IHNldHRpbmcgaXQgdG8gdGhlXG4gICAgLy8gbGF0ZXN0IHBlbmRpbmcgbGV2ZWwuXG4gICAgcm9vdC5sYXRlc3RQZW5kaW5nVGltZSA9IGVhcmxpZXN0UGVuZGluZ1RpbWU7XG4gIH1cblxuICAvLyBGaW5hbGx5LCB1cGRhdGUgdGhlIGtub3duIHN1c3BlbmRlZCBsZXZlbHMuXG4gIHZhciBlYXJsaWVzdFN1c3BlbmRlZFRpbWUgPSByb290LmVhcmxpZXN0U3VzcGVuZGVkVGltZTtcbiAgdmFyIGxhdGVzdFN1c3BlbmRlZFRpbWUgPSByb290LmxhdGVzdFN1c3BlbmRlZFRpbWU7XG4gIGlmIChlYXJsaWVzdFN1c3BlbmRlZFRpbWUgPT09IE5vV29yaykge1xuICAgIC8vIE5vIG90aGVyIHN1c3BlbmRlZCBsZXZlbHMuXG4gICAgcm9vdC5lYXJsaWVzdFN1c3BlbmRlZFRpbWUgPSByb290LmxhdGVzdFN1c3BlbmRlZFRpbWUgPSBzdXNwZW5kZWRUaW1lO1xuICB9IGVsc2Uge1xuICAgIGlmIChlYXJsaWVzdFN1c3BlbmRlZFRpbWUgPCBzdXNwZW5kZWRUaW1lKSB7XG4gICAgICAvLyBUaGlzIGlzIHRoZSBlYXJsaWVzdCBzdXNwZW5kZWQgbGV2ZWwuXG4gICAgICByb290LmVhcmxpZXN0U3VzcGVuZGVkVGltZSA9IHN1c3BlbmRlZFRpbWU7XG4gICAgfSBlbHNlIGlmIChsYXRlc3RTdXNwZW5kZWRUaW1lID4gc3VzcGVuZGVkVGltZSkge1xuICAgICAgLy8gVGhpcyBpcyB0aGUgbGF0ZXN0IHN1c3BlbmRlZCBsZXZlbFxuICAgICAgcm9vdC5sYXRlc3RTdXNwZW5kZWRUaW1lID0gc3VzcGVuZGVkVGltZTtcbiAgICB9XG4gIH1cblxuICBmaW5kTmV4dEV4cGlyYXRpb25UaW1lVG9Xb3JrT24oc3VzcGVuZGVkVGltZSwgcm9vdCk7XG59XG5cbmZ1bmN0aW9uIG1hcmtQaW5nZWRQcmlvcml0eUxldmVsKHJvb3QsIHBpbmdlZFRpbWUpIHtcbiAgcm9vdC5kaWRFcnJvciA9IGZhbHNlO1xuXG4gIC8vIFRPRE86IFdoZW4gd2UgYWRkIGJhY2sgcmVzdW1pbmcsIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBwcm9ncmVzc2VkIHdvcmtcbiAgLy8gaXMgdGhyb3duIG91dCBhbmQgbm90IHJldXNlZCBkdXJpbmcgdGhlIHJlc3RhcnRlZCByZW5kZXIuIE9uZSB3YXkgdG9cbiAgLy8gaW52YWxpZGF0ZSB0aGUgcHJvZ3Jlc3NlZCB3b3JrIGlzIHRvIHJlc3RhcnQgYXQgZXhwaXJhdGlvblRpbWUgKyAxLlxuICB2YXIgbGF0ZXN0UGluZ2VkVGltZSA9IHJvb3QubGF0ZXN0UGluZ2VkVGltZTtcbiAgaWYgKGxhdGVzdFBpbmdlZFRpbWUgPT09IE5vV29yayB8fCBsYXRlc3RQaW5nZWRUaW1lID4gcGluZ2VkVGltZSkge1xuICAgIHJvb3QubGF0ZXN0UGluZ2VkVGltZSA9IHBpbmdlZFRpbWU7XG4gIH1cbiAgZmluZE5leHRFeHBpcmF0aW9uVGltZVRvV29ya09uKHBpbmdlZFRpbWUsIHJvb3QpO1xufVxuXG5mdW5jdGlvbiBjbGVhclBpbmcocm9vdCwgY29tcGxldGVkVGltZSkge1xuICB2YXIgbGF0ZXN0UGluZ2VkVGltZSA9IHJvb3QubGF0ZXN0UGluZ2VkVGltZTtcbiAgaWYgKGxhdGVzdFBpbmdlZFRpbWUgPj0gY29tcGxldGVkVGltZSkge1xuICAgIHJvb3QubGF0ZXN0UGluZ2VkVGltZSA9IE5vV29yaztcbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kRWFybGllc3RPdXRzdGFuZGluZ1ByaW9yaXR5TGV2ZWwocm9vdCwgcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAgdmFyIGVhcmxpZXN0RXhwaXJhdGlvblRpbWUgPSByZW5kZXJFeHBpcmF0aW9uVGltZTtcblxuICB2YXIgZWFybGllc3RQZW5kaW5nVGltZSA9IHJvb3QuZWFybGllc3RQZW5kaW5nVGltZTtcbiAgdmFyIGVhcmxpZXN0U3VzcGVuZGVkVGltZSA9IHJvb3QuZWFybGllc3RTdXNwZW5kZWRUaW1lO1xuICBpZiAoZWFybGllc3RQZW5kaW5nVGltZSA+IGVhcmxpZXN0RXhwaXJhdGlvblRpbWUpIHtcbiAgICBlYXJsaWVzdEV4cGlyYXRpb25UaW1lID0gZWFybGllc3RQZW5kaW5nVGltZTtcbiAgfVxuICBpZiAoZWFybGllc3RTdXNwZW5kZWRUaW1lID4gZWFybGllc3RFeHBpcmF0aW9uVGltZSkge1xuICAgIGVhcmxpZXN0RXhwaXJhdGlvblRpbWUgPSBlYXJsaWVzdFN1c3BlbmRlZFRpbWU7XG4gIH1cbiAgcmV0dXJuIGVhcmxpZXN0RXhwaXJhdGlvblRpbWU7XG59XG5cbmZ1bmN0aW9uIGRpZEV4cGlyZUF0RXhwaXJhdGlvblRpbWUocm9vdCwgY3VycmVudFRpbWUpIHtcbiAgdmFyIGV4cGlyYXRpb25UaW1lID0gcm9vdC5leHBpcmF0aW9uVGltZTtcbiAgaWYgKGV4cGlyYXRpb25UaW1lICE9PSBOb1dvcmsgJiYgY3VycmVudFRpbWUgPD0gZXhwaXJhdGlvblRpbWUpIHtcbiAgICAvLyBUaGUgcm9vdCBoYXMgZXhwaXJlZC4gRmx1c2ggYWxsIHdvcmsgdXAgdG8gdGhlIGN1cnJlbnQgdGltZS5cbiAgICByb290Lm5leHRFeHBpcmF0aW9uVGltZVRvV29ya09uID0gY3VycmVudFRpbWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZE5leHRFeHBpcmF0aW9uVGltZVRvV29ya09uKGNvbXBsZXRlZEV4cGlyYXRpb25UaW1lLCByb290KSB7XG4gIHZhciBlYXJsaWVzdFN1c3BlbmRlZFRpbWUgPSByb290LmVhcmxpZXN0U3VzcGVuZGVkVGltZTtcbiAgdmFyIGxhdGVzdFN1c3BlbmRlZFRpbWUgPSByb290LmxhdGVzdFN1c3BlbmRlZFRpbWU7XG4gIHZhciBlYXJsaWVzdFBlbmRpbmdUaW1lID0gcm9vdC5lYXJsaWVzdFBlbmRpbmdUaW1lO1xuICB2YXIgbGF0ZXN0UGluZ2VkVGltZSA9IHJvb3QubGF0ZXN0UGluZ2VkVGltZTtcblxuICAvLyBXb3JrIG9uIHRoZSBlYXJsaWVzdCBwZW5kaW5nIHRpbWUuIEZhaWxpbmcgdGhhdCwgd29yayBvbiB0aGUgbGF0ZXN0XG4gIC8vIHBpbmdlZCB0aW1lLlxuICB2YXIgbmV4dEV4cGlyYXRpb25UaW1lVG9Xb3JrT24gPSBlYXJsaWVzdFBlbmRpbmdUaW1lICE9PSBOb1dvcmsgPyBlYXJsaWVzdFBlbmRpbmdUaW1lIDogbGF0ZXN0UGluZ2VkVGltZTtcblxuICAvLyBJZiB0aGVyZSBpcyBubyBwZW5kaW5nIG9yIHBpbmdlZCB3b3JrLCBjaGVjayBpZiB0aGVyZSdzIHN1c3BlbmRlZCB3b3JrXG4gIC8vIHRoYXQncyBsb3dlciBwcmlvcml0eSB0aGFuIHdoYXQgd2UganVzdCBjb21wbGV0ZWQuXG4gIGlmIChuZXh0RXhwaXJhdGlvblRpbWVUb1dvcmtPbiA9PT0gTm9Xb3JrICYmIChjb21wbGV0ZWRFeHBpcmF0aW9uVGltZSA9PT0gTm9Xb3JrIHx8IGxhdGVzdFN1c3BlbmRlZFRpbWUgPCBjb21wbGV0ZWRFeHBpcmF0aW9uVGltZSkpIHtcbiAgICAvLyBUaGUgbG93ZXN0IHByaW9yaXR5IHN1c3BlbmRlZCB3b3JrIGlzIHRoZSB3b3JrIG1vc3QgbGlrZWx5IHRvIGJlXG4gICAgLy8gY29tbWl0dGVkIG5leHQuIExldCdzIHN0YXJ0IHJlbmRlcmluZyBpdCBhZ2Fpbiwgc28gdGhhdCBpZiBpdCB0aW1lcyBvdXQsXG4gICAgLy8gaXQncyByZWFkeSB0byBjb21taXQuXG4gICAgbmV4dEV4cGlyYXRpb25UaW1lVG9Xb3JrT24gPSBsYXRlc3RTdXNwZW5kZWRUaW1lO1xuICB9XG5cbiAgdmFyIGV4cGlyYXRpb25UaW1lID0gbmV4dEV4cGlyYXRpb25UaW1lVG9Xb3JrT247XG4gIGlmIChleHBpcmF0aW9uVGltZSAhPT0gTm9Xb3JrICYmIGVhcmxpZXN0U3VzcGVuZGVkVGltZSA+IGV4cGlyYXRpb25UaW1lKSB7XG4gICAgLy8gRXhwaXJlIHVzaW5nIHRoZSBlYXJsaWVzdCBrbm93biBleHBpcmF0aW9uIHRpbWUuXG4gICAgZXhwaXJhdGlvblRpbWUgPSBlYXJsaWVzdFN1c3BlbmRlZFRpbWU7XG4gIH1cblxuICByb290Lm5leHRFeHBpcmF0aW9uVGltZVRvV29ya09uID0gbmV4dEV4cGlyYXRpb25UaW1lVG9Xb3JrT247XG4gIHJvb3QuZXhwaXJhdGlvblRpbWUgPSBleHBpcmF0aW9uVGltZTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZURlZmF1bHRQcm9wcyhDb21wb25lbnQsIGJhc2VQcm9wcykge1xuICBpZiAoQ29tcG9uZW50ICYmIENvbXBvbmVudC5kZWZhdWx0UHJvcHMpIHtcbiAgICAvLyBSZXNvbHZlIGRlZmF1bHQgcHJvcHMuIFRha2VuIGZyb20gUmVhY3RFbGVtZW50XG4gICAgdmFyIHByb3BzID0gX2Fzc2lnbih7fSwgYmFzZVByb3BzKTtcbiAgICB2YXIgZGVmYXVsdFByb3BzID0gQ29tcG9uZW50LmRlZmF1bHRQcm9wcztcbiAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBkZWZhdWx0UHJvcHMpIHtcbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvcHM7XG4gIH1cbiAgcmV0dXJuIGJhc2VQcm9wcztcbn1cblxuZnVuY3Rpb24gcmVhZExhenlDb21wb25lbnRUeXBlKGxhenlDb21wb25lbnQpIHtcbiAgdmFyIHN0YXR1cyA9IGxhenlDb21wb25lbnQuX3N0YXR1cztcbiAgdmFyIHJlc3VsdCA9IGxhenlDb21wb25lbnQuX3Jlc3VsdDtcbiAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICBjYXNlIFJlc29sdmVkOlxuICAgICAge1xuICAgICAgICB2YXIgQ29tcG9uZW50ID0gcmVzdWx0O1xuICAgICAgICByZXR1cm4gQ29tcG9uZW50O1xuICAgICAgfVxuICAgIGNhc2UgUmVqZWN0ZWQ6XG4gICAgICB7XG4gICAgICAgIHZhciBlcnJvciA9IHJlc3VsdDtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgY2FzZSBQZW5kaW5nOlxuICAgICAge1xuICAgICAgICB2YXIgdGhlbmFibGUgPSByZXN1bHQ7XG4gICAgICAgIHRocm93IHRoZW5hYmxlO1xuICAgICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIGxhenlDb21wb25lbnQuX3N0YXR1cyA9IFBlbmRpbmc7XG4gICAgICAgIHZhciBjdG9yID0gbGF6eUNvbXBvbmVudC5fY3RvcjtcbiAgICAgICAgdmFyIF90aGVuYWJsZSA9IGN0b3IoKTtcbiAgICAgICAgX3RoZW5hYmxlLnRoZW4oZnVuY3Rpb24gKG1vZHVsZU9iamVjdCkge1xuICAgICAgICAgIGlmIChsYXp5Q29tcG9uZW50Ll9zdGF0dXMgPT09IFBlbmRpbmcpIHtcbiAgICAgICAgICAgIHZhciBkZWZhdWx0RXhwb3J0ID0gbW9kdWxlT2JqZWN0LmRlZmF1bHQ7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChkZWZhdWx0RXhwb3J0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB3YXJuaW5nJDEoZmFsc2UsICdsYXp5OiBFeHBlY3RlZCB0aGUgcmVzdWx0IG9mIGEgZHluYW1pYyBpbXBvcnQoKSBjYWxsLiAnICsgJ0luc3RlYWQgcmVjZWl2ZWQ6ICVzXFxuXFxuWW91ciBjb2RlIHNob3VsZCBsb29rIGxpa2U6IFxcbiAgJyArIFwiY29uc3QgTXlDb21wb25lbnQgPSBsYXp5KCgpID0+IGltcG9ydCgnLi9NeUNvbXBvbmVudCcpKVwiLCBtb2R1bGVPYmplY3QpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXp5Q29tcG9uZW50Ll9zdGF0dXMgPSBSZXNvbHZlZDtcbiAgICAgICAgICAgIGxhenlDb21wb25lbnQuX3Jlc3VsdCA9IGRlZmF1bHRFeHBvcnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAobGF6eUNvbXBvbmVudC5fc3RhdHVzID09PSBQZW5kaW5nKSB7XG4gICAgICAgICAgICBsYXp5Q29tcG9uZW50Ll9zdGF0dXMgPSBSZWplY3RlZDtcbiAgICAgICAgICAgIGxhenlDb21wb25lbnQuX3Jlc3VsdCA9IGVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEhhbmRsZSBzeW5jaHJvbm91cyB0aGVuYWJsZXMuXG4gICAgICAgIHN3aXRjaCAobGF6eUNvbXBvbmVudC5fc3RhdHVzKSB7XG4gICAgICAgICAgY2FzZSBSZXNvbHZlZDpcbiAgICAgICAgICAgIHJldHVybiBsYXp5Q29tcG9uZW50Ll9yZXN1bHQ7XG4gICAgICAgICAgY2FzZSBSZWplY3RlZDpcbiAgICAgICAgICAgIHRocm93IGxhenlDb21wb25lbnQuX3Jlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBsYXp5Q29tcG9uZW50Ll9yZXN1bHQgPSBfdGhlbmFibGU7XG4gICAgICAgIHRocm93IF90aGVuYWJsZTtcbiAgICAgIH1cbiAgfVxufVxuXG52YXIgZmFrZUludGVybmFsSW5zdGFuY2UgPSB7fTtcbnZhciBpc0FycmF5JDEgPSBBcnJheS5pc0FycmF5O1xuXG4vLyBSZWFjdC5Db21wb25lbnQgdXNlcyBhIHNoYXJlZCBmcm96ZW4gb2JqZWN0IGJ5IGRlZmF1bHQuXG4vLyBXZSdsbCB1c2UgaXQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgd2UgbmVlZCB0byBpbml0aWFsaXplIGxlZ2FjeSByZWZzLlxudmFyIGVtcHR5UmVmc09iamVjdCA9IG5ldyBSZWFjdC5Db21wb25lbnQoKS5yZWZzO1xuXG52YXIgZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50ID0gdm9pZCAwO1xudmFyIGRpZFdhcm5BYm91dFVuaW5pdGlhbGl6ZWRTdGF0ZSA9IHZvaWQgMDtcbnZhciBkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGUgPSB2b2lkIDA7XG52YXIgZGlkV2FybkFib3V0TGVnYWN5TGlmZWN5Y2xlc0FuZERlcml2ZWRTdGF0ZSA9IHZvaWQgMDtcbnZhciBkaWRXYXJuQWJvdXRVbmRlZmluZWREZXJpdmVkU3RhdGUgPSB2b2lkIDA7XG52YXIgd2Fybk9uVW5kZWZpbmVkRGVyaXZlZFN0YXRlID0gdm9pZCAwO1xudmFyIHdhcm5PbkludmFsaWRDYWxsYmFjayQxID0gdm9pZCAwO1xudmFyIGRpZFdhcm5BYm91dERpcmVjdGx5QXNzaWduaW5nUHJvcHNUb1N0YXRlID0gdm9pZCAwO1xudmFyIGRpZFdhcm5BYm91dENvbnRleHRUeXBlQW5kQ29udGV4dFR5cGVzID0gdm9pZCAwO1xudmFyIGRpZFdhcm5BYm91dEludmFsaWRhdGVDb250ZXh0VHlwZSA9IHZvaWQgMDtcblxue1xuICBkaWRXYXJuQWJvdXRTdGF0ZUFzc2lnbm1lbnRGb3JDb21wb25lbnQgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dFVuaW5pdGlhbGl6ZWRTdGF0ZSA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRMZWdhY3lMaWZlY3ljbGVzQW5kRGVyaXZlZFN0YXRlID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXREaXJlY3RseUFzc2lnbmluZ1Byb3BzVG9TdGF0ZSA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZUFuZENvbnRleHRUeXBlcyA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0SW52YWxpZGF0ZUNvbnRleHRUeXBlID0gbmV3IFNldCgpO1xuXG4gIHZhciBkaWRXYXJuT25JbnZhbGlkQ2FsbGJhY2sgPSBuZXcgU2V0KCk7XG5cbiAgd2Fybk9uSW52YWxpZENhbGxiYWNrJDEgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAgICBpZiAoY2FsbGJhY2sgPT09IG51bGwgfHwgdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBrZXkgPSBjYWxsZXJOYW1lICsgJ18nICsgY2FsbGJhY2s7XG4gICAgaWYgKCFkaWRXYXJuT25JbnZhbGlkQ2FsbGJhY2suaGFzKGtleSkpIHtcbiAgICAgIGRpZFdhcm5PbkludmFsaWRDYWxsYmFjay5hZGQoa2V5KTtcbiAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJyVzKC4uLik6IEV4cGVjdGVkIHRoZSBsYXN0IG9wdGlvbmFsIGBjYWxsYmFja2AgYXJndW1lbnQgdG8gYmUgYSAnICsgJ2Z1bmN0aW9uLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy4nLCBjYWxsZXJOYW1lLCBjYWxsYmFjayk7XG4gICAgfVxuICB9O1xuXG4gIHdhcm5PblVuZGVmaW5lZERlcml2ZWRTdGF0ZSA9IGZ1bmN0aW9uICh0eXBlLCBwYXJ0aWFsU3RhdGUpIHtcbiAgICBpZiAocGFydGlhbFN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB8fCAnQ29tcG9uZW50JztcbiAgICAgIGlmICghZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlLmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRVbmRlZmluZWREZXJpdmVkU3RhdGUuYWRkKGNvbXBvbmVudE5hbWUpO1xuICAgICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICclcy5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoKTogQSB2YWxpZCBzdGF0ZSBvYmplY3QgKG9yIG51bGwpIG11c3QgYmUgcmV0dXJuZWQuICcgKyAnWW91IGhhdmUgcmV0dXJuZWQgdW5kZWZpbmVkLicsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvLyBUaGlzIGlzIHNvIGdyb3NzIGJ1dCBpdCdzIGF0IGxlYXN0IG5vbi1jcml0aWNhbCBhbmQgY2FuIGJlIHJlbW92ZWQgaWZcbiAgLy8gaXQgY2F1c2VzIHByb2JsZW1zLiBUaGlzIGlzIG1lYW50IHRvIGdpdmUgYSBuaWNlciBlcnJvciBtZXNzYWdlIGZvclxuICAvLyBSZWFjdERPTTE1LnVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHJlYWN0RE9NMTZDb21wb25lbnQsXG4gIC8vIC4uLikpIHdoaWNoIG90aGVyd2lzZSB0aHJvd3MgYSBcIl9wcm9jZXNzQ2hpbGRDb250ZXh0IGlzIG5vdCBhIGZ1bmN0aW9uXCJcbiAgLy8gZXhjZXB0aW9uLlxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZmFrZUludGVybmFsSW5zdGFuY2UsICdfcHJvY2Vzc0NoaWxkQ29udGV4dCcsIHtcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgaW52YXJpYW50KGZhbHNlLCAnX3Byb2Nlc3NDaGlsZENvbnRleHQgaXMgbm90IGF2YWlsYWJsZSBpbiBSZWFjdCAxNisuIFRoaXMgbGlrZWx5IG1lYW5zIHlvdSBoYXZlIG11bHRpcGxlIGNvcGllcyBvZiBSZWFjdCBhbmQgYXJlIGF0dGVtcHRpbmcgdG8gbmVzdCBhIFJlYWN0IDE1IHRyZWUgaW5zaWRlIGEgUmVhY3QgMTYgdHJlZSB1c2luZyB1bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lciwgd2hpY2ggaXNuXFwndCBzdXBwb3J0ZWQuIFRyeSB0byBtYWtlIHN1cmUgeW91IGhhdmUgb25seSBvbmUgY29weSBvZiBSZWFjdCAoYW5kIGlkZWFsbHksIHN3aXRjaCB0byBSZWFjdERPTS5jcmVhdGVQb3J0YWwpLicpO1xuICAgIH1cbiAgfSk7XG4gIE9iamVjdC5mcmVlemUoZmFrZUludGVybmFsSW5zdGFuY2UpO1xufVxuXG5mdW5jdGlvbiBhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyh3b3JrSW5Qcm9ncmVzcywgY3RvciwgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLCBuZXh0UHJvcHMpIHtcbiAgdmFyIHByZXZTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAge1xuICAgIGlmIChkZWJ1Z1JlbmRlclBoYXNlU2lkZUVmZmVjdHMgfHwgZGVidWdSZW5kZXJQaGFzZVNpZGVFZmZlY3RzRm9yU3RyaWN0TW9kZSAmJiB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgLy8gSW52b2tlIHRoZSBmdW5jdGlvbiBhbiBleHRyYSB0aW1lIHRvIGhlbHAgZGV0ZWN0IHNpZGUtZWZmZWN0cy5cbiAgICAgIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHBhcnRpYWxTdGF0ZSA9IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSk7XG5cbiAge1xuICAgIHdhcm5PblVuZGVmaW5lZERlcml2ZWRTdGF0ZShjdG9yLCBwYXJ0aWFsU3RhdGUpO1xuICB9XG4gIC8vIE1lcmdlIHRoZSBwYXJ0aWFsIHN0YXRlIGFuZCB0aGUgcHJldmlvdXMgc3RhdGUuXG4gIHZhciBtZW1vaXplZFN0YXRlID0gcGFydGlhbFN0YXRlID09PSBudWxsIHx8IHBhcnRpYWxTdGF0ZSA9PT0gdW5kZWZpbmVkID8gcHJldlN0YXRlIDogX2Fzc2lnbih7fSwgcHJldlN0YXRlLCBwYXJ0aWFsU3RhdGUpO1xuICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbWVtb2l6ZWRTdGF0ZTtcblxuICAvLyBPbmNlIHRoZSB1cGRhdGUgcXVldWUgaXMgZW1wdHksIHBlcnNpc3QgdGhlIGRlcml2ZWQgc3RhdGUgb250byB0aGVcbiAgLy8gYmFzZSBzdGF0ZS5cbiAgdmFyIHVwZGF0ZVF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG4gIGlmICh1cGRhdGVRdWV1ZSAhPT0gbnVsbCAmJiB3b3JrSW5Qcm9ncmVzcy5leHBpcmF0aW9uVGltZSA9PT0gTm9Xb3JrKSB7XG4gICAgdXBkYXRlUXVldWUuYmFzZVN0YXRlID0gbWVtb2l6ZWRTdGF0ZTtcbiAgfVxufVxuXG52YXIgY2xhc3NDb21wb25lbnRVcGRhdGVyID0ge1xuICBpc01vdW50ZWQ6IGlzTW91bnRlZCxcbiAgZW5xdWV1ZVNldFN0YXRlOiBmdW5jdGlvbiAoaW5zdCwgcGF5bG9hZCwgY2FsbGJhY2spIHtcbiAgICB2YXIgZmliZXIgPSBnZXQoaW5zdCk7XG4gICAgdmFyIGN1cnJlbnRUaW1lID0gcmVxdWVzdEN1cnJlbnRUaW1lKCk7XG4gICAgdmFyIGV4cGlyYXRpb25UaW1lID0gY29tcHV0ZUV4cGlyYXRpb25Gb3JGaWJlcihjdXJyZW50VGltZSwgZmliZXIpO1xuXG4gICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShleHBpcmF0aW9uVGltZSk7XG4gICAgdXBkYXRlLnBheWxvYWQgPSBwYXlsb2FkO1xuICAgIGlmIChjYWxsYmFjayAhPT0gdW5kZWZpbmVkICYmIGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB7XG4gICAgICAgIHdhcm5PbkludmFsaWRDYWxsYmFjayQxKGNhbGxiYWNrLCAnc2V0U3RhdGUnKTtcbiAgICAgIH1cbiAgICAgIHVwZGF0ZS5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH1cblxuICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgICBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUpO1xuICAgIHNjaGVkdWxlV29yayhmaWJlciwgZXhwaXJhdGlvblRpbWUpO1xuICB9LFxuICBlbnF1ZXVlUmVwbGFjZVN0YXRlOiBmdW5jdGlvbiAoaW5zdCwgcGF5bG9hZCwgY2FsbGJhY2spIHtcbiAgICB2YXIgZmliZXIgPSBnZXQoaW5zdCk7XG4gICAgdmFyIGN1cnJlbnRUaW1lID0gcmVxdWVzdEN1cnJlbnRUaW1lKCk7XG4gICAgdmFyIGV4cGlyYXRpb25UaW1lID0gY29tcHV0ZUV4cGlyYXRpb25Gb3JGaWJlcihjdXJyZW50VGltZSwgZmliZXIpO1xuXG4gICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShleHBpcmF0aW9uVGltZSk7XG4gICAgdXBkYXRlLnRhZyA9IFJlcGxhY2VTdGF0ZTtcbiAgICB1cGRhdGUucGF5bG9hZCA9IHBheWxvYWQ7XG5cbiAgICBpZiAoY2FsbGJhY2sgIT09IHVuZGVmaW5lZCAmJiBjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAge1xuICAgICAgICB3YXJuT25JbnZhbGlkQ2FsbGJhY2skMShjYWxsYmFjaywgJ3JlcGxhY2VTdGF0ZScpO1xuICAgICAgfVxuICAgICAgdXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfVxuXG4gICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICAgIGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSk7XG4gICAgc2NoZWR1bGVXb3JrKGZpYmVyLCBleHBpcmF0aW9uVGltZSk7XG4gIH0sXG4gIGVucXVldWVGb3JjZVVwZGF0ZTogZnVuY3Rpb24gKGluc3QsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGZpYmVyID0gZ2V0KGluc3QpO1xuICAgIHZhciBjdXJyZW50VGltZSA9IHJlcXVlc3RDdXJyZW50VGltZSgpO1xuICAgIHZhciBleHBpcmF0aW9uVGltZSA9IGNvbXB1dGVFeHBpcmF0aW9uRm9yRmliZXIoY3VycmVudFRpbWUsIGZpYmVyKTtcblxuICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoZXhwaXJhdGlvblRpbWUpO1xuICAgIHVwZGF0ZS50YWcgPSBGb3JjZVVwZGF0ZTtcblxuICAgIGlmIChjYWxsYmFjayAhPT0gdW5kZWZpbmVkICYmIGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB7XG4gICAgICAgIHdhcm5PbkludmFsaWRDYWxsYmFjayQxKGNhbGxiYWNrLCAnZm9yY2VVcGRhdGUnKTtcbiAgICAgIH1cbiAgICAgIHVwZGF0ZS5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH1cblxuICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgICBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUpO1xuICAgIHNjaGVkdWxlV29yayhmaWJlciwgZXhwaXJhdGlvblRpbWUpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBjaGVja1Nob3VsZENvbXBvbmVudFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgY3Rvciwgb2xkUHJvcHMsIG5ld1Byb3BzLCBvbGRTdGF0ZSwgbmV3U3RhdGUsIG5leHRDb250ZXh0KSB7XG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgaWYgKHR5cGVvZiBpbnN0YW5jZS5zaG91bGRDb21wb25lbnRVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBzdGFydFBoYXNlVGltZXIod29ya0luUHJvZ3Jlc3MsICdzaG91bGRDb21wb25lbnRVcGRhdGUnKTtcbiAgICB2YXIgc2hvdWxkVXBkYXRlID0gaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5ld1Byb3BzLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpO1xuICAgIHN0b3BQaGFzZVRpbWVyKCk7XG5cbiAgICB7XG4gICAgICAhKHNob3VsZFVwZGF0ZSAhPT0gdW5kZWZpbmVkKSA/IHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJyVzLnNob3VsZENvbXBvbmVudFVwZGF0ZSgpOiBSZXR1cm5lZCB1bmRlZmluZWQgaW5zdGVhZCBvZiBhICcgKyAnYm9vbGVhbiB2YWx1ZS4gTWFrZSBzdXJlIHRvIHJldHVybiB0cnVlIG9yIGZhbHNlLicsIGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0NvbXBvbmVudCcpIDogdm9pZCAwO1xuICAgIH1cblxuICAgIHJldHVybiBzaG91bGRVcGRhdGU7XG4gIH1cblxuICBpZiAoY3Rvci5wcm90b3R5cGUgJiYgY3Rvci5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQpIHtcbiAgICByZXR1cm4gIXNoYWxsb3dFcXVhbChvbGRQcm9wcywgbmV3UHJvcHMpIHx8ICFzaGFsbG93RXF1YWwob2xkU3RhdGUsIG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjaGVja0NsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzKSB7XG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAge1xuICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShjdG9yKSB8fCAnQ29tcG9uZW50JztcbiAgICB2YXIgcmVuZGVyUHJlc2VudCA9IGluc3RhbmNlLnJlbmRlcjtcblxuICAgIGlmICghcmVuZGVyUHJlc2VudCkge1xuICAgICAgaWYgKGN0b3IucHJvdG90eXBlICYmIHR5cGVvZiBjdG9yLnByb3RvdHlwZS5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnJXMoLi4uKTogTm8gYHJlbmRlcmAgbWV0aG9kIGZvdW5kIG9uIHRoZSByZXR1cm5lZCBjb21wb25lbnQgJyArICdpbnN0YW5jZTogZGlkIHlvdSBhY2NpZGVudGFsbHkgcmV0dXJuIGFuIG9iamVjdCBmcm9tIHRoZSBjb25zdHJ1Y3Rvcj8nLCBuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJyVzKC4uLik6IE5vIGByZW5kZXJgIG1ldGhvZCBmb3VuZCBvbiB0aGUgcmV0dXJuZWQgY29tcG9uZW50ICcgKyAnaW5zdGFuY2U6IHlvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gZGVmaW5lIGByZW5kZXJgLicsIG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBub0dldEluaXRpYWxTdGF0ZU9uRVM2ID0gIWluc3RhbmNlLmdldEluaXRpYWxTdGF0ZSB8fCBpbnN0YW5jZS5nZXRJbml0aWFsU3RhdGUuaXNSZWFjdENsYXNzQXBwcm92ZWQgfHwgaW5zdGFuY2Uuc3RhdGU7XG4gICAgIW5vR2V0SW5pdGlhbFN0YXRlT25FUzYgPyB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdnZXRJbml0aWFsU3RhdGUgd2FzIGRlZmluZWQgb24gJXMsIGEgcGxhaW4gSmF2YVNjcmlwdCBjbGFzcy4gJyArICdUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBjbGFzc2VzIGNyZWF0ZWQgdXNpbmcgUmVhY3QuY3JlYXRlQ2xhc3MuICcgKyAnRGlkIHlvdSBtZWFuIHRvIGRlZmluZSBhIHN0YXRlIHByb3BlcnR5IGluc3RlYWQ/JywgbmFtZSkgOiB2b2lkIDA7XG4gICAgdmFyIG5vR2V0RGVmYXVsdFByb3BzT25FUzYgPSAhaW5zdGFuY2UuZ2V0RGVmYXVsdFByb3BzIHx8IGluc3RhbmNlLmdldERlZmF1bHRQcm9wcy5pc1JlYWN0Q2xhc3NBcHByb3ZlZDtcbiAgICAhbm9HZXREZWZhdWx0UHJvcHNPbkVTNiA/IHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ2dldERlZmF1bHRQcm9wcyB3YXMgZGVmaW5lZCBvbiAlcywgYSBwbGFpbiBKYXZhU2NyaXB0IGNsYXNzLiAnICsgJ1RoaXMgaXMgb25seSBzdXBwb3J0ZWQgZm9yIGNsYXNzZXMgY3JlYXRlZCB1c2luZyBSZWFjdC5jcmVhdGVDbGFzcy4gJyArICdVc2UgYSBzdGF0aWMgcHJvcGVydHkgdG8gZGVmaW5lIGRlZmF1bHRQcm9wcyBpbnN0ZWFkLicsIG5hbWUpIDogdm9pZCAwO1xuICAgIHZhciBub0luc3RhbmNlUHJvcFR5cGVzID0gIWluc3RhbmNlLnByb3BUeXBlcztcbiAgICAhbm9JbnN0YW5jZVByb3BUeXBlcyA/IHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ3Byb3BUeXBlcyB3YXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBvbiAlcy4gVXNlIGEgc3RhdGljICcgKyAncHJvcGVydHkgdG8gZGVmaW5lIHByb3BUeXBlcyBpbnN0ZWFkLicsIG5hbWUpIDogdm9pZCAwO1xuICAgIHZhciBub0luc3RhbmNlQ29udGV4dFR5cGUgPSAhaW5zdGFuY2UuY29udGV4dFR5cGU7XG4gICAgIW5vSW5zdGFuY2VDb250ZXh0VHlwZSA/IHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ2NvbnRleHRUeXBlIHdhcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzLiBVc2UgYSBzdGF0aWMgJyArICdwcm9wZXJ0eSB0byBkZWZpbmUgY29udGV4dFR5cGUgaW5zdGVhZC4nLCBuYW1lKSA6IHZvaWQgMDtcbiAgICB2YXIgbm9JbnN0YW5jZUNvbnRleHRUeXBlcyA9ICFpbnN0YW5jZS5jb250ZXh0VHlwZXM7XG4gICAgIW5vSW5zdGFuY2VDb250ZXh0VHlwZXMgPyB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdjb250ZXh0VHlwZXMgd2FzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgcHJvcGVydHkgb24gJXMuIFVzZSBhIHN0YXRpYyAnICsgJ3Byb3BlcnR5IHRvIGRlZmluZSBjb250ZXh0VHlwZXMgaW5zdGVhZC4nLCBuYW1lKSA6IHZvaWQgMDtcblxuICAgIGlmIChjdG9yLmNvbnRleHRUeXBlICYmIGN0b3IuY29udGV4dFR5cGVzICYmICFkaWRXYXJuQWJvdXRDb250ZXh0VHlwZUFuZENvbnRleHRUeXBlcy5oYXMoY3RvcikpIHtcbiAgICAgIGRpZFdhcm5BYm91dENvbnRleHRUeXBlQW5kQ29udGV4dFR5cGVzLmFkZChjdG9yKTtcbiAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJyVzIGRlY2xhcmVzIGJvdGggY29udGV4dFR5cGVzIGFuZCBjb250ZXh0VHlwZSBzdGF0aWMgcHJvcGVydGllcy4gJyArICdUaGUgbGVnYWN5IGNvbnRleHRUeXBlcyBwcm9wZXJ0eSB3aWxsIGJlIGlnbm9yZWQuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgdmFyIG5vQ29tcG9uZW50U2hvdWxkVXBkYXRlID0gdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFNob3VsZFVwZGF0ZSAhPT0gJ2Z1bmN0aW9uJztcbiAgICAhbm9Db21wb25lbnRTaG91bGRVcGRhdGUgPyB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgKyAnY29tcG9uZW50U2hvdWxkVXBkYXRlKCkuIERpZCB5b3UgbWVhbiBzaG91bGRDb21wb25lbnRVcGRhdGUoKT8gJyArICdUaGUgbmFtZSBpcyBwaHJhc2VkIGFzIGEgcXVlc3Rpb24gYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgJyArICdleHBlY3RlZCB0byByZXR1cm4gYSB2YWx1ZS4nLCBuYW1lKSA6IHZvaWQgMDtcbiAgICBpZiAoY3Rvci5wcm90b3R5cGUgJiYgY3Rvci5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQgJiYgdHlwZW9mIGluc3RhbmNlLnNob3VsZENvbXBvbmVudFVwZGF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgc2hvdWxkQ29tcG9uZW50VXBkYXRlKCkuICcgKyAnc2hvdWxkQ29tcG9uZW50VXBkYXRlIHNob3VsZCBub3QgYmUgdXNlZCB3aGVuIGV4dGVuZGluZyBSZWFjdC5QdXJlQ29tcG9uZW50LiAnICsgJ1BsZWFzZSBleHRlbmQgUmVhY3QuQ29tcG9uZW50IGlmIHNob3VsZENvbXBvbmVudFVwZGF0ZSBpcyB1c2VkLicsIGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0EgcHVyZSBjb21wb25lbnQnKTtcbiAgICB9XG4gICAgdmFyIG5vQ29tcG9uZW50RGlkVW5tb3VudCA9IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRVbm1vdW50ICE9PSAnZnVuY3Rpb24nO1xuICAgICFub0NvbXBvbmVudERpZFVubW91bnQgPyB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgKyAnY29tcG9uZW50RGlkVW5tb3VudCgpLiBCdXQgdGhlcmUgaXMgbm8gc3VjaCBsaWZlY3ljbGUgbWV0aG9kLiAnICsgJ0RpZCB5b3UgbWVhbiBjb21wb25lbnRXaWxsVW5tb3VudCgpPycsIG5hbWUpIDogdm9pZCAwO1xuICAgIHZhciBub0NvbXBvbmVudERpZFJlY2VpdmVQcm9wcyA9IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRSZWNlaXZlUHJvcHMgIT09ICdmdW5jdGlvbic7XG4gICAgIW5vQ29tcG9uZW50RGlkUmVjZWl2ZVByb3BzID8gd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ2NvbXBvbmVudERpZFJlY2VpdmVQcm9wcygpLiBCdXQgdGhlcmUgaXMgbm8gc3VjaCBsaWZlY3ljbGUgbWV0aG9kLiAnICsgJ0lmIHlvdSBtZWFudCB0byB1cGRhdGUgdGhlIHN0YXRlIGluIHJlc3BvbnNlIHRvIGNoYW5naW5nIHByb3BzLCAnICsgJ3VzZSBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKCkuIElmIHlvdSBtZWFudCB0byBmZXRjaCBkYXRhIG9yICcgKyAncnVuIHNpZGUtZWZmZWN0cyBvciBtdXRhdGlvbnMgYWZ0ZXIgUmVhY3QgaGFzIHVwZGF0ZWQgdGhlIFVJLCB1c2UgY29tcG9uZW50RGlkVXBkYXRlKCkuJywgbmFtZSkgOiB2b2lkIDA7XG4gICAgdmFyIG5vQ29tcG9uZW50V2lsbFJlY2lldmVQcm9wcyA9IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzICE9PSAnZnVuY3Rpb24nO1xuICAgICFub0NvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMgPyB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgKyAnY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcygpLiBEaWQgeW91IG1lYW4gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpPycsIG5hbWUpIDogdm9pZCAwO1xuICAgIHZhciBub1Vuc2FmZUNvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMgPSB0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMgIT09ICdmdW5jdGlvbic7XG4gICAgIW5vVW5zYWZlQ29tcG9uZW50V2lsbFJlY2lldmVQcm9wcyA/IHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArICdVTlNBRkVfY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcygpLiBEaWQgeW91IG1lYW4gVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKT8nLCBuYW1lKSA6IHZvaWQgMDtcbiAgICB2YXIgaGFzTXV0YXRlZFByb3BzID0gaW5zdGFuY2UucHJvcHMgIT09IG5ld1Byb3BzO1xuICAgICEoaW5zdGFuY2UucHJvcHMgPT09IHVuZGVmaW5lZCB8fCAhaGFzTXV0YXRlZFByb3BzKSA/IHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJyVzKC4uLik6IFdoZW4gY2FsbGluZyBzdXBlcigpIGluIGAlc2AsIG1ha2Ugc3VyZSB0byBwYXNzICcgKyBcInVwIHRoZSBzYW1lIHByb3BzIHRoYXQgeW91ciBjb21wb25lbnQncyBjb25zdHJ1Y3RvciB3YXMgcGFzc2VkLlwiLCBuYW1lLCBuYW1lKSA6IHZvaWQgMDtcbiAgICB2YXIgbm9JbnN0YW5jZURlZmF1bHRQcm9wcyA9ICFpbnN0YW5jZS5kZWZhdWx0UHJvcHM7XG4gICAgIW5vSW5zdGFuY2VEZWZhdWx0UHJvcHMgPyB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdTZXR0aW5nIGRlZmF1bHRQcm9wcyBhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBvbiAlcyBpcyBub3Qgc3VwcG9ydGVkIGFuZCB3aWxsIGJlIGlnbm9yZWQuJyArICcgSW5zdGVhZCwgZGVmaW5lIGRlZmF1bHRQcm9wcyBhcyBhIHN0YXRpYyBwcm9wZXJ0eSBvbiAlcy4nLCBuYW1lLCBuYW1lKSA6IHZvaWQgMDtcblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSAhPT0gJ2Z1bmN0aW9uJyAmJiAhZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlLmhhcyhjdG9yKSkge1xuICAgICAgZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlLmFkZChjdG9yKTtcbiAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJyVzOiBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpIHNob3VsZCBiZSB1c2VkIHdpdGggY29tcG9uZW50RGlkVXBkYXRlKCkuICcgKyAnVGhpcyBjb21wb25lbnQgZGVmaW5lcyBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpIG9ubHkuJywgZ2V0Q29tcG9uZW50TmFtZShjdG9yKSk7XG4gICAgfVxuXG4gICAgdmFyIG5vSW5zdGFuY2VHZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSB0eXBlb2YgaW5zdGFuY2UuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzICE9PSAnZnVuY3Rpb24nO1xuICAgICFub0luc3RhbmNlR2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID8gd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnJXM6IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcygpIGlzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgbWV0aG9kICcgKyAnYW5kIHdpbGwgYmUgaWdub3JlZC4gSW5zdGVhZCwgZGVjbGFyZSBpdCBhcyBhIHN0YXRpYyBtZXRob2QuJywgbmFtZSkgOiB2b2lkIDA7XG4gICAgdmFyIG5vSW5zdGFuY2VHZXREZXJpdmVkU3RhdGVGcm9tQ2F0Y2ggPSB0eXBlb2YgaW5zdGFuY2UuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yICE9PSAnZnVuY3Rpb24nO1xuICAgICFub0luc3RhbmNlR2V0RGVyaXZlZFN0YXRlRnJvbUNhdGNoID8gd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnJXM6IGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcigpIGlzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgbWV0aG9kICcgKyAnYW5kIHdpbGwgYmUgaWdub3JlZC4gSW5zdGVhZCwgZGVjbGFyZSBpdCBhcyBhIHN0YXRpYyBtZXRob2QuJywgbmFtZSkgOiB2b2lkIDA7XG4gICAgdmFyIG5vU3RhdGljR2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPSB0eXBlb2YgY3Rvci5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSAhPT0gJ2Z1bmN0aW9uJztcbiAgICAhbm9TdGF0aWNHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA/IHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJyVzOiBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpIGlzIGRlZmluZWQgYXMgYSBzdGF0aWMgbWV0aG9kICcgKyAnYW5kIHdpbGwgYmUgaWdub3JlZC4gSW5zdGVhZCwgZGVjbGFyZSBpdCBhcyBhbiBpbnN0YW5jZSBtZXRob2QuJywgbmFtZSkgOiB2b2lkIDA7XG4gICAgdmFyIF9zdGF0ZSA9IGluc3RhbmNlLnN0YXRlO1xuICAgIGlmIChfc3RhdGUgJiYgKHR5cGVvZiBfc3RhdGUgIT09ICdvYmplY3QnIHx8IGlzQXJyYXkkMShfc3RhdGUpKSkge1xuICAgICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnJXMuc3RhdGU6IG11c3QgYmUgc2V0IHRvIGFuIG9iamVjdCBvciBudWxsJywgbmFtZSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAhKHR5cGVvZiBjdG9yLmNoaWxkQ29udGV4dFR5cGVzID09PSAnb2JqZWN0JykgPyB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICclcy5nZXRDaGlsZENvbnRleHQoKTogY2hpbGRDb250ZXh0VHlwZXMgbXVzdCBiZSBkZWZpbmVkIGluIG9yZGVyIHRvICcgKyAndXNlIGdldENoaWxkQ29udGV4dCgpLicsIG5hbWUpIDogdm9pZCAwO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhZG9wdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnVwZGF0ZXIgPSBjbGFzc0NvbXBvbmVudFVwZGF0ZXI7XG4gIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGluc3RhbmNlO1xuICAvLyBUaGUgaW5zdGFuY2UgbmVlZHMgYWNjZXNzIHRvIHRoZSBmaWJlciBzbyB0aGF0IGl0IGNhbiBzY2hlZHVsZSB1cGRhdGVzXG4gIHNldChpbnN0YW5jZSwgd29ya0luUHJvZ3Jlc3MpO1xuICB7XG4gICAgaW5zdGFuY2UuX3JlYWN0SW50ZXJuYWxJbnN0YW5jZSA9IGZha2VJbnRlcm5hbEluc3RhbmNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIHByb3BzLCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICB2YXIgaXNMZWdhY3lDb250ZXh0Q29uc3VtZXIgPSBmYWxzZTtcbiAgdmFyIHVubWFza2VkQ29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgdmFyIGNvbnRleHQgPSBudWxsO1xuICB2YXIgY29udGV4dFR5cGUgPSBjdG9yLmNvbnRleHRUeXBlO1xuXG4gIHtcbiAgICBpZiAoJ2NvbnRleHRUeXBlJyBpbiBjdG9yKSB7XG4gICAgICB2YXIgaXNWYWxpZCA9XG4gICAgICAvLyBBbGxvdyBudWxsIGZvciBjb25kaXRpb25hbCBkZWNsYXJhdGlvblxuICAgICAgY29udGV4dFR5cGUgPT09IG51bGwgfHwgY29udGV4dFR5cGUgIT09IHVuZGVmaW5lZCAmJiBjb250ZXh0VHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFICYmIGNvbnRleHRUeXBlLl9jb250ZXh0ID09PSB1bmRlZmluZWQ7IC8vIE5vdCBhIDxDb250ZXh0LkNvbnN1bWVyPlxuXG4gICAgICBpZiAoIWlzVmFsaWQgJiYgIWRpZFdhcm5BYm91dEludmFsaWRhdGVDb250ZXh0VHlwZS5oYXMoY3RvcikpIHtcbiAgICAgICAgZGlkV2FybkFib3V0SW52YWxpZGF0ZUNvbnRleHRUeXBlLmFkZChjdG9yKTtcblxuICAgICAgICB2YXIgYWRkZW5kdW0gPSAnJztcbiAgICAgICAgaWYgKGNvbnRleHRUeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhZGRlbmR1bSA9ICcgSG93ZXZlciwgaXQgaXMgc2V0IHRvIHVuZGVmaW5lZC4gJyArICdUaGlzIGNhbiBiZSBjYXVzZWQgYnkgYSB0eXBvIG9yIGJ5IG1peGluZyB1cCBuYW1lZCBhbmQgZGVmYXVsdCBpbXBvcnRzLiAnICsgJ1RoaXMgY2FuIGFsc28gaGFwcGVuIGR1ZSB0byBhIGNpcmN1bGFyIGRlcGVuZGVuY3ksIHNvICcgKyAndHJ5IG1vdmluZyB0aGUgY3JlYXRlQ29udGV4dCgpIGNhbGwgdG8gYSBzZXBhcmF0ZSBmaWxlLic7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbnRleHRUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGFkZGVuZHVtID0gJyBIb3dldmVyLCBpdCBpcyBzZXQgdG8gYSAnICsgdHlwZW9mIGNvbnRleHRUeXBlICsgJy4nO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHRUeXBlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFKSB7XG4gICAgICAgICAgYWRkZW5kdW0gPSAnIERpZCB5b3UgYWNjaWRlbnRhbGx5IHBhc3MgdGhlIENvbnRleHQuUHJvdmlkZXIgaW5zdGVhZD8nO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHRUeXBlLl9jb250ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyA8Q29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICBhZGRlbmR1bSA9ICcgRGlkIHlvdSBhY2NpZGVudGFsbHkgcGFzcyB0aGUgQ29udGV4dC5Db25zdW1lciBpbnN0ZWFkPyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWRkZW5kdW0gPSAnIEhvd2V2ZXIsIGl0IGlzIHNldCB0byBhbiBvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMoY29udGV4dFR5cGUpLmpvaW4oJywgJykgKyAnfS4nO1xuICAgICAgICB9XG4gICAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJyVzIGRlZmluZXMgYW4gaW52YWxpZCBjb250ZXh0VHlwZS4gJyArICdjb250ZXh0VHlwZSBzaG91bGQgcG9pbnQgdG8gdGhlIENvbnRleHQgb2JqZWN0IHJldHVybmVkIGJ5IFJlYWN0LmNyZWF0ZUNvbnRleHQoKS4lcycsIGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0NvbXBvbmVudCcsIGFkZGVuZHVtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIGNvbnRleHRUeXBlID09PSAnb2JqZWN0JyAmJiBjb250ZXh0VHlwZSAhPT0gbnVsbCkge1xuICAgIGNvbnRleHQgPSByZWFkQ29udGV4dChjb250ZXh0VHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgdW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBjdG9yLCB0cnVlKTtcbiAgICB2YXIgY29udGV4dFR5cGVzID0gY3Rvci5jb250ZXh0VHlwZXM7XG4gICAgaXNMZWdhY3lDb250ZXh0Q29uc3VtZXIgPSBjb250ZXh0VHlwZXMgIT09IG51bGwgJiYgY29udGV4dFR5cGVzICE9PSB1bmRlZmluZWQ7XG4gICAgY29udGV4dCA9IGlzTGVnYWN5Q29udGV4dENvbnN1bWVyID8gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KSA6IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgfVxuXG4gIC8vIEluc3RhbnRpYXRlIHR3aWNlIHRvIGhlbHAgZGV0ZWN0IHNpZGUtZWZmZWN0cy5cbiAge1xuICAgIGlmIChkZWJ1Z1JlbmRlclBoYXNlU2lkZUVmZmVjdHMgfHwgZGVidWdSZW5kZXJQaGFzZVNpZGVFZmZlY3RzRm9yU3RyaWN0TW9kZSAmJiB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgbmV3IGN0b3IocHJvcHMsIGNvbnRleHQpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIH1cbiAgfVxuXG4gIHZhciBpbnN0YW5jZSA9IG5ldyBjdG9yKHByb3BzLCBjb250ZXh0KTtcbiAgdmFyIHN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGluc3RhbmNlLnN0YXRlICE9PSBudWxsICYmIGluc3RhbmNlLnN0YXRlICE9PSB1bmRlZmluZWQgPyBpbnN0YW5jZS5zdGF0ZSA6IG51bGw7XG4gIGFkb3B0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UpO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nICYmIHN0YXRlID09PSBudWxsKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0NvbXBvbmVudCc7XG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFVuaW5pdGlhbGl6ZWRTdGF0ZS5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgZGlkV2FybkFib3V0VW5pbml0aWFsaXplZFN0YXRlLmFkZChjb21wb25lbnROYW1lKTtcbiAgICAgICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnYCVzYCB1c2VzIGBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNgIGJ1dCBpdHMgaW5pdGlhbCBzdGF0ZSBpcyAnICsgJyVzLiBUaGlzIGlzIG5vdCByZWNvbW1lbmRlZC4gSW5zdGVhZCwgZGVmaW5lIHRoZSBpbml0aWFsIHN0YXRlIGJ5ICcgKyAnYXNzaWduaW5nIGFuIG9iamVjdCB0byBgdGhpcy5zdGF0ZWAgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIGAlc2AuICcgKyAnVGhpcyBlbnN1cmVzIHRoYXQgYGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc2AgYXJndW1lbnRzIGhhdmUgYSBjb25zaXN0ZW50IHNoYXBlLicsIGNvbXBvbmVudE5hbWUsIGluc3RhbmNlLnN0YXRlID09PSBudWxsID8gJ251bGwnIDogJ3VuZGVmaW5lZCcsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIG5ldyBjb21wb25lbnQgQVBJcyBhcmUgZGVmaW5lZCwgXCJ1bnNhZmVcIiBsaWZlY3ljbGVzIHdvbid0IGJlIGNhbGxlZC5cbiAgICAvLyBXYXJuIGFib3V0IHRoZXNlIGxpZmVjeWNsZXMgaWYgdGhleSBhcmUgcHJlc2VudC5cbiAgICAvLyBEb24ndCB3YXJuIGFib3V0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgbWV0aG9kcyB0aG91Z2guXG4gICAgaWYgKHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBmb3VuZFdpbGxNb3VudE5hbWUgPSBudWxsO1xuICAgICAgdmFyIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgPSBudWxsO1xuICAgICAgdmFyIGZvdW5kV2lsbFVwZGF0ZU5hbWUgPSBudWxsO1xuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicgJiYgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50Ll9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgICAgZm91bmRXaWxsTW91bnROYW1lID0gJ2NvbXBvbmVudFdpbGxNb3VudCc7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZvdW5kV2lsbE1vdW50TmFtZSA9ICdVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JztcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgICAgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSA9ICdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJztcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgPSAnVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nICYmIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgICBmb3VuZFdpbGxVcGRhdGVOYW1lID0gJ2NvbXBvbmVudFdpbGxVcGRhdGUnO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZm91bmRXaWxsVXBkYXRlTmFtZSA9ICdVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSc7XG4gICAgICB9XG4gICAgICBpZiAoZm91bmRXaWxsTW91bnROYW1lICE9PSBudWxsIHx8IGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgIT09IG51bGwgfHwgZm91bmRXaWxsVXBkYXRlTmFtZSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgX2NvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGN0b3IpIHx8ICdDb21wb25lbnQnO1xuICAgICAgICB2YXIgbmV3QXBpTmFtZSA9IHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJyA/ICdnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoKScgOiAnZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKSc7XG4gICAgICAgIGlmICghZGlkV2FybkFib3V0TGVnYWN5TGlmZWN5Y2xlc0FuZERlcml2ZWRTdGF0ZS5oYXMoX2NvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgICAgZGlkV2FybkFib3V0TGVnYWN5TGlmZWN5Y2xlc0FuZERlcml2ZWRTdGF0ZS5hZGQoX2NvbXBvbmVudE5hbWUpO1xuICAgICAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ1Vuc2FmZSBsZWdhY3kgbGlmZWN5Y2xlcyB3aWxsIG5vdCBiZSBjYWxsZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgbmV3IGNvbXBvbmVudCBBUElzLlxcblxcbicgKyAnJXMgdXNlcyAlcyBidXQgYWxzbyBjb250YWlucyB0aGUgZm9sbG93aW5nIGxlZ2FjeSBsaWZlY3ljbGVzOiVzJXMlc1xcblxcbicgKyAnVGhlIGFib3ZlIGxpZmVjeWNsZXMgc2hvdWxkIGJlIHJlbW92ZWQuIExlYXJuIG1vcmUgYWJvdXQgdGhpcyB3YXJuaW5nIGhlcmU6XFxuJyArICdodHRwczovL2ZiLm1lL3JlYWN0LWFzeW5jLWNvbXBvbmVudC1saWZlY3ljbGUtaG9va3MnLCBfY29tcG9uZW50TmFtZSwgbmV3QXBpTmFtZSwgZm91bmRXaWxsTW91bnROYW1lICE9PSBudWxsID8gJ1xcbiAgJyArIGZvdW5kV2lsbE1vdW50TmFtZSA6ICcnLCBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lICE9PSBudWxsID8gJ1xcbiAgJyArIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgOiAnJywgZm91bmRXaWxsVXBkYXRlTmFtZSAhPT0gbnVsbCA/ICdcXG4gICcgKyBmb3VuZFdpbGxVcGRhdGVOYW1lIDogJycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ2FjaGUgdW5tYXNrZWQgY29udGV4dCBzbyB3ZSBjYW4gYXZvaWQgcmVjcmVhdGluZyBtYXNrZWQgY29udGV4dCB1bmxlc3MgbmVjZXNzYXJ5LlxuICAvLyBSZWFjdEZpYmVyQ29udGV4dCB1c3VhbGx5IHVwZGF0ZXMgdGhpcyBjYWNoZSBidXQgY2FuJ3QgZm9yIG5ld2x5LWNyZWF0ZWQgaW5zdGFuY2VzLlxuICBpZiAoaXNMZWdhY3lDb250ZXh0Q29uc3VtZXIpIHtcbiAgICBjYWNoZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbmZ1bmN0aW9uIGNhbGxDb21wb25lbnRXaWxsTW91bnQod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKSB7XG4gIHN0YXJ0UGhhc2VUaW1lcih3b3JrSW5Qcm9ncmVzcywgJ2NvbXBvbmVudFdpbGxNb3VudCcpO1xuICB2YXIgb2xkU3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTtcblxuICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCgpO1xuICB9XG4gIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKTtcbiAgfVxuXG4gIHN0b3BQaGFzZVRpbWVyKCk7XG5cbiAgaWYgKG9sZFN0YXRlICE9PSBpbnN0YW5jZS5zdGF0ZSkge1xuICAgIHtcbiAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJyVzLmNvbXBvbmVudFdpbGxNb3VudCgpOiBBc3NpZ25pbmcgZGlyZWN0bHkgdG8gdGhpcy5zdGF0ZSBpcyAnICsgXCJkZXByZWNhdGVkIChleGNlcHQgaW5zaWRlIGEgY29tcG9uZW50J3MgXCIgKyAnY29uc3RydWN0b3IpLiBVc2Ugc2V0U3RhdGUgaW5zdGVhZC4nLCBnZXRDb21wb25lbnROYW1lKHdvcmtJblByb2dyZXNzLnR5cGUpIHx8ICdDb21wb25lbnQnKTtcbiAgICB9XG4gICAgY2xhc3NDb21wb25lbnRVcGRhdGVyLmVucXVldWVSZXBsYWNlU3RhdGUoaW5zdGFuY2UsIGluc3RhbmNlLnN0YXRlLCBudWxsKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UsIG5ld1Byb3BzLCBuZXh0Q29udGV4dCkge1xuICB2YXIgb2xkU3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTtcbiAgc3RhcnRQaGFzZVRpbWVyKHdvcmtJblByb2dyZXNzLCAnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcycpO1xuICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5ld1Byb3BzLCBuZXh0Q29udGV4dCk7XG4gIH1cbiAgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5ld1Byb3BzLCBuZXh0Q29udGV4dCk7XG4gIH1cbiAgc3RvcFBoYXNlVGltZXIoKTtcblxuICBpZiAoaW5zdGFuY2Uuc3RhdGUgIT09IG9sZFN0YXRlKSB7XG4gICAge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKHdvcmtJblByb2dyZXNzLnR5cGUpIHx8ICdDb21wb25lbnQnO1xuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRTdGF0ZUFzc2lnbm1lbnRGb3JDb21wb25lbnQuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dFN0YXRlQXNzaWdubWVudEZvckNvbXBvbmVudC5hZGQoY29tcG9uZW50TmFtZSk7XG4gICAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJyVzLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKTogQXNzaWduaW5nIGRpcmVjdGx5IHRvICcgKyBcInRoaXMuc3RhdGUgaXMgZGVwcmVjYXRlZCAoZXhjZXB0IGluc2lkZSBhIGNvbXBvbmVudCdzIFwiICsgJ2NvbnN0cnVjdG9yKS4gVXNlIHNldFN0YXRlIGluc3RlYWQuJywgY29tcG9uZW50TmFtZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNsYXNzQ29tcG9uZW50VXBkYXRlci5lbnF1ZXVlUmVwbGFjZVN0YXRlKGluc3RhbmNlLCBpbnN0YW5jZS5zdGF0ZSwgbnVsbCk7XG4gIH1cbn1cblxuLy8gSW52b2tlcyB0aGUgbW91bnQgbGlmZS1jeWNsZXMgb24gYSBwcmV2aW91c2x5IG5ldmVyIHJlbmRlcmVkIGluc3RhbmNlLlxuZnVuY3Rpb24gbW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBuZXdQcm9wcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAge1xuICAgIGNoZWNrQ2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgY3RvciwgbmV3UHJvcHMpO1xuICB9XG5cbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICBpbnN0YW5jZS5wcm9wcyA9IG5ld1Byb3BzO1xuICBpbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIGluc3RhbmNlLnJlZnMgPSBlbXB0eVJlZnNPYmplY3Q7XG5cbiAgdmFyIGNvbnRleHRUeXBlID0gY3Rvci5jb250ZXh0VHlwZTtcbiAgaWYgKHR5cGVvZiBjb250ZXh0VHlwZSA9PT0gJ29iamVjdCcgJiYgY29udGV4dFR5cGUgIT09IG51bGwpIHtcbiAgICBpbnN0YW5jZS5jb250ZXh0ID0gcmVhZENvbnRleHQoY29udGV4dFR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHZhciB1bm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIGN0b3IsIHRydWUpO1xuICAgIGluc3RhbmNlLmNvbnRleHQgPSBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQpO1xuICB9XG5cbiAge1xuICAgIGlmIChpbnN0YW5jZS5zdGF0ZSA9PT0gbmV3UHJvcHMpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShjdG9yKSB8fCAnQ29tcG9uZW50JztcbiAgICAgIGlmICghZGlkV2FybkFib3V0RGlyZWN0bHlBc3NpZ25pbmdQcm9wc1RvU3RhdGUuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dERpcmVjdGx5QXNzaWduaW5nUHJvcHNUb1N0YXRlLmFkZChjb21wb25lbnROYW1lKTtcbiAgICAgICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnJXM6IEl0IGlzIG5vdCByZWNvbW1lbmRlZCB0byBhc3NpZ24gcHJvcHMgZGlyZWN0bHkgdG8gc3RhdGUgJyArIFwiYmVjYXVzZSB1cGRhdGVzIHRvIHByb3BzIHdvbid0IGJlIHJlZmxlY3RlZCBpbiBzdGF0ZS4gXCIgKyAnSW4gbW9zdCBjYXNlcywgaXQgaXMgYmV0dGVyIHRvIHVzZSBwcm9wcyBkaXJlY3RseS4nLCBjb21wb25lbnROYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZFVuc2FmZUxpZmVjeWNsZVdhcm5pbmdzKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSk7XG5cbiAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZExlZ2FjeUNvbnRleHRXYXJuaW5nKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgaWYgKHdhcm5BYm91dERlcHJlY2F0ZWRMaWZlY3ljbGVzKSB7XG4gICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmREZXByZWNhdGlvbldhcm5pbmdzKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHVwZGF0ZVF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG4gIGlmICh1cGRhdGVRdWV1ZSAhPT0gbnVsbCkge1xuICAgIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgdXBkYXRlUXVldWUsIG5ld1Byb3BzLCBpbnN0YW5jZSwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgIGluc3RhbmNlLnN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgfVxuXG4gIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcbiAgaWYgKHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyh3b3JrSW5Qcm9ncmVzcywgY3RvciwgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLCBuZXdQcm9wcyk7XG4gICAgaW5zdGFuY2Uuc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB9XG5cbiAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG4gIGlmICh0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlICE9PSAnZnVuY3Rpb24nICYmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSkge1xuICAgIGNhbGxDb21wb25lbnRXaWxsTW91bnQod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKTtcbiAgICAvLyBJZiB3ZSBoYWQgYWRkaXRpb25hbCBzdGF0ZSB1cGRhdGVzIGR1cmluZyB0aGlzIGxpZmUtY3ljbGUsIGxldCdzXG4gICAgLy8gcHJvY2VzcyB0aGVtIG5vdy5cbiAgICB1cGRhdGVRdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuICAgIGlmICh1cGRhdGVRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCB1cGRhdGVRdWV1ZSwgbmV3UHJvcHMsIGluc3RhbmNlLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgICBpbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyB8PSBVcGRhdGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzdW1lTW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBuZXdQcm9wcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gIHZhciBvbGRQcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHM7XG4gIGluc3RhbmNlLnByb3BzID0gb2xkUHJvcHM7XG5cbiAgdmFyIG9sZENvbnRleHQgPSBpbnN0YW5jZS5jb250ZXh0O1xuICB2YXIgY29udGV4dFR5cGUgPSBjdG9yLmNvbnRleHRUeXBlO1xuICB2YXIgbmV4dENvbnRleHQgPSB2b2lkIDA7XG4gIGlmICh0eXBlb2YgY29udGV4dFR5cGUgPT09ICdvYmplY3QnICYmIGNvbnRleHRUeXBlICE9PSBudWxsKSB7XG4gICAgbmV4dENvbnRleHQgPSByZWFkQ29udGV4dChjb250ZXh0VHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIG5leHRMZWdhY3lVbm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIGN0b3IsIHRydWUpO1xuICAgIG5leHRDb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgbmV4dExlZ2FjeVVubWFza2VkQ29udGV4dCk7XG4gIH1cblxuICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG4gIHZhciBoYXNOZXdMaWZlY3ljbGVzID0gdHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbic7XG5cbiAgLy8gTm90ZTogRHVyaW5nIHRoZXNlIGxpZmUtY3ljbGVzLCBpbnN0YW5jZS5wcm9wcy9pbnN0YW5jZS5zdGF0ZSBhcmUgd2hhdFxuICAvLyBldmVyIHRoZSBwcmV2aW91c2x5IGF0dGVtcHRlZCB0byByZW5kZXIgLSBub3QgdGhlIFwiY3VycmVudFwiLiBIb3dldmVyLFxuICAvLyBkdXJpbmcgY29tcG9uZW50RGlkVXBkYXRlIHdlIHBhc3MgdGhlIFwiY3VycmVudFwiIHByb3BzLlxuXG4gIC8vIEluIG9yZGVyIHRvIHN1cHBvcnQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBjb21wb25lbnRzLFxuICAvLyBVbnNhZmUgbGlmZWN5Y2xlcyBzaG91bGQgbm90IGJlIGludm9rZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgdGhlIG5ldyBBUElzLlxuICBpZiAoIWhhc05ld0xpZmVjeWNsZXMgJiYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICBpZiAob2xkUHJvcHMgIT09IG5ld1Byb3BzIHx8IG9sZENvbnRleHQgIT09IG5leHRDb250ZXh0KSB7XG4gICAgICBjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UsIG5ld1Byb3BzLCBuZXh0Q29udGV4dCk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRIYXNGb3JjZVVwZGF0ZUJlZm9yZVByb2Nlc3NpbmcoKTtcblxuICB2YXIgb2xkU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB2YXIgbmV3U3RhdGUgPSBpbnN0YW5jZS5zdGF0ZSA9IG9sZFN0YXRlO1xuICB2YXIgdXBkYXRlUXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcbiAgaWYgKHVwZGF0ZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCB1cGRhdGVRdWV1ZSwgbmV3UHJvcHMsIGluc3RhbmNlLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgbmV3U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB9XG4gIGlmIChvbGRQcm9wcyA9PT0gbmV3UHJvcHMgJiYgb2xkU3RhdGUgPT09IG5ld1N0YXRlICYmICFoYXNDb250ZXh0Q2hhbmdlZCgpICYmICFjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nKCkpIHtcbiAgICAvLyBJZiBhbiB1cGRhdGUgd2FzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHdlIHNob3VsZCBzY2hlZHVsZSBhbiBVcGRhdGVcbiAgICAvLyBlZmZlY3QgZXZlbiB0aG91Z2ggd2UncmUgYmFpbGluZyBvdXQsIHNvIHRoYXQgY1dVL2NEVSBhcmUgY2FsbGVkLlxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyB8PSBVcGRhdGU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMod29ya0luUHJvZ3Jlc3MsIGN0b3IsIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcywgbmV3UHJvcHMpO1xuICAgIG5ld1N0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgfVxuXG4gIHZhciBzaG91bGRVcGRhdGUgPSBjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nKCkgfHwgY2hlY2tTaG91bGRDb21wb25lbnRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG9sZFByb3BzLCBuZXdQcm9wcywgb2xkU3RhdGUsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCk7XG5cbiAgaWYgKHNob3VsZFVwZGF0ZSkge1xuICAgIC8vIEluIG9yZGVyIHRvIHN1cHBvcnQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBjb21wb25lbnRzLFxuICAgIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG4gICAgaWYgKCFoYXNOZXdMaWZlY3ljbGVzICYmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgc3RhcnRQaGFzZVRpbWVyKHdvcmtJblByb2dyZXNzLCAnY29tcG9uZW50V2lsbE1vdW50Jyk7XG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCk7XG4gICAgICB9XG4gICAgICBzdG9wUGhhc2VUaW1lcigpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgfD0gVXBkYXRlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJZiBhbiB1cGRhdGUgd2FzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHdlIHNob3VsZCBzY2hlZHVsZSBhbiBVcGRhdGVcbiAgICAvLyBlZmZlY3QgZXZlbiB0aG91Z2ggd2UncmUgYmFpbGluZyBvdXQsIHNvIHRoYXQgY1dVL2NEVSBhcmUgY2FsbGVkLlxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyB8PSBVcGRhdGU7XG4gICAgfVxuXG4gICAgLy8gSWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybmVkIGZhbHNlLCB3ZSBzaG91bGQgc3RpbGwgdXBkYXRlIHRoZVxuICAgIC8vIG1lbW9pemVkIHN0YXRlIHRvIGluZGljYXRlIHRoYXQgdGhpcyB3b3JrIGNhbiBiZSByZXVzZWQuXG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IG5ld1Byb3BzO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgfVxuXG4gIC8vIFVwZGF0ZSB0aGUgZXhpc3RpbmcgaW5zdGFuY2UncyBzdGF0ZSwgcHJvcHMsIGFuZCBjb250ZXh0IHBvaW50ZXJzIGV2ZW5cbiAgLy8gaWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybnMgZmFsc2UuXG4gIGluc3RhbmNlLnByb3BzID0gbmV3UHJvcHM7XG4gIGluc3RhbmNlLnN0YXRlID0gbmV3U3RhdGU7XG4gIGluc3RhbmNlLmNvbnRleHQgPSBuZXh0Q29udGV4dDtcblxuICByZXR1cm4gc2hvdWxkVXBkYXRlO1xufVxuXG4vLyBJbnZva2VzIHRoZSB1cGRhdGUgbGlmZS1jeWNsZXMgYW5kIHJldHVybnMgZmFsc2UgaWYgaXQgc2hvdWxkbid0IHJlcmVuZGVyLlxuZnVuY3Rpb24gdXBkYXRlQ2xhc3NJbnN0YW5jZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgY3RvciwgbmV3UHJvcHMsIHJlbmRlckV4cGlyYXRpb25UaW1lKSB7XG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICB2YXIgb2xkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzO1xuICBpbnN0YW5jZS5wcm9wcyA9IHdvcmtJblByb2dyZXNzLnR5cGUgPT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID8gb2xkUHJvcHMgOiByZXNvbHZlRGVmYXVsdFByb3BzKHdvcmtJblByb2dyZXNzLnR5cGUsIG9sZFByb3BzKTtcblxuICB2YXIgb2xkQ29udGV4dCA9IGluc3RhbmNlLmNvbnRleHQ7XG4gIHZhciBjb250ZXh0VHlwZSA9IGN0b3IuY29udGV4dFR5cGU7XG4gIHZhciBuZXh0Q29udGV4dCA9IHZvaWQgMDtcbiAgaWYgKHR5cGVvZiBjb250ZXh0VHlwZSA9PT0gJ29iamVjdCcgJiYgY29udGV4dFR5cGUgIT09IG51bGwpIHtcbiAgICBuZXh0Q29udGV4dCA9IHJlYWRDb250ZXh0KGNvbnRleHRUeXBlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbmV4dFVubWFza2VkQ29udGV4dCA9IGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgY3RvciwgdHJ1ZSk7XG4gICAgbmV4dENvbnRleHQgPSBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBuZXh0VW5tYXNrZWRDb250ZXh0KTtcbiAgfVxuXG4gIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcbiAgdmFyIGhhc05ld0xpZmVjeWNsZXMgPSB0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJztcblxuICAvLyBOb3RlOiBEdXJpbmcgdGhlc2UgbGlmZS1jeWNsZXMsIGluc3RhbmNlLnByb3BzL2luc3RhbmNlLnN0YXRlIGFyZSB3aGF0XG4gIC8vIGV2ZXIgdGhlIHByZXZpb3VzbHkgYXR0ZW1wdGVkIHRvIHJlbmRlciAtIG5vdCB0aGUgXCJjdXJyZW50XCIuIEhvd2V2ZXIsXG4gIC8vIGR1cmluZyBjb21wb25lbnREaWRVcGRhdGUgd2UgcGFzcyB0aGUgXCJjdXJyZW50XCIgcHJvcHMuXG5cbiAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG4gIGlmICghaGFzTmV3TGlmZWN5Y2xlcyAmJiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSkge1xuICAgIGlmIChvbGRQcm9wcyAhPT0gbmV3UHJvcHMgfHwgb2xkQ29udGV4dCAhPT0gbmV4dENvbnRleHQpIHtcbiAgICAgIGNhbGxDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSwgbmV3UHJvcHMsIG5leHRDb250ZXh0KTtcbiAgICB9XG4gIH1cblxuICByZXNldEhhc0ZvcmNlVXBkYXRlQmVmb3JlUHJvY2Vzc2luZygpO1xuXG4gIHZhciBvbGRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIHZhciBuZXdTdGF0ZSA9IGluc3RhbmNlLnN0YXRlID0gb2xkU3RhdGU7XG4gIHZhciB1cGRhdGVRdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuICBpZiAodXBkYXRlUXVldWUgIT09IG51bGwpIHtcbiAgICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIHVwZGF0ZVF1ZXVlLCBuZXdQcm9wcywgaW5zdGFuY2UsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgICBuZXdTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIH1cblxuICBpZiAob2xkUHJvcHMgPT09IG5ld1Byb3BzICYmIG9sZFN0YXRlID09PSBuZXdTdGF0ZSAmJiAhaGFzQ29udGV4dENoYW5nZWQoKSAmJiAhY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZygpKSB7XG4gICAgLy8gSWYgYW4gdXBkYXRlIHdhcyBhbHJlYWR5IGluIHByb2dyZXNzLCB3ZSBzaG91bGQgc2NoZWR1bGUgYW4gVXBkYXRlXG4gICAgLy8gZWZmZWN0IGV2ZW4gdGhvdWdoIHdlJ3JlIGJhaWxpbmcgb3V0LCBzbyB0aGF0IGNXVS9jRFUgYXJlIGNhbGxlZC5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKG9sZFByb3BzICE9PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgfHwgb2xkU3RhdGUgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgfD0gVXBkYXRlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAob2xkUHJvcHMgIT09IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyB8fCBvbGRTdGF0ZSAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyB8PSBTbmFwc2hvdDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyh3b3JrSW5Qcm9ncmVzcywgY3RvciwgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLCBuZXdQcm9wcyk7XG4gICAgbmV3U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB9XG5cbiAgdmFyIHNob3VsZFVwZGF0ZSA9IGNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmcoKSB8fCBjaGVja1Nob3VsZENvbXBvbmVudFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgY3Rvciwgb2xkUHJvcHMsIG5ld1Byb3BzLCBvbGRTdGF0ZSwgbmV3U3RhdGUsIG5leHRDb250ZXh0KTtcblxuICBpZiAoc2hvdWxkVXBkYXRlKSB7XG4gICAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gICAgLy8gVW5zYWZlIGxpZmVjeWNsZXMgc2hvdWxkIG5vdCBiZSBpbnZva2VkIGZvciBjb21wb25lbnRzIHVzaW5nIHRoZSBuZXcgQVBJcy5cbiAgICBpZiAoIWhhc05ld0xpZmVjeWNsZXMgJiYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgIHN0YXJ0UGhhc2VUaW1lcih3b3JrSW5Qcm9ncmVzcywgJ2NvbXBvbmVudFdpbGxVcGRhdGUnKTtcbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlKG5ld1Byb3BzLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZShuZXdQcm9wcywgbmV3U3RhdGUsIG5leHRDb250ZXh0KTtcbiAgICAgIH1cbiAgICAgIHN0b3BQaGFzZVRpbWVyKCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgfD0gVXBkYXRlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgfD0gU25hcHNob3Q7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIElmIGFuIHVwZGF0ZSB3YXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgd2Ugc2hvdWxkIHNjaGVkdWxlIGFuIFVwZGF0ZVxuICAgIC8vIGVmZmVjdCBldmVuIHRob3VnaCB3ZSdyZSBiYWlsaW5nIG91dCwgc28gdGhhdCBjV1UvY0RVIGFyZSBjYWxsZWQuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmIChvbGRQcm9wcyAhPT0gY3VycmVudC5tZW1vaXplZFByb3BzIHx8IG9sZFN0YXRlICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnIHw9IFVwZGF0ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKG9sZFByb3BzICE9PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgfHwgb2xkU3RhdGUgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgfD0gU25hcHNob3Q7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybmVkIGZhbHNlLCB3ZSBzaG91bGQgc3RpbGwgdXBkYXRlIHRoZVxuICAgIC8vIG1lbW9pemVkIHByb3BzL3N0YXRlIHRvIGluZGljYXRlIHRoYXQgdGhpcyB3b3JrIGNhbiBiZSByZXVzZWQuXG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IG5ld1Byb3BzO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgfVxuXG4gIC8vIFVwZGF0ZSB0aGUgZXhpc3RpbmcgaW5zdGFuY2UncyBzdGF0ZSwgcHJvcHMsIGFuZCBjb250ZXh0IHBvaW50ZXJzIGV2ZW5cbiAgLy8gaWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybnMgZmFsc2UuXG4gIGluc3RhbmNlLnByb3BzID0gbmV3UHJvcHM7XG4gIGluc3RhbmNlLnN0YXRlID0gbmV3U3RhdGU7XG4gIGluc3RhbmNlLmNvbnRleHQgPSBuZXh0Q29udGV4dDtcblxuICByZXR1cm4gc2hvdWxkVXBkYXRlO1xufVxuXG52YXIgZGlkV2FybkFib3V0TWFwcyA9IHZvaWQgMDtcbnZhciBkaWRXYXJuQWJvdXRHZW5lcmF0b3JzID0gdm9pZCAwO1xudmFyIGRpZFdhcm5BYm91dFN0cmluZ1JlZkluU3RyaWN0TW9kZSA9IHZvaWQgMDtcbnZhciBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB2b2lkIDA7XG52YXIgb3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nID0gdm9pZCAwO1xudmFyIHdhcm5Gb3JNaXNzaW5nS2V5ID0gZnVuY3Rpb24gKGNoaWxkKSB7fTtcblxue1xuICBkaWRXYXJuQWJvdXRNYXBzID0gZmFsc2U7XG4gIGRpZFdhcm5BYm91dEdlbmVyYXRvcnMgPSBmYWxzZTtcbiAgZGlkV2FybkFib3V0U3RyaW5nUmVmSW5TdHJpY3RNb2RlID0ge307XG5cbiAgLyoqXG4gICAqIFdhcm4gaWYgdGhlcmUncyBubyBrZXkgZXhwbGljaXRseSBzZXQgb24gZHluYW1pYyBhcnJheXMgb2YgY2hpbGRyZW4gb3JcbiAgICogb2JqZWN0IGtleXMgYXJlIG5vdCB2YWxpZC4gVGhpcyBhbGxvd3MgdXMgdG8ga2VlcCB0cmFjayBvZiBjaGlsZHJlbiBiZXR3ZWVuXG4gICAqIHVwZGF0ZXMuXG4gICAqL1xuICBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcbiAgb3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nID0ge307XG5cbiAgd2FybkZvck1pc3NpbmdLZXkgPSBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICBpZiAoY2hpbGQgPT09IG51bGwgfHwgdHlwZW9mIGNoaWxkICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWNoaWxkLl9zdG9yZSB8fCBjaGlsZC5fc3RvcmUudmFsaWRhdGVkIHx8IGNoaWxkLmtleSAhPSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgICEodHlwZW9mIGNoaWxkLl9zdG9yZSA9PT0gJ29iamVjdCcpID8gaW52YXJpYW50KGZhbHNlLCAnUmVhY3QgQ29tcG9uZW50IGluIHdhcm5Gb3JNaXNzaW5nS2V5IHNob3VsZCBoYXZlIGEgX3N0b3JlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpIDogdm9pZCAwO1xuICAgIGNoaWxkLl9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuXG4gICAgdmFyIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8gPSAnRWFjaCBjaGlsZCBpbiBhIGxpc3Qgc2hvdWxkIGhhdmUgYSB1bmlxdWUgJyArICdcImtleVwiIHByb3AuIFNlZSBodHRwczovL2ZiLm1lL3JlYWN0LXdhcm5pbmcta2V5cyBmb3IgJyArICdtb3JlIGluZm9ybWF0aW9uLicgKyBnZXRDdXJyZW50RmliZXJTdGFja0luRGV2KCk7XG4gICAgaWYgKG93bmVySGFzS2V5VXNlV2FybmluZ1tjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBvd25lckhhc0tleVVzZVdhcm5pbmdbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10gPSB0cnVlO1xuXG4gICAgd2FybmluZyQxKGZhbHNlLCAnRWFjaCBjaGlsZCBpbiBhIGxpc3Qgc2hvdWxkIGhhdmUgYSB1bmlxdWUgJyArICdcImtleVwiIHByb3AuIFNlZSBodHRwczovL2ZiLm1lL3JlYWN0LXdhcm5pbmcta2V5cyBmb3IgJyArICdtb3JlIGluZm9ybWF0aW9uLicpO1xuICB9O1xufVxuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbmZ1bmN0aW9uIGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY3VycmVudCQkMSwgZWxlbWVudCkge1xuICB2YXIgbWl4ZWRSZWYgPSBlbGVtZW50LnJlZjtcbiAgaWYgKG1peGVkUmVmICE9PSBudWxsICYmIHR5cGVvZiBtaXhlZFJlZiAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgbWl4ZWRSZWYgIT09ICdvYmplY3QnKSB7XG4gICAge1xuICAgICAgaWYgKHJldHVybkZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShyZXR1cm5GaWJlci50eXBlKSB8fCAnQ29tcG9uZW50JztcbiAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRTdHJpbmdSZWZJblN0cmljdE1vZGVbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdBIHN0cmluZyByZWYsIFwiJXNcIiwgaGFzIGJlZW4gZm91bmQgd2l0aGluIGEgc3RyaWN0IG1vZGUgdHJlZS4gJyArICdTdHJpbmcgcmVmcyBhcmUgYSBzb3VyY2Ugb2YgcG90ZW50aWFsIGJ1Z3MgYW5kIHNob3VsZCBiZSBhdm9pZGVkLiAnICsgJ1dlIHJlY29tbWVuZCB1c2luZyBjcmVhdGVSZWYoKSBpbnN0ZWFkLicgKyAnXFxuJXMnICsgJ1xcblxcbkxlYXJuIG1vcmUgYWJvdXQgdXNpbmcgcmVmcyBzYWZlbHkgaGVyZTonICsgJ1xcbmh0dHBzOi8vZmIubWUvcmVhY3Qtc3RyaWN0LW1vZGUtc3RyaW5nLXJlZicsIG1peGVkUmVmLCBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2QocmV0dXJuRmliZXIpKTtcbiAgICAgICAgICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZJblN0cmljdE1vZGVbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVsZW1lbnQuX293bmVyKSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBpbnN0ID0gdm9pZCAwO1xuICAgICAgaWYgKG93bmVyKSB7XG4gICAgICAgIHZhciBvd25lckZpYmVyID0gb3duZXI7XG4gICAgICAgICEob3duZXJGaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSA/IGludmFyaWFudChmYWxzZSwgJ0Z1bmN0aW9uIGNvbXBvbmVudHMgY2Fubm90IGhhdmUgcmVmcy4gRGlkIHlvdSBtZWFuIHRvIHVzZSBSZWFjdC5mb3J3YXJkUmVmKCk/JykgOiB2b2lkIDA7XG4gICAgICAgIGluc3QgPSBvd25lckZpYmVyLnN0YXRlTm9kZTtcbiAgICAgIH1cbiAgICAgICFpbnN0ID8gaW52YXJpYW50KGZhbHNlLCAnTWlzc2luZyBvd25lciBmb3Igc3RyaW5nIHJlZiAlcy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBtaXhlZFJlZikgOiB2b2lkIDA7XG4gICAgICB2YXIgc3RyaW5nUmVmID0gJycgKyBtaXhlZFJlZjtcbiAgICAgIC8vIENoZWNrIGlmIHByZXZpb3VzIHN0cmluZyByZWYgbWF0Y2hlcyBuZXcgc3RyaW5nIHJlZlxuICAgICAgaWYgKGN1cnJlbnQkJDEgIT09IG51bGwgJiYgY3VycmVudCQkMS5yZWYgIT09IG51bGwgJiYgdHlwZW9mIGN1cnJlbnQkJDEucmVmID09PSAnZnVuY3Rpb24nICYmIGN1cnJlbnQkJDEucmVmLl9zdHJpbmdSZWYgPT09IHN0cmluZ1JlZikge1xuICAgICAgICByZXR1cm4gY3VycmVudCQkMS5yZWY7XG4gICAgICB9XG4gICAgICB2YXIgcmVmID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciByZWZzID0gaW5zdC5yZWZzO1xuICAgICAgICBpZiAocmVmcyA9PT0gZW1wdHlSZWZzT2JqZWN0KSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBhIGxhenkgcG9vbGVkIGZyb3plbiBvYmplY3QsIHNvIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZS5cbiAgICAgICAgICByZWZzID0gaW5zdC5yZWZzID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgZGVsZXRlIHJlZnNbc3RyaW5nUmVmXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWZzW3N0cmluZ1JlZl0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJlZi5fc3RyaW5nUmVmID0gc3RyaW5nUmVmO1xuICAgICAgcmV0dXJuIHJlZjtcbiAgICB9IGVsc2Uge1xuICAgICAgISh0eXBlb2YgbWl4ZWRSZWYgPT09ICdzdHJpbmcnKSA/IGludmFyaWFudChmYWxzZSwgJ0V4cGVjdGVkIHJlZiB0byBiZSBhIGZ1bmN0aW9uLCBhIHN0cmluZywgYW4gb2JqZWN0IHJldHVybmVkIGJ5IFJlYWN0LmNyZWF0ZVJlZigpLCBvciBudWxsLicpIDogdm9pZCAwO1xuICAgICAgIWVsZW1lbnQuX293bmVyID8gaW52YXJpYW50KGZhbHNlLCAnRWxlbWVudCByZWYgd2FzIHNwZWNpZmllZCBhcyBhIHN0cmluZyAoJXMpIGJ1dCBubyBvd25lciB3YXMgc2V0LiBUaGlzIGNvdWxkIGhhcHBlbiBmb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcXG4xLiBZb3UgbWF5IGJlIGFkZGluZyBhIHJlZiB0byBhIGZ1bmN0aW9uIGNvbXBvbmVudFxcbjIuIFlvdSBtYXkgYmUgYWRkaW5nIGEgcmVmIHRvIGEgY29tcG9uZW50IHRoYXQgd2FzIG5vdCBjcmVhdGVkIGluc2lkZSBhIGNvbXBvbmVudFxcJ3MgcmVuZGVyIG1ldGhvZFxcbjMuIFlvdSBoYXZlIG11bHRpcGxlIGNvcGllcyBvZiBSZWFjdCBsb2FkZWRcXG5TZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC1yZWZzLW11c3QtaGF2ZS1vd25lciBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nLCBtaXhlZFJlZikgOiB2b2lkIDA7XG4gICAgfVxuICB9XG4gIHJldHVybiBtaXhlZFJlZjtcbn1cblxuZnVuY3Rpb24gdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCkge1xuICBpZiAocmV0dXJuRmliZXIudHlwZSAhPT0gJ3RleHRhcmVhJykge1xuICAgIHZhciBhZGRlbmR1bSA9ICcnO1xuICAgIHtcbiAgICAgIGFkZGVuZHVtID0gJyBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiwgdXNlIGFuIGFycmF5ICcgKyAnaW5zdGVhZC4nICsgZ2V0Q3VycmVudEZpYmVyU3RhY2tJbkRldigpO1xuICAgIH1cbiAgICBpbnZhcmlhbnQoZmFsc2UsICdPYmplY3RzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZCAoZm91bmQ6ICVzKS4lcycsIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuZXdDaGlsZCkgPT09ICdbb2JqZWN0IE9iamVjdF0nID8gJ29iamVjdCB3aXRoIGtleXMgeycgKyBPYmplY3Qua2V5cyhuZXdDaGlsZCkuam9pbignLCAnKSArICd9JyA6IG5ld0NoaWxkLCBhZGRlbmR1bSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gd2Fybk9uRnVuY3Rpb25UeXBlKCkge1xuICB2YXIgY3VycmVudENvbXBvbmVudEVycm9ySW5mbyA9ICdGdW5jdGlvbnMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkLiBUaGlzIG1heSBoYXBwZW4gaWYgJyArICd5b3UgcmV0dXJuIGEgQ29tcG9uZW50IGluc3RlYWQgb2YgPENvbXBvbmVudCAvPiBmcm9tIHJlbmRlci4gJyArICdPciBtYXliZSB5b3UgbWVhbnQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHJhdGhlciB0aGFuIHJldHVybiBpdC4nICsgZ2V0Q3VycmVudEZpYmVyU3RhY2tJbkRldigpO1xuXG4gIGlmIChvd25lckhhc0Z1bmN0aW9uVHlwZVdhcm5pbmdbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgb3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dID0gdHJ1ZTtcblxuICB3YXJuaW5nJDEoZmFsc2UsICdGdW5jdGlvbnMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkLiBUaGlzIG1heSBoYXBwZW4gaWYgJyArICd5b3UgcmV0dXJuIGEgQ29tcG9uZW50IGluc3RlYWQgb2YgPENvbXBvbmVudCAvPiBmcm9tIHJlbmRlci4gJyArICdPciBtYXliZSB5b3UgbWVhbnQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHJhdGhlciB0aGFuIHJldHVybiBpdC4nKTtcbn1cblxuLy8gVGhpcyB3cmFwcGVyIGZ1bmN0aW9uIGV4aXN0cyBiZWNhdXNlIEkgZXhwZWN0IHRvIGNsb25lIHRoZSBjb2RlIGluIGVhY2ggcGF0aFxuLy8gdG8gYmUgYWJsZSB0byBvcHRpbWl6ZSBlYWNoIHBhdGggaW5kaXZpZHVhbGx5IGJ5IGJyYW5jaGluZyBlYXJseS4gVGhpcyBuZWVkc1xuLy8gYSBjb21waWxlciBvciB3ZSBjYW4gZG8gaXQgbWFudWFsbHkuIEhlbHBlcnMgdGhhdCBkb24ndCBuZWVkIHRoaXMgYnJhbmNoaW5nXG4vLyBsaXZlIG91dHNpZGUgb2YgdGhpcyBmdW5jdGlvbi5cbmZ1bmN0aW9uIENoaWxkUmVjb25jaWxlcihzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gIGZ1bmN0aW9uIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZFRvRGVsZXRlKSB7XG4gICAgaWYgKCFzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAvLyBOb29wLlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBEZWxldGlvbnMgYXJlIGFkZGVkIGluIHJldmVyc2VkIG9yZGVyIHNvIHdlIGFkZCBpdCB0byB0aGUgZnJvbnQuXG4gICAgLy8gQXQgdGhpcyBwb2ludCwgdGhlIHJldHVybiBmaWJlcidzIGVmZmVjdCBsaXN0IGlzIGVtcHR5IGV4Y2VwdCBmb3JcbiAgICAvLyBkZWxldGlvbnMsIHNvIHdlIGNhbiBqdXN0IGFwcGVuZCB0aGUgZGVsZXRpb24gdG8gdGhlIGxpc3QuIFRoZSByZW1haW5pbmdcbiAgICAvLyBlZmZlY3RzIGFyZW4ndCBhZGRlZCB1bnRpbCB0aGUgY29tcGxldGUgcGhhc2UuIE9uY2Ugd2UgaW1wbGVtZW50XG4gICAgLy8gcmVzdW1pbmcsIHRoaXMgbWF5IG5vdCBiZSB0cnVlLlxuICAgIHZhciBsYXN0ID0gcmV0dXJuRmliZXIubGFzdEVmZmVjdDtcbiAgICBpZiAobGFzdCAhPT0gbnVsbCkge1xuICAgICAgbGFzdC5uZXh0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9IHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICAgIH1cbiAgICBjaGlsZFRvRGVsZXRlLm5leHRFZmZlY3QgPSBudWxsO1xuICAgIGNoaWxkVG9EZWxldGUuZWZmZWN0VGFnID0gRGVsZXRpb247XG4gIH1cblxuICBmdW5jdGlvbiBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpIHtcbiAgICBpZiAoIXNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgIC8vIE5vb3AuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBGb3IgdGhlIHNob3VsZENsb25lIGNhc2UsIHRoaXMgY291bGQgYmUgbWljcm8tb3B0aW1pemVkIGEgYml0IGJ5XG4gICAgLy8gYXNzdW1pbmcgdGhhdCBhZnRlciB0aGUgZmlyc3QgY2hpbGQgd2UndmUgYWxyZWFkeSBhZGRlZCBldmVyeXRoaW5nLlxuICAgIHZhciBjaGlsZFRvRGVsZXRlID0gY3VycmVudEZpcnN0Q2hpbGQ7XG4gICAgd2hpbGUgKGNoaWxkVG9EZWxldGUgIT09IG51bGwpIHtcbiAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZFRvRGVsZXRlKTtcbiAgICAgIGNoaWxkVG9EZWxldGUgPSBjaGlsZFRvRGVsZXRlLnNpYmxpbmc7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gbWFwUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKSB7XG4gICAgLy8gQWRkIHRoZSByZW1haW5pbmcgY2hpbGRyZW4gdG8gYSB0ZW1wb3JhcnkgbWFwIHNvIHRoYXQgd2UgY2FuIGZpbmQgdGhlbSBieVxuICAgIC8vIGtleXMgcXVpY2tseS4gSW1wbGljaXQgKG51bGwpIGtleXMgZ2V0IGFkZGVkIHRvIHRoaXMgc2V0IHdpdGggdGhlaXIgaW5kZXhcbiAgICB2YXIgZXhpc3RpbmdDaGlsZHJlbiA9IG5ldyBNYXAoKTtcblxuICAgIHZhciBleGlzdGluZ0NoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQ7XG4gICAgd2hpbGUgKGV4aXN0aW5nQ2hpbGQgIT09IG51bGwpIHtcbiAgICAgIGlmIChleGlzdGluZ0NoaWxkLmtleSAhPT0gbnVsbCkge1xuICAgICAgICBleGlzdGluZ0NoaWxkcmVuLnNldChleGlzdGluZ0NoaWxkLmtleSwgZXhpc3RpbmdDaGlsZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBleGlzdGluZ0NoaWxkcmVuLnNldChleGlzdGluZ0NoaWxkLmluZGV4LCBleGlzdGluZ0NoaWxkKTtcbiAgICAgIH1cbiAgICAgIGV4aXN0aW5nQ2hpbGQgPSBleGlzdGluZ0NoaWxkLnNpYmxpbmc7XG4gICAgfVxuICAgIHJldHVybiBleGlzdGluZ0NoaWxkcmVuO1xuICB9XG5cbiAgZnVuY3Rpb24gdXNlRmliZXIoZmliZXIsIHBlbmRpbmdQcm9wcywgZXhwaXJhdGlvblRpbWUpIHtcbiAgICAvLyBXZSBjdXJyZW50bHkgc2V0IHNpYmxpbmcgdG8gbnVsbCBhbmQgaW5kZXggdG8gMCBoZXJlIGJlY2F1c2UgaXQgaXMgZWFzeVxuICAgIC8vIHRvIGZvcmdldCB0byBkbyBiZWZvcmUgcmV0dXJuaW5nIGl0LiBFLmcuIGZvciB0aGUgc2luZ2xlIGNoaWxkIGNhc2UuXG4gICAgdmFyIGNsb25lID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoZmliZXIsIHBlbmRpbmdQcm9wcywgZXhwaXJhdGlvblRpbWUpO1xuICAgIGNsb25lLmluZGV4ID0gMDtcbiAgICBjbG9uZS5zaWJsaW5nID0gbnVsbDtcbiAgICByZXR1cm4gY2xvbmU7XG4gIH1cblxuICBmdW5jdGlvbiBwbGFjZUNoaWxkKG5ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0luZGV4KSB7XG4gICAgbmV3RmliZXIuaW5kZXggPSBuZXdJbmRleDtcbiAgICBpZiAoIXNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgIC8vIE5vb3AuXG4gICAgICByZXR1cm4gbGFzdFBsYWNlZEluZGV4O1xuICAgIH1cbiAgICB2YXIgY3VycmVudCQkMSA9IG5ld0ZpYmVyLmFsdGVybmF0ZTtcbiAgICBpZiAoY3VycmVudCQkMSAhPT0gbnVsbCkge1xuICAgICAgdmFyIG9sZEluZGV4ID0gY3VycmVudCQkMS5pbmRleDtcbiAgICAgIGlmIChvbGRJbmRleCA8IGxhc3RQbGFjZWRJbmRleCkge1xuICAgICAgICAvLyBUaGlzIGlzIGEgbW92ZS5cbiAgICAgICAgbmV3RmliZXIuZWZmZWN0VGFnID0gUGxhY2VtZW50O1xuICAgICAgICByZXR1cm4gbGFzdFBsYWNlZEluZGV4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhpcyBpdGVtIGNhbiBzdGF5IGluIHBsYWNlLlxuICAgICAgICByZXR1cm4gb2xkSW5kZXg7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgaXMgYW4gaW5zZXJ0aW9uLlxuICAgICAgbmV3RmliZXIuZWZmZWN0VGFnID0gUGxhY2VtZW50O1xuICAgICAgcmV0dXJuIGxhc3RQbGFjZWRJbmRleDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwbGFjZVNpbmdsZUNoaWxkKG5ld0ZpYmVyKSB7XG4gICAgLy8gVGhpcyBpcyBzaW1wbGVyIGZvciB0aGUgc2luZ2xlIGNoaWxkIGNhc2UuIFdlIG9ubHkgbmVlZCB0byBkbyBhXG4gICAgLy8gcGxhY2VtZW50IGZvciBpbnNlcnRpbmcgbmV3IGNoaWxkcmVuLlxuICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzICYmIG5ld0ZpYmVyLmFsdGVybmF0ZSA9PT0gbnVsbCkge1xuICAgICAgbmV3RmliZXIuZWZmZWN0VGFnID0gUGxhY2VtZW50O1xuICAgIH1cbiAgICByZXR1cm4gbmV3RmliZXI7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVUZXh0Tm9kZShyZXR1cm5GaWJlciwgY3VycmVudCQkMSwgdGV4dENvbnRlbnQsIGV4cGlyYXRpb25UaW1lKSB7XG4gICAgaWYgKGN1cnJlbnQkJDEgPT09IG51bGwgfHwgY3VycmVudCQkMS50YWcgIT09IEhvc3RUZXh0KSB7XG4gICAgICAvLyBJbnNlcnRcbiAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tVGV4dCh0ZXh0Q29udGVudCwgcmV0dXJuRmliZXIubW9kZSwgZXhwaXJhdGlvblRpbWUpO1xuICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBjcmVhdGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVcGRhdGVcbiAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGN1cnJlbnQkJDEsIHRleHRDb250ZW50LCBleHBpcmF0aW9uVGltZSk7XG4gICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBleGlzdGluZztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVFbGVtZW50KHJldHVybkZpYmVyLCBjdXJyZW50JCQxLCBlbGVtZW50LCBleHBpcmF0aW9uVGltZSkge1xuICAgIGlmIChjdXJyZW50JCQxICE9PSBudWxsICYmIGN1cnJlbnQkJDEuZWxlbWVudFR5cGUgPT09IGVsZW1lbnQudHlwZSkge1xuICAgICAgLy8gTW92ZSBiYXNlZCBvbiBpbmRleFxuICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY3VycmVudCQkMSwgZWxlbWVudC5wcm9wcywgZXhwaXJhdGlvblRpbWUpO1xuICAgICAgZXhpc3RpbmcucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBjdXJyZW50JCQxLCBlbGVtZW50KTtcbiAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAge1xuICAgICAgICBleGlzdGluZy5fZGVidWdTb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2U7XG4gICAgICAgIGV4aXN0aW5nLl9kZWJ1Z093bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEluc2VydFxuICAgICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21FbGVtZW50KGVsZW1lbnQsIHJldHVybkZpYmVyLm1vZGUsIGV4cGlyYXRpb25UaW1lKTtcbiAgICAgIGNyZWF0ZWQucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBjdXJyZW50JCQxLCBlbGVtZW50KTtcbiAgICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVQb3J0YWwocmV0dXJuRmliZXIsIGN1cnJlbnQkJDEsIHBvcnRhbCwgZXhwaXJhdGlvblRpbWUpIHtcbiAgICBpZiAoY3VycmVudCQkMSA9PT0gbnVsbCB8fCBjdXJyZW50JCQxLnRhZyAhPT0gSG9zdFBvcnRhbCB8fCBjdXJyZW50JCQxLnN0YXRlTm9kZS5jb250YWluZXJJbmZvICE9PSBwb3J0YWwuY29udGFpbmVySW5mbyB8fCBjdXJyZW50JCQxLnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbiAhPT0gcG9ydGFsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAvLyBJbnNlcnRcbiAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tUG9ydGFsKHBvcnRhbCwgcmV0dXJuRmliZXIubW9kZSwgZXhwaXJhdGlvblRpbWUpO1xuICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBjcmVhdGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVcGRhdGVcbiAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGN1cnJlbnQkJDEsIHBvcnRhbC5jaGlsZHJlbiB8fCBbXSwgZXhwaXJhdGlvblRpbWUpO1xuICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIGN1cnJlbnQkJDEsIGZyYWdtZW50LCBleHBpcmF0aW9uVGltZSwga2V5KSB7XG4gICAgaWYgKGN1cnJlbnQkJDEgPT09IG51bGwgfHwgY3VycmVudCQkMS50YWcgIT09IEZyYWdtZW50KSB7XG4gICAgICAvLyBJbnNlcnRcbiAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZnJhZ21lbnQsIHJldHVybkZpYmVyLm1vZGUsIGV4cGlyYXRpb25UaW1lLCBrZXkpO1xuICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBjcmVhdGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVcGRhdGVcbiAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGN1cnJlbnQkJDEsIGZyYWdtZW50LCBleHBpcmF0aW9uVGltZSk7XG4gICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBleGlzdGluZztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVDaGlsZChyZXR1cm5GaWJlciwgbmV3Q2hpbGQsIGV4cGlyYXRpb25UaW1lKSB7XG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5ld0NoaWxkID09PSAnbnVtYmVyJykge1xuICAgICAgLy8gVGV4dCBub2RlcyBkb24ndCBoYXZlIGtleXMuIElmIHRoZSBwcmV2aW91cyBub2RlIGlzIGltcGxpY2l0bHkga2V5ZWRcbiAgICAgIC8vIHdlIGNhbiBjb250aW51ZSB0byByZXBsYWNlIGl0IHdpdGhvdXQgYWJvcnRpbmcgZXZlbiBpZiBpdCBpcyBub3QgYSB0ZXh0XG4gICAgICAvLyBub2RlLlxuICAgICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21UZXh0KCcnICsgbmV3Q2hpbGQsIHJldHVybkZpYmVyLm1vZGUsIGV4cGlyYXRpb25UaW1lKTtcbiAgICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnb2JqZWN0JyAmJiBuZXdDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgX2NyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21FbGVtZW50KG5ld0NoaWxkLCByZXR1cm5GaWJlci5tb2RlLCBleHBpcmF0aW9uVGltZSk7XG4gICAgICAgICAgICBfY3JlYXRlZC5yZWYgPSBjb2VyY2VSZWYocmV0dXJuRmliZXIsIG51bGwsIG5ld0NoaWxkKTtcbiAgICAgICAgICAgIF9jcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICAgICAgcmV0dXJuIF9jcmVhdGVkO1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgX2NyZWF0ZWQyID0gY3JlYXRlRmliZXJGcm9tUG9ydGFsKG5ld0NoaWxkLCByZXR1cm5GaWJlci5tb2RlLCBleHBpcmF0aW9uVGltZSk7XG4gICAgICAgICAgICBfY3JlYXRlZDIucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgICByZXR1cm4gX2NyZWF0ZWQyO1xuICAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlzQXJyYXkobmV3Q2hpbGQpIHx8IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKSB7XG4gICAgICAgIHZhciBfY3JlYXRlZDMgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChuZXdDaGlsZCwgcmV0dXJuRmliZXIubW9kZSwgZXhwaXJhdGlvblRpbWUsIG51bGwpO1xuICAgICAgICBfY3JlYXRlZDMucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgIHJldHVybiBfY3JlYXRlZDM7XG4gICAgICB9XG5cbiAgICAgIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2Fybk9uRnVuY3Rpb25UeXBlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVTbG90KHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGQsIGV4cGlyYXRpb25UaW1lKSB7XG4gICAgLy8gVXBkYXRlIHRoZSBmaWJlciBpZiB0aGUga2V5cyBtYXRjaCwgb3RoZXJ3aXNlIHJldHVybiBudWxsLlxuXG4gICAgdmFyIGtleSA9IG9sZEZpYmVyICE9PSBudWxsID8gb2xkRmliZXIua2V5IDogbnVsbDtcblxuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBuZXdDaGlsZCA9PT0gJ251bWJlcicpIHtcbiAgICAgIC8vIFRleHQgbm9kZXMgZG9uJ3QgaGF2ZSBrZXlzLiBJZiB0aGUgcHJldmlvdXMgbm9kZSBpcyBpbXBsaWNpdGx5IGtleWVkXG4gICAgICAvLyB3ZSBjYW4gY29udGludWUgdG8gcmVwbGFjZSBpdCB3aXRob3V0IGFib3J0aW5nIGV2ZW4gaWYgaXQgaXMgbm90IGEgdGV4dFxuICAgICAgLy8gbm9kZS5cbiAgICAgIGlmIChrZXkgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gdXBkYXRlVGV4dE5vZGUocmV0dXJuRmliZXIsIG9sZEZpYmVyLCAnJyArIG5ld0NoaWxkLCBleHBpcmF0aW9uVGltZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ29iamVjdCcgJiYgbmV3Q2hpbGQgIT09IG51bGwpIHtcbiAgICAgIHN3aXRjaCAobmV3Q2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKG5ld0NoaWxkLmtleSA9PT0ga2V5KSB7XG4gICAgICAgICAgICAgIGlmIChuZXdDaGlsZC50eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZUZyYWdtZW50KHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGQucHJvcHMuY2hpbGRyZW4sIGV4cGlyYXRpb25UaW1lLCBrZXkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB1cGRhdGVFbGVtZW50KHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGQsIGV4cGlyYXRpb25UaW1lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAobmV3Q2hpbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVBvcnRhbChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBleHBpcmF0aW9uVGltZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0FycmF5KG5ld0NoaWxkKSB8fCBnZXRJdGVyYXRvckZuKG5ld0NoaWxkKSkge1xuICAgICAgICBpZiAoa2V5ICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZCwgZXhwaXJhdGlvblRpbWUsIG51bGwpO1xuICAgICAgfVxuXG4gICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlRnJvbU1hcChleGlzdGluZ0NoaWxkcmVuLCByZXR1cm5GaWJlciwgbmV3SWR4LCBuZXdDaGlsZCwgZXhwaXJhdGlvblRpbWUpIHtcbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbmV3Q2hpbGQgPT09ICdudW1iZXInKSB7XG4gICAgICAvLyBUZXh0IG5vZGVzIGRvbid0IGhhdmUga2V5cywgc28gd2UgbmVpdGhlciBoYXZlIHRvIGNoZWNrIHRoZSBvbGQgbm9yXG4gICAgICAvLyBuZXcgbm9kZSBmb3IgdGhlIGtleS4gSWYgYm90aCBhcmUgdGV4dCBub2RlcywgdGhleSBtYXRjaC5cbiAgICAgIHZhciBtYXRjaGVkRmliZXIgPSBleGlzdGluZ0NoaWxkcmVuLmdldChuZXdJZHgpIHx8IG51bGw7XG4gICAgICByZXR1cm4gdXBkYXRlVGV4dE5vZGUocmV0dXJuRmliZXIsIG1hdGNoZWRGaWJlciwgJycgKyBuZXdDaGlsZCwgZXhwaXJhdGlvblRpbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdvYmplY3QnICYmIG5ld0NoaWxkICE9PSBudWxsKSB7XG4gICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBfbWF0Y2hlZEZpYmVyID0gZXhpc3RpbmdDaGlsZHJlbi5nZXQobmV3Q2hpbGQua2V5ID09PSBudWxsID8gbmV3SWR4IDogbmV3Q2hpbGQua2V5KSB8fCBudWxsO1xuICAgICAgICAgICAgaWYgKG5ld0NoaWxkLnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZUZyYWdtZW50KHJldHVybkZpYmVyLCBfbWF0Y2hlZEZpYmVyLCBuZXdDaGlsZC5wcm9wcy5jaGlsZHJlbiwgZXhwaXJhdGlvblRpbWUsIG5ld0NoaWxkLmtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlRWxlbWVudChyZXR1cm5GaWJlciwgX21hdGNoZWRGaWJlciwgbmV3Q2hpbGQsIGV4cGlyYXRpb25UaW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIF9tYXRjaGVkRmliZXIyID0gZXhpc3RpbmdDaGlsZHJlbi5nZXQobmV3Q2hpbGQua2V5ID09PSBudWxsID8gbmV3SWR4IDogbmV3Q2hpbGQua2V5KSB8fCBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVBvcnRhbChyZXR1cm5GaWJlciwgX21hdGNoZWRGaWJlcjIsIG5ld0NoaWxkLCBleHBpcmF0aW9uVGltZSk7XG4gICAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNBcnJheShuZXdDaGlsZCkgfHwgZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpIHtcbiAgICAgICAgdmFyIF9tYXRjaGVkRmliZXIzID0gZXhpc3RpbmdDaGlsZHJlbi5nZXQobmV3SWR4KSB8fCBudWxsO1xuICAgICAgICByZXR1cm4gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIF9tYXRjaGVkRmliZXIzLCBuZXdDaGlsZCwgZXhwaXJhdGlvblRpbWUsIG51bGwpO1xuICAgICAgfVxuXG4gICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFdhcm5zIGlmIHRoZXJlIGlzIGEgZHVwbGljYXRlIG9yIG1pc3Npbmcga2V5XG4gICAqL1xuICBmdW5jdGlvbiB3YXJuT25JbnZhbGlkS2V5KGNoaWxkLCBrbm93bktleXMpIHtcbiAgICB7XG4gICAgICBpZiAodHlwZW9mIGNoaWxkICE9PSAnb2JqZWN0JyB8fCBjaGlsZCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4ga25vd25LZXlzO1xuICAgICAgfVxuICAgICAgc3dpdGNoIChjaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICB3YXJuRm9yTWlzc2luZ0tleShjaGlsZCk7XG4gICAgICAgICAgdmFyIGtleSA9IGNoaWxkLmtleTtcbiAgICAgICAgICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoa25vd25LZXlzID09PSBudWxsKSB7XG4gICAgICAgICAgICBrbm93bktleXMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICBrbm93bktleXMuYWRkKGtleSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFrbm93bktleXMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIGtub3duS2V5cy5hZGQoa2V5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICB3YXJuaW5nJDEoZmFsc2UsICdFbmNvdW50ZXJlZCB0d28gY2hpbGRyZW4gd2l0aCB0aGUgc2FtZSBrZXksIGAlc2AuICcgKyAnS2V5cyBzaG91bGQgYmUgdW5pcXVlIHNvIHRoYXQgY29tcG9uZW50cyBtYWludGFpbiB0aGVpciBpZGVudGl0eSAnICsgJ2Fjcm9zcyB1cGRhdGVzLiBOb24tdW5pcXVlIGtleXMgbWF5IGNhdXNlIGNoaWxkcmVuIHRvIGJlICcgKyAnZHVwbGljYXRlZCBhbmQvb3Igb21pdHRlZCDigJQgdGhlIGJlaGF2aW9yIGlzIHVuc3VwcG9ydGVkIGFuZCAnICsgJ2NvdWxkIGNoYW5nZSBpbiBhIGZ1dHVyZSB2ZXJzaW9uLicsIGtleSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBrbm93bktleXM7XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbkFycmF5KHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGRyZW4sIGV4cGlyYXRpb25UaW1lKSB7XG4gICAgLy8gVGhpcyBhbGdvcml0aG0gY2FuJ3Qgb3B0aW1pemUgYnkgc2VhcmNoaW5nIGZyb20gYm90aCBlbmRzIHNpbmNlIHdlXG4gICAgLy8gZG9uJ3QgaGF2ZSBiYWNrcG9pbnRlcnMgb24gZmliZXJzLiBJJ20gdHJ5aW5nIHRvIHNlZSBob3cgZmFyIHdlIGNhbiBnZXRcbiAgICAvLyB3aXRoIHRoYXQgbW9kZWwuIElmIGl0IGVuZHMgdXAgbm90IGJlaW5nIHdvcnRoIHRoZSB0cmFkZW9mZnMsIHdlIGNhblxuICAgIC8vIGFkZCBpdCBsYXRlci5cblxuICAgIC8vIEV2ZW4gd2l0aCBhIHR3byBlbmRlZCBvcHRpbWl6YXRpb24sIHdlJ2Qgd2FudCB0byBvcHRpbWl6ZSBmb3IgdGhlIGNhc2VcbiAgICAvLyB3aGVyZSB0aGVyZSBhcmUgZmV3IGNoYW5nZXMgYW5kIGJydXRlIGZvcmNlIHRoZSBjb21wYXJpc29uIGluc3RlYWQgb2ZcbiAgICAvLyBnb2luZyBmb3IgdGhlIE1hcC4gSXQnZCBsaWtlIHRvIGV4cGxvcmUgaGl0dGluZyB0aGF0IHBhdGggZmlyc3QgaW5cbiAgICAvLyBmb3J3YXJkLW9ubHkgbW9kZSBhbmQgb25seSBnbyBmb3IgdGhlIE1hcCBvbmNlIHdlIG5vdGljZSB0aGF0IHdlIG5lZWRcbiAgICAvLyBsb3RzIG9mIGxvb2sgYWhlYWQuIFRoaXMgZG9lc24ndCBoYW5kbGUgcmV2ZXJzYWwgYXMgd2VsbCBhcyB0d28gZW5kZWRcbiAgICAvLyBzZWFyY2ggYnV0IHRoYXQncyB1bnVzdWFsLiBCZXNpZGVzLCBmb3IgdGhlIHR3byBlbmRlZCBvcHRpbWl6YXRpb24gdG9cbiAgICAvLyB3b3JrIG9uIEl0ZXJhYmxlcywgd2UnZCBuZWVkIHRvIGNvcHkgdGhlIHdob2xlIHNldC5cblxuICAgIC8vIEluIHRoaXMgZmlyc3QgaXRlcmF0aW9uLCB3ZSdsbCBqdXN0IGxpdmUgd2l0aCBoaXR0aW5nIHRoZSBiYWQgY2FzZVxuICAgIC8vIChhZGRpbmcgZXZlcnl0aGluZyB0byBhIE1hcCkgaW4gZm9yIGV2ZXJ5IGluc2VydC9tb3ZlLlxuXG4gICAgLy8gSWYgeW91IGNoYW5nZSB0aGlzIGNvZGUsIGFsc28gdXBkYXRlIHJlY29uY2lsZUNoaWxkcmVuSXRlcmF0b3IoKSB3aGljaFxuICAgIC8vIHVzZXMgdGhlIHNhbWUgYWxnb3JpdGhtLlxuXG4gICAge1xuICAgICAgLy8gRmlyc3QsIHZhbGlkYXRlIGtleXMuXG4gICAgICB2YXIga25vd25LZXlzID0gbnVsbDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoaWxkID0gbmV3Q2hpbGRyZW5baV07XG4gICAgICAgIGtub3duS2V5cyA9IHdhcm5PbkludmFsaWRLZXkoY2hpbGQsIGtub3duS2V5cyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBudWxsO1xuICAgIHZhciBwcmV2aW91c05ld0ZpYmVyID0gbnVsbDtcblxuICAgIHZhciBvbGRGaWJlciA9IGN1cnJlbnRGaXJzdENoaWxkO1xuICAgIHZhciBsYXN0UGxhY2VkSW5kZXggPSAwO1xuICAgIHZhciBuZXdJZHggPSAwO1xuICAgIHZhciBuZXh0T2xkRmliZXIgPSBudWxsO1xuICAgIGZvciAoOyBvbGRGaWJlciAhPT0gbnVsbCAmJiBuZXdJZHggPCBuZXdDaGlsZHJlbi5sZW5ndGg7IG5ld0lkeCsrKSB7XG4gICAgICBpZiAob2xkRmliZXIuaW5kZXggPiBuZXdJZHgpIHtcbiAgICAgICAgbmV4dE9sZEZpYmVyID0gb2xkRmliZXI7XG4gICAgICAgIG9sZEZpYmVyID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRPbGRGaWJlciA9IG9sZEZpYmVyLnNpYmxpbmc7XG4gICAgICB9XG4gICAgICB2YXIgbmV3RmliZXIgPSB1cGRhdGVTbG90KHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGRyZW5bbmV3SWR4XSwgZXhwaXJhdGlvblRpbWUpO1xuICAgICAgaWYgKG5ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRPRE86IFRoaXMgYnJlYWtzIG9uIGVtcHR5IHNsb3RzIGxpa2UgbnVsbCBjaGlsZHJlbi4gVGhhdCdzXG4gICAgICAgIC8vIHVuZm9ydHVuYXRlIGJlY2F1c2UgaXQgdHJpZ2dlcnMgdGhlIHNsb3cgcGF0aCBhbGwgdGhlIHRpbWUuIFdlIG5lZWRcbiAgICAgICAgLy8gYSBiZXR0ZXIgd2F5IHRvIGNvbW11bmljYXRlIHdoZXRoZXIgdGhpcyB3YXMgYSBtaXNzIG9yIG51bGwsXG4gICAgICAgIC8vIGJvb2xlYW4sIHVuZGVmaW5lZCwgZXRjLlxuICAgICAgICBpZiAob2xkRmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICBvbGRGaWJlciA9IG5leHRPbGRGaWJlcjtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAgIGlmIChvbGRGaWJlciAmJiBuZXdGaWJlci5hbHRlcm5hdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSBtYXRjaGVkIHRoZSBzbG90LCBidXQgd2UgZGlkbid0IHJldXNlIHRoZSBleGlzdGluZyBmaWJlciwgc28gd2VcbiAgICAgICAgICAvLyBuZWVkIHRvIGRlbGV0ZSB0aGUgZXhpc3RpbmcgY2hpbGQuXG4gICAgICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChuZXdGaWJlciwgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVE9ETzogTW92ZSBvdXQgb2YgdGhlIGxvb3AuIFRoaXMgb25seSBoYXBwZW5zIGZvciB0aGUgZmlyc3QgcnVuLlxuICAgICAgICByZXN1bHRpbmdGaXJzdENoaWxkID0gbmV3RmliZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUT0RPOiBEZWZlciBzaWJsaW5ncyBpZiB3ZSdyZSBub3QgYXQgdGhlIHJpZ2h0IGluZGV4IGZvciB0aGlzIHNsb3QuXG4gICAgICAgIC8vIEkuZS4gaWYgd2UgaGFkIG51bGwgdmFsdWVzIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIGRlZmVyIHRoaXNcbiAgICAgICAgLy8gZm9yIGVhY2ggbnVsbCB2YWx1ZS4gSG93ZXZlciwgd2UgYWxzbyBkb24ndCB3YW50IHRvIGNhbGwgdXBkYXRlU2xvdFxuICAgICAgICAvLyB3aXRoIHRoZSBwcmV2aW91cyBvbmUuXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IG5ld0ZpYmVyO1xuICAgICAgfVxuICAgICAgcHJldmlvdXNOZXdGaWJlciA9IG5ld0ZpYmVyO1xuICAgICAgb2xkRmliZXIgPSBuZXh0T2xkRmliZXI7XG4gICAgfVxuXG4gICAgaWYgKG5ld0lkeCA9PT0gbmV3Q2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAvLyBXZSd2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIG5ldyBjaGlsZHJlbi4gV2UgY2FuIGRlbGV0ZSB0aGUgcmVzdC5cbiAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9XG5cbiAgICBpZiAob2xkRmliZXIgPT09IG51bGwpIHtcbiAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYW55IG1vcmUgZXhpc3RpbmcgY2hpbGRyZW4gd2UgY2FuIGNob29zZSBhIGZhc3QgcGF0aFxuICAgICAgLy8gc2luY2UgdGhlIHJlc3Qgd2lsbCBhbGwgYmUgaW5zZXJ0aW9ucy5cbiAgICAgIGZvciAoOyBuZXdJZHggPCBuZXdDaGlsZHJlbi5sZW5ndGg7IG5ld0lkeCsrKSB7XG4gICAgICAgIHZhciBfbmV3RmliZXIgPSBjcmVhdGVDaGlsZChyZXR1cm5GaWJlciwgbmV3Q2hpbGRyZW5bbmV3SWR4XSwgZXhwaXJhdGlvblRpbWUpO1xuICAgICAgICBpZiAoIV9uZXdGaWJlcikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQoX25ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG4gICAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gVE9ETzogTW92ZSBvdXQgb2YgdGhlIGxvb3AuIFRoaXMgb25seSBoYXBwZW5zIGZvciB0aGUgZmlyc3QgcnVuLlxuICAgICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBfbmV3RmliZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gX25ld0ZpYmVyO1xuICAgICAgICB9XG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBfbmV3RmliZXI7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9XG5cbiAgICAvLyBBZGQgYWxsIGNoaWxkcmVuIHRvIGEga2V5IG1hcCBmb3IgcXVpY2sgbG9va3Vwcy5cbiAgICB2YXIgZXhpc3RpbmdDaGlsZHJlbiA9IG1hcFJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG5cbiAgICAvLyBLZWVwIHNjYW5uaW5nIGFuZCB1c2UgdGhlIG1hcCB0byByZXN0b3JlIGRlbGV0ZWQgaXRlbXMgYXMgbW92ZXMuXG4gICAgZm9yICg7IG5ld0lkeCA8IG5ld0NoaWxkcmVuLmxlbmd0aDsgbmV3SWR4KyspIHtcbiAgICAgIHZhciBfbmV3RmliZXIyID0gdXBkYXRlRnJvbU1hcChleGlzdGluZ0NoaWxkcmVuLCByZXR1cm5GaWJlciwgbmV3SWR4LCBuZXdDaGlsZHJlbltuZXdJZHhdLCBleHBpcmF0aW9uVGltZSk7XG4gICAgICBpZiAoX25ld0ZpYmVyMikge1xuICAgICAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgICAgIGlmIChfbmV3RmliZXIyLmFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gVGhlIG5ldyBmaWJlciBpcyBhIHdvcmsgaW4gcHJvZ3Jlc3MsIGJ1dCBpZiB0aGVyZSBleGlzdHMgYVxuICAgICAgICAgICAgLy8gY3VycmVudCwgdGhhdCBtZWFucyB0aGF0IHdlIHJldXNlZCB0aGUgZmliZXIuIFdlIG5lZWQgdG8gZGVsZXRlXG4gICAgICAgICAgICAvLyBpdCBmcm9tIHRoZSBjaGlsZCBsaXN0IHNvIHRoYXQgd2UgZG9uJ3QgYWRkIGl0IHRvIHRoZSBkZWxldGlvblxuICAgICAgICAgICAgLy8gbGlzdC5cbiAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uZGVsZXRlKF9uZXdGaWJlcjIua2V5ID09PSBudWxsID8gbmV3SWR4IDogX25ld0ZpYmVyMi5rZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKF9uZXdGaWJlcjIsIGxhc3RQbGFjZWRJbmRleCwgbmV3SWR4KTtcbiAgICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICByZXN1bHRpbmdGaXJzdENoaWxkID0gX25ld0ZpYmVyMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBfbmV3RmliZXIyO1xuICAgICAgICB9XG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBfbmV3RmliZXIyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAvLyBBbnkgZXhpc3RpbmcgY2hpbGRyZW4gdGhhdCB3ZXJlbid0IGNvbnN1bWVkIGFib3ZlIHdlcmUgZGVsZXRlZC4gV2UgbmVlZFxuICAgICAgLy8gdG8gYWRkIHRoZW0gdG8gdGhlIGRlbGV0aW9uIGxpc3QuXG4gICAgICBleGlzdGluZ0NoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIHJldHVybiBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbkl0ZXJhdG9yKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGRyZW5JdGVyYWJsZSwgZXhwaXJhdGlvblRpbWUpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBzYW1lIGltcGxlbWVudGF0aW9uIGFzIHJlY29uY2lsZUNoaWxkcmVuQXJyYXkoKSxcbiAgICAvLyBidXQgdXNpbmcgdGhlIGl0ZXJhdG9yIGluc3RlYWQuXG5cbiAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGRyZW5JdGVyYWJsZSk7XG4gICAgISh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykgPyBpbnZhcmlhbnQoZmFsc2UsICdBbiBvYmplY3QgaXMgbm90IGFuIGl0ZXJhYmxlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpIDogdm9pZCAwO1xuXG4gICAge1xuICAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCByZW5kZXJpbmcgR2VuZXJhdG9ycyBiZWNhdXNlIGl0J3MgYSBtdXRhdGlvbi5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEyOTk1XG4gICAgICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgLy8gJEZsb3dGaXhNZSBGbG93IGRvZXNuJ3Qga25vdyBhYm91dCB0b1N0cmluZ1RhZ1xuICAgICAgbmV3Q2hpbGRyZW5JdGVyYWJsZVtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnR2VuZXJhdG9yJykge1xuICAgICAgICAhZGlkV2FybkFib3V0R2VuZXJhdG9ycyA/IHdhcm5pbmckMShmYWxzZSwgJ1VzaW5nIEdlbmVyYXRvcnMgYXMgY2hpbGRyZW4gaXMgdW5zdXBwb3J0ZWQgYW5kIHdpbGwgbGlrZWx5IHlpZWxkICcgKyAndW5leHBlY3RlZCByZXN1bHRzIGJlY2F1c2UgZW51bWVyYXRpbmcgYSBnZW5lcmF0b3IgbXV0YXRlcyBpdC4gJyArICdZb3UgbWF5IGNvbnZlcnQgaXQgdG8gYW4gYXJyYXkgd2l0aCBgQXJyYXkuZnJvbSgpYCBvciB0aGUgJyArICdgWy4uLnNwcmVhZF1gIG9wZXJhdG9yIGJlZm9yZSByZW5kZXJpbmcuIEtlZXAgaW4gbWluZCAnICsgJ3lvdSBtaWdodCBuZWVkIHRvIHBvbHlmaWxsIHRoZXNlIGZlYXR1cmVzIGZvciBvbGRlciBicm93c2Vycy4nKSA6IHZvaWQgMDtcbiAgICAgICAgZGlkV2FybkFib3V0R2VuZXJhdG9ycyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIFdhcm4gYWJvdXQgdXNpbmcgTWFwcyBhcyBjaGlsZHJlblxuICAgICAgaWYgKG5ld0NoaWxkcmVuSXRlcmFibGUuZW50cmllcyA9PT0gaXRlcmF0b3JGbikge1xuICAgICAgICAhZGlkV2FybkFib3V0TWFwcyA/IHdhcm5pbmckMShmYWxzZSwgJ1VzaW5nIE1hcHMgYXMgY2hpbGRyZW4gaXMgdW5zdXBwb3J0ZWQgYW5kIHdpbGwgbGlrZWx5IHlpZWxkICcgKyAndW5leHBlY3RlZCByZXN1bHRzLiBDb252ZXJ0IGl0IHRvIGEgc2VxdWVuY2UvaXRlcmFibGUgb2Yga2V5ZWQgJyArICdSZWFjdEVsZW1lbnRzIGluc3RlYWQuJykgOiB2b2lkIDA7XG4gICAgICAgIGRpZFdhcm5BYm91dE1hcHMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBGaXJzdCwgdmFsaWRhdGUga2V5cy5cbiAgICAgIC8vIFdlJ2xsIGdldCBhIGRpZmZlcmVudCBpdGVyYXRvciBsYXRlciBmb3IgdGhlIG1haW4gcGFzcy5cbiAgICAgIHZhciBfbmV3Q2hpbGRyZW4gPSBpdGVyYXRvckZuLmNhbGwobmV3Q2hpbGRyZW5JdGVyYWJsZSk7XG4gICAgICBpZiAoX25ld0NoaWxkcmVuKSB7XG4gICAgICAgIHZhciBrbm93bktleXMgPSBudWxsO1xuICAgICAgICB2YXIgX3N0ZXAgPSBfbmV3Q2hpbGRyZW4ubmV4dCgpO1xuICAgICAgICBmb3IgKDsgIV9zdGVwLmRvbmU7IF9zdGVwID0gX25ld0NoaWxkcmVuLm5leHQoKSkge1xuICAgICAgICAgIHZhciBjaGlsZCA9IF9zdGVwLnZhbHVlO1xuICAgICAgICAgIGtub3duS2V5cyA9IHdhcm5PbkludmFsaWRLZXkoY2hpbGQsIGtub3duS2V5cyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbmV3Q2hpbGRyZW4gPSBpdGVyYXRvckZuLmNhbGwobmV3Q2hpbGRyZW5JdGVyYWJsZSk7XG4gICAgIShuZXdDaGlsZHJlbiAhPSBudWxsKSA/IGludmFyaWFudChmYWxzZSwgJ0FuIGl0ZXJhYmxlIG9iamVjdCBwcm92aWRlZCBubyBpdGVyYXRvci4nKSA6IHZvaWQgMDtcblxuICAgIHZhciByZXN1bHRpbmdGaXJzdENoaWxkID0gbnVsbDtcbiAgICB2YXIgcHJldmlvdXNOZXdGaWJlciA9IG51bGw7XG5cbiAgICB2YXIgb2xkRmliZXIgPSBjdXJyZW50Rmlyc3RDaGlsZDtcbiAgICB2YXIgbGFzdFBsYWNlZEluZGV4ID0gMDtcbiAgICB2YXIgbmV3SWR4ID0gMDtcbiAgICB2YXIgbmV4dE9sZEZpYmVyID0gbnVsbDtcblxuICAgIHZhciBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpO1xuICAgIGZvciAoOyBvbGRGaWJlciAhPT0gbnVsbCAmJiAhc3RlcC5kb25lOyBuZXdJZHgrKywgc3RlcCA9IG5ld0NoaWxkcmVuLm5leHQoKSkge1xuICAgICAgaWYgKG9sZEZpYmVyLmluZGV4ID4gbmV3SWR4KSB7XG4gICAgICAgIG5leHRPbGRGaWJlciA9IG9sZEZpYmVyO1xuICAgICAgICBvbGRGaWJlciA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0T2xkRmliZXIgPSBvbGRGaWJlci5zaWJsaW5nO1xuICAgICAgfVxuICAgICAgdmFyIG5ld0ZpYmVyID0gdXBkYXRlU2xvdChyZXR1cm5GaWJlciwgb2xkRmliZXIsIHN0ZXAudmFsdWUsIGV4cGlyYXRpb25UaW1lKTtcbiAgICAgIGlmIChuZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAvLyBUT0RPOiBUaGlzIGJyZWFrcyBvbiBlbXB0eSBzbG90cyBsaWtlIG51bGwgY2hpbGRyZW4uIFRoYXQnc1xuICAgICAgICAvLyB1bmZvcnR1bmF0ZSBiZWNhdXNlIGl0IHRyaWdnZXJzIHRoZSBzbG93IHBhdGggYWxsIHRoZSB0aW1lLiBXZSBuZWVkXG4gICAgICAgIC8vIGEgYmV0dGVyIHdheSB0byBjb21tdW5pY2F0ZSB3aGV0aGVyIHRoaXMgd2FzIGEgbWlzcyBvciBudWxsLFxuICAgICAgICAvLyBib29sZWFuLCB1bmRlZmluZWQsIGV0Yy5cbiAgICAgICAgaWYgKCFvbGRGaWJlcikge1xuICAgICAgICAgIG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgICAgaWYgKG9sZEZpYmVyICYmIG5ld0ZpYmVyLmFsdGVybmF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlIG1hdGNoZWQgdGhlIHNsb3QsIGJ1dCB3ZSBkaWRuJ3QgcmV1c2UgdGhlIGV4aXN0aW5nIGZpYmVyLCBzbyB3ZVxuICAgICAgICAgIC8vIG5lZWQgdG8gZGVsZXRlIHRoZSBleGlzdGluZyBjaGlsZC5cbiAgICAgICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgb2xkRmliZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKG5ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG4gICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAvLyBUT0RPOiBNb3ZlIG91dCBvZiB0aGUgbG9vcC4gVGhpcyBvbmx5IGhhcHBlbnMgZm9yIHRoZSBmaXJzdCBydW4uXG4gICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBuZXdGaWJlcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRPRE86IERlZmVyIHNpYmxpbmdzIGlmIHdlJ3JlIG5vdCBhdCB0aGUgcmlnaHQgaW5kZXggZm9yIHRoaXMgc2xvdC5cbiAgICAgICAgLy8gSS5lLiBpZiB3ZSBoYWQgbnVsbCB2YWx1ZXMgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gZGVmZXIgdGhpc1xuICAgICAgICAvLyBmb3IgZWFjaCBudWxsIHZhbHVlLiBIb3dldmVyLCB3ZSBhbHNvIGRvbid0IHdhbnQgdG8gY2FsbCB1cGRhdGVTbG90XG4gICAgICAgIC8vIHdpdGggdGhlIHByZXZpb3VzIG9uZS5cbiAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gbmV3RmliZXI7XG4gICAgICB9XG4gICAgICBwcmV2aW91c05ld0ZpYmVyID0gbmV3RmliZXI7XG4gICAgICBvbGRGaWJlciA9IG5leHRPbGRGaWJlcjtcbiAgICB9XG5cbiAgICBpZiAoc3RlcC5kb25lKSB7XG4gICAgICAvLyBXZSd2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIG5ldyBjaGlsZHJlbi4gV2UgY2FuIGRlbGV0ZSB0aGUgcmVzdC5cbiAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9XG5cbiAgICBpZiAob2xkRmliZXIgPT09IG51bGwpIHtcbiAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYW55IG1vcmUgZXhpc3RpbmcgY2hpbGRyZW4gd2UgY2FuIGNob29zZSBhIGZhc3QgcGF0aFxuICAgICAgLy8gc2luY2UgdGhlIHJlc3Qgd2lsbCBhbGwgYmUgaW5zZXJ0aW9ucy5cbiAgICAgIGZvciAoOyAhc3RlcC5kb25lOyBuZXdJZHgrKywgc3RlcCA9IG5ld0NoaWxkcmVuLm5leHQoKSkge1xuICAgICAgICB2YXIgX25ld0ZpYmVyMyA9IGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCBzdGVwLnZhbHVlLCBleHBpcmF0aW9uVGltZSk7XG4gICAgICAgIGlmIChfbmV3RmliZXIzID09PSBudWxsKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChfbmV3RmliZXIzLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG4gICAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gVE9ETzogTW92ZSBvdXQgb2YgdGhlIGxvb3AuIFRoaXMgb25seSBoYXBwZW5zIGZvciB0aGUgZmlyc3QgcnVuLlxuICAgICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBfbmV3RmliZXIzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IF9uZXdGaWJlcjM7XG4gICAgICAgIH1cbiAgICAgICAgcHJldmlvdXNOZXdGaWJlciA9IF9uZXdGaWJlcjM7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9XG5cbiAgICAvLyBBZGQgYWxsIGNoaWxkcmVuIHRvIGEga2V5IG1hcCBmb3IgcXVpY2sgbG9va3Vwcy5cbiAgICB2YXIgZXhpc3RpbmdDaGlsZHJlbiA9IG1hcFJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG5cbiAgICAvLyBLZWVwIHNjYW5uaW5nIGFuZCB1c2UgdGhlIG1hcCB0byByZXN0b3JlIGRlbGV0ZWQgaXRlbXMgYXMgbW92ZXMuXG4gICAgZm9yICg7ICFzdGVwLmRvbmU7IG5ld0lkeCsrLCBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpKSB7XG4gICAgICB2YXIgX25ld0ZpYmVyNCA9IHVwZGF0ZUZyb21NYXAoZXhpc3RpbmdDaGlsZHJlbiwgcmV0dXJuRmliZXIsIG5ld0lkeCwgc3RlcC52YWx1ZSwgZXhwaXJhdGlvblRpbWUpO1xuICAgICAgaWYgKF9uZXdGaWJlcjQgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgICAgICBpZiAoX25ld0ZpYmVyNC5hbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFRoZSBuZXcgZmliZXIgaXMgYSB3b3JrIGluIHByb2dyZXNzLCBidXQgaWYgdGhlcmUgZXhpc3RzIGFcbiAgICAgICAgICAgIC8vIGN1cnJlbnQsIHRoYXQgbWVhbnMgdGhhdCB3ZSByZXVzZWQgdGhlIGZpYmVyLiBXZSBuZWVkIHRvIGRlbGV0ZVxuICAgICAgICAgICAgLy8gaXQgZnJvbSB0aGUgY2hpbGQgbGlzdCBzbyB0aGF0IHdlIGRvbid0IGFkZCBpdCB0byB0aGUgZGVsZXRpb25cbiAgICAgICAgICAgIC8vIGxpc3QuXG4gICAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLmRlbGV0ZShfbmV3RmliZXI0LmtleSA9PT0gbnVsbCA/IG5ld0lkeCA6IF9uZXdGaWJlcjQua2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChfbmV3RmliZXI0LCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG4gICAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IF9uZXdGaWJlcjQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gX25ld0ZpYmVyNDtcbiAgICAgICAgfVxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gX25ld0ZpYmVyNDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgLy8gQW55IGV4aXN0aW5nIGNoaWxkcmVuIHRoYXQgd2VyZW4ndCBjb25zdW1lZCBhYm92ZSB3ZXJlIGRlbGV0ZWQuIFdlIG5lZWRcbiAgICAgIC8vIHRvIGFkZCB0aGVtIHRvIHRoZSBkZWxldGlvbiBsaXN0LlxuICAgICAgZXhpc3RpbmdDaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICByZXR1cm4gZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVjb25jaWxlU2luZ2xlVGV4dE5vZGUocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCB0ZXh0Q29udGVudCwgZXhwaXJhdGlvblRpbWUpIHtcbiAgICAvLyBUaGVyZSdzIG5vIG5lZWQgdG8gY2hlY2sgZm9yIGtleXMgb24gdGV4dCBub2RlcyBzaW5jZSB3ZSBkb24ndCBoYXZlIGFcbiAgICAvLyB3YXkgdG8gZGVmaW5lIHRoZW0uXG4gICAgaWYgKGN1cnJlbnRGaXJzdENoaWxkICE9PSBudWxsICYmIGN1cnJlbnRGaXJzdENoaWxkLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBub2RlIHNvIGxldCdzIGp1c3QgdXBkYXRlIGl0IGFuZCBkZWxldGVcbiAgICAgIC8vIHRoZSByZXN0LlxuICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLnNpYmxpbmcpO1xuICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY3VycmVudEZpcnN0Q2hpbGQsIHRleHRDb250ZW50LCBleHBpcmF0aW9uVGltZSk7XG4gICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBleGlzdGluZztcbiAgICB9XG4gICAgLy8gVGhlIGV4aXN0aW5nIGZpcnN0IGNoaWxkIGlzIG5vdCBhIHRleHQgbm9kZSBzbyB3ZSBuZWVkIHRvIGNyZWF0ZSBvbmVcbiAgICAvLyBhbmQgZGVsZXRlIHRoZSBleGlzdGluZyBvbmVzLlxuICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCk7XG4gICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21UZXh0KHRleHRDb250ZW50LCByZXR1cm5GaWJlci5tb2RlLCBleHBpcmF0aW9uVGltZSk7XG4gICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICByZXR1cm4gY3JlYXRlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlY29uY2lsZVNpbmdsZUVsZW1lbnQocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBlbGVtZW50LCBleHBpcmF0aW9uVGltZSkge1xuICAgIHZhciBrZXkgPSBlbGVtZW50LmtleTtcbiAgICB2YXIgY2hpbGQgPSBjdXJyZW50Rmlyc3RDaGlsZDtcbiAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIC8vIFRPRE86IElmIGtleSA9PT0gbnVsbCBhbmQgY2hpbGQua2V5ID09PSBudWxsLCB0aGVuIHRoaXMgb25seSBhcHBsaWVzIHRvXG4gICAgICAvLyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdC5cbiAgICAgIGlmIChjaGlsZC5rZXkgPT09IGtleSkge1xuICAgICAgICBpZiAoY2hpbGQudGFnID09PSBGcmFnbWVudCA/IGVsZW1lbnQudHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSA6IGNoaWxkLmVsZW1lbnRUeXBlID09PSBlbGVtZW50LnR5cGUpIHtcbiAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY2hpbGQuc2libGluZyk7XG4gICAgICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY2hpbGQsIGVsZW1lbnQudHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSA/IGVsZW1lbnQucHJvcHMuY2hpbGRyZW4gOiBlbGVtZW50LnByb3BzLCBleHBpcmF0aW9uVGltZSk7XG4gICAgICAgICAgZXhpc3RpbmcucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBjaGlsZCwgZWxlbWVudCk7XG4gICAgICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAge1xuICAgICAgICAgICAgZXhpc3RpbmcuX2RlYnVnU291cmNlID0gZWxlbWVudC5fc291cmNlO1xuICAgICAgICAgICAgZXhpc3RpbmcuX2RlYnVnT3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICB9XG4gICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgfVxuXG4gICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSkge1xuICAgICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChlbGVtZW50LnByb3BzLmNoaWxkcmVuLCByZXR1cm5GaWJlci5tb2RlLCBleHBpcmF0aW9uVGltZSwgZWxlbWVudC5rZXkpO1xuICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBjcmVhdGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgX2NyZWF0ZWQ0ID0gY3JlYXRlRmliZXJGcm9tRWxlbWVudChlbGVtZW50LCByZXR1cm5GaWJlci5tb2RlLCBleHBpcmF0aW9uVGltZSk7XG4gICAgICBfY3JlYXRlZDQucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgZWxlbWVudCk7XG4gICAgICBfY3JlYXRlZDQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gX2NyZWF0ZWQ0O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlY29uY2lsZVNpbmdsZVBvcnRhbChyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIHBvcnRhbCwgZXhwaXJhdGlvblRpbWUpIHtcbiAgICB2YXIga2V5ID0gcG9ydGFsLmtleTtcbiAgICB2YXIgY2hpbGQgPSBjdXJyZW50Rmlyc3RDaGlsZDtcbiAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIC8vIFRPRE86IElmIGtleSA9PT0gbnVsbCBhbmQgY2hpbGQua2V5ID09PSBudWxsLCB0aGVuIHRoaXMgb25seSBhcHBsaWVzIHRvXG4gICAgICAvLyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdC5cbiAgICAgIGlmIChjaGlsZC5rZXkgPT09IGtleSkge1xuICAgICAgICBpZiAoY2hpbGQudGFnID09PSBIb3N0UG9ydGFsICYmIGNoaWxkLnN0YXRlTm9kZS5jb250YWluZXJJbmZvID09PSBwb3J0YWwuY29udGFpbmVySW5mbyAmJiBjaGlsZC5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24gPT09IHBvcnRhbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZC5zaWJsaW5nKTtcbiAgICAgICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjaGlsZCwgcG9ydGFsLmNoaWxkcmVuIHx8IFtdLCBleHBpcmF0aW9uVGltZSk7XG4gICAgICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICB9XG4gICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgfVxuXG4gICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21Qb3J0YWwocG9ydGFsLCByZXR1cm5GaWJlci5tb2RlLCBleHBpcmF0aW9uVGltZSk7XG4gICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICByZXR1cm4gY3JlYXRlZDtcbiAgfVxuXG4gIC8vIFRoaXMgQVBJIHdpbGwgdGFnIHRoZSBjaGlsZHJlbiB3aXRoIHRoZSBzaWRlLWVmZmVjdCBvZiB0aGUgcmVjb25jaWxpYXRpb25cbiAgLy8gaXRzZWxmLiBUaGV5IHdpbGwgYmUgYWRkZWQgdG8gdGhlIHNpZGUtZWZmZWN0IGxpc3QgYXMgd2UgcGFzcyB0aHJvdWdoIHRoZVxuICAvLyBjaGlsZHJlbiBhbmQgdGhlIHBhcmVudC5cbiAgZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRGaWJlcnMocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZCwgZXhwaXJhdGlvblRpbWUpIHtcbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIG5vdCByZWN1cnNpdmUuXG4gICAgLy8gSWYgdGhlIHRvcCBsZXZlbCBpdGVtIGlzIGFuIGFycmF5LCB3ZSB0cmVhdCBpdCBhcyBhIHNldCBvZiBjaGlsZHJlbixcbiAgICAvLyBub3QgYXMgYSBmcmFnbWVudC4gTmVzdGVkIGFycmF5cyBvbiB0aGUgb3RoZXIgaGFuZCB3aWxsIGJlIHRyZWF0ZWQgYXNcbiAgICAvLyBmcmFnbWVudCBub2Rlcy4gUmVjdXJzaW9uIGhhcHBlbnMgYXQgdGhlIG5vcm1hbCBmbG93LlxuXG4gICAgLy8gSGFuZGxlIHRvcCBsZXZlbCB1bmtleWVkIGZyYWdtZW50cyBhcyBpZiB0aGV5IHdlcmUgYXJyYXlzLlxuICAgIC8vIFRoaXMgbGVhZHMgdG8gYW4gYW1iaWd1aXR5IGJldHdlZW4gPD57Wy4uLl19PC8+IGFuZCA8Pi4uLjwvPi5cbiAgICAvLyBXZSB0cmVhdCB0aGUgYW1iaWd1b3VzIGNhc2VzIGFib3ZlIHRoZSBzYW1lLlxuICAgIHZhciBpc1Vua2V5ZWRUb3BMZXZlbEZyYWdtZW50ID0gdHlwZW9mIG5ld0NoaWxkID09PSAnb2JqZWN0JyAmJiBuZXdDaGlsZCAhPT0gbnVsbCAmJiBuZXdDaGlsZC50eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFICYmIG5ld0NoaWxkLmtleSA9PT0gbnVsbDtcbiAgICBpZiAoaXNVbmtleWVkVG9wTGV2ZWxGcmFnbWVudCkge1xuICAgICAgbmV3Q2hpbGQgPSBuZXdDaGlsZC5wcm9wcy5jaGlsZHJlbjtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgb2JqZWN0IHR5cGVzXG4gICAgdmFyIGlzT2JqZWN0ID0gdHlwZW9mIG5ld0NoaWxkID09PSAnb2JqZWN0JyAmJiBuZXdDaGlsZCAhPT0gbnVsbDtcblxuICAgIGlmIChpc09iamVjdCkge1xuICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICByZXR1cm4gcGxhY2VTaW5nbGVDaGlsZChyZWNvbmNpbGVTaW5nbGVFbGVtZW50KHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGQsIGV4cGlyYXRpb25UaW1lKSk7XG4gICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIHBsYWNlU2luZ2xlQ2hpbGQocmVjb25jaWxlU2luZ2xlUG9ydGFsKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGQsIGV4cGlyYXRpb25UaW1lKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5ld0NoaWxkID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIHBsYWNlU2luZ2xlQ2hpbGQocmVjb25jaWxlU2luZ2xlVGV4dE5vZGUocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCAnJyArIG5ld0NoaWxkLCBleHBpcmF0aW9uVGltZSkpO1xuICAgIH1cblxuICAgIGlmIChpc0FycmF5KG5ld0NoaWxkKSkge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZUNoaWxkcmVuQXJyYXkocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZCwgZXhwaXJhdGlvblRpbWUpO1xuICAgIH1cblxuICAgIGlmIChnZXRJdGVyYXRvckZuKG5ld0NoaWxkKSkge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZUNoaWxkcmVuSXRlcmF0b3IocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZCwgZXhwaXJhdGlvblRpbWUpO1xuICAgIH1cblxuICAgIGlmIChpc09iamVjdCkge1xuICAgICAgdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3YXJuT25GdW5jdGlvblR5cGUoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3VuZGVmaW5lZCcgJiYgIWlzVW5rZXllZFRvcExldmVsRnJhZ21lbnQpIHtcbiAgICAgIC8vIElmIHRoZSBuZXcgY2hpbGQgaXMgdW5kZWZpbmVkLCBhbmQgdGhlIHJldHVybiBmaWJlciBpcyBhIGNvbXBvc2l0ZVxuICAgICAgLy8gY29tcG9uZW50LCB0aHJvdyBhbiBlcnJvci4gSWYgRmliZXIgcmV0dXJuIHR5cGVzIGFyZSBkaXNhYmxlZCxcbiAgICAgIC8vIHdlIGFscmVhZHkgdGhyZXcgYWJvdmUuXG4gICAgICBzd2l0Y2ggKHJldHVybkZpYmVyLnRhZykge1xuICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gcmV0dXJuRmliZXIuc3RhdGVOb2RlO1xuICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UucmVuZGVyLl9pc01vY2tGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgIC8vIFdlIGFsbG93IGF1dG8tbW9ja3MgdG8gcHJvY2VlZCBhcyBpZiB0aGV5J3JlIHJldHVybmluZyBudWxsLlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAvLyBJbnRlbnRpb25hbGx5IGZhbGwgdGhyb3VnaCB0byB0aGUgbmV4dCBjYXNlLCB3aGljaCBoYW5kbGVzIGJvdGhcbiAgICAgICAgLy8gZnVuY3Rpb25zIGFuZCBjbGFzc2VzXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZWQgbm8tZmFsbHRocm91Z2hcbiAgICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgQ29tcG9uZW50ID0gcmV0dXJuRmliZXIudHlwZTtcbiAgICAgICAgICAgIGludmFyaWFudChmYWxzZSwgJyVzKC4uLik6IE5vdGhpbmcgd2FzIHJldHVybmVkIGZyb20gcmVuZGVyLiBUaGlzIHVzdWFsbHkgbWVhbnMgYSByZXR1cm4gc3RhdGVtZW50IGlzIG1pc3NpbmcuIE9yLCB0byByZW5kZXIgbm90aGluZywgcmV0dXJuIG51bGwuJywgQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnQnKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVtYWluaW5nIGNhc2VzIGFyZSBhbGwgdHJlYXRlZCBhcyBlbXB0eS5cbiAgICByZXR1cm4gZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKTtcbiAgfVxuXG4gIHJldHVybiByZWNvbmNpbGVDaGlsZEZpYmVycztcbn1cblxudmFyIHJlY29uY2lsZUNoaWxkRmliZXJzID0gQ2hpbGRSZWNvbmNpbGVyKHRydWUpO1xudmFyIG1vdW50Q2hpbGRGaWJlcnMgPSBDaGlsZFJlY29uY2lsZXIoZmFsc2UpO1xuXG5mdW5jdGlvbiBjbG9uZUNoaWxkRmliZXJzKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzKSB7XG4gICEoY3VycmVudCQkMSA9PT0gbnVsbCB8fCB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9PT0gY3VycmVudCQkMS5jaGlsZCkgPyBpbnZhcmlhbnQoZmFsc2UsICdSZXN1bWluZyB3b3JrIG5vdCB5ZXQgaW1wbGVtZW50ZWQuJykgOiB2b2lkIDA7XG5cbiAgaWYgKHdvcmtJblByb2dyZXNzLmNoaWxkID09PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGN1cnJlbnRDaGlsZCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICB2YXIgbmV3Q2hpbGQgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50Q2hpbGQsIGN1cnJlbnRDaGlsZC5wZW5kaW5nUHJvcHMsIGN1cnJlbnRDaGlsZC5leHBpcmF0aW9uVGltZSk7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbmV3Q2hpbGQ7XG5cbiAgbmV3Q2hpbGQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHdoaWxlIChjdXJyZW50Q2hpbGQuc2libGluZyAhPT0gbnVsbCkge1xuICAgIGN1cnJlbnRDaGlsZCA9IGN1cnJlbnRDaGlsZC5zaWJsaW5nO1xuICAgIG5ld0NoaWxkID0gbmV3Q2hpbGQuc2libGluZyA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnRDaGlsZCwgY3VycmVudENoaWxkLnBlbmRpbmdQcm9wcywgY3VycmVudENoaWxkLmV4cGlyYXRpb25UaW1lKTtcbiAgICBuZXdDaGlsZC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgfVxuICBuZXdDaGlsZC5zaWJsaW5nID0gbnVsbDtcbn1cblxudmFyIE5PX0NPTlRFWFQgPSB7fTtcblxudmFyIGNvbnRleHRTdGFja0N1cnNvciQxID0gY3JlYXRlQ3Vyc29yKE5PX0NPTlRFWFQpO1xudmFyIGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKE5PX0NPTlRFWFQpO1xudmFyIHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKE5PX0NPTlRFWFQpO1xuXG5mdW5jdGlvbiByZXF1aXJlZENvbnRleHQoYykge1xuICAhKGMgIT09IE5PX0NPTlRFWFQpID8gaW52YXJpYW50KGZhbHNlLCAnRXhwZWN0ZWQgaG9zdCBjb250ZXh0IHRvIGV4aXN0LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpIDogdm9pZCAwO1xuICByZXR1cm4gYztcbn1cblxuZnVuY3Rpb24gZ2V0Um9vdEhvc3RDb250YWluZXIoKSB7XG4gIHZhciByb290SW5zdGFuY2UgPSByZXF1aXJlZENvbnRleHQocm9vdEluc3RhbmNlU3RhY2tDdXJzb3IuY3VycmVudCk7XG4gIHJldHVybiByb290SW5zdGFuY2U7XG59XG5cbmZ1bmN0aW9uIHB1c2hIb3N0Q29udGFpbmVyKGZpYmVyLCBuZXh0Um9vdEluc3RhbmNlKSB7XG4gIC8vIFB1c2ggY3VycmVudCByb290IGluc3RhbmNlIG9udG8gdGhlIHN0YWNrO1xuICAvLyBUaGlzIGFsbG93cyB1cyB0byByZXNldCByb290IHdoZW4gcG9ydGFscyBhcmUgcG9wcGVkLlxuICBwdXNoKHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLCBuZXh0Um9vdEluc3RhbmNlLCBmaWJlcik7XG4gIC8vIFRyYWNrIHRoZSBjb250ZXh0IGFuZCB0aGUgRmliZXIgdGhhdCBwcm92aWRlZCBpdC5cbiAgLy8gVGhpcyBlbmFibGVzIHVzIHRvIHBvcCBvbmx5IEZpYmVycyB0aGF0IHByb3ZpZGUgdW5pcXVlIGNvbnRleHRzLlxuICBwdXNoKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLCBmaWJlciwgZmliZXIpO1xuXG4gIC8vIEZpbmFsbHksIHdlIG5lZWQgdG8gcHVzaCB0aGUgaG9zdCBjb250ZXh0IHRvIHRoZSBzdGFjay5cbiAgLy8gSG93ZXZlciwgd2UgY2FuJ3QganVzdCBjYWxsIGdldFJvb3RIb3N0Q29udGV4dCgpIGFuZCBwdXNoIGl0IGJlY2F1c2VcbiAgLy8gd2UnZCBoYXZlIGEgZGlmZmVyZW50IG51bWJlciBvZiBlbnRyaWVzIG9uIHRoZSBzdGFjayBkZXBlbmRpbmcgb25cbiAgLy8gd2hldGhlciBnZXRSb290SG9zdENvbnRleHQoKSB0aHJvd3Mgc29tZXdoZXJlIGluIHJlbmRlcmVyIGNvZGUgb3Igbm90LlxuICAvLyBTbyB3ZSBwdXNoIGFuIGVtcHR5IHZhbHVlIGZpcnN0LiBUaGlzIGxldHMgdXMgc2FmZWx5IHVud2luZCBvbiBlcnJvcnMuXG4gIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yJDEsIE5PX0NPTlRFWFQsIGZpYmVyKTtcbiAgdmFyIG5leHRSb290Q29udGV4dCA9IGdldFJvb3RIb3N0Q29udGV4dChuZXh0Um9vdEluc3RhbmNlKTtcbiAgLy8gTm93IHRoYXQgd2Uga25vdyB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgdGhyb3csIHJlcGxhY2UgaXQuXG4gIHBvcChjb250ZXh0U3RhY2tDdXJzb3IkMSwgZmliZXIpO1xuICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciQxLCBuZXh0Um9vdENvbnRleHQsIGZpYmVyKTtcbn1cblxuZnVuY3Rpb24gcG9wSG9zdENvbnRhaW5lcihmaWJlcikge1xuICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yJDEsIGZpYmVyKTtcbiAgcG9wKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gIHBvcChyb290SW5zdGFuY2VTdGFja0N1cnNvciwgZmliZXIpO1xufVxuXG5mdW5jdGlvbiBnZXRIb3N0Q29udGV4dCgpIHtcbiAgdmFyIGNvbnRleHQgPSByZXF1aXJlZENvbnRleHQoY29udGV4dFN0YWNrQ3Vyc29yJDEuY3VycmVudCk7XG4gIHJldHVybiBjb250ZXh0O1xufVxuXG5mdW5jdGlvbiBwdXNoSG9zdENvbnRleHQoZmliZXIpIHtcbiAgdmFyIHJvb3RJbnN0YW5jZSA9IHJlcXVpcmVkQ29udGV4dChyb290SW5zdGFuY2VTdGFja0N1cnNvci5jdXJyZW50KTtcbiAgdmFyIGNvbnRleHQgPSByZXF1aXJlZENvbnRleHQoY29udGV4dFN0YWNrQ3Vyc29yJDEuY3VycmVudCk7XG4gIHZhciBuZXh0Q29udGV4dCA9IGdldENoaWxkSG9zdENvbnRleHQoY29udGV4dCwgZmliZXIudHlwZSwgcm9vdEluc3RhbmNlKTtcblxuICAvLyBEb24ndCBwdXNoIHRoaXMgRmliZXIncyBjb250ZXh0IHVubGVzcyBpdCdzIHVuaXF1ZS5cbiAgaWYgKGNvbnRleHQgPT09IG5leHRDb250ZXh0KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gVHJhY2sgdGhlIGNvbnRleHQgYW5kIHRoZSBGaWJlciB0aGF0IHByb3ZpZGVkIGl0LlxuICAvLyBUaGlzIGVuYWJsZXMgdXMgdG8gcG9wIG9ubHkgRmliZXJzIHRoYXQgcHJvdmlkZSB1bmlxdWUgY29udGV4dHMuXG4gIHB1c2goY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyLCBmaWJlcik7XG4gIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yJDEsIG5leHRDb250ZXh0LCBmaWJlcik7XG59XG5cbmZ1bmN0aW9uIHBvcEhvc3RDb250ZXh0KGZpYmVyKSB7XG4gIC8vIERvIG5vdCBwb3AgdW5sZXNzIHRoaXMgRmliZXIgcHJvdmlkZWQgdGhlIGN1cnJlbnQgY29udGV4dC5cbiAgLy8gcHVzaEhvc3RDb250ZXh0KCkgb25seSBwdXNoZXMgRmliZXJzIHRoYXQgcHJvdmlkZSB1bmlxdWUgY29udGV4dHMuXG4gIGlmIChjb250ZXh0RmliZXJTdGFja0N1cnNvci5jdXJyZW50ICE9PSBmaWJlcikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHBvcChjb250ZXh0U3RhY2tDdXJzb3IkMSwgZmliZXIpO1xuICBwb3AoY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyKTtcbn1cblxudmFyIE5vRWZmZWN0JDEgPSAvKiAgICAgICAgICAgICAqLzA7XG52YXIgVW5tb3VudFNuYXBzaG90ID0gLyogICAgICAqLzI7XG52YXIgVW5tb3VudE11dGF0aW9uID0gLyogICAgICAqLzQ7XG52YXIgTW91bnRNdXRhdGlvbiA9IC8qICAgICAgICAqLzg7XG52YXIgVW5tb3VudExheW91dCA9IC8qICAgICAgICAqLzE2O1xudmFyIE1vdW50TGF5b3V0ID0gLyogICAgICAgICAgKi8zMjtcbnZhciBNb3VudFBhc3NpdmUgPSAvKiAgICAgICAgICovNjQ7XG52YXIgVW5tb3VudFBhc3NpdmUgPSAvKiAgICAgICAqLzEyODtcblxudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXI7XG5cblxudmFyIGRpZFdhcm5BYm91dE1pc21hdGNoZWRIb29rc0ZvckNvbXBvbmVudCA9IHZvaWQgMDtcbntcbiAgZGlkV2FybkFib3V0TWlzbWF0Y2hlZEhvb2tzRm9yQ29tcG9uZW50ID0gbmV3IFNldCgpO1xufVxuXG4vLyBUaGVzZSBhcmUgc2V0IHJpZ2h0IGJlZm9yZSBjYWxsaW5nIHRoZSBjb21wb25lbnQuXG52YXIgcmVuZGVyRXhwaXJhdGlvblRpbWUgPSBOb1dvcms7XG4vLyBUaGUgd29yay1pbi1wcm9ncmVzcyBmaWJlci4gSSd2ZSBuYW1lZCBpdCBkaWZmZXJlbnRseSB0byBkaXN0aW5ndWlzaCBpdCBmcm9tXG4vLyB0aGUgd29yay1pbi1wcm9ncmVzcyBob29rLlxudmFyIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSBudWxsO1xuXG4vLyBIb29rcyBhcmUgc3RvcmVkIGFzIGEgbGlua2VkIGxpc3Qgb24gdGhlIGZpYmVyJ3MgbWVtb2l6ZWRTdGF0ZSBmaWVsZC4gVGhlXG4vLyBjdXJyZW50IGhvb2sgbGlzdCBpcyB0aGUgbGlzdCB0aGF0IGJlbG9uZ3MgdG8gdGhlIGN1cnJlbnQgZmliZXIuIFRoZVxuLy8gd29yay1pbi1wcm9ncmVzcyBob29rIGxpc3QgaXMgYSBuZXcgbGlzdCB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlXG4vLyB3b3JrLWluLXByb2dyZXNzIGZpYmVyLlxudmFyIGN1cnJlbnRIb29rID0gbnVsbDtcbnZhciBuZXh0Q3VycmVudEhvb2sgPSBudWxsO1xudmFyIGZpcnN0V29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDtcbnZhciB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsO1xudmFyIG5leHRXb3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsO1xuXG52YXIgcmVtYWluaW5nRXhwaXJhdGlvblRpbWUgPSBOb1dvcms7XG52YXIgY29tcG9uZW50VXBkYXRlUXVldWUgPSBudWxsO1xudmFyIHNpZGVFZmZlY3RUYWcgPSAwO1xuXG4vLyBVcGRhdGVzIHNjaGVkdWxlZCBkdXJpbmcgcmVuZGVyIHdpbGwgdHJpZ2dlciBhbiBpbW1lZGlhdGUgcmUtcmVuZGVyIGF0IHRoZVxuLy8gZW5kIG9mIHRoZSBjdXJyZW50IHBhc3MuIFdlIGNhbid0IHN0b3JlIHRoZXNlIHVwZGF0ZXMgb24gdGhlIG5vcm1hbCBxdWV1ZSxcbi8vIGJlY2F1c2UgaWYgdGhlIHdvcmsgaXMgYWJvcnRlZCwgdGhleSBzaG91bGQgYmUgZGlzY2FyZGVkLiBCZWNhdXNlIHRoaXMgaXNcbi8vIGEgcmVsYXRpdmVseSByYXJlIGNhc2UsIHdlIGFsc28gZG9uJ3Qgd2FudCB0byBhZGQgYW4gYWRkaXRpb25hbCBmaWVsZCB0b1xuLy8gZWl0aGVyIHRoZSBob29rIG9yIHF1ZXVlIG9iamVjdCB0eXBlcy4gU28gd2Ugc3RvcmUgdGhlbSBpbiBhIGxhemlseSBjcmVhdGVcbi8vIG1hcCBvZiBxdWV1ZSAtPiByZW5kZXItcGhhc2UgdXBkYXRlcywgd2hpY2ggYXJlIGRpc2NhcmRlZCBvbmNlIHRoZSBjb21wb25lbnRcbi8vIGNvbXBsZXRlcyB3aXRob3V0IHJlLXJlbmRlcmluZy5cblxuLy8gV2hldGhlciBhbiB1cGRhdGUgd2FzIHNjaGVkdWxlZCBkdXJpbmcgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgcmVuZGVyIHBhc3MuXG52YXIgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9IGZhbHNlO1xuLy8gTGF6aWx5IGNyZWF0ZWQgbWFwIG9mIHJlbmRlci1waGFzZSB1cGRhdGVzXG52YXIgcmVuZGVyUGhhc2VVcGRhdGVzID0gbnVsbDtcbi8vIENvdW50ZXIgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcy5cbnZhciBudW1iZXJPZlJlUmVuZGVycyA9IDA7XG52YXIgUkVfUkVOREVSX0xJTUlUID0gMjU7XG5cbi8vIEluIERFViwgdGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBwcmltaXRpdmUgaG9va1xudmFyIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gbnVsbDtcblxuLy8gSW4gREVWLCB0aGlzIGxpc3QgZW5zdXJlcyB0aGF0IGhvb2tzIGFyZSBjYWxsZWQgaW4gdGhlIHNhbWUgb3JkZXIgYmV0d2VlbiByZW5kZXJzLlxuLy8gVGhlIGxpc3Qgc3RvcmVzIHRoZSBvcmRlciBvZiBob29rcyB1c2VkIGR1cmluZyB0aGUgaW5pdGlhbCByZW5kZXIgKG1vdW50KS5cbi8vIFN1YnNlcXVlbnQgcmVuZGVycyAodXBkYXRlcykgcmVmZXJlbmNlIHRoaXMgbGlzdC5cbnZhciBob29rVHlwZXNEZXYgPSBudWxsO1xudmFyIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7XG5cbmZ1bmN0aW9uIG1vdW50SG9va1R5cGVzRGV2KCkge1xuICB7XG4gICAgdmFyIGhvb2tOYW1lID0gY3VycmVudEhvb2tOYW1lSW5EZXY7XG5cbiAgICBpZiAoaG9va1R5cGVzRGV2ID09PSBudWxsKSB7XG4gICAgICBob29rVHlwZXNEZXYgPSBbaG9va05hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBob29rVHlwZXNEZXYucHVzaChob29rTmFtZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUhvb2tUeXBlc0RldigpIHtcbiAge1xuICAgIHZhciBob29rTmFtZSA9IGN1cnJlbnRIb29rTmFtZUluRGV2O1xuXG4gICAgaWYgKGhvb2tUeXBlc0RldiAhPT0gbnVsbCkge1xuICAgICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYrKztcbiAgICAgIGlmIChob29rVHlwZXNEZXZbaG9va1R5cGVzVXBkYXRlSW5kZXhEZXZdICE9PSBob29rTmFtZSkge1xuICAgICAgICB3YXJuT25Ib29rTWlzbWF0Y2hJbkRldihob29rTmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm5Pbkhvb2tNaXNtYXRjaEluRGV2KGN1cnJlbnRIb29rTmFtZSkge1xuICB7XG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEudHlwZSk7XG4gICAgaWYgKCFkaWRXYXJuQWJvdXRNaXNtYXRjaGVkSG9va3NGb3JDb21wb25lbnQuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICBkaWRXYXJuQWJvdXRNaXNtYXRjaGVkSG9va3NGb3JDb21wb25lbnQuYWRkKGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICBpZiAoaG9va1R5cGVzRGV2ICE9PSBudWxsKSB7XG4gICAgICAgIHZhciB0YWJsZSA9ICcnO1xuXG4gICAgICAgIHZhciBzZWNvbmRDb2x1bW5TdGFydCA9IDMwO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2OyBpKyspIHtcbiAgICAgICAgICB2YXIgb2xkSG9va05hbWUgPSBob29rVHlwZXNEZXZbaV07XG4gICAgICAgICAgdmFyIG5ld0hvb2tOYW1lID0gaSA9PT0gaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPyBjdXJyZW50SG9va05hbWUgOiBvbGRIb29rTmFtZTtcblxuICAgICAgICAgIHZhciByb3cgPSBpICsgMSArICcuICcgKyBvbGRIb29rTmFtZTtcblxuICAgICAgICAgIC8vIEV4dHJhIHNwYWNlIHNvIHNlY29uZCBjb2x1bW4gbGluZXMgdXBcbiAgICAgICAgICAvLyBsb2wgQCBJRSBub3Qgc3VwcG9ydGluZyBTdHJpbmcjcmVwZWF0XG4gICAgICAgICAgd2hpbGUgKHJvdy5sZW5ndGggPCBzZWNvbmRDb2x1bW5TdGFydCkge1xuICAgICAgICAgICAgcm93ICs9ICcgJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByb3cgKz0gbmV3SG9va05hbWUgKyAnXFxuJztcblxuICAgICAgICAgIHRhYmxlICs9IHJvdztcbiAgICAgICAgfVxuXG4gICAgICAgIHdhcm5pbmckMShmYWxzZSwgJ1JlYWN0IGhhcyBkZXRlY3RlZCBhIGNoYW5nZSBpbiB0aGUgb3JkZXIgb2YgSG9va3MgY2FsbGVkIGJ5ICVzLiAnICsgJ1RoaXMgd2lsbCBsZWFkIHRvIGJ1Z3MgYW5kIGVycm9ycyBpZiBub3QgZml4ZWQuICcgKyAnRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlYWQgdGhlIFJ1bGVzIG9mIEhvb2tzOiBodHRwczovL2ZiLm1lL3J1bGVzLW9mLWhvb2tzXFxuXFxuJyArICcgICBQcmV2aW91cyByZW5kZXIgICAgICAgICAgICBOZXh0IHJlbmRlclxcbicgKyAnICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuJyArICclcycgKyAnICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXFxuJywgY29tcG9uZW50TmFtZSwgdGFibGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd0ludmFsaWRIb29rRXJyb3IoKSB7XG4gIGludmFyaWFudChmYWxzZSwgJ0ludmFsaWQgaG9vayBjYWxsLiBIb29rcyBjYW4gb25seSBiZSBjYWxsZWQgaW5zaWRlIG9mIHRoZSBib2R5IG9mIGEgZnVuY3Rpb24gY29tcG9uZW50LiBUaGlzIGNvdWxkIGhhcHBlbiBmb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcXG4xLiBZb3UgbWlnaHQgaGF2ZSBtaXNtYXRjaGluZyB2ZXJzaW9ucyBvZiBSZWFjdCBhbmQgdGhlIHJlbmRlcmVyIChzdWNoIGFzIFJlYWN0IERPTSlcXG4yLiBZb3UgbWlnaHQgYmUgYnJlYWtpbmcgdGhlIFJ1bGVzIG9mIEhvb2tzXFxuMy4gWW91IG1pZ2h0IGhhdmUgbW9yZSB0aGFuIG9uZSBjb3B5IG9mIFJlYWN0IGluIHRoZSBzYW1lIGFwcFxcblNlZSBodHRwczovL2ZiLm1lL3JlYWN0LWludmFsaWQtaG9vay1jYWxsIGZvciB0aXBzIGFib3V0IGhvdyB0byBkZWJ1ZyBhbmQgZml4IHRoaXMgcHJvYmxlbS4nKTtcbn1cblxuZnVuY3Rpb24gYXJlSG9va0lucHV0c0VxdWFsKG5leHREZXBzLCBwcmV2RGVwcykge1xuICBpZiAocHJldkRlcHMgPT09IG51bGwpIHtcbiAgICB7XG4gICAgICB3YXJuaW5nJDEoZmFsc2UsICclcyByZWNlaXZlZCBhIGZpbmFsIGFyZ3VtZW50IGR1cmluZyB0aGlzIHJlbmRlciwgYnV0IG5vdCBkdXJpbmcgJyArICd0aGUgcHJldmlvdXMgcmVuZGVyLiBFdmVuIHRob3VnaCB0aGUgZmluYWwgYXJndW1lbnQgaXMgb3B0aW9uYWwsICcgKyAnaXRzIHR5cGUgY2Fubm90IGNoYW5nZSBiZXR3ZWVuIHJlbmRlcnMuJywgY3VycmVudEhvb2tOYW1lSW5EZXYpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB7XG4gICAgLy8gRG9uJ3QgYm90aGVyIGNvbXBhcmluZyBsZW5ndGhzIGluIHByb2QgYmVjYXVzZSB0aGVzZSBhcnJheXMgc2hvdWxkIGJlXG4gICAgLy8gcGFzc2VkIGlubGluZS5cbiAgICBpZiAobmV4dERlcHMubGVuZ3RoICE9PSBwcmV2RGVwcy5sZW5ndGgpIHtcbiAgICAgIHdhcm5pbmckMShmYWxzZSwgJ1RoZSBmaW5hbCBhcmd1bWVudCBwYXNzZWQgdG8gJXMgY2hhbmdlZCBzaXplIGJldHdlZW4gcmVuZGVycy4gVGhlICcgKyAnb3JkZXIgYW5kIHNpemUgb2YgdGhpcyBhcnJheSBtdXN0IHJlbWFpbiBjb25zdGFudC5cXG5cXG4nICsgJ1ByZXZpb3VzOiAlc1xcbicgKyAnSW5jb21pbmc6ICVzJywgY3VycmVudEhvb2tOYW1lSW5EZXYsICdbJyArIG5leHREZXBzLmpvaW4oJywgJykgKyAnXScsICdbJyArIHByZXZEZXBzLmpvaW4oJywgJykgKyAnXScpO1xuICAgIH1cbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHByZXZEZXBzLmxlbmd0aCAmJiBpIDwgbmV4dERlcHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoaXMobmV4dERlcHNbaV0sIHByZXZEZXBzW2ldKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyV2l0aEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCByZWZPckNvbnRleHQsIG5leHRSZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICByZW5kZXJFeHBpcmF0aW9uVGltZSA9IG5leHRSZW5kZXJFeHBpcmF0aW9uVGltZTtcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IHdvcmtJblByb2dyZXNzO1xuICBuZXh0Q3VycmVudEhvb2sgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5tZW1vaXplZFN0YXRlIDogbnVsbDtcblxuICB7XG4gICAgaG9va1R5cGVzRGV2ID0gY3VycmVudCAhPT0gbnVsbCA/IGN1cnJlbnQuX2RlYnVnSG9va1R5cGVzIDogbnVsbDtcbiAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xO1xuICB9XG5cbiAgLy8gVGhlIGZvbGxvd2luZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGJlZW4gcmVzZXRcbiAgLy8gY3VycmVudEhvb2sgPSBudWxsO1xuICAvLyB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsO1xuXG4gIC8vIHJlbWFpbmluZ0V4cGlyYXRpb25UaW1lID0gTm9Xb3JrO1xuICAvLyBjb21wb25lbnRVcGRhdGVRdWV1ZSA9IG51bGw7XG5cbiAgLy8gZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9IGZhbHNlO1xuICAvLyByZW5kZXJQaGFzZVVwZGF0ZXMgPSBudWxsO1xuICAvLyBudW1iZXJPZlJlUmVuZGVycyA9IDA7XG4gIC8vIHNpZGVFZmZlY3RUYWcgPSAwO1xuXG4gIC8vIFRPRE8gV2FybiBpZiBubyBob29rcyBhcmUgdXNlZCBhdCBhbGwgZHVyaW5nIG1vdW50LCB0aGVuIHNvbWUgYXJlIHVzZWQgZHVyaW5nIHVwZGF0ZS5cbiAgLy8gQ3VycmVudGx5IHdlIHdpbGwgaWRlbnRpZnkgdGhlIHVwZGF0ZSByZW5kZXIgYXMgYSBtb3VudCBiZWNhdXNlIG5leHRDdXJyZW50SG9vayA9PT0gbnVsbC5cbiAgLy8gVGhpcyBpcyB0cmlja3kgYmVjYXVzZSBpdCdzIHZhbGlkIGZvciBjZXJ0YWluIHR5cGVzIG9mIGNvbXBvbmVudHMgKGUuZy4gUmVhY3QubGF6eSlcblxuICAvLyBVc2luZyBuZXh0Q3VycmVudEhvb2sgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIG1vdW50L3VwZGF0ZSBvbmx5IHdvcmtzIGlmIGF0IGxlYXN0IG9uZSBzdGF0ZWZ1bCBob29rIGlzIHVzZWQuXG4gIC8vIE5vbi1zdGF0ZWZ1bCBob29rcyAoZS5nLiBjb250ZXh0KSBkb24ndCBnZXQgYWRkZWQgdG8gbWVtb2l6ZWRTdGF0ZSxcbiAgLy8gc28gbmV4dEN1cnJlbnRIb29rIHdvdWxkIGJlIG51bGwgZHVyaW5nIHVwZGF0ZXMgYW5kIG1vdW50cy5cbiAge1xuICAgIGlmIChuZXh0Q3VycmVudEhvb2sgIT09IG51bGwpIHtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICB9IGVsc2UgaWYgKGhvb2tUeXBlc0RldiAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBkaXNwYXRjaGVyIGhhbmRsZXMgYW4gZWRnZSBjYXNlIHdoZXJlIGEgY29tcG9uZW50IGlzIHVwZGF0aW5nLFxuICAgICAgLy8gYnV0IG5vIHN0YXRlZnVsIGhvb2tzIGhhdmUgYmVlbiB1c2VkLlxuICAgICAgLy8gV2Ugd2FudCB0byBtYXRjaCB0aGUgcHJvZHVjdGlvbiBjb2RlIGJlaGF2aW9yICh3aGljaCB3aWxsIHVzZSBIb29rc0Rpc3BhdGNoZXJPbk1vdW50KSxcbiAgICAgIC8vIGJ1dCB3aXRoIHRoZSBleHRyYSBERVYgdmFsaWRhdGlvbiB0byBlbnN1cmUgaG9va3Mgb3JkZXJpbmcgaGFzbid0IGNoYW5nZWQuXG4gICAgICAvLyBUaGlzIGRpc3BhdGNoZXIgZG9lcyB0aGF0LlxuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBIb29rc0Rpc3BhdGNoZXJPbk1vdW50V2l0aEhvb2tUeXBlc0luREVWO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcbiAgICB9XG4gIH1cblxuICB2YXIgY2hpbGRyZW4gPSBDb21wb25lbnQocHJvcHMsIHJlZk9yQ29udGV4dCk7XG5cbiAgaWYgKGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUpIHtcbiAgICBkbyB7XG4gICAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gZmFsc2U7XG4gICAgICBudW1iZXJPZlJlUmVuZGVycyArPSAxO1xuXG4gICAgICAvLyBTdGFydCBvdmVyIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdFxuICAgICAgbmV4dEN1cnJlbnRIb29rID0gY3VycmVudCAhPT0gbnVsbCA/IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSA6IG51bGw7XG4gICAgICBuZXh0V29ya0luUHJvZ3Jlc3NIb29rID0gZmlyc3RXb3JrSW5Qcm9ncmVzc0hvb2s7XG5cbiAgICAgIGN1cnJlbnRIb29rID0gbnVsbDtcbiAgICAgIHdvcmtJblByb2dyZXNzSG9vayA9IG51bGw7XG4gICAgICBjb21wb25lbnRVcGRhdGVRdWV1ZSA9IG51bGw7XG5cbiAgICAgIHtcbiAgICAgICAgLy8gQWxzbyB2YWxpZGF0ZSBob29rIG9yZGVyIGZvciBjYXNjYWRpbmcgdXBkYXRlcy5cbiAgICAgICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTtcbiAgICAgIH1cblxuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICBjaGlsZHJlbiA9IENvbXBvbmVudChwcm9wcywgcmVmT3JDb250ZXh0KTtcbiAgICB9IHdoaWxlIChkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlKTtcblxuICAgIHJlbmRlclBoYXNlVXBkYXRlcyA9IG51bGw7XG4gICAgbnVtYmVyT2ZSZVJlbmRlcnMgPSAwO1xuICB9XG5cbiAgLy8gV2UgY2FuIGFzc3VtZSB0aGUgcHJldmlvdXMgZGlzcGF0Y2hlciBpcyBhbHdheXMgdGhpcyBvbmUsIHNpbmNlIHdlIHNldCBpdFxuICAvLyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZW5kZXIgcGhhc2UgYW5kIHRoZXJlJ3Mgbm8gcmUtZW50cmFuY3kuXG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gQ29udGV4dE9ubHlEaXNwYXRjaGVyO1xuXG4gIHZhciByZW5kZXJlZFdvcmsgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxO1xuXG4gIHJlbmRlcmVkV29yay5tZW1vaXplZFN0YXRlID0gZmlyc3RXb3JrSW5Qcm9ncmVzc0hvb2s7XG4gIHJlbmRlcmVkV29yay5leHBpcmF0aW9uVGltZSA9IHJlbWFpbmluZ0V4cGlyYXRpb25UaW1lO1xuICByZW5kZXJlZFdvcmsudXBkYXRlUXVldWUgPSBjb21wb25lbnRVcGRhdGVRdWV1ZTtcbiAgcmVuZGVyZWRXb3JrLmVmZmVjdFRhZyB8PSBzaWRlRWZmZWN0VGFnO1xuXG4gIHtcbiAgICByZW5kZXJlZFdvcmsuX2RlYnVnSG9va1R5cGVzID0gaG9va1R5cGVzRGV2O1xuICB9XG5cbiAgLy8gVGhpcyBjaGVjayB1c2VzIGN1cnJlbnRIb29rIHNvIHRoYXQgaXQgd29ya3MgdGhlIHNhbWUgaW4gREVWIGFuZCBwcm9kIGJ1bmRsZXMuXG4gIC8vIGhvb2tUeXBlc0RldiBjb3VsZCBjYXRjaCBtb3JlIGNhc2VzIChlLmcuIGNvbnRleHQpIGJ1dCBvbmx5IGluIERFViBidW5kbGVzLlxuICB2YXIgZGlkUmVuZGVyVG9vRmV3SG9va3MgPSBjdXJyZW50SG9vayAhPT0gbnVsbCAmJiBjdXJyZW50SG9vay5uZXh0ICE9PSBudWxsO1xuXG4gIHJlbmRlckV4cGlyYXRpb25UaW1lID0gTm9Xb3JrO1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxID0gbnVsbDtcblxuICBjdXJyZW50SG9vayA9IG51bGw7XG4gIG5leHRDdXJyZW50SG9vayA9IG51bGw7XG4gIGZpcnN0V29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDtcbiAgbmV4dFdvcmtJblByb2dyZXNzSG9vayA9IG51bGw7XG5cbiAge1xuICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gbnVsbDtcbiAgICBob29rVHlwZXNEZXYgPSBudWxsO1xuICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7XG4gIH1cblxuICByZW1haW5pbmdFeHBpcmF0aW9uVGltZSA9IE5vV29yaztcbiAgY29tcG9uZW50VXBkYXRlUXVldWUgPSBudWxsO1xuICBzaWRlRWZmZWN0VGFnID0gMDtcblxuICAvLyBUaGVzZSB3ZXJlIHJlc2V0IGFib3ZlXG4gIC8vIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSBmYWxzZTtcbiAgLy8gcmVuZGVyUGhhc2VVcGRhdGVzID0gbnVsbDtcbiAgLy8gbnVtYmVyT2ZSZVJlbmRlcnMgPSAwO1xuXG4gICEhZGlkUmVuZGVyVG9vRmV3SG9va3MgPyBpbnZhcmlhbnQoZmFsc2UsICdSZW5kZXJlZCBmZXdlciBob29rcyB0aGFuIGV4cGVjdGVkLiBUaGlzIG1heSBiZSBjYXVzZWQgYnkgYW4gYWNjaWRlbnRhbCBlYXJseSByZXR1cm4gc3RhdGVtZW50LicpIDogdm9pZCAwO1xuXG4gIHJldHVybiBjaGlsZHJlbjtcbn1cblxuZnVuY3Rpb24gYmFpbG91dEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBleHBpcmF0aW9uVGltZSkge1xuICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7XG4gIHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyAmPSB+KFBhc3NpdmUgfCBVcGRhdGUpO1xuICBpZiAoY3VycmVudC5leHBpcmF0aW9uVGltZSA8PSBleHBpcmF0aW9uVGltZSkge1xuICAgIGN1cnJlbnQuZXhwaXJhdGlvblRpbWUgPSBOb1dvcms7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzZXRIb29rcygpIHtcbiAgLy8gV2UgY2FuIGFzc3VtZSB0aGUgcHJldmlvdXMgZGlzcGF0Y2hlciBpcyBhbHdheXMgdGhpcyBvbmUsIHNpbmNlIHdlIHNldCBpdFxuICAvLyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZW5kZXIgcGhhc2UgYW5kIHRoZXJlJ3Mgbm8gcmUtZW50cmFuY3kuXG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gQ29udGV4dE9ubHlEaXNwYXRjaGVyO1xuXG4gIC8vIFRoaXMgaXMgdXNlZCB0byByZXNldCB0aGUgc3RhdGUgb2YgdGhpcyBtb2R1bGUgd2hlbiBhIGNvbXBvbmVudCB0aHJvd3MuXG4gIC8vIEl0J3MgYWxzbyBjYWxsZWQgaW5zaWRlIG1vdW50SW5kZXRlcm1pbmF0ZUNvbXBvbmVudCBpZiB3ZSBkZXRlcm1pbmUgdGhlXG4gIC8vIGNvbXBvbmVudCBpcyBhIG1vZHVsZS1zdHlsZSBjb21wb25lbnQuXG4gIHJlbmRlckV4cGlyYXRpb25UaW1lID0gTm9Xb3JrO1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxID0gbnVsbDtcblxuICBjdXJyZW50SG9vayA9IG51bGw7XG4gIG5leHRDdXJyZW50SG9vayA9IG51bGw7XG4gIGZpcnN0V29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDtcbiAgbmV4dFdvcmtJblByb2dyZXNzSG9vayA9IG51bGw7XG5cbiAge1xuICAgIGhvb2tUeXBlc0RldiA9IG51bGw7XG4gICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTtcblxuICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gbnVsbDtcbiAgfVxuXG4gIHJlbWFpbmluZ0V4cGlyYXRpb25UaW1lID0gTm9Xb3JrO1xuICBjb21wb25lbnRVcGRhdGVRdWV1ZSA9IG51bGw7XG4gIHNpZGVFZmZlY3RUYWcgPSAwO1xuXG4gIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSBmYWxzZTtcbiAgcmVuZGVyUGhhc2VVcGRhdGVzID0gbnVsbDtcbiAgbnVtYmVyT2ZSZVJlbmRlcnMgPSAwO1xufVxuXG5mdW5jdGlvbiBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpIHtcbiAgdmFyIGhvb2sgPSB7XG4gICAgbWVtb2l6ZWRTdGF0ZTogbnVsbCxcblxuICAgIGJhc2VTdGF0ZTogbnVsbCxcbiAgICBxdWV1ZTogbnVsbCxcbiAgICBiYXNlVXBkYXRlOiBudWxsLFxuXG4gICAgbmV4dDogbnVsbFxuICB9O1xuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc0hvb2sgPT09IG51bGwpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBob29rIGluIHRoZSBsaXN0XG4gICAgZmlyc3RXb3JrSW5Qcm9ncmVzc0hvb2sgPSB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBob29rO1xuICB9IGVsc2Uge1xuICAgIC8vIEFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0XG4gICAgd29ya0luUHJvZ3Jlc3NIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rLm5leHQgPSBob29rO1xuICB9XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc0hvb2s7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpIHtcbiAgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJvdGggZm9yIHVwZGF0ZXMgYW5kIGZvciByZS1yZW5kZXJzIHRyaWdnZXJlZCBieSBhXG4gIC8vIHJlbmRlciBwaGFzZSB1cGRhdGUuIEl0IGFzc3VtZXMgdGhlcmUgaXMgZWl0aGVyIGEgY3VycmVudCBob29rIHdlIGNhblxuICAvLyBjbG9uZSwgb3IgYSB3b3JrLWluLXByb2dyZXNzIGhvb2sgZnJvbSBhIHByZXZpb3VzIHJlbmRlciBwYXNzIHRoYXQgd2UgY2FuXG4gIC8vIHVzZSBhcyBhIGJhc2UuIFdoZW4gd2UgcmVhY2ggdGhlIGVuZCBvZiB0aGUgYmFzZSBsaXN0LCB3ZSBtdXN0IHN3aXRjaCB0b1xuICAvLyB0aGUgZGlzcGF0Y2hlciB1c2VkIGZvciBtb3VudHMuXG4gIGlmIChuZXh0V29ya0luUHJvZ3Jlc3NIb29rICE9PSBudWxsKSB7XG4gICAgLy8gVGhlcmUncyBhbHJlYWR5IGEgd29yay1pbi1wcm9ncmVzcy4gUmV1c2UgaXQuXG4gICAgd29ya0luUHJvZ3Jlc3NIb29rID0gbmV4dFdvcmtJblByb2dyZXNzSG9vaztcbiAgICBuZXh0V29ya0luUHJvZ3Jlc3NIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rLm5leHQ7XG5cbiAgICBjdXJyZW50SG9vayA9IG5leHRDdXJyZW50SG9vaztcbiAgICBuZXh0Q3VycmVudEhvb2sgPSBjdXJyZW50SG9vayAhPT0gbnVsbCA/IGN1cnJlbnRIb29rLm5leHQgOiBudWxsO1xuICB9IGVsc2Uge1xuICAgIC8vIENsb25lIGZyb20gdGhlIGN1cnJlbnQgaG9vay5cbiAgICAhKG5leHRDdXJyZW50SG9vayAhPT0gbnVsbCkgPyBpbnZhcmlhbnQoZmFsc2UsICdSZW5kZXJlZCBtb3JlIGhvb2tzIHRoYW4gZHVyaW5nIHRoZSBwcmV2aW91cyByZW5kZXIuJykgOiB2b2lkIDA7XG4gICAgY3VycmVudEhvb2sgPSBuZXh0Q3VycmVudEhvb2s7XG5cbiAgICB2YXIgbmV3SG9vayA9IHtcbiAgICAgIG1lbW9pemVkU3RhdGU6IGN1cnJlbnRIb29rLm1lbW9pemVkU3RhdGUsXG5cbiAgICAgIGJhc2VTdGF0ZTogY3VycmVudEhvb2suYmFzZVN0YXRlLFxuICAgICAgcXVldWU6IGN1cnJlbnRIb29rLnF1ZXVlLFxuICAgICAgYmFzZVVwZGF0ZTogY3VycmVudEhvb2suYmFzZVVwZGF0ZSxcblxuICAgICAgbmV4dDogbnVsbFxuICAgIH07XG5cbiAgICBpZiAod29ya0luUHJvZ3Jlc3NIb29rID09PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBob29rIGluIHRoZSBsaXN0LlxuICAgICAgd29ya0luUHJvZ3Jlc3NIb29rID0gZmlyc3RXb3JrSW5Qcm9ncmVzc0hvb2sgPSBuZXdIb29rO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC5cbiAgICAgIHdvcmtJblByb2dyZXNzSG9vayA9IHdvcmtJblByb2dyZXNzSG9vay5uZXh0ID0gbmV3SG9vaztcbiAgICB9XG4gICAgbmV4dEN1cnJlbnRIb29rID0gY3VycmVudEhvb2submV4dDtcbiAgfVxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NIb29rO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVGdW5jdGlvbkNvbXBvbmVudFVwZGF0ZVF1ZXVlKCkge1xuICByZXR1cm4ge1xuICAgIGxhc3RFZmZlY3Q6IG51bGxcbiAgfTtcbn1cblxuZnVuY3Rpb24gYmFzaWNTdGF0ZVJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICByZXR1cm4gdHlwZW9mIGFjdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IGFjdGlvbihzdGF0ZSkgOiBhY3Rpb247XG59XG5cbmZ1bmN0aW9uIG1vdW50UmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIGluaXRpYWxTdGF0ZSA9IHZvaWQgMDtcbiAgaWYgKGluaXQgIT09IHVuZGVmaW5lZCkge1xuICAgIGluaXRpYWxTdGF0ZSA9IGluaXQoaW5pdGlhbEFyZyk7XG4gIH0gZWxzZSB7XG4gICAgaW5pdGlhbFN0YXRlID0gaW5pdGlhbEFyZztcbiAgfVxuICBob29rLm1lbW9pemVkU3RhdGUgPSBob29rLmJhc2VTdGF0ZSA9IGluaXRpYWxTdGF0ZTtcbiAgdmFyIHF1ZXVlID0gaG9vay5xdWV1ZSA9IHtcbiAgICBsYXN0OiBudWxsLFxuICAgIGRpc3BhdGNoOiBudWxsLFxuICAgIGxhc3RSZW5kZXJlZFJlZHVjZXI6IHJlZHVjZXIsXG4gICAgbGFzdFJlbmRlcmVkU3RhdGU6IGluaXRpYWxTdGF0ZVxuICB9O1xuICB2YXIgZGlzcGF0Y2ggPSBxdWV1ZS5kaXNwYXRjaCA9IGRpc3BhdGNoQWN0aW9uLmJpbmQobnVsbCxcbiAgLy8gRmxvdyBkb2Vzbid0IGtub3cgdGhpcyBpcyBub24tbnVsbCwgYnV0IHdlIGRvLlxuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLCBxdWV1ZSk7XG4gIHJldHVybiBbaG9vay5tZW1vaXplZFN0YXRlLCBkaXNwYXRjaF07XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgcXVldWUgPSBob29rLnF1ZXVlO1xuICAhKHF1ZXVlICE9PSBudWxsKSA/IGludmFyaWFudChmYWxzZSwgJ1Nob3VsZCBoYXZlIGEgcXVldWUuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKSA6IHZvaWQgMDtcblxuICBxdWV1ZS5sYXN0UmVuZGVyZWRSZWR1Y2VyID0gcmVkdWNlcjtcblxuICBpZiAobnVtYmVyT2ZSZVJlbmRlcnMgPiAwKSB7XG4gICAgLy8gVGhpcyBpcyBhIHJlLXJlbmRlci4gQXBwbHkgdGhlIG5ldyByZW5kZXIgcGhhc2UgdXBkYXRlcyB0byB0aGUgcHJldmlvdXNcbiAgICB2YXIgX2Rpc3BhdGNoID0gcXVldWUuZGlzcGF0Y2g7XG4gICAgaWYgKHJlbmRlclBoYXNlVXBkYXRlcyAhPT0gbnVsbCkge1xuICAgICAgLy8gUmVuZGVyIHBoYXNlIHVwZGF0ZXMgYXJlIHN0b3JlZCBpbiBhIG1hcCBvZiBxdWV1ZSAtPiBsaW5rZWQgbGlzdFxuICAgICAgdmFyIGZpcnN0UmVuZGVyUGhhc2VVcGRhdGUgPSByZW5kZXJQaGFzZVVwZGF0ZXMuZ2V0KHF1ZXVlKTtcbiAgICAgIGlmIChmaXJzdFJlbmRlclBoYXNlVXBkYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVuZGVyUGhhc2VVcGRhdGVzLmRlbGV0ZShxdWV1ZSk7XG4gICAgICAgIHZhciBuZXdTdGF0ZSA9IGhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgdmFyIHVwZGF0ZSA9IGZpcnN0UmVuZGVyUGhhc2VVcGRhdGU7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAvLyBQcm9jZXNzIHRoaXMgcmVuZGVyIHBoYXNlIHVwZGF0ZS4gV2UgZG9uJ3QgaGF2ZSB0byBjaGVjayB0aGVcbiAgICAgICAgICAvLyBwcmlvcml0eSBiZWNhdXNlIGl0IHdpbGwgYWx3YXlzIGJlIHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50XG4gICAgICAgICAgLy8gcmVuZGVyJ3MuXG4gICAgICAgICAgdmFyIF9hY3Rpb24gPSB1cGRhdGUuYWN0aW9uO1xuICAgICAgICAgIG5ld1N0YXRlID0gcmVkdWNlcihuZXdTdGF0ZSwgX2FjdGlvbik7XG4gICAgICAgICAgdXBkYXRlID0gdXBkYXRlLm5leHQ7XG4gICAgICAgIH0gd2hpbGUgKHVwZGF0ZSAhPT0gbnVsbCk7XG5cbiAgICAgICAgLy8gTWFyayB0aGF0IHRoZSBmaWJlciBwZXJmb3JtZWQgd29yaywgYnV0IG9ubHkgaWYgdGhlIG5ldyBzdGF0ZSBpc1xuICAgICAgICAvLyBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBzdGF0ZS5cbiAgICAgICAgaWYgKCFpcyhuZXdTdGF0ZSwgaG9vay5tZW1vaXplZFN0YXRlKSkge1xuICAgICAgICAgIG1hcmtXb3JrSW5Qcm9ncmVzc1JlY2VpdmVkVXBkYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgICAgLy8gRG9uJ3QgcGVyc2lzdCB0aGUgc3RhdGUgYWNjdW1sYXRlZCBmcm9tIHRoZSByZW5kZXIgcGhhc2UgdXBkYXRlcyB0b1xuICAgICAgICAvLyB0aGUgYmFzZSBzdGF0ZSB1bmxlc3MgdGhlIHF1ZXVlIGlzIGVtcHR5LlxuICAgICAgICAvLyBUT0RPOiBOb3Qgc3VyZSBpZiB0aGlzIGlzIHRoZSBkZXNpcmVkIHNlbWFudGljcywgYnV0IGl0J3Mgd2hhdCB3ZVxuICAgICAgICAvLyBkbyBmb3IgZ0RTRlAuIEkgY2FuJ3QgcmVtZW1iZXIgd2h5LlxuICAgICAgICBpZiAoaG9vay5iYXNlVXBkYXRlID09PSBxdWV1ZS5sYXN0KSB7XG4gICAgICAgICAgaG9vay5iYXNlU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHF1ZXVlLmxhc3RSZW5kZXJlZFN0YXRlID0gbmV3U3RhdGU7XG5cbiAgICAgICAgcmV0dXJuIFtuZXdTdGF0ZSwgX2Rpc3BhdGNoXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFtob29rLm1lbW9pemVkU3RhdGUsIF9kaXNwYXRjaF07XG4gIH1cblxuICAvLyBUaGUgbGFzdCB1cGRhdGUgaW4gdGhlIGVudGlyZSBxdWV1ZVxuICB2YXIgbGFzdCA9IHF1ZXVlLmxhc3Q7XG4gIC8vIFRoZSBsYXN0IHVwZGF0ZSB0aGF0IGlzIHBhcnQgb2YgdGhlIGJhc2Ugc3RhdGUuXG4gIHZhciBiYXNlVXBkYXRlID0gaG9vay5iYXNlVXBkYXRlO1xuICB2YXIgYmFzZVN0YXRlID0gaG9vay5iYXNlU3RhdGU7XG5cbiAgLy8gRmluZCB0aGUgZmlyc3QgdW5wcm9jZXNzZWQgdXBkYXRlLlxuICB2YXIgZmlyc3QgPSB2b2lkIDA7XG4gIGlmIChiYXNlVXBkYXRlICE9PSBudWxsKSB7XG4gICAgaWYgKGxhc3QgIT09IG51bGwpIHtcbiAgICAgIC8vIEZvciB0aGUgZmlyc3QgdXBkYXRlLCB0aGUgcXVldWUgaXMgYSBjaXJjdWxhciBsaW5rZWQgbGlzdCB3aGVyZVxuICAgICAgLy8gYHF1ZXVlLmxhc3QubmV4dCA9IHF1ZXVlLmZpcnN0YC4gT25jZSB0aGUgZmlyc3QgdXBkYXRlIGNvbW1pdHMsIGFuZFxuICAgICAgLy8gdGhlIGBiYXNlVXBkYXRlYCBpcyBubyBsb25nZXIgZW1wdHksIHdlIGNhbiB1bnJhdmVsIHRoZSBsaXN0LlxuICAgICAgbGFzdC5uZXh0ID0gbnVsbDtcbiAgICB9XG4gICAgZmlyc3QgPSBiYXNlVXBkYXRlLm5leHQ7XG4gIH0gZWxzZSB7XG4gICAgZmlyc3QgPSBsYXN0ICE9PSBudWxsID8gbGFzdC5uZXh0IDogbnVsbDtcbiAgfVxuICBpZiAoZmlyc3QgIT09IG51bGwpIHtcbiAgICB2YXIgX25ld1N0YXRlID0gYmFzZVN0YXRlO1xuICAgIHZhciBuZXdCYXNlU3RhdGUgPSBudWxsO1xuICAgIHZhciBuZXdCYXNlVXBkYXRlID0gbnVsbDtcbiAgICB2YXIgcHJldlVwZGF0ZSA9IGJhc2VVcGRhdGU7XG4gICAgdmFyIF91cGRhdGUgPSBmaXJzdDtcbiAgICB2YXIgZGlkU2tpcCA9IGZhbHNlO1xuICAgIGRvIHtcbiAgICAgIHZhciB1cGRhdGVFeHBpcmF0aW9uVGltZSA9IF91cGRhdGUuZXhwaXJhdGlvblRpbWU7XG4gICAgICBpZiAodXBkYXRlRXhwaXJhdGlvblRpbWUgPCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICAgICAgICAvLyBQcmlvcml0eSBpcyBpbnN1ZmZpY2llbnQuIFNraXAgdGhpcyB1cGRhdGUuIElmIHRoaXMgaXMgdGhlIGZpcnN0XG4gICAgICAgIC8vIHNraXBwZWQgdXBkYXRlLCB0aGUgcHJldmlvdXMgdXBkYXRlL3N0YXRlIGlzIHRoZSBuZXcgYmFzZVxuICAgICAgICAvLyB1cGRhdGUvc3RhdGUuXG4gICAgICAgIGlmICghZGlkU2tpcCkge1xuICAgICAgICAgIGRpZFNraXAgPSB0cnVlO1xuICAgICAgICAgIG5ld0Jhc2VVcGRhdGUgPSBwcmV2VXBkYXRlO1xuICAgICAgICAgIG5ld0Jhc2VTdGF0ZSA9IF9uZXdTdGF0ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBVcGRhdGUgdGhlIHJlbWFpbmluZyBwcmlvcml0eSBpbiB0aGUgcXVldWUuXG4gICAgICAgIGlmICh1cGRhdGVFeHBpcmF0aW9uVGltZSA+IHJlbWFpbmluZ0V4cGlyYXRpb25UaW1lKSB7XG4gICAgICAgICAgcmVtYWluaW5nRXhwaXJhdGlvblRpbWUgPSB1cGRhdGVFeHBpcmF0aW9uVGltZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUHJvY2VzcyB0aGlzIHVwZGF0ZS5cbiAgICAgICAgaWYgKF91cGRhdGUuZWFnZXJSZWR1Y2VyID09PSByZWR1Y2VyKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyB1cGRhdGUgd2FzIHByb2Nlc3NlZCBlYWdlcmx5LCBhbmQgaXRzIHJlZHVjZXIgbWF0Y2hlcyB0aGVcbiAgICAgICAgICAvLyBjdXJyZW50IHJlZHVjZXIsIHdlIGNhbiB1c2UgdGhlIGVhZ2VybHkgY29tcHV0ZWQgc3RhdGUuXG4gICAgICAgICAgX25ld1N0YXRlID0gX3VwZGF0ZS5lYWdlclN0YXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBfYWN0aW9uMiA9IF91cGRhdGUuYWN0aW9uO1xuICAgICAgICAgIF9uZXdTdGF0ZSA9IHJlZHVjZXIoX25ld1N0YXRlLCBfYWN0aW9uMik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHByZXZVcGRhdGUgPSBfdXBkYXRlO1xuICAgICAgX3VwZGF0ZSA9IF91cGRhdGUubmV4dDtcbiAgICB9IHdoaWxlIChfdXBkYXRlICE9PSBudWxsICYmIF91cGRhdGUgIT09IGZpcnN0KTtcblxuICAgIGlmICghZGlkU2tpcCkge1xuICAgICAgbmV3QmFzZVVwZGF0ZSA9IHByZXZVcGRhdGU7XG4gICAgICBuZXdCYXNlU3RhdGUgPSBfbmV3U3RhdGU7XG4gICAgfVxuXG4gICAgLy8gTWFyayB0aGF0IHRoZSBmaWJlciBwZXJmb3JtZWQgd29yaywgYnV0IG9ubHkgaWYgdGhlIG5ldyBzdGF0ZSBpc1xuICAgIC8vIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IHN0YXRlLlxuICAgIGlmICghaXMoX25ld1N0YXRlLCBob29rLm1lbW9pemVkU3RhdGUpKSB7XG4gICAgICBtYXJrV29ya0luUHJvZ3Jlc3NSZWNlaXZlZFVwZGF0ZSgpO1xuICAgIH1cblxuICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IF9uZXdTdGF0ZTtcbiAgICBob29rLmJhc2VVcGRhdGUgPSBuZXdCYXNlVXBkYXRlO1xuICAgIGhvb2suYmFzZVN0YXRlID0gbmV3QmFzZVN0YXRlO1xuXG4gICAgcXVldWUubGFzdFJlbmRlcmVkU3RhdGUgPSBfbmV3U3RhdGU7XG4gIH1cblxuICB2YXIgZGlzcGF0Y2ggPSBxdWV1ZS5kaXNwYXRjaDtcbiAgcmV0dXJuIFtob29rLm1lbW9pemVkU3RhdGUsIGRpc3BhdGNoXTtcbn1cblxuZnVuY3Rpb24gbW91bnRTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICBpZiAodHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGluaXRpYWxTdGF0ZSA9IGluaXRpYWxTdGF0ZSgpO1xuICB9XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IGhvb2suYmFzZVN0YXRlID0gaW5pdGlhbFN0YXRlO1xuICB2YXIgcXVldWUgPSBob29rLnF1ZXVlID0ge1xuICAgIGxhc3Q6IG51bGwsXG4gICAgZGlzcGF0Y2g6IG51bGwsXG4gICAgbGFzdFJlbmRlcmVkUmVkdWNlcjogYmFzaWNTdGF0ZVJlZHVjZXIsXG4gICAgbGFzdFJlbmRlcmVkU3RhdGU6IGluaXRpYWxTdGF0ZVxuICB9O1xuICB2YXIgZGlzcGF0Y2ggPSBxdWV1ZS5kaXNwYXRjaCA9IGRpc3BhdGNoQWN0aW9uLmJpbmQobnVsbCxcbiAgLy8gRmxvdyBkb2Vzbid0IGtub3cgdGhpcyBpcyBub24tbnVsbCwgYnV0IHdlIGRvLlxuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLCBxdWV1ZSk7XG4gIHJldHVybiBbaG9vay5tZW1vaXplZFN0YXRlLCBkaXNwYXRjaF07XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICByZXR1cm4gdXBkYXRlUmVkdWNlcihiYXNpY1N0YXRlUmVkdWNlciwgaW5pdGlhbFN0YXRlKTtcbn1cblxuZnVuY3Rpb24gcHVzaEVmZmVjdCh0YWcsIGNyZWF0ZSwgZGVzdHJveSwgZGVwcykge1xuICB2YXIgZWZmZWN0ID0ge1xuICAgIHRhZzogdGFnLFxuICAgIGNyZWF0ZTogY3JlYXRlLFxuICAgIGRlc3Ryb3k6IGRlc3Ryb3ksXG4gICAgZGVwczogZGVwcyxcbiAgICAvLyBDaXJjdWxhclxuICAgIG5leHQ6IG51bGxcbiAgfTtcbiAgaWYgKGNvbXBvbmVudFVwZGF0ZVF1ZXVlID09PSBudWxsKSB7XG4gICAgY29tcG9uZW50VXBkYXRlUXVldWUgPSBjcmVhdGVGdW5jdGlvbkNvbXBvbmVudFVwZGF0ZVF1ZXVlKCk7XG4gICAgY29tcG9uZW50VXBkYXRlUXVldWUubGFzdEVmZmVjdCA9IGVmZmVjdC5uZXh0ID0gZWZmZWN0O1xuICB9IGVsc2Uge1xuICAgIHZhciBfbGFzdEVmZmVjdCA9IGNvbXBvbmVudFVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3Q7XG4gICAgaWYgKF9sYXN0RWZmZWN0ID09PSBudWxsKSB7XG4gICAgICBjb21wb25lbnRVcGRhdGVRdWV1ZS5sYXN0RWZmZWN0ID0gZWZmZWN0Lm5leHQgPSBlZmZlY3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBmaXJzdEVmZmVjdCA9IF9sYXN0RWZmZWN0Lm5leHQ7XG4gICAgICBfbGFzdEVmZmVjdC5uZXh0ID0gZWZmZWN0O1xuICAgICAgZWZmZWN0Lm5leHQgPSBmaXJzdEVmZmVjdDtcbiAgICAgIGNvbXBvbmVudFVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgPSBlZmZlY3Q7XG4gICAgfVxuICB9XG4gIHJldHVybiBlZmZlY3Q7XG59XG5cbmZ1bmN0aW9uIG1vdW50UmVmKGluaXRpYWxWYWx1ZSkge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciByZWYgPSB7IGN1cnJlbnQ6IGluaXRpYWxWYWx1ZSB9O1xuICB7XG4gICAgT2JqZWN0LnNlYWwocmVmKTtcbiAgfVxuICBob29rLm1lbW9pemVkU3RhdGUgPSByZWY7XG4gIHJldHVybiByZWY7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVJlZihpbml0aWFsVmFsdWUpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgcmV0dXJuIGhvb2subWVtb2l6ZWRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gbW91bnRFZmZlY3RJbXBsKGZpYmVyRWZmZWN0VGFnLCBob29rRWZmZWN0VGFnLCBjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgc2lkZUVmZmVjdFRhZyB8PSBmaWJlckVmZmVjdFRhZztcbiAgaG9vay5tZW1vaXplZFN0YXRlID0gcHVzaEVmZmVjdChob29rRWZmZWN0VGFnLCBjcmVhdGUsIHVuZGVmaW5lZCwgbmV4dERlcHMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVFZmZlY3RJbXBsKGZpYmVyRWZmZWN0VGFnLCBob29rRWZmZWN0VGFnLCBjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIHZhciBkZXN0cm95ID0gdW5kZWZpbmVkO1xuXG4gIGlmIChjdXJyZW50SG9vayAhPT0gbnVsbCkge1xuICAgIHZhciBwcmV2RWZmZWN0ID0gY3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgICBkZXN0cm95ID0gcHJldkVmZmVjdC5kZXN0cm95O1xuICAgIGlmIChuZXh0RGVwcyAhPT0gbnVsbCkge1xuICAgICAgdmFyIHByZXZEZXBzID0gcHJldkVmZmVjdC5kZXBzO1xuICAgICAgaWYgKGFyZUhvb2tJbnB1dHNFcXVhbChuZXh0RGVwcywgcHJldkRlcHMpKSB7XG4gICAgICAgIHB1c2hFZmZlY3QoTm9FZmZlY3QkMSwgY3JlYXRlLCBkZXN0cm95LCBuZXh0RGVwcyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzaWRlRWZmZWN0VGFnIHw9IGZpYmVyRWZmZWN0VGFnO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSBwdXNoRWZmZWN0KGhvb2tFZmZlY3RUYWcsIGNyZWF0ZSwgZGVzdHJveSwgbmV4dERlcHMpO1xufVxuXG5mdW5jdGlvbiBtb3VudEVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAgcmV0dXJuIG1vdW50RWZmZWN0SW1wbChVcGRhdGUgfCBQYXNzaXZlLCBVbm1vdW50UGFzc2l2ZSB8IE1vdW50UGFzc2l2ZSwgY3JlYXRlLCBkZXBzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbChVcGRhdGUgfCBQYXNzaXZlLCBVbm1vdW50UGFzc2l2ZSB8IE1vdW50UGFzc2l2ZSwgY3JlYXRlLCBkZXBzKTtcbn1cblxuZnVuY3Rpb24gbW91bnRMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gIHJldHVybiBtb3VudEVmZmVjdEltcGwoVXBkYXRlLCBVbm1vdW50TXV0YXRpb24gfCBNb3VudExheW91dCwgY3JlYXRlLCBkZXBzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbChVcGRhdGUsIFVubW91bnRNdXRhdGlvbiB8IE1vdW50TGF5b3V0LCBjcmVhdGUsIGRlcHMpO1xufVxuXG5mdW5jdGlvbiBpbXBlcmF0aXZlSGFuZGxlRWZmZWN0KGNyZWF0ZSwgcmVmKSB7XG4gIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIHJlZkNhbGxiYWNrID0gcmVmO1xuICAgIHZhciBfaW5zdCA9IGNyZWF0ZSgpO1xuICAgIHJlZkNhbGxiYWNrKF9pbnN0KTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmVmQ2FsbGJhY2sobnVsbCk7XG4gICAgfTtcbiAgfSBlbHNlIGlmIChyZWYgIT09IG51bGwgJiYgcmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgcmVmT2JqZWN0ID0gcmVmO1xuICAgIHtcbiAgICAgICFyZWZPYmplY3QuaGFzT3duUHJvcGVydHkoJ2N1cnJlbnQnKSA/IHdhcm5pbmckMShmYWxzZSwgJ0V4cGVjdGVkIHVzZUltcGVyYXRpdmVIYW5kbGUoKSBmaXJzdCBhcmd1bWVudCB0byBlaXRoZXIgYmUgYSAnICsgJ3JlZiBjYWxsYmFjayBvciBSZWFjdC5jcmVhdGVSZWYoKSBvYmplY3QuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsICdhbiBvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMocmVmT2JqZWN0KS5qb2luKCcsICcpICsgJ30nKSA6IHZvaWQgMDtcbiAgICB9XG4gICAgdmFyIF9pbnN0MiA9IGNyZWF0ZSgpO1xuICAgIHJlZk9iamVjdC5jdXJyZW50ID0gX2luc3QyO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZWZPYmplY3QuY3VycmVudCA9IG51bGw7XG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtb3VudEltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAge1xuICAgICEodHlwZW9mIGNyZWF0ZSA9PT0gJ2Z1bmN0aW9uJykgPyB3YXJuaW5nJDEoZmFsc2UsICdFeHBlY3RlZCB1c2VJbXBlcmF0aXZlSGFuZGxlKCkgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIGEgZnVuY3Rpb24gJyArICd0aGF0IGNyZWF0ZXMgYSBoYW5kbGUuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsIGNyZWF0ZSAhPT0gbnVsbCA/IHR5cGVvZiBjcmVhdGUgOiAnbnVsbCcpIDogdm9pZCAwO1xuICB9XG5cbiAgLy8gVE9ETzogSWYgZGVwcyBhcmUgcHJvdmlkZWQsIHNob3VsZCB3ZSBza2lwIGNvbXBhcmluZyB0aGUgcmVmIGl0c2VsZj9cbiAgdmFyIGVmZmVjdERlcHMgPSBkZXBzICE9PSBudWxsICYmIGRlcHMgIT09IHVuZGVmaW5lZCA/IGRlcHMuY29uY2F0KFtyZWZdKSA6IG51bGw7XG5cbiAgcmV0dXJuIG1vdW50RWZmZWN0SW1wbChVcGRhdGUsIFVubW91bnRNdXRhdGlvbiB8IE1vdW50TGF5b3V0LCBpbXBlcmF0aXZlSGFuZGxlRWZmZWN0LmJpbmQobnVsbCwgY3JlYXRlLCByZWYpLCBlZmZlY3REZXBzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcykge1xuICB7XG4gICAgISh0eXBlb2YgY3JlYXRlID09PSAnZnVuY3Rpb24nKSA/IHdhcm5pbmckMShmYWxzZSwgJ0V4cGVjdGVkIHVzZUltcGVyYXRpdmVIYW5kbGUoKSBzZWNvbmQgYXJndW1lbnQgdG8gYmUgYSBmdW5jdGlvbiAnICsgJ3RoYXQgY3JlYXRlcyBhIGhhbmRsZS4gSW5zdGVhZCByZWNlaXZlZDogJXMuJywgY3JlYXRlICE9PSBudWxsID8gdHlwZW9mIGNyZWF0ZSA6ICdudWxsJykgOiB2b2lkIDA7XG4gIH1cblxuICAvLyBUT0RPOiBJZiBkZXBzIGFyZSBwcm92aWRlZCwgc2hvdWxkIHdlIHNraXAgY29tcGFyaW5nIHRoZSByZWYgaXRzZWxmP1xuICB2YXIgZWZmZWN0RGVwcyA9IGRlcHMgIT09IG51bGwgJiYgZGVwcyAhPT0gdW5kZWZpbmVkID8gZGVwcy5jb25jYXQoW3JlZl0pIDogbnVsbDtcblxuICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbChVcGRhdGUsIFVubW91bnRNdXRhdGlvbiB8IE1vdW50TGF5b3V0LCBpbXBlcmF0aXZlSGFuZGxlRWZmZWN0LmJpbmQobnVsbCwgY3JlYXRlLCByZWYpLCBlZmZlY3REZXBzKTtcbn1cblxuZnVuY3Rpb24gbW91bnREZWJ1Z1ZhbHVlKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAvLyBUaGlzIGhvb2sgaXMgbm9ybWFsbHkgYSBuby1vcC5cbiAgLy8gVGhlIHJlYWN0LWRlYnVnLWhvb2tzIHBhY2thZ2UgaW5qZWN0cyBpdHMgb3duIGltcGxlbWVudGF0aW9uXG4gIC8vIHNvIHRoYXQgZS5nLiBEZXZUb29scyBjYW4gZGlzcGxheSBjdXN0b20gaG9vayB2YWx1ZXMuXG59XG5cbnZhciB1cGRhdGVEZWJ1Z1ZhbHVlID0gbW91bnREZWJ1Z1ZhbHVlO1xuXG5mdW5jdGlvbiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IFtjYWxsYmFjaywgbmV4dERlcHNdO1xuICByZXR1cm4gY2FsbGJhY2s7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICB2YXIgcHJldlN0YXRlID0gaG9vay5tZW1vaXplZFN0YXRlO1xuICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgaWYgKG5leHREZXBzICE9PSBudWxsKSB7XG4gICAgICB2YXIgcHJldkRlcHMgPSBwcmV2U3RhdGVbMV07XG4gICAgICBpZiAoYXJlSG9va0lucHV0c0VxdWFsKG5leHREZXBzLCBwcmV2RGVwcykpIHtcbiAgICAgICAgcmV0dXJuIHByZXZTdGF0ZVswXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaG9vay5tZW1vaXplZFN0YXRlID0gW2NhbGxiYWNrLCBuZXh0RGVwc107XG4gIHJldHVybiBjYWxsYmFjaztcbn1cblxuZnVuY3Rpb24gbW91bnRNZW1vKG5leHRDcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgdmFyIG5leHRWYWx1ZSA9IG5leHRDcmVhdGUoKTtcbiAgaG9vay5tZW1vaXplZFN0YXRlID0gW25leHRWYWx1ZSwgbmV4dERlcHNdO1xuICByZXR1cm4gbmV4dFZhbHVlO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVNZW1vKG5leHRDcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIHZhciBwcmV2U3RhdGUgPSBob29rLm1lbW9pemVkU3RhdGU7XG4gIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcbiAgICAvLyBBc3N1bWUgdGhlc2UgYXJlIGRlZmluZWQuIElmIHRoZXkncmUgbm90LCBhcmVIb29rSW5wdXRzRXF1YWwgd2lsbCB3YXJuLlxuICAgIGlmIChuZXh0RGVwcyAhPT0gbnVsbCkge1xuICAgICAgdmFyIHByZXZEZXBzID0gcHJldlN0YXRlWzFdO1xuICAgICAgaWYgKGFyZUhvb2tJbnB1dHNFcXVhbChuZXh0RGVwcywgcHJldkRlcHMpKSB7XG4gICAgICAgIHJldHVybiBwcmV2U3RhdGVbMF07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHZhciBuZXh0VmFsdWUgPSBuZXh0Q3JlYXRlKCk7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IFtuZXh0VmFsdWUsIG5leHREZXBzXTtcbiAgcmV0dXJuIG5leHRWYWx1ZTtcbn1cblxuLy8gaW4gYSB0ZXN0LWxpa2UgZW52aXJvbm1lbnQsIHdlIHdhbnQgdG8gd2FybiBpZiBkaXNwYXRjaEFjdGlvbigpXG4vLyBpcyBjYWxsZWQgb3V0c2lkZSBvZiBhIGJhdGNoZWRVcGRhdGVzL1Rlc3RVdGlscy5hY3QoLi4uKSBjYWxsLlxudmFyIHNob3VsZFdhcm5Gb3JVbmJhdGNoZWRTZXRTdGF0ZSA9IGZhbHNlO1xuXG57XG4gIC8vIGplc3QgaXNuJ3QgYSAnZ2xvYmFsJywgaXQncyBqdXN0IGV4cG9zZWQgdG8gdGVzdHMgdmlhIGEgd3JhcHBlZCBmdW5jdGlvblxuICAvLyBmdXJ0aGVyLCB0aGlzIGlzbid0IGEgdGVzdCBmaWxlLCBzbyBmbG93IGRvZXNuJ3QgcmVjb2duaXplIHRoZSBzeW1ib2wuIFNvLi4uXG4gIC8vICRGbG93RXhwZWN0ZWRFcnJvciAtIGJlY2F1c2UgcmVxdWlyZW1lbnRzIGRvbid0IGdpdmUgYSBkYW1uIGFib3V0IHlvdXIgdHlwZSBzaWdzLlxuICBpZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBqZXN0KSB7XG4gICAgc2hvdWxkV2FybkZvclVuYmF0Y2hlZFNldFN0YXRlID0gdHJ1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkaXNwYXRjaEFjdGlvbihmaWJlciwgcXVldWUsIGFjdGlvbikge1xuICAhKG51bWJlck9mUmVSZW5kZXJzIDwgUkVfUkVOREVSX0xJTUlUKSA/IGludmFyaWFudChmYWxzZSwgJ1RvbyBtYW55IHJlLXJlbmRlcnMuIFJlYWN0IGxpbWl0cyB0aGUgbnVtYmVyIG9mIHJlbmRlcnMgdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wLicpIDogdm9pZCAwO1xuXG4gIHtcbiAgICAhKGFyZ3VtZW50cy5sZW5ndGggPD0gMykgPyB3YXJuaW5nJDEoZmFsc2UsIFwiU3RhdGUgdXBkYXRlcyBmcm9tIHRoZSB1c2VTdGF0ZSgpIGFuZCB1c2VSZWR1Y2VyKCkgSG9va3MgZG9uJ3Qgc3VwcG9ydCB0aGUgXCIgKyAnc2Vjb25kIGNhbGxiYWNrIGFyZ3VtZW50LiBUbyBleGVjdXRlIGEgc2lkZSBlZmZlY3QgYWZ0ZXIgJyArICdyZW5kZXJpbmcsIGRlY2xhcmUgaXQgaW4gdGhlIGNvbXBvbmVudCBib2R5IHdpdGggdXNlRWZmZWN0KCkuJykgOiB2b2lkIDA7XG4gIH1cblxuICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuICBpZiAoZmliZXIgPT09IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgfHwgYWx0ZXJuYXRlICE9PSBudWxsICYmIGFsdGVybmF0ZSA9PT0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSkge1xuICAgIC8vIFRoaXMgaXMgYSByZW5kZXIgcGhhc2UgdXBkYXRlLiBTdGFzaCBpdCBpbiBhIGxhemlseS1jcmVhdGVkIG1hcCBvZlxuICAgIC8vIHF1ZXVlIC0+IGxpbmtlZCBsaXN0IG9mIHVwZGF0ZXMuIEFmdGVyIHRoaXMgcmVuZGVyIHBhc3MsIHdlJ2xsIHJlc3RhcnRcbiAgICAvLyBhbmQgYXBwbHkgdGhlIHN0YXNoZWQgdXBkYXRlcyBvbiB0b3Agb2YgdGhlIHdvcmstaW4tcHJvZ3Jlc3MgaG9vay5cbiAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gdHJ1ZTtcbiAgICB2YXIgdXBkYXRlID0ge1xuICAgICAgZXhwaXJhdGlvblRpbWU6IHJlbmRlckV4cGlyYXRpb25UaW1lLFxuICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICBlYWdlclJlZHVjZXI6IG51bGwsXG4gICAgICBlYWdlclN0YXRlOiBudWxsLFxuICAgICAgbmV4dDogbnVsbFxuICAgIH07XG4gICAgaWYgKHJlbmRlclBoYXNlVXBkYXRlcyA9PT0gbnVsbCkge1xuICAgICAgcmVuZGVyUGhhc2VVcGRhdGVzID0gbmV3IE1hcCgpO1xuICAgIH1cbiAgICB2YXIgZmlyc3RSZW5kZXJQaGFzZVVwZGF0ZSA9IHJlbmRlclBoYXNlVXBkYXRlcy5nZXQocXVldWUpO1xuICAgIGlmIChmaXJzdFJlbmRlclBoYXNlVXBkYXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlbmRlclBoYXNlVXBkYXRlcy5zZXQocXVldWUsIHVwZGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFwcGVuZCB0aGUgdXBkYXRlIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuXG4gICAgICB2YXIgbGFzdFJlbmRlclBoYXNlVXBkYXRlID0gZmlyc3RSZW5kZXJQaGFzZVVwZGF0ZTtcbiAgICAgIHdoaWxlIChsYXN0UmVuZGVyUGhhc2VVcGRhdGUubmV4dCAhPT0gbnVsbCkge1xuICAgICAgICBsYXN0UmVuZGVyUGhhc2VVcGRhdGUgPSBsYXN0UmVuZGVyUGhhc2VVcGRhdGUubmV4dDtcbiAgICAgIH1cbiAgICAgIGxhc3RSZW5kZXJQaGFzZVVwZGF0ZS5uZXh0ID0gdXBkYXRlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG5cbiAgICB2YXIgY3VycmVudFRpbWUgPSByZXF1ZXN0Q3VycmVudFRpbWUoKTtcbiAgICB2YXIgX2V4cGlyYXRpb25UaW1lID0gY29tcHV0ZUV4cGlyYXRpb25Gb3JGaWJlcihjdXJyZW50VGltZSwgZmliZXIpO1xuXG4gICAgdmFyIF91cGRhdGUyID0ge1xuICAgICAgZXhwaXJhdGlvblRpbWU6IF9leHBpcmF0aW9uVGltZSxcbiAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgZWFnZXJSZWR1Y2VyOiBudWxsLFxuICAgICAgZWFnZXJTdGF0ZTogbnVsbCxcbiAgICAgIG5leHQ6IG51bGxcbiAgICB9O1xuXG4gICAgLy8gQXBwZW5kIHRoZSB1cGRhdGUgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC5cbiAgICB2YXIgX2xhc3QgPSBxdWV1ZS5sYXN0O1xuICAgIGlmIChfbGFzdCA9PT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgdXBkYXRlLiBDcmVhdGUgYSBjaXJjdWxhciBsaXN0LlxuICAgICAgX3VwZGF0ZTIubmV4dCA9IF91cGRhdGUyO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZmlyc3QgPSBfbGFzdC5uZXh0O1xuICAgICAgaWYgKGZpcnN0ICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFN0aWxsIGNpcmN1bGFyLlxuICAgICAgICBfdXBkYXRlMi5uZXh0ID0gZmlyc3Q7XG4gICAgICB9XG4gICAgICBfbGFzdC5uZXh0ID0gX3VwZGF0ZTI7XG4gICAgfVxuICAgIHF1ZXVlLmxhc3QgPSBfdXBkYXRlMjtcblxuICAgIGlmIChmaWJlci5leHBpcmF0aW9uVGltZSA9PT0gTm9Xb3JrICYmIChhbHRlcm5hdGUgPT09IG51bGwgfHwgYWx0ZXJuYXRlLmV4cGlyYXRpb25UaW1lID09PSBOb1dvcmspKSB7XG4gICAgICAvLyBUaGUgcXVldWUgaXMgY3VycmVudGx5IGVtcHR5LCB3aGljaCBtZWFucyB3ZSBjYW4gZWFnZXJseSBjb21wdXRlIHRoZVxuICAgICAgLy8gbmV4dCBzdGF0ZSBiZWZvcmUgZW50ZXJpbmcgdGhlIHJlbmRlciBwaGFzZS4gSWYgdGhlIG5ldyBzdGF0ZSBpcyB0aGVcbiAgICAgIC8vIHNhbWUgYXMgdGhlIGN1cnJlbnQgc3RhdGUsIHdlIG1heSBiZSBhYmxlIHRvIGJhaWwgb3V0IGVudGlyZWx5LlxuICAgICAgdmFyIF9sYXN0UmVuZGVyZWRSZWR1Y2VyID0gcXVldWUubGFzdFJlbmRlcmVkUmVkdWNlcjtcbiAgICAgIGlmIChfbGFzdFJlbmRlcmVkUmVkdWNlciAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSB2b2lkIDA7XG4gICAgICAgIHtcbiAgICAgICAgICBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YXIgY3VycmVudFN0YXRlID0gcXVldWUubGFzdFJlbmRlcmVkU3RhdGU7XG4gICAgICAgICAgdmFyIF9lYWdlclN0YXRlID0gX2xhc3RSZW5kZXJlZFJlZHVjZXIoY3VycmVudFN0YXRlLCBhY3Rpb24pO1xuICAgICAgICAgIC8vIFN0YXNoIHRoZSBlYWdlcmx5IGNvbXB1dGVkIHN0YXRlLCBhbmQgdGhlIHJlZHVjZXIgdXNlZCB0byBjb21wdXRlXG4gICAgICAgICAgLy8gaXQsIG9uIHRoZSB1cGRhdGUgb2JqZWN0LiBJZiB0aGUgcmVkdWNlciBoYXNuJ3QgY2hhbmdlZCBieSB0aGVcbiAgICAgICAgICAvLyB0aW1lIHdlIGVudGVyIHRoZSByZW5kZXIgcGhhc2UsIHRoZW4gdGhlIGVhZ2VyIHN0YXRlIGNhbiBiZSB1c2VkXG4gICAgICAgICAgLy8gd2l0aG91dCBjYWxsaW5nIHRoZSByZWR1Y2VyIGFnYWluLlxuICAgICAgICAgIF91cGRhdGUyLmVhZ2VyUmVkdWNlciA9IF9sYXN0UmVuZGVyZWRSZWR1Y2VyO1xuICAgICAgICAgIF91cGRhdGUyLmVhZ2VyU3RhdGUgPSBfZWFnZXJTdGF0ZTtcbiAgICAgICAgICBpZiAoaXMoX2VhZ2VyU3RhdGUsIGN1cnJlbnRTdGF0ZSkpIHtcbiAgICAgICAgICAgIC8vIEZhc3QgcGF0aC4gV2UgY2FuIGJhaWwgb3V0IHdpdGhvdXQgc2NoZWR1bGluZyBSZWFjdCB0byByZS1yZW5kZXIuXG4gICAgICAgICAgICAvLyBJdCdzIHN0aWxsIHBvc3NpYmxlIHRoYXQgd2UnbGwgbmVlZCB0byByZWJhc2UgdGhpcyB1cGRhdGUgbGF0ZXIsXG4gICAgICAgICAgICAvLyBpZiB0aGUgY29tcG9uZW50IHJlLXJlbmRlcnMgZm9yIGEgZGlmZmVyZW50IHJlYXNvbiBhbmQgYnkgdGhhdFxuICAgICAgICAgICAgLy8gdGltZSB0aGUgcmVkdWNlciBoYXMgY2hhbmdlZC5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgLy8gU3VwcHJlc3MgdGhlIGVycm9yLiBJdCB3aWxsIHRocm93IGFnYWluIGluIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAge1xuICAgICAgaWYgKHNob3VsZFdhcm5Gb3JVbmJhdGNoZWRTZXRTdGF0ZSA9PT0gdHJ1ZSkge1xuICAgICAgICB3YXJuSWZOb3RDdXJyZW50bHlCYXRjaGluZ0luRGV2KGZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc2NoZWR1bGVXb3JrKGZpYmVyLCBfZXhwaXJhdGlvblRpbWUpO1xuICB9XG59XG5cbnZhciBDb250ZXh0T25seURpc3BhdGNoZXIgPSB7XG4gIHJlYWRDb250ZXh0OiByZWFkQ29udGV4dCxcblxuICB1c2VDYWxsYmFjazogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VDb250ZXh0OiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZUVmZmVjdDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VJbXBlcmF0aXZlSGFuZGxlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZUxheW91dEVmZmVjdDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VNZW1vOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZVJlZHVjZXI6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlUmVmOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZVN0YXRlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZURlYnVnVmFsdWU6IHRocm93SW52YWxpZEhvb2tFcnJvclxufTtcblxudmFyIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFViA9IG51bGw7XG52YXIgSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFViA9IG51bGw7XG52YXIgSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFViA9IG51bGw7XG52YXIgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFViA9IG51bGw7XG52YXIgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYgPSBudWxsO1xuXG57XG4gIHZhciB3YXJuSW52YWxpZENvbnRleHRBY2Nlc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgd2FybmluZyQxKGZhbHNlLCAnQ29udGV4dCBjYW4gb25seSBiZSByZWFkIHdoaWxlIFJlYWN0IGlzIHJlbmRlcmluZy4gJyArICdJbiBjbGFzc2VzLCB5b3UgY2FuIHJlYWQgaXQgaW4gdGhlIHJlbmRlciBtZXRob2Qgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiAnICsgJ0luIGZ1bmN0aW9uIGNvbXBvbmVudHMsIHlvdSBjYW4gcmVhZCBpdCBkaXJlY3RseSBpbiB0aGUgZnVuY3Rpb24gYm9keSwgYnV0IG5vdCAnICsgJ2luc2lkZSBIb29rcyBsaWtlIHVzZVJlZHVjZXIoKSBvciB1c2VNZW1vKCkuJyk7XG4gIH07XG5cbiAgdmFyIHdhcm5JbnZhbGlkSG9va0FjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICB3YXJuaW5nJDEoZmFsc2UsICdEbyBub3QgY2FsbCBIb29rcyBpbnNpZGUgdXNlRWZmZWN0KC4uLiksIHVzZU1lbW8oLi4uKSwgb3Igb3RoZXIgYnVpbHQtaW4gSG9va3MuICcgKyAnWW91IGNhbiBvbmx5IGNhbGwgSG9va3MgYXQgdGhlIHRvcCBsZXZlbCBvZiB5b3VyIFJlYWN0IGZ1bmN0aW9uLiAnICsgJ0ZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgJyArICdodHRwczovL2ZiLm1lL3J1bGVzLW9mLWhvb2tzJyk7XG4gIH07XG5cbiAgSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhbGxiYWNrJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50SW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudE1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRSZWYoaW5pdGlhbFZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTdGF0ZSc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudERlYnVnVmFsdWUodmFsdWUsIGZvcm1hdHRlckZuKTtcbiAgICB9XG4gIH07XG5cbiAgSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudFJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRSZWYoaW5pdGlhbFZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTdGF0ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVidWdWYWx1ZSh2YWx1ZSwgZm9ybWF0dGVyRm4pO1xuICAgIH1cbiAgfTtcblxuICBIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhbGxiYWNrJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbXBlcmF0aXZlSGFuZGxlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVJlZihpbml0aWFsVmFsdWUpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVidWdWYWx1ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWJ1Z1ZhbHVlKHZhbHVlLCBmb3JtYXR0ZXJGbik7XG4gICAgfVxuICB9O1xuXG4gIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIHdhcm5JbnZhbGlkQ29udGV4dEFjY2VzcygpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50SW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFJlZihpbml0aWFsVmFsdWUpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudERlYnVnVmFsdWUodmFsdWUsIGZvcm1hdHRlckZuKTtcbiAgICB9XG4gIH07XG5cbiAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIHdhcm5JbnZhbGlkQ29udGV4dEFjY2VzcygpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlUmVmKGluaXRpYWxWYWx1ZSk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWJ1Z1ZhbHVlKHZhbHVlLCBmb3JtYXR0ZXJGbik7XG4gICAgfVxuICB9O1xufVxuXG52YXIgY29tbWl0VGltZSA9IDA7XG52YXIgcHJvZmlsZXJTdGFydFRpbWUgPSAtMTtcblxuZnVuY3Rpb24gZ2V0Q29tbWl0VGltZSgpIHtcbiAgcmV0dXJuIGNvbW1pdFRpbWU7XG59XG5cbmZ1bmN0aW9uIHJlY29yZENvbW1pdFRpbWUoKSB7XG4gIGlmICghZW5hYmxlUHJvZmlsZXJUaW1lcikge1xuICAgIHJldHVybjtcbiAgfVxuICBjb21taXRUaW1lID0gc2NoZWR1bGVyLnVuc3RhYmxlX25vdygpO1xufVxuXG5mdW5jdGlvbiBzdGFydFByb2ZpbGVyVGltZXIoZmliZXIpIHtcbiAgaWYgKCFlbmFibGVQcm9maWxlclRpbWVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJvZmlsZXJTdGFydFRpbWUgPSBzY2hlZHVsZXIudW5zdGFibGVfbm93KCk7XG5cbiAgaWYgKGZpYmVyLmFjdHVhbFN0YXJ0VGltZSA8IDApIHtcbiAgICBmaWJlci5hY3R1YWxTdGFydFRpbWUgPSBzY2hlZHVsZXIudW5zdGFibGVfbm93KCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmcoZmliZXIpIHtcbiAgaWYgKCFlbmFibGVQcm9maWxlclRpbWVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHByb2ZpbGVyU3RhcnRUaW1lID0gLTE7XG59XG5cbmZ1bmN0aW9uIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRGVsdGEoZmliZXIsIG92ZXJyaWRlQmFzZVRpbWUpIHtcbiAgaWYgKCFlbmFibGVQcm9maWxlclRpbWVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHByb2ZpbGVyU3RhcnRUaW1lID49IDApIHtcbiAgICB2YXIgZWxhcHNlZFRpbWUgPSBzY2hlZHVsZXIudW5zdGFibGVfbm93KCkgLSBwcm9maWxlclN0YXJ0VGltZTtcbiAgICBmaWJlci5hY3R1YWxEdXJhdGlvbiArPSBlbGFwc2VkVGltZTtcbiAgICBpZiAob3ZlcnJpZGVCYXNlVGltZSkge1xuICAgICAgZmliZXIuc2VsZkJhc2VEdXJhdGlvbiA9IGVsYXBzZWRUaW1lO1xuICAgIH1cbiAgICBwcm9maWxlclN0YXJ0VGltZSA9IC0xO1xuICB9XG59XG5cbi8vIFRoZSBkZWVwZXN0IEZpYmVyIG9uIHRoZSBzdGFjayBpbnZvbHZlZCBpbiBhIGh5ZHJhdGlvbiBjb250ZXh0LlxuLy8gVGhpcyBtYXkgaGF2ZSBiZWVuIGFuIGluc2VydGlvbiBvciBhIGh5ZHJhdGlvbi5cbnZhciBoeWRyYXRpb25QYXJlbnRGaWJlciA9IG51bGw7XG52YXIgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IG51bGw7XG52YXIgaXNIeWRyYXRpbmcgPSBmYWxzZTtcblxuZnVuY3Rpb24gZW50ZXJIeWRyYXRpb25TdGF0ZShmaWJlcikge1xuICBpZiAoIXN1cHBvcnRzSHlkcmF0aW9uKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHBhcmVudEluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBnZXRGaXJzdEh5ZHJhdGFibGVDaGlsZChwYXJlbnRJbnN0YW5jZSk7XG4gIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gZmliZXI7XG4gIGlzSHlkcmF0aW5nID0gdHJ1ZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJlZW50ZXJIeWRyYXRpb25TdGF0ZUZyb21EZWh5ZHJhdGVkU3VzcGVuc2VJbnN0YW5jZShmaWJlcikge1xuICBpZiAoIXN1cHBvcnRzSHlkcmF0aW9uKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHN1c3BlbnNlSW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGU7XG4gIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcoc3VzcGVuc2VJbnN0YW5jZSk7XG4gIHBvcFRvTmV4dEhvc3RQYXJlbnQoZmliZXIpO1xuICBpc0h5ZHJhdGluZyA9IHRydWU7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBkZWxldGVIeWRyYXRhYmxlSW5zdGFuY2UocmV0dXJuRmliZXIsIGluc3RhbmNlKSB7XG4gIHtcbiAgICBzd2l0Y2ggKHJldHVybkZpYmVyLnRhZykge1xuICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgZGlkTm90SHlkcmF0ZUNvbnRhaW5lckluc3RhbmNlKHJldHVybkZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLCBpbnN0YW5jZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICBkaWROb3RIeWRyYXRlSW5zdGFuY2UocmV0dXJuRmliZXIudHlwZSwgcmV0dXJuRmliZXIubWVtb2l6ZWRQcm9wcywgcmV0dXJuRmliZXIuc3RhdGVOb2RlLCBpbnN0YW5jZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjaGlsZFRvRGVsZXRlID0gY3JlYXRlRmliZXJGcm9tSG9zdEluc3RhbmNlRm9yRGVsZXRpb24oKTtcbiAgY2hpbGRUb0RlbGV0ZS5zdGF0ZU5vZGUgPSBpbnN0YW5jZTtcbiAgY2hpbGRUb0RlbGV0ZS5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgY2hpbGRUb0RlbGV0ZS5lZmZlY3RUYWcgPSBEZWxldGlvbjtcblxuICAvLyBUaGlzIG1pZ2h0IHNlZW0gbGlrZSBpdCBiZWxvbmdzIG9uIHByb2dyZXNzZWRGaXJzdERlbGV0aW9uLiBIb3dldmVyLFxuICAvLyB0aGVzZSBjaGlsZHJlbiBhcmUgbm90IHBhcnQgb2YgdGhlIHJlY29uY2lsaWF0aW9uIGxpc3Qgb2YgY2hpbGRyZW4uXG4gIC8vIEV2ZW4gaWYgd2UgYWJvcnQgYW5kIHJlcmVjb25jaWxlIHRoZSBjaGlsZHJlbiwgdGhhdCB3aWxsIHRyeSB0byBoeWRyYXRlXG4gIC8vIGFnYWluIGFuZCB0aGUgbm9kZXMgYXJlIHN0aWxsIGluIHRoZSBob3N0IHRyZWUgc28gdGhlc2Ugd2lsbCBiZVxuICAvLyByZWNyZWF0ZWQuXG4gIGlmIChyZXR1cm5GaWJlci5sYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdC5uZXh0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9IHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluc2VydE5vbkh5ZHJhdGVkSW5zdGFuY2UocmV0dXJuRmliZXIsIGZpYmVyKSB7XG4gIGZpYmVyLmVmZmVjdFRhZyB8PSBQbGFjZW1lbnQ7XG4gIHtcbiAgICBzd2l0Y2ggKHJldHVybkZpYmVyLnRhZykge1xuICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBwYXJlbnRDb250YWluZXIgPSByZXR1cm5GaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgICAgICB2YXIgdHlwZSA9IGZpYmVyLnR5cGU7XG4gICAgICAgICAgICAgIHZhciBwcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgICAgICAgZGlkTm90RmluZEh5ZHJhdGFibGVDb250YWluZXJJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIHR5cGUsIHByb3BzKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAgICAgICAgICB2YXIgdGV4dCA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgICAgICAgZGlkTm90RmluZEh5ZHJhdGFibGVDb250YWluZXJUZXh0SW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0ZXh0KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgcGFyZW50VHlwZSA9IHJldHVybkZpYmVyLnR5cGU7XG4gICAgICAgICAgdmFyIHBhcmVudFByb3BzID0gcmV0dXJuRmliZXIubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICB2YXIgcGFyZW50SW5zdGFuY2UgPSByZXR1cm5GaWJlci5zdGF0ZU5vZGU7XG4gICAgICAgICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICAgICAgdmFyIF90eXBlID0gZmliZXIudHlwZTtcbiAgICAgICAgICAgICAgdmFyIF9wcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgICAgICAgZGlkTm90RmluZEh5ZHJhdGFibGVJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIF90eXBlLCBfcHJvcHMpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICAgICAgICAgIHZhciBfdGV4dCA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgICAgICAgZGlkTm90RmluZEh5ZHJhdGFibGVUZXh0SW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCBfdGV4dCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgICAgICAgICAgZGlkTm90RmluZEh5ZHJhdGFibGVTdXNwZW5zZUluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB0cnlIeWRyYXRlKGZpYmVyLCBuZXh0SW5zdGFuY2UpIHtcbiAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciB0eXBlID0gZmliZXIudHlwZTtcbiAgICAgICAgdmFyIHByb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBjYW5IeWRyYXRlSW5zdGFuY2UobmV4dEluc3RhbmNlLCB0eXBlLCBwcm9wcyk7XG4gICAgICAgIGlmIChpbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGZpYmVyLnN0YXRlTm9kZSA9IGluc3RhbmNlO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAge1xuICAgICAgICB2YXIgdGV4dCA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgdmFyIHRleHRJbnN0YW5jZSA9IGNhbkh5ZHJhdGVUZXh0SW5zdGFuY2UobmV4dEluc3RhbmNlLCB0ZXh0KTtcbiAgICAgICAgaWYgKHRleHRJbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGZpYmVyLnN0YXRlTm9kZSA9IHRleHRJbnN0YW5jZTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgaWYgKGVuYWJsZVN1c3BlbnNlU2VydmVyUmVuZGVyZXIpIHtcbiAgICAgICAgICB2YXIgc3VzcGVuc2VJbnN0YW5jZSA9IGNhbkh5ZHJhdGVTdXNwZW5zZUluc3RhbmNlKG5leHRJbnN0YW5jZSk7XG4gICAgICAgICAgaWYgKHN1c3BlbnNlSW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIERvd25ncmFkZSB0aGUgdGFnIHRvIGEgZGVoeWRyYXRlZCBjb21wb25lbnQgdW50aWwgd2UndmUgaHlkcmF0ZWQgaXQuXG4gICAgICAgICAgICBmaWJlci50YWcgPSBEZWh5ZHJhdGVkU3VzcGVuc2VDb21wb25lbnQ7XG4gICAgICAgICAgICBmaWJlci5zdGF0ZU5vZGUgPSBzdXNwZW5zZUluc3RhbmNlO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyeVRvQ2xhaW1OZXh0SHlkcmF0YWJsZUluc3RhbmNlKGZpYmVyKSB7XG4gIGlmICghaXNIeWRyYXRpbmcpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG5leHRJbnN0YW5jZSA9IG5leHRIeWRyYXRhYmxlSW5zdGFuY2U7XG4gIGlmICghbmV4dEluc3RhbmNlKSB7XG4gICAgLy8gTm90aGluZyB0byBoeWRyYXRlLiBNYWtlIGl0IGFuIGluc2VydGlvbi5cbiAgICBpbnNlcnROb25IeWRyYXRlZEluc3RhbmNlKGh5ZHJhdGlvblBhcmVudEZpYmVyLCBmaWJlcik7XG4gICAgaXNIeWRyYXRpbmcgPSBmYWxzZTtcbiAgICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IGZpYmVyO1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgZmlyc3RBdHRlbXB0ZWRJbnN0YW5jZSA9IG5leHRJbnN0YW5jZTtcbiAgaWYgKCF0cnlIeWRyYXRlKGZpYmVyLCBuZXh0SW5zdGFuY2UpKSB7XG4gICAgLy8gSWYgd2UgY2FuJ3QgaHlkcmF0ZSB0aGlzIGluc3RhbmNlIGxldCdzIHRyeSB0aGUgbmV4dCBvbmUuXG4gICAgLy8gV2UgdXNlIHRoaXMgYXMgYSBoZXVyaXN0aWMuIEl0J3MgYmFzZWQgb24gaW50dWl0aW9uIGFuZCBub3QgZGF0YSBzbyBpdFxuICAgIC8vIG1pZ2h0IGJlIGZsYXdlZCBvciB1bm5lY2Vzc2FyeS5cbiAgICBuZXh0SW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcoZmlyc3RBdHRlbXB0ZWRJbnN0YW5jZSk7XG4gICAgaWYgKCFuZXh0SW5zdGFuY2UgfHwgIXRyeUh5ZHJhdGUoZmliZXIsIG5leHRJbnN0YW5jZSkpIHtcbiAgICAgIC8vIE5vdGhpbmcgdG8gaHlkcmF0ZS4gTWFrZSBpdCBhbiBpbnNlcnRpb24uXG4gICAgICBpbnNlcnROb25IeWRyYXRlZEluc3RhbmNlKGh5ZHJhdGlvblBhcmVudEZpYmVyLCBmaWJlcik7XG4gICAgICBpc0h5ZHJhdGluZyA9IGZhbHNlO1xuICAgICAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBmaWJlcjtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gV2UgbWF0Y2hlZCB0aGUgbmV4dCBvbmUsIHdlJ2xsIG5vdyBhc3N1bWUgdGhhdCB0aGUgZmlyc3Qgb25lIHdhc1xuICAgIC8vIHN1cGVyZmx1b3VzIGFuZCB3ZSdsbCBkZWxldGUgaXQuIFNpbmNlIHdlIGNhbid0IGVhZ2VybHkgZGVsZXRlIGl0XG4gICAgLy8gd2UnbGwgaGF2ZSB0byBzY2hlZHVsZSBhIGRlbGV0aW9uLiBUbyBkbyB0aGF0LCB0aGlzIG5vZGUgbmVlZHMgYSBkdW1teVxuICAgIC8vIGZpYmVyIGFzc29jaWF0ZWQgd2l0aCBpdC5cbiAgICBkZWxldGVIeWRyYXRhYmxlSW5zdGFuY2UoaHlkcmF0aW9uUGFyZW50RmliZXIsIGZpcnN0QXR0ZW1wdGVkSW5zdGFuY2UpO1xuICB9XG4gIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gZmliZXI7XG4gIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBnZXRGaXJzdEh5ZHJhdGFibGVDaGlsZChuZXh0SW5zdGFuY2UpO1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlVG9IeWRyYXRlSG9zdEluc3RhbmNlKGZpYmVyLCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0KSB7XG4gIGlmICghc3VwcG9ydHNIeWRyYXRpb24pIHtcbiAgICBpbnZhcmlhbnQoZmFsc2UsICdFeHBlY3RlZCBwcmVwYXJlVG9IeWRyYXRlSG9zdEluc3RhbmNlKCkgdG8gbmV2ZXIgYmUgY2FsbGVkLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICB9XG5cbiAgdmFyIGluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlO1xuICB2YXIgdXBkYXRlUGF5bG9hZCA9IGh5ZHJhdGVJbnN0YW5jZShpbnN0YW5jZSwgZmliZXIudHlwZSwgZmliZXIubWVtb2l6ZWRQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCwgZmliZXIpO1xuICAvLyBUT0RPOiBUeXBlIHRoaXMgc3BlY2lmaWMgdG8gdGhpcyB0eXBlIG9mIGNvbXBvbmVudC5cbiAgZmliZXIudXBkYXRlUXVldWUgPSB1cGRhdGVQYXlsb2FkO1xuICAvLyBJZiB0aGUgdXBkYXRlIHBheWxvYWQgaW5kaWNhdGVzIHRoYXQgdGhlcmUgaXMgYSBjaGFuZ2Ugb3IgaWYgdGhlcmVcbiAgLy8gaXMgYSBuZXcgcmVmIHdlIG1hcmsgdGhpcyBhcyBhbiB1cGRhdGUuXG4gIGlmICh1cGRhdGVQYXlsb2FkICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlVG9IeWRyYXRlSG9zdFRleHRJbnN0YW5jZShmaWJlcikge1xuICBpZiAoIXN1cHBvcnRzSHlkcmF0aW9uKSB7XG4gICAgaW52YXJpYW50KGZhbHNlLCAnRXhwZWN0ZWQgcHJlcGFyZVRvSHlkcmF0ZUhvc3RUZXh0SW5zdGFuY2UoKSB0byBuZXZlciBiZSBjYWxsZWQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gIH1cblxuICB2YXIgdGV4dEluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlO1xuICB2YXIgdGV4dENvbnRlbnQgPSBmaWJlci5tZW1vaXplZFByb3BzO1xuICB2YXIgc2hvdWxkVXBkYXRlID0gaHlkcmF0ZVRleHRJbnN0YW5jZSh0ZXh0SW5zdGFuY2UsIHRleHRDb250ZW50LCBmaWJlcik7XG4gIHtcbiAgICBpZiAoc2hvdWxkVXBkYXRlKSB7XG4gICAgICAvLyBXZSBhc3N1bWUgdGhhdCBwcmVwYXJlVG9IeWRyYXRlSG9zdFRleHRJbnN0YW5jZSBpcyBjYWxsZWQgaW4gYSBjb250ZXh0IHdoZXJlIHRoZVxuICAgICAgLy8gaHlkcmF0aW9uIHBhcmVudCBpcyB0aGUgcGFyZW50IGhvc3QgY29tcG9uZW50IG9mIHRoaXMgaG9zdCB0ZXh0LlxuICAgICAgdmFyIHJldHVybkZpYmVyID0gaHlkcmF0aW9uUGFyZW50RmliZXI7XG4gICAgICBpZiAocmV0dXJuRmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgc3dpdGNoIChyZXR1cm5GaWJlci50YWcpIHtcbiAgICAgICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB2YXIgcGFyZW50Q29udGFpbmVyID0gcmV0dXJuRmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICAgICAgICAgIGRpZE5vdE1hdGNoSHlkcmF0ZWRDb250YWluZXJUZXh0SW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0ZXh0SW5zdGFuY2UsIHRleHRDb250ZW50KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB2YXIgcGFyZW50VHlwZSA9IHJldHVybkZpYmVyLnR5cGU7XG4gICAgICAgICAgICAgIHZhciBwYXJlbnRQcm9wcyA9IHJldHVybkZpYmVyLm1lbW9pemVkUHJvcHM7XG4gICAgICAgICAgICAgIHZhciBwYXJlbnRJbnN0YW5jZSA9IHJldHVybkZpYmVyLnN0YXRlTm9kZTtcbiAgICAgICAgICAgICAgZGlkTm90TWF0Y2hIeWRyYXRlZFRleHRJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIHRleHRJbnN0YW5jZSwgdGV4dENvbnRlbnQpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gc2hvdWxkVXBkYXRlO1xufVxuXG5mdW5jdGlvbiBza2lwUGFzdERlaHlkcmF0ZWRTdXNwZW5zZUluc3RhbmNlKGZpYmVyKSB7XG4gIGlmICghc3VwcG9ydHNIeWRyYXRpb24pIHtcbiAgICBpbnZhcmlhbnQoZmFsc2UsICdFeHBlY3RlZCBza2lwUGFzdERlaHlkcmF0ZWRTdXNwZW5zZUluc3RhbmNlKCkgdG8gbmV2ZXIgYmUgY2FsbGVkLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICB9XG4gIHZhciBzdXNwZW5zZUluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlO1xuICAhc3VzcGVuc2VJbnN0YW5jZSA/IGludmFyaWFudChmYWxzZSwgJ0V4cGVjdGVkIHRvIGhhdmUgYSBoeWRyYXRlZCBzdXNwZW5zZSBpbnN0YW5jZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKSA6IHZvaWQgMDtcbiAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGdldE5leHRIeWRyYXRhYmxlSW5zdGFuY2VBZnRlclN1c3BlbnNlSW5zdGFuY2Uoc3VzcGVuc2VJbnN0YW5jZSk7XG59XG5cbmZ1bmN0aW9uIHBvcFRvTmV4dEhvc3RQYXJlbnQoZmliZXIpIHtcbiAgdmFyIHBhcmVudCA9IGZpYmVyLnJldHVybjtcbiAgd2hpbGUgKHBhcmVudCAhPT0gbnVsbCAmJiBwYXJlbnQudGFnICE9PSBIb3N0Q29tcG9uZW50ICYmIHBhcmVudC50YWcgIT09IEhvc3RSb290ICYmIHBhcmVudC50YWcgIT09IERlaHlkcmF0ZWRTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgIHBhcmVudCA9IHBhcmVudC5yZXR1cm47XG4gIH1cbiAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBwYXJlbnQ7XG59XG5cbmZ1bmN0aW9uIHBvcEh5ZHJhdGlvblN0YXRlKGZpYmVyKSB7XG4gIGlmICghc3VwcG9ydHNIeWRyYXRpb24pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGZpYmVyICE9PSBoeWRyYXRpb25QYXJlbnRGaWJlcikge1xuICAgIC8vIFdlJ3JlIGRlZXBlciB0aGFuIHRoZSBjdXJyZW50IGh5ZHJhdGlvbiBjb250ZXh0LCBpbnNpZGUgYW4gaW5zZXJ0ZWRcbiAgICAvLyB0cmVlLlxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoIWlzSHlkcmF0aW5nKSB7XG4gICAgLy8gSWYgd2UncmUgbm90IGN1cnJlbnRseSBoeWRyYXRpbmcgYnV0IHdlJ3JlIGluIGEgaHlkcmF0aW9uIGNvbnRleHQsIHRoZW5cbiAgICAvLyB3ZSB3ZXJlIGFuIGluc2VydGlvbiBhbmQgbm93IG5lZWQgdG8gcG9wIHVwIHJlZW50ZXIgaHlkcmF0aW9uIG9mIG91clxuICAgIC8vIHNpYmxpbmdzLlxuICAgIHBvcFRvTmV4dEhvc3RQYXJlbnQoZmliZXIpO1xuICAgIGlzSHlkcmF0aW5nID0gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgdHlwZSA9IGZpYmVyLnR5cGU7XG5cbiAgLy8gSWYgd2UgaGF2ZSBhbnkgcmVtYWluaW5nIGh5ZHJhdGFibGUgbm9kZXMsIHdlIG5lZWQgdG8gZGVsZXRlIHRoZW0gbm93LlxuICAvLyBXZSBvbmx5IGRvIHRoaXMgZGVlcGVyIHRoYW4gaGVhZCBhbmQgYm9keSBzaW5jZSB0aGV5IHRlbmQgdG8gaGF2ZSByYW5kb21cbiAgLy8gb3RoZXIgbm9kZXMgaW4gdGhlbS4gV2UgYWxzbyBpZ25vcmUgY29tcG9uZW50cyB3aXRoIHB1cmUgdGV4dCBjb250ZW50IGluXG4gIC8vIHNpZGUgb2YgdGhlbS5cbiAgLy8gVE9ETzogQmV0dGVyIGhldXJpc3RpYy5cbiAgaWYgKGZpYmVyLnRhZyAhPT0gSG9zdENvbXBvbmVudCB8fCB0eXBlICE9PSAnaGVhZCcgJiYgdHlwZSAhPT0gJ2JvZHknICYmICFzaG91bGRTZXRUZXh0Q29udGVudCh0eXBlLCBmaWJlci5tZW1vaXplZFByb3BzKSkge1xuICAgIHZhciBuZXh0SW5zdGFuY2UgPSBuZXh0SHlkcmF0YWJsZUluc3RhbmNlO1xuICAgIHdoaWxlIChuZXh0SW5zdGFuY2UpIHtcbiAgICAgIGRlbGV0ZUh5ZHJhdGFibGVJbnN0YW5jZShmaWJlciwgbmV4dEluc3RhbmNlKTtcbiAgICAgIG5leHRJbnN0YW5jZSA9IGdldE5leHRIeWRyYXRhYmxlU2libGluZyhuZXh0SW5zdGFuY2UpO1xuICAgIH1cbiAgfVxuXG4gIHBvcFRvTmV4dEhvc3RQYXJlbnQoZmliZXIpO1xuICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gaHlkcmF0aW9uUGFyZW50RmliZXIgPyBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcoZmliZXIuc3RhdGVOb2RlKSA6IG51bGw7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZXNldEh5ZHJhdGlvblN0YXRlKCkge1xuICBpZiAoIXN1cHBvcnRzSHlkcmF0aW9uKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBudWxsO1xuICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gbnVsbDtcbiAgaXNIeWRyYXRpbmcgPSBmYWxzZTtcbn1cblxudmFyIFJlYWN0Q3VycmVudE93bmVyJDMgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcblxudmFyIGRpZFJlY2VpdmVVcGRhdGUgPSBmYWxzZTtcblxudmFyIGRpZFdhcm5BYm91dEJhZENsYXNzID0gdm9pZCAwO1xudmFyIGRpZFdhcm5BYm91dENvbnRleHRUeXBlT25GdW5jdGlvbkNvbXBvbmVudCA9IHZvaWQgMDtcbnZhciBkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50ID0gdm9pZCAwO1xudmFyIGRpZFdhcm5BYm91dEZ1bmN0aW9uUmVmcyA9IHZvaWQgMDtcbnZhciBkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzID0gdm9pZCAwO1xuXG57XG4gIGRpZFdhcm5BYm91dEJhZENsYXNzID0ge307XG4gIGRpZFdhcm5BYm91dENvbnRleHRUeXBlT25GdW5jdGlvbkNvbXBvbmVudCA9IHt9O1xuICBkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50ID0ge307XG4gIGRpZFdhcm5BYm91dEZ1bmN0aW9uUmVmcyA9IHt9O1xuICBkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckV4cGlyYXRpb25UaW1lKSB7XG4gIGlmIChjdXJyZW50JCQxID09PSBudWxsKSB7XG4gICAgLy8gSWYgdGhpcyBpcyBhIGZyZXNoIG5ldyBjb21wb25lbnQgdGhhdCBoYXNuJ3QgYmVlbiByZW5kZXJlZCB5ZXQsIHdlXG4gICAgLy8gd29uJ3QgdXBkYXRlIGl0cyBjaGlsZCBzZXQgYnkgYXBwbHlpbmcgbWluaW1hbCBzaWRlLWVmZmVjdHMuIEluc3RlYWQsXG4gICAgLy8gd2Ugd2lsbCBhZGQgdGhlbSBhbGwgdG8gdGhlIGNoaWxkIGJlZm9yZSBpdCBnZXRzIHJlbmRlcmVkLiBUaGF0IG1lYW5zXG4gICAgLy8gd2UgY2FuIG9wdGltaXplIHRoaXMgcmVjb25jaWxpYXRpb24gcGFzcyBieSBub3QgdHJhY2tpbmcgc2lkZS1lZmZlY3RzLlxuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbW91bnRDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgbnVsbCwgbmV4dENoaWxkcmVuLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgdGhlIGN1cnJlbnQgY2hpbGQgaXMgdGhlIHNhbWUgYXMgdGhlIHdvcmsgaW4gcHJvZ3Jlc3MsIGl0IG1lYW5zIHRoYXRcbiAgICAvLyB3ZSBoYXZlbid0IHlldCBzdGFydGVkIGFueSB3b3JrIG9uIHRoZXNlIGNoaWxkcmVuLiBUaGVyZWZvcmUsIHdlIHVzZVxuICAgIC8vIHRoZSBjbG9uZSBhbGdvcml0aG0gdG8gY3JlYXRlIGEgY29weSBvZiBhbGwgdGhlIGN1cnJlbnQgY2hpbGRyZW4uXG5cbiAgICAvLyBJZiB3ZSBoYWQgYW55IHByb2dyZXNzZWQgd29yayBhbHJlYWR5LCB0aGF0IGlzIGludmFsaWQgYXQgdGhpcyBwb2ludCBzb1xuICAgIC8vIGxldCdzIHRocm93IGl0IG91dC5cbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlY29uY2lsZUNoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBjdXJyZW50JCQxLmNoaWxkLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JjZVVubW91bnRDdXJyZW50QW5kUmVjb25jaWxlKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckV4cGlyYXRpb25UaW1lKSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gaXMgZm9yayBvZiByZWNvbmNpbGVDaGlsZHJlbi4gSXQncyB1c2VkIGluIGNhc2VzIHdoZXJlIHdlXG4gIC8vIHdhbnQgdG8gcmVjb25jaWxlIHdpdGhvdXQgbWF0Y2hpbmcgYWdhaW5zdCB0aGUgZXhpc3Rpbmcgc2V0LiBUaGlzIGhhcyB0aGVcbiAgLy8gZWZmZWN0IG9mIGFsbCBjdXJyZW50IGNoaWxkcmVuIGJlaW5nIHVubW91bnRlZDsgZXZlbiBpZiB0aGUgdHlwZSBhbmQga2V5XG4gIC8vIGFyZSB0aGUgc2FtZSwgdGhlIG9sZCBjaGlsZCBpcyB1bm1vdW50ZWQgYW5kIGEgbmV3IGNoaWxkIGlzIGNyZWF0ZWQuXG4gIC8vXG4gIC8vIFRvIGRvIHRoaXMsIHdlJ3JlIGdvaW5nIHRvIGdvIHRocm91Z2ggdGhlIHJlY29uY2lsZSBhbGdvcml0aG0gdHdpY2UuIEluXG4gIC8vIHRoZSBmaXJzdCBwYXNzLCB3ZSBzY2hlZHVsZSBhIGRlbGV0aW9uIGZvciBhbGwgdGhlIGN1cnJlbnQgY2hpbGRyZW4gYnlcbiAgLy8gcGFzc2luZyBudWxsLlxuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlY29uY2lsZUNoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBjdXJyZW50JCQxLmNoaWxkLCBudWxsLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gIC8vIEluIHRoZSBzZWNvbmQgcGFzcywgd2UgbW91bnQgdGhlIG5ldyBjaGlsZHJlbi4gVGhlIHRyaWNrIGhlcmUgaXMgdGhhdCB3ZVxuICAvLyBwYXNzIG51bGwgaW4gcGxhY2Ugb2Ygd2hlcmUgd2UgdXN1YWxseSBwYXNzIHRoZSBjdXJyZW50IGNoaWxkIHNldC4gVGhpcyBoYXNcbiAgLy8gdGhlIGVmZmVjdCBvZiByZW1vdW50aW5nIGFsbCBjaGlsZHJlbiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlaXIgdGhlaXJcbiAgLy8gaWRlbnRpdHkgbWF0Y2hlcy5cbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgbnVsbCwgbmV4dENoaWxkcmVuLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUZvcndhcmRSZWYoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICAvLyBUT0RPOiBjdXJyZW50IGNhbiBiZSBub24tbnVsbCBoZXJlIGV2ZW4gaWYgdGhlIGNvbXBvbmVudFxuICAvLyBoYXNuJ3QgeWV0IG1vdW50ZWQuIFRoaXMgaGFwcGVucyBhZnRlciB0aGUgZmlyc3QgcmVuZGVyIHN1c3BlbmRzLlxuICAvLyBXZSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBmaW5lIG9yIGNhbiBjYXVzZSBpc3N1ZXMuXG5cbiAge1xuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgLy8gTGF6eSBjb21wb25lbnQgcHJvcHMgY2FuJ3QgYmUgdmFsaWRhdGVkIGluIGNyZWF0ZUVsZW1lbnRcbiAgICAgIC8vIGJlY2F1c2UgdGhleSdyZSBvbmx5IGd1YXJhbnRlZWQgdG8gYmUgcmVzb2x2ZWQgaGVyZS5cbiAgICAgIHZhciBpbm5lclByb3BUeXBlcyA9IENvbXBvbmVudC5wcm9wVHlwZXM7XG4gICAgICBpZiAoaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgY2hlY2tQcm9wVHlwZXMoaW5uZXJQcm9wVHlwZXMsIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgcHJvcHNcbiAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCksIGdldEN1cnJlbnRGaWJlclN0YWNrSW5EZXYpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciByZW5kZXIgPSBDb21wb25lbnQucmVuZGVyO1xuICB2YXIgcmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuXG4gIC8vIFRoZSByZXN0IGlzIGEgZm9yayBvZiB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudFxuICB2YXIgbmV4dENoaWxkcmVuID0gdm9pZCAwO1xuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICB7XG4gICAgUmVhY3RDdXJyZW50T3duZXIkMy5jdXJyZW50ID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgc2V0Q3VycmVudFBoYXNlKCdyZW5kZXInKTtcbiAgICBuZXh0Q2hpbGRyZW4gPSByZW5kZXJXaXRoSG9va3MoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlciwgbmV4dFByb3BzLCByZWYsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgICBpZiAoZGVidWdSZW5kZXJQaGFzZVNpZGVFZmZlY3RzIHx8IGRlYnVnUmVuZGVyUGhhc2VTaWRlRWZmZWN0c0ZvclN0cmljdE1vZGUgJiYgd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIC8vIE9ubHkgZG91YmxlLXJlbmRlciBjb21wb25lbnRzIHdpdGggSG9va3NcbiAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgIG5leHRDaGlsZHJlbiA9IHJlbmRlcldpdGhIb29rcyhjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyLCBuZXh0UHJvcHMsIHJlZiwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBzZXRDdXJyZW50UGhhc2UobnVsbCk7XG4gIH1cblxuICBpZiAoY3VycmVudCQkMSAhPT0gbnVsbCAmJiAhZGlkUmVjZWl2ZVVwZGF0ZSkge1xuICAgIGJhaWxvdXRIb29rcyhjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gIH1cblxuICAvLyBSZWFjdCBEZXZUb29scyByZWFkcyB0aGlzIGZsYWcuXG4gIHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyB8PSBQZXJmb3JtZWRXb3JrO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTWVtb0NvbXBvbmVudChjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHVwZGF0ZUV4cGlyYXRpb25UaW1lLCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICBpZiAoY3VycmVudCQkMSA9PT0gbnVsbCkge1xuICAgIHZhciB0eXBlID0gQ29tcG9uZW50LnR5cGU7XG4gICAgaWYgKGlzU2ltcGxlRnVuY3Rpb25Db21wb25lbnQodHlwZSkgJiYgQ29tcG9uZW50LmNvbXBhcmUgPT09IG51bGwgJiZcbiAgICAvLyBTaW1wbGVNZW1vQ29tcG9uZW50IGNvZGVwYXRoIGRvZXNuJ3QgcmVzb2x2ZSBvdXRlciBwcm9wcyBlaXRoZXIuXG4gICAgQ29tcG9uZW50LmRlZmF1bHRQcm9wcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBJZiB0aGlzIGlzIGEgcGxhaW4gZnVuY3Rpb24gY29tcG9uZW50IHdpdGhvdXQgZGVmYXVsdCBwcm9wcyxcbiAgICAgIC8vIGFuZCB3aXRoIG9ubHkgdGhlIGRlZmF1bHQgc2hhbGxvdyBjb21wYXJpc29uLCB3ZSB1cGdyYWRlIGl0XG4gICAgICAvLyB0byBhIFNpbXBsZU1lbW9Db21wb25lbnQgdG8gYWxsb3cgZmFzdCBwYXRoIHVwZGF0ZXMuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy50YWcgPSBTaW1wbGVNZW1vQ29tcG9uZW50O1xuICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IHR5cGU7XG4gICAgICB7XG4gICAgICAgIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgdHlwZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdXBkYXRlU2ltcGxlTWVtb0NvbXBvbmVudChjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgdHlwZSwgbmV4dFByb3BzLCB1cGRhdGVFeHBpcmF0aW9uVGltZSwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgIH1cbiAgICB7XG4gICAgICB2YXIgaW5uZXJQcm9wVHlwZXMgPSB0eXBlLnByb3BUeXBlcztcbiAgICAgIGlmIChpbm5lclByb3BUeXBlcykge1xuICAgICAgICAvLyBJbm5lciBtZW1vIGNvbXBvbmVudCBwcm9wcyBhcmVuJ3QgY3VycmVudGx5IHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50LlxuICAgICAgICAvLyBXZSBjb3VsZCBtb3ZlIGl0IHRoZXJlLCBidXQgd2UnZCBzdGlsbCBuZWVkIHRoaXMgZm9yIGxhenkgY29kZSBwYXRoLlxuICAgICAgICBjaGVja1Byb3BUeXBlcyhpbm5lclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUodHlwZSksIGdldEN1cnJlbnRGaWJlclN0YWNrSW5EZXYpO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgY2hpbGQgPSBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHMoQ29tcG9uZW50LnR5cGUsIG51bGwsIG5leHRQcm9wcywgbnVsbCwgd29ya0luUHJvZ3Jlc3MubW9kZSwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgIGNoaWxkLnJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjtcbiAgICBjaGlsZC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGNoaWxkO1xuICAgIHJldHVybiBjaGlsZDtcbiAgfVxuICB7XG4gICAgdmFyIF90eXBlID0gQ29tcG9uZW50LnR5cGU7XG4gICAgdmFyIF9pbm5lclByb3BUeXBlcyA9IF90eXBlLnByb3BUeXBlcztcbiAgICBpZiAoX2lubmVyUHJvcFR5cGVzKSB7XG4gICAgICAvLyBJbm5lciBtZW1vIGNvbXBvbmVudCBwcm9wcyBhcmVuJ3QgY3VycmVudGx5IHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50LlxuICAgICAgLy8gV2UgY291bGQgbW92ZSBpdCB0aGVyZSwgYnV0IHdlJ2Qgc3RpbGwgbmVlZCB0aGlzIGZvciBsYXp5IGNvZGUgcGF0aC5cbiAgICAgIGNoZWNrUHJvcFR5cGVzKF9pbm5lclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKF90eXBlKSwgZ2V0Q3VycmVudEZpYmVyU3RhY2tJbkRldik7XG4gICAgfVxuICB9XG4gIHZhciBjdXJyZW50Q2hpbGQgPSBjdXJyZW50JCQxLmNoaWxkOyAvLyBUaGlzIGlzIGFsd2F5cyBleGFjdGx5IG9uZSBjaGlsZFxuICBpZiAodXBkYXRlRXhwaXJhdGlvblRpbWUgPCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICAgIC8vIFRoaXMgd2lsbCBiZSB0aGUgcHJvcHMgd2l0aCByZXNvbHZlZCBkZWZhdWx0UHJvcHMsXG4gICAgLy8gdW5saWtlIGN1cnJlbnQubWVtb2l6ZWRQcm9wcyB3aGljaCB3aWxsIGJlIHRoZSB1bnJlc29sdmVkIG9uZXMuXG4gICAgdmFyIHByZXZQcm9wcyA9IGN1cnJlbnRDaGlsZC5tZW1vaXplZFByb3BzO1xuICAgIC8vIERlZmF1bHQgdG8gc2hhbGxvdyBjb21wYXJpc29uXG4gICAgdmFyIGNvbXBhcmUgPSBDb21wb25lbnQuY29tcGFyZTtcbiAgICBjb21wYXJlID0gY29tcGFyZSAhPT0gbnVsbCA/IGNvbXBhcmUgOiBzaGFsbG93RXF1YWw7XG4gICAgaWYgKGNvbXBhcmUocHJldlByb3BzLCBuZXh0UHJvcHMpICYmIGN1cnJlbnQkJDEucmVmID09PSB3b3JrSW5Qcm9ncmVzcy5yZWYpIHtcbiAgICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgfVxuICB9XG4gIC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cbiAgd29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnIHw9IFBlcmZvcm1lZFdvcms7XG4gIHZhciBuZXdDaGlsZCA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnRDaGlsZCwgbmV4dFByb3BzLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gIG5ld0NoaWxkLnJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjtcbiAgbmV3Q2hpbGQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbmV3Q2hpbGQ7XG4gIHJldHVybiBuZXdDaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU2ltcGxlTWVtb0NvbXBvbmVudChjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHVwZGF0ZUV4cGlyYXRpb25UaW1lLCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICAvLyBUT0RPOiBjdXJyZW50IGNhbiBiZSBub24tbnVsbCBoZXJlIGV2ZW4gaWYgdGhlIGNvbXBvbmVudFxuICAvLyBoYXNuJ3QgeWV0IG1vdW50ZWQuIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBpbm5lciByZW5kZXIgc3VzcGVuZHMuXG4gIC8vIFdlJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGZpbmUgb3IgY2FuIGNhdXNlIGlzc3Vlcy5cblxuICB7XG4gICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAvLyBMYXp5IGNvbXBvbmVudCBwcm9wcyBjYW4ndCBiZSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudFxuICAgICAgLy8gYmVjYXVzZSB0aGV5J3JlIG9ubHkgZ3VhcmFudGVlZCB0byBiZSByZXNvbHZlZCBoZXJlLlxuICAgICAgdmFyIG91dGVyTWVtb1R5cGUgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZTtcbiAgICAgIGlmIChvdXRlck1lbW9UeXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUpIHtcbiAgICAgICAgLy8gV2Ugd2FybiB3aGVuIHlvdSBkZWZpbmUgcHJvcFR5cGVzIG9uIGxhenkoKVxuICAgICAgICAvLyBzbyBsZXQncyBqdXN0IHNraXAgb3ZlciBpdCB0byBmaW5kIG1lbW8oKSBvdXRlciB3cmFwcGVyLlxuICAgICAgICAvLyBJbm5lciBwcm9wcyBmb3IgbWVtbyBhcmUgdmFsaWRhdGVkIGxhdGVyLlxuICAgICAgICBvdXRlck1lbW9UeXBlID0gcmVmaW5lUmVzb2x2ZWRMYXp5Q29tcG9uZW50KG91dGVyTWVtb1R5cGUpO1xuICAgICAgfVxuICAgICAgdmFyIG91dGVyUHJvcFR5cGVzID0gb3V0ZXJNZW1vVHlwZSAmJiBvdXRlck1lbW9UeXBlLnByb3BUeXBlcztcbiAgICAgIGlmIChvdXRlclByb3BUeXBlcykge1xuICAgICAgICBjaGVja1Byb3BUeXBlcyhvdXRlclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCAoU2ltcGxlTWVtb0NvbXBvbmVudCBoYXMgbm8gZGVmYXVsdFByb3BzKVxuICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUob3V0ZXJNZW1vVHlwZSksIGdldEN1cnJlbnRGaWJlclN0YWNrSW5EZXYpO1xuICAgICAgfVxuICAgICAgLy8gSW5uZXIgcHJvcFR5cGVzIHdpbGwgYmUgdmFsaWRhdGVkIGluIHRoZSBmdW5jdGlvbiBjb21wb25lbnQgcGF0aC5cbiAgICB9XG4gIH1cbiAgaWYgKGN1cnJlbnQkJDEgIT09IG51bGwpIHtcbiAgICB2YXIgcHJldlByb3BzID0gY3VycmVudCQkMS5tZW1vaXplZFByb3BzO1xuICAgIGlmIChzaGFsbG93RXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpICYmIGN1cnJlbnQkJDEucmVmID09PSB3b3JrSW5Qcm9ncmVzcy5yZWYpIHtcbiAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSBmYWxzZTtcbiAgICAgIGlmICh1cGRhdGVFeHBpcmF0aW9uVGltZSA8IHJlbmRlckV4cGlyYXRpb25UaW1lKSB7XG4gICAgICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudChjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRnJhZ21lbnQoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckV4cGlyYXRpb25UaW1lKSB7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVNb2RlKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICB2YXIgbmV4dENoaWxkcmVuID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLmNoaWxkcmVuO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlUHJvZmlsZXIoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckV4cGlyYXRpb25UaW1lKSB7XG4gIGlmIChlbmFibGVQcm9maWxlclRpbWVyKSB7XG4gICAgd29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnIHw9IFVwZGF0ZTtcbiAgfVxuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgbmV4dENoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gbWFya1JlZihjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcykge1xuICB2YXIgcmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuICBpZiAoY3VycmVudCQkMSA9PT0gbnVsbCAmJiByZWYgIT09IG51bGwgfHwgY3VycmVudCQkMSAhPT0gbnVsbCAmJiBjdXJyZW50JCQxLnJlZiAhPT0gcmVmKSB7XG4gICAgLy8gU2NoZWR1bGUgYSBSZWYgZWZmZWN0XG4gICAgd29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnIHw9IFJlZjtcbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudChjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckV4cGlyYXRpb25UaW1lKSB7XG4gIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgIC8vIExhenkgY29tcG9uZW50IHByb3BzIGNhbid0IGJlIHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50XG4gICAgICAvLyBiZWNhdXNlIHRoZXkncmUgb25seSBndWFyYW50ZWVkIHRvIGJlIHJlc29sdmVkIGhlcmUuXG4gICAgICB2YXIgaW5uZXJQcm9wVHlwZXMgPSBDb21wb25lbnQucHJvcFR5cGVzO1xuICAgICAgaWYgKGlubmVyUHJvcFR5cGVzKSB7XG4gICAgICAgIGNoZWNrUHJvcFR5cGVzKGlubmVyUHJvcFR5cGVzLCBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIHByb3BzXG4gICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpLCBnZXRDdXJyZW50RmliZXJTdGFja0luRGV2KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgdW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHRydWUpO1xuICB2YXIgY29udGV4dCA9IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCk7XG5cbiAgdmFyIG5leHRDaGlsZHJlbiA9IHZvaWQgMDtcbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAge1xuICAgIFJlYWN0Q3VycmVudE93bmVyJDMuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICAgIHNldEN1cnJlbnRQaGFzZSgncmVuZGVyJyk7XG4gICAgbmV4dENoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgY29udGV4dCwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgIGlmIChkZWJ1Z1JlbmRlclBoYXNlU2lkZUVmZmVjdHMgfHwgZGVidWdSZW5kZXJQaGFzZVNpZGVFZmZlY3RzRm9yU3RyaWN0TW9kZSAmJiB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgLy8gT25seSBkb3VibGUtcmVuZGVyIGNvbXBvbmVudHMgd2l0aCBIb29rc1xuICAgICAgaWYgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgbmV4dENoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgY29udGV4dCwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBzZXRDdXJyZW50UGhhc2UobnVsbCk7XG4gIH1cblxuICBpZiAoY3VycmVudCQkMSAhPT0gbnVsbCAmJiAhZGlkUmVjZWl2ZVVwZGF0ZSkge1xuICAgIGJhaWxvdXRIb29rcyhjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gIH1cblxuICAvLyBSZWFjdCBEZXZUb29scyByZWFkcyB0aGlzIGZsYWcuXG4gIHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyB8PSBQZXJmb3JtZWRXb3JrO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlQ2xhc3NDb21wb25lbnQoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICB7XG4gICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAvLyBMYXp5IGNvbXBvbmVudCBwcm9wcyBjYW4ndCBiZSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudFxuICAgICAgLy8gYmVjYXVzZSB0aGV5J3JlIG9ubHkgZ3VhcmFudGVlZCB0byBiZSByZXNvbHZlZCBoZXJlLlxuICAgICAgdmFyIGlubmVyUHJvcFR5cGVzID0gQ29tcG9uZW50LnByb3BUeXBlcztcbiAgICAgIGlmIChpbm5lclByb3BUeXBlcykge1xuICAgICAgICBjaGVja1Byb3BUeXBlcyhpbm5lclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSwgZ2V0Q3VycmVudEZpYmVyU3RhY2tJbkRldik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUHVzaCBjb250ZXh0IHByb3ZpZGVycyBlYXJseSB0byBwcmV2ZW50IGNvbnRleHQgc3RhY2sgbWlzbWF0Y2hlcy5cbiAgLy8gRHVyaW5nIG1vdW50aW5nIHdlIGRvbid0IGtub3cgdGhlIGNoaWxkIGNvbnRleHQgeWV0IGFzIHRoZSBpbnN0YW5jZSBkb2Vzbid0IGV4aXN0LlxuICAvLyBXZSB3aWxsIGludmFsaWRhdGUgdGhlIGNoaWxkIGNvbnRleHQgaW4gZmluaXNoQ2xhc3NDb21wb25lbnQoKSByaWdodCBhZnRlciByZW5kZXJpbmcuXG4gIHZhciBoYXNDb250ZXh0ID0gdm9pZCAwO1xuICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgIGhhc0NvbnRleHQgPSB0cnVlO1xuICAgIHB1c2hDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpO1xuICB9IGVsc2Uge1xuICAgIGhhc0NvbnRleHQgPSBmYWxzZTtcbiAgfVxuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuXG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgdmFyIHNob3VsZFVwZGF0ZSA9IHZvaWQgMDtcbiAgaWYgKGluc3RhbmNlID09PSBudWxsKSB7XG4gICAgaWYgKGN1cnJlbnQkJDEgIT09IG51bGwpIHtcbiAgICAgIC8vIEFuIGNsYXNzIGNvbXBvbmVudCB3aXRob3V0IGFuIGluc3RhbmNlIG9ubHkgbW91bnRzIGlmIGl0IHN1c3BlbmRlZFxuICAgICAgLy8gaW5zaWRlIGEgbm9uLSBjb25jdXJyZW50IHRyZWUsIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gV2Ugd2FudCB0b1xuICAgICAgLy8gdHJlZSBpdCBsaWtlIGEgbmV3IG1vdW50LCBldmVuIHRob3VnaCBhbiBlbXB0eSB2ZXJzaW9uIG9mIGl0IGFscmVhZHlcbiAgICAgIC8vIGNvbW1pdHRlZC4gRGlzY29ubmVjdCB0aGUgYWx0ZXJuYXRlIHBvaW50ZXJzLlxuICAgICAgY3VycmVudCQkMS5hbHRlcm5hdGUgPSBudWxsO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICAgIC8vIFNpbmNlIHRoaXMgaXMgY29uY2VwdHVhbGx5IGEgbmV3IGZpYmVyLCBzY2hlZHVsZSBhIFBsYWNlbWVudCBlZmZlY3RcbiAgICAgIHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyB8PSBQbGFjZW1lbnQ7XG4gICAgfVxuICAgIC8vIEluIHRoZSBpbml0aWFsIHBhc3Mgd2UgbWlnaHQgbmVlZCB0byBjb25zdHJ1Y3QgdGhlIGluc3RhbmNlLlxuICAgIGNvbnN0cnVjdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgbW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgIHNob3VsZFVwZGF0ZSA9IHRydWU7XG4gIH0gZWxzZSBpZiAoY3VycmVudCQkMSA9PT0gbnVsbCkge1xuICAgIC8vIEluIGEgcmVzdW1lLCB3ZSdsbCBhbHJlYWR5IGhhdmUgYW4gaW5zdGFuY2Ugd2UgY2FuIHJldXNlLlxuICAgIHNob3VsZFVwZGF0ZSA9IHJlc3VtZU1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgfSBlbHNlIHtcbiAgICBzaG91bGRVcGRhdGUgPSB1cGRhdGVDbGFzc0luc3RhbmNlKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICB9XG4gIHZhciBuZXh0VW5pdE9mV29yayA9IGZpbmlzaENsYXNzQ29tcG9uZW50KGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHNob3VsZFVwZGF0ZSwgaGFzQ29udGV4dCwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICB7XG4gICAgdmFyIGluc3QgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgaWYgKGluc3QucHJvcHMgIT09IG5leHRQcm9wcykge1xuICAgICAgIWRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMgPyB3YXJuaW5nJDEoZmFsc2UsICdJdCBsb29rcyBsaWtlICVzIGlzIHJlYXNzaWduaW5nIGl0cyBvd24gYHRoaXMucHJvcHNgIHdoaWxlIHJlbmRlcmluZy4gJyArICdUaGlzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGNhbiBsZWFkIHRvIGNvbmZ1c2luZyBidWdzLicsIGdldENvbXBvbmVudE5hbWUod29ya0luUHJvZ3Jlc3MudHlwZSkgfHwgJ2EgY29tcG9uZW50JykgOiB2b2lkIDA7XG4gICAgICBkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5leHRVbml0T2ZXb3JrO1xufVxuXG5mdW5jdGlvbiBmaW5pc2hDbGFzc0NvbXBvbmVudChjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBzaG91bGRVcGRhdGUsIGhhc0NvbnRleHQsIHJlbmRlckV4cGlyYXRpb25UaW1lKSB7XG4gIC8vIFJlZnMgc2hvdWxkIHVwZGF0ZSBldmVuIGlmIHNob3VsZENvbXBvbmVudFVwZGF0ZSByZXR1cm5zIGZhbHNlXG4gIG1hcmtSZWYoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MpO1xuXG4gIHZhciBkaWRDYXB0dXJlRXJyb3IgPSAod29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnICYgRGlkQ2FwdHVyZSkgIT09IE5vRWZmZWN0O1xuXG4gIGlmICghc2hvdWxkVXBkYXRlICYmICFkaWRDYXB0dXJlRXJyb3IpIHtcbiAgICAvLyBDb250ZXh0IHByb3ZpZGVycyBzaG91bGQgZGVmZXIgdG8gc0NVIGZvciByZW5kZXJpbmdcbiAgICBpZiAoaGFzQ29udGV4dCkge1xuICAgICAgaW52YWxpZGF0ZUNvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgfVxuXG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICAvLyBSZXJlbmRlclxuICBSZWFjdEN1cnJlbnRPd25lciQzLmN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcztcbiAgdmFyIG5leHRDaGlsZHJlbiA9IHZvaWQgMDtcbiAgaWYgKGRpZENhcHR1cmVFcnJvciAmJiB0eXBlb2YgQ29tcG9uZW50LmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIElmIHdlIGNhcHR1cmVkIGFuIGVycm9yLCBidXQgZ2V0RGVyaXZlZFN0YXRlRnJvbSBjYXRjaCBpcyBub3QgZGVmaW5lZCxcbiAgICAvLyB1bm1vdW50IGFsbCB0aGUgY2hpbGRyZW4uIGNvbXBvbmVudERpZENhdGNoIHdpbGwgc2NoZWR1bGUgYW4gdXBkYXRlIHRvXG4gICAgLy8gcmUtcmVuZGVyIGEgZmFsbGJhY2suIFRoaXMgaXMgdGVtcG9yYXJ5IHVudGlsIHdlIG1pZ3JhdGUgZXZlcnlvbmUgdG9cbiAgICAvLyB0aGUgbmV3IEFQSS5cbiAgICAvLyBUT0RPOiBXYXJuIGluIGEgZnV0dXJlIHJlbGVhc2UuXG4gICAgbmV4dENoaWxkcmVuID0gbnVsbDtcblxuICAgIGlmIChlbmFibGVQcm9maWxlclRpbWVyKSB7XG4gICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHtcbiAgICAgIHNldEN1cnJlbnRQaGFzZSgncmVuZGVyJyk7XG4gICAgICBuZXh0Q2hpbGRyZW4gPSBpbnN0YW5jZS5yZW5kZXIoKTtcbiAgICAgIGlmIChkZWJ1Z1JlbmRlclBoYXNlU2lkZUVmZmVjdHMgfHwgZGVidWdSZW5kZXJQaGFzZVNpZGVFZmZlY3RzRm9yU3RyaWN0TW9kZSAmJiB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICBpbnN0YW5jZS5yZW5kZXIoKTtcbiAgICAgIH1cbiAgICAgIHNldEN1cnJlbnRQaGFzZShudWxsKTtcbiAgICB9XG4gIH1cblxuICAvLyBSZWFjdCBEZXZUb29scyByZWFkcyB0aGlzIGZsYWcuXG4gIHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyB8PSBQZXJmb3JtZWRXb3JrO1xuICBpZiAoY3VycmVudCQkMSAhPT0gbnVsbCAmJiBkaWRDYXB0dXJlRXJyb3IpIHtcbiAgICAvLyBJZiB3ZSdyZSByZWNvdmVyaW5nIGZyb20gYW4gZXJyb3IsIHJlY29uY2lsZSB3aXRob3V0IHJldXNpbmcgYW55IG9mXG4gICAgLy8gdGhlIGV4aXN0aW5nIGNoaWxkcmVuLiBDb25jZXB0dWFsbHksIHRoZSBub3JtYWwgY2hpbGRyZW4gYW5kIHRoZSBjaGlsZHJlblxuICAgIC8vIHRoYXQgYXJlIHNob3duIG9uIGVycm9yIGFyZSB0d28gZGlmZmVyZW50IHNldHMsIHNvIHdlIHNob3VsZG4ndCByZXVzZVxuICAgIC8vIG5vcm1hbCBjaGlsZHJlbiBldmVuIGlmIHRoZWlyIGlkZW50aXRpZXMgbWF0Y2guXG4gICAgZm9yY2VVbm1vdW50Q3VycmVudEFuZFJlY29uY2lsZShjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICB9XG5cbiAgLy8gTWVtb2l6ZSBzdGF0ZSB1c2luZyB0aGUgdmFsdWVzIHdlIGp1c3QgdXNlZCB0byByZW5kZXIuXG4gIC8vIFRPRE86IFJlc3RydWN0dXJlIHNvIHdlIG5ldmVyIHJlYWQgdmFsdWVzIGZyb20gdGhlIGluc3RhbmNlLlxuICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gaW5zdGFuY2Uuc3RhdGU7XG5cbiAgLy8gVGhlIGNvbnRleHQgbWlnaHQgaGF2ZSBjaGFuZ2VkIHNvIHdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgaXQuXG4gIGlmIChoYXNDb250ZXh0KSB7XG4gICAgaW52YWxpZGF0ZUNvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCB0cnVlKTtcbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gcHVzaEhvc3RSb290Q29udGV4dCh3b3JrSW5Qcm9ncmVzcykge1xuICB2YXIgcm9vdCA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgaWYgKHJvb3QucGVuZGluZ0NvbnRleHQpIHtcbiAgICBwdXNoVG9wTGV2ZWxDb250ZXh0T2JqZWN0KHdvcmtJblByb2dyZXNzLCByb290LnBlbmRpbmdDb250ZXh0LCByb290LnBlbmRpbmdDb250ZXh0ICE9PSByb290LmNvbnRleHQpO1xuICB9IGVsc2UgaWYgKHJvb3QuY29udGV4dCkge1xuICAgIC8vIFNob3VsZCBhbHdheXMgYmUgc2V0XG4gICAgcHVzaFRvcExldmVsQ29udGV4dE9iamVjdCh3b3JrSW5Qcm9ncmVzcywgcm9vdC5jb250ZXh0LCBmYWxzZSk7XG4gIH1cbiAgcHVzaEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MsIHJvb3QuY29udGFpbmVySW5mbyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUhvc3RSb290KGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICBwdXNoSG9zdFJvb3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG4gICEodXBkYXRlUXVldWUgIT09IG51bGwpID8gaW52YXJpYW50KGZhbHNlLCAnSWYgdGhlIHJvb3QgZG9lcyBub3QgaGF2ZSBhbiB1cGRhdGVRdWV1ZSwgd2Ugc2hvdWxkIGhhdmUgYWxyZWFkeSBiYWlsZWQgb3V0LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpIDogdm9pZCAwO1xuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgcHJldlN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIHByZXZDaGlsZHJlbiA9IHByZXZTdGF0ZSAhPT0gbnVsbCA/IHByZXZTdGF0ZS5lbGVtZW50IDogbnVsbDtcbiAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCB1cGRhdGVRdWV1ZSwgbmV4dFByb3BzLCBudWxsLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gIHZhciBuZXh0U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAvLyBDYXV0aW9uOiBSZWFjdCBEZXZUb29scyBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByb3BlcnR5XG4gIC8vIGJlaW5nIGNhbGxlZCBcImVsZW1lbnRcIi5cbiAgdmFyIG5leHRDaGlsZHJlbiA9IG5leHRTdGF0ZS5lbGVtZW50O1xuICBpZiAobmV4dENoaWxkcmVuID09PSBwcmV2Q2hpbGRyZW4pIHtcbiAgICAvLyBJZiB0aGUgc3RhdGUgaXMgdGhlIHNhbWUgYXMgYmVmb3JlLCB0aGF0J3MgYSBiYWlsb3V0IGJlY2F1c2Ugd2UgaGFkXG4gICAgLy8gbm8gd29yayB0aGF0IGV4cGlyZXMgYXQgdGhpcyB0aW1lLlxuICAgIHJlc2V0SHlkcmF0aW9uU3RhdGUoKTtcbiAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICB9XG4gIHZhciByb290ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICBpZiAoKGN1cnJlbnQkJDEgPT09IG51bGwgfHwgY3VycmVudCQkMS5jaGlsZCA9PT0gbnVsbCkgJiYgcm9vdC5oeWRyYXRlICYmIGVudGVySHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpKSB7XG4gICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgY3VycmVudCBjaGlsZHJlbiB0aGlzIG1pZ2h0IGJlIHRoZSBmaXJzdCBwYXNzLlxuICAgIC8vIFdlIGFsd2F5cyB0cnkgdG8gaHlkcmF0ZS4gSWYgdGhpcyBpc24ndCBhIGh5ZHJhdGlvbiBwYXNzIHRoZXJlIHdvbid0XG4gICAgLy8gYmUgYW55IGNoaWxkcmVuIHRvIGh5ZHJhdGUgd2hpY2ggaXMgZWZmZWN0aXZlbHkgdGhlIHNhbWUgdGhpbmcgYXNcbiAgICAvLyBub3QgaHlkcmF0aW5nLlxuXG4gICAgLy8gVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2suIFdlIHRyYWNrIHRoZSBob3N0IHJvb3QgYXMgYSBwbGFjZW1lbnQgdG9cbiAgICAvLyBrbm93IHRoYXQgd2UncmUgY3VycmVudGx5IGluIGEgbW91bnRpbmcgc3RhdGUuIFRoYXQgd2F5IGlzTW91bnRlZFxuICAgIC8vIHdvcmtzIGFzIGV4cGVjdGVkLiBXZSBtdXN0IHJlc2V0IHRoaXMgYmVmb3JlIGNvbW1pdHRpbmcuXG4gICAgLy8gVE9ETzogRGVsZXRlIHRoaXMgd2hlbiB3ZSBkZWxldGUgaXNNb3VudGVkIGFuZCBmaW5kRE9NTm9kZS5cbiAgICB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgfD0gUGxhY2VtZW50O1xuXG4gICAgLy8gRW5zdXJlIHRoYXQgY2hpbGRyZW4gbW91bnQgaW50byB0aGlzIHJvb3Qgd2l0aG91dCB0cmFja2luZ1xuICAgIC8vIHNpZGUtZWZmZWN0cy4gVGhpcyBlbnN1cmVzIHRoYXQgd2UgZG9uJ3Qgc3RvcmUgUGxhY2VtZW50IGVmZmVjdHMgb25cbiAgICAvLyBub2RlcyB0aGF0IHdpbGwgYmUgaHlkcmF0ZWQuXG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBtb3VudENoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBudWxsLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2UgcmVzZXQgaHlkcmF0aW9uIHN0YXRlIGluIGNhc2Ugd2UgYWJvcnRlZCBhbmQgcmVzdW1lZCBhbm90aGVyXG4gICAgLy8gcm9vdC5cbiAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgcmVzZXRIeWRyYXRpb25TdGF0ZSgpO1xuICB9XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlSG9zdENvbXBvbmVudChjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAgcHVzaEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcblxuICBpZiAoY3VycmVudCQkMSA9PT0gbnVsbCkge1xuICAgIHRyeVRvQ2xhaW1OZXh0SHlkcmF0YWJsZUluc3RhbmNlKHdvcmtJblByb2dyZXNzKTtcbiAgfVxuXG4gIHZhciB0eXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIHByZXZQcm9wcyA9IGN1cnJlbnQkJDEgIT09IG51bGwgPyBjdXJyZW50JCQxLm1lbW9pemVkUHJvcHMgOiBudWxsO1xuXG4gIHZhciBuZXh0Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gIHZhciBpc0RpcmVjdFRleHRDaGlsZCA9IHNob3VsZFNldFRleHRDb250ZW50KHR5cGUsIG5leHRQcm9wcyk7XG5cbiAgaWYgKGlzRGlyZWN0VGV4dENoaWxkKSB7XG4gICAgLy8gV2Ugc3BlY2lhbCBjYXNlIGEgZGlyZWN0IHRleHQgY2hpbGQgb2YgYSBob3N0IG5vZGUuIFRoaXMgaXMgYSBjb21tb25cbiAgICAvLyBjYXNlLiBXZSB3b24ndCBoYW5kbGUgaXQgYXMgYSByZWlmaWVkIGNoaWxkLiBXZSB3aWxsIGluc3RlYWQgaGFuZGxlXG4gICAgLy8gdGhpcyBpbiB0aGUgaG9zdCBlbnZpcm9ubWVudCB0aGF0IGFsc28gaGF2ZSBhY2Nlc3MgdG8gdGhpcyBwcm9wLiBUaGF0XG4gICAgLy8gYXZvaWRzIGFsbG9jYXRpbmcgYW5vdGhlciBIb3N0VGV4dCBmaWJlciBhbmQgdHJhdmVyc2luZyBpdC5cbiAgICBuZXh0Q2hpbGRyZW4gPSBudWxsO1xuICB9IGVsc2UgaWYgKHByZXZQcm9wcyAhPT0gbnVsbCAmJiBzaG91bGRTZXRUZXh0Q29udGVudCh0eXBlLCBwcmV2UHJvcHMpKSB7XG4gICAgLy8gSWYgd2UncmUgc3dpdGNoaW5nIGZyb20gYSBkaXJlY3QgdGV4dCBjaGlsZCB0byBhIG5vcm1hbCBjaGlsZCwgb3IgdG9cbiAgICAvLyBlbXB0eSwgd2UgbmVlZCB0byBzY2hlZHVsZSB0aGUgdGV4dCBjb250ZW50IHRvIGJlIHJlc2V0LlxuICAgIHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyB8PSBDb250ZW50UmVzZXQ7XG4gIH1cblxuICBtYXJrUmVmKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzKTtcblxuICAvLyBDaGVjayB0aGUgaG9zdCBjb25maWcgdG8gc2VlIGlmIHRoZSBjaGlsZHJlbiBhcmUgb2Zmc2NyZWVuL2hpZGRlbi5cbiAgaWYgKHJlbmRlckV4cGlyYXRpb25UaW1lICE9PSBOZXZlciAmJiB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgQ29uY3VycmVudE1vZGUgJiYgc2hvdWxkRGVwcmlvcml0aXplU3VidHJlZSh0eXBlLCBuZXh0UHJvcHMpKSB7XG4gICAgLy8gU2NoZWR1bGUgdGhpcyBmaWJlciB0byByZS1yZW5kZXIgYXQgb2Zmc2NyZWVuIHByaW9yaXR5LiBUaGVuIGJhaWxvdXQuXG4gICAgd29ya0luUHJvZ3Jlc3MuZXhwaXJhdGlvblRpbWUgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZEV4cGlyYXRpb25UaW1lID0gTmV2ZXI7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlSG9zdFRleHQoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgaWYgKGN1cnJlbnQkJDEgPT09IG51bGwpIHtcbiAgICB0cnlUb0NsYWltTmV4dEh5ZHJhdGFibGVJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcyk7XG4gIH1cbiAgLy8gTm90aGluZyB0byBkbyBoZXJlLiBUaGlzIGlzIHRlcm1pbmFsLiBXZSdsbCBkbyB0aGUgY29tcGxldGlvbiBzdGVwXG4gIC8vIGltbWVkaWF0ZWx5IGFmdGVyLlxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gbW91bnRMYXp5Q29tcG9uZW50KF9jdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgZWxlbWVudFR5cGUsIHVwZGF0ZUV4cGlyYXRpb25UaW1lLCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICBpZiAoX2N1cnJlbnQgIT09IG51bGwpIHtcbiAgICAvLyBBbiBsYXp5IGNvbXBvbmVudCBvbmx5IG1vdW50cyBpZiBpdCBzdXNwZW5kZWQgaW5zaWRlIGEgbm9uLVxuICAgIC8vIGNvbmN1cnJlbnQgdHJlZSwgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBXZSB3YW50IHRvIHRyZWF0IGl0IGxpa2VcbiAgICAvLyBhIG5ldyBtb3VudCwgZXZlbiB0aG91Z2ggYW4gZW1wdHkgdmVyc2lvbiBvZiBpdCBhbHJlYWR5IGNvbW1pdHRlZC5cbiAgICAvLyBEaXNjb25uZWN0IHRoZSBhbHRlcm5hdGUgcG9pbnRlcnMuXG4gICAgX2N1cnJlbnQuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPSBudWxsO1xuICAgIC8vIFNpbmNlIHRoaXMgaXMgY29uY2VwdHVhbGx5IGEgbmV3IGZpYmVyLCBzY2hlZHVsZSBhIFBsYWNlbWVudCBlZmZlY3RcbiAgICB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgfD0gUGxhY2VtZW50O1xuICB9XG5cbiAgdmFyIHByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICAvLyBXZSBjYW4ndCBzdGFydCBhIFVzZXIgVGltaW5nIG1lYXN1cmVtZW50IHdpdGggY29ycmVjdCBsYWJlbCB5ZXQuXG4gIC8vIENhbmNlbCBhbmQgcmVzdW1lIHJpZ2h0IGFmdGVyIHdlIGtub3cgdGhlIHRhZy5cbiAgY2FuY2VsV29ya1RpbWVyKHdvcmtJblByb2dyZXNzKTtcbiAgdmFyIENvbXBvbmVudCA9IHJlYWRMYXp5Q29tcG9uZW50VHlwZShlbGVtZW50VHlwZSk7XG4gIC8vIFN0b3JlIHRoZSB1bndyYXBwZWQgY29tcG9uZW50IGluIHRoZSB0eXBlLlxuICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gQ29tcG9uZW50O1xuICB2YXIgcmVzb2x2ZWRUYWcgPSB3b3JrSW5Qcm9ncmVzcy50YWcgPSByZXNvbHZlTGF6eUNvbXBvbmVudFRhZyhDb21wb25lbnQpO1xuICBzdGFydFdvcmtUaW1lcih3b3JrSW5Qcm9ncmVzcyk7XG4gIHZhciByZXNvbHZlZFByb3BzID0gcmVzb2x2ZURlZmF1bHRQcm9wcyhDb21wb25lbnQsIHByb3BzKTtcbiAgdmFyIGNoaWxkID0gdm9pZCAwO1xuICBzd2l0Y2ggKHJlc29sdmVkVGFnKSB7XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50KTtcbiAgICAgICAgfVxuICAgICAgICBjaGlsZCA9IHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHJlc29sdmVkUHJvcHMsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgY2hpbGQgPSB1cGRhdGVDbGFzc0NvbXBvbmVudChudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZXNvbHZlZFByb3BzLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgIHtcbiAgICAgICAgY2hpbGQgPSB1cGRhdGVGb3J3YXJkUmVmKG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHJlc29sdmVkUHJvcHMsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAgICAgICB2YXIgb3V0ZXJQcm9wVHlwZXMgPSBDb21wb25lbnQucHJvcFR5cGVzO1xuICAgICAgICAgICAgaWYgKG91dGVyUHJvcFR5cGVzKSB7XG4gICAgICAgICAgICAgIGNoZWNrUHJvcFR5cGVzKG91dGVyUHJvcFR5cGVzLCByZXNvbHZlZFByb3BzLCAvLyBSZXNvbHZlZCBmb3Igb3V0ZXIgb25seVxuICAgICAgICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSwgZ2V0Q3VycmVudEZpYmVyU3RhY2tJbkRldik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNoaWxkID0gdXBkYXRlTWVtb0NvbXBvbmVudChudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZXNvbHZlRGVmYXVsdFByb3BzKENvbXBvbmVudC50eXBlLCByZXNvbHZlZFByb3BzKSwgLy8gVGhlIGlubmVyIHR5cGUgY2FuIGhhdmUgZGVmYXVsdHMgdG9vXG4gICAgICAgIHVwZGF0ZUV4cGlyYXRpb25UaW1lLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHZhciBoaW50ID0gJyc7XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoQ29tcG9uZW50ICE9PSBudWxsICYmIHR5cGVvZiBDb21wb25lbnQgPT09ICdvYmplY3QnICYmIENvbXBvbmVudC4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFKSB7XG4gICAgICAgICAgICBoaW50ID0gJyBEaWQgeW91IHdyYXAgYSBjb21wb25lbnQgaW4gUmVhY3QubGF6eSgpIG1vcmUgdGhhbiBvbmNlPyc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFRoaXMgbWVzc2FnZSBpbnRlbnRpb25hbGx5IGRvZXNuJ3QgbWVudGlvbiBGb3J3YXJkUmVmIG9yIE1lbW9Db21wb25lbnRcbiAgICAgICAgLy8gYmVjYXVzZSB0aGUgZmFjdCB0aGF0IGl0J3MgYSBzZXBhcmF0ZSB0eXBlIG9mIHdvcmsgaXMgYW5cbiAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gZGV0YWlsLlxuICAgICAgICBpbnZhcmlhbnQoZmFsc2UsICdFbGVtZW50IHR5cGUgaXMgaW52YWxpZC4gUmVjZWl2ZWQgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG86ICVzLiBMYXp5IGVsZW1lbnQgdHlwZSBtdXN0IHJlc29sdmUgdG8gYSBjbGFzcyBvciBmdW5jdGlvbi4lcycsIENvbXBvbmVudCwgaGludCk7XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIGNoaWxkO1xufVxuXG5mdW5jdGlvbiBtb3VudEluY29tcGxldGVDbGFzc0NvbXBvbmVudChfY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICBpZiAoX2N1cnJlbnQgIT09IG51bGwpIHtcbiAgICAvLyBBbiBpbmNvbXBsZXRlIGNvbXBvbmVudCBvbmx5IG1vdW50cyBpZiBpdCBzdXNwZW5kZWQgaW5zaWRlIGEgbm9uLVxuICAgIC8vIGNvbmN1cnJlbnQgdHJlZSwgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBXZSB3YW50IHRvIHRyZWF0IGl0IGxpa2VcbiAgICAvLyBhIG5ldyBtb3VudCwgZXZlbiB0aG91Z2ggYW4gZW1wdHkgdmVyc2lvbiBvZiBpdCBhbHJlYWR5IGNvbW1pdHRlZC5cbiAgICAvLyBEaXNjb25uZWN0IHRoZSBhbHRlcm5hdGUgcG9pbnRlcnMuXG4gICAgX2N1cnJlbnQuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPSBudWxsO1xuICAgIC8vIFNpbmNlIHRoaXMgaXMgY29uY2VwdHVhbGx5IGEgbmV3IGZpYmVyLCBzY2hlZHVsZSBhIFBsYWNlbWVudCBlZmZlY3RcbiAgICB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgfD0gUGxhY2VtZW50O1xuICB9XG5cbiAgLy8gUHJvbW90ZSB0aGUgZmliZXIgdG8gYSBjbGFzcyBhbmQgdHJ5IHJlbmRlcmluZyBhZ2Fpbi5cbiAgd29ya0luUHJvZ3Jlc3MudGFnID0gQ2xhc3NDb21wb25lbnQ7XG5cbiAgLy8gVGhlIHJlc3Qgb2YgdGhpcyBmdW5jdGlvbiBpcyBhIGZvcmsgb2YgYHVwZGF0ZUNsYXNzQ29tcG9uZW50YFxuXG4gIC8vIFB1c2ggY29udGV4dCBwcm92aWRlcnMgZWFybHkgdG8gcHJldmVudCBjb250ZXh0IHN0YWNrIG1pc21hdGNoZXMuXG4gIC8vIER1cmluZyBtb3VudGluZyB3ZSBkb24ndCBrbm93IHRoZSBjaGlsZCBjb250ZXh0IHlldCBhcyB0aGUgaW5zdGFuY2UgZG9lc24ndCBleGlzdC5cbiAgLy8gV2Ugd2lsbCBpbnZhbGlkYXRlIHRoZSBjaGlsZCBjb250ZXh0IGluIGZpbmlzaENsYXNzQ29tcG9uZW50KCkgcmlnaHQgYWZ0ZXIgcmVuZGVyaW5nLlxuICB2YXIgaGFzQ29udGV4dCA9IHZvaWQgMDtcbiAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICBoYXNDb250ZXh0ID0gdHJ1ZTtcbiAgICBwdXNoQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgfSBlbHNlIHtcbiAgICBoYXNDb250ZXh0ID0gZmFsc2U7XG4gIH1cbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcblxuICBjb25zdHJ1Y3RDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICBtb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG5cbiAgcmV0dXJuIGZpbmlzaENsYXNzQ29tcG9uZW50KG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHRydWUsIGhhc0NvbnRleHQsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbn1cblxuZnVuY3Rpb24gbW91bnRJbmRldGVybWluYXRlQ29tcG9uZW50KF9jdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICBpZiAoX2N1cnJlbnQgIT09IG51bGwpIHtcbiAgICAvLyBBbiBpbmRldGVybWluYXRlIGNvbXBvbmVudCBvbmx5IG1vdW50cyBpZiBpdCBzdXNwZW5kZWQgaW5zaWRlIGEgbm9uLVxuICAgIC8vIGNvbmN1cnJlbnQgdHJlZSwgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBXZSB3YW50IHRvIHRyZWF0IGl0IGxpa2VcbiAgICAvLyBhIG5ldyBtb3VudCwgZXZlbiB0aG91Z2ggYW4gZW1wdHkgdmVyc2lvbiBvZiBpdCBhbHJlYWR5IGNvbW1pdHRlZC5cbiAgICAvLyBEaXNjb25uZWN0IHRoZSBhbHRlcm5hdGUgcG9pbnRlcnMuXG4gICAgX2N1cnJlbnQuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPSBudWxsO1xuICAgIC8vIFNpbmNlIHRoaXMgaXMgY29uY2VwdHVhbGx5IGEgbmV3IGZpYmVyLCBzY2hlZHVsZSBhIFBsYWNlbWVudCBlZmZlY3RcbiAgICB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgfD0gUGxhY2VtZW50O1xuICB9XG5cbiAgdmFyIHByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgdW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIGZhbHNlKTtcbiAgdmFyIGNvbnRleHQgPSBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQpO1xuXG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG5cbiAgdmFyIHZhbHVlID0gdm9pZCAwO1xuXG4gIHtcbiAgICBpZiAoQ29tcG9uZW50LnByb3RvdHlwZSAmJiB0eXBlb2YgQ29tcG9uZW50LnByb3RvdHlwZS5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRCYWRDbGFzc1tjb21wb25lbnROYW1lXSkge1xuICAgICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsIFwiVGhlIDwlcyAvPiBjb21wb25lbnQgYXBwZWFycyB0byBoYXZlIGEgcmVuZGVyIG1ldGhvZCwgYnV0IGRvZXNuJ3QgZXh0ZW5kIFJlYWN0LkNvbXBvbmVudC4gXCIgKyAnVGhpcyBpcyBsaWtlbHkgdG8gY2F1c2UgZXJyb3JzLiBDaGFuZ2UgJXMgdG8gZXh0ZW5kIFJlYWN0LkNvbXBvbmVudCBpbnN0ZWFkLicsIGNvbXBvbmVudE5hbWUsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgICBkaWRXYXJuQWJvdXRCYWRDbGFzc1tjb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRMZWdhY3lDb250ZXh0V2FybmluZyh3b3JrSW5Qcm9ncmVzcywgbnVsbCk7XG4gICAgfVxuXG4gICAgUmVhY3RDdXJyZW50T3duZXIkMy5jdXJyZW50ID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgdmFsdWUgPSByZW5kZXJXaXRoSG9va3MobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcHJvcHMsIGNvbnRleHQsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgfVxuICAvLyBSZWFjdCBEZXZUb29scyByZWFkcyB0aGlzIGZsYWcuXG4gIHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyB8PSBQZXJmb3JtZWRXb3JrO1xuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZS5yZW5kZXIgPT09ICdmdW5jdGlvbicgJiYgdmFsdWUuJCR0eXBlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIFByb2NlZWQgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGlzIGlzIGEgY2xhc3MgaW5zdGFuY2VcbiAgICB3b3JrSW5Qcm9ncmVzcy50YWcgPSBDbGFzc0NvbXBvbmVudDtcblxuICAgIC8vIFRocm93IG91dCBhbnkgaG9va3MgdGhhdCB3ZXJlIHVzZWQuXG4gICAgcmVzZXRIb29rcygpO1xuXG4gICAgLy8gUHVzaCBjb250ZXh0IHByb3ZpZGVycyBlYXJseSB0byBwcmV2ZW50IGNvbnRleHQgc3RhY2sgbWlzbWF0Y2hlcy5cbiAgICAvLyBEdXJpbmcgbW91bnRpbmcgd2UgZG9uJ3Qga25vdyB0aGUgY2hpbGQgY29udGV4dCB5ZXQgYXMgdGhlIGluc3RhbmNlIGRvZXNuJ3QgZXhpc3QuXG4gICAgLy8gV2Ugd2lsbCBpbnZhbGlkYXRlIHRoZSBjaGlsZCBjb250ZXh0IGluIGZpbmlzaENsYXNzQ29tcG9uZW50KCkgcmlnaHQgYWZ0ZXIgcmVuZGVyaW5nLlxuICAgIHZhciBoYXNDb250ZXh0ID0gZmFsc2U7XG4gICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgIGhhc0NvbnRleHQgPSB0cnVlO1xuICAgICAgcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhhc0NvbnRleHQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gdmFsdWUuc3RhdGUgIT09IG51bGwgJiYgdmFsdWUuc3RhdGUgIT09IHVuZGVmaW5lZCA/IHZhbHVlLnN0YXRlIDogbnVsbDtcblxuICAgIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzO1xuICAgIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIHByb3BzKTtcbiAgICB9XG5cbiAgICBhZG9wdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIHZhbHVlKTtcbiAgICBtb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcHJvcHMsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgICByZXR1cm4gZmluaXNoQ2xhc3NDb21wb25lbnQobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgdHJ1ZSwgaGFzQ29udGV4dCwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICB9IGVsc2Uge1xuICAgIC8vIFByb2NlZWQgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGlzIGlzIGEgZnVuY3Rpb24gY29tcG9uZW50XG4gICAgd29ya0luUHJvZ3Jlc3MudGFnID0gRnVuY3Rpb25Db21wb25lbnQ7XG4gICAge1xuICAgICAgaWYgKGRlYnVnUmVuZGVyUGhhc2VTaWRlRWZmZWN0cyB8fCBkZWJ1Z1JlbmRlclBoYXNlU2lkZUVmZmVjdHNGb3JTdHJpY3RNb2RlICYmIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgIC8vIE9ubHkgZG91YmxlLXJlbmRlciBjb21wb25lbnRzIHdpdGggSG9va3NcbiAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICB2YWx1ZSA9IHJlbmRlcldpdGhIb29rcyhudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBwcm9wcywgY29udGV4dCwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJlY29uY2lsZUNoaWxkcmVuKG51bGwsIHdvcmtJblByb2dyZXNzLCB2YWx1ZSwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgIHtcbiAgICAgIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50KSB7XG4gIGlmIChDb21wb25lbnQpIHtcbiAgICAhIUNvbXBvbmVudC5jaGlsZENvbnRleHRUeXBlcyA/IHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJyVzKC4uLik6IGNoaWxkQ29udGV4dFR5cGVzIGNhbm5vdCBiZSBkZWZpbmVkIG9uIGEgZnVuY3Rpb24gY29tcG9uZW50LicsIENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50JykgOiB2b2lkIDA7XG4gIH1cbiAgaWYgKHdvcmtJblByb2dyZXNzLnJlZiAhPT0gbnVsbCkge1xuICAgIHZhciBpbmZvID0gJyc7XG4gICAgdmFyIG93bmVyTmFtZSA9IGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCk7XG4gICAgaWYgKG93bmVyTmFtZSkge1xuICAgICAgaW5mbyArPSAnXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBvd25lck5hbWUgKyAnYC4nO1xuICAgIH1cblxuICAgIHZhciB3YXJuaW5nS2V5ID0gb3duZXJOYW1lIHx8IHdvcmtJblByb2dyZXNzLl9kZWJ1Z0lEIHx8ICcnO1xuICAgIHZhciBkZWJ1Z1NvdXJjZSA9IHdvcmtJblByb2dyZXNzLl9kZWJ1Z1NvdXJjZTtcbiAgICBpZiAoZGVidWdTb3VyY2UpIHtcbiAgICAgIHdhcm5pbmdLZXkgPSBkZWJ1Z1NvdXJjZS5maWxlTmFtZSArICc6JyArIGRlYnVnU291cmNlLmxpbmVOdW1iZXI7XG4gICAgfVxuICAgIGlmICghZGlkV2FybkFib3V0RnVuY3Rpb25SZWZzW3dhcm5pbmdLZXldKSB7XG4gICAgICBkaWRXYXJuQWJvdXRGdW5jdGlvblJlZnNbd2FybmluZ0tleV0gPSB0cnVlO1xuICAgICAgd2FybmluZyQxKGZhbHNlLCAnRnVuY3Rpb24gY29tcG9uZW50cyBjYW5ub3QgYmUgZ2l2ZW4gcmVmcy4gJyArICdBdHRlbXB0cyB0byBhY2Nlc3MgdGhpcyByZWYgd2lsbCBmYWlsLiAnICsgJ0RpZCB5b3UgbWVhbiB0byB1c2UgUmVhY3QuZm9yd2FyZFJlZigpPyVzJywgaW5mbyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkgfHwgJ1Vua25vd24nO1xuXG4gICAgaWYgKCFkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50W2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICclczogRnVuY3Rpb24gY29tcG9uZW50cyBkbyBub3Qgc3VwcG9ydCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuJywgY29tcG9uZW50TmFtZSk7XG4gICAgICBkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50W2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIENvbXBvbmVudC5jb250ZXh0VHlwZSA9PT0gJ29iamVjdCcgJiYgQ29tcG9uZW50LmNvbnRleHRUeXBlICE9PSBudWxsKSB7XG4gICAgdmFyIF9jb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpIHx8ICdVbmtub3duJztcblxuICAgIGlmICghZGlkV2FybkFib3V0Q29udGV4dFR5cGVPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lXSkge1xuICAgICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnJXM6IEZ1bmN0aW9uIGNvbXBvbmVudHMgZG8gbm90IHN1cHBvcnQgY29udGV4dFR5cGUuJywgX2NvbXBvbmVudE5hbWUpO1xuICAgICAgZGlkV2FybkFib3V0Q29udGV4dFR5cGVPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlQ29tcG9uZW50KGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICB2YXIgbW9kZSA9IHdvcmtJblByb2dyZXNzLm1vZGU7XG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgLy8gV2Ugc2hvdWxkIGF0dGVtcHQgdG8gcmVuZGVyIHRoZSBwcmltYXJ5IGNoaWxkcmVuIHVubGVzcyB0aGlzIGJvdW5kYXJ5XG4gIC8vIGFscmVhZHkgc3VzcGVuZGVkIGR1cmluZyB0aGlzIHJlbmRlciAoYGFscmVhZHlDYXB0dXJlZGAgaXMgdHJ1ZSkuXG4gIHZhciBuZXh0U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gIHZhciBuZXh0RGlkVGltZW91dCA9IHZvaWQgMDtcbiAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgJiBEaWRDYXB0dXJlKSA9PT0gTm9FZmZlY3QpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBhdHRlbXB0LlxuICAgIG5leHRTdGF0ZSA9IG51bGw7XG4gICAgbmV4dERpZFRpbWVvdXQgPSBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICAvLyBTb21ldGhpbmcgaW4gdGhpcyBib3VuZGFyeSdzIHN1YnRyZWUgYWxyZWFkeSBzdXNwZW5kZWQuIFN3aXRjaCB0b1xuICAgIC8vIHJlbmRlcmluZyB0aGUgZmFsbGJhY2sgY2hpbGRyZW4uXG4gICAgbmV4dFN0YXRlID0ge1xuICAgICAgdGltZWRPdXRBdDogbmV4dFN0YXRlICE9PSBudWxsID8gbmV4dFN0YXRlLnRpbWVkT3V0QXQgOiBOb1dvcmtcbiAgICB9O1xuICAgIG5leHREaWRUaW1lb3V0ID0gdHJ1ZTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgJj0gfkRpZENhcHR1cmU7XG4gIH1cblxuICAvLyBUaGlzIG5leHQgcGFydCBpcyBhIGJpdCBjb25mdXNpbmcuIElmIHRoZSBjaGlsZHJlbiB0aW1lb3V0LCB3ZSBzd2l0Y2ggdG9cbiAgLy8gc2hvd2luZyB0aGUgZmFsbGJhY2sgY2hpbGRyZW4gaW4gcGxhY2Ugb2YgdGhlIFwicHJpbWFyeVwiIGNoaWxkcmVuLlxuICAvLyBIb3dldmVyLCB3ZSBkb24ndCB3YW50IHRvIGRlbGV0ZSB0aGUgcHJpbWFyeSBjaGlsZHJlbiBiZWNhdXNlIHRoZW4gdGhlaXJcbiAgLy8gc3RhdGUgd2lsbCBiZSBsb3N0IChib3RoIHRoZSBSZWFjdCBzdGF0ZSBhbmQgdGhlIGhvc3Qgc3RhdGUsIGUuZy5cbiAgLy8gdW5jb250cm9sbGVkIGZvcm0gaW5wdXRzKS4gSW5zdGVhZCB3ZSBrZWVwIHRoZW0gbW91bnRlZCBhbmQgaGlkZSB0aGVtLlxuICAvLyBCb3RoIHRoZSBmYWxsYmFjayBjaGlsZHJlbiBBTkQgdGhlIHByaW1hcnkgY2hpbGRyZW4gYXJlIHJlbmRlcmVkIGF0IHRoZVxuICAvLyBzYW1lIHRpbWUuIE9uY2UgdGhlIHByaW1hcnkgY2hpbGRyZW4gYXJlIHVuLXN1c3BlbmRlZCwgd2UgY2FuIGRlbGV0ZVxuICAvLyB0aGUgZmFsbGJhY2sgY2hpbGRyZW4g4oCUIGRvbid0IG5lZWQgdG8gcHJlc2VydmUgdGhlaXIgc3RhdGUuXG4gIC8vXG4gIC8vIFRoZSB0d28gc2V0cyBvZiBjaGlsZHJlbiBhcmUgc2libGluZ3MgaW4gdGhlIGhvc3QgZW52aXJvbm1lbnQsIGJ1dFxuICAvLyBzZW1hbnRpY2FsbHksIGZvciBwdXJwb3NlcyBvZiByZWNvbmNpbGlhdGlvbiwgdGhleSBhcmUgdHdvIHNlcGFyYXRlIHNldHMuXG4gIC8vIFNvIHdlIHN0b3JlIHRoZW0gdXNpbmcgdHdvIGZyYWdtZW50IGZpYmVycy5cbiAgLy9cbiAgLy8gSG93ZXZlciwgd2Ugd2FudCB0byBhdm9pZCBhbGxvY2F0aW5nIGV4dHJhIGZpYmVycyBmb3IgZXZlcnkgcGxhY2Vob2xkZXIuXG4gIC8vIFRoZXkncmUgb25seSBuZWNlc3Nhcnkgd2hlbiB0aGUgY2hpbGRyZW4gdGltZSBvdXQsIGJlY2F1c2UgdGhhdCdzIHRoZVxuICAvLyBvbmx5IHRpbWUgd2hlbiBib3RoIHNldHMgYXJlIG1vdW50ZWQuXG4gIC8vXG4gIC8vIFNvLCB0aGUgZXh0cmEgZnJhZ21lbnQgZmliZXJzIGFyZSBvbmx5IHVzZWQgaWYgdGhlIGNoaWxkcmVuIHRpbWUgb3V0LlxuICAvLyBPdGhlcndpc2UsIHdlIHJlbmRlciB0aGUgcHJpbWFyeSBjaGlsZHJlbiBkaXJlY3RseS4gVGhpcyByZXF1aXJlcyBzb21lXG4gIC8vIGN1c3RvbSByZWNvbmNpbGlhdGlvbiBsb2dpYyB0byBwcmVzZXJ2ZSB0aGUgc3RhdGUgb2YgdGhlIHByaW1hcnlcbiAgLy8gY2hpbGRyZW4uIEl0J3MgZXNzZW50aWFsbHkgYSB2ZXJ5IGJhc2ljIGZvcm0gb2YgcmUtcGFyZW50aW5nLlxuXG4gIC8vIGBjaGlsZGAgcG9pbnRzIHRvIHRoZSBjaGlsZCBmaWJlci4gSW4gdGhlIG5vcm1hbCBjYXNlLCB0aGlzIGlzIHRoZSBmaXJzdFxuICAvLyBmaWJlciBvZiB0aGUgcHJpbWFyeSBjaGlsZHJlbiBzZXQuIEluIHRoZSB0aW1lZC1vdXQgY2FzZSwgaXQncyBhXG4gIC8vIGEgZnJhZ21lbnQgZmliZXIgY29udGFpbmluZyB0aGUgcHJpbWFyeSBjaGlsZHJlbi5cbiAgdmFyIGNoaWxkID0gdm9pZCAwO1xuICAvLyBgbmV4dGAgcG9pbnRzIHRvIHRoZSBuZXh0IGZpYmVyIFJlYWN0IHNob3VsZCByZW5kZXIuIEluIHRoZSBub3JtYWwgY2FzZSxcbiAgLy8gaXQncyB0aGUgc2FtZSBhcyBgY2hpbGRgOiB0aGUgZmlyc3QgZmliZXIgb2YgdGhlIHByaW1hcnkgY2hpbGRyZW4gc2V0LlxuICAvLyBJbiB0aGUgdGltZWQtb3V0IGNhc2UsIGl0J3MgYSBmcmFnbWVudCBmaWJlciBjb250YWluaW5nIHRoZSAqZmFsbGJhY2sqXG4gIC8vIGNoaWxkcmVuIC0tIHdlIHNraXAgb3ZlciB0aGUgcHJpbWFyeSBjaGlsZHJlbiBlbnRpcmVseS5cbiAgdmFyIG5leHQgPSB2b2lkIDA7XG4gIGlmIChjdXJyZW50JCQxID09PSBudWxsKSB7XG4gICAgaWYgKGVuYWJsZVN1c3BlbnNlU2VydmVyUmVuZGVyZXIpIHtcbiAgICAgIC8vIElmIHdlJ3JlIGN1cnJlbnRseSBoeWRyYXRpbmcsIHRyeSB0byBoeWRyYXRlIHRoaXMgYm91bmRhcnkuXG4gICAgICAvLyBCdXQgb25seSBpZiB0aGlzIGhhcyBhIGZhbGxiYWNrLlxuICAgICAgaWYgKG5leHRQcm9wcy5mYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRyeVRvQ2xhaW1OZXh0SHlkcmF0YWJsZUluc3RhbmNlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgLy8gVGhpcyBjb3VsZCd2ZSBjaGFuZ2VkIHRoZSB0YWcgaWYgdGhpcyB3YXMgYSBkZWh5ZHJhdGVkIHN1c3BlbnNlIGNvbXBvbmVudC5cbiAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLnRhZyA9PT0gRGVoeWRyYXRlZFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZURlaHlkcmF0ZWRTdXNwZW5zZUNvbXBvbmVudChudWxsLCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyB0aGUgaW5pdGlhbCBtb3VudC4gVGhpcyBicmFuY2ggaXMgcHJldHR5IHNpbXBsZSBiZWNhdXNlIHRoZXJlJ3NcbiAgICAvLyBubyBwcmV2aW91cyBzdGF0ZSB0aGF0IG5lZWRzIHRvIGJlIHByZXNlcnZlZC5cbiAgICBpZiAobmV4dERpZFRpbWVvdXQpIHtcbiAgICAgIC8vIE1vdW50IHNlcGFyYXRlIGZyYWdtZW50cyBmb3IgcHJpbWFyeSBhbmQgZmFsbGJhY2sgY2hpbGRyZW4uXG4gICAgICB2YXIgbmV4dEZhbGxiYWNrQ2hpbGRyZW4gPSBuZXh0UHJvcHMuZmFsbGJhY2s7XG4gICAgICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChudWxsLCBtb2RlLCBOb1dvcmssIG51bGwpO1xuXG4gICAgICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vQ29udGV4dCkge1xuICAgICAgICAvLyBPdXRzaWRlIG9mIGNvbmN1cnJlbnQgbW9kZSwgd2UgY29tbWl0IHRoZSBlZmZlY3RzIGZyb20gdGhlXG4gICAgICAgIHZhciBwcm9ncmVzc2VkU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICB2YXIgcHJvZ3Jlc3NlZFByaW1hcnlDaGlsZCA9IHByb2dyZXNzZWRTdGF0ZSAhPT0gbnVsbCA/IHdvcmtJblByb2dyZXNzLmNoaWxkLmNoaWxkIDogd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmNoaWxkID0gcHJvZ3Jlc3NlZFByaW1hcnlDaGlsZDtcbiAgICAgIH1cblxuICAgICAgdmFyIGZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KG5leHRGYWxsYmFja0NoaWxkcmVuLCBtb2RlLCByZW5kZXJFeHBpcmF0aW9uVGltZSwgbnVsbCk7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5zaWJsaW5nID0gZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuICAgICAgY2hpbGQgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbiAgICAgIC8vIFNraXAgdGhlIHByaW1hcnkgY2hpbGRyZW4sIGFuZCBjb250aW51ZSB3b3JraW5nIG9uIHRoZVxuICAgICAgLy8gZmFsbGJhY2sgY2hpbGRyZW4uXG4gICAgICBuZXh0ID0gZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuICAgICAgY2hpbGQucmV0dXJuID0gbmV4dC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTW91bnQgdGhlIHByaW1hcnkgY2hpbGRyZW4gd2l0aG91dCBhbiBpbnRlcm1lZGlhdGUgZnJhZ21lbnQgZmliZXIuXG4gICAgICB2YXIgbmV4dFByaW1hcnlDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgICAgIGNoaWxkID0gbmV4dCA9IG1vdW50Q2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIG51bGwsIG5leHRQcmltYXJ5Q2hpbGRyZW4sIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhpcyBpcyBhbiB1cGRhdGUuIFRoaXMgYnJhbmNoIGlzIG1vcmUgY29tcGxpY2F0ZWQgYmVjYXVzZSB3ZSBuZWVkIHRvXG4gICAgLy8gZW5zdXJlIHRoZSBzdGF0ZSBvZiB0aGUgcHJpbWFyeSBjaGlsZHJlbiBpcyBwcmVzZXJ2ZWQuXG4gICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQkJDEubWVtb2l6ZWRTdGF0ZTtcbiAgICB2YXIgcHJldkRpZFRpbWVvdXQgPSBwcmV2U3RhdGUgIT09IG51bGw7XG4gICAgaWYgKHByZXZEaWRUaW1lb3V0KSB7XG4gICAgICAvLyBUaGUgY3VycmVudCB0cmVlIGFscmVhZHkgdGltZWQgb3V0LiBUaGF0IG1lYW5zIGVhY2ggY2hpbGQgc2V0IGlzXG4gICAgICB2YXIgY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50ID0gY3VycmVudCQkMS5jaGlsZDtcbiAgICAgIHZhciBjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmc7XG4gICAgICBpZiAobmV4dERpZFRpbWVvdXQpIHtcbiAgICAgICAgLy8gU3RpbGwgdGltZWQgb3V0LiBSZXVzZSB0aGUgY3VycmVudCBwcmltYXJ5IGNoaWxkcmVuIGJ5IGNsb25pbmdcbiAgICAgICAgLy8gaXRzIGZyYWdtZW50LiBXZSdyZSBnb2luZyB0byBza2lwIG92ZXIgdGhlc2UgZW50aXJlbHkuXG4gICAgICAgIHZhciBfbmV4dEZhbGxiYWNrQ2hpbGRyZW4gPSBuZXh0UHJvcHMuZmFsbGJhY2s7XG4gICAgICAgIHZhciBfcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQsIGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudC5wZW5kaW5nUHJvcHMsIE5vV29yayk7XG5cbiAgICAgICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgQ29uY3VycmVudE1vZGUpID09PSBOb0NvbnRleHQpIHtcbiAgICAgICAgICAvLyBPdXRzaWRlIG9mIGNvbmN1cnJlbnQgbW9kZSwgd2UgY29tbWl0IHRoZSBlZmZlY3RzIGZyb20gdGhlXG4gICAgICAgICAgdmFyIF9wcm9ncmVzc2VkU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIHZhciBfcHJvZ3Jlc3NlZFByaW1hcnlDaGlsZCA9IF9wcm9ncmVzc2VkU3RhdGUgIT09IG51bGwgPyB3b3JrSW5Qcm9ncmVzcy5jaGlsZC5jaGlsZCA6IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgIGlmIChfcHJvZ3Jlc3NlZFByaW1hcnlDaGlsZCAhPT0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LmNoaWxkKSB7XG4gICAgICAgICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQuY2hpbGQgPSBfcHJvZ3Jlc3NlZFByaW1hcnlDaGlsZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZWNhdXNlIHByaW1hcnlDaGlsZEZyYWdtZW50IGlzIGEgbmV3IGZpYmVyIHRoYXQgd2UncmUgaW5zZXJ0aW5nIGFzIHRoZVxuICAgICAgICAvLyBwYXJlbnQgb2YgYSBuZXcgdHJlZSwgd2UgbmVlZCB0byBzZXQgaXRzIHRyZWVCYXNlRHVyYXRpb24uXG4gICAgICAgIGlmIChlbmFibGVQcm9maWxlclRpbWVyICYmIHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkge1xuICAgICAgICAgIC8vIHRyZWVCYXNlRHVyYXRpb24gaXMgdGhlIHN1bSBvZiBhbGwgdGhlIGNoaWxkIHRyZWUgYmFzZSBkdXJhdGlvbnMuXG4gICAgICAgICAgdmFyIHRyZWVCYXNlRHVyYXRpb24gPSAwO1xuICAgICAgICAgIHZhciBoaWRkZW5DaGlsZCA9IF9wcmltYXJ5Q2hpbGRGcmFnbWVudC5jaGlsZDtcbiAgICAgICAgICB3aGlsZSAoaGlkZGVuQ2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHRyZWVCYXNlRHVyYXRpb24gKz0gaGlkZGVuQ2hpbGQudHJlZUJhc2VEdXJhdGlvbjtcbiAgICAgICAgICAgIGhpZGRlbkNoaWxkID0gaGlkZGVuQ2hpbGQuc2libGluZztcbiAgICAgICAgICB9XG4gICAgICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50LnRyZWVCYXNlRHVyYXRpb24gPSB0cmVlQmFzZUR1cmF0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2xvbmUgdGhlIGZhbGxiYWNrIGNoaWxkIGZyYWdtZW50LCB0b28uIFRoZXNlIHdlJ2xsIGNvbnRpbnVlXG4gICAgICAgIC8vIHdvcmtpbmcgb24uXG4gICAgICAgIHZhciBfZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gX3ByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmcgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50LCBfbmV4dEZhbGxiYWNrQ2hpbGRyZW4sIGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQuZXhwaXJhdGlvblRpbWUpO1xuICAgICAgICBjaGlsZCA9IF9wcmltYXJ5Q2hpbGRGcmFnbWVudDtcbiAgICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50LmNoaWxkRXhwaXJhdGlvblRpbWUgPSBOb1dvcms7XG4gICAgICAgIC8vIFNraXAgdGhlIHByaW1hcnkgY2hpbGRyZW4sIGFuZCBjb250aW51ZSB3b3JraW5nIG9uIHRoZVxuICAgICAgICAvLyBmYWxsYmFjayBjaGlsZHJlbi5cbiAgICAgICAgbmV4dCA9IF9mYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG4gICAgICAgIGNoaWxkLnJldHVybiA9IG5leHQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBObyBsb25nZXIgc3VzcGVuZGVkLiBTd2l0Y2ggYmFjayB0byBzaG93aW5nIHRoZSBwcmltYXJ5IGNoaWxkcmVuLFxuICAgICAgICAvLyBhbmQgcmVtb3ZlIHRoZSBpbnRlcm1lZGlhdGUgZnJhZ21lbnQgZmliZXIuXG4gICAgICAgIHZhciBfbmV4dFByaW1hcnlDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgICAgICAgdmFyIGN1cnJlbnRQcmltYXJ5Q2hpbGQgPSBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQuY2hpbGQ7XG4gICAgICAgIHZhciBwcmltYXJ5Q2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgY3VycmVudFByaW1hcnlDaGlsZCwgX25leHRQcmltYXJ5Q2hpbGRyZW4sIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcblxuICAgICAgICAvLyBJZiB0aGlzIHJlbmRlciBkb2Vzbid0IHN1c3BlbmQsIHdlIG5lZWQgdG8gZGVsZXRlIHRoZSBmYWxsYmFja1xuICAgICAgICAvLyBjaGlsZHJlbi4gV2FpdCB1bnRpbCB0aGUgY29tcGxldGUgcGhhc2UsIGFmdGVyIHdlJ3ZlIGNvbmZpcm1lZCB0aGVcbiAgICAgICAgLy8gZmFsbGJhY2sgaXMgbm8gbG9uZ2VyIG5lZWRlZC5cbiAgICAgICAgLy8gVE9ETzogV291bGQgaXQgYmUgYmV0dGVyIHRvIHN0b3JlIHRoZSBmYWxsYmFjayBmcmFnbWVudCBvblxuICAgICAgICAvLyB0aGUgc3RhdGVOb2RlP1xuXG4gICAgICAgIC8vIENvbnRpbnVlIHJlbmRlcmluZyB0aGUgY2hpbGRyZW4sIGxpa2Ugd2Ugbm9ybWFsbHkgZG8uXG4gICAgICAgIGNoaWxkID0gbmV4dCA9IHByaW1hcnlDaGlsZDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlIGN1cnJlbnQgdHJlZSBoYXMgbm90IGFscmVhZHkgdGltZWQgb3V0LiBUaGF0IG1lYW5zIHRoZSBwcmltYXJ5XG4gICAgICAvLyBjaGlsZHJlbiBhcmUgbm90IHdyYXBwZWQgaW4gYSBmcmFnbWVudCBmaWJlci5cbiAgICAgIHZhciBfY3VycmVudFByaW1hcnlDaGlsZCA9IGN1cnJlbnQkJDEuY2hpbGQ7XG4gICAgICBpZiAobmV4dERpZFRpbWVvdXQpIHtcbiAgICAgICAgLy8gVGltZWQgb3V0LiBXcmFwIHRoZSBjaGlsZHJlbiBpbiBhIGZyYWdtZW50IGZpYmVyIHRvIGtlZXAgdGhlbVxuICAgICAgICAvLyBzZXBhcmF0ZSBmcm9tIHRoZSBmYWxsYmFjayBjaGlsZHJlbi5cbiAgICAgICAgdmFyIF9uZXh0RmFsbGJhY2tDaGlsZHJlbjIgPSBuZXh0UHJvcHMuZmFsbGJhY2s7XG4gICAgICAgIHZhciBfcHJpbWFyeUNoaWxkRnJhZ21lbnQyID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoXG4gICAgICAgIC8vIEl0IHNob3VsZG4ndCBtYXR0ZXIgd2hhdCB0aGUgcGVuZGluZyBwcm9wcyBhcmUgYmVjYXVzZSB3ZSBhcmVuJ3RcbiAgICAgICAgLy8gZ29pbmcgdG8gcmVuZGVyIHRoaXMgZnJhZ21lbnQuXG4gICAgICAgIG51bGwsIG1vZGUsIE5vV29yaywgbnVsbCk7XG4gICAgICAgIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDIuY2hpbGQgPSBfY3VycmVudFByaW1hcnlDaGlsZDtcblxuICAgICAgICAvLyBFdmVuIHRob3VnaCB3ZSdyZSBjcmVhdGluZyBhIG5ldyBmaWJlciwgdGhlcmUgYXJlIG5vIG5ldyBjaGlsZHJlbixcbiAgICAgICAgLy8gYmVjYXVzZSB3ZSdyZSByZXVzaW5nIGFuIGFscmVhZHkgbW91bnRlZCB0cmVlLiBTbyB3ZSBkb24ndCBuZWVkIHRvXG4gICAgICAgIC8vIHNjaGVkdWxlIGEgcGxhY2VtZW50LlxuICAgICAgICAvLyBwcmltYXJ5Q2hpbGRGcmFnbWVudC5lZmZlY3RUYWcgfD0gUGxhY2VtZW50O1xuXG4gICAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIENvbmN1cnJlbnRNb2RlKSA9PT0gTm9Db250ZXh0KSB7XG4gICAgICAgICAgLy8gT3V0c2lkZSBvZiBjb25jdXJyZW50IG1vZGUsIHdlIGNvbW1pdCB0aGUgZWZmZWN0cyBmcm9tIHRoZVxuICAgICAgICAgIHZhciBfcHJvZ3Jlc3NlZFN0YXRlMiA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgdmFyIF9wcm9ncmVzc2VkUHJpbWFyeUNoaWxkMiA9IF9wcm9ncmVzc2VkU3RhdGUyICE9PSBudWxsID8gd29ya0luUHJvZ3Jlc3MuY2hpbGQuY2hpbGQgOiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQyLmNoaWxkID0gX3Byb2dyZXNzZWRQcmltYXJ5Q2hpbGQyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmVjYXVzZSBwcmltYXJ5Q2hpbGRGcmFnbWVudCBpcyBhIG5ldyBmaWJlciB0aGF0IHdlJ3JlIGluc2VydGluZyBhcyB0aGVcbiAgICAgICAgLy8gcGFyZW50IG9mIGEgbmV3IHRyZWUsIHdlIG5lZWQgdG8gc2V0IGl0cyB0cmVlQmFzZUR1cmF0aW9uLlxuICAgICAgICBpZiAoZW5hYmxlUHJvZmlsZXJUaW1lciAmJiB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpIHtcbiAgICAgICAgICAvLyB0cmVlQmFzZUR1cmF0aW9uIGlzIHRoZSBzdW0gb2YgYWxsIHRoZSBjaGlsZCB0cmVlIGJhc2UgZHVyYXRpb25zLlxuICAgICAgICAgIHZhciBfdHJlZUJhc2VEdXJhdGlvbiA9IDA7XG4gICAgICAgICAgdmFyIF9oaWRkZW5DaGlsZCA9IF9wcmltYXJ5Q2hpbGRGcmFnbWVudDIuY2hpbGQ7XG4gICAgICAgICAgd2hpbGUgKF9oaWRkZW5DaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgX3RyZWVCYXNlRHVyYXRpb24gKz0gX2hpZGRlbkNoaWxkLnRyZWVCYXNlRHVyYXRpb247XG4gICAgICAgICAgICBfaGlkZGVuQ2hpbGQgPSBfaGlkZGVuQ2hpbGQuc2libGluZztcbiAgICAgICAgICB9XG4gICAgICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50Mi50cmVlQmFzZUR1cmF0aW9uID0gX3RyZWVCYXNlRHVyYXRpb247XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgYSBmcmFnbWVudCBmcm9tIHRoZSBmYWxsYmFjayBjaGlsZHJlbiwgdG9vLlxuICAgICAgICB2YXIgX2ZhbGxiYWNrQ2hpbGRGcmFnbWVudDIgPSBfcHJpbWFyeUNoaWxkRnJhZ21lbnQyLnNpYmxpbmcgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChfbmV4dEZhbGxiYWNrQ2hpbGRyZW4yLCBtb2RlLCByZW5kZXJFeHBpcmF0aW9uVGltZSwgbnVsbCk7XG4gICAgICAgIF9mYWxsYmFja0NoaWxkRnJhZ21lbnQyLmVmZmVjdFRhZyB8PSBQbGFjZW1lbnQ7XG4gICAgICAgIGNoaWxkID0gX3ByaW1hcnlDaGlsZEZyYWdtZW50MjtcbiAgICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50Mi5jaGlsZEV4cGlyYXRpb25UaW1lID0gTm9Xb3JrO1xuICAgICAgICAvLyBTa2lwIHRoZSBwcmltYXJ5IGNoaWxkcmVuLCBhbmQgY29udGludWUgd29ya2luZyBvbiB0aGVcbiAgICAgICAgLy8gZmFsbGJhY2sgY2hpbGRyZW4uXG4gICAgICAgIG5leHQgPSBfZmFsbGJhY2tDaGlsZEZyYWdtZW50MjtcbiAgICAgICAgY2hpbGQucmV0dXJuID0gbmV4dC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFN0aWxsIGhhdmVuJ3QgdGltZWQgb3V0LiAgQ29udGludWUgcmVuZGVyaW5nIHRoZSBjaGlsZHJlbiwgbGlrZSB3ZVxuICAgICAgICAvLyBub3JtYWxseSBkby5cbiAgICAgICAgdmFyIF9uZXh0UHJpbWFyeUNoaWxkcmVuMiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgICAgICAgbmV4dCA9IGNoaWxkID0gcmVjb25jaWxlQ2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIF9jdXJyZW50UHJpbWFyeUNoaWxkLCBfbmV4dFByaW1hcnlDaGlsZHJlbjIsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gY3VycmVudCQkMS5zdGF0ZU5vZGU7XG4gIH1cblxuICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbmV4dFN0YXRlO1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGNoaWxkO1xuICByZXR1cm4gbmV4dDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRGVoeWRyYXRlZFN1c3BlbnNlQ29tcG9uZW50KGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICBpZiAoY3VycmVudCQkMSA9PT0gbnVsbCkge1xuICAgIC8vIER1cmluZyB0aGUgZmlyc3QgcGFzcywgd2UnbGwgYmFpbCBvdXQgYW5kIG5vdCBkcmlsbCBpbnRvIHRoZSBjaGlsZHJlbi5cbiAgICAvLyBJbnN0ZWFkLCB3ZSdsbCBsZWF2ZSB0aGUgY29udGVudCBpbiBwbGFjZSBhbmQgdHJ5IHRvIGh5ZHJhdGUgaXQgbGF0ZXIuXG4gICAgd29ya0luUHJvZ3Jlc3MuZXhwaXJhdGlvblRpbWUgPSBOZXZlcjtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvLyBXZSB1c2UgY2hpbGRFeHBpcmF0aW9uVGltZSB0byBpbmRpY2F0ZSB0aGF0IGEgY2hpbGQgbWlnaHQgZGVwZW5kIG9uIGNvbnRleHQsIHNvIGlmXG4gIC8vIGFueSBjb250ZXh0IGhhcyBjaGFuZ2VkLCB3ZSBuZWVkIHRvIHRyZWF0IGlzIGFzIGlmIHRoZSBpbnB1dCBtaWdodCBoYXZlIGNoYW5nZWQuXG4gIHZhciBoYXNDb250ZXh0Q2hhbmdlZCQkMSA9IGN1cnJlbnQkJDEuY2hpbGRFeHBpcmF0aW9uVGltZSA+PSByZW5kZXJFeHBpcmF0aW9uVGltZTtcbiAgaWYgKGRpZFJlY2VpdmVVcGRhdGUgfHwgaGFzQ29udGV4dENoYW5nZWQkJDEpIHtcbiAgICAvLyBUaGlzIGJvdW5kYXJ5IGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBmaXJzdCByZW5kZXIuIFRoaXMgbWVhbnMgdGhhdCB3ZSBhcmUgbm93IHVuYWJsZSB0b1xuICAgIC8vIGh5ZHJhdGUgaXQuIFdlIG1pZ2h0IHN0aWxsIGJlIGFibGUgdG8gaHlkcmF0ZSBpdCB1c2luZyBhbiBlYXJsaWVyIGV4cGlyYXRpb24gdGltZSBidXRcbiAgICAvLyBkdXJpbmcgdGhpcyByZW5kZXIgd2UgY2FuJ3QuIEluc3RlYWQsIHdlJ3JlIGdvaW5nIHRvIGRlbGV0ZSB0aGUgd2hvbGUgc3VidHJlZSBhbmRcbiAgICAvLyBpbnN0ZWFkIGluamVjdCBhIG5ldyByZWFsIFN1c3BlbnNlIGJvdW5kYXJ5IHRvIHRha2UgaXRzIHBsYWNlLCB3aGljaCBtYXkgcmVuZGVyIGNvbnRlbnRcbiAgICAvLyBvciBmYWxsYmFjay4gVGhlIHJlYWwgU3VzcGVuc2UgYm91bmRhcnkgd2lsbCBzdXNwZW5kIGZvciBhIHdoaWxlIHNvIHdlIGhhdmUgc29tZSB0aW1lXG4gICAgLy8gdG8gZW5zdXJlIGl0IGNhbiBwcm9kdWNlIHJlYWwgY29udGVudCwgYnV0IGFsbCBzdGF0ZSBhbmQgcGVuZGluZyBldmVudHMgd2lsbCBiZSBsb3N0LlxuXG4gICAgLy8gRGV0YWNoIGZyb20gdGhlIGN1cnJlbnQgZGVoeWRyYXRlZCBib3VuZGFyeS5cbiAgICBjdXJyZW50JCQxLmFsdGVybmF0ZSA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gbnVsbDtcblxuICAgIC8vIEluc2VydCBhIGRlbGV0aW9uIGluIHRoZSBlZmZlY3QgbGlzdC5cbiAgICB2YXIgcmV0dXJuRmliZXIgPSB3b3JrSW5Qcm9ncmVzcy5yZXR1cm47XG4gICAgIShyZXR1cm5GaWJlciAhPT0gbnVsbCkgPyBpbnZhcmlhbnQoZmFsc2UsICdTdXNwZW5zZSBib3VuZGFyaWVzIGFyZSBuZXZlciBvbiB0aGUgcm9vdC4gVGhpcyBpcyBwcm9iYWJseSBhIGJ1ZyBpbiBSZWFjdC4nKSA6IHZvaWQgMDtcbiAgICB2YXIgbGFzdCA9IHJldHVybkZpYmVyLmxhc3RFZmZlY3Q7XG4gICAgaWYgKGxhc3QgIT09IG51bGwpIHtcbiAgICAgIGxhc3QubmV4dEVmZmVjdCA9IGN1cnJlbnQkJDE7XG4gICAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY3VycmVudCQkMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuRmliZXIuZmlyc3RFZmZlY3QgPSByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY3VycmVudCQkMTtcbiAgICB9XG4gICAgY3VycmVudCQkMS5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgICBjdXJyZW50JCQxLmVmZmVjdFRhZyA9IERlbGV0aW9uO1xuXG4gICAgLy8gVXBncmFkZSB0aGlzIHdvcmsgaW4gcHJvZ3Jlc3MgdG8gYSByZWFsIFN1c3BlbnNlIGNvbXBvbmVudC5cbiAgICB3b3JrSW5Qcm9ncmVzcy50YWcgPSBTdXNwZW5zZUNvbXBvbmVudDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgIC8vIFRoaXMgaXMgbm93IGFuIGluc2VydGlvbi5cbiAgICB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgfD0gUGxhY2VtZW50O1xuICAgIC8vIFJldHJ5IGFzIGEgcmVhbCBTdXNwZW5zZSBjb21wb25lbnQuXG4gICAgcmV0dXJuIHVwZGF0ZVN1c3BlbnNlQ29tcG9uZW50KG51bGwsIHdvcmtJblByb2dyZXNzLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gIH1cbiAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgJiBEaWRDYXB0dXJlKSA9PT0gTm9FZmZlY3QpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBhdHRlbXB0LlxuICAgIHJlZW50ZXJIeWRyYXRpb25TdGF0ZUZyb21EZWh5ZHJhdGVkU3VzcGVuc2VJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgICB2YXIgbmV4dENoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbW91bnRDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgbnVsbCwgbmV4dENoaWxkcmVuLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICB9IGVsc2Uge1xuICAgIC8vIFNvbWV0aGluZyBzdXNwZW5kZWQuIExlYXZlIHRoZSBleGlzdGluZyBjaGlsZHJlbiBpbiBwbGFjZS5cbiAgICAvLyBUT0RPOiBJbiBub24tY29uY3VycmVudCBtb2RlLCBzaG91bGQgd2UgY29tbWl0IHRoZSBub2RlcyB3ZSBoYXZlIGh5ZHJhdGVkIHNvIGZhcj9cbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG51bGw7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlUG9ydGFsQ29tcG9uZW50KGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICBwdXNoSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO1xuICB2YXIgbmV4dENoaWxkcmVuID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICBpZiAoY3VycmVudCQkMSA9PT0gbnVsbCkge1xuICAgIC8vIFBvcnRhbHMgYXJlIHNwZWNpYWwgYmVjYXVzZSB3ZSBkb24ndCBhcHBlbmQgdGhlIGNoaWxkcmVuIGR1cmluZyBtb3VudFxuICAgIC8vIGJ1dCBhdCBjb21taXQuIFRoZXJlZm9yZSB3ZSBuZWVkIHRvIHRyYWNrIGluc2VydGlvbnMgd2hpY2ggdGhlIG5vcm1hbFxuICAgIC8vIGZsb3cgZG9lc24ndCBkbyBkdXJpbmcgbW91bnQuIFRoaXMgZG9lc24ndCBoYXBwZW4gYXQgdGhlIHJvb3QgYmVjYXVzZVxuICAgIC8vIHRoZSByb290IGFsd2F5cyBzdGFydHMgd2l0aCBhIFwiY3VycmVudFwiIHdpdGggYSBudWxsIGNoaWxkLlxuICAgIC8vIFRPRE86IENvbnNpZGVyIHVuaWZ5aW5nIHRoaXMgd2l0aCBob3cgdGhlIHJvb3Qgd29ya3MuXG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgbnVsbCwgbmV4dENoaWxkcmVuLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICB9XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlQ29udGV4dFByb3ZpZGVyKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICB2YXIgcHJvdmlkZXJUeXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgdmFyIGNvbnRleHQgPSBwcm92aWRlclR5cGUuX2NvbnRleHQ7XG5cbiAgdmFyIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgb2xkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzO1xuXG4gIHZhciBuZXdWYWx1ZSA9IG5ld1Byb3BzLnZhbHVlO1xuXG4gIHtcbiAgICB2YXIgcHJvdmlkZXJQcm9wVHlwZXMgPSB3b3JrSW5Qcm9ncmVzcy50eXBlLnByb3BUeXBlcztcblxuICAgIGlmIChwcm92aWRlclByb3BUeXBlcykge1xuICAgICAgY2hlY2tQcm9wVHlwZXMocHJvdmlkZXJQcm9wVHlwZXMsIG5ld1Byb3BzLCAncHJvcCcsICdDb250ZXh0LlByb3ZpZGVyJywgZ2V0Q3VycmVudEZpYmVyU3RhY2tJbkRldik7XG4gICAgfVxuICB9XG5cbiAgcHVzaFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBuZXdWYWx1ZSk7XG5cbiAgaWYgKG9sZFByb3BzICE9PSBudWxsKSB7XG4gICAgdmFyIG9sZFZhbHVlID0gb2xkUHJvcHMudmFsdWU7XG4gICAgdmFyIGNoYW5nZWRCaXRzID0gY2FsY3VsYXRlQ2hhbmdlZEJpdHMoY29udGV4dCwgbmV3VmFsdWUsIG9sZFZhbHVlKTtcbiAgICBpZiAoY2hhbmdlZEJpdHMgPT09IDApIHtcbiAgICAgIC8vIE5vIGNoYW5nZS4gQmFpbG91dCBlYXJseSBpZiBjaGlsZHJlbiBhcmUgdGhlIHNhbWUuXG4gICAgICBpZiAob2xkUHJvcHMuY2hpbGRyZW4gPT09IG5ld1Byb3BzLmNoaWxkcmVuICYmICFoYXNDb250ZXh0Q2hhbmdlZCgpKSB7XG4gICAgICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBjb250ZXh0IHZhbHVlIGNoYW5nZWQuIFNlYXJjaCBmb3IgbWF0Y2hpbmcgY29uc3VtZXJzIGFuZCBzY2hlZHVsZVxuICAgICAgLy8gdGhlbSB0byB1cGRhdGUuXG4gICAgICBwcm9wYWdhdGVDb250ZXh0Q2hhbmdlKHdvcmtJblByb2dyZXNzLCBjb250ZXh0LCBjaGFuZ2VkQml0cywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBuZXdDaGlsZHJlbiA9IG5ld1Byb3BzLmNoaWxkcmVuO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgbmV3Q2hpbGRyZW4sIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG52YXIgaGFzV2FybmVkQWJvdXRVc2luZ0NvbnRleHRBc0NvbnN1bWVyID0gZmFsc2U7XG5cbmZ1bmN0aW9uIHVwZGF0ZUNvbnRleHRDb25zdW1lcihjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAgdmFyIGNvbnRleHQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAvLyBUaGUgbG9naWMgYmVsb3cgZm9yIENvbnRleHQgZGlmZmVycyBkZXBlbmRpbmcgb24gUFJPRCBvciBERVYgbW9kZS4gSW5cbiAgLy8gREVWIG1vZGUsIHdlIGNyZWF0ZSBhIHNlcGFyYXRlIG9iamVjdCBmb3IgQ29udGV4dC5Db25zdW1lciB0aGF0IGFjdHNcbiAgLy8gbGlrZSBhIHByb3h5IHRvIENvbnRleHQuIFRoaXMgcHJveHkgb2JqZWN0IGFkZHMgdW5uZWNlc3NhcnkgY29kZSBpbiBQUk9EXG4gIC8vIHNvIHdlIHVzZSB0aGUgb2xkIGJlaGF2aW91ciAoQ29udGV4dC5Db25zdW1lciByZWZlcmVuY2VzIENvbnRleHQpIHRvXG4gIC8vIHJlZHVjZSBzaXplIGFuZCBvdmVyaGVhZC4gVGhlIHNlcGFyYXRlIG9iamVjdCByZWZlcmVuY2VzIGNvbnRleHQgdmlhXG4gIC8vIGEgcHJvcGVydHkgY2FsbGVkIFwiX2NvbnRleHRcIiwgd2hpY2ggYWxzbyBnaXZlcyB1cyB0aGUgYWJpbGl0eSB0byBjaGVja1xuICAvLyBpbiBERVYgbW9kZSBpZiB0aGlzIHByb3BlcnR5IGV4aXN0cyBvciBub3QgYW5kIHdhcm4gaWYgaXQgZG9lcyBub3QuXG4gIHtcbiAgICBpZiAoY29udGV4dC5fY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBUaGlzIG1heSBiZSBiZWNhdXNlIGl0J3MgYSBDb250ZXh0IChyYXRoZXIgdGhhbiBhIENvbnN1bWVyKS5cbiAgICAgIC8vIE9yIGl0IG1heSBiZSBiZWNhdXNlIGl0J3Mgb2xkZXIgUmVhY3Qgd2hlcmUgdGhleSdyZSB0aGUgc2FtZSB0aGluZy5cbiAgICAgIC8vIFdlIG9ubHkgd2FudCB0byB3YXJuIGlmIHdlJ3JlIHN1cmUgaXQncyBhIG5ldyBSZWFjdC5cbiAgICAgIGlmIChjb250ZXh0ICE9PSBjb250ZXh0LkNvbnN1bWVyKSB7XG4gICAgICAgIGlmICghaGFzV2FybmVkQWJvdXRVc2luZ0NvbnRleHRBc0NvbnN1bWVyKSB7XG4gICAgICAgICAgaGFzV2FybmVkQWJvdXRVc2luZ0NvbnRleHRBc0NvbnN1bWVyID0gdHJ1ZTtcbiAgICAgICAgICB3YXJuaW5nJDEoZmFsc2UsICdSZW5kZXJpbmcgPENvbnRleHQ+IGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byByZW5kZXIgPENvbnRleHQuQ29uc3VtZXI+IGluc3RlYWQ/Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dCA9IGNvbnRleHQuX2NvbnRleHQ7XG4gICAgfVxuICB9XG4gIHZhciBuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIHJlbmRlciA9IG5ld1Byb3BzLmNoaWxkcmVuO1xuXG4gIHtcbiAgICAhKHR5cGVvZiByZW5kZXIgPT09ICdmdW5jdGlvbicpID8gd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnQSBjb250ZXh0IGNvbnN1bWVyIHdhcyByZW5kZXJlZCB3aXRoIG11bHRpcGxlIGNoaWxkcmVuLCBvciBhIGNoaWxkICcgKyBcInRoYXQgaXNuJ3QgYSBmdW5jdGlvbi4gQSBjb250ZXh0IGNvbnN1bWVyIGV4cGVjdHMgYSBzaW5nbGUgY2hpbGQgXCIgKyAndGhhdCBpcyBhIGZ1bmN0aW9uLiBJZiB5b3UgZGlkIHBhc3MgYSBmdW5jdGlvbiwgbWFrZSBzdXJlIHRoZXJlICcgKyAnaXMgbm8gdHJhaWxpbmcgb3IgbGVhZGluZyB3aGl0ZXNwYWNlIGFyb3VuZCBpdC4nKSA6IHZvaWQgMDtcbiAgfVxuXG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gIHZhciBuZXdWYWx1ZSA9IHJlYWRDb250ZXh0KGNvbnRleHQsIG5ld1Byb3BzLnVuc3RhYmxlX29ic2VydmVkQml0cyk7XG4gIHZhciBuZXdDaGlsZHJlbiA9IHZvaWQgMDtcbiAge1xuICAgIFJlYWN0Q3VycmVudE93bmVyJDMuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICAgIHNldEN1cnJlbnRQaGFzZSgncmVuZGVyJyk7XG4gICAgbmV3Q2hpbGRyZW4gPSByZW5kZXIobmV3VmFsdWUpO1xuICAgIHNldEN1cnJlbnRQaGFzZShudWxsKTtcbiAgfVxuXG4gIC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cbiAgd29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnIHw9IFBlcmZvcm1lZFdvcms7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCBuZXdDaGlsZHJlbiwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIG1hcmtXb3JrSW5Qcm9ncmVzc1JlY2VpdmVkVXBkYXRlKCkge1xuICBkaWRSZWNlaXZlVXBkYXRlID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAgY2FuY2VsV29ya1RpbWVyKHdvcmtJblByb2dyZXNzKTtcblxuICBpZiAoY3VycmVudCQkMSAhPT0gbnVsbCkge1xuICAgIC8vIFJldXNlIHByZXZpb3VzIGNvbnRleHQgbGlzdFxuICAgIHdvcmtJblByb2dyZXNzLmNvbnRleHREZXBlbmRlbmNpZXMgPSBjdXJyZW50JCQxLmNvbnRleHREZXBlbmRlbmNpZXM7XG4gIH1cblxuICBpZiAoZW5hYmxlUHJvZmlsZXJUaW1lcikge1xuICAgIC8vIERvbid0IHVwZGF0ZSBcImJhc2VcIiByZW5kZXIgdGltZXMgZm9yIGJhaWxvdXRzLlxuICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nKHdvcmtJblByb2dyZXNzKTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSBjaGlsZHJlbiBoYXZlIGFueSBwZW5kaW5nIHdvcmsuXG4gIHZhciBjaGlsZEV4cGlyYXRpb25UaW1lID0gd29ya0luUHJvZ3Jlc3MuY2hpbGRFeHBpcmF0aW9uVGltZTtcbiAgaWYgKGNoaWxkRXhwaXJhdGlvblRpbWUgPCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICAgIC8vIFRoZSBjaGlsZHJlbiBkb24ndCBoYXZlIGFueSB3b3JrIGVpdGhlci4gV2UgY2FuIHNraXAgdGhlbS5cbiAgICAvLyBUT0RPOiBPbmNlIHdlIGFkZCBiYWNrIHJlc3VtaW5nLCB3ZSBzaG91bGQgY2hlY2sgaWYgdGhlIGNoaWxkcmVuIGFyZVxuICAgIC8vIGEgd29yay1pbi1wcm9ncmVzcyBzZXQuIElmIHNvLCB3ZSBuZWVkIHRvIHRyYW5zZmVyIHRoZWlyIGVmZmVjdHMuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhpcyBmaWJlciBkb2Vzbid0IGhhdmUgd29yaywgYnV0IGl0cyBzdWJ0cmVlIGRvZXMuIENsb25lIHRoZSBjaGlsZFxuICAgIC8vIGZpYmVycyBhbmQgY29udGludWUuXG4gICAgY2xvbmVDaGlsZEZpYmVycyhjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJlZ2luV29yayhjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAgdmFyIHVwZGF0ZUV4cGlyYXRpb25UaW1lID0gd29ya0luUHJvZ3Jlc3MuZXhwaXJhdGlvblRpbWU7XG5cbiAgaWYgKGN1cnJlbnQkJDEgIT09IG51bGwpIHtcbiAgICB2YXIgb2xkUHJvcHMgPSBjdXJyZW50JCQxLm1lbW9pemVkUHJvcHM7XG4gICAgdmFyIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gICAgaWYgKG9sZFByb3BzICE9PSBuZXdQcm9wcyB8fCBoYXNDb250ZXh0Q2hhbmdlZCgpKSB7XG4gICAgICAvLyBJZiBwcm9wcyBvciBjb250ZXh0IGNoYW5nZWQsIG1hcmsgdGhlIGZpYmVyIGFzIGhhdmluZyBwZXJmb3JtZWQgd29yay5cbiAgICAgIC8vIFRoaXMgbWF5IGJlIHVuc2V0IGlmIHRoZSBwcm9wcyBhcmUgZGV0ZXJtaW5lZCB0byBiZSBlcXVhbCBsYXRlciAobWVtbykuXG4gICAgICBkaWRSZWNlaXZlVXBkYXRlID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHVwZGF0ZUV4cGlyYXRpb25UaW1lIDwgcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSBmYWxzZTtcbiAgICAgIC8vIFRoaXMgZmliZXIgZG9lcyBub3QgaGF2ZSBhbnkgcGVuZGluZyB3b3JrLiBCYWlsb3V0IHdpdGhvdXQgZW50ZXJpbmdcbiAgICAgIC8vIHRoZSBiZWdpbiBwaGFzZS4gVGhlcmUncyBzdGlsbCBzb21lIGJvb2trZWVwaW5nIHdlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZVxuICAgICAgLy8gaW4gdGhpcyBvcHRpbWl6ZWQgcGF0aCwgbW9zdGx5IHB1c2hpbmcgc3R1ZmYgb250byB0aGUgc3RhY2suXG4gICAgICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICAgIHB1c2hIb3N0Um9vdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHJlc2V0SHlkcmF0aW9uU3RhdGUoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgIHB1c2hIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIENvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgICAgICAgICBwdXNoQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgICAgIHB1c2hIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMudmFsdWU7XG4gICAgICAgICAgICBwdXNoUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBQcm9maWxlcjpcbiAgICAgICAgICBpZiAoZW5hYmxlUHJvZmlsZXJUaW1lcikge1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnIHw9IFVwZGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIHN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICAgIHZhciBkaWRUaW1lb3V0ID0gc3RhdGUgIT09IG51bGw7XG4gICAgICAgICAgICBpZiAoZGlkVGltZW91dCkge1xuICAgICAgICAgICAgICAvLyBJZiB0aGlzIGJvdW5kYXJ5IGlzIGN1cnJlbnRseSB0aW1lZCBvdXQsIHdlIG5lZWQgdG8gZGVjaWRlXG4gICAgICAgICAgICAgIC8vIHdoZXRoZXIgdG8gcmV0cnkgdGhlIHByaW1hcnkgY2hpbGRyZW4sIG9yIHRvIHNraXAgb3ZlciBpdCBhbmRcbiAgICAgICAgICAgICAgLy8gZ28gc3RyYWlnaHQgdG8gdGhlIGZhbGxiYWNrLiBDaGVjayB0aGUgcHJpb3JpdHkgb2YgdGhlIHByaW1hcnlcbiAgICAgICAgICAgICAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgICAgIHZhciBwcmltYXJ5Q2hpbGRFeHBpcmF0aW9uVGltZSA9IHByaW1hcnlDaGlsZEZyYWdtZW50LmNoaWxkRXhwaXJhdGlvblRpbWU7XG4gICAgICAgICAgICAgIGlmIChwcmltYXJ5Q2hpbGRFeHBpcmF0aW9uVGltZSAhPT0gTm9Xb3JrICYmIHByaW1hcnlDaGlsZEV4cGlyYXRpb25UaW1lID49IHJlbmRlckV4cGlyYXRpb25UaW1lKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIHByaW1hcnkgY2hpbGRyZW4gaGF2ZSBwZW5kaW5nIHdvcmsuIFVzZSB0aGUgbm9ybWFsIHBhdGhcbiAgICAgICAgICAgICAgICAvLyB0byBhdHRlbXB0IHRvIHJlbmRlciB0aGUgcHJpbWFyeSBjaGlsZHJlbiBhZ2Fpbi5cbiAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlU3VzcGVuc2VDb21wb25lbnQoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgcHJpbWFyeSBjaGlsZHJlbiBkbyBub3QgaGF2ZSBwZW5kaW5nIHdvcmsgd2l0aCBzdWZmaWNpZW50XG4gICAgICAgICAgICAgICAgLy8gcHJpb3JpdHkuIEJhaWxvdXQuXG4gICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgLy8gVGhlIGZhbGxiYWNrIGNoaWxkcmVuIGhhdmUgcGVuZGluZyB3b3JrLiBTa2lwIG92ZXIgdGhlXG4gICAgICAgICAgICAgICAgICAvLyBwcmltYXJ5IGNoaWxkcmVuIGFuZCB3b3JrIG9uIHRoZSBmYWxsYmFjay5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZC5zaWJsaW5nO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBEZWh5ZHJhdGVkU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKGVuYWJsZVN1c3BlbnNlU2VydmVyUmVuZGVyZXIpIHtcbiAgICAgICAgICAgICAgLy8gV2Uga25vdyB0aGF0IHRoaXMgY29tcG9uZW50IHdpbGwgc3VzcGVuZCBhZ2FpbiBiZWNhdXNlIGlmIGl0IGhhc1xuICAgICAgICAgICAgICAvLyBiZWVuIHVuc3VzcGVuZGVkIGl0IGhhcyBjb21taXR0ZWQgYXMgYSByZWd1bGFyIFN1c3BlbnNlIGNvbXBvbmVudC5cbiAgICAgICAgICAgICAgLy8gSWYgaXQgbmVlZHMgdG8gYmUgcmV0cmllZCwgaXQgc2hvdWxkIGhhdmUgd29yayBzY2hlZHVsZWQgb24gaXQuXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7XG4gIH1cblxuICAvLyBCZWZvcmUgZW50ZXJpbmcgdGhlIGJlZ2luIHBoYXNlLCBjbGVhciB0aGUgZXhwaXJhdGlvbiB0aW1lLlxuICB3b3JrSW5Qcm9ncmVzcy5leHBpcmF0aW9uVGltZSA9IE5vV29yaztcblxuICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgIGNhc2UgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIGVsZW1lbnRUeXBlID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGU7XG4gICAgICAgIHJldHVybiBtb3VudEluZGV0ZXJtaW5hdGVDb21wb25lbnQoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIGVsZW1lbnRUeXBlLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgICB9XG4gICAgY2FzZSBMYXp5Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgX2VsZW1lbnRUeXBlID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGU7XG4gICAgICAgIHJldHVybiBtb3VudExhenlDb21wb25lbnQoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIF9lbGVtZW50VHlwZSwgdXBkYXRlRXhwaXJhdGlvblRpbWUsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgICAgIH1cbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgX0NvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgIHZhciB1bnJlc29sdmVkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gICAgICAgIHZhciByZXNvbHZlZFByb3BzID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPT09IF9Db21wb25lbnQgPyB1bnJlc29sdmVkUHJvcHMgOiByZXNvbHZlRGVmYXVsdFByb3BzKF9Db21wb25lbnQsIHVucmVzb2x2ZWRQcm9wcyk7XG4gICAgICAgIHJldHVybiB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudChjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgX0NvbXBvbmVudCwgcmVzb2x2ZWRQcm9wcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgICAgfVxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBfQ29tcG9uZW50MiA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgIHZhciBfdW5yZXNvbHZlZFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICAgICAgICB2YXIgX3Jlc29sdmVkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9PT0gX0NvbXBvbmVudDIgPyBfdW5yZXNvbHZlZFByb3BzIDogcmVzb2x2ZURlZmF1bHRQcm9wcyhfQ29tcG9uZW50MiwgX3VucmVzb2x2ZWRQcm9wcyk7XG4gICAgICAgIHJldHVybiB1cGRhdGVDbGFzc0NvbXBvbmVudChjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgX0NvbXBvbmVudDIsIF9yZXNvbHZlZFByb3BzLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgICB9XG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHJldHVybiB1cGRhdGVIb3N0Um9vdChjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHJldHVybiB1cGRhdGVIb3N0Q29tcG9uZW50KGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgIHJldHVybiB1cGRhdGVIb3N0VGV4dChjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUNvbXBvbmVudChjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHJldHVybiB1cGRhdGVQb3J0YWxDb21wb25lbnQoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICB7XG4gICAgICAgIHZhciB0eXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIF91bnJlc29sdmVkUHJvcHMyID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICAgICAgICB2YXIgX3Jlc29sdmVkUHJvcHMyID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPT09IHR5cGUgPyBfdW5yZXNvbHZlZFByb3BzMiA6IHJlc29sdmVEZWZhdWx0UHJvcHModHlwZSwgX3VucmVzb2x2ZWRQcm9wczIpO1xuICAgICAgICByZXR1cm4gdXBkYXRlRm9yd2FyZFJlZihjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgdHlwZSwgX3Jlc29sdmVkUHJvcHMyLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgICB9XG4gICAgY2FzZSBGcmFnbWVudDpcbiAgICAgIHJldHVybiB1cGRhdGVGcmFnbWVudChjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgIGNhc2UgTW9kZTpcbiAgICAgIHJldHVybiB1cGRhdGVNb2RlKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgY2FzZSBQcm9maWxlcjpcbiAgICAgIHJldHVybiB1cGRhdGVQcm9maWxlcihjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgcmV0dXJuIHVwZGF0ZUNvbnRleHRQcm92aWRlcihjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgIGNhc2UgQ29udGV4dENvbnN1bWVyOlxuICAgICAgcmV0dXJuIHVwZGF0ZUNvbnRleHRDb25zdW1lcihjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIF90eXBlMiA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgIHZhciBfdW5yZXNvbHZlZFByb3BzMyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgICAgICAgLy8gUmVzb2x2ZSBvdXRlciBwcm9wcyBmaXJzdCwgdGhlbiByZXNvbHZlIGlubmVyIHByb3BzLlxuICAgICAgICB2YXIgX3Jlc29sdmVkUHJvcHMzID0gcmVzb2x2ZURlZmF1bHRQcm9wcyhfdHlwZTIsIF91bnJlc29sdmVkUHJvcHMzKTtcbiAgICAgICAge1xuICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgICAgICAgdmFyIG91dGVyUHJvcFR5cGVzID0gX3R5cGUyLnByb3BUeXBlcztcbiAgICAgICAgICAgIGlmIChvdXRlclByb3BUeXBlcykge1xuICAgICAgICAgICAgICBjaGVja1Byb3BUeXBlcyhvdXRlclByb3BUeXBlcywgX3Jlc29sdmVkUHJvcHMzLCAvLyBSZXNvbHZlZCBmb3Igb3V0ZXIgb25seVxuICAgICAgICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUoX3R5cGUyKSwgZ2V0Q3VycmVudEZpYmVyU3RhY2tJbkRldik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF9yZXNvbHZlZFByb3BzMyA9IHJlc29sdmVEZWZhdWx0UHJvcHMoX3R5cGUyLnR5cGUsIF9yZXNvbHZlZFByb3BzMyk7XG4gICAgICAgIHJldHVybiB1cGRhdGVNZW1vQ29tcG9uZW50KGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCBfdHlwZTIsIF9yZXNvbHZlZFByb3BzMywgdXBkYXRlRXhwaXJhdGlvblRpbWUsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgICAgIH1cbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybiB1cGRhdGVTaW1wbGVNZW1vQ29tcG9uZW50KGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy50eXBlLCB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsIHVwZGF0ZUV4cGlyYXRpb25UaW1lLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgICB9XG4gICAgY2FzZSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBfQ29tcG9uZW50MyA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgIHZhciBfdW5yZXNvbHZlZFByb3BzNCA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgICAgICAgdmFyIF9yZXNvbHZlZFByb3BzNCA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID09PSBfQ29tcG9uZW50MyA/IF91bnJlc29sdmVkUHJvcHM0IDogcmVzb2x2ZURlZmF1bHRQcm9wcyhfQ29tcG9uZW50MywgX3VucmVzb2x2ZWRQcm9wczQpO1xuICAgICAgICByZXR1cm4gbW91bnRJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIF9Db21wb25lbnQzLCBfcmVzb2x2ZWRQcm9wczQsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgICAgIH1cbiAgICBjYXNlIERlaHlkcmF0ZWRTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgaWYgKGVuYWJsZVN1c3BlbnNlU2VydmVyUmVuZGVyZXIpIHtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlRGVoeWRyYXRlZFN1c3BlbnNlQ29tcG9uZW50KGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gIH1cbiAgaW52YXJpYW50KGZhbHNlLCAnVW5rbm93biB1bml0IG9mIHdvcmsgdGFnLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xufVxuXG52YXIgdmFsdWVDdXJzb3IgPSBjcmVhdGVDdXJzb3IobnVsbCk7XG5cbnZhciByZW5kZXJlclNpZ2lsID0gdm9pZCAwO1xue1xuICAvLyBVc2UgdGhpcyB0byBkZXRlY3QgbXVsdGlwbGUgcmVuZGVyZXJzIHVzaW5nIHRoZSBzYW1lIGNvbnRleHRcbiAgcmVuZGVyZXJTaWdpbCA9IHt9O1xufVxuXG52YXIgY3VycmVudGx5UmVuZGVyaW5nRmliZXIgPSBudWxsO1xudmFyIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IG51bGw7XG52YXIgbGFzdENvbnRleHRXaXRoQWxsQml0c09ic2VydmVkID0gbnVsbDtcblxudmFyIGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYgPSBmYWxzZTtcblxuZnVuY3Rpb24gcmVzZXRDb250ZXh0RGVwZW5kZW5jZXMoKSB7XG4gIC8vIFRoaXMgaXMgY2FsbGVkIHJpZ2h0IGJlZm9yZSBSZWFjdCB5aWVsZHMgZXhlY3V0aW9uLCB0byBlbnN1cmUgYHJlYWRDb250ZXh0YFxuICAvLyBjYW5ub3QgYmUgY2FsbGVkIG91dHNpZGUgdGhlIHJlbmRlciBwaGFzZS5cbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIgPSBudWxsO1xuICBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBudWxsO1xuICBsYXN0Q29udGV4dFdpdGhBbGxCaXRzT2JzZXJ2ZWQgPSBudWxsO1xuICB7XG4gICAgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA9IGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVudGVyRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKSB7XG4gIHtcbiAgICBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gdHJ1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBleGl0RGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKSB7XG4gIHtcbiAgICBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHVzaFByb3ZpZGVyKHByb3ZpZGVyRmliZXIsIG5leHRWYWx1ZSkge1xuICB2YXIgY29udGV4dCA9IHByb3ZpZGVyRmliZXIudHlwZS5fY29udGV4dDtcblxuICBpZiAoaXNQcmltYXJ5UmVuZGVyZXIpIHtcbiAgICBwdXNoKHZhbHVlQ3Vyc29yLCBjb250ZXh0Ll9jdXJyZW50VmFsdWUsIHByb3ZpZGVyRmliZXIpO1xuXG4gICAgY29udGV4dC5fY3VycmVudFZhbHVlID0gbmV4dFZhbHVlO1xuICAgIHtcbiAgICAgICEoY29udGV4dC5fY3VycmVudFJlbmRlcmVyID09PSB1bmRlZmluZWQgfHwgY29udGV4dC5fY3VycmVudFJlbmRlcmVyID09PSBudWxsIHx8IGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciA9PT0gcmVuZGVyZXJTaWdpbCkgPyB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdEZXRlY3RlZCBtdWx0aXBsZSByZW5kZXJlcnMgY29uY3VycmVudGx5IHJlbmRlcmluZyB0aGUgJyArICdzYW1lIGNvbnRleHQgcHJvdmlkZXIuIFRoaXMgaXMgY3VycmVudGx5IHVuc3VwcG9ydGVkLicpIDogdm9pZCAwO1xuICAgICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyID0gcmVuZGVyZXJTaWdpbDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcHVzaCh2YWx1ZUN1cnNvciwgY29udGV4dC5fY3VycmVudFZhbHVlMiwgcHJvdmlkZXJGaWJlcik7XG5cbiAgICBjb250ZXh0Ll9jdXJyZW50VmFsdWUyID0gbmV4dFZhbHVlO1xuICAgIHtcbiAgICAgICEoY29udGV4dC5fY3VycmVudFJlbmRlcmVyMiA9PT0gdW5kZWZpbmVkIHx8IGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlcjIgPT09IG51bGwgfHwgY29udGV4dC5fY3VycmVudFJlbmRlcmVyMiA9PT0gcmVuZGVyZXJTaWdpbCkgPyB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdEZXRlY3RlZCBtdWx0aXBsZSByZW5kZXJlcnMgY29uY3VycmVudGx5IHJlbmRlcmluZyB0aGUgJyArICdzYW1lIGNvbnRleHQgcHJvdmlkZXIuIFRoaXMgaXMgY3VycmVudGx5IHVuc3VwcG9ydGVkLicpIDogdm9pZCAwO1xuICAgICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyMiA9IHJlbmRlcmVyU2lnaWw7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHBvcFByb3ZpZGVyKHByb3ZpZGVyRmliZXIpIHtcbiAgdmFyIGN1cnJlbnRWYWx1ZSA9IHZhbHVlQ3Vyc29yLmN1cnJlbnQ7XG5cbiAgcG9wKHZhbHVlQ3Vyc29yLCBwcm92aWRlckZpYmVyKTtcblxuICB2YXIgY29udGV4dCA9IHByb3ZpZGVyRmliZXIudHlwZS5fY29udGV4dDtcbiAgaWYgKGlzUHJpbWFyeVJlbmRlcmVyKSB7XG4gICAgY29udGV4dC5fY3VycmVudFZhbHVlID0gY3VycmVudFZhbHVlO1xuICB9IGVsc2Uge1xuICAgIGNvbnRleHQuX2N1cnJlbnRWYWx1ZTIgPSBjdXJyZW50VmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FsY3VsYXRlQ2hhbmdlZEJpdHMoY29udGV4dCwgbmV3VmFsdWUsIG9sZFZhbHVlKSB7XG4gIGlmIChpcyhvbGRWYWx1ZSwgbmV3VmFsdWUpKSB7XG4gICAgLy8gTm8gY2hhbmdlXG4gICAgcmV0dXJuIDA7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGNoYW5nZWRCaXRzID0gdHlwZW9mIGNvbnRleHQuX2NhbGN1bGF0ZUNoYW5nZWRCaXRzID09PSAnZnVuY3Rpb24nID8gY29udGV4dC5fY2FsY3VsYXRlQ2hhbmdlZEJpdHMob2xkVmFsdWUsIG5ld1ZhbHVlKSA6IG1heFNpZ25lZDMxQml0SW50O1xuXG4gICAge1xuICAgICAgISgoY2hhbmdlZEJpdHMgJiBtYXhTaWduZWQzMUJpdEludCkgPT09IGNoYW5nZWRCaXRzKSA/IHdhcm5pbmckMShmYWxzZSwgJ2NhbGN1bGF0ZUNoYW5nZWRCaXRzOiBFeHBlY3RlZCB0aGUgcmV0dXJuIHZhbHVlIHRvIGJlIGEgJyArICczMS1iaXQgaW50ZWdlci4gSW5zdGVhZCByZWNlaXZlZDogJXMnLCBjaGFuZ2VkQml0cykgOiB2b2lkIDA7XG4gICAgfVxuICAgIHJldHVybiBjaGFuZ2VkQml0cyB8IDA7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVXb3JrT25QYXJlbnRQYXRoKHBhcmVudCwgcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAgLy8gVXBkYXRlIHRoZSBjaGlsZCBleHBpcmF0aW9uIHRpbWUgb2YgYWxsIHRoZSBhbmNlc3RvcnMsIGluY2x1ZGluZ1xuICAvLyB0aGUgYWx0ZXJuYXRlcy5cbiAgdmFyIG5vZGUgPSBwYXJlbnQ7XG4gIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgdmFyIGFsdGVybmF0ZSA9IG5vZGUuYWx0ZXJuYXRlO1xuICAgIGlmIChub2RlLmNoaWxkRXhwaXJhdGlvblRpbWUgPCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICAgICAgbm9kZS5jaGlsZEV4cGlyYXRpb25UaW1lID0gcmVuZGVyRXhwaXJhdGlvblRpbWU7XG4gICAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsICYmIGFsdGVybmF0ZS5jaGlsZEV4cGlyYXRpb25UaW1lIDwgcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAgICAgICAgYWx0ZXJuYXRlLmNoaWxkRXhwaXJhdGlvblRpbWUgPSByZW5kZXJFeHBpcmF0aW9uVGltZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCAmJiBhbHRlcm5hdGUuY2hpbGRFeHBpcmF0aW9uVGltZSA8IHJlbmRlckV4cGlyYXRpb25UaW1lKSB7XG4gICAgICBhbHRlcm5hdGUuY2hpbGRFeHBpcmF0aW9uVGltZSA9IHJlbmRlckV4cGlyYXRpb25UaW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBOZWl0aGVyIGFsdGVybmF0ZSB3YXMgdXBkYXRlZCwgd2hpY2ggbWVhbnMgdGhlIHJlc3Qgb2YgdGhlXG4gICAgICAvLyBhbmNlc3RvciBwYXRoIGFscmVhZHkgaGFzIHN1ZmZpY2llbnQgcHJpb3JpdHkuXG4gICAgICBicmVhaztcbiAgICB9XG4gICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByb3BhZ2F0ZUNvbnRleHRDaGFuZ2Uod29ya0luUHJvZ3Jlc3MsIGNvbnRleHQsIGNoYW5nZWRCaXRzLCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICB2YXIgZmliZXIgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgaWYgKGZpYmVyICE9PSBudWxsKSB7XG4gICAgLy8gU2V0IHRoZSByZXR1cm4gcG9pbnRlciBvZiB0aGUgY2hpbGQgdG8gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgZmliZXIuXG4gICAgZmliZXIucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIH1cbiAgd2hpbGUgKGZpYmVyICE9PSBudWxsKSB7XG4gICAgdmFyIG5leHRGaWJlciA9IHZvaWQgMDtcblxuICAgIC8vIFZpc2l0IHRoaXMgZmliZXIuXG4gICAgdmFyIGxpc3QgPSBmaWJlci5jb250ZXh0RGVwZW5kZW5jaWVzO1xuICAgIGlmIChsaXN0ICE9PSBudWxsKSB7XG4gICAgICBuZXh0RmliZXIgPSBmaWJlci5jaGlsZDtcblxuICAgICAgdmFyIGRlcGVuZGVuY3kgPSBsaXN0LmZpcnN0O1xuICAgICAgd2hpbGUgKGRlcGVuZGVuY3kgIT09IG51bGwpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGNvbnRleHQgbWF0Y2hlcy5cbiAgICAgICAgaWYgKGRlcGVuZGVuY3kuY29udGV4dCA9PT0gY29udGV4dCAmJiAoZGVwZW5kZW5jeS5vYnNlcnZlZEJpdHMgJiBjaGFuZ2VkQml0cykgIT09IDApIHtcbiAgICAgICAgICAvLyBNYXRjaCEgU2NoZWR1bGUgYW4gdXBkYXRlIG9uIHRoaXMgZmliZXIuXG5cbiAgICAgICAgICBpZiAoZmliZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgICAgICAgLy8gU2NoZWR1bGUgYSBmb3JjZSB1cGRhdGUgb24gdGhlIHdvcmstaW4tcHJvZ3Jlc3MuXG4gICAgICAgICAgICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgICAgICAgICAgIHVwZGF0ZS50YWcgPSBGb3JjZVVwZGF0ZTtcbiAgICAgICAgICAgIC8vIFRPRE86IEJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhIHdvcmstaW4tcHJvZ3Jlc3MsIHRoaXMgd2lsbCBhZGQgdGhlXG4gICAgICAgICAgICAvLyB1cGRhdGUgdG8gdGhlIGN1cnJlbnQgZmliZXIsIHRvbywgd2hpY2ggbWVhbnMgaXQgd2lsbCBwZXJzaXN0IGV2ZW4gaWZcbiAgICAgICAgICAgIC8vIHRoaXMgcmVuZGVyIGlzIHRocm93biBhd2F5LiBTaW5jZSBpdCdzIGEgcmFjZSBjb25kaXRpb24sIG5vdCBzdXJlIGl0J3NcbiAgICAgICAgICAgIC8vIHdvcnRoIGZpeGluZy5cbiAgICAgICAgICAgIGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGZpYmVyLmV4cGlyYXRpb25UaW1lIDwgcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAgICAgICAgICAgIGZpYmVyLmV4cGlyYXRpb25UaW1lID0gcmVuZGVyRXhwaXJhdGlvblRpbWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG4gICAgICAgICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCAmJiBhbHRlcm5hdGUuZXhwaXJhdGlvblRpbWUgPCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICAgICAgICAgICAgYWx0ZXJuYXRlLmV4cGlyYXRpb25UaW1lID0gcmVuZGVyRXhwaXJhdGlvblRpbWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2NoZWR1bGVXb3JrT25QYXJlbnRQYXRoKGZpYmVyLnJldHVybiwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuXG4gICAgICAgICAgLy8gTWFyayB0aGUgZXhwaXJhdGlvbiB0aW1lIG9uIHRoZSBsaXN0LCB0b28uXG4gICAgICAgICAgaWYgKGxpc3QuZXhwaXJhdGlvblRpbWUgPCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICAgICAgICAgICAgbGlzdC5leHBpcmF0aW9uVGltZSA9IHJlbmRlckV4cGlyYXRpb25UaW1lO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFNpbmNlIHdlIGFscmVhZHkgZm91bmQgYSBtYXRjaCwgd2UgY2FuIHN0b3AgdHJhdmVyc2luZyB0aGVcbiAgICAgICAgICAvLyBkZXBlbmRlbmN5IGxpc3QuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVwZW5kZW5jeSA9IGRlcGVuZGVuY3kubmV4dDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGZpYmVyLnRhZyA9PT0gQ29udGV4dFByb3ZpZGVyKSB7XG4gICAgICAvLyBEb24ndCBzY2FuIGRlZXBlciBpZiB0aGlzIGlzIGEgbWF0Y2hpbmcgcHJvdmlkZXJcbiAgICAgIG5leHRGaWJlciA9IGZpYmVyLnR5cGUgPT09IHdvcmtJblByb2dyZXNzLnR5cGUgPyBudWxsIDogZmliZXIuY2hpbGQ7XG4gICAgfSBlbHNlIGlmIChlbmFibGVTdXNwZW5zZVNlcnZlclJlbmRlcmVyICYmIGZpYmVyLnRhZyA9PT0gRGVoeWRyYXRlZFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgICAvLyBJZiBhIGRlaHlkcmF0ZWQgc3VzcGVuc2UgY29tcG9uZW50IGlzIGluIHRoaXMgc3VidHJlZSwgd2UgZG9uJ3Qga25vd1xuICAgICAgLy8gaWYgaXQgd2lsbCBoYXZlIGFueSBjb250ZXh0IGNvbnN1bWVycyBpbiBpdC4gVGhlIGJlc3Qgd2UgY2FuIGRvIGlzXG4gICAgICAvLyBtYXJrIGl0IGFzIGhhdmluZyB1cGRhdGVzIG9uIGl0cyBjaGlsZHJlbi5cbiAgICAgIGlmIChmaWJlci5leHBpcmF0aW9uVGltZSA8IHJlbmRlckV4cGlyYXRpb25UaW1lKSB7XG4gICAgICAgIGZpYmVyLmV4cGlyYXRpb25UaW1lID0gcmVuZGVyRXhwaXJhdGlvblRpbWU7XG4gICAgICB9XG4gICAgICB2YXIgX2FsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcbiAgICAgIGlmIChfYWx0ZXJuYXRlICE9PSBudWxsICYmIF9hbHRlcm5hdGUuZXhwaXJhdGlvblRpbWUgPCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICAgICAgICBfYWx0ZXJuYXRlLmV4cGlyYXRpb25UaW1lID0gcmVuZGVyRXhwaXJhdGlvblRpbWU7XG4gICAgICB9XG4gICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgcGFzc2luZyB0aGlzIGZpYmVyIGFzIHRoZSBwYXJlbnRcbiAgICAgIC8vIGJlY2F1c2Ugd2Ugd2FudCB0byBzY2hlZHVsZSB0aGlzIGZpYmVyIGFzIGhhdmluZyB3b3JrXG4gICAgICAvLyBvbiBpdHMgY2hpbGRyZW4uIFdlJ2xsIHVzZSB0aGUgY2hpbGRFeHBpcmF0aW9uVGltZSBvblxuICAgICAgLy8gdGhpcyBmaWJlciB0byBpbmRpY2F0ZSB0aGF0IGEgY29udGV4dCBoYXMgY2hhbmdlZC5cbiAgICAgIHNjaGVkdWxlV29ya09uUGFyZW50UGF0aChmaWJlciwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgICAgbmV4dEZpYmVyID0gZmliZXIuc2libGluZztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVHJhdmVyc2UgZG93bi5cbiAgICAgIG5leHRGaWJlciA9IGZpYmVyLmNoaWxkO1xuICAgIH1cblxuICAgIGlmIChuZXh0RmliZXIgIT09IG51bGwpIHtcbiAgICAgIC8vIFNldCB0aGUgcmV0dXJuIHBvaW50ZXIgb2YgdGhlIGNoaWxkIHRvIHRoZSB3b3JrLWluLXByb2dyZXNzIGZpYmVyLlxuICAgICAgbmV4dEZpYmVyLnJldHVybiA9IGZpYmVyO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBjaGlsZC4gVHJhdmVyc2UgdG8gbmV4dCBzaWJsaW5nLlxuICAgICAgbmV4dEZpYmVyID0gZmliZXI7XG4gICAgICB3aGlsZSAobmV4dEZpYmVyICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChuZXh0RmliZXIgPT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgICAgLy8gV2UncmUgYmFjayB0byB0aGUgcm9vdCBvZiB0aGlzIHN1YnRyZWUuIEV4aXQuXG4gICAgICAgICAgbmV4dEZpYmVyID0gbnVsbDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB2YXIgc2libGluZyA9IG5leHRGaWJlci5zaWJsaW5nO1xuICAgICAgICBpZiAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFNldCB0aGUgcmV0dXJuIHBvaW50ZXIgb2YgdGhlIHNpYmxpbmcgdG8gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgZmliZXIuXG4gICAgICAgICAgc2libGluZy5yZXR1cm4gPSBuZXh0RmliZXIucmV0dXJuO1xuICAgICAgICAgIG5leHRGaWJlciA9IHNpYmxpbmc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTm8gbW9yZSBzaWJsaW5ncy4gVHJhdmVyc2UgdXAuXG4gICAgICAgIG5leHRGaWJlciA9IG5leHRGaWJlci5yZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGZpYmVyID0gbmV4dEZpYmVyO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9IHdvcmtJblByb2dyZXNzO1xuICBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBudWxsO1xuICBsYXN0Q29udGV4dFdpdGhBbGxCaXRzT2JzZXJ2ZWQgPSBudWxsO1xuXG4gIHZhciBjdXJyZW50RGVwZW5kZW5jaWVzID0gd29ya0luUHJvZ3Jlc3MuY29udGV4dERlcGVuZGVuY2llcztcbiAgaWYgKGN1cnJlbnREZXBlbmRlbmNpZXMgIT09IG51bGwgJiYgY3VycmVudERlcGVuZGVuY2llcy5leHBpcmF0aW9uVGltZSA+PSByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICAgIC8vIENvbnRleHQgbGlzdCBoYXMgYSBwZW5kaW5nIHVwZGF0ZS4gTWFyayB0aGF0IHRoaXMgZmliZXIgcGVyZm9ybWVkIHdvcmsuXG4gICAgbWFya1dvcmtJblByb2dyZXNzUmVjZWl2ZWRVcGRhdGUoKTtcbiAgfVxuXG4gIC8vIFJlc2V0IHRoZSB3b3JrLWluLXByb2dyZXNzIGxpc3RcbiAgd29ya0luUHJvZ3Jlc3MuY29udGV4dERlcGVuZGVuY2llcyA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICB7XG4gICAgLy8gVGhpcyB3YXJuaW5nIHdvdWxkIGZpcmUgaWYgeW91IHJlYWQgY29udGV4dCBpbnNpZGUgYSBIb29rIGxpa2UgdXNlTWVtby5cbiAgICAvLyBVbmxpa2UgdGhlIGNsYXNzIGNoZWNrIGJlbG93LCBpdCdzIG5vdCBlbmZvcmNlZCBpbiBwcm9kdWN0aW9uIGZvciBwZXJmLlxuICAgICEhaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA/IHdhcm5pbmckMShmYWxzZSwgJ0NvbnRleHQgY2FuIG9ubHkgYmUgcmVhZCB3aGlsZSBSZWFjdCBpcyByZW5kZXJpbmcuICcgKyAnSW4gY2xhc3NlcywgeW91IGNhbiByZWFkIGl0IGluIHRoZSByZW5kZXIgbWV0aG9kIG9yIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gJyArICdJbiBmdW5jdGlvbiBjb21wb25lbnRzLCB5b3UgY2FuIHJlYWQgaXQgZGlyZWN0bHkgaW4gdGhlIGZ1bmN0aW9uIGJvZHksIGJ1dCBub3QgJyArICdpbnNpZGUgSG9va3MgbGlrZSB1c2VSZWR1Y2VyKCkgb3IgdXNlTWVtbygpLicpIDogdm9pZCAwO1xuICB9XG5cbiAgaWYgKGxhc3RDb250ZXh0V2l0aEFsbEJpdHNPYnNlcnZlZCA9PT0gY29udGV4dCkge1xuICAgIC8vIE5vdGhpbmcgdG8gZG8uIFdlIGFscmVhZHkgb2JzZXJ2ZSBldmVyeXRoaW5nIGluIHRoaXMgY29udGV4dC5cbiAgfSBlbHNlIGlmIChvYnNlcnZlZEJpdHMgPT09IGZhbHNlIHx8IG9ic2VydmVkQml0cyA9PT0gMCkge1xuICAgIC8vIERvIG5vdCBvYnNlcnZlIGFueSB1cGRhdGVzLlxuICB9IGVsc2Uge1xuICAgIHZhciByZXNvbHZlZE9ic2VydmVkQml0cyA9IHZvaWQgMDsgLy8gQXZvaWQgZGVvcHRpbmcgb24gb2JzZXJ2YWJsZSBhcmd1bWVudHMgb3IgaGV0ZXJvZ2VuZW91cyB0eXBlcy5cbiAgICBpZiAodHlwZW9mIG9ic2VydmVkQml0cyAhPT0gJ251bWJlcicgfHwgb2JzZXJ2ZWRCaXRzID09PSBtYXhTaWduZWQzMUJpdEludCkge1xuICAgICAgLy8gT2JzZXJ2ZSBhbGwgdXBkYXRlcy5cbiAgICAgIGxhc3RDb250ZXh0V2l0aEFsbEJpdHNPYnNlcnZlZCA9IGNvbnRleHQ7XG4gICAgICByZXNvbHZlZE9ic2VydmVkQml0cyA9IG1heFNpZ25lZDMxQml0SW50O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNvbHZlZE9ic2VydmVkQml0cyA9IG9ic2VydmVkQml0cztcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dEl0ZW0gPSB7XG4gICAgICBjb250ZXh0OiBjb250ZXh0LFxuICAgICAgb2JzZXJ2ZWRCaXRzOiByZXNvbHZlZE9ic2VydmVkQml0cyxcbiAgICAgIG5leHQ6IG51bGxcbiAgICB9O1xuXG4gICAgaWYgKGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9PT0gbnVsbCkge1xuICAgICAgIShjdXJyZW50bHlSZW5kZXJpbmdGaWJlciAhPT0gbnVsbCkgPyBpbnZhcmlhbnQoZmFsc2UsICdDb250ZXh0IGNhbiBvbmx5IGJlIHJlYWQgd2hpbGUgUmVhY3QgaXMgcmVuZGVyaW5nLiBJbiBjbGFzc2VzLCB5b3UgY2FuIHJlYWQgaXQgaW4gdGhlIHJlbmRlciBtZXRob2Qgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiBJbiBmdW5jdGlvbiBjb21wb25lbnRzLCB5b3UgY2FuIHJlYWQgaXQgZGlyZWN0bHkgaW4gdGhlIGZ1bmN0aW9uIGJvZHksIGJ1dCBub3QgaW5zaWRlIEhvb2tzIGxpa2UgdXNlUmVkdWNlcigpIG9yIHVzZU1lbW8oKS4nKSA6IHZvaWQgMDtcblxuICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgZGVwZW5kZW5jeSBmb3IgdGhpcyBjb21wb25lbnQuIENyZWF0ZSBhIG5ldyBsaXN0LlxuICAgICAgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gY29udGV4dEl0ZW07XG4gICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlci5jb250ZXh0RGVwZW5kZW5jaWVzID0ge1xuICAgICAgICBmaXJzdDogY29udGV4dEl0ZW0sXG4gICAgICAgIGV4cGlyYXRpb25UaW1lOiBOb1dvcmtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFwcGVuZCBhIG5ldyBjb250ZXh0IGl0ZW0uXG4gICAgICBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBsYXN0Q29udGV4dERlcGVuZGVuY3kubmV4dCA9IGNvbnRleHRJdGVtO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaXNQcmltYXJ5UmVuZGVyZXIgPyBjb250ZXh0Ll9jdXJyZW50VmFsdWUgOiBjb250ZXh0Ll9jdXJyZW50VmFsdWUyO1xufVxuXG4vLyBVcGRhdGVRdWV1ZSBpcyBhIGxpbmtlZCBsaXN0IG9mIHByaW9yaXRpemVkIHVwZGF0ZXMuXG4vL1xuLy8gTGlrZSBmaWJlcnMsIHVwZGF0ZSBxdWV1ZXMgY29tZSBpbiBwYWlyczogYSBjdXJyZW50IHF1ZXVlLCB3aGljaCByZXByZXNlbnRzXG4vLyB0aGUgdmlzaWJsZSBzdGF0ZSBvZiB0aGUgc2NyZWVuLCBhbmQgYSB3b3JrLWluLXByb2dyZXNzIHF1ZXVlLCB3aGljaCBjYW4gYmVcbi8vIG11dGF0ZWQgYW5kIHByb2Nlc3NlZCBhc3luY2hyb25vdXNseSBiZWZvcmUgaXQgaXMgY29tbWl0dGVkIOKAlCBhIGZvcm0gb2Zcbi8vIGRvdWJsZSBidWZmZXJpbmcuIElmIGEgd29yay1pbi1wcm9ncmVzcyByZW5kZXIgaXMgZGlzY2FyZGVkIGJlZm9yZSBmaW5pc2hpbmcsXG4vLyB3ZSBjcmVhdGUgYSBuZXcgd29yay1pbi1wcm9ncmVzcyBieSBjbG9uaW5nIHRoZSBjdXJyZW50IHF1ZXVlLlxuLy9cbi8vIEJvdGggcXVldWVzIHNoYXJlIGEgcGVyc2lzdGVudCwgc2luZ2x5LWxpbmtlZCBsaXN0IHN0cnVjdHVyZS4gVG8gc2NoZWR1bGUgYW5cbi8vIHVwZGF0ZSwgd2UgYXBwZW5kIGl0IHRvIHRoZSBlbmQgb2YgYm90aCBxdWV1ZXMuIEVhY2ggcXVldWUgbWFpbnRhaW5zIGFcbi8vIHBvaW50ZXIgdG8gZmlyc3QgdXBkYXRlIGluIHRoZSBwZXJzaXN0ZW50IGxpc3QgdGhhdCBoYXNuJ3QgYmVlbiBwcm9jZXNzZWQuXG4vLyBUaGUgd29yay1pbi1wcm9ncmVzcyBwb2ludGVyIGFsd2F5cyBoYXMgYSBwb3NpdGlvbiBlcXVhbCB0byBvciBncmVhdGVyIHRoYW5cbi8vIHRoZSBjdXJyZW50IHF1ZXVlLCBzaW5jZSB3ZSBhbHdheXMgd29yayBvbiB0aGF0IG9uZS4gVGhlIGN1cnJlbnQgcXVldWUnc1xuLy8gcG9pbnRlciBpcyBvbmx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBjb21taXQgcGhhc2UsIHdoZW4gd2Ugc3dhcCBpbiB0aGVcbi8vIHdvcmstaW4tcHJvZ3Jlc3MuXG4vL1xuLy8gRm9yIGV4YW1wbGU6XG4vL1xuLy8gICBDdXJyZW50IHBvaW50ZXI6ICAgICAgICAgICBBIC0gQiAtIEMgLSBEIC0gRSAtIEZcbi8vICAgV29yay1pbi1wcm9ncmVzcyBwb2ludGVyOiAgICAgICAgICAgICAgRCAtIEUgLSBGXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5cbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHdvcmstaW4tcHJvZ3Jlc3MgcXVldWUgaGFzXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZCBtb3JlIHVwZGF0ZXMgdGhhbiBjdXJyZW50LlxuLy9cbi8vIFRoZSByZWFzb24gd2UgYXBwZW5kIHRvIGJvdGggcXVldWVzIGlzIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIG1pZ2h0IGRyb3Bcbi8vIHVwZGF0ZXMgd2l0aG91dCBldmVyIHByb2Nlc3NpbmcgdGhlbS4gRm9yIGV4YW1wbGUsIGlmIHdlIG9ubHkgYWRkIHVwZGF0ZXMgdG9cbi8vIHRoZSB3b3JrLWluLXByb2dyZXNzIHF1ZXVlLCBzb21lIHVwZGF0ZXMgY291bGQgYmUgbG9zdCB3aGVuZXZlciBhIHdvcmstaW5cbi8vIC1wcm9ncmVzcyByZW5kZXIgcmVzdGFydHMgYnkgY2xvbmluZyBmcm9tIGN1cnJlbnQuIFNpbWlsYXJseSwgaWYgd2Ugb25seSBhZGRcbi8vIHVwZGF0ZXMgdG8gdGhlIGN1cnJlbnQgcXVldWUsIHRoZSB1cGRhdGVzIHdpbGwgYmUgbG9zdCB3aGVuZXZlciBhbiBhbHJlYWR5XG4vLyBpbi1wcm9ncmVzcyBxdWV1ZSBjb21taXRzIGFuZCBzd2FwcyB3aXRoIHRoZSBjdXJyZW50IHF1ZXVlLiBIb3dldmVyLCBieVxuLy8gYWRkaW5nIHRvIGJvdGggcXVldWVzLCB3ZSBndWFyYW50ZWUgdGhhdCB0aGUgdXBkYXRlIHdpbGwgYmUgcGFydCBvZiB0aGUgbmV4dFxuLy8gd29yay1pbi1wcm9ncmVzcy4gKEFuZCBiZWNhdXNlIHRoZSB3b3JrLWluLXByb2dyZXNzIHF1ZXVlIGJlY29tZXMgdGhlXG4vLyBjdXJyZW50IHF1ZXVlIG9uY2UgaXQgY29tbWl0cywgdGhlcmUncyBubyBkYW5nZXIgb2YgYXBwbHlpbmcgdGhlIHNhbWVcbi8vIHVwZGF0ZSB0d2ljZS4pXG4vL1xuLy8gUHJpb3JpdGl6YXRpb25cbi8vIC0tLS0tLS0tLS0tLS0tXG4vL1xuLy8gVXBkYXRlcyBhcmUgbm90IHNvcnRlZCBieSBwcmlvcml0eSwgYnV0IGJ5IGluc2VydGlvbjsgbmV3IHVwZGF0ZXMgYXJlIGFsd2F5c1xuLy8gYXBwZW5kZWQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC5cbi8vXG4vLyBUaGUgcHJpb3JpdHkgaXMgc3RpbGwgaW1wb3J0YW50LCB0aG91Z2guIFdoZW4gcHJvY2Vzc2luZyB0aGUgdXBkYXRlIHF1ZXVlXG4vLyBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZSwgb25seSB0aGUgdXBkYXRlcyB3aXRoIHN1ZmZpY2llbnQgcHJpb3JpdHkgYXJlXG4vLyBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0LiBJZiB3ZSBza2lwIGFuIHVwZGF0ZSBiZWNhdXNlIGl0IGhhcyBpbnN1ZmZpY2llbnRcbi8vIHByaW9yaXR5LCBpdCByZW1haW5zIGluIHRoZSBxdWV1ZSB0byBiZSBwcm9jZXNzZWQgbGF0ZXIsIGR1cmluZyBhIGxvd2VyXG4vLyBwcmlvcml0eSByZW5kZXIuIENydWNpYWxseSwgYWxsIHVwZGF0ZXMgc3Vic2VxdWVudCB0byBhIHNraXBwZWQgdXBkYXRlIGFsc29cbi8vIHJlbWFpbiBpbiB0aGUgcXVldWUgKnJlZ2FyZGxlc3Mgb2YgdGhlaXIgcHJpb3JpdHkqLiBUaGF0IG1lYW5zIGhpZ2ggcHJpb3JpdHlcbi8vIHVwZGF0ZXMgYXJlIHNvbWV0aW1lcyBwcm9jZXNzZWQgdHdpY2UsIGF0IHR3byBzZXBhcmF0ZSBwcmlvcml0aWVzLiBXZSBhbHNvXG4vLyBrZWVwIHRyYWNrIG9mIGEgYmFzZSBzdGF0ZSwgdGhhdCByZXByZXNlbnRzIHRoZSBzdGF0ZSBiZWZvcmUgdGhlIGZpcnN0XG4vLyB1cGRhdGUgaW4gdGhlIHF1ZXVlIGlzIGFwcGxpZWQuXG4vL1xuLy8gRm9yIGV4YW1wbGU6XG4vL1xuLy8gICBHaXZlbiBhIGJhc2Ugc3RhdGUgb2YgJycsIGFuZCB0aGUgZm9sbG93aW5nIHF1ZXVlIG9mIHVwZGF0ZXNcbi8vXG4vLyAgICAgQTEgLSBCMiAtIEMxIC0gRDJcbi8vXG4vLyAgIHdoZXJlIHRoZSBudW1iZXIgaW5kaWNhdGVzIHRoZSBwcmlvcml0eSwgYW5kIHRoZSB1cGRhdGUgaXMgYXBwbGllZCB0byB0aGVcbi8vICAgcHJldmlvdXMgc3RhdGUgYnkgYXBwZW5kaW5nIGEgbGV0dGVyLCBSZWFjdCB3aWxsIHByb2Nlc3MgdGhlc2UgdXBkYXRlcyBhc1xuLy8gICB0d28gc2VwYXJhdGUgcmVuZGVycywgb25lIHBlciBkaXN0aW5jdCBwcmlvcml0eSBsZXZlbDpcbi8vXG4vLyAgIEZpcnN0IHJlbmRlciwgYXQgcHJpb3JpdHkgMTpcbi8vICAgICBCYXNlIHN0YXRlOiAnJ1xuLy8gICAgIFVwZGF0ZXM6IFtBMSwgQzFdXG4vLyAgICAgUmVzdWx0IHN0YXRlOiAnQUMnXG4vL1xuLy8gICBTZWNvbmQgcmVuZGVyLCBhdCBwcmlvcml0eSAyOlxuLy8gICAgIEJhc2Ugc3RhdGU6ICdBJyAgICAgICAgICAgIDwtICBUaGUgYmFzZSBzdGF0ZSBkb2VzIG5vdCBpbmNsdWRlIEMxLFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWNhdXNlIEIyIHdhcyBza2lwcGVkLlxuLy8gICAgIFVwZGF0ZXM6IFtCMiwgQzEsIEQyXSAgICAgIDwtICBDMSB3YXMgcmViYXNlZCBvbiB0b3Agb2YgQjJcbi8vICAgICBSZXN1bHQgc3RhdGU6ICdBQkNEJ1xuLy9cbi8vIEJlY2F1c2Ugd2UgcHJvY2VzcyB1cGRhdGVzIGluIGluc2VydGlvbiBvcmRlciwgYW5kIHJlYmFzZSBoaWdoIHByaW9yaXR5XG4vLyB1cGRhdGVzIHdoZW4gcHJlY2VkaW5nIHVwZGF0ZXMgYXJlIHNraXBwZWQsIHRoZSBmaW5hbCByZXN1bHQgaXMgZGV0ZXJtaW5pc3RpY1xuLy8gcmVnYXJkbGVzcyBvZiBwcmlvcml0eS4gSW50ZXJtZWRpYXRlIHN0YXRlIG1heSB2YXJ5IGFjY29yZGluZyB0byBzeXN0ZW1cbi8vIHJlc291cmNlcywgYnV0IHRoZSBmaW5hbCBzdGF0ZSBpcyBhbHdheXMgdGhlIHNhbWUuXG5cbnZhciBVcGRhdGVTdGF0ZSA9IDA7XG52YXIgUmVwbGFjZVN0YXRlID0gMTtcbnZhciBGb3JjZVVwZGF0ZSA9IDI7XG52YXIgQ2FwdHVyZVVwZGF0ZSA9IDM7XG5cbi8vIEdsb2JhbCBzdGF0ZSB0aGF0IGlzIHJlc2V0IGF0IHRoZSBiZWdpbm5pbmcgb2YgY2FsbGluZyBgcHJvY2Vzc1VwZGF0ZVF1ZXVlYC5cbi8vIEl0IHNob3VsZCBvbmx5IGJlIHJlYWQgcmlnaHQgYWZ0ZXIgY2FsbGluZyBgcHJvY2Vzc1VwZGF0ZVF1ZXVlYCwgdmlhXG4vLyBgY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZ2AuXG52YXIgaGFzRm9yY2VVcGRhdGUgPSBmYWxzZTtcblxudmFyIGRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGUgPSB2b2lkIDA7XG52YXIgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID0gdm9pZCAwO1xudmFyIHJlc2V0Q3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID0gdm9pZCAwO1xue1xuICBkaWRXYXJuVXBkYXRlSW5zaWRlVXBkYXRlID0gZmFsc2U7XG4gIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9IG51bGw7XG4gIHJlc2V0Q3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID0gZnVuY3Rpb24gKCkge1xuICAgIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9IG51bGw7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVVwZGF0ZVF1ZXVlKGJhc2VTdGF0ZSkge1xuICB2YXIgcXVldWUgPSB7XG4gICAgYmFzZVN0YXRlOiBiYXNlU3RhdGUsXG4gICAgZmlyc3RVcGRhdGU6IG51bGwsXG4gICAgbGFzdFVwZGF0ZTogbnVsbCxcbiAgICBmaXJzdENhcHR1cmVkVXBkYXRlOiBudWxsLFxuICAgIGxhc3RDYXB0dXJlZFVwZGF0ZTogbnVsbCxcbiAgICBmaXJzdEVmZmVjdDogbnVsbCxcbiAgICBsYXN0RWZmZWN0OiBudWxsLFxuICAgIGZpcnN0Q2FwdHVyZWRFZmZlY3Q6IG51bGwsXG4gICAgbGFzdENhcHR1cmVkRWZmZWN0OiBudWxsXG4gIH07XG4gIHJldHVybiBxdWV1ZTtcbn1cblxuZnVuY3Rpb24gY2xvbmVVcGRhdGVRdWV1ZShjdXJyZW50UXVldWUpIHtcbiAgdmFyIHF1ZXVlID0ge1xuICAgIGJhc2VTdGF0ZTogY3VycmVudFF1ZXVlLmJhc2VTdGF0ZSxcbiAgICBmaXJzdFVwZGF0ZTogY3VycmVudFF1ZXVlLmZpcnN0VXBkYXRlLFxuICAgIGxhc3RVcGRhdGU6IGN1cnJlbnRRdWV1ZS5sYXN0VXBkYXRlLFxuXG4gICAgLy8gVE9ETzogV2l0aCByZXN1bWluZywgaWYgd2UgYmFpbCBvdXQgYW5kIHJlc3VzZSB0aGUgY2hpbGQgdHJlZSwgd2Ugc2hvdWxkXG4gICAgLy8ga2VlcCB0aGVzZSBlZmZlY3RzLlxuICAgIGZpcnN0Q2FwdHVyZWRVcGRhdGU6IG51bGwsXG4gICAgbGFzdENhcHR1cmVkVXBkYXRlOiBudWxsLFxuXG4gICAgZmlyc3RFZmZlY3Q6IG51bGwsXG4gICAgbGFzdEVmZmVjdDogbnVsbCxcblxuICAgIGZpcnN0Q2FwdHVyZWRFZmZlY3Q6IG51bGwsXG4gICAgbGFzdENhcHR1cmVkRWZmZWN0OiBudWxsXG4gIH07XG4gIHJldHVybiBxdWV1ZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlVXBkYXRlKGV4cGlyYXRpb25UaW1lKSB7XG4gIHJldHVybiB7XG4gICAgZXhwaXJhdGlvblRpbWU6IGV4cGlyYXRpb25UaW1lLFxuXG4gICAgdGFnOiBVcGRhdGVTdGF0ZSxcbiAgICBwYXlsb2FkOiBudWxsLFxuICAgIGNhbGxiYWNrOiBudWxsLFxuXG4gICAgbmV4dDogbnVsbCxcbiAgICBuZXh0RWZmZWN0OiBudWxsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGFwcGVuZFVwZGF0ZVRvUXVldWUocXVldWUsIHVwZGF0ZSkge1xuICAvLyBBcHBlbmQgdGhlIHVwZGF0ZSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LlxuICBpZiAocXVldWUubGFzdFVwZGF0ZSA9PT0gbnVsbCkge1xuICAgIC8vIFF1ZXVlIGlzIGVtcHR5XG4gICAgcXVldWUuZmlyc3RVcGRhdGUgPSBxdWV1ZS5sYXN0VXBkYXRlID0gdXBkYXRlO1xuICB9IGVsc2Uge1xuICAgIHF1ZXVlLmxhc3RVcGRhdGUubmV4dCA9IHVwZGF0ZTtcbiAgICBxdWV1ZS5sYXN0VXBkYXRlID0gdXBkYXRlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSkge1xuICAvLyBVcGRhdGUgcXVldWVzIGFyZSBjcmVhdGVkIGxhemlseS5cbiAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcbiAgdmFyIHF1ZXVlMSA9IHZvaWQgMDtcbiAgdmFyIHF1ZXVlMiA9IHZvaWQgMDtcbiAgaWYgKGFsdGVybmF0ZSA9PT0gbnVsbCkge1xuICAgIC8vIFRoZXJlJ3Mgb25seSBvbmUgZmliZXIuXG4gICAgcXVldWUxID0gZmliZXIudXBkYXRlUXVldWU7XG4gICAgcXVldWUyID0gbnVsbDtcbiAgICBpZiAocXVldWUxID09PSBudWxsKSB7XG4gICAgICBxdWV1ZTEgPSBmaWJlci51cGRhdGVRdWV1ZSA9IGNyZWF0ZVVwZGF0ZVF1ZXVlKGZpYmVyLm1lbW9pemVkU3RhdGUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBUaGVyZSBhcmUgdHdvIG93bmVycy5cbiAgICBxdWV1ZTEgPSBmaWJlci51cGRhdGVRdWV1ZTtcbiAgICBxdWV1ZTIgPSBhbHRlcm5hdGUudXBkYXRlUXVldWU7XG4gICAgaWYgKHF1ZXVlMSA9PT0gbnVsbCkge1xuICAgICAgaWYgKHF1ZXVlMiA9PT0gbnVsbCkge1xuICAgICAgICAvLyBOZWl0aGVyIGZpYmVyIGhhcyBhbiB1cGRhdGUgcXVldWUuIENyZWF0ZSBuZXcgb25lcy5cbiAgICAgICAgcXVldWUxID0gZmliZXIudXBkYXRlUXVldWUgPSBjcmVhdGVVcGRhdGVRdWV1ZShmaWJlci5tZW1vaXplZFN0YXRlKTtcbiAgICAgICAgcXVldWUyID0gYWx0ZXJuYXRlLnVwZGF0ZVF1ZXVlID0gY3JlYXRlVXBkYXRlUXVldWUoYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gT25seSBvbmUgZmliZXIgaGFzIGFuIHVwZGF0ZSBxdWV1ZS4gQ2xvbmUgdG8gY3JlYXRlIGEgbmV3IG9uZS5cbiAgICAgICAgcXVldWUxID0gZmliZXIudXBkYXRlUXVldWUgPSBjbG9uZVVwZGF0ZVF1ZXVlKHF1ZXVlMik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChxdWV1ZTIgPT09IG51bGwpIHtcbiAgICAgICAgLy8gT25seSBvbmUgZmliZXIgaGFzIGFuIHVwZGF0ZSBxdWV1ZS4gQ2xvbmUgdG8gY3JlYXRlIGEgbmV3IG9uZS5cbiAgICAgICAgcXVldWUyID0gYWx0ZXJuYXRlLnVwZGF0ZVF1ZXVlID0gY2xvbmVVcGRhdGVRdWV1ZShxdWV1ZTEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQm90aCBvd25lcnMgaGF2ZSBhbiB1cGRhdGUgcXVldWUuXG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChxdWV1ZTIgPT09IG51bGwgfHwgcXVldWUxID09PSBxdWV1ZTIpIHtcbiAgICAvLyBUaGVyZSdzIG9ubHkgYSBzaW5nbGUgcXVldWUuXG4gICAgYXBwZW5kVXBkYXRlVG9RdWV1ZShxdWV1ZTEsIHVwZGF0ZSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhlcmUgYXJlIHR3byBxdWV1ZXMuIFdlIG5lZWQgdG8gYXBwZW5kIHRoZSB1cGRhdGUgdG8gYm90aCBxdWV1ZXMsXG4gICAgLy8gd2hpbGUgYWNjb3VudGluZyBmb3IgdGhlIHBlcnNpc3RlbnQgc3RydWN0dXJlIG9mIHRoZSBsaXN0IOKAlCB3ZSBkb24ndFxuICAgIC8vIHdhbnQgdGhlIHNhbWUgdXBkYXRlIHRvIGJlIGFkZGVkIG11bHRpcGxlIHRpbWVzLlxuICAgIGlmIChxdWV1ZTEubGFzdFVwZGF0ZSA9PT0gbnVsbCB8fCBxdWV1ZTIubGFzdFVwZGF0ZSA9PT0gbnVsbCkge1xuICAgICAgLy8gT25lIG9mIHRoZSBxdWV1ZXMgaXMgbm90IGVtcHR5LiBXZSBtdXN0IGFkZCB0aGUgdXBkYXRlIHRvIGJvdGggcXVldWVzLlxuICAgICAgYXBwZW5kVXBkYXRlVG9RdWV1ZShxdWV1ZTEsIHVwZGF0ZSk7XG4gICAgICBhcHBlbmRVcGRhdGVUb1F1ZXVlKHF1ZXVlMiwgdXBkYXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQm90aCBxdWV1ZXMgYXJlIG5vbi1lbXB0eS4gVGhlIGxhc3QgdXBkYXRlIGlzIHRoZSBzYW1lIGluIGJvdGggbGlzdHMsXG4gICAgICAvLyBiZWNhdXNlIG9mIHN0cnVjdHVyYWwgc2hhcmluZy4gU28sIG9ubHkgYXBwZW5kIHRvIG9uZSBvZiB0aGUgbGlzdHMuXG4gICAgICBhcHBlbmRVcGRhdGVUb1F1ZXVlKHF1ZXVlMSwgdXBkYXRlKTtcbiAgICAgIC8vIEJ1dCB3ZSBzdGlsbCBuZWVkIHRvIHVwZGF0ZSB0aGUgYGxhc3RVcGRhdGVgIHBvaW50ZXIgb2YgcXVldWUyLlxuICAgICAgcXVldWUyLmxhc3RVcGRhdGUgPSB1cGRhdGU7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIGlmIChmaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50ICYmIChjdXJyZW50bHlQcm9jZXNzaW5nUXVldWUgPT09IHF1ZXVlMSB8fCBxdWV1ZTIgIT09IG51bGwgJiYgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID09PSBxdWV1ZTIpICYmICFkaWRXYXJuVXBkYXRlSW5zaWRlVXBkYXRlKSB7XG4gICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdBbiB1cGRhdGUgKHNldFN0YXRlLCByZXBsYWNlU3RhdGUsIG9yIGZvcmNlVXBkYXRlKSB3YXMgc2NoZWR1bGVkICcgKyAnZnJvbSBpbnNpZGUgYW4gdXBkYXRlIGZ1bmN0aW9uLiBVcGRhdGUgZnVuY3Rpb25zIHNob3VsZCBiZSBwdXJlLCAnICsgJ3dpdGggemVybyBzaWRlLWVmZmVjdHMuIENvbnNpZGVyIHVzaW5nIGNvbXBvbmVudERpZFVwZGF0ZSBvciBhICcgKyAnY2FsbGJhY2suJyk7XG4gICAgICBkaWRXYXJuVXBkYXRlSW5zaWRlVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZW5xdWV1ZUNhcHR1cmVkVXBkYXRlKHdvcmtJblByb2dyZXNzLCB1cGRhdGUpIHtcbiAgLy8gQ2FwdHVyZWQgdXBkYXRlcyBnbyBpbnRvIGEgc2VwYXJhdGUgbGlzdCwgYW5kIG9ubHkgb24gdGhlIHdvcmstaW4tXG4gIC8vIHByb2dyZXNzIHF1ZXVlLlxuICB2YXIgd29ya0luUHJvZ3Jlc3NRdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuICBpZiAod29ya0luUHJvZ3Jlc3NRdWV1ZSA9PT0gbnVsbCkge1xuICAgIHdvcmtJblByb2dyZXNzUXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGNyZWF0ZVVwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUpO1xuICB9IGVsc2Uge1xuICAgIC8vIFRPRE86IEkgcHV0IHRoaXMgaGVyZSByYXRoZXIgdGhhbiBjcmVhdGVXb3JrSW5Qcm9ncmVzcyBzbyB0aGF0IHdlIGRvbid0XG4gICAgLy8gY2xvbmUgdGhlIHF1ZXVlIHVubmVjZXNzYXJpbHkuIFRoZXJlJ3MgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvXG4gICAgLy8gc3RydWN0dXJlIHRoaXMuXG4gICAgd29ya0luUHJvZ3Jlc3NRdWV1ZSA9IGVuc3VyZVdvcmtJblByb2dyZXNzUXVldWVJc0FDbG9uZSh3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3NRdWV1ZSk7XG4gIH1cblxuICAvLyBBcHBlbmQgdGhlIHVwZGF0ZSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LlxuICBpZiAod29ya0luUHJvZ3Jlc3NRdWV1ZS5sYXN0Q2FwdHVyZWRVcGRhdGUgPT09IG51bGwpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCByZW5kZXIgcGhhc2UgdXBkYXRlXG4gICAgd29ya0luUHJvZ3Jlc3NRdWV1ZS5maXJzdENhcHR1cmVkVXBkYXRlID0gd29ya0luUHJvZ3Jlc3NRdWV1ZS5sYXN0Q2FwdHVyZWRVcGRhdGUgPSB1cGRhdGU7XG4gIH0gZWxzZSB7XG4gICAgd29ya0luUHJvZ3Jlc3NRdWV1ZS5sYXN0Q2FwdHVyZWRVcGRhdGUubmV4dCA9IHVwZGF0ZTtcbiAgICB3b3JrSW5Qcm9ncmVzc1F1ZXVlLmxhc3RDYXB0dXJlZFVwZGF0ZSA9IHVwZGF0ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbnN1cmVXb3JrSW5Qcm9ncmVzc1F1ZXVlSXNBQ2xvbmUod29ya0luUHJvZ3Jlc3MsIHF1ZXVlKSB7XG4gIHZhciBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlO1xuICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIC8vIElmIHRoZSB3b3JrLWluLXByb2dyZXNzIHF1ZXVlIGlzIGVxdWFsIHRvIHRoZSBjdXJyZW50IHF1ZXVlLFxuICAgIC8vIHdlIG5lZWQgdG8gY2xvbmUgaXQgZmlyc3QuXG4gICAgaWYgKHF1ZXVlID09PSBjdXJyZW50LnVwZGF0ZVF1ZXVlKSB7XG4gICAgICBxdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY2xvbmVVcGRhdGVRdWV1ZShxdWV1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBxdWV1ZTtcbn1cblxuZnVuY3Rpb24gZ2V0U3RhdGVGcm9tVXBkYXRlKHdvcmtJblByb2dyZXNzLCBxdWV1ZSwgdXBkYXRlLCBwcmV2U3RhdGUsIG5leHRQcm9wcywgaW5zdGFuY2UpIHtcbiAgc3dpdGNoICh1cGRhdGUudGFnKSB7XG4gICAgY2FzZSBSZXBsYWNlU3RhdGU6XG4gICAgICB7XG4gICAgICAgIHZhciBfcGF5bG9hZCA9IHVwZGF0ZS5wYXlsb2FkO1xuICAgICAgICBpZiAodHlwZW9mIF9wYXlsb2FkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgLy8gVXBkYXRlciBmdW5jdGlvblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVudGVyRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKTtcbiAgICAgICAgICAgIGlmIChkZWJ1Z1JlbmRlclBoYXNlU2lkZUVmZmVjdHMgfHwgZGVidWdSZW5kZXJQaGFzZVNpZGVFZmZlY3RzRm9yU3RyaWN0TW9kZSAmJiB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICAgICAgICBfcGF5bG9hZC5jYWxsKGluc3RhbmNlLCBwcmV2U3RhdGUsIG5leHRQcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBuZXh0U3RhdGUgPSBfcGF5bG9hZC5jYWxsKGluc3RhbmNlLCBwcmV2U3RhdGUsIG5leHRQcm9wcyk7XG4gICAgICAgICAge1xuICAgICAgICAgICAgZXhpdERpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXh0U3RhdGU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU3RhdGUgb2JqZWN0XG4gICAgICAgIHJldHVybiBfcGF5bG9hZDtcbiAgICAgIH1cbiAgICBjYXNlIENhcHR1cmVVcGRhdGU6XG4gICAgICB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyA9IHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyAmIH5TaG91bGRDYXB0dXJlIHwgRGlkQ2FwdHVyZTtcbiAgICAgIH1cbiAgICAvLyBJbnRlbnRpb25hbCBmYWxsdGhyb3VnaFxuICAgIGNhc2UgVXBkYXRlU3RhdGU6XG4gICAgICB7XG4gICAgICAgIHZhciBfcGF5bG9hZDIgPSB1cGRhdGUucGF5bG9hZDtcbiAgICAgICAgdmFyIHBhcnRpYWxTdGF0ZSA9IHZvaWQgMDtcbiAgICAgICAgaWYgKHR5cGVvZiBfcGF5bG9hZDIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAvLyBVcGRhdGVyIGZ1bmN0aW9uXG4gICAgICAgICAge1xuICAgICAgICAgICAgZW50ZXJEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVigpO1xuICAgICAgICAgICAgaWYgKGRlYnVnUmVuZGVyUGhhc2VTaWRlRWZmZWN0cyB8fCBkZWJ1Z1JlbmRlclBoYXNlU2lkZUVmZmVjdHNGb3JTdHJpY3RNb2RlICYmIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgICAgICAgIF9wYXlsb2FkMi5jYWxsKGluc3RhbmNlLCBwcmV2U3RhdGUsIG5leHRQcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhcnRpYWxTdGF0ZSA9IF9wYXlsb2FkMi5jYWxsKGluc3RhbmNlLCBwcmV2U3RhdGUsIG5leHRQcm9wcyk7XG4gICAgICAgICAge1xuICAgICAgICAgICAgZXhpdERpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFBhcnRpYWwgc3RhdGUgb2JqZWN0XG4gICAgICAgICAgcGFydGlhbFN0YXRlID0gX3BheWxvYWQyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJ0aWFsU3RhdGUgPT09IG51bGwgfHwgcGFydGlhbFN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBOdWxsIGFuZCB1bmRlZmluZWQgYXJlIHRyZWF0ZWQgYXMgbm8tb3BzLlxuICAgICAgICAgIHJldHVybiBwcmV2U3RhdGU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWVyZ2UgdGhlIHBhcnRpYWwgc3RhdGUgYW5kIHRoZSBwcmV2aW91cyBzdGF0ZS5cbiAgICAgICAgcmV0dXJuIF9hc3NpZ24oe30sIHByZXZTdGF0ZSwgcGFydGlhbFN0YXRlKTtcbiAgICAgIH1cbiAgICBjYXNlIEZvcmNlVXBkYXRlOlxuICAgICAge1xuICAgICAgICBoYXNGb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgICAgIHJldHVybiBwcmV2U3RhdGU7XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIHByZXZTdGF0ZTtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBxdWV1ZSwgcHJvcHMsIGluc3RhbmNlLCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICBoYXNGb3JjZVVwZGF0ZSA9IGZhbHNlO1xuXG4gIHF1ZXVlID0gZW5zdXJlV29ya0luUHJvZ3Jlc3NRdWV1ZUlzQUNsb25lKHdvcmtJblByb2dyZXNzLCBxdWV1ZSk7XG5cbiAge1xuICAgIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9IHF1ZXVlO1xuICB9XG5cbiAgLy8gVGhlc2UgdmFsdWVzIG1heSBjaGFuZ2UgYXMgd2UgcHJvY2VzcyB0aGUgcXVldWUuXG4gIHZhciBuZXdCYXNlU3RhdGUgPSBxdWV1ZS5iYXNlU3RhdGU7XG4gIHZhciBuZXdGaXJzdFVwZGF0ZSA9IG51bGw7XG4gIHZhciBuZXdFeHBpcmF0aW9uVGltZSA9IE5vV29yaztcblxuICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIGxpc3Qgb2YgdXBkYXRlcyB0byBjb21wdXRlIHRoZSByZXN1bHQuXG4gIHZhciB1cGRhdGUgPSBxdWV1ZS5maXJzdFVwZGF0ZTtcbiAgdmFyIHJlc3VsdFN0YXRlID0gbmV3QmFzZVN0YXRlO1xuICB3aGlsZSAodXBkYXRlICE9PSBudWxsKSB7XG4gICAgdmFyIHVwZGF0ZUV4cGlyYXRpb25UaW1lID0gdXBkYXRlLmV4cGlyYXRpb25UaW1lO1xuICAgIGlmICh1cGRhdGVFeHBpcmF0aW9uVGltZSA8IHJlbmRlckV4cGlyYXRpb25UaW1lKSB7XG4gICAgICAvLyBUaGlzIHVwZGF0ZSBkb2VzIG5vdCBoYXZlIHN1ZmZpY2llbnQgcHJpb3JpdHkuIFNraXAgaXQuXG4gICAgICBpZiAobmV3Rmlyc3RVcGRhdGUgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3Qgc2tpcHBlZCB1cGRhdGUuIEl0IHdpbGwgYmUgdGhlIGZpcnN0IHVwZGF0ZSBpblxuICAgICAgICAvLyB0aGUgbmV3IGxpc3QuXG4gICAgICAgIG5ld0ZpcnN0VXBkYXRlID0gdXBkYXRlO1xuICAgICAgICAvLyBTaW5jZSB0aGlzIGlzIHRoZSBmaXJzdCB1cGRhdGUgdGhhdCB3YXMgc2tpcHBlZCwgdGhlIGN1cnJlbnQgcmVzdWx0XG4gICAgICAgIC8vIGlzIHRoZSBuZXcgYmFzZSBzdGF0ZS5cbiAgICAgICAgbmV3QmFzZVN0YXRlID0gcmVzdWx0U3RhdGU7XG4gICAgICB9XG4gICAgICAvLyBTaW5jZSB0aGlzIHVwZGF0ZSB3aWxsIHJlbWFpbiBpbiB0aGUgbGlzdCwgdXBkYXRlIHRoZSByZW1haW5pbmdcbiAgICAgIC8vIGV4cGlyYXRpb24gdGltZS5cbiAgICAgIGlmIChuZXdFeHBpcmF0aW9uVGltZSA8IHVwZGF0ZUV4cGlyYXRpb25UaW1lKSB7XG4gICAgICAgIG5ld0V4cGlyYXRpb25UaW1lID0gdXBkYXRlRXhwaXJhdGlvblRpbWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgdXBkYXRlIGRvZXMgaGF2ZSBzdWZmaWNpZW50IHByaW9yaXR5LiBQcm9jZXNzIGl0IGFuZCBjb21wdXRlXG4gICAgICAvLyBhIG5ldyByZXN1bHQuXG4gICAgICByZXN1bHRTdGF0ZSA9IGdldFN0YXRlRnJvbVVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgcXVldWUsIHVwZGF0ZSwgcmVzdWx0U3RhdGUsIHByb3BzLCBpbnN0YW5jZSk7XG4gICAgICB2YXIgX2NhbGxiYWNrID0gdXBkYXRlLmNhbGxiYWNrO1xuICAgICAgaWYgKF9jYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgfD0gQ2FsbGJhY2s7XG4gICAgICAgIC8vIFNldCB0aGlzIHRvIG51bGwsIGluIGNhc2UgaXQgd2FzIG11dGF0ZWQgZHVyaW5nIGFuIGFib3J0ZWQgcmVuZGVyLlxuICAgICAgICB1cGRhdGUubmV4dEVmZmVjdCA9IG51bGw7XG4gICAgICAgIGlmIChxdWV1ZS5sYXN0RWZmZWN0ID09PSBudWxsKSB7XG4gICAgICAgICAgcXVldWUuZmlyc3RFZmZlY3QgPSBxdWV1ZS5sYXN0RWZmZWN0ID0gdXBkYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHF1ZXVlLmxhc3RFZmZlY3QubmV4dEVmZmVjdCA9IHVwZGF0ZTtcbiAgICAgICAgICBxdWV1ZS5sYXN0RWZmZWN0ID0gdXBkYXRlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IHVwZGF0ZS5cbiAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcbiAgfVxuXG4gIC8vIFNlcGFyYXRlbHksIGl0ZXJhdGUgdGhvdWdoIHRoZSBsaXN0IG9mIGNhcHR1cmVkIHVwZGF0ZXMuXG4gIHZhciBuZXdGaXJzdENhcHR1cmVkVXBkYXRlID0gbnVsbDtcbiAgdXBkYXRlID0gcXVldWUuZmlyc3RDYXB0dXJlZFVwZGF0ZTtcbiAgd2hpbGUgKHVwZGF0ZSAhPT0gbnVsbCkge1xuICAgIHZhciBfdXBkYXRlRXhwaXJhdGlvblRpbWUgPSB1cGRhdGUuZXhwaXJhdGlvblRpbWU7XG4gICAgaWYgKF91cGRhdGVFeHBpcmF0aW9uVGltZSA8IHJlbmRlckV4cGlyYXRpb25UaW1lKSB7XG4gICAgICAvLyBUaGlzIHVwZGF0ZSBkb2VzIG5vdCBoYXZlIHN1ZmZpY2llbnQgcHJpb3JpdHkuIFNraXAgaXQuXG4gICAgICBpZiAobmV3Rmlyc3RDYXB0dXJlZFVwZGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBza2lwcGVkIGNhcHR1cmVkIHVwZGF0ZS4gSXQgd2lsbCBiZSB0aGUgZmlyc3RcbiAgICAgICAgLy8gdXBkYXRlIGluIHRoZSBuZXcgbGlzdC5cbiAgICAgICAgbmV3Rmlyc3RDYXB0dXJlZFVwZGF0ZSA9IHVwZGF0ZTtcbiAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgZmlyc3QgdXBkYXRlIHRoYXQgd2FzIHNraXBwZWQsIHRoZSBjdXJyZW50IHJlc3VsdCBpc1xuICAgICAgICAvLyB0aGUgbmV3IGJhc2Ugc3RhdGUuXG4gICAgICAgIGlmIChuZXdGaXJzdFVwZGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIG5ld0Jhc2VTdGF0ZSA9IHJlc3VsdFN0YXRlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBTaW5jZSB0aGlzIHVwZGF0ZSB3aWxsIHJlbWFpbiBpbiB0aGUgbGlzdCwgdXBkYXRlIHRoZSByZW1haW5pbmdcbiAgICAgIC8vIGV4cGlyYXRpb24gdGltZS5cbiAgICAgIGlmIChuZXdFeHBpcmF0aW9uVGltZSA8IF91cGRhdGVFeHBpcmF0aW9uVGltZSkge1xuICAgICAgICBuZXdFeHBpcmF0aW9uVGltZSA9IF91cGRhdGVFeHBpcmF0aW9uVGltZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyB1cGRhdGUgZG9lcyBoYXZlIHN1ZmZpY2llbnQgcHJpb3JpdHkuIFByb2Nlc3MgaXQgYW5kIGNvbXB1dGVcbiAgICAgIC8vIGEgbmV3IHJlc3VsdC5cbiAgICAgIHJlc3VsdFN0YXRlID0gZ2V0U3RhdGVGcm9tVXBkYXRlKHdvcmtJblByb2dyZXNzLCBxdWV1ZSwgdXBkYXRlLCByZXN1bHRTdGF0ZSwgcHJvcHMsIGluc3RhbmNlKTtcbiAgICAgIHZhciBfY2FsbGJhY2syID0gdXBkYXRlLmNhbGxiYWNrO1xuICAgICAgaWYgKF9jYWxsYmFjazIgIT09IG51bGwpIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnIHw9IENhbGxiYWNrO1xuICAgICAgICAvLyBTZXQgdGhpcyB0byBudWxsLCBpbiBjYXNlIGl0IHdhcyBtdXRhdGVkIGR1cmluZyBhbiBhYm9ydGVkIHJlbmRlci5cbiAgICAgICAgdXBkYXRlLm5leHRFZmZlY3QgPSBudWxsO1xuICAgICAgICBpZiAocXVldWUubGFzdENhcHR1cmVkRWZmZWN0ID09PSBudWxsKSB7XG4gICAgICAgICAgcXVldWUuZmlyc3RDYXB0dXJlZEVmZmVjdCA9IHF1ZXVlLmxhc3RDYXB0dXJlZEVmZmVjdCA9IHVwZGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBxdWV1ZS5sYXN0Q2FwdHVyZWRFZmZlY3QubmV4dEVmZmVjdCA9IHVwZGF0ZTtcbiAgICAgICAgICBxdWV1ZS5sYXN0Q2FwdHVyZWRFZmZlY3QgPSB1cGRhdGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlID0gdXBkYXRlLm5leHQ7XG4gIH1cblxuICBpZiAobmV3Rmlyc3RVcGRhdGUgPT09IG51bGwpIHtcbiAgICBxdWV1ZS5sYXN0VXBkYXRlID0gbnVsbDtcbiAgfVxuICBpZiAobmV3Rmlyc3RDYXB0dXJlZFVwZGF0ZSA9PT0gbnVsbCkge1xuICAgIHF1ZXVlLmxhc3RDYXB0dXJlZFVwZGF0ZSA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgd29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnIHw9IENhbGxiYWNrO1xuICB9XG4gIGlmIChuZXdGaXJzdFVwZGF0ZSA9PT0gbnVsbCAmJiBuZXdGaXJzdENhcHR1cmVkVXBkYXRlID09PSBudWxsKSB7XG4gICAgLy8gV2UgcHJvY2Vzc2VkIGV2ZXJ5IHVwZGF0ZSwgd2l0aG91dCBza2lwcGluZy4gVGhhdCBtZWFucyB0aGUgbmV3IGJhc2VcbiAgICAvLyBzdGF0ZSBpcyB0aGUgc2FtZSBhcyB0aGUgcmVzdWx0IHN0YXRlLlxuICAgIG5ld0Jhc2VTdGF0ZSA9IHJlc3VsdFN0YXRlO1xuICB9XG5cbiAgcXVldWUuYmFzZVN0YXRlID0gbmV3QmFzZVN0YXRlO1xuICBxdWV1ZS5maXJzdFVwZGF0ZSA9IG5ld0ZpcnN0VXBkYXRlO1xuICBxdWV1ZS5maXJzdENhcHR1cmVkVXBkYXRlID0gbmV3Rmlyc3RDYXB0dXJlZFVwZGF0ZTtcblxuICAvLyBTZXQgdGhlIHJlbWFpbmluZyBleHBpcmF0aW9uIHRpbWUgdG8gYmUgd2hhdGV2ZXIgaXMgcmVtYWluaW5nIGluIHRoZSBxdWV1ZS5cbiAgLy8gVGhpcyBzaG91bGQgYmUgZmluZSBiZWNhdXNlIHRoZSBvbmx5IHR3byBvdGhlciB0aGluZ3MgdGhhdCBjb250cmlidXRlIHRvXG4gIC8vIGV4cGlyYXRpb24gdGltZSBhcmUgcHJvcHMgYW5kIGNvbnRleHQuIFdlJ3JlIGFscmVhZHkgaW4gdGhlIG1pZGRsZSBvZiB0aGVcbiAgLy8gYmVnaW4gcGhhc2UgYnkgdGhlIHRpbWUgd2Ugc3RhcnQgcHJvY2Vzc2luZyB0aGUgcXVldWUsIHNvIHdlJ3ZlIGFscmVhZHlcbiAgLy8gZGVhbHQgd2l0aCB0aGUgcHJvcHMuIENvbnRleHQgaW4gY29tcG9uZW50cyB0aGF0IHNwZWNpZnlcbiAgLy8gc2hvdWxkQ29tcG9uZW50VXBkYXRlIGlzIHRyaWNreTsgYnV0IHdlJ2xsIGhhdmUgdG8gYWNjb3VudCBmb3JcbiAgLy8gdGhhdCByZWdhcmRsZXNzLlxuICB3b3JrSW5Qcm9ncmVzcy5leHBpcmF0aW9uVGltZSA9IG5ld0V4cGlyYXRpb25UaW1lO1xuICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gcmVzdWx0U3RhdGU7XG5cbiAge1xuICAgIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FsbENhbGxiYWNrKGNhbGxiYWNrLCBjb250ZXh0KSB7XG4gICEodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSA/IGludmFyaWFudChmYWxzZSwgJ0ludmFsaWQgYXJndW1lbnQgcGFzc2VkIGFzIGNhbGxiYWNrLiBFeHBlY3RlZCBhIGZ1bmN0aW9uLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcycsIGNhbGxiYWNrKSA6IHZvaWQgMDtcbiAgY2FsbGJhY2suY2FsbChjb250ZXh0KTtcbn1cblxuZnVuY3Rpb24gcmVzZXRIYXNGb3JjZVVwZGF0ZUJlZm9yZVByb2Nlc3NpbmcoKSB7XG4gIGhhc0ZvcmNlVXBkYXRlID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmcoKSB7XG4gIHJldHVybiBoYXNGb3JjZVVwZGF0ZTtcbn1cblxuZnVuY3Rpb24gY29tbWl0VXBkYXRlUXVldWUoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFF1ZXVlLCBpbnN0YW5jZSwgcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAgLy8gSWYgdGhlIGZpbmlzaGVkIHJlbmRlciBpbmNsdWRlZCBjYXB0dXJlZCB1cGRhdGVzLCBhbmQgdGhlcmUgYXJlIHN0aWxsXG4gIC8vIGxvd2VyIHByaW9yaXR5IHVwZGF0ZXMgbGVmdCBvdmVyLCB3ZSBuZWVkIHRvIGtlZXAgdGhlIGNhcHR1cmVkIHVwZGF0ZXNcbiAgLy8gaW4gdGhlIHF1ZXVlIHNvIHRoYXQgdGhleSBhcmUgcmViYXNlZCBhbmQgbm90IGRyb3BwZWQgb25jZSB3ZSBwcm9jZXNzIHRoZVxuICAvLyBxdWV1ZSBhZ2FpbiBhdCB0aGUgbG93ZXIgcHJpb3JpdHkuXG4gIGlmIChmaW5pc2hlZFF1ZXVlLmZpcnN0Q2FwdHVyZWRVcGRhdGUgIT09IG51bGwpIHtcbiAgICAvLyBKb2luIHRoZSBjYXB0dXJlZCB1cGRhdGUgbGlzdCB0byB0aGUgZW5kIG9mIHRoZSBub3JtYWwgbGlzdC5cbiAgICBpZiAoZmluaXNoZWRRdWV1ZS5sYXN0VXBkYXRlICE9PSBudWxsKSB7XG4gICAgICBmaW5pc2hlZFF1ZXVlLmxhc3RVcGRhdGUubmV4dCA9IGZpbmlzaGVkUXVldWUuZmlyc3RDYXB0dXJlZFVwZGF0ZTtcbiAgICAgIGZpbmlzaGVkUXVldWUubGFzdFVwZGF0ZSA9IGZpbmlzaGVkUXVldWUubGFzdENhcHR1cmVkVXBkYXRlO1xuICAgIH1cbiAgICAvLyBDbGVhciB0aGUgbGlzdCBvZiBjYXB0dXJlZCB1cGRhdGVzLlxuICAgIGZpbmlzaGVkUXVldWUuZmlyc3RDYXB0dXJlZFVwZGF0ZSA9IGZpbmlzaGVkUXVldWUubGFzdENhcHR1cmVkVXBkYXRlID0gbnVsbDtcbiAgfVxuXG4gIC8vIENvbW1pdCB0aGUgZWZmZWN0c1xuICBjb21taXRVcGRhdGVFZmZlY3RzKGZpbmlzaGVkUXVldWUuZmlyc3RFZmZlY3QsIGluc3RhbmNlKTtcbiAgZmluaXNoZWRRdWV1ZS5maXJzdEVmZmVjdCA9IGZpbmlzaGVkUXVldWUubGFzdEVmZmVjdCA9IG51bGw7XG5cbiAgY29tbWl0VXBkYXRlRWZmZWN0cyhmaW5pc2hlZFF1ZXVlLmZpcnN0Q2FwdHVyZWRFZmZlY3QsIGluc3RhbmNlKTtcbiAgZmluaXNoZWRRdWV1ZS5maXJzdENhcHR1cmVkRWZmZWN0ID0gZmluaXNoZWRRdWV1ZS5sYXN0Q2FwdHVyZWRFZmZlY3QgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBjb21taXRVcGRhdGVFZmZlY3RzKGVmZmVjdCwgaW5zdGFuY2UpIHtcbiAgd2hpbGUgKGVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHZhciBfY2FsbGJhY2szID0gZWZmZWN0LmNhbGxiYWNrO1xuICAgIGlmIChfY2FsbGJhY2szICE9PSBudWxsKSB7XG4gICAgICBlZmZlY3QuY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2FsbENhbGxiYWNrKF9jYWxsYmFjazMsIGluc3RhbmNlKTtcbiAgICB9XG4gICAgZWZmZWN0ID0gZWZmZWN0Lm5leHRFZmZlY3Q7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQ2FwdHVyZWRWYWx1ZSh2YWx1ZSwgc291cmNlKSB7XG4gIC8vIElmIHRoZSB2YWx1ZSBpcyBhbiBlcnJvciwgY2FsbCB0aGlzIGZ1bmN0aW9uIGltbWVkaWF0ZWx5IGFmdGVyIGl0IGlzIHRocm93blxuICAvLyBzbyB0aGUgc3RhY2sgaXMgYWNjdXJhdGUuXG4gIHJldHVybiB7XG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIHNvdXJjZTogc291cmNlLFxuICAgIHN0YWNrOiBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2Qoc291cmNlKVxuICB9O1xufVxuXG5mdW5jdGlvbiBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKSB7XG4gIC8vIFRhZyB0aGUgZmliZXIgd2l0aCBhbiB1cGRhdGUgZWZmZWN0LiBUaGlzIHR1cm5zIGEgUGxhY2VtZW50IGludG9cbiAgLy8gYSBQbGFjZW1lbnRBbmRVcGRhdGUuXG4gIHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyB8PSBVcGRhdGU7XG59XG5cbmZ1bmN0aW9uIG1hcmtSZWYkMSh3b3JrSW5Qcm9ncmVzcykge1xuICB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgfD0gUmVmO1xufVxuXG52YXIgYXBwZW5kQWxsQ2hpbGRyZW4gPSB2b2lkIDA7XG52YXIgdXBkYXRlSG9zdENvbnRhaW5lciA9IHZvaWQgMDtcbnZhciB1cGRhdGVIb3N0Q29tcG9uZW50JDEgPSB2b2lkIDA7XG52YXIgdXBkYXRlSG9zdFRleHQkMSA9IHZvaWQgMDtcbmlmIChzdXBwb3J0c011dGF0aW9uKSB7XG4gIC8vIE11dGF0aW9uIG1vZGVcblxuICBhcHBlbmRBbGxDaGlsZHJlbiA9IGZ1bmN0aW9uIChwYXJlbnQsIHdvcmtJblByb2dyZXNzLCBuZWVkc1Zpc2liaWxpdHlUb2dnbGUsIGlzSGlkZGVuKSB7XG4gICAgLy8gV2Ugb25seSBoYXZlIHRoZSB0b3AgRmliZXIgdGhhdCB3YXMgY3JlYXRlZCBidXQgd2UgbmVlZCByZWN1cnNlIGRvd24gaXRzXG4gICAgLy8gY2hpbGRyZW4gdG8gZmluZCBhbGwgdGhlIHRlcm1pbmFsIG5vZGVzLlxuICAgIHZhciBub2RlID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBub2RlLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgICAgYXBwZW5kSW5pdGlhbENoaWxkKHBhcmVudCwgbm9kZS5zdGF0ZU5vZGUpO1xuICAgICAgfSBlbHNlIGlmIChub2RlLnRhZyA9PT0gSG9zdFBvcnRhbCkge1xuICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgcG9ydGFsIGNoaWxkLCB0aGVuIHdlIGRvbid0IHdhbnQgdG8gdHJhdmVyc2VcbiAgICAgICAgLy8gZG93biBpdHMgY2hpbGRyZW4uIEluc3RlYWQsIHdlJ2xsIGdldCBpbnNlcnRpb25zIGZyb20gZWFjaCBjaGlsZCBpblxuICAgICAgICAvLyB0aGUgcG9ydGFsIGRpcmVjdGx5LlxuICAgICAgfSBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUgPT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG4gICAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgIH1cbiAgfTtcblxuICB1cGRhdGVIb3N0Q29udGFpbmVyID0gZnVuY3Rpb24gKHdvcmtJblByb2dyZXNzKSB7XG4gICAgLy8gTm9vcFxuICB9O1xuICB1cGRhdGVIb3N0Q29tcG9uZW50JDEgPSBmdW5jdGlvbiAoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHR5cGUsIG5ld1Byb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UpIHtcbiAgICAvLyBJZiB3ZSBoYXZlIGFuIGFsdGVybmF0ZSwgdGhhdCBtZWFucyB0aGlzIGlzIGFuIHVwZGF0ZSBhbmQgd2UgbmVlZCB0b1xuICAgIC8vIHNjaGVkdWxlIGEgc2lkZS1lZmZlY3QgdG8gZG8gdGhlIHVwZGF0ZXMuXG4gICAgdmFyIG9sZFByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICAgIGlmIChvbGRQcm9wcyA9PT0gbmV3UHJvcHMpIHtcbiAgICAgIC8vIEluIG11dGF0aW9uIG1vZGUsIHRoaXMgaXMgc3VmZmljaWVudCBmb3IgYSBiYWlsb3V0IGJlY2F1c2VcbiAgICAgIC8vIHdlIHdvbid0IHRvdWNoIHRoaXMgbm9kZSBldmVuIGlmIGNoaWxkcmVuIGNoYW5nZWQuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgZ2V0IHVwZGF0ZWQgYmVjYXVzZSBvbmUgb2Ygb3VyIGNoaWxkcmVuIHVwZGF0ZWQsIHdlIGRvbid0XG4gICAgLy8gaGF2ZSBuZXdQcm9wcyBzbyB3ZSdsbCBoYXZlIHRvIHJldXNlIHRoZW0uXG4gICAgLy8gVE9ETzogU3BsaXQgdGhlIHVwZGF0ZSBBUEkgYXMgc2VwYXJhdGUgZm9yIHRoZSBwcm9wcyB2cy4gY2hpbGRyZW4uXG4gICAgLy8gRXZlbiBiZXR0ZXIgd291bGQgYmUgaWYgY2hpbGRyZW4gd2VyZW4ndCBzcGVjaWFsIGNhc2VkIGF0IGFsbCB0aG8uXG4gICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgIHZhciBjdXJyZW50SG9zdENvbnRleHQgPSBnZXRIb3N0Q29udGV4dCgpO1xuICAgIC8vIFRPRE86IEV4cGVyaWVuY2luZyBhbiBlcnJvciB3aGVyZSBvbGRQcm9wcyBpcyBudWxsLiBTdWdnZXN0cyBhIGhvc3RcbiAgICAvLyBjb21wb25lbnQgaXMgaGl0dGluZyB0aGUgcmVzdW1lIHBhdGguIEZpZ3VyZSBvdXQgd2h5LiBQb3NzaWJseVxuICAgIC8vIHJlbGF0ZWQgdG8gYGhpZGRlbmAuXG4gICAgdmFyIHVwZGF0ZVBheWxvYWQgPSBwcmVwYXJlVXBkYXRlKGluc3RhbmNlLCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgY3VycmVudEhvc3RDb250ZXh0KTtcbiAgICAvLyBUT0RPOiBUeXBlIHRoaXMgc3BlY2lmaWMgdG8gdGhpcyB0eXBlIG9mIGNvbXBvbmVudC5cbiAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IHVwZGF0ZVBheWxvYWQ7XG4gICAgLy8gSWYgdGhlIHVwZGF0ZSBwYXlsb2FkIGluZGljYXRlcyB0aGF0IHRoZXJlIGlzIGEgY2hhbmdlIG9yIGlmIHRoZXJlXG4gICAgLy8gaXMgYSBuZXcgcmVmIHdlIG1hcmsgdGhpcyBhcyBhbiB1cGRhdGUuIEFsbCB0aGUgd29yayBpcyBkb25lIGluIGNvbW1pdFdvcmsuXG4gICAgaWYgKHVwZGF0ZVBheWxvYWQpIHtcbiAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgIH1cbiAgfTtcbiAgdXBkYXRlSG9zdFRleHQkMSA9IGZ1bmN0aW9uIChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgb2xkVGV4dCwgbmV3VGV4dCkge1xuICAgIC8vIElmIHRoZSB0ZXh0IGRpZmZlcnMsIG1hcmsgaXQgYXMgYW4gdXBkYXRlLiBBbGwgdGhlIHdvcmsgaW4gZG9uZSBpbiBjb21taXRXb3JrLlxuICAgIGlmIChvbGRUZXh0ICE9PSBuZXdUZXh0KSB7XG4gICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICB9XG4gIH07XG59IGVsc2UgaWYgKHN1cHBvcnRzUGVyc2lzdGVuY2UpIHtcbiAgLy8gUGVyc2lzdGVudCBob3N0IHRyZWUgbW9kZVxuXG4gIGFwcGVuZEFsbENoaWxkcmVuID0gZnVuY3Rpb24gKHBhcmVudCwgd29ya0luUHJvZ3Jlc3MsIG5lZWRzVmlzaWJpbGl0eVRvZ2dsZSwgaXNIaWRkZW4pIHtcbiAgICAvLyBXZSBvbmx5IGhhdmUgdGhlIHRvcCBGaWJlciB0aGF0IHdhcyBjcmVhdGVkIGJ1dCB3ZSBuZWVkIHJlY3Vyc2UgZG93biBpdHNcbiAgICAvLyBjaGlsZHJlbiB0byBmaW5kIGFsbCB0aGUgdGVybWluYWwgbm9kZXMuXG4gICAgdmFyIG5vZGUgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxhYmVsc1xuICAgICAgYnJhbmNoZXM6IGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCkge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBub2RlLnN0YXRlTm9kZTtcbiAgICAgICAgaWYgKG5lZWRzVmlzaWJpbGl0eVRvZ2dsZSkge1xuICAgICAgICAgIHZhciBwcm9wcyA9IG5vZGUubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICB2YXIgdHlwZSA9IG5vZGUudHlwZTtcbiAgICAgICAgICBpZiAoaXNIaWRkZW4pIHtcbiAgICAgICAgICAgIC8vIFRoaXMgY2hpbGQgaXMgaW5zaWRlIGEgdGltZWQgb3V0IHRyZWUuIEhpZGUgaXQuXG4gICAgICAgICAgICBpbnN0YW5jZSA9IGNsb25lSGlkZGVuSW5zdGFuY2UoaW5zdGFuY2UsIHR5cGUsIHByb3BzLCBub2RlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVGhpcyBjaGlsZCB3YXMgcHJldmlvdXNseSBpbnNpZGUgYSB0aW1lZCBvdXQgdHJlZS4gSWYgaXQgd2FzIG5vdFxuICAgICAgICAgICAgLy8gdXBkYXRlZCBkdXJpbmcgdGhpcyByZW5kZXIsIGl0IG1heSBuZWVkIHRvIGJlIHVuaGlkZGVuLiBDbG9uZVxuICAgICAgICAgICAgLy8gYWdhaW4gdG8gYmUgc3VyZS5cbiAgICAgICAgICAgIGluc3RhbmNlID0gY2xvbmVVbmhpZGRlbkluc3RhbmNlKGluc3RhbmNlLCB0eXBlLCBwcm9wcywgbm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5vZGUuc3RhdGVOb2RlID0gaW5zdGFuY2U7XG4gICAgICAgIH1cbiAgICAgICAgYXBwZW5kSW5pdGlhbENoaWxkKHBhcmVudCwgaW5zdGFuY2UpO1xuICAgICAgfSBlbHNlIGlmIChub2RlLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgICAgdmFyIF9pbnN0YW5jZSA9IG5vZGUuc3RhdGVOb2RlO1xuICAgICAgICBpZiAobmVlZHNWaXNpYmlsaXR5VG9nZ2xlKSB7XG4gICAgICAgICAgdmFyIHRleHQgPSBub2RlLm1lbW9pemVkUHJvcHM7XG4gICAgICAgICAgdmFyIHJvb3RDb250YWluZXJJbnN0YW5jZSA9IGdldFJvb3RIb3N0Q29udGFpbmVyKCk7XG4gICAgICAgICAgdmFyIGN1cnJlbnRIb3N0Q29udGV4dCA9IGdldEhvc3RDb250ZXh0KCk7XG4gICAgICAgICAgaWYgKGlzSGlkZGVuKSB7XG4gICAgICAgICAgICBfaW5zdGFuY2UgPSBjcmVhdGVIaWRkZW5UZXh0SW5zdGFuY2UodGV4dCwgcm9vdENvbnRhaW5lckluc3RhbmNlLCBjdXJyZW50SG9zdENvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX2luc3RhbmNlID0gY3JlYXRlVGV4dEluc3RhbmNlKHRleHQsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgY3VycmVudEhvc3RDb250ZXh0LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5vZGUuc3RhdGVOb2RlID0gX2luc3RhbmNlO1xuICAgICAgICB9XG4gICAgICAgIGFwcGVuZEluaXRpYWxDaGlsZChwYXJlbnQsIF9pbnN0YW5jZSk7XG4gICAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBIb3N0UG9ydGFsKSB7XG4gICAgICAgIC8vIElmIHdlIGhhdmUgYSBwb3J0YWwgY2hpbGQsIHRoZW4gd2UgZG9uJ3Qgd2FudCB0byB0cmF2ZXJzZVxuICAgICAgICAvLyBkb3duIGl0cyBjaGlsZHJlbi4gSW5zdGVhZCwgd2UnbGwgZ2V0IGluc2VydGlvbnMgZnJvbSBlYWNoIGNoaWxkIGluXG4gICAgICAgIC8vIHRoZSBwb3J0YWwgZGlyZWN0bHkuXG4gICAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgICAgICB2YXIgY3VycmVudCA9IG5vZGUuYWx0ZXJuYXRlO1xuICAgICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBvbGRTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICB2YXIgbmV3U3RhdGUgPSBub2RlLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgdmFyIG9sZElzSGlkZGVuID0gb2xkU3RhdGUgIT09IG51bGw7XG4gICAgICAgICAgdmFyIG5ld0lzSGlkZGVuID0gbmV3U3RhdGUgIT09IG51bGw7XG4gICAgICAgICAgaWYgKG9sZElzSGlkZGVuICE9PSBuZXdJc0hpZGRlbikge1xuICAgICAgICAgICAgLy8gVGhlIHBsYWNlaG9sZGVyIGVpdGhlciBqdXN0IHRpbWVkIG91dCBvciBzd2l0Y2hlZCBiYWNrIHRvIHRoZSBub3JtYWxcbiAgICAgICAgICAgIC8vIGNoaWxkcmVuIGFmdGVyIGhhdmluZyBwcmV2aW91c2x5IHRpbWVkIG91dC4gVG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mXG4gICAgICAgICAgICAvLyB0aGUgZGlyZWN0IGhvc3QgY2hpbGRyZW4uXG4gICAgICAgICAgICB2YXIgcHJpbWFyeUNoaWxkUGFyZW50ID0gbmV3SXNIaWRkZW4gPyBub2RlLmNoaWxkIDogbm9kZTtcbiAgICAgICAgICAgIGlmIChwcmltYXJ5Q2hpbGRQYXJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgYXBwZW5kQWxsQ2hpbGRyZW4ocGFyZW50LCBwcmltYXJ5Q2hpbGRQYXJlbnQsIHRydWUsIG5ld0lzSGlkZGVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sYWJlbHNcbiAgICAgICAgICAgIGJyZWFrIGJyYW5jaGVzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIENvbnRpbnVlIHRyYXZlcnNpbmcgbGlrZSBub3JtYWxcbiAgICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIC8vICRGbG93Rml4TWUgVGhpcyBpcyBjb3JyZWN0IGJ1dCBGbG93IGlzIGNvbmZ1c2VkIGJ5IHRoZSBsYWJlbGVkIGJyZWFrLlxuICAgICAgbm9kZSA9IG5vZGU7XG4gICAgICBpZiAobm9kZSA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgIH1cbiAgICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgfVxuICB9O1xuXG4gIC8vIEFuIHVuZm9ydHVuYXRlIGZvcmsgb2YgYXBwZW5kQWxsQ2hpbGRyZW4gYmVjYXVzZSB3ZSBoYXZlIHR3byBkaWZmZXJlbnQgcGFyZW50IHR5cGVzLlxuICB2YXIgYXBwZW5kQWxsQ2hpbGRyZW5Ub0NvbnRhaW5lciA9IGZ1bmN0aW9uIChjb250YWluZXJDaGlsZFNldCwgd29ya0luUHJvZ3Jlc3MsIG5lZWRzVmlzaWJpbGl0eVRvZ2dsZSwgaXNIaWRkZW4pIHtcbiAgICAvLyBXZSBvbmx5IGhhdmUgdGhlIHRvcCBGaWJlciB0aGF0IHdhcyBjcmVhdGVkIGJ1dCB3ZSBuZWVkIHJlY3Vyc2UgZG93biBpdHNcbiAgICAvLyBjaGlsZHJlbiB0byBmaW5kIGFsbCB0aGUgdGVybWluYWwgbm9kZXMuXG4gICAgdmFyIG5vZGUgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxhYmVsc1xuICAgICAgYnJhbmNoZXM6IGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCkge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBub2RlLnN0YXRlTm9kZTtcbiAgICAgICAgaWYgKG5lZWRzVmlzaWJpbGl0eVRvZ2dsZSkge1xuICAgICAgICAgIHZhciBwcm9wcyA9IG5vZGUubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICB2YXIgdHlwZSA9IG5vZGUudHlwZTtcbiAgICAgICAgICBpZiAoaXNIaWRkZW4pIHtcbiAgICAgICAgICAgIC8vIFRoaXMgY2hpbGQgaXMgaW5zaWRlIGEgdGltZWQgb3V0IHRyZWUuIEhpZGUgaXQuXG4gICAgICAgICAgICBpbnN0YW5jZSA9IGNsb25lSGlkZGVuSW5zdGFuY2UoaW5zdGFuY2UsIHR5cGUsIHByb3BzLCBub2RlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVGhpcyBjaGlsZCB3YXMgcHJldmlvdXNseSBpbnNpZGUgYSB0aW1lZCBvdXQgdHJlZS4gSWYgaXQgd2FzIG5vdFxuICAgICAgICAgICAgLy8gdXBkYXRlZCBkdXJpbmcgdGhpcyByZW5kZXIsIGl0IG1heSBuZWVkIHRvIGJlIHVuaGlkZGVuLiBDbG9uZVxuICAgICAgICAgICAgLy8gYWdhaW4gdG8gYmUgc3VyZS5cbiAgICAgICAgICAgIGluc3RhbmNlID0gY2xvbmVVbmhpZGRlbkluc3RhbmNlKGluc3RhbmNlLCB0eXBlLCBwcm9wcywgbm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5vZGUuc3RhdGVOb2RlID0gaW5zdGFuY2U7XG4gICAgICAgIH1cbiAgICAgICAgYXBwZW5kQ2hpbGRUb0NvbnRhaW5lckNoaWxkU2V0KGNvbnRhaW5lckNoaWxkU2V0LCBpbnN0YW5jZSk7XG4gICAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgICB2YXIgX2luc3RhbmNlMiA9IG5vZGUuc3RhdGVOb2RlO1xuICAgICAgICBpZiAobmVlZHNWaXNpYmlsaXR5VG9nZ2xlKSB7XG4gICAgICAgICAgdmFyIHRleHQgPSBub2RlLm1lbW9pemVkUHJvcHM7XG4gICAgICAgICAgdmFyIHJvb3RDb250YWluZXJJbnN0YW5jZSA9IGdldFJvb3RIb3N0Q29udGFpbmVyKCk7XG4gICAgICAgICAgdmFyIGN1cnJlbnRIb3N0Q29udGV4dCA9IGdldEhvc3RDb250ZXh0KCk7XG4gICAgICAgICAgaWYgKGlzSGlkZGVuKSB7XG4gICAgICAgICAgICBfaW5zdGFuY2UyID0gY3JlYXRlSGlkZGVuVGV4dEluc3RhbmNlKHRleHQsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgY3VycmVudEhvc3RDb250ZXh0LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF9pbnN0YW5jZTIgPSBjcmVhdGVUZXh0SW5zdGFuY2UodGV4dCwgcm9vdENvbnRhaW5lckluc3RhbmNlLCBjdXJyZW50SG9zdENvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbm9kZS5zdGF0ZU5vZGUgPSBfaW5zdGFuY2UyO1xuICAgICAgICB9XG4gICAgICAgIGFwcGVuZENoaWxkVG9Db250YWluZXJDaGlsZFNldChjb250YWluZXJDaGlsZFNldCwgX2luc3RhbmNlMik7XG4gICAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBIb3N0UG9ydGFsKSB7XG4gICAgICAgIC8vIElmIHdlIGhhdmUgYSBwb3J0YWwgY2hpbGQsIHRoZW4gd2UgZG9uJ3Qgd2FudCB0byB0cmF2ZXJzZVxuICAgICAgICAvLyBkb3duIGl0cyBjaGlsZHJlbi4gSW5zdGVhZCwgd2UnbGwgZ2V0IGluc2VydGlvbnMgZnJvbSBlYWNoIGNoaWxkIGluXG4gICAgICAgIC8vIHRoZSBwb3J0YWwgZGlyZWN0bHkuXG4gICAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgICAgICB2YXIgY3VycmVudCA9IG5vZGUuYWx0ZXJuYXRlO1xuICAgICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBvbGRTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICB2YXIgbmV3U3RhdGUgPSBub2RlLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgdmFyIG9sZElzSGlkZGVuID0gb2xkU3RhdGUgIT09IG51bGw7XG4gICAgICAgICAgdmFyIG5ld0lzSGlkZGVuID0gbmV3U3RhdGUgIT09IG51bGw7XG4gICAgICAgICAgaWYgKG9sZElzSGlkZGVuICE9PSBuZXdJc0hpZGRlbikge1xuICAgICAgICAgICAgLy8gVGhlIHBsYWNlaG9sZGVyIGVpdGhlciBqdXN0IHRpbWVkIG91dCBvciBzd2l0Y2hlZCBiYWNrIHRvIHRoZSBub3JtYWxcbiAgICAgICAgICAgIC8vIGNoaWxkcmVuIGFmdGVyIGhhdmluZyBwcmV2aW91c2x5IHRpbWVkIG91dC4gVG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mXG4gICAgICAgICAgICAvLyB0aGUgZGlyZWN0IGhvc3QgY2hpbGRyZW4uXG4gICAgICAgICAgICB2YXIgcHJpbWFyeUNoaWxkUGFyZW50ID0gbmV3SXNIaWRkZW4gPyBub2RlLmNoaWxkIDogbm9kZTtcbiAgICAgICAgICAgIGlmIChwcmltYXJ5Q2hpbGRQYXJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgYXBwZW5kQWxsQ2hpbGRyZW5Ub0NvbnRhaW5lcihjb250YWluZXJDaGlsZFNldCwgcHJpbWFyeUNoaWxkUGFyZW50LCB0cnVlLCBuZXdJc0hpZGRlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbGFiZWxzXG4gICAgICAgICAgICBicmVhayBicmFuY2hlcztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBDb250aW51ZSB0cmF2ZXJzaW5nIGxpa2Ugbm9ybWFsXG4gICAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyAkRmxvd0ZpeE1lIFRoaXMgaXMgY29ycmVjdCBidXQgRmxvdyBpcyBjb25mdXNlZCBieSB0aGUgbGFiZWxlZCBicmVhay5cbiAgICAgIG5vZGUgPSBub2RlO1xuICAgICAgaWYgKG5vZGUgPT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG4gICAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgIH1cbiAgfTtcbiAgdXBkYXRlSG9zdENvbnRhaW5lciA9IGZ1bmN0aW9uICh3b3JrSW5Qcm9ncmVzcykge1xuICAgIHZhciBwb3J0YWxPclJvb3QgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgdmFyIGNoaWxkcmVuVW5jaGFuZ2VkID0gd29ya0luUHJvZ3Jlc3MuZmlyc3RFZmZlY3QgPT09IG51bGw7XG4gICAgaWYgKGNoaWxkcmVuVW5jaGFuZ2VkKSB7XG4gICAgICAvLyBObyBjaGFuZ2VzLCBqdXN0IHJldXNlIHRoZSBleGlzdGluZyBpbnN0YW5jZS5cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGNvbnRhaW5lciA9IHBvcnRhbE9yUm9vdC5jb250YWluZXJJbmZvO1xuICAgICAgdmFyIG5ld0NoaWxkU2V0ID0gY3JlYXRlQ29udGFpbmVyQ2hpbGRTZXQoY29udGFpbmVyKTtcbiAgICAgIC8vIElmIGNoaWxkcmVuIG1pZ2h0IGhhdmUgY2hhbmdlZCwgd2UgaGF2ZSB0byBhZGQgdGhlbSBhbGwgdG8gdGhlIHNldC5cbiAgICAgIGFwcGVuZEFsbENoaWxkcmVuVG9Db250YWluZXIobmV3Q2hpbGRTZXQsIHdvcmtJblByb2dyZXNzLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgcG9ydGFsT3JSb290LnBlbmRpbmdDaGlsZHJlbiA9IG5ld0NoaWxkU2V0O1xuICAgICAgLy8gU2NoZWR1bGUgYW4gdXBkYXRlIG9uIHRoZSBjb250YWluZXIgdG8gc3dhcCBvdXQgdGhlIGNvbnRhaW5lci5cbiAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgZmluYWxpemVDb250YWluZXJDaGlsZHJlbihjb250YWluZXIsIG5ld0NoaWxkU2V0KTtcbiAgICB9XG4gIH07XG4gIHVwZGF0ZUhvc3RDb21wb25lbnQkMSA9IGZ1bmN0aW9uIChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgdHlwZSwgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSkge1xuICAgIHZhciBjdXJyZW50SW5zdGFuY2UgPSBjdXJyZW50LnN0YXRlTm9kZTtcbiAgICB2YXIgb2xkUHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG4gICAgLy8gSWYgdGhlcmUgYXJlIG5vIGVmZmVjdHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbm9kZSwgdGhlbiBub25lIG9mIG91ciBjaGlsZHJlbiBoYWQgYW55IHVwZGF0ZXMuXG4gICAgLy8gVGhpcyBndWFyYW50ZWVzIHRoYXQgd2UgY2FuIHJldXNlIGFsbCBvZiB0aGVtLlxuICAgIHZhciBjaGlsZHJlblVuY2hhbmdlZCA9IHdvcmtJblByb2dyZXNzLmZpcnN0RWZmZWN0ID09PSBudWxsO1xuICAgIGlmIChjaGlsZHJlblVuY2hhbmdlZCAmJiBvbGRQcm9wcyA9PT0gbmV3UHJvcHMpIHtcbiAgICAgIC8vIE5vIGNoYW5nZXMsIGp1c3QgcmV1c2UgdGhlIGV4aXN0aW5nIGluc3RhbmNlLlxuICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgbWlnaHQgcmVsZWFzZSBhIHByZXZpb3VzIGNsb25lLlxuICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gY3VycmVudEluc3RhbmNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcmVjeWNsYWJsZUluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgIHZhciBjdXJyZW50SG9zdENvbnRleHQgPSBnZXRIb3N0Q29udGV4dCgpO1xuICAgIHZhciB1cGRhdGVQYXlsb2FkID0gbnVsbDtcbiAgICBpZiAob2xkUHJvcHMgIT09IG5ld1Byb3BzKSB7XG4gICAgICB1cGRhdGVQYXlsb2FkID0gcHJlcGFyZVVwZGF0ZShyZWN5Y2xhYmxlSW5zdGFuY2UsIHR5cGUsIG9sZFByb3BzLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBjdXJyZW50SG9zdENvbnRleHQpO1xuICAgIH1cbiAgICBpZiAoY2hpbGRyZW5VbmNoYW5nZWQgJiYgdXBkYXRlUGF5bG9hZCA9PT0gbnVsbCkge1xuICAgICAgLy8gTm8gY2hhbmdlcywganVzdCByZXVzZSB0aGUgZXhpc3RpbmcgaW5zdGFuY2UuXG4gICAgICAvLyBOb3RlIHRoYXQgdGhpcyBtaWdodCByZWxlYXNlIGEgcHJldmlvdXMgY2xvbmUuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBjdXJyZW50SW5zdGFuY2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBuZXdJbnN0YW5jZSA9IGNsb25lSW5zdGFuY2UoY3VycmVudEluc3RhbmNlLCB1cGRhdGVQYXlsb2FkLCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMsIHdvcmtJblByb2dyZXNzLCBjaGlsZHJlblVuY2hhbmdlZCwgcmVjeWNsYWJsZUluc3RhbmNlKTtcbiAgICBpZiAoZmluYWxpemVJbml0aWFsQ2hpbGRyZW4obmV3SW5zdGFuY2UsIHR5cGUsIG5ld1Byb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGN1cnJlbnRIb3N0Q29udGV4dCkpIHtcbiAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgIH1cbiAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBuZXdJbnN0YW5jZTtcbiAgICBpZiAoY2hpbGRyZW5VbmNoYW5nZWQpIHtcbiAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBvdGhlciBlZmZlY3RzIGluIHRoaXMgdHJlZSwgd2UgbmVlZCB0byBmbGFnIHRoaXMgbm9kZSBhcyBoYXZpbmcgb25lLlxuICAgICAgLy8gRXZlbiB0aG91Z2ggd2UncmUgbm90IGdvaW5nIHRvIHVzZSBpdCBmb3IgYW55dGhpbmcuXG4gICAgICAvLyBPdGhlcndpc2UgcGFyZW50cyB3b24ndCBrbm93IHRoYXQgdGhlcmUgYXJlIG5ldyBjaGlsZHJlbiB0byBwcm9wYWdhdGUgdXB3YXJkcy5cbiAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiBjaGlsZHJlbiBtaWdodCBoYXZlIGNoYW5nZWQsIHdlIGhhdmUgdG8gYWRkIHRoZW0gYWxsIHRvIHRoZSBzZXQuXG4gICAgICBhcHBlbmRBbGxDaGlsZHJlbihuZXdJbnN0YW5jZSwgd29ya0luUHJvZ3Jlc3MsIGZhbHNlLCBmYWxzZSk7XG4gICAgfVxuICB9O1xuICB1cGRhdGVIb3N0VGV4dCQxID0gZnVuY3Rpb24gKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBvbGRUZXh0LCBuZXdUZXh0KSB7XG4gICAgaWYgKG9sZFRleHQgIT09IG5ld1RleHQpIHtcbiAgICAgIC8vIElmIHRoZSB0ZXh0IGNvbnRlbnQgZGlmZmVycywgd2UnbGwgY3JlYXRlIGEgbmV3IHRleHQgaW5zdGFuY2UgZm9yIGl0LlxuICAgICAgdmFyIHJvb3RDb250YWluZXJJbnN0YW5jZSA9IGdldFJvb3RIb3N0Q29udGFpbmVyKCk7XG4gICAgICB2YXIgY3VycmVudEhvc3RDb250ZXh0ID0gZ2V0SG9zdENvbnRleHQoKTtcbiAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGNyZWF0ZVRleHRJbnN0YW5jZShuZXdUZXh0LCByb290Q29udGFpbmVySW5zdGFuY2UsIGN1cnJlbnRIb3N0Q29udGV4dCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgLy8gV2UnbGwgaGF2ZSB0byBtYXJrIGl0IGFzIGhhdmluZyBhbiBlZmZlY3QsIGV2ZW4gdGhvdWdoIHdlIHdvbid0IHVzZSB0aGUgZWZmZWN0IGZvciBhbnl0aGluZy5cbiAgICAgIC8vIFRoaXMgbGV0cyB0aGUgcGFyZW50cyBrbm93IHRoYXQgYXQgbGVhc3Qgb25lIG9mIHRoZWlyIGNoaWxkcmVuIGhhcyBjaGFuZ2VkLlxuICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gTm8gaG9zdCBvcGVyYXRpb25zXG4gIHVwZGF0ZUhvc3RDb250YWluZXIgPSBmdW5jdGlvbiAod29ya0luUHJvZ3Jlc3MpIHtcbiAgICAvLyBOb29wXG4gIH07XG4gIHVwZGF0ZUhvc3RDb21wb25lbnQkMSA9IGZ1bmN0aW9uIChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgdHlwZSwgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSkge1xuICAgIC8vIE5vb3BcbiAgfTtcbiAgdXBkYXRlSG9zdFRleHQkMSA9IGZ1bmN0aW9uIChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgb2xkVGV4dCwgbmV3VGV4dCkge1xuICAgIC8vIE5vb3BcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tcGxldGVXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICB2YXIgbmV3UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6XG4gICAgICBicmVhaztcbiAgICBjYXNlIExhenlDb21wb25lbnQ6XG4gICAgICBicmVhaztcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBDb21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgICAgIHBvcENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB7XG4gICAgICAgIHBvcEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICBwb3BUb3BMZXZlbENvbnRleHRPYmplY3Qod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB2YXIgZmliZXJSb290ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgICBpZiAoZmliZXJSb290LnBlbmRpbmdDb250ZXh0KSB7XG4gICAgICAgICAgZmliZXJSb290LmNvbnRleHQgPSBmaWJlclJvb3QucGVuZGluZ0NvbnRleHQ7XG4gICAgICAgICAgZmliZXJSb290LnBlbmRpbmdDb250ZXh0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCB8fCBjdXJyZW50LmNoaWxkID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gSWYgd2UgaHlkcmF0ZWQsIHBvcCBzbyB0aGF0IHdlIGNhbiBkZWxldGUgYW55IHJlbWFpbmluZyBjaGlsZHJlblxuICAgICAgICAgIC8vIHRoYXQgd2VyZW4ndCBoeWRyYXRlZC5cbiAgICAgICAgICBwb3BIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgLy8gVGhpcyByZXNldHMgdGhlIGhhY2t5IHN0YXRlIHRvIGZpeCBpc01vdW50ZWQgYmVmb3JlIGNvbW1pdHRpbmcuXG4gICAgICAgICAgLy8gVE9ETzogRGVsZXRlIHRoaXMgd2hlbiB3ZSBkZWxldGUgaXNNb3VudGVkIGFuZCBmaW5kRE9NTm9kZS5cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgJj0gflBsYWNlbWVudDtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHZhciByb290Q29udGFpbmVySW5zdGFuY2UgPSBnZXRSb290SG9zdENvbnRhaW5lcigpO1xuICAgICAgICB2YXIgdHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsICYmIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgdXBkYXRlSG9zdENvbXBvbmVudCQxKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCB0eXBlLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlKTtcblxuICAgICAgICAgIGlmIChjdXJyZW50LnJlZiAhPT0gd29ya0luUHJvZ3Jlc3MucmVmKSB7XG4gICAgICAgICAgICBtYXJrUmVmJDEod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIW5ld1Byb3BzKSB7XG4gICAgICAgICAgICAhKHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSAhPT0gbnVsbCkgPyBpbnZhcmlhbnQoZmFsc2UsICdXZSBtdXN0IGhhdmUgbmV3IHByb3BzIGZvciBuZXcgbW91bnRzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpIDogdm9pZCAwO1xuICAgICAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIHdoZW4gd2UgYWJvcnQgd29yay5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBjdXJyZW50SG9zdENvbnRleHQgPSBnZXRIb3N0Q29udGV4dCgpO1xuICAgICAgICAgIC8vIFRPRE86IE1vdmUgY3JlYXRlSW5zdGFuY2UgdG8gYmVnaW5Xb3JrIGFuZCBrZWVwIGl0IG9uIGEgY29udGV4dFxuICAgICAgICAgIC8vIFwic3RhY2tcIiBhcyB0aGUgcGFyZW50LiBUaGVuIGFwcGVuZCBjaGlsZHJlbiBhcyB3ZSBnbyBpbiBiZWdpbldvcmtcbiAgICAgICAgICAvLyBvciBjb21wbGV0ZVdvcmsgZGVwZW5kaW5nIG9uIHdlIHdhbnQgdG8gYWRkIHRoZW4gdG9wLT5kb3duIG9yXG4gICAgICAgICAgLy8gYm90dG9tLT51cC4gVG9wLT5kb3duIGlzIGZhc3RlciBpbiBJRTExLlxuICAgICAgICAgIHZhciB3YXNIeWRyYXRlZCA9IHBvcEh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBpZiAod2FzSHlkcmF0ZWQpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyBhbmQgY3JlYXRlSW5zdGFuY2Ugc3RlcCBpbnRvIHRoZSBiZWdpblBoYXNlXG4gICAgICAgICAgICAvLyB0byBjb25zb2xpZGF0ZS5cbiAgICAgICAgICAgIGlmIChwcmVwYXJlVG9IeWRyYXRlSG9zdEluc3RhbmNlKHdvcmtJblByb2dyZXNzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGN1cnJlbnRIb3N0Q29udGV4dCkpIHtcbiAgICAgICAgICAgICAgLy8gSWYgY2hhbmdlcyB0byB0aGUgaHlkcmF0ZWQgbm9kZSBuZWVkcyB0byBiZSBhcHBsaWVkIGF0IHRoZVxuICAgICAgICAgICAgICAvLyBjb21taXQtcGhhc2Ugd2UgbWFyayB0aGlzIGFzIHN1Y2guXG4gICAgICAgICAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBjcmVhdGVJbnN0YW5jZSh0eXBlLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBjdXJyZW50SG9zdENvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICAgICAgYXBwZW5kQWxsQ2hpbGRyZW4oaW5zdGFuY2UsIHdvcmtJblByb2dyZXNzLCBmYWxzZSwgZmFsc2UpO1xuXG4gICAgICAgICAgICAvLyBDZXJ0YWluIHJlbmRlcmVycyByZXF1aXJlIGNvbW1pdC10aW1lIGVmZmVjdHMgZm9yIGluaXRpYWwgbW91bnQuXG4gICAgICAgICAgICAvLyAoZWcgRE9NIHJlbmRlcmVyIHN1cHBvcnRzIGF1dG8tZm9jdXMgZm9yIGNlcnRhaW4gZWxlbWVudHMpLlxuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHN1Y2ggcmVuZGVyZXJzIGdldCBzY2hlZHVsZWQgZm9yIGxhdGVyIHdvcmsuXG4gICAgICAgICAgICBpZiAoZmluYWxpemVJbml0aWFsQ2hpbGRyZW4oaW5zdGFuY2UsIHR5cGUsIG5ld1Byb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGN1cnJlbnRIb3N0Q29udGV4dCkpIHtcbiAgICAgICAgICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBpbnN0YW5jZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MucmVmICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIHJlZiBvbiBhIGhvc3Qgbm9kZSB3ZSBuZWVkIHRvIHNjaGVkdWxlIGEgY2FsbGJhY2tcbiAgICAgICAgICAgIG1hcmtSZWYkMSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICB7XG4gICAgICAgIHZhciBuZXdUZXh0ID0gbmV3UHJvcHM7XG4gICAgICAgIGlmIChjdXJyZW50ICYmIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgdmFyIG9sZFRleHQgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG4gICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBhbHRlcm5hdGUsIHRoYXQgbWVhbnMgdGhpcyBpcyBhbiB1cGRhdGUgYW5kIHdlIG5lZWRcbiAgICAgICAgICAvLyB0byBzY2hlZHVsZSBhIHNpZGUtZWZmZWN0IHRvIGRvIHRoZSB1cGRhdGVzLlxuICAgICAgICAgIHVwZGF0ZUhvc3RUZXh0JDEoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG9sZFRleHQsIG5ld1RleHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgbmV3VGV4dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICEod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlICE9PSBudWxsKSA/IGludmFyaWFudChmYWxzZSwgJ1dlIG11c3QgaGF2ZSBuZXcgcHJvcHMgZm9yIG5ldyBtb3VudHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJykgOiB2b2lkIDA7XG4gICAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiB3ZSBhYm9ydCB3b3JrLlxuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgX3Jvb3RDb250YWluZXJJbnN0YW5jZSA9IGdldFJvb3RIb3N0Q29udGFpbmVyKCk7XG4gICAgICAgICAgdmFyIF9jdXJyZW50SG9zdENvbnRleHQgPSBnZXRIb3N0Q29udGV4dCgpO1xuICAgICAgICAgIHZhciBfd2FzSHlkcmF0ZWQgPSBwb3BIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgaWYgKF93YXNIeWRyYXRlZCkge1xuICAgICAgICAgICAgaWYgKHByZXBhcmVUb0h5ZHJhdGVIb3N0VGV4dEluc3RhbmNlKHdvcmtJblByb2dyZXNzKSkge1xuICAgICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gY3JlYXRlVGV4dEluc3RhbmNlKG5ld1RleHQsIF9yb290Q29udGFpbmVySW5zdGFuY2UsIF9jdXJyZW50SG9zdENvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgYnJlYWs7XG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIG5leHRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnICYgRGlkQ2FwdHVyZSkgIT09IE5vRWZmZWN0KSB7XG4gICAgICAgICAgLy8gU29tZXRoaW5nIHN1c3BlbmRlZC4gUmUtcmVuZGVyIHdpdGggdGhlIGZhbGxiYWNrIGNoaWxkcmVuLlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmV4cGlyYXRpb25UaW1lID0gcmVuZGVyRXhwaXJhdGlvblRpbWU7XG4gICAgICAgICAgLy8gRG8gbm90IHJlc2V0IHRoZSBlZmZlY3QgbGlzdC5cbiAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbmV4dERpZFRpbWVvdXQgPSBuZXh0U3RhdGUgIT09IG51bGw7XG4gICAgICAgIHZhciBwcmV2RGlkVGltZW91dCA9IGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudC5tZW1vaXplZFN0YXRlICE9PSBudWxsO1xuXG4gICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsICYmICFuZXh0RGlkVGltZW91dCAmJiBwcmV2RGlkVGltZW91dCkge1xuICAgICAgICAgIC8vIFdlIGp1c3Qgc3dpdGNoZWQgZnJvbSB0aGUgZmFsbGJhY2sgdG8gdGhlIG5vcm1hbCBjaGlsZHJlbi4gRGVsZXRlXG4gICAgICAgICAgLy8gdGhlIGZhbGxiYWNrLlxuICAgICAgICAgIC8vIFRPRE86IFdvdWxkIGl0IGJlIGJldHRlciB0byBzdG9yZSB0aGUgZmFsbGJhY2sgZnJhZ21lbnQgb25cbiAgICAgICAgICB2YXIgY3VycmVudEZhbGxiYWNrQ2hpbGQgPSBjdXJyZW50LmNoaWxkLnNpYmxpbmc7XG4gICAgICAgICAgaWYgKGN1cnJlbnRGYWxsYmFja0NoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBEZWxldGlvbnMgZ28gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmV0dXJuIGZpYmVyJ3MgZWZmZWN0IGxpc3RcbiAgICAgICAgICAgIHZhciBmaXJzdCA9IHdvcmtJblByb2dyZXNzLmZpcnN0RWZmZWN0O1xuICAgICAgICAgICAgaWYgKGZpcnN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZpcnN0RWZmZWN0ID0gY3VycmVudEZhbGxiYWNrQ2hpbGQ7XG4gICAgICAgICAgICAgIGN1cnJlbnRGYWxsYmFja0NoaWxkLm5leHRFZmZlY3QgPSBmaXJzdDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZpcnN0RWZmZWN0ID0gd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCA9IGN1cnJlbnRGYWxsYmFja0NoaWxkO1xuICAgICAgICAgICAgICBjdXJyZW50RmFsbGJhY2tDaGlsZC5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJlbnRGYWxsYmFja0NoaWxkLmVmZmVjdFRhZyA9IERlbGV0aW9uO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0RGlkVGltZW91dCB8fCBwcmV2RGlkVGltZW91dCkge1xuICAgICAgICAgIC8vIElmIHRoZSBjaGlsZHJlbiBhcmUgaGlkZGVuLCBvciBpZiB0aGV5IHdlcmUgcHJldmlvdXMgaGlkZGVuLCBzY2hlZHVsZVxuICAgICAgICAgIC8vIGFuIGVmZmVjdCB0byB0b2dnbGUgdGhlaXIgdmlzaWJpbGl0eS4gVGhpcyBpcyBhbHNvIHVzZWQgdG8gYXR0YWNoIGFcbiAgICAgICAgICAvLyByZXRyeSBsaXN0ZW5lciB0byB0aGUgcHJvbWlzZS5cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgfD0gVXBkYXRlO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIGNhc2UgRnJhZ21lbnQ6XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1vZGU6XG4gICAgICBicmVhaztcbiAgICBjYXNlIFByb2ZpbGVyOlxuICAgICAgYnJlYWs7XG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgcG9wSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICB1cGRhdGVIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgLy8gUG9wIHByb3ZpZGVyIGZpYmVyXG4gICAgICBwb3BQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIENvbnRleHRDb25zdW1lcjpcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICAvLyBTYW1lIGFzIGNsYXNzIGNvbXBvbmVudCBjYXNlLiBJIHB1dCBpdCBkb3duIGhlcmUgc28gdGhhdCB0aGUgdGFncyBhcmVcbiAgICAgICAgLy8gc2VxdWVudGlhbCB0byBlbnN1cmUgdGhpcyBzd2l0Y2ggaXMgY29tcGlsZWQgdG8gYSBqdW1wIHRhYmxlLlxuICAgICAgICB2YXIgX0NvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihfQ29tcG9uZW50KSkge1xuICAgICAgICAgIHBvcENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIGNhc2UgRGVoeWRyYXRlZFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBpZiAoZW5hYmxlU3VzcGVuc2VTZXJ2ZXJSZW5kZXJlcikge1xuICAgICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgX3dhc0h5ZHJhdGVkMiA9IHBvcEh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgICFfd2FzSHlkcmF0ZWQyID8gaW52YXJpYW50KGZhbHNlLCAnQSBkZWh5ZHJhdGVkIHN1c3BlbnNlIGNvbXBvbmVudCB3YXMgY29tcGxldGVkIHdpdGhvdXQgYSBoeWRyYXRlZCBub2RlLiBUaGlzIGlzIHByb2JhYmx5IGEgYnVnIGluIFJlYWN0LicpIDogdm9pZCAwO1xuICAgICAgICAgICAgc2tpcFBhc3REZWh5ZHJhdGVkU3VzcGVuc2VJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfSBlbHNlIGlmICgod29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnICYgRGlkQ2FwdHVyZSkgPT09IE5vRWZmZWN0KSB7XG4gICAgICAgICAgICAvLyBUaGlzIGJvdW5kYXJ5IGRpZCBub3Qgc3VzcGVuZCBzbyBpdCdzIG5vdyBoeWRyYXRlZC5cbiAgICAgICAgICAgIC8vIFRvIGhhbmRsZSBhbnkgZnV0dXJlIHN1c3BlbnNlIGNhc2VzLCB3ZSdyZSBnb2luZyB0byBub3cgdXBncmFkZSBpdFxuICAgICAgICAgICAgLy8gdG8gYSBTdXNwZW5zZSBjb21wb25lbnQuIFdlIGRldGFjaCBpdCBmcm9tIHRoZSBleGlzdGluZyBjdXJyZW50IGZpYmVyLlxuICAgICAgICAgICAgY3VycmVudC5hbHRlcm5hdGUgPSBudWxsO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnRhZyA9IFN1c3BlbnNlQ29tcG9uZW50O1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgaW52YXJpYW50KGZhbHNlLCAnVW5rbm93biB1bml0IG9mIHdvcmsgdGFnLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHNob3VsZENhcHR1cmVTdXNwZW5zZSh3b3JrSW5Qcm9ncmVzcykge1xuICAvLyBJbiBvcmRlciB0byBjYXB0dXJlLCB0aGUgU3VzcGVuc2UgY29tcG9uZW50IG11c3QgaGF2ZSBhIGZhbGxiYWNrIHByb3AuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzLmZhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gSWYgaXQgd2FzIHRoZSBwcmltYXJ5IGNoaWxkcmVuIHRoYXQganVzdCBzdXNwZW5kZWQsIGNhcHR1cmUgYW5kIHJlbmRlciB0aGVcbiAgLy8gZmFsbGJhY2suIE90aGVyd2lzZSwgZG9uJ3QgY2FwdHVyZSBhbmQgYnViYmxlIHRvIHRoZSBuZXh0IGJvdW5kYXJ5LlxuICB2YXIgbmV4dFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgcmV0dXJuIG5leHRTdGF0ZSA9PT0gbnVsbDtcbn1cblxuLy8gVGhpcyBtb2R1bGUgaXMgZm9ya2VkIGluIGRpZmZlcmVudCBlbnZpcm9ubWVudHMuXG4vLyBCeSBkZWZhdWx0LCByZXR1cm4gYHRydWVgIHRvIGxvZyBlcnJvcnMgdG8gdGhlIGNvbnNvbGUuXG4vLyBGb3JrcyBjYW4gcmV0dXJuIGBmYWxzZWAgaWYgdGhpcyBpc24ndCBkZXNpcmFibGUuXG5mdW5jdGlvbiBzaG93RXJyb3JEaWFsb2coY2FwdHVyZWRFcnJvcikge1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gbG9nQ2FwdHVyZWRFcnJvcihjYXB0dXJlZEVycm9yKSB7XG4gIHZhciBsb2dFcnJvciA9IHNob3dFcnJvckRpYWxvZyhjYXB0dXJlZEVycm9yKTtcblxuICAvLyBBbGxvdyBpbmplY3RlZCBzaG93RXJyb3JEaWFsb2coKSB0byBwcmV2ZW50IGRlZmF1bHQgY29uc29sZS5lcnJvciBsb2dnaW5nLlxuICAvLyBUaGlzIGVuYWJsZXMgcmVuZGVyZXJzIGxpa2UgUmVhY3ROYXRpdmUgdG8gYmV0dGVyIG1hbmFnZSByZWRib3ggYmVoYXZpb3IuXG4gIGlmIChsb2dFcnJvciA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZXJyb3IgPSBjYXB0dXJlZEVycm9yLmVycm9yO1xuICB7XG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBjYXB0dXJlZEVycm9yLmNvbXBvbmVudE5hbWUsXG4gICAgICAgIGNvbXBvbmVudFN0YWNrID0gY2FwdHVyZWRFcnJvci5jb21wb25lbnRTdGFjayxcbiAgICAgICAgZXJyb3JCb3VuZGFyeU5hbWUgPSBjYXB0dXJlZEVycm9yLmVycm9yQm91bmRhcnlOYW1lLFxuICAgICAgICBlcnJvckJvdW5kYXJ5Rm91bmQgPSBjYXB0dXJlZEVycm9yLmVycm9yQm91bmRhcnlGb3VuZCxcbiAgICAgICAgd2lsbFJldHJ5ID0gY2FwdHVyZWRFcnJvci53aWxsUmV0cnk7XG5cbiAgICAvLyBCcm93c2VycyBzdXBwb3J0IHNpbGVuY2luZyB1bmNhdWdodCBlcnJvcnMgYnkgY2FsbGluZ1xuICAgIC8vIGBwcmV2ZW50RGVmYXVsdCgpYCBpbiB3aW5kb3cgYGVycm9yYCBoYW5kbGVyLlxuICAgIC8vIFdlIHJlY29yZCB0aGlzIGluZm9ybWF0aW9uIGFzIGFuIGV4cGFuZG8gb24gdGhlIGVycm9yLlxuXG4gICAgaWYgKGVycm9yICE9IG51bGwgJiYgZXJyb3IuX3N1cHByZXNzTG9nZ2luZykge1xuICAgICAgaWYgKGVycm9yQm91bmRhcnlGb3VuZCAmJiB3aWxsUmV0cnkpIHtcbiAgICAgICAgLy8gVGhlIGVycm9yIGlzIHJlY292ZXJhYmxlIGFuZCB3YXMgc2lsZW5jZWQuXG4gICAgICAgIC8vIElnbm9yZSBpdCBhbmQgZG9uJ3QgcHJpbnQgdGhlIHN0YWNrIGFkZGVuZHVtLlxuICAgICAgICAvLyBUaGlzIGlzIGhhbmR5IGZvciB0ZXN0aW5nIGVycm9yIGJvdW5kYXJpZXMgd2l0aG91dCBub2lzZS5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gVGhlIGVycm9yIGlzIGZhdGFsLiBTaW5jZSB0aGUgc2lsZW5jaW5nIG1pZ2h0IGhhdmVcbiAgICAgIC8vIGJlZW4gYWNjaWRlbnRhbCwgd2UnbGwgc3VyZmFjZSBpdCBhbnl3YXkuXG4gICAgICAvLyBIb3dldmVyLCB0aGUgYnJvd3NlciB3b3VsZCBoYXZlIHNpbGVuY2VkIHRoZSBvcmlnaW5hbCBlcnJvclxuICAgICAgLy8gc28gd2UnbGwgcHJpbnQgaXQgZmlyc3QsIGFuZCB0aGVuIHByaW50IHRoZSBzdGFjayBhZGRlbmR1bS5cbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgLy8gRm9yIGEgbW9yZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGlzIGJsb2NrLCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8xMzM4NFxuICAgIH1cblxuICAgIHZhciBjb21wb25lbnROYW1lTWVzc2FnZSA9IGNvbXBvbmVudE5hbWUgPyAnVGhlIGFib3ZlIGVycm9yIG9jY3VycmVkIGluIHRoZSA8JyArIGNvbXBvbmVudE5hbWUgKyAnPiBjb21wb25lbnQ6JyA6ICdUaGUgYWJvdmUgZXJyb3Igb2NjdXJyZWQgaW4gb25lIG9mIHlvdXIgUmVhY3QgY29tcG9uZW50czonO1xuXG4gICAgdmFyIGVycm9yQm91bmRhcnlNZXNzYWdlID0gdm9pZCAwO1xuICAgIC8vIGVycm9yQm91bmRhcnlGb3VuZCBjaGVjayBpcyBzdWZmaWNpZW50OyBlcnJvckJvdW5kYXJ5TmFtZSBjaGVjayBpcyB0byBzYXRpc2Z5IEZsb3cuXG4gICAgaWYgKGVycm9yQm91bmRhcnlGb3VuZCAmJiBlcnJvckJvdW5kYXJ5TmFtZSkge1xuICAgICAgaWYgKHdpbGxSZXRyeSkge1xuICAgICAgICBlcnJvckJvdW5kYXJ5TWVzc2FnZSA9ICdSZWFjdCB3aWxsIHRyeSB0byByZWNyZWF0ZSB0aGlzIGNvbXBvbmVudCB0cmVlIGZyb20gc2NyYXRjaCAnICsgKCd1c2luZyB0aGUgZXJyb3IgYm91bmRhcnkgeW91IHByb3ZpZGVkLCAnICsgZXJyb3JCb3VuZGFyeU5hbWUgKyAnLicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3JCb3VuZGFyeU1lc3NhZ2UgPSAnVGhpcyBlcnJvciB3YXMgaW5pdGlhbGx5IGhhbmRsZWQgYnkgdGhlIGVycm9yIGJvdW5kYXJ5ICcgKyBlcnJvckJvdW5kYXJ5TmFtZSArICcuXFxuJyArICdSZWNyZWF0aW5nIHRoZSB0cmVlIGZyb20gc2NyYXRjaCBmYWlsZWQgc28gUmVhY3Qgd2lsbCB1bm1vdW50IHRoZSB0cmVlLic7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGVycm9yQm91bmRhcnlNZXNzYWdlID0gJ0NvbnNpZGVyIGFkZGluZyBhbiBlcnJvciBib3VuZGFyeSB0byB5b3VyIHRyZWUgdG8gY3VzdG9taXplIGVycm9yIGhhbmRsaW5nIGJlaGF2aW9yLlxcbicgKyAnVmlzaXQgaHR0cHM6Ly9mYi5tZS9yZWFjdC1lcnJvci1ib3VuZGFyaWVzIHRvIGxlYXJuIG1vcmUgYWJvdXQgZXJyb3IgYm91bmRhcmllcy4nO1xuICAgIH1cbiAgICB2YXIgY29tYmluZWRNZXNzYWdlID0gJycgKyBjb21wb25lbnROYW1lTWVzc2FnZSArIGNvbXBvbmVudFN0YWNrICsgJ1xcblxcbicgKyAoJycgKyBlcnJvckJvdW5kYXJ5TWVzc2FnZSk7XG5cbiAgICAvLyBJbiBkZXZlbG9wbWVudCwgd2UgcHJvdmlkZSBvdXIgb3duIG1lc3NhZ2Ugd2l0aCBqdXN0IHRoZSBjb21wb25lbnQgc3RhY2suXG4gICAgLy8gV2UgZG9uJ3QgaW5jbHVkZSB0aGUgb3JpZ2luYWwgZXJyb3IgbWVzc2FnZSBhbmQgSlMgc3RhY2sgYmVjYXVzZSB0aGUgYnJvd3NlclxuICAgIC8vIGhhcyBhbHJlYWR5IHByaW50ZWQgaXQuIEV2ZW4gaWYgdGhlIGFwcGxpY2F0aW9uIHN3YWxsb3dzIHRoZSBlcnJvciwgaXQgaXMgc3RpbGxcbiAgICAvLyBkaXNwbGF5ZWQgYnkgdGhlIGJyb3dzZXIgdGhhbmtzIHRvIHRoZSBERVYtb25seSBmYWtlIGV2ZW50IHRyaWNrIGluIFJlYWN0RXJyb3JVdGlscy5cbiAgICBjb25zb2xlLmVycm9yKGNvbWJpbmVkTWVzc2FnZSk7XG4gIH1cbn1cblxudmFyIGRpZFdhcm5BYm91dFVuZGVmaW5lZFNuYXBzaG90QmVmb3JlVXBkYXRlID0gbnVsbDtcbntcbiAgZGlkV2FybkFib3V0VW5kZWZpbmVkU25hcHNob3RCZWZvcmVVcGRhdGUgPSBuZXcgU2V0KCk7XG59XG5cbnZhciBQb3NzaWJseVdlYWtTZXQkMSA9IHR5cGVvZiBXZWFrU2V0ID09PSAnZnVuY3Rpb24nID8gV2Vha1NldCA6IFNldDtcblxuZnVuY3Rpb24gbG9nRXJyb3IoYm91bmRhcnksIGVycm9ySW5mbykge1xuICB2YXIgc291cmNlID0gZXJyb3JJbmZvLnNvdXJjZTtcbiAgdmFyIHN0YWNrID0gZXJyb3JJbmZvLnN0YWNrO1xuICBpZiAoc3RhY2sgPT09IG51bGwgJiYgc291cmNlICE9PSBudWxsKSB7XG4gICAgc3RhY2sgPSBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2Qoc291cmNlKTtcbiAgfVxuXG4gIHZhciBjYXB0dXJlZEVycm9yID0ge1xuICAgIGNvbXBvbmVudE5hbWU6IHNvdXJjZSAhPT0gbnVsbCA/IGdldENvbXBvbmVudE5hbWUoc291cmNlLnR5cGUpIDogbnVsbCxcbiAgICBjb21wb25lbnRTdGFjazogc3RhY2sgIT09IG51bGwgPyBzdGFjayA6ICcnLFxuICAgIGVycm9yOiBlcnJvckluZm8udmFsdWUsXG4gICAgZXJyb3JCb3VuZGFyeTogbnVsbCxcbiAgICBlcnJvckJvdW5kYXJ5TmFtZTogbnVsbCxcbiAgICBlcnJvckJvdW5kYXJ5Rm91bmQ6IGZhbHNlLFxuICAgIHdpbGxSZXRyeTogZmFsc2VcbiAgfTtcblxuICBpZiAoYm91bmRhcnkgIT09IG51bGwgJiYgYm91bmRhcnkudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgIGNhcHR1cmVkRXJyb3IuZXJyb3JCb3VuZGFyeSA9IGJvdW5kYXJ5LnN0YXRlTm9kZTtcbiAgICBjYXB0dXJlZEVycm9yLmVycm9yQm91bmRhcnlOYW1lID0gZ2V0Q29tcG9uZW50TmFtZShib3VuZGFyeS50eXBlKTtcbiAgICBjYXB0dXJlZEVycm9yLmVycm9yQm91bmRhcnlGb3VuZCA9IHRydWU7XG4gICAgY2FwdHVyZWRFcnJvci53aWxsUmV0cnkgPSB0cnVlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBsb2dDYXB0dXJlZEVycm9yKGNhcHR1cmVkRXJyb3IpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gVGhpcyBtZXRob2QgbXVzdCBub3QgdGhyb3csIG9yIFJlYWN0IGludGVybmFsIHN0YXRlIHdpbGwgZ2V0IG1lc3NlZCB1cC5cbiAgICAvLyBJZiBjb25zb2xlLmVycm9yIGlzIG92ZXJyaWRkZW4sIG9yIGxvZ0NhcHR1cmVkRXJyb3IoKSBzaG93cyBhIGRpYWxvZyB0aGF0IHRocm93cyxcbiAgICAvLyB3ZSB3YW50IHRvIHJlcG9ydCB0aGlzIGVycm9yIG91dHNpZGUgb2YgdGhlIG5vcm1hbCBzdGFjayBhcyBhIGxhc3QgcmVzb3J0LlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTMxODhcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfSk7XG4gIH1cbn1cblxudmFyIGNhbGxDb21wb25lbnRXaWxsVW5tb3VudFdpdGhUaW1lciA9IGZ1bmN0aW9uIChjdXJyZW50JCQxLCBpbnN0YW5jZSkge1xuICBzdGFydFBoYXNlVGltZXIoY3VycmVudCQkMSwgJ2NvbXBvbmVudFdpbGxVbm1vdW50Jyk7XG4gIGluc3RhbmNlLnByb3BzID0gY3VycmVudCQkMS5tZW1vaXplZFByb3BzO1xuICBpbnN0YW5jZS5zdGF0ZSA9IGN1cnJlbnQkJDEubWVtb2l6ZWRTdGF0ZTtcbiAgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgc3RvcFBoYXNlVGltZXIoKTtcbn07XG5cbi8vIENhcHR1cmUgZXJyb3JzIHNvIHRoZXkgZG9uJ3QgaW50ZXJydXB0IHVubW91bnRpbmcuXG5mdW5jdGlvbiBzYWZlbHlDYWxsQ29tcG9uZW50V2lsbFVubW91bnQoY3VycmVudCQkMSwgaW5zdGFuY2UpIHtcbiAge1xuICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBjYWxsQ29tcG9uZW50V2lsbFVubW91bnRXaXRoVGltZXIsIG51bGwsIGN1cnJlbnQkJDEsIGluc3RhbmNlKTtcbiAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgdmFyIHVubW91bnRFcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcbiAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQkJDEsIHVubW91bnRFcnJvcik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNhZmVseURldGFjaFJlZihjdXJyZW50JCQxKSB7XG4gIHZhciByZWYgPSBjdXJyZW50JCQxLnJlZjtcbiAgaWYgKHJlZiAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB7XG4gICAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCByZWYsIG51bGwsIG51bGwpO1xuICAgICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICAgIHZhciByZWZFcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50JCQxLCByZWZFcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzYWZlbHlDYWxsRGVzdHJveShjdXJyZW50JCQxLCBkZXN0cm95KSB7XG4gIHtcbiAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgZGVzdHJveSwgbnVsbCk7XG4gICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgIHZhciBlcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcbiAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQkJDEsIGVycm9yKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0QmVmb3JlTXV0YXRpb25MaWZlQ3ljbGVzKGN1cnJlbnQkJDEsIGZpbmlzaGVkV29yaykge1xuICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0KFVubW91bnRTbmFwc2hvdCwgTm9FZmZlY3QkMSwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIGlmIChmaW5pc2hlZFdvcmsuZWZmZWN0VGFnICYgU25hcHNob3QpIHtcbiAgICAgICAgICBpZiAoY3VycmVudCQkMSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIHByZXZQcm9wcyA9IGN1cnJlbnQkJDEubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICAgIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50JCQxLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgICBzdGFydFBoYXNlVGltZXIoZmluaXNoZWRXb3JrLCAnZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUnKTtcbiAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgICAvLyBXZSBjb3VsZCB1cGRhdGUgaW5zdGFuY2UgcHJvcHMgYW5kIHN0YXRlIGhlcmUsXG4gICAgICAgICAgICAvLyBidXQgaW5zdGVhZCB3ZSByZWx5IG9uIHRoZW0gYmVpbmcgc2V0IGR1cmluZyBsYXN0IHJlbmRlci5cbiAgICAgICAgICAgIC8vIFRPRE86IHJldmlzaXQgdGhpcyB3aGVuIHdlIGltcGxlbWVudCByZXN1bWluZy5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKGZpbmlzaGVkV29yay50eXBlID09PSBmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgJiYgIWRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMpIHtcbiAgICAgICAgICAgICAgICAhKGluc3RhbmNlLnByb3BzID09PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcykgPyB3YXJuaW5nJDEoZmFsc2UsICdFeHBlY3RlZCAlcyBwcm9wcyB0byBtYXRjaCBtZW1vaXplZCBwcm9wcyBiZWZvcmUgJyArICdnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZS4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMucHJvcHNgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpIDogdm9pZCAwO1xuICAgICAgICAgICAgICAgICEoaW5zdGFuY2Uuc3RhdGUgPT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlKSA/IHdhcm5pbmckMShmYWxzZSwgJ0V4cGVjdGVkICVzIHN0YXRlIHRvIG1hdGNoIG1lbW9pemVkIHN0YXRlIGJlZm9yZSAnICsgJ2dldFNuYXBzaG90QmVmb3JlVXBkYXRlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5wcm9wc2AuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJykgOiB2b2lkIDA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBzbmFwc2hvdCA9IGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSA9PT0gZmluaXNoZWRXb3JrLnR5cGUgPyBwcmV2UHJvcHMgOiByZXNvbHZlRGVmYXVsdFByb3BzKGZpbmlzaGVkV29yay50eXBlLCBwcmV2UHJvcHMpLCBwcmV2U3RhdGUpO1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB2YXIgZGlkV2FyblNldCA9IGRpZFdhcm5BYm91dFVuZGVmaW5lZFNuYXBzaG90QmVmb3JlVXBkYXRlO1xuICAgICAgICAgICAgICBpZiAoc25hcHNob3QgPT09IHVuZGVmaW5lZCAmJiAhZGlkV2FyblNldC5oYXMoZmluaXNoZWRXb3JrLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgZGlkV2FyblNldC5hZGQoZmluaXNoZWRXb3JrLnR5cGUpO1xuICAgICAgICAgICAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJyVzLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCk6IEEgc25hcHNob3QgdmFsdWUgKG9yIG51bGwpICcgKyAnbXVzdCBiZSByZXR1cm5lZC4gWW91IGhhdmUgcmV0dXJuZWQgdW5kZWZpbmVkLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5zdGFuY2UuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGUgPSBzbmFwc2hvdDtcbiAgICAgICAgICAgIHN0b3BQaGFzZVRpbWVyKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICBjYXNlIEhvc3RSb290OlxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICBjYXNlIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDpcbiAgICAgIC8vIE5vdGhpbmcgdG8gZG8gZm9yIHRoZXNlIGNvbXBvbmVudCB0eXBlc1xuICAgICAgcmV0dXJuO1xuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIGludmFyaWFudChmYWxzZSwgJ1RoaXMgdW5pdCBvZiB3b3JrIHRhZyBzaG91bGQgbm90IGhhdmUgc2lkZS1lZmZlY3RzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEhvb2tFZmZlY3RMaXN0KHVubW91bnRUYWcsIG1vdW50VGFnLCBmaW5pc2hlZFdvcmspIHtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuICB2YXIgbGFzdEVmZmVjdCA9IHVwZGF0ZVF1ZXVlICE9PSBudWxsID8gdXBkYXRlUXVldWUubGFzdEVmZmVjdCA6IG51bGw7XG4gIGlmIChsYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyIGZpcnN0RWZmZWN0ID0gbGFzdEVmZmVjdC5uZXh0O1xuICAgIHZhciBlZmZlY3QgPSBmaXJzdEVmZmVjdDtcbiAgICBkbyB7XG4gICAgICBpZiAoKGVmZmVjdC50YWcgJiB1bm1vdW50VGFnKSAhPT0gTm9FZmZlY3QkMSkge1xuICAgICAgICAvLyBVbm1vdW50XG4gICAgICAgIHZhciBkZXN0cm95ID0gZWZmZWN0LmRlc3Ryb3k7XG4gICAgICAgIGVmZmVjdC5kZXN0cm95ID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoZGVzdHJveSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoKGVmZmVjdC50YWcgJiBtb3VudFRhZykgIT09IE5vRWZmZWN0JDEpIHtcbiAgICAgICAgLy8gTW91bnRcbiAgICAgICAgdmFyIGNyZWF0ZSA9IGVmZmVjdC5jcmVhdGU7XG4gICAgICAgIGVmZmVjdC5kZXN0cm95ID0gY3JlYXRlKCk7XG5cbiAgICAgICAge1xuICAgICAgICAgIHZhciBfZGVzdHJveSA9IGVmZmVjdC5kZXN0cm95O1xuICAgICAgICAgIGlmIChfZGVzdHJveSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBfZGVzdHJveSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGFkZGVuZHVtID0gdm9pZCAwO1xuICAgICAgICAgICAgaWYgKF9kZXN0cm95ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIGFkZGVuZHVtID0gJyBZb3UgcmV0dXJuZWQgbnVsbC4gSWYgeW91ciBlZmZlY3QgZG9lcyBub3QgcmVxdWlyZSBjbGVhbiAnICsgJ3VwLCByZXR1cm4gdW5kZWZpbmVkIChvciBub3RoaW5nKS4nO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgX2Rlc3Ryb3kudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBhZGRlbmR1bSA9ICdcXG5cXG5JdCBsb29rcyBsaWtlIHlvdSB3cm90ZSB1c2VFZmZlY3QoYXN5bmMgKCkgPT4gLi4uKSBvciByZXR1cm5lZCBhIFByb21pc2UuICcgKyAnSW5zdGVhZCwgd3JpdGUgdGhlIGFzeW5jIGZ1bmN0aW9uIGluc2lkZSB5b3VyIGVmZmVjdCAnICsgJ2FuZCBjYWxsIGl0IGltbWVkaWF0ZWx5OlxcblxcbicgKyAndXNlRWZmZWN0KCgpID0+IHtcXG4nICsgJyAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hEYXRhKCkge1xcbicgKyAnICAgIC8vIFlvdSBjYW4gYXdhaXQgaGVyZVxcbicgKyAnICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgTXlBUEkuZ2V0RGF0YShzb21lSWQpO1xcbicgKyAnICAgIC8vIC4uLlxcbicgKyAnICB9XFxuJyArICcgIGZldGNoRGF0YSgpO1xcbicgKyAnfSwgW3NvbWVJZF0pOyAvLyBPciBbXSBpZiBlZmZlY3QgZG9lc25cXCd0IG5lZWQgcHJvcHMgb3Igc3RhdGVcXG5cXG4nICsgJ0xlYXJuIG1vcmUgYWJvdXQgZGF0YSBmZXRjaGluZyB3aXRoIEhvb2tzOiBodHRwczovL2ZiLm1lL3JlYWN0LWhvb2tzLWRhdGEtZmV0Y2hpbmcnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYWRkZW5kdW0gPSAnIFlvdSByZXR1cm5lZDogJyArIF9kZXN0cm95O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnQW4gZWZmZWN0IGZ1bmN0aW9uIG11c3Qgbm90IHJldHVybiBhbnl0aGluZyBiZXNpZGVzIGEgZnVuY3Rpb24sICcgKyAnd2hpY2ggaXMgdXNlZCBmb3IgY2xlYW4tdXAuJXMlcycsIGFkZGVuZHVtLCBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2QoZmluaXNoZWRXb3JrKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlZmZlY3QgPSBlZmZlY3QubmV4dDtcbiAgICB9IHdoaWxlIChlZmZlY3QgIT09IGZpcnN0RWZmZWN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRQYXNzaXZlSG9va0VmZmVjdHMoZmluaXNoZWRXb3JrKSB7XG4gIGNvbW1pdEhvb2tFZmZlY3RMaXN0KFVubW91bnRQYXNzaXZlLCBOb0VmZmVjdCQxLCBmaW5pc2hlZFdvcmspO1xuICBjb21taXRIb29rRWZmZWN0TGlzdChOb0VmZmVjdCQxLCBNb3VudFBhc3NpdmUsIGZpbmlzaGVkV29yayk7XG59XG5cbmZ1bmN0aW9uIGNvbW1pdExpZmVDeWNsZXMoZmluaXNoZWRSb290LCBjdXJyZW50JCQxLCBmaW5pc2hlZFdvcmssIGNvbW1pdHRlZEV4cGlyYXRpb25UaW1lKSB7XG4gIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3QoVW5tb3VudExheW91dCwgTW91bnRMYXlvdXQsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgIGlmIChmaW5pc2hlZFdvcmsuZWZmZWN0VGFnICYgVXBkYXRlKSB7XG4gICAgICAgICAgaWYgKGN1cnJlbnQkJDEgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHN0YXJ0UGhhc2VUaW1lcihmaW5pc2hlZFdvcmssICdjb21wb25lbnREaWRNb3VudCcpO1xuICAgICAgICAgICAgLy8gV2UgY291bGQgdXBkYXRlIGluc3RhbmNlIHByb3BzIGFuZCBzdGF0ZSBoZXJlLFxuICAgICAgICAgICAgLy8gYnV0IGluc3RlYWQgd2UgcmVseSBvbiB0aGVtIGJlaW5nIHNldCBkdXJpbmcgbGFzdCByZW5kZXIuXG4gICAgICAgICAgICAvLyBUT0RPOiByZXZpc2l0IHRoaXMgd2hlbiB3ZSBpbXBsZW1lbnQgcmVzdW1pbmcuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsudHlwZSA9PT0gZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlICYmICFkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzKSB7XG4gICAgICAgICAgICAgICAgIShpbnN0YW5jZS5wcm9wcyA9PT0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMpID8gd2FybmluZyQxKGZhbHNlLCAnRXhwZWN0ZWQgJXMgcHJvcHMgdG8gbWF0Y2ggbWVtb2l6ZWQgcHJvcHMgYmVmb3JlICcgKyAnY29tcG9uZW50RGlkTW91bnQuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKSA6IHZvaWQgMDtcbiAgICAgICAgICAgICAgICAhKGluc3RhbmNlLnN0YXRlID09PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSkgPyB3YXJuaW5nJDEoZmFsc2UsICdFeHBlY3RlZCAlcyBzdGF0ZSB0byBtYXRjaCBtZW1vaXplZCBzdGF0ZSBiZWZvcmUgJyArICdjb21wb25lbnREaWRNb3VudC4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMucHJvcHNgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpIDogdm9pZCAwO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCgpO1xuICAgICAgICAgICAgc3RvcFBoYXNlVGltZXIoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHByZXZQcm9wcyA9IGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSA9PT0gZmluaXNoZWRXb3JrLnR5cGUgPyBjdXJyZW50JCQxLm1lbW9pemVkUHJvcHMgOiByZXNvbHZlRGVmYXVsdFByb3BzKGZpbmlzaGVkV29yay50eXBlLCBjdXJyZW50JCQxLm1lbW9pemVkUHJvcHMpO1xuICAgICAgICAgICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQkJDEubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICAgIHN0YXJ0UGhhc2VUaW1lcihmaW5pc2hlZFdvcmssICdjb21wb25lbnREaWRVcGRhdGUnKTtcbiAgICAgICAgICAgIC8vIFdlIGNvdWxkIHVwZGF0ZSBpbnN0YW5jZSBwcm9wcyBhbmQgc3RhdGUgaGVyZSxcbiAgICAgICAgICAgIC8vIGJ1dCBpbnN0ZWFkIHdlIHJlbHkgb24gdGhlbSBiZWluZyBzZXQgZHVyaW5nIGxhc3QgcmVuZGVyLlxuICAgICAgICAgICAgLy8gVE9ETzogcmV2aXNpdCB0aGlzIHdoZW4gd2UgaW1wbGVtZW50IHJlc3VtaW5nLlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLnR5cGUgPT09IGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSAmJiAhZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcykge1xuICAgICAgICAgICAgICAgICEoaW5zdGFuY2UucHJvcHMgPT09IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzKSA/IHdhcm5pbmckMShmYWxzZSwgJ0V4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSAnICsgJ2NvbXBvbmVudERpZFVwZGF0ZS4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMucHJvcHNgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpIDogdm9pZCAwO1xuICAgICAgICAgICAgICAgICEoaW5zdGFuY2Uuc3RhdGUgPT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlKSA/IHdhcm5pbmckMShmYWxzZSwgJ0V4cGVjdGVkICVzIHN0YXRlIHRvIG1hdGNoIG1lbW9pemVkIHN0YXRlIGJlZm9yZSAnICsgJ2NvbXBvbmVudERpZFVwZGF0ZS4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMucHJvcHNgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpIDogdm9pZCAwO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUsIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlKTtcbiAgICAgICAgICAgIHN0b3BQaGFzZVRpbWVyKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcbiAgICAgICAgaWYgKHVwZGF0ZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKGZpbmlzaGVkV29yay50eXBlID09PSBmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgJiYgIWRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMpIHtcbiAgICAgICAgICAgICAgIShpbnN0YW5jZS5wcm9wcyA9PT0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMpID8gd2FybmluZyQxKGZhbHNlLCAnRXhwZWN0ZWQgJXMgcHJvcHMgdG8gbWF0Y2ggbWVtb2l6ZWQgcHJvcHMgYmVmb3JlICcgKyAncHJvY2Vzc2luZyB0aGUgdXBkYXRlIHF1ZXVlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5wcm9wc2AuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJykgOiB2b2lkIDA7XG4gICAgICAgICAgICAgICEoaW5zdGFuY2Uuc3RhdGUgPT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlKSA/IHdhcm5pbmckMShmYWxzZSwgJ0V4cGVjdGVkICVzIHN0YXRlIHRvIG1hdGNoIG1lbW9pemVkIHN0YXRlIGJlZm9yZSAnICsgJ3Byb2Nlc3NpbmcgdGhlIHVwZGF0ZSBxdWV1ZS4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMucHJvcHNgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpIDogdm9pZCAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBXZSBjb3VsZCB1cGRhdGUgaW5zdGFuY2UgcHJvcHMgYW5kIHN0YXRlIGhlcmUsXG4gICAgICAgICAgLy8gYnV0IGluc3RlYWQgd2UgcmVseSBvbiB0aGVtIGJlaW5nIHNldCBkdXJpbmcgbGFzdCByZW5kZXIuXG4gICAgICAgICAgLy8gVE9ETzogcmV2aXNpdCB0aGlzIHdoZW4gd2UgaW1wbGVtZW50IHJlc3VtaW5nLlxuICAgICAgICAgIGNvbW1pdFVwZGF0ZVF1ZXVlKGZpbmlzaGVkV29yaywgdXBkYXRlUXVldWUsIGluc3RhbmNlLCBjb21taXR0ZWRFeHBpcmF0aW9uVGltZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB7XG4gICAgICAgIHZhciBfdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG4gICAgICAgIGlmIChfdXBkYXRlUXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgX2luc3RhbmNlID0gbnVsbDtcbiAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay5jaGlsZC50YWcpIHtcbiAgICAgICAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgICAgICAgIF9pbnN0YW5jZSA9IGdldFB1YmxpY0luc3RhbmNlKGZpbmlzaGVkV29yay5jaGlsZC5zdGF0ZU5vZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgICAgICAgIF9pbnN0YW5jZSA9IGZpbmlzaGVkV29yay5jaGlsZC5zdGF0ZU5vZGU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbW1pdFVwZGF0ZVF1ZXVlKGZpbmlzaGVkV29yaywgX3VwZGF0ZVF1ZXVlLCBfaW5zdGFuY2UsIGNvbW1pdHRlZEV4cGlyYXRpb25UaW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgX2luc3RhbmNlMiA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG5cbiAgICAgICAgLy8gUmVuZGVyZXJzIG1heSBzY2hlZHVsZSB3b3JrIHRvIGJlIGRvbmUgYWZ0ZXIgaG9zdCBjb21wb25lbnRzIGFyZSBtb3VudGVkXG4gICAgICAgIC8vIChlZyBET00gcmVuZGVyZXIgbWF5IHNjaGVkdWxlIGF1dG8tZm9jdXMgZm9yIGlucHV0cyBhbmQgZm9ybSBjb250cm9scykuXG4gICAgICAgIC8vIFRoZXNlIGVmZmVjdHMgc2hvdWxkIG9ubHkgYmUgY29tbWl0dGVkIHdoZW4gY29tcG9uZW50cyBhcmUgZmlyc3QgbW91bnRlZCxcbiAgICAgICAgLy8gYWthIHdoZW4gdGhlcmUgaXMgbm8gY3VycmVudC9hbHRlcm5hdGUuXG4gICAgICAgIGlmIChjdXJyZW50JCQxID09PSBudWxsICYmIGZpbmlzaGVkV29yay5lZmZlY3RUYWcgJiBVcGRhdGUpIHtcbiAgICAgICAgICB2YXIgdHlwZSA9IGZpbmlzaGVkV29yay50eXBlO1xuICAgICAgICAgIHZhciBwcm9wcyA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzO1xuICAgICAgICAgIGNvbW1pdE1vdW50KF9pbnN0YW5jZTIsIHR5cGUsIHByb3BzLCBmaW5pc2hlZFdvcmspO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICB7XG4gICAgICAgIC8vIFdlIGhhdmUgbm8gbGlmZS1jeWNsZXMgYXNzb2NpYXRlZCB3aXRoIHRleHQuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICB7XG4gICAgICAgIC8vIFdlIGhhdmUgbm8gbGlmZS1jeWNsZXMgYXNzb2NpYXRlZCB3aXRoIHBvcnRhbHMuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICBjYXNlIFByb2ZpbGVyOlxuICAgICAge1xuICAgICAgICBpZiAoZW5hYmxlUHJvZmlsZXJUaW1lcikge1xuICAgICAgICAgIHZhciBvblJlbmRlciA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzLm9uUmVuZGVyO1xuXG4gICAgICAgICAgaWYgKGVuYWJsZVNjaGVkdWxlclRyYWNpbmcpIHtcbiAgICAgICAgICAgIG9uUmVuZGVyKGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzLmlkLCBjdXJyZW50JCQxID09PSBudWxsID8gJ21vdW50JyA6ICd1cGRhdGUnLCBmaW5pc2hlZFdvcmsuYWN0dWFsRHVyYXRpb24sIGZpbmlzaGVkV29yay50cmVlQmFzZUR1cmF0aW9uLCBmaW5pc2hlZFdvcmsuYWN0dWFsU3RhcnRUaW1lLCBnZXRDb21taXRUaW1lKCksIGZpbmlzaGVkUm9vdC5tZW1vaXplZEludGVyYWN0aW9ucyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9uUmVuZGVyKGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzLmlkLCBjdXJyZW50JCQxID09PSBudWxsID8gJ21vdW50JyA6ICd1cGRhdGUnLCBmaW5pc2hlZFdvcmsuYWN0dWFsRHVyYXRpb24sIGZpbmlzaGVkV29yay50cmVlQmFzZUR1cmF0aW9uLCBmaW5pc2hlZFdvcmsuYWN0dWFsU3RhcnRUaW1lLCBnZXRDb21taXRUaW1lKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAgaW52YXJpYW50KGZhbHNlLCAnVGhpcyB1bml0IG9mIHdvcmsgdGFnIHNob3VsZCBub3QgaGF2ZSBzaWRlLWVmZmVjdHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaGlkZU9yVW5oaWRlQWxsQ2hpbGRyZW4oZmluaXNoZWRXb3JrLCBpc0hpZGRlbikge1xuICBpZiAoc3VwcG9ydHNNdXRhdGlvbikge1xuICAgIC8vIFdlIG9ubHkgaGF2ZSB0aGUgdG9wIEZpYmVyIHRoYXQgd2FzIGluc2VydGVkIGJ1dCB3ZSBuZWVkIHRvIHJlY3Vyc2UgZG93biBpdHNcbiAgICB2YXIgbm9kZSA9IGZpbmlzaGVkV29yaztcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKG5vZGUudGFnID09PSBIb3N0Q29tcG9uZW50KSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IG5vZGUuc3RhdGVOb2RlO1xuICAgICAgICBpZiAoaXNIaWRkZW4pIHtcbiAgICAgICAgICBoaWRlSW5zdGFuY2UoaW5zdGFuY2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVuaGlkZUluc3RhbmNlKG5vZGUuc3RhdGVOb2RlLCBub2RlLm1lbW9pemVkUHJvcHMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgICB2YXIgX2luc3RhbmNlMyA9IG5vZGUuc3RhdGVOb2RlO1xuICAgICAgICBpZiAoaXNIaWRkZW4pIHtcbiAgICAgICAgICBoaWRlVGV4dEluc3RhbmNlKF9pbnN0YW5jZTMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVuaGlkZVRleHRJbnN0YW5jZShfaW5zdGFuY2UzLCBub2RlLm1lbW9pemVkUHJvcHMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCAmJiBub2RlLm1lbW9pemVkU3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgLy8gRm91bmQgYSBuZXN0ZWQgU3VzcGVuc2UgY29tcG9uZW50IHRoYXQgdGltZWQgb3V0LiBTa2lwIG92ZXIgdGhlXG4gICAgICAgIHZhciBmYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBub2RlLmNoaWxkLnNpYmxpbmc7XG4gICAgICAgIGZhbGxiYWNrQ2hpbGRGcmFnbWVudC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlID09PSBmaW5pc2hlZFdvcmspIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IGZpbmlzaGVkV29yaykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG4gICAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRBdHRhY2hSZWYoZmluaXNoZWRXb3JrKSB7XG4gIHZhciByZWYgPSBmaW5pc2hlZFdvcmsucmVmO1xuICBpZiAocmVmICE9PSBudWxsKSB7XG4gICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICB2YXIgaW5zdGFuY2VUb1VzZSA9IHZvaWQgMDtcbiAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgaW5zdGFuY2VUb1VzZSA9IGdldFB1YmxpY0luc3RhbmNlKGluc3RhbmNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpbnN0YW5jZVRvVXNlID0gaW5zdGFuY2U7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZWYoaW5zdGFuY2VUb1VzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKCFyZWYuaGFzT3duUHJvcGVydHkoJ2N1cnJlbnQnKSkge1xuICAgICAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ1VuZXhwZWN0ZWQgcmVmIG9iamVjdCBwcm92aWRlZCBmb3IgJXMuICcgKyAnVXNlIGVpdGhlciBhIHJlZi1zZXR0ZXIgZnVuY3Rpb24gb3IgUmVhY3QuY3JlYXRlUmVmKCkuJXMnLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSwgZ2V0U3RhY2tCeUZpYmVySW5EZXZBbmRQcm9kKGZpbmlzaGVkV29yaykpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlZi5jdXJyZW50ID0gaW5zdGFuY2VUb1VzZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0RGV0YWNoUmVmKGN1cnJlbnQkJDEpIHtcbiAgdmFyIGN1cnJlbnRSZWYgPSBjdXJyZW50JCQxLnJlZjtcbiAgaWYgKGN1cnJlbnRSZWYgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIGN1cnJlbnRSZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGN1cnJlbnRSZWYobnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnRSZWYuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICB9XG59XG5cbi8vIFVzZXItb3JpZ2luYXRpbmcgZXJyb3JzIChsaWZlY3ljbGVzIGFuZCByZWZzKSBzaG91bGQgbm90IGludGVycnVwdFxuLy8gZGVsZXRpb24sIHNvIGRvbid0IGxldCB0aGVtIHRocm93LiBIb3N0LW9yaWdpbmF0aW5nIGVycm9ycyBzaG91bGRcbi8vIGludGVycnVwdCBkZWxldGlvbiwgc28gaXQncyBva2F5XG5mdW5jdGlvbiBjb21taXRVbm1vdW50KGN1cnJlbnQkJDEpIHtcbiAgb25Db21taXRVbm1vdW50KGN1cnJlbnQkJDEpO1xuXG4gIHN3aXRjaCAoY3VycmVudCQkMS50YWcpIHtcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgdXBkYXRlUXVldWUgPSBjdXJyZW50JCQxLnVwZGF0ZVF1ZXVlO1xuICAgICAgICBpZiAodXBkYXRlUXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgbGFzdEVmZmVjdCA9IHVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3Q7XG4gICAgICAgICAgaWYgKGxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBmaXJzdEVmZmVjdCA9IGxhc3RFZmZlY3QubmV4dDtcbiAgICAgICAgICAgIHZhciBlZmZlY3QgPSBmaXJzdEVmZmVjdDtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgdmFyIGRlc3Ryb3kgPSBlZmZlY3QuZGVzdHJveTtcbiAgICAgICAgICAgICAgaWYgKGRlc3Ryb3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNhZmVseUNhbGxEZXN0cm95KGN1cnJlbnQkJDEsIGRlc3Ryb3kpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVmZmVjdCA9IGVmZmVjdC5uZXh0O1xuICAgICAgICAgICAgfSB3aGlsZSAoZWZmZWN0ICE9PSBmaXJzdEVmZmVjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHNhZmVseURldGFjaFJlZihjdXJyZW50JCQxKTtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gY3VycmVudCQkMS5zdGF0ZU5vZGU7XG4gICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVubW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBzYWZlbHlDYWxsQ29tcG9uZW50V2lsbFVubW91bnQoY3VycmVudCQkMSwgaW5zdGFuY2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHNhZmVseURldGFjaFJlZihjdXJyZW50JCQxKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHtcbiAgICAgICAgLy8gVE9ETzogdGhpcyBpcyByZWN1cnNpdmUuXG4gICAgICAgIC8vIFdlIGFyZSBhbHNvIG5vdCB1c2luZyB0aGlzIHBhcmVudCBiZWNhdXNlXG4gICAgICAgIC8vIHRoZSBwb3J0YWwgd2lsbCBnZXQgcHVzaGVkIGltbWVkaWF0ZWx5LlxuICAgICAgICBpZiAoc3VwcG9ydHNNdXRhdGlvbikge1xuICAgICAgICAgIHVubW91bnRIb3N0Q29tcG9uZW50cyhjdXJyZW50JCQxKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdXBwb3J0c1BlcnNpc3RlbmNlKSB7XG4gICAgICAgICAgZW1wdHlQb3J0YWxDb250YWluZXIoY3VycmVudCQkMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdE5lc3RlZFVubW91bnRzKHJvb3QpIHtcbiAgLy8gV2hpbGUgd2UncmUgaW5zaWRlIGEgcmVtb3ZlZCBob3N0IG5vZGUgd2UgZG9uJ3Qgd2FudCB0byBjYWxsXG4gIC8vIHJlbW92ZUNoaWxkIG9uIHRoZSBpbm5lciBub2RlcyBiZWNhdXNlIHRoZXkncmUgcmVtb3ZlZCBieSB0aGUgdG9wXG4gIC8vIGNhbGwgYW55d2F5LiBXZSBhbHNvIHdhbnQgdG8gY2FsbCBjb21wb25lbnRXaWxsVW5tb3VudCBvbiBhbGxcbiAgLy8gY29tcG9zaXRlcyBiZWZvcmUgdGhpcyBob3N0IG5vZGUgaXMgcmVtb3ZlZCBmcm9tIHRoZSB0cmVlLiBUaGVyZWZvcmVcbiAgdmFyIG5vZGUgPSByb290O1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbW1pdFVubW91bnQobm9kZSk7XG4gICAgLy8gVmlzaXQgY2hpbGRyZW4gYmVjYXVzZSB0aGV5IG1heSBjb250YWluIG1vcmUgY29tcG9zaXRlIG9yIGhvc3Qgbm9kZXMuXG4gICAgLy8gU2tpcCBwb3J0YWxzIGJlY2F1c2UgY29tbWl0VW5tb3VudCgpIGN1cnJlbnRseSB2aXNpdHMgdGhlbSByZWN1cnNpdmVseS5cbiAgICBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCAmJiAoXG4gICAgLy8gSWYgd2UgdXNlIG11dGF0aW9uIHdlIGRyaWxsIGRvd24gaW50byBwb3J0YWxzIHVzaW5nIGNvbW1pdFVubW91bnQgYWJvdmUuXG4gICAgLy8gSWYgd2UgZG9uJ3QgdXNlIG11dGF0aW9uIHdlIGRyaWxsIGRvd24gaW50byBwb3J0YWxzIGhlcmUgaW5zdGVhZC5cbiAgICAhc3VwcG9ydHNNdXRhdGlvbiB8fCBub2RlLnRhZyAhPT0gSG9zdFBvcnRhbCkpIHtcbiAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChub2RlID09PSByb290KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gcm9vdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRldGFjaEZpYmVyKGN1cnJlbnQkJDEpIHtcbiAgLy8gQ3V0IG9mZiB0aGUgcmV0dXJuIHBvaW50ZXJzIHRvIGRpc2Nvbm5lY3QgaXQgZnJvbSB0aGUgdHJlZS4gSWRlYWxseSwgd2VcbiAgLy8gc2hvdWxkIGNsZWFyIHRoZSBjaGlsZCBwb2ludGVyIG9mIHRoZSBwYXJlbnQgYWx0ZXJuYXRlIHRvIGxldCB0aGlzXG4gIC8vIGdldCBHQzplZCBidXQgd2UgZG9uJ3Qga25vdyB3aGljaCBmb3Igc3VyZSB3aGljaCBwYXJlbnQgaXMgdGhlIGN1cnJlbnRcbiAgLy8gb25lIHNvIHdlJ2xsIHNldHRsZSBmb3IgR0M6aW5nIHRoZSBzdWJ0cmVlIG9mIHRoaXMgY2hpbGQuIFRoaXMgY2hpbGRcbiAgLy8gaXRzZWxmIHdpbGwgYmUgR0M6ZWQgd2hlbiB0aGUgcGFyZW50IHVwZGF0ZXMgdGhlIG5leHQgdGltZS5cbiAgY3VycmVudCQkMS5yZXR1cm4gPSBudWxsO1xuICBjdXJyZW50JCQxLmNoaWxkID0gbnVsbDtcbiAgY3VycmVudCQkMS5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgY3VycmVudCQkMS51cGRhdGVRdWV1ZSA9IG51bGw7XG4gIHZhciBhbHRlcm5hdGUgPSBjdXJyZW50JCQxLmFsdGVybmF0ZTtcbiAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgIGFsdGVybmF0ZS5yZXR1cm4gPSBudWxsO1xuICAgIGFsdGVybmF0ZS5jaGlsZCA9IG51bGw7XG4gICAgYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgIGFsdGVybmF0ZS51cGRhdGVRdWV1ZSA9IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW1wdHlQb3J0YWxDb250YWluZXIoY3VycmVudCQkMSkge1xuICBpZiAoIXN1cHBvcnRzUGVyc2lzdGVuY2UpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcG9ydGFsID0gY3VycmVudCQkMS5zdGF0ZU5vZGU7XG4gIHZhciBjb250YWluZXJJbmZvID0gcG9ydGFsLmNvbnRhaW5lckluZm87XG5cbiAgdmFyIGVtcHR5Q2hpbGRTZXQgPSBjcmVhdGVDb250YWluZXJDaGlsZFNldChjb250YWluZXJJbmZvKTtcbiAgcmVwbGFjZUNvbnRhaW5lckNoaWxkcmVuKGNvbnRhaW5lckluZm8sIGVtcHR5Q2hpbGRTZXQpO1xufVxuXG5mdW5jdGlvbiBjb21taXRDb250YWluZXIoZmluaXNoZWRXb3JrKSB7XG4gIGlmICghc3VwcG9ydHNQZXJzaXN0ZW5jZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICB7XG4gICAgICAgIHZhciBwb3J0YWxPclJvb3QgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICB2YXIgY29udGFpbmVySW5mbyA9IHBvcnRhbE9yUm9vdC5jb250YWluZXJJbmZvLFxuICAgICAgICAgICAgX3BlbmRpbmdDaGlsZHJlbiA9IHBvcnRhbE9yUm9vdC5wZW5kaW5nQ2hpbGRyZW47XG5cbiAgICAgICAgcmVwbGFjZUNvbnRhaW5lckNoaWxkcmVuKGNvbnRhaW5lckluZm8sIF9wZW5kaW5nQ2hpbGRyZW4pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAgaW52YXJpYW50KGZhbHNlLCAnVGhpcyB1bml0IG9mIHdvcmsgdGFnIHNob3VsZCBub3QgaGF2ZSBzaWRlLWVmZmVjdHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0SG9zdFBhcmVudEZpYmVyKGZpYmVyKSB7XG4gIHZhciBwYXJlbnQgPSBmaWJlci5yZXR1cm47XG4gIHdoaWxlIChwYXJlbnQgIT09IG51bGwpIHtcbiAgICBpZiAoaXNIb3N0UGFyZW50KHBhcmVudCkpIHtcbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfVxuICAgIHBhcmVudCA9IHBhcmVudC5yZXR1cm47XG4gIH1cbiAgaW52YXJpYW50KGZhbHNlLCAnRXhwZWN0ZWQgdG8gZmluZCBhIGhvc3QgcGFyZW50LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xufVxuXG5mdW5jdGlvbiBpc0hvc3RQYXJlbnQoZmliZXIpIHtcbiAgcmV0dXJuIGZpYmVyLnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBmaWJlci50YWcgPT09IEhvc3RSb290IHx8IGZpYmVyLnRhZyA9PT0gSG9zdFBvcnRhbDtcbn1cblxuZnVuY3Rpb24gZ2V0SG9zdFNpYmxpbmcoZmliZXIpIHtcbiAgLy8gV2UncmUgZ29pbmcgdG8gc2VhcmNoIGZvcndhcmQgaW50byB0aGUgdHJlZSB1bnRpbCB3ZSBmaW5kIGEgc2libGluZyBob3N0XG4gIC8vIG5vZGUuIFVuZm9ydHVuYXRlbHksIGlmIG11bHRpcGxlIGluc2VydGlvbnMgYXJlIGRvbmUgaW4gYSByb3cgd2UgaGF2ZSB0b1xuICAvLyBzZWFyY2ggcGFzdCB0aGVtLiBUaGlzIGxlYWRzIHRvIGV4cG9uZW50aWFsIHNlYXJjaCBmb3IgdGhlIG5leHQgc2libGluZy5cbiAgdmFyIG5vZGUgPSBmaWJlcjtcbiAgc2libGluZ3M6IHdoaWxlICh0cnVlKSB7XG4gICAgLy8gSWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcsIGxldCdzIHRyeSB0aGUgbmV4dCBzaWJsaW5nLlxuICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBpc0hvc3RQYXJlbnQobm9kZS5yZXR1cm4pKSB7XG4gICAgICAgIC8vIElmIHdlIHBvcCBvdXQgb2YgdGhlIHJvb3Qgb3IgaGl0IHRoZSBwYXJlbnQgdGhlIGZpYmVyIHdlIGFyZSB0aGVcbiAgICAgICAgLy8gbGFzdCBzaWJsaW5nLlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgd2hpbGUgKG5vZGUudGFnICE9PSBIb3N0Q29tcG9uZW50ICYmIG5vZGUudGFnICE9PSBIb3N0VGV4dCAmJiBub2RlLnRhZyAhPT0gRGVoeWRyYXRlZFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgICAvLyBJZiBpdCBpcyBub3QgaG9zdCBub2RlIGFuZCwgd2UgbWlnaHQgaGF2ZSBhIGhvc3Qgbm9kZSBpbnNpZGUgaXQuXG4gICAgICAvLyBUcnkgdG8gc2VhcmNoIGRvd24gdW50aWwgd2UgZmluZCBvbmUuXG4gICAgICBpZiAobm9kZS5lZmZlY3RUYWcgJiBQbGFjZW1lbnQpIHtcbiAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIGNoaWxkLCB0cnkgdGhlIHNpYmxpbmdzIGluc3RlYWQuXG4gICAgICAgIGNvbnRpbnVlIHNpYmxpbmdzO1xuICAgICAgfVxuICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIGNoaWxkLCB0cnkgdGhlIHNpYmxpbmdzIGluc3RlYWQuXG4gICAgICAvLyBXZSBhbHNvIHNraXAgcG9ydGFscyBiZWNhdXNlIHRoZXkgYXJlIG5vdCBwYXJ0IG9mIHRoaXMgaG9zdCB0cmVlLlxuICAgICAgaWYgKG5vZGUuY2hpbGQgPT09IG51bGwgfHwgbm9kZS50YWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgICAgY29udGludWUgc2libGluZ3M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBDaGVjayBpZiB0aGlzIGhvc3Qgbm9kZSBpcyBzdGFibGUgb3IgYWJvdXQgdG8gYmUgcGxhY2VkLlxuICAgIGlmICghKG5vZGUuZWZmZWN0VGFnICYgUGxhY2VtZW50KSkge1xuICAgICAgLy8gRm91bmQgaXQhXG4gICAgICByZXR1cm4gbm9kZS5zdGF0ZU5vZGU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFBsYWNlbWVudChmaW5pc2hlZFdvcmspIHtcbiAgaWYgKCFzdXBwb3J0c011dGF0aW9uKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gUmVjdXJzaXZlbHkgaW5zZXJ0IGFsbCBob3N0IG5vZGVzIGludG8gdGhlIHBhcmVudC5cbiAgdmFyIHBhcmVudEZpYmVyID0gZ2V0SG9zdFBhcmVudEZpYmVyKGZpbmlzaGVkV29yayk7XG5cbiAgLy8gTm90ZTogdGhlc2UgdHdvIHZhcmlhYmxlcyAqbXVzdCogYWx3YXlzIGJlIHVwZGF0ZWQgdG9nZXRoZXIuXG4gIHZhciBwYXJlbnQgPSB2b2lkIDA7XG4gIHZhciBpc0NvbnRhaW5lciA9IHZvaWQgMDtcblxuICBzd2l0Y2ggKHBhcmVudEZpYmVyLnRhZykge1xuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHBhcmVudCA9IHBhcmVudEZpYmVyLnN0YXRlTm9kZTtcbiAgICAgIGlzQ29udGFpbmVyID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAgcGFyZW50ID0gcGFyZW50RmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICBpc0NvbnRhaW5lciA9IHRydWU7XG4gICAgICBicmVhaztcbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICBwYXJlbnQgPSBwYXJlbnRGaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgIGlzQ29udGFpbmVyID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBpbnZhcmlhbnQoZmFsc2UsICdJbnZhbGlkIGhvc3QgcGFyZW50IGZpYmVyLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICB9XG4gIGlmIChwYXJlbnRGaWJlci5lZmZlY3RUYWcgJiBDb250ZW50UmVzZXQpIHtcbiAgICAvLyBSZXNldCB0aGUgdGV4dCBjb250ZW50IG9mIHRoZSBwYXJlbnQgYmVmb3JlIGRvaW5nIGFueSBpbnNlcnRpb25zXG4gICAgcmVzZXRUZXh0Q29udGVudChwYXJlbnQpO1xuICAgIC8vIENsZWFyIENvbnRlbnRSZXNldCBmcm9tIHRoZSBlZmZlY3QgdGFnXG4gICAgcGFyZW50RmliZXIuZWZmZWN0VGFnICY9IH5Db250ZW50UmVzZXQ7XG4gIH1cblxuICB2YXIgYmVmb3JlID0gZ2V0SG9zdFNpYmxpbmcoZmluaXNoZWRXb3JrKTtcbiAgLy8gV2Ugb25seSBoYXZlIHRoZSB0b3AgRmliZXIgdGhhdCB3YXMgaW5zZXJ0ZWQgYnV0IHdlIG5lZWQgdG8gcmVjdXJzZSBkb3duIGl0c1xuICAvLyBjaGlsZHJlbiB0byBmaW5kIGFsbCB0aGUgdGVybWluYWwgbm9kZXMuXG4gIHZhciBub2RlID0gZmluaXNoZWRXb3JrO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBub2RlLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgIGlmIChiZWZvcmUpIHtcbiAgICAgICAgaWYgKGlzQ29udGFpbmVyKSB7XG4gICAgICAgICAgaW5zZXJ0SW5Db250YWluZXJCZWZvcmUocGFyZW50LCBub2RlLnN0YXRlTm9kZSwgYmVmb3JlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbnNlcnRCZWZvcmUocGFyZW50LCBub2RlLnN0YXRlTm9kZSwgYmVmb3JlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzQ29udGFpbmVyKSB7XG4gICAgICAgICAgYXBwZW5kQ2hpbGRUb0NvbnRhaW5lcihwYXJlbnQsIG5vZGUuc3RhdGVOb2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhcHBlbmRDaGlsZChwYXJlbnQsIG5vZGUuc3RhdGVOb2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobm9kZS50YWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgIC8vIElmIHRoZSBpbnNlcnRpb24gaXRzZWxmIGlzIGEgcG9ydGFsLCB0aGVuIHdlIGRvbid0IHdhbnQgdG8gdHJhdmVyc2VcbiAgICAgIC8vIGRvd24gaXRzIGNoaWxkcmVuLiBJbnN0ZWFkLCB3ZSdsbCBnZXQgaW5zZXJ0aW9ucyBmcm9tIGVhY2ggY2hpbGQgaW5cbiAgICAgIC8vIHRoZSBwb3J0YWwgZGlyZWN0bHkuXG4gICAgfSBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAobm9kZSA9PT0gZmluaXNoZWRXb3JrKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gZmluaXNoZWRXb3JrKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5tb3VudEhvc3RDb21wb25lbnRzKGN1cnJlbnQkJDEpIHtcbiAgLy8gV2Ugb25seSBoYXZlIHRoZSB0b3AgRmliZXIgdGhhdCB3YXMgZGVsZXRlZCBidXQgd2UgbmVlZCB0byByZWN1cnNlIGRvd24gaXRzXG4gIHZhciBub2RlID0gY3VycmVudCQkMTtcblxuICAvLyBFYWNoIGl0ZXJhdGlvbiwgY3VycmVudFBhcmVudCBpcyBwb3B1bGF0ZWQgd2l0aCBub2RlJ3MgaG9zdCBwYXJlbnQgaWYgbm90XG4gIC8vIGN1cnJlbnRQYXJlbnRJc1ZhbGlkLlxuICB2YXIgY3VycmVudFBhcmVudElzVmFsaWQgPSBmYWxzZTtcblxuICAvLyBOb3RlOiB0aGVzZSB0d28gdmFyaWFibGVzICptdXN0KiBhbHdheXMgYmUgdXBkYXRlZCB0b2dldGhlci5cbiAgdmFyIGN1cnJlbnRQYXJlbnQgPSB2b2lkIDA7XG4gIHZhciBjdXJyZW50UGFyZW50SXNDb250YWluZXIgPSB2b2lkIDA7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAoIWN1cnJlbnRQYXJlbnRJc1ZhbGlkKSB7XG4gICAgICB2YXIgcGFyZW50ID0gbm9kZS5yZXR1cm47XG4gICAgICBmaW5kUGFyZW50OiB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAhKHBhcmVudCAhPT0gbnVsbCkgPyBpbnZhcmlhbnQoZmFsc2UsICdFeHBlY3RlZCB0byBmaW5kIGEgaG9zdCBwYXJlbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJykgOiB2b2lkIDA7XG4gICAgICAgIHN3aXRjaCAocGFyZW50LnRhZykge1xuICAgICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQgPSBwYXJlbnQuc3RhdGVOb2RlO1xuICAgICAgICAgICAgY3VycmVudFBhcmVudElzQ29udGFpbmVyID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhayBmaW5kUGFyZW50O1xuICAgICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgICBjdXJyZW50UGFyZW50ID0gcGFyZW50LnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICAgICAgY3VycmVudFBhcmVudElzQ29udGFpbmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrIGZpbmRQYXJlbnQ7XG4gICAgICAgICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgICAgICAgY3VycmVudFBhcmVudCA9IHBhcmVudC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICAgIGN1cnJlbnRQYXJlbnRJc0NvbnRhaW5lciA9IHRydWU7XG4gICAgICAgICAgICBicmVhayBmaW5kUGFyZW50O1xuICAgICAgICB9XG4gICAgICAgIHBhcmVudCA9IHBhcmVudC5yZXR1cm47XG4gICAgICB9XG4gICAgICBjdXJyZW50UGFyZW50SXNWYWxpZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IG5vZGUudGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgY29tbWl0TmVzdGVkVW5tb3VudHMobm9kZSk7XG4gICAgICAvLyBBZnRlciBhbGwgdGhlIGNoaWxkcmVuIGhhdmUgdW5tb3VudGVkLCBpdCBpcyBub3cgc2FmZSB0byByZW1vdmUgdGhlXG4gICAgICAvLyBub2RlIGZyb20gdGhlIHRyZWUuXG4gICAgICBpZiAoY3VycmVudFBhcmVudElzQ29udGFpbmVyKSB7XG4gICAgICAgIHJlbW92ZUNoaWxkRnJvbUNvbnRhaW5lcihjdXJyZW50UGFyZW50LCBub2RlLnN0YXRlTm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZW1vdmVDaGlsZChjdXJyZW50UGFyZW50LCBub2RlLnN0YXRlTm9kZSk7XG4gICAgICB9XG4gICAgICAvLyBEb24ndCB2aXNpdCBjaGlsZHJlbiBiZWNhdXNlIHdlIGFscmVhZHkgdmlzaXRlZCB0aGVtLlxuICAgIH0gZWxzZSBpZiAoZW5hYmxlU3VzcGVuc2VTZXJ2ZXJSZW5kZXJlciAmJiBub2RlLnRhZyA9PT0gRGVoeWRyYXRlZFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgICAvLyBEZWxldGUgdGhlIGRlaHlkcmF0ZWQgc3VzcGVuc2UgYm91bmRhcnkgYW5kIGFsbCBvZiBpdHMgY29udGVudC5cbiAgICAgIGlmIChjdXJyZW50UGFyZW50SXNDb250YWluZXIpIHtcbiAgICAgICAgY2xlYXJTdXNwZW5zZUJvdW5kYXJ5RnJvbUNvbnRhaW5lcihjdXJyZW50UGFyZW50LCBub2RlLnN0YXRlTm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGVhclN1c3BlbnNlQm91bmRhcnkoY3VycmVudFBhcmVudCwgbm9kZS5zdGF0ZU5vZGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobm9kZS50YWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFdoZW4gd2UgZ28gaW50byBhIHBvcnRhbCwgaXQgYmVjb21lcyB0aGUgcGFyZW50IHRvIHJlbW92ZSBmcm9tLlxuICAgICAgICAvLyBXZSB3aWxsIHJlYXNzaWduIGl0IGJhY2sgd2hlbiB3ZSBwb3AgdGhlIHBvcnRhbCBvbiB0aGUgd2F5IHVwLlxuICAgICAgICBjdXJyZW50UGFyZW50ID0gbm9kZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgY3VycmVudFBhcmVudElzQ29udGFpbmVyID0gdHJ1ZTtcbiAgICAgICAgLy8gVmlzaXQgY2hpbGRyZW4gYmVjYXVzZSBwb3J0YWxzIG1pZ2h0IGNvbnRhaW4gaG9zdCBjb21wb25lbnRzLlxuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29tbWl0VW5tb3VudChub2RlKTtcbiAgICAgIC8vIFZpc2l0IGNoaWxkcmVuIGJlY2F1c2Ugd2UgbWF5IGZpbmQgbW9yZSBob3N0IGNvbXBvbmVudHMgYmVsb3cuXG4gICAgICBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG5vZGUgPT09IGN1cnJlbnQkJDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSBjdXJyZW50JCQxKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdFBvcnRhbCkge1xuICAgICAgICAvLyBXaGVuIHdlIGdvIG91dCBvZiB0aGUgcG9ydGFsLCB3ZSBuZWVkIHRvIHJlc3RvcmUgdGhlIHBhcmVudC5cbiAgICAgICAgLy8gU2luY2Ugd2UgZG9uJ3Qga2VlcCBhIHN0YWNrIG9mIHRoZW0sIHdlIHdpbGwgc2VhcmNoIGZvciBpdC5cbiAgICAgICAgY3VycmVudFBhcmVudElzVmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0RGVsZXRpb24oY3VycmVudCQkMSkge1xuICBpZiAoc3VwcG9ydHNNdXRhdGlvbikge1xuICAgIC8vIFJlY3Vyc2l2ZWx5IGRlbGV0ZSBhbGwgaG9zdCBub2RlcyBmcm9tIHRoZSBwYXJlbnQuXG4gICAgLy8gRGV0YWNoIHJlZnMgYW5kIGNhbGwgY29tcG9uZW50V2lsbFVubW91bnQoKSBvbiB0aGUgd2hvbGUgc3VidHJlZS5cbiAgICB1bm1vdW50SG9zdENvbXBvbmVudHMoY3VycmVudCQkMSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gRGV0YWNoIHJlZnMgYW5kIGNhbGwgY29tcG9uZW50V2lsbFVubW91bnQoKSBvbiB0aGUgd2hvbGUgc3VidHJlZS5cbiAgICBjb21taXROZXN0ZWRVbm1vdW50cyhjdXJyZW50JCQxKTtcbiAgfVxuICBkZXRhY2hGaWJlcihjdXJyZW50JCQxKTtcbn1cblxuZnVuY3Rpb24gY29tbWl0V29yayhjdXJyZW50JCQxLCBmaW5pc2hlZFdvcmspIHtcbiAgaWYgKCFzdXBwb3J0c011dGF0aW9uKSB7XG4gICAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgLy8gTm90ZTogV2UgY3VycmVudGx5IG5ldmVyIHVzZSBNb3VudE11dGF0aW9uLCBidXQgdXNlTGF5b3V0IHVzZXNcbiAgICAgICAgICAvLyBVbm1vdW50TXV0YXRpb24uXG4gICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3QoVW5tb3VudE11dGF0aW9uLCBNb3VudE11dGF0aW9uLCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbW1pdENvbnRhaW5lcihmaW5pc2hlZFdvcmspO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIC8vIE5vdGU6IFdlIGN1cnJlbnRseSBuZXZlciB1c2UgTW91bnRNdXRhdGlvbiwgYnV0IHVzZUxheW91dCB1c2VzXG4gICAgICAgIC8vIFVubW91bnRNdXRhdGlvbi5cbiAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3QoVW5tb3VudE11dGF0aW9uLCBNb3VudE11dGF0aW9uLCBmaW5pc2hlZFdvcmspO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgaWYgKGluc3RhbmNlICE9IG51bGwpIHtcbiAgICAgICAgICAvLyBDb21taXQgdGhlIHdvcmsgcHJlcGFyZWQgZWFybGllci5cbiAgICAgICAgICB2YXIgbmV3UHJvcHMgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICAvLyBGb3IgaHlkcmF0aW9uIHdlIHJldXNlIHRoZSB1cGRhdGUgcGF0aCBidXQgd2UgdHJlYXQgdGhlIG9sZFByb3BzXG4gICAgICAgICAgLy8gYXMgdGhlIG5ld1Byb3BzLiBUaGUgdXBkYXRlUGF5bG9hZCB3aWxsIGNvbnRhaW4gdGhlIHJlYWwgY2hhbmdlIGluXG4gICAgICAgICAgLy8gdGhpcyBjYXNlLlxuICAgICAgICAgIHZhciBvbGRQcm9wcyA9IGN1cnJlbnQkJDEgIT09IG51bGwgPyBjdXJyZW50JCQxLm1lbW9pemVkUHJvcHMgOiBuZXdQcm9wcztcbiAgICAgICAgICB2YXIgdHlwZSA9IGZpbmlzaGVkV29yay50eXBlO1xuICAgICAgICAgIC8vIFRPRE86IFR5cGUgdGhlIHVwZGF0ZVF1ZXVlIHRvIGJlIHNwZWNpZmljIHRvIGhvc3QgY29tcG9uZW50cy5cbiAgICAgICAgICB2YXIgdXBkYXRlUGF5bG9hZCA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcbiAgICAgICAgICBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWUgPSBudWxsO1xuICAgICAgICAgIGlmICh1cGRhdGVQYXlsb2FkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb21taXRVcGRhdGUoaW5zdGFuY2UsIHVwZGF0ZVBheWxvYWQsIHR5cGUsIG9sZFByb3BzLCBuZXdQcm9wcywgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICB7XG4gICAgICAgICEoZmluaXNoZWRXb3JrLnN0YXRlTm9kZSAhPT0gbnVsbCkgPyBpbnZhcmlhbnQoZmFsc2UsICdUaGlzIHNob3VsZCBoYXZlIGEgdGV4dCBub2RlIGluaXRpYWxpemVkLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpIDogdm9pZCAwO1xuICAgICAgICB2YXIgdGV4dEluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgdmFyIG5ld1RleHQgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgLy8gRm9yIGh5ZHJhdGlvbiB3ZSByZXVzZSB0aGUgdXBkYXRlIHBhdGggYnV0IHdlIHRyZWF0IHRoZSBvbGRQcm9wc1xuICAgICAgICAvLyBhcyB0aGUgbmV3UHJvcHMuIFRoZSB1cGRhdGVQYXlsb2FkIHdpbGwgY29udGFpbiB0aGUgcmVhbCBjaGFuZ2UgaW5cbiAgICAgICAgLy8gdGhpcyBjYXNlLlxuICAgICAgICB2YXIgb2xkVGV4dCA9IGN1cnJlbnQkJDEgIT09IG51bGwgPyBjdXJyZW50JCQxLm1lbW9pemVkUHJvcHMgOiBuZXdUZXh0O1xuICAgICAgICBjb21taXRUZXh0VXBkYXRlKHRleHRJbnN0YW5jZSwgb2xkVGV4dCwgbmV3VGV4dCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgY2FzZSBQcm9maWxlcjpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBuZXdTdGF0ZSA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgIHZhciBuZXdEaWRUaW1lb3V0ID0gdm9pZCAwO1xuICAgICAgICB2YXIgcHJpbWFyeUNoaWxkUGFyZW50ID0gZmluaXNoZWRXb3JrO1xuICAgICAgICBpZiAobmV3U3RhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICBuZXdEaWRUaW1lb3V0ID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3RGlkVGltZW91dCA9IHRydWU7XG4gICAgICAgICAgcHJpbWFyeUNoaWxkUGFyZW50ID0gZmluaXNoZWRXb3JrLmNoaWxkO1xuICAgICAgICAgIGlmIChuZXdTdGF0ZS50aW1lZE91dEF0ID09PSBOb1dvcmspIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBjaGlsZHJlbiBoYWQgbm90IGFscmVhZHkgdGltZWQgb3V0LCByZWNvcmQgdGhlIHRpbWUuXG4gICAgICAgICAgICAvLyBUaGlzIGlzIHVzZWQgdG8gY29tcHV0ZSB0aGUgZWxhcHNlZCB0aW1lIGR1cmluZyBzdWJzZXF1ZW50XG4gICAgICAgICAgICAvLyBhdHRlbXB0cyB0byByZW5kZXIgdGhlIGNoaWxkcmVuLlxuICAgICAgICAgICAgbmV3U3RhdGUudGltZWRPdXRBdCA9IHJlcXVlc3RDdXJyZW50VGltZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcmltYXJ5Q2hpbGRQYXJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICBoaWRlT3JVbmhpZGVBbGxDaGlsZHJlbihwcmltYXJ5Q2hpbGRQYXJlbnQsIG5ld0RpZFRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhpcyBib3VuZGFyeSBqdXN0IHRpbWVkIG91dCwgdGhlbiBpdCB3aWxsIGhhdmUgYSBzZXQgb2YgdGhlbmFibGVzLlxuICAgICAgICAvLyBGb3IgZWFjaCB0aGVuYWJsZSwgYXR0YWNoIGEgbGlzdGVuZXIgc28gdGhhdCB3aGVuIGl0IHJlc29sdmVzLCBSZWFjdFxuICAgICAgICAvLyBhdHRlbXB0cyB0byByZS1yZW5kZXIgdGhlIGJvdW5kYXJ5IGluIHRoZSBwcmltYXJ5IChwcmUtdGltZW91dCkgc3RhdGUuXG4gICAgICAgIHZhciB0aGVuYWJsZXMgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG4gICAgICAgIGlmICh0aGVuYWJsZXMgIT09IG51bGwpIHtcbiAgICAgICAgICBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWUgPSBudWxsO1xuICAgICAgICAgIHZhciByZXRyeUNhY2hlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICBpZiAocmV0cnlDYWNoZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0cnlDYWNoZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGUgPSBuZXcgUG9zc2libHlXZWFrU2V0JDEoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhlbmFibGVzLmZvckVhY2goZnVuY3Rpb24gKHRoZW5hYmxlKSB7XG4gICAgICAgICAgICAvLyBNZW1vaXplIHVzaW5nIHRoZSBib3VuZGFyeSBmaWJlciB0byBwcmV2ZW50IHJlZHVuZGFudCBsaXN0ZW5lcnMuXG4gICAgICAgICAgICB2YXIgcmV0cnkgPSByZXRyeVRpbWVkT3V0Qm91bmRhcnkuYmluZChudWxsLCBmaW5pc2hlZFdvcmssIHRoZW5hYmxlKTtcbiAgICAgICAgICAgIGlmIChlbmFibGVTY2hlZHVsZXJUcmFjaW5nKSB7XG4gICAgICAgICAgICAgIHJldHJ5ID0gdHJhY2luZy51bnN0YWJsZV93cmFwKHJldHJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmV0cnlDYWNoZS5oYXModGhlbmFibGUpKSB7XG4gICAgICAgICAgICAgIHJldHJ5Q2FjaGUuYWRkKHRoZW5hYmxlKTtcbiAgICAgICAgICAgICAgdGhlbmFibGUudGhlbihyZXRyeSwgcmV0cnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAgaW52YXJpYW50KGZhbHNlLCAnVGhpcyB1bml0IG9mIHdvcmsgdGFnIHNob3VsZCBub3QgaGF2ZSBzaWRlLWVmZmVjdHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0UmVzZXRUZXh0Q29udGVudChjdXJyZW50JCQxKSB7XG4gIGlmICghc3VwcG9ydHNNdXRhdGlvbikge1xuICAgIHJldHVybjtcbiAgfVxuICByZXNldFRleHRDb250ZW50KGN1cnJlbnQkJDEuc3RhdGVOb2RlKTtcbn1cblxudmFyIFBvc3NpYmx5V2Vha1NldCA9IHR5cGVvZiBXZWFrU2V0ID09PSAnZnVuY3Rpb24nID8gV2Vha1NldCA6IFNldDtcbnZhciBQb3NzaWJseVdlYWtNYXAgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtNYXAgOiBNYXA7XG5cbmZ1bmN0aW9uIGNyZWF0ZVJvb3RFcnJvclVwZGF0ZShmaWJlciwgZXJyb3JJbmZvLCBleHBpcmF0aW9uVGltZSkge1xuICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKGV4cGlyYXRpb25UaW1lKTtcbiAgLy8gVW5tb3VudCB0aGUgcm9vdCBieSByZW5kZXJpbmcgbnVsbC5cbiAgdXBkYXRlLnRhZyA9IENhcHR1cmVVcGRhdGU7XG4gIC8vIENhdXRpb246IFJlYWN0IERldlRvb2xzIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJvcGVydHlcbiAgLy8gYmVpbmcgY2FsbGVkIFwiZWxlbWVudFwiLlxuICB1cGRhdGUucGF5bG9hZCA9IHsgZWxlbWVudDogbnVsbCB9O1xuICB2YXIgZXJyb3IgPSBlcnJvckluZm8udmFsdWU7XG4gIHVwZGF0ZS5jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICBvblVuY2F1Z2h0RXJyb3IoZXJyb3IpO1xuICAgIGxvZ0Vycm9yKGZpYmVyLCBlcnJvckluZm8pO1xuICB9O1xuICByZXR1cm4gdXBkYXRlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDbGFzc0Vycm9yVXBkYXRlKGZpYmVyLCBlcnJvckluZm8sIGV4cGlyYXRpb25UaW1lKSB7XG4gIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoZXhwaXJhdGlvblRpbWUpO1xuICB1cGRhdGUudGFnID0gQ2FwdHVyZVVwZGF0ZTtcbiAgdmFyIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9IGZpYmVyLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yO1xuICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBlcnJvciA9IGVycm9ySW5mby52YWx1ZTtcbiAgICB1cGRhdGUucGF5bG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoZXJyb3IpO1xuICAgIH07XG4gIH1cblxuICB2YXIgaW5zdCA9IGZpYmVyLnN0YXRlTm9kZTtcbiAgaWYgKGluc3QgIT09IG51bGwgJiYgdHlwZW9mIGluc3QuY29tcG9uZW50RGlkQ2F0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICB1cGRhdGUuY2FsbGJhY2sgPSBmdW5jdGlvbiBjYWxsYmFjaygpIHtcbiAgICAgIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIFRvIHByZXNlcnZlIHRoZSBwcmVleGlzdGluZyByZXRyeSBiZWhhdmlvciBvZiBlcnJvciBib3VuZGFyaWVzLFxuICAgICAgICAvLyB3ZSBrZWVwIHRyYWNrIG9mIHdoaWNoIG9uZXMgYWxyZWFkeSBmYWlsZWQgZHVyaW5nIHRoaXMgYmF0Y2guXG4gICAgICAgIC8vIFRoaXMgZ2V0cyByZXNldCBiZWZvcmUgd2UgeWllbGQgYmFjayB0byB0aGUgYnJvd3Nlci5cbiAgICAgICAgLy8gVE9ETzogV2FybiBpbiBzdHJpY3QgbW9kZSBpZiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgaXNcbiAgICAgICAgLy8gbm90IGRlZmluZWQuXG4gICAgICAgIG1hcmtMZWdhY3lFcnJvckJvdW5kYXJ5QXNGYWlsZWQodGhpcyk7XG4gICAgICB9XG4gICAgICB2YXIgZXJyb3IgPSBlcnJvckluZm8udmFsdWU7XG4gICAgICB2YXIgc3RhY2sgPSBlcnJvckluZm8uc3RhY2s7XG4gICAgICBsb2dFcnJvcihmaWJlciwgZXJyb3JJbmZvKTtcbiAgICAgIHRoaXMuY29tcG9uZW50RGlkQ2F0Y2goZXJyb3IsIHtcbiAgICAgICAgY29tcG9uZW50U3RhY2s6IHN0YWNrICE9PSBudWxsID8gc3RhY2sgOiAnJ1xuICAgICAgfSk7XG4gICAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgLy8gSWYgY29tcG9uZW50RGlkQ2F0Y2ggaXMgdGhlIG9ubHkgZXJyb3IgYm91bmRhcnkgbWV0aG9kIGRlZmluZWQsXG4gICAgICAgICAgLy8gdGhlbiBpdCBuZWVkcyB0byBjYWxsIHNldFN0YXRlIHRvIHJlY292ZXIgZnJvbSBlcnJvcnMuXG4gICAgICAgICAgLy8gSWYgbm8gc3RhdGUgdXBkYXRlIGlzIHNjaGVkdWxlZCB0aGVuIHRoZSBib3VuZGFyeSB3aWxsIHN3YWxsb3cgdGhlIGVycm9yLlxuICAgICAgICAgICEoZmliZXIuZXhwaXJhdGlvblRpbWUgPT09IFN5bmMpID8gd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnJXM6IEVycm9yIGJvdW5kYXJpZXMgc2hvdWxkIGltcGxlbWVudCBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoKS4gJyArICdJbiB0aGF0IG1ldGhvZCwgcmV0dXJuIGEgc3RhdGUgdXBkYXRlIHRvIGRpc3BsYXkgYW4gZXJyb3IgbWVzc2FnZSBvciBmYWxsYmFjayBVSS4nLCBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdVbmtub3duJykgOiB2b2lkIDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIHJldHVybiB1cGRhdGU7XG59XG5cbmZ1bmN0aW9uIGF0dGFjaFBpbmdMaXN0ZW5lcihyb290LCByZW5kZXJFeHBpcmF0aW9uVGltZSwgdGhlbmFibGUpIHtcbiAgLy8gQXR0YWNoIGEgbGlzdGVuZXIgdG8gdGhlIHByb21pc2UgdG8gXCJwaW5nXCIgdGhlIHJvb3QgYW5kIHJldHJ5LiBCdXRcbiAgLy8gb25seSBpZiBvbmUgZG9lcyBub3QgYWxyZWFkeSBleGlzdCBmb3IgdGhlIGN1cnJlbnQgcmVuZGVyIGV4cGlyYXRpb25cbiAgLy8gdGltZSAod2hpY2ggYWN0cyBsaWtlIGEgXCJ0aHJlYWQgSURcIiBoZXJlKS5cbiAgdmFyIHBpbmdDYWNoZSA9IHJvb3QucGluZ0NhY2hlO1xuICB2YXIgdGhyZWFkSURzID0gdm9pZCAwO1xuICBpZiAocGluZ0NhY2hlID09PSBudWxsKSB7XG4gICAgcGluZ0NhY2hlID0gcm9vdC5waW5nQ2FjaGUgPSBuZXcgUG9zc2libHlXZWFrTWFwKCk7XG4gICAgdGhyZWFkSURzID0gbmV3IFNldCgpO1xuICAgIHBpbmdDYWNoZS5zZXQodGhlbmFibGUsIHRocmVhZElEcyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyZWFkSURzID0gcGluZ0NhY2hlLmdldCh0aGVuYWJsZSk7XG4gICAgaWYgKHRocmVhZElEcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJlYWRJRHMgPSBuZXcgU2V0KCk7XG4gICAgICBwaW5nQ2FjaGUuc2V0KHRoZW5hYmxlLCB0aHJlYWRJRHMpO1xuICAgIH1cbiAgfVxuICBpZiAoIXRocmVhZElEcy5oYXMocmVuZGVyRXhwaXJhdGlvblRpbWUpKSB7XG4gICAgLy8gTWVtb2l6ZSB1c2luZyB0aGUgdGhyZWFkIElEIHRvIHByZXZlbnQgcmVkdW5kYW50IGxpc3RlbmVycy5cbiAgICB0aHJlYWRJRHMuYWRkKHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgICB2YXIgcGluZyA9IHBpbmdTdXNwZW5kZWRSb290LmJpbmQobnVsbCwgcm9vdCwgdGhlbmFibGUsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgICBpZiAoZW5hYmxlU2NoZWR1bGVyVHJhY2luZykge1xuICAgICAgcGluZyA9IHRyYWNpbmcudW5zdGFibGVfd3JhcChwaW5nKTtcbiAgICB9XG4gICAgdGhlbmFibGUudGhlbihwaW5nLCBwaW5nKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd0V4Y2VwdGlvbihyb290LCByZXR1cm5GaWJlciwgc291cmNlRmliZXIsIHZhbHVlLCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICAvLyBUaGUgc291cmNlIGZpYmVyIGRpZCBub3QgY29tcGxldGUuXG4gIHNvdXJjZUZpYmVyLmVmZmVjdFRhZyB8PSBJbmNvbXBsZXRlO1xuICAvLyBJdHMgZWZmZWN0IGxpc3QgaXMgbm8gbG9uZ2VyIHZhbGlkLlxuICBzb3VyY2VGaWJlci5maXJzdEVmZmVjdCA9IHNvdXJjZUZpYmVyLmxhc3RFZmZlY3QgPSBudWxsO1xuXG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gVGhpcyBpcyBhIHRoZW5hYmxlLlxuICAgIHZhciB0aGVuYWJsZSA9IHZhbHVlO1xuXG4gICAgLy8gRmluZCB0aGUgZWFybGllc3QgdGltZW91dCB0aHJlc2hvbGQgb2YgYWxsIHRoZSBwbGFjZWhvbGRlcnMgaW4gdGhlXG4gICAgLy8gYW5jZXN0b3IgcGF0aC4gV2UgY291bGQgYXZvaWQgdGhpcyB0cmF2ZXJzYWwgYnkgc3RvcmluZyB0aGUgdGhyZXNob2xkcyBvblxuICAgIC8vIHRoZSBzdGFjaywgYnV0IHdlIGNob29zZSBub3QgdG8gYmVjYXVzZSB3ZSBvbmx5IGhpdCB0aGlzIHBhdGggaWYgd2UncmVcbiAgICAvLyBJTy1ib3VuZCAoaS5lLiBpZiBzb21ldGhpbmcgc3VzcGVuZHMpLiBXaGVyZWFzIHRoZSBzdGFjayBpcyB1c2VkIGV2ZW4gaW5cbiAgICAvLyB0aGUgbm9uLUlPLSBib3VuZCBjYXNlLlxuICAgIHZhciBfd29ya0luUHJvZ3Jlc3MgPSByZXR1cm5GaWJlcjtcbiAgICB2YXIgZWFybGllc3RUaW1lb3V0TXMgPSAtMTtcbiAgICB2YXIgc3RhcnRUaW1lTXMgPSAtMTtcbiAgICBkbyB7XG4gICAgICBpZiAoX3dvcmtJblByb2dyZXNzLnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAgICAgdmFyIGN1cnJlbnQkJDEgPSBfd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlO1xuICAgICAgICBpZiAoY3VycmVudCQkMSAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBjdXJyZW50U3RhdGUgPSBjdXJyZW50JCQxLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gUmVhY2hlZCBhIGJvdW5kYXJ5IHRoYXQgYWxyZWFkeSB0aW1lZCBvdXQuIERvIG5vdCBzZWFyY2hcbiAgICAgICAgICAgIC8vIGFueSBmdXJ0aGVyLlxuICAgICAgICAgICAgdmFyIHRpbWVkT3V0QXQgPSBjdXJyZW50U3RhdGUudGltZWRPdXRBdDtcbiAgICAgICAgICAgIHN0YXJ0VGltZU1zID0gZXhwaXJhdGlvblRpbWVUb01zKHRpbWVkT3V0QXQpO1xuICAgICAgICAgICAgLy8gRG8gbm90IHNlYXJjaCBhbnkgZnVydGhlci5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgdGltZW91dFByb3BNcyA9IF93b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMubWF4RHVyYXRpb247XG4gICAgICAgIGlmICh0eXBlb2YgdGltZW91dFByb3BNcyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBpZiAodGltZW91dFByb3BNcyA8PSAwKSB7XG4gICAgICAgICAgICBlYXJsaWVzdFRpbWVvdXRNcyA9IDA7XG4gICAgICAgICAgfSBlbHNlIGlmIChlYXJsaWVzdFRpbWVvdXRNcyA9PT0gLTEgfHwgdGltZW91dFByb3BNcyA8IGVhcmxpZXN0VGltZW91dE1zKSB7XG4gICAgICAgICAgICBlYXJsaWVzdFRpbWVvdXRNcyA9IHRpbWVvdXRQcm9wTXM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBJZiB0aGVyZSBpcyBhIERlaHlkcmF0ZWRTdXNwZW5zZUNvbXBvbmVudCB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIGJlY2F1c2VcbiAgICAgIC8vIGlmIHNvbWV0aGluZyBzdXNwZW5kcyBpbnNpZGUgaXQsIHdlIHdpbGwgc2ltcGx5IGxlYXZlIHRoYXQgYXMgZGVoeWRyYXRlZC4gSXRcbiAgICAgIC8vIHdpbGwgbmV2ZXIgdGltZW91dC5cbiAgICAgIF93b3JrSW5Qcm9ncmVzcyA9IF93b3JrSW5Qcm9ncmVzcy5yZXR1cm47XG4gICAgfSB3aGlsZSAoX3dvcmtJblByb2dyZXNzICE9PSBudWxsKTtcblxuICAgIC8vIFNjaGVkdWxlIHRoZSBuZWFyZXN0IFN1c3BlbnNlIHRvIHJlLXJlbmRlciB0aGUgdGltZWQgb3V0IHZpZXcuXG4gICAgX3dvcmtJblByb2dyZXNzID0gcmV0dXJuRmliZXI7XG4gICAgZG8ge1xuICAgICAgaWYgKF93b3JrSW5Qcm9ncmVzcy50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50ICYmIHNob3VsZENhcHR1cmVTdXNwZW5zZShfd29ya0luUHJvZ3Jlc3MpKSB7XG4gICAgICAgIC8vIEZvdW5kIHRoZSBuZWFyZXN0IGJvdW5kYXJ5LlxuXG4gICAgICAgIC8vIFN0YXNoIHRoZSBwcm9taXNlIG9uIHRoZSBib3VuZGFyeSBmaWJlci4gSWYgdGhlIGJvdW5kYXJ5IHRpbWVzIG91dCwgd2UnbGxcbiAgICAgICAgdmFyIHRoZW5hYmxlcyA9IF93b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcbiAgICAgICAgaWYgKHRoZW5hYmxlcyA9PT0gbnVsbCkge1xuICAgICAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IG5ldyBTZXQoKTtcbiAgICAgICAgICB1cGRhdGVRdWV1ZS5hZGQodGhlbmFibGUpO1xuICAgICAgICAgIF93b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IHVwZGF0ZVF1ZXVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoZW5hYmxlcy5hZGQodGhlbmFibGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlIGJvdW5kYXJ5IGlzIG91dHNpZGUgb2YgY29uY3VycmVudCBtb2RlLCB3ZSBzaG91bGQgKm5vdCpcbiAgICAgICAgLy8gc3VzcGVuZCB0aGUgY29tbWl0LiBQcmV0ZW5kIGFzIGlmIHRoZSBzdXNwZW5kZWQgY29tcG9uZW50IHJlbmRlcmVkXG4gICAgICAgIC8vIG51bGwgYW5kIGtlZXAgcmVuZGVyaW5nLiBJbiB0aGUgY29tbWl0IHBoYXNlLCB3ZSdsbCBzY2hlZHVsZSBhXG4gICAgICAgIC8vIHN1YnNlcXVlbnQgc3luY2hyb25vdXMgdXBkYXRlIHRvIHJlLXJlbmRlciB0aGUgU3VzcGVuc2UuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIE5vdGU6IEl0IGRvZXNuJ3QgbWF0dGVyIHdoZXRoZXIgdGhlIGNvbXBvbmVudCB0aGF0IHN1c3BlbmRlZCB3YXNcbiAgICAgICAgLy8gaW5zaWRlIGEgY29uY3VycmVudCBtb2RlIHRyZWUuIElmIHRoZSBTdXNwZW5zZSBpcyBvdXRzaWRlIG9mIGl0LCB3ZVxuICAgICAgICAvLyBzaG91bGQgKm5vdCogc3VzcGVuZCB0aGUgY29tbWl0LlxuICAgICAgICBpZiAoKF93b3JrSW5Qcm9ncmVzcy5tb2RlICYgQ29uY3VycmVudE1vZGUpID09PSBOb0VmZmVjdCkge1xuICAgICAgICAgIF93b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgfD0gRGlkQ2FwdHVyZTtcblxuICAgICAgICAgIC8vIFdlJ3JlIGdvaW5nIHRvIGNvbW1pdCB0aGlzIGZpYmVyIGV2ZW4gdGhvdWdoIGl0IGRpZG4ndCBjb21wbGV0ZS5cbiAgICAgICAgICAvLyBCdXQgd2Ugc2hvdWxkbid0IGNhbGwgYW55IGxpZmVjeWNsZSBtZXRob2RzIG9yIGNhbGxiYWNrcy4gUmVtb3ZlXG4gICAgICAgICAgLy8gYWxsIGxpZmVjeWNsZSBlZmZlY3QgdGFncy5cbiAgICAgICAgICBzb3VyY2VGaWJlci5lZmZlY3RUYWcgJj0gfihMaWZlY3ljbGVFZmZlY3RNYXNrIHwgSW5jb21wbGV0ZSk7XG5cbiAgICAgICAgICBpZiAoc291cmNlRmliZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRTb3VyY2VGaWJlciA9IHNvdXJjZUZpYmVyLmFsdGVybmF0ZTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50U291cmNlRmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIG5ldyBtb3VudC4gQ2hhbmdlIHRoZSB0YWcgc28gaXQncyBub3QgbWlzdGFrZW4gZm9yIGFcbiAgICAgICAgICAgICAgLy8gY29tcGxldGVkIGNsYXNzIGNvbXBvbmVudC4gRm9yIGV4YW1wbGUsIHdlIHNob3VsZCBub3QgY2FsbFxuICAgICAgICAgICAgICAvLyBjb21wb25lbnRXaWxsVW5tb3VudCBpZiBpdCBpcyBkZWxldGVkLlxuICAgICAgICAgICAgICBzb3VyY2VGaWJlci50YWcgPSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBXaGVuIHdlIHRyeSByZW5kZXJpbmcgYWdhaW4sIHdlIHNob3VsZCBub3QgcmV1c2UgdGhlIGN1cnJlbnQgZmliZXIsXG4gICAgICAgICAgICAgIC8vIHNpbmNlIGl0J3Mga25vd24gdG8gYmUgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBVc2UgYSBmb3JjZSB1cGR0ZSB0b1xuICAgICAgICAgICAgICAvLyBwcmV2ZW50IGEgYmFpbCBvdXQuXG4gICAgICAgICAgICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoU3luYyk7XG4gICAgICAgICAgICAgIHVwZGF0ZS50YWcgPSBGb3JjZVVwZGF0ZTtcbiAgICAgICAgICAgICAgZW5xdWV1ZVVwZGF0ZShzb3VyY2VGaWJlciwgdXBkYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBUaGUgc291cmNlIGZpYmVyIGRpZCBub3QgY29tcGxldGUuIE1hcmsgaXQgd2l0aCBTeW5jIHByaW9yaXR5IHRvXG4gICAgICAgICAgLy8gaW5kaWNhdGUgdGhhdCBpdCBzdGlsbCBoYXMgcGVuZGluZyB3b3JrLlxuICAgICAgICAgIHNvdXJjZUZpYmVyLmV4cGlyYXRpb25UaW1lID0gU3luYztcblxuICAgICAgICAgIC8vIEV4aXQgd2l0aG91dCBzdXNwZW5kaW5nLlxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbmZpcm1lZCB0aGF0IHRoZSBib3VuZGFyeSBpcyBpbiBhIGNvbmN1cnJlbnQgbW9kZSB0cmVlLiBDb250aW51ZVxuICAgICAgICAvLyB3aXRoIHRoZSBub3JtYWwgc3VzcGVuZCBwYXRoLlxuXG4gICAgICAgIGF0dGFjaFBpbmdMaXN0ZW5lcihyb290LCByZW5kZXJFeHBpcmF0aW9uVGltZSwgdGhlbmFibGUpO1xuXG4gICAgICAgIHZhciBhYnNvbHV0ZVRpbWVvdXRNcyA9IHZvaWQgMDtcbiAgICAgICAgaWYgKGVhcmxpZXN0VGltZW91dE1zID09PSAtMSkge1xuICAgICAgICAgIC8vIElmIG5vIGV4cGxpY2l0IHRocmVzaG9sZCBpcyBnaXZlbiwgZGVmYXVsdCB0byBhbiBhcmJpdHJhcmlseSBsYXJnZVxuICAgICAgICAgIC8vIHZhbHVlLiBUaGUgYWN0dWFsIHNpemUgZG9lc24ndCBtYXR0ZXIgYmVjYXVzZSB0aGUgdGhyZXNob2xkIGZvciB0aGVcbiAgICAgICAgICAvLyB3aG9sZSB0cmVlIHdpbGwgYmUgY2xhbXBlZCB0byB0aGUgZXhwaXJhdGlvbiB0aW1lLlxuICAgICAgICAgIGFic29sdXRlVGltZW91dE1zID0gbWF4U2lnbmVkMzFCaXRJbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHN0YXJ0VGltZU1zID09PSAtMSkge1xuICAgICAgICAgICAgLy8gVGhpcyBzdXNwZW5kIGhhcHBlbmVkIG91dHNpZGUgb2YgYW55IGFscmVhZHkgdGltZWQtb3V0XG4gICAgICAgICAgICAvLyBwbGFjZWhvbGRlcnMuIFdlIGRvbid0IGtub3cgZXhhY3RseSB3aGVuIHRoZSB1cGRhdGUgd2FzXG4gICAgICAgICAgICAvLyBzY2hlZHVsZWQsIGJ1dCB3ZSBjYW4gaW5mZXIgYW4gYXBwcm94aW1hdGUgc3RhcnQgdGltZSBmcm9tIHRoZVxuICAgICAgICAgICAgLy8gZXhwaXJhdGlvbiB0aW1lLiBGaXJzdCwgZmluZCB0aGUgZWFybGllc3QgdW5jb21taXR0ZWQgZXhwaXJhdGlvblxuICAgICAgICAgICAgLy8gdGltZSBpbiB0aGUgdHJlZSwgaW5jbHVkaW5nIHdvcmsgdGhhdCBpcyBzdXNwZW5kZWQuIFRoZW4gc3VidHJhY3RcbiAgICAgICAgICAgIC8vIHRoZSBvZmZzZXQgdXNlZCB0byBjb21wdXRlIGFuIGFzeW5jIHVwZGF0ZSdzIGV4cGlyYXRpb24gdGltZS5cbiAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBjYXVzZSBoaWdoIHByaW9yaXR5IChpbnRlcmFjdGl2ZSkgd29yayB0byBleHBpcmVcbiAgICAgICAgICAgIC8vIGVhcmxpZXIgdGhhbiBuZWNlc3NhcnksIGJ1dCB3ZSBjYW4gYWNjb3VudCBmb3IgdGhpcyBieSBhZGp1c3RpbmdcbiAgICAgICAgICAgIC8vIGZvciB0aGUgSnVzdCBOb3RpY2VhYmxlIERpZmZlcmVuY2UuXG4gICAgICAgICAgICB2YXIgZWFybGllc3RFeHBpcmF0aW9uVGltZSA9IGZpbmRFYXJsaWVzdE91dHN0YW5kaW5nUHJpb3JpdHlMZXZlbChyb290LCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgICAgICAgICB2YXIgZWFybGllc3RFeHBpcmF0aW9uVGltZU1zID0gZXhwaXJhdGlvblRpbWVUb01zKGVhcmxpZXN0RXhwaXJhdGlvblRpbWUpO1xuICAgICAgICAgICAgc3RhcnRUaW1lTXMgPSBlYXJsaWVzdEV4cGlyYXRpb25UaW1lTXMgLSBMT1dfUFJJT1JJVFlfRVhQSVJBVElPTjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWJzb2x1dGVUaW1lb3V0TXMgPSBzdGFydFRpbWVNcyArIGVhcmxpZXN0VGltZW91dE1zO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTWFyayB0aGUgZWFybGllc3QgdGltZW91dCBpbiB0aGUgc3VzcGVuZGVkIGZpYmVyJ3MgYW5jZXN0b3IgcGF0aC5cbiAgICAgICAgLy8gQWZ0ZXIgY29tcGxldGluZyB0aGUgcm9vdCwgd2UnbGwgdGFrZSB0aGUgbGFyZ2VzdCBvZiBhbGwgdGhlXG4gICAgICAgIC8vIHN1c3BlbmRlZCBmaWJlcidzIHRpbWVvdXRzIGFuZCB1c2UgaXQgdG8gY29tcHV0ZSBhIHRpbWVvdXQgZm9yIHRoZVxuICAgICAgICAvLyB3aG9sZSB0cmVlLlxuICAgICAgICByZW5kZXJEaWRTdXNwZW5kKHJvb3QsIGFic29sdXRlVGltZW91dE1zLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG5cbiAgICAgICAgX3dvcmtJblByb2dyZXNzLmVmZmVjdFRhZyB8PSBTaG91bGRDYXB0dXJlO1xuICAgICAgICBfd29ya0luUHJvZ3Jlc3MuZXhwaXJhdGlvblRpbWUgPSByZW5kZXJFeHBpcmF0aW9uVGltZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIGlmIChlbmFibGVTdXNwZW5zZVNlcnZlclJlbmRlcmVyICYmIF93b3JrSW5Qcm9ncmVzcy50YWcgPT09IERlaHlkcmF0ZWRTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgICAgICBhdHRhY2hQaW5nTGlzdGVuZXIocm9vdCwgcmVuZGVyRXhwaXJhdGlvblRpbWUsIHRoZW5hYmxlKTtcblxuICAgICAgICAvLyBTaW5jZSB3ZSBhbHJlYWR5IGhhdmUgYSBjdXJyZW50IGZpYmVyLCB3ZSBjYW4gZWFnZXJseSBhZGQgYSByZXRyeSBsaXN0ZW5lci5cbiAgICAgICAgdmFyIHJldHJ5Q2FjaGUgPSBfd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgaWYgKHJldHJ5Q2FjaGUgPT09IG51bGwpIHtcbiAgICAgICAgICByZXRyeUNhY2hlID0gX3dvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBuZXcgUG9zc2libHlXZWFrU2V0KCk7XG4gICAgICAgICAgdmFyIF9jdXJyZW50ID0gX3dvcmtJblByb2dyZXNzLmFsdGVybmF0ZTtcbiAgICAgICAgICAhX2N1cnJlbnQgPyBpbnZhcmlhbnQoZmFsc2UsICdBIGRlaHlkcmF0ZWQgc3VzcGVuc2UgYm91bmRhcnkgbXVzdCBjb21taXQgYmVmb3JlIHRyeWluZyB0byByZW5kZXIuIFRoaXMgaXMgcHJvYmFibHkgYSBidWcgaW4gUmVhY3QuJykgOiB2b2lkIDA7XG4gICAgICAgICAgX2N1cnJlbnQubWVtb2l6ZWRTdGF0ZSA9IHJldHJ5Q2FjaGU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWVtb2l6ZSB1c2luZyB0aGUgYm91bmRhcnkgZmliZXIgdG8gcHJldmVudCByZWR1bmRhbnQgbGlzdGVuZXJzLlxuICAgICAgICBpZiAoIXJldHJ5Q2FjaGUuaGFzKHRoZW5hYmxlKSkge1xuICAgICAgICAgIHJldHJ5Q2FjaGUuYWRkKHRoZW5hYmxlKTtcbiAgICAgICAgICB2YXIgcmV0cnkgPSByZXRyeVRpbWVkT3V0Qm91bmRhcnkuYmluZChudWxsLCBfd29ya0luUHJvZ3Jlc3MsIHRoZW5hYmxlKTtcbiAgICAgICAgICBpZiAoZW5hYmxlU2NoZWR1bGVyVHJhY2luZykge1xuICAgICAgICAgICAgcmV0cnkgPSB0cmFjaW5nLnVuc3RhYmxlX3dyYXAocmV0cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGVuYWJsZS50aGVuKHJldHJ5LCByZXRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgX3dvcmtJblByb2dyZXNzLmVmZmVjdFRhZyB8PSBTaG91bGRDYXB0dXJlO1xuICAgICAgICBfd29ya0luUHJvZ3Jlc3MuZXhwaXJhdGlvblRpbWUgPSByZW5kZXJFeHBpcmF0aW9uVGltZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gVGhpcyBib3VuZGFyeSBhbHJlYWR5IGNhcHR1cmVkIGR1cmluZyB0aGlzIHJlbmRlci4gQ29udGludWUgdG8gdGhlIG5leHRcbiAgICAgIC8vIGJvdW5kYXJ5LlxuICAgICAgX3dvcmtJblByb2dyZXNzID0gX3dvcmtJblByb2dyZXNzLnJldHVybjtcbiAgICB9IHdoaWxlIChfd29ya0luUHJvZ3Jlc3MgIT09IG51bGwpO1xuICAgIC8vIE5vIGJvdW5kYXJ5IHdhcyBmb3VuZC4gRmFsbHRocm91Z2ggdG8gZXJyb3IgbW9kZS5cbiAgICAvLyBUT0RPOiBVc2UgaW52YXJpYW50IHNvIHRoZSBtZXNzYWdlIGlzIHN0cmlwcGVkIGluIHByb2Q/XG4gICAgdmFsdWUgPSBuZXcgRXJyb3IoKGdldENvbXBvbmVudE5hbWUoc291cmNlRmliZXIudHlwZSkgfHwgJ0EgUmVhY3QgY29tcG9uZW50JykgKyAnIHN1c3BlbmRlZCB3aGlsZSByZW5kZXJpbmcsIGJ1dCBubyBmYWxsYmFjayBVSSB3YXMgc3BlY2lmaWVkLlxcbicgKyAnXFxuJyArICdBZGQgYSA8U3VzcGVuc2UgZmFsbGJhY2s9Li4uPiBjb21wb25lbnQgaGlnaGVyIGluIHRoZSB0cmVlIHRvICcgKyAncHJvdmlkZSBhIGxvYWRpbmcgaW5kaWNhdG9yIG9yIHBsYWNlaG9sZGVyIHRvIGRpc3BsYXkuJyArIGdldFN0YWNrQnlGaWJlckluRGV2QW5kUHJvZChzb3VyY2VGaWJlcikpO1xuICB9XG5cbiAgLy8gV2UgZGlkbid0IGZpbmQgYSBib3VuZGFyeSB0aGF0IGNvdWxkIGhhbmRsZSB0aGlzIHR5cGUgb2YgZXhjZXB0aW9uLiBTdGFydFxuICAvLyBvdmVyIGFuZCB0cmF2ZXJzZSBwYXJlbnQgcGF0aCBhZ2FpbiwgdGhpcyB0aW1lIHRyZWF0aW5nIHRoZSBleGNlcHRpb25cbiAgLy8gYXMgYW4gZXJyb3IuXG4gIHJlbmRlckRpZEVycm9yKCk7XG4gIHZhbHVlID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZSh2YWx1ZSwgc291cmNlRmliZXIpO1xuICB2YXIgd29ya0luUHJvZ3Jlc3MgPSByZXR1cm5GaWJlcjtcbiAgZG8ge1xuICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIF9lcnJvckluZm8gPSB2YWx1ZTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgfD0gU2hvdWxkQ2FwdHVyZTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5leHBpcmF0aW9uVGltZSA9IHJlbmRlckV4cGlyYXRpb25UaW1lO1xuICAgICAgICAgIHZhciBfdXBkYXRlID0gY3JlYXRlUm9vdEVycm9yVXBkYXRlKHdvcmtJblByb2dyZXNzLCBfZXJyb3JJbmZvLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgICAgICAgZW5xdWV1ZUNhcHR1cmVkVXBkYXRlKHdvcmtJblByb2dyZXNzLCBfdXBkYXRlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgIC8vIENhcHR1cmUgYW5kIHJldHJ5XG4gICAgICAgIHZhciBlcnJvckluZm8gPSB2YWx1ZTtcbiAgICAgICAgdmFyIGN0b3IgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnICYgRGlkQ2FwdHVyZSkgPT09IE5vRWZmZWN0ICYmICh0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgPT09ICdmdW5jdGlvbicgfHwgaW5zdGFuY2UgIT09IG51bGwgJiYgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZENhdGNoID09PSAnZnVuY3Rpb24nICYmICFpc0FscmVhZHlGYWlsZWRMZWdhY3lFcnJvckJvdW5kYXJ5KGluc3RhbmNlKSkpIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgfD0gU2hvdWxkQ2FwdHVyZTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5leHBpcmF0aW9uVGltZSA9IHJlbmRlckV4cGlyYXRpb25UaW1lO1xuICAgICAgICAgIC8vIFNjaGVkdWxlIHRoZSBlcnJvciBib3VuZGFyeSB0byByZS1yZW5kZXIgdXNpbmcgdXBkYXRlZCBzdGF0ZVxuICAgICAgICAgIHZhciBfdXBkYXRlMiA9IGNyZWF0ZUNsYXNzRXJyb3JVcGRhdGUod29ya0luUHJvZ3Jlc3MsIGVycm9ySW5mbywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgICAgICAgIGVucXVldWVDYXB0dXJlZFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgX3VwZGF0ZTIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB3b3JrSW5Qcm9ncmVzcyA9IHdvcmtJblByb2dyZXNzLnJldHVybjtcbiAgfSB3aGlsZSAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwpO1xufVxuXG5mdW5jdGlvbiB1bndpbmRXb3JrKHdvcmtJblByb2dyZXNzLCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBDb21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgICAgIHBvcENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlZmZlY3RUYWcgPSB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWc7XG4gICAgICAgIGlmIChlZmZlY3RUYWcgJiBTaG91bGRDYXB0dXJlKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnID0gZWZmZWN0VGFnICYgflNob3VsZENhcHR1cmUgfCBEaWRDYXB0dXJlO1xuICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICBwb3BIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcG9wVG9wTGV2ZWxDb250ZXh0T2JqZWN0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgdmFyIF9lZmZlY3RUYWcgPSB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWc7XG4gICAgICAgICEoKF9lZmZlY3RUYWcgJiBEaWRDYXB0dXJlKSA9PT0gTm9FZmZlY3QpID8gaW52YXJpYW50KGZhbHNlLCAnVGhlIHJvb3QgZmFpbGVkIHRvIHVubW91bnQgYWZ0ZXIgYW4gZXJyb3IuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKSA6IHZvaWQgMDtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnID0gX2VmZmVjdFRhZyAmIH5TaG91bGRDYXB0dXJlIHwgRGlkQ2FwdHVyZTtcbiAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgICAgfVxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgLy8gVE9ETzogcG9wSHlkcmF0aW9uU3RhdGVcbiAgICAgICAgcG9wSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgX2VmZmVjdFRhZzIgPSB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWc7XG4gICAgICAgIGlmIChfZWZmZWN0VGFnMiAmIFNob3VsZENhcHR1cmUpIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgPSBfZWZmZWN0VGFnMiAmIH5TaG91bGRDYXB0dXJlIHwgRGlkQ2FwdHVyZTtcbiAgICAgICAgICAvLyBDYXB0dXJlZCBhIHN1c3BlbnNlIGVmZmVjdC4gUmUtcmVuZGVyIHRoZSBib3VuZGFyeS5cbiAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgY2FzZSBEZWh5ZHJhdGVkU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIGlmIChlbmFibGVTdXNwZW5zZVNlcnZlclJlbmRlcmVyKSB7XG4gICAgICAgICAgLy8gVE9ETzogcG9wSHlkcmF0aW9uU3RhdGVcbiAgICAgICAgICB2YXIgX2VmZmVjdFRhZzMgPSB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWc7XG4gICAgICAgICAgaWYgKF9lZmZlY3RUYWczICYgU2hvdWxkQ2FwdHVyZSkge1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnID0gX2VmZmVjdFRhZzMgJiB+U2hvdWxkQ2FwdHVyZSB8IERpZENhcHR1cmU7XG4gICAgICAgICAgICAvLyBDYXB0dXJlZCBhIHN1c3BlbnNlIGVmZmVjdC4gUmUtcmVuZGVyIHRoZSBib3VuZGFyeS5cbiAgICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgcG9wSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICBjYXNlIENvbnRleHRQcm92aWRlcjpcbiAgICAgIHBvcFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bndpbmRJbnRlcnJ1cHRlZFdvcmsoaW50ZXJydXB0ZWRXb3JrKSB7XG4gIHN3aXRjaCAoaW50ZXJydXB0ZWRXb3JrLnRhZykge1xuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBjaGlsZENvbnRleHRUeXBlcyA9IGludGVycnVwdGVkV29yay50eXBlLmNoaWxkQ29udGV4dFR5cGVzO1xuICAgICAgICBpZiAoY2hpbGRDb250ZXh0VHlwZXMgIT09IG51bGwgJiYgY2hpbGRDb250ZXh0VHlwZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHBvcENvbnRleHQoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICBwb3BIb3N0Q29udGFpbmVyKGludGVycnVwdGVkV29yayk7XG4gICAgICAgIHBvcFRvcExldmVsQ29udGV4dE9iamVjdChpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcEhvc3RDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHBvcEhvc3RDb250YWluZXIoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgcG9wUHJvdmlkZXIoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXI7XG52YXIgUmVhY3RDdXJyZW50T3duZXIkMiA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyO1xuXG5cbnZhciBkaWRXYXJuQWJvdXRTdGF0ZVRyYW5zaXRpb24gPSB2b2lkIDA7XG52YXIgZGlkV2FyblNldFN0YXRlQ2hpbGRDb250ZXh0ID0gdm9pZCAwO1xudmFyIHdhcm5BYm91dFVwZGF0ZU9uVW5tb3VudGVkID0gdm9pZCAwO1xudmFyIHdhcm5BYm91dEludmFsaWRVcGRhdGVzID0gdm9pZCAwO1xuXG5pZiAoZW5hYmxlU2NoZWR1bGVyVHJhY2luZykge1xuICAvLyBQcm92aWRlIGV4cGxpY2l0IGVycm9yIG1lc3NhZ2Ugd2hlbiBwcm9kdWN0aW9uK3Byb2ZpbGluZyBidW5kbGUgb2YgZS5nLiByZWFjdC1kb21cbiAgLy8gaXMgdXNlZCB3aXRoIHByb2R1Y3Rpb24gKG5vbi1wcm9maWxpbmcpIGJ1bmRsZSBvZiBzY2hlZHVsZXIvdHJhY2luZ1xuICAhKHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYgIT0gbnVsbCAmJiB0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgIT0gbnVsbCkgPyBpbnZhcmlhbnQoZmFsc2UsICdJdCBpcyBub3Qgc3VwcG9ydGVkIHRvIHJ1biB0aGUgcHJvZmlsaW5nIHZlcnNpb24gb2YgYSByZW5kZXJlciAoZm9yIGV4YW1wbGUsIGByZWFjdC1kb20vcHJvZmlsaW5nYCkgd2l0aG91dCBhbHNvIHJlcGxhY2luZyB0aGUgYHNjaGVkdWxlci90cmFjaW5nYCBtb2R1bGUgd2l0aCBgc2NoZWR1bGVyL3RyYWNpbmctcHJvZmlsaW5nYC4gWW91ciBidW5kbGVyIG1pZ2h0IGhhdmUgYSBzZXR0aW5nIGZvciBhbGlhc2luZyBib3RoIG1vZHVsZXMuIExlYXJuIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3JlYWN0LXByb2ZpbGluZycpIDogdm9pZCAwO1xufVxuXG57XG4gIGRpZFdhcm5BYm91dFN0YXRlVHJhbnNpdGlvbiA9IGZhbHNlO1xuICBkaWRXYXJuU2V0U3RhdGVDaGlsZENvbnRleHQgPSBmYWxzZTtcbiAgdmFyIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudCA9IHt9O1xuXG4gIHdhcm5BYm91dFVwZGF0ZU9uVW5tb3VudGVkID0gZnVuY3Rpb24gKGZpYmVyLCBpc0NsYXNzKSB7XG4gICAgLy8gV2Ugc2hvdyB0aGUgd2hvbGUgc3RhY2sgYnV0IGRlZHVwZSBvbiB0aGUgdG9wIGNvbXBvbmVudCdzIG5hbWUgYmVjYXVzZVxuICAgIC8vIHRoZSBwcm9ibGVtYXRpYyBjb2RlIGFsbW9zdCBhbHdheXMgbGllcyBpbnNpZGUgdGhhdCBjb21wb25lbnQuXG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdSZWFjdENvbXBvbmVudCc7XG4gICAgaWYgKGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudFtjb21wb25lbnROYW1lXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsIFwiQ2FuJ3QgcGVyZm9ybSBhIFJlYWN0IHN0YXRlIHVwZGF0ZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LiBUaGlzIFwiICsgJ2lzIGEgbm8tb3AsIGJ1dCBpdCBpbmRpY2F0ZXMgYSBtZW1vcnkgbGVhayBpbiB5b3VyIGFwcGxpY2F0aW9uLiBUbyAnICsgJ2ZpeCwgY2FuY2VsIGFsbCBzdWJzY3JpcHRpb25zIGFuZCBhc3luY2hyb25vdXMgdGFza3MgaW4gJXMuJXMnLCBpc0NsYXNzID8gJ3RoZSBjb21wb25lbnRXaWxsVW5tb3VudCBtZXRob2QnIDogJ2EgdXNlRWZmZWN0IGNsZWFudXAgZnVuY3Rpb24nLCBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2QoZmliZXIpKTtcbiAgICBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnRbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICB9O1xuXG4gIHdhcm5BYm91dEludmFsaWRVcGRhdGVzID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgc3dpdGNoIChwaGFzZSkge1xuICAgICAgY2FzZSAnZ2V0Q2hpbGRDb250ZXh0JzpcbiAgICAgICAgaWYgKGRpZFdhcm5TZXRTdGF0ZUNoaWxkQ29udGV4dCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdzZXRTdGF0ZSguLi4pOiBDYW5ub3QgY2FsbCBzZXRTdGF0ZSgpIGluc2lkZSBnZXRDaGlsZENvbnRleHQoKScpO1xuICAgICAgICBkaWRXYXJuU2V0U3RhdGVDaGlsZENvbnRleHQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JlbmRlcic6XG4gICAgICAgIGlmIChkaWRXYXJuQWJvdXRTdGF0ZVRyYW5zaXRpb24pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnQ2Fubm90IHVwZGF0ZSBkdXJpbmcgYW4gZXhpc3Rpbmcgc3RhdGUgdHJhbnNpdGlvbiAoc3VjaCBhcyB3aXRoaW4gJyArICdgcmVuZGVyYCkuIFJlbmRlciBtZXRob2RzIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlLicpO1xuICAgICAgICBkaWRXYXJuQWJvdXRTdGF0ZVRyYW5zaXRpb24gPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH07XG59XG5cbi8vIFVzZWQgdG8gZW5zdXJlIGNvbXB1dGVVbmlxdWVBc3luY0V4cGlyYXRpb24gaXMgbW9ub3RvbmljYWxseSBkZWNyZWFzaW5nLlxudmFyIGxhc3RVbmlxdWVBc3luY0V4cGlyYXRpb24gPSBTeW5jIC0gMTtcblxudmFyIGlzV29ya2luZyA9IGZhbHNlO1xuXG4vLyBUaGUgbmV4dCB3b3JrIGluIHByb2dyZXNzIGZpYmVyIHRoYXQgd2UncmUgY3VycmVudGx5IHdvcmtpbmcgb24uXG52YXIgbmV4dFVuaXRPZldvcmsgPSBudWxsO1xudmFyIG5leHRSb290ID0gbnVsbDtcbi8vIFRoZSB0aW1lIGF0IHdoaWNoIHdlJ3JlIGN1cnJlbnRseSByZW5kZXJpbmcgd29yay5cbnZhciBuZXh0UmVuZGVyRXhwaXJhdGlvblRpbWUgPSBOb1dvcms7XG52YXIgbmV4dExhdGVzdEFic29sdXRlVGltZW91dE1zID0gLTE7XG52YXIgbmV4dFJlbmRlckRpZEVycm9yID0gZmFsc2U7XG5cbi8vIFRoZSBuZXh0IGZpYmVyIHdpdGggYW4gZWZmZWN0IHRoYXQgd2UncmUgY3VycmVudGx5IGNvbW1pdHRpbmcuXG52YXIgbmV4dEVmZmVjdCA9IG51bGw7XG5cbnZhciBpc0NvbW1pdHRpbmckMSA9IGZhbHNlO1xudmFyIHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID0gbnVsbDtcbnZhciBwYXNzaXZlRWZmZWN0Q2FsbGJhY2tIYW5kbGUgPSBudWxsO1xudmFyIHBhc3NpdmVFZmZlY3RDYWxsYmFjayA9IG51bGw7XG5cbnZhciBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCA9IG51bGw7XG5cbi8vIFVzZWQgZm9yIHBlcmZvcm1hbmNlIHRyYWNraW5nLlxudmFyIGludGVycnVwdGVkQnkgPSBudWxsO1xuXG52YXIgc3Rhc2hlZFdvcmtJblByb2dyZXNzUHJvcGVydGllcyA9IHZvaWQgMDtcbnZhciByZXBsYXlVbml0T2ZXb3JrID0gdm9pZCAwO1xudmFyIG1heVJlcGxheUZhaWxlZFVuaXRPZldvcmsgPSB2b2lkIDA7XG52YXIgaXNSZXBsYXlpbmdGYWlsZWRVbml0T2ZXb3JrID0gdm9pZCAwO1xudmFyIG9yaWdpbmFsUmVwbGF5RXJyb3IgPSB2b2lkIDA7XG52YXIgcmV0aHJvd09yaWdpbmFsRXJyb3IgPSB2b2lkIDA7XG5pZiAodHJ1ZSAmJiByZXBsYXlGYWlsZWRVbml0T2ZXb3JrV2l0aEludm9rZUd1YXJkZWRDYWxsYmFjaykge1xuICBzdGFzaGVkV29ya0luUHJvZ3Jlc3NQcm9wZXJ0aWVzID0gbnVsbDtcbiAgbWF5UmVwbGF5RmFpbGVkVW5pdE9mV29yayA9IHRydWU7XG4gIGlzUmVwbGF5aW5nRmFpbGVkVW5pdE9mV29yayA9IGZhbHNlO1xuICBvcmlnaW5hbFJlcGxheUVycm9yID0gbnVsbDtcbiAgcmVwbGF5VW5pdE9mV29yayA9IGZ1bmN0aW9uIChmYWlsZWRVbml0T2ZXb3JrLCB0aHJvd25WYWx1ZSwgaXNZaWVsZHkpIHtcbiAgICBpZiAodGhyb3duVmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHRocm93blZhbHVlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgdGhyb3duVmFsdWUudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gRG9uJ3QgcmVwbGF5IHByb21pc2VzLiBUcmVhdCBldmVyeXRoaW5nIGVsc2UgbGlrZSBhbiBlcnJvci5cbiAgICAgIC8vIFRPRE86IE5lZWQgdG8gZmlndXJlIG91dCBhIGRpZmZlcmVudCBzdHJhdGVneSBpZi93aGVuIHdlIGFkZFxuICAgICAgLy8gc3VwcG9ydCBmb3IgY2F0Y2hpbmcgb3RoZXIgdHlwZXMuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgc3RhdGUgb2YgdGhlIHdvcmstaW4tcHJvZ3Jlc3NcbiAgICBpZiAoc3Rhc2hlZFdvcmtJblByb2dyZXNzUHJvcGVydGllcyA9PT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiBEb24ndCB0aHJvdyBiZWNhdXNlIHRoaXMgY29kZSBpcyBERVYtb25seS5cbiAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ0NvdWxkIG5vdCByZXBsYXkgcmVuZGVyaW5nIGFmdGVyIGFuIGVycm9yLiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXNzaWduRmliZXJQcm9wZXJ0aWVzSW5ERVYoZmFpbGVkVW5pdE9mV29yaywgc3Rhc2hlZFdvcmtJblByb2dyZXNzUHJvcGVydGllcyk7XG5cbiAgICBzd2l0Y2ggKGZhaWxlZFVuaXRPZldvcmsudGFnKSB7XG4gICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICBwb3BIb3N0Q29udGFpbmVyKGZhaWxlZFVuaXRPZldvcmspO1xuICAgICAgICBwb3BUb3BMZXZlbENvbnRleHRPYmplY3QoZmFpbGVkVW5pdE9mV29yayk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICBwb3BIb3N0Q29udGV4dChmYWlsZWRVbml0T2ZXb3JrKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIENvbXBvbmVudCA9IGZhaWxlZFVuaXRPZldvcmsudHlwZTtcbiAgICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgICAgICAgcG9wQ29udGV4dChmYWlsZWRVbml0T2ZXb3JrKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgICAgcG9wSG9zdENvbnRhaW5lcihmYWlsZWRVbml0T2ZXb3JrKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENvbnRleHRQcm92aWRlcjpcbiAgICAgICAgcG9wUHJvdmlkZXIoZmFpbGVkVW5pdE9mV29yayk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICAvLyBSZXBsYXkgdGhlIGJlZ2luIHBoYXNlLlxuICAgIGlzUmVwbGF5aW5nRmFpbGVkVW5pdE9mV29yayA9IHRydWU7XG4gICAgb3JpZ2luYWxSZXBsYXlFcnJvciA9IHRocm93blZhbHVlO1xuICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCB3b3JrTG9vcCwgbnVsbCwgaXNZaWVsZHkpO1xuICAgIGlzUmVwbGF5aW5nRmFpbGVkVW5pdE9mV29yayA9IGZhbHNlO1xuICAgIG9yaWdpbmFsUmVwbGF5RXJyb3IgPSBudWxsO1xuICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICB2YXIgcmVwbGF5RXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG4gICAgICBpZiAocmVwbGF5RXJyb3IgIT0gbnVsbCAmJiB0aHJvd25WYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gUmVhZGluZyB0aGUgZXhwYW5kbyBwcm9wZXJ0eSBpcyBpbnRlbnRpb25hbGx5XG4gICAgICAgICAgLy8gaW5zaWRlIGB0cnlgIGJlY2F1c2UgaXQgbWlnaHQgYmUgYSBnZXR0ZXIgb3IgUHJveHkuXG4gICAgICAgICAgaWYgKHJlcGxheUVycm9yLl9zdXBwcmVzc0xvZ2dpbmcpIHtcbiAgICAgICAgICAgIC8vIEFsc28gc3VwcHJlc3MgbG9nZ2luZyBmb3IgdGhlIG9yaWdpbmFsIGVycm9yLlxuICAgICAgICAgICAgdGhyb3duVmFsdWUuX3N1cHByZXNzTG9nZ2luZyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChpbm5lcikge1xuICAgICAgICAgIC8vIElnbm9yZS5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiB0aGUgYmVnaW4gcGhhc2UgZGlkIG5vdCBmYWlsIHRoZSBzZWNvbmQgdGltZSwgc2V0IHRoaXMgcG9pbnRlclxuICAgICAgLy8gYmFjayB0byB0aGUgb3JpZ2luYWwgdmFsdWUuXG4gICAgICBuZXh0VW5pdE9mV29yayA9IGZhaWxlZFVuaXRPZldvcms7XG4gICAgfVxuICB9O1xuICByZXRocm93T3JpZ2luYWxFcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aHJvdyBvcmlnaW5hbFJlcGxheUVycm9yO1xuICB9O1xufVxuXG5mdW5jdGlvbiByZXNldFN0YWNrKCkge1xuICBpZiAobmV4dFVuaXRPZldvcmsgIT09IG51bGwpIHtcbiAgICB2YXIgaW50ZXJydXB0ZWRXb3JrID0gbmV4dFVuaXRPZldvcmsucmV0dXJuO1xuICAgIHdoaWxlIChpbnRlcnJ1cHRlZFdvcmsgIT09IG51bGwpIHtcbiAgICAgIHVud2luZEludGVycnVwdGVkV29yayhpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgaW50ZXJydXB0ZWRXb3JrID0gaW50ZXJydXB0ZWRXb3JrLnJldHVybjtcbiAgICB9XG4gIH1cblxuICB7XG4gICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZGlzY2FyZFBlbmRpbmdXYXJuaW5ncygpO1xuICAgIGNoZWNrVGhhdFN0YWNrSXNFbXB0eSgpO1xuICB9XG5cbiAgbmV4dFJvb3QgPSBudWxsO1xuICBuZXh0UmVuZGVyRXhwaXJhdGlvblRpbWUgPSBOb1dvcms7XG4gIG5leHRMYXRlc3RBYnNvbHV0ZVRpbWVvdXRNcyA9IC0xO1xuICBuZXh0UmVuZGVyRGlkRXJyb3IgPSBmYWxzZTtcbiAgbmV4dFVuaXRPZldvcmsgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBjb21taXRBbGxIb3N0RWZmZWN0cygpIHtcbiAgd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpIHtcbiAgICB7XG4gICAgICBzZXRDdXJyZW50RmliZXIobmV4dEVmZmVjdCk7XG4gICAgfVxuICAgIHJlY29yZEVmZmVjdCgpO1xuXG4gICAgdmFyIGVmZmVjdFRhZyA9IG5leHRFZmZlY3QuZWZmZWN0VGFnO1xuXG4gICAgaWYgKGVmZmVjdFRhZyAmIENvbnRlbnRSZXNldCkge1xuICAgICAgY29tbWl0UmVzZXRUZXh0Q29udGVudChuZXh0RWZmZWN0KTtcbiAgICB9XG5cbiAgICBpZiAoZWZmZWN0VGFnICYgUmVmKSB7XG4gICAgICB2YXIgY3VycmVudCQkMSA9IG5leHRFZmZlY3QuYWx0ZXJuYXRlO1xuICAgICAgaWYgKGN1cnJlbnQkJDEgIT09IG51bGwpIHtcbiAgICAgICAgY29tbWl0RGV0YWNoUmVmKGN1cnJlbnQkJDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoZSBmb2xsb3dpbmcgc3dpdGNoIHN0YXRlbWVudCBpcyBvbmx5IGNvbmNlcm5lZCBhYm91dCBwbGFjZW1lbnQsXG4gICAgLy8gdXBkYXRlcywgYW5kIGRlbGV0aW9ucy4gVG8gYXZvaWQgbmVlZGluZyB0byBhZGQgYSBjYXNlIGZvciBldmVyeVxuICAgIC8vIHBvc3NpYmxlIGJpdG1hcCB2YWx1ZSwgd2UgcmVtb3ZlIHRoZSBzZWNvbmRhcnkgZWZmZWN0cyBmcm9tIHRoZVxuICAgIC8vIGVmZmVjdCB0YWcgYW5kIHN3aXRjaCBvbiB0aGF0IHZhbHVlLlxuICAgIHZhciBwcmltYXJ5RWZmZWN0VGFnID0gZWZmZWN0VGFnICYgKFBsYWNlbWVudCB8IFVwZGF0ZSB8IERlbGV0aW9uKTtcbiAgICBzd2l0Y2ggKHByaW1hcnlFZmZlY3RUYWcpIHtcbiAgICAgIGNhc2UgUGxhY2VtZW50OlxuICAgICAgICB7XG4gICAgICAgICAgY29tbWl0UGxhY2VtZW50KG5leHRFZmZlY3QpO1xuICAgICAgICAgIC8vIENsZWFyIHRoZSBcInBsYWNlbWVudFwiIGZyb20gZWZmZWN0IHRhZyBzbyB0aGF0IHdlIGtub3cgdGhhdCB0aGlzIGlzIGluc2VydGVkLCBiZWZvcmVcbiAgICAgICAgICAvLyBhbnkgbGlmZS1jeWNsZXMgbGlrZSBjb21wb25lbnREaWRNb3VudCBnZXRzIGNhbGxlZC5cbiAgICAgICAgICAvLyBUT0RPOiBmaW5kRE9NTm9kZSBkb2Vzbid0IHJlbHkgb24gdGhpcyBhbnkgbW9yZSBidXQgaXNNb3VudGVkXG4gICAgICAgICAgLy8gZG9lcyBhbmQgaXNNb3VudGVkIGlzIGRlcHJlY2F0ZWQgYW55d2F5IHNvIHdlIHNob3VsZCBiZSBhYmxlXG4gICAgICAgICAgLy8gdG8ga2lsbCB0aGlzLlxuICAgICAgICAgIG5leHRFZmZlY3QuZWZmZWN0VGFnICY9IH5QbGFjZW1lbnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgUGxhY2VtZW50QW5kVXBkYXRlOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gUGxhY2VtZW50XG4gICAgICAgICAgY29tbWl0UGxhY2VtZW50KG5leHRFZmZlY3QpO1xuICAgICAgICAgIC8vIENsZWFyIHRoZSBcInBsYWNlbWVudFwiIGZyb20gZWZmZWN0IHRhZyBzbyB0aGF0IHdlIGtub3cgdGhhdCB0aGlzIGlzIGluc2VydGVkLCBiZWZvcmVcbiAgICAgICAgICAvLyBhbnkgbGlmZS1jeWNsZXMgbGlrZSBjb21wb25lbnREaWRNb3VudCBnZXRzIGNhbGxlZC5cbiAgICAgICAgICBuZXh0RWZmZWN0LmVmZmVjdFRhZyAmPSB+UGxhY2VtZW50O1xuXG4gICAgICAgICAgLy8gVXBkYXRlXG4gICAgICAgICAgdmFyIF9jdXJyZW50ID0gbmV4dEVmZmVjdC5hbHRlcm5hdGU7XG4gICAgICAgICAgY29tbWl0V29yayhfY3VycmVudCwgbmV4dEVmZmVjdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgVXBkYXRlOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIF9jdXJyZW50MiA9IG5leHRFZmZlY3QuYWx0ZXJuYXRlO1xuICAgICAgICAgIGNvbW1pdFdvcmsoX2N1cnJlbnQyLCBuZXh0RWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgY2FzZSBEZWxldGlvbjpcbiAgICAgICAge1xuICAgICAgICAgIGNvbW1pdERlbGV0aW9uKG5leHRFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gIH1cblxuICB7XG4gICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRCZWZvcmVNdXRhdGlvbkxpZmVjeWNsZXMoKSB7XG4gIHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAge1xuICAgICAgc2V0Q3VycmVudEZpYmVyKG5leHRFZmZlY3QpO1xuICAgIH1cblxuICAgIHZhciBlZmZlY3RUYWcgPSBuZXh0RWZmZWN0LmVmZmVjdFRhZztcbiAgICBpZiAoZWZmZWN0VGFnICYgU25hcHNob3QpIHtcbiAgICAgIHJlY29yZEVmZmVjdCgpO1xuICAgICAgdmFyIGN1cnJlbnQkJDEgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcbiAgICAgIGNvbW1pdEJlZm9yZU11dGF0aW9uTGlmZUN5Y2xlcyhjdXJyZW50JCQxLCBuZXh0RWZmZWN0KTtcbiAgICB9XG5cbiAgICBuZXh0RWZmZWN0ID0gbmV4dEVmZmVjdC5uZXh0RWZmZWN0O1xuICB9XG5cbiAge1xuICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0QWxsTGlmZUN5Y2xlcyhmaW5pc2hlZFJvb3QsIGNvbW1pdHRlZEV4cGlyYXRpb25UaW1lKSB7XG4gIHtcbiAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5mbHVzaFBlbmRpbmdVbnNhZmVMaWZlY3ljbGVXYXJuaW5ncygpO1xuICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmZsdXNoTGVnYWN5Q29udGV4dFdhcm5pbmcoKTtcblxuICAgIGlmICh3YXJuQWJvdXREZXByZWNhdGVkTGlmZWN5Y2xlcykge1xuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5ncygpO1xuICAgIH1cbiAgfVxuICB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHtcbiAgICAgIHNldEN1cnJlbnRGaWJlcihuZXh0RWZmZWN0KTtcbiAgICB9XG4gICAgdmFyIGVmZmVjdFRhZyA9IG5leHRFZmZlY3QuZWZmZWN0VGFnO1xuXG4gICAgaWYgKGVmZmVjdFRhZyAmIChVcGRhdGUgfCBDYWxsYmFjaykpIHtcbiAgICAgIHJlY29yZEVmZmVjdCgpO1xuICAgICAgdmFyIGN1cnJlbnQkJDEgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcbiAgICAgIGNvbW1pdExpZmVDeWNsZXMoZmluaXNoZWRSb290LCBjdXJyZW50JCQxLCBuZXh0RWZmZWN0LCBjb21taXR0ZWRFeHBpcmF0aW9uVGltZSk7XG4gICAgfVxuXG4gICAgaWYgKGVmZmVjdFRhZyAmIFJlZikge1xuICAgICAgcmVjb3JkRWZmZWN0KCk7XG4gICAgICBjb21taXRBdHRhY2hSZWYobmV4dEVmZmVjdCk7XG4gICAgfVxuXG4gICAgaWYgKGVmZmVjdFRhZyAmIFBhc3NpdmUpIHtcbiAgICAgIHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID0gZmluaXNoZWRSb290O1xuICAgIH1cblxuICAgIG5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gIH1cbiAge1xuICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0UGFzc2l2ZUVmZmVjdHMocm9vdCwgZmlyc3RFZmZlY3QpIHtcbiAgcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgPSBudWxsO1xuICBwYXNzaXZlRWZmZWN0Q2FsbGJhY2tIYW5kbGUgPSBudWxsO1xuICBwYXNzaXZlRWZmZWN0Q2FsbGJhY2sgPSBudWxsO1xuXG4gIC8vIFNldCB0aGlzIHRvIHRydWUgdG8gcHJldmVudCByZS1lbnRyYW5jeVxuICB2YXIgcHJldmlvdXNJc1JlbmRlcmluZyA9IGlzUmVuZGVyaW5nO1xuICBpc1JlbmRlcmluZyA9IHRydWU7XG5cbiAgdmFyIGVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuICBkbyB7XG4gICAge1xuICAgICAgc2V0Q3VycmVudEZpYmVyKGVmZmVjdCk7XG4gICAgfVxuXG4gICAgaWYgKGVmZmVjdC5lZmZlY3RUYWcgJiBQYXNzaXZlKSB7XG4gICAgICB2YXIgZGlkRXJyb3IgPSBmYWxzZTtcbiAgICAgIHZhciBlcnJvciA9IHZvaWQgMDtcbiAgICAgIHtcbiAgICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGNvbW1pdFBhc3NpdmVIb29rRWZmZWN0cywgbnVsbCwgZWZmZWN0KTtcbiAgICAgICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgICAgICBkaWRFcnJvciA9IHRydWU7XG4gICAgICAgICAgZXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChkaWRFcnJvcikge1xuICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihlZmZlY3QsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWZmZWN0ID0gZWZmZWN0Lm5leHRFZmZlY3Q7XG4gIH0gd2hpbGUgKGVmZmVjdCAhPT0gbnVsbCk7XG4gIHtcbiAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICB9XG5cbiAgaXNSZW5kZXJpbmcgPSBwcmV2aW91c0lzUmVuZGVyaW5nO1xuXG4gIC8vIENoZWNrIGlmIHdvcmsgd2FzIHNjaGVkdWxlZCBieSBvbmUgb2YgdGhlIGVmZmVjdHNcbiAgdmFyIHJvb3RFeHBpcmF0aW9uVGltZSA9IHJvb3QuZXhwaXJhdGlvblRpbWU7XG4gIGlmIChyb290RXhwaXJhdGlvblRpbWUgIT09IE5vV29yaykge1xuICAgIHJlcXVlc3RXb3JrKHJvb3QsIHJvb3RFeHBpcmF0aW9uVGltZSk7XG4gIH1cbiAgLy8gRmx1c2ggYW55IHN5bmMgd29yayB0aGF0IHdhcyBzY2hlZHVsZWQgYnkgZWZmZWN0c1xuICBpZiAoIWlzQmF0Y2hpbmdVcGRhdGVzICYmICFpc1JlbmRlcmluZykge1xuICAgIHBlcmZvcm1TeW5jV29yaygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzQWxyZWFkeUZhaWxlZExlZ2FjeUVycm9yQm91bmRhcnkoaW5zdGFuY2UpIHtcbiAgcmV0dXJuIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkICE9PSBudWxsICYmIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkLmhhcyhpbnN0YW5jZSk7XG59XG5cbmZ1bmN0aW9uIG1hcmtMZWdhY3lFcnJvckJvdW5kYXJ5QXNGYWlsZWQoaW5zdGFuY2UpIHtcbiAgaWYgKGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkID09PSBudWxsKSB7XG4gICAgbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgPSBuZXcgU2V0KFtpbnN0YW5jZV0pO1xuICB9IGVsc2Uge1xuICAgIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkLmFkZChpbnN0YW5jZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmx1c2hQYXNzaXZlRWZmZWN0cygpIHtcbiAgaWYgKHBhc3NpdmVFZmZlY3RDYWxsYmFja0hhbmRsZSAhPT0gbnVsbCkge1xuICAgIGNhbmNlbFBhc3NpdmVFZmZlY3RzKHBhc3NpdmVFZmZlY3RDYWxsYmFja0hhbmRsZSk7XG4gIH1cbiAgaWYgKHBhc3NpdmVFZmZlY3RDYWxsYmFjayAhPT0gbnVsbCkge1xuICAgIC8vIFdlIGNhbGwgdGhlIHNjaGVkdWxlZCBjYWxsYmFjayBpbnN0ZWFkIG9mIGNvbW1pdFBhc3NpdmVFZmZlY3RzIGRpcmVjdGx5XG4gICAgLy8gdG8gZW5zdXJlIHRyYWNpbmcgd29ya3MgY29ycmVjdGx5LlxuICAgIHBhc3NpdmVFZmZlY3RDYWxsYmFjaygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFJvb3Qocm9vdCwgZmluaXNoZWRXb3JrKSB7XG4gIGlzV29ya2luZyA9IHRydWU7XG4gIGlzQ29tbWl0dGluZyQxID0gdHJ1ZTtcbiAgc3RhcnRDb21taXRUaW1lcigpO1xuXG4gICEocm9vdC5jdXJyZW50ICE9PSBmaW5pc2hlZFdvcmspID8gaW52YXJpYW50KGZhbHNlLCAnQ2Fubm90IGNvbW1pdCB0aGUgc2FtZSB0cmVlIGFzIGJlZm9yZS4gVGhpcyBpcyBwcm9iYWJseSBhIGJ1ZyByZWxhdGVkIHRvIHRoZSByZXR1cm4gZmllbGQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJykgOiB2b2lkIDA7XG4gIHZhciBjb21taXR0ZWRFeHBpcmF0aW9uVGltZSA9IHJvb3QucGVuZGluZ0NvbW1pdEV4cGlyYXRpb25UaW1lO1xuICAhKGNvbW1pdHRlZEV4cGlyYXRpb25UaW1lICE9PSBOb1dvcmspID8gaW52YXJpYW50KGZhbHNlLCAnQ2Fubm90IGNvbW1pdCBhbiBpbmNvbXBsZXRlIHJvb3QuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJykgOiB2b2lkIDA7XG4gIHJvb3QucGVuZGluZ0NvbW1pdEV4cGlyYXRpb25UaW1lID0gTm9Xb3JrO1xuXG4gIC8vIFVwZGF0ZSB0aGUgcGVuZGluZyBwcmlvcml0eSBsZXZlbHMgdG8gYWNjb3VudCBmb3IgdGhlIHdvcmsgdGhhdCB3ZSBhcmVcbiAgLy8gYWJvdXQgdG8gY29tbWl0LiBUaGlzIG5lZWRzIHRvIGhhcHBlbiBiZWZvcmUgY2FsbGluZyB0aGUgbGlmZWN5Y2xlcywgc2luY2VcbiAgLy8gdGhleSBtYXkgc2NoZWR1bGUgYWRkaXRpb25hbCB1cGRhdGVzLlxuICB2YXIgdXBkYXRlRXhwaXJhdGlvblRpbWVCZWZvcmVDb21taXQgPSBmaW5pc2hlZFdvcmsuZXhwaXJhdGlvblRpbWU7XG4gIHZhciBjaGlsZEV4cGlyYXRpb25UaW1lQmVmb3JlQ29tbWl0ID0gZmluaXNoZWRXb3JrLmNoaWxkRXhwaXJhdGlvblRpbWU7XG4gIHZhciBlYXJsaWVzdFJlbWFpbmluZ1RpbWVCZWZvcmVDb21taXQgPSBjaGlsZEV4cGlyYXRpb25UaW1lQmVmb3JlQ29tbWl0ID4gdXBkYXRlRXhwaXJhdGlvblRpbWVCZWZvcmVDb21taXQgPyBjaGlsZEV4cGlyYXRpb25UaW1lQmVmb3JlQ29tbWl0IDogdXBkYXRlRXhwaXJhdGlvblRpbWVCZWZvcmVDb21taXQ7XG4gIG1hcmtDb21taXR0ZWRQcmlvcml0eUxldmVscyhyb290LCBlYXJsaWVzdFJlbWFpbmluZ1RpbWVCZWZvcmVDb21taXQpO1xuXG4gIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gbnVsbDtcbiAgaWYgKGVuYWJsZVNjaGVkdWxlclRyYWNpbmcpIHtcbiAgICAvLyBSZXN0b3JlIGFueSBwZW5kaW5nIGludGVyYWN0aW9ucyBhdCB0aGlzIHBvaW50LFxuICAgIC8vIFNvIHRoYXQgY2FzY2FkaW5nIHdvcmsgdHJpZ2dlcmVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlIHdpbGwgYmUgYWNjb3VudGVkIGZvci5cbiAgICBwcmV2SW50ZXJhY3Rpb25zID0gdHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50O1xuICAgIHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IHJvb3QubWVtb2l6ZWRJbnRlcmFjdGlvbnM7XG4gIH1cblxuICAvLyBSZXNldCB0aGlzIHRvIG51bGwgYmVmb3JlIGNhbGxpbmcgbGlmZWN5Y2xlc1xuICBSZWFjdEN1cnJlbnRPd25lciQyLmN1cnJlbnQgPSBudWxsO1xuXG4gIHZhciBmaXJzdEVmZmVjdCA9IHZvaWQgMDtcbiAgaWYgKGZpbmlzaGVkV29yay5lZmZlY3RUYWcgPiBQZXJmb3JtZWRXb3JrKSB7XG4gICAgLy8gQSBmaWJlcidzIGVmZmVjdCBsaXN0IGNvbnNpc3RzIG9ubHkgb2YgaXRzIGNoaWxkcmVuLCBub3QgaXRzZWxmLiBTbyBpZlxuICAgIC8vIHRoZSByb290IGhhcyBhbiBlZmZlY3QsIHdlIG5lZWQgdG8gYWRkIGl0IHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuIFRoZVxuICAgIC8vIHJlc3VsdGluZyBsaXN0IGlzIHRoZSBzZXQgdGhhdCB3b3VsZCBiZWxvbmcgdG8gdGhlIHJvb3QncyBwYXJlbnQsIGlmXG4gICAgLy8gaXQgaGFkIG9uZTsgdGhhdCBpcywgYWxsIHRoZSBlZmZlY3RzIGluIHRoZSB0cmVlIGluY2x1ZGluZyB0aGUgcm9vdC5cbiAgICBpZiAoZmluaXNoZWRXb3JrLmxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgIGZpbmlzaGVkV29yay5sYXN0RWZmZWN0Lm5leHRFZmZlY3QgPSBmaW5pc2hlZFdvcms7XG4gICAgICBmaXJzdEVmZmVjdCA9IGZpbmlzaGVkV29yay5maXJzdEVmZmVjdDtcbiAgICB9IGVsc2Uge1xuICAgICAgZmlyc3RFZmZlY3QgPSBmaW5pc2hlZFdvcms7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFRoZXJlIGlzIG5vIGVmZmVjdCBvbiB0aGUgcm9vdC5cbiAgICBmaXJzdEVmZmVjdCA9IGZpbmlzaGVkV29yay5maXJzdEVmZmVjdDtcbiAgfVxuXG4gIHByZXBhcmVGb3JDb21taXQocm9vdC5jb250YWluZXJJbmZvKTtcblxuICAvLyBJbnZva2UgaW5zdGFuY2VzIG9mIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlIGJlZm9yZSBtdXRhdGlvbi5cbiAgbmV4dEVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuICBzdGFydENvbW1pdFNuYXBzaG90RWZmZWN0c1RpbWVyKCk7XG4gIHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyIGRpZEVycm9yID0gZmFsc2U7XG4gICAgdmFyIGVycm9yID0gdm9pZCAwO1xuICAgIHtcbiAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBjb21taXRCZWZvcmVNdXRhdGlvbkxpZmVjeWNsZXMsIG51bGwpO1xuICAgICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgICAgZGlkRXJyb3IgPSB0cnVlO1xuICAgICAgICBlcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRpZEVycm9yKSB7XG4gICAgICAhKG5leHRFZmZlY3QgIT09IG51bGwpID8gaW52YXJpYW50KGZhbHNlLCAnU2hvdWxkIGhhdmUgbmV4dCBlZmZlY3QuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJykgOiB2b2lkIDA7XG4gICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihuZXh0RWZmZWN0LCBlcnJvcik7XG4gICAgICAvLyBDbGVhbi11cFxuICAgICAgaWYgKG5leHRFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgICAgbmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgc3RvcENvbW1pdFNuYXBzaG90RWZmZWN0c1RpbWVyKCk7XG5cbiAgaWYgKGVuYWJsZVByb2ZpbGVyVGltZXIpIHtcbiAgICAvLyBNYXJrIHRoZSBjdXJyZW50IGNvbW1pdCB0aW1lIHRvIGJlIHNoYXJlZCBieSBhbGwgUHJvZmlsZXJzIGluIHRoaXMgYmF0Y2guXG4gICAgLy8gVGhpcyBlbmFibGVzIHRoZW0gdG8gYmUgZ3JvdXBlZCBsYXRlci5cbiAgICByZWNvcmRDb21taXRUaW1lKCk7XG4gIH1cblxuICAvLyBDb21taXQgYWxsIHRoZSBzaWRlLWVmZmVjdHMgd2l0aGluIGEgdHJlZS4gV2UnbGwgZG8gdGhpcyBpbiB0d28gcGFzc2VzLlxuICAvLyBUaGUgZmlyc3QgcGFzcyBwZXJmb3JtcyBhbGwgdGhlIGhvc3QgaW5zZXJ0aW9ucywgdXBkYXRlcywgZGVsZXRpb25zIGFuZFxuICAvLyByZWYgdW5tb3VudHMuXG4gIG5leHRFZmZlY3QgPSBmaXJzdEVmZmVjdDtcbiAgc3RhcnRDb21taXRIb3N0RWZmZWN0c1RpbWVyKCk7XG4gIHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyIF9kaWRFcnJvciA9IGZhbHNlO1xuICAgIHZhciBfZXJyb3IgPSB2b2lkIDA7XG4gICAge1xuICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGNvbW1pdEFsbEhvc3RFZmZlY3RzLCBudWxsKTtcbiAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgIF9kaWRFcnJvciA9IHRydWU7XG4gICAgICAgIF9lcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKF9kaWRFcnJvcikge1xuICAgICAgIShuZXh0RWZmZWN0ICE9PSBudWxsKSA/IGludmFyaWFudChmYWxzZSwgJ1Nob3VsZCBoYXZlIG5leHQgZWZmZWN0LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpIDogdm9pZCAwO1xuICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IobmV4dEVmZmVjdCwgX2Vycm9yKTtcbiAgICAgIC8vIENsZWFuLXVwXG4gICAgICBpZiAobmV4dEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgICBuZXh0RWZmZWN0ID0gbmV4dEVmZmVjdC5uZXh0RWZmZWN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBzdG9wQ29tbWl0SG9zdEVmZmVjdHNUaW1lcigpO1xuXG4gIHJlc2V0QWZ0ZXJDb21taXQocm9vdC5jb250YWluZXJJbmZvKTtcblxuICAvLyBUaGUgd29yay1pbi1wcm9ncmVzcyB0cmVlIGlzIG5vdyB0aGUgY3VycmVudCB0cmVlLiBUaGlzIG11c3QgY29tZSBhZnRlclxuICAvLyB0aGUgZmlyc3QgcGFzcyBvZiB0aGUgY29tbWl0IHBoYXNlLCBzbyB0aGF0IHRoZSBwcmV2aW91cyB0cmVlIGlzIHN0aWxsXG4gIC8vIGN1cnJlbnQgZHVyaW5nIGNvbXBvbmVudFdpbGxVbm1vdW50LCBidXQgYmVmb3JlIHRoZSBzZWNvbmQgcGFzcywgc28gdGhhdFxuICAvLyB0aGUgZmluaXNoZWQgd29yayBpcyBjdXJyZW50IGR1cmluZyBjb21wb25lbnREaWRNb3VudC9VcGRhdGUuXG4gIHJvb3QuY3VycmVudCA9IGZpbmlzaGVkV29yaztcblxuICAvLyBJbiB0aGUgc2Vjb25kIHBhc3Mgd2UnbGwgcGVyZm9ybSBhbGwgbGlmZS1jeWNsZXMgYW5kIHJlZiBjYWxsYmFja3MuXG4gIC8vIExpZmUtY3ljbGVzIGhhcHBlbiBhcyBhIHNlcGFyYXRlIHBhc3Mgc28gdGhhdCBhbGwgcGxhY2VtZW50cywgdXBkYXRlcyxcbiAgLy8gYW5kIGRlbGV0aW9ucyBpbiB0aGUgZW50aXJlIHRyZWUgaGF2ZSBhbHJlYWR5IGJlZW4gaW52b2tlZC5cbiAgLy8gVGhpcyBwYXNzIGFsc28gdHJpZ2dlcnMgYW55IHJlbmRlcmVyLXNwZWNpZmljIGluaXRpYWwgZWZmZWN0cy5cbiAgbmV4dEVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuICBzdGFydENvbW1pdExpZmVDeWNsZXNUaW1lcigpO1xuICB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHZhciBfZGlkRXJyb3IyID0gZmFsc2U7XG4gICAgdmFyIF9lcnJvcjIgPSB2b2lkIDA7XG4gICAge1xuICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGNvbW1pdEFsbExpZmVDeWNsZXMsIG51bGwsIHJvb3QsIGNvbW1pdHRlZEV4cGlyYXRpb25UaW1lKTtcbiAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgIF9kaWRFcnJvcjIgPSB0cnVlO1xuICAgICAgICBfZXJyb3IyID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoX2RpZEVycm9yMikge1xuICAgICAgIShuZXh0RWZmZWN0ICE9PSBudWxsKSA/IGludmFyaWFudChmYWxzZSwgJ1Nob3VsZCBoYXZlIG5leHQgZWZmZWN0LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpIDogdm9pZCAwO1xuICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IobmV4dEVmZmVjdCwgX2Vycm9yMik7XG4gICAgICBpZiAobmV4dEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgICBuZXh0RWZmZWN0ID0gbmV4dEVmZmVjdC5uZXh0RWZmZWN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChmaXJzdEVmZmVjdCAhPT0gbnVsbCAmJiByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyAhPT0gbnVsbCkge1xuICAgIC8vIFRoaXMgY29tbWl0IGluY2x1ZGVkIGEgcGFzc2l2ZSBlZmZlY3QuIFRoZXNlIGRvIG5vdCBuZWVkIHRvIGZpcmUgdW50aWxcbiAgICAvLyBhZnRlciB0aGUgbmV4dCBwYWludC4gU2NoZWR1bGUgYW4gY2FsbGJhY2sgdG8gZmlyZSB0aGVtIGluIGFuIGFzeW5jXG4gICAgLy8gZXZlbnQuIFRvIGVuc3VyZSBzZXJpYWwgZXhlY3V0aW9uLCB0aGUgY2FsbGJhY2sgd2lsbCBiZSBmbHVzaGVkIGVhcmx5IGlmXG4gICAgLy8gd2UgZW50ZXIgcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgY29tbWl0IHBoYXNlIGJlZm9yZSB0aGVuLlxuICAgIHZhciBjYWxsYmFjayA9IGNvbW1pdFBhc3NpdmVFZmZlY3RzLmJpbmQobnVsbCwgcm9vdCwgZmlyc3RFZmZlY3QpO1xuICAgIGlmIChlbmFibGVTY2hlZHVsZXJUcmFjaW5nKSB7XG4gICAgICAvLyBUT0RPOiBBdm9pZCB0aGlzIGV4dHJhIGNhbGxiYWNrIGJ5IG11dGF0aW5nIHRoZSB0cmFjaW5nIHJlZiBkaXJlY3RseSxcbiAgICAgIC8vIGxpa2Ugd2UgZG8gYXQgdGhlIGJlZ2lubmluZyBvZiBjb21taXRSb290LiBJJ3ZlIG9wdGVkIG5vdCB0byBkbyB0aGF0XG4gICAgICAvLyBoZXJlIGJlY2F1c2UgdGhhdCBjb2RlIGlzIHN0aWxsIGluIGZsdXguXG4gICAgICBjYWxsYmFjayA9IHRyYWNpbmcudW5zdGFibGVfd3JhcChjYWxsYmFjayk7XG4gICAgfVxuICAgIHBhc3NpdmVFZmZlY3RDYWxsYmFja0hhbmRsZSA9IHNjaGVkdWxlci51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHkoc2NoZWR1bGVyLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gc2NoZWR1bGVQYXNzaXZlRWZmZWN0cyhjYWxsYmFjayk7XG4gICAgfSk7XG4gICAgcGFzc2l2ZUVmZmVjdENhbGxiYWNrID0gY2FsbGJhY2s7XG4gIH1cblxuICBpc0NvbW1pdHRpbmckMSA9IGZhbHNlO1xuICBpc1dvcmtpbmcgPSBmYWxzZTtcbiAgc3RvcENvbW1pdExpZmVDeWNsZXNUaW1lcigpO1xuICBzdG9wQ29tbWl0VGltZXIoKTtcbiAgb25Db21taXRSb290KGZpbmlzaGVkV29yay5zdGF0ZU5vZGUpO1xuICBpZiAodHJ1ZSAmJiBSZWFjdEZpYmVySW5zdHJ1bWVudGF0aW9uXzEuZGVidWdUb29sKSB7XG4gICAgUmVhY3RGaWJlckluc3RydW1lbnRhdGlvbl8xLmRlYnVnVG9vbC5vbkNvbW1pdFdvcmsoZmluaXNoZWRXb3JrKTtcbiAgfVxuXG4gIHZhciB1cGRhdGVFeHBpcmF0aW9uVGltZUFmdGVyQ29tbWl0ID0gZmluaXNoZWRXb3JrLmV4cGlyYXRpb25UaW1lO1xuICB2YXIgY2hpbGRFeHBpcmF0aW9uVGltZUFmdGVyQ29tbWl0ID0gZmluaXNoZWRXb3JrLmNoaWxkRXhwaXJhdGlvblRpbWU7XG4gIHZhciBlYXJsaWVzdFJlbWFpbmluZ1RpbWVBZnRlckNvbW1pdCA9IGNoaWxkRXhwaXJhdGlvblRpbWVBZnRlckNvbW1pdCA+IHVwZGF0ZUV4cGlyYXRpb25UaW1lQWZ0ZXJDb21taXQgPyBjaGlsZEV4cGlyYXRpb25UaW1lQWZ0ZXJDb21taXQgOiB1cGRhdGVFeHBpcmF0aW9uVGltZUFmdGVyQ29tbWl0O1xuICBpZiAoZWFybGllc3RSZW1haW5pbmdUaW1lQWZ0ZXJDb21taXQgPT09IE5vV29yaykge1xuICAgIC8vIElmIHRoZXJlJ3Mgbm8gcmVtYWluaW5nIHdvcmssIHdlIGNhbiBjbGVhciB0aGUgc2V0IG9mIGFscmVhZHkgZmFpbGVkXG4gICAgLy8gZXJyb3IgYm91bmRhcmllcy5cbiAgICBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCA9IG51bGw7XG4gIH1cbiAgb25Db21taXQocm9vdCwgZWFybGllc3RSZW1haW5pbmdUaW1lQWZ0ZXJDb21taXQpO1xuXG4gIGlmIChlbmFibGVTY2hlZHVsZXJUcmFjaW5nKSB7XG4gICAgdHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gcHJldkludGVyYWN0aW9ucztcblxuICAgIHZhciBzdWJzY3JpYmVyID0gdm9pZCAwO1xuXG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIgPSB0cmFjaW5nLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwgJiYgcm9vdC5tZW1vaXplZEludGVyYWN0aW9ucy5zaXplID4gMCkge1xuICAgICAgICB2YXIgdGhyZWFkSUQgPSBjb21wdXRlVGhyZWFkSUQoY29tbWl0dGVkRXhwaXJhdGlvblRpbWUsIHJvb3QuaW50ZXJhY3Rpb25UaHJlYWRJRCk7XG4gICAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RvcHBlZChyb290Lm1lbW9pemVkSW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEl0J3Mgbm90IHNhZmUgZm9yIGNvbW1pdFJvb3QoKSB0byB0aHJvdy5cbiAgICAgIC8vIFN0b3JlIHRoZSBlcnJvciBmb3Igbm93IGFuZCB3ZSdsbCByZS10aHJvdyBpbiBmaW5pc2hSZW5kZXJpbmcoKS5cbiAgICAgIGlmICghaGFzVW5oYW5kbGVkRXJyb3IpIHtcbiAgICAgICAgaGFzVW5oYW5kbGVkRXJyb3IgPSB0cnVlO1xuICAgICAgICB1bmhhbmRsZWRFcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBDbGVhciBjb21wbGV0ZWQgaW50ZXJhY3Rpb25zIGZyb20gdGhlIHBlbmRpbmcgTWFwLlxuICAgICAgLy8gVW5sZXNzIHRoZSByZW5kZXIgd2FzIHN1c3BlbmRlZCBvciBjYXNjYWRpbmcgd29yayB3YXMgc2NoZWR1bGVkLFxuICAgICAgLy8gSW4gd2hpY2ggY2FzZeKAkyBsZWF2ZSBwZW5kaW5nIGludGVyYWN0aW9ucyB1bnRpbCB0aGUgc3Vic2VxdWVudCByZW5kZXIuXG4gICAgICB2YXIgcGVuZGluZ0ludGVyYWN0aW9uTWFwID0gcm9vdC5wZW5kaW5nSW50ZXJhY3Rpb25NYXA7XG4gICAgICBwZW5kaW5nSW50ZXJhY3Rpb25NYXAuZm9yRWFjaChmdW5jdGlvbiAoc2NoZWR1bGVkSW50ZXJhY3Rpb25zLCBzY2hlZHVsZWRFeHBpcmF0aW9uVGltZSkge1xuICAgICAgICAvLyBPbmx5IGRlY3JlbWVudCB0aGUgcGVuZGluZyBpbnRlcmFjdGlvbiBjb3VudCBpZiB3ZSdyZSBkb25lLlxuICAgICAgICAvLyBJZiB0aGVyZSdzIHN0aWxsIHdvcmsgYXQgdGhlIGN1cnJlbnQgcHJpb3JpdHksXG4gICAgICAgIC8vIFRoYXQgaW5kaWNhdGVzIHRoYXQgd2UgYXJlIHdhaXRpbmcgZm9yIHN1c3BlbnNlIGRhdGEuXG4gICAgICAgIGlmIChzY2hlZHVsZWRFeHBpcmF0aW9uVGltZSA+IGVhcmxpZXN0UmVtYWluaW5nVGltZUFmdGVyQ29tbWl0KSB7XG4gICAgICAgICAgcGVuZGluZ0ludGVyYWN0aW9uTWFwLmRlbGV0ZShzY2hlZHVsZWRFeHBpcmF0aW9uVGltZSk7XG5cbiAgICAgICAgICBzY2hlZHVsZWRJbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgICAgIGludGVyYWN0aW9uLl9fY291bnQtLTtcblxuICAgICAgICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwgJiYgaW50ZXJhY3Rpb24uX19jb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQoaW50ZXJhY3Rpb24pO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIC8vIEl0J3Mgbm90IHNhZmUgZm9yIGNvbW1pdFJvb3QoKSB0byB0aHJvdy5cbiAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgZXJyb3IgZm9yIG5vdyBhbmQgd2UnbGwgcmUtdGhyb3cgaW4gZmluaXNoUmVuZGVyaW5nKCkuXG4gICAgICAgICAgICAgICAgaWYgKCFoYXNVbmhhbmRsZWRFcnJvcikge1xuICAgICAgICAgICAgICAgICAgaGFzVW5oYW5kbGVkRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgdW5oYW5kbGVkRXJyb3IgPSBlcnJvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2V0Q2hpbGRFeHBpcmF0aW9uVGltZSh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyVGltZSkge1xuICBpZiAocmVuZGVyVGltZSAhPT0gTmV2ZXIgJiYgd29ya0luUHJvZ3Jlc3MuY2hpbGRFeHBpcmF0aW9uVGltZSA9PT0gTmV2ZXIpIHtcbiAgICAvLyBUaGUgY2hpbGRyZW4gb2YgdGhpcyBjb21wb25lbnQgYXJlIGhpZGRlbi4gRG9uJ3QgYnViYmxlIHRoZWlyXG4gICAgLy8gZXhwaXJhdGlvbiB0aW1lcy5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbmV3Q2hpbGRFeHBpcmF0aW9uVGltZSA9IE5vV29yaztcblxuICAvLyBCdWJibGUgdXAgdGhlIGVhcmxpZXN0IGV4cGlyYXRpb24gdGltZS5cbiAgaWYgKGVuYWJsZVByb2ZpbGVyVGltZXIgJiYgd29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSB7XG4gICAgLy8gV2UncmUgaW4gcHJvZmlsaW5nIG1vZGUuXG4gICAgLy8gTGV0J3MgdXNlIHRoaXMgc2FtZSB0cmF2ZXJzYWwgdG8gdXBkYXRlIHRoZSByZW5kZXIgZHVyYXRpb25zLlxuICAgIHZhciBhY3R1YWxEdXJhdGlvbiA9IHdvcmtJblByb2dyZXNzLmFjdHVhbER1cmF0aW9uO1xuICAgIHZhciB0cmVlQmFzZUR1cmF0aW9uID0gd29ya0luUHJvZ3Jlc3Muc2VsZkJhc2VEdXJhdGlvbjtcblxuICAgIC8vIFdoZW4gYSBmaWJlciBpcyBjbG9uZWQsIGl0cyBhY3R1YWxEdXJhdGlvbiBpcyByZXNldCB0byAwLlxuICAgIC8vIFRoaXMgdmFsdWUgd2lsbCBvbmx5IGJlIHVwZGF0ZWQgaWYgd29yayBpcyBkb25lIG9uIHRoZSBmaWJlciAoaS5lLiBpdCBkb2Vzbid0IGJhaWxvdXQpLlxuICAgIC8vIFdoZW4gd29yayBpcyBkb25lLCBpdCBzaG91bGQgYnViYmxlIHRvIHRoZSBwYXJlbnQncyBhY3R1YWxEdXJhdGlvbi5cbiAgICAvLyBJZiB0aGUgZmliZXIgaGFzIG5vdCBiZWVuIGNsb25lZCB0aG91Z2gsIChtZWFuaW5nIG5vIHdvcmsgd2FzIGRvbmUpLFxuICAgIC8vIFRoZW4gdGhpcyB2YWx1ZSB3aWxsIHJlZmxlY3QgdGhlIGFtb3VudCBvZiB0aW1lIHNwZW50IHdvcmtpbmcgb24gYSBwcmV2aW91cyByZW5kZXIuXG4gICAgLy8gSW4gdGhhdCBjYXNlIGl0IHNob3VsZCBub3QgYnViYmxlLlxuICAgIC8vIFdlIGRldGVybWluZSB3aGV0aGVyIGl0IHdhcyBjbG9uZWQgYnkgY29tcGFyaW5nIHRoZSBjaGlsZCBwb2ludGVyLlxuICAgIHZhciBzaG91bGRCdWJibGVBY3R1YWxEdXJhdGlvbnMgPSB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPT09IG51bGwgfHwgd29ya0luUHJvZ3Jlc3MuY2hpbGQgIT09IHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZS5jaGlsZDtcblxuICAgIHZhciBjaGlsZCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgdmFyIGNoaWxkVXBkYXRlRXhwaXJhdGlvblRpbWUgPSBjaGlsZC5leHBpcmF0aW9uVGltZTtcbiAgICAgIHZhciBjaGlsZENoaWxkRXhwaXJhdGlvblRpbWUgPSBjaGlsZC5jaGlsZEV4cGlyYXRpb25UaW1lO1xuICAgICAgaWYgKGNoaWxkVXBkYXRlRXhwaXJhdGlvblRpbWUgPiBuZXdDaGlsZEV4cGlyYXRpb25UaW1lKSB7XG4gICAgICAgIG5ld0NoaWxkRXhwaXJhdGlvblRpbWUgPSBjaGlsZFVwZGF0ZUV4cGlyYXRpb25UaW1lO1xuICAgICAgfVxuICAgICAgaWYgKGNoaWxkQ2hpbGRFeHBpcmF0aW9uVGltZSA+IG5ld0NoaWxkRXhwaXJhdGlvblRpbWUpIHtcbiAgICAgICAgbmV3Q2hpbGRFeHBpcmF0aW9uVGltZSA9IGNoaWxkQ2hpbGRFeHBpcmF0aW9uVGltZTtcbiAgICAgIH1cbiAgICAgIGlmIChzaG91bGRCdWJibGVBY3R1YWxEdXJhdGlvbnMpIHtcbiAgICAgICAgYWN0dWFsRHVyYXRpb24gKz0gY2hpbGQuYWN0dWFsRHVyYXRpb247XG4gICAgICB9XG4gICAgICB0cmVlQmFzZUR1cmF0aW9uICs9IGNoaWxkLnRyZWVCYXNlRHVyYXRpb247XG4gICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgfVxuICAgIHdvcmtJblByb2dyZXNzLmFjdHVhbER1cmF0aW9uID0gYWN0dWFsRHVyYXRpb247XG4gICAgd29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiA9IHRyZWVCYXNlRHVyYXRpb247XG4gIH0gZWxzZSB7XG4gICAgdmFyIF9jaGlsZCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgIHdoaWxlIChfY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIHZhciBfY2hpbGRVcGRhdGVFeHBpcmF0aW9uVGltZSA9IF9jaGlsZC5leHBpcmF0aW9uVGltZTtcbiAgICAgIHZhciBfY2hpbGRDaGlsZEV4cGlyYXRpb25UaW1lID0gX2NoaWxkLmNoaWxkRXhwaXJhdGlvblRpbWU7XG4gICAgICBpZiAoX2NoaWxkVXBkYXRlRXhwaXJhdGlvblRpbWUgPiBuZXdDaGlsZEV4cGlyYXRpb25UaW1lKSB7XG4gICAgICAgIG5ld0NoaWxkRXhwaXJhdGlvblRpbWUgPSBfY2hpbGRVcGRhdGVFeHBpcmF0aW9uVGltZTtcbiAgICAgIH1cbiAgICAgIGlmIChfY2hpbGRDaGlsZEV4cGlyYXRpb25UaW1lID4gbmV3Q2hpbGRFeHBpcmF0aW9uVGltZSkge1xuICAgICAgICBuZXdDaGlsZEV4cGlyYXRpb25UaW1lID0gX2NoaWxkQ2hpbGRFeHBpcmF0aW9uVGltZTtcbiAgICAgIH1cbiAgICAgIF9jaGlsZCA9IF9jaGlsZC5zaWJsaW5nO1xuICAgIH1cbiAgfVxuXG4gIHdvcmtJblByb2dyZXNzLmNoaWxkRXhwaXJhdGlvblRpbWUgPSBuZXdDaGlsZEV4cGlyYXRpb25UaW1lO1xufVxuXG5mdW5jdGlvbiBjb21wbGV0ZVVuaXRPZldvcmsod29ya0luUHJvZ3Jlc3MpIHtcbiAgLy8gQXR0ZW1wdCB0byBjb21wbGV0ZSB0aGUgY3VycmVudCB1bml0IG9mIHdvcmssIHRoZW4gbW92ZSB0byB0aGVcbiAgLy8gbmV4dCBzaWJsaW5nLiBJZiB0aGVyZSBhcmUgbm8gbW9yZSBzaWJsaW5ncywgcmV0dXJuIHRvIHRoZVxuICAvLyBwYXJlbnQgZmliZXIuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgLy8gVGhlIGN1cnJlbnQsIGZsdXNoZWQsIHN0YXRlIG9mIHRoaXMgZmliZXIgaXMgdGhlIGFsdGVybmF0ZS5cbiAgICAvLyBJZGVhbGx5IG5vdGhpbmcgc2hvdWxkIHJlbHkgb24gdGhpcywgYnV0IHJlbHlpbmcgb24gaXQgaGVyZVxuICAgIC8vIG1lYW5zIHRoYXQgd2UgZG9uJ3QgbmVlZCBhbiBhZGRpdGlvbmFsIGZpZWxkIG9uIHRoZSB3b3JrIGluXG4gICAgLy8gcHJvZ3Jlc3MuXG4gICAgdmFyIGN1cnJlbnQkJDEgPSB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGU7XG4gICAge1xuICAgICAgc2V0Q3VycmVudEZpYmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICB9XG5cbiAgICB2YXIgcmV0dXJuRmliZXIgPSB3b3JrSW5Qcm9ncmVzcy5yZXR1cm47XG4gICAgdmFyIHNpYmxpbmdGaWJlciA9IHdvcmtJblByb2dyZXNzLnNpYmxpbmc7XG5cbiAgICBpZiAoKHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyAmIEluY29tcGxldGUpID09PSBOb0VmZmVjdCkge1xuICAgICAgaWYgKHRydWUgJiYgcmVwbGF5RmFpbGVkVW5pdE9mV29ya1dpdGhJbnZva2VHdWFyZGVkQ2FsbGJhY2spIHtcbiAgICAgICAgLy8gRG9uJ3QgcmVwbGF5IGlmIGl0IGZhaWxzIGR1cmluZyBjb21wbGV0aW9uIHBoYXNlLlxuICAgICAgICBtYXlSZXBsYXlGYWlsZWRVbml0T2ZXb3JrID0gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyBUaGlzIGZpYmVyIGNvbXBsZXRlZC5cbiAgICAgIC8vIFJlbWVtYmVyIHdlJ3JlIGNvbXBsZXRpbmcgdGhpcyB1bml0IHNvIHdlIGNhbiBmaW5kIGEgYm91bmRhcnkgaWYgaXQgZmFpbHMuXG4gICAgICBuZXh0VW5pdE9mV29yayA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgaWYgKGVuYWJsZVByb2ZpbGVyVGltZXIpIHtcbiAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkge1xuICAgICAgICAgIHN0YXJ0UHJvZmlsZXJUaW1lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dFVuaXRPZldvcmsgPSBjb21wbGV0ZVdvcmsoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIG5leHRSZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpIHtcbiAgICAgICAgICAvLyBVcGRhdGUgcmVuZGVyIGR1cmF0aW9uIGFzc3VtaW5nIHdlIGRpZG4ndCBlcnJvci5cbiAgICAgICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhKHdvcmtJblByb2dyZXNzLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRVbml0T2ZXb3JrID0gY29tcGxldGVXb3JrKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCBuZXh0UmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgICAgfVxuICAgICAgaWYgKHRydWUgJiYgcmVwbGF5RmFpbGVkVW5pdE9mV29ya1dpdGhJbnZva2VHdWFyZGVkQ2FsbGJhY2spIHtcbiAgICAgICAgLy8gV2UncmUgb3V0IG9mIGNvbXBsZXRpb24gcGhhc2Ugc28gcmVwbGF5aW5nIGlzIGZpbmUgbm93LlxuICAgICAgICBtYXlSZXBsYXlGYWlsZWRVbml0T2ZXb3JrID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHN0b3BXb3JrVGltZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcmVzZXRDaGlsZEV4cGlyYXRpb25UaW1lKHdvcmtJblByb2dyZXNzLCBuZXh0UmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgICAge1xuICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV4dFVuaXRPZldvcmsgIT09IG51bGwpIHtcbiAgICAgICAgLy8gQ29tcGxldGluZyB0aGlzIGZpYmVyIHNwYXduZWQgbmV3IHdvcmsuIFdvcmsgb24gdGhhdCBuZXh0LlxuICAgICAgICByZXR1cm4gbmV4dFVuaXRPZldvcms7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXR1cm5GaWJlciAhPT0gbnVsbCAmJlxuICAgICAgLy8gRG8gbm90IGFwcGVuZCBlZmZlY3RzIHRvIHBhcmVudHMgaWYgYSBzaWJsaW5nIGZhaWxlZCB0byBjb21wbGV0ZVxuICAgICAgKHJldHVybkZpYmVyLmVmZmVjdFRhZyAmIEluY29tcGxldGUpID09PSBOb0VmZmVjdCkge1xuICAgICAgICAvLyBBcHBlbmQgYWxsIHRoZSBlZmZlY3RzIG9mIHRoZSBzdWJ0cmVlIGFuZCB0aGlzIGZpYmVyIG9udG8gdGhlIGVmZmVjdFxuICAgICAgICAvLyBsaXN0IG9mIHRoZSBwYXJlbnQuIFRoZSBjb21wbGV0aW9uIG9yZGVyIG9mIHRoZSBjaGlsZHJlbiBhZmZlY3RzIHRoZVxuICAgICAgICAvLyBzaWRlLWVmZmVjdCBvcmRlci5cbiAgICAgICAgaWYgKHJldHVybkZpYmVyLmZpcnN0RWZmZWN0ID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuRmliZXIuZmlyc3RFZmZlY3QgPSB3b3JrSW5Qcm9ncmVzcy5maXJzdEVmZmVjdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmIChyZXR1cm5GaWJlci5sYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0Lm5leHRFZmZlY3QgPSB3b3JrSW5Qcm9ncmVzcy5maXJzdEVmZmVjdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3Q7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGlzIGZpYmVyIGhhZCBzaWRlLWVmZmVjdHMsIHdlIGFwcGVuZCBpdCBBRlRFUiB0aGUgY2hpbGRyZW4nc1xuICAgICAgICAvLyBzaWRlLWVmZmVjdHMuIFdlIGNhbiBwZXJmb3JtIGNlcnRhaW4gc2lkZS1lZmZlY3RzIGVhcmxpZXIgaWZcbiAgICAgICAgLy8gbmVlZGVkLCBieSBkb2luZyBtdWx0aXBsZSBwYXNzZXMgb3ZlciB0aGUgZWZmZWN0IGxpc3QuIFdlIGRvbid0IHdhbnRcbiAgICAgICAgLy8gdG8gc2NoZWR1bGUgb3VyIG93biBzaWRlLWVmZmVjdCBvbiBvdXIgb3duIGxpc3QgYmVjYXVzZSBpZiBlbmQgdXBcbiAgICAgICAgLy8gcmV1c2luZyBjaGlsZHJlbiB3ZSdsbCBzY2hlZHVsZSB0aGlzIGVmZmVjdCBvbnRvIGl0c2VsZiBzaW5jZSB3ZSdyZVxuICAgICAgICAvLyBhdCB0aGUgZW5kLlxuICAgICAgICB2YXIgZWZmZWN0VGFnID0gd29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnO1xuICAgICAgICAvLyBTa2lwIGJvdGggTm9Xb3JrIGFuZCBQZXJmb3JtZWRXb3JrIHRhZ3Mgd2hlbiBjcmVhdGluZyB0aGUgZWZmZWN0IGxpc3QuXG4gICAgICAgIC8vIFBlcmZvcm1lZFdvcmsgZWZmZWN0IGlzIHJlYWQgYnkgUmVhY3QgRGV2VG9vbHMgYnV0IHNob3VsZG4ndCBiZSBjb21taXR0ZWQuXG4gICAgICAgIGlmIChlZmZlY3RUYWcgPiBQZXJmb3JtZWRXb3JrKSB7XG4gICAgICAgICAgaWYgKHJldHVybkZpYmVyLmxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QubmV4dEVmZmVjdCA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRydWUgJiYgUmVhY3RGaWJlckluc3RydW1lbnRhdGlvbl8xLmRlYnVnVG9vbCkge1xuICAgICAgICBSZWFjdEZpYmVySW5zdHJ1bWVudGF0aW9uXzEuZGVidWdUb29sLm9uQ29tcGxldGVXb3JrKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNpYmxpbmdGaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAvLyBJZiB0aGVyZSBpcyBtb3JlIHdvcmsgdG8gZG8gaW4gdGhpcyByZXR1cm5GaWJlciwgZG8gdGhhdCBuZXh0LlxuICAgICAgICByZXR1cm4gc2libGluZ0ZpYmVyO1xuICAgICAgfSBlbHNlIGlmIChyZXR1cm5GaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIG1vcmUgd29yayBpbiB0aGlzIHJldHVybkZpYmVyLiBDb21wbGV0ZSB0aGUgcmV0dXJuRmliZXIuXG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gcmV0dXJuRmliZXI7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gV2UndmUgcmVhY2hlZCB0aGUgcm9vdC5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChlbmFibGVQcm9maWxlclRpbWVyICYmIHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkge1xuICAgICAgICAvLyBSZWNvcmQgdGhlIHJlbmRlciBkdXJhdGlvbiBmb3IgdGhlIGZpYmVyIHRoYXQgZXJyb3JlZC5cbiAgICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YSh3b3JrSW5Qcm9ncmVzcywgZmFsc2UpO1xuXG4gICAgICAgIC8vIEluY2x1ZGUgdGhlIHRpbWUgc3BlbnQgd29ya2luZyBvbiBmYWlsZWQgY2hpbGRyZW4gYmVmb3JlIGNvbnRpbnVpbmcuXG4gICAgICAgIHZhciBhY3R1YWxEdXJhdGlvbiA9IHdvcmtJblByb2dyZXNzLmFjdHVhbER1cmF0aW9uO1xuICAgICAgICB2YXIgY2hpbGQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgYWN0dWFsRHVyYXRpb24gKz0gY2hpbGQuYWN0dWFsRHVyYXRpb247XG4gICAgICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgICAgICB9XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmFjdHVhbER1cmF0aW9uID0gYWN0dWFsRHVyYXRpb247XG4gICAgICB9XG5cbiAgICAgIC8vIFRoaXMgZmliZXIgZGlkIG5vdCBjb21wbGV0ZSBiZWNhdXNlIHNvbWV0aGluZyB0aHJldy4gUG9wIHZhbHVlcyBvZmZcbiAgICAgIC8vIHRoZSBzdGFjayB3aXRob3V0IGVudGVyaW5nIHRoZSBjb21wbGV0ZSBwaGFzZS4gSWYgdGhpcyBpcyBhIGJvdW5kYXJ5LFxuICAgICAgLy8gY2FwdHVyZSB2YWx1ZXMgaWYgcG9zc2libGUuXG4gICAgICB2YXIgbmV4dCA9IHVud2luZFdvcmsod29ya0luUHJvZ3Jlc3MsIG5leHRSZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgICAvLyBCZWNhdXNlIHRoaXMgZmliZXIgZGlkIG5vdCBjb21wbGV0ZSwgZG9uJ3QgcmVzZXQgaXRzIGV4cGlyYXRpb24gdGltZS5cbiAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgJiBEaWRDYXB0dXJlKSB7XG4gICAgICAgIC8vIFJlc3RhcnRpbmcgYW4gZXJyb3IgYm91bmRhcnlcbiAgICAgICAgc3RvcEZhaWxlZFdvcmtUaW1lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdG9wV29ya1RpbWVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIH1cblxuICAgICAge1xuICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV4dCAhPT0gbnVsbCkge1xuICAgICAgICBzdG9wV29ya1RpbWVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgaWYgKHRydWUgJiYgUmVhY3RGaWJlckluc3RydW1lbnRhdGlvbl8xLmRlYnVnVG9vbCkge1xuICAgICAgICAgIFJlYWN0RmliZXJJbnN0cnVtZW50YXRpb25fMS5kZWJ1Z1Rvb2wub25Db21wbGV0ZVdvcmsod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgY29tcGxldGluZyB0aGlzIHdvcmsgc3Bhd25lZCBuZXcgd29yaywgZG8gdGhhdCBuZXh0LiBXZSdsbCBjb21lXG4gICAgICAgIC8vIGJhY2sgaGVyZSBhZ2Fpbi5cbiAgICAgICAgLy8gU2luY2Ugd2UncmUgcmVzdGFydGluZywgcmVtb3ZlIGFueXRoaW5nIHRoYXQgaXMgbm90IGEgaG9zdCBlZmZlY3RcbiAgICAgICAgLy8gZnJvbSB0aGUgZWZmZWN0IHRhZy5cbiAgICAgICAgbmV4dC5lZmZlY3RUYWcgJj0gSG9zdEVmZmVjdE1hc2s7XG4gICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgfVxuXG4gICAgICBpZiAocmV0dXJuRmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgLy8gTWFyayB0aGUgcGFyZW50IGZpYmVyIGFzIGluY29tcGxldGUgYW5kIGNsZWFyIGl0cyBlZmZlY3QgbGlzdC5cbiAgICAgICAgcmV0dXJuRmliZXIuZmlyc3RFZmZlY3QgPSByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgICAgICAgcmV0dXJuRmliZXIuZWZmZWN0VGFnIHw9IEluY29tcGxldGU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0cnVlICYmIFJlYWN0RmliZXJJbnN0cnVtZW50YXRpb25fMS5kZWJ1Z1Rvb2wpIHtcbiAgICAgICAgUmVhY3RGaWJlckluc3RydW1lbnRhdGlvbl8xLmRlYnVnVG9vbC5vbkNvbXBsZXRlV29yayh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzaWJsaW5nRmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbW9yZSB3b3JrIHRvIGRvIGluIHRoaXMgcmV0dXJuRmliZXIsIGRvIHRoYXQgbmV4dC5cbiAgICAgICAgcmV0dXJuIHNpYmxpbmdGaWJlcjtcbiAgICAgIH0gZWxzZSBpZiAocmV0dXJuRmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgLy8gSWYgdGhlcmUncyBubyBtb3JlIHdvcmsgaW4gdGhpcyByZXR1cm5GaWJlci4gQ29tcGxldGUgdGhlIHJldHVybkZpYmVyLlxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IHJldHVybkZpYmVyO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFdpdGhvdXQgdGhpcyBleHBsaWNpdCBudWxsIHJldHVybiBGbG93IGNvbXBsYWlucyBvZiBpbnZhbGlkIHJldHVybiB0eXBlXG4gIC8vIFRPRE8gUmVtb3ZlIHRoZSBhYm92ZSB3aGlsZSh0cnVlKSBsb29wXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnJlYWNoYWJsZVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gcGVyZm9ybVVuaXRPZldvcmsod29ya0luUHJvZ3Jlc3MpIHtcbiAgLy8gVGhlIGN1cnJlbnQsIGZsdXNoZWQsIHN0YXRlIG9mIHRoaXMgZmliZXIgaXMgdGhlIGFsdGVybmF0ZS5cbiAgLy8gSWRlYWxseSBub3RoaW5nIHNob3VsZCByZWx5IG9uIHRoaXMsIGJ1dCByZWx5aW5nIG9uIGl0IGhlcmVcbiAgLy8gbWVhbnMgdGhhdCB3ZSBkb24ndCBuZWVkIGFuIGFkZGl0aW9uYWwgZmllbGQgb24gdGhlIHdvcmsgaW5cbiAgLy8gcHJvZ3Jlc3MuXG4gIHZhciBjdXJyZW50JCQxID0gd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlO1xuXG4gIC8vIFNlZSBpZiBiZWdpbm5pbmcgdGhpcyB3b3JrIHNwYXducyBtb3JlIHdvcmsuXG4gIHN0YXJ0V29ya1RpbWVyKHdvcmtJblByb2dyZXNzKTtcbiAge1xuICAgIHNldEN1cnJlbnRGaWJlcih3b3JrSW5Qcm9ncmVzcyk7XG4gIH1cblxuICBpZiAodHJ1ZSAmJiByZXBsYXlGYWlsZWRVbml0T2ZXb3JrV2l0aEludm9rZUd1YXJkZWRDYWxsYmFjaykge1xuICAgIHN0YXNoZWRXb3JrSW5Qcm9ncmVzc1Byb3BlcnRpZXMgPSBhc3NpZ25GaWJlclByb3BlcnRpZXNJbkRFVihzdGFzaGVkV29ya0luUHJvZ3Jlc3NQcm9wZXJ0aWVzLCB3b3JrSW5Qcm9ncmVzcyk7XG4gIH1cblxuICB2YXIgbmV4dCA9IHZvaWQgMDtcbiAgaWYgKGVuYWJsZVByb2ZpbGVyVGltZXIpIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSB7XG4gICAgICBzdGFydFByb2ZpbGVyVGltZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIG5leHQgPSBiZWdpbldvcmsoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIG5leHRSZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpIHtcbiAgICAgIC8vIFJlY29yZCB0aGUgcmVuZGVyIGR1cmF0aW9uIGFzc3VtaW5nIHdlIGRpZG4ndCBiYWlsb3V0IChvciBlcnJvcikuXG4gICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhKHdvcmtJblByb2dyZXNzLCB0cnVlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbmV4dCA9IGJlZ2luV29yayhjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgbmV4dFJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB9XG5cbiAge1xuICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgaWYgKGlzUmVwbGF5aW5nRmFpbGVkVW5pdE9mV29yaykge1xuICAgICAgLy8gQ3VycmVudGx5IHJlcGxheWluZyBhIGZhaWxlZCB1bml0IG9mIHdvcmsuIFRoaXMgc2hvdWxkIGJlIHVucmVhY2hhYmxlLFxuICAgICAgLy8gYmVjYXVzZSB0aGUgcmVuZGVyIHBoYXNlIGlzIG1lYW50IHRvIGJlIGlkZW1wb3RlbnQsIGFuZCBpdCBzaG91bGRcbiAgICAgIC8vIGhhdmUgdGhyb3duIGFnYWluLiBTaW5jZSBpdCBkaWRuJ3QsIHJldGhyb3cgdGhlIG9yaWdpbmFsIGVycm9yLCBzb1xuICAgICAgLy8gUmVhY3QncyBpbnRlcm5hbCBzdGFjayBpcyBub3QgbWlzYWxpZ25lZC5cbiAgICAgIHJldGhyb3dPcmlnaW5hbEVycm9yKCk7XG4gICAgfVxuICB9XG4gIGlmICh0cnVlICYmIFJlYWN0RmliZXJJbnN0cnVtZW50YXRpb25fMS5kZWJ1Z1Rvb2wpIHtcbiAgICBSZWFjdEZpYmVySW5zdHJ1bWVudGF0aW9uXzEuZGVidWdUb29sLm9uQmVnaW5Xb3JrKHdvcmtJblByb2dyZXNzKTtcbiAgfVxuXG4gIGlmIChuZXh0ID09PSBudWxsKSB7XG4gICAgLy8gSWYgdGhpcyBkb2Vzbid0IHNwYXduIG5ldyB3b3JrLCBjb21wbGV0ZSB0aGUgY3VycmVudCB3b3JrLlxuICAgIG5leHQgPSBjb21wbGV0ZVVuaXRPZldvcmsod29ya0luUHJvZ3Jlc3MpO1xuICB9XG5cbiAgUmVhY3RDdXJyZW50T3duZXIkMi5jdXJyZW50ID0gbnVsbDtcblxuICByZXR1cm4gbmV4dDtcbn1cblxuZnVuY3Rpb24gd29ya0xvb3AoaXNZaWVsZHkpIHtcbiAgaWYgKCFpc1lpZWxkeSkge1xuICAgIC8vIEZsdXNoIHdvcmsgd2l0aG91dCB5aWVsZGluZ1xuICAgIHdoaWxlIChuZXh0VW5pdE9mV29yayAhPT0gbnVsbCkge1xuICAgICAgbmV4dFVuaXRPZldvcmsgPSBwZXJmb3JtVW5pdE9mV29yayhuZXh0VW5pdE9mV29yayk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEZsdXNoIGFzeW5jaHJvbm91cyB3b3JrIHVudGlsIHRoZXJlJ3MgYSBoaWdoZXIgcHJpb3JpdHkgZXZlbnRcbiAgICB3aGlsZSAobmV4dFVuaXRPZldvcmsgIT09IG51bGwgJiYgIXNob3VsZFlpZWxkVG9SZW5kZXJlcigpKSB7XG4gICAgICBuZXh0VW5pdE9mV29yayA9IHBlcmZvcm1Vbml0T2ZXb3JrKG5leHRVbml0T2ZXb3JrKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyUm9vdChyb290LCBpc1lpZWxkeSkge1xuICAhIWlzV29ya2luZyA/IGludmFyaWFudChmYWxzZSwgJ3JlbmRlclJvb3Qgd2FzIGNhbGxlZCByZWN1cnNpdmVseS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKSA6IHZvaWQgMDtcblxuICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG5cbiAgaXNXb3JraW5nID0gdHJ1ZTtcbiAgdmFyIHByZXZpb3VzRGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudDtcbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50ID0gQ29udGV4dE9ubHlEaXNwYXRjaGVyO1xuXG4gIHZhciBleHBpcmF0aW9uVGltZSA9IHJvb3QubmV4dEV4cGlyYXRpb25UaW1lVG9Xb3JrT247XG5cbiAgLy8gQ2hlY2sgaWYgd2UncmUgc3RhcnRpbmcgZnJvbSBhIGZyZXNoIHN0YWNrLCBvciBpZiB3ZSdyZSByZXN1bWluZyBmcm9tXG4gIC8vIHByZXZpb3VzbHkgeWllbGRlZCB3b3JrLlxuICBpZiAoZXhwaXJhdGlvblRpbWUgIT09IG5leHRSZW5kZXJFeHBpcmF0aW9uVGltZSB8fCByb290ICE9PSBuZXh0Um9vdCB8fCBuZXh0VW5pdE9mV29yayA9PT0gbnVsbCkge1xuICAgIC8vIFJlc2V0IHRoZSBzdGFjayBhbmQgc3RhcnQgd29ya2luZyBmcm9tIHRoZSByb290LlxuICAgIHJlc2V0U3RhY2soKTtcbiAgICBuZXh0Um9vdCA9IHJvb3Q7XG4gICAgbmV4dFJlbmRlckV4cGlyYXRpb25UaW1lID0gZXhwaXJhdGlvblRpbWU7XG4gICAgbmV4dFVuaXRPZldvcmsgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhuZXh0Um9vdC5jdXJyZW50LCBudWxsLCBuZXh0UmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgIHJvb3QucGVuZGluZ0NvbW1pdEV4cGlyYXRpb25UaW1lID0gTm9Xb3JrO1xuXG4gICAgaWYgKGVuYWJsZVNjaGVkdWxlclRyYWNpbmcpIHtcbiAgICAgIC8vIERldGVybWluZSB3aGljaCBpbnRlcmFjdGlvbnMgdGhpcyBiYXRjaCBvZiB3b3JrIGN1cnJlbnRseSBpbmNsdWRlcyxcbiAgICAgIC8vIFNvIHRoYXQgd2UgY2FuIGFjY3VyYXRlbHkgYXR0cmlidXRlIHRpbWUgc3BlbnQgd29ya2luZyBvbiBpdCxcbiAgICAgIHZhciBpbnRlcmFjdGlvbnMgPSBuZXcgU2V0KCk7XG4gICAgICByb290LnBlbmRpbmdJbnRlcmFjdGlvbk1hcC5mb3JFYWNoKGZ1bmN0aW9uIChzY2hlZHVsZWRJbnRlcmFjdGlvbnMsIHNjaGVkdWxlZEV4cGlyYXRpb25UaW1lKSB7XG4gICAgICAgIGlmIChzY2hlZHVsZWRFeHBpcmF0aW9uVGltZSA+PSBleHBpcmF0aW9uVGltZSkge1xuICAgICAgICAgIHNjaGVkdWxlZEludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGludGVyYWN0aW9ucy5hZGQoaW50ZXJhY3Rpb24pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gU3RvcmUgdGhlIGN1cnJlbnQgc2V0IG9mIGludGVyYWN0aW9ucyBvbiB0aGUgRmliZXJSb290IGZvciBhIGZldyByZWFzb25zOlxuICAgICAgLy8gV2UgY2FuIHJlLXVzZSBpdCBpbiBob3QgZnVuY3Rpb25zIGxpa2UgcmVuZGVyUm9vdCgpIHdpdGhvdXQgaGF2aW5nIHRvIHJlY2FsY3VsYXRlIGl0LlxuICAgICAgLy8gV2Ugd2lsbCBhbHNvIHVzZSBpdCBpbiBjb21taXRXb3JrKCkgdG8gcGFzcyB0byBhbnkgUHJvZmlsZXIgb25SZW5kZXIoKSBob29rcy5cbiAgICAgIC8vIFRoaXMgYWxzbyBwcm92aWRlcyBEZXZUb29scyB3aXRoIGEgd2F5IHRvIGFjY2VzcyBpdCB3aGVuIHRoZSBvbkNvbW1pdFJvb3QoKSBob29rIGlzIGNhbGxlZC5cbiAgICAgIHJvb3QubWVtb2l6ZWRJbnRlcmFjdGlvbnMgPSBpbnRlcmFjdGlvbnM7XG5cbiAgICAgIGlmIChpbnRlcmFjdGlvbnMuc2l6ZSA+IDApIHtcbiAgICAgICAgdmFyIHN1YnNjcmliZXIgPSB0cmFjaW5nLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuICAgICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciB0aHJlYWRJRCA9IGNvbXB1dGVUaHJlYWRJRChleHBpcmF0aW9uVGltZSwgcm9vdC5pbnRlcmFjdGlvblRocmVhZElEKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5vbldvcmtTdGFydGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAvLyBXb3JrIHRocm93biBieSBhbiBpbnRlcmFjdGlvbiB0cmFjaW5nIHN1YnNjcmliZXIgc2hvdWxkIGJlIHJldGhyb3duLFxuICAgICAgICAgICAgLy8gQnV0IG9ubHkgb25jZSBpdCdzIHNhZmUgKHRvIGF2b2lkIGxlYXZpbmcgdGhlIHNjaGVkdWxlciBpbiBhbiBpbnZhbGlkIHN0YXRlKS5cbiAgICAgICAgICAgIC8vIFN0b3JlIHRoZSBlcnJvciBmb3Igbm93IGFuZCB3ZSdsbCByZS10aHJvdyBpbiBmaW5pc2hSZW5kZXJpbmcoKS5cbiAgICAgICAgICAgIGlmICghaGFzVW5oYW5kbGVkRXJyb3IpIHtcbiAgICAgICAgICAgICAgaGFzVW5oYW5kbGVkRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICB1bmhhbmRsZWRFcnJvciA9IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gbnVsbDtcbiAgaWYgKGVuYWJsZVNjaGVkdWxlclRyYWNpbmcpIHtcbiAgICAvLyBXZSdyZSBhYm91dCB0byBzdGFydCBuZXcgdHJhY2VkIHdvcmsuXG4gICAgLy8gUmVzdG9yZSBwZW5kaW5nIGludGVyYWN0aW9ucyBzbyBjYXNjYWRpbmcgd29yayB0cmlnZ2VyZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2Ugd2lsbCBiZSBhY2NvdW50ZWQgZm9yLlxuICAgIHByZXZJbnRlcmFjdGlvbnMgPSB0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7XG4gICAgdHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gcm9vdC5tZW1vaXplZEludGVyYWN0aW9ucztcbiAgfVxuXG4gIHZhciBkaWRGYXRhbCA9IGZhbHNlO1xuXG4gIHN0YXJ0V29ya0xvb3BUaW1lcihuZXh0VW5pdE9mV29yayk7XG5cbiAgZG8ge1xuICAgIHRyeSB7XG4gICAgICB3b3JrTG9vcChpc1lpZWxkeSk7XG4gICAgfSBjYXRjaCAodGhyb3duVmFsdWUpIHtcbiAgICAgIHJlc2V0Q29udGV4dERlcGVuZGVuY2VzKCk7XG4gICAgICByZXNldEhvb2tzKCk7XG5cbiAgICAgIC8vIFJlc2V0IGluIGNhc2UgY29tcGxldGlvbiB0aHJvd3MuXG4gICAgICAvLyBUaGlzIGlzIG9ubHkgdXNlZCBpbiBERVYgYW5kIHdoZW4gcmVwbGF5aW5nIGlzIG9uLlxuICAgICAgdmFyIG1heVJlcGxheSA9IHZvaWQgMDtcbiAgICAgIGlmICh0cnVlICYmIHJlcGxheUZhaWxlZFVuaXRPZldvcmtXaXRoSW52b2tlR3VhcmRlZENhbGxiYWNrKSB7XG4gICAgICAgIG1heVJlcGxheSA9IG1heVJlcGxheUZhaWxlZFVuaXRPZldvcms7XG4gICAgICAgIG1heVJlcGxheUZhaWxlZFVuaXRPZldvcmsgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV4dFVuaXRPZldvcmsgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIGZhdGFsIGVycm9yLlxuICAgICAgICBkaWRGYXRhbCA9IHRydWU7XG4gICAgICAgIG9uVW5jYXVnaHRFcnJvcih0aHJvd25WYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZW5hYmxlUHJvZmlsZXJUaW1lciAmJiBuZXh0VW5pdE9mV29yay5tb2RlICYgUHJvZmlsZU1vZGUpIHtcbiAgICAgICAgICAvLyBSZWNvcmQgdGhlIHRpbWUgc3BlbnQgcmVuZGVyaW5nIGJlZm9yZSBhbiBlcnJvciB3YXMgdGhyb3duLlxuICAgICAgICAgIC8vIFRoaXMgYXZvaWRzIGluYWNjdXJhdGUgUHJvZmlsZXIgZHVyYXRpb25zIGluIHRoZSBjYXNlIG9mIGEgc3VzcGVuZGVkIHJlbmRlci5cbiAgICAgICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhKG5leHRVbml0T2ZXb3JrLCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBSZXNldCBnbG9iYWwgZGVidWcgc3RhdGVcbiAgICAgICAgICAvLyBXZSBhc3N1bWUgdGhpcyBpcyBkZWZpbmVkIGluIERFVlxuICAgICAgICAgIHJlc2V0Q3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHJ1ZSAmJiByZXBsYXlGYWlsZWRVbml0T2ZXb3JrV2l0aEludm9rZUd1YXJkZWRDYWxsYmFjaykge1xuICAgICAgICAgIGlmIChtYXlSZXBsYXkpIHtcbiAgICAgICAgICAgIHZhciBmYWlsZWRVbml0T2ZXb3JrID0gbmV4dFVuaXRPZldvcms7XG4gICAgICAgICAgICByZXBsYXlVbml0T2ZXb3JrKGZhaWxlZFVuaXRPZldvcmssIHRocm93blZhbHVlLCBpc1lpZWxkeSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVE9ETzogd2UgYWxyZWFkeSBrbm93IHRoaXMgaXNuJ3QgdHJ1ZSBpbiBzb21lIGNhc2VzLlxuICAgICAgICAvLyBBdCBsZWFzdCB0aGlzIHNob3dzIGEgbmljZXIgZXJyb3IgbWVzc2FnZSB1bnRpbCB3ZSBmaWd1cmUgb3V0IHRoZSBjYXVzZS5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMjQ0OSNpc3N1ZWNvbW1lbnQtMzg2NzI3NDMxXG4gICAgICAgICEobmV4dFVuaXRPZldvcmsgIT09IG51bGwpID8gaW52YXJpYW50KGZhbHNlLCAnRmFpbGVkIHRvIHJlcGxheSByZW5kZXJpbmcgYWZ0ZXIgYW4gZXJyb3IuIFRoaXMgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUgd2l0aCBhIHJlcHJvZHVjaW5nIGNhc2UgdG8gaGVscCB1cyBmaW5kIGl0LicpIDogdm9pZCAwO1xuXG4gICAgICAgIHZhciBzb3VyY2VGaWJlciA9IG5leHRVbml0T2ZXb3JrO1xuICAgICAgICB2YXIgcmV0dXJuRmliZXIgPSBzb3VyY2VGaWJlci5yZXR1cm47XG4gICAgICAgIGlmIChyZXR1cm5GaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHJvb3QuIFRoZSByb290IGNvdWxkIGNhcHR1cmUgaXRzIG93biBlcnJvcnMuIEhvd2V2ZXIsXG4gICAgICAgICAgLy8gd2UgZG9uJ3Qga25vdyBpZiBpdCBlcnJvcnMgYmVmb3JlIG9yIGFmdGVyIHdlIHB1c2hlZCB0aGUgaG9zdFxuICAgICAgICAgIC8vIGNvbnRleHQuIFRoaXMgaW5mb3JtYXRpb24gaXMgbmVlZGVkIHRvIGF2b2lkIGEgc3RhY2sgbWlzbWF0Y2guXG4gICAgICAgICAgLy8gQmVjYXVzZSB3ZSdyZSBub3Qgc3VyZSwgdHJlYXQgdGhpcyBhcyBhIGZhdGFsIGVycm9yLiBXZSBjb3VsZCB0cmFja1xuICAgICAgICAgIC8vIHdoaWNoIHBoYXNlIGl0IGZhaWxzIGluLCBidXQgZG9lc24ndCBzZWVtIHdvcnRoIGl0LiBBdCBsZWFzdFxuICAgICAgICAgIC8vIGZvciBub3cuXG4gICAgICAgICAgZGlkRmF0YWwgPSB0cnVlO1xuICAgICAgICAgIG9uVW5jYXVnaHRFcnJvcih0aHJvd25WYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3dFeGNlcHRpb24ocm9vdCwgcmV0dXJuRmliZXIsIHNvdXJjZUZpYmVyLCB0aHJvd25WYWx1ZSwgbmV4dFJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgICAgICAgICBuZXh0VW5pdE9mV29yayA9IGNvbXBsZXRlVW5pdE9mV29yayhzb3VyY2VGaWJlcik7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgYnJlYWs7XG4gIH0gd2hpbGUgKHRydWUpO1xuXG4gIGlmIChlbmFibGVTY2hlZHVsZXJUcmFjaW5nKSB7XG4gICAgLy8gVHJhY2VkIHdvcmsgaXMgZG9uZSBmb3Igbm93OyByZXN0b3JlIHRoZSBwcmV2aW91cyBpbnRlcmFjdGlvbnMuXG4gICAgdHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gcHJldkludGVyYWN0aW9ucztcbiAgfVxuXG4gIC8vIFdlJ3JlIGRvbmUgcGVyZm9ybWluZyB3b3JrLiBUaW1lIHRvIGNsZWFuIHVwLlxuICBpc1dvcmtpbmcgPSBmYWxzZTtcbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50ID0gcHJldmlvdXNEaXNwYXRjaGVyO1xuICByZXNldENvbnRleHREZXBlbmRlbmNlcygpO1xuICByZXNldEhvb2tzKCk7XG5cbiAgLy8gWWllbGQgYmFjayB0byBtYWluIHRocmVhZC5cbiAgaWYgKGRpZEZhdGFsKSB7XG4gICAgdmFyIF9kaWRDb21wbGV0ZVJvb3QgPSBmYWxzZTtcbiAgICBzdG9wV29ya0xvb3BUaW1lcihpbnRlcnJ1cHRlZEJ5LCBfZGlkQ29tcGxldGVSb290KTtcbiAgICBpbnRlcnJ1cHRlZEJ5ID0gbnVsbDtcbiAgICAvLyBUaGVyZSB3YXMgYSBmYXRhbCBlcnJvci5cbiAgICB7XG4gICAgICByZXNldFN0YWNrQWZ0ZXJGYXRhbEVycm9ySW5EZXYoKTtcbiAgICB9XG4gICAgLy8gYG5leHRSb290YCBwb2ludHMgdG8gdGhlIGluLXByb2dyZXNzIHJvb3QuIEEgbm9uLW51bGwgdmFsdWUgaW5kaWNhdGVzXG4gICAgLy8gdGhhdCB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGFuIGFzeW5jIHJlbmRlci4gU2V0IGl0IHRvIG51bGwgdG8gaW5kaWNhdGVcbiAgICAvLyB0aGVyZSdzIG5vIG1vcmUgd29yayB0byBiZSBkb25lIGluIHRoZSBjdXJyZW50IGJhdGNoLlxuICAgIG5leHRSb290ID0gbnVsbDtcbiAgICBvbkZhdGFsKHJvb3QpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChuZXh0VW5pdE9mV29yayAhPT0gbnVsbCkge1xuICAgIC8vIFRoZXJlJ3Mgc3RpbGwgcmVtYWluaW5nIGFzeW5jIHdvcmsgaW4gdGhpcyB0cmVlLCBidXQgd2UgcmFuIG91dCBvZiB0aW1lXG4gICAgLy8gaW4gdGhlIGN1cnJlbnQgZnJhbWUuIFlpZWxkIGJhY2sgdG8gdGhlIHJlbmRlcmVyLiBVbmxlc3Mgd2UncmVcbiAgICAvLyBpbnRlcnJ1cHRlZCBieSBhIGhpZ2hlciBwcmlvcml0eSB1cGRhdGUsIHdlJ2xsIGNvbnRpbnVlIGxhdGVyIGZyb20gd2hlcmVcbiAgICAvLyB3ZSBsZWZ0IG9mZi5cbiAgICB2YXIgX2RpZENvbXBsZXRlUm9vdDIgPSBmYWxzZTtcbiAgICBzdG9wV29ya0xvb3BUaW1lcihpbnRlcnJ1cHRlZEJ5LCBfZGlkQ29tcGxldGVSb290Mik7XG4gICAgaW50ZXJydXB0ZWRCeSA9IG51bGw7XG4gICAgb25ZaWVsZChyb290KTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBXZSBjb21wbGV0ZWQgdGhlIHdob2xlIHRyZWUuXG4gIHZhciBkaWRDb21wbGV0ZVJvb3QgPSB0cnVlO1xuICBzdG9wV29ya0xvb3BUaW1lcihpbnRlcnJ1cHRlZEJ5LCBkaWRDb21wbGV0ZVJvb3QpO1xuICB2YXIgcm9vdFdvcmtJblByb2dyZXNzID0gcm9vdC5jdXJyZW50LmFsdGVybmF0ZTtcbiAgIShyb290V29ya0luUHJvZ3Jlc3MgIT09IG51bGwpID8gaW52YXJpYW50KGZhbHNlLCAnRmluaXNoZWQgcm9vdCBzaG91bGQgaGF2ZSBhIHdvcmstaW4tcHJvZ3Jlc3MuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJykgOiB2b2lkIDA7XG5cbiAgLy8gYG5leHRSb290YCBwb2ludHMgdG8gdGhlIGluLXByb2dyZXNzIHJvb3QuIEEgbm9uLW51bGwgdmFsdWUgaW5kaWNhdGVzXG4gIC8vIHRoYXQgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBhbiBhc3luYyByZW5kZXIuIFNldCBpdCB0byBudWxsIHRvIGluZGljYXRlXG4gIC8vIHRoZXJlJ3Mgbm8gbW9yZSB3b3JrIHRvIGJlIGRvbmUgaW4gdGhlIGN1cnJlbnQgYmF0Y2guXG4gIG5leHRSb290ID0gbnVsbDtcbiAgaW50ZXJydXB0ZWRCeSA9IG51bGw7XG5cbiAgaWYgKG5leHRSZW5kZXJEaWRFcnJvcikge1xuICAgIC8vIFRoZXJlIHdhcyBhbiBlcnJvclxuICAgIGlmIChoYXNMb3dlclByaW9yaXR5V29yayhyb290LCBleHBpcmF0aW9uVGltZSkpIHtcbiAgICAgIC8vIFRoZXJlJ3MgbG93ZXIgcHJpb3JpdHkgd29yay4gSWYgc28sIGl0IG1heSBoYXZlIHRoZSBlZmZlY3Qgb2YgZml4aW5nXG4gICAgICAvLyB0aGUgZXhjZXB0aW9uIHRoYXQgd2FzIGp1c3QgdGhyb3duLiBFeGl0IHdpdGhvdXQgY29tbWl0dGluZy4gVGhpcyBpc1xuICAgICAgLy8gc2ltaWxhciB0byBhIHN1c3BlbmQsIGJ1dCB3aXRob3V0IGEgdGltZW91dCBiZWNhdXNlIHdlJ3JlIG5vdCB3YWl0aW5nXG4gICAgICAvLyBmb3IgYSBwcm9taXNlIHRvIHJlc29sdmUuIFJlYWN0IHdpbGwgcmVzdGFydCBhdCB0aGUgbG93ZXJcbiAgICAgIC8vIHByaW9yaXR5IGxldmVsLlxuICAgICAgbWFya1N1c3BlbmRlZFByaW9yaXR5TGV2ZWwocm9vdCwgZXhwaXJhdGlvblRpbWUpO1xuICAgICAgdmFyIHN1c3BlbmRlZEV4cGlyYXRpb25UaW1lID0gZXhwaXJhdGlvblRpbWU7XG4gICAgICB2YXIgcm9vdEV4cGlyYXRpb25UaW1lID0gcm9vdC5leHBpcmF0aW9uVGltZTtcbiAgICAgIG9uU3VzcGVuZChyb290LCByb290V29ya0luUHJvZ3Jlc3MsIHN1c3BlbmRlZEV4cGlyYXRpb25UaW1lLCByb290RXhwaXJhdGlvblRpbWUsIC0xIC8vIEluZGljYXRlcyBubyB0aW1lb3V0XG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgLy8gVGhlcmUncyBubyBsb3dlciBwcmlvcml0eSB3b3JrLCBidXQgd2UncmUgcmVuZGVyaW5nIGFzeW5jaHJvbm91c2x5LlxuICAgIC8vIFN5bmNocm9ub3VzbHkgYXR0ZW1wdCB0byByZW5kZXIgdGhlIHNhbWUgbGV2ZWwgb25lIG1vcmUgdGltZS4gVGhpcyBpc1xuICAgIC8vIHNpbWlsYXIgdG8gYSBzdXNwZW5kLCBidXQgd2l0aG91dCBhIHRpbWVvdXQgYmVjYXVzZSB3ZSdyZSBub3Qgd2FpdGluZ1xuICAgIC8vIGZvciBhIHByb21pc2UgdG8gcmVzb2x2ZS5cbiAgICAhcm9vdC5kaWRFcnJvciAmJiBpc1lpZWxkeSkge1xuICAgICAgcm9vdC5kaWRFcnJvciA9IHRydWU7XG4gICAgICB2YXIgX3N1c3BlbmRlZEV4cGlyYXRpb25UaW1lID0gcm9vdC5uZXh0RXhwaXJhdGlvblRpbWVUb1dvcmtPbiA9IGV4cGlyYXRpb25UaW1lO1xuICAgICAgdmFyIF9yb290RXhwaXJhdGlvblRpbWUgPSByb290LmV4cGlyYXRpb25UaW1lID0gU3luYztcbiAgICAgIG9uU3VzcGVuZChyb290LCByb290V29ya0luUHJvZ3Jlc3MsIF9zdXNwZW5kZWRFeHBpcmF0aW9uVGltZSwgX3Jvb3RFeHBpcmF0aW9uVGltZSwgLTEgLy8gSW5kaWNhdGVzIG5vIHRpbWVvdXRcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzWWllbGR5ICYmIG5leHRMYXRlc3RBYnNvbHV0ZVRpbWVvdXRNcyAhPT0gLTEpIHtcbiAgICAvLyBUaGUgdHJlZSB3YXMgc3VzcGVuZGVkLlxuICAgIHZhciBfc3VzcGVuZGVkRXhwaXJhdGlvblRpbWUyID0gZXhwaXJhdGlvblRpbWU7XG4gICAgbWFya1N1c3BlbmRlZFByaW9yaXR5TGV2ZWwocm9vdCwgX3N1c3BlbmRlZEV4cGlyYXRpb25UaW1lMik7XG5cbiAgICAvLyBGaW5kIHRoZSBlYXJsaWVzdCB1bmNvbW1pdHRlZCBleHBpcmF0aW9uIHRpbWUgaW4gdGhlIHRyZWUsIGluY2x1ZGluZ1xuICAgIC8vIHdvcmsgdGhhdCBpcyBzdXNwZW5kZWQuIFRoZSB0aW1lb3V0IHRocmVzaG9sZCBjYW5ub3QgYmUgbG9uZ2VyIHRoYW5cbiAgICAvLyB0aGUgb3ZlcmFsbCBleHBpcmF0aW9uLlxuICAgIHZhciBlYXJsaWVzdEV4cGlyYXRpb25UaW1lID0gZmluZEVhcmxpZXN0T3V0c3RhbmRpbmdQcmlvcml0eUxldmVsKHJvb3QsIGV4cGlyYXRpb25UaW1lKTtcbiAgICB2YXIgZWFybGllc3RFeHBpcmF0aW9uVGltZU1zID0gZXhwaXJhdGlvblRpbWVUb01zKGVhcmxpZXN0RXhwaXJhdGlvblRpbWUpO1xuICAgIGlmIChlYXJsaWVzdEV4cGlyYXRpb25UaW1lTXMgPCBuZXh0TGF0ZXN0QWJzb2x1dGVUaW1lb3V0TXMpIHtcbiAgICAgIG5leHRMYXRlc3RBYnNvbHV0ZVRpbWVvdXRNcyA9IGVhcmxpZXN0RXhwaXJhdGlvblRpbWVNcztcbiAgICB9XG5cbiAgICAvLyBTdWJ0cmFjdCB0aGUgY3VycmVudCB0aW1lIGZyb20gdGhlIGFic29sdXRlIHRpbWVvdXQgdG8gZ2V0IHRoZSBudW1iZXJcbiAgICAvLyBvZiBtaWxsaXNlY29uZHMgdW50aWwgdGhlIHRpbWVvdXQuIEluIG90aGVyIHdvcmRzLCBjb252ZXJ0IGFuIGFic29sdXRlXG4gICAgLy8gdGltZXN0YW1wIHRvIGEgcmVsYXRpdmUgdGltZS4gVGhpcyBpcyB0aGUgdmFsdWUgdGhhdCBpcyBwYXNzZWRcbiAgICAvLyB0byBgc2V0VGltZW91dGAuXG4gICAgdmFyIGN1cnJlbnRUaW1lTXMgPSBleHBpcmF0aW9uVGltZVRvTXMocmVxdWVzdEN1cnJlbnRUaW1lKCkpO1xuICAgIHZhciBtc1VudGlsVGltZW91dCA9IG5leHRMYXRlc3RBYnNvbHV0ZVRpbWVvdXRNcyAtIGN1cnJlbnRUaW1lTXM7XG4gICAgbXNVbnRpbFRpbWVvdXQgPSBtc1VudGlsVGltZW91dCA8IDAgPyAwIDogbXNVbnRpbFRpbWVvdXQ7XG5cbiAgICAvLyBUT0RPOiBBY2NvdW50IGZvciB0aGUgSnVzdCBOb3RpY2VhYmxlIERpZmZlcmVuY2VcblxuICAgIHZhciBfcm9vdEV4cGlyYXRpb25UaW1lMiA9IHJvb3QuZXhwaXJhdGlvblRpbWU7XG4gICAgb25TdXNwZW5kKHJvb3QsIHJvb3RXb3JrSW5Qcm9ncmVzcywgX3N1c3BlbmRlZEV4cGlyYXRpb25UaW1lMiwgX3Jvb3RFeHBpcmF0aW9uVGltZTIsIG1zVW50aWxUaW1lb3V0KTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBSZWFkeSB0byBjb21taXQuXG4gIG9uQ29tcGxldGUocm9vdCwgcm9vdFdvcmtJblByb2dyZXNzLCBleHBpcmF0aW9uVGltZSk7XG59XG5cbmZ1bmN0aW9uIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKHNvdXJjZUZpYmVyLCB2YWx1ZSkge1xuICB2YXIgZXhwaXJhdGlvblRpbWUgPSBTeW5jO1xuICB2YXIgZmliZXIgPSBzb3VyY2VGaWJlci5yZXR1cm47XG4gIHdoaWxlIChmaWJlciAhPT0gbnVsbCkge1xuICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICB2YXIgY3RvciA9IGZpYmVyLnR5cGU7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZTtcbiAgICAgICAgaWYgKHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkQ2F0Y2ggPT09ICdmdW5jdGlvbicgJiYgIWlzQWxyZWFkeUZhaWxlZExlZ2FjeUVycm9yQm91bmRhcnkoaW5zdGFuY2UpKSB7XG4gICAgICAgICAgdmFyIGVycm9ySW5mbyA9IGNyZWF0ZUNhcHR1cmVkVmFsdWUodmFsdWUsIHNvdXJjZUZpYmVyKTtcbiAgICAgICAgICB2YXIgdXBkYXRlID0gY3JlYXRlQ2xhc3NFcnJvclVwZGF0ZShmaWJlciwgZXJyb3JJbmZvLCBleHBpcmF0aW9uVGltZSk7XG4gICAgICAgICAgZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlKTtcbiAgICAgICAgICBzY2hlZHVsZVdvcmsoZmliZXIsIGV4cGlyYXRpb25UaW1lKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIF9lcnJvckluZm8gPSBjcmVhdGVDYXB0dXJlZFZhbHVlKHZhbHVlLCBzb3VyY2VGaWJlcik7XG4gICAgICAgICAgdmFyIF91cGRhdGUgPSBjcmVhdGVSb290RXJyb3JVcGRhdGUoZmliZXIsIF9lcnJvckluZm8sIGV4cGlyYXRpb25UaW1lKTtcbiAgICAgICAgICBlbnF1ZXVlVXBkYXRlKGZpYmVyLCBfdXBkYXRlKTtcbiAgICAgICAgICBzY2hlZHVsZVdvcmsoZmliZXIsIGV4cGlyYXRpb25UaW1lKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG4gICAgZmliZXIgPSBmaWJlci5yZXR1cm47XG4gIH1cblxuICBpZiAoc291cmNlRmliZXIudGFnID09PSBIb3N0Um9vdCkge1xuICAgIC8vIEVycm9yIHdhcyB0aHJvd24gYXQgdGhlIHJvb3QuIFRoZXJlIGlzIG5vIHBhcmVudCwgc28gdGhlIHJvb3RcbiAgICAvLyBpdHNlbGYgc2hvdWxkIGNhcHR1cmUgaXQuXG4gICAgdmFyIHJvb3RGaWJlciA9IHNvdXJjZUZpYmVyO1xuICAgIHZhciBfZXJyb3JJbmZvMiA9IGNyZWF0ZUNhcHR1cmVkVmFsdWUodmFsdWUsIHJvb3RGaWJlcik7XG4gICAgdmFyIF91cGRhdGUyID0gY3JlYXRlUm9vdEVycm9yVXBkYXRlKHJvb3RGaWJlciwgX2Vycm9ySW5mbzIsIGV4cGlyYXRpb25UaW1lKTtcbiAgICBlbnF1ZXVlVXBkYXRlKHJvb3RGaWJlciwgX3VwZGF0ZTIpO1xuICAgIHNjaGVkdWxlV29yayhyb290RmliZXIsIGV4cGlyYXRpb25UaW1lKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21wdXRlVGhyZWFkSUQoZXhwaXJhdGlvblRpbWUsIGludGVyYWN0aW9uVGhyZWFkSUQpIHtcbiAgLy8gSW50ZXJhY3Rpb24gdGhyZWFkcyBhcmUgdW5pcXVlIHBlciByb290IGFuZCBleHBpcmF0aW9uIHRpbWUuXG4gIHJldHVybiBleHBpcmF0aW9uVGltZSAqIDEwMDAgKyBpbnRlcmFjdGlvblRocmVhZElEO1xufVxuXG4vLyBDcmVhdGVzIGEgdW5pcXVlIGFzeW5jIGV4cGlyYXRpb24gdGltZS5cbmZ1bmN0aW9uIGNvbXB1dGVVbmlxdWVBc3luY0V4cGlyYXRpb24oKSB7XG4gIHZhciBjdXJyZW50VGltZSA9IHJlcXVlc3RDdXJyZW50VGltZSgpO1xuICB2YXIgcmVzdWx0ID0gY29tcHV0ZUFzeW5jRXhwaXJhdGlvbihjdXJyZW50VGltZSk7XG4gIGlmIChyZXN1bHQgPj0gbGFzdFVuaXF1ZUFzeW5jRXhwaXJhdGlvbikge1xuICAgIC8vIFNpbmNlIHdlIGFzc3VtZSB0aGUgY3VycmVudCB0aW1lIG1vbm90b25pY2FsbHkgaW5jcmVhc2VzLCB3ZSBvbmx5IGhpdFxuICAgIC8vIHRoaXMgYnJhbmNoIHdoZW4gY29tcHV0ZVVuaXF1ZUFzeW5jRXhwaXJhdGlvbiBpcyBmaXJlZCBtdWx0aXBsZSB0aW1lc1xuICAgIC8vIHdpdGhpbiBhIDIwMG1zIHdpbmRvdyAob3Igd2hhdGV2ZXIgdGhlIGFzeW5jIGJ1Y2tldCBzaXplIGlzKS5cbiAgICByZXN1bHQgPSBsYXN0VW5pcXVlQXN5bmNFeHBpcmF0aW9uIC0gMTtcbiAgfVxuICBsYXN0VW5pcXVlQXN5bmNFeHBpcmF0aW9uID0gcmVzdWx0O1xuICByZXR1cm4gbGFzdFVuaXF1ZUFzeW5jRXhwaXJhdGlvbjtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZUV4cGlyYXRpb25Gb3JGaWJlcihjdXJyZW50VGltZSwgZmliZXIpIHtcbiAgdmFyIHByaW9yaXR5TGV2ZWwgPSBzY2hlZHVsZXIudW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKTtcblxuICB2YXIgZXhwaXJhdGlvblRpbWUgPSB2b2lkIDA7XG4gIGlmICgoZmliZXIubW9kZSAmIENvbmN1cnJlbnRNb2RlKSA9PT0gTm9Db250ZXh0KSB7XG4gICAgLy8gT3V0c2lkZSBvZiBjb25jdXJyZW50IG1vZGUsIHVwZGF0ZXMgYXJlIGFsd2F5cyBzeW5jaHJvbm91cy5cbiAgICBleHBpcmF0aW9uVGltZSA9IFN5bmM7XG4gIH0gZWxzZSBpZiAoaXNXb3JraW5nICYmICFpc0NvbW1pdHRpbmckMSkge1xuICAgIC8vIER1cmluZyByZW5kZXIgcGhhc2UsIHVwZGF0ZXMgZXhwaXJlIGR1cmluZyBhcyB0aGUgY3VycmVudCByZW5kZXIuXG4gICAgZXhwaXJhdGlvblRpbWUgPSBuZXh0UmVuZGVyRXhwaXJhdGlvblRpbWU7XG4gIH0gZWxzZSB7XG4gICAgc3dpdGNoIChwcmlvcml0eUxldmVsKSB7XG4gICAgICBjYXNlIHNjaGVkdWxlci51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eTpcbiAgICAgICAgZXhwaXJhdGlvblRpbWUgPSBTeW5jO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugc2NoZWR1bGVyLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgICAgICBleHBpcmF0aW9uVGltZSA9IGNvbXB1dGVJbnRlcmFjdGl2ZUV4cGlyYXRpb24oY3VycmVudFRpbWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugc2NoZWR1bGVyLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5OlxuICAgICAgICAvLyBUaGlzIGlzIGEgbm9ybWFsLCBjb25jdXJyZW50IHVwZGF0ZVxuICAgICAgICBleHBpcmF0aW9uVGltZSA9IGNvbXB1dGVBc3luY0V4cGlyYXRpb24oY3VycmVudFRpbWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugc2NoZWR1bGVyLnVuc3RhYmxlX0xvd1ByaW9yaXR5OlxuICAgICAgY2FzZSBzY2hlZHVsZXIudW5zdGFibGVfSWRsZVByaW9yaXR5OlxuICAgICAgICBleHBpcmF0aW9uVGltZSA9IE5ldmVyO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGludmFyaWFudChmYWxzZSwgJ1Vua25vd24gcHJpb3JpdHkgbGV2ZWwuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuXG4gICAgLy8gSWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiByZW5kZXJpbmcgYSB0cmVlLCBkbyBub3QgdXBkYXRlIGF0IHRoZSBzYW1lXG4gICAgLy8gZXhwaXJhdGlvbiB0aW1lIHRoYXQgaXMgYWxyZWFkeSByZW5kZXJpbmcuXG4gICAgaWYgKG5leHRSb290ICE9PSBudWxsICYmIGV4cGlyYXRpb25UaW1lID09PSBuZXh0UmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAgICAgIGV4cGlyYXRpb25UaW1lIC09IDE7XG4gICAgfVxuICB9XG5cbiAgLy8gS2VlcCB0cmFjayBvZiB0aGUgbG93ZXN0IHBlbmRpbmcgaW50ZXJhY3RpdmUgZXhwaXJhdGlvbiB0aW1lLiBUaGlzXG4gIC8vIGFsbG93cyB1cyB0byBzeW5jaHJvbm91c2x5IGZsdXNoIGFsbCBpbnRlcmFjdGl2ZSB1cGRhdGVzXG4gIC8vIHdoZW4gbmVlZGVkLlxuICAvLyBUT0RPOiBNb3ZlIHRoaXMgdG8gcmVuZGVyZXI/XG4gIGlmIChwcmlvcml0eUxldmVsID09PSBzY2hlZHVsZXIudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHkgJiYgKGxvd2VzdFByaW9yaXR5UGVuZGluZ0ludGVyYWN0aXZlRXhwaXJhdGlvblRpbWUgPT09IE5vV29yayB8fCBleHBpcmF0aW9uVGltZSA8IGxvd2VzdFByaW9yaXR5UGVuZGluZ0ludGVyYWN0aXZlRXhwaXJhdGlvblRpbWUpKSB7XG4gICAgbG93ZXN0UHJpb3JpdHlQZW5kaW5nSW50ZXJhY3RpdmVFeHBpcmF0aW9uVGltZSA9IGV4cGlyYXRpb25UaW1lO1xuICB9XG5cbiAgcmV0dXJuIGV4cGlyYXRpb25UaW1lO1xufVxuXG5mdW5jdGlvbiByZW5kZXJEaWRTdXNwZW5kKHJvb3QsIGFic29sdXRlVGltZW91dE1zLCBzdXNwZW5kZWRUaW1lKSB7XG4gIC8vIFNjaGVkdWxlIHRoZSB0aW1lb3V0LlxuICBpZiAoYWJzb2x1dGVUaW1lb3V0TXMgPj0gMCAmJiBuZXh0TGF0ZXN0QWJzb2x1dGVUaW1lb3V0TXMgPCBhYnNvbHV0ZVRpbWVvdXRNcykge1xuICAgIG5leHRMYXRlc3RBYnNvbHV0ZVRpbWVvdXRNcyA9IGFic29sdXRlVGltZW91dE1zO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbmRlckRpZEVycm9yKCkge1xuICBuZXh0UmVuZGVyRGlkRXJyb3IgPSB0cnVlO1xufVxuXG5mdW5jdGlvbiBwaW5nU3VzcGVuZGVkUm9vdChyb290LCB0aGVuYWJsZSwgcGluZ1RpbWUpIHtcbiAgLy8gQSBwcm9taXNlIHRoYXQgcHJldmlvdXNseSBzdXNwZW5kZWQgUmVhY3QgZnJvbSBjb21taXR0aW5nIGhhcyByZXNvbHZlZC5cbiAgLy8gSWYgUmVhY3QgaXMgc3RpbGwgc3VzcGVuZGVkLCB0cnkgYWdhaW4gYXQgdGhlIHByZXZpb3VzIGxldmVsIChwaW5nVGltZSkuXG5cbiAgdmFyIHBpbmdDYWNoZSA9IHJvb3QucGluZ0NhY2hlO1xuICBpZiAocGluZ0NhY2hlICE9PSBudWxsKSB7XG4gICAgLy8gVGhlIHRoZW5hYmxlIHJlc29sdmVkLCBzbyB3ZSBubyBsb25nZXIgbmVlZCB0byBtZW1vaXplLCBiZWNhdXNlIGl0IHdpbGxcbiAgICAvLyBuZXZlciBiZSB0aHJvd24gYWdhaW4uXG4gICAgcGluZ0NhY2hlLmRlbGV0ZSh0aGVuYWJsZSk7XG4gIH1cblxuICBpZiAobmV4dFJvb3QgIT09IG51bGwgJiYgbmV4dFJlbmRlckV4cGlyYXRpb25UaW1lID09PSBwaW5nVGltZSkge1xuICAgIC8vIFJlY2VpdmVkIGEgcGluZyBhdCB0aGUgc2FtZSBwcmlvcml0eSBsZXZlbCBhdCB3aGljaCB3ZSdyZSBjdXJyZW50bHlcbiAgICAvLyByZW5kZXJpbmcuIFJlc3RhcnQgZnJvbSB0aGUgcm9vdC5cbiAgICBuZXh0Um9vdCA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgLy8gQ29uZmlybSB0aGF0IHRoZSByb290IGlzIHN0aWxsIHN1c3BlbmRlZCBhdCB0aGlzIGxldmVsLiBPdGhlcndpc2UgZXhpdC5cbiAgICBpZiAoaXNQcmlvcml0eUxldmVsU3VzcGVuZGVkKHJvb3QsIHBpbmdUaW1lKSkge1xuICAgICAgLy8gUGluZyBhdCB0aGUgb3JpZ2luYWwgbGV2ZWxcbiAgICAgIG1hcmtQaW5nZWRQcmlvcml0eUxldmVsKHJvb3QsIHBpbmdUaW1lKTtcbiAgICAgIHZhciByb290RXhwaXJhdGlvblRpbWUgPSByb290LmV4cGlyYXRpb25UaW1lO1xuICAgICAgaWYgKHJvb3RFeHBpcmF0aW9uVGltZSAhPT0gTm9Xb3JrKSB7XG4gICAgICAgIHJlcXVlc3RXb3JrKHJvb3QsIHJvb3RFeHBpcmF0aW9uVGltZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJldHJ5VGltZWRPdXRCb3VuZGFyeShib3VuZGFyeUZpYmVyLCB0aGVuYWJsZSkge1xuICAvLyBUaGUgYm91bmRhcnkgZmliZXIgKGEgU3VzcGVuc2UgY29tcG9uZW50KSBwcmV2aW91c2x5IHRpbWVkIG91dCBhbmQgd2FzXG4gIC8vIHJlbmRlcmVkIGluIGl0cyBmYWxsYmFjayBzdGF0ZS4gT25lIG9mIHRoZSBwcm9taXNlcyB0aGF0IHN1c3BlbmRlZCBpdCBoYXNcbiAgLy8gcmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGF0IGxlYXN0IHBhcnQgb2YgdGhlIHRyZWUgd2FzIGxpa2VseSB1bmJsb2NrZWQuIFRyeVxuICB2YXIgcmV0cnlDYWNoZSA9IHZvaWQgMDtcbiAgaWYgKGVuYWJsZVN1c3BlbnNlU2VydmVyUmVuZGVyZXIpIHtcbiAgICBzd2l0Y2ggKGJvdW5kYXJ5RmliZXIudGFnKSB7XG4gICAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgICByZXRyeUNhY2hlID0gYm91bmRhcnlGaWJlci5zdGF0ZU5vZGU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBEZWh5ZHJhdGVkU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICAgIHJldHJ5Q2FjaGUgPSBib3VuZGFyeUZpYmVyLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaW52YXJpYW50KGZhbHNlLCAnUGluZ2VkIHVua25vd24gc3VzcGVuc2UgYm91bmRhcnkgdHlwZS4gVGhpcyBpcyBwcm9iYWJseSBhIGJ1ZyBpbiBSZWFjdC4nKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0cnlDYWNoZSA9IGJvdW5kYXJ5RmliZXIuc3RhdGVOb2RlO1xuICB9XG4gIGlmIChyZXRyeUNhY2hlICE9PSBudWxsKSB7XG4gICAgLy8gVGhlIHRoZW5hYmxlIHJlc29sdmVkLCBzbyB3ZSBubyBsb25nZXIgbmVlZCB0byBtZW1vaXplLCBiZWNhdXNlIGl0IHdpbGxcbiAgICAvLyBuZXZlciBiZSB0aHJvd24gYWdhaW4uXG4gICAgcmV0cnlDYWNoZS5kZWxldGUodGhlbmFibGUpO1xuICB9XG5cbiAgdmFyIGN1cnJlbnRUaW1lID0gcmVxdWVzdEN1cnJlbnRUaW1lKCk7XG4gIHZhciByZXRyeVRpbWUgPSBjb21wdXRlRXhwaXJhdGlvbkZvckZpYmVyKGN1cnJlbnRUaW1lLCBib3VuZGFyeUZpYmVyKTtcbiAgdmFyIHJvb3QgPSBzY2hlZHVsZVdvcmtUb1Jvb3QoYm91bmRhcnlGaWJlciwgcmV0cnlUaW1lKTtcbiAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICBtYXJrUGVuZGluZ1ByaW9yaXR5TGV2ZWwocm9vdCwgcmV0cnlUaW1lKTtcbiAgICB2YXIgcm9vdEV4cGlyYXRpb25UaW1lID0gcm9vdC5leHBpcmF0aW9uVGltZTtcbiAgICBpZiAocm9vdEV4cGlyYXRpb25UaW1lICE9PSBOb1dvcmspIHtcbiAgICAgIHJlcXVlc3RXb3JrKHJvb3QsIHJvb3RFeHBpcmF0aW9uVGltZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlV29ya1RvUm9vdChmaWJlciwgZXhwaXJhdGlvblRpbWUpIHtcbiAgcmVjb3JkU2NoZWR1bGVVcGRhdGUoKTtcblxuICB7XG4gICAgaWYgKGZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgIHZhciBpbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZTtcbiAgICAgIHdhcm5BYm91dEludmFsaWRVcGRhdGVzKGluc3RhbmNlKTtcbiAgICB9XG4gIH1cblxuICAvLyBVcGRhdGUgdGhlIHNvdXJjZSBmaWJlcidzIGV4cGlyYXRpb24gdGltZVxuICBpZiAoZmliZXIuZXhwaXJhdGlvblRpbWUgPCBleHBpcmF0aW9uVGltZSkge1xuICAgIGZpYmVyLmV4cGlyYXRpb25UaW1lID0gZXhwaXJhdGlvblRpbWU7XG4gIH1cbiAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcbiAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCAmJiBhbHRlcm5hdGUuZXhwaXJhdGlvblRpbWUgPCBleHBpcmF0aW9uVGltZSkge1xuICAgIGFsdGVybmF0ZS5leHBpcmF0aW9uVGltZSA9IGV4cGlyYXRpb25UaW1lO1xuICB9XG4gIC8vIFdhbGsgdGhlIHBhcmVudCBwYXRoIHRvIHRoZSByb290IGFuZCB1cGRhdGUgdGhlIGNoaWxkIGV4cGlyYXRpb24gdGltZS5cbiAgdmFyIG5vZGUgPSBmaWJlci5yZXR1cm47XG4gIHZhciByb290ID0gbnVsbDtcbiAgaWYgKG5vZGUgPT09IG51bGwgJiYgZmliZXIudGFnID09PSBIb3N0Um9vdCkge1xuICAgIHJvb3QgPSBmaWJlci5zdGF0ZU5vZGU7XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgIGFsdGVybmF0ZSA9IG5vZGUuYWx0ZXJuYXRlO1xuICAgICAgaWYgKG5vZGUuY2hpbGRFeHBpcmF0aW9uVGltZSA8IGV4cGlyYXRpb25UaW1lKSB7XG4gICAgICAgIG5vZGUuY2hpbGRFeHBpcmF0aW9uVGltZSA9IGV4cGlyYXRpb25UaW1lO1xuICAgICAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsICYmIGFsdGVybmF0ZS5jaGlsZEV4cGlyYXRpb25UaW1lIDwgZXhwaXJhdGlvblRpbWUpIHtcbiAgICAgICAgICBhbHRlcm5hdGUuY2hpbGRFeHBpcmF0aW9uVGltZSA9IGV4cGlyYXRpb25UaW1lO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCAmJiBhbHRlcm5hdGUuY2hpbGRFeHBpcmF0aW9uVGltZSA8IGV4cGlyYXRpb25UaW1lKSB7XG4gICAgICAgIGFsdGVybmF0ZS5jaGlsZEV4cGlyYXRpb25UaW1lID0gZXhwaXJhdGlvblRpbWU7XG4gICAgICB9XG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgJiYgbm9kZS50YWcgPT09IEhvc3RSb290KSB7XG4gICAgICAgIHJvb3QgPSBub2RlLnN0YXRlTm9kZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZVNjaGVkdWxlclRyYWNpbmcpIHtcbiAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgdmFyIGludGVyYWN0aW9ucyA9IHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudDtcbiAgICAgIGlmIChpbnRlcmFjdGlvbnMuc2l6ZSA+IDApIHtcbiAgICAgICAgdmFyIHBlbmRpbmdJbnRlcmFjdGlvbk1hcCA9IHJvb3QucGVuZGluZ0ludGVyYWN0aW9uTWFwO1xuICAgICAgICB2YXIgcGVuZGluZ0ludGVyYWN0aW9ucyA9IHBlbmRpbmdJbnRlcmFjdGlvbk1hcC5nZXQoZXhwaXJhdGlvblRpbWUpO1xuICAgICAgICBpZiAocGVuZGluZ0ludGVyYWN0aW9ucyAhPSBudWxsKSB7XG4gICAgICAgICAgaW50ZXJhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVyYWN0aW9uKSB7XG4gICAgICAgICAgICBpZiAoIXBlbmRpbmdJbnRlcmFjdGlvbnMuaGFzKGludGVyYWN0aW9uKSkge1xuICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHBlbmRpbmcgYXN5bmMgd29yayBjb3VudCBmb3IgcHJldmlvdXNseSB1bnNjaGVkdWxlZCBpbnRlcmFjdGlvbi5cbiAgICAgICAgICAgICAgaW50ZXJhY3Rpb24uX19jb3VudCsrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwZW5kaW5nSW50ZXJhY3Rpb25zLmFkZChpbnRlcmFjdGlvbik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVuZGluZ0ludGVyYWN0aW9uTWFwLnNldChleHBpcmF0aW9uVGltZSwgbmV3IFNldChpbnRlcmFjdGlvbnMpKTtcblxuICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgcGVuZGluZyBhc3luYyB3b3JrIGNvdW50IGZvciB0aGUgY3VycmVudCBpbnRlcmFjdGlvbnMuXG4gICAgICAgICAgaW50ZXJhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVyYWN0aW9uKSB7XG4gICAgICAgICAgICBpbnRlcmFjdGlvbi5fX2NvdW50Kys7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc3Vic2NyaWJlciA9IHRyYWNpbmcuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG4gICAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIHRocmVhZElEID0gY29tcHV0ZVRocmVhZElEKGV4cGlyYXRpb25UaW1lLCByb290LmludGVyYWN0aW9uVGhyZWFkSUQpO1xuICAgICAgICAgIHN1YnNjcmliZXIub25Xb3JrU2NoZWR1bGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByb290O1xufVxuXG5mdW5jdGlvbiB3YXJuSWZOb3RDdXJyZW50bHlCYXRjaGluZ0luRGV2KGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoaXNSZW5kZXJpbmcgPT09IGZhbHNlICYmIGlzQmF0Y2hpbmdVcGRhdGVzID09PSBmYWxzZSkge1xuICAgICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnQW4gdXBkYXRlIHRvICVzIGluc2lkZSBhIHRlc3Qgd2FzIG5vdCB3cmFwcGVkIGluIGFjdCguLi4pLlxcblxcbicgKyAnV2hlbiB0ZXN0aW5nLCBjb2RlIHRoYXQgY2F1c2VzIFJlYWN0IHN0YXRlIHVwZGF0ZXMgc2hvdWxkIGJlIHdyYXBwZWQgaW50byBhY3QoLi4uKTpcXG5cXG4nICsgJ2FjdCgoKSA9PiB7XFxuJyArICcgIC8qIGZpcmUgZXZlbnRzIHRoYXQgdXBkYXRlIHN0YXRlICovXFxuJyArICd9KTtcXG4nICsgJy8qIGFzc2VydCBvbiB0aGUgb3V0cHV0ICovXFxuXFxuJyArIFwiVGhpcyBlbnN1cmVzIHRoYXQgeW91J3JlIHRlc3RpbmcgdGhlIGJlaGF2aW9yIHRoZSB1c2VyIHdvdWxkIHNlZSBpbiB0aGUgYnJvd3Nlci5cIiArICcgTGVhcm4gbW9yZSBhdCBodHRwczovL2ZiLm1lL3JlYWN0LXdyYXAtdGVzdHMtd2l0aC1hY3QnICsgJyVzJywgZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSwgZ2V0U3RhY2tCeUZpYmVySW5EZXZBbmRQcm9kKGZpYmVyKSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlV29yayhmaWJlciwgZXhwaXJhdGlvblRpbWUpIHtcbiAgdmFyIHJvb3QgPSBzY2hlZHVsZVdvcmtUb1Jvb3QoZmliZXIsIGV4cGlyYXRpb25UaW1lKTtcbiAgaWYgKHJvb3QgPT09IG51bGwpIHtcbiAgICB7XG4gICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgIHdhcm5BYm91dFVwZGF0ZU9uVW5tb3VudGVkKGZpYmVyLCB0cnVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAgICB3YXJuQWJvdXRVcGRhdGVPblVubW91bnRlZChmaWJlciwgZmFsc2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIWlzV29ya2luZyAmJiBuZXh0UmVuZGVyRXhwaXJhdGlvblRpbWUgIT09IE5vV29yayAmJiBleHBpcmF0aW9uVGltZSA+IG5leHRSZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICAgIC8vIFRoaXMgaXMgYW4gaW50ZXJydXB0aW9uLiAoVXNlZCBmb3IgcGVyZm9ybWFuY2UgdHJhY2tpbmcuKVxuICAgIGludGVycnVwdGVkQnkgPSBmaWJlcjtcbiAgICByZXNldFN0YWNrKCk7XG4gIH1cbiAgbWFya1BlbmRpbmdQcmlvcml0eUxldmVsKHJvb3QsIGV4cGlyYXRpb25UaW1lKTtcbiAgaWYgKFxuICAvLyBJZiB3ZSdyZSBpbiB0aGUgcmVuZGVyIHBoYXNlLCB3ZSBkb24ndCBuZWVkIHRvIHNjaGVkdWxlIHRoaXMgcm9vdFxuICAvLyBmb3IgYW4gdXBkYXRlLCBiZWNhdXNlIHdlJ2xsIGRvIGl0IGJlZm9yZSB3ZSBleGl0Li4uXG4gICFpc1dvcmtpbmcgfHwgaXNDb21taXR0aW5nJDEgfHxcbiAgLy8gLi4udW5sZXNzIHRoaXMgaXMgYSBkaWZmZXJlbnQgcm9vdCB0aGFuIHRoZSBvbmUgd2UncmUgcmVuZGVyaW5nLlxuICBuZXh0Um9vdCAhPT0gcm9vdCkge1xuICAgIHZhciByb290RXhwaXJhdGlvblRpbWUgPSByb290LmV4cGlyYXRpb25UaW1lO1xuICAgIHJlcXVlc3RXb3JrKHJvb3QsIHJvb3RFeHBpcmF0aW9uVGltZSk7XG4gIH1cbiAgaWYgKG5lc3RlZFVwZGF0ZUNvdW50ID4gTkVTVEVEX1VQREFURV9MSU1JVCkge1xuICAgIC8vIFJlc2V0IHRoaXMgYmFjayB0byB6ZXJvIHNvIHN1YnNlcXVlbnQgdXBkYXRlcyBkb24ndCB0aHJvdy5cbiAgICBuZXN0ZWRVcGRhdGVDb3VudCA9IDA7XG4gICAgaW52YXJpYW50KGZhbHNlLCAnTWF4aW11bSB1cGRhdGUgZGVwdGggZXhjZWVkZWQuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgY29tcG9uZW50IHJlcGVhdGVkbHkgY2FsbHMgc2V0U3RhdGUgaW5zaWRlIGNvbXBvbmVudFdpbGxVcGRhdGUgb3IgY29tcG9uZW50RGlkVXBkYXRlLiBSZWFjdCBsaW1pdHMgdGhlIG51bWJlciBvZiBuZXN0ZWQgdXBkYXRlcyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzLicpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN5bmNVcGRhdGVzKGZuLCBhLCBiLCBjLCBkKSB7XG4gIHJldHVybiBzY2hlZHVsZXIudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5KHNjaGVkdWxlci51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmbihhLCBiLCBjLCBkKTtcbiAgfSk7XG59XG5cbi8vIFRPRE86IEV2ZXJ5dGhpbmcgYmVsb3cgdGhpcyBpcyB3cml0dGVuIGFzIGlmIGl0IGhhcyBiZWVuIGxpZnRlZCB0byB0aGVcbi8vIHJlbmRlcmVycy4gSSdsbCBkbyB0aGlzIGluIGEgZm9sbG93LXVwLlxuXG4vLyBMaW5rZWQtbGlzdCBvZiByb290c1xudmFyIGZpcnN0U2NoZWR1bGVkUm9vdCA9IG51bGw7XG52YXIgbGFzdFNjaGVkdWxlZFJvb3QgPSBudWxsO1xuXG52YXIgY2FsbGJhY2tFeHBpcmF0aW9uVGltZSA9IE5vV29yaztcbnZhciBjYWxsYmFja0lEID0gdm9pZCAwO1xudmFyIGlzUmVuZGVyaW5nID0gZmFsc2U7XG52YXIgbmV4dEZsdXNoZWRSb290ID0gbnVsbDtcbnZhciBuZXh0Rmx1c2hlZEV4cGlyYXRpb25UaW1lID0gTm9Xb3JrO1xudmFyIGxvd2VzdFByaW9yaXR5UGVuZGluZ0ludGVyYWN0aXZlRXhwaXJhdGlvblRpbWUgPSBOb1dvcms7XG52YXIgaGFzVW5oYW5kbGVkRXJyb3IgPSBmYWxzZTtcbnZhciB1bmhhbmRsZWRFcnJvciA9IG51bGw7XG5cbnZhciBpc0JhdGNoaW5nVXBkYXRlcyA9IGZhbHNlO1xudmFyIGlzVW5iYXRjaGluZ1VwZGF0ZXMgPSBmYWxzZTtcblxudmFyIGNvbXBsZXRlZEJhdGNoZXMgPSBudWxsO1xuXG52YXIgb3JpZ2luYWxTdGFydFRpbWVNcyA9IHNjaGVkdWxlci51bnN0YWJsZV9ub3coKTtcbnZhciBjdXJyZW50UmVuZGVyZXJUaW1lID0gbXNUb0V4cGlyYXRpb25UaW1lKG9yaWdpbmFsU3RhcnRUaW1lTXMpO1xudmFyIGN1cnJlbnRTY2hlZHVsZXJUaW1lID0gY3VycmVudFJlbmRlcmVyVGltZTtcblxuLy8gVXNlIHRoZXNlIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcCBvZiBuZXN0ZWQgdXBkYXRlc1xudmFyIE5FU1RFRF9VUERBVEVfTElNSVQgPSA1MDtcbnZhciBuZXN0ZWRVcGRhdGVDb3VudCA9IDA7XG52YXIgbGFzdENvbW1pdHRlZFJvb3REdXJpbmdUaGlzQmF0Y2ggPSBudWxsO1xuXG5mdW5jdGlvbiByZWNvbXB1dGVDdXJyZW50UmVuZGVyZXJUaW1lKCkge1xuICB2YXIgY3VycmVudFRpbWVNcyA9IHNjaGVkdWxlci51bnN0YWJsZV9ub3coKSAtIG9yaWdpbmFsU3RhcnRUaW1lTXM7XG4gIGN1cnJlbnRSZW5kZXJlclRpbWUgPSBtc1RvRXhwaXJhdGlvblRpbWUoY3VycmVudFRpbWVNcyk7XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlQ2FsbGJhY2tXaXRoRXhwaXJhdGlvblRpbWUocm9vdCwgZXhwaXJhdGlvblRpbWUpIHtcbiAgaWYgKGNhbGxiYWNrRXhwaXJhdGlvblRpbWUgIT09IE5vV29yaykge1xuICAgIC8vIEEgY2FsbGJhY2sgaXMgYWxyZWFkeSBzY2hlZHVsZWQuIENoZWNrIGl0cyBleHBpcmF0aW9uIHRpbWUgKHRpbWVvdXQpLlxuICAgIGlmIChleHBpcmF0aW9uVGltZSA8IGNhbGxiYWNrRXhwaXJhdGlvblRpbWUpIHtcbiAgICAgIC8vIEV4aXN0aW5nIGNhbGxiYWNrIGhhcyBzdWZmaWNpZW50IHRpbWVvdXQuIEV4aXQuXG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjYWxsYmFja0lEICE9PSBudWxsKSB7XG4gICAgICAgIC8vIEV4aXN0aW5nIGNhbGxiYWNrIGhhcyBpbnN1ZmZpY2llbnQgdGltZW91dC4gQ2FuY2VsIGFuZCBzY2hlZHVsZSBhXG4gICAgICAgIC8vIG5ldyBvbmUuXG4gICAgICAgIHNjaGVkdWxlci51bnN0YWJsZV9jYW5jZWxDYWxsYmFjayhjYWxsYmFja0lEKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gVGhlIHJlcXVlc3QgY2FsbGJhY2sgdGltZXIgaXMgYWxyZWFkeSBydW5uaW5nLiBEb24ndCBzdGFydCBhIG5ldyBvbmUuXG4gIH0gZWxzZSB7XG4gICAgc3RhcnRSZXF1ZXN0Q2FsbGJhY2tUaW1lcigpO1xuICB9XG5cbiAgY2FsbGJhY2tFeHBpcmF0aW9uVGltZSA9IGV4cGlyYXRpb25UaW1lO1xuICB2YXIgY3VycmVudE1zID0gc2NoZWR1bGVyLnVuc3RhYmxlX25vdygpIC0gb3JpZ2luYWxTdGFydFRpbWVNcztcbiAgdmFyIGV4cGlyYXRpb25UaW1lTXMgPSBleHBpcmF0aW9uVGltZVRvTXMoZXhwaXJhdGlvblRpbWUpO1xuICB2YXIgdGltZW91dCA9IGV4cGlyYXRpb25UaW1lTXMgLSBjdXJyZW50TXM7XG4gIGNhbGxiYWNrSUQgPSBzY2hlZHVsZXIudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayhwZXJmb3JtQXN5bmNXb3JrLCB7IHRpbWVvdXQ6IHRpbWVvdXQgfSk7XG59XG5cbi8vIEZvciBldmVyeSBjYWxsIHRvIHJlbmRlclJvb3QsIG9uZSBvZiBvbkZhdGFsLCBvbkNvbXBsZXRlLCBvblN1c3BlbmQsIGFuZFxuLy8gb25ZaWVsZCBpcyBjYWxsZWQgdXBvbiBleGl0aW5nLiBXZSB1c2UgdGhlc2UgaW4gbGlldSBvZiByZXR1cm5pbmcgYSB0dXBsZS5cbi8vIEkndmUgYWxzbyBjaG9zZW4gbm90IHRvIGlubGluZSB0aGVtIGludG8gcmVuZGVyUm9vdCBiZWNhdXNlIHRoZXNlIHdpbGxcbi8vIGV2ZW50dWFsbHkgYmUgbGlmdGVkIGludG8gdGhlIHJlbmRlcmVyLlxuZnVuY3Rpb24gb25GYXRhbChyb290KSB7XG4gIHJvb3QuZmluaXNoZWRXb3JrID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gb25Db21wbGV0ZShyb290LCBmaW5pc2hlZFdvcmssIGV4cGlyYXRpb25UaW1lKSB7XG4gIHJvb3QucGVuZGluZ0NvbW1pdEV4cGlyYXRpb25UaW1lID0gZXhwaXJhdGlvblRpbWU7XG4gIHJvb3QuZmluaXNoZWRXb3JrID0gZmluaXNoZWRXb3JrO1xufVxuXG5mdW5jdGlvbiBvblN1c3BlbmQocm9vdCwgZmluaXNoZWRXb3JrLCBzdXNwZW5kZWRFeHBpcmF0aW9uVGltZSwgcm9vdEV4cGlyYXRpb25UaW1lLCBtc1VudGlsVGltZW91dCkge1xuICByb290LmV4cGlyYXRpb25UaW1lID0gcm9vdEV4cGlyYXRpb25UaW1lO1xuICBpZiAobXNVbnRpbFRpbWVvdXQgPT09IDAgJiYgIXNob3VsZFlpZWxkVG9SZW5kZXJlcigpKSB7XG4gICAgLy8gRG9uJ3Qgd2FpdCBhbiBhZGRpdGlvbmFsIHRpY2suIENvbW1pdCB0aGUgdHJlZSBpbW1lZGlhdGVseS5cbiAgICByb290LnBlbmRpbmdDb21taXRFeHBpcmF0aW9uVGltZSA9IHN1c3BlbmRlZEV4cGlyYXRpb25UaW1lO1xuICAgIHJvb3QuZmluaXNoZWRXb3JrID0gZmluaXNoZWRXb3JrO1xuICB9IGVsc2UgaWYgKG1zVW50aWxUaW1lb3V0ID4gMCkge1xuICAgIC8vIFdhaXQgYG1zVW50aWxUaW1lb3V0YCBtaWxsaXNlY29uZHMgYmVmb3JlIGNvbW1pdHRpbmcuXG4gICAgcm9vdC50aW1lb3V0SGFuZGxlID0gc2NoZWR1bGVUaW1lb3V0KG9uVGltZW91dC5iaW5kKG51bGwsIHJvb3QsIGZpbmlzaGVkV29yaywgc3VzcGVuZGVkRXhwaXJhdGlvblRpbWUpLCBtc1VudGlsVGltZW91dCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gb25ZaWVsZChyb290KSB7XG4gIHJvb3QuZmluaXNoZWRXb3JrID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gb25UaW1lb3V0KHJvb3QsIGZpbmlzaGVkV29yaywgc3VzcGVuZGVkRXhwaXJhdGlvblRpbWUpIHtcbiAgLy8gVGhlIHJvb3QgdGltZWQgb3V0LiBDb21taXQgaXQuXG4gIHJvb3QucGVuZGluZ0NvbW1pdEV4cGlyYXRpb25UaW1lID0gc3VzcGVuZGVkRXhwaXJhdGlvblRpbWU7XG4gIHJvb3QuZmluaXNoZWRXb3JrID0gZmluaXNoZWRXb3JrO1xuICAvLyBSZWFkIHRoZSBjdXJyZW50IHRpbWUgYmVmb3JlIGVudGVyaW5nIHRoZSBjb21taXQgcGhhc2UuIFdlIGNhbiBiZVxuICAvLyBjZXJ0YWluIHRoaXMgd29uJ3QgY2F1c2UgdGVhcmluZyByZWxhdGVkIHRvIGJhdGNoaW5nIG9mIGV2ZW50IHVwZGF0ZXNcbiAgLy8gYmVjYXVzZSB3ZSdyZSBhdCB0aGUgdG9wIG9mIGEgdGltZXIgZXZlbnQuXG4gIHJlY29tcHV0ZUN1cnJlbnRSZW5kZXJlclRpbWUoKTtcbiAgY3VycmVudFNjaGVkdWxlclRpbWUgPSBjdXJyZW50UmVuZGVyZXJUaW1lO1xuICBmbHVzaFJvb3Qocm9vdCwgc3VzcGVuZGVkRXhwaXJhdGlvblRpbWUpO1xufVxuXG5mdW5jdGlvbiBvbkNvbW1pdChyb290LCBleHBpcmF0aW9uVGltZSkge1xuICByb290LmV4cGlyYXRpb25UaW1lID0gZXhwaXJhdGlvblRpbWU7XG4gIHJvb3QuZmluaXNoZWRXb3JrID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gcmVxdWVzdEN1cnJlbnRUaW1lKCkge1xuICAvLyByZXF1ZXN0Q3VycmVudFRpbWUgaXMgY2FsbGVkIGJ5IHRoZSBzY2hlZHVsZXIgdG8gY29tcHV0ZSBhbiBleHBpcmF0aW9uXG4gIC8vIHRpbWUuXG4gIC8vXG4gIC8vIEV4cGlyYXRpb24gdGltZXMgYXJlIGNvbXB1dGVkIGJ5IGFkZGluZyB0byB0aGUgY3VycmVudCB0aW1lICh0aGUgc3RhcnRcbiAgLy8gdGltZSkuIEhvd2V2ZXIsIGlmIHR3byB1cGRhdGVzIGFyZSBzY2hlZHVsZWQgd2l0aGluIHRoZSBzYW1lIGV2ZW50LCB3ZVxuICAvLyBzaG91bGQgdHJlYXQgdGhlaXIgc3RhcnQgdGltZXMgYXMgc2ltdWx0YW5lb3VzLCBldmVuIGlmIHRoZSBhY3R1YWwgY2xvY2tcbiAgLy8gdGltZSBoYXMgYWR2YW5jZWQgYmV0d2VlbiB0aGUgZmlyc3QgYW5kIHNlY29uZCBjYWxsLlxuXG4gIC8vIEluIG90aGVyIHdvcmRzLCBiZWNhdXNlIGV4cGlyYXRpb24gdGltZXMgZGV0ZXJtaW5lIGhvdyB1cGRhdGVzIGFyZSBiYXRjaGVkLFxuICAvLyB3ZSB3YW50IGFsbCB1cGRhdGVzIG9mIGxpa2UgcHJpb3JpdHkgdGhhdCBvY2N1ciB3aXRoaW4gdGhlIHNhbWUgZXZlbnQgdG9cbiAgLy8gcmVjZWl2ZSB0aGUgc2FtZSBleHBpcmF0aW9uIHRpbWUuIE90aGVyd2lzZSB3ZSBnZXQgdGVhcmluZy5cbiAgLy9cbiAgLy8gV2Uga2VlcCB0cmFjayBvZiB0d28gc2VwYXJhdGUgdGltZXM6IHRoZSBjdXJyZW50IFwicmVuZGVyZXJcIiB0aW1lIGFuZCB0aGVcbiAgLy8gY3VycmVudCBcInNjaGVkdWxlclwiIHRpbWUuIFRoZSByZW5kZXJlciB0aW1lIGNhbiBiZSB1cGRhdGVkIHdoZW5ldmVyOyBpdFxuICAvLyBvbmx5IGV4aXN0cyB0byBtaW5pbWl6ZSB0aGUgY2FsbHMgcGVyZm9ybWFuY2Uubm93LlxuICAvL1xuICAvLyBCdXQgdGhlIHNjaGVkdWxlciB0aW1lIGNhbiBvbmx5IGJlIHVwZGF0ZWQgaWYgdGhlcmUncyBubyBwZW5kaW5nIHdvcmssIG9yXG4gIC8vIGlmIHdlIGtub3cgZm9yIGNlcnRhaW4gdGhhdCB3ZSdyZSBub3QgaW4gdGhlIG1pZGRsZSBvZiBhbiBldmVudC5cblxuICBpZiAoaXNSZW5kZXJpbmcpIHtcbiAgICAvLyBXZSdyZSBhbHJlYWR5IHJlbmRlcmluZy4gUmV0dXJuIHRoZSBtb3N0IHJlY2VudGx5IHJlYWQgdGltZS5cbiAgICByZXR1cm4gY3VycmVudFNjaGVkdWxlclRpbWU7XG4gIH1cbiAgLy8gQ2hlY2sgaWYgdGhlcmUncyBwZW5kaW5nIHdvcmsuXG4gIGZpbmRIaWdoZXN0UHJpb3JpdHlSb290KCk7XG4gIGlmIChuZXh0Rmx1c2hlZEV4cGlyYXRpb25UaW1lID09PSBOb1dvcmsgfHwgbmV4dEZsdXNoZWRFeHBpcmF0aW9uVGltZSA9PT0gTmV2ZXIpIHtcbiAgICAvLyBJZiB0aGVyZSdzIG5vIHBlbmRpbmcgd29yaywgb3IgaWYgdGhlIHBlbmRpbmcgd29yayBpcyBvZmZzY3JlZW4sIHdlIGNhblxuICAgIC8vIHJlYWQgdGhlIGN1cnJlbnQgdGltZSB3aXRob3V0IHJpc2sgb2YgdGVhcmluZy5cbiAgICByZWNvbXB1dGVDdXJyZW50UmVuZGVyZXJUaW1lKCk7XG4gICAgY3VycmVudFNjaGVkdWxlclRpbWUgPSBjdXJyZW50UmVuZGVyZXJUaW1lO1xuICAgIHJldHVybiBjdXJyZW50U2NoZWR1bGVyVGltZTtcbiAgfVxuICAvLyBUaGVyZSdzIGFscmVhZHkgcGVuZGluZyB3b3JrLiBXZSBtaWdodCBiZSBpbiB0aGUgbWlkZGxlIG9mIGEgYnJvd3NlclxuICAvLyBldmVudC4gSWYgd2Ugd2VyZSB0byByZWFkIHRoZSBjdXJyZW50IHRpbWUsIGl0IGNvdWxkIGNhdXNlIG11bHRpcGxlIHVwZGF0ZXNcbiAgLy8gd2l0aGluIHRoZSBzYW1lIGV2ZW50IHRvIHJlY2VpdmUgZGlmZmVyZW50IGV4cGlyYXRpb24gdGltZXMsIGxlYWRpbmcgdG9cbiAgLy8gdGVhcmluZy4gUmV0dXJuIHRoZSBsYXN0IHJlYWQgdGltZS4gRHVyaW5nIHRoZSBuZXh0IGlkbGUgY2FsbGJhY2ssIHRoZVxuICAvLyB0aW1lIHdpbGwgYmUgdXBkYXRlZC5cbiAgcmV0dXJuIGN1cnJlbnRTY2hlZHVsZXJUaW1lO1xufVxuXG4vLyByZXF1ZXN0V29yayBpcyBjYWxsZWQgYnkgdGhlIHNjaGVkdWxlciB3aGVuZXZlciBhIHJvb3QgcmVjZWl2ZXMgYW4gdXBkYXRlLlxuLy8gSXQncyB1cCB0byB0aGUgcmVuZGVyZXIgdG8gY2FsbCByZW5kZXJSb290IGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZS5cbmZ1bmN0aW9uIHJlcXVlc3RXb3JrKHJvb3QsIGV4cGlyYXRpb25UaW1lKSB7XG4gIGFkZFJvb3RUb1NjaGVkdWxlKHJvb3QsIGV4cGlyYXRpb25UaW1lKTtcbiAgaWYgKGlzUmVuZGVyaW5nKSB7XG4gICAgLy8gUHJldmVudCByZWVudHJhbmN5LiBSZW1haW5pbmcgd29yayB3aWxsIGJlIHNjaGVkdWxlZCBhdCB0aGUgZW5kIG9mXG4gICAgLy8gdGhlIGN1cnJlbnRseSByZW5kZXJpbmcgYmF0Y2guXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGlzQmF0Y2hpbmdVcGRhdGVzKSB7XG4gICAgLy8gRmx1c2ggd29yayBhdCB0aGUgZW5kIG9mIHRoZSBiYXRjaC5cbiAgICBpZiAoaXNVbmJhdGNoaW5nVXBkYXRlcykge1xuICAgICAgLy8gLi4udW5sZXNzIHdlJ3JlIGluc2lkZSB1bmJhdGNoZWRVcGRhdGVzLCBpbiB3aGljaCBjYXNlIHdlIHNob3VsZFxuICAgICAgLy8gZmx1c2ggaXQgbm93LlxuICAgICAgbmV4dEZsdXNoZWRSb290ID0gcm9vdDtcbiAgICAgIG5leHRGbHVzaGVkRXhwaXJhdGlvblRpbWUgPSBTeW5jO1xuICAgICAgcGVyZm9ybVdvcmtPblJvb3Qocm9vdCwgU3luYywgZmFsc2UpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBUT0RPOiBHZXQgcmlkIG9mIFN5bmMgYW5kIHVzZSBjdXJyZW50IHRpbWU/XG4gIGlmIChleHBpcmF0aW9uVGltZSA9PT0gU3luYykge1xuICAgIHBlcmZvcm1TeW5jV29yaygpO1xuICB9IGVsc2Uge1xuICAgIHNjaGVkdWxlQ2FsbGJhY2tXaXRoRXhwaXJhdGlvblRpbWUocm9vdCwgZXhwaXJhdGlvblRpbWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFkZFJvb3RUb1NjaGVkdWxlKHJvb3QsIGV4cGlyYXRpb25UaW1lKSB7XG4gIC8vIEFkZCB0aGUgcm9vdCB0byB0aGUgc2NoZWR1bGUuXG4gIC8vIENoZWNrIGlmIHRoaXMgcm9vdCBpcyBhbHJlYWR5IHBhcnQgb2YgdGhlIHNjaGVkdWxlLlxuICBpZiAocm9vdC5uZXh0U2NoZWR1bGVkUm9vdCA9PT0gbnVsbCkge1xuICAgIC8vIFRoaXMgcm9vdCBpcyBub3QgYWxyZWFkeSBzY2hlZHVsZWQuIEFkZCBpdC5cbiAgICByb290LmV4cGlyYXRpb25UaW1lID0gZXhwaXJhdGlvblRpbWU7XG4gICAgaWYgKGxhc3RTY2hlZHVsZWRSb290ID09PSBudWxsKSB7XG4gICAgICBmaXJzdFNjaGVkdWxlZFJvb3QgPSBsYXN0U2NoZWR1bGVkUm9vdCA9IHJvb3Q7XG4gICAgICByb290Lm5leHRTY2hlZHVsZWRSb290ID0gcm9vdDtcbiAgICB9IGVsc2Uge1xuICAgICAgbGFzdFNjaGVkdWxlZFJvb3QubmV4dFNjaGVkdWxlZFJvb3QgPSByb290O1xuICAgICAgbGFzdFNjaGVkdWxlZFJvb3QgPSByb290O1xuICAgICAgbGFzdFNjaGVkdWxlZFJvb3QubmV4dFNjaGVkdWxlZFJvb3QgPSBmaXJzdFNjaGVkdWxlZFJvb3Q7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgcm9vdCBpcyBhbHJlYWR5IHNjaGVkdWxlZCwgYnV0IGl0cyBwcmlvcml0eSBtYXkgaGF2ZSBpbmNyZWFzZWQuXG4gICAgdmFyIHJlbWFpbmluZ0V4cGlyYXRpb25UaW1lID0gcm9vdC5leHBpcmF0aW9uVGltZTtcbiAgICBpZiAoZXhwaXJhdGlvblRpbWUgPiByZW1haW5pbmdFeHBpcmF0aW9uVGltZSkge1xuICAgICAgLy8gVXBkYXRlIHRoZSBwcmlvcml0eS5cbiAgICAgIHJvb3QuZXhwaXJhdGlvblRpbWUgPSBleHBpcmF0aW9uVGltZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEhpZ2hlc3RQcmlvcml0eVJvb3QoKSB7XG4gIHZhciBoaWdoZXN0UHJpb3JpdHlXb3JrID0gTm9Xb3JrO1xuICB2YXIgaGlnaGVzdFByaW9yaXR5Um9vdCA9IG51bGw7XG4gIGlmIChsYXN0U2NoZWR1bGVkUm9vdCAhPT0gbnVsbCkge1xuICAgIHZhciBwcmV2aW91c1NjaGVkdWxlZFJvb3QgPSBsYXN0U2NoZWR1bGVkUm9vdDtcbiAgICB2YXIgcm9vdCA9IGZpcnN0U2NoZWR1bGVkUm9vdDtcbiAgICB3aGlsZSAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgdmFyIHJlbWFpbmluZ0V4cGlyYXRpb25UaW1lID0gcm9vdC5leHBpcmF0aW9uVGltZTtcbiAgICAgIGlmIChyZW1haW5pbmdFeHBpcmF0aW9uVGltZSA9PT0gTm9Xb3JrKSB7XG4gICAgICAgIC8vIFRoaXMgcm9vdCBubyBsb25nZXIgaGFzIHdvcmsuIFJlbW92ZSBpdCBmcm9tIHRoZSBzY2hlZHVsZXIuXG5cbiAgICAgICAgLy8gVE9ETzogVGhpcyBjaGVjayBpcyByZWR1ZGFudCwgYnV0IEZsb3cgaXMgY29uZnVzZWQgYnkgdGhlIGJyYW5jaFxuICAgICAgICAvLyBiZWxvdyB3aGVyZSB3ZSBzZXQgbGFzdFNjaGVkdWxlZFJvb3QgdG8gbnVsbCwgZXZlbiB0aG91Z2ggd2UgYnJlYWtcbiAgICAgICAgLy8gZnJvbSB0aGUgbG9vcCByaWdodCBhZnRlci5cbiAgICAgICAgIShwcmV2aW91c1NjaGVkdWxlZFJvb3QgIT09IG51bGwgJiYgbGFzdFNjaGVkdWxlZFJvb3QgIT09IG51bGwpID8gaW52YXJpYW50KGZhbHNlLCAnU2hvdWxkIGhhdmUgYSBwcmV2aW91cyBhbmQgbGFzdCByb290LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpIDogdm9pZCAwO1xuICAgICAgICBpZiAocm9vdCA9PT0gcm9vdC5uZXh0U2NoZWR1bGVkUm9vdCkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIG9ubHkgcm9vdCBpbiB0aGUgbGlzdC5cbiAgICAgICAgICByb290Lm5leHRTY2hlZHVsZWRSb290ID0gbnVsbDtcbiAgICAgICAgICBmaXJzdFNjaGVkdWxlZFJvb3QgPSBsYXN0U2NoZWR1bGVkUm9vdCA9IG51bGw7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSBpZiAocm9vdCA9PT0gZmlyc3RTY2hlZHVsZWRSb290KSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3Qgcm9vdCBpbiB0aGUgbGlzdC5cbiAgICAgICAgICB2YXIgbmV4dCA9IHJvb3QubmV4dFNjaGVkdWxlZFJvb3Q7XG4gICAgICAgICAgZmlyc3RTY2hlZHVsZWRSb290ID0gbmV4dDtcbiAgICAgICAgICBsYXN0U2NoZWR1bGVkUm9vdC5uZXh0U2NoZWR1bGVkUm9vdCA9IG5leHQ7XG4gICAgICAgICAgcm9vdC5uZXh0U2NoZWR1bGVkUm9vdCA9IG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAocm9vdCA9PT0gbGFzdFNjaGVkdWxlZFJvb3QpIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBsYXN0IHJvb3QgaW4gdGhlIGxpc3QuXG4gICAgICAgICAgbGFzdFNjaGVkdWxlZFJvb3QgPSBwcmV2aW91c1NjaGVkdWxlZFJvb3Q7XG4gICAgICAgICAgbGFzdFNjaGVkdWxlZFJvb3QubmV4dFNjaGVkdWxlZFJvb3QgPSBmaXJzdFNjaGVkdWxlZFJvb3Q7XG4gICAgICAgICAgcm9vdC5uZXh0U2NoZWR1bGVkUm9vdCA9IG51bGw7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJldmlvdXNTY2hlZHVsZWRSb290Lm5leHRTY2hlZHVsZWRSb290ID0gcm9vdC5uZXh0U2NoZWR1bGVkUm9vdDtcbiAgICAgICAgICByb290Lm5leHRTY2hlZHVsZWRSb290ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByb290ID0gcHJldmlvdXNTY2hlZHVsZWRSb290Lm5leHRTY2hlZHVsZWRSb290O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHJlbWFpbmluZ0V4cGlyYXRpb25UaW1lID4gaGlnaGVzdFByaW9yaXR5V29yaykge1xuICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgcHJpb3JpdHksIGlmIGl0J3MgaGlnaGVyXG4gICAgICAgICAgaGlnaGVzdFByaW9yaXR5V29yayA9IHJlbWFpbmluZ0V4cGlyYXRpb25UaW1lO1xuICAgICAgICAgIGhpZ2hlc3RQcmlvcml0eVJvb3QgPSByb290O1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb290ID09PSBsYXN0U2NoZWR1bGVkUm9vdCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoaWdoZXN0UHJpb3JpdHlXb3JrID09PSBTeW5jKSB7XG4gICAgICAgICAgLy8gU3luYyBpcyBoaWdoZXN0IHByaW9yaXR5IGJ5IGRlZmluaXRpb24gc29cbiAgICAgICAgICAvLyB3ZSBjYW4gc3RvcCBzZWFyY2hpbmcuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcHJldmlvdXNTY2hlZHVsZWRSb290ID0gcm9vdDtcbiAgICAgICAgcm9vdCA9IHJvb3QubmV4dFNjaGVkdWxlZFJvb3Q7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmV4dEZsdXNoZWRSb290ID0gaGlnaGVzdFByaW9yaXR5Um9vdDtcbiAgbmV4dEZsdXNoZWRFeHBpcmF0aW9uVGltZSA9IGhpZ2hlc3RQcmlvcml0eVdvcms7XG59XG5cbi8vIFRPRE86IFRoaXMgd3JhcHBlciBleGlzdHMgYmVjYXVzZSBtYW55IG9mIHRoZSBvbGRlciB0ZXN0cyAodGhlIG9uZXMgdGhhdCB1c2Vcbi8vIGZsdXNoRGVmZXJyZWRQcmkpIHJlbHkgb24gdGhlIG51bWJlciBvZiB0aW1lcyBgc2hvdWxkWWllbGRgIGlzIGNhbGxlZC4gV2Vcbi8vIHNob3VsZCBnZXQgcmlkIG9mIGl0LlxudmFyIGRpZFlpZWxkID0gZmFsc2U7XG5mdW5jdGlvbiBzaG91bGRZaWVsZFRvUmVuZGVyZXIoKSB7XG4gIGlmIChkaWRZaWVsZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChzY2hlZHVsZXIudW5zdGFibGVfc2hvdWxkWWllbGQoKSkge1xuICAgIGRpZFlpZWxkID0gdHJ1ZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHBlcmZvcm1Bc3luY1dvcmsoKSB7XG4gIHRyeSB7XG4gICAgaWYgKCFzaG91bGRZaWVsZFRvUmVuZGVyZXIoKSkge1xuICAgICAgLy8gVGhlIGNhbGxiYWNrIHRpbWVkIG91dC4gVGhhdCBtZWFucyBhdCBsZWFzdCBvbmUgdXBkYXRlIGhhcyBleHBpcmVkLlxuICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSByb290IHNjaGVkdWxlLiBJZiB0aGV5IGNvbnRhaW4gZXhwaXJlZCB3b3JrLCBzZXRcbiAgICAgIC8vIHRoZSBuZXh0IHJlbmRlciBleHBpcmF0aW9uIHRpbWUgdG8gdGhlIGN1cnJlbnQgdGltZS4gVGhpcyBoYXMgdGhlIGVmZmVjdFxuICAgICAgLy8gb2YgZmx1c2hpbmcgYWxsIGV4cGlyZWQgd29yayBpbiBhIHNpbmdsZSBiYXRjaCwgaW5zdGVhZCBvZiBmbHVzaGluZyBlYWNoXG4gICAgICAvLyBsZXZlbCBvbmUgYXQgYSB0aW1lLlxuICAgICAgaWYgKGZpcnN0U2NoZWR1bGVkUm9vdCAhPT0gbnVsbCkge1xuICAgICAgICByZWNvbXB1dGVDdXJyZW50UmVuZGVyZXJUaW1lKCk7XG4gICAgICAgIHZhciByb290ID0gZmlyc3RTY2hlZHVsZWRSb290O1xuICAgICAgICBkbyB7XG4gICAgICAgICAgZGlkRXhwaXJlQXRFeHBpcmF0aW9uVGltZShyb290LCBjdXJyZW50UmVuZGVyZXJUaW1lKTtcbiAgICAgICAgICAvLyBUaGUgcm9vdCBzY2hlZHVsZSBpcyBjaXJjdWxhciwgc28gdGhpcyBpcyBuZXZlciBudWxsLlxuICAgICAgICAgIHJvb3QgPSByb290Lm5leHRTY2hlZHVsZWRSb290O1xuICAgICAgICB9IHdoaWxlIChyb290ICE9PSBmaXJzdFNjaGVkdWxlZFJvb3QpO1xuICAgICAgfVxuICAgIH1cbiAgICBwZXJmb3JtV29yayhOb1dvcmssIHRydWUpO1xuICB9IGZpbmFsbHkge1xuICAgIGRpZFlpZWxkID0gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGVyZm9ybVN5bmNXb3JrKCkge1xuICBwZXJmb3JtV29yayhTeW5jLCBmYWxzZSk7XG59XG5cbmZ1bmN0aW9uIHBlcmZvcm1Xb3JrKG1pbkV4cGlyYXRpb25UaW1lLCBpc1lpZWxkeSkge1xuICAvLyBLZWVwIHdvcmtpbmcgb24gcm9vdHMgdW50aWwgdGhlcmUncyBubyBtb3JlIHdvcmssIG9yIHVudGlsIHRoZXJlJ3MgYSBoaWdoZXJcbiAgLy8gcHJpb3JpdHkgZXZlbnQuXG4gIGZpbmRIaWdoZXN0UHJpb3JpdHlSb290KCk7XG5cbiAgaWYgKGlzWWllbGR5KSB7XG4gICAgcmVjb21wdXRlQ3VycmVudFJlbmRlcmVyVGltZSgpO1xuICAgIGN1cnJlbnRTY2hlZHVsZXJUaW1lID0gY3VycmVudFJlbmRlcmVyVGltZTtcblxuICAgIGlmIChlbmFibGVVc2VyVGltaW5nQVBJKSB7XG4gICAgICB2YXIgZGlkRXhwaXJlID0gbmV4dEZsdXNoZWRFeHBpcmF0aW9uVGltZSA+IGN1cnJlbnRSZW5kZXJlclRpbWU7XG4gICAgICB2YXIgdGltZW91dCA9IGV4cGlyYXRpb25UaW1lVG9NcyhuZXh0Rmx1c2hlZEV4cGlyYXRpb25UaW1lKTtcbiAgICAgIHN0b3BSZXF1ZXN0Q2FsbGJhY2tUaW1lcihkaWRFeHBpcmUsIHRpbWVvdXQpO1xuICAgIH1cblxuICAgIHdoaWxlIChuZXh0Rmx1c2hlZFJvb3QgIT09IG51bGwgJiYgbmV4dEZsdXNoZWRFeHBpcmF0aW9uVGltZSAhPT0gTm9Xb3JrICYmIG1pbkV4cGlyYXRpb25UaW1lIDw9IG5leHRGbHVzaGVkRXhwaXJhdGlvblRpbWUgJiYgIShkaWRZaWVsZCAmJiBjdXJyZW50UmVuZGVyZXJUaW1lID4gbmV4dEZsdXNoZWRFeHBpcmF0aW9uVGltZSkpIHtcbiAgICAgIHBlcmZvcm1Xb3JrT25Sb290KG5leHRGbHVzaGVkUm9vdCwgbmV4dEZsdXNoZWRFeHBpcmF0aW9uVGltZSwgY3VycmVudFJlbmRlcmVyVGltZSA+IG5leHRGbHVzaGVkRXhwaXJhdGlvblRpbWUpO1xuICAgICAgZmluZEhpZ2hlc3RQcmlvcml0eVJvb3QoKTtcbiAgICAgIHJlY29tcHV0ZUN1cnJlbnRSZW5kZXJlclRpbWUoKTtcbiAgICAgIGN1cnJlbnRTY2hlZHVsZXJUaW1lID0gY3VycmVudFJlbmRlcmVyVGltZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKG5leHRGbHVzaGVkUm9vdCAhPT0gbnVsbCAmJiBuZXh0Rmx1c2hlZEV4cGlyYXRpb25UaW1lICE9PSBOb1dvcmsgJiYgbWluRXhwaXJhdGlvblRpbWUgPD0gbmV4dEZsdXNoZWRFeHBpcmF0aW9uVGltZSkge1xuICAgICAgcGVyZm9ybVdvcmtPblJvb3QobmV4dEZsdXNoZWRSb290LCBuZXh0Rmx1c2hlZEV4cGlyYXRpb25UaW1lLCBmYWxzZSk7XG4gICAgICBmaW5kSGlnaGVzdFByaW9yaXR5Um9vdCgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFdlJ3JlIGRvbmUgZmx1c2hpbmcgd29yay4gRWl0aGVyIHdlIHJhbiBvdXQgb2YgdGltZSBpbiB0aGlzIGNhbGxiYWNrLFxuICAvLyBvciB0aGVyZSdzIG5vIG1vcmUgd29yayBsZWZ0IHdpdGggc3VmZmljaWVudCBwcmlvcml0eS5cblxuICAvLyBJZiB3ZSdyZSBpbnNpZGUgYSBjYWxsYmFjaywgc2V0IHRoaXMgdG8gZmFsc2Ugc2luY2Ugd2UganVzdCBjb21wbGV0ZWQgaXQuXG4gIGlmIChpc1lpZWxkeSkge1xuICAgIGNhbGxiYWNrRXhwaXJhdGlvblRpbWUgPSBOb1dvcms7XG4gICAgY2FsbGJhY2tJRCA9IG51bGw7XG4gIH1cbiAgLy8gSWYgdGhlcmUncyB3b3JrIGxlZnQgb3Zlciwgc2NoZWR1bGUgYSBuZXcgY2FsbGJhY2suXG4gIGlmIChuZXh0Rmx1c2hlZEV4cGlyYXRpb25UaW1lICE9PSBOb1dvcmspIHtcbiAgICBzY2hlZHVsZUNhbGxiYWNrV2l0aEV4cGlyYXRpb25UaW1lKG5leHRGbHVzaGVkUm9vdCwgbmV4dEZsdXNoZWRFeHBpcmF0aW9uVGltZSk7XG4gIH1cblxuICAvLyBDbGVhbi11cC5cbiAgZmluaXNoUmVuZGVyaW5nKCk7XG59XG5cbmZ1bmN0aW9uIGZsdXNoUm9vdChyb290LCBleHBpcmF0aW9uVGltZSkge1xuICAhIWlzUmVuZGVyaW5nID8gaW52YXJpYW50KGZhbHNlLCAnd29yay5jb21taXQoKTogQ2Fubm90IGNvbW1pdCB3aGlsZSBhbHJlYWR5IHJlbmRlcmluZy4gVGhpcyBsaWtlbHkgbWVhbnMgeW91IGF0dGVtcHRlZCB0byBjb21taXQgZnJvbSBpbnNpZGUgYSBsaWZlY3ljbGUgbWV0aG9kLicpIDogdm9pZCAwO1xuICAvLyBQZXJmb3JtIHdvcmsgb24gcm9vdCBhcyBpZiB0aGUgZ2l2ZW4gZXhwaXJhdGlvbiB0aW1lIGlzIHRoZSBjdXJyZW50IHRpbWUuXG4gIC8vIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2Ygc3luY2hyb25vdXNseSBmbHVzaGluZyBhbGwgd29yayB1cCB0byBhbmRcbiAgLy8gaW5jbHVkaW5nIHRoZSBnaXZlbiB0aW1lLlxuICBuZXh0Rmx1c2hlZFJvb3QgPSByb290O1xuICBuZXh0Rmx1c2hlZEV4cGlyYXRpb25UaW1lID0gZXhwaXJhdGlvblRpbWU7XG4gIHBlcmZvcm1Xb3JrT25Sb290KHJvb3QsIGV4cGlyYXRpb25UaW1lLCBmYWxzZSk7XG4gIC8vIEZsdXNoIGFueSBzeW5jIHdvcmsgdGhhdCB3YXMgc2NoZWR1bGVkIGJ5IGxpZmVjeWNsZXNcbiAgcGVyZm9ybVN5bmNXb3JrKCk7XG59XG5cbmZ1bmN0aW9uIGZpbmlzaFJlbmRlcmluZygpIHtcbiAgbmVzdGVkVXBkYXRlQ291bnQgPSAwO1xuICBsYXN0Q29tbWl0dGVkUm9vdER1cmluZ1RoaXNCYXRjaCA9IG51bGw7XG5cbiAgaWYgKGNvbXBsZXRlZEJhdGNoZXMgIT09IG51bGwpIHtcbiAgICB2YXIgYmF0Y2hlcyA9IGNvbXBsZXRlZEJhdGNoZXM7XG4gICAgY29tcGxldGVkQmF0Y2hlcyA9IG51bGw7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYXRjaGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgYmF0Y2ggPSBiYXRjaGVzW2ldO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYmF0Y2guX29uQ29tcGxldGUoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghaGFzVW5oYW5kbGVkRXJyb3IpIHtcbiAgICAgICAgICBoYXNVbmhhbmRsZWRFcnJvciA9IHRydWU7XG4gICAgICAgICAgdW5oYW5kbGVkRXJyb3IgPSBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChoYXNVbmhhbmRsZWRFcnJvcikge1xuICAgIHZhciBlcnJvciA9IHVuaGFuZGxlZEVycm9yO1xuICAgIHVuaGFuZGxlZEVycm9yID0gbnVsbDtcbiAgICBoYXNVbmhhbmRsZWRFcnJvciA9IGZhbHNlO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBlcmZvcm1Xb3JrT25Sb290KHJvb3QsIGV4cGlyYXRpb25UaW1lLCBpc1lpZWxkeSkge1xuICAhIWlzUmVuZGVyaW5nID8gaW52YXJpYW50KGZhbHNlLCAncGVyZm9ybVdvcmtPblJvb3Qgd2FzIGNhbGxlZCByZWN1cnNpdmVseS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKSA6IHZvaWQgMDtcblxuICBpc1JlbmRlcmluZyA9IHRydWU7XG5cbiAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhc3luYyB3b3JrIG9yIHN5bmMvZXhwaXJlZCB3b3JrLlxuICBpZiAoIWlzWWllbGR5KSB7XG4gICAgLy8gRmx1c2ggd29yayB3aXRob3V0IHlpZWxkaW5nLlxuICAgIC8vIFRPRE86IE5vbi15aWVsZHkgd29yayBkb2VzIG5vdCBuZWNlc3NhcmlseSBpbXBseSBleHBpcmVkIHdvcmsuIEEgcmVuZGVyZXJcbiAgICAvLyBtYXkgd2FudCB0byBwZXJmb3JtIHNvbWUgd29yayB3aXRob3V0IHlpZWxkaW5nLCBidXQgYWxzbyB3aXRob3V0XG4gICAgLy8gcmVxdWlyaW5nIHRoZSByb290IHRvIGNvbXBsZXRlIChieSB0cmlnZ2VyaW5nIHBsYWNlaG9sZGVycykuXG5cbiAgICB2YXIgZmluaXNoZWRXb3JrID0gcm9vdC5maW5pc2hlZFdvcms7XG4gICAgaWYgKGZpbmlzaGVkV29yayAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyByb290IGlzIGFscmVhZHkgY29tcGxldGUuIFdlIGNhbiBjb21taXQgaXQuXG4gICAgICBjb21wbGV0ZVJvb3Qocm9vdCwgZmluaXNoZWRXb3JrLCBleHBpcmF0aW9uVGltZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvb3QuZmluaXNoZWRXb3JrID0gbnVsbDtcbiAgICAgIC8vIElmIHRoaXMgcm9vdCBwcmV2aW91c2x5IHN1c3BlbmRlZCwgY2xlYXIgaXRzIGV4aXN0aW5nIHRpbWVvdXQsIHNpbmNlXG4gICAgICAvLyB3ZSdyZSBhYm91dCB0byB0cnkgcmVuZGVyaW5nIGFnYWluLlxuICAgICAgdmFyIHRpbWVvdXRIYW5kbGUgPSByb290LnRpbWVvdXRIYW5kbGU7XG4gICAgICBpZiAodGltZW91dEhhbmRsZSAhPT0gbm9UaW1lb3V0KSB7XG4gICAgICAgIHJvb3QudGltZW91dEhhbmRsZSA9IG5vVGltZW91dDtcbiAgICAgICAgLy8gJEZsb3dGaXhNZSBDb21wbGFpbnMgbm9UaW1lb3V0IGlzIG5vdCBhIFRpbWVvdXRJRCwgZGVzcGl0ZSB0aGUgY2hlY2sgYWJvdmVcbiAgICAgICAgY2FuY2VsVGltZW91dCh0aW1lb3V0SGFuZGxlKTtcbiAgICAgIH1cbiAgICAgIHJlbmRlclJvb3Qocm9vdCwgaXNZaWVsZHkpO1xuICAgICAgZmluaXNoZWRXb3JrID0gcm9vdC5maW5pc2hlZFdvcms7XG4gICAgICBpZiAoZmluaXNoZWRXb3JrICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFdlJ3ZlIGNvbXBsZXRlZCB0aGUgcm9vdC4gQ29tbWl0IGl0LlxuICAgICAgICBjb21wbGV0ZVJvb3Qocm9vdCwgZmluaXNoZWRXb3JrLCBleHBpcmF0aW9uVGltZSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEZsdXNoIGFzeW5jIHdvcmsuXG4gICAgdmFyIF9maW5pc2hlZFdvcmsgPSByb290LmZpbmlzaGVkV29yaztcbiAgICBpZiAoX2ZpbmlzaGVkV29yayAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyByb290IGlzIGFscmVhZHkgY29tcGxldGUuIFdlIGNhbiBjb21taXQgaXQuXG4gICAgICBjb21wbGV0ZVJvb3Qocm9vdCwgX2ZpbmlzaGVkV29yaywgZXhwaXJhdGlvblRpbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByb290LmZpbmlzaGVkV29yayA9IG51bGw7XG4gICAgICAvLyBJZiB0aGlzIHJvb3QgcHJldmlvdXNseSBzdXNwZW5kZWQsIGNsZWFyIGl0cyBleGlzdGluZyB0aW1lb3V0LCBzaW5jZVxuICAgICAgLy8gd2UncmUgYWJvdXQgdG8gdHJ5IHJlbmRlcmluZyBhZ2Fpbi5cbiAgICAgIHZhciBfdGltZW91dEhhbmRsZSA9IHJvb3QudGltZW91dEhhbmRsZTtcbiAgICAgIGlmIChfdGltZW91dEhhbmRsZSAhPT0gbm9UaW1lb3V0KSB7XG4gICAgICAgIHJvb3QudGltZW91dEhhbmRsZSA9IG5vVGltZW91dDtcbiAgICAgICAgLy8gJEZsb3dGaXhNZSBDb21wbGFpbnMgbm9UaW1lb3V0IGlzIG5vdCBhIFRpbWVvdXRJRCwgZGVzcGl0ZSB0aGUgY2hlY2sgYWJvdmVcbiAgICAgICAgY2FuY2VsVGltZW91dChfdGltZW91dEhhbmRsZSk7XG4gICAgICB9XG4gICAgICByZW5kZXJSb290KHJvb3QsIGlzWWllbGR5KTtcbiAgICAgIF9maW5pc2hlZFdvcmsgPSByb290LmZpbmlzaGVkV29yaztcbiAgICAgIGlmIChfZmluaXNoZWRXb3JrICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFdlJ3ZlIGNvbXBsZXRlZCB0aGUgcm9vdC4gQ2hlY2sgdGhlIGlmIHdlIHNob3VsZCB5aWVsZCBvbmUgbW9yZSB0aW1lXG4gICAgICAgIC8vIGJlZm9yZSBjb21taXR0aW5nLlxuICAgICAgICBpZiAoIXNob3VsZFlpZWxkVG9SZW5kZXJlcigpKSB7XG4gICAgICAgICAgLy8gU3RpbGwgdGltZSBsZWZ0LiBDb21taXQgdGhlIHJvb3QuXG4gICAgICAgICAgY29tcGxldGVSb290KHJvb3QsIF9maW5pc2hlZFdvcmssIGV4cGlyYXRpb25UaW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGVyZSdzIG5vIHRpbWUgbGVmdC4gTWFyayB0aGlzIHJvb3QgYXMgY29tcGxldGUuIFdlJ2xsIGNvbWVcbiAgICAgICAgICAvLyBiYWNrIGFuZCBjb21taXQgaXQgbGF0ZXIuXG4gICAgICAgICAgcm9vdC5maW5pc2hlZFdvcmsgPSBfZmluaXNoZWRXb3JrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNSZW5kZXJpbmcgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gY29tcGxldGVSb290KHJvb3QsIGZpbmlzaGVkV29yaywgZXhwaXJhdGlvblRpbWUpIHtcbiAgLy8gQ2hlY2sgaWYgdGhlcmUncyBhIGJhdGNoIHRoYXQgbWF0Y2hlcyB0aGlzIGV4cGlyYXRpb24gdGltZS5cbiAgdmFyIGZpcnN0QmF0Y2ggPSByb290LmZpcnN0QmF0Y2g7XG4gIGlmIChmaXJzdEJhdGNoICE9PSBudWxsICYmIGZpcnN0QmF0Y2guX2V4cGlyYXRpb25UaW1lID49IGV4cGlyYXRpb25UaW1lKSB7XG4gICAgaWYgKGNvbXBsZXRlZEJhdGNoZXMgPT09IG51bGwpIHtcbiAgICAgIGNvbXBsZXRlZEJhdGNoZXMgPSBbZmlyc3RCYXRjaF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbXBsZXRlZEJhdGNoZXMucHVzaChmaXJzdEJhdGNoKTtcbiAgICB9XG4gICAgaWYgKGZpcnN0QmF0Y2guX2RlZmVyKSB7XG4gICAgICAvLyBUaGlzIHJvb3QgaXMgYmxvY2tlZCBmcm9tIGNvbW1pdHRpbmcgYnkgYSBiYXRjaC4gVW5zY2hlZHVsZSBpdCB1bnRpbFxuICAgICAgLy8gd2UgcmVjZWl2ZSBhbm90aGVyIHVwZGF0ZS5cbiAgICAgIHJvb3QuZmluaXNoZWRXb3JrID0gZmluaXNoZWRXb3JrO1xuICAgICAgcm9vdC5leHBpcmF0aW9uVGltZSA9IE5vV29yaztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICAvLyBDb21taXQgdGhlIHJvb3QuXG4gIHJvb3QuZmluaXNoZWRXb3JrID0gbnVsbDtcblxuICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgbmVzdGVkIHVwZGF0ZSAoYSBzeW5jIHVwZGF0ZSBzY2hlZHVsZWQgZHVyaW5nIHRoZVxuICAvLyBjb21taXQgcGhhc2UpLlxuICBpZiAocm9vdCA9PT0gbGFzdENvbW1pdHRlZFJvb3REdXJpbmdUaGlzQmF0Y2gpIHtcbiAgICAvLyBJZiB0aGUgbmV4dCByb290IGlzIHRoZSBzYW1lIGFzIHRoZSBwcmV2aW91cyByb290LCB0aGlzIGlzIGEgbmVzdGVkXG4gICAgLy8gdXBkYXRlLiBUbyBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3AsIGluY3JlbWVudCB0aGUgbmVzdGVkIHVwZGF0ZSBjb3VudC5cbiAgICBuZXN0ZWRVcGRhdGVDb3VudCsrO1xuICB9IGVsc2Uge1xuICAgIC8vIFJlc2V0IHdoZW5ldmVyIHdlIHN3aXRjaCByb290cy5cbiAgICBsYXN0Q29tbWl0dGVkUm9vdER1cmluZ1RoaXNCYXRjaCA9IHJvb3Q7XG4gICAgbmVzdGVkVXBkYXRlQ291bnQgPSAwO1xuICB9XG4gIHNjaGVkdWxlci51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHkoc2NoZWR1bGVyLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5LCBmdW5jdGlvbiAoKSB7XG4gICAgY29tbWl0Um9vdChyb290LCBmaW5pc2hlZFdvcmspO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gb25VbmNhdWdodEVycm9yKGVycm9yKSB7XG4gICEobmV4dEZsdXNoZWRSb290ICE9PSBudWxsKSA/IGludmFyaWFudChmYWxzZSwgJ1Nob3VsZCBiZSB3b3JraW5nIG9uIGEgcm9vdC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKSA6IHZvaWQgMDtcbiAgLy8gVW5zY2hlZHVsZSB0aGlzIHJvb3Qgc28gd2UgZG9uJ3Qgd29yayBvbiBpdCBhZ2FpbiB1bnRpbCB0aGVyZSdzXG4gIC8vIGFub3RoZXIgdXBkYXRlLlxuICBuZXh0Rmx1c2hlZFJvb3QuZXhwaXJhdGlvblRpbWUgPSBOb1dvcms7XG4gIGlmICghaGFzVW5oYW5kbGVkRXJyb3IpIHtcbiAgICBoYXNVbmhhbmRsZWRFcnJvciA9IHRydWU7XG4gICAgdW5oYW5kbGVkRXJyb3IgPSBlcnJvcjtcbiAgfVxufVxuXG4vLyBUT0RPOiBCYXRjaGluZyBzaG91bGQgYmUgaW1wbGVtZW50ZWQgYXQgdGhlIHJlbmRlcmVyIGxldmVsLCBub3QgaW5zaWRlXG4vLyB0aGUgcmVjb25jaWxlci5cbmZ1bmN0aW9uIGJhdGNoZWRVcGRhdGVzJDEoZm4sIGEpIHtcbiAgdmFyIHByZXZpb3VzSXNCYXRjaGluZ1VwZGF0ZXMgPSBpc0JhdGNoaW5nVXBkYXRlcztcbiAgaXNCYXRjaGluZ1VwZGF0ZXMgPSB0cnVlO1xuICB0cnkge1xuICAgIHJldHVybiBmbihhKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpc0JhdGNoaW5nVXBkYXRlcyA9IHByZXZpb3VzSXNCYXRjaGluZ1VwZGF0ZXM7XG4gICAgaWYgKCFpc0JhdGNoaW5nVXBkYXRlcyAmJiAhaXNSZW5kZXJpbmcpIHtcbiAgICAgIHBlcmZvcm1TeW5jV29yaygpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBUT0RPOiBCYXRjaGluZyBzaG91bGQgYmUgaW1wbGVtZW50ZWQgYXQgdGhlIHJlbmRlcmVyIGxldmVsLCBub3QgaW5zaWRlXG4vLyB0aGUgcmVjb25jaWxlci5cbmZ1bmN0aW9uIHVuYmF0Y2hlZFVwZGF0ZXMoZm4sIGEpIHtcbiAgaWYgKGlzQmF0Y2hpbmdVcGRhdGVzICYmICFpc1VuYmF0Y2hpbmdVcGRhdGVzKSB7XG4gICAgaXNVbmJhdGNoaW5nVXBkYXRlcyA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmbihhKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaXNVbmJhdGNoaW5nVXBkYXRlcyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZm4oYSk7XG59XG5cbi8vIFRPRE86IEJhdGNoaW5nIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBhdCB0aGUgcmVuZGVyZXIgbGV2ZWwsIG5vdCB3aXRoaW5cbi8vIHRoZSByZWNvbmNpbGVyLlxuZnVuY3Rpb24gZmx1c2hTeW5jKGZuLCBhKSB7XG4gICEhaXNSZW5kZXJpbmcgPyBpbnZhcmlhbnQoZmFsc2UsICdmbHVzaFN5bmMgd2FzIGNhbGxlZCBmcm9tIGluc2lkZSBhIGxpZmVjeWNsZSBtZXRob2QuIEl0IGNhbm5vdCBiZSBjYWxsZWQgd2hlbiBSZWFjdCBpcyBhbHJlYWR5IHJlbmRlcmluZy4nKSA6IHZvaWQgMDtcbiAgdmFyIHByZXZpb3VzSXNCYXRjaGluZ1VwZGF0ZXMgPSBpc0JhdGNoaW5nVXBkYXRlcztcbiAgaXNCYXRjaGluZ1VwZGF0ZXMgPSB0cnVlO1xuICB0cnkge1xuICAgIHJldHVybiBzeW5jVXBkYXRlcyhmbiwgYSk7XG4gIH0gZmluYWxseSB7XG4gICAgaXNCYXRjaGluZ1VwZGF0ZXMgPSBwcmV2aW91c0lzQmF0Y2hpbmdVcGRhdGVzO1xuICAgIHBlcmZvcm1TeW5jV29yaygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGludGVyYWN0aXZlVXBkYXRlcyQxKGZuLCBhLCBiKSB7XG4gIC8vIElmIHRoZXJlIGFyZSBhbnkgcGVuZGluZyBpbnRlcmFjdGl2ZSB1cGRhdGVzLCBzeW5jaHJvbm91c2x5IGZsdXNoIHRoZW0uXG4gIC8vIFRoaXMgbmVlZHMgdG8gaGFwcGVuIGJlZm9yZSB3ZSByZWFkIGFueSBoYW5kbGVycywgYmVjYXVzZSB0aGUgZWZmZWN0IG9mXG4gIC8vIHRoZSBwcmV2aW91cyBldmVudCBtYXkgaW5mbHVlbmNlIHdoaWNoIGhhbmRsZXJzIGFyZSBjYWxsZWQgZHVyaW5nXG4gIC8vIHRoaXMgZXZlbnQuXG4gIGlmICghaXNCYXRjaGluZ1VwZGF0ZXMgJiYgIWlzUmVuZGVyaW5nICYmIGxvd2VzdFByaW9yaXR5UGVuZGluZ0ludGVyYWN0aXZlRXhwaXJhdGlvblRpbWUgIT09IE5vV29yaykge1xuICAgIC8vIFN5bmNocm9ub3VzbHkgZmx1c2ggcGVuZGluZyBpbnRlcmFjdGl2ZSB1cGRhdGVzLlxuICAgIHBlcmZvcm1Xb3JrKGxvd2VzdFByaW9yaXR5UGVuZGluZ0ludGVyYWN0aXZlRXhwaXJhdGlvblRpbWUsIGZhbHNlKTtcbiAgICBsb3dlc3RQcmlvcml0eVBlbmRpbmdJbnRlcmFjdGl2ZUV4cGlyYXRpb25UaW1lID0gTm9Xb3JrO1xuICB9XG4gIHZhciBwcmV2aW91c0lzQmF0Y2hpbmdVcGRhdGVzID0gaXNCYXRjaGluZ1VwZGF0ZXM7XG4gIGlzQmF0Y2hpbmdVcGRhdGVzID0gdHJ1ZTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gc2NoZWR1bGVyLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eShzY2hlZHVsZXIudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHksIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmbihhLCBiKTtcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpc0JhdGNoaW5nVXBkYXRlcyA9IHByZXZpb3VzSXNCYXRjaGluZ1VwZGF0ZXM7XG4gICAgaWYgKCFpc0JhdGNoaW5nVXBkYXRlcyAmJiAhaXNSZW5kZXJpbmcpIHtcbiAgICAgIHBlcmZvcm1TeW5jV29yaygpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmbHVzaEludGVyYWN0aXZlVXBkYXRlcyQxKCkge1xuICBpZiAoIWlzUmVuZGVyaW5nICYmIGxvd2VzdFByaW9yaXR5UGVuZGluZ0ludGVyYWN0aXZlRXhwaXJhdGlvblRpbWUgIT09IE5vV29yaykge1xuICAgIC8vIFN5bmNocm9ub3VzbHkgZmx1c2ggcGVuZGluZyBpbnRlcmFjdGl2ZSB1cGRhdGVzLlxuICAgIHBlcmZvcm1Xb3JrKGxvd2VzdFByaW9yaXR5UGVuZGluZ0ludGVyYWN0aXZlRXhwaXJhdGlvblRpbWUsIGZhbHNlKTtcbiAgICBsb3dlc3RQcmlvcml0eVBlbmRpbmdJbnRlcmFjdGl2ZUV4cGlyYXRpb25UaW1lID0gTm9Xb3JrO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZsdXNoQ29udHJvbGxlZChmbikge1xuICB2YXIgcHJldmlvdXNJc0JhdGNoaW5nVXBkYXRlcyA9IGlzQmF0Y2hpbmdVcGRhdGVzO1xuICBpc0JhdGNoaW5nVXBkYXRlcyA9IHRydWU7XG4gIHRyeSB7XG4gICAgc3luY1VwZGF0ZXMoZm4pO1xuICB9IGZpbmFsbHkge1xuICAgIGlzQmF0Y2hpbmdVcGRhdGVzID0gcHJldmlvdXNJc0JhdGNoaW5nVXBkYXRlcztcbiAgICBpZiAoIWlzQmF0Y2hpbmdVcGRhdGVzICYmICFpc1JlbmRlcmluZykge1xuICAgICAgcGVyZm9ybVN5bmNXb3JrKCk7XG4gICAgfVxuICB9XG59XG5cbi8vIDAgaXMgUFJPRCwgMSBpcyBERVYuXG4vLyBNaWdodCBhZGQgUFJPRklMRSBsYXRlci5cblxuXG52YXIgZGlkV2FybkFib3V0TmVzdGVkVXBkYXRlcyA9IHZvaWQgMDtcbnZhciBkaWRXYXJuQWJvdXRGaW5kTm9kZUluU3RyaWN0TW9kZSA9IHZvaWQgMDtcblxue1xuICBkaWRXYXJuQWJvdXROZXN0ZWRVcGRhdGVzID0gZmFsc2U7XG4gIGRpZFdhcm5BYm91dEZpbmROb2RlSW5TdHJpY3RNb2RlID0ge307XG59XG5cbmZ1bmN0aW9uIGdldENvbnRleHRGb3JTdWJ0cmVlKHBhcmVudENvbXBvbmVudCkge1xuICBpZiAoIXBhcmVudENvbXBvbmVudCkge1xuICAgIHJldHVybiBlbXB0eUNvbnRleHRPYmplY3Q7XG4gIH1cblxuICB2YXIgZmliZXIgPSBnZXQocGFyZW50Q29tcG9uZW50KTtcbiAgdmFyIHBhcmVudENvbnRleHQgPSBmaW5kQ3VycmVudFVubWFza2VkQ29udGV4dChmaWJlcik7XG5cbiAgaWYgKGZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICB2YXIgQ29tcG9uZW50ID0gZmliZXIudHlwZTtcbiAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgcmV0dXJuIHByb2Nlc3NDaGlsZENvbnRleHQoZmliZXIsIENvbXBvbmVudCwgcGFyZW50Q29udGV4dCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcmVudENvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlUm9vdFVwZGF0ZShjdXJyZW50JCQxLCBlbGVtZW50LCBleHBpcmF0aW9uVGltZSwgY2FsbGJhY2spIHtcbiAge1xuICAgIGlmIChwaGFzZSA9PT0gJ3JlbmRlcicgJiYgY3VycmVudCAhPT0gbnVsbCAmJiAhZGlkV2FybkFib3V0TmVzdGVkVXBkYXRlcykge1xuICAgICAgZGlkV2FybkFib3V0TmVzdGVkVXBkYXRlcyA9IHRydWU7XG4gICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdSZW5kZXIgbWV0aG9kcyBzaG91bGQgYmUgYSBwdXJlIGZ1bmN0aW9uIG9mIHByb3BzIGFuZCBzdGF0ZTsgJyArICd0cmlnZ2VyaW5nIG5lc3RlZCBjb21wb25lbnQgdXBkYXRlcyBmcm9tIHJlbmRlciBpcyBub3QgYWxsb3dlZC4gJyArICdJZiBuZWNlc3NhcnksIHRyaWdnZXIgbmVzdGVkIHVwZGF0ZXMgaW4gY29tcG9uZW50RGlkVXBkYXRlLlxcblxcbicgKyAnQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgJXMuJywgZ2V0Q29tcG9uZW50TmFtZShjdXJyZW50LnR5cGUpIHx8ICdVbmtub3duJyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShleHBpcmF0aW9uVGltZSk7XG4gIC8vIENhdXRpb246IFJlYWN0IERldlRvb2xzIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJvcGVydHlcbiAgLy8gYmVpbmcgY2FsbGVkIFwiZWxlbWVudFwiLlxuICB1cGRhdGUucGF5bG9hZCA9IHsgZWxlbWVudDogZWxlbWVudCB9O1xuXG4gIGNhbGxiYWNrID0gY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjYWxsYmFjaztcbiAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgISh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpID8gd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAncmVuZGVyKC4uLik6IEV4cGVjdGVkIHRoZSBsYXN0IG9wdGlvbmFsIGBjYWxsYmFja2AgYXJndW1lbnQgdG8gYmUgYSAnICsgJ2Z1bmN0aW9uLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy4nLCBjYWxsYmFjaykgOiB2b2lkIDA7XG4gICAgdXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gIH1cblxuICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gIGVucXVldWVVcGRhdGUoY3VycmVudCQkMSwgdXBkYXRlKTtcbiAgc2NoZWR1bGVXb3JrKGN1cnJlbnQkJDEsIGV4cGlyYXRpb25UaW1lKTtcblxuICByZXR1cm4gZXhwaXJhdGlvblRpbWU7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNvbnRhaW5lckF0RXhwaXJhdGlvblRpbWUoZWxlbWVudCwgY29udGFpbmVyLCBwYXJlbnRDb21wb25lbnQsIGV4cGlyYXRpb25UaW1lLCBjYWxsYmFjaykge1xuICAvLyBUT0RPOiBJZiB0aGlzIGlzIGEgbmVzdGVkIGNvbnRhaW5lciwgdGhpcyB3b24ndCBiZSB0aGUgcm9vdC5cbiAgdmFyIGN1cnJlbnQkJDEgPSBjb250YWluZXIuY3VycmVudDtcblxuICB7XG4gICAgaWYgKFJlYWN0RmliZXJJbnN0cnVtZW50YXRpb25fMS5kZWJ1Z1Rvb2wpIHtcbiAgICAgIGlmIChjdXJyZW50JCQxLmFsdGVybmF0ZSA9PT0gbnVsbCkge1xuICAgICAgICBSZWFjdEZpYmVySW5zdHJ1bWVudGF0aW9uXzEuZGVidWdUb29sLm9uTW91bnRDb250YWluZXIoY29udGFpbmVyKTtcbiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudCA9PT0gbnVsbCkge1xuICAgICAgICBSZWFjdEZpYmVySW5zdHJ1bWVudGF0aW9uXzEuZGVidWdUb29sLm9uVW5tb3VudENvbnRhaW5lcihjb250YWluZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgUmVhY3RGaWJlckluc3RydW1lbnRhdGlvbl8xLmRlYnVnVG9vbC5vblVwZGF0ZUNvbnRhaW5lcihjb250YWluZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBjb250ZXh0ID0gZ2V0Q29udGV4dEZvclN1YnRyZWUocGFyZW50Q29tcG9uZW50KTtcbiAgaWYgKGNvbnRhaW5lci5jb250ZXh0ID09PSBudWxsKSB7XG4gICAgY29udGFpbmVyLmNvbnRleHQgPSBjb250ZXh0O1xuICB9IGVsc2Uge1xuICAgIGNvbnRhaW5lci5wZW5kaW5nQ29udGV4dCA9IGNvbnRleHQ7XG4gIH1cblxuICByZXR1cm4gc2NoZWR1bGVSb290VXBkYXRlKGN1cnJlbnQkJDEsIGVsZW1lbnQsIGV4cGlyYXRpb25UaW1lLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIGZpbmRIb3N0SW5zdGFuY2UoY29tcG9uZW50KSB7XG4gIHZhciBmaWJlciA9IGdldChjb21wb25lbnQpO1xuICBpZiAoZmliZXIgPT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2YgY29tcG9uZW50LnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaW52YXJpYW50KGZhbHNlLCAnVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnZhcmlhbnQoZmFsc2UsICdBcmd1bWVudCBhcHBlYXJzIHRvIG5vdCBiZSBhIFJlYWN0Q29tcG9uZW50LiBLZXlzOiAlcycsIE9iamVjdC5rZXlzKGNvbXBvbmVudCkpO1xuICAgIH1cbiAgfVxuICB2YXIgaG9zdEZpYmVyID0gZmluZEN1cnJlbnRIb3N0RmliZXIoZmliZXIpO1xuICBpZiAoaG9zdEZpYmVyID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIGhvc3RGaWJlci5zdGF0ZU5vZGU7XG59XG5cbmZ1bmN0aW9uIGZpbmRIb3N0SW5zdGFuY2VXaXRoV2FybmluZyhjb21wb25lbnQsIG1ldGhvZE5hbWUpIHtcbiAge1xuICAgIHZhciBmaWJlciA9IGdldChjb21wb25lbnQpO1xuICAgIGlmIChmaWJlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIGNvbXBvbmVudC5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaW52YXJpYW50KGZhbHNlLCAnVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW52YXJpYW50KGZhbHNlLCAnQXJndW1lbnQgYXBwZWFycyB0byBub3QgYmUgYSBSZWFjdENvbXBvbmVudC4gS2V5czogJXMnLCBPYmplY3Qua2V5cyhjb21wb25lbnQpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIGhvc3RGaWJlciA9IGZpbmRDdXJyZW50SG9zdEZpYmVyKGZpYmVyKTtcbiAgICBpZiAoaG9zdEZpYmVyID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGhvc3RGaWJlci5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnO1xuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRGaW5kTm9kZUluU3RyaWN0TW9kZVtjb21wb25lbnROYW1lXSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRGaW5kTm9kZUluU3RyaWN0TW9kZVtjb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICAgIGlmIChmaWJlci5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJyVzIGlzIGRlcHJlY2F0ZWQgaW4gU3RyaWN0TW9kZS4gJyArICclcyB3YXMgcGFzc2VkIGFuIGluc3RhbmNlIG9mICVzIHdoaWNoIGlzIGluc2lkZSBTdHJpY3RNb2RlLiAnICsgJ0luc3RlYWQsIGFkZCBhIHJlZiBkaXJlY3RseSB0byB0aGUgZWxlbWVudCB5b3Ugd2FudCB0byByZWZlcmVuY2UuJyArICdcXG4lcycgKyAnXFxuXFxuTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOicgKyAnXFxuaHR0cHM6Ly9mYi5tZS9yZWFjdC1zdHJpY3QtbW9kZS1maW5kLW5vZGUnLCBtZXRob2ROYW1lLCBtZXRob2ROYW1lLCBjb21wb25lbnROYW1lLCBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2QoaG9zdEZpYmVyKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnJXMgaXMgZGVwcmVjYXRlZCBpbiBTdHJpY3RNb2RlLiAnICsgJyVzIHdhcyBwYXNzZWQgYW4gaW5zdGFuY2Ugb2YgJXMgd2hpY2ggcmVuZGVycyBTdHJpY3RNb2RlIGNoaWxkcmVuLiAnICsgJ0luc3RlYWQsIGFkZCBhIHJlZiBkaXJlY3RseSB0byB0aGUgZWxlbWVudCB5b3Ugd2FudCB0byByZWZlcmVuY2UuJyArICdcXG4lcycgKyAnXFxuXFxuTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOicgKyAnXFxuaHR0cHM6Ly9mYi5tZS9yZWFjdC1zdHJpY3QtbW9kZS1maW5kLW5vZGUnLCBtZXRob2ROYW1lLCBtZXRob2ROYW1lLCBjb21wb25lbnROYW1lLCBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2QoaG9zdEZpYmVyKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGhvc3RGaWJlci5zdGF0ZU5vZGU7XG4gIH1cbiAgcmV0dXJuIGZpbmRIb3N0SW5zdGFuY2UoY29tcG9uZW50KTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29udGFpbmVyKGNvbnRhaW5lckluZm8sIGlzQ29uY3VycmVudCwgaHlkcmF0ZSkge1xuICByZXR1cm4gY3JlYXRlRmliZXJSb290KGNvbnRhaW5lckluZm8sIGlzQ29uY3VycmVudCwgaHlkcmF0ZSk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNvbnRhaW5lcihlbGVtZW50LCBjb250YWluZXIsIHBhcmVudENvbXBvbmVudCwgY2FsbGJhY2spIHtcbiAgdmFyIGN1cnJlbnQkJDEgPSBjb250YWluZXIuY3VycmVudDtcbiAgdmFyIGN1cnJlbnRUaW1lID0gcmVxdWVzdEN1cnJlbnRUaW1lKCk7XG4gIHZhciBleHBpcmF0aW9uVGltZSA9IGNvbXB1dGVFeHBpcmF0aW9uRm9yRmliZXIoY3VycmVudFRpbWUsIGN1cnJlbnQkJDEpO1xuICByZXR1cm4gdXBkYXRlQ29udGFpbmVyQXRFeHBpcmF0aW9uVGltZShlbGVtZW50LCBjb250YWluZXIsIHBhcmVudENvbXBvbmVudCwgZXhwaXJhdGlvblRpbWUsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gZ2V0UHVibGljUm9vdEluc3RhbmNlKGNvbnRhaW5lcikge1xuICB2YXIgY29udGFpbmVyRmliZXIgPSBjb250YWluZXIuY3VycmVudDtcbiAgaWYgKCFjb250YWluZXJGaWJlci5jaGlsZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHN3aXRjaCAoY29udGFpbmVyRmliZXIuY2hpbGQudGFnKSB7XG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgcmV0dXJuIGdldFB1YmxpY0luc3RhbmNlKGNvbnRhaW5lckZpYmVyLmNoaWxkLnN0YXRlTm9kZSk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBjb250YWluZXJGaWJlci5jaGlsZC5zdGF0ZU5vZGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZVdpdGhOb1BvcnRhbHMoZmliZXIpIHtcbiAgdmFyIGhvc3RGaWJlciA9IGZpbmRDdXJyZW50SG9zdEZpYmVyV2l0aE5vUG9ydGFscyhmaWJlcik7XG4gIGlmIChob3N0RmliZXIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gaG9zdEZpYmVyLnN0YXRlTm9kZTtcbn1cblxudmFyIG92ZXJyaWRlUHJvcHMgPSBudWxsO1xuXG57XG4gIHZhciBjb3B5V2l0aFNldEltcGwgPSBmdW5jdGlvbiAob2JqLCBwYXRoLCBpZHgsIHZhbHVlKSB7XG4gICAgaWYgKGlkeCA+PSBwYXRoLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICB2YXIga2V5ID0gcGF0aFtpZHhdO1xuICAgIHZhciB1cGRhdGVkID0gQXJyYXkuaXNBcnJheShvYmopID8gb2JqLnNsaWNlKCkgOiBfYXNzaWduKHt9LCBvYmopO1xuICAgIC8vICRGbG93Rml4TWUgbnVtYmVyIG9yIHN0cmluZyBpcyBmaW5lIGhlcmVcbiAgICB1cGRhdGVkW2tleV0gPSBjb3B5V2l0aFNldEltcGwob2JqW2tleV0sIHBhdGgsIGlkeCArIDEsIHZhbHVlKTtcbiAgICByZXR1cm4gdXBkYXRlZDtcbiAgfTtcblxuICB2YXIgY29weVdpdGhTZXQgPSBmdW5jdGlvbiAob2JqLCBwYXRoLCB2YWx1ZSkge1xuICAgIHJldHVybiBjb3B5V2l0aFNldEltcGwob2JqLCBwYXRoLCAwLCB2YWx1ZSk7XG4gIH07XG5cbiAgLy8gU3VwcG9ydCBEZXZUb29scyBwcm9wcyBmb3IgZnVuY3Rpb24gY29tcG9uZW50cywgZm9yd2FyZFJlZiwgbWVtbywgaG9zdCBjb21wb25lbnRzLCBldGMuXG4gIG92ZXJyaWRlUHJvcHMgPSBmdW5jdGlvbiAoZmliZXIsIHBhdGgsIHZhbHVlKSB7XG4gICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICAgIGZpYmVyLnBlbmRpbmdQcm9wcyA9IGNvcHlXaXRoU2V0KGZpYmVyLm1lbW9pemVkUHJvcHMsIHBhdGgsIHZhbHVlKTtcbiAgICBpZiAoZmliZXIuYWx0ZXJuYXRlKSB7XG4gICAgICBmaWJlci5hbHRlcm5hdGUucGVuZGluZ1Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgIH1cbiAgICBzY2hlZHVsZVdvcmsoZmliZXIsIFN5bmMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBpbmplY3RJbnRvRGV2VG9vbHMoZGV2VG9vbHNDb25maWcpIHtcbiAgdmFyIGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlID0gZGV2VG9vbHNDb25maWcuZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U7XG4gIHZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcjtcblxuXG4gIHJldHVybiBpbmplY3RJbnRlcm5hbHMoX2Fzc2lnbih7fSwgZGV2VG9vbHNDb25maWcsIHtcbiAgICBvdmVycmlkZVByb3BzOiBvdmVycmlkZVByb3BzLFxuICAgIGN1cnJlbnREaXNwYXRjaGVyUmVmOiBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLFxuICAgIGZpbmRIb3N0SW5zdGFuY2VCeUZpYmVyOiBmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgIHZhciBob3N0RmliZXIgPSBmaW5kQ3VycmVudEhvc3RGaWJlcihmaWJlcik7XG4gICAgICBpZiAoaG9zdEZpYmVyID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhvc3RGaWJlci5zdGF0ZU5vZGU7XG4gICAgfSxcbiAgICBmaW5kRmliZXJCeUhvc3RJbnN0YW5jZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICBpZiAoIWZpbmRGaWJlckJ5SG9zdEluc3RhbmNlKSB7XG4gICAgICAgIC8vIE1pZ2h0IG5vdCBiZSBpbXBsZW1lbnRlZCBieSB0aGUgcmVuZGVyZXIuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlKGluc3RhbmNlKTtcbiAgICB9XG4gIH0pKTtcbn1cblxuLy8gVGhpcyBmaWxlIGludGVudGlvbmFsbHkgZG9lcyAqbm90KiBoYXZlIHRoZSBGbG93IGFubm90YXRpb24uXG4vLyBEb24ndCBhZGQgaXQuIFNlZSBgLi9pbmxpbmUtdHlwZWQuanNgIGZvciBhbiBleHBsYW5hdGlvbi5cblxuZnVuY3Rpb24gY3JlYXRlUG9ydGFsJDEoY2hpbGRyZW4sIGNvbnRhaW5lckluZm8sXG4vLyBUT0RPOiBmaWd1cmUgb3V0IHRoZSBBUEkgZm9yIGNyb3NzLXJlbmRlcmVyIGltcGxlbWVudGF0aW9uLlxuaW1wbGVtZW50YXRpb24pIHtcbiAgdmFyIGtleSA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogbnVsbDtcblxuICByZXR1cm4ge1xuICAgIC8vIFRoaXMgdGFnIGFsbG93IHVzIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgYXMgYSBSZWFjdCBQb3J0YWxcbiAgICAkJHR5cGVvZjogUkVBQ1RfUE9SVEFMX1RZUEUsXG4gICAga2V5OiBrZXkgPT0gbnVsbCA/IG51bGwgOiAnJyArIGtleSxcbiAgICBjaGlsZHJlbjogY2hpbGRyZW4sXG4gICAgY29udGFpbmVySW5mbzogY29udGFpbmVySW5mbyxcbiAgICBpbXBsZW1lbnRhdGlvbjogaW1wbGVtZW50YXRpb25cbiAgfTtcbn1cblxuLy8gVE9ETzogdGhpcyBpcyBzcGVjaWFsIGJlY2F1c2UgaXQgZ2V0cyBpbXBvcnRlZCBkdXJpbmcgYnVpbGQuXG5cbnZhciBSZWFjdFZlcnNpb24gPSAnMTYuOC42JztcblxuLy8gVE9ETzogVGhpcyB0eXBlIGlzIHNoYXJlZCBiZXR3ZWVuIHRoZSByZWNvbmNpbGVyIGFuZCBSZWFjdERPTSwgYnV0IHdpbGxcbi8vIGV2ZW50dWFsbHkgYmUgbGlmdGVkIG91dCB0byB0aGUgcmVuZGVyZXIuXG5cbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyO1xuXG52YXIgdG9wTGV2ZWxVcGRhdGVXYXJuaW5ncyA9IHZvaWQgMDtcbnZhciB3YXJuT25JbnZhbGlkQ2FsbGJhY2sgPSB2b2lkIDA7XG52YXIgZGlkV2FybkFib3V0VW5zdGFibGVDcmVhdGVQb3J0YWwgPSBmYWxzZTtcblxue1xuICBpZiAodHlwZW9mIE1hcCAhPT0gJ2Z1bmN0aW9uJyB8fFxuICAvLyAkRmxvd0lzc3VlIEZsb3cgaW5jb3JyZWN0bHkgdGhpbmtzIE1hcCBoYXMgbm8gcHJvdG90eXBlXG4gIE1hcC5wcm90b3R5cGUgPT0gbnVsbCB8fCB0eXBlb2YgTWFwLnByb3RvdHlwZS5mb3JFYWNoICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBTZXQgIT09ICdmdW5jdGlvbicgfHxcbiAgLy8gJEZsb3dJc3N1ZSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBTZXQgaGFzIG5vIHByb3RvdHlwZVxuICBTZXQucHJvdG90eXBlID09IG51bGwgfHwgdHlwZW9mIFNldC5wcm90b3R5cGUuY2xlYXIgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIFNldC5wcm90b3R5cGUuZm9yRWFjaCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ1JlYWN0IGRlcGVuZHMgb24gTWFwIGFuZCBTZXQgYnVpbHQtaW4gdHlwZXMuIE1ha2Ugc3VyZSB0aGF0IHlvdSBsb2FkIGEgJyArICdwb2x5ZmlsbCBpbiBvbGRlciBicm93c2Vycy4gaHR0cHM6Ly9mYi5tZS9yZWFjdC1wb2x5ZmlsbHMnKTtcbiAgfVxuXG4gIHRvcExldmVsVXBkYXRlV2FybmluZ3MgPSBmdW5jdGlvbiAoY29udGFpbmVyKSB7XG4gICAgaWYgKGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyICYmIGNvbnRhaW5lci5ub2RlVHlwZSAhPT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgICB2YXIgaG9zdEluc3RhbmNlID0gZmluZEhvc3RJbnN0YW5jZVdpdGhOb1BvcnRhbHMoY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIuX2ludGVybmFsUm9vdC5jdXJyZW50KTtcbiAgICAgIGlmIChob3N0SW5zdGFuY2UpIHtcbiAgICAgICAgIShob3N0SW5zdGFuY2UucGFyZW50Tm9kZSA9PT0gY29udGFpbmVyKSA/IHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ3JlbmRlciguLi4pOiBJdCBsb29rcyBsaWtlIHRoZSBSZWFjdC1yZW5kZXJlZCBjb250ZW50IG9mIHRoaXMgJyArICdjb250YWluZXIgd2FzIHJlbW92ZWQgd2l0aG91dCB1c2luZyBSZWFjdC4gVGhpcyBpcyBub3QgJyArICdzdXBwb3J0ZWQgYW5kIHdpbGwgY2F1c2UgZXJyb3JzLiBJbnN0ZWFkLCBjYWxsICcgKyAnUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZSB0byBlbXB0eSBhIGNvbnRhaW5lci4nKSA6IHZvaWQgMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaXNSb290UmVuZGVyZWRCeVNvbWVSZWFjdCA9ICEhY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXI7XG4gICAgdmFyIHJvb3RFbCA9IGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpO1xuICAgIHZhciBoYXNOb25Sb290UmVhY3RDaGlsZCA9ICEhKHJvb3RFbCAmJiBnZXRJbnN0YW5jZUZyb21Ob2RlJDEocm9vdEVsKSk7XG5cbiAgICAhKCFoYXNOb25Sb290UmVhY3RDaGlsZCB8fCBpc1Jvb3RSZW5kZXJlZEJ5U29tZVJlYWN0KSA/IHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ3JlbmRlciguLi4pOiBSZXBsYWNpbmcgUmVhY3QtcmVuZGVyZWQgY2hpbGRyZW4gd2l0aCBhIG5ldyByb290ICcgKyAnY29tcG9uZW50LiBJZiB5b3UgaW50ZW5kZWQgdG8gdXBkYXRlIHRoZSBjaGlsZHJlbiBvZiB0aGlzIG5vZGUsICcgKyAneW91IHNob3VsZCBpbnN0ZWFkIGhhdmUgdGhlIGV4aXN0aW5nIGNoaWxkcmVuIHVwZGF0ZSB0aGVpciBzdGF0ZSAnICsgJ2FuZCByZW5kZXIgdGhlIG5ldyBjb21wb25lbnRzIGluc3RlYWQgb2YgY2FsbGluZyBSZWFjdERPTS5yZW5kZXIuJykgOiB2b2lkIDA7XG5cbiAgICAhKGNvbnRhaW5lci5ub2RlVHlwZSAhPT0gRUxFTUVOVF9OT0RFIHx8ICFjb250YWluZXIudGFnTmFtZSB8fCBjb250YWluZXIudGFnTmFtZS50b1VwcGVyQ2FzZSgpICE9PSAnQk9EWScpID8gd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAncmVuZGVyKCk6IFJlbmRlcmluZyBjb21wb25lbnRzIGRpcmVjdGx5IGludG8gZG9jdW1lbnQuYm9keSBpcyAnICsgJ2Rpc2NvdXJhZ2VkLCBzaW5jZSBpdHMgY2hpbGRyZW4gYXJlIG9mdGVuIG1hbmlwdWxhdGVkIGJ5IHRoaXJkLXBhcnR5ICcgKyAnc2NyaXB0cyBhbmQgYnJvd3NlciBleHRlbnNpb25zLiBUaGlzIG1heSBsZWFkIHRvIHN1YnRsZSAnICsgJ3JlY29uY2lsaWF0aW9uIGlzc3Vlcy4gVHJ5IHJlbmRlcmluZyBpbnRvIGEgY29udGFpbmVyIGVsZW1lbnQgY3JlYXRlZCAnICsgJ2ZvciB5b3VyIGFwcC4nKSA6IHZvaWQgMDtcbiAgfTtcblxuICB3YXJuT25JbnZhbGlkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAgICAhKGNhbGxiYWNrID09PSBudWxsIHx8IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykgPyB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICclcyguLi4pOiBFeHBlY3RlZCB0aGUgbGFzdCBvcHRpb25hbCBgY2FsbGJhY2tgIGFyZ3VtZW50IHRvIGJlIGEgJyArICdmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogJXMuJywgY2FsbGVyTmFtZSwgY2FsbGJhY2spIDogdm9pZCAwO1xuICB9O1xufVxuXG5zZXRSZXN0b3JlSW1wbGVtZW50YXRpb24ocmVzdG9yZUNvbnRyb2xsZWRTdGF0ZSQxKTtcblxuZnVuY3Rpb24gUmVhY3RCYXRjaChyb290KSB7XG4gIHZhciBleHBpcmF0aW9uVGltZSA9IGNvbXB1dGVVbmlxdWVBc3luY0V4cGlyYXRpb24oKTtcbiAgdGhpcy5fZXhwaXJhdGlvblRpbWUgPSBleHBpcmF0aW9uVGltZTtcbiAgdGhpcy5fcm9vdCA9IHJvb3Q7XG4gIHRoaXMuX25leHQgPSBudWxsO1xuICB0aGlzLl9jYWxsYmFja3MgPSBudWxsO1xuICB0aGlzLl9kaWRDb21wbGV0ZSA9IGZhbHNlO1xuICB0aGlzLl9oYXNDaGlsZHJlbiA9IGZhbHNlO1xuICB0aGlzLl9jaGlsZHJlbiA9IG51bGw7XG4gIHRoaXMuX2RlZmVyID0gdHJ1ZTtcbn1cblJlYWN0QmF0Y2gucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChjaGlsZHJlbikge1xuICAhdGhpcy5fZGVmZXIgPyBpbnZhcmlhbnQoZmFsc2UsICdiYXRjaC5yZW5kZXI6IENhbm5vdCByZW5kZXIgYSBiYXRjaCB0aGF0IGFscmVhZHkgY29tbWl0dGVkLicpIDogdm9pZCAwO1xuICB0aGlzLl9oYXNDaGlsZHJlbiA9IHRydWU7XG4gIHRoaXMuX2NoaWxkcmVuID0gY2hpbGRyZW47XG4gIHZhciBpbnRlcm5hbFJvb3QgPSB0aGlzLl9yb290Ll9pbnRlcm5hbFJvb3Q7XG4gIHZhciBleHBpcmF0aW9uVGltZSA9IHRoaXMuX2V4cGlyYXRpb25UaW1lO1xuICB2YXIgd29yayA9IG5ldyBSZWFjdFdvcmsoKTtcbiAgdXBkYXRlQ29udGFpbmVyQXRFeHBpcmF0aW9uVGltZShjaGlsZHJlbiwgaW50ZXJuYWxSb290LCBudWxsLCBleHBpcmF0aW9uVGltZSwgd29yay5fb25Db21taXQpO1xuICByZXR1cm4gd29yaztcbn07XG5SZWFjdEJhdGNoLnByb3RvdHlwZS50aGVuID0gZnVuY3Rpb24gKG9uQ29tcGxldGUpIHtcbiAgaWYgKHRoaXMuX2RpZENvbXBsZXRlKSB7XG4gICAgb25Db21wbGV0ZSgpO1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzO1xuICBpZiAoY2FsbGJhY2tzID09PSBudWxsKSB7XG4gICAgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzID0gW107XG4gIH1cbiAgY2FsbGJhY2tzLnB1c2gob25Db21wbGV0ZSk7XG59O1xuUmVhY3RCYXRjaC5wcm90b3R5cGUuY29tbWl0ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaW50ZXJuYWxSb290ID0gdGhpcy5fcm9vdC5faW50ZXJuYWxSb290O1xuICB2YXIgZmlyc3RCYXRjaCA9IGludGVybmFsUm9vdC5maXJzdEJhdGNoO1xuICAhKHRoaXMuX2RlZmVyICYmIGZpcnN0QmF0Y2ggIT09IG51bGwpID8gaW52YXJpYW50KGZhbHNlLCAnYmF0Y2guY29tbWl0OiBDYW5ub3QgY29tbWl0IGEgYmF0Y2ggbXVsdGlwbGUgdGltZXMuJykgOiB2b2lkIDA7XG5cbiAgaWYgKCF0aGlzLl9oYXNDaGlsZHJlbikge1xuICAgIC8vIFRoaXMgYmF0Y2ggaXMgZW1wdHkuIFJldHVybi5cbiAgICB0aGlzLl9uZXh0ID0gbnVsbDtcbiAgICB0aGlzLl9kZWZlciA9IGZhbHNlO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBleHBpcmF0aW9uVGltZSA9IHRoaXMuX2V4cGlyYXRpb25UaW1lO1xuXG4gIC8vIEVuc3VyZSB0aGlzIGlzIHRoZSBmaXJzdCBiYXRjaCBpbiB0aGUgbGlzdC5cbiAgaWYgKGZpcnN0QmF0Y2ggIT09IHRoaXMpIHtcbiAgICAvLyBUaGlzIGJhdGNoIGlzIG5vdCB0aGUgZWFybGllc3QgYmF0Y2guIFdlIG5lZWQgdG8gbW92ZSBpdCB0byB0aGUgZnJvbnQuXG4gICAgLy8gVXBkYXRlIGl0cyBleHBpcmF0aW9uIHRpbWUgdG8gYmUgdGhlIGV4cGlyYXRpb24gdGltZSBvZiB0aGUgZWFybGllc3RcbiAgICAvLyBiYXRjaCwgc28gdGhhdCB3ZSBjYW4gZmx1c2ggaXQgd2l0aG91dCBmbHVzaGluZyB0aGUgb3RoZXIgYmF0Y2hlcy5cbiAgICBpZiAodGhpcy5faGFzQ2hpbGRyZW4pIHtcbiAgICAgIGV4cGlyYXRpb25UaW1lID0gdGhpcy5fZXhwaXJhdGlvblRpbWUgPSBmaXJzdEJhdGNoLl9leHBpcmF0aW9uVGltZTtcbiAgICAgIC8vIFJlbmRlcmluZyB0aGlzIGJhdGNoIGFnYWluIGVuc3VyZXMgaXRzIGNoaWxkcmVuIHdpbGwgYmUgdGhlIGZpbmFsIHN0YXRlXG4gICAgICAvLyB3aGVuIHdlIGZsdXNoICh1cGRhdGVzIGFyZSBwcm9jZXNzZWQgaW4gaW5zZXJ0aW9uIG9yZGVyOiBsYXN0XG4gICAgICAvLyB1cGRhdGUgd2lucykuXG4gICAgICAvLyBUT0RPOiBUaGlzIGZvcmNlcyBhIHJlc3RhcnQuIFNob3VsZCB3ZSBwcmludCBhIHdhcm5pbmc/XG4gICAgICB0aGlzLnJlbmRlcih0aGlzLl9jaGlsZHJlbik7XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIHRoZSBiYXRjaCBmcm9tIHRoZSBsaXN0LlxuICAgIHZhciBwcmV2aW91cyA9IG51bGw7XG4gICAgdmFyIGJhdGNoID0gZmlyc3RCYXRjaDtcbiAgICB3aGlsZSAoYmF0Y2ggIT09IHRoaXMpIHtcbiAgICAgIHByZXZpb3VzID0gYmF0Y2g7XG4gICAgICBiYXRjaCA9IGJhdGNoLl9uZXh0O1xuICAgIH1cbiAgICAhKHByZXZpb3VzICE9PSBudWxsKSA/IGludmFyaWFudChmYWxzZSwgJ2JhdGNoLmNvbW1pdDogQ2Fubm90IGNvbW1pdCBhIGJhdGNoIG11bHRpcGxlIHRpbWVzLicpIDogdm9pZCAwO1xuICAgIHByZXZpb3VzLl9uZXh0ID0gYmF0Y2guX25leHQ7XG5cbiAgICAvLyBBZGQgaXQgdG8gdGhlIGZyb250LlxuICAgIHRoaXMuX25leHQgPSBmaXJzdEJhdGNoO1xuICAgIGZpcnN0QmF0Y2ggPSBpbnRlcm5hbFJvb3QuZmlyc3RCYXRjaCA9IHRoaXM7XG4gIH1cblxuICAvLyBTeW5jaHJvbm91c2x5IGZsdXNoIGFsbCB0aGUgd29yayB1cCB0byB0aGlzIGJhdGNoJ3MgZXhwaXJhdGlvbiB0aW1lLlxuICB0aGlzLl9kZWZlciA9IGZhbHNlO1xuICBmbHVzaFJvb3QoaW50ZXJuYWxSb290LCBleHBpcmF0aW9uVGltZSk7XG5cbiAgLy8gUG9wIHRoZSBiYXRjaCBmcm9tIHRoZSBsaXN0LlxuICB2YXIgbmV4dCA9IHRoaXMuX25leHQ7XG4gIHRoaXMuX25leHQgPSBudWxsO1xuICBmaXJzdEJhdGNoID0gaW50ZXJuYWxSb290LmZpcnN0QmF0Y2ggPSBuZXh0O1xuXG4gIC8vIEFwcGVuZCB0aGUgbmV4dCBlYXJsaWVzdCBiYXRjaCdzIGNoaWxkcmVuIHRvIHRoZSB1cGRhdGUgcXVldWUuXG4gIGlmIChmaXJzdEJhdGNoICE9PSBudWxsICYmIGZpcnN0QmF0Y2guX2hhc0NoaWxkcmVuKSB7XG4gICAgZmlyc3RCYXRjaC5yZW5kZXIoZmlyc3RCYXRjaC5fY2hpbGRyZW4pO1xuICB9XG59O1xuUmVhY3RCYXRjaC5wcm90b3R5cGUuX29uQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLl9kaWRDb21wbGV0ZSkge1xuICAgIHJldHVybjtcbiAgfVxuICB0aGlzLl9kaWRDb21wbGV0ZSA9IHRydWU7XG4gIHZhciBjYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3M7XG4gIGlmIChjYWxsYmFja3MgPT09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gVE9ETzogRXJyb3IgaGFuZGxpbmcuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIF9jYWxsYmFjayA9IGNhbGxiYWNrc1tpXTtcbiAgICBfY2FsbGJhY2soKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gUmVhY3RXb3JrKCkge1xuICB0aGlzLl9jYWxsYmFja3MgPSBudWxsO1xuICB0aGlzLl9kaWRDb21taXQgPSBmYWxzZTtcbiAgLy8gVE9ETzogQXZvaWQgbmVlZCB0byBiaW5kIGJ5IHJlcGxhY2luZyBjYWxsYmFja3MgaW4gdGhlIHVwZGF0ZSBxdWV1ZSB3aXRoXG4gIC8vIGxpc3Qgb2YgV29yayBvYmplY3RzLlxuICB0aGlzLl9vbkNvbW1pdCA9IHRoaXMuX29uQ29tbWl0LmJpbmQodGhpcyk7XG59XG5SZWFjdFdvcmsucHJvdG90eXBlLnRoZW4gPSBmdW5jdGlvbiAob25Db21taXQpIHtcbiAgaWYgKHRoaXMuX2RpZENvbW1pdCkge1xuICAgIG9uQ29tbWl0KCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBjYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3M7XG4gIGlmIChjYWxsYmFja3MgPT09IG51bGwpIHtcbiAgICBjYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3MgPSBbXTtcbiAgfVxuICBjYWxsYmFja3MucHVzaChvbkNvbW1pdCk7XG59O1xuUmVhY3RXb3JrLnByb3RvdHlwZS5fb25Db21taXQgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLl9kaWRDb21taXQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5fZGlkQ29tbWl0ID0gdHJ1ZTtcbiAgdmFyIGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcztcbiAgaWYgKGNhbGxiYWNrcyA9PT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuICAvLyBUT0RPOiBFcnJvciBoYW5kbGluZy5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgX2NhbGxiYWNrMiA9IGNhbGxiYWNrc1tpXTtcbiAgICAhKHR5cGVvZiBfY2FsbGJhY2syID09PSAnZnVuY3Rpb24nKSA/IGludmFyaWFudChmYWxzZSwgJ0ludmFsaWQgYXJndW1lbnQgcGFzc2VkIGFzIGNhbGxiYWNrLiBFeHBlY3RlZCBhIGZ1bmN0aW9uLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcycsIF9jYWxsYmFjazIpIDogdm9pZCAwO1xuICAgIF9jYWxsYmFjazIoKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gUmVhY3RSb290KGNvbnRhaW5lciwgaXNDb25jdXJyZW50LCBoeWRyYXRlKSB7XG4gIHZhciByb290ID0gY3JlYXRlQ29udGFpbmVyKGNvbnRhaW5lciwgaXNDb25jdXJyZW50LCBoeWRyYXRlKTtcbiAgdGhpcy5faW50ZXJuYWxSb290ID0gcm9vdDtcbn1cblJlYWN0Um9vdC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGNoaWxkcmVuLCBjYWxsYmFjaykge1xuICB2YXIgcm9vdCA9IHRoaXMuX2ludGVybmFsUm9vdDtcbiAgdmFyIHdvcmsgPSBuZXcgUmVhY3RXb3JrKCk7XG4gIGNhbGxiYWNrID0gY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjYWxsYmFjaztcbiAge1xuICAgIHdhcm5PbkludmFsaWRDYWxsYmFjayhjYWxsYmFjaywgJ3JlbmRlcicpO1xuICB9XG4gIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgIHdvcmsudGhlbihjYWxsYmFjayk7XG4gIH1cbiAgdXBkYXRlQ29udGFpbmVyKGNoaWxkcmVuLCByb290LCBudWxsLCB3b3JrLl9vbkNvbW1pdCk7XG4gIHJldHVybiB3b3JrO1xufTtcblJlYWN0Um9vdC5wcm90b3R5cGUudW5tb3VudCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICB2YXIgcm9vdCA9IHRoaXMuX2ludGVybmFsUm9vdDtcbiAgdmFyIHdvcmsgPSBuZXcgUmVhY3RXb3JrKCk7XG4gIGNhbGxiYWNrID0gY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjYWxsYmFjaztcbiAge1xuICAgIHdhcm5PbkludmFsaWRDYWxsYmFjayhjYWxsYmFjaywgJ3JlbmRlcicpO1xuICB9XG4gIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgIHdvcmsudGhlbihjYWxsYmFjayk7XG4gIH1cbiAgdXBkYXRlQ29udGFpbmVyKG51bGwsIHJvb3QsIG51bGwsIHdvcmsuX29uQ29tbWl0KTtcbiAgcmV0dXJuIHdvcms7XG59O1xuUmVhY3RSb290LnByb3RvdHlwZS5sZWdhY3lfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIgPSBmdW5jdGlvbiAocGFyZW50Q29tcG9uZW50LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcbiAgdmFyIHJvb3QgPSB0aGlzLl9pbnRlcm5hbFJvb3Q7XG4gIHZhciB3b3JrID0gbmV3IFJlYWN0V29yaygpO1xuICBjYWxsYmFjayA9IGNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogY2FsbGJhY2s7XG4gIHtcbiAgICB3YXJuT25JbnZhbGlkQ2FsbGJhY2soY2FsbGJhY2ssICdyZW5kZXInKTtcbiAgfVxuICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICB3b3JrLnRoZW4oY2FsbGJhY2spO1xuICB9XG4gIHVwZGF0ZUNvbnRhaW5lcihjaGlsZHJlbiwgcm9vdCwgcGFyZW50Q29tcG9uZW50LCB3b3JrLl9vbkNvbW1pdCk7XG4gIHJldHVybiB3b3JrO1xufTtcblJlYWN0Um9vdC5wcm90b3R5cGUuY3JlYXRlQmF0Y2ggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBiYXRjaCA9IG5ldyBSZWFjdEJhdGNoKHRoaXMpO1xuICB2YXIgZXhwaXJhdGlvblRpbWUgPSBiYXRjaC5fZXhwaXJhdGlvblRpbWU7XG5cbiAgdmFyIGludGVybmFsUm9vdCA9IHRoaXMuX2ludGVybmFsUm9vdDtcbiAgdmFyIGZpcnN0QmF0Y2ggPSBpbnRlcm5hbFJvb3QuZmlyc3RCYXRjaDtcbiAgaWYgKGZpcnN0QmF0Y2ggPT09IG51bGwpIHtcbiAgICBpbnRlcm5hbFJvb3QuZmlyc3RCYXRjaCA9IGJhdGNoO1xuICAgIGJhdGNoLl9uZXh0ID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICAvLyBJbnNlcnQgc29ydGVkIGJ5IGV4cGlyYXRpb24gdGltZSB0aGVuIGluc2VydGlvbiBvcmRlclxuICAgIHZhciBpbnNlcnRBZnRlciA9IG51bGw7XG4gICAgdmFyIGluc2VydEJlZm9yZSA9IGZpcnN0QmF0Y2g7XG4gICAgd2hpbGUgKGluc2VydEJlZm9yZSAhPT0gbnVsbCAmJiBpbnNlcnRCZWZvcmUuX2V4cGlyYXRpb25UaW1lID49IGV4cGlyYXRpb25UaW1lKSB7XG4gICAgICBpbnNlcnRBZnRlciA9IGluc2VydEJlZm9yZTtcbiAgICAgIGluc2VydEJlZm9yZSA9IGluc2VydEJlZm9yZS5fbmV4dDtcbiAgICB9XG4gICAgYmF0Y2guX25leHQgPSBpbnNlcnRCZWZvcmU7XG4gICAgaWYgKGluc2VydEFmdGVyICE9PSBudWxsKSB7XG4gICAgICBpbnNlcnRBZnRlci5fbmV4dCA9IGJhdGNoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBiYXRjaDtcbn07XG5cbi8qKlxuICogVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgRE9NIG5vZGUgaXMgYSB2YWxpZCBub2RlIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHs/RE9NRWxlbWVudH0gbm9kZSBUaGUgY2FuZGlkYXRlIERPTSBub2RlLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgRE9NIGlzIGEgdmFsaWQgRE9NIG5vZGUuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZENvbnRhaW5lcihub2RlKSB7XG4gIHJldHVybiAhIShub2RlICYmIChub2RlLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgfHwgbm9kZS5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSB8fCBub2RlLm5vZGVUeXBlID09PSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFIHx8IG5vZGUubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSAmJiBub2RlLm5vZGVWYWx1ZSA9PT0gJyByZWFjdC1tb3VudC1wb2ludC11bnN0YWJsZSAnKSk7XG59XG5cbmZ1bmN0aW9uIGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpIHtcbiAgaWYgKCFjb250YWluZXIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IERPQ1VNRU5UX05PREUpIHtcbiAgICByZXR1cm4gY29udGFpbmVyLmRvY3VtZW50RWxlbWVudDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkSHlkcmF0ZUR1ZVRvTGVnYWN5SGV1cmlzdGljKGNvbnRhaW5lcikge1xuICB2YXIgcm9vdEVsZW1lbnQgPSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcbiAgcmV0dXJuICEhKHJvb3RFbGVtZW50ICYmIHJvb3RFbGVtZW50Lm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgJiYgcm9vdEVsZW1lbnQuaGFzQXR0cmlidXRlKFJPT1RfQVRUUklCVVRFX05BTUUpKTtcbn1cblxuc2V0QmF0Y2hpbmdJbXBsZW1lbnRhdGlvbihiYXRjaGVkVXBkYXRlcyQxLCBpbnRlcmFjdGl2ZVVwZGF0ZXMkMSwgZmx1c2hJbnRlcmFjdGl2ZVVwZGF0ZXMkMSk7XG5cbnZhciB3YXJuZWRBYm91dEh5ZHJhdGVBUEkgPSBmYWxzZTtcblxuZnVuY3Rpb24gbGVnYWN5Q3JlYXRlUm9vdEZyb21ET01Db250YWluZXIoY29udGFpbmVyLCBmb3JjZUh5ZHJhdGUpIHtcbiAgdmFyIHNob3VsZEh5ZHJhdGUgPSBmb3JjZUh5ZHJhdGUgfHwgc2hvdWxkSHlkcmF0ZUR1ZVRvTGVnYWN5SGV1cmlzdGljKGNvbnRhaW5lcik7XG4gIC8vIEZpcnN0IGNsZWFyIGFueSBleGlzdGluZyBjb250ZW50LlxuICBpZiAoIXNob3VsZEh5ZHJhdGUpIHtcbiAgICB2YXIgd2FybmVkID0gZmFsc2U7XG4gICAgdmFyIHJvb3RTaWJsaW5nID0gdm9pZCAwO1xuICAgIHdoaWxlIChyb290U2libGluZyA9IGNvbnRhaW5lci5sYXN0Q2hpbGQpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKCF3YXJuZWQgJiYgcm9vdFNpYmxpbmcubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSAmJiByb290U2libGluZy5oYXNBdHRyaWJ1dGUoUk9PVF9BVFRSSUJVVEVfTkFNRSkpIHtcbiAgICAgICAgICB3YXJuZWQgPSB0cnVlO1xuICAgICAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ3JlbmRlcigpOiBUYXJnZXQgbm9kZSBoYXMgbWFya3VwIHJlbmRlcmVkIGJ5IFJlYWN0LCBidXQgdGhlcmUgJyArICdhcmUgdW5yZWxhdGVkIG5vZGVzIGFzIHdlbGwuIFRoaXMgaXMgbW9zdCBjb21tb25seSBjYXVzZWQgYnkgJyArICd3aGl0ZS1zcGFjZSBpbnNlcnRlZCBhcm91bmQgc2VydmVyLXJlbmRlcmVkIG1hcmt1cC4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKHJvb3RTaWJsaW5nKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGlmIChzaG91bGRIeWRyYXRlICYmICFmb3JjZUh5ZHJhdGUgJiYgIXdhcm5lZEFib3V0SHlkcmF0ZUFQSSkge1xuICAgICAgd2FybmVkQWJvdXRIeWRyYXRlQVBJID0gdHJ1ZTtcbiAgICAgIGxvd1ByaW9yaXR5V2FybmluZyQxKGZhbHNlLCAncmVuZGVyKCk6IENhbGxpbmcgUmVhY3RET00ucmVuZGVyKCkgdG8gaHlkcmF0ZSBzZXJ2ZXItcmVuZGVyZWQgbWFya3VwICcgKyAnd2lsbCBzdG9wIHdvcmtpbmcgaW4gUmVhY3QgdjE3LiBSZXBsYWNlIHRoZSBSZWFjdERPTS5yZW5kZXIoKSBjYWxsICcgKyAnd2l0aCBSZWFjdERPTS5oeWRyYXRlKCkgaWYgeW91IHdhbnQgUmVhY3QgdG8gYXR0YWNoIHRvIHRoZSBzZXJ2ZXIgSFRNTC4nKTtcbiAgICB9XG4gIH1cbiAgLy8gTGVnYWN5IHJvb3RzIGFyZSBub3QgYXN5bmMgYnkgZGVmYXVsdC5cbiAgdmFyIGlzQ29uY3VycmVudCA9IGZhbHNlO1xuICByZXR1cm4gbmV3IFJlYWN0Um9vdChjb250YWluZXIsIGlzQ29uY3VycmVudCwgc2hvdWxkSHlkcmF0ZSk7XG59XG5cbmZ1bmN0aW9uIGxlZ2FjeVJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHBhcmVudENvbXBvbmVudCwgY2hpbGRyZW4sIGNvbnRhaW5lciwgZm9yY2VIeWRyYXRlLCBjYWxsYmFjaykge1xuICB7XG4gICAgdG9wTGV2ZWxVcGRhdGVXYXJuaW5ncyhjb250YWluZXIpO1xuICB9XG5cbiAgLy8gVE9ETzogV2l0aG91dCBgYW55YCB0eXBlLCBGbG93IHNheXMgXCJQcm9wZXJ0eSBjYW5ub3QgYmUgYWNjZXNzZWQgb24gYW55XG4gIC8vIG1lbWJlciBvZiBpbnRlcnNlY3Rpb24gdHlwZS5cIiBXaHl5eXl5eS5cbiAgdmFyIHJvb3QgPSBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lcjtcbiAgaWYgKCFyb290KSB7XG4gICAgLy8gSW5pdGlhbCBtb3VudFxuICAgIHJvb3QgPSBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lciA9IGxlZ2FjeUNyZWF0ZVJvb3RGcm9tRE9NQ29udGFpbmVyKGNvbnRhaW5lciwgZm9yY2VIeWRyYXRlKTtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgb3JpZ2luYWxDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGdldFB1YmxpY1Jvb3RJbnN0YW5jZShyb290Ll9pbnRlcm5hbFJvb3QpO1xuICAgICAgICBvcmlnaW5hbENhbGxiYWNrLmNhbGwoaW5zdGFuY2UpO1xuICAgICAgfTtcbiAgICB9XG4gICAgLy8gSW5pdGlhbCBtb3VudCBzaG91bGQgbm90IGJlIGJhdGNoZWQuXG4gICAgdW5iYXRjaGVkVXBkYXRlcyhmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAocGFyZW50Q29tcG9uZW50ICE9IG51bGwpIHtcbiAgICAgICAgcm9vdC5sZWdhY3lfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIocGFyZW50Q29tcG9uZW50LCBjaGlsZHJlbiwgY2FsbGJhY2spO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdC5yZW5kZXIoY2hpbGRyZW4sIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgX29yaWdpbmFsQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBnZXRQdWJsaWNSb290SW5zdGFuY2Uocm9vdC5faW50ZXJuYWxSb290KTtcbiAgICAgICAgX29yaWdpbmFsQ2FsbGJhY2suY2FsbChpbnN0YW5jZSk7XG4gICAgICB9O1xuICAgIH1cbiAgICAvLyBVcGRhdGVcbiAgICBpZiAocGFyZW50Q29tcG9uZW50ICE9IG51bGwpIHtcbiAgICAgIHJvb3QubGVnYWN5X3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHBhcmVudENvbXBvbmVudCwgY2hpbGRyZW4sIGNhbGxiYWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcm9vdC5yZW5kZXIoY2hpbGRyZW4sIGNhbGxiYWNrKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGdldFB1YmxpY1Jvb3RJbnN0YW5jZShyb290Ll9pbnRlcm5hbFJvb3QpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVQb3J0YWwkJDEoY2hpbGRyZW4sIGNvbnRhaW5lcikge1xuICB2YXIga2V5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBudWxsO1xuXG4gICFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lcikgPyBpbnZhcmlhbnQoZmFsc2UsICdUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LicpIDogdm9pZCAwO1xuICAvLyBUT0RPOiBwYXNzIFJlYWN0RE9NIHBvcnRhbCBpbXBsZW1lbnRhdGlvbiBhcyB0aGlyZCBhcmd1bWVudFxuICByZXR1cm4gY3JlYXRlUG9ydGFsJDEoY2hpbGRyZW4sIGNvbnRhaW5lciwgbnVsbCwga2V5KTtcbn1cblxudmFyIFJlYWN0RE9NID0ge1xuICBjcmVhdGVQb3J0YWw6IGNyZWF0ZVBvcnRhbCQkMSxcblxuICBmaW5kRE9NTm9kZTogZnVuY3Rpb24gKGNvbXBvbmVudE9yRWxlbWVudCkge1xuICAgIHtcbiAgICAgIHZhciBvd25lciA9IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQ7XG4gICAgICBpZiAob3duZXIgIT09IG51bGwgJiYgb3duZXIuc3RhdGVOb2RlICE9PSBudWxsKSB7XG4gICAgICAgIHZhciB3YXJuZWRBYm91dFJlZnNJblJlbmRlciA9IG93bmVyLnN0YXRlTm9kZS5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXI7XG4gICAgICAgICF3YXJuZWRBYm91dFJlZnNJblJlbmRlciA/IHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJyVzIGlzIGFjY2Vzc2luZyBmaW5kRE9NTm9kZSBpbnNpZGUgaXRzIHJlbmRlcigpLiAnICsgJ3JlbmRlcigpIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlLiBJdCBzaG91bGQgJyArICduZXZlciBhY2Nlc3Mgc29tZXRoaW5nIHRoYXQgcmVxdWlyZXMgc3RhbGUgZGF0YSBmcm9tIHRoZSBwcmV2aW91cyAnICsgJ3JlbmRlciwgc3VjaCBhcyByZWZzLiBNb3ZlIHRoaXMgbG9naWMgdG8gY29tcG9uZW50RGlkTW91bnQgYW5kICcgKyAnY29tcG9uZW50RGlkVXBkYXRlIGluc3RlYWQuJywgZ2V0Q29tcG9uZW50TmFtZShvd25lci50eXBlKSB8fCAnQSBjb21wb25lbnQnKSA6IHZvaWQgMDtcbiAgICAgICAgb3duZXIuc3RhdGVOb2RlLl93YXJuZWRBYm91dFJlZnNJblJlbmRlciA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjb21wb25lbnRPckVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChjb21wb25lbnRPckVsZW1lbnQubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgICAgcmV0dXJuIGNvbXBvbmVudE9yRWxlbWVudDtcbiAgICB9XG4gICAge1xuICAgICAgcmV0dXJuIGZpbmRIb3N0SW5zdGFuY2VXaXRoV2FybmluZyhjb21wb25lbnRPckVsZW1lbnQsICdmaW5kRE9NTm9kZScpO1xuICAgIH1cbiAgICByZXR1cm4gZmluZEhvc3RJbnN0YW5jZShjb21wb25lbnRPckVsZW1lbnQpO1xuICB9LFxuICBoeWRyYXRlOiBmdW5jdGlvbiAoZWxlbWVudCwgY29udGFpbmVyLCBjYWxsYmFjaykge1xuICAgICFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lcikgPyBpbnZhcmlhbnQoZmFsc2UsICdUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LicpIDogdm9pZCAwO1xuICAgIHtcbiAgICAgICEhY29udGFpbmVyLl9yZWFjdEhhc0JlZW5QYXNzZWRUb0NyZWF0ZVJvb3RERVYgPyB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdZb3UgYXJlIGNhbGxpbmcgUmVhY3RET00uaHlkcmF0ZSgpIG9uIGEgY29udGFpbmVyIHRoYXQgd2FzIHByZXZpb3VzbHkgJyArICdwYXNzZWQgdG8gUmVhY3RET00uJXMoKS4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBjYWxsIGNyZWF0ZVJvb3QoY29udGFpbmVyLCB7aHlkcmF0ZTogdHJ1ZX0pLnJlbmRlcihlbGVtZW50KT8nLCBlbmFibGVTdGFibGVDb25jdXJyZW50TW9kZUFQSXMgPyAnY3JlYXRlUm9vdCcgOiAndW5zdGFibGVfY3JlYXRlUm9vdCcpIDogdm9pZCAwO1xuICAgIH1cbiAgICAvLyBUT0RPOiB0aHJvdyBvciB3YXJuIGlmIHdlIGNvdWxkbid0IGh5ZHJhdGU/XG4gICAgcmV0dXJuIGxlZ2FjeVJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKG51bGwsIGVsZW1lbnQsIGNvbnRhaW5lciwgdHJ1ZSwgY2FsbGJhY2spO1xuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uIChlbGVtZW50LCBjb250YWluZXIsIGNhbGxiYWNrKSB7XG4gICAgIWlzVmFsaWRDb250YWluZXIoY29udGFpbmVyKSA/IGludmFyaWFudChmYWxzZSwgJ1RhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuJykgOiB2b2lkIDA7XG4gICAge1xuICAgICAgISFjb250YWluZXIuX3JlYWN0SGFzQmVlblBhc3NlZFRvQ3JlYXRlUm9vdERFViA/IHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ1lvdSBhcmUgY2FsbGluZyBSZWFjdERPTS5yZW5kZXIoKSBvbiBhIGNvbnRhaW5lciB0aGF0IHdhcyBwcmV2aW91c2x5ICcgKyAncGFzc2VkIHRvIFJlYWN0RE9NLiVzKCkuIFRoaXMgaXMgbm90IHN1cHBvcnRlZC4gJyArICdEaWQgeW91IG1lYW4gdG8gY2FsbCByb290LnJlbmRlcihlbGVtZW50KT8nLCBlbmFibGVTdGFibGVDb25jdXJyZW50TW9kZUFQSXMgPyAnY3JlYXRlUm9vdCcgOiAndW5zdGFibGVfY3JlYXRlUm9vdCcpIDogdm9pZCAwO1xuICAgIH1cbiAgICByZXR1cm4gbGVnYWN5UmVuZGVyU3VidHJlZUludG9Db250YWluZXIobnVsbCwgZWxlbWVudCwgY29udGFpbmVyLCBmYWxzZSwgY2FsbGJhY2spO1xuICB9LFxuICB1bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcjogZnVuY3Rpb24gKHBhcmVudENvbXBvbmVudCwgZWxlbWVudCwgY29udGFpbmVyTm9kZSwgY2FsbGJhY2spIHtcbiAgICAhaXNWYWxpZENvbnRhaW5lcihjb250YWluZXJOb2RlKSA/IGludmFyaWFudChmYWxzZSwgJ1RhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuJykgOiB2b2lkIDA7XG4gICAgIShwYXJlbnRDb21wb25lbnQgIT0gbnVsbCAmJiBoYXMocGFyZW50Q29tcG9uZW50KSkgPyBpbnZhcmlhbnQoZmFsc2UsICdwYXJlbnRDb21wb25lbnQgbXVzdCBiZSBhIHZhbGlkIFJlYWN0IENvbXBvbmVudCcpIDogdm9pZCAwO1xuICAgIHJldHVybiBsZWdhY3lSZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihwYXJlbnRDb21wb25lbnQsIGVsZW1lbnQsIGNvbnRhaW5lck5vZGUsIGZhbHNlLCBjYWxsYmFjayk7XG4gIH0sXG4gIHVubW91bnRDb21wb25lbnRBdE5vZGU6IGZ1bmN0aW9uIChjb250YWluZXIpIHtcbiAgICAhaXNWYWxpZENvbnRhaW5lcihjb250YWluZXIpID8gaW52YXJpYW50KGZhbHNlLCAndW5tb3VudENvbXBvbmVudEF0Tm9kZSguLi4pOiBUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LicpIDogdm9pZCAwO1xuXG4gICAge1xuICAgICAgISFjb250YWluZXIuX3JlYWN0SGFzQmVlblBhc3NlZFRvQ3JlYXRlUm9vdERFViA/IHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ1lvdSBhcmUgY2FsbGluZyBSZWFjdERPTS51bm1vdW50Q29tcG9uZW50QXROb2RlKCkgb24gYSBjb250YWluZXIgdGhhdCB3YXMgcHJldmlvdXNseSAnICsgJ3Bhc3NlZCB0byBSZWFjdERPTS4lcygpLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQuIERpZCB5b3UgbWVhbiB0byBjYWxsIHJvb3QudW5tb3VudCgpPycsIGVuYWJsZVN0YWJsZUNvbmN1cnJlbnRNb2RlQVBJcyA/ICdjcmVhdGVSb290JyA6ICd1bnN0YWJsZV9jcmVhdGVSb290JykgOiB2b2lkIDA7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyKSB7XG4gICAgICB7XG4gICAgICAgIHZhciByb290RWwgPSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcbiAgICAgICAgdmFyIHJlbmRlcmVkQnlEaWZmZXJlbnRSZWFjdCA9IHJvb3RFbCAmJiAhZ2V0SW5zdGFuY2VGcm9tTm9kZSQxKHJvb3RFbCk7XG4gICAgICAgICEhcmVuZGVyZWRCeURpZmZlcmVudFJlYWN0ID8gd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCBcInVubW91bnRDb21wb25lbnRBdE5vZGUoKTogVGhlIG5vZGUgeW91J3JlIGF0dGVtcHRpbmcgdG8gdW5tb3VudCBcIiArICd3YXMgcmVuZGVyZWQgYnkgYW5vdGhlciBjb3B5IG9mIFJlYWN0LicpIDogdm9pZCAwO1xuICAgICAgfVxuXG4gICAgICAvLyBVbm1vdW50IHNob3VsZCBub3QgYmUgYmF0Y2hlZC5cbiAgICAgIHVuYmF0Y2hlZFVwZGF0ZXMoZnVuY3Rpb24gKCkge1xuICAgICAgICBsZWdhY3lSZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihudWxsLCBudWxsLCBjb250YWluZXIsIGZhbHNlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIgPSBudWxsO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgLy8gSWYgeW91IGNhbGwgdW5tb3VudENvbXBvbmVudEF0Tm9kZSB0d2ljZSBpbiBxdWljayBzdWNjZXNzaW9uLCB5b3UnbGxcbiAgICAgIC8vIGdldCBgdHJ1ZWAgdHdpY2UuIFRoYXQncyBwcm9iYWJseSBmaW5lP1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHtcbiAgICAgICAgdmFyIF9yb290RWwgPSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcbiAgICAgICAgdmFyIGhhc05vblJvb3RSZWFjdENoaWxkID0gISEoX3Jvb3RFbCAmJiBnZXRJbnN0YW5jZUZyb21Ob2RlJDEoX3Jvb3RFbCkpO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBjb250YWluZXIgaXRzZWxmIGlzIGEgUmVhY3Qgcm9vdCBub2RlLlxuICAgICAgICB2YXIgaXNDb250YWluZXJSZWFjdFJvb3QgPSBjb250YWluZXIubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSAmJiBpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lci5wYXJlbnROb2RlKSAmJiAhIWNvbnRhaW5lci5wYXJlbnROb2RlLl9yZWFjdFJvb3RDb250YWluZXI7XG5cbiAgICAgICAgISFoYXNOb25Sb290UmVhY3RDaGlsZCA/IHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgXCJ1bm1vdW50Q29tcG9uZW50QXROb2RlKCk6IFRoZSBub2RlIHlvdSdyZSBhdHRlbXB0aW5nIHRvIHVubW91bnQgXCIgKyAnd2FzIHJlbmRlcmVkIGJ5IFJlYWN0IGFuZCBpcyBub3QgYSB0b3AtbGV2ZWwgY29udGFpbmVyLiAlcycsIGlzQ29udGFpbmVyUmVhY3RSb290ID8gJ1lvdSBtYXkgaGF2ZSBhY2NpZGVudGFsbHkgcGFzc2VkIGluIGEgUmVhY3Qgcm9vdCBub2RlIGluc3RlYWQgJyArICdvZiBpdHMgY29udGFpbmVyLicgOiAnSW5zdGVhZCwgaGF2ZSB0aGUgcGFyZW50IGNvbXBvbmVudCB1cGRhdGUgaXRzIHN0YXRlIGFuZCAnICsgJ3JlcmVuZGVyIGluIG9yZGVyIHRvIHJlbW92ZSB0aGlzIGNvbXBvbmVudC4nKSA6IHZvaWQgMDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSxcblxuXG4gIC8vIFRlbXBvcmFyeSBhbGlhcyBzaW5jZSB3ZSBhbHJlYWR5IHNoaXBwZWQgUmVhY3QgMTYgUkMgd2l0aCBpdC5cbiAgLy8gVE9ETzogcmVtb3ZlIGluIFJlYWN0IDE3LlxuICB1bnN0YWJsZV9jcmVhdGVQb3J0YWw6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWRpZFdhcm5BYm91dFVuc3RhYmxlQ3JlYXRlUG9ydGFsKSB7XG4gICAgICBkaWRXYXJuQWJvdXRVbnN0YWJsZUNyZWF0ZVBvcnRhbCA9IHRydWU7XG4gICAgICBsb3dQcmlvcml0eVdhcm5pbmckMShmYWxzZSwgJ1RoZSBSZWFjdERPTS51bnN0YWJsZV9jcmVhdGVQb3J0YWwoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTcrLiBVcGRhdGUgeW91ciBjb2RlIHRvIHVzZSAnICsgJ1JlYWN0RE9NLmNyZWF0ZVBvcnRhbCgpIGluc3RlYWQuIEl0IGhhcyB0aGUgZXhhY3Qgc2FtZSBBUEksICcgKyAnYnV0IHdpdGhvdXQgdGhlIFwidW5zdGFibGVfXCIgcHJlZml4LicpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlUG9ydGFsJCQxLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgfSxcblxuXG4gIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzOiBiYXRjaGVkVXBkYXRlcyQxLFxuXG4gIHVuc3RhYmxlX2ludGVyYWN0aXZlVXBkYXRlczogaW50ZXJhY3RpdmVVcGRhdGVzJDEsXG5cbiAgZmx1c2hTeW5jOiBmbHVzaFN5bmMsXG5cbiAgdW5zdGFibGVfY3JlYXRlUm9vdDogY3JlYXRlUm9vdCxcbiAgdW5zdGFibGVfZmx1c2hDb250cm9sbGVkOiBmbHVzaENvbnRyb2xsZWQsXG5cbiAgX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ6IHtcbiAgICAvLyBLZWVwIGluIHN5bmMgd2l0aCBSZWFjdERPTVVuc3RhYmxlTmF0aXZlRGVwZW5kZW5jaWVzLmpzXG4gICAgLy8gYW5kIFJlYWN0VGVzdFV0aWxzLmpzLiBUaGlzIGlzIGFuIGFycmF5IGZvciBiZXR0ZXIgbWluaWZpY2F0aW9uLlxuICAgIEV2ZW50czogW2dldEluc3RhbmNlRnJvbU5vZGUkMSwgZ2V0Tm9kZUZyb21JbnN0YW5jZSQxLCBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlJDEsIGluamVjdGlvbi5pbmplY3RFdmVudFBsdWdpbnNCeU5hbWUsIGV2ZW50TmFtZURpc3BhdGNoQ29uZmlncywgYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcywgYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXMsIGVucXVldWVTdGF0ZVJlc3RvcmUsIHJlc3RvcmVTdGF0ZUlmTmVlZGVkLCBkaXNwYXRjaEV2ZW50LCBydW5FdmVudHNJbkJhdGNoXVxuICB9XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVSb290KGNvbnRhaW5lciwgb3B0aW9ucykge1xuICB2YXIgZnVuY3Rpb25OYW1lID0gZW5hYmxlU3RhYmxlQ29uY3VycmVudE1vZGVBUElzID8gJ2NyZWF0ZVJvb3QnIDogJ3Vuc3RhYmxlX2NyZWF0ZVJvb3QnO1xuICAhaXNWYWxpZENvbnRhaW5lcihjb250YWluZXIpID8gaW52YXJpYW50KGZhbHNlLCAnJXMoLi4uKTogVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC4nLCBmdW5jdGlvbk5hbWUpIDogdm9pZCAwO1xuICB7XG4gICAgISFjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lciA/IHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ1lvdSBhcmUgY2FsbGluZyBSZWFjdERPTS4lcygpIG9uIGEgY29udGFpbmVyIHRoYXQgd2FzIHByZXZpb3VzbHkgJyArICdwYXNzZWQgdG8gUmVhY3RET00ucmVuZGVyKCkuIFRoaXMgaXMgbm90IHN1cHBvcnRlZC4nLCBlbmFibGVTdGFibGVDb25jdXJyZW50TW9kZUFQSXMgPyAnY3JlYXRlUm9vdCcgOiAndW5zdGFibGVfY3JlYXRlUm9vdCcpIDogdm9pZCAwO1xuICAgIGNvbnRhaW5lci5fcmVhY3RIYXNCZWVuUGFzc2VkVG9DcmVhdGVSb290REVWID0gdHJ1ZTtcbiAgfVxuICB2YXIgaHlkcmF0ZSA9IG9wdGlvbnMgIT0gbnVsbCAmJiBvcHRpb25zLmh5ZHJhdGUgPT09IHRydWU7XG4gIHJldHVybiBuZXcgUmVhY3RSb290KGNvbnRhaW5lciwgdHJ1ZSwgaHlkcmF0ZSk7XG59XG5cbmlmIChlbmFibGVTdGFibGVDb25jdXJyZW50TW9kZUFQSXMpIHtcbiAgUmVhY3RET00uY3JlYXRlUm9vdCA9IGNyZWF0ZVJvb3Q7XG4gIFJlYWN0RE9NLnVuc3RhYmxlX2NyZWF0ZVJvb3QgPSB1bmRlZmluZWQ7XG59XG5cbnZhciBmb3VuZERldlRvb2xzID0gaW5qZWN0SW50b0RldlRvb2xzKHtcbiAgZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlLFxuICBidW5kbGVUeXBlOiAxLFxuICB2ZXJzaW9uOiBSZWFjdFZlcnNpb24sXG4gIHJlbmRlcmVyUGFja2FnZU5hbWU6ICdyZWFjdC1kb20nXG59KTtcblxue1xuICBpZiAoIWZvdW5kRGV2VG9vbHMgJiYgY2FuVXNlRE9NICYmIHdpbmRvdy50b3AgPT09IHdpbmRvdy5zZWxmKSB7XG4gICAgLy8gSWYgd2UncmUgaW4gQ2hyb21lIG9yIEZpcmVmb3gsIHByb3ZpZGUgYSBkb3dubG9hZCBsaW5rIGlmIG5vdCBpbnN0YWxsZWQuXG4gICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lJykgPiAtMSAmJiBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0VkZ2UnKSA9PT0gLTEgfHwgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdGaXJlZm94JykgPiAtMSkge1xuICAgICAgdmFyIHByb3RvY29sID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sO1xuICAgICAgLy8gRG9uJ3Qgd2FybiBpbiBleG90aWMgY2FzZXMgbGlrZSBjaHJvbWUtZXh0ZW5zaW9uOi8vLlxuICAgICAgaWYgKC9eKGh0dHBzP3xmaWxlKTokLy50ZXN0KHByb3RvY29sKSkge1xuICAgICAgICBjb25zb2xlLmluZm8oJyVjRG93bmxvYWQgdGhlIFJlYWN0IERldlRvb2xzICcgKyAnZm9yIGEgYmV0dGVyIGRldmVsb3BtZW50IGV4cGVyaWVuY2U6ICcgKyAnaHR0cHM6Ly9mYi5tZS9yZWFjdC1kZXZ0b29scycgKyAocHJvdG9jb2wgPT09ICdmaWxlOicgPyAnXFxuWW91IG1pZ2h0IG5lZWQgdG8gdXNlIGEgbG9jYWwgSFRUUCBzZXJ2ZXIgKGluc3RlYWQgb2YgZmlsZTovLyk6ICcgKyAnaHR0cHM6Ly9mYi5tZS9yZWFjdC1kZXZ0b29scy1mYXEnIDogJycpLCAnZm9udC13ZWlnaHQ6Ym9sZCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cblxudmFyIFJlYWN0RE9NJDIgPSBPYmplY3QuZnJlZXplKHtcblx0ZGVmYXVsdDogUmVhY3RET01cbn0pO1xuXG52YXIgUmVhY3RET00kMyA9ICggUmVhY3RET00kMiAmJiBSZWFjdERPTSApIHx8IFJlYWN0RE9NJDI7XG5cbi8vIFRPRE86IGRlY2lkZSBvbiB0aGUgdG9wLWxldmVsIGV4cG9ydCBmb3JtLlxuLy8gVGhpcyBpcyBoYWNreSBidXQgbWFrZXMgaXQgd29yayB3aXRoIGJvdGggUm9sbHVwIGFuZCBKZXN0LlxudmFyIHJlYWN0RG9tID0gUmVhY3RET00kMy5kZWZhdWx0IHx8IFJlYWN0RE9NJDM7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVhY3REb207XG4gIH0pKCk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/react-dom/cjs/react-dom.development.js\n"); - -/***/ }), - -/***/ "./node_modules/react-dom/index.js": -/*!*****************************************!*\ - !*** ./node_modules/react-dom/index.js ***! - \*****************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (true) {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-dom.development.js */ \"./node_modules/react-dom/cjs/react-dom.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9pbmRleC5qcz84YmM4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLElBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLElBQUksS0FBcUMsRUFBRSxFQUsxQztBQUNELG1CQUFtQixtQkFBTyxDQUFDLDZGQUFnQztBQUMzRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGNoZWNrRENFKCkge1xuICAvKiBnbG9iYWwgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICovXG4gIGlmIChcbiAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fID09PSAndW5kZWZpbmVkJyB8fFxuICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UgIT09ICdmdW5jdGlvbidcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gVGhpcyBicmFuY2ggaXMgdW5yZWFjaGFibGUgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkXG4gICAgLy8gaW4gcHJvZHVjdGlvbiwgYnV0IHRoZSBjb25kaXRpb24gaXMgdHJ1ZSBvbmx5IGluIGRldmVsb3BtZW50LlxuICAgIC8vIFRoZXJlZm9yZSBpZiB0aGUgYnJhbmNoIGlzIHN0aWxsIGhlcmUsIGRlYWQgY29kZSBlbGltaW5hdGlvbiB3YXNuJ3RcbiAgICAvLyBwcm9wZXJseSBhcHBsaWVkLlxuICAgIC8vIERvbid0IGNoYW5nZSB0aGUgbWVzc2FnZS4gUmVhY3QgRGV2VG9vbHMgcmVsaWVzIG9uIGl0LiBBbHNvIG1ha2Ugc3VyZVxuICAgIC8vIHRoaXMgbWVzc2FnZSBkb2Vzbid0IG9jY3VyIGVsc2V3aGVyZSBpbiB0aGlzIGZ1bmN0aW9uLCBvciBpdCB3aWxsIGNhdXNlXG4gICAgLy8gYSBmYWxzZSBwb3NpdGl2ZS5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ15fXicpO1xuICB9XG4gIHRyeSB7XG4gICAgLy8gVmVyaWZ5IHRoYXQgdGhlIGNvZGUgYWJvdmUgaGFzIGJlZW4gZGVhZCBjb2RlIGVsaW1pbmF0ZWQgKERDRSdkKS5cbiAgICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UoY2hlY2tEQ0UpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBEZXZUb29scyBzaG91bGRuJ3QgY3Jhc2ggUmVhY3QsIG5vIG1hdHRlciB3aGF0LlxuICAgIC8vIFdlIHNob3VsZCBzdGlsbCByZXBvcnQgaW4gY2FzZSB3ZSBicmVhayB0aGlzIGNvZGUuXG4gICAgY29uc29sZS5lcnJvcihlcnIpO1xuICB9XG59XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIC8vIERDRSBjaGVjayBzaG91bGQgaGFwcGVuIGJlZm9yZSBSZWFjdERPTSBidW5kbGUgZXhlY3V0ZXMgc28gdGhhdFxuICAvLyBEZXZUb29scyBjYW4gcmVwb3J0IGJhZCBtaW5pZmljYXRpb24gZHVyaW5nIGluamVjdGlvbi5cbiAgY2hlY2tEQ0UoKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1kb20ucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtZG9tLmRldmVsb3BtZW50LmpzJyk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/react-dom/index.js\n"); - -/***/ }), - -/***/ "./node_modules/react-is/cjs/react-is.development.js": -/*!***********************************************************!*\ - !*** ./node_modules/react-is/cjs/react-is.development.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/** @license React v16.13.1\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\n\n\nif (true) {\n (function() {\n'use strict';\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\n// (unstable) APIs that have been removed. Can we remove the symbols?\n\nvar REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\nvar REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;\nvar REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;\nvar REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;\n\nfunction isValidElementType(type) {\n return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);\n}\n\nfunction typeOf(object) {\n if (typeof object === 'object' && object !== null) {\n var $$typeof = object.$$typeof;\n\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n var type = object.type;\n\n switch (type) {\n case REACT_ASYNC_MODE_TYPE:\n case REACT_CONCURRENT_MODE_TYPE:\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n return type;\n\n default:\n var $$typeofType = type && type.$$typeof;\n\n switch ($$typeofType) {\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n case REACT_PROVIDER_TYPE:\n return $$typeofType;\n\n default:\n return $$typeof;\n }\n\n }\n\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n\n return undefined;\n} // AsyncMode is deprecated along with isAsyncMode\n\nvar AsyncMode = REACT_ASYNC_MODE_TYPE;\nvar ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;\nvar ContextConsumer = REACT_CONTEXT_TYPE;\nvar ContextProvider = REACT_PROVIDER_TYPE;\nvar Element = REACT_ELEMENT_TYPE;\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Fragment = REACT_FRAGMENT_TYPE;\nvar Lazy = REACT_LAZY_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nvar Portal = REACT_PORTAL_TYPE;\nvar Profiler = REACT_PROFILER_TYPE;\nvar StrictMode = REACT_STRICT_MODE_TYPE;\nvar Suspense = REACT_SUSPENSE_TYPE;\nvar hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated\n\nfunction isAsyncMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n\n console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');\n }\n }\n\n return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;\n}\nfunction isConcurrentMode(object) {\n return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;\n}\nfunction isContextConsumer(object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isContextProvider(object) {\n return typeOf(object) === REACT_PROVIDER_TYPE;\n}\nfunction isElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nfunction isForwardRef(object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n}\nfunction isFragment(object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n}\nfunction isLazy(object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n}\nfunction isMemo(object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n}\nfunction isPortal(object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n}\nfunction isProfiler(object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n}\nfunction isStrictMode(object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n}\nfunction isSuspense(object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n}\n\nexports.AsyncMode = AsyncMode;\nexports.ConcurrentMode = ConcurrentMode;\nexports.ContextConsumer = ContextConsumer;\nexports.ContextProvider = ContextProvider;\nexports.Element = Element;\nexports.ForwardRef = ForwardRef;\nexports.Fragment = Fragment;\nexports.Lazy = Lazy;\nexports.Memo = Memo;\nexports.Portal = Portal;\nexports.Profiler = Profiler;\nexports.StrictMode = StrictMode;\nexports.Suspense = Suspense;\nexports.isAsyncMode = isAsyncMode;\nexports.isConcurrentMode = isConcurrentMode;\nexports.isContextConsumer = isContextConsumer;\nexports.isContextProvider = isContextProvider;\nexports.isElement = isElement;\nexports.isForwardRef = isForwardRef;\nexports.isFragment = isFragment;\nexports.isLazy = isLazy;\nexports.isMemo = isMemo;\nexports.isPortal = isPortal;\nexports.isProfiler = isProfiler;\nexports.isStrictMode = isStrictMode;\nexports.isSuspense = isSuspense;\nexports.isValidElementType = isValidElementType;\nexports.typeOf = typeOf;\n })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcz9hOGY1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7Ozs7QUFJYixJQUFJLElBQXFDO0FBQ3pDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEVBQTBFO0FBQzFFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRDs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0EsaURBQWlEOztBQUVqRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQGxpY2Vuc2UgUmVhY3QgdjE2LjEzLjFcbiAqIHJlYWN0LWlzLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgaGFzU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yO1xudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSA6IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpIDogMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpIDogMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpIDogMHhlYWNjO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpIDogMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpIDogMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKSA6IDB4ZWFjZTsgLy8gVE9ETzogV2UgZG9uJ3QgdXNlIEFzeW5jTW9kZSBvciBDb25jdXJyZW50TW9kZSBhbnltb3JlLiBUaGV5IHdlcmUgdGVtcG9yYXJ5XG4vLyAodW5zdGFibGUpIEFQSXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZC4gQ2FuIHdlIHJlbW92ZSB0aGUgc3ltYm9scz9cblxudmFyIFJFQUNUX0FTWU5DX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmFzeW5jX21vZGUnKSA6IDB4ZWFjZjtcbnZhciBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbmN1cnJlbnRfbW9kZScpIDogMHhlYWNmO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpIDogMHhlYWQwO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZScpIDogMHhlYWQxO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKSA6IDB4ZWFkODtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJykgOiAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubGF6eScpIDogMHhlYWQ0O1xudmFyIFJFQUNUX0JMT0NLX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5ibG9jaycpIDogMHhlYWQ5O1xudmFyIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mdW5kYW1lbnRhbCcpIDogMHhlYWQ1O1xudmFyIFJFQUNUX1JFU1BPTkRFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucmVzcG9uZGVyJykgOiAweGVhZDY7XG52YXIgUkVBQ1RfU0NPUEVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnNjb3BlJykgOiAweGVhZDc7XG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgLy8gTm90ZTogaXRzIHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIGlmIGl0J3MgYSBwb2x5ZmlsbC5cbiAgdHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1JFU1BPTkRFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1NDT1BFX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQkxPQ0tfVFlQRSk7XG59XG5cbmZ1bmN0aW9uIHR5cGVPZihvYmplY3QpIHtcbiAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCkge1xuICAgIHZhciAkJHR5cGVvZiA9IG9iamVjdC4kJHR5cGVvZjtcblxuICAgIHN3aXRjaCAoJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICB2YXIgdHlwZSA9IG9iamVjdC50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdmFyICQkdHlwZW9mVHlwZSA9IHR5cGUgJiYgdHlwZS4kJHR5cGVvZjtcblxuICAgICAgICAgICAgc3dpdGNoICgkJHR5cGVvZlR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mVHlwZTtcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufSAvLyBBc3luY01vZGUgaXMgZGVwcmVjYXRlZCBhbG9uZyB3aXRoIGlzQXN5bmNNb2RlXG5cbnZhciBBc3luY01vZGUgPSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU7XG52YXIgQ29uY3VycmVudE1vZGUgPSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbnZhciBDb250ZXh0Q29uc3VtZXIgPSBSRUFDVF9DT05URVhUX1RZUEU7XG52YXIgQ29udGV4dFByb3ZpZGVyID0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbnZhciBFbGVtZW50ID0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xudmFyIEZvcndhcmRSZWYgPSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xudmFyIEZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbnZhciBMYXp5ID0gUkVBQ1RfTEFaWV9UWVBFO1xudmFyIE1lbW8gPSBSRUFDVF9NRU1PX1RZUEU7XG52YXIgUG9ydGFsID0gUkVBQ1RfUE9SVEFMX1RZUEU7XG52YXIgUHJvZmlsZXIgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xudmFyIFN0cmljdE1vZGUgPSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xudmFyIFN1c3BlbnNlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbnZhciBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IGZhbHNlOyAvLyBBc3luY01vZGUgc2hvdWxkIGJlIGRlcHJlY2F0ZWRcblxuZnVuY3Rpb24gaXNBc3luY01vZGUob2JqZWN0KSB7XG4gIHtcbiAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlKSB7XG4gICAgICBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IHRydWU7IC8vIFVzaW5nIGNvbnNvbGVbJ3dhcm4nXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG5cbiAgICAgIGNvbnNvbGVbJ3dhcm4nXSgnVGhlIFJlYWN0SXMuaXNBc3luY01vZGUoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTcrLiBVcGRhdGUgeW91ciBjb2RlIHRvIHVzZSAnICsgJ1JlYWN0SXMuaXNDb25jdXJyZW50TW9kZSgpIGluc3RlYWQuIEl0IGhhcyB0aGUgZXhhY3Qgc2FtZSBBUEkuJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB8fCB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dENvbnN1bWVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTlRFWFRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dFByb3ZpZGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST1ZJREVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZvcndhcmRSZWYob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRnJhZ21lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTGF6eShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9MQVpZX1RZUEU7XG59XG5mdW5jdGlvbiBpc01lbW8ob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTUVNT19UWVBFO1xufVxuZnVuY3Rpb24gaXNQb3J0YWwob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUE9SVEFMX1RZUEU7XG59XG5mdW5jdGlvbiBpc1Byb2ZpbGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N0cmljdE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2Uob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbn1cblxuZXhwb3J0cy5Bc3luY01vZGUgPSBBc3luY01vZGU7XG5leHBvcnRzLkNvbmN1cnJlbnRNb2RlID0gQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLkNvbnRleHRDb25zdW1lciA9IENvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuQ29udGV4dFByb3ZpZGVyID0gQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5FbGVtZW50ID0gRWxlbWVudDtcbmV4cG9ydHMuRm9yd2FyZFJlZiA9IEZvcndhcmRSZWY7XG5leHBvcnRzLkZyYWdtZW50ID0gRnJhZ21lbnQ7XG5leHBvcnRzLkxhenkgPSBMYXp5O1xuZXhwb3J0cy5NZW1vID0gTWVtbztcbmV4cG9ydHMuUG9ydGFsID0gUG9ydGFsO1xuZXhwb3J0cy5Qcm9maWxlciA9IFByb2ZpbGVyO1xuZXhwb3J0cy5TdHJpY3RNb2RlID0gU3RyaWN0TW9kZTtcbmV4cG9ydHMuU3VzcGVuc2UgPSBTdXNwZW5zZTtcbmV4cG9ydHMuaXNBc3luY01vZGUgPSBpc0FzeW5jTW9kZTtcbmV4cG9ydHMuaXNDb25jdXJyZW50TW9kZSA9IGlzQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLmlzQ29udGV4dENvbnN1bWVyID0gaXNDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyID0gaXNDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLmlzRWxlbWVudCA9IGlzRWxlbWVudDtcbmV4cG9ydHMuaXNGb3J3YXJkUmVmID0gaXNGb3J3YXJkUmVmO1xuZXhwb3J0cy5pc0ZyYWdtZW50ID0gaXNGcmFnbWVudDtcbmV4cG9ydHMuaXNMYXp5ID0gaXNMYXp5O1xuZXhwb3J0cy5pc01lbW8gPSBpc01lbW87XG5leHBvcnRzLmlzUG9ydGFsID0gaXNQb3J0YWw7XG5leHBvcnRzLmlzUHJvZmlsZXIgPSBpc1Byb2ZpbGVyO1xuZXhwb3J0cy5pc1N0cmljdE1vZGUgPSBpc1N0cmljdE1vZGU7XG5leHBvcnRzLmlzU3VzcGVuc2UgPSBpc1N1c3BlbnNlO1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGU7XG5leHBvcnRzLnR5cGVPZiA9IHR5cGVPZjtcbiAgfSkoKTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/react-is/cjs/react-is.development.js\n"); - -/***/ }), - -/***/ "./node_modules/react-is/index.js": -/*!****************************************!*\ - !*** ./node_modules/react-is/index.js ***! - \****************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-is.development.js */ \"./node_modules/react-is/cjs/react-is.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2luZGV4LmpzPzRjZWMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsSUFBSSxLQUFxQyxFQUFFLEVBRTFDO0FBQ0QsbUJBQW1CLG1CQUFPLENBQUMsMEZBQStCO0FBQzFEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzJyk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/react-is/index.js\n"); - -/***/ }), - -/***/ "./node_modules/react/cjs/react.development.js": -/*!*****************************************************!*\ - !*** ./node_modules/react/cjs/react.development.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/** @license React v16.8.6\n * react.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\n\n\nif (true) {\n (function() {\n'use strict';\n\nvar _assign = __webpack_require__(/*! object-assign */ \"./node_modules/next/dist/build/polyfills/object-assign.js\");\nvar checkPropTypes = __webpack_require__(/*! prop-types/checkPropTypes */ \"./node_modules/prop-types/checkPropTypes.js\");\n\n// TODO: this is special because it gets imported during build.\n\nvar ReactVersion = '16.8.6';\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\n\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace;\n\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\n\nvar MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\n\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n return null;\n}\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar validateFormat = function () {};\n\n{\n validateFormat = function (format) {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n };\n}\n\nfunction invariant(condition, format, a, b, c, d, e, f) {\n validateFormat(format);\n\n if (!condition) {\n var error = void 0;\n if (format === undefined) {\n error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(format.replace(/%s/g, function () {\n return args[argIndex++];\n }));\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n}\n\n// Relying on the `invariant()` implementation lets us\n// preserve the format and params in the www builds.\n\n/**\n * Forked from fbjs/warning:\n * https://github.com/facebook/fbjs/blob/e66ba20ad5be433eb54423f2b097d829324d9de6/packages/fbjs/src/__forks__/warning.js\n *\n * Only change is we use console.warn instead of console.error,\n * and do nothing when 'console' is not supported.\n * This really simplifies the code.\n * ---\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar lowPriorityWarning = function () {};\n\n{\n var printWarning = function (format) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var argIndex = 0;\n var message = 'Warning: ' + format.replace(/%s/g, function () {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.warn(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n\n lowPriorityWarning = function (condition, format) {\n if (format === undefined) {\n throw new Error('`lowPriorityWarning(condition, format, ...args)` requires a warning ' + 'message argument');\n }\n if (!condition) {\n for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n args[_key2 - 2] = arguments[_key2];\n }\n\n printWarning.apply(undefined, [format].concat(args));\n }\n };\n}\n\nvar lowPriorityWarning$1 = lowPriorityWarning;\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warningWithoutStack = function () {};\n\n{\n warningWithoutStack = function (condition, format) {\n for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n if (format === undefined) {\n throw new Error('`warningWithoutStack(condition, format, ...args)` requires a warning ' + 'message argument');\n }\n if (args.length > 8) {\n // Check before the condition to catch violations early.\n throw new Error('warningWithoutStack() currently supports at most 8 arguments.');\n }\n if (condition) {\n return;\n }\n if (typeof console !== 'undefined') {\n var argsWithFormat = args.map(function (item) {\n return '' + item;\n });\n argsWithFormat.unshift('Warning: ' + format);\n\n // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n Function.prototype.apply.call(console.error, console, argsWithFormat);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n var argIndex = 0;\n var message = 'Warning: ' + format.replace(/%s/g, function () {\n return args[argIndex++];\n });\n throw new Error(message);\n } catch (x) {}\n };\n}\n\nvar warningWithoutStack$1 = warningWithoutStack;\n\nvar didWarnStateUpdateForUnmountedComponent = {};\n\nfunction warnNoop(publicInstance, callerName) {\n {\n var _constructor = publicInstance.constructor;\n var componentName = _constructor && (_constructor.displayName || _constructor.name) || 'ReactClass';\n var warningKey = componentName + '.' + callerName;\n if (didWarnStateUpdateForUnmountedComponent[warningKey]) {\n return;\n }\n warningWithoutStack$1(false, \"Can't call %s on a component that is not yet mounted. \" + 'This is a no-op, but it might indicate a bug in your application. ' + 'Instead, assign to `this.state` directly or define a `state = {};` ' + 'class property with the desired state in the %s component.', callerName, componentName);\n didWarnStateUpdateForUnmountedComponent[warningKey] = true;\n }\n}\n\n/**\n * This is the abstract API for an update queue.\n */\nvar ReactNoopUpdateQueue = {\n /**\n * Checks whether or not this composite component is mounted.\n * @param {ReactClass} publicInstance The instance we want to test.\n * @return {boolean} True if mounted, false otherwise.\n * @protected\n * @final\n */\n isMounted: function (publicInstance) {\n return false;\n },\n\n /**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {?function} callback Called after component is updated.\n * @param {?string} callerName name of the calling function in the public API.\n * @internal\n */\n enqueueForceUpdate: function (publicInstance, callback, callerName) {\n warnNoop(publicInstance, 'forceUpdate');\n },\n\n /**\n * Replaces all of the state. Always use this or `setState` to mutate state.\n * You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} completeState Next state.\n * @param {?function} callback Called after component is updated.\n * @param {?string} callerName name of the calling function in the public API.\n * @internal\n */\n enqueueReplaceState: function (publicInstance, completeState, callback, callerName) {\n warnNoop(publicInstance, 'replaceState');\n },\n\n /**\n * Sets a subset of the state. This only exists because _pendingState is\n * internal. This provides a merging strategy that is not available to deep\n * properties which is confusing. TODO: Expose pendingState or don't use it\n * during the merge.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} partialState Next partial state to be merged with state.\n * @param {?function} callback Called after component is updated.\n * @param {?string} Name of the calling function in the public API.\n * @internal\n */\n enqueueSetState: function (publicInstance, partialState, callback, callerName) {\n warnNoop(publicInstance, 'setState');\n }\n};\n\nvar emptyObject = {};\n{\n Object.freeze(emptyObject);\n}\n\n/**\n * Base class helpers for the updating state of a component.\n */\nfunction Component(props, context, updater) {\n this.props = props;\n this.context = context;\n // If a component has string refs, we will assign a different object later.\n this.refs = emptyObject;\n // We initialize the default updater but the real one gets injected by the\n // renderer.\n this.updater = updater || ReactNoopUpdateQueue;\n}\n\nComponent.prototype.isReactComponent = {};\n\n/**\n * Sets a subset of the state. Always use this to mutate\n * state. You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * There is no guarantee that calls to `setState` will run synchronously,\n * as they may eventually be batched together. You can provide an optional\n * callback that will be executed when the call to setState is actually\n * completed.\n *\n * When a function is provided to setState, it will be called at some point in\n * the future (not synchronously). It will be called with the up to date\n * component arguments (state, props, context). These values can be different\n * from this.* because your function may be called after receiveProps but before\n * shouldComponentUpdate, and this new state, props, and context will not yet be\n * assigned to this.\n *\n * @param {object|function} partialState Next partial state or function to\n * produce next partial state to be merged with current state.\n * @param {?function} callback Called after state is updated.\n * @final\n * @protected\n */\nComponent.prototype.setState = function (partialState, callback) {\n !(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null) ? invariant(false, 'setState(...): takes an object of state variables to update or a function which returns an object of state variables.') : void 0;\n this.updater.enqueueSetState(this, partialState, callback, 'setState');\n};\n\n/**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {?function} callback Called after update is complete.\n * @final\n * @protected\n */\nComponent.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this, callback, 'forceUpdate');\n};\n\n/**\n * Deprecated APIs. These APIs used to exist on classic React classes but since\n * we would like to deprecate them, we're not going to move them over to this\n * modern base class. Instead, we define a getter that warns if it's accessed.\n */\n{\n var deprecatedAPIs = {\n isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],\n replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).']\n };\n var defineDeprecationWarning = function (methodName, info) {\n Object.defineProperty(Component.prototype, methodName, {\n get: function () {\n lowPriorityWarning$1(false, '%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]);\n return undefined;\n }\n });\n };\n for (var fnName in deprecatedAPIs) {\n if (deprecatedAPIs.hasOwnProperty(fnName)) {\n defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\n }\n }\n}\n\nfunction ComponentDummy() {}\nComponentDummy.prototype = Component.prototype;\n\n/**\n * Convenience component with default shallow equality check for sCU.\n */\nfunction PureComponent(props, context, updater) {\n this.props = props;\n this.context = context;\n // If a component has string refs, we will assign a different object later.\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\n\nvar pureComponentPrototype = PureComponent.prototype = new ComponentDummy();\npureComponentPrototype.constructor = PureComponent;\n// Avoid an extra prototype jump for these methods.\n_assign(pureComponentPrototype, Component.prototype);\npureComponentPrototype.isPureReactComponent = true;\n\n// an immutable object with a single mutable value\nfunction createRef() {\n var refObject = {\n current: null\n };\n {\n Object.seal(refObject);\n }\n return refObject;\n}\n\n/**\n * Keeps track of the current dispatcher.\n */\nvar ReactCurrentDispatcher = {\n /**\n * @internal\n * @type {ReactComponent}\n */\n current: null\n};\n\n/**\n * Keeps track of the current owner.\n *\n * The current owner is the component who should own any components that are\n * currently being constructed.\n */\nvar ReactCurrentOwner = {\n /**\n * @internal\n * @type {ReactComponent}\n */\n current: null\n};\n\nvar BEFORE_SLASH_RE = /^(.*)[\\\\\\/]/;\n\nvar describeComponentFrame = function (name, source, ownerName) {\n var sourceInfo = '';\n if (source) {\n var path = source.fileName;\n var fileName = path.replace(BEFORE_SLASH_RE, '');\n {\n // In DEV, include code for a common special case:\n // prefer \"folder/index.js\" instead of just \"index.js\".\n if (/^index\\./.test(fileName)) {\n var match = path.match(BEFORE_SLASH_RE);\n if (match) {\n var pathBeforeSlash = match[1];\n if (pathBeforeSlash) {\n var folderName = pathBeforeSlash.replace(BEFORE_SLASH_RE, '');\n fileName = folderName + '/' + fileName;\n }\n }\n }\n }\n sourceInfo = ' (at ' + fileName + ':' + source.lineNumber + ')';\n } else if (ownerName) {\n sourceInfo = ' (created by ' + ownerName + ')';\n }\n return '\\n in ' + (name || 'Unknown') + sourceInfo;\n};\n\nvar Resolved = 1;\n\n\nfunction refineResolvedLazyComponent(lazyComponent) {\n return lazyComponent._status === Resolved ? lazyComponent._result : null;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var functionName = innerType.displayName || innerType.name || '';\n return outerType.displayName || (functionName !== '' ? wrapperName + '(' + functionName + ')' : wrapperName);\n}\n\nfunction getComponentName(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n {\n if (typeof type.tag === 'number') {\n warningWithoutStack$1(false, 'Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n if (typeof type === 'function') {\n return type.displayName || type.name || null;\n }\n if (typeof type === 'string') {\n return type;\n }\n switch (type) {\n case REACT_CONCURRENT_MODE_TYPE:\n return 'ConcurrentMode';\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n case REACT_PORTAL_TYPE:\n return 'Portal';\n case REACT_PROFILER_TYPE:\n return 'Profiler';\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n }\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n return 'Context.Consumer';\n case REACT_PROVIDER_TYPE:\n return 'Context.Provider';\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n case REACT_MEMO_TYPE:\n return getComponentName(type.type);\n case REACT_LAZY_TYPE:\n {\n var thenable = type;\n var resolvedThenable = refineResolvedLazyComponent(thenable);\n if (resolvedThenable) {\n return getComponentName(resolvedThenable);\n }\n }\n }\n }\n return null;\n}\n\nvar ReactDebugCurrentFrame = {};\n\nvar currentlyValidatingElement = null;\n\nfunction setCurrentlyValidatingElement(element) {\n {\n currentlyValidatingElement = element;\n }\n}\n\n{\n // Stack implementation injected by the current renderer.\n ReactDebugCurrentFrame.getCurrentStack = null;\n\n ReactDebugCurrentFrame.getStackAddendum = function () {\n var stack = '';\n\n // Add an extra top frame while an element is being validated\n if (currentlyValidatingElement) {\n var name = getComponentName(currentlyValidatingElement.type);\n var owner = currentlyValidatingElement._owner;\n stack += describeComponentFrame(name, currentlyValidatingElement._source, owner && getComponentName(owner.type));\n }\n\n // Delegate to the injected renderer-specific implementation\n var impl = ReactDebugCurrentFrame.getCurrentStack;\n if (impl) {\n stack += impl() || '';\n }\n\n return stack;\n };\n}\n\nvar ReactSharedInternals = {\n ReactCurrentDispatcher: ReactCurrentDispatcher,\n ReactCurrentOwner: ReactCurrentOwner,\n // Used by renderers to avoid bundling object-assign twice in UMD bundles:\n assign: _assign\n};\n\n{\n _assign(ReactSharedInternals, {\n // These should not be included in production.\n ReactDebugCurrentFrame: ReactDebugCurrentFrame,\n // Shim for React DOM 16.0.0 which still destructured (but not used) this.\n // TODO: remove in React 17.0.\n ReactComponentTreeHook: {}\n });\n}\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = warningWithoutStack$1;\n\n{\n warning = function (condition, format) {\n if (condition) {\n return;\n }\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n // eslint-disable-next-line react-internal/warning-and-invariant-args\n\n for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n warningWithoutStack$1.apply(undefined, [false, format + '%s'].concat(args, [stack]));\n };\n}\n\nvar warning$1 = warning;\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar RESERVED_PROPS = {\n key: true,\n ref: true,\n __self: true,\n __source: true\n};\n\nvar specialPropKeyWarningShown = void 0;\nvar specialPropRefWarningShown = void 0;\n\nfunction hasValidRef(config) {\n {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n return config.key !== undefined;\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n var warnAboutAccessingKey = function () {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n warningWithoutStack$1(false, '%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName);\n }\n };\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n var warnAboutAccessingRef = function () {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n warningWithoutStack$1(false, '%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName);\n }\n };\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n}\n\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, no instanceof check\n * will work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} key\n * @param {string|object} ref\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @param {*} owner\n * @param {*} props\n * @internal\n */\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n var element = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n\n // Record the component responsible for creating this element.\n _owner: owner\n };\n\n {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {};\n\n // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n });\n // self and source are DEV only properties.\n Object.defineProperty(element, '_self', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: self\n });\n // Two elements created in two different places should be considered\n // equal for testing purposes and therefore we hide it from enumeration.\n Object.defineProperty(element, '_source', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: source\n });\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n\n return element;\n};\n\n/**\n * Create and return a new ReactElement of the given type.\n * See https://reactjs.org/docs/react-api.html#createelement\n */\nfunction createElement(type, config, children) {\n var propName = void 0;\n\n // Reserved names are extracted\n var props = {};\n\n var key = null;\n var ref = null;\n var self = null;\n var source = null;\n\n if (config != null) {\n if (hasValidRef(config)) {\n ref = config.ref;\n }\n if (hasValidKey(config)) {\n key = '' + config.key;\n }\n\n self = config.__self === undefined ? null : config.__self;\n source = config.__source === undefined ? null : config.__source;\n // Remaining properties are added to a new props object\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n }\n }\n\n // Children can be more than one argument, and those are transferred onto\n // the newly allocated props object.\n var childrenLength = arguments.length - 2;\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = Array(childrenLength);\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 2];\n }\n {\n if (Object.freeze) {\n Object.freeze(childArray);\n }\n }\n props.children = childArray;\n }\n\n // Resolve default props\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n {\n if (key || ref) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n }\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n}\n\n/**\n * Return a function that produces ReactElements of a given type.\n * See https://reactjs.org/docs/react-api.html#createfactory\n */\n\n\nfunction cloneAndReplaceKey(oldElement, newKey) {\n var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);\n\n return newElement;\n}\n\n/**\n * Clone and return a new ReactElement using element as the starting point.\n * See https://reactjs.org/docs/react-api.html#cloneelement\n */\nfunction cloneElement(element, config, children) {\n !!(element === null || element === undefined) ? invariant(false, 'React.cloneElement(...): The argument must be a React element, but you passed %s.', element) : void 0;\n\n var propName = void 0;\n\n // Original props are copied\n var props = _assign({}, element.props);\n\n // Reserved names are extracted\n var key = element.key;\n var ref = element.ref;\n // Self is preserved since the owner is preserved.\n var self = element._self;\n // Source is preserved since cloneElement is unlikely to be targeted by a\n // transpiler, and the original source is probably a better indicator of the\n // true owner.\n var source = element._source;\n\n // Owner will be preserved, unless ref is overridden\n var owner = element._owner;\n\n if (config != null) {\n if (hasValidRef(config)) {\n // Silently steal the ref from the parent.\n ref = config.ref;\n owner = ReactCurrentOwner.current;\n }\n if (hasValidKey(config)) {\n key = '' + config.key;\n }\n\n // Remaining properties override existing props\n var defaultProps = void 0;\n if (element.type && element.type.defaultProps) {\n defaultProps = element.type.defaultProps;\n }\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n if (config[propName] === undefined && defaultProps !== undefined) {\n // Resolve default props\n props[propName] = defaultProps[propName];\n } else {\n props[propName] = config[propName];\n }\n }\n }\n }\n\n // Children can be more than one argument, and those are transferred onto\n // the newly allocated props object.\n var childrenLength = arguments.length - 2;\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = Array(childrenLength);\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 2];\n }\n props.children = childArray;\n }\n\n return ReactElement(element.type, key, ref, self, source, owner, props);\n}\n\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\nfunction isValidElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\n\nvar SEPARATOR = '.';\nvar SUBSEPARATOR = ':';\n\n/**\n * Escape and wrap key so it is safe to use as a reactid\n *\n * @param {string} key to be escaped.\n * @return {string} the escaped key.\n */\nfunction escape(key) {\n var escapeRegex = /[=:]/g;\n var escaperLookup = {\n '=': '=0',\n ':': '=2'\n };\n var escapedString = ('' + key).replace(escapeRegex, function (match) {\n return escaperLookup[match];\n });\n\n return '$' + escapedString;\n}\n\n/**\n * TODO: Test that a single child and an array with one item have the same key\n * pattern.\n */\n\nvar didWarnAboutMaps = false;\n\nvar userProvidedKeyEscapeRegex = /\\/+/g;\nfunction escapeUserProvidedKey(text) {\n return ('' + text).replace(userProvidedKeyEscapeRegex, '$&/');\n}\n\nvar POOL_SIZE = 10;\nvar traverseContextPool = [];\nfunction getPooledTraverseContext(mapResult, keyPrefix, mapFunction, mapContext) {\n if (traverseContextPool.length) {\n var traverseContext = traverseContextPool.pop();\n traverseContext.result = mapResult;\n traverseContext.keyPrefix = keyPrefix;\n traverseContext.func = mapFunction;\n traverseContext.context = mapContext;\n traverseContext.count = 0;\n return traverseContext;\n } else {\n return {\n result: mapResult,\n keyPrefix: keyPrefix,\n func: mapFunction,\n context: mapContext,\n count: 0\n };\n }\n}\n\nfunction releaseTraverseContext(traverseContext) {\n traverseContext.result = null;\n traverseContext.keyPrefix = null;\n traverseContext.func = null;\n traverseContext.context = null;\n traverseContext.count = 0;\n if (traverseContextPool.length < POOL_SIZE) {\n traverseContextPool.push(traverseContext);\n }\n}\n\n/**\n * @param {?*} children Children tree container.\n * @param {!string} nameSoFar Name of the key path so far.\n * @param {!function} callback Callback to invoke with each child found.\n * @param {?*} traverseContext Used to pass information throughout the traversal\n * process.\n * @return {!number} The number of children in this subtree.\n */\nfunction traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) {\n var type = typeof children;\n\n if (type === 'undefined' || type === 'boolean') {\n // All of the above are perceived as null.\n children = null;\n }\n\n var invokeCallback = false;\n\n if (children === null) {\n invokeCallback = true;\n } else {\n switch (type) {\n case 'string':\n case 'number':\n invokeCallback = true;\n break;\n case 'object':\n switch (children.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n invokeCallback = true;\n }\n }\n }\n\n if (invokeCallback) {\n callback(traverseContext, children,\n // If it's the only child, treat the name as if it was wrapped in an array\n // so that it's consistent if the number of children grows.\n nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar);\n return 1;\n }\n\n var child = void 0;\n var nextName = void 0;\n var subtreeCount = 0; // Count of children found in the current subtree.\n var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;\n\n if (Array.isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n nextName = nextNamePrefix + getComponentKey(child, i);\n subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n }\n } else {\n var iteratorFn = getIteratorFn(children);\n if (typeof iteratorFn === 'function') {\n {\n // Warn about using Maps as children\n if (iteratorFn === children.entries) {\n !didWarnAboutMaps ? warning$1(false, 'Using Maps as children is unsupported and will likely yield ' + 'unexpected results. Convert it to a sequence/iterable of keyed ' + 'ReactElements instead.') : void 0;\n didWarnAboutMaps = true;\n }\n }\n\n var iterator = iteratorFn.call(children);\n var step = void 0;\n var ii = 0;\n while (!(step = iterator.next()).done) {\n child = step.value;\n nextName = nextNamePrefix + getComponentKey(child, ii++);\n subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n }\n } else if (type === 'object') {\n var addendum = '';\n {\n addendum = ' If you meant to render a collection of children, use an array ' + 'instead.' + ReactDebugCurrentFrame.getStackAddendum();\n }\n var childrenString = '' + children;\n invariant(false, 'Objects are not valid as a React child (found: %s).%s', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum);\n }\n }\n\n return subtreeCount;\n}\n\n/**\n * Traverses children that are typically specified as `props.children`, but\n * might also be specified through attributes:\n *\n * - `traverseAllChildren(this.props.children, ...)`\n * - `traverseAllChildren(this.props.leftPanelChildren, ...)`\n *\n * The `traverseContext` is an optional argument that is passed through the\n * entire traversal. It can be used to store accumulations or anything else that\n * the callback might find relevant.\n *\n * @param {?*} children Children tree object.\n * @param {!function} callback To invoke upon traversing each child.\n * @param {?*} traverseContext Context for traversal.\n * @return {!number} The number of children in this subtree.\n */\nfunction traverseAllChildren(children, callback, traverseContext) {\n if (children == null) {\n return 0;\n }\n\n return traverseAllChildrenImpl(children, '', callback, traverseContext);\n}\n\n/**\n * Generate a key string that identifies a component within a set.\n *\n * @param {*} component A component that could contain a manual key.\n * @param {number} index Index that is used if a manual key is not provided.\n * @return {string}\n */\nfunction getComponentKey(component, index) {\n // Do some typechecking here since we call this blindly. We want to ensure\n // that we don't block potential future ES APIs.\n if (typeof component === 'object' && component !== null && component.key != null) {\n // Explicit key\n return escape(component.key);\n }\n // Implicit key determined by the index in the set\n return index.toString(36);\n}\n\nfunction forEachSingleChild(bookKeeping, child, name) {\n var func = bookKeeping.func,\n context = bookKeeping.context;\n\n func.call(context, child, bookKeeping.count++);\n}\n\n/**\n * Iterates through children that are typically specified as `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrenforeach\n *\n * The provided forEachFunc(child, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} forEachFunc\n * @param {*} forEachContext Context for forEachContext.\n */\nfunction forEachChildren(children, forEachFunc, forEachContext) {\n if (children == null) {\n return children;\n }\n var traverseContext = getPooledTraverseContext(null, null, forEachFunc, forEachContext);\n traverseAllChildren(children, forEachSingleChild, traverseContext);\n releaseTraverseContext(traverseContext);\n}\n\nfunction mapSingleChildIntoContext(bookKeeping, child, childKey) {\n var result = bookKeeping.result,\n keyPrefix = bookKeeping.keyPrefix,\n func = bookKeeping.func,\n context = bookKeeping.context;\n\n\n var mappedChild = func.call(context, child, bookKeeping.count++);\n if (Array.isArray(mappedChild)) {\n mapIntoWithKeyPrefixInternal(mappedChild, result, childKey, function (c) {\n return c;\n });\n } else if (mappedChild != null) {\n if (isValidElement(mappedChild)) {\n mappedChild = cloneAndReplaceKey(mappedChild,\n // Keep both the (mapped) and old keys if they differ, just as\n // traverseAllChildren used to do for objects as children\n keyPrefix + (mappedChild.key && (!child || child.key !== mappedChild.key) ? escapeUserProvidedKey(mappedChild.key) + '/' : '') + childKey);\n }\n result.push(mappedChild);\n }\n}\n\nfunction mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) {\n var escapedPrefix = '';\n if (prefix != null) {\n escapedPrefix = escapeUserProvidedKey(prefix) + '/';\n }\n var traverseContext = getPooledTraverseContext(array, escapedPrefix, func, context);\n traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);\n releaseTraverseContext(traverseContext);\n}\n\n/**\n * Maps children that are typically specified as `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrenmap\n *\n * The provided mapFunction(child, key, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} func The map function.\n * @param {*} context Context for mapFunction.\n * @return {object} Object containing the ordered map of results.\n */\nfunction mapChildren(children, func, context) {\n if (children == null) {\n return children;\n }\n var result = [];\n mapIntoWithKeyPrefixInternal(children, result, null, func, context);\n return result;\n}\n\n/**\n * Count the number of children that are typically specified as\n * `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrencount\n *\n * @param {?*} children Children tree container.\n * @return {number} The number of children.\n */\nfunction countChildren(children) {\n return traverseAllChildren(children, function () {\n return null;\n }, null);\n}\n\n/**\n * Flatten a children object (typically specified as `props.children`) and\n * return an array with appropriately re-keyed children.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrentoarray\n */\nfunction toArray(children) {\n var result = [];\n mapIntoWithKeyPrefixInternal(children, result, null, function (child) {\n return child;\n });\n return result;\n}\n\n/**\n * Returns the first child in a collection of children and verifies that there\n * is only one child in the collection.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrenonly\n *\n * The current implementation of this function assumes that a single child gets\n * passed without a wrapper, but the purpose of this helper function is to\n * abstract away the particular structure of children.\n *\n * @param {?object} children Child collection structure.\n * @return {ReactElement} The first and only `ReactElement` contained in the\n * structure.\n */\nfunction onlyChild(children) {\n !isValidElement(children) ? invariant(false, 'React.Children.only expected to receive a single React element child.') : void 0;\n return children;\n}\n\nfunction createContext(defaultValue, calculateChangedBits) {\n if (calculateChangedBits === undefined) {\n calculateChangedBits = null;\n } else {\n {\n !(calculateChangedBits === null || typeof calculateChangedBits === 'function') ? warningWithoutStack$1(false, 'createContext: Expected the optional second argument to be a ' + 'function. Instead received: %s', calculateChangedBits) : void 0;\n }\n }\n\n var context = {\n $$typeof: REACT_CONTEXT_TYPE,\n _calculateChangedBits: calculateChangedBits,\n // As a workaround to support multiple concurrent renderers, we categorize\n // some renderers as primary and others as secondary. We only expect\n // there to be two concurrent renderers at most: React Native (primary) and\n // Fabric (secondary); React DOM (primary) and React ART (secondary).\n // Secondary renderers store their context values on separate fields.\n _currentValue: defaultValue,\n _currentValue2: defaultValue,\n // Used to track how many concurrent renderers this context currently\n // supports within in a single renderer. Such as parallel server rendering.\n _threadCount: 0,\n // These are circular\n Provider: null,\n Consumer: null\n };\n\n context.Provider = {\n $$typeof: REACT_PROVIDER_TYPE,\n _context: context\n };\n\n var hasWarnedAboutUsingNestedContextConsumers = false;\n var hasWarnedAboutUsingConsumerProvider = false;\n\n {\n // A separate object, but proxies back to the original context object for\n // backwards compatibility. It has a different $$typeof, so we can properly\n // warn for the incorrect usage of Context as a Consumer.\n var Consumer = {\n $$typeof: REACT_CONTEXT_TYPE,\n _context: context,\n _calculateChangedBits: context._calculateChangedBits\n };\n // $FlowFixMe: Flow complains about not setting a value, which is intentional here\n Object.defineProperties(Consumer, {\n Provider: {\n get: function () {\n if (!hasWarnedAboutUsingConsumerProvider) {\n hasWarnedAboutUsingConsumerProvider = true;\n warning$1(false, 'Rendering <Context.Consumer.Provider> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Provider> instead?');\n }\n return context.Provider;\n },\n set: function (_Provider) {\n context.Provider = _Provider;\n }\n },\n _currentValue: {\n get: function () {\n return context._currentValue;\n },\n set: function (_currentValue) {\n context._currentValue = _currentValue;\n }\n },\n _currentValue2: {\n get: function () {\n return context._currentValue2;\n },\n set: function (_currentValue2) {\n context._currentValue2 = _currentValue2;\n }\n },\n _threadCount: {\n get: function () {\n return context._threadCount;\n },\n set: function (_threadCount) {\n context._threadCount = _threadCount;\n }\n },\n Consumer: {\n get: function () {\n if (!hasWarnedAboutUsingNestedContextConsumers) {\n hasWarnedAboutUsingNestedContextConsumers = true;\n warning$1(false, 'Rendering <Context.Consumer.Consumer> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Consumer> instead?');\n }\n return context.Consumer;\n }\n }\n });\n // $FlowFixMe: Flow complains about missing properties because it doesn't understand defineProperty\n context.Consumer = Consumer;\n }\n\n {\n context._currentRenderer = null;\n context._currentRenderer2 = null;\n }\n\n return context;\n}\n\nfunction lazy(ctor) {\n var lazyType = {\n $$typeof: REACT_LAZY_TYPE,\n _ctor: ctor,\n // React uses these fields to store the result.\n _status: -1,\n _result: null\n };\n\n {\n // In production, this would just set it on the object.\n var defaultProps = void 0;\n var propTypes = void 0;\n Object.defineProperties(lazyType, {\n defaultProps: {\n configurable: true,\n get: function () {\n return defaultProps;\n },\n set: function (newDefaultProps) {\n warning$1(false, 'React.lazy(...): It is not supported to assign `defaultProps` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');\n defaultProps = newDefaultProps;\n // Match production behavior more closely:\n Object.defineProperty(lazyType, 'defaultProps', {\n enumerable: true\n });\n }\n },\n propTypes: {\n configurable: true,\n get: function () {\n return propTypes;\n },\n set: function (newPropTypes) {\n warning$1(false, 'React.lazy(...): It is not supported to assign `propTypes` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');\n propTypes = newPropTypes;\n // Match production behavior more closely:\n Object.defineProperty(lazyType, 'propTypes', {\n enumerable: true\n });\n }\n }\n });\n }\n\n return lazyType;\n}\n\nfunction forwardRef(render) {\n {\n if (render != null && render.$$typeof === REACT_MEMO_TYPE) {\n warningWithoutStack$1(false, 'forwardRef requires a render function but received a `memo` ' + 'component. Instead of forwardRef(memo(...)), use ' + 'memo(forwardRef(...)).');\n } else if (typeof render !== 'function') {\n warningWithoutStack$1(false, 'forwardRef requires a render function but was given %s.', render === null ? 'null' : typeof render);\n } else {\n !(\n // Do not warn for 0 arguments because it could be due to usage of the 'arguments' object\n render.length === 0 || render.length === 2) ? warningWithoutStack$1(false, 'forwardRef render functions accept exactly two parameters: props and ref. %s', render.length === 1 ? 'Did you forget to use the ref parameter?' : 'Any additional parameter will be undefined.') : void 0;\n }\n\n if (render != null) {\n !(render.defaultProps == null && render.propTypes == null) ? warningWithoutStack$1(false, 'forwardRef render functions do not support propTypes or defaultProps. ' + 'Did you accidentally pass a React component?') : void 0;\n }\n }\n\n return {\n $$typeof: REACT_FORWARD_REF_TYPE,\n render: render\n };\n}\n\nfunction isValidElementType(type) {\n return typeof type === 'string' || typeof type === 'function' ||\n // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE);\n}\n\nfunction memo(type, compare) {\n {\n if (!isValidElementType(type)) {\n warningWithoutStack$1(false, 'memo: The first argument must be a component. Instead ' + 'received: %s', type === null ? 'null' : typeof type);\n }\n }\n return {\n $$typeof: REACT_MEMO_TYPE,\n type: type,\n compare: compare === undefined ? null : compare\n };\n}\n\nfunction resolveDispatcher() {\n var dispatcher = ReactCurrentDispatcher.current;\n !(dispatcher !== null) ? invariant(false, 'Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://fb.me/react-invalid-hook-call for tips about how to debug and fix this problem.') : void 0;\n return dispatcher;\n}\n\nfunction useContext(Context, unstable_observedBits) {\n var dispatcher = resolveDispatcher();\n {\n !(unstable_observedBits === undefined) ? warning$1(false, 'useContext() second argument is reserved for future ' + 'use in React. Passing it is not supported. ' + 'You passed: %s.%s', unstable_observedBits, typeof unstable_observedBits === 'number' && Array.isArray(arguments[2]) ? '\\n\\nDid you call array.map(useContext)? ' + 'Calling Hooks inside a loop is not supported. ' + 'Learn more at https://fb.me/rules-of-hooks' : '') : void 0;\n\n // TODO: add a more generic warning for invalid values.\n if (Context._context !== undefined) {\n var realContext = Context._context;\n // Don't deduplicate because this legitimately causes bugs\n // and nobody should be using this in existing code.\n if (realContext.Consumer === Context) {\n warning$1(false, 'Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be ' + 'removed in a future major release. Did you mean to call useContext(Context) instead?');\n } else if (realContext.Provider === Context) {\n warning$1(false, 'Calling useContext(Context.Provider) is not supported. ' + 'Did you mean to call useContext(Context) instead?');\n }\n }\n }\n return dispatcher.useContext(Context, unstable_observedBits);\n}\n\nfunction useState(initialState) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useState(initialState);\n}\n\nfunction useReducer(reducer, initialArg, init) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useReducer(reducer, initialArg, init);\n}\n\nfunction useRef(initialValue) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useRef(initialValue);\n}\n\nfunction useEffect(create, inputs) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useEffect(create, inputs);\n}\n\nfunction useLayoutEffect(create, inputs) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useLayoutEffect(create, inputs);\n}\n\nfunction useCallback(callback, inputs) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useCallback(callback, inputs);\n}\n\nfunction useMemo(create, inputs) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useMemo(create, inputs);\n}\n\nfunction useImperativeHandle(ref, create, inputs) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useImperativeHandle(ref, create, inputs);\n}\n\nfunction useDebugValue(value, formatterFn) {\n {\n var dispatcher = resolveDispatcher();\n return dispatcher.useDebugValue(value, formatterFn);\n }\n}\n\n/**\n * ReactElementValidator provides a wrapper around a element factory\n * which validates the props passed to the element. This is intended to be\n * used only in DEV and could be replaced by a static type checker for languages\n * that support it.\n */\n\nvar propTypesMisspellWarningShown = void 0;\n\n{\n propTypesMisspellWarningShown = false;\n}\n\nfunction getDeclarationErrorAddendum() {\n if (ReactCurrentOwner.current) {\n var name = getComponentName(ReactCurrentOwner.current.type);\n if (name) {\n return '\\n\\nCheck the render method of `' + name + '`.';\n }\n }\n return '';\n}\n\nfunction getSourceInfoErrorAddendum(elementProps) {\n if (elementProps !== null && elementProps !== undefined && elementProps.__source !== undefined) {\n var source = elementProps.__source;\n var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n var lineNumber = source.lineNumber;\n return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n }\n return '';\n}\n\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n var info = getDeclarationErrorAddendum();\n\n if (!info) {\n var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n if (parentName) {\n info = '\\n\\nCheck the top-level render call using <' + parentName + '>.';\n }\n }\n return info;\n}\n\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\nfunction validateExplicitKey(element, parentType) {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n element._store.validated = true;\n\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true;\n\n // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n var childOwner = '';\n if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\n // Give the component that originally created this child.\n childOwner = ' It was passed a child from ' + getComponentName(element._owner.type) + '.';\n }\n\n setCurrentlyValidatingElement(element);\n {\n warning$1(false, 'Each child in a list should have a unique \"key\" prop.' + '%s%s See https://fb.me/react-warning-keys for more information.', currentComponentErrorInfo, childOwner);\n }\n setCurrentlyValidatingElement(null);\n}\n\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\nfunction validateChildKeys(node, parentType) {\n if (typeof node !== 'object') {\n return;\n }\n if (Array.isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n if (isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else if (node) {\n var iteratorFn = getIteratorFn(node);\n if (typeof iteratorFn === 'function') {\n // Entry iterators used to provide implicit keys,\n // but now we print a separate warning for them later.\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step = void 0;\n while (!(step = iterator.next()).done) {\n if (isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n}\n\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\nfunction validatePropTypes(element) {\n var type = element.type;\n if (type === null || type === undefined || typeof type === 'string') {\n return;\n }\n var name = getComponentName(type);\n var propTypes = void 0;\n if (typeof type === 'function') {\n propTypes = type.propTypes;\n } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE ||\n // Note: Memo only checks outer props here.\n // Inner props are checked in the reconciler.\n type.$$typeof === REACT_MEMO_TYPE)) {\n propTypes = type.propTypes;\n } else {\n return;\n }\n if (propTypes) {\n setCurrentlyValidatingElement(element);\n checkPropTypes(propTypes, element.props, 'prop', name, ReactDebugCurrentFrame.getStackAddendum);\n setCurrentlyValidatingElement(null);\n } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n propTypesMisspellWarningShown = true;\n warningWithoutStack$1(false, 'Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', name || 'Unknown');\n }\n if (typeof type.getDefaultProps === 'function') {\n !type.getDefaultProps.isReactClassApproved ? warningWithoutStack$1(false, 'getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.') : void 0;\n }\n}\n\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\nfunction validateFragmentProps(fragment) {\n setCurrentlyValidatingElement(fragment);\n\n var keys = Object.keys(fragment.props);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (key !== 'children' && key !== 'key') {\n warning$1(false, 'Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n break;\n }\n }\n\n if (fragment.ref !== null) {\n warning$1(false, 'Invalid attribute `ref` supplied to `React.Fragment`.');\n }\n\n setCurrentlyValidatingElement(null);\n}\n\nfunction createElementWithValidation(type, props, children) {\n var validType = isValidElementType(type);\n\n // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n if (!validType) {\n var info = '';\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n }\n\n var sourceInfo = getSourceInfoErrorAddendum(props);\n if (sourceInfo) {\n info += sourceInfo;\n } else {\n info += getDeclarationErrorAddendum();\n }\n\n var typeString = void 0;\n if (type === null) {\n typeString = 'null';\n } else if (Array.isArray(type)) {\n typeString = 'array';\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n typeString = '<' + (getComponentName(type.type) || 'Unknown') + ' />';\n info = ' Did you accidentally export a JSX literal instead of a component?';\n } else {\n typeString = typeof type;\n }\n\n warning$1(false, 'React.createElement: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n }\n\n var element = createElement.apply(this, arguments);\n\n // The result can be nullish if a mock or a custom function is used.\n // TODO: Drop this when these are no longer allowed as the type argument.\n if (element == null) {\n return element;\n }\n\n // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing errors.\n // We don't want exception behavior to differ between dev and prod.\n // (Rendering will throw with a helpful message and as soon as the type is\n // fixed, the key warnings will appear.)\n if (validType) {\n for (var i = 2; i < arguments.length; i++) {\n validateChildKeys(arguments[i], type);\n }\n }\n\n if (type === REACT_FRAGMENT_TYPE) {\n validateFragmentProps(element);\n } else {\n validatePropTypes(element);\n }\n\n return element;\n}\n\nfunction createFactoryWithValidation(type) {\n var validatedFactory = createElementWithValidation.bind(null, type);\n validatedFactory.type = type;\n // Legacy hook: remove it\n {\n Object.defineProperty(validatedFactory, 'type', {\n enumerable: false,\n get: function () {\n lowPriorityWarning$1(false, 'Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.');\n Object.defineProperty(this, 'type', {\n value: type\n });\n return type;\n }\n });\n }\n\n return validatedFactory;\n}\n\nfunction cloneElementWithValidation(element, props, children) {\n var newElement = cloneElement.apply(this, arguments);\n for (var i = 2; i < arguments.length; i++) {\n validateChildKeys(arguments[i], newElement.type);\n }\n validatePropTypes(newElement);\n return newElement;\n}\n\n// Helps identify side effects in begin-phase lifecycle hooks and setState reducers:\n\n\n// In some cases, StrictMode should also double-render lifecycles.\n// This can be confusing for tests though,\n// And it can be bad for performance in production.\n// This feature flag can be used to control the behavior:\n\n\n// To preserve the \"Pause on caught exceptions\" behavior of the debugger, we\n// replay the begin phase of a failed component inside invokeGuardedCallback.\n\n\n// Warn about deprecated, async-unsafe lifecycles; relates to RFC #6:\n\n\n// Gather advanced timing metrics for Profiler subtrees.\n\n\n// Trace which interactions trigger each commit.\n\n\n// Only used in www builds.\n // TODO: true? Here it might just be false.\n\n// Only used in www builds.\n\n\n// Only used in www builds.\n\n\n// React Fire: prevent the value and checked attributes from syncing\n// with their related DOM properties\n\n\n// These APIs will no longer be \"unstable\" in the upcoming 16.7 release,\n// Control this behavior with a flag to support 16.6 minor releases in the meanwhile.\nvar enableStableConcurrentModeAPIs = false;\n\nvar React = {\n Children: {\n map: mapChildren,\n forEach: forEachChildren,\n count: countChildren,\n toArray: toArray,\n only: onlyChild\n },\n\n createRef: createRef,\n Component: Component,\n PureComponent: PureComponent,\n\n createContext: createContext,\n forwardRef: forwardRef,\n lazy: lazy,\n memo: memo,\n\n useCallback: useCallback,\n useContext: useContext,\n useEffect: useEffect,\n useImperativeHandle: useImperativeHandle,\n useDebugValue: useDebugValue,\n useLayoutEffect: useLayoutEffect,\n useMemo: useMemo,\n useReducer: useReducer,\n useRef: useRef,\n useState: useState,\n\n Fragment: REACT_FRAGMENT_TYPE,\n StrictMode: REACT_STRICT_MODE_TYPE,\n Suspense: REACT_SUSPENSE_TYPE,\n\n createElement: createElementWithValidation,\n cloneElement: cloneElementWithValidation,\n createFactory: createFactoryWithValidation,\n isValidElement: isValidElement,\n\n version: ReactVersion,\n\n unstable_ConcurrentMode: REACT_CONCURRENT_MODE_TYPE,\n unstable_Profiler: REACT_PROFILER_TYPE,\n\n __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: ReactSharedInternals\n};\n\n// Note: some APIs are added with feature flags.\n// Make sure that stable builds for open source\n// don't modify the React object to avoid deopts.\n// Also let's not expose their names in stable builds.\n\nif (enableStableConcurrentModeAPIs) {\n React.ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;\n React.Profiler = REACT_PROFILER_TYPE;\n React.unstable_ConcurrentMode = undefined;\n React.unstable_Profiler = undefined;\n}\n\n\n\nvar React$2 = Object.freeze({\n\tdefault: React\n});\n\nvar React$3 = ( React$2 && React ) || React$2;\n\n// TODO: decide on the top-level export form.\n// This is hacky but makes it work with both Rollup and Jest.\nvar react = React$3.default || React$3;\n\nmodule.exports = react;\n })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcz83MmQwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7Ozs7QUFJYixJQUFJLElBQXFDO0FBQ3pDO0FBQ0E7O0FBRUEsY0FBYyxtQkFBTyxDQUFDLGdGQUFlO0FBQ3JDLHFCQUFxQixtQkFBTyxDQUFDLDhFQUEyQjs7QUFFeEQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRDtBQUNyRCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHNGQUFzRixhQUFhO0FBQ25HO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRGQUE0RixlQUFlO0FBQzNHO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxzRkFBc0YsYUFBYTtBQUNuRztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscU9BQXFPO0FBQ3JPO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFdBQVc7QUFDeEIsY0FBYyxRQUFRO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxXQUFXO0FBQ3hCLGFBQWEsVUFBVTtBQUN2QixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxXQUFXO0FBQ3hCLGFBQWEsT0FBTztBQUNwQixhQUFhLFVBQVU7QUFDdkIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFdBQVc7QUFDeEIsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsVUFBVTtBQUN2QixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsc0ZBQXNGLGFBQWE7QUFDbkc7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7QUFD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O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsRUFBRTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsVUFBVTtBQUNyQixXQUFXLEVBQUU7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsaUJBQWlCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCLHNCQUFzQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7O0FBR0Esa0RBQWtEOzs7QUFHbEQ7OztBQUdBOzs7QUFHQTtBQUNBOztBQUVBOzs7QUFHQTs7O0FBR0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LmRldmVsb3BtZW50LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNi44LjZcbiAqIHJlYWN0LmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBfYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xudmFyIGNoZWNrUHJvcFR5cGVzID0gcmVxdWlyZSgncHJvcC10eXBlcy9jaGVja1Byb3BUeXBlcycpO1xuXG4vLyBUT0RPOiB0aGlzIGlzIHNwZWNpYWwgYmVjYXVzZSBpdCBnZXRzIGltcG9ydGVkIGR1cmluZyBidWlsZC5cblxudmFyIFJlYWN0VmVyc2lvbiA9ICcxNi44LjYnO1xuXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxudmFyIGhhc1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcjtcblxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSA6IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpIDogMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpIDogMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpIDogMHhlYWNjO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpIDogMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpIDogMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKSA6IDB4ZWFjZTtcblxudmFyIFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuY29uY3VycmVudF9tb2RlJykgOiAweGVhY2Y7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZvcndhcmRfcmVmJykgOiAweGVhZDA7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlJykgOiAweGVhZDE7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubWVtbycpIDogMHhlYWQzO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmxhenknKSA6IDB4ZWFkNDtcblxudmFyIE1BWUJFX0lURVJBVE9SX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLml0ZXJhdG9yO1xudmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InO1xuXG5mdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgaWYgKG1heWJlSXRlcmFibGUgPT09IG51bGwgfHwgdHlwZW9mIG1heWJlSXRlcmFibGUgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgdmFyIG1heWJlSXRlcmF0b3IgPSBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtNQVlCRV9JVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdO1xuICBpZiAodHlwZW9mIG1heWJlSXRlcmF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF5YmVJdGVyYXRvcjtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBVc2UgaW52YXJpYW50KCkgdG8gYXNzZXJ0IHN0YXRlIHdoaWNoIHlvdXIgcHJvZ3JhbSBhc3N1bWVzIHRvIGJlIHRydWUuXG4gKlxuICogUHJvdmlkZSBzcHJpbnRmLXN0eWxlIGZvcm1hdCAob25seSAlcyBpcyBzdXBwb3J0ZWQpIGFuZCBhcmd1bWVudHNcbiAqIHRvIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBicm9rZSBhbmQgd2hhdCB5b3Ugd2VyZVxuICogZXhwZWN0aW5nLlxuICpcbiAqIFRoZSBpbnZhcmlhbnQgbWVzc2FnZSB3aWxsIGJlIHN0cmlwcGVkIGluIHByb2R1Y3Rpb24sIGJ1dCB0aGUgaW52YXJpYW50XG4gKiB3aWxsIHJlbWFpbiB0byBlbnN1cmUgbG9naWMgZG9lcyBub3QgZGlmZmVyIGluIHByb2R1Y3Rpb24uXG4gKi9cblxudmFyIHZhbGlkYXRlRm9ybWF0ID0gZnVuY3Rpb24gKCkge307XG5cbntcbiAgdmFsaWRhdGVGb3JtYXQgPSBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFyaWFudCByZXF1aXJlcyBhbiBlcnJvciBtZXNzYWdlIGFyZ3VtZW50Jyk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBpbnZhcmlhbnQoY29uZGl0aW9uLCBmb3JtYXQsIGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgdmFsaWRhdGVGb3JtYXQoZm9ybWF0KTtcblxuICBpZiAoIWNvbmRpdGlvbikge1xuICAgIHZhciBlcnJvciA9IHZvaWQgMDtcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKCdNaW5pZmllZCBleGNlcHRpb24gb2NjdXJyZWQ7IHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCAnICsgJ2ZvciB0aGUgZnVsbCBlcnJvciBtZXNzYWdlIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBhcmdzID0gW2EsIGIsIGMsIGQsIGUsIGZdO1xuICAgICAgdmFyIGFyZ0luZGV4ID0gMDtcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBhcmdzW2FyZ0luZGV4KytdO1xuICAgICAgfSkpO1xuICAgICAgZXJyb3IubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICB9XG5cbiAgICBlcnJvci5mcmFtZXNUb1BvcCA9IDE7IC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgaW52YXJpYW50J3Mgb3duIGZyYW1lXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuLy8gUmVseWluZyBvbiB0aGUgYGludmFyaWFudCgpYCBpbXBsZW1lbnRhdGlvbiBsZXRzIHVzXG4vLyBwcmVzZXJ2ZSB0aGUgZm9ybWF0IGFuZCBwYXJhbXMgaW4gdGhlIHd3dyBidWlsZHMuXG5cbi8qKlxuICogRm9ya2VkIGZyb20gZmJqcy93YXJuaW5nOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2ZianMvYmxvYi9lNjZiYTIwYWQ1YmU0MzNlYjU0NDIzZjJiMDk3ZDgyOTMyNGQ5ZGU2L3BhY2thZ2VzL2ZianMvc3JjL19fZm9ya3NfXy93YXJuaW5nLmpzXG4gKlxuICogT25seSBjaGFuZ2UgaXMgd2UgdXNlIGNvbnNvbGUud2FybiBpbnN0ZWFkIG9mIGNvbnNvbGUuZXJyb3IsXG4gKiBhbmQgZG8gbm90aGluZyB3aGVuICdjb25zb2xlJyBpcyBub3Qgc3VwcG9ydGVkLlxuICogVGhpcyByZWFsbHkgc2ltcGxpZmllcyB0aGUgY29kZS5cbiAqIC0tLVxuICogU2ltaWxhciB0byBpbnZhcmlhbnQgYnV0IG9ubHkgbG9ncyBhIHdhcm5pbmcgaWYgdGhlIGNvbmRpdGlvbiBpcyBub3QgbWV0LlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBsb2cgaXNzdWVzIGluIGRldmVsb3BtZW50IGVudmlyb25tZW50cyBpbiBjcml0aWNhbFxuICogcGF0aHMuIFJlbW92aW5nIHRoZSBsb2dnaW5nIGNvZGUgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIHdpbGwga2VlcCB0aGVcbiAqIHNhbWUgbG9naWMgYW5kIGZvbGxvdyB0aGUgc2FtZSBjb2RlIHBhdGhzLlxuICovXG5cbnZhciBsb3dQcmlvcml0eVdhcm5pbmcgPSBmdW5jdGlvbiAoKSB7fTtcblxue1xuICB2YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIGFyZ0luZGV4ID0gMDtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBhcmdzW2FyZ0luZGV4KytdO1xuICAgIH0pO1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcblxuICBsb3dQcmlvcml0eVdhcm5pbmcgPSBmdW5jdGlvbiAoY29uZGl0aW9uLCBmb3JtYXQpIHtcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYGxvd1ByaW9yaXR5V2FybmluZyhjb25kaXRpb24sIGZvcm1hdCwgLi4uYXJncylgIHJlcXVpcmVzIGEgd2FybmluZyAnICsgJ21lc3NhZ2UgYXJndW1lbnQnKTtcbiAgICB9XG4gICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4yID4gMiA/IF9sZW4yIC0gMiA6IDApLCBfa2V5MiA9IDI7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5MiAtIDJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cblxuICAgICAgcHJpbnRXYXJuaW5nLmFwcGx5KHVuZGVmaW5lZCwgW2Zvcm1hdF0uY29uY2F0KGFyZ3MpKTtcbiAgICB9XG4gIH07XG59XG5cbnZhciBsb3dQcmlvcml0eVdhcm5pbmckMSA9IGxvd1ByaW9yaXR5V2FybmluZztcblxuLyoqXG4gKiBTaW1pbGFyIHRvIGludmFyaWFudCBidXQgb25seSBsb2dzIGEgd2FybmluZyBpZiB0aGUgY29uZGl0aW9uIGlzIG5vdCBtZXQuXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGxvZyBpc3N1ZXMgaW4gZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzIGluIGNyaXRpY2FsXG4gKiBwYXRocy4gUmVtb3ZpbmcgdGhlIGxvZ2dpbmcgY29kZSBmb3IgcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMgd2lsbCBrZWVwIHRoZVxuICogc2FtZSBsb2dpYyBhbmQgZm9sbG93IHRoZSBzYW1lIGNvZGUgcGF0aHMuXG4gKi9cblxudmFyIHdhcm5pbmdXaXRob3V0U3RhY2sgPSBmdW5jdGlvbiAoKSB7fTtcblxue1xuICB3YXJuaW5nV2l0aG91dFN0YWNrID0gZnVuY3Rpb24gKGNvbmRpdGlvbiwgZm9ybWF0KSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuID4gMiA/IF9sZW4gLSAyIDogMCksIF9rZXkgPSAyOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAyXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYHdhcm5pbmdXaXRob3V0U3RhY2soY29uZGl0aW9uLCBmb3JtYXQsIC4uLmFyZ3MpYCByZXF1aXJlcyBhIHdhcm5pbmcgJyArICdtZXNzYWdlIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIGlmIChhcmdzLmxlbmd0aCA+IDgpIHtcbiAgICAgIC8vIENoZWNrIGJlZm9yZSB0aGUgY29uZGl0aW9uIHRvIGNhdGNoIHZpb2xhdGlvbnMgZWFybHkuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3dhcm5pbmdXaXRob3V0U3RhY2soKSBjdXJyZW50bHkgc3VwcG9ydHMgYXQgbW9zdCA4IGFyZ3VtZW50cy4nKTtcbiAgICB9XG4gICAgaWYgKGNvbmRpdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB2YXIgYXJnc1dpdGhGb3JtYXQgPSBhcmdzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gJycgKyBpdGVtO1xuICAgICAgfSk7XG4gICAgICBhcmdzV2l0aEZvcm1hdC51bnNoaWZ0KCdXYXJuaW5nOiAnICsgZm9ybWF0KTtcblxuICAgICAgLy8gV2UgaW50ZW50aW9uYWxseSBkb24ndCB1c2Ugc3ByZWFkIChvciAuYXBwbHkpIGRpcmVjdGx5IGJlY2F1c2UgaXRcbiAgICAgIC8vIGJyZWFrcyBJRTk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTM2MTBcbiAgICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGNvbnNvbGUuZXJyb3IsIGNvbnNvbGUsIGFyZ3NXaXRoRm9ybWF0KTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB2YXIgYXJnSW5kZXggPSAwO1xuICAgICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBhcmdzW2FyZ0luZGV4KytdO1xuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcbn1cblxudmFyIHdhcm5pbmdXaXRob3V0U3RhY2skMSA9IHdhcm5pbmdXaXRob3V0U3RhY2s7XG5cbnZhciBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQgPSB7fTtcblxuZnVuY3Rpb24gd2Fybk5vb3AocHVibGljSW5zdGFuY2UsIGNhbGxlck5hbWUpIHtcbiAge1xuICAgIHZhciBfY29uc3RydWN0b3IgPSBwdWJsaWNJbnN0YW5jZS5jb25zdHJ1Y3RvcjtcbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IF9jb25zdHJ1Y3RvciAmJiAoX2NvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8IF9jb25zdHJ1Y3Rvci5uYW1lKSB8fCAnUmVhY3RDbGFzcyc7XG4gICAgdmFyIHdhcm5pbmdLZXkgPSBjb21wb25lbnROYW1lICsgJy4nICsgY2FsbGVyTmFtZTtcbiAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50W3dhcm5pbmdLZXldKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgXCJDYW4ndCBjYWxsICVzIG9uIGEgY29tcG9uZW50IHRoYXQgaXMgbm90IHlldCBtb3VudGVkLiBcIiArICdUaGlzIGlzIGEgbm8tb3AsIGJ1dCBpdCBtaWdodCBpbmRpY2F0ZSBhIGJ1ZyBpbiB5b3VyIGFwcGxpY2F0aW9uLiAnICsgJ0luc3RlYWQsIGFzc2lnbiB0byBgdGhpcy5zdGF0ZWAgZGlyZWN0bHkgb3IgZGVmaW5lIGEgYHN0YXRlID0ge307YCAnICsgJ2NsYXNzIHByb3BlcnR5IHdpdGggdGhlIGRlc2lyZWQgc3RhdGUgaW4gdGhlICVzIGNvbXBvbmVudC4nLCBjYWxsZXJOYW1lLCBjb21wb25lbnROYW1lKTtcbiAgICBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnRbd2FybmluZ0tleV0gPSB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgYWJzdHJhY3QgQVBJIGZvciBhbiB1cGRhdGUgcXVldWUuXG4gKi9cbnZhciBSZWFjdE5vb3BVcGRhdGVRdWV1ZSA9IHtcbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIG9yIG5vdCB0aGlzIGNvbXBvc2l0ZSBjb21wb25lbnQgaXMgbW91bnRlZC5cbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2Ugd2Ugd2FudCB0byB0ZXN0LlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIG1vdW50ZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICogQHByb3RlY3RlZFxuICAgKiBAZmluYWxcbiAgICovXG4gIGlzTW91bnRlZDogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBGb3JjZXMgYW4gdXBkYXRlLiBUaGlzIHNob3VsZCBvbmx5IGJlIGludm9rZWQgd2hlbiBpdCBpcyBrbm93biB3aXRoXG4gICAqIGNlcnRhaW50eSB0aGF0IHdlIGFyZSAqKm5vdCoqIGluIGEgRE9NIHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBZb3UgbWF5IHdhbnQgdG8gY2FsbCB0aGlzIHdoZW4geW91IGtub3cgdGhhdCBzb21lIGRlZXBlciBhc3BlY3Qgb2YgdGhlXG4gICAqIGNvbXBvbmVudCdzIHN0YXRlIGhhcyBjaGFuZ2VkIGJ1dCBgc2V0U3RhdGVgIHdhcyBub3QgY2FsbGVkLlxuICAgKlxuICAgKiBUaGlzIHdpbGwgbm90IGludm9rZSBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYCwgYnV0IGl0IHdpbGwgaW52b2tlXG4gICAqIGBjb21wb25lbnRXaWxsVXBkYXRlYCBhbmQgYGNvbXBvbmVudERpZFVwZGF0ZWAuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLlxuICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIGNvbXBvbmVudCBpcyB1cGRhdGVkLlxuICAgKiBAcGFyYW0gez9zdHJpbmd9IGNhbGxlck5hbWUgbmFtZSBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbiBpbiB0aGUgcHVibGljIEFQSS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlRm9yY2VVcGRhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgJ2ZvcmNlVXBkYXRlJyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIGFsbCBvZiB0aGUgc3RhdGUuIEFsd2F5cyB1c2UgdGhpcyBvciBgc2V0U3RhdGVgIHRvIG11dGF0ZSBzdGF0ZS5cbiAgICogWW91IHNob3VsZCB0cmVhdCBgdGhpcy5zdGF0ZWAgYXMgaW1tdXRhYmxlLlxuICAgKlxuICAgKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBgdGhpcy5zdGF0ZWAgd2lsbCBiZSBpbW1lZGlhdGVseSB1cGRhdGVkLCBzb1xuICAgKiBhY2Nlc3NpbmcgYHRoaXMuc3RhdGVgIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QgbWF5IHJldHVybiB0aGUgb2xkIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbXBsZXRlU3RhdGUgTmV4dCBzdGF0ZS5cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBjb21wb25lbnQgaXMgdXBkYXRlZC5cbiAgICogQHBhcmFtIHs/c3RyaW5nfSBjYWxsZXJOYW1lIG5hbWUgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24gaW4gdGhlIHB1YmxpYyBBUEkuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZVJlcGxhY2VTdGF0ZTogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlLCBjb21wbGV0ZVN0YXRlLCBjYWxsYmFjaywgY2FsbGVyTmFtZSkge1xuICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCAncmVwbGFjZVN0YXRlJyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFNldHMgYSBzdWJzZXQgb2YgdGhlIHN0YXRlLiBUaGlzIG9ubHkgZXhpc3RzIGJlY2F1c2UgX3BlbmRpbmdTdGF0ZSBpc1xuICAgKiBpbnRlcm5hbC4gVGhpcyBwcm92aWRlcyBhIG1lcmdpbmcgc3RyYXRlZ3kgdGhhdCBpcyBub3QgYXZhaWxhYmxlIHRvIGRlZXBcbiAgICogcHJvcGVydGllcyB3aGljaCBpcyBjb25mdXNpbmcuIFRPRE86IEV4cG9zZSBwZW5kaW5nU3RhdGUgb3IgZG9uJ3QgdXNlIGl0XG4gICAqIGR1cmluZyB0aGUgbWVyZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFydGlhbFN0YXRlIE5leHQgcGFydGlhbCBzdGF0ZSB0byBiZSBtZXJnZWQgd2l0aCBzdGF0ZS5cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBjb21wb25lbnQgaXMgdXBkYXRlZC5cbiAgICogQHBhcmFtIHs/c3RyaW5nfSBOYW1lIG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGluIHRoZSBwdWJsaWMgQVBJLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVTZXRTdGF0ZTogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlLCBwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsICdzZXRTdGF0ZScpO1xuICB9XG59O1xuXG52YXIgZW1wdHlPYmplY3QgPSB7fTtcbntcbiAgT2JqZWN0LmZyZWV6ZShlbXB0eU9iamVjdCk7XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBoZWxwZXJzIGZvciB0aGUgdXBkYXRpbmcgc3RhdGUgb2YgYSBjb21wb25lbnQuXG4gKi9cbmZ1bmN0aW9uIENvbXBvbmVudChwcm9wcywgY29udGV4dCwgdXBkYXRlcikge1xuICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIC8vIElmIGEgY29tcG9uZW50IGhhcyBzdHJpbmcgcmVmcywgd2Ugd2lsbCBhc3NpZ24gYSBkaWZmZXJlbnQgb2JqZWN0IGxhdGVyLlxuICB0aGlzLnJlZnMgPSBlbXB0eU9iamVjdDtcbiAgLy8gV2UgaW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCB1cGRhdGVyIGJ1dCB0aGUgcmVhbCBvbmUgZ2V0cyBpbmplY3RlZCBieSB0aGVcbiAgLy8gcmVuZGVyZXIuXG4gIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7XG59XG5cbkNvbXBvbmVudC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCA9IHt9O1xuXG4vKipcbiAqIFNldHMgYSBzdWJzZXQgb2YgdGhlIHN0YXRlLiBBbHdheXMgdXNlIHRoaXMgdG8gbXV0YXRlXG4gKiBzdGF0ZS4gWW91IHNob3VsZCB0cmVhdCBgdGhpcy5zdGF0ZWAgYXMgaW1tdXRhYmxlLlxuICpcbiAqIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGB0aGlzLnN0YXRlYCB3aWxsIGJlIGltbWVkaWF0ZWx5IHVwZGF0ZWQsIHNvXG4gKiBhY2Nlc3NpbmcgYHRoaXMuc3RhdGVgIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QgbWF5IHJldHVybiB0aGUgb2xkIHZhbHVlLlxuICpcbiAqIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGNhbGxzIHRvIGBzZXRTdGF0ZWAgd2lsbCBydW4gc3luY2hyb25vdXNseSxcbiAqIGFzIHRoZXkgbWF5IGV2ZW50dWFsbHkgYmUgYmF0Y2hlZCB0b2dldGhlci4gIFlvdSBjYW4gcHJvdmlkZSBhbiBvcHRpb25hbFxuICogY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIGNhbGwgdG8gc2V0U3RhdGUgaXMgYWN0dWFsbHlcbiAqIGNvbXBsZXRlZC5cbiAqXG4gKiBXaGVuIGEgZnVuY3Rpb24gaXMgcHJvdmlkZWQgdG8gc2V0U3RhdGUsIGl0IHdpbGwgYmUgY2FsbGVkIGF0IHNvbWUgcG9pbnQgaW5cbiAqIHRoZSBmdXR1cmUgKG5vdCBzeW5jaHJvbm91c2x5KS4gSXQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgdXAgdG8gZGF0ZVxuICogY29tcG9uZW50IGFyZ3VtZW50cyAoc3RhdGUsIHByb3BzLCBjb250ZXh0KS4gVGhlc2UgdmFsdWVzIGNhbiBiZSBkaWZmZXJlbnRcbiAqIGZyb20gdGhpcy4qIGJlY2F1c2UgeW91ciBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGFmdGVyIHJlY2VpdmVQcm9wcyBidXQgYmVmb3JlXG4gKiBzaG91bGRDb21wb25lbnRVcGRhdGUsIGFuZCB0aGlzIG5ldyBzdGF0ZSwgcHJvcHMsIGFuZCBjb250ZXh0IHdpbGwgbm90IHlldCBiZVxuICogYXNzaWduZWQgdG8gdGhpcy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdHxmdW5jdGlvbn0gcGFydGlhbFN0YXRlIE5leHQgcGFydGlhbCBzdGF0ZSBvciBmdW5jdGlvbiB0b1xuICogICAgICAgIHByb2R1Y2UgbmV4dCBwYXJ0aWFsIHN0YXRlIHRvIGJlIG1lcmdlZCB3aXRoIGN1cnJlbnQgc3RhdGUuXG4gKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHN0YXRlIGlzIHVwZGF0ZWQuXG4gKiBAZmluYWxcbiAqIEBwcm90ZWN0ZWRcbiAqL1xuQ29tcG9uZW50LnByb3RvdHlwZS5zZXRTdGF0ZSA9IGZ1bmN0aW9uIChwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrKSB7XG4gICEodHlwZW9mIHBhcnRpYWxTdGF0ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIHBhcnRpYWxTdGF0ZSA9PT0gJ2Z1bmN0aW9uJyB8fCBwYXJ0aWFsU3RhdGUgPT0gbnVsbCkgPyBpbnZhcmlhbnQoZmFsc2UsICdzZXRTdGF0ZSguLi4pOiB0YWtlcyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzIHRvIHVwZGF0ZSBvciBhIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcy4nKSA6IHZvaWQgMDtcbiAgdGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLCBwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrLCAnc2V0U3RhdGUnKTtcbn07XG5cbi8qKlxuICogRm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gaXQgaXMga25vd24gd2l0aFxuICogY2VydGFpbnR5IHRoYXQgd2UgYXJlICoqbm90KiogaW4gYSBET00gdHJhbnNhY3Rpb24uXG4gKlxuICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZVxuICogY29tcG9uZW50J3Mgc3RhdGUgaGFzIGNoYW5nZWQgYnV0IGBzZXRTdGF0ZWAgd2FzIG5vdCBjYWxsZWQuXG4gKlxuICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAsIGJ1dCBpdCB3aWxsIGludm9rZVxuICogYGNvbXBvbmVudFdpbGxVcGRhdGVgIGFuZCBgY29tcG9uZW50RGlkVXBkYXRlYC5cbiAqXG4gKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHVwZGF0ZSBpcyBjb21wbGV0ZS5cbiAqIEBmaW5hbFxuICogQHByb3RlY3RlZFxuICovXG5Db21wb25lbnQucHJvdG90eXBlLmZvcmNlVXBkYXRlID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gIHRoaXMudXBkYXRlci5lbnF1ZXVlRm9yY2VVcGRhdGUodGhpcywgY2FsbGJhY2ssICdmb3JjZVVwZGF0ZScpO1xufTtcblxuLyoqXG4gKiBEZXByZWNhdGVkIEFQSXMuIFRoZXNlIEFQSXMgdXNlZCB0byBleGlzdCBvbiBjbGFzc2ljIFJlYWN0IGNsYXNzZXMgYnV0IHNpbmNlXG4gKiB3ZSB3b3VsZCBsaWtlIHRvIGRlcHJlY2F0ZSB0aGVtLCB3ZSdyZSBub3QgZ29pbmcgdG8gbW92ZSB0aGVtIG92ZXIgdG8gdGhpc1xuICogbW9kZXJuIGJhc2UgY2xhc3MuIEluc3RlYWQsIHdlIGRlZmluZSBhIGdldHRlciB0aGF0IHdhcm5zIGlmIGl0J3MgYWNjZXNzZWQuXG4gKi9cbntcbiAgdmFyIGRlcHJlY2F0ZWRBUElzID0ge1xuICAgIGlzTW91bnRlZDogWydpc01vdW50ZWQnLCAnSW5zdGVhZCwgbWFrZSBzdXJlIHRvIGNsZWFuIHVwIHN1YnNjcmlwdGlvbnMgYW5kIHBlbmRpbmcgcmVxdWVzdHMgaW4gJyArICdjb21wb25lbnRXaWxsVW5tb3VudCB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcy4nXSxcbiAgICByZXBsYWNlU3RhdGU6IFsncmVwbGFjZVN0YXRlJywgJ1JlZmFjdG9yIHlvdXIgY29kZSB0byB1c2Ugc2V0U3RhdGUgaW5zdGVhZCAoc2VlICcgKyAnaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zMjM2KS4nXVxuICB9O1xuICB2YXIgZGVmaW5lRGVwcmVjYXRpb25XYXJuaW5nID0gZnVuY3Rpb24gKG1ldGhvZE5hbWUsIGluZm8pIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29tcG9uZW50LnByb3RvdHlwZSwgbWV0aG9kTmFtZSwge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxvd1ByaW9yaXR5V2FybmluZyQxKGZhbHNlLCAnJXMoLi4uKSBpcyBkZXByZWNhdGVkIGluIHBsYWluIEphdmFTY3JpcHQgUmVhY3QgY2xhc3Nlcy4gJXMnLCBpbmZvWzBdLCBpbmZvWzFdKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgZm9yICh2YXIgZm5OYW1lIGluIGRlcHJlY2F0ZWRBUElzKSB7XG4gICAgaWYgKGRlcHJlY2F0ZWRBUElzLmhhc093blByb3BlcnR5KGZuTmFtZSkpIHtcbiAgICAgIGRlZmluZURlcHJlY2F0aW9uV2FybmluZyhmbk5hbWUsIGRlcHJlY2F0ZWRBUElzW2ZuTmFtZV0pO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBDb21wb25lbnREdW1teSgpIHt9XG5Db21wb25lbnREdW1teS5wcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuXG4vKipcbiAqIENvbnZlbmllbmNlIGNvbXBvbmVudCB3aXRoIGRlZmF1bHQgc2hhbGxvdyBlcXVhbGl0eSBjaGVjayBmb3Igc0NVLlxuICovXG5mdW5jdGlvbiBQdXJlQ29tcG9uZW50KHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgLy8gSWYgYSBjb21wb25lbnQgaGFzIHN0cmluZyByZWZzLCB3ZSB3aWxsIGFzc2lnbiBhIGRpZmZlcmVudCBvYmplY3QgbGF0ZXIuXG4gIHRoaXMucmVmcyA9IGVtcHR5T2JqZWN0O1xuICB0aGlzLnVwZGF0ZXIgPSB1cGRhdGVyIHx8IFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlO1xufVxuXG52YXIgcHVyZUNvbXBvbmVudFByb3RvdHlwZSA9IFB1cmVDb21wb25lbnQucHJvdG90eXBlID0gbmV3IENvbXBvbmVudER1bW15KCk7XG5wdXJlQ29tcG9uZW50UHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUHVyZUNvbXBvbmVudDtcbi8vIEF2b2lkIGFuIGV4dHJhIHByb3RvdHlwZSBqdW1wIGZvciB0aGVzZSBtZXRob2RzLlxuX2Fzc2lnbihwdXJlQ29tcG9uZW50UHJvdG90eXBlLCBDb21wb25lbnQucHJvdG90eXBlKTtcbnB1cmVDb21wb25lbnRQcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQgPSB0cnVlO1xuXG4vLyBhbiBpbW11dGFibGUgb2JqZWN0IHdpdGggYSBzaW5nbGUgbXV0YWJsZSB2YWx1ZVxuZnVuY3Rpb24gY3JlYXRlUmVmKCkge1xuICB2YXIgcmVmT2JqZWN0ID0ge1xuICAgIGN1cnJlbnQ6IG51bGxcbiAgfTtcbiAge1xuICAgIE9iamVjdC5zZWFsKHJlZk9iamVjdCk7XG4gIH1cbiAgcmV0dXJuIHJlZk9iamVjdDtcbn1cblxuLyoqXG4gKiBLZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBkaXNwYXRjaGVyLlxuICovXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciA9IHtcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAdHlwZSB7UmVhY3RDb21wb25lbnR9XG4gICAqL1xuICBjdXJyZW50OiBudWxsXG59O1xuXG4vKipcbiAqIEtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IG93bmVyLlxuICpcbiAqIFRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBjb21wb25lbnQgd2hvIHNob3VsZCBvd24gYW55IGNvbXBvbmVudHMgdGhhdCBhcmVcbiAqIGN1cnJlbnRseSBiZWluZyBjb25zdHJ1Y3RlZC5cbiAqL1xudmFyIFJlYWN0Q3VycmVudE93bmVyID0ge1xuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEB0eXBlIHtSZWFjdENvbXBvbmVudH1cbiAgICovXG4gIGN1cnJlbnQ6IG51bGxcbn07XG5cbnZhciBCRUZPUkVfU0xBU0hfUkUgPSAvXiguKilbXFxcXFxcL10vO1xuXG52YXIgZGVzY3JpYmVDb21wb25lbnRGcmFtZSA9IGZ1bmN0aW9uIChuYW1lLCBzb3VyY2UsIG93bmVyTmFtZSkge1xuICB2YXIgc291cmNlSW5mbyA9ICcnO1xuICBpZiAoc291cmNlKSB7XG4gICAgdmFyIHBhdGggPSBzb3VyY2UuZmlsZU5hbWU7XG4gICAgdmFyIGZpbGVOYW1lID0gcGF0aC5yZXBsYWNlKEJFRk9SRV9TTEFTSF9SRSwgJycpO1xuICAgIHtcbiAgICAgIC8vIEluIERFViwgaW5jbHVkZSBjb2RlIGZvciBhIGNvbW1vbiBzcGVjaWFsIGNhc2U6XG4gICAgICAvLyBwcmVmZXIgXCJmb2xkZXIvaW5kZXguanNcIiBpbnN0ZWFkIG9mIGp1c3QgXCJpbmRleC5qc1wiLlxuICAgICAgaWYgKC9eaW5kZXhcXC4vLnRlc3QoZmlsZU5hbWUpKSB7XG4gICAgICAgIHZhciBtYXRjaCA9IHBhdGgubWF0Y2goQkVGT1JFX1NMQVNIX1JFKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgdmFyIHBhdGhCZWZvcmVTbGFzaCA9IG1hdGNoWzFdO1xuICAgICAgICAgIGlmIChwYXRoQmVmb3JlU2xhc2gpIHtcbiAgICAgICAgICAgIHZhciBmb2xkZXJOYW1lID0gcGF0aEJlZm9yZVNsYXNoLnJlcGxhY2UoQkVGT1JFX1NMQVNIX1JFLCAnJyk7XG4gICAgICAgICAgICBmaWxlTmFtZSA9IGZvbGRlck5hbWUgKyAnLycgKyBmaWxlTmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgc291cmNlSW5mbyA9ICcgKGF0ICcgKyBmaWxlTmFtZSArICc6JyArIHNvdXJjZS5saW5lTnVtYmVyICsgJyknO1xuICB9IGVsc2UgaWYgKG93bmVyTmFtZSkge1xuICAgIHNvdXJjZUluZm8gPSAnIChjcmVhdGVkIGJ5ICcgKyBvd25lck5hbWUgKyAnKSc7XG4gIH1cbiAgcmV0dXJuICdcXG4gICAgaW4gJyArIChuYW1lIHx8ICdVbmtub3duJykgKyBzb3VyY2VJbmZvO1xufTtcblxudmFyIFJlc29sdmVkID0gMTtcblxuXG5mdW5jdGlvbiByZWZpbmVSZXNvbHZlZExhenlDb21wb25lbnQobGF6eUNvbXBvbmVudCkge1xuICByZXR1cm4gbGF6eUNvbXBvbmVudC5fc3RhdHVzID09PSBSZXNvbHZlZCA/IGxhenlDb21wb25lbnQuX3Jlc3VsdCA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldFdyYXBwZWROYW1lKG91dGVyVHlwZSwgaW5uZXJUeXBlLCB3cmFwcGVyTmFtZSkge1xuICB2YXIgZnVuY3Rpb25OYW1lID0gaW5uZXJUeXBlLmRpc3BsYXlOYW1lIHx8IGlubmVyVHlwZS5uYW1lIHx8ICcnO1xuICByZXR1cm4gb3V0ZXJUeXBlLmRpc3BsYXlOYW1lIHx8IChmdW5jdGlvbk5hbWUgIT09ICcnID8gd3JhcHBlck5hbWUgKyAnKCcgKyBmdW5jdGlvbk5hbWUgKyAnKScgOiB3cmFwcGVyTmFtZSk7XG59XG5cbmZ1bmN0aW9uIGdldENvbXBvbmVudE5hbWUodHlwZSkge1xuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgLy8gSG9zdCByb290LCB0ZXh0IG5vZGUgb3IganVzdCBpbnZhbGlkIHR5cGUuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAge1xuICAgIGlmICh0eXBlb2YgdHlwZS50YWcgPT09ICdudW1iZXInKSB7XG4gICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdSZWNlaXZlZCBhbiB1bmV4cGVjdGVkIG9iamVjdCBpbiBnZXRDb21wb25lbnROYW1lKCkuICcgKyAnVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgfVxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTpcbiAgICAgIHJldHVybiAnQ29uY3VycmVudE1vZGUnO1xuICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgIHJldHVybiAnRnJhZ21lbnQnO1xuICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICByZXR1cm4gJ1BvcnRhbCc7XG4gICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgcmV0dXJuICdQcm9maWxlcic7XG4gICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgcmV0dXJuICdTdHJpY3RNb2RlJztcbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlJztcbiAgfVxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgcmV0dXJuICdDb250ZXh0LkNvbnN1bWVyJztcbiAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgcmV0dXJuICdDb250ZXh0LlByb3ZpZGVyJztcbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldFdyYXBwZWROYW1lKHR5cGUsIHR5cGUucmVuZGVyLCAnRm9yd2FyZFJlZicpO1xuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKHR5cGUudHlwZSk7XG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciB0aGVuYWJsZSA9IHR5cGU7XG4gICAgICAgICAgdmFyIHJlc29sdmVkVGhlbmFibGUgPSByZWZpbmVSZXNvbHZlZExhenlDb21wb25lbnQodGhlbmFibGUpO1xuICAgICAgICAgIGlmIChyZXNvbHZlZFRoZW5hYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZShyZXNvbHZlZFRoZW5hYmxlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0ge307XG5cbnZhciBjdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCA9IG51bGw7XG5cbmZ1bmN0aW9uIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpIHtcbiAge1xuICAgIGN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50ID0gZWxlbWVudDtcbiAgfVxufVxuXG57XG4gIC8vIFN0YWNrIGltcGxlbWVudGF0aW9uIGluamVjdGVkIGJ5IHRoZSBjdXJyZW50IHJlbmRlcmVyLlxuICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjayA9IG51bGw7XG5cbiAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRTdGFja0FkZGVuZHVtID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdGFjayA9ICcnO1xuXG4gICAgLy8gQWRkIGFuIGV4dHJhIHRvcCBmcmFtZSB3aGlsZSBhbiBlbGVtZW50IGlzIGJlaW5nIHZhbGlkYXRlZFxuICAgIGlmIChjdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCkge1xuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKGN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50LnR5cGUpO1xuICAgICAgdmFyIG93bmVyID0gY3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQuX293bmVyO1xuICAgICAgc3RhY2sgKz0gZGVzY3JpYmVDb21wb25lbnRGcmFtZShuYW1lLCBjdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudC5fc291cmNlLCBvd25lciAmJiBnZXRDb21wb25lbnROYW1lKG93bmVyLnR5cGUpKTtcbiAgICB9XG5cbiAgICAvLyBEZWxlZ2F0ZSB0byB0aGUgaW5qZWN0ZWQgcmVuZGVyZXItc3BlY2lmaWMgaW1wbGVtZW50YXRpb25cbiAgICB2YXIgaW1wbCA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0Q3VycmVudFN0YWNrO1xuICAgIGlmIChpbXBsKSB7XG4gICAgICBzdGFjayArPSBpbXBsKCkgfHwgJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YWNrO1xuICB9O1xufVxuXG52YXIgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPSB7XG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXI6IFJlYWN0Q3VycmVudERpc3BhdGNoZXIsXG4gIFJlYWN0Q3VycmVudE93bmVyOiBSZWFjdEN1cnJlbnRPd25lcixcbiAgLy8gVXNlZCBieSByZW5kZXJlcnMgdG8gYXZvaWQgYnVuZGxpbmcgb2JqZWN0LWFzc2lnbiB0d2ljZSBpbiBVTUQgYnVuZGxlczpcbiAgYXNzaWduOiBfYXNzaWduXG59O1xuXG57XG4gIF9hc3NpZ24oUmVhY3RTaGFyZWRJbnRlcm5hbHMsIHtcbiAgICAvLyBUaGVzZSBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGluIHByb2R1Y3Rpb24uXG4gICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTogUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSxcbiAgICAvLyBTaGltIGZvciBSZWFjdCBET00gMTYuMC4wIHdoaWNoIHN0aWxsIGRlc3RydWN0dXJlZCAoYnV0IG5vdCB1c2VkKSB0aGlzLlxuICAgIC8vIFRPRE86IHJlbW92ZSBpbiBSZWFjdCAxNy4wLlxuICAgIFJlYWN0Q29tcG9uZW50VHJlZUhvb2s6IHt9XG4gIH0pO1xufVxuXG4vKipcbiAqIFNpbWlsYXIgdG8gaW52YXJpYW50IGJ1dCBvbmx5IGxvZ3MgYSB3YXJuaW5nIGlmIHRoZSBjb25kaXRpb24gaXMgbm90IG1ldC5cbiAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gbG9nIGlzc3VlcyBpbiBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMgaW4gY3JpdGljYWxcbiAqIHBhdGhzLiBSZW1vdmluZyB0aGUgbG9nZ2luZyBjb2RlIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50cyB3aWxsIGtlZXAgdGhlXG4gKiBzYW1lIGxvZ2ljIGFuZCBmb2xsb3cgdGhlIHNhbWUgY29kZSBwYXRocy5cbiAqL1xuXG52YXIgd2FybmluZyA9IHdhcm5pbmdXaXRob3V0U3RhY2skMTtcblxue1xuICB3YXJuaW5nID0gZnVuY3Rpb24gKGNvbmRpdGlvbiwgZm9ybWF0KSB7XG4gICAgaWYgKGNvbmRpdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG4gICAgdmFyIHN0YWNrID0gUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRTdGFja0FkZGVuZHVtKCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3dhcm5pbmctYW5kLWludmFyaWFudC1hcmdzXG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4gPiAyID8gX2xlbiAtIDIgOiAwKSwgX2tleSA9IDI7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleSAtIDJdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMS5hcHBseSh1bmRlZmluZWQsIFtmYWxzZSwgZm9ybWF0ICsgJyVzJ10uY29uY2F0KGFyZ3MsIFtzdGFja10pKTtcbiAgfTtcbn1cblxudmFyIHdhcm5pbmckMSA9IHdhcm5pbmc7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBSRVNFUlZFRF9QUk9QUyA9IHtcbiAga2V5OiB0cnVlLFxuICByZWY6IHRydWUsXG4gIF9fc2VsZjogdHJ1ZSxcbiAgX19zb3VyY2U6IHRydWVcbn07XG5cbnZhciBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biA9IHZvaWQgMDtcbnZhciBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biA9IHZvaWQgMDtcblxuZnVuY3Rpb24gaGFzVmFsaWRSZWYoY29uZmlnKSB7XG4gIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsICdyZWYnKSkge1xuICAgICAgdmFyIGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY29uZmlnLCAncmVmJykuZ2V0O1xuICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gY29uZmlnLnJlZiAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBoYXNWYWxpZEtleShjb25maWcpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ2tleScpKSB7XG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdrZXknKS5nZXQ7XG4gICAgICBpZiAoZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0V2FybmluZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBjb25maWcua2V5ICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICB2YXIgd2FybkFib3V0QWNjZXNzaW5nS2V5ID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICghc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24pIHtcbiAgICAgIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duID0gdHJ1ZTtcbiAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJyVzOiBga2V5YCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9mYi5tZS9yZWFjdC1zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKTtcbiAgICB9XG4gIH07XG4gIHdhcm5BYm91dEFjY2Vzc2luZ0tleS5pc1JlYWN0V2FybmluZyA9IHRydWU7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ2tleScsIHtcbiAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ0tleSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGRlZmluZVJlZlByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICB2YXIgd2FybkFib3V0QWNjZXNzaW5nUmVmID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICghc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24pIHtcbiAgICAgIHNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duID0gdHJ1ZTtcbiAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJyVzOiBgcmVmYCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9mYi5tZS9yZWFjdC1zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKTtcbiAgICB9XG4gIH07XG4gIHdhcm5BYm91dEFjY2Vzc2luZ1JlZi5pc1JlYWN0V2FybmluZyA9IHRydWU7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ3JlZicsIHtcbiAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ1JlZixcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59XG5cbi8qKlxuICogRmFjdG9yeSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IFJlYWN0IGVsZW1lbnQuIFRoaXMgbm8gbG9uZ2VyIGFkaGVyZXMgdG9cbiAqIHRoZSBjbGFzcyBwYXR0ZXJuLCBzbyBkbyBub3QgdXNlIG5ldyB0byBjYWxsIGl0LiBBbHNvLCBubyBpbnN0YW5jZW9mIGNoZWNrXG4gKiB3aWxsIHdvcmsuIEluc3RlYWQgdGVzdCAkJHR5cGVvZiBmaWVsZCBhZ2FpbnN0IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSB0byBjaGVja1xuICogaWYgc29tZXRoaW5nIGlzIGEgUmVhY3QgRWxlbWVudC5cbiAqXG4gKiBAcGFyYW0geyp9IHR5cGVcbiAqIEBwYXJhbSB7Kn0ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IHJlZlxuICogQHBhcmFtIHsqfSBzZWxmIEEgKnRlbXBvcmFyeSogaGVscGVyIHRvIGRldGVjdCBwbGFjZXMgd2hlcmUgYHRoaXNgIGlzXG4gKiBkaWZmZXJlbnQgZnJvbSB0aGUgYG93bmVyYCB3aGVuIFJlYWN0LmNyZWF0ZUVsZW1lbnQgaXMgY2FsbGVkLCBzbyB0aGF0IHdlXG4gKiBjYW4gd2Fybi4gV2Ugd2FudCB0byBnZXQgcmlkIG9mIG93bmVyIGFuZCByZXBsYWNlIHN0cmluZyBgcmVmYHMgd2l0aCBhcnJvd1xuICogZnVuY3Rpb25zLCBhbmQgYXMgbG9uZyBhcyBgdGhpc2AgYW5kIG93bmVyIGFyZSB0aGUgc2FtZSwgdGhlcmUgd2lsbCBiZSBub1xuICogY2hhbmdlIGluIGJlaGF2aW9yLlxuICogQHBhcmFtIHsqfSBzb3VyY2UgQW4gYW5ub3RhdGlvbiBvYmplY3QgKGFkZGVkIGJ5IGEgdHJhbnNwaWxlciBvciBvdGhlcndpc2UpXG4gKiBpbmRpY2F0aW5nIGZpbGVuYW1lLCBsaW5lIG51bWJlciwgYW5kL29yIG90aGVyIGluZm9ybWF0aW9uLlxuICogQHBhcmFtIHsqfSBvd25lclxuICogQHBhcmFtIHsqfSBwcm9wc1xuICogQGludGVybmFsXG4gKi9cbnZhciBSZWFjdEVsZW1lbnQgPSBmdW5jdGlvbiAodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgb3duZXIsIHByb3BzKSB7XG4gIHZhciBlbGVtZW50ID0ge1xuICAgIC8vIFRoaXMgdGFnIGFsbG93cyB1cyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIGFzIGEgUmVhY3QgRWxlbWVudFxuICAgICQkdHlwZW9mOiBSRUFDVF9FTEVNRU5UX1RZUEUsXG5cbiAgICAvLyBCdWlsdC1pbiBwcm9wZXJ0aWVzIHRoYXQgYmVsb25nIG9uIHRoZSBlbGVtZW50XG4gICAgdHlwZTogdHlwZSxcbiAgICBrZXk6IGtleSxcbiAgICByZWY6IHJlZixcbiAgICBwcm9wczogcHJvcHMsXG5cbiAgICAvLyBSZWNvcmQgdGhlIGNvbXBvbmVudCByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgdGhpcyBlbGVtZW50LlxuICAgIF9vd25lcjogb3duZXJcbiAgfTtcblxuICB7XG4gICAgLy8gVGhlIHZhbGlkYXRpb24gZmxhZyBpcyBjdXJyZW50bHkgbXV0YXRpdmUuIFdlIHB1dCBpdCBvblxuICAgIC8vIGFuIGV4dGVybmFsIGJhY2tpbmcgc3RvcmUgc28gdGhhdCB3ZSBjYW4gZnJlZXplIHRoZSB3aG9sZSBvYmplY3QuXG4gICAgLy8gVGhpcyBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhIFdlYWtNYXAgb25jZSB0aGV5IGFyZSBpbXBsZW1lbnRlZCBpblxuICAgIC8vIGNvbW1vbmx5IHVzZWQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzLlxuICAgIGVsZW1lbnQuX3N0b3JlID0ge307XG5cbiAgICAvLyBUbyBtYWtlIGNvbXBhcmluZyBSZWFjdEVsZW1lbnRzIGVhc2llciBmb3IgdGVzdGluZyBwdXJwb3Nlcywgd2UgbWFrZVxuICAgIC8vIHRoZSB2YWxpZGF0aW9uIGZsYWcgbm9uLWVudW1lcmFibGUgKHdoZXJlIHBvc3NpYmxlLCB3aGljaCBzaG91bGRcbiAgICAvLyBpbmNsdWRlIGV2ZXJ5IGVudmlyb25tZW50IHdlIHJ1biB0ZXN0cyBpbiksIHNvIHRoZSB0ZXN0IGZyYW1ld29ya1xuICAgIC8vIGlnbm9yZXMgaXQuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQuX3N0b3JlLCAndmFsaWRhdGVkJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICB2YWx1ZTogZmFsc2VcbiAgICB9KTtcbiAgICAvLyBzZWxmIGFuZCBzb3VyY2UgYXJlIERFViBvbmx5IHByb3BlcnRpZXMuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQsICdfc2VsZicsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBzZWxmXG4gICAgfSk7XG4gICAgLy8gVHdvIGVsZW1lbnRzIGNyZWF0ZWQgaW4gdHdvIGRpZmZlcmVudCBwbGFjZXMgc2hvdWxkIGJlIGNvbnNpZGVyZWRcbiAgICAvLyBlcXVhbCBmb3IgdGVzdGluZyBwdXJwb3NlcyBhbmQgdGhlcmVmb3JlIHdlIGhpZGUgaXQgZnJvbSBlbnVtZXJhdGlvbi5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudCwgJ19zb3VyY2UnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogc291cmNlXG4gICAgfSk7XG4gICAgaWYgKE9iamVjdC5mcmVlemUpIHtcbiAgICAgIE9iamVjdC5mcmVlemUoZWxlbWVudC5wcm9wcyk7XG4gICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBSZWFjdEVsZW1lbnQgb2YgdGhlIGdpdmVuIHR5cGUuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2NyZWF0ZWVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0eXBlLCBjb25maWcsIGNoaWxkcmVuKSB7XG4gIHZhciBwcm9wTmFtZSA9IHZvaWQgMDtcblxuICAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkXG4gIHZhciBwcm9wcyA9IHt9O1xuXG4gIHZhciBrZXkgPSBudWxsO1xuICB2YXIgcmVmID0gbnVsbDtcbiAgdmFyIHNlbGYgPSBudWxsO1xuICB2YXIgc291cmNlID0gbnVsbDtcblxuICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICBpZiAoaGFzVmFsaWRSZWYoY29uZmlnKSkge1xuICAgICAgcmVmID0gY29uZmlnLnJlZjtcbiAgICB9XG4gICAgaWYgKGhhc1ZhbGlkS2V5KGNvbmZpZykpIHtcbiAgICAgIGtleSA9ICcnICsgY29uZmlnLmtleTtcbiAgICB9XG5cbiAgICBzZWxmID0gY29uZmlnLl9fc2VsZiA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNvbmZpZy5fX3NlbGY7XG4gICAgc291cmNlID0gY29uZmlnLl9fc291cmNlID09PSB1bmRlZmluZWQgPyBudWxsIDogY29uZmlnLl9fc291cmNlO1xuICAgIC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIGFyZSBhZGRlZCB0byBhIG5ldyBwcm9wcyBvYmplY3RcbiAgICBmb3IgKHByb3BOYW1lIGluIGNvbmZpZykge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBwcm9wTmFtZSkgJiYgIVJFU0VSVkVEX1BST1BTLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBjb25maWdbcHJvcE5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENoaWxkcmVuIGNhbiBiZSBtb3JlIHRoYW4gb25lIGFyZ3VtZW50LCBhbmQgdGhvc2UgYXJlIHRyYW5zZmVycmVkIG9udG9cbiAgLy8gdGhlIG5ld2x5IGFsbG9jYXRlZCBwcm9wcyBvYmplY3QuXG4gIHZhciBjaGlsZHJlbkxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuICBpZiAoY2hpbGRyZW5MZW5ndGggPT09IDEpIHtcbiAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB9IGVsc2UgaWYgKGNoaWxkcmVuTGVuZ3RoID4gMSkge1xuICAgIHZhciBjaGlsZEFycmF5ID0gQXJyYXkoY2hpbGRyZW5MZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW5MZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGRBcnJheVtpXSA9IGFyZ3VtZW50c1tpICsgMl07XG4gICAgfVxuICAgIHtcbiAgICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICAgIE9iamVjdC5mcmVlemUoY2hpbGRBcnJheSk7XG4gICAgICB9XG4gICAgfVxuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRBcnJheTtcbiAgfVxuXG4gIC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wc1xuICBpZiAodHlwZSAmJiB0eXBlLmRlZmF1bHRQcm9wcykge1xuICAgIHZhciBkZWZhdWx0UHJvcHMgPSB0eXBlLmRlZmF1bHRQcm9wcztcbiAgICBmb3IgKHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykge1xuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHtcbiAgICBpZiAoa2V5IHx8IHJlZikge1xuICAgICAgdmFyIGRpc3BsYXlOYW1lID0gdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgPyB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCAnVW5rbm93bicgOiB0eXBlO1xuICAgICAgaWYgKGtleSkge1xuICAgICAgICBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgICAgaWYgKHJlZikge1xuICAgICAgICBkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gUmVhY3RFbGVtZW50KHR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQsIHByb3BzKTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYSBmdW5jdGlvbiB0aGF0IHByb2R1Y2VzIFJlYWN0RWxlbWVudHMgb2YgYSBnaXZlbiB0eXBlLlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNjcmVhdGVmYWN0b3J5XG4gKi9cblxuXG5mdW5jdGlvbiBjbG9uZUFuZFJlcGxhY2VLZXkob2xkRWxlbWVudCwgbmV3S2V5KSB7XG4gIHZhciBuZXdFbGVtZW50ID0gUmVhY3RFbGVtZW50KG9sZEVsZW1lbnQudHlwZSwgbmV3S2V5LCBvbGRFbGVtZW50LnJlZiwgb2xkRWxlbWVudC5fc2VsZiwgb2xkRWxlbWVudC5fc291cmNlLCBvbGRFbGVtZW50Ll9vd25lciwgb2xkRWxlbWVudC5wcm9wcyk7XG5cbiAgcmV0dXJuIG5ld0VsZW1lbnQ7XG59XG5cbi8qKlxuICogQ2xvbmUgYW5kIHJldHVybiBhIG5ldyBSZWFjdEVsZW1lbnQgdXNpbmcgZWxlbWVudCBhcyB0aGUgc3RhcnRpbmcgcG9pbnQuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2Nsb25lZWxlbWVudFxuICovXG5mdW5jdGlvbiBjbG9uZUVsZW1lbnQoZWxlbWVudCwgY29uZmlnLCBjaGlsZHJlbikge1xuICAhIShlbGVtZW50ID09PSBudWxsIHx8IGVsZW1lbnQgPT09IHVuZGVmaW5lZCkgPyBpbnZhcmlhbnQoZmFsc2UsICdSZWFjdC5jbG9uZUVsZW1lbnQoLi4uKTogVGhlIGFyZ3VtZW50IG11c3QgYmUgYSBSZWFjdCBlbGVtZW50LCBidXQgeW91IHBhc3NlZCAlcy4nLCBlbGVtZW50KSA6IHZvaWQgMDtcblxuICB2YXIgcHJvcE5hbWUgPSB2b2lkIDA7XG5cbiAgLy8gT3JpZ2luYWwgcHJvcHMgYXJlIGNvcGllZFxuICB2YXIgcHJvcHMgPSBfYXNzaWduKHt9LCBlbGVtZW50LnByb3BzKTtcblxuICAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkXG4gIHZhciBrZXkgPSBlbGVtZW50LmtleTtcbiAgdmFyIHJlZiA9IGVsZW1lbnQucmVmO1xuICAvLyBTZWxmIGlzIHByZXNlcnZlZCBzaW5jZSB0aGUgb3duZXIgaXMgcHJlc2VydmVkLlxuICB2YXIgc2VsZiA9IGVsZW1lbnQuX3NlbGY7XG4gIC8vIFNvdXJjZSBpcyBwcmVzZXJ2ZWQgc2luY2UgY2xvbmVFbGVtZW50IGlzIHVubGlrZWx5IHRvIGJlIHRhcmdldGVkIGJ5IGFcbiAgLy8gdHJhbnNwaWxlciwgYW5kIHRoZSBvcmlnaW5hbCBzb3VyY2UgaXMgcHJvYmFibHkgYSBiZXR0ZXIgaW5kaWNhdG9yIG9mIHRoZVxuICAvLyB0cnVlIG93bmVyLlxuICB2YXIgc291cmNlID0gZWxlbWVudC5fc291cmNlO1xuXG4gIC8vIE93bmVyIHdpbGwgYmUgcHJlc2VydmVkLCB1bmxlc3MgcmVmIGlzIG92ZXJyaWRkZW5cbiAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG5cbiAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgaWYgKGhhc1ZhbGlkUmVmKGNvbmZpZykpIHtcbiAgICAgIC8vIFNpbGVudGx5IHN0ZWFsIHRoZSByZWYgZnJvbSB0aGUgcGFyZW50LlxuICAgICAgcmVmID0gY29uZmlnLnJlZjtcbiAgICAgIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudDtcbiAgICB9XG4gICAgaWYgKGhhc1ZhbGlkS2V5KGNvbmZpZykpIHtcbiAgICAgIGtleSA9ICcnICsgY29uZmlnLmtleTtcbiAgICB9XG5cbiAgICAvLyBSZW1haW5pbmcgcHJvcGVydGllcyBvdmVycmlkZSBleGlzdGluZyBwcm9wc1xuICAgIHZhciBkZWZhdWx0UHJvcHMgPSB2b2lkIDA7XG4gICAgaWYgKGVsZW1lbnQudHlwZSAmJiBlbGVtZW50LnR5cGUuZGVmYXVsdFByb3BzKSB7XG4gICAgICBkZWZhdWx0UHJvcHMgPSBlbGVtZW50LnR5cGUuZGVmYXVsdFByb3BzO1xuICAgIH1cbiAgICBmb3IgKHByb3BOYW1lIGluIGNvbmZpZykge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBwcm9wTmFtZSkgJiYgIVJFU0VSVkVEX1BST1BTLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICBpZiAoY29uZmlnW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkICYmIGRlZmF1bHRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gUmVzb2x2ZSBkZWZhdWx0IHByb3BzXG4gICAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBjb25maWdbcHJvcE5hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ2hpbGRyZW4gY2FuIGJlIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQsIGFuZCB0aG9zZSBhcmUgdHJhbnNmZXJyZWQgb250b1xuICAvLyB0aGUgbmV3bHkgYWxsb2NhdGVkIHByb3BzIG9iamVjdC5cbiAgdmFyIGNoaWxkcmVuTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCAtIDI7XG4gIGlmIChjaGlsZHJlbkxlbmd0aCA9PT0gMSkge1xuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIH0gZWxzZSBpZiAoY2hpbGRyZW5MZW5ndGggPiAxKSB7XG4gICAgdmFyIGNoaWxkQXJyYXkgPSBBcnJheShjaGlsZHJlbkxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZEFycmF5W2ldID0gYXJndW1lbnRzW2kgKyAyXTtcbiAgICB9XG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZEFycmF5O1xuICB9XG5cbiAgcmV0dXJuIFJlYWN0RWxlbWVudChlbGVtZW50LnR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIG93bmVyLCBwcm9wcyk7XG59XG5cbi8qKlxuICogVmVyaWZpZXMgdGhlIG9iamVjdCBpcyBhIFJlYWN0RWxlbWVudC5cbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjaXN2YWxpZGVsZW1lbnRcbiAqIEBwYXJhbSB7P29iamVjdH0gb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGBvYmplY3RgIGlzIGEgUmVhY3RFbGVtZW50LlxuICogQGZpbmFsXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsICYmIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xufVxuXG52YXIgU0VQQVJBVE9SID0gJy4nO1xudmFyIFNVQlNFUEFSQVRPUiA9ICc6JztcblxuLyoqXG4gKiBFc2NhcGUgYW5kIHdyYXAga2V5IHNvIGl0IGlzIHNhZmUgdG8gdXNlIGFzIGEgcmVhY3RpZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgdG8gYmUgZXNjYXBlZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gdGhlIGVzY2FwZWQga2V5LlxuICovXG5mdW5jdGlvbiBlc2NhcGUoa2V5KSB7XG4gIHZhciBlc2NhcGVSZWdleCA9IC9bPTpdL2c7XG4gIHZhciBlc2NhcGVyTG9va3VwID0ge1xuICAgICc9JzogJz0wJyxcbiAgICAnOic6ICc9MidcbiAgfTtcbiAgdmFyIGVzY2FwZWRTdHJpbmcgPSAoJycgKyBrZXkpLnJlcGxhY2UoZXNjYXBlUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgIHJldHVybiBlc2NhcGVyTG9va3VwW21hdGNoXTtcbiAgfSk7XG5cbiAgcmV0dXJuICckJyArIGVzY2FwZWRTdHJpbmc7XG59XG5cbi8qKlxuICogVE9ETzogVGVzdCB0aGF0IGEgc2luZ2xlIGNoaWxkIGFuZCBhbiBhcnJheSB3aXRoIG9uZSBpdGVtIGhhdmUgdGhlIHNhbWUga2V5XG4gKiBwYXR0ZXJuLlxuICovXG5cbnZhciBkaWRXYXJuQWJvdXRNYXBzID0gZmFsc2U7XG5cbnZhciB1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCA9IC9cXC8rL2c7XG5mdW5jdGlvbiBlc2NhcGVVc2VyUHJvdmlkZWRLZXkodGV4dCkge1xuICByZXR1cm4gKCcnICsgdGV4dCkucmVwbGFjZSh1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCwgJyQmLycpO1xufVxuXG52YXIgUE9PTF9TSVpFID0gMTA7XG52YXIgdHJhdmVyc2VDb250ZXh0UG9vbCA9IFtdO1xuZnVuY3Rpb24gZ2V0UG9vbGVkVHJhdmVyc2VDb250ZXh0KG1hcFJlc3VsdCwga2V5UHJlZml4LCBtYXBGdW5jdGlvbiwgbWFwQ29udGV4dCkge1xuICBpZiAodHJhdmVyc2VDb250ZXh0UG9vbC5sZW5ndGgpIHtcbiAgICB2YXIgdHJhdmVyc2VDb250ZXh0ID0gdHJhdmVyc2VDb250ZXh0UG9vbC5wb3AoKTtcbiAgICB0cmF2ZXJzZUNvbnRleHQucmVzdWx0ID0gbWFwUmVzdWx0O1xuICAgIHRyYXZlcnNlQ29udGV4dC5rZXlQcmVmaXggPSBrZXlQcmVmaXg7XG4gICAgdHJhdmVyc2VDb250ZXh0LmZ1bmMgPSBtYXBGdW5jdGlvbjtcbiAgICB0cmF2ZXJzZUNvbnRleHQuY29udGV4dCA9IG1hcENvbnRleHQ7XG4gICAgdHJhdmVyc2VDb250ZXh0LmNvdW50ID0gMDtcbiAgICByZXR1cm4gdHJhdmVyc2VDb250ZXh0O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICByZXN1bHQ6IG1hcFJlc3VsdCxcbiAgICAgIGtleVByZWZpeDoga2V5UHJlZml4LFxuICAgICAgZnVuYzogbWFwRnVuY3Rpb24sXG4gICAgICBjb250ZXh0OiBtYXBDb250ZXh0LFxuICAgICAgY291bnQ6IDBcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbGVhc2VUcmF2ZXJzZUNvbnRleHQodHJhdmVyc2VDb250ZXh0KSB7XG4gIHRyYXZlcnNlQ29udGV4dC5yZXN1bHQgPSBudWxsO1xuICB0cmF2ZXJzZUNvbnRleHQua2V5UHJlZml4ID0gbnVsbDtcbiAgdHJhdmVyc2VDb250ZXh0LmZ1bmMgPSBudWxsO1xuICB0cmF2ZXJzZUNvbnRleHQuY29udGV4dCA9IG51bGw7XG4gIHRyYXZlcnNlQ29udGV4dC5jb3VudCA9IDA7XG4gIGlmICh0cmF2ZXJzZUNvbnRleHRQb29sLmxlbmd0aCA8IFBPT0xfU0laRSkge1xuICAgIHRyYXZlcnNlQ29udGV4dFBvb2wucHVzaCh0cmF2ZXJzZUNvbnRleHQpO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcGFyYW0geyFzdHJpbmd9IG5hbWVTb0ZhciBOYW1lIG9mIHRoZSBrZXkgcGF0aCBzbyBmYXIuXG4gKiBAcGFyYW0geyFmdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZWFjaCBjaGlsZCBmb3VuZC5cbiAqIEBwYXJhbSB7Pyp9IHRyYXZlcnNlQ29udGV4dCBVc2VkIHRvIHBhc3MgaW5mb3JtYXRpb24gdGhyb3VnaG91dCB0aGUgdHJhdmVyc2FsXG4gKiBwcm9jZXNzLlxuICogQHJldHVybiB7IW51bWJlcn0gVGhlIG51bWJlciBvZiBjaGlsZHJlbiBpbiB0aGlzIHN1YnRyZWUuXG4gKi9cbmZ1bmN0aW9uIHRyYXZlcnNlQWxsQ2hpbGRyZW5JbXBsKGNoaWxkcmVuLCBuYW1lU29GYXIsIGNhbGxiYWNrLCB0cmF2ZXJzZUNvbnRleHQpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgY2hpbGRyZW47XG5cbiAgaWYgKHR5cGUgPT09ICd1bmRlZmluZWQnIHx8IHR5cGUgPT09ICdib29sZWFuJykge1xuICAgIC8vIEFsbCBvZiB0aGUgYWJvdmUgYXJlIHBlcmNlaXZlZCBhcyBudWxsLlxuICAgIGNoaWxkcmVuID0gbnVsbDtcbiAgfVxuXG4gIHZhciBpbnZva2VDYWxsYmFjayA9IGZhbHNlO1xuXG4gIGlmIChjaGlsZHJlbiA9PT0gbnVsbCkge1xuICAgIGludm9rZUNhbGxiYWNrID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICBpbnZva2VDYWxsYmFjayA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgc3dpdGNoIChjaGlsZHJlbi4kJHR5cGVvZikge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgICBpbnZva2VDYWxsYmFjayA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoaW52b2tlQ2FsbGJhY2spIHtcbiAgICBjYWxsYmFjayh0cmF2ZXJzZUNvbnRleHQsIGNoaWxkcmVuLFxuICAgIC8vIElmIGl0J3MgdGhlIG9ubHkgY2hpbGQsIHRyZWF0IHRoZSBuYW1lIGFzIGlmIGl0IHdhcyB3cmFwcGVkIGluIGFuIGFycmF5XG4gICAgLy8gc28gdGhhdCBpdCdzIGNvbnNpc3RlbnQgaWYgdGhlIG51bWJlciBvZiBjaGlsZHJlbiBncm93cy5cbiAgICBuYW1lU29GYXIgPT09ICcnID8gU0VQQVJBVE9SICsgZ2V0Q29tcG9uZW50S2V5KGNoaWxkcmVuLCAwKSA6IG5hbWVTb0Zhcik7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICB2YXIgY2hpbGQgPSB2b2lkIDA7XG4gIHZhciBuZXh0TmFtZSA9IHZvaWQgMDtcbiAgdmFyIHN1YnRyZWVDb3VudCA9IDA7IC8vIENvdW50IG9mIGNoaWxkcmVuIGZvdW5kIGluIHRoZSBjdXJyZW50IHN1YnRyZWUuXG4gIHZhciBuZXh0TmFtZVByZWZpeCA9IG5hbWVTb0ZhciA9PT0gJycgPyBTRVBBUkFUT1IgOiBuYW1lU29GYXIgKyBTVUJTRVBBUkFUT1I7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICAgIG5leHROYW1lID0gbmV4dE5hbWVQcmVmaXggKyBnZXRDb21wb25lbnRLZXkoY2hpbGQsIGkpO1xuICAgICAgc3VidHJlZUNvdW50ICs9IHRyYXZlcnNlQWxsQ2hpbGRyZW5JbXBsKGNoaWxkLCBuZXh0TmFtZSwgY2FsbGJhY2ssIHRyYXZlcnNlQ29udGV4dCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihjaGlsZHJlbik7XG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB7XG4gICAgICAgIC8vIFdhcm4gYWJvdXQgdXNpbmcgTWFwcyBhcyBjaGlsZHJlblxuICAgICAgICBpZiAoaXRlcmF0b3JGbiA9PT0gY2hpbGRyZW4uZW50cmllcykge1xuICAgICAgICAgICFkaWRXYXJuQWJvdXRNYXBzID8gd2FybmluZyQxKGZhbHNlLCAnVXNpbmcgTWFwcyBhcyBjaGlsZHJlbiBpcyB1bnN1cHBvcnRlZCBhbmQgd2lsbCBsaWtlbHkgeWllbGQgJyArICd1bmV4cGVjdGVkIHJlc3VsdHMuIENvbnZlcnQgaXQgdG8gYSBzZXF1ZW5jZS9pdGVyYWJsZSBvZiBrZXllZCAnICsgJ1JlYWN0RWxlbWVudHMgaW5zdGVhZC4nKSA6IHZvaWQgMDtcbiAgICAgICAgICBkaWRXYXJuQWJvdXRNYXBzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwoY2hpbGRyZW4pO1xuICAgICAgdmFyIHN0ZXAgPSB2b2lkIDA7XG4gICAgICB2YXIgaWkgPSAwO1xuICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICBjaGlsZCA9IHN0ZXAudmFsdWU7XG4gICAgICAgIG5leHROYW1lID0gbmV4dE5hbWVQcmVmaXggKyBnZXRDb21wb25lbnRLZXkoY2hpbGQsIGlpKyspO1xuICAgICAgICBzdWJ0cmVlQ291bnQgKz0gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwoY2hpbGQsIG5leHROYW1lLCBjYWxsYmFjaywgdHJhdmVyc2VDb250ZXh0KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YXIgYWRkZW5kdW0gPSAnJztcbiAgICAgIHtcbiAgICAgICAgYWRkZW5kdW0gPSAnIElmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgJyArICdpbnN0ZWFkLicgKyBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldFN0YWNrQWRkZW5kdW0oKTtcbiAgICAgIH1cbiAgICAgIHZhciBjaGlsZHJlblN0cmluZyA9ICcnICsgY2hpbGRyZW47XG4gICAgICBpbnZhcmlhbnQoZmFsc2UsICdPYmplY3RzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZCAoZm91bmQ6ICVzKS4lcycsIGNoaWxkcmVuU3RyaW5nID09PSAnW29iamVjdCBPYmplY3RdJyA/ICdvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmpvaW4oJywgJykgKyAnfScgOiBjaGlsZHJlblN0cmluZywgYWRkZW5kdW0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdWJ0cmVlQ291bnQ7XG59XG5cbi8qKlxuICogVHJhdmVyc2VzIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYCwgYnV0XG4gKiBtaWdodCBhbHNvIGJlIHNwZWNpZmllZCB0aHJvdWdoIGF0dHJpYnV0ZXM6XG4gKlxuICogLSBgdHJhdmVyc2VBbGxDaGlsZHJlbih0aGlzLnByb3BzLmNoaWxkcmVuLCAuLi4pYFxuICogLSBgdHJhdmVyc2VBbGxDaGlsZHJlbih0aGlzLnByb3BzLmxlZnRQYW5lbENoaWxkcmVuLCAuLi4pYFxuICpcbiAqIFRoZSBgdHJhdmVyc2VDb250ZXh0YCBpcyBhbiBvcHRpb25hbCBhcmd1bWVudCB0aGF0IGlzIHBhc3NlZCB0aHJvdWdoIHRoZVxuICogZW50aXJlIHRyYXZlcnNhbC4gSXQgY2FuIGJlIHVzZWQgdG8gc3RvcmUgYWNjdW11bGF0aW9ucyBvciBhbnl0aGluZyBlbHNlIHRoYXRcbiAqIHRoZSBjYWxsYmFjayBtaWdodCBmaW5kIHJlbGV2YW50LlxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgb2JqZWN0LlxuICogQHBhcmFtIHshZnVuY3Rpb259IGNhbGxiYWNrIFRvIGludm9rZSB1cG9uIHRyYXZlcnNpbmcgZWFjaCBjaGlsZC5cbiAqIEBwYXJhbSB7Pyp9IHRyYXZlcnNlQ29udGV4dCBDb250ZXh0IGZvciB0cmF2ZXJzYWwuXG4gKiBAcmV0dXJuIHshbnVtYmVyfSBUaGUgbnVtYmVyIG9mIGNoaWxkcmVuIGluIHRoaXMgc3VidHJlZS5cbiAqL1xuZnVuY3Rpb24gdHJhdmVyc2VBbGxDaGlsZHJlbihjaGlsZHJlbiwgY2FsbGJhY2ssIHRyYXZlcnNlQ29udGV4dCkge1xuICBpZiAoY2hpbGRyZW4gPT0gbnVsbCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgcmV0dXJuIHRyYXZlcnNlQWxsQ2hpbGRyZW5JbXBsKGNoaWxkcmVuLCAnJywgY2FsbGJhY2ssIHRyYXZlcnNlQ29udGV4dCk7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSBrZXkgc3RyaW5nIHRoYXQgaWRlbnRpZmllcyBhIGNvbXBvbmVudCB3aXRoaW4gYSBzZXQuXG4gKlxuICogQHBhcmFtIHsqfSBjb21wb25lbnQgQSBjb21wb25lbnQgdGhhdCBjb3VsZCBjb250YWluIGEgbWFudWFsIGtleS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBJbmRleCB0aGF0IGlzIHVzZWQgaWYgYSBtYW51YWwga2V5IGlzIG5vdCBwcm92aWRlZC5cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0Q29tcG9uZW50S2V5KGNvbXBvbmVudCwgaW5kZXgpIHtcbiAgLy8gRG8gc29tZSB0eXBlY2hlY2tpbmcgaGVyZSBzaW5jZSB3ZSBjYWxsIHRoaXMgYmxpbmRseS4gV2Ugd2FudCB0byBlbnN1cmVcbiAgLy8gdGhhdCB3ZSBkb24ndCBibG9jayBwb3RlbnRpYWwgZnV0dXJlIEVTIEFQSXMuXG4gIGlmICh0eXBlb2YgY29tcG9uZW50ID09PSAnb2JqZWN0JyAmJiBjb21wb25lbnQgIT09IG51bGwgJiYgY29tcG9uZW50LmtleSAhPSBudWxsKSB7XG4gICAgLy8gRXhwbGljaXQga2V5XG4gICAgcmV0dXJuIGVzY2FwZShjb21wb25lbnQua2V5KTtcbiAgfVxuICAvLyBJbXBsaWNpdCBrZXkgZGV0ZXJtaW5lZCBieSB0aGUgaW5kZXggaW4gdGhlIHNldFxuICByZXR1cm4gaW5kZXgudG9TdHJpbmcoMzYpO1xufVxuXG5mdW5jdGlvbiBmb3JFYWNoU2luZ2xlQ2hpbGQoYm9va0tlZXBpbmcsIGNoaWxkLCBuYW1lKSB7XG4gIHZhciBmdW5jID0gYm9va0tlZXBpbmcuZnVuYyxcbiAgICAgIGNvbnRleHQgPSBib29rS2VlcGluZy5jb250ZXh0O1xuXG4gIGZ1bmMuY2FsbChjb250ZXh0LCBjaGlsZCwgYm9va0tlZXBpbmcuY291bnQrKyk7XG59XG5cbi8qKlxuICogSXRlcmF0ZXMgdGhyb3VnaCBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVuZm9yZWFjaFxuICpcbiAqIFRoZSBwcm92aWRlZCBmb3JFYWNoRnVuYyhjaGlsZCwgaW5kZXgpIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoXG4gKiBsZWFmIGNoaWxkLlxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLlxuICogQHBhcmFtIHtmdW5jdGlvbigqLCBpbnQpfSBmb3JFYWNoRnVuY1xuICogQHBhcmFtIHsqfSBmb3JFYWNoQ29udGV4dCBDb250ZXh0IGZvciBmb3JFYWNoQ29udGV4dC5cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaENoaWxkcmVuKGNoaWxkcmVuLCBmb3JFYWNoRnVuYywgZm9yRWFjaENvbnRleHQpIHtcbiAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cbiAgdmFyIHRyYXZlcnNlQ29udGV4dCA9IGdldFBvb2xlZFRyYXZlcnNlQ29udGV4dChudWxsLCBudWxsLCBmb3JFYWNoRnVuYywgZm9yRWFjaENvbnRleHQpO1xuICB0cmF2ZXJzZUFsbENoaWxkcmVuKGNoaWxkcmVuLCBmb3JFYWNoU2luZ2xlQ2hpbGQsIHRyYXZlcnNlQ29udGV4dCk7XG4gIHJlbGVhc2VUcmF2ZXJzZUNvbnRleHQodHJhdmVyc2VDb250ZXh0KTtcbn1cblxuZnVuY3Rpb24gbWFwU2luZ2xlQ2hpbGRJbnRvQ29udGV4dChib29rS2VlcGluZywgY2hpbGQsIGNoaWxkS2V5KSB7XG4gIHZhciByZXN1bHQgPSBib29rS2VlcGluZy5yZXN1bHQsXG4gICAgICBrZXlQcmVmaXggPSBib29rS2VlcGluZy5rZXlQcmVmaXgsXG4gICAgICBmdW5jID0gYm9va0tlZXBpbmcuZnVuYyxcbiAgICAgIGNvbnRleHQgPSBib29rS2VlcGluZy5jb250ZXh0O1xuXG5cbiAgdmFyIG1hcHBlZENoaWxkID0gZnVuYy5jYWxsKGNvbnRleHQsIGNoaWxkLCBib29rS2VlcGluZy5jb3VudCsrKTtcbiAgaWYgKEFycmF5LmlzQXJyYXkobWFwcGVkQ2hpbGQpKSB7XG4gICAgbWFwSW50b1dpdGhLZXlQcmVmaXhJbnRlcm5hbChtYXBwZWRDaGlsZCwgcmVzdWx0LCBjaGlsZEtleSwgZnVuY3Rpb24gKGMpIHtcbiAgICAgIHJldHVybiBjO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKG1hcHBlZENoaWxkICE9IG51bGwpIHtcbiAgICBpZiAoaXNWYWxpZEVsZW1lbnQobWFwcGVkQ2hpbGQpKSB7XG4gICAgICBtYXBwZWRDaGlsZCA9IGNsb25lQW5kUmVwbGFjZUtleShtYXBwZWRDaGlsZCxcbiAgICAgIC8vIEtlZXAgYm90aCB0aGUgKG1hcHBlZCkgYW5kIG9sZCBrZXlzIGlmIHRoZXkgZGlmZmVyLCBqdXN0IGFzXG4gICAgICAvLyB0cmF2ZXJzZUFsbENoaWxkcmVuIHVzZWQgdG8gZG8gZm9yIG9iamVjdHMgYXMgY2hpbGRyZW5cbiAgICAgIGtleVByZWZpeCArIChtYXBwZWRDaGlsZC5rZXkgJiYgKCFjaGlsZCB8fCBjaGlsZC5rZXkgIT09IG1hcHBlZENoaWxkLmtleSkgPyBlc2NhcGVVc2VyUHJvdmlkZWRLZXkobWFwcGVkQ2hpbGQua2V5KSArICcvJyA6ICcnKSArIGNoaWxkS2V5KTtcbiAgICB9XG4gICAgcmVzdWx0LnB1c2gobWFwcGVkQ2hpbGQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcEludG9XaXRoS2V5UHJlZml4SW50ZXJuYWwoY2hpbGRyZW4sIGFycmF5LCBwcmVmaXgsIGZ1bmMsIGNvbnRleHQpIHtcbiAgdmFyIGVzY2FwZWRQcmVmaXggPSAnJztcbiAgaWYgKHByZWZpeCAhPSBudWxsKSB7XG4gICAgZXNjYXBlZFByZWZpeCA9IGVzY2FwZVVzZXJQcm92aWRlZEtleShwcmVmaXgpICsgJy8nO1xuICB9XG4gIHZhciB0cmF2ZXJzZUNvbnRleHQgPSBnZXRQb29sZWRUcmF2ZXJzZUNvbnRleHQoYXJyYXksIGVzY2FwZWRQcmVmaXgsIGZ1bmMsIGNvbnRleHQpO1xuICB0cmF2ZXJzZUFsbENoaWxkcmVuKGNoaWxkcmVuLCBtYXBTaW5nbGVDaGlsZEludG9Db250ZXh0LCB0cmF2ZXJzZUNvbnRleHQpO1xuICByZWxlYXNlVHJhdmVyc2VDb250ZXh0KHRyYXZlcnNlQ29udGV4dCk7XG59XG5cbi8qKlxuICogTWFwcyBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVubWFwXG4gKlxuICogVGhlIHByb3ZpZGVkIG1hcEZ1bmN0aW9uKGNoaWxkLCBrZXksIGluZGV4KSB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaFxuICogbGVhZiBjaGlsZC5cbiAqXG4gKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKiwgaW50KX0gZnVuYyBUaGUgbWFwIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IENvbnRleHQgZm9yIG1hcEZ1bmN0aW9uLlxuICogQHJldHVybiB7b2JqZWN0fSBPYmplY3QgY29udGFpbmluZyB0aGUgb3JkZXJlZCBtYXAgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmMsIGNvbnRleHQpIHtcbiAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBtYXBJbnRvV2l0aEtleVByZWZpeEludGVybmFsKGNoaWxkcmVuLCByZXN1bHQsIG51bGwsIGZ1bmMsIGNvbnRleHQpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIENvdW50IHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhc1xuICogYHByb3BzLmNoaWxkcmVuYC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0Y2hpbGRyZW5jb3VudFxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLlxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGNoaWxkcmVuLlxuICovXG5mdW5jdGlvbiBjb3VudENoaWxkcmVuKGNoaWxkcmVuKSB7XG4gIHJldHVybiB0cmF2ZXJzZUFsbENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sIG51bGwpO1xufVxuXG4vKipcbiAqIEZsYXR0ZW4gYSBjaGlsZHJlbiBvYmplY3QgKHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYCkgYW5kXG4gKiByZXR1cm4gYW4gYXJyYXkgd2l0aCBhcHByb3ByaWF0ZWx5IHJlLWtleWVkIGNoaWxkcmVuLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbnRvYXJyYXlcbiAqL1xuZnVuY3Rpb24gdG9BcnJheShjaGlsZHJlbikge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIG1hcEludG9XaXRoS2V5UHJlZml4SW50ZXJuYWwoY2hpbGRyZW4sIHJlc3VsdCwgbnVsbCwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmaXJzdCBjaGlsZCBpbiBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4gYW5kIHZlcmlmaWVzIHRoYXQgdGhlcmVcbiAqIGlzIG9ubHkgb25lIGNoaWxkIGluIHRoZSBjb2xsZWN0aW9uLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbm9ubHlcbiAqXG4gKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBhIHNpbmdsZSBjaGlsZCBnZXRzXG4gKiBwYXNzZWQgd2l0aG91dCBhIHdyYXBwZXIsIGJ1dCB0aGUgcHVycG9zZSBvZiB0aGlzIGhlbHBlciBmdW5jdGlvbiBpcyB0b1xuICogYWJzdHJhY3QgYXdheSB0aGUgcGFydGljdWxhciBzdHJ1Y3R1cmUgb2YgY2hpbGRyZW4uXG4gKlxuICogQHBhcmFtIHs/b2JqZWN0fSBjaGlsZHJlbiBDaGlsZCBjb2xsZWN0aW9uIHN0cnVjdHVyZS5cbiAqIEByZXR1cm4ge1JlYWN0RWxlbWVudH0gVGhlIGZpcnN0IGFuZCBvbmx5IGBSZWFjdEVsZW1lbnRgIGNvbnRhaW5lZCBpbiB0aGVcbiAqIHN0cnVjdHVyZS5cbiAqL1xuZnVuY3Rpb24gb25seUNoaWxkKGNoaWxkcmVuKSB7XG4gICFpc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgPyBpbnZhcmlhbnQoZmFsc2UsICdSZWFjdC5DaGlsZHJlbi5vbmx5IGV4cGVjdGVkIHRvIHJlY2VpdmUgYSBzaW5nbGUgUmVhY3QgZWxlbWVudCBjaGlsZC4nKSA6IHZvaWQgMDtcbiAgcmV0dXJuIGNoaWxkcmVuO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDb250ZXh0KGRlZmF1bHRWYWx1ZSwgY2FsY3VsYXRlQ2hhbmdlZEJpdHMpIHtcbiAgaWYgKGNhbGN1bGF0ZUNoYW5nZWRCaXRzID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWxjdWxhdGVDaGFuZ2VkQml0cyA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAge1xuICAgICAgIShjYWxjdWxhdGVDaGFuZ2VkQml0cyA9PT0gbnVsbCB8fCB0eXBlb2YgY2FsY3VsYXRlQ2hhbmdlZEJpdHMgPT09ICdmdW5jdGlvbicpID8gd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnY3JlYXRlQ29udGV4dDogRXhwZWN0ZWQgdGhlIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCB0byBiZSBhICcgKyAnZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6ICVzJywgY2FsY3VsYXRlQ2hhbmdlZEJpdHMpIDogdm9pZCAwO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjb250ZXh0ID0ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9DT05URVhUX1RZUEUsXG4gICAgX2NhbGN1bGF0ZUNoYW5nZWRCaXRzOiBjYWxjdWxhdGVDaGFuZ2VkQml0cyxcbiAgICAvLyBBcyBhIHdvcmthcm91bmQgdG8gc3VwcG9ydCBtdWx0aXBsZSBjb25jdXJyZW50IHJlbmRlcmVycywgd2UgY2F0ZWdvcml6ZVxuICAgIC8vIHNvbWUgcmVuZGVyZXJzIGFzIHByaW1hcnkgYW5kIG90aGVycyBhcyBzZWNvbmRhcnkuIFdlIG9ubHkgZXhwZWN0XG4gICAgLy8gdGhlcmUgdG8gYmUgdHdvIGNvbmN1cnJlbnQgcmVuZGVyZXJzIGF0IG1vc3Q6IFJlYWN0IE5hdGl2ZSAocHJpbWFyeSkgYW5kXG4gICAgLy8gRmFicmljIChzZWNvbmRhcnkpOyBSZWFjdCBET00gKHByaW1hcnkpIGFuZCBSZWFjdCBBUlQgKHNlY29uZGFyeSkuXG4gICAgLy8gU2Vjb25kYXJ5IHJlbmRlcmVycyBzdG9yZSB0aGVpciBjb250ZXh0IHZhbHVlcyBvbiBzZXBhcmF0ZSBmaWVsZHMuXG4gICAgX2N1cnJlbnRWYWx1ZTogZGVmYXVsdFZhbHVlLFxuICAgIF9jdXJyZW50VmFsdWUyOiBkZWZhdWx0VmFsdWUsXG4gICAgLy8gVXNlZCB0byB0cmFjayBob3cgbWFueSBjb25jdXJyZW50IHJlbmRlcmVycyB0aGlzIGNvbnRleHQgY3VycmVudGx5XG4gICAgLy8gc3VwcG9ydHMgd2l0aGluIGluIGEgc2luZ2xlIHJlbmRlcmVyLiBTdWNoIGFzIHBhcmFsbGVsIHNlcnZlciByZW5kZXJpbmcuXG4gICAgX3RocmVhZENvdW50OiAwLFxuICAgIC8vIFRoZXNlIGFyZSBjaXJjdWxhclxuICAgIFByb3ZpZGVyOiBudWxsLFxuICAgIENvbnN1bWVyOiBudWxsXG4gIH07XG5cbiAgY29udGV4dC5Qcm92aWRlciA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfUFJPVklERVJfVFlQRSxcbiAgICBfY29udGV4dDogY29udGV4dFxuICB9O1xuXG4gIHZhciBoYXNXYXJuZWRBYm91dFVzaW5nTmVzdGVkQ29udGV4dENvbnN1bWVycyA9IGZhbHNlO1xuICB2YXIgaGFzV2FybmVkQWJvdXRVc2luZ0NvbnN1bWVyUHJvdmlkZXIgPSBmYWxzZTtcblxuICB7XG4gICAgLy8gQSBzZXBhcmF0ZSBvYmplY3QsIGJ1dCBwcm94aWVzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGNvbnRleHQgb2JqZWN0IGZvclxuICAgIC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBJdCBoYXMgYSBkaWZmZXJlbnQgJCR0eXBlb2YsIHNvIHdlIGNhbiBwcm9wZXJseVxuICAgIC8vIHdhcm4gZm9yIHRoZSBpbmNvcnJlY3QgdXNhZ2Ugb2YgQ29udGV4dCBhcyBhIENvbnN1bWVyLlxuICAgIHZhciBDb25zdW1lciA9IHtcbiAgICAgICQkdHlwZW9mOiBSRUFDVF9DT05URVhUX1RZUEUsXG4gICAgICBfY29udGV4dDogY29udGV4dCxcbiAgICAgIF9jYWxjdWxhdGVDaGFuZ2VkQml0czogY29udGV4dC5fY2FsY3VsYXRlQ2hhbmdlZEJpdHNcbiAgICB9O1xuICAgIC8vICRGbG93Rml4TWU6IEZsb3cgY29tcGxhaW5zIGFib3V0IG5vdCBzZXR0aW5nIGEgdmFsdWUsIHdoaWNoIGlzIGludGVudGlvbmFsIGhlcmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb25zdW1lciwge1xuICAgICAgUHJvdmlkZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKCFoYXNXYXJuZWRBYm91dFVzaW5nQ29uc3VtZXJQcm92aWRlcikge1xuICAgICAgICAgICAgaGFzV2FybmVkQWJvdXRVc2luZ0NvbnN1bWVyUHJvdmlkZXIgPSB0cnVlO1xuICAgICAgICAgICAgd2FybmluZyQxKGZhbHNlLCAnUmVuZGVyaW5nIDxDb250ZXh0LkNvbnN1bWVyLlByb3ZpZGVyPiBpcyBub3Qgc3VwcG9ydGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gJyArICdhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBEaWQgeW91IG1lYW4gdG8gcmVuZGVyIDxDb250ZXh0LlByb3ZpZGVyPiBpbnN0ZWFkPycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY29udGV4dC5Qcm92aWRlcjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoX1Byb3ZpZGVyKSB7XG4gICAgICAgICAgY29udGV4dC5Qcm92aWRlciA9IF9Qcm92aWRlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIF9jdXJyZW50VmFsdWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuX2N1cnJlbnRWYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoX2N1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgIGNvbnRleHQuX2N1cnJlbnRWYWx1ZSA9IF9jdXJyZW50VmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBfY3VycmVudFZhbHVlMjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5fY3VycmVudFZhbHVlMjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoX2N1cnJlbnRWYWx1ZTIpIHtcbiAgICAgICAgICBjb250ZXh0Ll9jdXJyZW50VmFsdWUyID0gX2N1cnJlbnRWYWx1ZTI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBfdGhyZWFkQ291bnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3RocmVhZENvdW50O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChfdGhyZWFkQ291bnQpIHtcbiAgICAgICAgICBjb250ZXh0Ll90aHJlYWRDb3VudCA9IF90aHJlYWRDb3VudDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIENvbnN1bWVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICghaGFzV2FybmVkQWJvdXRVc2luZ05lc3RlZENvbnRleHRDb25zdW1lcnMpIHtcbiAgICAgICAgICAgIGhhc1dhcm5lZEFib3V0VXNpbmdOZXN0ZWRDb250ZXh0Q29uc3VtZXJzID0gdHJ1ZTtcbiAgICAgICAgICAgIHdhcm5pbmckMShmYWxzZSwgJ1JlbmRlcmluZyA8Q29udGV4dC5Db25zdW1lci5Db25zdW1lcj4gaXMgbm90IHN1cHBvcnRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluICcgKyAnYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gRGlkIHlvdSBtZWFuIHRvIHJlbmRlciA8Q29udGV4dC5Db25zdW1lcj4gaW5zdGVhZD8nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuQ29uc3VtZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyAkRmxvd0ZpeE1lOiBGbG93IGNvbXBsYWlucyBhYm91dCBtaXNzaW5nIHByb3BlcnRpZXMgYmVjYXVzZSBpdCBkb2Vzbid0IHVuZGVyc3RhbmQgZGVmaW5lUHJvcGVydHlcbiAgICBjb250ZXh0LkNvbnN1bWVyID0gQ29uc3VtZXI7XG4gIH1cblxuICB7XG4gICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyID0gbnVsbDtcbiAgICBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIyID0gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBjb250ZXh0O1xufVxuXG5mdW5jdGlvbiBsYXp5KGN0b3IpIHtcbiAgdmFyIGxhenlUeXBlID0ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9MQVpZX1RZUEUsXG4gICAgX2N0b3I6IGN0b3IsXG4gICAgLy8gUmVhY3QgdXNlcyB0aGVzZSBmaWVsZHMgdG8gc3RvcmUgdGhlIHJlc3VsdC5cbiAgICBfc3RhdHVzOiAtMSxcbiAgICBfcmVzdWx0OiBudWxsXG4gIH07XG5cbiAge1xuICAgIC8vIEluIHByb2R1Y3Rpb24sIHRoaXMgd291bGQganVzdCBzZXQgaXQgb24gdGhlIG9iamVjdC5cbiAgICB2YXIgZGVmYXVsdFByb3BzID0gdm9pZCAwO1xuICAgIHZhciBwcm9wVHlwZXMgPSB2b2lkIDA7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobGF6eVR5cGUsIHtcbiAgICAgIGRlZmF1bHRQcm9wczoge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBkZWZhdWx0UHJvcHM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5ld0RlZmF1bHRQcm9wcykge1xuICAgICAgICAgIHdhcm5pbmckMShmYWxzZSwgJ1JlYWN0LmxhenkoLi4uKTogSXQgaXMgbm90IHN1cHBvcnRlZCB0byBhc3NpZ24gYGRlZmF1bHRQcm9wc2AgdG8gJyArICdhIGxhenkgY29tcG9uZW50IGltcG9ydC4gRWl0aGVyIHNwZWNpZnkgdGhlbSB3aGVyZSB0aGUgY29tcG9uZW50ICcgKyAnaXMgZGVmaW5lZCwgb3IgY3JlYXRlIGEgd3JhcHBpbmcgY29tcG9uZW50IGFyb3VuZCBpdC4nKTtcbiAgICAgICAgICBkZWZhdWx0UHJvcHMgPSBuZXdEZWZhdWx0UHJvcHM7XG4gICAgICAgICAgLy8gTWF0Y2ggcHJvZHVjdGlvbiBiZWhhdmlvciBtb3JlIGNsb3NlbHk6XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGxhenlUeXBlLCAnZGVmYXVsdFByb3BzJywge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcHJvcFR5cGVzOiB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHByb3BUeXBlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3UHJvcFR5cGVzKSB7XG4gICAgICAgICAgd2FybmluZyQxKGZhbHNlLCAnUmVhY3QubGF6eSguLi4pOiBJdCBpcyBub3Qgc3VwcG9ydGVkIHRvIGFzc2lnbiBgcHJvcFR5cGVzYCB0byAnICsgJ2EgbGF6eSBjb21wb25lbnQgaW1wb3J0LiBFaXRoZXIgc3BlY2lmeSB0aGVtIHdoZXJlIHRoZSBjb21wb25lbnQgJyArICdpcyBkZWZpbmVkLCBvciBjcmVhdGUgYSB3cmFwcGluZyBjb21wb25lbnQgYXJvdW5kIGl0LicpO1xuICAgICAgICAgIHByb3BUeXBlcyA9IG5ld1Byb3BUeXBlcztcbiAgICAgICAgICAvLyBNYXRjaCBwcm9kdWN0aW9uIGJlaGF2aW9yIG1vcmUgY2xvc2VseTpcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobGF6eVR5cGUsICdwcm9wVHlwZXMnLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBsYXp5VHlwZTtcbn1cblxuZnVuY3Rpb24gZm9yd2FyZFJlZihyZW5kZXIpIHtcbiAge1xuICAgIGlmIChyZW5kZXIgIT0gbnVsbCAmJiByZW5kZXIuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSkge1xuICAgICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnZm9yd2FyZFJlZiByZXF1aXJlcyBhIHJlbmRlciBmdW5jdGlvbiBidXQgcmVjZWl2ZWQgYSBgbWVtb2AgJyArICdjb21wb25lbnQuIEluc3RlYWQgb2YgZm9yd2FyZFJlZihtZW1vKC4uLikpLCB1c2UgJyArICdtZW1vKGZvcndhcmRSZWYoLi4uKSkuJyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcmVuZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdmb3J3YXJkUmVmIHJlcXVpcmVzIGEgcmVuZGVyIGZ1bmN0aW9uIGJ1dCB3YXMgZ2l2ZW4gJXMuJywgcmVuZGVyID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHJlbmRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgICEoXG4gICAgICAvLyBEbyBub3Qgd2FybiBmb3IgMCBhcmd1bWVudHMgYmVjYXVzZSBpdCBjb3VsZCBiZSBkdWUgdG8gdXNhZ2Ugb2YgdGhlICdhcmd1bWVudHMnIG9iamVjdFxuICAgICAgcmVuZGVyLmxlbmd0aCA9PT0gMCB8fCByZW5kZXIubGVuZ3RoID09PSAyKSA/IHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ2ZvcndhcmRSZWYgcmVuZGVyIGZ1bmN0aW9ucyBhY2NlcHQgZXhhY3RseSB0d28gcGFyYW1ldGVyczogcHJvcHMgYW5kIHJlZi4gJXMnLCByZW5kZXIubGVuZ3RoID09PSAxID8gJ0RpZCB5b3UgZm9yZ2V0IHRvIHVzZSB0aGUgcmVmIHBhcmFtZXRlcj8nIDogJ0FueSBhZGRpdGlvbmFsIHBhcmFtZXRlciB3aWxsIGJlIHVuZGVmaW5lZC4nKSA6IHZvaWQgMDtcbiAgICB9XG5cbiAgICBpZiAocmVuZGVyICE9IG51bGwpIHtcbiAgICAgICEocmVuZGVyLmRlZmF1bHRQcm9wcyA9PSBudWxsICYmIHJlbmRlci5wcm9wVHlwZXMgPT0gbnVsbCkgPyB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdmb3J3YXJkUmVmIHJlbmRlciBmdW5jdGlvbnMgZG8gbm90IHN1cHBvcnQgcHJvcFR5cGVzIG9yIGRlZmF1bHRQcm9wcy4gJyArICdEaWQgeW91IGFjY2lkZW50YWxseSBwYXNzIGEgUmVhY3QgY29tcG9uZW50PycpIDogdm9pZCAwO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUsXG4gICAgcmVuZGVyOiByZW5kZXJcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fFxuICAvLyBOb3RlOiBpdHMgdHlwZW9mIG1pZ2h0IGJlIG90aGVyIHRoYW4gJ3N5bWJvbCcgb3IgJ251bWJlcicgaWYgaXQncyBhIHBvbHlmaWxsLlxuICB0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUpO1xufVxuXG5mdW5jdGlvbiBtZW1vKHR5cGUsIGNvbXBhcmUpIHtcbiAge1xuICAgIGlmICghaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpKSB7XG4gICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdtZW1vOiBUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIGNvbXBvbmVudC4gSW5zdGVhZCAnICsgJ3JlY2VpdmVkOiAlcycsIHR5cGUgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgdHlwZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX01FTU9fVFlQRSxcbiAgICB0eXBlOiB0eXBlLFxuICAgIGNvbXBhcmU6IGNvbXBhcmUgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb21wYXJlXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVEaXNwYXRjaGVyKCkge1xuICB2YXIgZGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudDtcbiAgIShkaXNwYXRjaGVyICE9PSBudWxsKSA/IGludmFyaWFudChmYWxzZSwgJ0ludmFsaWQgaG9vayBjYWxsLiBIb29rcyBjYW4gb25seSBiZSBjYWxsZWQgaW5zaWRlIG9mIHRoZSBib2R5IG9mIGEgZnVuY3Rpb24gY29tcG9uZW50LiBUaGlzIGNvdWxkIGhhcHBlbiBmb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcXG4xLiBZb3UgbWlnaHQgaGF2ZSBtaXNtYXRjaGluZyB2ZXJzaW9ucyBvZiBSZWFjdCBhbmQgdGhlIHJlbmRlcmVyIChzdWNoIGFzIFJlYWN0IERPTSlcXG4yLiBZb3UgbWlnaHQgYmUgYnJlYWtpbmcgdGhlIFJ1bGVzIG9mIEhvb2tzXFxuMy4gWW91IG1pZ2h0IGhhdmUgbW9yZSB0aGFuIG9uZSBjb3B5IG9mIFJlYWN0IGluIHRoZSBzYW1lIGFwcFxcblNlZSBodHRwczovL2ZiLm1lL3JlYWN0LWludmFsaWQtaG9vay1jYWxsIGZvciB0aXBzIGFib3V0IGhvdyB0byBkZWJ1ZyBhbmQgZml4IHRoaXMgcHJvYmxlbS4nKSA6IHZvaWQgMDtcbiAgcmV0dXJuIGRpc3BhdGNoZXI7XG59XG5cbmZ1bmN0aW9uIHVzZUNvbnRleHQoQ29udGV4dCwgdW5zdGFibGVfb2JzZXJ2ZWRCaXRzKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAge1xuICAgICEodW5zdGFibGVfb2JzZXJ2ZWRCaXRzID09PSB1bmRlZmluZWQpID8gd2FybmluZyQxKGZhbHNlLCAndXNlQ29udGV4dCgpIHNlY29uZCBhcmd1bWVudCBpcyByZXNlcnZlZCBmb3IgZnV0dXJlICcgKyAndXNlIGluIFJlYWN0LiBQYXNzaW5nIGl0IGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnWW91IHBhc3NlZDogJXMuJXMnLCB1bnN0YWJsZV9vYnNlcnZlZEJpdHMsIHR5cGVvZiB1bnN0YWJsZV9vYnNlcnZlZEJpdHMgPT09ICdudW1iZXInICYmIEFycmF5LmlzQXJyYXkoYXJndW1lbnRzWzJdKSA/ICdcXG5cXG5EaWQgeW91IGNhbGwgYXJyYXkubWFwKHVzZUNvbnRleHQpPyAnICsgJ0NhbGxpbmcgSG9va3MgaW5zaWRlIGEgbG9vcCBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ0xlYXJuIG1vcmUgYXQgaHR0cHM6Ly9mYi5tZS9ydWxlcy1vZi1ob29rcycgOiAnJykgOiB2b2lkIDA7XG5cbiAgICAvLyBUT0RPOiBhZGQgYSBtb3JlIGdlbmVyaWMgd2FybmluZyBmb3IgaW52YWxpZCB2YWx1ZXMuXG4gICAgaWYgKENvbnRleHQuX2NvbnRleHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIHJlYWxDb250ZXh0ID0gQ29udGV4dC5fY29udGV4dDtcbiAgICAgIC8vIERvbid0IGRlZHVwbGljYXRlIGJlY2F1c2UgdGhpcyBsZWdpdGltYXRlbHkgY2F1c2VzIGJ1Z3NcbiAgICAgIC8vIGFuZCBub2JvZHkgc2hvdWxkIGJlIHVzaW5nIHRoaXMgaW4gZXhpc3RpbmcgY29kZS5cbiAgICAgIGlmIChyZWFsQ29udGV4dC5Db25zdW1lciA9PT0gQ29udGV4dCkge1xuICAgICAgICB3YXJuaW5nJDEoZmFsc2UsICdDYWxsaW5nIHVzZUNvbnRleHQoQ29udGV4dC5Db25zdW1lcikgaXMgbm90IHN1cHBvcnRlZCwgbWF5IGNhdXNlIGJ1Z3MsIGFuZCB3aWxsIGJlICcgKyAncmVtb3ZlZCBpbiBhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBEaWQgeW91IG1lYW4gdG8gY2FsbCB1c2VDb250ZXh0KENvbnRleHQpIGluc3RlYWQ/Jyk7XG4gICAgICB9IGVsc2UgaWYgKHJlYWxDb250ZXh0LlByb3ZpZGVyID09PSBDb250ZXh0KSB7XG4gICAgICAgIHdhcm5pbmckMShmYWxzZSwgJ0NhbGxpbmcgdXNlQ29udGV4dChDb250ZXh0LlByb3ZpZGVyKSBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBjYWxsIHVzZUNvbnRleHQoQ29udGV4dCkgaW5zdGVhZD8nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlQ29udGV4dChDb250ZXh0LCB1bnN0YWJsZV9vYnNlcnZlZEJpdHMpO1xufVxuXG5mdW5jdGlvbiB1c2VTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VTdGF0ZShpbml0aWFsU3RhdGUpO1xufVxuXG5mdW5jdGlvbiB1c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xufVxuXG5mdW5jdGlvbiB1c2VSZWYoaW5pdGlhbFZhbHVlKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlUmVmKGluaXRpYWxWYWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHVzZUVmZmVjdChjcmVhdGUsIGlucHV0cykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUVmZmVjdChjcmVhdGUsIGlucHV0cyk7XG59XG5cbmZ1bmN0aW9uIHVzZUxheW91dEVmZmVjdChjcmVhdGUsIGlucHV0cykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUxheW91dEVmZmVjdChjcmVhdGUsIGlucHV0cyk7XG59XG5cbmZ1bmN0aW9uIHVzZUNhbGxiYWNrKGNhbGxiYWNrLCBpbnB1dHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VDYWxsYmFjayhjYWxsYmFjaywgaW5wdXRzKTtcbn1cblxuZnVuY3Rpb24gdXNlTWVtbyhjcmVhdGUsIGlucHV0cykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZU1lbW8oY3JlYXRlLCBpbnB1dHMpO1xufVxuXG5mdW5jdGlvbiB1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBpbnB1dHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBpbnB1dHMpO1xufVxuXG5mdW5jdGlvbiB1c2VEZWJ1Z1ZhbHVlKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICB7XG4gICAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICAgIHJldHVybiBkaXNwYXRjaGVyLnVzZURlYnVnVmFsdWUodmFsdWUsIGZvcm1hdHRlckZuKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlYWN0RWxlbWVudFZhbGlkYXRvciBwcm92aWRlcyBhIHdyYXBwZXIgYXJvdW5kIGEgZWxlbWVudCBmYWN0b3J5XG4gKiB3aGljaCB2YWxpZGF0ZXMgdGhlIHByb3BzIHBhc3NlZCB0byB0aGUgZWxlbWVudC4gVGhpcyBpcyBpbnRlbmRlZCB0byBiZVxuICogdXNlZCBvbmx5IGluIERFViBhbmQgY291bGQgYmUgcmVwbGFjZWQgYnkgYSBzdGF0aWMgdHlwZSBjaGVja2VyIGZvciBsYW5ndWFnZXNcbiAqIHRoYXQgc3VwcG9ydCBpdC5cbiAqL1xuXG52YXIgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24gPSB2b2lkIDA7XG5cbntcbiAgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24gPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkge1xuICBpZiAoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkge1xuICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnR5cGUpO1xuICAgIGlmIChuYW1lKSB7XG4gICAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgbmFtZSArICdgLic7XG4gICAgfVxuICB9XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW0oZWxlbWVudFByb3BzKSB7XG4gIGlmIChlbGVtZW50UHJvcHMgIT09IG51bGwgJiYgZWxlbWVudFByb3BzICE9PSB1bmRlZmluZWQgJiYgZWxlbWVudFByb3BzLl9fc291cmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgc291cmNlID0gZWxlbWVudFByb3BzLl9fc291cmNlO1xuICAgIHZhciBmaWxlTmFtZSA9IHNvdXJjZS5maWxlTmFtZS5yZXBsYWNlKC9eLipbXFxcXFxcL10vLCAnJyk7XG4gICAgdmFyIGxpbmVOdW1iZXIgPSBzb3VyY2UubGluZU51bWJlcjtcbiAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHlvdXIgY29kZSBhdCAnICsgZmlsZU5hbWUgKyAnOicgKyBsaW5lTnVtYmVyICsgJy4nO1xuICB9XG4gIHJldHVybiAnJztcbn1cblxuLyoqXG4gKiBXYXJuIGlmIHRoZXJlJ3Mgbm8ga2V5IGV4cGxpY2l0bHkgc2V0IG9uIGR5bmFtaWMgYXJyYXlzIG9mIGNoaWxkcmVuIG9yXG4gKiBvYmplY3Qga2V5cyBhcmUgbm90IHZhbGlkLiBUaGlzIGFsbG93cyB1cyB0byBrZWVwIHRyYWNrIG9mIGNoaWxkcmVuIGJldHdlZW5cbiAqIHVwZGF0ZXMuXG4gKi9cbnZhciBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcblxuZnVuY3Rpb24gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKSB7XG4gIHZhciBpbmZvID0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCk7XG5cbiAgaWYgKCFpbmZvKSB7XG4gICAgdmFyIHBhcmVudE5hbWUgPSB0eXBlb2YgcGFyZW50VHlwZSA9PT0gJ3N0cmluZycgPyBwYXJlbnRUeXBlIDogcGFyZW50VHlwZS5kaXNwbGF5TmFtZSB8fCBwYXJlbnRUeXBlLm5hbWU7XG4gICAgaWYgKHBhcmVudE5hbWUpIHtcbiAgICAgIGluZm8gPSAnXFxuXFxuQ2hlY2sgdGhlIHRvcC1sZXZlbCByZW5kZXIgY2FsbCB1c2luZyA8JyArIHBhcmVudE5hbWUgKyAnPi4nO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaW5mbztcbn1cblxuLyoqXG4gKiBXYXJuIGlmIHRoZSBlbGVtZW50IGRvZXNuJ3QgaGF2ZSBhbiBleHBsaWNpdCBrZXkgYXNzaWduZWQgdG8gaXQuXG4gKiBUaGlzIGVsZW1lbnQgaXMgaW4gYW4gYXJyYXkuIFRoZSBhcnJheSBjb3VsZCBncm93IGFuZCBzaHJpbmsgb3IgYmVcbiAqIHJlb3JkZXJlZC4gQWxsIGNoaWxkcmVuIHRoYXQgaGF2ZW4ndCBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkIGFyZSByZXF1aXJlZCB0b1xuICogaGF2ZSBhIFwia2V5XCIgcHJvcGVydHkgYXNzaWduZWQgdG8gaXQuIEVycm9yIHN0YXR1c2VzIGFyZSBjYWNoZWQgc28gYSB3YXJuaW5nXG4gKiB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgdGhhdCByZXF1aXJlcyBhIGtleS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBlbGVtZW50J3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVFeHBsaWNpdEtleShlbGVtZW50LCBwYXJlbnRUeXBlKSB7XG4gIGlmICghZWxlbWVudC5fc3RvcmUgfHwgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkIHx8IGVsZW1lbnQua2V5ICE9IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcblxuICB2YXIgY3VycmVudENvbXBvbmVudEVycm9ySW5mbyA9IGdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8ocGFyZW50VHlwZSk7XG4gIGlmIChvd25lckhhc0tleVVzZVdhcm5pbmdbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgb3duZXJIYXNLZXlVc2VXYXJuaW5nW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dID0gdHJ1ZTtcblxuICAvLyBVc3VhbGx5IHRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBvZmZlbmRlciwgYnV0IGlmIGl0IGFjY2VwdHMgY2hpbGRyZW4gYXMgYVxuICAvLyBwcm9wZXJ0eSwgaXQgbWF5IGJlIHRoZSBjcmVhdG9yIG9mIHRoZSBjaGlsZCB0aGF0J3MgcmVzcG9uc2libGUgZm9yXG4gIC8vIGFzc2lnbmluZyBpdCBhIGtleS5cbiAgdmFyIGNoaWxkT3duZXIgPSAnJztcbiAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5fb3duZXIgJiYgZWxlbWVudC5fb3duZXIgIT09IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQpIHtcbiAgICAvLyBHaXZlIHRoZSBjb21wb25lbnQgdGhhdCBvcmlnaW5hbGx5IGNyZWF0ZWQgdGhpcyBjaGlsZC5cbiAgICBjaGlsZE93bmVyID0gJyBJdCB3YXMgcGFzc2VkIGEgY2hpbGQgZnJvbSAnICsgZ2V0Q29tcG9uZW50TmFtZShlbGVtZW50Ll9vd25lci50eXBlKSArICcuJztcbiAgfVxuXG4gIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuICB7XG4gICAgd2FybmluZyQxKGZhbHNlLCAnRWFjaCBjaGlsZCBpbiBhIGxpc3Qgc2hvdWxkIGhhdmUgYSB1bmlxdWUgXCJrZXlcIiBwcm9wLicgKyAnJXMlcyBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWtleXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uJywgY3VycmVudENvbXBvbmVudEVycm9ySW5mbywgY2hpbGRPd25lcik7XG4gIH1cbiAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG59XG5cbi8qKlxuICogRW5zdXJlIHRoYXQgZXZlcnkgZWxlbWVudCBlaXRoZXIgaXMgcGFzc2VkIGluIGEgc3RhdGljIGxvY2F0aW9uLCBpbiBhblxuICogYXJyYXkgd2l0aCBhbiBleHBsaWNpdCBrZXlzIHByb3BlcnR5IGRlZmluZWQsIG9yIGluIGFuIG9iamVjdCBsaXRlcmFsXG4gKiB3aXRoIHZhbGlkIGtleSBwcm9wZXJ0eS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3ROb2RlfSBub2RlIFN0YXRpY2FsbHkgcGFzc2VkIGNoaWxkIG9mIGFueSB0eXBlLlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIG5vZGUncyBwYXJlbnQncyB0eXBlLlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNoaWxkS2V5cyhub2RlLCBwYXJlbnRUeXBlKSB7XG4gIGlmICh0eXBlb2Ygbm9kZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IG5vZGVbaV07XG4gICAgICBpZiAoaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoY2hpbGQsIHBhcmVudFR5cGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChpc1ZhbGlkRWxlbWVudChub2RlKSkge1xuICAgIC8vIFRoaXMgZWxlbWVudCB3YXMgcGFzc2VkIGluIGEgdmFsaWQgbG9jYXRpb24uXG4gICAgaWYgKG5vZGUuX3N0b3JlKSB7XG4gICAgICBub2RlLl9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfSBlbHNlIGlmIChub2RlKSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG5vZGUpO1xuICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gRW50cnkgaXRlcmF0b3JzIHVzZWQgdG8gcHJvdmlkZSBpbXBsaWNpdCBrZXlzLFxuICAgICAgLy8gYnV0IG5vdyB3ZSBwcmludCBhIHNlcGFyYXRlIHdhcm5pbmcgZm9yIHRoZW0gbGF0ZXIuXG4gICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gbm9kZS5lbnRyaWVzKSB7XG4gICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChub2RlKTtcbiAgICAgICAgdmFyIHN0ZXAgPSB2b2lkIDA7XG4gICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICBpZiAoaXNWYWxpZEVsZW1lbnQoc3RlcC52YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoc3RlcC52YWx1ZSwgcGFyZW50VHlwZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogR2l2ZW4gYW4gZWxlbWVudCwgdmFsaWRhdGUgdGhhdCBpdHMgcHJvcHMgZm9sbG93IHRoZSBwcm9wVHlwZXMgZGVmaW5pdGlvbixcbiAqIHByb3ZpZGVkIGJ5IHRoZSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpIHtcbiAgdmFyIHR5cGUgPSBlbGVtZW50LnR5cGU7XG4gIGlmICh0eXBlID09PSBudWxsIHx8IHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKHR5cGUpO1xuICB2YXIgcHJvcFR5cGVzID0gdm9pZCAwO1xuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBwcm9wVHlwZXMgPSB0eXBlLnByb3BUeXBlcztcbiAgfSBlbHNlIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHxcbiAgLy8gTm90ZTogTWVtbyBvbmx5IGNoZWNrcyBvdXRlciBwcm9wcyBoZXJlLlxuICAvLyBJbm5lciBwcm9wcyBhcmUgY2hlY2tlZCBpbiB0aGUgcmVjb25jaWxlci5cbiAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFKSkge1xuICAgIHByb3BUeXBlcyA9IHR5cGUucHJvcFR5cGVzO1xuICB9IGVsc2Uge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAocHJvcFR5cGVzKSB7XG4gICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG4gICAgY2hlY2tQcm9wVHlwZXMocHJvcFR5cGVzLCBlbGVtZW50LnByb3BzLCAncHJvcCcsIG5hbWUsIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0U3RhY2tBZGRlbmR1bSk7XG4gICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gIH0gZWxzZSBpZiAodHlwZS5Qcm9wVHlwZXMgIT09IHVuZGVmaW5lZCAmJiAhcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24pIHtcbiAgICBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93biA9IHRydWU7XG4gICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnQ29tcG9uZW50ICVzIGRlY2xhcmVkIGBQcm9wVHlwZXNgIGluc3RlYWQgb2YgYHByb3BUeXBlc2AuIERpZCB5b3UgbWlzc3BlbGwgdGhlIHByb3BlcnR5IGFzc2lnbm1lbnQ/JywgbmFtZSB8fCAnVW5rbm93bicpO1xuICB9XG4gIGlmICh0eXBlb2YgdHlwZS5nZXREZWZhdWx0UHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAhdHlwZS5nZXREZWZhdWx0UHJvcHMuaXNSZWFjdENsYXNzQXBwcm92ZWQgPyB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdnZXREZWZhdWx0UHJvcHMgaXMgb25seSB1c2VkIG9uIGNsYXNzaWMgUmVhY3QuY3JlYXRlQ2xhc3MgJyArICdkZWZpbml0aW9ucy4gVXNlIGEgc3RhdGljIHByb3BlcnR5IG5hbWVkIGBkZWZhdWx0UHJvcHNgIGluc3RlYWQuJykgOiB2b2lkIDA7XG4gIH1cbn1cblxuLyoqXG4gKiBHaXZlbiBhIGZyYWdtZW50LCB2YWxpZGF0ZSB0aGF0IGl0IGNhbiBvbmx5IGJlIHByb3ZpZGVkIHdpdGggZnJhZ21lbnQgcHJvcHNcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBmcmFnbWVudFxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUZyYWdtZW50UHJvcHMoZnJhZ21lbnQpIHtcbiAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZnJhZ21lbnQpO1xuXG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZnJhZ21lbnQucHJvcHMpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoa2V5ICE9PSAnY2hpbGRyZW4nICYmIGtleSAhPT0gJ2tleScpIHtcbiAgICAgIHdhcm5pbmckMShmYWxzZSwgJ0ludmFsaWQgcHJvcCBgJXNgIHN1cHBsaWVkIHRvIGBSZWFjdC5GcmFnbWVudGAuICcgKyAnUmVhY3QuRnJhZ21lbnQgY2FuIG9ubHkgaGF2ZSBga2V5YCBhbmQgYGNoaWxkcmVuYCBwcm9wcy4nLCBrZXkpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKGZyYWdtZW50LnJlZiAhPT0gbnVsbCkge1xuICAgIHdhcm5pbmckMShmYWxzZSwgJ0ludmFsaWQgYXR0cmlidXRlIGByZWZgIHN1cHBsaWVkIHRvIGBSZWFjdC5GcmFnbWVudGAuJyk7XG4gIH1cblxuICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudFdpdGhWYWxpZGF0aW9uKHR5cGUsIHByb3BzLCBjaGlsZHJlbikge1xuICB2YXIgdmFsaWRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpO1xuXG4gIC8vIFdlIHdhcm4gaW4gdGhpcyBjYXNlIGJ1dCBkb24ndCB0aHJvdy4gV2UgZXhwZWN0IHRoZSBlbGVtZW50IGNyZWF0aW9uIHRvXG4gIC8vIHN1Y2NlZWQgYW5kIHRoZXJlIHdpbGwgbGlrZWx5IGJlIGVycm9ycyBpbiByZW5kZXIuXG4gIGlmICghdmFsaWRUeXBlKSB7XG4gICAgdmFyIGluZm8gPSAnJztcbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmIE9iamVjdC5rZXlzKHR5cGUpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaW5mbyArPSAnIFlvdSBsaWtlbHkgZm9yZ290IHRvIGV4cG9ydCB5b3VyIGNvbXBvbmVudCBmcm9tIHRoZSBmaWxlICcgKyBcIml0J3MgZGVmaW5lZCBpbiwgb3IgeW91IG1pZ2h0IGhhdmUgbWl4ZWQgdXAgZGVmYXVsdCBhbmQgbmFtZWQgaW1wb3J0cy5cIjtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlSW5mbyA9IGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKHByb3BzKTtcbiAgICBpZiAoc291cmNlSW5mbykge1xuICAgICAgaW5mbyArPSBzb3VyY2VJbmZvO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbmZvICs9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuICAgIH1cblxuICAgIHZhciB0eXBlU3RyaW5nID0gdm9pZCAwO1xuICAgIGlmICh0eXBlID09PSBudWxsKSB7XG4gICAgICB0eXBlU3RyaW5nID0gJ251bGwnO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0eXBlKSkge1xuICAgICAgdHlwZVN0cmluZyA9ICdhcnJheSc7XG4gICAgfSBlbHNlIGlmICh0eXBlICE9PSB1bmRlZmluZWQgJiYgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFKSB7XG4gICAgICB0eXBlU3RyaW5nID0gJzwnICsgKGdldENvbXBvbmVudE5hbWUodHlwZS50eXBlKSB8fCAnVW5rbm93bicpICsgJyAvPic7XG4gICAgICBpbmZvID0gJyBEaWQgeW91IGFjY2lkZW50YWxseSBleHBvcnQgYSBKU1ggbGl0ZXJhbCBpbnN0ZWFkIG9mIGEgY29tcG9uZW50Pyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHR5cGVTdHJpbmcgPSB0eXBlb2YgdHlwZTtcbiAgICB9XG5cbiAgICB3YXJuaW5nJDEoZmFsc2UsICdSZWFjdC5jcmVhdGVFbGVtZW50OiB0eXBlIGlzIGludmFsaWQgLS0gZXhwZWN0ZWQgYSBzdHJpbmcgKGZvciAnICsgJ2J1aWx0LWluIGNvbXBvbmVudHMpIG9yIGEgY2xhc3MvZnVuY3Rpb24gKGZvciBjb21wb3NpdGUgJyArICdjb21wb25lbnRzKSBidXQgZ290OiAlcy4lcycsIHR5cGVTdHJpbmcsIGluZm8pO1xuICB9XG5cbiAgdmFyIGVsZW1lbnQgPSBjcmVhdGVFbGVtZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgLy8gVGhlIHJlc3VsdCBjYW4gYmUgbnVsbGlzaCBpZiBhIG1vY2sgb3IgYSBjdXN0b20gZnVuY3Rpb24gaXMgdXNlZC5cbiAgLy8gVE9ETzogRHJvcCB0aGlzIHdoZW4gdGhlc2UgYXJlIG5vIGxvbmdlciBhbGxvd2VkIGFzIHRoZSB0eXBlIGFyZ3VtZW50LlxuICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICAvLyBTa2lwIGtleSB3YXJuaW5nIGlmIHRoZSB0eXBlIGlzbid0IHZhbGlkIHNpbmNlIG91ciBrZXkgdmFsaWRhdGlvbiBsb2dpY1xuICAvLyBkb2Vzbid0IGV4cGVjdCBhIG5vbi1zdHJpbmcvZnVuY3Rpb24gdHlwZSBhbmQgY2FuIHRocm93IGNvbmZ1c2luZyBlcnJvcnMuXG4gIC8vIFdlIGRvbid0IHdhbnQgZXhjZXB0aW9uIGJlaGF2aW9yIHRvIGRpZmZlciBiZXR3ZWVuIGRldiBhbmQgcHJvZC5cbiAgLy8gKFJlbmRlcmluZyB3aWxsIHRocm93IHdpdGggYSBoZWxwZnVsIG1lc3NhZ2UgYW5kIGFzIHNvb24gYXMgdGhlIHR5cGUgaXNcbiAgLy8gZml4ZWQsIHRoZSBrZXkgd2FybmluZ3Mgd2lsbCBhcHBlYXIuKVxuICBpZiAodmFsaWRUeXBlKSB7XG4gICAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGFyZ3VtZW50c1tpXSwgdHlwZSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICB2YWxpZGF0ZUZyYWdtZW50UHJvcHMoZWxlbWVudCk7XG4gIH0gZWxzZSB7XG4gICAgdmFsaWRhdGVQcm9wVHlwZXMoZWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmFjdG9yeVdpdGhWYWxpZGF0aW9uKHR5cGUpIHtcbiAgdmFyIHZhbGlkYXRlZEZhY3RvcnkgPSBjcmVhdGVFbGVtZW50V2l0aFZhbGlkYXRpb24uYmluZChudWxsLCB0eXBlKTtcbiAgdmFsaWRhdGVkRmFjdG9yeS50eXBlID0gdHlwZTtcbiAgLy8gTGVnYWN5IGhvb2s6IHJlbW92ZSBpdFxuICB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbGlkYXRlZEZhY3RvcnksICd0eXBlJywge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbG93UHJpb3JpdHlXYXJuaW5nJDEoZmFsc2UsICdGYWN0b3J5LnR5cGUgaXMgZGVwcmVjYXRlZC4gQWNjZXNzIHRoZSBjbGFzcyBkaXJlY3RseSAnICsgJ2JlZm9yZSBwYXNzaW5nIGl0IHRvIGNyZWF0ZUZhY3RvcnkuJyk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAndHlwZScsIHtcbiAgICAgICAgICB2YWx1ZTogdHlwZVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVkRmFjdG9yeTtcbn1cblxuZnVuY3Rpb24gY2xvbmVFbGVtZW50V2l0aFZhbGlkYXRpb24oZWxlbWVudCwgcHJvcHMsIGNoaWxkcmVuKSB7XG4gIHZhciBuZXdFbGVtZW50ID0gY2xvbmVFbGVtZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFsaWRhdGVDaGlsZEtleXMoYXJndW1lbnRzW2ldLCBuZXdFbGVtZW50LnR5cGUpO1xuICB9XG4gIHZhbGlkYXRlUHJvcFR5cGVzKG5ld0VsZW1lbnQpO1xuICByZXR1cm4gbmV3RWxlbWVudDtcbn1cblxuLy8gSGVscHMgaWRlbnRpZnkgc2lkZSBlZmZlY3RzIGluIGJlZ2luLXBoYXNlIGxpZmVjeWNsZSBob29rcyBhbmQgc2V0U3RhdGUgcmVkdWNlcnM6XG5cblxuLy8gSW4gc29tZSBjYXNlcywgU3RyaWN0TW9kZSBzaG91bGQgYWxzbyBkb3VibGUtcmVuZGVyIGxpZmVjeWNsZXMuXG4vLyBUaGlzIGNhbiBiZSBjb25mdXNpbmcgZm9yIHRlc3RzIHRob3VnaCxcbi8vIEFuZCBpdCBjYW4gYmUgYmFkIGZvciBwZXJmb3JtYW5jZSBpbiBwcm9kdWN0aW9uLlxuLy8gVGhpcyBmZWF0dXJlIGZsYWcgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB0aGUgYmVoYXZpb3I6XG5cblxuLy8gVG8gcHJlc2VydmUgdGhlIFwiUGF1c2Ugb24gY2F1Z2h0IGV4Y2VwdGlvbnNcIiBiZWhhdmlvciBvZiB0aGUgZGVidWdnZXIsIHdlXG4vLyByZXBsYXkgdGhlIGJlZ2luIHBoYXNlIG9mIGEgZmFpbGVkIGNvbXBvbmVudCBpbnNpZGUgaW52b2tlR3VhcmRlZENhbGxiYWNrLlxuXG5cbi8vIFdhcm4gYWJvdXQgZGVwcmVjYXRlZCwgYXN5bmMtdW5zYWZlIGxpZmVjeWNsZXM7IHJlbGF0ZXMgdG8gUkZDICM2OlxuXG5cbi8vIEdhdGhlciBhZHZhbmNlZCB0aW1pbmcgbWV0cmljcyBmb3IgUHJvZmlsZXIgc3VidHJlZXMuXG5cblxuLy8gVHJhY2Ugd2hpY2ggaW50ZXJhY3Rpb25zIHRyaWdnZXIgZWFjaCBjb21taXQuXG5cblxuLy8gT25seSB1c2VkIGluIHd3dyBidWlsZHMuXG4gLy8gVE9ETzogdHJ1ZT8gSGVyZSBpdCBtaWdodCBqdXN0IGJlIGZhbHNlLlxuXG4vLyBPbmx5IHVzZWQgaW4gd3d3IGJ1aWxkcy5cblxuXG4vLyBPbmx5IHVzZWQgaW4gd3d3IGJ1aWxkcy5cblxuXG4vLyBSZWFjdCBGaXJlOiBwcmV2ZW50IHRoZSB2YWx1ZSBhbmQgY2hlY2tlZCBhdHRyaWJ1dGVzIGZyb20gc3luY2luZ1xuLy8gd2l0aCB0aGVpciByZWxhdGVkIERPTSBwcm9wZXJ0aWVzXG5cblxuLy8gVGhlc2UgQVBJcyB3aWxsIG5vIGxvbmdlciBiZSBcInVuc3RhYmxlXCIgaW4gdGhlIHVwY29taW5nIDE2LjcgcmVsZWFzZSxcbi8vIENvbnRyb2wgdGhpcyBiZWhhdmlvciB3aXRoIGEgZmxhZyB0byBzdXBwb3J0IDE2LjYgbWlub3IgcmVsZWFzZXMgaW4gdGhlIG1lYW53aGlsZS5cbnZhciBlbmFibGVTdGFibGVDb25jdXJyZW50TW9kZUFQSXMgPSBmYWxzZTtcblxudmFyIFJlYWN0ID0ge1xuICBDaGlsZHJlbjoge1xuICAgIG1hcDogbWFwQ2hpbGRyZW4sXG4gICAgZm9yRWFjaDogZm9yRWFjaENoaWxkcmVuLFxuICAgIGNvdW50OiBjb3VudENoaWxkcmVuLFxuICAgIHRvQXJyYXk6IHRvQXJyYXksXG4gICAgb25seTogb25seUNoaWxkXG4gIH0sXG5cbiAgY3JlYXRlUmVmOiBjcmVhdGVSZWYsXG4gIENvbXBvbmVudDogQ29tcG9uZW50LFxuICBQdXJlQ29tcG9uZW50OiBQdXJlQ29tcG9uZW50LFxuXG4gIGNyZWF0ZUNvbnRleHQ6IGNyZWF0ZUNvbnRleHQsXG4gIGZvcndhcmRSZWY6IGZvcndhcmRSZWYsXG4gIGxhenk6IGxhenksXG4gIG1lbW86IG1lbW8sXG5cbiAgdXNlQ2FsbGJhY2s6IHVzZUNhbGxiYWNrLFxuICB1c2VDb250ZXh0OiB1c2VDb250ZXh0LFxuICB1c2VFZmZlY3Q6IHVzZUVmZmVjdCxcbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogdXNlSW1wZXJhdGl2ZUhhbmRsZSxcbiAgdXNlRGVidWdWYWx1ZTogdXNlRGVidWdWYWx1ZSxcbiAgdXNlTGF5b3V0RWZmZWN0OiB1c2VMYXlvdXRFZmZlY3QsXG4gIHVzZU1lbW86IHVzZU1lbW8sXG4gIHVzZVJlZHVjZXI6IHVzZVJlZHVjZXIsXG4gIHVzZVJlZjogdXNlUmVmLFxuICB1c2VTdGF0ZTogdXNlU3RhdGUsXG5cbiAgRnJhZ21lbnQ6IFJFQUNUX0ZSQUdNRU5UX1RZUEUsXG4gIFN0cmljdE1vZGU6IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUsXG4gIFN1c3BlbnNlOiBSRUFDVF9TVVNQRU5TRV9UWVBFLFxuXG4gIGNyZWF0ZUVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnRXaXRoVmFsaWRhdGlvbixcbiAgY2xvbmVFbGVtZW50OiBjbG9uZUVsZW1lbnRXaXRoVmFsaWRhdGlvbixcbiAgY3JlYXRlRmFjdG9yeTogY3JlYXRlRmFjdG9yeVdpdGhWYWxpZGF0aW9uLFxuICBpc1ZhbGlkRWxlbWVudDogaXNWYWxpZEVsZW1lbnQsXG5cbiAgdmVyc2lvbjogUmVhY3RWZXJzaW9uLFxuXG4gIHVuc3RhYmxlX0NvbmN1cnJlbnRNb2RlOiBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSxcbiAgdW5zdGFibGVfUHJvZmlsZXI6IFJFQUNUX1BST0ZJTEVSX1RZUEUsXG5cbiAgX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ6IFJlYWN0U2hhcmVkSW50ZXJuYWxzXG59O1xuXG4vLyBOb3RlOiBzb21lIEFQSXMgYXJlIGFkZGVkIHdpdGggZmVhdHVyZSBmbGFncy5cbi8vIE1ha2Ugc3VyZSB0aGF0IHN0YWJsZSBidWlsZHMgZm9yIG9wZW4gc291cmNlXG4vLyBkb24ndCBtb2RpZnkgdGhlIFJlYWN0IG9iamVjdCB0byBhdm9pZCBkZW9wdHMuXG4vLyBBbHNvIGxldCdzIG5vdCBleHBvc2UgdGhlaXIgbmFtZXMgaW4gc3RhYmxlIGJ1aWxkcy5cblxuaWYgKGVuYWJsZVN0YWJsZUNvbmN1cnJlbnRNb2RlQVBJcykge1xuICBSZWFjdC5Db25jdXJyZW50TW9kZSA9IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFO1xuICBSZWFjdC5Qcm9maWxlciA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG4gIFJlYWN0LnVuc3RhYmxlX0NvbmN1cnJlbnRNb2RlID0gdW5kZWZpbmVkO1xuICBSZWFjdC51bnN0YWJsZV9Qcm9maWxlciA9IHVuZGVmaW5lZDtcbn1cblxuXG5cbnZhciBSZWFjdCQyID0gT2JqZWN0LmZyZWV6ZSh7XG5cdGRlZmF1bHQ6IFJlYWN0XG59KTtcblxudmFyIFJlYWN0JDMgPSAoIFJlYWN0JDIgJiYgUmVhY3QgKSB8fCBSZWFjdCQyO1xuXG4vLyBUT0RPOiBkZWNpZGUgb24gdGhlIHRvcC1sZXZlbCBleHBvcnQgZm9ybS5cbi8vIFRoaXMgaXMgaGFja3kgYnV0IG1ha2VzIGl0IHdvcmsgd2l0aCBib3RoIFJvbGx1cCBhbmQgSmVzdC5cbnZhciByZWFjdCA9IFJlYWN0JDMuZGVmYXVsdCB8fCBSZWFjdCQzO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlYWN0O1xuICB9KSgpO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/react/cjs/react.development.js\n"); - -/***/ }), - -/***/ "./node_modules/react/index.js": -/*!*************************************!*\ - !*** ./node_modules/react/index.js ***! - \*************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react.development.js */ \"./node_modules/react/cjs/react.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzP2FiNWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsSUFBSSxLQUFxQyxFQUFFLEVBRTFDO0FBQ0QsbUJBQW1CLG1CQUFPLENBQUMsaUZBQTRCO0FBQ3ZEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LmRldmVsb3BtZW50LmpzJyk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/react/index.js\n"); - -/***/ }), - -/***/ "./node_modules/regenerator-runtime/runtime.js": -/*!*****************************************************!*\ - !*** ./node_modules/regenerator-runtime/runtime.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; };\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n defineProperty(generator, \"_invoke\", { value: makeInvokeMethod(innerFn, self, context) });\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n defineProperty(Gp, \"constructor\", { value: GeneratorFunctionPrototype, configurable: true });\n defineProperty(\n GeneratorFunctionPrototype,\n \"constructor\",\n { value: GeneratorFunction, configurable: true }\n );\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n defineProperty(this, \"_invoke\", { value: enqueue });\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var methodName = context.method;\n var method = delegate.iterator[methodName];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method, or a missing .next mehtod, always terminate the\n // yield* loop.\n context.delegate = null;\n\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (methodName === \"throw\" && delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n if (methodName !== \"return\") {\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a '\" + methodName + \"' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(val) {\n var object = Object(val);\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n true ? module.exports : undefined\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL3JlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS5qcz85NmNmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwyRUFBMkUsdUJBQXVCO0FBQ2xHLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDBDQUEwQyxrREFBa0Q7O0FBRTVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2QsS0FBSztBQUNMLGNBQWM7QUFDZDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsd0RBQXdEO0FBQzdGO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBLHdDQUF3QyxXQUFXO0FBQ25EO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUMsaUJBQWlCO0FBQ3REOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsU0FBUztBQUNUO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0MsY0FBYztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQ0FBaUMsa0JBQWtCO0FBQ25EO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUEsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0EsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLEtBQTBCLG9CQUFvQixTQUFFO0FBQ2xEOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9yZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbnZhciBydW50aW1lID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIHZhciBPcCA9IE9iamVjdC5wcm90b3R5cGU7XG4gIHZhciBoYXNPd24gPSBPcC5oYXNPd25Qcm9wZXJ0eTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5IHx8IGZ1bmN0aW9uIChvYmosIGtleSwgZGVzYykgeyBvYmpba2V5XSA9IGRlc2MudmFsdWU7IH07XG4gIHZhciB1bmRlZmluZWQ7IC8vIE1vcmUgY29tcHJlc3NpYmxlIHRoYW4gdm9pZCAwLlxuICB2YXIgJFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiA/IFN5bWJvbCA6IHt9O1xuICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICB2YXIgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiO1xuICB2YXIgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuXG4gIGZ1bmN0aW9uIGRlZmluZShvYmosIGtleSwgdmFsdWUpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiBvYmpba2V5XTtcbiAgfVxuICB0cnkge1xuICAgIC8vIElFIDggaGFzIGEgYnJva2VuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSB0aGF0IG9ubHkgd29ya3Mgb24gRE9NIG9iamVjdHMuXG4gICAgZGVmaW5lKHt9LCBcIlwiKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZGVmaW5lID0gZnVuY3Rpb24ob2JqLCBrZXksIHZhbHVlKSB7XG4gICAgICByZXR1cm4gb2JqW2tleV0gPSB2YWx1ZTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQgYW5kIG91dGVyRm4ucHJvdG90eXBlIGlzIGEgR2VuZXJhdG9yLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yO1xuICAgIHZhciBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSk7XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7XG5cbiAgICAvLyBUaGUgLl9pbnZva2UgbWV0aG9kIHVuaWZpZXMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzLlxuICAgIGRlZmluZVByb3BlcnR5KGdlbmVyYXRvciwgXCJfaW52b2tlXCIsIHsgdmFsdWU6IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkgfSk7XG5cbiAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICB9XG4gIGV4cG9ydHMud3JhcCA9IHdyYXA7XG5cbiAgLy8gVHJ5L2NhdGNoIGhlbHBlciB0byBtaW5pbWl6ZSBkZW9wdGltaXphdGlvbnMuIFJldHVybnMgYSBjb21wbGV0aW9uXG4gIC8vIHJlY29yZCBsaWtlIGNvbnRleHQudHJ5RW50cmllc1tpXS5jb21wbGV0aW9uLiBUaGlzIGludGVyZmFjZSBjb3VsZFxuICAvLyBoYXZlIGJlZW4gKGFuZCB3YXMgcHJldmlvdXNseSkgZGVzaWduZWQgdG8gdGFrZSBhIGNsb3N1cmUgdG8gYmVcbiAgLy8gaW52b2tlZCB3aXRob3V0IGFyZ3VtZW50cywgYnV0IGluIGFsbCB0aGUgY2FzZXMgd2UgY2FyZSBhYm91dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYW4gZXhpc3RpbmcgbWV0aG9kIHdlIHdhbnQgdG8gY2FsbCwgc28gdGhlcmUncyBubyBuZWVkXG4gIC8vIHRvIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBvYmplY3QuIFdlIGNhbiBldmVuIGdldCBhd2F5IHdpdGggYXNzdW1pbmdcbiAgLy8gdGhlIG1ldGhvZCB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgc2luY2UgdGhhdCBoYXBwZW5zIHRvIGJlIHRydWVcbiAgLy8gaW4gZXZlcnkgY2FzZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byB0b3VjaCB0aGUgYXJndW1lbnRzIG9iamVjdC4gVGhlXG4gIC8vIG9ubHkgYWRkaXRpb25hbCBhbGxvY2F0aW9uIHJlcXVpcmVkIGlzIHRoZSBjb21wbGV0aW9uIHJlY29yZCwgd2hpY2hcbiAgLy8gaGFzIGEgc3RhYmxlIHNoYXBlIGFuZCBzbyBob3BlZnVsbHkgc2hvdWxkIGJlIGNoZWFwIHRvIGFsbG9jYXRlLlxuICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJub3JtYWxcIiwgYXJnOiBmbi5jYWxsKG9iaiwgYXJnKSB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0aHJvd1wiLCBhcmc6IGVyciB9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0ID0gXCJzdXNwZW5kZWRTdGFydFwiO1xuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCA9IFwic3VzcGVuZGVkWWllbGRcIjtcbiAgdmFyIEdlblN0YXRlRXhlY3V0aW5nID0gXCJleGVjdXRpbmdcIjtcbiAgdmFyIEdlblN0YXRlQ29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcblxuICAvLyBSZXR1cm5pbmcgdGhpcyBvYmplY3QgZnJvbSB0aGUgaW5uZXJGbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzXG4gIC8vIGJyZWFraW5nIG91dCBvZiB0aGUgZGlzcGF0Y2ggc3dpdGNoIHN0YXRlbWVudC5cbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcblxuICAvLyBEdW1teSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgdGhhdCB3ZSB1c2UgYXMgdGhlIC5jb25zdHJ1Y3RvciBhbmRcbiAgLy8gLmNvbnN0cnVjdG9yLnByb3RvdHlwZSBwcm9wZXJ0aWVzIGZvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gR2VuZXJhdG9yXG4gIC8vIG9iamVjdHMuIEZvciBmdWxsIHNwZWMgY29tcGxpYW5jZSwgeW91IG1heSB3aXNoIHRvIGNvbmZpZ3VyZSB5b3VyXG4gIC8vIG1pbmlmaWVyIG5vdCB0byBtYW5nbGUgdGhlIG5hbWVzIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMuXG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuXG4gIC8vIFRoaXMgaXMgYSBwb2x5ZmlsbCBmb3IgJUl0ZXJhdG9yUHJvdG90eXBlJSBmb3IgZW52aXJvbm1lbnRzIHRoYXRcbiAgLy8gZG9uJ3QgbmF0aXZlbHkgc3VwcG9ydCBpdC5cbiAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG4gIGRlZmluZShJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG5cbiAgdmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuICB2YXIgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90byAmJiBnZXRQcm90byhnZXRQcm90byh2YWx1ZXMoW10pKSk7XG4gIGlmIChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAmJlxuICAgICAgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgIT09IE9wICYmXG4gICAgICBoYXNPd24uY2FsbChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wpKSB7XG4gICAgLy8gVGhpcyBlbnZpcm9ubWVudCBoYXMgYSBuYXRpdmUgJUl0ZXJhdG9yUHJvdG90eXBlJTsgdXNlIGl0IGluc3RlYWRcbiAgICAvLyBvZiB0aGUgcG9seWZpbGwuXG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBOYXRpdmVJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxuXG4gIHZhciBHcCA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLnByb3RvdHlwZSA9XG4gICAgR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuICBHZW5lcmF0b3JGdW5jdGlvbi5wcm90b3R5cGUgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgZGVmaW5lUHJvcGVydHkoR3AsIFwiY29uc3RydWN0b3JcIiwgeyB2YWx1ZTogR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgZGVmaW5lUHJvcGVydHkoXG4gICAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsXG4gICAgXCJjb25zdHJ1Y3RvclwiLFxuICAgIHsgdmFsdWU6IEdlbmVyYXRvckZ1bmN0aW9uLCBjb25maWd1cmFibGU6IHRydWUgfVxuICApO1xuICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IGRlZmluZShcbiAgICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSxcbiAgICB0b1N0cmluZ1RhZ1N5bWJvbCxcbiAgICBcIkdlbmVyYXRvckZ1bmN0aW9uXCJcbiAgKTtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBkZWZpbmUocHJvdG90eXBlLCBtZXRob2QsIGZ1bmN0aW9uKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgdmFyIGN0b3IgPSB0eXBlb2YgZ2VuRnVuID09PSBcImZ1bmN0aW9uXCIgJiYgZ2VuRnVuLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiBjdG9yXG4gICAgICA/IGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8XG4gICAgICAgIC8vIEZvciB0aGUgbmF0aXZlIEdlbmVyYXRvckZ1bmN0aW9uIGNvbnN0cnVjdG9yLCB0aGUgYmVzdCB3ZSBjYW5cbiAgICAgICAgLy8gZG8gaXMgdG8gY2hlY2sgaXRzIC5uYW1lIHByb3BlcnR5LlxuICAgICAgICAoY3Rvci5kaXNwbGF5TmFtZSB8fCBjdG9yLm5hbWUpID09PSBcIkdlbmVyYXRvckZ1bmN0aW9uXCJcbiAgICAgIDogZmFsc2U7XG4gIH07XG5cbiAgZXhwb3J0cy5tYXJrID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xuICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlbkZ1biwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gICAgICBkZWZpbmUoZ2VuRnVuLCB0b1N0cmluZ1RhZ1N5bWJvbCwgXCJHZW5lcmF0b3JGdW5jdGlvblwiKTtcbiAgICB9XG4gICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpYCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcbiAgLy8gbWVhbnQgdG8gYmUgYXdhaXRlZC5cbiAgZXhwb3J0cy5hd3JhcCA9IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB7IF9fYXdhaXQ6IGFyZyB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yLCBQcm9taXNlSW1wbCkge1xuICAgIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goZ2VuZXJhdG9yW21ldGhvZF0sIGdlbmVyYXRvciwgYXJnKTtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWNvcmQuYXJnO1xuICAgICAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2VJbXBsLnJlc29sdmUodmFsdWUuX19hd2FpdCkudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGludm9rZShcInRocm93XCIsIGVyciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlSW1wbC5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uKHVud3JhcHBlZCkge1xuICAgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uXG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyb3IpIHtcbiAgICAgICAgICAvLyBJZiBhIHJlamVjdGVkIFByb21pc2Ugd2FzIHlpZWxkZWQsIHRocm93IHRoZSByZWplY3Rpb24gYmFja1xuICAgICAgICAgIC8vIGludG8gdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBzbyBpdCBjYW4gYmUgaGFuZGxlZCB0aGVyZS5cbiAgICAgICAgICByZXR1cm4gaW52b2tlKFwidGhyb3dcIiwgZXJyb3IsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBwcmV2aW91c1Byb21pc2U7XG5cbiAgICBmdW5jdGlvbiBlbnF1ZXVlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBmdW5jdGlvbiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlSW1wbChmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJldmlvdXNQcm9taXNlID1cbiAgICAgICAgLy8gSWYgZW5xdWV1ZSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gd2FpdCB1bnRpbFxuICAgICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcbiAgICAgICAgLy8gc28gdGhhdCByZXN1bHRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJZlxuICAgICAgICAvLyBlbnF1ZXVlIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIGl0IGlzIGltcG9ydGFudCB0b1xuICAgICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZG9cbiAgICAgICAgLy8gYW55IG5lY2Vzc2FyeSBzZXR1cCBpbiBhIHByZWRpY3RhYmxlIHdheS4gVGhpcyBwcmVkaWN0YWJpbGl0eVxuICAgICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuICAgICAgICAvLyBleGVjdXRvciBjYWxsYmFjaywgYW5kIHdoeSBhc3luYyBmdW5jdGlvbnMgc3luY2hyb25vdXNseVxuICAgICAgICAvLyBleGVjdXRlIGNvZGUgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdC4gU2luY2Ugd2UgaW1wbGVtZW50IHNpbXBsZVxuICAgICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuICAgICAgICAvLyBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGV2ZW4gdGhvdWdoIGl0IHJlcXVpcmVzIGNhcmUuXG4gICAgICAgIHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKFxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLFxuICAgICAgICAgIC8vIEF2b2lkIHByb3BhZ2F0aW5nIGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5IGxhdGVyXG4gICAgICAgICAgLy8gaW52b2NhdGlvbnMgb2YgdGhlIGl0ZXJhdG9yLlxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnXG4gICAgICAgICkgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgIH1cblxuICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG4gICAgZGVmaW5lUHJvcGVydHkodGhpcywgXCJfaW52b2tlXCIsIHsgdmFsdWU6IGVucXVldWUgfSk7XG4gIH1cblxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpO1xuICBkZWZpbmUoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUsIGFzeW5jSXRlcmF0b3JTeW1ib2wsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG4gIGV4cG9ydHMuQXN5bmNJdGVyYXRvciA9IEFzeW5jSXRlcmF0b3I7XG5cbiAgLy8gTm90ZSB0aGF0IHNpbXBsZSBhc3luYyBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIG9uIHRvcCBvZlxuICAvLyBBc3luY0l0ZXJhdG9yIG9iamVjdHM7IHRoZXkganVzdCByZXR1cm4gYSBQcm9taXNlIGZvciB0aGUgdmFsdWUgb2ZcbiAgLy8gdGhlIGZpbmFsIHJlc3VsdCBwcm9kdWNlZCBieSB0aGUgaXRlcmF0b3IuXG4gIGV4cG9ydHMuYXN5bmMgPSBmdW5jdGlvbihpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCwgUHJvbWlzZUltcGwpIHtcbiAgICBpZiAoUHJvbWlzZUltcGwgPT09IHZvaWQgMCkgUHJvbWlzZUltcGwgPSBQcm9taXNlO1xuXG4gICAgdmFyIGl0ZXIgPSBuZXcgQXN5bmNJdGVyYXRvcihcbiAgICAgIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpLFxuICAgICAgUHJvbWlzZUltcGxcbiAgICApO1xuXG4gICAgcmV0dXJuIGV4cG9ydHMuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKVxuICAgICAgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cbiAgICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVFeGVjdXRpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQubWV0aG9kID0gbWV0aG9kO1xuICAgICAgY29udGV4dC5hcmcgPSBhcmc7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0ID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICBjb250ZXh0LnNlbnQgPSBjb250ZXh0Ll9zZW50ID0gY29udGV4dC5hcmc7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgICAgdGhyb3cgY29udGV4dC5hcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlID0gR2VuU3RhdGVFeGVjdXRpbmc7XG5cbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5uZXJGbiwgd2UgbGVhdmUgc3RhdGUgPT09XG4gICAgICAgICAgLy8gR2VuU3RhdGVFeGVjdXRpbmcgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciBpbnZvY2F0aW9uLlxuICAgICAgICAgIHN0YXRlID0gY29udGV4dC5kb25lXG4gICAgICAgICAgICA/IEdlblN0YXRlQ29tcGxldGVkXG4gICAgICAgICAgICA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiByZWNvcmQuYXJnLFxuICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgfTtcblxuICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBleGNlcHRpb24gYnkgbG9vcGluZyBiYWNrIGFyb3VuZCB0byB0aGVcbiAgICAgICAgICAvLyBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKSBjYWxsIGFib3ZlLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBDYWxsIGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXShjb250ZXh0LmFyZykgYW5kIGhhbmRsZSB0aGVcbiAgLy8gcmVzdWx0LCBlaXRoZXIgYnkgcmV0dXJuaW5nIGEgeyB2YWx1ZSwgZG9uZSB9IHJlc3VsdCBmcm9tIHRoZVxuICAvLyBkZWxlZ2F0ZSBpdGVyYXRvciwgb3IgYnkgbW9kaWZ5aW5nIGNvbnRleHQubWV0aG9kIGFuZCBjb250ZXh0LmFyZyxcbiAgLy8gc2V0dGluZyBjb250ZXh0LmRlbGVnYXRlIHRvIG51bGwsIGFuZCByZXR1cm5pbmcgdGhlIENvbnRpbnVlU2VudGluZWwuXG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kTmFtZSA9IGNvbnRleHQubWV0aG9kO1xuICAgIHZhciBtZXRob2QgPSBkZWxlZ2F0ZS5pdGVyYXRvclttZXRob2ROYW1lXTtcbiAgICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEEgLnRocm93IG9yIC5yZXR1cm4gd2hlbiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIG5vIC50aHJvd1xuICAgICAgLy8gbWV0aG9kLCBvciBhIG1pc3NpbmcgLm5leHQgbWVodG9kLCBhbHdheXMgdGVybWluYXRlIHRoZVxuICAgICAgLy8geWllbGQqIGxvb3AuXG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgLy8gTm90ZTogW1wicmV0dXJuXCJdIG11c3QgYmUgdXNlZCBmb3IgRVMzIHBhcnNpbmcgY29tcGF0aWJpbGl0eS5cbiAgICAgIGlmIChtZXRob2ROYW1lID09PSBcInRocm93XCIgJiYgZGVsZWdhdGUuaXRlcmF0b3JbXCJyZXR1cm5cIl0pIHtcbiAgICAgICAgLy8gSWYgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBhIHJldHVybiBtZXRob2QsIGdpdmUgaXQgYVxuICAgICAgICAvLyBjaGFuY2UgdG8gY2xlYW4gdXAuXG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgLy8gSWYgbWF5YmVJbnZva2VEZWxlZ2F0ZShjb250ZXh0KSBjaGFuZ2VkIGNvbnRleHQubWV0aG9kIGZyb21cbiAgICAgICAgICAvLyBcInJldHVyblwiIHRvIFwidGhyb3dcIiwgbGV0IHRoYXQgb3ZlcnJpZGUgdGhlIFR5cGVFcnJvciBiZWxvdy5cbiAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG1ldGhvZE5hbWUgIT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ1wiICsgbWV0aG9kTmFtZSArIFwiJyBtZXRob2RcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChtZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBjb250ZXh0LmFyZyk7XG5cbiAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcblxuICAgIGlmICghIGluZm8pIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIik7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgIC8vIEFzc2lnbiB0aGUgcmVzdWx0IG9mIHRoZSBmaW5pc2hlZCBkZWxlZ2F0ZSB0byB0aGUgdGVtcG9yYXJ5XG4gICAgICAvLyB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgZGVsZWdhdGUucmVzdWx0TmFtZSAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWU7XG5cbiAgICAgIC8vIFJlc3VtZSBleGVjdXRpb24gYXQgdGhlIGRlc2lyZWQgbG9jYXRpb24gKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHQubmV4dCA9IGRlbGVnYXRlLm5leHRMb2M7XG5cbiAgICAgIC8vIElmIGNvbnRleHQubWV0aG9kIHdhcyBcInRocm93XCIgYnV0IHRoZSBkZWxlZ2F0ZSBoYW5kbGVkIHRoZVxuICAgICAgLy8gZXhjZXB0aW9uLCBsZXQgdGhlIG91dGVyIGdlbmVyYXRvciBwcm9jZWVkIG5vcm1hbGx5LiBJZlxuICAgICAgLy8gY29udGV4dC5tZXRob2Qgd2FzIFwibmV4dFwiLCBmb3JnZXQgY29udGV4dC5hcmcgc2luY2UgaXQgaGFzIGJlZW5cbiAgICAgIC8vIFwiY29uc3VtZWRcIiBieSB0aGUgZGVsZWdhdGUgaXRlcmF0b3IuIElmIGNvbnRleHQubWV0aG9kIHdhc1xuICAgICAgLy8gXCJyZXR1cm5cIiwgYWxsb3cgdGhlIG9yaWdpbmFsIC5yZXR1cm4gY2FsbCB0byBjb250aW51ZSBpbiB0aGVcbiAgICAgIC8vIG91dGVyIGdlbmVyYXRvci5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCAhPT0gXCJyZXR1cm5cIikge1xuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZS15aWVsZCB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IHRoZSBkZWxlZ2F0ZSBtZXRob2QuXG4gICAgICByZXR1cm4gaW5mbztcbiAgICB9XG5cbiAgICAvLyBUaGUgZGVsZWdhdGUgaXRlcmF0b3IgaXMgZmluaXNoZWQsIHNvIGZvcmdldCBpdCBhbmQgY29udGludWUgd2l0aFxuICAgIC8vIHRoZSBvdXRlciBnZW5lcmF0b3IuXG4gICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gIH1cblxuICAvLyBEZWZpbmUgR2VuZXJhdG9yLnByb3RvdHlwZS57bmV4dCx0aHJvdyxyZXR1cm59IGluIHRlcm1zIG9mIHRoZVxuICAvLyB1bmlmaWVkIC5faW52b2tlIGhlbHBlciBtZXRob2QuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCk7XG5cbiAgZGVmaW5lKEdwLCB0b1N0cmluZ1RhZ1N5bWJvbCwgXCJHZW5lcmF0b3JcIik7XG5cbiAgLy8gQSBHZW5lcmF0b3Igc2hvdWxkIGFsd2F5cyByZXR1cm4gaXRzZWxmIGFzIHRoZSBpdGVyYXRvciBvYmplY3Qgd2hlbiB0aGVcbiAgLy8gQEBpdGVyYXRvciBmdW5jdGlvbiBpcyBjYWxsZWQgb24gaXQuIFNvbWUgYnJvd3NlcnMnIGltcGxlbWVudGF0aW9ucyBvZiB0aGVcbiAgLy8gaXRlcmF0b3IgcHJvdG90eXBlIGNoYWluIGluY29ycmVjdGx5IGltcGxlbWVudCB0aGlzLCBjYXVzaW5nIHRoZSBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0IHRvIG5vdCBiZSByZXR1cm5lZCBmcm9tIHRoaXMgY2FsbC4gVGhpcyBlbnN1cmVzIHRoYXQgZG9lc24ndCBoYXBwZW4uXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvaXNzdWVzLzI3NCBmb3IgbW9yZSBkZXRhaWxzLlxuICBkZWZpbmUoR3AsIGl0ZXJhdG9yU3ltYm9sLCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG5cbiAgZGVmaW5lKEdwLCBcInRvU3RyaW5nXCIsIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9KTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIGV4cG9ydHMua2V5cyA9IGZ1bmN0aW9uKHZhbCkge1xuICAgIHZhciBvYmplY3QgPSBPYmplY3QodmFsKTtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgICBrZXlzLnJldmVyc2UoKTtcblxuICAgIC8vIFJhdGhlciB0aGFuIHJldHVybmluZyBhbiBvYmplY3Qgd2l0aCBhIG5leHQgbWV0aG9kLCB3ZSBrZWVwXG4gICAgLy8gdGhpbmdzIHNpbXBsZSBhbmQgcmV0dXJuIHRoZSBuZXh0IGZ1bmN0aW9uIGl0c2VsZi5cbiAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIHdoaWxlIChrZXlzLmxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0ga2V5cy5wb3AoKTtcbiAgICAgICAgaWYgKGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICBuZXh0LnZhbHVlID0ga2V5O1xuICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRvIGF2b2lkIGNyZWF0aW5nIGFuIGFkZGl0aW9uYWwgb2JqZWN0LCB3ZSBqdXN0IGhhbmcgdGhlIC52YWx1ZVxuICAgICAgLy8gYW5kIC5kb25lIHByb3BlcnRpZXMgb2ZmIHRoZSBuZXh0IGZ1bmN0aW9uIG9iamVjdCBpdHNlbGYuIFRoaXNcbiAgICAgIC8vIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBtaW5pZmllciB3aWxsIG5vdCBhbm9ueW1pemUgdGhlIGZ1bmN0aW9uLlxuICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yTWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGl0ZXJhYmxlLm5leHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gaXRlcmFibGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLCBuZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgaXRlcmFibGUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwoaXRlcmFibGUsIGkpKSB7XG4gICAgICAgICAgICAgIG5leHQudmFsdWUgPSBpdGVyYWJsZVtpXTtcbiAgICAgICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5leHQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiBhbiBpdGVyYXRvciB3aXRoIG5vIHZhbHVlcy5cbiAgICByZXR1cm4geyBuZXh0OiBkb25lUmVzdWx0IH07XG4gIH1cbiAgZXhwb3J0cy52YWx1ZXMgPSB2YWx1ZXM7XG5cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH1cblxuICBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcblxuICAgIHJlc2V0OiBmdW5jdGlvbihza2lwVGVtcFJlc2V0KSB7XG4gICAgICB0aGlzLnByZXYgPSAwO1xuICAgICAgdGhpcy5uZXh0ID0gMDtcbiAgICAgIC8vIFJlc2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcblxuICAgICAgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSk7XG5cbiAgICAgIGlmICghc2tpcFRlbXBSZXNldCkge1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMpIHtcbiAgICAgICAgICAvLyBOb3Qgc3VyZSBhYm91dCB0aGUgb3B0aW1hbCBvcmRlciBvZiB0aGVzZSBjb25kaXRpb25zOlxuICAgICAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gXCJ0XCIgJiZcbiAgICAgICAgICAgICAgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiZcbiAgICAgICAgICAgICAgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSkge1xuICAgICAgICAgICAgdGhpc1tuYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuICAgICAgdmFyIHJvb3RSZWNvcmQgPSByb290RW50cnkuY29tcGxldGlvbjtcbiAgICAgIGlmIChyb290UmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uKGV4Y2VwdGlvbikge1xuICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICB9XG5cbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuICAgICAgICByZWNvcmQudHlwZSA9IFwidGhyb3dcIjtcbiAgICAgICAgcmVjb3JkLmFyZyA9IGV4Y2VwdGlvbjtcbiAgICAgICAgY29udGV4dC5uZXh0ID0gbG9jO1xuXG4gICAgICAgIGlmIChjYXVnaHQpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGlzcGF0Y2hlZCBleGNlcHRpb24gd2FzIGNhdWdodCBieSBhIGNhdGNoIGJsb2NrLFxuICAgICAgICAgIC8vIHRoZW4gbGV0IHRoYXQgY2F0Y2ggYmxvY2sgaGFuZGxlIHRoZSBleGNlcHRpb24gbm9ybWFsbHkuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAhISBjYXVnaHQ7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSBcInJvb3RcIikge1xuICAgICAgICAgIC8vIEV4Y2VwdGlvbiB0aHJvd24gb3V0c2lkZSBvZiBhbnkgdHJ5IGJsb2NrIHRoYXQgY291bGQgaGFuZGxlXG4gICAgICAgICAgLy8gaXQsIHNvIHNldCB0aGUgY29tcGxldGlvbiB2YWx1ZSBvZiB0aGUgZW50aXJlIGZ1bmN0aW9uIHRvXG4gICAgICAgICAgLy8gdGhyb3cgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgaGFzQ2F0Y2ggPSBoYXNPd24uY2FsbChlbnRyeSwgXCJjYXRjaExvY1wiKTtcbiAgICAgICAgICB2YXIgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG5cbiAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0NhdGNoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFicnVwdDogZnVuY3Rpb24odHlwZSwgYXJnKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiZcbiAgICAgICAgICAgIHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgZmluYWxseUVudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJlxuICAgICAgICAgICh0eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICAgdHlwZSA9PT0gXCJjb250aW51ZVwiKSAmJlxuICAgICAgICAgIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmXG4gICAgICAgICAgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgIC8vIElnbm9yZSB0aGUgZmluYWxseSBlbnRyeSBpZiBjb250cm9sIGlzIG5vdCBqdW1waW5nIHRvIGFcbiAgICAgICAgLy8gbG9jYXRpb24gb3V0c2lkZSB0aGUgdHJ5L2NhdGNoIGJsb2NrLlxuICAgICAgICBmaW5hbGx5RW50cnkgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJlY29yZC50eXBlID0gdHlwZTtcbiAgICAgIHJlY29yZC5hcmcgPSBhcmc7XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2M7XG4gICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG5cbiAgICBjb21wbGV0ZTogZnVuY3Rpb24ocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICByZWNvcmQudHlwZSA9PT0gXCJjb250aW51ZVwiKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInJldHVyblwiKSB7XG4gICAgICAgIHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICB0aGlzLm5leHQgPSBcImVuZFwiO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIiAmJiBhZnRlckxvYykge1xuICAgICAgICB0aGlzLm5leHQgPSBhZnRlckxvYztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcblxuICAgIGZpbmlzaDogZnVuY3Rpb24oZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyk7XG4gICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbih0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcbiAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgY29udGV4dC5jYXRjaCBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgbG9jYXRpb25cbiAgICAgIC8vIGFyZ3VtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBrbm93biBjYXRjaCBibG9jay5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24oaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgIC8vIERlbGliZXJhdGVseSBmb3JnZXQgdGhlIGxhc3Qgc2VudCB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0XG4gICAgICAgIC8vIGFjY2lkZW50YWxseSBwYXNzIGl0IG9uIHRvIHRoZSBkZWxlZ2F0ZS5cbiAgICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cbiAgfTtcblxuICAvLyBSZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhpcyBzY3JpcHQgaXMgZXhlY3V0aW5nIGFzIGEgQ29tbW9uSlMgbW9kdWxlXG4gIC8vIG9yIG5vdCwgcmV0dXJuIHRoZSBydW50aW1lIG9iamVjdCBzbyB0aGF0IHdlIGNhbiBkZWNsYXJlIHRoZSB2YXJpYWJsZVxuICAvLyByZWdlbmVyYXRvclJ1bnRpbWUgaW4gdGhlIG91dGVyIHNjb3BlLCB3aGljaCBhbGxvd3MgdGhpcyBtb2R1bGUgdG8gYmVcbiAgLy8gaW5qZWN0ZWQgZWFzaWx5IGJ5IGBiaW4vcmVnZW5lcmF0b3IgLS1pbmNsdWRlLXJ1bnRpbWUgc2NyaXB0LmpzYC5cbiAgcmV0dXJuIGV4cG9ydHM7XG5cbn0oXG4gIC8vIElmIHRoaXMgc2NyaXB0IGlzIGV4ZWN1dGluZyBhcyBhIENvbW1vbkpTIG1vZHVsZSwgdXNlIG1vZHVsZS5leHBvcnRzXG4gIC8vIGFzIHRoZSByZWdlbmVyYXRvclJ1bnRpbWUgbmFtZXNwYWNlLiBPdGhlcndpc2UgY3JlYXRlIGEgbmV3IGVtcHR5XG4gIC8vIG9iamVjdC4gRWl0aGVyIHdheSwgdGhlIHJlc3VsdGluZyBvYmplY3Qgd2lsbCBiZSB1c2VkIHRvIGluaXRpYWxpemVcbiAgLy8gdGhlIHJlZ2VuZXJhdG9yUnVudGltZSB2YXJpYWJsZSBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZS5cbiAgdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiA/IG1vZHVsZS5leHBvcnRzIDoge31cbikpO1xuXG50cnkge1xuICByZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xufSBjYXRjaCAoYWNjaWRlbnRhbFN0cmljdE1vZGUpIHtcbiAgLy8gVGhpcyBtb2R1bGUgc2hvdWxkIG5vdCBiZSBydW5uaW5nIGluIHN0cmljdCBtb2RlLCBzbyB0aGUgYWJvdmVcbiAgLy8gYXNzaWdubWVudCBzaG91bGQgYWx3YXlzIHdvcmsgdW5sZXNzIHNvbWV0aGluZyBpcyBtaXNjb25maWd1cmVkLiBKdXN0XG4gIC8vIGluIGNhc2UgcnVudGltZS5qcyBhY2NpZGVudGFsbHkgcnVucyBpbiBzdHJpY3QgbW9kZSwgaW4gbW9kZXJuIGVuZ2luZXNcbiAgLy8gd2UgY2FuIGV4cGxpY2l0bHkgYWNjZXNzIGdsb2JhbFRoaXMuIEluIG9sZGVyIGVuZ2luZXMgd2UgY2FuIGVzY2FwZVxuICAvLyBzdHJpY3QgbW9kZSB1c2luZyBhIGdsb2JhbCBGdW5jdGlvbiBjYWxsLiBUaGlzIGNvdWxkIGNvbmNlaXZhYmx5IGZhaWxcbiAgLy8gaWYgYSBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBmb3JiaWRzIHVzaW5nIEZ1bmN0aW9uLCBidXQgaW4gdGhhdCBjYXNlXG4gIC8vIHRoZSBwcm9wZXIgc29sdXRpb24gaXMgdG8gZml4IHRoZSBhY2NpZGVudGFsIHN0cmljdCBtb2RlIHByb2JsZW0uIElmXG4gIC8vIHlvdSd2ZSBtaXNjb25maWd1cmVkIHlvdXIgYnVuZGxlciB0byBmb3JjZSBzdHJpY3QgbW9kZSBhbmQgYXBwbGllZCBhXG4gIC8vIENTUCB0byBmb3JiaWQgRnVuY3Rpb24sIGFuZCB5b3UncmUgbm90IHdpbGxpbmcgdG8gZml4IGVpdGhlciBvZiB0aG9zZVxuICAvLyBwcm9ibGVtcywgcGxlYXNlIGRldGFpbCB5b3VyIHVuaXF1ZSBwcmVkaWNhbWVudCBpbiBhIEdpdEh1YiBpc3N1ZS5cbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSBcIm9iamVjdFwiKSB7XG4gICAgZ2xvYmFsVGhpcy5yZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xuICB9IGVsc2Uge1xuICAgIEZ1bmN0aW9uKFwiclwiLCBcInJlZ2VuZXJhdG9yUnVudGltZSA9IHJcIikocnVudGltZSk7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/regenerator-runtime/runtime.js\n"); - -/***/ }), - -/***/ "./node_modules/scheduler/cjs/scheduler-tracing.development.js": -/*!*********************************************************************!*\ - !*** ./node_modules/scheduler/cjs/scheduler-tracing.development.js ***! - \*********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/** @license React v0.13.6\n * scheduler-tracing.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\n\n\nif (true) {\n (function() {\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n// Helps identify side effects in begin-phase lifecycle hooks and setState reducers:\n\n\n// In some cases, StrictMode should also double-render lifecycles.\n// This can be confusing for tests though,\n// And it can be bad for performance in production.\n// This feature flag can be used to control the behavior:\n\n\n// To preserve the \"Pause on caught exceptions\" behavior of the debugger, we\n// replay the begin phase of a failed component inside invokeGuardedCallback.\n\n\n// Warn about deprecated, async-unsafe lifecycles; relates to RFC #6:\n\n\n// Gather advanced timing metrics for Profiler subtrees.\n\n\n// Trace which interactions trigger each commit.\nvar enableSchedulerTracing = true;\n\n// Only used in www builds.\n // TODO: true? Here it might just be false.\n\n// Only used in www builds.\n\n\n// Only used in www builds.\n\n\n// React Fire: prevent the value and checked attributes from syncing\n// with their related DOM properties\n\n\n// These APIs will no longer be \"unstable\" in the upcoming 16.7 release,\n// Control this behavior with a flag to support 16.6 minor releases in the meanwhile.\n\nvar DEFAULT_THREAD_ID = 0;\n\n// Counters used to generate unique IDs.\nvar interactionIDCounter = 0;\nvar threadIDCounter = 0;\n\n// Set of currently traced interactions.\n// Interactions \"stack\"–\n// Meaning that newly traced interactions are appended to the previously active set.\n// When an interaction goes out of scope, the previous set (if any) is restored.\nexports.__interactionsRef = null;\n\n// Listener(s) to notify when interactions begin and end.\nexports.__subscriberRef = null;\n\nif (enableSchedulerTracing) {\n exports.__interactionsRef = {\n current: new Set()\n };\n exports.__subscriberRef = {\n current: null\n };\n}\n\nfunction unstable_clear(callback) {\n if (!enableSchedulerTracing) {\n return callback();\n }\n\n var prevInteractions = exports.__interactionsRef.current;\n exports.__interactionsRef.current = new Set();\n\n try {\n return callback();\n } finally {\n exports.__interactionsRef.current = prevInteractions;\n }\n}\n\nfunction unstable_getCurrent() {\n if (!enableSchedulerTracing) {\n return null;\n } else {\n return exports.__interactionsRef.current;\n }\n}\n\nfunction unstable_getThreadID() {\n return ++threadIDCounter;\n}\n\nfunction unstable_trace(name, timestamp, callback) {\n var threadID = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : DEFAULT_THREAD_ID;\n\n if (!enableSchedulerTracing) {\n return callback();\n }\n\n var interaction = {\n __count: 1,\n id: interactionIDCounter++,\n name: name,\n timestamp: timestamp\n };\n\n var prevInteractions = exports.__interactionsRef.current;\n\n // Traced interactions should stack/accumulate.\n // To do that, clone the current interactions.\n // The previous set will be restored upon completion.\n var interactions = new Set(prevInteractions);\n interactions.add(interaction);\n exports.__interactionsRef.current = interactions;\n\n var subscriber = exports.__subscriberRef.current;\n var returnValue = void 0;\n\n try {\n if (subscriber !== null) {\n subscriber.onInteractionTraced(interaction);\n }\n } finally {\n try {\n if (subscriber !== null) {\n subscriber.onWorkStarted(interactions, threadID);\n }\n } finally {\n try {\n returnValue = callback();\n } finally {\n exports.__interactionsRef.current = prevInteractions;\n\n try {\n if (subscriber !== null) {\n subscriber.onWorkStopped(interactions, threadID);\n }\n } finally {\n interaction.__count--;\n\n // If no async work was scheduled for this interaction,\n // Notify subscribers that it's completed.\n if (subscriber !== null && interaction.__count === 0) {\n subscriber.onInteractionScheduledWorkCompleted(interaction);\n }\n }\n }\n }\n }\n\n return returnValue;\n}\n\nfunction unstable_wrap(callback) {\n var threadID = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_THREAD_ID;\n\n if (!enableSchedulerTracing) {\n return callback;\n }\n\n var wrappedInteractions = exports.__interactionsRef.current;\n\n var subscriber = exports.__subscriberRef.current;\n if (subscriber !== null) {\n subscriber.onWorkScheduled(wrappedInteractions, threadID);\n }\n\n // Update the pending async work count for the current interactions.\n // Update after calling subscribers in case of error.\n wrappedInteractions.forEach(function (interaction) {\n interaction.__count++;\n });\n\n var hasRun = false;\n\n function wrapped() {\n var prevInteractions = exports.__interactionsRef.current;\n exports.__interactionsRef.current = wrappedInteractions;\n\n subscriber = exports.__subscriberRef.current;\n\n try {\n var returnValue = void 0;\n\n try {\n if (subscriber !== null) {\n subscriber.onWorkStarted(wrappedInteractions, threadID);\n }\n } finally {\n try {\n returnValue = callback.apply(undefined, arguments);\n } finally {\n exports.__interactionsRef.current = prevInteractions;\n\n if (subscriber !== null) {\n subscriber.onWorkStopped(wrappedInteractions, threadID);\n }\n }\n }\n\n return returnValue;\n } finally {\n if (!hasRun) {\n // We only expect a wrapped function to be executed once,\n // But in the event that it's executed more than once–\n // Only decrement the outstanding interaction counts once.\n hasRun = true;\n\n // Update pending async counts for all wrapped interactions.\n // If this was the last scheduled async work for any of them,\n // Mark them as completed.\n wrappedInteractions.forEach(function (interaction) {\n interaction.__count--;\n\n if (subscriber !== null && interaction.__count === 0) {\n subscriber.onInteractionScheduledWorkCompleted(interaction);\n }\n });\n }\n }\n }\n\n wrapped.cancel = function cancel() {\n subscriber = exports.__subscriberRef.current;\n\n try {\n if (subscriber !== null) {\n subscriber.onWorkCanceled(wrappedInteractions, threadID);\n }\n } finally {\n // Update pending async counts for all wrapped interactions.\n // If this was the last scheduled async work for any of them,\n // Mark them as completed.\n wrappedInteractions.forEach(function (interaction) {\n interaction.__count--;\n\n if (subscriber && interaction.__count === 0) {\n subscriber.onInteractionScheduledWorkCompleted(interaction);\n }\n });\n }\n };\n\n return wrapped;\n}\n\nvar subscribers = null;\nif (enableSchedulerTracing) {\n subscribers = new Set();\n}\n\nfunction unstable_subscribe(subscriber) {\n if (enableSchedulerTracing) {\n subscribers.add(subscriber);\n\n if (subscribers.size === 1) {\n exports.__subscriberRef.current = {\n onInteractionScheduledWorkCompleted: onInteractionScheduledWorkCompleted,\n onInteractionTraced: onInteractionTraced,\n onWorkCanceled: onWorkCanceled,\n onWorkScheduled: onWorkScheduled,\n onWorkStarted: onWorkStarted,\n onWorkStopped: onWorkStopped\n };\n }\n }\n}\n\nfunction unstable_unsubscribe(subscriber) {\n if (enableSchedulerTracing) {\n subscribers.delete(subscriber);\n\n if (subscribers.size === 0) {\n exports.__subscriberRef.current = null;\n }\n }\n}\n\nfunction onInteractionTraced(interaction) {\n var didCatchError = false;\n var caughtError = null;\n\n subscribers.forEach(function (subscriber) {\n try {\n subscriber.onInteractionTraced(interaction);\n } catch (error) {\n if (!didCatchError) {\n didCatchError = true;\n caughtError = error;\n }\n }\n });\n\n if (didCatchError) {\n throw caughtError;\n }\n}\n\nfunction onInteractionScheduledWorkCompleted(interaction) {\n var didCatchError = false;\n var caughtError = null;\n\n subscribers.forEach(function (subscriber) {\n try {\n subscriber.onInteractionScheduledWorkCompleted(interaction);\n } catch (error) {\n if (!didCatchError) {\n didCatchError = true;\n caughtError = error;\n }\n }\n });\n\n if (didCatchError) {\n throw caughtError;\n }\n}\n\nfunction onWorkScheduled(interactions, threadID) {\n var didCatchError = false;\n var caughtError = null;\n\n subscribers.forEach(function (subscriber) {\n try {\n subscriber.onWorkScheduled(interactions, threadID);\n } catch (error) {\n if (!didCatchError) {\n didCatchError = true;\n caughtError = error;\n }\n }\n });\n\n if (didCatchError) {\n throw caughtError;\n }\n}\n\nfunction onWorkStarted(interactions, threadID) {\n var didCatchError = false;\n var caughtError = null;\n\n subscribers.forEach(function (subscriber) {\n try {\n subscriber.onWorkStarted(interactions, threadID);\n } catch (error) {\n if (!didCatchError) {\n didCatchError = true;\n caughtError = error;\n }\n }\n });\n\n if (didCatchError) {\n throw caughtError;\n }\n}\n\nfunction onWorkStopped(interactions, threadID) {\n var didCatchError = false;\n var caughtError = null;\n\n subscribers.forEach(function (subscriber) {\n try {\n subscriber.onWorkStopped(interactions, threadID);\n } catch (error) {\n if (!didCatchError) {\n didCatchError = true;\n caughtError = error;\n }\n }\n });\n\n if (didCatchError) {\n throw caughtError;\n }\n}\n\nfunction onWorkCanceled(interactions, threadID) {\n var didCatchError = false;\n var caughtError = null;\n\n subscribers.forEach(function (subscriber) {\n try {\n subscriber.onWorkCanceled(interactions, threadID);\n } catch (error) {\n if (!didCatchError) {\n didCatchError = true;\n caughtError = error;\n }\n }\n });\n\n if (didCatchError) {\n throw caughtError;\n }\n}\n\nexports.unstable_clear = unstable_clear;\nexports.unstable_getCurrent = unstable_getCurrent;\nexports.unstable_getThreadID = unstable_getThreadID;\nexports.unstable_trace = unstable_trace;\nexports.unstable_wrap = unstable_wrap;\nexports.unstable_subscribe = unstable_subscribe;\nexports.unstable_unsubscribe = unstable_unsubscribe;\n })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLXRyYWNpbmcuZGV2ZWxvcG1lbnQuanM/MTk3OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhOzs7O0FBSWIsSUFBSSxJQUFxQztBQUN6QztBQUNBOztBQUVBLDhDQUE4QyxjQUFjOztBQUU1RDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7OztBQUdBLGtEQUFrRDs7O0FBR2xEOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7OztBQUdBOzs7QUFHQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvY2pzL3NjaGVkdWxlci10cmFjaW5nLmRldmVsb3BtZW50LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBsaWNlbnNlIFJlYWN0IHYwLjEzLjZcbiAqIHNjaGVkdWxlci10cmFjaW5nLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbi8vIEhlbHBzIGlkZW50aWZ5IHNpZGUgZWZmZWN0cyBpbiBiZWdpbi1waGFzZSBsaWZlY3ljbGUgaG9va3MgYW5kIHNldFN0YXRlIHJlZHVjZXJzOlxuXG5cbi8vIEluIHNvbWUgY2FzZXMsIFN0cmljdE1vZGUgc2hvdWxkIGFsc28gZG91YmxlLXJlbmRlciBsaWZlY3ljbGVzLlxuLy8gVGhpcyBjYW4gYmUgY29uZnVzaW5nIGZvciB0ZXN0cyB0aG91Z2gsXG4vLyBBbmQgaXQgY2FuIGJlIGJhZCBmb3IgcGVyZm9ybWFuY2UgaW4gcHJvZHVjdGlvbi5cbi8vIFRoaXMgZmVhdHVyZSBmbGFnIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIGJlaGF2aW9yOlxuXG5cbi8vIFRvIHByZXNlcnZlIHRoZSBcIlBhdXNlIG9uIGNhdWdodCBleGNlcHRpb25zXCIgYmVoYXZpb3Igb2YgdGhlIGRlYnVnZ2VyLCB3ZVxuLy8gcmVwbGF5IHRoZSBiZWdpbiBwaGFzZSBvZiBhIGZhaWxlZCBjb21wb25lbnQgaW5zaWRlIGludm9rZUd1YXJkZWRDYWxsYmFjay5cblxuXG4vLyBXYXJuIGFib3V0IGRlcHJlY2F0ZWQsIGFzeW5jLXVuc2FmZSBsaWZlY3ljbGVzOyByZWxhdGVzIHRvIFJGQyAjNjpcblxuXG4vLyBHYXRoZXIgYWR2YW5jZWQgdGltaW5nIG1ldHJpY3MgZm9yIFByb2ZpbGVyIHN1YnRyZWVzLlxuXG5cbi8vIFRyYWNlIHdoaWNoIGludGVyYWN0aW9ucyB0cmlnZ2VyIGVhY2ggY29tbWl0LlxudmFyIGVuYWJsZVNjaGVkdWxlclRyYWNpbmcgPSB0cnVlO1xuXG4vLyBPbmx5IHVzZWQgaW4gd3d3IGJ1aWxkcy5cbiAvLyBUT0RPOiB0cnVlPyBIZXJlIGl0IG1pZ2h0IGp1c3QgYmUgZmFsc2UuXG5cbi8vIE9ubHkgdXNlZCBpbiB3d3cgYnVpbGRzLlxuXG5cbi8vIE9ubHkgdXNlZCBpbiB3d3cgYnVpbGRzLlxuXG5cbi8vIFJlYWN0IEZpcmU6IHByZXZlbnQgdGhlIHZhbHVlIGFuZCBjaGVja2VkIGF0dHJpYnV0ZXMgZnJvbSBzeW5jaW5nXG4vLyB3aXRoIHRoZWlyIHJlbGF0ZWQgRE9NIHByb3BlcnRpZXNcblxuXG4vLyBUaGVzZSBBUElzIHdpbGwgbm8gbG9uZ2VyIGJlIFwidW5zdGFibGVcIiBpbiB0aGUgdXBjb21pbmcgMTYuNyByZWxlYXNlLFxuLy8gQ29udHJvbCB0aGlzIGJlaGF2aW9yIHdpdGggYSBmbGFnIHRvIHN1cHBvcnQgMTYuNiBtaW5vciByZWxlYXNlcyBpbiB0aGUgbWVhbndoaWxlLlxuXG52YXIgREVGQVVMVF9USFJFQURfSUQgPSAwO1xuXG4vLyBDb3VudGVycyB1c2VkIHRvIGdlbmVyYXRlIHVuaXF1ZSBJRHMuXG52YXIgaW50ZXJhY3Rpb25JRENvdW50ZXIgPSAwO1xudmFyIHRocmVhZElEQ291bnRlciA9IDA7XG5cbi8vIFNldCBvZiBjdXJyZW50bHkgdHJhY2VkIGludGVyYWN0aW9ucy5cbi8vIEludGVyYWN0aW9ucyBcInN0YWNrXCLigJNcbi8vIE1lYW5pbmcgdGhhdCBuZXdseSB0cmFjZWQgaW50ZXJhY3Rpb25zIGFyZSBhcHBlbmRlZCB0byB0aGUgcHJldmlvdXNseSBhY3RpdmUgc2V0LlxuLy8gV2hlbiBhbiBpbnRlcmFjdGlvbiBnb2VzIG91dCBvZiBzY29wZSwgdGhlIHByZXZpb3VzIHNldCAoaWYgYW55KSBpcyByZXN0b3JlZC5cbmV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYgPSBudWxsO1xuXG4vLyBMaXN0ZW5lcihzKSB0byBub3RpZnkgd2hlbiBpbnRlcmFjdGlvbnMgYmVnaW4gYW5kIGVuZC5cbmV4cG9ydHMuX19zdWJzY3JpYmVyUmVmID0gbnVsbDtcblxuaWYgKGVuYWJsZVNjaGVkdWxlclRyYWNpbmcpIHtcbiAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZiA9IHtcbiAgICBjdXJyZW50OiBuZXcgU2V0KClcbiAgfTtcbiAgZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYgPSB7XG4gICAgY3VycmVudDogbnVsbFxuICB9O1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9jbGVhcihjYWxsYmFjaykge1xuICBpZiAoIWVuYWJsZVNjaGVkdWxlclRyYWNpbmcpIHtcbiAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgfVxuXG4gIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50O1xuICBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSBuZXcgU2V0KCk7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSBwcmV2SW50ZXJhY3Rpb25zO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX2dldEN1cnJlbnQoKSB7XG4gIGlmICghZW5hYmxlU2NoZWR1bGVyVHJhY2luZykge1xuICAgIHJldHVybiBudWxsO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfZ2V0VGhyZWFkSUQoKSB7XG4gIHJldHVybiArK3RocmVhZElEQ291bnRlcjtcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfdHJhY2UobmFtZSwgdGltZXN0YW1wLCBjYWxsYmFjaykge1xuICB2YXIgdGhyZWFkSUQgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IERFRkFVTFRfVEhSRUFEX0lEO1xuXG4gIGlmICghZW5hYmxlU2NoZWR1bGVyVHJhY2luZykge1xuICAgIHJldHVybiBjYWxsYmFjaygpO1xuICB9XG5cbiAgdmFyIGludGVyYWN0aW9uID0ge1xuICAgIF9fY291bnQ6IDEsXG4gICAgaWQ6IGludGVyYWN0aW9uSURDb3VudGVyKyssXG4gICAgbmFtZTogbmFtZSxcbiAgICB0aW1lc3RhbXA6IHRpbWVzdGFtcFxuICB9O1xuXG4gIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50O1xuXG4gIC8vIFRyYWNlZCBpbnRlcmFjdGlvbnMgc2hvdWxkIHN0YWNrL2FjY3VtdWxhdGUuXG4gIC8vIFRvIGRvIHRoYXQsIGNsb25lIHRoZSBjdXJyZW50IGludGVyYWN0aW9ucy5cbiAgLy8gVGhlIHByZXZpb3VzIHNldCB3aWxsIGJlIHJlc3RvcmVkIHVwb24gY29tcGxldGlvbi5cbiAgdmFyIGludGVyYWN0aW9ucyA9IG5ldyBTZXQocHJldkludGVyYWN0aW9ucyk7XG4gIGludGVyYWN0aW9ucy5hZGQoaW50ZXJhY3Rpb24pO1xuICBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSBpbnRlcmFjdGlvbnM7XG5cbiAgdmFyIHN1YnNjcmliZXIgPSBleHBvcnRzLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuICB2YXIgcmV0dXJuVmFsdWUgPSB2b2lkIDA7XG5cbiAgdHJ5IHtcbiAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgc3Vic2NyaWJlci5vbkludGVyYWN0aW9uVHJhY2VkKGludGVyYWN0aW9uKTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RhcnRlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuVmFsdWUgPSBjYWxsYmFjaygpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gcHJldkludGVyYWN0aW9ucztcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm9uV29ya1N0b3BwZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGludGVyYWN0aW9uLl9fY291bnQtLTtcblxuICAgICAgICAgIC8vIElmIG5vIGFzeW5jIHdvcmsgd2FzIHNjaGVkdWxlZCBmb3IgdGhpcyBpbnRlcmFjdGlvbixcbiAgICAgICAgICAvLyBOb3RpZnkgc3Vic2NyaWJlcnMgdGhhdCBpdCdzIGNvbXBsZXRlZC5cbiAgICAgICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCAmJiBpbnRlcmFjdGlvbi5fX2NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkKGludGVyYWN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmV0dXJuVmFsdWU7XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX3dyYXAoY2FsbGJhY2spIHtcbiAgdmFyIHRocmVhZElEID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBERUZBVUxUX1RIUkVBRF9JRDtcblxuICBpZiAoIWVuYWJsZVNjaGVkdWxlclRyYWNpbmcpIHtcbiAgICByZXR1cm4gY2FsbGJhY2s7XG4gIH1cblxuICB2YXIgd3JhcHBlZEludGVyYWN0aW9ucyA9IGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudDtcblxuICB2YXIgc3Vic2NyaWJlciA9IGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG4gIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgc3Vic2NyaWJlci5vbldvcmtTY2hlZHVsZWQod3JhcHBlZEludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICB9XG5cbiAgLy8gVXBkYXRlIHRoZSBwZW5kaW5nIGFzeW5jIHdvcmsgY291bnQgZm9yIHRoZSBjdXJyZW50IGludGVyYWN0aW9ucy5cbiAgLy8gVXBkYXRlIGFmdGVyIGNhbGxpbmcgc3Vic2NyaWJlcnMgaW4gY2FzZSBvZiBlcnJvci5cbiAgd3JhcHBlZEludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgIGludGVyYWN0aW9uLl9fY291bnQrKztcbiAgfSk7XG5cbiAgdmFyIGhhc1J1biA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIHdyYXBwZWQoKSB7XG4gICAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7XG4gICAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gd3JhcHBlZEludGVyYWN0aW9ucztcblxuICAgIHN1YnNjcmliZXIgPSBleHBvcnRzLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuXG4gICAgdHJ5IHtcbiAgICAgIHZhciByZXR1cm5WYWx1ZSA9IHZvaWQgMDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgICBzdWJzY3JpYmVyLm9uV29ya1N0YXJ0ZWQod3JhcHBlZEludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVyblZhbHVlID0gY2FsbGJhY2suYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IHByZXZJbnRlcmFjdGlvbnM7XG5cbiAgICAgICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5vbldvcmtTdG9wcGVkKHdyYXBwZWRJbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoIWhhc1J1bikge1xuICAgICAgICAvLyBXZSBvbmx5IGV4cGVjdCBhIHdyYXBwZWQgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgb25jZSxcbiAgICAgICAgLy8gQnV0IGluIHRoZSBldmVudCB0aGF0IGl0J3MgZXhlY3V0ZWQgbW9yZSB0aGFuIG9uY2XigJNcbiAgICAgICAgLy8gT25seSBkZWNyZW1lbnQgdGhlIG91dHN0YW5kaW5nIGludGVyYWN0aW9uIGNvdW50cyBvbmNlLlxuICAgICAgICBoYXNSdW4gPSB0cnVlO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBwZW5kaW5nIGFzeW5jIGNvdW50cyBmb3IgYWxsIHdyYXBwZWQgaW50ZXJhY3Rpb25zLlxuICAgICAgICAvLyBJZiB0aGlzIHdhcyB0aGUgbGFzdCBzY2hlZHVsZWQgYXN5bmMgd29yayBmb3IgYW55IG9mIHRoZW0sXG4gICAgICAgIC8vIE1hcmsgdGhlbSBhcyBjb21wbGV0ZWQuXG4gICAgICAgIHdyYXBwZWRJbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgICBpbnRlcmFjdGlvbi5fX2NvdW50LS07XG5cbiAgICAgICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCAmJiBpbnRlcmFjdGlvbi5fX2NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkKGludGVyYWN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHdyYXBwZWQuY2FuY2VsID0gZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgIHN1YnNjcmliZXIgPSBleHBvcnRzLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICAgIHN1YnNjcmliZXIub25Xb3JrQ2FuY2VsZWQod3JhcHBlZEludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBVcGRhdGUgcGVuZGluZyBhc3luYyBjb3VudHMgZm9yIGFsbCB3cmFwcGVkIGludGVyYWN0aW9ucy5cbiAgICAgIC8vIElmIHRoaXMgd2FzIHRoZSBsYXN0IHNjaGVkdWxlZCBhc3luYyB3b3JrIGZvciBhbnkgb2YgdGhlbSxcbiAgICAgIC8vIE1hcmsgdGhlbSBhcyBjb21wbGV0ZWQuXG4gICAgICB3cmFwcGVkSW50ZXJhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVyYWN0aW9uKSB7XG4gICAgICAgIGludGVyYWN0aW9uLl9fY291bnQtLTtcblxuICAgICAgICBpZiAoc3Vic2NyaWJlciAmJiBpbnRlcmFjdGlvbi5fX2NvdW50ID09PSAwKSB7XG4gICAgICAgICAgc3Vic2NyaWJlci5vbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZChpbnRlcmFjdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gd3JhcHBlZDtcbn1cblxudmFyIHN1YnNjcmliZXJzID0gbnVsbDtcbmlmIChlbmFibGVTY2hlZHVsZXJUcmFjaW5nKSB7XG4gIHN1YnNjcmliZXJzID0gbmV3IFNldCgpO1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9zdWJzY3JpYmUoc3Vic2NyaWJlcikge1xuICBpZiAoZW5hYmxlU2NoZWR1bGVyVHJhY2luZykge1xuICAgIHN1YnNjcmliZXJzLmFkZChzdWJzY3JpYmVyKTtcblxuICAgIGlmIChzdWJzY3JpYmVycy5zaXplID09PSAxKSB7XG4gICAgICBleHBvcnRzLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50ID0ge1xuICAgICAgICBvbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZDogb25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQsXG4gICAgICAgIG9uSW50ZXJhY3Rpb25UcmFjZWQ6IG9uSW50ZXJhY3Rpb25UcmFjZWQsXG4gICAgICAgIG9uV29ya0NhbmNlbGVkOiBvbldvcmtDYW5jZWxlZCxcbiAgICAgICAgb25Xb3JrU2NoZWR1bGVkOiBvbldvcmtTY2hlZHVsZWQsXG4gICAgICAgIG9uV29ya1N0YXJ0ZWQ6IG9uV29ya1N0YXJ0ZWQsXG4gICAgICAgIG9uV29ya1N0b3BwZWQ6IG9uV29ya1N0b3BwZWRcbiAgICAgIH07XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX3Vuc3Vic2NyaWJlKHN1YnNjcmliZXIpIHtcbiAgaWYgKGVuYWJsZVNjaGVkdWxlclRyYWNpbmcpIHtcbiAgICBzdWJzY3JpYmVycy5kZWxldGUoc3Vic2NyaWJlcik7XG5cbiAgICBpZiAoc3Vic2NyaWJlcnMuc2l6ZSA9PT0gMCkge1xuICAgICAgZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uSW50ZXJhY3Rpb25UcmFjZWQoaW50ZXJhY3Rpb24pIHtcbiAgdmFyIGRpZENhdGNoRXJyb3IgPSBmYWxzZTtcbiAgdmFyIGNhdWdodEVycm9yID0gbnVsbDtcblxuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblRyYWNlZChpbnRlcmFjdGlvbik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghZGlkQ2F0Y2hFcnJvcikge1xuICAgICAgICBkaWRDYXRjaEVycm9yID0gdHJ1ZTtcbiAgICAgICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGlmIChkaWRDYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgY2F1Z2h0RXJyb3I7XG4gIH1cbn1cblxuZnVuY3Rpb24gb25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQoaW50ZXJhY3Rpb24pIHtcbiAgdmFyIGRpZENhdGNoRXJyb3IgPSBmYWxzZTtcbiAgdmFyIGNhdWdodEVycm9yID0gbnVsbDtcblxuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQoaW50ZXJhY3Rpb24pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWRpZENhdGNoRXJyb3IpIHtcbiAgICAgICAgZGlkQ2F0Y2hFcnJvciA9IHRydWU7XG4gICAgICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBpZiAoZGlkQ2F0Y2hFcnJvcikge1xuICAgIHRocm93IGNhdWdodEVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uV29ya1NjaGVkdWxlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKSB7XG4gIHZhciBkaWRDYXRjaEVycm9yID0gZmFsc2U7XG4gIHZhciBjYXVnaHRFcnJvciA9IG51bGw7XG5cbiAgc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgIHRyeSB7XG4gICAgICBzdWJzY3JpYmVyLm9uV29ya1NjaGVkdWxlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFkaWRDYXRjaEVycm9yKSB7XG4gICAgICAgIGRpZENhdGNoRXJyb3IgPSB0cnVlO1xuICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRpZENhdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBjYXVnaHRFcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbldvcmtTdGFydGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpIHtcbiAgdmFyIGRpZENhdGNoRXJyb3IgPSBmYWxzZTtcbiAgdmFyIGNhdWdodEVycm9yID0gbnVsbDtcblxuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RhcnRlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFkaWRDYXRjaEVycm9yKSB7XG4gICAgICAgIGRpZENhdGNoRXJyb3IgPSB0cnVlO1xuICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRpZENhdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBjYXVnaHRFcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbldvcmtTdG9wcGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpIHtcbiAgdmFyIGRpZENhdGNoRXJyb3IgPSBmYWxzZTtcbiAgdmFyIGNhdWdodEVycm9yID0gbnVsbDtcblxuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RvcHBlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFkaWRDYXRjaEVycm9yKSB7XG4gICAgICAgIGRpZENhdGNoRXJyb3IgPSB0cnVlO1xuICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRpZENhdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBjYXVnaHRFcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbldvcmtDYW5jZWxlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKSB7XG4gIHZhciBkaWRDYXRjaEVycm9yID0gZmFsc2U7XG4gIHZhciBjYXVnaHRFcnJvciA9IG51bGw7XG5cbiAgc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgIHRyeSB7XG4gICAgICBzdWJzY3JpYmVyLm9uV29ya0NhbmNlbGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWRpZENhdGNoRXJyb3IpIHtcbiAgICAgICAgZGlkQ2F0Y2hFcnJvciA9IHRydWU7XG4gICAgICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBpZiAoZGlkQ2F0Y2hFcnJvcikge1xuICAgIHRocm93IGNhdWdodEVycm9yO1xuICB9XG59XG5cbmV4cG9ydHMudW5zdGFibGVfY2xlYXIgPSB1bnN0YWJsZV9jbGVhcjtcbmV4cG9ydHMudW5zdGFibGVfZ2V0Q3VycmVudCA9IHVuc3RhYmxlX2dldEN1cnJlbnQ7XG5leHBvcnRzLnVuc3RhYmxlX2dldFRocmVhZElEID0gdW5zdGFibGVfZ2V0VGhyZWFkSUQ7XG5leHBvcnRzLnVuc3RhYmxlX3RyYWNlID0gdW5zdGFibGVfdHJhY2U7XG5leHBvcnRzLnVuc3RhYmxlX3dyYXAgPSB1bnN0YWJsZV93cmFwO1xuZXhwb3J0cy51bnN0YWJsZV9zdWJzY3JpYmUgPSB1bnN0YWJsZV9zdWJzY3JpYmU7XG5leHBvcnRzLnVuc3RhYmxlX3Vuc3Vic2NyaWJlID0gdW5zdGFibGVfdW5zdWJzY3JpYmU7XG4gIH0pKCk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/scheduler/cjs/scheduler-tracing.development.js\n"); - -/***/ }), - -/***/ "./node_modules/scheduler/cjs/scheduler.development.js": -/*!*************************************************************!*\ - !*** ./node_modules/scheduler/cjs/scheduler.development.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(global) {/** @license React v0.13.6\n * scheduler.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\n\n\nif (true) {\n (function() {\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar enableSchedulerDebugging = false;\n\n/* eslint-disable no-var */\n\n// TODO: Use symbols?\nvar ImmediatePriority = 1;\nvar UserBlockingPriority = 2;\nvar NormalPriority = 3;\nvar LowPriority = 4;\nvar IdlePriority = 5;\n\n// Max 31 bit integer. The max integer size in V8 for 32-bit systems.\n// Math.pow(2, 30) - 1\n// 0b111111111111111111111111111111\nvar maxSigned31BitInt = 1073741823;\n\n// Times out immediately\nvar IMMEDIATE_PRIORITY_TIMEOUT = -1;\n// Eventually times out\nvar USER_BLOCKING_PRIORITY = 250;\nvar NORMAL_PRIORITY_TIMEOUT = 5000;\nvar LOW_PRIORITY_TIMEOUT = 10000;\n// Never times out\nvar IDLE_PRIORITY = maxSigned31BitInt;\n\n// Callbacks are stored as a circular, doubly linked list.\nvar firstCallbackNode = null;\n\nvar currentDidTimeout = false;\n// Pausing the scheduler is useful for debugging.\nvar isSchedulerPaused = false;\n\nvar currentPriorityLevel = NormalPriority;\nvar currentEventStartTime = -1;\nvar currentExpirationTime = -1;\n\n// This is set when a callback is being executed, to prevent re-entrancy.\nvar isExecutingCallback = false;\n\nvar isHostCallbackScheduled = false;\n\nvar hasNativePerformanceNow = typeof performance === 'object' && typeof performance.now === 'function';\n\nfunction ensureHostCallbackIsScheduled() {\n if (isExecutingCallback) {\n // Don't schedule work yet; wait until the next time we yield.\n return;\n }\n // Schedule the host callback using the earliest expiration in the list.\n var expirationTime = firstCallbackNode.expirationTime;\n if (!isHostCallbackScheduled) {\n isHostCallbackScheduled = true;\n } else {\n // Cancel the existing host callback.\n cancelHostCallback();\n }\n requestHostCallback(flushWork, expirationTime);\n}\n\nfunction flushFirstCallback() {\n var flushedNode = firstCallbackNode;\n\n // Remove the node from the list before calling the callback. That way the\n // list is in a consistent state even if the callback throws.\n var next = firstCallbackNode.next;\n if (firstCallbackNode === next) {\n // This is the last callback in the list.\n firstCallbackNode = null;\n next = null;\n } else {\n var lastCallbackNode = firstCallbackNode.previous;\n firstCallbackNode = lastCallbackNode.next = next;\n next.previous = lastCallbackNode;\n }\n\n flushedNode.next = flushedNode.previous = null;\n\n // Now it's safe to call the callback.\n var callback = flushedNode.callback;\n var expirationTime = flushedNode.expirationTime;\n var priorityLevel = flushedNode.priorityLevel;\n var previousPriorityLevel = currentPriorityLevel;\n var previousExpirationTime = currentExpirationTime;\n currentPriorityLevel = priorityLevel;\n currentExpirationTime = expirationTime;\n var continuationCallback;\n try {\n continuationCallback = callback();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n currentExpirationTime = previousExpirationTime;\n }\n\n // A callback may return a continuation. The continuation should be scheduled\n // with the same priority and expiration as the just-finished callback.\n if (typeof continuationCallback === 'function') {\n var continuationNode = {\n callback: continuationCallback,\n priorityLevel: priorityLevel,\n expirationTime: expirationTime,\n next: null,\n previous: null\n };\n\n // Insert the new callback into the list, sorted by its expiration. This is\n // almost the same as the code in `scheduleCallback`, except the callback\n // is inserted into the list *before* callbacks of equal expiration instead\n // of after.\n if (firstCallbackNode === null) {\n // This is the first callback in the list.\n firstCallbackNode = continuationNode.next = continuationNode.previous = continuationNode;\n } else {\n var nextAfterContinuation = null;\n var node = firstCallbackNode;\n do {\n if (node.expirationTime >= expirationTime) {\n // This callback expires at or after the continuation. We will insert\n // the continuation *before* this callback.\n nextAfterContinuation = node;\n break;\n }\n node = node.next;\n } while (node !== firstCallbackNode);\n\n if (nextAfterContinuation === null) {\n // No equal or lower priority callback was found, which means the new\n // callback is the lowest priority callback in the list.\n nextAfterContinuation = firstCallbackNode;\n } else if (nextAfterContinuation === firstCallbackNode) {\n // The new callback is the highest priority callback in the list.\n firstCallbackNode = continuationNode;\n ensureHostCallbackIsScheduled();\n }\n\n var previous = nextAfterContinuation.previous;\n previous.next = nextAfterContinuation.previous = continuationNode;\n continuationNode.next = nextAfterContinuation;\n continuationNode.previous = previous;\n }\n }\n}\n\nfunction flushImmediateWork() {\n if (\n // Confirm we've exited the outer most event handler\n currentEventStartTime === -1 && firstCallbackNode !== null && firstCallbackNode.priorityLevel === ImmediatePriority) {\n isExecutingCallback = true;\n try {\n do {\n flushFirstCallback();\n } while (\n // Keep flushing until there are no more immediate callbacks\n firstCallbackNode !== null && firstCallbackNode.priorityLevel === ImmediatePriority);\n } finally {\n isExecutingCallback = false;\n if (firstCallbackNode !== null) {\n // There's still work remaining. Request another callback.\n ensureHostCallbackIsScheduled();\n } else {\n isHostCallbackScheduled = false;\n }\n }\n }\n}\n\nfunction flushWork(didTimeout) {\n // Exit right away if we're currently paused\n\n if (enableSchedulerDebugging && isSchedulerPaused) {\n return;\n }\n\n isExecutingCallback = true;\n var previousDidTimeout = currentDidTimeout;\n currentDidTimeout = didTimeout;\n try {\n if (didTimeout) {\n // Flush all the expired callbacks without yielding.\n while (firstCallbackNode !== null && !(enableSchedulerDebugging && isSchedulerPaused)) {\n // TODO Wrap in feature flag\n // Read the current time. Flush all the callbacks that expire at or\n // earlier than that time. Then read the current time again and repeat.\n // This optimizes for as few performance.now calls as possible.\n var currentTime = exports.unstable_now();\n if (firstCallbackNode.expirationTime <= currentTime) {\n do {\n flushFirstCallback();\n } while (firstCallbackNode !== null && firstCallbackNode.expirationTime <= currentTime && !(enableSchedulerDebugging && isSchedulerPaused));\n continue;\n }\n break;\n }\n } else {\n // Keep flushing callbacks until we run out of time in the frame.\n if (firstCallbackNode !== null) {\n do {\n if (enableSchedulerDebugging && isSchedulerPaused) {\n break;\n }\n flushFirstCallback();\n } while (firstCallbackNode !== null && !shouldYieldToHost());\n }\n }\n } finally {\n isExecutingCallback = false;\n currentDidTimeout = previousDidTimeout;\n if (firstCallbackNode !== null) {\n // There's still work remaining. Request another callback.\n ensureHostCallbackIsScheduled();\n } else {\n isHostCallbackScheduled = false;\n }\n // Before exiting, flush all the immediate work that was scheduled.\n flushImmediateWork();\n }\n}\n\nfunction unstable_runWithPriority(priorityLevel, eventHandler) {\n switch (priorityLevel) {\n case ImmediatePriority:\n case UserBlockingPriority:\n case NormalPriority:\n case LowPriority:\n case IdlePriority:\n break;\n default:\n priorityLevel = NormalPriority;\n }\n\n var previousPriorityLevel = currentPriorityLevel;\n var previousEventStartTime = currentEventStartTime;\n currentPriorityLevel = priorityLevel;\n currentEventStartTime = exports.unstable_now();\n\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n currentEventStartTime = previousEventStartTime;\n\n // Before exiting, flush all the immediate work that was scheduled.\n flushImmediateWork();\n }\n}\n\nfunction unstable_next(eventHandler) {\n var priorityLevel = void 0;\n switch (currentPriorityLevel) {\n case ImmediatePriority:\n case UserBlockingPriority:\n case NormalPriority:\n // Shift down to normal priority\n priorityLevel = NormalPriority;\n break;\n default:\n // Anything lower than normal priority should remain at the current level.\n priorityLevel = currentPriorityLevel;\n break;\n }\n\n var previousPriorityLevel = currentPriorityLevel;\n var previousEventStartTime = currentEventStartTime;\n currentPriorityLevel = priorityLevel;\n currentEventStartTime = exports.unstable_now();\n\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n currentEventStartTime = previousEventStartTime;\n\n // Before exiting, flush all the immediate work that was scheduled.\n flushImmediateWork();\n }\n}\n\nfunction unstable_wrapCallback(callback) {\n var parentPriorityLevel = currentPriorityLevel;\n return function () {\n // This is a fork of runWithPriority, inlined for performance.\n var previousPriorityLevel = currentPriorityLevel;\n var previousEventStartTime = currentEventStartTime;\n currentPriorityLevel = parentPriorityLevel;\n currentEventStartTime = exports.unstable_now();\n\n try {\n return callback.apply(this, arguments);\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n currentEventStartTime = previousEventStartTime;\n flushImmediateWork();\n }\n };\n}\n\nfunction unstable_scheduleCallback(callback, deprecated_options) {\n var startTime = currentEventStartTime !== -1 ? currentEventStartTime : exports.unstable_now();\n\n var expirationTime;\n if (typeof deprecated_options === 'object' && deprecated_options !== null && typeof deprecated_options.timeout === 'number') {\n // FIXME: Remove this branch once we lift expiration times out of React.\n expirationTime = startTime + deprecated_options.timeout;\n } else {\n switch (currentPriorityLevel) {\n case ImmediatePriority:\n expirationTime = startTime + IMMEDIATE_PRIORITY_TIMEOUT;\n break;\n case UserBlockingPriority:\n expirationTime = startTime + USER_BLOCKING_PRIORITY;\n break;\n case IdlePriority:\n expirationTime = startTime + IDLE_PRIORITY;\n break;\n case LowPriority:\n expirationTime = startTime + LOW_PRIORITY_TIMEOUT;\n break;\n case NormalPriority:\n default:\n expirationTime = startTime + NORMAL_PRIORITY_TIMEOUT;\n }\n }\n\n var newNode = {\n callback: callback,\n priorityLevel: currentPriorityLevel,\n expirationTime: expirationTime,\n next: null,\n previous: null\n };\n\n // Insert the new callback into the list, ordered first by expiration, then\n // by insertion. So the new callback is inserted any other callback with\n // equal expiration.\n if (firstCallbackNode === null) {\n // This is the first callback in the list.\n firstCallbackNode = newNode.next = newNode.previous = newNode;\n ensureHostCallbackIsScheduled();\n } else {\n var next = null;\n var node = firstCallbackNode;\n do {\n if (node.expirationTime > expirationTime) {\n // The new callback expires before this one.\n next = node;\n break;\n }\n node = node.next;\n } while (node !== firstCallbackNode);\n\n if (next === null) {\n // No callback with a later expiration was found, which means the new\n // callback has the latest expiration in the list.\n next = firstCallbackNode;\n } else if (next === firstCallbackNode) {\n // The new callback has the earliest expiration in the entire list.\n firstCallbackNode = newNode;\n ensureHostCallbackIsScheduled();\n }\n\n var previous = next.previous;\n previous.next = next.previous = newNode;\n newNode.next = next;\n newNode.previous = previous;\n }\n\n return newNode;\n}\n\nfunction unstable_pauseExecution() {\n isSchedulerPaused = true;\n}\n\nfunction unstable_continueExecution() {\n isSchedulerPaused = false;\n if (firstCallbackNode !== null) {\n ensureHostCallbackIsScheduled();\n }\n}\n\nfunction unstable_getFirstCallbackNode() {\n return firstCallbackNode;\n}\n\nfunction unstable_cancelCallback(callbackNode) {\n var next = callbackNode.next;\n if (next === null) {\n // Already cancelled.\n return;\n }\n\n if (next === callbackNode) {\n // This is the only scheduled callback. Clear the list.\n firstCallbackNode = null;\n } else {\n // Remove the callback from its position in the list.\n if (callbackNode === firstCallbackNode) {\n firstCallbackNode = next;\n }\n var previous = callbackNode.previous;\n previous.next = next;\n next.previous = previous;\n }\n\n callbackNode.next = callbackNode.previous = null;\n}\n\nfunction unstable_getCurrentPriorityLevel() {\n return currentPriorityLevel;\n}\n\nfunction unstable_shouldYield() {\n return !currentDidTimeout && (firstCallbackNode !== null && firstCallbackNode.expirationTime < currentExpirationTime || shouldYieldToHost());\n}\n\n// The remaining code is essentially a polyfill for requestIdleCallback. It\n// works by scheduling a requestAnimationFrame, storing the time for the start\n// of the frame, then scheduling a postMessage which gets scheduled after paint.\n// Within the postMessage handler do as much work as possible until time + frame\n// rate. By separating the idle call into a separate event tick we ensure that\n// layout, paint and other browser work is counted against the available time.\n// The frame rate is dynamically adjusted.\n\n// We capture a local reference to any global, in case it gets polyfilled after\n// this module is initially evaluated. We want to be using a\n// consistent implementation.\nvar localDate = Date;\n\n// This initialization code may run even on server environments if a component\n// just imports ReactDOM (e.g. for findDOMNode). Some environments might not\n// have setTimeout or clearTimeout. However, we always expect them to be defined\n// on the client. https://github.com/facebook/react/pull/13088\nvar localSetTimeout = typeof setTimeout === 'function' ? setTimeout : undefined;\nvar localClearTimeout = typeof clearTimeout === 'function' ? clearTimeout : undefined;\n\n// We don't expect either of these to necessarily be defined, but we will error\n// later if they are missing on the client.\nvar localRequestAnimationFrame = typeof requestAnimationFrame === 'function' ? requestAnimationFrame : undefined;\nvar localCancelAnimationFrame = typeof cancelAnimationFrame === 'function' ? cancelAnimationFrame : undefined;\n\n// requestAnimationFrame does not run when the tab is in the background. If\n// we're backgrounded we prefer for that work to happen so that the page\n// continues to load in the background. So we also schedule a 'setTimeout' as\n// a fallback.\n// TODO: Need a better heuristic for backgrounded work.\nvar ANIMATION_FRAME_TIMEOUT = 100;\nvar rAFID;\nvar rAFTimeoutID;\nvar requestAnimationFrameWithTimeout = function (callback) {\n // schedule rAF and also a setTimeout\n rAFID = localRequestAnimationFrame(function (timestamp) {\n // cancel the setTimeout\n localClearTimeout(rAFTimeoutID);\n callback(timestamp);\n });\n rAFTimeoutID = localSetTimeout(function () {\n // cancel the requestAnimationFrame\n localCancelAnimationFrame(rAFID);\n callback(exports.unstable_now());\n }, ANIMATION_FRAME_TIMEOUT);\n};\n\nif (hasNativePerformanceNow) {\n var Performance = performance;\n exports.unstable_now = function () {\n return Performance.now();\n };\n} else {\n exports.unstable_now = function () {\n return localDate.now();\n };\n}\n\nvar requestHostCallback;\nvar cancelHostCallback;\nvar shouldYieldToHost;\n\nvar globalValue = null;\nif (typeof window !== 'undefined') {\n globalValue = window;\n} else if (typeof global !== 'undefined') {\n globalValue = global;\n}\n\nif (globalValue && globalValue._schedMock) {\n // Dynamic injection, only for testing purposes.\n var globalImpl = globalValue._schedMock;\n requestHostCallback = globalImpl[0];\n cancelHostCallback = globalImpl[1];\n shouldYieldToHost = globalImpl[2];\n exports.unstable_now = globalImpl[3];\n} else if (\n// If Scheduler runs in a non-DOM environment, it falls back to a naive\n// implementation using setTimeout.\ntypeof window === 'undefined' ||\n// Check if MessageChannel is supported, too.\ntypeof MessageChannel !== 'function') {\n // If this accidentally gets imported in a non-browser environment, e.g. JavaScriptCore,\n // fallback to a naive implementation.\n var _callback = null;\n var _flushCallback = function (didTimeout) {\n if (_callback !== null) {\n try {\n _callback(didTimeout);\n } finally {\n _callback = null;\n }\n }\n };\n requestHostCallback = function (cb, ms) {\n if (_callback !== null) {\n // Protect against re-entrancy.\n setTimeout(requestHostCallback, 0, cb);\n } else {\n _callback = cb;\n setTimeout(_flushCallback, 0, false);\n }\n };\n cancelHostCallback = function () {\n _callback = null;\n };\n shouldYieldToHost = function () {\n return false;\n };\n} else {\n if (typeof console !== 'undefined') {\n // TODO: Remove fb.me link\n if (typeof localRequestAnimationFrame !== 'function') {\n console.error(\"This browser doesn't support requestAnimationFrame. \" + 'Make sure that you load a ' + 'polyfill in older browsers. https://fb.me/react-polyfills');\n }\n if (typeof localCancelAnimationFrame !== 'function') {\n console.error(\"This browser doesn't support cancelAnimationFrame. \" + 'Make sure that you load a ' + 'polyfill in older browsers. https://fb.me/react-polyfills');\n }\n }\n\n var scheduledHostCallback = null;\n var isMessageEventScheduled = false;\n var timeoutTime = -1;\n\n var isAnimationFrameScheduled = false;\n\n var isFlushingHostCallback = false;\n\n var frameDeadline = 0;\n // We start out assuming that we run at 30fps but then the heuristic tracking\n // will adjust this value to a faster fps if we get more frequent animation\n // frames.\n var previousFrameTime = 33;\n var activeFrameTime = 33;\n\n shouldYieldToHost = function () {\n return frameDeadline <= exports.unstable_now();\n };\n\n // We use the postMessage trick to defer idle work until after the repaint.\n var channel = new MessageChannel();\n var port = channel.port2;\n channel.port1.onmessage = function (event) {\n isMessageEventScheduled = false;\n\n var prevScheduledCallback = scheduledHostCallback;\n var prevTimeoutTime = timeoutTime;\n scheduledHostCallback = null;\n timeoutTime = -1;\n\n var currentTime = exports.unstable_now();\n\n var didTimeout = false;\n if (frameDeadline - currentTime <= 0) {\n // There's no time left in this idle period. Check if the callback has\n // a timeout and whether it's been exceeded.\n if (prevTimeoutTime !== -1 && prevTimeoutTime <= currentTime) {\n // Exceeded the timeout. Invoke the callback even though there's no\n // time left.\n didTimeout = true;\n } else {\n // No timeout.\n if (!isAnimationFrameScheduled) {\n // Schedule another animation callback so we retry later.\n isAnimationFrameScheduled = true;\n requestAnimationFrameWithTimeout(animationTick);\n }\n // Exit without invoking the callback.\n scheduledHostCallback = prevScheduledCallback;\n timeoutTime = prevTimeoutTime;\n return;\n }\n }\n\n if (prevScheduledCallback !== null) {\n isFlushingHostCallback = true;\n try {\n prevScheduledCallback(didTimeout);\n } finally {\n isFlushingHostCallback = false;\n }\n }\n };\n\n var animationTick = function (rafTime) {\n if (scheduledHostCallback !== null) {\n // Eagerly schedule the next animation callback at the beginning of the\n // frame. If the scheduler queue is not empty at the end of the frame, it\n // will continue flushing inside that callback. If the queue *is* empty,\n // then it will exit immediately. Posting the callback at the start of the\n // frame ensures it's fired within the earliest possible frame. If we\n // waited until the end of the frame to post the callback, we risk the\n // browser skipping a frame and not firing the callback until the frame\n // after that.\n requestAnimationFrameWithTimeout(animationTick);\n } else {\n // No pending work. Exit.\n isAnimationFrameScheduled = false;\n return;\n }\n\n var nextFrameTime = rafTime - frameDeadline + activeFrameTime;\n if (nextFrameTime < activeFrameTime && previousFrameTime < activeFrameTime) {\n if (nextFrameTime < 8) {\n // Defensive coding. We don't support higher frame rates than 120hz.\n // If the calculated frame time gets lower than 8, it is probably a bug.\n nextFrameTime = 8;\n }\n // If one frame goes long, then the next one can be short to catch up.\n // If two frames are short in a row, then that's an indication that we\n // actually have a higher frame rate than what we're currently optimizing.\n // We adjust our heuristic dynamically accordingly. For example, if we're\n // running on 120hz display or 90hz VR display.\n // Take the max of the two in case one of them was an anomaly due to\n // missed frame deadlines.\n activeFrameTime = nextFrameTime < previousFrameTime ? previousFrameTime : nextFrameTime;\n } else {\n previousFrameTime = nextFrameTime;\n }\n frameDeadline = rafTime + activeFrameTime;\n if (!isMessageEventScheduled) {\n isMessageEventScheduled = true;\n port.postMessage(undefined);\n }\n };\n\n requestHostCallback = function (callback, absoluteTimeout) {\n scheduledHostCallback = callback;\n timeoutTime = absoluteTimeout;\n if (isFlushingHostCallback || absoluteTimeout < 0) {\n // Don't wait for the next frame. Continue working ASAP, in a new event.\n port.postMessage(undefined);\n } else if (!isAnimationFrameScheduled) {\n // If rAF didn't already schedule one, we need to schedule a frame.\n // TODO: If this rAF doesn't materialize because the browser throttles, we\n // might want to still have setTimeout trigger rIC as a backup to ensure\n // that we keep performing work.\n isAnimationFrameScheduled = true;\n requestAnimationFrameWithTimeout(animationTick);\n }\n };\n\n cancelHostCallback = function () {\n scheduledHostCallback = null;\n isMessageEventScheduled = false;\n timeoutTime = -1;\n };\n}\n\nexports.unstable_ImmediatePriority = ImmediatePriority;\nexports.unstable_UserBlockingPriority = UserBlockingPriority;\nexports.unstable_NormalPriority = NormalPriority;\nexports.unstable_IdlePriority = IdlePriority;\nexports.unstable_LowPriority = LowPriority;\nexports.unstable_runWithPriority = unstable_runWithPriority;\nexports.unstable_next = unstable_next;\nexports.unstable_scheduleCallback = unstable_scheduleCallback;\nexports.unstable_cancelCallback = unstable_cancelCallback;\nexports.unstable_wrapCallback = unstable_wrapCallback;\nexports.unstable_getCurrentPriorityLevel = unstable_getCurrentPriorityLevel;\nexports.unstable_shouldYield = unstable_shouldYield;\nexports.unstable_continueExecution = unstable_continueExecution;\nexports.unstable_pauseExecution = unstable_pauseExecution;\nexports.unstable_getFirstCallbackNode = unstable_getFirstCallbackNode;\n })();\n}\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../next/dist/compiled/webpack/global.js */ \"./node_modules/next/dist/compiled/webpack/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLmRldmVsb3BtZW50LmpzPzMwNjkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTs7OztBQUliLElBQUksSUFBcUM7QUFDekM7QUFDQTs7QUFFQSw4Q0FBOEMsY0FBYzs7QUFFNUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLmRldmVsb3BtZW50LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBsaWNlbnNlIFJlYWN0IHYwLjEzLjZcbiAqIHNjaGVkdWxlci5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG52YXIgZW5hYmxlU2NoZWR1bGVyRGVidWdnaW5nID0gZmFsc2U7XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXZhciAqL1xuXG4vLyBUT0RPOiBVc2Ugc3ltYm9scz9cbnZhciBJbW1lZGlhdGVQcmlvcml0eSA9IDE7XG52YXIgVXNlckJsb2NraW5nUHJpb3JpdHkgPSAyO1xudmFyIE5vcm1hbFByaW9yaXR5ID0gMztcbnZhciBMb3dQcmlvcml0eSA9IDQ7XG52YXIgSWRsZVByaW9yaXR5ID0gNTtcblxuLy8gTWF4IDMxIGJpdCBpbnRlZ2VyLiBUaGUgbWF4IGludGVnZXIgc2l6ZSBpbiBWOCBmb3IgMzItYml0IHN5c3RlbXMuXG4vLyBNYXRoLnBvdygyLCAzMCkgLSAxXG4vLyAwYjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMVxudmFyIG1heFNpZ25lZDMxQml0SW50ID0gMTA3Mzc0MTgyMztcblxuLy8gVGltZXMgb3V0IGltbWVkaWF0ZWx5XG52YXIgSU1NRURJQVRFX1BSSU9SSVRZX1RJTUVPVVQgPSAtMTtcbi8vIEV2ZW50dWFsbHkgdGltZXMgb3V0XG52YXIgVVNFUl9CTE9DS0lOR19QUklPUklUWSA9IDI1MDtcbnZhciBOT1JNQUxfUFJJT1JJVFlfVElNRU9VVCA9IDUwMDA7XG52YXIgTE9XX1BSSU9SSVRZX1RJTUVPVVQgPSAxMDAwMDtcbi8vIE5ldmVyIHRpbWVzIG91dFxudmFyIElETEVfUFJJT1JJVFkgPSBtYXhTaWduZWQzMUJpdEludDtcblxuLy8gQ2FsbGJhY2tzIGFyZSBzdG9yZWQgYXMgYSBjaXJjdWxhciwgZG91Ymx5IGxpbmtlZCBsaXN0LlxudmFyIGZpcnN0Q2FsbGJhY2tOb2RlID0gbnVsbDtcblxudmFyIGN1cnJlbnREaWRUaW1lb3V0ID0gZmFsc2U7XG4vLyBQYXVzaW5nIHRoZSBzY2hlZHVsZXIgaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuXG52YXIgaXNTY2hlZHVsZXJQYXVzZWQgPSBmYWxzZTtcblxudmFyIGN1cnJlbnRQcmlvcml0eUxldmVsID0gTm9ybWFsUHJpb3JpdHk7XG52YXIgY3VycmVudEV2ZW50U3RhcnRUaW1lID0gLTE7XG52YXIgY3VycmVudEV4cGlyYXRpb25UaW1lID0gLTE7XG5cbi8vIFRoaXMgaXMgc2V0IHdoZW4gYSBjYWxsYmFjayBpcyBiZWluZyBleGVjdXRlZCwgdG8gcHJldmVudCByZS1lbnRyYW5jeS5cbnZhciBpc0V4ZWN1dGluZ0NhbGxiYWNrID0gZmFsc2U7XG5cbnZhciBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9IGZhbHNlO1xuXG52YXIgaGFzTmF0aXZlUGVyZm9ybWFuY2VOb3cgPSB0eXBlb2YgcGVyZm9ybWFuY2UgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwZXJmb3JtYW5jZS5ub3cgPT09ICdmdW5jdGlvbic7XG5cbmZ1bmN0aW9uIGVuc3VyZUhvc3RDYWxsYmFja0lzU2NoZWR1bGVkKCkge1xuICBpZiAoaXNFeGVjdXRpbmdDYWxsYmFjaykge1xuICAgIC8vIERvbid0IHNjaGVkdWxlIHdvcmsgeWV0OyB3YWl0IHVudGlsIHRoZSBuZXh0IHRpbWUgd2UgeWllbGQuXG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIFNjaGVkdWxlIHRoZSBob3N0IGNhbGxiYWNrIHVzaW5nIHRoZSBlYXJsaWVzdCBleHBpcmF0aW9uIGluIHRoZSBsaXN0LlxuICB2YXIgZXhwaXJhdGlvblRpbWUgPSBmaXJzdENhbGxiYWNrTm9kZS5leHBpcmF0aW9uVGltZTtcbiAgaWYgKCFpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCkge1xuICAgIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICAvLyBDYW5jZWwgdGhlIGV4aXN0aW5nIGhvc3QgY2FsbGJhY2suXG4gICAgY2FuY2VsSG9zdENhbGxiYWNrKCk7XG4gIH1cbiAgcmVxdWVzdEhvc3RDYWxsYmFjayhmbHVzaFdvcmssIGV4cGlyYXRpb25UaW1lKTtcbn1cblxuZnVuY3Rpb24gZmx1c2hGaXJzdENhbGxiYWNrKCkge1xuICB2YXIgZmx1c2hlZE5vZGUgPSBmaXJzdENhbGxiYWNrTm9kZTtcblxuICAvLyBSZW1vdmUgdGhlIG5vZGUgZnJvbSB0aGUgbGlzdCBiZWZvcmUgY2FsbGluZyB0aGUgY2FsbGJhY2suIFRoYXQgd2F5IHRoZVxuICAvLyBsaXN0IGlzIGluIGEgY29uc2lzdGVudCBzdGF0ZSBldmVuIGlmIHRoZSBjYWxsYmFjayB0aHJvd3MuXG4gIHZhciBuZXh0ID0gZmlyc3RDYWxsYmFja05vZGUubmV4dDtcbiAgaWYgKGZpcnN0Q2FsbGJhY2tOb2RlID09PSBuZXh0KSB7XG4gICAgLy8gVGhpcyBpcyB0aGUgbGFzdCBjYWxsYmFjayBpbiB0aGUgbGlzdC5cbiAgICBmaXJzdENhbGxiYWNrTm9kZSA9IG51bGw7XG4gICAgbmV4dCA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxhc3RDYWxsYmFja05vZGUgPSBmaXJzdENhbGxiYWNrTm9kZS5wcmV2aW91cztcbiAgICBmaXJzdENhbGxiYWNrTm9kZSA9IGxhc3RDYWxsYmFja05vZGUubmV4dCA9IG5leHQ7XG4gICAgbmV4dC5wcmV2aW91cyA9IGxhc3RDYWxsYmFja05vZGU7XG4gIH1cblxuICBmbHVzaGVkTm9kZS5uZXh0ID0gZmx1c2hlZE5vZGUucHJldmlvdXMgPSBudWxsO1xuXG4gIC8vIE5vdyBpdCdzIHNhZmUgdG8gY2FsbCB0aGUgY2FsbGJhY2suXG4gIHZhciBjYWxsYmFjayA9IGZsdXNoZWROb2RlLmNhbGxiYWNrO1xuICB2YXIgZXhwaXJhdGlvblRpbWUgPSBmbHVzaGVkTm9kZS5leHBpcmF0aW9uVGltZTtcbiAgdmFyIHByaW9yaXR5TGV2ZWwgPSBmbHVzaGVkTm9kZS5wcmlvcml0eUxldmVsO1xuICB2YXIgcHJldmlvdXNQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gIHZhciBwcmV2aW91c0V4cGlyYXRpb25UaW1lID0gY3VycmVudEV4cGlyYXRpb25UaW1lO1xuICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByaW9yaXR5TGV2ZWw7XG4gIGN1cnJlbnRFeHBpcmF0aW9uVGltZSA9IGV4cGlyYXRpb25UaW1lO1xuICB2YXIgY29udGludWF0aW9uQ2FsbGJhY2s7XG4gIHRyeSB7XG4gICAgY29udGludWF0aW9uQ2FsbGJhY2sgPSBjYWxsYmFjaygpO1xuICB9IGZpbmFsbHkge1xuICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJldmlvdXNQcmlvcml0eUxldmVsO1xuICAgIGN1cnJlbnRFeHBpcmF0aW9uVGltZSA9IHByZXZpb3VzRXhwaXJhdGlvblRpbWU7XG4gIH1cblxuICAvLyBBIGNhbGxiYWNrIG1heSByZXR1cm4gYSBjb250aW51YXRpb24uIFRoZSBjb250aW51YXRpb24gc2hvdWxkIGJlIHNjaGVkdWxlZFxuICAvLyB3aXRoIHRoZSBzYW1lIHByaW9yaXR5IGFuZCBleHBpcmF0aW9uIGFzIHRoZSBqdXN0LWZpbmlzaGVkIGNhbGxiYWNrLlxuICBpZiAodHlwZW9mIGNvbnRpbnVhdGlvbkNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGNvbnRpbnVhdGlvbk5vZGUgPSB7XG4gICAgICBjYWxsYmFjazogY29udGludWF0aW9uQ2FsbGJhY2ssXG4gICAgICBwcmlvcml0eUxldmVsOiBwcmlvcml0eUxldmVsLFxuICAgICAgZXhwaXJhdGlvblRpbWU6IGV4cGlyYXRpb25UaW1lLFxuICAgICAgbmV4dDogbnVsbCxcbiAgICAgIHByZXZpb3VzOiBudWxsXG4gICAgfTtcblxuICAgIC8vIEluc2VydCB0aGUgbmV3IGNhbGxiYWNrIGludG8gdGhlIGxpc3QsIHNvcnRlZCBieSBpdHMgZXhwaXJhdGlvbi4gVGhpcyBpc1xuICAgIC8vIGFsbW9zdCB0aGUgc2FtZSBhcyB0aGUgY29kZSBpbiBgc2NoZWR1bGVDYWxsYmFja2AsIGV4Y2VwdCB0aGUgY2FsbGJhY2tcbiAgICAvLyBpcyBpbnNlcnRlZCBpbnRvIHRoZSBsaXN0ICpiZWZvcmUqIGNhbGxiYWNrcyBvZiBlcXVhbCBleHBpcmF0aW9uIGluc3RlYWRcbiAgICAvLyBvZiBhZnRlci5cbiAgICBpZiAoZmlyc3RDYWxsYmFja05vZGUgPT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IGNhbGxiYWNrIGluIHRoZSBsaXN0LlxuICAgICAgZmlyc3RDYWxsYmFja05vZGUgPSBjb250aW51YXRpb25Ob2RlLm5leHQgPSBjb250aW51YXRpb25Ob2RlLnByZXZpb3VzID0gY29udGludWF0aW9uTm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG5leHRBZnRlckNvbnRpbnVhdGlvbiA9IG51bGw7XG4gICAgICB2YXIgbm9kZSA9IGZpcnN0Q2FsbGJhY2tOb2RlO1xuICAgICAgZG8ge1xuICAgICAgICBpZiAobm9kZS5leHBpcmF0aW9uVGltZSA+PSBleHBpcmF0aW9uVGltZSkge1xuICAgICAgICAgIC8vIFRoaXMgY2FsbGJhY2sgZXhwaXJlcyBhdCBvciBhZnRlciB0aGUgY29udGludWF0aW9uLiBXZSB3aWxsIGluc2VydFxuICAgICAgICAgIC8vIHRoZSBjb250aW51YXRpb24gKmJlZm9yZSogdGhpcyBjYWxsYmFjay5cbiAgICAgICAgICBuZXh0QWZ0ZXJDb250aW51YXRpb24gPSBub2RlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIG5vZGUgPSBub2RlLm5leHQ7XG4gICAgICB9IHdoaWxlIChub2RlICE9PSBmaXJzdENhbGxiYWNrTm9kZSk7XG5cbiAgICAgIGlmIChuZXh0QWZ0ZXJDb250aW51YXRpb24gPT09IG51bGwpIHtcbiAgICAgICAgLy8gTm8gZXF1YWwgb3IgbG93ZXIgcHJpb3JpdHkgY2FsbGJhY2sgd2FzIGZvdW5kLCB3aGljaCBtZWFucyB0aGUgbmV3XG4gICAgICAgIC8vIGNhbGxiYWNrIGlzIHRoZSBsb3dlc3QgcHJpb3JpdHkgY2FsbGJhY2sgaW4gdGhlIGxpc3QuXG4gICAgICAgIG5leHRBZnRlckNvbnRpbnVhdGlvbiA9IGZpcnN0Q2FsbGJhY2tOb2RlO1xuICAgICAgfSBlbHNlIGlmIChuZXh0QWZ0ZXJDb250aW51YXRpb24gPT09IGZpcnN0Q2FsbGJhY2tOb2RlKSB7XG4gICAgICAgIC8vIFRoZSBuZXcgY2FsbGJhY2sgaXMgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgY2FsbGJhY2sgaW4gdGhlIGxpc3QuXG4gICAgICAgIGZpcnN0Q2FsbGJhY2tOb2RlID0gY29udGludWF0aW9uTm9kZTtcbiAgICAgICAgZW5zdXJlSG9zdENhbGxiYWNrSXNTY2hlZHVsZWQoKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHByZXZpb3VzID0gbmV4dEFmdGVyQ29udGludWF0aW9uLnByZXZpb3VzO1xuICAgICAgcHJldmlvdXMubmV4dCA9IG5leHRBZnRlckNvbnRpbnVhdGlvbi5wcmV2aW91cyA9IGNvbnRpbnVhdGlvbk5vZGU7XG4gICAgICBjb250aW51YXRpb25Ob2RlLm5leHQgPSBuZXh0QWZ0ZXJDb250aW51YXRpb247XG4gICAgICBjb250aW51YXRpb25Ob2RlLnByZXZpb3VzID0gcHJldmlvdXM7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZsdXNoSW1tZWRpYXRlV29yaygpIHtcbiAgaWYgKFxuICAvLyBDb25maXJtIHdlJ3ZlIGV4aXRlZCB0aGUgb3V0ZXIgbW9zdCBldmVudCBoYW5kbGVyXG4gIGN1cnJlbnRFdmVudFN0YXJ0VGltZSA9PT0gLTEgJiYgZmlyc3RDYWxsYmFja05vZGUgIT09IG51bGwgJiYgZmlyc3RDYWxsYmFja05vZGUucHJpb3JpdHlMZXZlbCA9PT0gSW1tZWRpYXRlUHJpb3JpdHkpIHtcbiAgICBpc0V4ZWN1dGluZ0NhbGxiYWNrID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgZG8ge1xuICAgICAgICBmbHVzaEZpcnN0Q2FsbGJhY2soKTtcbiAgICAgIH0gd2hpbGUgKFxuICAgICAgLy8gS2VlcCBmbHVzaGluZyB1bnRpbCB0aGVyZSBhcmUgbm8gbW9yZSBpbW1lZGlhdGUgY2FsbGJhY2tzXG4gICAgICBmaXJzdENhbGxiYWNrTm9kZSAhPT0gbnVsbCAmJiBmaXJzdENhbGxiYWNrTm9kZS5wcmlvcml0eUxldmVsID09PSBJbW1lZGlhdGVQcmlvcml0eSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlzRXhlY3V0aW5nQ2FsbGJhY2sgPSBmYWxzZTtcbiAgICAgIGlmIChmaXJzdENhbGxiYWNrTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAvLyBUaGVyZSdzIHN0aWxsIHdvcmsgcmVtYWluaW5nLiBSZXF1ZXN0IGFub3RoZXIgY2FsbGJhY2suXG4gICAgICAgIGVuc3VyZUhvc3RDYWxsYmFja0lzU2NoZWR1bGVkKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmbHVzaFdvcmsoZGlkVGltZW91dCkge1xuICAvLyBFeGl0IHJpZ2h0IGF3YXkgaWYgd2UncmUgY3VycmVudGx5IHBhdXNlZFxuXG4gIGlmIChlbmFibGVTY2hlZHVsZXJEZWJ1Z2dpbmcgJiYgaXNTY2hlZHVsZXJQYXVzZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpc0V4ZWN1dGluZ0NhbGxiYWNrID0gdHJ1ZTtcbiAgdmFyIHByZXZpb3VzRGlkVGltZW91dCA9IGN1cnJlbnREaWRUaW1lb3V0O1xuICBjdXJyZW50RGlkVGltZW91dCA9IGRpZFRpbWVvdXQ7XG4gIHRyeSB7XG4gICAgaWYgKGRpZFRpbWVvdXQpIHtcbiAgICAgIC8vIEZsdXNoIGFsbCB0aGUgZXhwaXJlZCBjYWxsYmFja3Mgd2l0aG91dCB5aWVsZGluZy5cbiAgICAgIHdoaWxlIChmaXJzdENhbGxiYWNrTm9kZSAhPT0gbnVsbCAmJiAhKGVuYWJsZVNjaGVkdWxlckRlYnVnZ2luZyAmJiBpc1NjaGVkdWxlclBhdXNlZCkpIHtcbiAgICAgICAgLy8gVE9ETyBXcmFwIGluIGZlYXR1cmUgZmxhZ1xuICAgICAgICAvLyBSZWFkIHRoZSBjdXJyZW50IHRpbWUuIEZsdXNoIGFsbCB0aGUgY2FsbGJhY2tzIHRoYXQgZXhwaXJlIGF0IG9yXG4gICAgICAgIC8vIGVhcmxpZXIgdGhhbiB0aGF0IHRpbWUuIFRoZW4gcmVhZCB0aGUgY3VycmVudCB0aW1lIGFnYWluIGFuZCByZXBlYXQuXG4gICAgICAgIC8vIFRoaXMgb3B0aW1pemVzIGZvciBhcyBmZXcgcGVyZm9ybWFuY2Uubm93IGNhbGxzIGFzIHBvc3NpYmxlLlxuICAgICAgICB2YXIgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpO1xuICAgICAgICBpZiAoZmlyc3RDYWxsYmFja05vZGUuZXhwaXJhdGlvblRpbWUgPD0gY3VycmVudFRpbWUpIHtcbiAgICAgICAgICBkbyB7XG4gICAgICAgICAgICBmbHVzaEZpcnN0Q2FsbGJhY2soKTtcbiAgICAgICAgICB9IHdoaWxlIChmaXJzdENhbGxiYWNrTm9kZSAhPT0gbnVsbCAmJiBmaXJzdENhbGxiYWNrTm9kZS5leHBpcmF0aW9uVGltZSA8PSBjdXJyZW50VGltZSAmJiAhKGVuYWJsZVNjaGVkdWxlckRlYnVnZ2luZyAmJiBpc1NjaGVkdWxlclBhdXNlZCkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBLZWVwIGZsdXNoaW5nIGNhbGxiYWNrcyB1bnRpbCB3ZSBydW4gb3V0IG9mIHRpbWUgaW4gdGhlIGZyYW1lLlxuICAgICAgaWYgKGZpcnN0Q2FsbGJhY2tOb2RlICE9PSBudWxsKSB7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICBpZiAoZW5hYmxlU2NoZWR1bGVyRGVidWdnaW5nICYmIGlzU2NoZWR1bGVyUGF1c2VkKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgZmx1c2hGaXJzdENhbGxiYWNrKCk7XG4gICAgICAgIH0gd2hpbGUgKGZpcnN0Q2FsbGJhY2tOb2RlICE9PSBudWxsICYmICFzaG91bGRZaWVsZFRvSG9zdCgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgaXNFeGVjdXRpbmdDYWxsYmFjayA9IGZhbHNlO1xuICAgIGN1cnJlbnREaWRUaW1lb3V0ID0gcHJldmlvdXNEaWRUaW1lb3V0O1xuICAgIGlmIChmaXJzdENhbGxiYWNrTm9kZSAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhlcmUncyBzdGlsbCB3b3JrIHJlbWFpbmluZy4gUmVxdWVzdCBhbm90aGVyIGNhbGxiYWNrLlxuICAgICAgZW5zdXJlSG9zdENhbGxiYWNrSXNTY2hlZHVsZWQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgLy8gQmVmb3JlIGV4aXRpbmcsIGZsdXNoIGFsbCB0aGUgaW1tZWRpYXRlIHdvcmsgdGhhdCB3YXMgc2NoZWR1bGVkLlxuICAgIGZsdXNoSW1tZWRpYXRlV29yaygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX3J1bldpdGhQcmlvcml0eShwcmlvcml0eUxldmVsLCBldmVudEhhbmRsZXIpIHtcbiAgc3dpdGNoIChwcmlvcml0eUxldmVsKSB7XG4gICAgY2FzZSBJbW1lZGlhdGVQcmlvcml0eTpcbiAgICBjYXNlIFVzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgIGNhc2UgTm9ybWFsUHJpb3JpdHk6XG4gICAgY2FzZSBMb3dQcmlvcml0eTpcbiAgICBjYXNlIElkbGVQcmlvcml0eTpcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBwcmlvcml0eUxldmVsID0gTm9ybWFsUHJpb3JpdHk7XG4gIH1cblxuICB2YXIgcHJldmlvdXNQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gIHZhciBwcmV2aW91c0V2ZW50U3RhcnRUaW1lID0gY3VycmVudEV2ZW50U3RhcnRUaW1lO1xuICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByaW9yaXR5TGV2ZWw7XG4gIGN1cnJlbnRFdmVudFN0YXJ0VGltZSA9IGV4cG9ydHMudW5zdGFibGVfbm93KCk7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZXZlbnRIYW5kbGVyKCk7XG4gIH0gZmluYWxseSB7XG4gICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWw7XG4gICAgY3VycmVudEV2ZW50U3RhcnRUaW1lID0gcHJldmlvdXNFdmVudFN0YXJ0VGltZTtcblxuICAgIC8vIEJlZm9yZSBleGl0aW5nLCBmbHVzaCBhbGwgdGhlIGltbWVkaWF0ZSB3b3JrIHRoYXQgd2FzIHNjaGVkdWxlZC5cbiAgICBmbHVzaEltbWVkaWF0ZVdvcmsoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9uZXh0KGV2ZW50SGFuZGxlcikge1xuICB2YXIgcHJpb3JpdHlMZXZlbCA9IHZvaWQgMDtcbiAgc3dpdGNoIChjdXJyZW50UHJpb3JpdHlMZXZlbCkge1xuICAgIGNhc2UgSW1tZWRpYXRlUHJpb3JpdHk6XG4gICAgY2FzZSBVc2VyQmxvY2tpbmdQcmlvcml0eTpcbiAgICBjYXNlIE5vcm1hbFByaW9yaXR5OlxuICAgICAgLy8gU2hpZnQgZG93biB0byBub3JtYWwgcHJpb3JpdHlcbiAgICAgIHByaW9yaXR5TGV2ZWwgPSBOb3JtYWxQcmlvcml0eTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBBbnl0aGluZyBsb3dlciB0aGFuIG5vcm1hbCBwcmlvcml0eSBzaG91bGQgcmVtYWluIGF0IHRoZSBjdXJyZW50IGxldmVsLlxuICAgICAgcHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICB2YXIgcHJldmlvdXNQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gIHZhciBwcmV2aW91c0V2ZW50U3RhcnRUaW1lID0gY3VycmVudEV2ZW50U3RhcnRUaW1lO1xuICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByaW9yaXR5TGV2ZWw7XG4gIGN1cnJlbnRFdmVudFN0YXJ0VGltZSA9IGV4cG9ydHMudW5zdGFibGVfbm93KCk7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZXZlbnRIYW5kbGVyKCk7XG4gIH0gZmluYWxseSB7XG4gICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWw7XG4gICAgY3VycmVudEV2ZW50U3RhcnRUaW1lID0gcHJldmlvdXNFdmVudFN0YXJ0VGltZTtcblxuICAgIC8vIEJlZm9yZSBleGl0aW5nLCBmbHVzaCBhbGwgdGhlIGltbWVkaWF0ZSB3b3JrIHRoYXQgd2FzIHNjaGVkdWxlZC5cbiAgICBmbHVzaEltbWVkaWF0ZVdvcmsoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV93cmFwQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgdmFyIHBhcmVudFByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUaGlzIGlzIGEgZm9yayBvZiBydW5XaXRoUHJpb3JpdHksIGlubGluZWQgZm9yIHBlcmZvcm1hbmNlLlxuICAgIHZhciBwcmV2aW91c1ByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgICB2YXIgcHJldmlvdXNFdmVudFN0YXJ0VGltZSA9IGN1cnJlbnRFdmVudFN0YXJ0VGltZTtcbiAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHBhcmVudFByaW9yaXR5TGV2ZWw7XG4gICAgY3VycmVudEV2ZW50U3RhcnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWw7XG4gICAgICBjdXJyZW50RXZlbnRTdGFydFRpbWUgPSBwcmV2aW91c0V2ZW50U3RhcnRUaW1lO1xuICAgICAgZmx1c2hJbW1lZGlhdGVXb3JrKCk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXByZWNhdGVkX29wdGlvbnMpIHtcbiAgdmFyIHN0YXJ0VGltZSA9IGN1cnJlbnRFdmVudFN0YXJ0VGltZSAhPT0gLTEgPyBjdXJyZW50RXZlbnRTdGFydFRpbWUgOiBleHBvcnRzLnVuc3RhYmxlX25vdygpO1xuXG4gIHZhciBleHBpcmF0aW9uVGltZTtcbiAgaWYgKHR5cGVvZiBkZXByZWNhdGVkX29wdGlvbnMgPT09ICdvYmplY3QnICYmIGRlcHJlY2F0ZWRfb3B0aW9ucyAhPT0gbnVsbCAmJiB0eXBlb2YgZGVwcmVjYXRlZF9vcHRpb25zLnRpbWVvdXQgPT09ICdudW1iZXInKSB7XG4gICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIGJyYW5jaCBvbmNlIHdlIGxpZnQgZXhwaXJhdGlvbiB0aW1lcyBvdXQgb2YgUmVhY3QuXG4gICAgZXhwaXJhdGlvblRpbWUgPSBzdGFydFRpbWUgKyBkZXByZWNhdGVkX29wdGlvbnMudGltZW91dDtcbiAgfSBlbHNlIHtcbiAgICBzd2l0Y2ggKGN1cnJlbnRQcmlvcml0eUxldmVsKSB7XG4gICAgICBjYXNlIEltbWVkaWF0ZVByaW9yaXR5OlxuICAgICAgICBleHBpcmF0aW9uVGltZSA9IHN0YXJ0VGltZSArIElNTUVESUFURV9QUklPUklUWV9USU1FT1VUO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVXNlckJsb2NraW5nUHJpb3JpdHk6XG4gICAgICAgIGV4cGlyYXRpb25UaW1lID0gc3RhcnRUaW1lICsgVVNFUl9CTE9DS0lOR19QUklPUklUWTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIElkbGVQcmlvcml0eTpcbiAgICAgICAgZXhwaXJhdGlvblRpbWUgPSBzdGFydFRpbWUgKyBJRExFX1BSSU9SSVRZO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTG93UHJpb3JpdHk6XG4gICAgICAgIGV4cGlyYXRpb25UaW1lID0gc3RhcnRUaW1lICsgTE9XX1BSSU9SSVRZX1RJTUVPVVQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBOb3JtYWxQcmlvcml0eTpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGV4cGlyYXRpb25UaW1lID0gc3RhcnRUaW1lICsgTk9STUFMX1BSSU9SSVRZX1RJTUVPVVQ7XG4gICAgfVxuICB9XG5cbiAgdmFyIG5ld05vZGUgPSB7XG4gICAgY2FsbGJhY2s6IGNhbGxiYWNrLFxuICAgIHByaW9yaXR5TGV2ZWw6IGN1cnJlbnRQcmlvcml0eUxldmVsLFxuICAgIGV4cGlyYXRpb25UaW1lOiBleHBpcmF0aW9uVGltZSxcbiAgICBuZXh0OiBudWxsLFxuICAgIHByZXZpb3VzOiBudWxsXG4gIH07XG5cbiAgLy8gSW5zZXJ0IHRoZSBuZXcgY2FsbGJhY2sgaW50byB0aGUgbGlzdCwgb3JkZXJlZCBmaXJzdCBieSBleHBpcmF0aW9uLCB0aGVuXG4gIC8vIGJ5IGluc2VydGlvbi4gU28gdGhlIG5ldyBjYWxsYmFjayBpcyBpbnNlcnRlZCBhbnkgb3RoZXIgY2FsbGJhY2sgd2l0aFxuICAvLyBlcXVhbCBleHBpcmF0aW9uLlxuICBpZiAoZmlyc3RDYWxsYmFja05vZGUgPT09IG51bGwpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBjYWxsYmFjayBpbiB0aGUgbGlzdC5cbiAgICBmaXJzdENhbGxiYWNrTm9kZSA9IG5ld05vZGUubmV4dCA9IG5ld05vZGUucHJldmlvdXMgPSBuZXdOb2RlO1xuICAgIGVuc3VyZUhvc3RDYWxsYmFja0lzU2NoZWR1bGVkKCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIG5leHQgPSBudWxsO1xuICAgIHZhciBub2RlID0gZmlyc3RDYWxsYmFja05vZGU7XG4gICAgZG8ge1xuICAgICAgaWYgKG5vZGUuZXhwaXJhdGlvblRpbWUgPiBleHBpcmF0aW9uVGltZSkge1xuICAgICAgICAvLyBUaGUgbmV3IGNhbGxiYWNrIGV4cGlyZXMgYmVmb3JlIHRoaXMgb25lLlxuICAgICAgICBuZXh0ID0gbm9kZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBub2RlID0gbm9kZS5uZXh0O1xuICAgIH0gd2hpbGUgKG5vZGUgIT09IGZpcnN0Q2FsbGJhY2tOb2RlKTtcblxuICAgIGlmIChuZXh0ID09PSBudWxsKSB7XG4gICAgICAvLyBObyBjYWxsYmFjayB3aXRoIGEgbGF0ZXIgZXhwaXJhdGlvbiB3YXMgZm91bmQsIHdoaWNoIG1lYW5zIHRoZSBuZXdcbiAgICAgIC8vIGNhbGxiYWNrIGhhcyB0aGUgbGF0ZXN0IGV4cGlyYXRpb24gaW4gdGhlIGxpc3QuXG4gICAgICBuZXh0ID0gZmlyc3RDYWxsYmFja05vZGU7XG4gICAgfSBlbHNlIGlmIChuZXh0ID09PSBmaXJzdENhbGxiYWNrTm9kZSkge1xuICAgICAgLy8gVGhlIG5ldyBjYWxsYmFjayBoYXMgdGhlIGVhcmxpZXN0IGV4cGlyYXRpb24gaW4gdGhlIGVudGlyZSBsaXN0LlxuICAgICAgZmlyc3RDYWxsYmFja05vZGUgPSBuZXdOb2RlO1xuICAgICAgZW5zdXJlSG9zdENhbGxiYWNrSXNTY2hlZHVsZWQoKTtcbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXMgPSBuZXh0LnByZXZpb3VzO1xuICAgIHByZXZpb3VzLm5leHQgPSBuZXh0LnByZXZpb3VzID0gbmV3Tm9kZTtcbiAgICBuZXdOb2RlLm5leHQgPSBuZXh0O1xuICAgIG5ld05vZGUucHJldmlvdXMgPSBwcmV2aW91cztcbiAgfVxuXG4gIHJldHVybiBuZXdOb2RlO1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9wYXVzZUV4ZWN1dGlvbigpIHtcbiAgaXNTY2hlZHVsZXJQYXVzZWQgPSB0cnVlO1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbigpIHtcbiAgaXNTY2hlZHVsZXJQYXVzZWQgPSBmYWxzZTtcbiAgaWYgKGZpcnN0Q2FsbGJhY2tOb2RlICE9PSBudWxsKSB7XG4gICAgZW5zdXJlSG9zdENhbGxiYWNrSXNTY2hlZHVsZWQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9nZXRGaXJzdENhbGxiYWNrTm9kZSgpIHtcbiAgcmV0dXJuIGZpcnN0Q2FsbGJhY2tOb2RlO1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9jYW5jZWxDYWxsYmFjayhjYWxsYmFja05vZGUpIHtcbiAgdmFyIG5leHQgPSBjYWxsYmFja05vZGUubmV4dDtcbiAgaWYgKG5leHQgPT09IG51bGwpIHtcbiAgICAvLyBBbHJlYWR5IGNhbmNlbGxlZC5cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAobmV4dCA9PT0gY2FsbGJhY2tOb2RlKSB7XG4gICAgLy8gVGhpcyBpcyB0aGUgb25seSBzY2hlZHVsZWQgY2FsbGJhY2suIENsZWFyIHRoZSBsaXN0LlxuICAgIGZpcnN0Q2FsbGJhY2tOb2RlID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICAvLyBSZW1vdmUgdGhlIGNhbGxiYWNrIGZyb20gaXRzIHBvc2l0aW9uIGluIHRoZSBsaXN0LlxuICAgIGlmIChjYWxsYmFja05vZGUgPT09IGZpcnN0Q2FsbGJhY2tOb2RlKSB7XG4gICAgICBmaXJzdENhbGxiYWNrTm9kZSA9IG5leHQ7XG4gICAgfVxuICAgIHZhciBwcmV2aW91cyA9IGNhbGxiYWNrTm9kZS5wcmV2aW91cztcbiAgICBwcmV2aW91cy5uZXh0ID0gbmV4dDtcbiAgICBuZXh0LnByZXZpb3VzID0gcHJldmlvdXM7XG4gIH1cblxuICBjYWxsYmFja05vZGUubmV4dCA9IGNhbGxiYWNrTm9kZS5wcmV2aW91cyA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsKCkge1xuICByZXR1cm4gY3VycmVudFByaW9yaXR5TGV2ZWw7XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX3Nob3VsZFlpZWxkKCkge1xuICByZXR1cm4gIWN1cnJlbnREaWRUaW1lb3V0ICYmIChmaXJzdENhbGxiYWNrTm9kZSAhPT0gbnVsbCAmJiBmaXJzdENhbGxiYWNrTm9kZS5leHBpcmF0aW9uVGltZSA8IGN1cnJlbnRFeHBpcmF0aW9uVGltZSB8fCBzaG91bGRZaWVsZFRvSG9zdCgpKTtcbn1cblxuLy8gVGhlIHJlbWFpbmluZyBjb2RlIGlzIGVzc2VudGlhbGx5IGEgcG9seWZpbGwgZm9yIHJlcXVlc3RJZGxlQ2FsbGJhY2suIEl0XG4vLyB3b3JrcyBieSBzY2hlZHVsaW5nIGEgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLCBzdG9yaW5nIHRoZSB0aW1lIGZvciB0aGUgc3RhcnRcbi8vIG9mIHRoZSBmcmFtZSwgdGhlbiBzY2hlZHVsaW5nIGEgcG9zdE1lc3NhZ2Ugd2hpY2ggZ2V0cyBzY2hlZHVsZWQgYWZ0ZXIgcGFpbnQuXG4vLyBXaXRoaW4gdGhlIHBvc3RNZXNzYWdlIGhhbmRsZXIgZG8gYXMgbXVjaCB3b3JrIGFzIHBvc3NpYmxlIHVudGlsIHRpbWUgKyBmcmFtZVxuLy8gcmF0ZS4gQnkgc2VwYXJhdGluZyB0aGUgaWRsZSBjYWxsIGludG8gYSBzZXBhcmF0ZSBldmVudCB0aWNrIHdlIGVuc3VyZSB0aGF0XG4vLyBsYXlvdXQsIHBhaW50IGFuZCBvdGhlciBicm93c2VyIHdvcmsgaXMgY291bnRlZCBhZ2FpbnN0IHRoZSBhdmFpbGFibGUgdGltZS5cbi8vIFRoZSBmcmFtZSByYXRlIGlzIGR5bmFtaWNhbGx5IGFkanVzdGVkLlxuXG4vLyBXZSBjYXB0dXJlIGEgbG9jYWwgcmVmZXJlbmNlIHRvIGFueSBnbG9iYWwsIGluIGNhc2UgaXQgZ2V0cyBwb2x5ZmlsbGVkIGFmdGVyXG4vLyB0aGlzIG1vZHVsZSBpcyBpbml0aWFsbHkgZXZhbHVhdGVkLiBXZSB3YW50IHRvIGJlIHVzaW5nIGFcbi8vIGNvbnNpc3RlbnQgaW1wbGVtZW50YXRpb24uXG52YXIgbG9jYWxEYXRlID0gRGF0ZTtcblxuLy8gVGhpcyBpbml0aWFsaXphdGlvbiBjb2RlIG1heSBydW4gZXZlbiBvbiBzZXJ2ZXIgZW52aXJvbm1lbnRzIGlmIGEgY29tcG9uZW50XG4vLyBqdXN0IGltcG9ydHMgUmVhY3RET00gKGUuZy4gZm9yIGZpbmRET01Ob2RlKS4gU29tZSBlbnZpcm9ubWVudHMgbWlnaHQgbm90XG4vLyBoYXZlIHNldFRpbWVvdXQgb3IgY2xlYXJUaW1lb3V0LiBIb3dldmVyLCB3ZSBhbHdheXMgZXhwZWN0IHRoZW0gdG8gYmUgZGVmaW5lZFxuLy8gb24gdGhlIGNsaWVudC4gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTMwODhcbnZhciBsb2NhbFNldFRpbWVvdXQgPSB0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJyA/IHNldFRpbWVvdXQgOiB1bmRlZmluZWQ7XG52YXIgbG9jYWxDbGVhclRpbWVvdXQgPSB0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nID8gY2xlYXJUaW1lb3V0IDogdW5kZWZpbmVkO1xuXG4vLyBXZSBkb24ndCBleHBlY3QgZWl0aGVyIG9mIHRoZXNlIHRvIG5lY2Vzc2FyaWx5IGJlIGRlZmluZWQsIGJ1dCB3ZSB3aWxsIGVycm9yXG4vLyBsYXRlciBpZiB0aGV5IGFyZSBtaXNzaW5nIG9uIHRoZSBjbGllbnQuXG52YXIgbG9jYWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSB0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID09PSAnZnVuY3Rpb24nID8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lIDogdW5kZWZpbmVkO1xudmFyIGxvY2FsQ2FuY2VsQW5pbWF0aW9uRnJhbWUgPSB0eXBlb2YgY2FuY2VsQW5pbWF0aW9uRnJhbWUgPT09ICdmdW5jdGlvbicgPyBjYW5jZWxBbmltYXRpb25GcmFtZSA6IHVuZGVmaW5lZDtcblxuLy8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lIGRvZXMgbm90IHJ1biB3aGVuIHRoZSB0YWIgaXMgaW4gdGhlIGJhY2tncm91bmQuIElmXG4vLyB3ZSdyZSBiYWNrZ3JvdW5kZWQgd2UgcHJlZmVyIGZvciB0aGF0IHdvcmsgdG8gaGFwcGVuIHNvIHRoYXQgdGhlIHBhZ2Vcbi8vIGNvbnRpbnVlcyB0byBsb2FkIGluIHRoZSBiYWNrZ3JvdW5kLiBTbyB3ZSBhbHNvIHNjaGVkdWxlIGEgJ3NldFRpbWVvdXQnIGFzXG4vLyBhIGZhbGxiYWNrLlxuLy8gVE9ETzogTmVlZCBhIGJldHRlciBoZXVyaXN0aWMgZm9yIGJhY2tncm91bmRlZCB3b3JrLlxudmFyIEFOSU1BVElPTl9GUkFNRV9USU1FT1VUID0gMTAwO1xudmFyIHJBRklEO1xudmFyIHJBRlRpbWVvdXRJRDtcbnZhciByZXF1ZXN0QW5pbWF0aW9uRnJhbWVXaXRoVGltZW91dCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAvLyBzY2hlZHVsZSByQUYgYW5kIGFsc28gYSBzZXRUaW1lb3V0XG4gIHJBRklEID0gbG9jYWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKHRpbWVzdGFtcCkge1xuICAgIC8vIGNhbmNlbCB0aGUgc2V0VGltZW91dFxuICAgIGxvY2FsQ2xlYXJUaW1lb3V0KHJBRlRpbWVvdXRJRCk7XG4gICAgY2FsbGJhY2sodGltZXN0YW1wKTtcbiAgfSk7XG4gIHJBRlRpbWVvdXRJRCA9IGxvY2FsU2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgLy8gY2FuY2VsIHRoZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbiAgICBsb2NhbENhbmNlbEFuaW1hdGlvbkZyYW1lKHJBRklEKTtcbiAgICBjYWxsYmFjayhleHBvcnRzLnVuc3RhYmxlX25vdygpKTtcbiAgfSwgQU5JTUFUSU9OX0ZSQU1FX1RJTUVPVVQpO1xufTtcblxuaWYgKGhhc05hdGl2ZVBlcmZvcm1hbmNlTm93KSB7XG4gIHZhciBQZXJmb3JtYW5jZSA9IHBlcmZvcm1hbmNlO1xuICBleHBvcnRzLnVuc3RhYmxlX25vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUGVyZm9ybWFuY2Uubm93KCk7XG4gIH07XG59IGVsc2Uge1xuICBleHBvcnRzLnVuc3RhYmxlX25vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbG9jYWxEYXRlLm5vdygpO1xuICB9O1xufVxuXG52YXIgcmVxdWVzdEhvc3RDYWxsYmFjaztcbnZhciBjYW5jZWxIb3N0Q2FsbGJhY2s7XG52YXIgc2hvdWxkWWllbGRUb0hvc3Q7XG5cbnZhciBnbG9iYWxWYWx1ZSA9IG51bGw7XG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgZ2xvYmFsVmFsdWUgPSB3aW5kb3c7XG59IGVsc2UgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG4gIGdsb2JhbFZhbHVlID0gZ2xvYmFsO1xufVxuXG5pZiAoZ2xvYmFsVmFsdWUgJiYgZ2xvYmFsVmFsdWUuX3NjaGVkTW9jaykge1xuICAvLyBEeW5hbWljIGluamVjdGlvbiwgb25seSBmb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAgdmFyIGdsb2JhbEltcGwgPSBnbG9iYWxWYWx1ZS5fc2NoZWRNb2NrO1xuICByZXF1ZXN0SG9zdENhbGxiYWNrID0gZ2xvYmFsSW1wbFswXTtcbiAgY2FuY2VsSG9zdENhbGxiYWNrID0gZ2xvYmFsSW1wbFsxXTtcbiAgc2hvdWxkWWllbGRUb0hvc3QgPSBnbG9iYWxJbXBsWzJdO1xuICBleHBvcnRzLnVuc3RhYmxlX25vdyA9IGdsb2JhbEltcGxbM107XG59IGVsc2UgaWYgKFxuLy8gSWYgU2NoZWR1bGVyIHJ1bnMgaW4gYSBub24tRE9NIGVudmlyb25tZW50LCBpdCBmYWxscyBiYWNrIHRvIGEgbmFpdmVcbi8vIGltcGxlbWVudGF0aW9uIHVzaW5nIHNldFRpbWVvdXQuXG50eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fFxuLy8gQ2hlY2sgaWYgTWVzc2FnZUNoYW5uZWwgaXMgc3VwcG9ydGVkLCB0b28uXG50eXBlb2YgTWVzc2FnZUNoYW5uZWwgIT09ICdmdW5jdGlvbicpIHtcbiAgLy8gSWYgdGhpcyBhY2NpZGVudGFsbHkgZ2V0cyBpbXBvcnRlZCBpbiBhIG5vbi1icm93c2VyIGVudmlyb25tZW50LCBlLmcuIEphdmFTY3JpcHRDb3JlLFxuICAvLyBmYWxsYmFjayB0byBhIG5haXZlIGltcGxlbWVudGF0aW9uLlxuICB2YXIgX2NhbGxiYWNrID0gbnVsbDtcbiAgdmFyIF9mbHVzaENhbGxiYWNrID0gZnVuY3Rpb24gKGRpZFRpbWVvdXQpIHtcbiAgICBpZiAoX2NhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB0cnkge1xuICAgICAgICBfY2FsbGJhY2soZGlkVGltZW91dCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBfY2FsbGJhY2sgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgcmVxdWVzdEhvc3RDYWxsYmFjayA9IGZ1bmN0aW9uIChjYiwgbXMpIHtcbiAgICBpZiAoX2NhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAvLyBQcm90ZWN0IGFnYWluc3QgcmUtZW50cmFuY3kuXG4gICAgICBzZXRUaW1lb3V0KHJlcXVlc3RIb3N0Q2FsbGJhY2ssIDAsIGNiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgX2NhbGxiYWNrID0gY2I7XG4gICAgICBzZXRUaW1lb3V0KF9mbHVzaENhbGxiYWNrLCAwLCBmYWxzZSk7XG4gICAgfVxuICB9O1xuICBjYW5jZWxIb3N0Q2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgX2NhbGxiYWNrID0gbnVsbDtcbiAgfTtcbiAgc2hvdWxkWWllbGRUb0hvc3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xufSBlbHNlIHtcbiAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIFRPRE86IFJlbW92ZSBmYi5tZSBsaW5rXG4gICAgaWYgKHR5cGVvZiBsb2NhbFJlcXVlc3RBbmltYXRpb25GcmFtZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc29sZS5lcnJvcihcIlRoaXMgYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLiBcIiArICdNYWtlIHN1cmUgdGhhdCB5b3UgbG9hZCBhICcgKyAncG9seWZpbGwgaW4gb2xkZXIgYnJvd3NlcnMuIGh0dHBzOi8vZmIubWUvcmVhY3QtcG9seWZpbGxzJyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgbG9jYWxDYW5jZWxBbmltYXRpb25GcmFtZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc29sZS5lcnJvcihcIlRoaXMgYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgY2FuY2VsQW5pbWF0aW9uRnJhbWUuIFwiICsgJ01ha2Ugc3VyZSB0aGF0IHlvdSBsb2FkIGEgJyArICdwb2x5ZmlsbCBpbiBvbGRlciBicm93c2Vycy4gaHR0cHM6Ly9mYi5tZS9yZWFjdC1wb2x5ZmlsbHMnKTtcbiAgICB9XG4gIH1cblxuICB2YXIgc2NoZWR1bGVkSG9zdENhbGxiYWNrID0gbnVsbDtcbiAgdmFyIGlzTWVzc2FnZUV2ZW50U2NoZWR1bGVkID0gZmFsc2U7XG4gIHZhciB0aW1lb3V0VGltZSA9IC0xO1xuXG4gIHZhciBpc0FuaW1hdGlvbkZyYW1lU2NoZWR1bGVkID0gZmFsc2U7XG5cbiAgdmFyIGlzRmx1c2hpbmdIb3N0Q2FsbGJhY2sgPSBmYWxzZTtcblxuICB2YXIgZnJhbWVEZWFkbGluZSA9IDA7XG4gIC8vIFdlIHN0YXJ0IG91dCBhc3N1bWluZyB0aGF0IHdlIHJ1biBhdCAzMGZwcyBidXQgdGhlbiB0aGUgaGV1cmlzdGljIHRyYWNraW5nXG4gIC8vIHdpbGwgYWRqdXN0IHRoaXMgdmFsdWUgdG8gYSBmYXN0ZXIgZnBzIGlmIHdlIGdldCBtb3JlIGZyZXF1ZW50IGFuaW1hdGlvblxuICAvLyBmcmFtZXMuXG4gIHZhciBwcmV2aW91c0ZyYW1lVGltZSA9IDMzO1xuICB2YXIgYWN0aXZlRnJhbWVUaW1lID0gMzM7XG5cbiAgc2hvdWxkWWllbGRUb0hvc3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZyYW1lRGVhZGxpbmUgPD0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcbiAgfTtcblxuICAvLyBXZSB1c2UgdGhlIHBvc3RNZXNzYWdlIHRyaWNrIHRvIGRlZmVyIGlkbGUgd29yayB1bnRpbCBhZnRlciB0aGUgcmVwYWludC5cbiAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgdmFyIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlzTWVzc2FnZUV2ZW50U2NoZWR1bGVkID0gZmFsc2U7XG5cbiAgICB2YXIgcHJldlNjaGVkdWxlZENhbGxiYWNrID0gc2NoZWR1bGVkSG9zdENhbGxiYWNrO1xuICAgIHZhciBwcmV2VGltZW91dFRpbWUgPSB0aW1lb3V0VGltZTtcbiAgICBzY2hlZHVsZWRIb3N0Q2FsbGJhY2sgPSBudWxsO1xuICAgIHRpbWVvdXRUaW1lID0gLTE7XG5cbiAgICB2YXIgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpO1xuXG4gICAgdmFyIGRpZFRpbWVvdXQgPSBmYWxzZTtcbiAgICBpZiAoZnJhbWVEZWFkbGluZSAtIGN1cnJlbnRUaW1lIDw9IDApIHtcbiAgICAgIC8vIFRoZXJlJ3Mgbm8gdGltZSBsZWZ0IGluIHRoaXMgaWRsZSBwZXJpb2QuIENoZWNrIGlmIHRoZSBjYWxsYmFjayBoYXNcbiAgICAgIC8vIGEgdGltZW91dCBhbmQgd2hldGhlciBpdCdzIGJlZW4gZXhjZWVkZWQuXG4gICAgICBpZiAocHJldlRpbWVvdXRUaW1lICE9PSAtMSAmJiBwcmV2VGltZW91dFRpbWUgPD0gY3VycmVudFRpbWUpIHtcbiAgICAgICAgLy8gRXhjZWVkZWQgdGhlIHRpbWVvdXQuIEludm9rZSB0aGUgY2FsbGJhY2sgZXZlbiB0aG91Z2ggdGhlcmUncyBub1xuICAgICAgICAvLyB0aW1lIGxlZnQuXG4gICAgICAgIGRpZFRpbWVvdXQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTm8gdGltZW91dC5cbiAgICAgICAgaWYgKCFpc0FuaW1hdGlvbkZyYW1lU2NoZWR1bGVkKSB7XG4gICAgICAgICAgLy8gU2NoZWR1bGUgYW5vdGhlciBhbmltYXRpb24gY2FsbGJhY2sgc28gd2UgcmV0cnkgbGF0ZXIuXG4gICAgICAgICAgaXNBbmltYXRpb25GcmFtZVNjaGVkdWxlZCA9IHRydWU7XG4gICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lV2l0aFRpbWVvdXQoYW5pbWF0aW9uVGljayk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRXhpdCB3aXRob3V0IGludm9raW5nIHRoZSBjYWxsYmFjay5cbiAgICAgICAgc2NoZWR1bGVkSG9zdENhbGxiYWNrID0gcHJldlNjaGVkdWxlZENhbGxiYWNrO1xuICAgICAgICB0aW1lb3V0VGltZSA9IHByZXZUaW1lb3V0VGltZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcmV2U2NoZWR1bGVkQ2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIGlzRmx1c2hpbmdIb3N0Q2FsbGJhY2sgPSB0cnVlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcHJldlNjaGVkdWxlZENhbGxiYWNrKGRpZFRpbWVvdXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaXNGbHVzaGluZ0hvc3RDYWxsYmFjayA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB2YXIgYW5pbWF0aW9uVGljayA9IGZ1bmN0aW9uIChyYWZUaW1lKSB7XG4gICAgaWYgKHNjaGVkdWxlZEhvc3RDYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgLy8gRWFnZXJseSBzY2hlZHVsZSB0aGUgbmV4dCBhbmltYXRpb24gY2FsbGJhY2sgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGVcbiAgICAgIC8vIGZyYW1lLiBJZiB0aGUgc2NoZWR1bGVyIHF1ZXVlIGlzIG5vdCBlbXB0eSBhdCB0aGUgZW5kIG9mIHRoZSBmcmFtZSwgaXRcbiAgICAgIC8vIHdpbGwgY29udGludWUgZmx1c2hpbmcgaW5zaWRlIHRoYXQgY2FsbGJhY2suIElmIHRoZSBxdWV1ZSAqaXMqIGVtcHR5LFxuICAgICAgLy8gdGhlbiBpdCB3aWxsIGV4aXQgaW1tZWRpYXRlbHkuIFBvc3RpbmcgdGhlIGNhbGxiYWNrIGF0IHRoZSBzdGFydCBvZiB0aGVcbiAgICAgIC8vIGZyYW1lIGVuc3VyZXMgaXQncyBmaXJlZCB3aXRoaW4gdGhlIGVhcmxpZXN0IHBvc3NpYmxlIGZyYW1lLiBJZiB3ZVxuICAgICAgLy8gd2FpdGVkIHVudGlsIHRoZSBlbmQgb2YgdGhlIGZyYW1lIHRvIHBvc3QgdGhlIGNhbGxiYWNrLCB3ZSByaXNrIHRoZVxuICAgICAgLy8gYnJvd3NlciBza2lwcGluZyBhIGZyYW1lIGFuZCBub3QgZmlyaW5nIHRoZSBjYWxsYmFjayB1bnRpbCB0aGUgZnJhbWVcbiAgICAgIC8vIGFmdGVyIHRoYXQuXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWVXaXRoVGltZW91dChhbmltYXRpb25UaWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gcGVuZGluZyB3b3JrLiBFeGl0LlxuICAgICAgaXNBbmltYXRpb25GcmFtZVNjaGVkdWxlZCA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBuZXh0RnJhbWVUaW1lID0gcmFmVGltZSAtIGZyYW1lRGVhZGxpbmUgKyBhY3RpdmVGcmFtZVRpbWU7XG4gICAgaWYgKG5leHRGcmFtZVRpbWUgPCBhY3RpdmVGcmFtZVRpbWUgJiYgcHJldmlvdXNGcmFtZVRpbWUgPCBhY3RpdmVGcmFtZVRpbWUpIHtcbiAgICAgIGlmIChuZXh0RnJhbWVUaW1lIDwgOCkge1xuICAgICAgICAvLyBEZWZlbnNpdmUgY29kaW5nLiBXZSBkb24ndCBzdXBwb3J0IGhpZ2hlciBmcmFtZSByYXRlcyB0aGFuIDEyMGh6LlxuICAgICAgICAvLyBJZiB0aGUgY2FsY3VsYXRlZCBmcmFtZSB0aW1lIGdldHMgbG93ZXIgdGhhbiA4LCBpdCBpcyBwcm9iYWJseSBhIGJ1Zy5cbiAgICAgICAgbmV4dEZyYW1lVGltZSA9IDg7XG4gICAgICB9XG4gICAgICAvLyBJZiBvbmUgZnJhbWUgZ29lcyBsb25nLCB0aGVuIHRoZSBuZXh0IG9uZSBjYW4gYmUgc2hvcnQgdG8gY2F0Y2ggdXAuXG4gICAgICAvLyBJZiB0d28gZnJhbWVzIGFyZSBzaG9ydCBpbiBhIHJvdywgdGhlbiB0aGF0J3MgYW4gaW5kaWNhdGlvbiB0aGF0IHdlXG4gICAgICAvLyBhY3R1YWxseSBoYXZlIGEgaGlnaGVyIGZyYW1lIHJhdGUgdGhhbiB3aGF0IHdlJ3JlIGN1cnJlbnRseSBvcHRpbWl6aW5nLlxuICAgICAgLy8gV2UgYWRqdXN0IG91ciBoZXVyaXN0aWMgZHluYW1pY2FsbHkgYWNjb3JkaW5nbHkuIEZvciBleGFtcGxlLCBpZiB3ZSdyZVxuICAgICAgLy8gcnVubmluZyBvbiAxMjBoeiBkaXNwbGF5IG9yIDkwaHogVlIgZGlzcGxheS5cbiAgICAgIC8vIFRha2UgdGhlIG1heCBvZiB0aGUgdHdvIGluIGNhc2Ugb25lIG9mIHRoZW0gd2FzIGFuIGFub21hbHkgZHVlIHRvXG4gICAgICAvLyBtaXNzZWQgZnJhbWUgZGVhZGxpbmVzLlxuICAgICAgYWN0aXZlRnJhbWVUaW1lID0gbmV4dEZyYW1lVGltZSA8IHByZXZpb3VzRnJhbWVUaW1lID8gcHJldmlvdXNGcmFtZVRpbWUgOiBuZXh0RnJhbWVUaW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcmV2aW91c0ZyYW1lVGltZSA9IG5leHRGcmFtZVRpbWU7XG4gICAgfVxuICAgIGZyYW1lRGVhZGxpbmUgPSByYWZUaW1lICsgYWN0aXZlRnJhbWVUaW1lO1xuICAgIGlmICghaXNNZXNzYWdlRXZlbnRTY2hlZHVsZWQpIHtcbiAgICAgIGlzTWVzc2FnZUV2ZW50U2NoZWR1bGVkID0gdHJ1ZTtcbiAgICAgIHBvcnQucG9zdE1lc3NhZ2UodW5kZWZpbmVkKTtcbiAgICB9XG4gIH07XG5cbiAgcmVxdWVzdEhvc3RDYWxsYmFjayA9IGZ1bmN0aW9uIChjYWxsYmFjaywgYWJzb2x1dGVUaW1lb3V0KSB7XG4gICAgc2NoZWR1bGVkSG9zdENhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgdGltZW91dFRpbWUgPSBhYnNvbHV0ZVRpbWVvdXQ7XG4gICAgaWYgKGlzRmx1c2hpbmdIb3N0Q2FsbGJhY2sgfHwgYWJzb2x1dGVUaW1lb3V0IDwgMCkge1xuICAgICAgLy8gRG9uJ3Qgd2FpdCBmb3IgdGhlIG5leHQgZnJhbWUuIENvbnRpbnVlIHdvcmtpbmcgQVNBUCwgaW4gYSBuZXcgZXZlbnQuXG4gICAgICBwb3J0LnBvc3RNZXNzYWdlKHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIGlmICghaXNBbmltYXRpb25GcmFtZVNjaGVkdWxlZCkge1xuICAgICAgLy8gSWYgckFGIGRpZG4ndCBhbHJlYWR5IHNjaGVkdWxlIG9uZSwgd2UgbmVlZCB0byBzY2hlZHVsZSBhIGZyYW1lLlxuICAgICAgLy8gVE9ETzogSWYgdGhpcyByQUYgZG9lc24ndCBtYXRlcmlhbGl6ZSBiZWNhdXNlIHRoZSBicm93c2VyIHRocm90dGxlcywgd2VcbiAgICAgIC8vIG1pZ2h0IHdhbnQgdG8gc3RpbGwgaGF2ZSBzZXRUaW1lb3V0IHRyaWdnZXIgcklDIGFzIGEgYmFja3VwIHRvIGVuc3VyZVxuICAgICAgLy8gdGhhdCB3ZSBrZWVwIHBlcmZvcm1pbmcgd29yay5cbiAgICAgIGlzQW5pbWF0aW9uRnJhbWVTY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lV2l0aFRpbWVvdXQoYW5pbWF0aW9uVGljayk7XG4gICAgfVxuICB9O1xuXG4gIGNhbmNlbEhvc3RDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICBzY2hlZHVsZWRIb3N0Q2FsbGJhY2sgPSBudWxsO1xuICAgIGlzTWVzc2FnZUV2ZW50U2NoZWR1bGVkID0gZmFsc2U7XG4gICAgdGltZW91dFRpbWUgPSAtMTtcbiAgfTtcbn1cblxuZXhwb3J0cy51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eSA9IEltbWVkaWF0ZVByaW9yaXR5O1xuZXhwb3J0cy51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eSA9IFVzZXJCbG9ja2luZ1ByaW9yaXR5O1xuZXhwb3J0cy51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSA9IE5vcm1hbFByaW9yaXR5O1xuZXhwb3J0cy51bnN0YWJsZV9JZGxlUHJpb3JpdHkgPSBJZGxlUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX0xvd1ByaW9yaXR5ID0gTG93UHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eSA9IHVuc3RhYmxlX3J1bldpdGhQcmlvcml0eTtcbmV4cG9ydHMudW5zdGFibGVfbmV4dCA9IHVuc3RhYmxlX25leHQ7XG5leHBvcnRzLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2sgPSB1bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrO1xuZXhwb3J0cy51bnN0YWJsZV9jYW5jZWxDYWxsYmFjayA9IHVuc3RhYmxlX2NhbmNlbENhbGxiYWNrO1xuZXhwb3J0cy51bnN0YWJsZV93cmFwQ2FsbGJhY2sgPSB1bnN0YWJsZV93cmFwQ2FsbGJhY2s7XG5leHBvcnRzLnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsID0gdW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWw7XG5leHBvcnRzLnVuc3RhYmxlX3Nob3VsZFlpZWxkID0gdW5zdGFibGVfc2hvdWxkWWllbGQ7XG5leHBvcnRzLnVuc3RhYmxlX2NvbnRpbnVlRXhlY3V0aW9uID0gdW5zdGFibGVfY29udGludWVFeGVjdXRpb247XG5leHBvcnRzLnVuc3RhYmxlX3BhdXNlRXhlY3V0aW9uID0gdW5zdGFibGVfcGF1c2VFeGVjdXRpb247XG5leHBvcnRzLnVuc3RhYmxlX2dldEZpcnN0Q2FsbGJhY2tOb2RlID0gdW5zdGFibGVfZ2V0Rmlyc3RDYWxsYmFja05vZGU7XG4gIH0pKCk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/scheduler/cjs/scheduler.development.js\n"); - -/***/ }), - -/***/ "./node_modules/scheduler/index.js": -/*!*****************************************!*\ - !*** ./node_modules/scheduler/index.js ***! - \*****************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/scheduler.development.js */ \"./node_modules/scheduler/cjs/scheduler.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9pbmRleC5qcz80MDI5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLElBQUksS0FBcUMsRUFBRSxFQUUxQztBQUNELG1CQUFtQixtQkFBTyxDQUFDLDZGQUFnQztBQUMzRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3NjaGVkdWxlci5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/scheduler/index.js\n"); - -/***/ }), - -/***/ "./node_modules/scheduler/tracing.js": -/*!*******************************************!*\ - !*** ./node_modules/scheduler/tracing.js ***! - \*******************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/scheduler-tracing.development.js */ \"./node_modules/scheduler/cjs/scheduler-tracing.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci90cmFjaW5nLmpzPzZmMDciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsSUFBSSxLQUFxQyxFQUFFLEVBRTFDO0FBQ0QsbUJBQW1CLG1CQUFPLENBQUMsNkdBQXdDO0FBQ25FIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci90cmFjaW5nLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3NjaGVkdWxlci10cmFjaW5nLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3NjaGVkdWxlci10cmFjaW5nLmRldmVsb3BtZW50LmpzJyk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/scheduler/tracing.js\n"); - -/***/ }), - -/***/ "./node_modules/shallow-equal/arrays/index.js": -/*!****************************************************!*\ - !*** ./node_modules/shallow-equal/arrays/index.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nfunction shallowEqualArrays(arrA, arrB) {\n if (arrA === arrB) {\n return true;\n }\n\n if (!arrA || !arrB) {\n return false;\n }\n\n var len = arrA.length;\n\n if (arrB.length !== len) {\n return false;\n }\n\n for (var i = 0; i < len; i++) {\n if (arrA[i] !== arrB[i]) {\n return false;\n }\n }\n\n return true;\n}\n\nmodule.exports = shallowEqualArrays;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL3NoYWxsb3ctZXF1YWwvYXJyYXlzL2luZGV4LmpzP2MyYjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3NoYWxsb3ctZXF1YWwvYXJyYXlzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBzaGFsbG93RXF1YWxBcnJheXMoYXJyQSwgYXJyQikge1xuICBpZiAoYXJyQSA9PT0gYXJyQikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKCFhcnJBIHx8ICFhcnJCKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGxlbiA9IGFyckEubGVuZ3RoO1xuXG4gIGlmIChhcnJCLmxlbmd0aCAhPT0gbGVuKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGlmIChhcnJBW2ldICE9PSBhcnJCW2ldKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hhbGxvd0VxdWFsQXJyYXlzO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/shallow-equal/arrays/index.js\n"); - -/***/ }), - -/***/ "./pages/index.js": -/*!************************!*\ - !*** ./pages/index.js ***! - \************************/ -/*! exports provided: __N_SSG, default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(module) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__N_SSG\", function() { return __N_SSG; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Home; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _vandebron_windmolen__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @vandebron/windmolen */ \"./node_modules/@vandebron/windmolen/dist/index.js\");\n/* harmony import */ var _vandebron_windmolen__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"./node_modules/next/link.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/head */ \"./node_modules/next/head.js\");\n/* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(next_head__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _components_ProjectCard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../components/ProjectCard */ \"./components/ProjectCard.jsx\");\nvar _jsxFileName = \"/Users/john.fisher/workspace/vandebron/tech-blog/pages/index.js\";\n\nvar __jsx = react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement;\n\n\n\n\nvar __N_SSG = true;\nfunction Home(_ref) {\n var _this = this;\n\n var posts = _ref.posts;\n var firstPost = posts[0].meta;\n var otherPosts = posts.slice(1);\n return __jsx(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, __jsx(next_head__WEBPACK_IMPORTED_MODULE_3___default.a, {\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 23,\n columnNumber: 7\n }\n }, __jsx(\"title\", {\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 24,\n columnNumber: 9\n }\n }, \"vandebron.tech\"), __jsx(\"meta\", {\n name: \"Description\",\n content: \"Vandebron Technology. Leading the renewable energy transition with innovative solutions.\",\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 25,\n columnNumber: 9\n }\n }), __jsx(\"meta\", {\n property: \"og:title\",\n content: \"vandebron.tech\",\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 29,\n columnNumber: 9\n }\n }), __jsx(\"meta\", {\n property: \"og:description\",\n content: \"Vandebron Technology. Leading the renewable energy transition with innovative solutions.\",\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 30,\n columnNumber: 9\n }\n }), __jsx(\"meta\", {\n property: \"og:image\",\n content: \"https://www.vandebron.tech/images/technology.png\",\n key: \"ogimage\",\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 34,\n columnNumber: 9\n }\n })), __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_1__[\"Container\"], {\n style: {\n marginBottom: 60\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 41,\n columnNumber: 7\n }\n }, __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_1__[\"Row\"], {\n alignItems: \"center\",\n style: {\n marginBottom: 60\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 42,\n columnNumber: 9\n }\n }, __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_1__[\"Col\"], {\n col: 12,\n sm: 12,\n md: 6,\n lg: 6,\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 43,\n columnNumber: 11\n }\n }, __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_1__[\"H4\"], {\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 44,\n columnNumber: 13\n }\n }, \"Vandebron Technology\"), __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_1__[\"Paragraph\"], {\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 45,\n columnNumber: 13\n }\n }, \"Leading the renewable energy transition with innovative solutions. This blog demonstrates some highlights of tech activities that we would like to share with you!\")), __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_1__[\"Col\"], {\n col: 12,\n sm: 12,\n md: 6,\n lg: 6,\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 50,\n columnNumber: 11\n }\n }, __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_1__[\"BoxShadow\"], {\n style: {\n width: \"100% \"\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 51,\n columnNumber: 13\n }\n }, __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_1__[\"Image\"], {\n aspectRatio: \"2:1\",\n src: \"images/technology-black-2.png\",\n alt: \"technology at Vandebron\",\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 52,\n columnNumber: 15\n }\n })))), __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_1__[\"Row\"], {\n justifyContent: \"between\",\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 61,\n columnNumber: 9\n }\n }, __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_1__[\"Col\"], {\n col: 12,\n sm: 12,\n md: 7,\n lg: 7,\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 62,\n columnNumber: 11\n }\n }, __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_1__[\"Paragraph\"], {\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 63,\n columnNumber: 13\n }\n }, __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_1__[\"H4\"], {\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 64,\n columnNumber: 15\n }\n }, \"Latest posts\")), __jsx(next_link__WEBPACK_IMPORTED_MODULE_2___default.a, {\n href: firstPost.slug,\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 66,\n columnNumber: 13\n }\n }, __jsx(\"div\", {\n style: {\n cursor: \"pointer\"\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 67,\n columnNumber: 15\n }\n }, __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_1__[\"BlogCard\"], {\n key: firstPost.slug,\n title: firstPost.title,\n image: firstPost.coverImage,\n imageProps: {\n aspectRatio: \"2:1\",\n alt: firstPost.title\n },\n description: firstPost.description,\n date: new Date(firstPost.date),\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 68,\n columnNumber: 17\n }\n }))), __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_1__[\"Row\"], {\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 82,\n columnNumber: 13\n }\n }, otherPosts.map(function (post) {\n var _post$meta = post.meta,\n title = _post$meta.title,\n description = _post$meta.description,\n date = _post$meta.date,\n coverImage = _post$meta.coverImage,\n slug = _post$meta.slug;\n return __jsx(next_link__WEBPACK_IMPORTED_MODULE_2___default.a, {\n key: slug,\n href: slug,\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 93,\n columnNumber: 19\n }\n }, __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_1__[\"Col\"], {\n col: 12,\n sm: 12,\n md: 6,\n lg: 6,\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 94,\n columnNumber: 21\n }\n }, __jsx(\"div\", {\n style: {\n cursor: \"pointer\"\n },\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 95,\n columnNumber: 23\n }\n }, __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_1__[\"BlogCard\"], {\n key: slug,\n image: coverImage,\n title: title,\n description: description,\n date: new Date(date),\n imageProps: {\n alt: title\n },\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 96,\n columnNumber: 25\n }\n }))));\n }))), __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_1__[\"Col\"], {\n colr: 12,\n sm: 12,\n md: 4,\n lg: 4,\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 112,\n columnNumber: 11\n }\n }, __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_1__[\"H4\"], {\n style: {\n marginBottom: 20\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 113,\n columnNumber: 13\n }\n }, \"Links\"), __jsx(_components_ProjectCard__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"Vandebron on Github\",\n href: \"https://github.com/vandebron\",\n icon: \"github\",\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 115,\n columnNumber: 13\n }\n }), __jsx(_components_ProjectCard__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"Windmolen styleguide\",\n href: \"https://windmolen.netlify.app/?path=/docs/docs-introduction--page\",\n icon: \"wind-small\",\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 120,\n columnNumber: 13\n }\n }), __jsx(_components_ProjectCard__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"Work with us\",\n href: \"https://werkenbij.vandebron.nl/l/en/\",\n icon: \"friend\",\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 125,\n columnNumber: 13\n }\n })))));\n}\n_c = Home;\n\nvar _c;\n\n$RefreshReg$(_c, \"Home\");\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node_modules/next/dist/compiled/webpack/harmony-module.js */ \"./node_modules/next/dist/compiled/webpack/harmony-module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vcGFnZXMvaW5kZXguanM/NDRkOCJdLCJuYW1lcyI6WyJIb21lIiwicG9zdHMiLCJmaXJzdFBvc3QiLCJtZXRhIiwib3RoZXJQb3N0cyIsInNsaWNlIiwibWFyZ2luQm90dG9tIiwid2lkdGgiLCJzbHVnIiwiY3Vyc29yIiwidGl0bGUiLCJjb3ZlckltYWdlIiwiYXNwZWN0UmF0aW8iLCJhbHQiLCJkZXNjcmlwdGlvbiIsIkRhdGUiLCJkYXRlIiwibWFwIiwicG9zdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFXQTtBQUNBO0FBRUE7O0FBRWUsU0FBU0EsSUFBVCxPQUF5QjtBQUFBOztBQUFBLE1BQVRDLEtBQVMsUUFBVEEsS0FBUztBQUN0QyxNQUFNQyxTQUFTLEdBQUdELEtBQUssQ0FBQyxDQUFELENBQUwsQ0FBU0UsSUFBM0I7QUFDQSxNQUFNQyxVQUFVLEdBQUdILEtBQUssQ0FBQ0ksS0FBTixDQUFZLENBQVosQ0FBbkI7QUFFQSxTQUNFLG1FQUNFLE1BQUMsZ0RBQUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxLQUNFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsc0JBREYsRUFFRTtBQUNFLFFBQUksRUFBQyxhQURQO0FBRUUsV0FBTyxFQUFDLDBGQUZWO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFGRixFQU1FO0FBQU0sWUFBUSxFQUFDLFVBQWY7QUFBMEIsV0FBTyxFQUFDLGdCQUFsQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTkYsRUFPRTtBQUNFLFlBQVEsRUFBQyxnQkFEWDtBQUVFLFdBQU8sRUFBQywwRkFGVjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBUEYsRUFXRTtBQUNFLFlBQVEsRUFBQyxVQURYO0FBRUUsV0FBTyxvREFGVDtBQUdFLE9BQUcsRUFBQyxTQUhOO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFYRixDQURGLEVBbUJFLE1BQUMsOERBQUQ7QUFBVyxTQUFLLEVBQUU7QUFBRUMsa0JBQVksRUFBRTtBQUFoQixLQUFsQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBQ0UsTUFBQyx3REFBRDtBQUFLLGNBQVUsRUFBQyxRQUFoQjtBQUF5QixTQUFLLEVBQUU7QUFBRUEsa0JBQVksRUFBRTtBQUFoQixLQUFoQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBQ0UsTUFBQyx3REFBRDtBQUFLLE9BQUcsRUFBRSxFQUFWO0FBQWMsTUFBRSxFQUFFLEVBQWxCO0FBQXNCLE1BQUUsRUFBRSxDQUExQjtBQUE2QixNQUFFLEVBQUUsQ0FBakM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxLQUNFLE1BQUMsdURBQUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSw0QkFERixFQUVFLE1BQUMsOERBQUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSwwS0FGRixDQURGLEVBUUUsTUFBQyx3REFBRDtBQUFLLE9BQUcsRUFBRSxFQUFWO0FBQWMsTUFBRSxFQUFFLEVBQWxCO0FBQXNCLE1BQUUsRUFBRSxDQUExQjtBQUE2QixNQUFFLEVBQUUsQ0FBakM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxLQUNFLE1BQUMsOERBQUQ7QUFBVyxTQUFLLEVBQUU7QUFBRUMsV0FBSyxFQUFFO0FBQVQsS0FBbEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxLQUNFLE1BQUMsMERBQUQ7QUFDRSxlQUFXLEVBQUMsS0FEZDtBQUVFLE9BQUcsRUFBQywrQkFGTjtBQUdFLE9BQUcsRUFBQyx5QkFITjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBREYsQ0FERixDQVJGLENBREYsRUFvQkUsTUFBQyx3REFBRDtBQUFLLGtCQUFjLEVBQUMsU0FBcEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxLQUNFLE1BQUMsd0RBQUQ7QUFBSyxPQUFHLEVBQUUsRUFBVjtBQUFjLE1BQUUsRUFBRSxFQUFsQjtBQUFzQixNQUFFLEVBQUUsQ0FBMUI7QUFBNkIsTUFBRSxFQUFFLENBQWpDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsS0FDRSxNQUFDLDhEQUFEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsS0FDRSxNQUFDLHVEQUFEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsb0JBREYsQ0FERixFQUlFLE1BQUMsZ0RBQUQ7QUFBWSxRQUFJLEVBQUVMLFNBQVMsQ0FBQ00sSUFBNUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxLQUNFO0FBQUssU0FBSyxFQUFFO0FBQUVDLFlBQU0sRUFBRTtBQUFWLEtBQVo7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxLQUNFLE1BQUMsNkRBQUQ7QUFDRSxPQUFHLEVBQUVQLFNBQVMsQ0FBQ00sSUFEakI7QUFFRSxTQUFLLEVBQUVOLFNBQVMsQ0FBQ1EsS0FGbkI7QUFHRSxTQUFLLEVBQUVSLFNBQVMsQ0FBQ1MsVUFIbkI7QUFJRSxjQUFVLEVBQUU7QUFDVkMsaUJBQVcsRUFBRSxLQURIO0FBRVZDLFNBQUcsRUFBRVgsU0FBUyxDQUFDUTtBQUZMLEtBSmQ7QUFRRSxlQUFXLEVBQUVSLFNBQVMsQ0FBQ1ksV0FSekI7QUFTRSxRQUFJLEVBQUUsSUFBSUMsSUFBSixDQUFTYixTQUFTLENBQUNjLElBQW5CLENBVFI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQURGLENBREYsQ0FKRixFQW9CRSxNQUFDLHdEQUFEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsS0FDR1osVUFBVSxDQUFDYSxHQUFYLENBQWUsVUFBQ0MsSUFBRCxFQUFVO0FBQUEscUJBT3BCQSxJQUFJLENBQUNmLElBUGU7QUFBQSxRQUV0Qk8sS0FGc0IsY0FFdEJBLEtBRnNCO0FBQUEsUUFHdEJJLFdBSHNCLGNBR3RCQSxXQUhzQjtBQUFBLFFBSXRCRSxJQUpzQixjQUl0QkEsSUFKc0I7QUFBQSxRQUt0QkwsVUFMc0IsY0FLdEJBLFVBTHNCO0FBQUEsUUFNdEJILElBTnNCLGNBTXRCQSxJQU5zQjtBQVN4QixXQUNFLE1BQUMsZ0RBQUQ7QUFBWSxTQUFHLEVBQUVBLElBQWpCO0FBQXVCLFVBQUksRUFBRUEsSUFBN0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxPQUNFLE1BQUMsd0RBQUQ7QUFBSyxTQUFHLEVBQUUsRUFBVjtBQUFjLFFBQUUsRUFBRSxFQUFsQjtBQUFzQixRQUFFLEVBQUUsQ0FBMUI7QUFBNkIsUUFBRSxFQUFFLENBQWpDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsT0FDRTtBQUFLLFdBQUssRUFBRTtBQUFFQyxjQUFNLEVBQUU7QUFBVixPQUFaO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsT0FDRSxNQUFDLDZEQUFEO0FBQ0UsU0FBRyxFQUFFRCxJQURQO0FBRUUsV0FBSyxFQUFFRyxVQUZUO0FBR0UsV0FBSyxFQUFFRCxLQUhUO0FBSUUsaUJBQVcsRUFBRUksV0FKZjtBQUtFLFVBQUksRUFBRSxJQUFJQyxJQUFKLENBQVNDLElBQVQsQ0FMUjtBQU1FLGdCQUFVLEVBQUU7QUFBRUgsV0FBRyxFQUFFSDtBQUFQLE9BTmQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQURGLENBREYsQ0FERixDQURGO0FBZ0JELEdBekJBLENBREgsQ0FwQkYsQ0FERixFQW1ERSxNQUFDLHdEQUFEO0FBQUssUUFBSSxFQUFFLEVBQVg7QUFBZSxNQUFFLEVBQUUsRUFBbkI7QUFBdUIsTUFBRSxFQUFFLENBQTNCO0FBQThCLE1BQUUsRUFBRSxDQUFsQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBQ0UsTUFBQyx1REFBRDtBQUFJLFNBQUssRUFBRTtBQUFFSixrQkFBWSxFQUFFO0FBQWhCLEtBQVg7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxhQURGLEVBR0UsTUFBQywrREFBRDtBQUNFLFNBQUssRUFBQyxxQkFEUjtBQUVFLFFBQUksRUFBQyw4QkFGUDtBQUdFLFFBQUksRUFBQyxRQUhQO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFIRixFQVFFLE1BQUMsK0RBQUQ7QUFDRSxTQUFLLEVBQUMsc0JBRFI7QUFFRSxRQUFJLEVBQUMsbUVBRlA7QUFHRSxRQUFJLEVBQUMsWUFIUDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBUkYsRUFhRSxNQUFDLCtEQUFEO0FBQ0UsU0FBSyxFQUFDLGNBRFI7QUFFRSxRQUFJLEVBQUMsc0NBRlA7QUFHRSxRQUFJLEVBQUMsUUFIUDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBYkYsQ0FuREYsQ0FwQkYsQ0FuQkYsQ0FERjtBQWtIRDtLQXRIdUJOLEkiLCJmaWxlIjoiLi9wYWdlcy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbnRhaW5lcixcbiAgQmxvZ0NhcmQsXG4gIFJvdyxcbiAgQ29sLFxuICBINCxcbiAgUGFyYWdyYXBoLFxuICBCb3hTaGFkb3csXG4gIEltYWdlLFxufSBmcm9tIFwiQHZhbmRlYnJvbi93aW5kbW9sZW5cIjtcbmltcG9ydCBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCBSb3V0ZXJMaW5rIGZyb20gXCJuZXh0L2xpbmtcIjtcbmltcG9ydCBIZWFkIGZyb20gXCJuZXh0L2hlYWRcIjtcbmltcG9ydCB7IGNvbXBvc2VQb3N0TWV0YURhdGEgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCBQcm9qZWN0Q2FyZCBmcm9tIFwiLi4vY29tcG9uZW50cy9Qcm9qZWN0Q2FyZFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBIb21lKHsgcG9zdHMgfSkge1xuICBjb25zdCBmaXJzdFBvc3QgPSBwb3N0c1swXS5tZXRhO1xuICBjb25zdCBvdGhlclBvc3RzID0gcG9zdHMuc2xpY2UoMSk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPEhlYWQ+XG4gICAgICAgIDx0aXRsZT52YW5kZWJyb24udGVjaDwvdGl0bGU+XG4gICAgICAgIDxtZXRhXG4gICAgICAgICAgbmFtZT1cIkRlc2NyaXB0aW9uXCJcbiAgICAgICAgICBjb250ZW50PVwiVmFuZGVicm9uIFRlY2hub2xvZ3kuIExlYWRpbmcgdGhlIHJlbmV3YWJsZSBlbmVyZ3kgdHJhbnNpdGlvbiB3aXRoIGlubm92YXRpdmUgc29sdXRpb25zLlwiXG4gICAgICAgIC8+XG4gICAgICAgIDxtZXRhIHByb3BlcnR5PVwib2c6dGl0bGVcIiBjb250ZW50PVwidmFuZGVicm9uLnRlY2hcIiAvPlxuICAgICAgICA8bWV0YVxuICAgICAgICAgIHByb3BlcnR5PVwib2c6ZGVzY3JpcHRpb25cIlxuICAgICAgICAgIGNvbnRlbnQ9XCJWYW5kZWJyb24gVGVjaG5vbG9neS4gTGVhZGluZyB0aGUgcmVuZXdhYmxlIGVuZXJneSB0cmFuc2l0aW9uIHdpdGggaW5ub3ZhdGl2ZSBzb2x1dGlvbnMuXCJcbiAgICAgICAgLz5cbiAgICAgICAgPG1ldGFcbiAgICAgICAgICBwcm9wZXJ0eT1cIm9nOmltYWdlXCJcbiAgICAgICAgICBjb250ZW50PXtgaHR0cHM6Ly93d3cudmFuZGVicm9uLnRlY2gvaW1hZ2VzL3RlY2hub2xvZ3kucG5nYH1cbiAgICAgICAgICBrZXk9XCJvZ2ltYWdlXCJcbiAgICAgICAgLz5cbiAgICAgIDwvSGVhZD5cblxuICAgICAgPENvbnRhaW5lciBzdHlsZT17eyBtYXJnaW5Cb3R0b206IDYwIH19PlxuICAgICAgICA8Um93IGFsaWduSXRlbXM9XCJjZW50ZXJcIiBzdHlsZT17eyBtYXJnaW5Cb3R0b206IDYwIH19PlxuICAgICAgICAgIDxDb2wgY29sPXsxMn0gc209ezEyfSBtZD17Nn0gbGc9ezZ9PlxuICAgICAgICAgICAgPEg0PlZhbmRlYnJvbiBUZWNobm9sb2d5PC9IND5cbiAgICAgICAgICAgIDxQYXJhZ3JhcGg+XG4gICAgICAgICAgICAgIExlYWRpbmcgdGhlIHJlbmV3YWJsZSBlbmVyZ3kgdHJhbnNpdGlvbiB3aXRoIGlubm92YXRpdmUgc29sdXRpb25zLiBUaGlzIGJsb2cgZGVtb25zdHJhdGVzIHNvbWUgaGlnaGxpZ2h0cyBvZiB0ZWNoIGFjdGl2aXRpZXMgdGhhdCB3ZSB3b3VsZCBsaWtlIHRvIHNoYXJlIHdpdGggeW91IVxuXG4gICAgICAgICAgICA8L1BhcmFncmFwaD5cbiAgICAgICAgICA8L0NvbD5cbiAgICAgICAgICA8Q29sIGNvbD17MTJ9IHNtPXsxMn0gbWQ9ezZ9IGxnPXs2fT5cbiAgICAgICAgICAgIDxCb3hTaGFkb3cgc3R5bGU9e3sgd2lkdGg6IFwiMTAwJSBcIiB9fT5cbiAgICAgICAgICAgICAgPEltYWdlXG4gICAgICAgICAgICAgICAgYXNwZWN0UmF0aW89XCIyOjFcIlxuICAgICAgICAgICAgICAgIHNyYz1cImltYWdlcy90ZWNobm9sb2d5LWJsYWNrLTIucG5nXCJcbiAgICAgICAgICAgICAgICBhbHQ9XCJ0ZWNobm9sb2d5IGF0IFZhbmRlYnJvblwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0JveFNoYWRvdz5cbiAgICAgICAgICA8L0NvbD5cbiAgICAgICAgPC9Sb3c+XG5cbiAgICAgICAgPFJvdyBqdXN0aWZ5Q29udGVudD1cImJldHdlZW5cIj5cbiAgICAgICAgICA8Q29sIGNvbD17MTJ9IHNtPXsxMn0gbWQ9ezd9IGxnPXs3fT5cbiAgICAgICAgICAgIDxQYXJhZ3JhcGg+XG4gICAgICAgICAgICAgIDxIND5MYXRlc3QgcG9zdHM8L0g0PlxuICAgICAgICAgICAgPC9QYXJhZ3JhcGg+XG4gICAgICAgICAgICA8Um91dGVyTGluayBocmVmPXtmaXJzdFBvc3Quc2x1Z30+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgY3Vyc29yOiBcInBvaW50ZXJcIiB9fT5cbiAgICAgICAgICAgICAgICA8QmxvZ0NhcmRcbiAgICAgICAgICAgICAgICAgIGtleT17Zmlyc3RQb3N0LnNsdWd9XG4gICAgICAgICAgICAgICAgICB0aXRsZT17Zmlyc3RQb3N0LnRpdGxlfVxuICAgICAgICAgICAgICAgICAgaW1hZ2U9e2ZpcnN0UG9zdC5jb3ZlckltYWdlfVxuICAgICAgICAgICAgICAgICAgaW1hZ2VQcm9wcz17e1xuICAgICAgICAgICAgICAgICAgICBhc3BlY3RSYXRpbzogXCIyOjFcIixcbiAgICAgICAgICAgICAgICAgICAgYWx0OiBmaXJzdFBvc3QudGl0bGUsXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249e2ZpcnN0UG9zdC5kZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICAgIGRhdGU9e25ldyBEYXRlKGZpcnN0UG9zdC5kYXRlKX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvUm91dGVyTGluaz5cblxuICAgICAgICAgICAgPFJvdz5cbiAgICAgICAgICAgICAge290aGVyUG9zdHMubWFwKChwb3N0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICAgICAgICBjb3ZlckltYWdlLFxuICAgICAgICAgICAgICAgICAgc2x1ZyxcbiAgICAgICAgICAgICAgICB9ID0gcG9zdC5tZXRhO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIDxSb3V0ZXJMaW5rIGtleT17c2x1Z30gaHJlZj17c2x1Z30+XG4gICAgICAgICAgICAgICAgICAgIDxDb2wgY29sPXsxMn0gc209ezEyfSBtZD17Nn0gbGc9ezZ9PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgY3Vyc29yOiBcInBvaW50ZXJcIiB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxCbG9nQ2FyZFxuICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e3NsdWd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlPXtjb3ZlckltYWdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT17dGl0bGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPXtkZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZT17bmV3IERhdGUoZGF0ZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlUHJvcHM9e3sgYWx0OiB0aXRsZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9Db2w+XG4gICAgICAgICAgICAgICAgICA8L1JvdXRlckxpbms+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L1Jvdz5cbiAgICAgICAgICA8L0NvbD5cblxuICAgICAgICAgIDxDb2wgY29scj17MTJ9IHNtPXsxMn0gbWQ9ezR9IGxnPXs0fT5cbiAgICAgICAgICAgIDxINCBzdHlsZT17eyBtYXJnaW5Cb3R0b206IDIwIH19PkxpbmtzPC9IND5cblxuICAgICAgICAgICAgPFByb2plY3RDYXJkXG4gICAgICAgICAgICAgIHRpdGxlPVwiVmFuZGVicm9uIG9uIEdpdGh1YlwiXG4gICAgICAgICAgICAgIGhyZWY9XCJodHRwczovL2dpdGh1Yi5jb20vdmFuZGVicm9uXCJcbiAgICAgICAgICAgICAgaWNvbj1cImdpdGh1YlwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPFByb2plY3RDYXJkXG4gICAgICAgICAgICAgIHRpdGxlPVwiV2luZG1vbGVuIHN0eWxlZ3VpZGVcIlxuICAgICAgICAgICAgICBocmVmPVwiaHR0cHM6Ly93aW5kbW9sZW4ubmV0bGlmeS5hcHAvP3BhdGg9L2RvY3MvZG9jcy1pbnRyb2R1Y3Rpb24tLXBhZ2VcIlxuICAgICAgICAgICAgICBpY29uPVwid2luZC1zbWFsbFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPFByb2plY3RDYXJkXG4gICAgICAgICAgICAgIHRpdGxlPVwiV29yayB3aXRoIHVzXCJcbiAgICAgICAgICAgICAgaHJlZj1cImh0dHBzOi8vd2Vya2VuYmlqLnZhbmRlYnJvbi5ubC9sL2VuL1wiXG4gICAgICAgICAgICAgIGljb249XCJmcmllbmRcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L0NvbD5cbiAgICAgICAgPC9Sb3c+XG4gICAgICA8L0NvbnRhaW5lcj5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXRpY1Byb3BzKCkge1xuICBjb25zdCBkaXJlY3RvcnkgPSBcIi9wdWJsaWMvcG9zdHMvXCI7XG4gIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmMoYCR7cHJvY2Vzcy5jd2QoKX0ke2RpcmVjdG9yeX1gKTtcblxuICBjb25zdCBwb3N0cyA9IGZpbGVzXG4gICAgLm1hcCgoZmlsZU5hbWUpID0+IGNvbXBvc2VQb3N0TWV0YURhdGEoZGlyZWN0b3J5LCBmaWxlTmFtZSkpXG4gICAgLnNvcnQoKGEsIGIpID0+IG5ldyBEYXRlKGIubWV0YS5kYXRlKSAtIG5ldyBEYXRlKGEubWV0YS5kYXRlKSk7XG5cbiAgcmV0dXJuIHtcbiAgICBwcm9wczoge1xuICAgICAgcG9zdHMsXG4gICAgfSxcbiAgfTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./pages/index.js\n"); - -/***/ }) - -},[["./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?page=%2F&absolutePagePath=%2FUsers%2Fjohn.fisher%2Fworkspace%2Fvandebron%2Ftech-blog%2Fpages%2Findex.js!./","webpack"]]]); \ No newline at end of file diff --git a/_next/static/chunks/pages/next/dist/pages/_error.js b/_next/static/chunks/pages/next/dist/pages/_error.js new file mode 100644 index 000000000..bfa26ed6e --- /dev/null +++ b/_next/static/chunks/pages/next/dist/pages/_error.js @@ -0,0 +1,345 @@ +_N_E = +(window["webpackJsonp_N_E"] = window["webpackJsonp_N_E"] || []).push([["pages/next/dist/pages/_error"],{ + +/***/ "./node_modules/next/dist/build/polyfills/object-assign.js": +/*!*****************************************************************!*\ + !*** ./node_modules/next/dist/build/polyfills/object-assign.js ***! + \*****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("var assign=Object.assign.bind(Object);module.exports=assign;module.exports.default=module.exports;\n//# sourceMappingURL=object-assign.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9idWlsZC9wb2x5ZmlsbHMvb2JqZWN0LWFzc2lnbi5qcz80MWViIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhLHNDQUFzQyxzQkFBc0I7QUFDekUiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3BvbHlmaWxscy9vYmplY3QtYXNzaWduLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7dmFyIGFzc2lnbj1PYmplY3QuYXNzaWduLmJpbmQoT2JqZWN0KTttb2R1bGUuZXhwb3J0cz1hc3NpZ247bW9kdWxlLmV4cG9ydHMuZGVmYXVsdD1tb2R1bGUuZXhwb3J0cztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9iamVjdC1hc3NpZ24uanMubWFwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/build/polyfills/object-assign.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?page=%2Fnext%2Fdist%2Fpages%2F_error&absolutePagePath=%2FUsers%2Fjohn.fisher%2Fworkspace%2Fvandebron%2Ftech-blog%2Fnode_modules%2Fnext%2Fdist%2Fpages%2F_error.js!./": +/*!****************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?page=%2Fnext%2Fdist%2Fpages%2F_error&absolutePagePath=%2FUsers%2Fjohn.fisher%2Fworkspace%2Fvandebron%2Ftech-blog%2Fnode_modules%2Fnext%2Fdist%2Fpages%2F_error.js ***! + \****************************************************************************************************************************************************************************************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/next/dist/pages/_error\",\n function () {\n return __webpack_require__(/*! ./node_modules/next/dist/pages/_error.js */ \"./node_modules/next/dist/pages/_error.js\");\n }\n ]);\n //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9idWlsZC93ZWJwYWNrL2xvYWRlcnMvbmV4dC1jbGllbnQtcGFnZXMtbG9hZGVyLmpzP2ZiMTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQywwRkFBeUY7QUFDaEg7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvd2VicGFjay9sb2FkZXJzL25leHQtY2xpZW50LXBhZ2VzLWxvYWRlci5qcz9wYWdlPSUyRm5leHQlMkZkaXN0JTJGcGFnZXMlMkZfZXJyb3ImYWJzb2x1dGVQYWdlUGF0aD0lMkZVc2VycyUyRmpvaG4uZmlzaGVyJTJGd29ya3NwYWNlJTJGdmFuZGVicm9uJTJGdGVjaC1ibG9nJTJGbm9kZV9tb2R1bGVzJTJGbmV4dCUyRmRpc3QlMkZwYWdlcyUyRl9lcnJvci5qcyEuLy5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxuICAgICh3aW5kb3cuX19ORVhUX1AgPSB3aW5kb3cuX19ORVhUX1AgfHwgW10pLnB1c2goW1xuICAgICAgXCIvbmV4dC9kaXN0L3BhZ2VzL19lcnJvclwiLFxuICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZShcIi9Vc2Vycy9qb2huLmZpc2hlci93b3Jrc3BhY2UvdmFuZGVicm9uL3RlY2gtYmxvZy9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3BhZ2VzL19lcnJvci5qc1wiKTtcbiAgICAgIH1cbiAgICBdKTtcbiAgIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?page=%2Fnext%2Fdist%2Fpages%2F_error&absolutePagePath=%2FUsers%2Fjohn.fisher%2Fworkspace%2Fvandebron%2Ftech-blog%2Fnode_modules%2Fnext%2Fdist%2Fpages%2F_error.js!./\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/compiled/webpack/module.js": +/*!***********************************!*\ + !*** (webpack)/webpack/module.js ***! + \***********************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("/* WEBPACK VAR INJECTION */(function(__dirname) {module.exports =\n/******/ (function() { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 880:\n/***/ (function(module) {\n\nmodule.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __nccwpck_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(__webpack_module_cache__[moduleId]) {\n/******/ \t\t\treturn __webpack_module_cache__[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\tvar threw = true;\n/******/ \t\ttry {\n/******/ \t\t\t__webpack_modules__[moduleId](module, module.exports, __nccwpck_require__);\n/******/ \t\t\tthrew = false;\n/******/ \t\t} finally {\n/******/ \t\t\tif(threw) delete __webpack_module_cache__[moduleId];\n/******/ \t\t}\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat */\n/******/ \t\n/******/ \t__nccwpck_require__.ab = __dirname + \"/\";/************************************************************************/\n/******/ \t// module exports must be returned from runtime so entry inlining is disabled\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \treturn __nccwpck_require__(880);\n/******/ })()\n;\n/* WEBPACK VAR INJECTION */}.call(this, \"/\"))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLyh3ZWJwYWNrKS93ZWJwYWNrL21vZHVsZS5qcz8zZTczIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0Esc0JBQXNCO0FBQ3RCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPOztBQUVQLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRDtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVixDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC93ZWJwYWNrL21vZHVsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbigpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHR2YXIgX193ZWJwYWNrX21vZHVsZXNfXyA9ICh7XG5cbi8qKiovIDg4MDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihtb2R1bGUpIHtcblx0aWYgKCFtb2R1bGUud2VicGFja1BvbHlmaWxsKSB7XG5cdFx0bW9kdWxlLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKCkge307XG5cdFx0bW9kdWxlLnBhdGhzID0gW107XG5cdFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XG5cdFx0aWYgKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwibG9hZGVkXCIsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmw7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJpZFwiLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdG1vZHVsZS53ZWJwYWNrUG9seWZpbGwgPSAxO1xuXHR9XG5cdHJldHVybiBtb2R1bGU7XG59O1xuXG5cbi8qKiovIH0pXG5cbi8qKioqKiovIFx0fSk7XG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fbmNjd3Bja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuLyoqKioqKi8gXHRcdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0dmFyIHRocmV3ID0gdHJ1ZTtcbi8qKioqKiovIFx0XHR0cnkge1xuLyoqKioqKi8gXHRcdFx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX19uY2N3cGNrX3JlcXVpcmVfXyk7XG4vKioqKioqLyBcdFx0XHR0aHJldyA9IGZhbHNlO1xuLyoqKioqKi8gXHRcdH0gZmluYWxseSB7XG4vKioqKioqLyBcdFx0XHRpZih0aHJldykgZGVsZXRlIF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi8gXHRcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9jb21wYXQgKi9cbi8qKioqKiovIFx0XG4vKioqKioqLyBcdF9fbmNjd3Bja19yZXF1aXJlX18uYWIgPSBfX2Rpcm5hbWUgKyBcIi9cIjsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gXHQvLyBtb2R1bGUgZXhwb3J0cyBtdXN0IGJlIHJldHVybmVkIGZyb20gcnVudGltZSBzbyBlbnRyeSBpbmxpbmluZyBpcyBkaXNhYmxlZFxuLyoqKioqKi8gXHQvLyBzdGFydHVwXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX19uY2N3cGNrX3JlcXVpcmVfXyg4ODApO1xuLyoqKioqKi8gfSkoKVxuOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/webpack/module.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/next-server/lib/amp-context.js": +/*!***************************************************************!*\ + !*** ./node_modules/next/dist/next-server/lib/amp-context.js ***! + \***************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nexports.__esModule = true;\nexports.AmpStateContext = void 0;\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nvar AmpStateContext = /*#__PURE__*/_react[\"default\"].createContext({});\n\nexports.AmpStateContext = AmpStateContext;\n\nif (true) {\n AmpStateContext.displayName = 'AmpStateContext';\n}\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../compiled/webpack/module.js */ \"./node_modules/next/dist/compiled/webpack/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uLy4uL25leHQtc2VydmVyL2xpYi9hbXAtY29udGV4dC50cz84NzlmIl0sIm5hbWVzIjpbIkFtcFN0YXRlQ29udGV4dCIsIlJlYWN0Il0sIm1hcHBpbmdzIjoiOzs7OztBQUFBOzs7Ozs7QUFFTzs7QUFBQSxJQUFNQSxlQUFtQyxnQkFBR0MsZ0NBQTVDLEVBQTRDQSxDQUE1Qzs7OztBQUVQLFVBQTJDO0FBQ3pDRCxpQkFBZSxDQUFmQTtBQUNEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9uZXh0LXNlcnZlci9saWIvYW1wLWNvbnRleHQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmV4cG9ydCBjb25zdCBBbXBTdGF0ZUNvbnRleHQ6IFJlYWN0LkNvbnRleHQ8YW55PiA9IFJlYWN0LmNyZWF0ZUNvbnRleHQoe30pXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIEFtcFN0YXRlQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdBbXBTdGF0ZUNvbnRleHQnXG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/next-server/lib/amp-context.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/next-server/lib/amp.js": +/*!*******************************************************!*\ + !*** ./node_modules/next/dist/next-server/lib/amp.js ***! + \*******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nvar _s = $RefreshSig$();\n\nexports.__esModule = true;\nexports.isInAmpMode = isInAmpMode;\nexports.useAmp = useAmp;\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _ampContext = __webpack_require__(/*! ./amp-context */ \"./node_modules/next/dist/next-server/lib/amp-context.js\");\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nfunction isInAmpMode() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$ampFirst = _ref.ampFirst,\n ampFirst = _ref$ampFirst === void 0 ? false : _ref$ampFirst,\n _ref$hybrid = _ref.hybrid,\n hybrid = _ref$hybrid === void 0 ? false : _ref$hybrid,\n _ref$hasQuery = _ref.hasQuery,\n hasQuery = _ref$hasQuery === void 0 ? false : _ref$hasQuery;\n\n return ampFirst || hybrid && hasQuery;\n}\n\nfunction useAmp() {\n _s();\n\n // Don't assign the context value to a variable to save bytes\n return isInAmpMode(_react[\"default\"].useContext(_ampContext.AmpStateContext));\n}\n\n_s(useAmp, \"gDsCjeeItUuvgOWf1v4qoK9RF6k=\");\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../compiled/webpack/module.js */ \"./node_modules/next/dist/compiled/webpack/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uLy4uL25leHQtc2VydmVyL2xpYi9hbXAudHM/MDdkMiJdLCJuYW1lcyI6WyJhbXBGaXJzdCIsImh5YnJpZCIsImhhc1F1ZXJ5IiwiaXNJbkFtcE1vZGUiLCJSZWFjdCIsIkFtcFN0YXRlQ29udGV4dCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTs7QUFDQTs7Ozs7O0FBRU87O0FBQUEsdUJBSVU7QUFBQSxpRkFKVixFQUlVO0FBQUEsMkJBSGZBLFFBR2U7QUFBQSxNQUhmQSxRQUdlLDhCQUpXLEtBSVg7QUFBQSx5QkFGZkMsTUFFZTtBQUFBLE1BRmZBLE1BRWUsNEJBSlcsS0FJWDtBQUFBLDJCQURmQyxRQUNlO0FBQUEsTUFEZkEsUUFDZSw4QkFKVyxLQUlYOztBQUNmLFNBQU9GLFFBQVEsSUFBS0MsTUFBTSxJQUExQjtBQUdLOztBQUFBLGtCQUEyQjtBQUFBOztBQUNoQztBQUNBLFNBQU9FLFdBQVcsQ0FBQ0MsNkJBQWlCQyxZQUFwQyxlQUFtQkQsQ0FBRCxDQUFsQjtBQUNEOztHQUhNLE0iLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L25leHQtc2VydmVyL2xpYi9hbXAuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbXBTdGF0ZUNvbnRleHQgfSBmcm9tICcuL2FtcC1jb250ZXh0J1xuXG5leHBvcnQgZnVuY3Rpb24gaXNJbkFtcE1vZGUoe1xuICBhbXBGaXJzdCA9IGZhbHNlLFxuICBoeWJyaWQgPSBmYWxzZSxcbiAgaGFzUXVlcnkgPSBmYWxzZSxcbn0gPSB7fSk6IGJvb2xlYW4ge1xuICByZXR1cm4gYW1wRmlyc3QgfHwgKGh5YnJpZCAmJiBoYXNRdWVyeSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUFtcCgpOiBib29sZWFuIHtcbiAgLy8gRG9uJ3QgYXNzaWduIHRoZSBjb250ZXh0IHZhbHVlIHRvIGEgdmFyaWFibGUgdG8gc2F2ZSBieXRlc1xuICByZXR1cm4gaXNJbkFtcE1vZGUoUmVhY3QudXNlQ29udGV4dChBbXBTdGF0ZUNvbnRleHQpKVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/next-server/lib/amp.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/next-server/lib/head-manager-context.js": +/*!************************************************************************!*\ + !*** ./node_modules/next/dist/next-server/lib/head-manager-context.js ***! + \************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nexports.__esModule = true;\nexports.HeadManagerContext = void 0;\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nvar HeadManagerContext = /*#__PURE__*/_react[\"default\"].createContext({});\n\nexports.HeadManagerContext = HeadManagerContext;\n\nif (true) {\n HeadManagerContext.displayName = 'HeadManagerContext';\n}\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../compiled/webpack/module.js */ \"./node_modules/next/dist/compiled/webpack/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uLy4uL25leHQtc2VydmVyL2xpYi9oZWFkLW1hbmFnZXItY29udGV4dC50cz9iMmQ2Il0sIm5hbWVzIjpbIkhlYWRNYW5hZ2VyQ29udGV4dCIsIlJlYWN0Il0sIm1hcHBpbmdzIjoiOzs7OztBQUFBOzs7Ozs7QUFFTzs7QUFBQSxJQUFNQSxrQkFLWCxnQkFBR0MsZ0NBTEUsRUFLRkEsQ0FMRTs7OztBQU9QLFVBQTJDO0FBQ3pDRCxvQkFBa0IsQ0FBbEJBO0FBQ0QiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L25leHQtc2VydmVyL2xpYi9oZWFkLW1hbmFnZXItY29udGV4dC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuZXhwb3J0IGNvbnN0IEhlYWRNYW5hZ2VyQ29udGV4dDogUmVhY3QuQ29udGV4dDx7XG4gIHVwZGF0ZUhlYWQ/OiAoc3RhdGU6IGFueSkgPT4gdm9pZFxuICBtb3VudGVkSW5zdGFuY2VzPzogYW55XG4gIHVwZGF0ZVNjcmlwdHM/OiAoc3RhdGU6IGFueSkgPT4gdm9pZFxuICBzY3JpcHRzPzogYW55XG59PiA9IFJlYWN0LmNyZWF0ZUNvbnRleHQoe30pXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIEhlYWRNYW5hZ2VyQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdIZWFkTWFuYWdlckNvbnRleHQnXG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/next-server/lib/head-manager-context.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/next-server/lib/head.js": +/*!********************************************************!*\ + !*** ./node_modules/next/dist/next-server/lib/head.js ***! + \********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nvar _defineProperty = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/defineProperty */ \"./node_modules/next/node_modules/@babel/runtime/helpers/defineProperty.js\");\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nexports.__esModule = true;\nexports.defaultHead = defaultHead;\nexports[\"default\"] = void 0;\n\nvar _react = _interopRequireWildcard(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _sideEffect = _interopRequireDefault(__webpack_require__(/*! ./side-effect */ \"./node_modules/next/dist/next-server/lib/side-effect.js\"));\n\nvar _ampContext = __webpack_require__(/*! ./amp-context */ \"./node_modules/next/dist/next-server/lib/amp-context.js\");\n\nvar _headManagerContext = __webpack_require__(/*! ./head-manager-context */ \"./node_modules/next/dist/next-server/lib/head-manager-context.js\");\n\nvar _amp = __webpack_require__(/*! ./amp */ \"./node_modules/next/dist/next-server/lib/amp.js\");\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nfunction _getRequireWildcardCache() {\n if (typeof WeakMap !== \"function\") return null;\n var cache = new WeakMap();\n\n _getRequireWildcardCache = function _getRequireWildcardCache() {\n return cache;\n };\n\n return cache;\n}\n\nfunction _interopRequireWildcard(obj) {\n if (obj && obj.__esModule) {\n return obj;\n }\n\n if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") {\n return {\n \"default\": obj\n };\n }\n\n var cache = _getRequireWildcardCache();\n\n if (cache && cache.has(obj)) {\n return cache.get(obj);\n }\n\n var newObj = {};\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n\n if (desc && (desc.get || desc.set)) {\n Object.defineProperty(newObj, key, desc);\n } else {\n newObj[key] = obj[key];\n }\n }\n }\n\n newObj[\"default\"] = obj;\n\n if (cache) {\n cache.set(obj, newObj);\n }\n\n return newObj;\n}\n\nfunction defaultHead() {\n var inAmpMode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var head = [/*#__PURE__*/_react[\"default\"].createElement(\"meta\", {\n charSet: \"utf-8\"\n })];\n\n if (!inAmpMode) {\n head.push( /*#__PURE__*/_react[\"default\"].createElement(\"meta\", {\n name: \"viewport\",\n content: \"width=device-width\"\n }));\n }\n\n return head;\n}\n\nfunction onlyReactElement(list, child) {\n // React children can be \"string\" or \"number\" in this case we ignore them for backwards compat\n if (typeof child === 'string' || typeof child === 'number') {\n return list;\n } // Adds support for React.Fragment\n\n\n if (child.type === _react[\"default\"].Fragment) {\n return list.concat(_react[\"default\"].Children.toArray(child.props.children).reduce(function (fragmentList, fragmentChild) {\n if (typeof fragmentChild === 'string' || typeof fragmentChild === 'number') {\n return fragmentList;\n }\n\n return fragmentList.concat(fragmentChild);\n }, []));\n }\n\n return list.concat(child);\n}\n\nvar METATYPES = ['name', 'httpEquiv', 'charSet', 'itemProp'];\n/*\nreturns a function for filtering head child elements\nwhich shouldn't be duplicated, like <title/>\nAlso adds support for deduplicated `key` properties\n*/\n\nfunction unique() {\n var keys = new Set();\n var tags = new Set();\n var metaTypes = new Set();\n var metaCategories = {};\n return function (h) {\n var isUnique = true;\n var hasKey = false;\n\n if (h.key && typeof h.key !== 'number' && h.key.indexOf('$') > 0) {\n hasKey = true;\n var key = h.key.slice(h.key.indexOf('$') + 1);\n\n if (keys.has(key)) {\n isUnique = false;\n } else {\n keys.add(key);\n }\n } // eslint-disable-next-line default-case\n\n\n switch (h.type) {\n case 'title':\n case 'base':\n if (tags.has(h.type)) {\n isUnique = false;\n } else {\n tags.add(h.type);\n }\n\n break;\n\n case 'meta':\n for (var i = 0, len = METATYPES.length; i < len; i++) {\n var metatype = METATYPES[i];\n if (!h.props.hasOwnProperty(metatype)) continue;\n\n if (metatype === 'charSet') {\n if (metaTypes.has(metatype)) {\n isUnique = false;\n } else {\n metaTypes.add(metatype);\n }\n } else {\n var category = h.props[metatype];\n var categories = metaCategories[metatype] || new Set();\n\n if ((metatype !== 'name' || !hasKey) && categories.has(category)) {\n isUnique = false;\n } else {\n categories.add(category);\n metaCategories[metatype] = categories;\n }\n }\n }\n\n break;\n }\n\n return isUnique;\n };\n}\n/**\n*\n* @param headElements List of multiple <Head> instances\n*/\n\n\nfunction reduceComponents(headElements, props) {\n return headElements.reduce(function (list, headElement) {\n var headElementChildren = _react[\"default\"].Children.toArray(headElement.props.children);\n\n return list.concat(headElementChildren);\n }, []).reduce(onlyReactElement, []).reverse().concat(defaultHead(props.inAmpMode)).filter(unique()).reverse().map(function (c, i) {\n var key = c.key || i;\n\n if (false) { var newProps; }\n\n return /*#__PURE__*/_react[\"default\"].cloneElement(c, {\n key: key\n });\n });\n}\n/**\n* This component injects elements to `<head>` of your page.\n* To avoid duplicated `tags` in `<head>` you can use the `key` property, which will make sure every tag is only rendered once.\n*/\n\n\nfunction Head(_ref) {\n var children = _ref.children;\n var ampState = (0, _react.useContext)(_ampContext.AmpStateContext);\n var headManager = (0, _react.useContext)(_headManagerContext.HeadManagerContext);\n return /*#__PURE__*/_react[\"default\"].createElement(_sideEffect[\"default\"], {\n reduceComponentsToState: reduceComponents,\n headManager: headManager,\n inAmpMode: (0, _amp.isInAmpMode)(ampState)\n }, children);\n} // TODO: Remove in the next major release\n\n\n_c = Head;\n\nHead.rewind = function () {};\n\nvar _default = Head;\nexports[\"default\"] = _default;\n\nvar _c;\n\n$RefreshReg$(_c, \"Head\");\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../compiled/webpack/module.js */ \"./node_modules/next/dist/compiled/webpack/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uLy4uL25leHQtc2VydmVyL2xpYi9oZWFkLnRzeD84YjI3Il0sIm5hbWVzIjpbImluQW1wTW9kZSIsImhlYWQiLCJjaGlsZCIsIlJlYWN0IiwibGlzdCIsImZyYWdtZW50TGlzdCIsIk1FVEFUWVBFUyIsImtleXMiLCJ0YWdzIiwibWV0YVR5cGVzIiwibWV0YUNhdGVnb3JpZXMiLCJoIiwiaXNVbmlxdWUiLCJoYXNLZXkiLCJrZXkiLCJpIiwibGVuIiwibWV0YXR5cGUiLCJjYXRlZ29yeSIsImNhdGVnb3JpZXMiLCJoZWFkRWxlbWVudHMiLCJoZWFkRWxlbWVudENoaWxkcmVuIiwiaGVhZEVsZW1lbnQiLCJkZWZhdWx0SGVhZCIsInByb3BzIiwidW5pcXVlIiwiYyIsInByb2Nlc3MiLCJhbXBTdGF0ZSIsIkFtcFN0YXRlQ29udGV4dCIsImhlYWRNYW5hZ2VyIiwiSGVhZE1hbmFnZXJDb250ZXh0IiwiSGVhZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNTzs7QUFBQSx1QkFBdUQ7QUFBQSxNQUFsQ0EsU0FBa0MsdUVBQXZELEtBQXVEO0FBQzVELE1BQU1DLElBQUksR0FBRyxjQUFDO0FBQU0sV0FBTyxFQUEzQjtBQUFjLElBQUQsQ0FBYjs7QUFDQSxNQUFJLENBQUosV0FBZ0I7QUFDZEEsUUFBSSxDQUFKQSxtQkFBVTtBQUFNLFVBQUksRUFBVjtBQUFzQixhQUFPLEVBQXZDQTtBQUFVLE1BQVZBO0FBRUY7O0FBQUE7QUFHRjs7QUFBQSx1Q0FHa0M7QUFDaEM7QUFDQSxNQUFJLDZCQUE2QixpQkFBakMsVUFBNEQ7QUFDMUQ7QUFFRixHQUxnQyxDQUtoQzs7O0FBQ0EsTUFBSUMsS0FBSyxDQUFMQSxTQUFlQyxrQkFBbkIsVUFBbUM7QUFDakMsV0FBT0MsSUFBSSxD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LENBWmRBLFNBYUdLLE1BYkhMLGtCQWVBLGdCQUEyQztBQUM5QyxRQUFNTixHQUFHLEdBQUdZLENBQUMsQ0FBREEsT0FBWjs7QUFDQSxRQUNFQyxLQURGLEVBSUUsaUJBb0JGOztBQUFBLHdCQUFPeEIsa0NBQXNCO0FBQUVXLFNBQS9CLEVBQStCQTtBQUFGLEtBQXRCWCxDQUFQO0FBekNKLEdBQU9pQixDQUFQO0FBNkNGO0FBQUE7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLG9CQUEyRDtBQUFBLE1BQTNELFFBQTJELFFBQTNELFFBQTJEO0FBQ3pELE1BQU1RLFFBQVEsR0FBRyx1QkFBV0MsWUFBNUIsZUFBaUIsQ0FBakI7QUFDQSxNQUFNQyxXQUFXLEdBQUcsdUJBQVdDLG9CQUEvQixrQkFBb0IsQ0FBcEI7QUFDQSxzQkFDRSxnQ0FBQyxXQUFEO0FBQ0UsMkJBQXVCLEVBRHpCO0FBRUUsZUFBVyxFQUZiO0FBR0UsYUFBUyxFQUFFLHNCQUhiLFFBR2E7QUFIYixLQURGLFFBQ0UsQ0FERjtBQVdGLEMsQ0FBQTs7O0tBZEEsSTs7QUFlQUMsSUFBSSxDQUFKQSxTQUFjLFlBQU0sQ0FBcEJBOztlQUVlQSxJIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9uZXh0LXNlcnZlci9saWIvaGVhZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgRWZmZWN0IGZyb20gJy4vc2lkZS1lZmZlY3QnXG5pbXBvcnQgeyBBbXBTdGF0ZUNvbnRleHQgfSBmcm9tICcuL2FtcC1jb250ZXh0J1xuaW1wb3J0IHsgSGVhZE1hbmFnZXJDb250ZXh0IH0gZnJvbSAnLi9oZWFkLW1hbmFnZXItY29udGV4dCdcbmltcG9ydCB7IGlzSW5BbXBNb2RlIH0gZnJvbSAnLi9hbXAnXG5cbnR5cGUgV2l0aEluQW1wTW9kZSA9IHtcbiAgaW5BbXBNb2RlPzogYm9vbGVhblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdEhlYWQoaW5BbXBNb2RlID0gZmFsc2UpOiBKU1guRWxlbWVudFtdIHtcbiAgY29uc3QgaGVhZCA9IFs8bWV0YSBjaGFyU2V0PVwidXRmLThcIiAvPl1cbiAgaWYgKCFpbkFtcE1vZGUpIHtcbiAgICBoZWFkLnB1c2goPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aFwiIC8+KVxuICB9XG4gIHJldHVybiBoZWFkXG59XG5cbmZ1bmN0aW9uIG9ubHlSZWFjdEVsZW1lbnQoXG4gIGxpc3Q6IEFycmF5PFJlYWN0LlJlYWN0RWxlbWVudDxhbnk+PixcbiAgY2hpbGQ6IFJlYWN0LlJlYWN0Q2hpbGRcbik6IEFycmF5PFJlYWN0LlJlYWN0RWxlbWVudDxhbnk+PiB7XG4gIC8vIFJlYWN0IGNoaWxkcmVuIGNhbiBiZSBcInN0cmluZ1wiIG9yIFwibnVtYmVyXCIgaW4gdGhpcyBjYXNlIHdlIGlnbm9yZSB0aGVtIGZvciBiYWNrd2FyZHMgY29tcGF0XG4gIGlmICh0eXBlb2YgY2hpbGQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBjaGlsZCA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gbGlzdFxuICB9XG4gIC8vIEFkZHMgc3VwcG9ydCBmb3IgUmVhY3QuRnJhZ21lbnRcbiAgaWYgKGNoaWxkLnR5cGUgPT09IFJlYWN0LkZyYWdtZW50KSB7XG4gICAgcmV0dXJuIGxpc3QuY29uY2F0KFxuICAgICAgUmVhY3QuQ2hpbGRyZW4udG9BcnJheShjaGlsZC5wcm9wcy5jaGlsZHJlbikucmVkdWNlKFxuICAgICAgICAoXG4gICAgICAgICAgZnJhZ21lbnRMaXN0OiBBcnJheTxSZWFjdC5SZWFjdEVsZW1lbnQ8YW55Pj4sXG4gICAgICAgICAgZnJhZ21lbnRDaGlsZDogUmVhY3QuUmVhY3RDaGlsZFxuICAgICAgICApOiBBcnJheTxSZWFjdC5SZWFjdEVsZW1lbnQ8YW55Pj4gPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBmcmFnbWVudENoaWxkID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgICAgdHlwZW9mIGZyYWdtZW50Q2hpbGQgPT09ICdudW1iZXInXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJhZ21lbnRMaXN0XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmcmFnbWVudExpc3QuY29uY2F0KGZyYWdtZW50Q2hpbGQpXG4gICAgICAgIH0sXG4gICAgICAgIFtdXG4gICAgICApXG4gICAgKVxuICB9XG4gIHJldHVybiBsaXN0LmNvbmNhdChjaGlsZClcbn1cblxuY29uc3QgTUVUQVRZUEVTID0gWyduYW1lJywgJ2h0dHBFcXVpdicsICdjaGFyU2V0JywgJ2l0ZW1Qcm9wJ11cblxuLypcbiByZXR1cm5zIGEgZnVuY3Rpb24gZm9yIGZpbHRlcmluZyBoZWFkIGNoaWxkIGVsZW1lbnRzXG4gd2hpY2ggc2hvdWxkbid0IGJlIGR1cGxpY2F0ZWQsIGxpa2UgPHRpdGxlLz5cbiBBbHNvIGFkZHMgc3VwcG9ydCBmb3IgZGVkdXBsaWNhdGVkIGBrZXlgIHByb3BlcnRpZXNcbiovXG5mdW5jdGlvbiB1bmlxdWUoKSB7XG4gIGNvbnN0IGtleXMgPSBuZXcgU2V0KClcbiAgY29uc3QgdGFncyA9IG5ldyBTZXQoKVxuICBjb25zdCBtZXRhVHlwZXMgPSBuZXcgU2V0KClcbiAgY29uc3QgbWV0YUNhdGVnb3JpZXM6IHsgW21ldGF0eXBlOiBzdHJpbmddOiBTZXQ8c3RyaW5nPiB9ID0ge31cblxuICByZXR1cm4gKGg6IFJlYWN0LlJlYWN0RWxlbWVudDxhbnk+KSA9PiB7XG4gICAgbGV0IGlzVW5pcXVlID0gdHJ1ZVxuICAgIGxldCBoYXNLZXkgPSBmYWxzZVxuXG4gICAgaWYgKGgua2V5ICYmIHR5cGVvZiBoLmtleSAhPT0gJ251bWJlcicgJiYgaC5rZXkuaW5kZXhPZignJCcpID4gMCkge1xuICAgICAgaGFzS2V5ID0gdHJ1ZVxuICAgICAgY29uc3Qga2V5ID0gaC5rZXkuc2xpY2UoaC5rZXkuaW5kZXhPZignJCcpICsgMSlcbiAgICAgIGlmIChrZXlzLmhhcyhrZXkpKSB7XG4gICAgICAgIGlzVW5pcXVlID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGtleXMuYWRkKGtleSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVmYXVsdC1jYXNlXG4gICAgc3dpdGNoIChoLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3RpdGxlJzpcbiAgICAgIGNhc2UgJ2Jhc2UnOlxuICAgICAgICBpZiAodGFncy5oYXMoaC50eXBlKSkge1xuICAgICAgICAgIGlzVW5pcXVlID0gZmFsc2VcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0YWdzLmFkZChoLnR5cGUpXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ21ldGEnOlxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gTUVUQVRZUEVTLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgbWV0YXR5cGUgPSBNRVRBVFlQRVNbaV1cbiAgICAgICAgICBpZiAoIWgucHJvcHMuaGFzT3duUHJvcGVydHkobWV0YXR5cGUpKSBjb250aW51ZVxuXG4gICAgICAgICAgaWYgKG1ldGF0eXBlID09PSAnY2hhclNldCcpIHtcbiAgICAgICAgICAgIGlmIChtZXRhVHlwZXMuaGFzKG1ldGF0eXBlKSkge1xuICAgICAgICAgICAgICBpc1VuaXF1ZSA9IGZhbHNlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtZXRhVHlwZXMuYWRkKG1ldGF0eXBlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yeSA9IGgucHJvcHNbbWV0YXR5cGVdXG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gbWV0YUNhdGVnb3JpZXNbbWV0YXR5cGVdIHx8IG5ldyBTZXQoKVxuICAgICAgICAgICAgaWYgKChtZXRhdHlwZSAhPT0gJ25hbWUnIHx8ICFoYXNLZXkpICYmIGNhdGVnb3JpZXMuaGFzKGNhdGVnb3J5KSkge1xuICAgICAgICAgICAgICBpc1VuaXF1ZSA9IGZhbHNlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjYXRlZ29yaWVzLmFkZChjYXRlZ29yeSlcbiAgICAgICAgICAgICAgbWV0YUNhdGVnb3JpZXNbbWV0YXR5cGVdID0gY2F0ZWdvcmllc1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgIH1cblxuICAgIHJldHVybiBpc1VuaXF1ZVxuICB9XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBoZWFkRWxlbWVudHMgTGlzdCBvZiBtdWx0aXBsZSA8SGVhZD4gaW5zdGFuY2VzXG4gKi9cbmZ1bmN0aW9uIHJlZHVjZUNvbXBvbmVudHMoXG4gIGhlYWRFbGVtZW50czogQXJyYXk8UmVhY3QuUmVhY3RFbGVtZW50PGFueT4+LFxuICBwcm9wczogV2l0aEluQW1wTW9kZVxuKSB7XG4gIHJldHVybiBoZWFkRWxlbWVudHNcbiAgICAucmVkdWNlKFxuICAgICAgKGxpc3Q6IFJlYWN0LlJlYWN0Q2hpbGRbXSwgaGVhZEVsZW1lbnQ6IFJlYWN0LlJlYWN0RWxlbWVudDxhbnk+KSA9PiB7XG4gICAgICAgIGNvbnN0IGhlYWRFbGVtZW50Q2hpbGRyZW4gPSBSZWFjdC5DaGlsZHJlbi50b0FycmF5KFxuICAgICAgICAgIGhlYWRFbGVtZW50LnByb3BzLmNoaWxkcmVuXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuIGxpc3QuY29uY2F0KGhlYWRFbGVtZW50Q2hpbGRyZW4pXG4gICAgICB9LFxuICAgICAgW11cbiAgICApXG4gICAgLnJlZHVjZShvbmx5UmVhY3RFbGVtZW50LCBbXSlcbiAgICAucmV2ZXJzZSgpXG4gICAgLmNvbmNhdChkZWZhdWx0SGVhZChwcm9wcy5pbkFtcE1vZGUpKVxuICAgIC5maWx0ZXIodW5pcXVlKCkpXG4gICAgLnJldmVyc2UoKVxuICAgIC5tYXAoKGM6IFJlYWN0LlJlYWN0RWxlbWVudDxhbnk+LCBpOiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGMua2V5IHx8IGlcbiAgICAgIGlmIChcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdkZXZlbG9wbWVudCcgJiZcbiAgICAgICAgcHJvY2Vzcy5lbnYuX19ORVhUX09QVElNSVpFX0ZPTlRTICYmXG4gICAgICAgICFwcm9wcy5pbkFtcE1vZGVcbiAgICAgICkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgYy50eXBlID09PSAnbGluaycgJiZcbiAgICAgICAgICBjLnByb3BzWydocmVmJ10gJiZcbiAgICAgICAgICAvLyBUT0RPKHByYXRlZWtiaEApOiBSZXBsYWNlIHRoaXMgd2l0aCBjb25zdCBmcm9tIGBjb25zdGFudHNgIHdoZW4gdGhlIHRyZWUgc2hha2luZyB3b3Jrcy5cbiAgICAgICAgICBbXG4gICAgICAgICAgICAnaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vdXNlLnR5cGVraXQubmV0LycsXG4gICAgICAgICAgXS5zb21lKCh1cmwpID0+IGMucHJvcHNbJ2hyZWYnXS5zdGFydHNXaXRoKHVybCkpXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IG5ld1Byb3BzID0geyAuLi4oYy5wcm9wcyB8fCB7fSkgfVxuICAgICAgICAgIG5ld1Byb3BzWydkYXRhLWhyZWYnXSA9IG5ld1Byb3BzWydocmVmJ11cbiAgICAgICAgICBuZXdQcm9wc1snaHJlZiddID0gdW5kZWZpbmVkXG5cbiAgICAgICAgICAvLyBBZGQgdGhpcyBhdHRyaWJ1dGUgdG8gbWFrZSBpdCBlYXN5IHRvIGlkZW50aWZ5IG9wdGltaXplZCB0YWdzXG4gICAgICAgICAgbmV3UHJvcHNbJ2RhdGEtb3B0aW1pemVkLWZvbnRzJ10gPSB0cnVlXG5cbiAgICAgICAgICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGMsIG5ld1Byb3BzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGMsIHsga2V5IH0pXG4gICAgfSlcbn1cblxuLyoqXG4gKiBUaGlzIGNvbXBvbmVudCBpbmplY3RzIGVsZW1lbnRzIHRvIGA8aGVhZD5gIG9mIHlvdXIgcGFnZS5cbiAqIFRvIGF2b2lkIGR1cGxpY2F0ZWQgYHRhZ3NgIGluIGA8aGVhZD5gIHlvdSBjYW4gdXNlIHRoZSBga2V5YCBwcm9wZXJ0eSwgd2hpY2ggd2lsbCBtYWtlIHN1cmUgZXZlcnkgdGFnIGlzIG9ubHkgcmVuZGVyZWQgb25jZS5cbiAqL1xuZnVuY3Rpb24gSGVhZCh7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZSB9KSB7XG4gIGNvbnN0IGFtcFN0YXRlID0gdXNlQ29udGV4dChBbXBTdGF0ZUNvbnRleHQpXG4gIGNvbnN0IGhlYWRNYW5hZ2VyID0gdXNlQ29udGV4dChIZWFkTWFuYWdlckNvbnRleHQpXG4gIHJldHVybiAoXG4gICAgPEVmZmVjdFxuICAgICAgcmVkdWNlQ29tcG9uZW50c1RvU3RhdGU9e3JlZHVjZUNvbXBvbmVudHN9XG4gICAgICBoZWFkTWFuYWdlcj17aGVhZE1hbmFnZXJ9XG4gICAgICBpbkFtcE1vZGU9e2lzSW5BbXBNb2RlKGFtcFN0YXRlKX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9FZmZlY3Q+XG4gIClcbn1cblxuLy8gVE9ETzogUmVtb3ZlIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2VcbkhlYWQucmV3aW5kID0gKCkgPT4ge31cblxuZXhwb3J0IGRlZmF1bHQgSGVhZFxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/next-server/lib/head.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/next-server/lib/side-effect.js": +/*!***************************************************************!*\ + !*** ./node_modules/next/dist/next-server/lib/side-effect.js ***! + \***************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nvar _toConsumableArray = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/toConsumableArray */ \"./node_modules/next/node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n\nvar _classCallCheck = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/classCallCheck */ \"./node_modules/next/node_modules/@babel/runtime/helpers/classCallCheck.js\");\n\nvar _createClass = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/createClass */ \"./node_modules/next/node_modules/@babel/runtime/helpers/createClass.js\");\n\nvar _assertThisInitialized = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/assertThisInitialized */ \"./node_modules/next/node_modules/@babel/runtime/helpers/assertThisInitialized.js\");\n\nvar _inherits = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/inherits */ \"./node_modules/next/node_modules/@babel/runtime/helpers/inherits.js\");\n\nvar _possibleConstructorReturn = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/next/node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n\nvar _getPrototypeOf = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/getPrototypeOf */ \"./node_modules/next/node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _react = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n\nvar isServer = false;\n\nvar _default = /*#__PURE__*/function (_react$Component) {\n _inherits(_default, _react$Component);\n\n var _super = _createSuper(_default);\n\n function _default(props) {\n var _this;\n\n _classCallCheck(this, _default);\n\n _this = _super.call(this, props);\n _this._hasHeadManager = void 0;\n\n _this.emitChange = function () {\n if (_this._hasHeadManager) {\n _this.props.headManager.updateHead(_this.props.reduceComponentsToState(_toConsumableArray(_this.props.headManager.mountedInstances), _this.props));\n }\n };\n\n _this._hasHeadManager = _this.props.headManager && _this.props.headManager.mountedInstances;\n\n if (isServer && _this._hasHeadManager) {\n _this.props.headManager.mountedInstances.add(_assertThisInitialized(_this));\n\n _this.emitChange();\n }\n\n return _this;\n }\n\n _createClass(_default, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n if (this._hasHeadManager) {\n this.props.headManager.mountedInstances.add(this);\n }\n\n this.emitChange();\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n this.emitChange();\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n if (this._hasHeadManager) {\n this.props.headManager.mountedInstances[\"delete\"](this);\n }\n\n this.emitChange();\n }\n }, {\n key: \"render\",\n value: function render() {\n return null;\n }\n }]);\n\n return _default;\n}(_react.Component);\n\nexports[\"default\"] = _default;\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../compiled/webpack/module.js */ \"./node_modules/next/dist/compiled/webpack/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uLy4uL25leHQtc2VydmVyL2xpYi9zaWRlLWVmZmVjdC50c3g/MTNiNyJdLCJuYW1lcyI6WyJpc1NlcnZlciIsImNvbnN0cnVjdG9yIiwiX2hhc0hlYWRNYW5hZ2VyIiwiZW1pdENoYW5nZSIsImNvbXBvbmVudERpZE1vdW50IiwiY29tcG9uZW50RGlkVXBkYXRlIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJyZW5kZXIiLCJDb21wb25lbnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBRUEsSUFBTUEsUUFBTjs7SUFjZSxROzs7OztBQWNiQyxvQkFBVyxLQUFYQSxFQUF3QjtBQUFBOztBQUFBOztBQUN0QjtBQURzQixVQWJoQkMsZUFhZ0I7O0FBQUEsVUFYeEJDLFVBV3dCLEdBWFgsWUFBWTtBQUN2QixVQUFJLE1BQUosaUJBQTBCO0FBQ3hCLDJDQUNFLHVEQUNNLHdCQUROLG1CQUVFLE1BSEosS0FDRSxDQURGO0FBT0g7QUFFdUI7O0FBRXRCLDRCQUNFLDJCQUEwQix3QkFENUI7O0FBR0EsUUFBSUgsUUFBUSxJQUFJLE1BQWhCLGlCQUFzQztBQUNwQzs7QUFDQTtBQUVIOztBQVR1QjtBQVV4Qkk7Ozs7d0NBQW9CO0FBQ2xCLFVBQUksS0FBSixpQkFBMEI7QUFDeEI7QUFFRjs7QUFBQTtBQUVGQzs7O3lDQUFxQjtBQUNuQjtBQUVGQzs7OzJDQUF1QjtBQUNyQixVQUFJLEtBQUosaUJBQTBCO0FBQ3hCO0FBRUY7O0FBQUE7QUFHRkM7Ozs2QkFBUztBQUNQO0FBekNvRDs7OztFQUEzQkMsZ0IiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L25leHQtc2VydmVyL2xpYi9zaWRlLWVmZmVjdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCdcblxuY29uc3QgaXNTZXJ2ZXIgPSB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJ1xuXG50eXBlIFN0YXRlID0gSlNYLkVsZW1lbnRbXSB8IHVuZGVmaW5lZFxuXG50eXBlIFNpZGVFZmZlY3RQcm9wcyA9IHtcbiAgcmVkdWNlQ29tcG9uZW50c1RvU3RhdGU6IDxUPihcbiAgICBjb21wb25lbnRzOiBBcnJheTxSZWFjdC5SZWFjdEVsZW1lbnQ8YW55Pj4sXG4gICAgcHJvcHM6IFRcbiAgKSA9PiBTdGF0ZVxuICBoYW5kbGVTdGF0ZUNoYW5nZT86IChzdGF0ZTogU3RhdGUpID0+IHZvaWRcbiAgaGVhZE1hbmFnZXI6IGFueVxuICBpbkFtcE1vZGU/OiBib29sZWFuXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgQ29tcG9uZW50PFNpZGVFZmZlY3RQcm9wcz4ge1xuICBwcml2YXRlIF9oYXNIZWFkTWFuYWdlcjogYm9vbGVhblxuXG4gIGVtaXRDaGFuZ2UgPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKHRoaXMuX2hhc0hlYWRNYW5hZ2VyKSB7XG4gICAgICB0aGlzLnByb3BzLmhlYWRNYW5hZ2VyLnVwZGF0ZUhlYWQoXG4gICAgICAgIHRoaXMucHJvcHMucmVkdWNlQ29tcG9uZW50c1RvU3RhdGUoXG4gICAgICAgICAgWy4uLnRoaXMucHJvcHMuaGVhZE1hbmFnZXIubW91bnRlZEluc3RhbmNlc10sXG4gICAgICAgICAgdGhpcy5wcm9wc1xuICAgICAgICApXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKVxuICAgIHRoaXMuX2hhc0hlYWRNYW5hZ2VyID1cbiAgICAgIHRoaXMucHJvcHMuaGVhZE1hbmFnZXIgJiYgdGhpcy5wcm9wcy5oZWFkTWFuYWdlci5tb3VudGVkSW5zdGFuY2VzXG5cbiAgICBpZiAoaXNTZXJ2ZXIgJiYgdGhpcy5faGFzSGVhZE1hbmFnZXIpIHtcbiAgICAgIHRoaXMucHJvcHMuaGVhZE1hbmFnZXIubW91bnRlZEluc3RhbmNlcy5hZGQodGhpcylcbiAgICAgIHRoaXMuZW1pdENoYW5nZSgpXG4gICAgfVxuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGlmICh0aGlzLl9oYXNIZWFkTWFuYWdlcikge1xuICAgICAgdGhpcy5wcm9wcy5oZWFkTWFuYWdlci5tb3VudGVkSW5zdGFuY2VzLmFkZCh0aGlzKVxuICAgIH1cbiAgICB0aGlzLmVtaXRDaGFuZ2UoKVxuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICB0aGlzLmVtaXRDaGFuZ2UoKVxuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGlmICh0aGlzLl9oYXNIZWFkTWFuYWdlcikge1xuICAgICAgdGhpcy5wcm9wcy5oZWFkTWFuYWdlci5tb3VudGVkSW5zdGFuY2VzLmRlbGV0ZSh0aGlzKVxuICAgIH1cbiAgICB0aGlzLmVtaXRDaGFuZ2UoKVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/next-server/lib/side-effect.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/pages/_error.js": +/*!************************************************!*\ + !*** ./node_modules/next/dist/pages/_error.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nvar _classCallCheck = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/classCallCheck */ \"./node_modules/next/node_modules/@babel/runtime/helpers/classCallCheck.js\");\n\nvar _createClass = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/createClass */ \"./node_modules/next/node_modules/@babel/runtime/helpers/createClass.js\");\n\nvar _inherits = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/inherits */ \"./node_modules/next/node_modules/@babel/runtime/helpers/inherits.js\");\n\nvar _possibleConstructorReturn = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/next/node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n\nvar _getPrototypeOf = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/getPrototypeOf */ \"./node_modules/next/node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/next/node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\n\nvar _head = _interopRequireDefault(__webpack_require__(/*! ../next-server/lib/head */ \"./node_modules/next/dist/next-server/lib/head.js\"));\n\nvar statusCodes = {\n 400: 'Bad Request',\n 404: 'This page could not be found',\n 405: 'Method Not Allowed',\n 500: 'Internal Server Error'\n};\n\nfunction _getInitialProps(_ref) {\n var res = _ref.res,\n err = _ref.err;\n var statusCode = res && res.statusCode ? res.statusCode : err ? err.statusCode : 404;\n return {\n statusCode: statusCode\n };\n}\n/**\n* `Error` component used for handling errors.\n*/\n\n\nvar Error = /*#__PURE__*/function (_react$default$Compon) {\n _inherits(Error, _react$default$Compon);\n\n var _super = _createSuper(Error);\n\n function Error() {\n _classCallCheck(this, Error);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(Error, [{\n key: \"render\",\n value: function render() {\n var statusCode = this.props.statusCode;\n var title = this.props.title || statusCodes[statusCode] || 'An unexpected error has occurred';\n return /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n style: styles.error\n }, /*#__PURE__*/_react[\"default\"].createElement(_head[\"default\"], null, /*#__PURE__*/_react[\"default\"].createElement(\"title\", null, statusCode, \": \", title)), /*#__PURE__*/_react[\"default\"].createElement(\"div\", null, /*#__PURE__*/_react[\"default\"].createElement(\"style\", {\n dangerouslySetInnerHTML: {\n __html: 'body { margin: 0 }'\n }\n }), statusCode ? /*#__PURE__*/_react[\"default\"].createElement(\"h1\", {\n style: styles.h1\n }, statusCode) : null, /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n style: styles.desc\n }, /*#__PURE__*/_react[\"default\"].createElement(\"h2\", {\n style: styles.h2\n }, title, \".\"))));\n }\n }]);\n\n return Error;\n}(_react[\"default\"].Component);\n\nexports[\"default\"] = Error;\nError.displayName = 'ErrorPage';\nError.getInitialProps = _getInitialProps;\nError.origGetInitialProps = _getInitialProps;\nvar styles = {\n error: {\n color: '#000',\n background: '#fff',\n fontFamily: '-apple-system, BlinkMacSystemFont, Roboto, \"Segoe UI\", \"Fira Sans\", Avenir, \"Helvetica Neue\", \"Lucida Grande\", sans-serif',\n height: '100vh',\n textAlign: 'center',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center'\n },\n desc: {\n display: 'inline-block',\n textAlign: 'left',\n lineHeight: '49px',\n height: '49px',\n verticalAlign: 'middle'\n },\n h1: {\n display: 'inline-block',\n borderRight: '1px solid rgba(0, 0, 0,.3)',\n margin: 0,\n marginRight: '20px',\n padding: '10px 23px 10px 0',\n fontSize: '24px',\n fontWeight: 500,\n verticalAlign: 'top'\n },\n h2: {\n fontSize: '14px',\n fontWeight: 'normal',\n lineHeight: 'inherit',\n margin: 0,\n padding: 0\n }\n};\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../compiled/webpack/module.js */ \"./node_modules/next/dist/compiled/webpack/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3BhZ2VzL19lcnJvci50c3g/MDY3NyJdLCJuYW1lcyI6WyJzdGF0dXNDb2RlcyIsInN0YXR1c0NvZGUiLCJyZXMiLCJlcnIiLCJ0aXRsZSIsInN0eWxlcyIsIl9faHRtbCIsIlJlYWN0IiwiQ29tcG9uZW50IiwiRXJyb3IiLCJkaXNwbGF5TmFtZSIsImdldEluaXRpYWxQcm9wcyIsIl9nZXRJbml0aWFsUHJvcHMiLCJvcmlnR2V0SW5pdGlhbFByb3BzIiwiZXJyb3IiLCJjb2xvciIsImJhY2tncm91bmQiLCJmb250RmFtaWx5IiwiaGVpZ2h0IiwidGV4dEFsaWduIiwiZGlzcGxheSIsImZsZXhEaXJlY3Rpb24iLCJhbGlnbkl0ZW1zIiwianVzdGlmeUNvbnRlbnQiLCJkZXNjIiwibGluZUhlaWdodCIsInZlcnRpY2FsQWxpZ24iLCJoMSIsImJvcmRlclJpZ2h0IiwibWFyZ2luIiwibWFyZ2luUmlnaHQiLCJwYWRkaW5nIiwiZm9udFNpemUiLCJmb250V2VpZ2h0IiwiaDIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUdBLElBQU1BLFdBQXVDLEdBQUc7QUFDOUMsT0FEOEM7QUFFOUMsT0FGOEM7QUFHOUMsT0FIOEM7QUFJOUMsT0FKRjtBQUFnRCxDQUFoRDs7QUFZQSxnQ0FHc0Q7QUFBQSxNQUg1QixHQUc0QixRQUg1QixHQUc0QjtBQUFBLE1BSHRELEdBR3NELFFBSHRELEdBR3NEO0FBQ3BELE1BQU1DLFVBQVUsR0FDZEMsR0FBRyxJQUFJQSxHQUFHLENBQVZBLGFBQXdCQSxHQUFHLENBQTNCQSxhQUF5Q0MsR0FBRyxHQUFHQSxHQUFHLENBQU4sYUFEOUM7QUFFQSxTQUFPO0FBQUVGLGNBQVQsRUFBU0E7QUFBRixHQUFQO0FBR0Y7QUFBQTtBQUNBO0FBQ0E7OztJQUNlLEs7Ozs7Ozs7Ozs7Ozs7NkJBTUo7QUFBQSxVQUNELFVBREMsR0FDZ0IsS0FBdkIsS0FETyxDQUNELFVBREM7QUFFUCxVQUFNRyxLQUFLLEdBQ1Qsb0JBQ0FKLFdBQVcsQ0FEWCxVQUNXLENBRFgsSUFERjtBQUtBLDBCQUNFO0FBQUssYUFBSyxFQUFFSyxNQUFNLENBQWxCO0FBQUEsc0JBQ0UsZ0NBQUMsS0FBRCxnQ0FDRSxpRUFGSixLQUVJLENBREYsQ0FERixlQU1FLDBEQUNFO0FBQU8sK0JBQXVCLEVBQUU7QUFBRUMsZ0JBQU0sRUFEMUM7QUFDa0M7QUFBaEMsUUFERixFQUVHTCxVQUFVLGdCQUFHO0FBQUksYUFBSyxFQUFFSSxNQUFNLENBQWpCO0FBQUEsU0FBSCxVQUFHLENBQUgsR0FGYixtQkFHRTtBQUFLLGFBQUssRUFBRUEsTUFBTSxDQUFsQjtBQUFBLHNCQUNFO0FBQUksYUFBSyxFQUFFQSxNQUFNLENBQWpCO0FBQUEsZ0JBWFIsR0FXUSxDQURGLENBSEYsQ0FORixDQURGO0FBYnVFOzs7O0VBQWhDRSxrQkFBTUMsUzs7O0FBQTVCQyxLLENBQ1pDLFdBRFlELEdBQ0UsV0FERkE7QUFBQUEsSyxDQUdaRSxlQUhZRixHQUdNRyxnQkFITkg7QUFBQUEsSyxDQUlaSSxtQkFKWUosR0FJVUcsZ0JBSlZIO0FBZ0NyQixJQUFNSixNQUE0QyxHQUFHO0FBQ25EUyxPQUFLLEVBQUU7QUFDTEMsU0FBSyxFQURBO0FBRUxDLGNBQVUsRUFGTDtBQUdMQyxjQUFVLEVBSEw7QUFLTEMsVUFBTSxFQUxEO0FBTUxDLGFBQVMsRUFOSjtBQU9MQyxXQUFPLEVBUEY7QUFRTEMsaUJBQWEsRUFSUjtBQVNMQyxjQUFVLEVBVEw7QUFVTEMsa0JBQWMsRUFYbUM7QUFDNUMsR0FENEM7QUFjbkRDLE1BQUksRUFBRTtBQUNKSixXQUFPLEVBREg7QUFFSkQsYUFBUyxFQUZMO0FBR0pNLGNBQVUsRUFITjtBQUlKUCxVQUFNLEVBSkY7QUFLSlEsaUJBQWEsRUFuQm9DO0FBYzdDLEdBZDZDO0FBc0JuREMsSUFBRSxFQUFFO0FBQ0ZQLFdBQU8sRUFETDtBQUVGUSxlQUFXLEVBRlQ7QUFHRkMsVUFBTSxFQUhKO0FBSUZDLGVBQVcsRUFKVDtBQUtGQyxXQUFPLEVBTEw7QUFNRkMsWUFBUSxFQU5OO0FBT0ZDLGNBQVUsRUFQUjtBQVFGUCxpQkFBYSxFQTlCb0M7QUFzQi9DLEdBdEIrQztBQWlDbkRRLElBQUUsRUFBRTtBQUNGRixZQUFRLEVBRE47QUFFRkMsY0FBVSxFQUZSO0FBR0ZSLGNBQVUsRUFIUjtBQUlGSSxVQUFNLEVBSko7QUFLRkUsV0FBTyxFQXRDWDtBQWlDTTtBQWpDK0MsQ0FBckQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3BhZ2VzL19lcnJvci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCBIZWFkIGZyb20gJy4uL25leHQtc2VydmVyL2xpYi9oZWFkJ1xuaW1wb3J0IHsgTmV4dFBhZ2VDb250ZXh0IH0gZnJvbSAnLi4vbmV4dC1zZXJ2ZXIvbGliL3V0aWxzJ1xuXG5jb25zdCBzdGF0dXNDb2RlczogeyBbY29kZTogbnVtYmVyXTogc3RyaW5nIH0gPSB7XG4gIDQwMDogJ0JhZCBSZXF1ZXN0JyxcbiAgNDA0OiAnVGhpcyBwYWdlIGNvdWxkIG5vdCBiZSBmb3VuZCcsXG4gIDQwNTogJ01ldGhvZCBOb3QgQWxsb3dlZCcsXG4gIDUwMDogJ0ludGVybmFsIFNlcnZlciBFcnJvcicsXG59XG5cbmV4cG9ydCB0eXBlIEVycm9yUHJvcHMgPSB7XG4gIHN0YXR1c0NvZGU6IG51bWJlclxuICB0aXRsZT86IHN0cmluZ1xufVxuXG5mdW5jdGlvbiBfZ2V0SW5pdGlhbFByb3BzKHtcbiAgcmVzLFxuICBlcnIsXG59OiBOZXh0UGFnZUNvbnRleHQpOiBQcm9taXNlPEVycm9yUHJvcHM+IHwgRXJyb3JQcm9wcyB7XG4gIGNvbnN0IHN0YXR1c0NvZGUgPVxuICAgIHJlcyAmJiByZXMuc3RhdHVzQ29kZSA/IHJlcy5zdGF0dXNDb2RlIDogZXJyID8gZXJyLnN0YXR1c0NvZGUhIDogNDA0XG4gIHJldHVybiB7IHN0YXR1c0NvZGUgfVxufVxuXG4vKipcbiAqIGBFcnJvcmAgY29tcG9uZW50IHVzZWQgZm9yIGhhbmRsaW5nIGVycm9ycy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXJyb3I8UCA9IHt9PiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxQICYgRXJyb3JQcm9wcz4ge1xuICBzdGF0aWMgZGlzcGxheU5hbWUgPSAnRXJyb3JQYWdlJ1xuXG4gIHN0YXRpYyBnZXRJbml0aWFsUHJvcHMgPSBfZ2V0SW5pdGlhbFByb3BzXG4gIHN0YXRpYyBvcmlnR2V0SW5pdGlhbFByb3BzID0gX2dldEluaXRpYWxQcm9wc1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IHN0YXR1c0NvZGUgfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCB0aXRsZSA9XG4gICAgICB0aGlzLnByb3BzLnRpdGxlIHx8XG4gICAgICBzdGF0dXNDb2Rlc1tzdGF0dXNDb2RlXSB8fFxuICAgICAgJ0FuIHVuZXhwZWN0ZWQgZXJyb3IgaGFzIG9jY3VycmVkJ1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgc3R5bGU9e3N0eWxlcy5lcnJvcn0+XG4gICAgICAgIDxIZWFkPlxuICAgICAgICAgIDx0aXRsZT5cbiAgICAgICAgICAgIHtzdGF0dXNDb2RlfToge3RpdGxlfVxuICAgICAgICAgIDwvdGl0bGU+XG4gICAgICAgIDwvSGVhZD5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8c3R5bGUgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3sgX19odG1sOiAnYm9keSB7IG1hcmdpbjogMCB9JyB9fSAvPlxuICAgICAgICAgIHtzdGF0dXNDb2RlID8gPGgxIHN0eWxlPXtzdHlsZXMuaDF9PntzdGF0dXNDb2RlfTwvaDE+IDogbnVsbH1cbiAgICAgICAgICA8ZGl2IHN0eWxlPXtzdHlsZXMuZGVzY30+XG4gICAgICAgICAgICA8aDIgc3R5bGU9e3N0eWxlcy5oMn0+e3RpdGxlfS48L2gyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxufVxuXG5jb25zdCBzdHlsZXM6IHsgW2s6IHN0cmluZ106IFJlYWN0LkNTU1Byb3BlcnRpZXMgfSA9IHtcbiAgZXJyb3I6IHtcbiAgICBjb2xvcjogJyMwMDAnLFxuICAgIGJhY2tncm91bmQ6ICcjZmZmJyxcbiAgICBmb250RmFtaWx5OlxuICAgICAgJy1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgUm9ib3RvLCBcIlNlZ29lIFVJXCIsIFwiRmlyYSBTYW5zXCIsIEF2ZW5pciwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBcIkx1Y2lkYSBHcmFuZGVcIiwgc2Fucy1zZXJpZicsXG4gICAgaGVpZ2h0OiAnMTAwdmgnLFxuICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgfSxcblxuICBkZXNjOiB7XG4gICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgdGV4dEFsaWduOiAnbGVmdCcsXG4gICAgbGluZUhlaWdodDogJzQ5cHgnLFxuICAgIGhlaWdodDogJzQ5cHgnLFxuICAgIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxuICB9LFxuXG4gIGgxOiB7XG4gICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgYm9yZGVyUmlnaHQ6ICcxcHggc29saWQgcmdiYSgwLCAwLCAwLC4zKScsXG4gICAgbWFyZ2luOiAwLFxuICAgIG1hcmdpblJpZ2h0OiAnMjBweCcsXG4gICAgcGFkZGluZzogJzEwcHggMjNweCAxMHB4IDAnLFxuICAgIGZvbnRTaXplOiAnMjRweCcsXG4gICAgZm9udFdlaWdodDogNTAwLFxuICAgIHZlcnRpY2FsQWxpZ246ICd0b3AnLFxuICB9LFxuXG4gIGgyOiB7XG4gICAgZm9udFNpemU6ICcxNHB4JyxcbiAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcbiAgICBsaW5lSGVpZ2h0OiAnaW5oZXJpdCcsXG4gICAgbWFyZ2luOiAwLFxuICAgIHBhZGRpbmc6IDAsXG4gIH0sXG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/pages/_error.js\n"); + +/***/ }), + +/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/arrayLikeToArray.js": +/*!***********************************************************************************!*\ + !*** ./node_modules/next/node_modules/@babel/runtime/helpers/arrayLikeToArray.js ***! + \***********************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nmodule.exports = _arrayLikeToArray;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlMaWtlVG9BcnJheS5qcz9lZGU2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7O0FBRUEsd0NBQXdDLFNBQVM7QUFDakQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlMaWtlVG9BcnJheS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykge1xuICAgIGFycjJbaV0gPSBhcnJbaV07XG4gIH1cblxuICByZXR1cm4gYXJyMjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlMaWtlVG9BcnJheTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/arrayLikeToArray.js\n"); + +/***/ }), + +/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/arrayWithoutHoles.js": +/*!************************************************************************************!*\ + !*** ./node_modules/next/node_modules/@babel/runtime/helpers/arrayWithoutHoles.js ***! + \************************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("var arrayLikeToArray = __webpack_require__(/*! ./arrayLikeToArray */ \"./node_modules/next/node_modules/@babel/runtime/helpers/arrayLikeToArray.js\");\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\n\nmodule.exports = _arrayWithoutHoles;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRob3V0SG9sZXMuanM/ZTVmMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1QkFBdUIsbUJBQU8sQ0FBQyx1R0FBb0I7O0FBRW5EO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9uZXh0L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5V2l0aG91dEhvbGVzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGFycmF5TGlrZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9hcnJheUxpa2VUb0FycmF5XCIpO1xuXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KGFycik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5V2l0aG91dEhvbGVzOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/arrayWithoutHoles.js\n"); + +/***/ }), + +/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/assertThisInitialized.js": +/*!****************************************************************************************!*\ + !*** ./node_modules/next/node_modules/@babel/runtime/helpers/assertThisInitialized.js ***! + \****************************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nmodule.exports = _assertThisInitialized;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzP2E5NzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9uZXh0L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2Fzc2VydFRoaXNJbml0aWFsaXplZDsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/assertThisInitialized.js\n"); + +/***/ }), + +/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/classCallCheck.js": +/*!*********************************************************************************!*\ + !*** ./node_modules/next/node_modules/@babel/runtime/helpers/classCallCheck.js ***! + \*********************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nmodule.exports = _classCallCheck;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanM/ZmM2NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9jbGFzc0NhbGxDaGVjazsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/classCallCheck.js\n"); + +/***/ }), + +/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/createClass.js": +/*!******************************************************************************!*\ + !*** ./node_modules/next/node_modules/@babel/runtime/helpers/createClass.js ***! + \******************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("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) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nmodule.exports = _createClass;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanM/OGI2NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9uZXh0L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9jcmVhdGVDbGFzczsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/createClass.js\n"); + +/***/ }), + +/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/defineProperty.js": +/*!*********************************************************************************!*\ + !*** ./node_modules/next/node_modules/@babel/runtime/helpers/defineProperty.js ***! + \*********************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanM/YTA4ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfZGVmaW5lUHJvcGVydHk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/defineProperty.js\n"); + +/***/ }), + +/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/getPrototypeOf.js": +/*!*********************************************************************************!*\ + !*** ./node_modules/next/node_modules/@babel/runtime/helpers/getPrototypeOf.js ***! + \*********************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("function _getPrototypeOf(o) {\n module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nmodule.exports = _getPrototypeOf;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanM/NGY0NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9nZXRQcm90b3R5cGVPZi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZjsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/getPrototypeOf.js\n"); + +/***/ }), + +/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/inherits.js": +/*!***************************************************************************!*\ + !*** ./node_modules/next/node_modules/@babel/runtime/helpers/inherits.js ***! + \***************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("var setPrototypeOf = __webpack_require__(/*! ./setPrototypeOf */ \"./node_modules/next/node_modules/@babel/runtime/helpers/setPrototypeOf.js\");\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inherits;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanM/ZTNjNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxQkFBcUIsbUJBQU8sQ0FBQyxtR0FBa0I7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9zZXRQcm90b3R5cGVPZlwiKTtcblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pbmhlcml0czsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/inherits.js\n"); + +/***/ }), + +/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/interopRequireDefault.js": +/*!****************************************************************************************!*\ + !*** ./node_modules/next/node_modules/@babel/runtime/helpers/interopRequireDefault.js ***! + \****************************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nmodule.exports = _interopRequireDefault;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0LmpzPzAyYmEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9uZXh0L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7XG4gICAgXCJkZWZhdWx0XCI6IG9ialxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQ7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/interopRequireDefault.js\n"); + +/***/ }), + +/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/iterableToArray.js": +/*!**********************************************************************************!*\ + !*** ./node_modules/next/node_modules/@babel/runtime/helpers/iterableToArray.js ***! + \**********************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}\n\nmodule.exports = _iterableToArray;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzP2FlNTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoaXRlcikpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pdGVyYWJsZVRvQXJyYXk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/iterableToArray.js\n"); + +/***/ }), + +/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/nonIterableSpread.js": +/*!************************************************************************************!*\ + !*** ./node_modules/next/node_modules/@babel/runtime/helpers/nonIterableSpread.js ***! + \************************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableSpread;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvbm9uSXRlcmFibGVTcHJlYWQuanM/OTA2ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlU3ByZWFkOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/nonIterableSpread.js\n"); + +/***/ }), + +/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/possibleConstructorReturn.js": +/*!********************************************************************************************!*\ + !*** ./node_modules/next/node_modules/@babel/runtime/helpers/possibleConstructorReturn.js ***! + \********************************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ \"./node_modules/next/node_modules/@babel/runtime/helpers/typeof.js\");\n\nvar assertThisInitialized = __webpack_require__(/*! ./assertThisInitialized */ \"./node_modules/next/node_modules/@babel/runtime/helpers/assertThisInitialized.js\");\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return assertThisInitialized(self);\n}\n\nmodule.exports = _possibleConstructorReturn;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcz9iNDIwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyx3R0FBK0I7O0FBRXJELDRCQUE0QixtQkFBTyxDQUFDLGlIQUF5Qjs7QUFFN0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9uZXh0L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZlwiKTtcblxudmFyIGFzc2VydFRoaXNJbml0aWFsaXplZCA9IHJlcXVpcmUoXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiKTtcblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9XG5cbiAgcmV0dXJuIGFzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\n"); + +/***/ }), + +/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/setPrototypeOf.js": +/*!*********************************************************************************!*\ + !*** ./node_modules/next/node_modules/@babel/runtime/helpers/setPrototypeOf.js ***! + \*********************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2V0UHJvdG90eXBlT2YuanM/YWExYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXRQcm90b3R5cGVPZi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuXG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/setPrototypeOf.js\n"); + +/***/ }), + +/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/toConsumableArray.js": +/*!************************************************************************************!*\ + !*** ./node_modules/next/node_modules/@babel/runtime/helpers/toConsumableArray.js ***! + \************************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("var arrayWithoutHoles = __webpack_require__(/*! ./arrayWithoutHoles */ \"./node_modules/next/node_modules/@babel/runtime/helpers/arrayWithoutHoles.js\");\n\nvar iterableToArray = __webpack_require__(/*! ./iterableToArray */ \"./node_modules/next/node_modules/@babel/runtime/helpers/iterableToArray.js\");\n\nvar unsupportedIterableToArray = __webpack_require__(/*! ./unsupportedIterableToArray */ \"./node_modules/next/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js\");\n\nvar nonIterableSpread = __webpack_require__(/*! ./nonIterableSpread */ \"./node_modules/next/node_modules/@babel/runtime/helpers/nonIterableSpread.js\");\n\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\n\nmodule.exports = _toConsumableArray;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXkuanM/OThmYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3QkFBd0IsbUJBQU8sQ0FBQyx5R0FBcUI7O0FBRXJELHNCQUFzQixtQkFBTyxDQUFDLHFHQUFtQjs7QUFFakQsaUNBQWlDLG1CQUFPLENBQUMsMkhBQThCOztBQUV2RSx3QkFBd0IsbUJBQU8sQ0FBQyx5R0FBcUI7O0FBRXJEO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9uZXh0L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGFycmF5V2l0aG91dEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRob3V0SG9sZXNcIik7XG5cbnZhciBpdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXlcIik7XG5cbnZhciB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5XCIpO1xuXG52YXIgbm9uSXRlcmFibGVTcHJlYWQgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVNwcmVhZFwiKTtcblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IG5vbkl0ZXJhYmxlU3ByZWFkKCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3RvQ29uc3VtYWJsZUFycmF5OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/toConsumableArray.js\n"); + +/***/ }), + +/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/typeof.js": +/*!*************************************************************************!*\ + !*** ./node_modules/next/node_modules/@babel/runtime/helpers/typeof.js ***! + \*************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n module.exports = _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n module.exports = _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = _typeof;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzPzBiZTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikge1xuICAgIG1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIG1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIF90eXBlb2Yob2JqKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/typeof.js\n"); + +/***/ }), + +/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js": +/*!*********************************************************************************************!*\ + !*** ./node_modules/next/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js ***! + \*********************************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("var arrayLikeToArray = __webpack_require__(/*! ./arrayLikeToArray */ \"./node_modules/next/node_modules/@babel/runtime/helpers/arrayLikeToArray.js\");\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\n\nmodule.exports = _unsupportedIterableToArray;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanM/MjljOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1QkFBdUIsbUJBQU8sQ0FBQyx1R0FBb0I7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBhcnJheUxpa2VUb0FycmF5ID0gcmVxdWlyZShcIi4vYXJyYXlMaWtlVG9BcnJheVwiKTtcblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js\n"); + +/***/ }), + +/***/ "./node_modules/prop-types/checkPropTypes.js": +/*!***************************************************!*\ + !*** ./node_modules/prop-types/checkPropTypes.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nvar printWarning = function() {};\n\nif (true) {\n var ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ \"./node_modules/prop-types/lib/ReactPropTypesSecret.js\");\n var loggedTypeFailures = {};\n var has = __webpack_require__(/*! ./lib/has */ \"./node_modules/prop-types/lib/has.js\");\n\n printWarning = function(text) {\n var message = 'Warning: ' + text;\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) { /**/ }\n };\n}\n\n/**\n * Assert that the values match with the type specs.\n * Error messages are memorized and will only be shown once.\n *\n * @param {object} typeSpecs Map of name to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @param {string} componentName Name of the component for error messages.\n * @param {?Function} getStack Returns the component stack.\n * @private\n */\nfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n if (true) {\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error;\n // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n var err = Error(\n (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +\n 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' +\n 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'\n );\n err.name = 'Invariant Violation';\n throw err;\n }\n error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\n } catch (ex) {\n error = ex;\n }\n if (error && !(error instanceof Error)) {\n printWarning(\n (componentName || 'React class') + ': type specification of ' +\n location + ' `' + typeSpecName + '` is invalid; the type checker ' +\n 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +\n 'You may have forgotten to pass an argument to the type checker ' +\n 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +\n 'shape all require an argument).'\n );\n }\n if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error.message] = true;\n\n var stack = getStack ? getStack() : '';\n\n printWarning(\n 'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')\n );\n }\n }\n }\n }\n}\n\n/**\n * Resets warning cache when testing.\n *\n * @private\n */\ncheckPropTypes.resetWarningCache = function() {\n if (true) {\n loggedTypeFailures = {};\n }\n}\n\nmodule.exports = checkPropTypes;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvY2hlY2tQcm9wVHlwZXMuanM/YTE1YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7O0FBRWI7O0FBRUEsSUFBSSxJQUFxQztBQUN6Qyw2QkFBNkIsbUJBQU8sQ0FBQyx5RkFBNEI7QUFDakU7QUFDQSxZQUFZLG1CQUFPLENBQUMsdURBQVc7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxZQUFZO0FBQ2pCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxVQUFVO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLE1BQU0sSUFBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRHQUE0RztBQUM1RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkRBQTJEO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxJQUFxQztBQUMzQztBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9jaGVja1Byb3BUeXBlcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcbiAgdmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xuICB2YXIgaGFzID0gcmVxdWlyZSgnLi9saWIvaGFzJyk7XG5cbiAgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24odGV4dCkge1xuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyB0ZXh0O1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKHgpIHsgLyoqLyB9XG4gIH07XG59XG5cbi8qKlxuICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlcyBtYXRjaCB3aXRoIHRoZSB0eXBlIHNwZWNzLlxuICogRXJyb3IgbWVzc2FnZXMgYXJlIG1lbW9yaXplZCBhbmQgd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHR5cGVTcGVjcyBNYXAgb2YgbmFtZSB0byBhIFJlYWN0UHJvcFR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgUnVudGltZSB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIHR5cGUtY2hlY2tlZFxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gXCJwcm9wXCIsIFwiY29udGV4dFwiLCBcImNoaWxkIGNvbnRleHRcIlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbXBvbmVudE5hbWUgTmFtZSBvZiB0aGUgY29tcG9uZW50IGZvciBlcnJvciBtZXNzYWdlcy5cbiAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBnZXRTdGFjayBSZXR1cm5zIHRoZSBjb21wb25lbnQgc3RhY2suXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGdldFN0YWNrKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXG4gICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcbiAgICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGVyciA9IEVycm9yKFxuICAgICAgICAgICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgK1xuICAgICAgICAgICAgICAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nICtcbiAgICAgICAgICAgICAgJ1RoaXMgb2Z0ZW4gaGFwcGVucyBiZWNhdXNlIG9mIHR5cG9zIHN1Y2ggYXMgYFByb3BUeXBlcy5mdW5jdGlvbmAgaW5zdGVhZCBvZiBgUHJvcFR5cGVzLmZ1bmNgLidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXJyb3IgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBlcnJvciA9IGV4O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvciAmJiAhKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJyArXG4gICAgICAgICAgICBsb2NhdGlvbiArICcgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgK1xuICAgICAgICAgICAgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICcgKyB0eXBlb2YgZXJyb3IgKyAnLiAnICtcbiAgICAgICAgICAgICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICtcbiAgICAgICAgICAgICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgK1xuICAgICAgICAgICAgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yLm1lc3NhZ2VdID0gdHJ1ZTtcblxuICAgICAgICAgIHZhciBzdGFjayA9IGdldFN0YWNrID8gZ2V0U3RhY2soKSA6ICcnO1xuXG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgJ0ZhaWxlZCAnICsgbG9jYXRpb24gKyAnIHR5cGU6ICcgKyBlcnJvci5tZXNzYWdlICsgKHN0YWNrICE9IG51bGwgPyBzdGFjayA6ICcnKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXNldHMgd2FybmluZyBjYWNoZSB3aGVuIHRlc3RpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2hlY2tQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNoZWNrUHJvcFR5cGVzO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/prop-types/checkPropTypes.js\n"); + +/***/ }), + +/***/ "./node_modules/prop-types/lib/ReactPropTypesSecret.js": +/*!*************************************************************!*\ + !*** ./node_modules/prop-types/lib/ReactPropTypesSecret.js ***! + \*************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzPzU5YjAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhOztBQUViOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9ICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/prop-types/lib/ReactPropTypesSecret.js\n"); + +/***/ }), + +/***/ "./node_modules/prop-types/lib/has.js": +/*!********************************************!*\ + !*** ./node_modules/prop-types/lib/has.js ***! + \********************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("module.exports = Function.call.bind(Object.prototype.hasOwnProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbGliL2hhcy5qcz81MzM4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbGliL2hhcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/prop-types/lib/has.js\n"); + +/***/ }), + +/***/ "./node_modules/react/cjs/react.development.js": +/*!*****************************************************!*\ + !*** ./node_modules/react/cjs/react.development.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("/** @license React v16.8.6\n * react.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\n\n\nif (true) {\n (function() {\n'use strict';\n\nvar _assign = __webpack_require__(/*! object-assign */ \"./node_modules/next/dist/build/polyfills/object-assign.js\");\nvar checkPropTypes = __webpack_require__(/*! prop-types/checkPropTypes */ \"./node_modules/prop-types/checkPropTypes.js\");\n\n// TODO: this is special because it gets imported during build.\n\nvar ReactVersion = '16.8.6';\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\n\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace;\n\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\n\nvar MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\n\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n return null;\n}\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar validateFormat = function () {};\n\n{\n validateFormat = function (format) {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n };\n}\n\nfunction invariant(condition, format, a, b, c, d, e, f) {\n validateFormat(format);\n\n if (!condition) {\n var error = void 0;\n if (format === undefined) {\n error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(format.replace(/%s/g, function () {\n return args[argIndex++];\n }));\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n}\n\n// Relying on the `invariant()` implementation lets us\n// preserve the format and params in the www builds.\n\n/**\n * Forked from fbjs/warning:\n * https://github.com/facebook/fbjs/blob/e66ba20ad5be433eb54423f2b097d829324d9de6/packages/fbjs/src/__forks__/warning.js\n *\n * Only change is we use console.warn instead of console.error,\n * and do nothing when 'console' is not supported.\n * This really simplifies the code.\n * ---\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar lowPriorityWarning = function () {};\n\n{\n var printWarning = function (format) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var argIndex = 0;\n var message = 'Warning: ' + format.replace(/%s/g, function () {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.warn(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n\n lowPriorityWarning = function (condition, format) {\n if (format === undefined) {\n throw new Error('`lowPriorityWarning(condition, format, ...args)` requires a warning ' + 'message argument');\n }\n if (!condition) {\n for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n args[_key2 - 2] = arguments[_key2];\n }\n\n printWarning.apply(undefined, [format].concat(args));\n }\n };\n}\n\nvar lowPriorityWarning$1 = lowPriorityWarning;\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warningWithoutStack = function () {};\n\n{\n warningWithoutStack = function (condition, format) {\n for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n if (format === undefined) {\n throw new Error('`warningWithoutStack(condition, format, ...args)` requires a warning ' + 'message argument');\n }\n if (args.length > 8) {\n // Check before the condition to catch violations early.\n throw new Error('warningWithoutStack() currently supports at most 8 arguments.');\n }\n if (condition) {\n return;\n }\n if (typeof console !== 'undefined') {\n var argsWithFormat = args.map(function (item) {\n return '' + item;\n });\n argsWithFormat.unshift('Warning: ' + format);\n\n // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n Function.prototype.apply.call(console.error, console, argsWithFormat);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n var argIndex = 0;\n var message = 'Warning: ' + format.replace(/%s/g, function () {\n return args[argIndex++];\n });\n throw new Error(message);\n } catch (x) {}\n };\n}\n\nvar warningWithoutStack$1 = warningWithoutStack;\n\nvar didWarnStateUpdateForUnmountedComponent = {};\n\nfunction warnNoop(publicInstance, callerName) {\n {\n var _constructor = publicInstance.constructor;\n var componentName = _constructor && (_constructor.displayName || _constructor.name) || 'ReactClass';\n var warningKey = componentName + '.' + callerName;\n if (didWarnStateUpdateForUnmountedComponent[warningKey]) {\n return;\n }\n warningWithoutStack$1(false, \"Can't call %s on a component that is not yet mounted. \" + 'This is a no-op, but it might indicate a bug in your application. ' + 'Instead, assign to `this.state` directly or define a `state = {};` ' + 'class property with the desired state in the %s component.', callerName, componentName);\n didWarnStateUpdateForUnmountedComponent[warningKey] = true;\n }\n}\n\n/**\n * This is the abstract API for an update queue.\n */\nvar ReactNoopUpdateQueue = {\n /**\n * Checks whether or not this composite component is mounted.\n * @param {ReactClass} publicInstance The instance we want to test.\n * @return {boolean} True if mounted, false otherwise.\n * @protected\n * @final\n */\n isMounted: function (publicInstance) {\n return false;\n },\n\n /**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {?function} callback Called after component is updated.\n * @param {?string} callerName name of the calling function in the public API.\n * @internal\n */\n enqueueForceUpdate: function (publicInstance, callback, callerName) {\n warnNoop(publicInstance, 'forceUpdate');\n },\n\n /**\n * Replaces all of the state. Always use this or `setState` to mutate state.\n * You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} completeState Next state.\n * @param {?function} callback Called after component is updated.\n * @param {?string} callerName name of the calling function in the public API.\n * @internal\n */\n enqueueReplaceState: function (publicInstance, completeState, callback, callerName) {\n warnNoop(publicInstance, 'replaceState');\n },\n\n /**\n * Sets a subset of the state. This only exists because _pendingState is\n * internal. This provides a merging strategy that is not available to deep\n * properties which is confusing. TODO: Expose pendingState or don't use it\n * during the merge.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} partialState Next partial state to be merged with state.\n * @param {?function} callback Called after component is updated.\n * @param {?string} Name of the calling function in the public API.\n * @internal\n */\n enqueueSetState: function (publicInstance, partialState, callback, callerName) {\n warnNoop(publicInstance, 'setState');\n }\n};\n\nvar emptyObject = {};\n{\n Object.freeze(emptyObject);\n}\n\n/**\n * Base class helpers for the updating state of a component.\n */\nfunction Component(props, context, updater) {\n this.props = props;\n this.context = context;\n // If a component has string refs, we will assign a different object later.\n this.refs = emptyObject;\n // We initialize the default updater but the real one gets injected by the\n // renderer.\n this.updater = updater || ReactNoopUpdateQueue;\n}\n\nComponent.prototype.isReactComponent = {};\n\n/**\n * Sets a subset of the state. Always use this to mutate\n * state. You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * There is no guarantee that calls to `setState` will run synchronously,\n * as they may eventually be batched together. You can provide an optional\n * callback that will be executed when the call to setState is actually\n * completed.\n *\n * When a function is provided to setState, it will be called at some point in\n * the future (not synchronously). It will be called with the up to date\n * component arguments (state, props, context). These values can be different\n * from this.* because your function may be called after receiveProps but before\n * shouldComponentUpdate, and this new state, props, and context will not yet be\n * assigned to this.\n *\n * @param {object|function} partialState Next partial state or function to\n * produce next partial state to be merged with current state.\n * @param {?function} callback Called after state is updated.\n * @final\n * @protected\n */\nComponent.prototype.setState = function (partialState, callback) {\n !(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null) ? invariant(false, 'setState(...): takes an object of state variables to update or a function which returns an object of state variables.') : void 0;\n this.updater.enqueueSetState(this, partialState, callback, 'setState');\n};\n\n/**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {?function} callback Called after update is complete.\n * @final\n * @protected\n */\nComponent.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this, callback, 'forceUpdate');\n};\n\n/**\n * Deprecated APIs. These APIs used to exist on classic React classes but since\n * we would like to deprecate them, we're not going to move them over to this\n * modern base class. Instead, we define a getter that warns if it's accessed.\n */\n{\n var deprecatedAPIs = {\n isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],\n replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).']\n };\n var defineDeprecationWarning = function (methodName, info) {\n Object.defineProperty(Component.prototype, methodName, {\n get: function () {\n lowPriorityWarning$1(false, '%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]);\n return undefined;\n }\n });\n };\n for (var fnName in deprecatedAPIs) {\n if (deprecatedAPIs.hasOwnProperty(fnName)) {\n defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\n }\n }\n}\n\nfunction ComponentDummy() {}\nComponentDummy.prototype = Component.prototype;\n\n/**\n * Convenience component with default shallow equality check for sCU.\n */\nfunction PureComponent(props, context, updater) {\n this.props = props;\n this.context = context;\n // If a component has string refs, we will assign a different object later.\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\n\nvar pureComponentPrototype = PureComponent.prototype = new ComponentDummy();\npureComponentPrototype.constructor = PureComponent;\n// Avoid an extra prototype jump for these methods.\n_assign(pureComponentPrototype, Component.prototype);\npureComponentPrototype.isPureReactComponent = true;\n\n// an immutable object with a single mutable value\nfunction createRef() {\n var refObject = {\n current: null\n };\n {\n Object.seal(refObject);\n }\n return refObject;\n}\n\n/**\n * Keeps track of the current dispatcher.\n */\nvar ReactCurrentDispatcher = {\n /**\n * @internal\n * @type {ReactComponent}\n */\n current: null\n};\n\n/**\n * Keeps track of the current owner.\n *\n * The current owner is the component who should own any components that are\n * currently being constructed.\n */\nvar ReactCurrentOwner = {\n /**\n * @internal\n * @type {ReactComponent}\n */\n current: null\n};\n\nvar BEFORE_SLASH_RE = /^(.*)[\\\\\\/]/;\n\nvar describeComponentFrame = function (name, source, ownerName) {\n var sourceInfo = '';\n if (source) {\n var path = source.fileName;\n var fileName = path.replace(BEFORE_SLASH_RE, '');\n {\n // In DEV, include code for a common special case:\n // prefer \"folder/index.js\" instead of just \"index.js\".\n if (/^index\\./.test(fileName)) {\n var match = path.match(BEFORE_SLASH_RE);\n if (match) {\n var pathBeforeSlash = match[1];\n if (pathBeforeSlash) {\n var folderName = pathBeforeSlash.replace(BEFORE_SLASH_RE, '');\n fileName = folderName + '/' + fileName;\n }\n }\n }\n }\n sourceInfo = ' (at ' + fileName + ':' + source.lineNumber + ')';\n } else if (ownerName) {\n sourceInfo = ' (created by ' + ownerName + ')';\n }\n return '\\n in ' + (name || 'Unknown') + sourceInfo;\n};\n\nvar Resolved = 1;\n\n\nfunction refineResolvedLazyComponent(lazyComponent) {\n return lazyComponent._status === Resolved ? lazyComponent._result : null;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var functionName = innerType.displayName || innerType.name || '';\n return outerType.displayName || (functionName !== '' ? wrapperName + '(' + functionName + ')' : wrapperName);\n}\n\nfunction getComponentName(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n {\n if (typeof type.tag === 'number') {\n warningWithoutStack$1(false, 'Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n if (typeof type === 'function') {\n return type.displayName || type.name || null;\n }\n if (typeof type === 'string') {\n return type;\n }\n switch (type) {\n case REACT_CONCURRENT_MODE_TYPE:\n return 'ConcurrentMode';\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n case REACT_PORTAL_TYPE:\n return 'Portal';\n case REACT_PROFILER_TYPE:\n return 'Profiler';\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n }\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n return 'Context.Consumer';\n case REACT_PROVIDER_TYPE:\n return 'Context.Provider';\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n case REACT_MEMO_TYPE:\n return getComponentName(type.type);\n case REACT_LAZY_TYPE:\n {\n var thenable = type;\n var resolvedThenable = refineResolvedLazyComponent(thenable);\n if (resolvedThenable) {\n return getComponentName(resolvedThenable);\n }\n }\n }\n }\n return null;\n}\n\nvar ReactDebugCurrentFrame = {};\n\nvar currentlyValidatingElement = null;\n\nfunction setCurrentlyValidatingElement(element) {\n {\n currentlyValidatingElement = element;\n }\n}\n\n{\n // Stack implementation injected by the current renderer.\n ReactDebugCurrentFrame.getCurrentStack = null;\n\n ReactDebugCurrentFrame.getStackAddendum = function () {\n var stack = '';\n\n // Add an extra top frame while an element is being validated\n if (currentlyValidatingElement) {\n var name = getComponentName(currentlyValidatingElement.type);\n var owner = currentlyValidatingElement._owner;\n stack += describeComponentFrame(name, currentlyValidatingElement._source, owner && getComponentName(owner.type));\n }\n\n // Delegate to the injected renderer-specific implementation\n var impl = ReactDebugCurrentFrame.getCurrentStack;\n if (impl) {\n stack += impl() || '';\n }\n\n return stack;\n };\n}\n\nvar ReactSharedInternals = {\n ReactCurrentDispatcher: ReactCurrentDispatcher,\n ReactCurrentOwner: ReactCurrentOwner,\n // Used by renderers to avoid bundling object-assign twice in UMD bundles:\n assign: _assign\n};\n\n{\n _assign(ReactSharedInternals, {\n // These should not be included in production.\n ReactDebugCurrentFrame: ReactDebugCurrentFrame,\n // Shim for React DOM 16.0.0 which still destructured (but not used) this.\n // TODO: remove in React 17.0.\n ReactComponentTreeHook: {}\n });\n}\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = warningWithoutStack$1;\n\n{\n warning = function (condition, format) {\n if (condition) {\n return;\n }\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n // eslint-disable-next-line react-internal/warning-and-invariant-args\n\n for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n warningWithoutStack$1.apply(undefined, [false, format + '%s'].concat(args, [stack]));\n };\n}\n\nvar warning$1 = warning;\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar RESERVED_PROPS = {\n key: true,\n ref: true,\n __self: true,\n __source: true\n};\n\nvar specialPropKeyWarningShown = void 0;\nvar specialPropRefWarningShown = void 0;\n\nfunction hasValidRef(config) {\n {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n return config.key !== undefined;\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n var warnAboutAccessingKey = function () {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n warningWithoutStack$1(false, '%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName);\n }\n };\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n var warnAboutAccessingRef = function () {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n warningWithoutStack$1(false, '%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName);\n }\n };\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n}\n\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, no instanceof check\n * will work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} key\n * @param {string|object} ref\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @param {*} owner\n * @param {*} props\n * @internal\n */\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n var element = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n\n // Record the component responsible for creating this element.\n _owner: owner\n };\n\n {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {};\n\n // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n });\n // self and source are DEV only properties.\n Object.defineProperty(element, '_self', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: self\n });\n // Two elements created in two different places should be considered\n // equal for testing purposes and therefore we hide it from enumeration.\n Object.defineProperty(element, '_source', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: source\n });\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n\n return element;\n};\n\n/**\n * Create and return a new ReactElement of the given type.\n * See https://reactjs.org/docs/react-api.html#createelement\n */\nfunction createElement(type, config, children) {\n var propName = void 0;\n\n // Reserved names are extracted\n var props = {};\n\n var key = null;\n var ref = null;\n var self = null;\n var source = null;\n\n if (config != null) {\n if (hasValidRef(config)) {\n ref = config.ref;\n }\n if (hasValidKey(config)) {\n key = '' + config.key;\n }\n\n self = config.__self === undefined ? null : config.__self;\n source = config.__source === undefined ? null : config.__source;\n // Remaining properties are added to a new props object\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n }\n }\n\n // Children can be more than one argument, and those are transferred onto\n // the newly allocated props object.\n var childrenLength = arguments.length - 2;\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = Array(childrenLength);\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 2];\n }\n {\n if (Object.freeze) {\n Object.freeze(childArray);\n }\n }\n props.children = childArray;\n }\n\n // Resolve default props\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n {\n if (key || ref) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n }\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n}\n\n/**\n * Return a function that produces ReactElements of a given type.\n * See https://reactjs.org/docs/react-api.html#createfactory\n */\n\n\nfunction cloneAndReplaceKey(oldElement, newKey) {\n var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);\n\n return newElement;\n}\n\n/**\n * Clone and return a new ReactElement using element as the starting point.\n * See https://reactjs.org/docs/react-api.html#cloneelement\n */\nfunction cloneElement(element, config, children) {\n !!(element === null || element === undefined) ? invariant(false, 'React.cloneElement(...): The argument must be a React element, but you passed %s.', element) : void 0;\n\n var propName = void 0;\n\n // Original props are copied\n var props = _assign({}, element.props);\n\n // Reserved names are extracted\n var key = element.key;\n var ref = element.ref;\n // Self is preserved since the owner is preserved.\n var self = element._self;\n // Source is preserved since cloneElement is unlikely to be targeted by a\n // transpiler, and the original source is probably a better indicator of the\n // true owner.\n var source = element._source;\n\n // Owner will be preserved, unless ref is overridden\n var owner = element._owner;\n\n if (config != null) {\n if (hasValidRef(config)) {\n // Silently steal the ref from the parent.\n ref = config.ref;\n owner = ReactCurrentOwner.current;\n }\n if (hasValidKey(config)) {\n key = '' + config.key;\n }\n\n // Remaining properties override existing props\n var defaultProps = void 0;\n if (element.type && element.type.defaultProps) {\n defaultProps = element.type.defaultProps;\n }\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n if (config[propName] === undefined && defaultProps !== undefined) {\n // Resolve default props\n props[propName] = defaultProps[propName];\n } else {\n props[propName] = config[propName];\n }\n }\n }\n }\n\n // Children can be more than one argument, and those are transferred onto\n // the newly allocated props object.\n var childrenLength = arguments.length - 2;\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = Array(childrenLength);\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 2];\n }\n props.children = childArray;\n }\n\n return ReactElement(element.type, key, ref, self, source, owner, props);\n}\n\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\nfunction isValidElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\n\nvar SEPARATOR = '.';\nvar SUBSEPARATOR = ':';\n\n/**\n * Escape and wrap key so it is safe to use as a reactid\n *\n * @param {string} key to be escaped.\n * @return {string} the escaped key.\n */\nfunction escape(key) {\n var escapeRegex = /[=:]/g;\n var escaperLookup = {\n '=': '=0',\n ':': '=2'\n };\n var escapedString = ('' + key).replace(escapeRegex, function (match) {\n return escaperLookup[match];\n });\n\n return '$' + escapedString;\n}\n\n/**\n * TODO: Test that a single child and an array with one item have the same key\n * pattern.\n */\n\nvar didWarnAboutMaps = false;\n\nvar userProvidedKeyEscapeRegex = /\\/+/g;\nfunction escapeUserProvidedKey(text) {\n return ('' + text).replace(userProvidedKeyEscapeRegex, '$&/');\n}\n\nvar POOL_SIZE = 10;\nvar traverseContextPool = [];\nfunction getPooledTraverseContext(mapResult, keyPrefix, mapFunction, mapContext) {\n if (traverseContextPool.length) {\n var traverseContext = traverseContextPool.pop();\n traverseContext.result = mapResult;\n traverseContext.keyPrefix = keyPrefix;\n traverseContext.func = mapFunction;\n traverseContext.context = mapContext;\n traverseContext.count = 0;\n return traverseContext;\n } else {\n return {\n result: mapResult,\n keyPrefix: keyPrefix,\n func: mapFunction,\n context: mapContext,\n count: 0\n };\n }\n}\n\nfunction releaseTraverseContext(traverseContext) {\n traverseContext.result = null;\n traverseContext.keyPrefix = null;\n traverseContext.func = null;\n traverseContext.context = null;\n traverseContext.count = 0;\n if (traverseContextPool.length < POOL_SIZE) {\n traverseContextPool.push(traverseContext);\n }\n}\n\n/**\n * @param {?*} children Children tree container.\n * @param {!string} nameSoFar Name of the key path so far.\n * @param {!function} callback Callback to invoke with each child found.\n * @param {?*} traverseContext Used to pass information throughout the traversal\n * process.\n * @return {!number} The number of children in this subtree.\n */\nfunction traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) {\n var type = typeof children;\n\n if (type === 'undefined' || type === 'boolean') {\n // All of the above are perceived as null.\n children = null;\n }\n\n var invokeCallback = false;\n\n if (children === null) {\n invokeCallback = true;\n } else {\n switch (type) {\n case 'string':\n case 'number':\n invokeCallback = true;\n break;\n case 'object':\n switch (children.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n invokeCallback = true;\n }\n }\n }\n\n if (invokeCallback) {\n callback(traverseContext, children,\n // If it's the only child, treat the name as if it was wrapped in an array\n // so that it's consistent if the number of children grows.\n nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar);\n return 1;\n }\n\n var child = void 0;\n var nextName = void 0;\n var subtreeCount = 0; // Count of children found in the current subtree.\n var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;\n\n if (Array.isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n nextName = nextNamePrefix + getComponentKey(child, i);\n subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n }\n } else {\n var iteratorFn = getIteratorFn(children);\n if (typeof iteratorFn === 'function') {\n {\n // Warn about using Maps as children\n if (iteratorFn === children.entries) {\n !didWarnAboutMaps ? warning$1(false, 'Using Maps as children is unsupported and will likely yield ' + 'unexpected results. Convert it to a sequence/iterable of keyed ' + 'ReactElements instead.') : void 0;\n didWarnAboutMaps = true;\n }\n }\n\n var iterator = iteratorFn.call(children);\n var step = void 0;\n var ii = 0;\n while (!(step = iterator.next()).done) {\n child = step.value;\n nextName = nextNamePrefix + getComponentKey(child, ii++);\n subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n }\n } else if (type === 'object') {\n var addendum = '';\n {\n addendum = ' If you meant to render a collection of children, use an array ' + 'instead.' + ReactDebugCurrentFrame.getStackAddendum();\n }\n var childrenString = '' + children;\n invariant(false, 'Objects are not valid as a React child (found: %s).%s', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum);\n }\n }\n\n return subtreeCount;\n}\n\n/**\n * Traverses children that are typically specified as `props.children`, but\n * might also be specified through attributes:\n *\n * - `traverseAllChildren(this.props.children, ...)`\n * - `traverseAllChildren(this.props.leftPanelChildren, ...)`\n *\n * The `traverseContext` is an optional argument that is passed through the\n * entire traversal. It can be used to store accumulations or anything else that\n * the callback might find relevant.\n *\n * @param {?*} children Children tree object.\n * @param {!function} callback To invoke upon traversing each child.\n * @param {?*} traverseContext Context for traversal.\n * @return {!number} The number of children in this subtree.\n */\nfunction traverseAllChildren(children, callback, traverseContext) {\n if (children == null) {\n return 0;\n }\n\n return traverseAllChildrenImpl(children, '', callback, traverseContext);\n}\n\n/**\n * Generate a key string that identifies a component within a set.\n *\n * @param {*} component A component that could contain a manual key.\n * @param {number} index Index that is used if a manual key is not provided.\n * @return {string}\n */\nfunction getComponentKey(component, index) {\n // Do some typechecking here since we call this blindly. We want to ensure\n // that we don't block potential future ES APIs.\n if (typeof component === 'object' && component !== null && component.key != null) {\n // Explicit key\n return escape(component.key);\n }\n // Implicit key determined by the index in the set\n return index.toString(36);\n}\n\nfunction forEachSingleChild(bookKeeping, child, name) {\n var func = bookKeeping.func,\n context = bookKeeping.context;\n\n func.call(context, child, bookKeeping.count++);\n}\n\n/**\n * Iterates through children that are typically specified as `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrenforeach\n *\n * The provided forEachFunc(child, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} forEachFunc\n * @param {*} forEachContext Context for forEachContext.\n */\nfunction forEachChildren(children, forEachFunc, forEachContext) {\n if (children == null) {\n return children;\n }\n var traverseContext = getPooledTraverseContext(null, null, forEachFunc, forEachContext);\n traverseAllChildren(children, forEachSingleChild, traverseContext);\n releaseTraverseContext(traverseContext);\n}\n\nfunction mapSingleChildIntoContext(bookKeeping, child, childKey) {\n var result = bookKeeping.result,\n keyPrefix = bookKeeping.keyPrefix,\n func = bookKeeping.func,\n context = bookKeeping.context;\n\n\n var mappedChild = func.call(context, child, bookKeeping.count++);\n if (Array.isArray(mappedChild)) {\n mapIntoWithKeyPrefixInternal(mappedChild, result, childKey, function (c) {\n return c;\n });\n } else if (mappedChild != null) {\n if (isValidElement(mappedChild)) {\n mappedChild = cloneAndReplaceKey(mappedChild,\n // Keep both the (mapped) and old keys if they differ, just as\n // traverseAllChildren used to do for objects as children\n keyPrefix + (mappedChild.key && (!child || child.key !== mappedChild.key) ? escapeUserProvidedKey(mappedChild.key) + '/' : '') + childKey);\n }\n result.push(mappedChild);\n }\n}\n\nfunction mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) {\n var escapedPrefix = '';\n if (prefix != null) {\n escapedPrefix = escapeUserProvidedKey(prefix) + '/';\n }\n var traverseContext = getPooledTraverseContext(array, escapedPrefix, func, context);\n traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);\n releaseTraverseContext(traverseContext);\n}\n\n/**\n * Maps children that are typically specified as `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrenmap\n *\n * The provided mapFunction(child, key, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} func The map function.\n * @param {*} context Context for mapFunction.\n * @return {object} Object containing the ordered map of results.\n */\nfunction mapChildren(children, func, context) {\n if (children == null) {\n return children;\n }\n var result = [];\n mapIntoWithKeyPrefixInternal(children, result, null, func, context);\n return result;\n}\n\n/**\n * Count the number of children that are typically specified as\n * `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrencount\n *\n * @param {?*} children Children tree container.\n * @return {number} The number of children.\n */\nfunction countChildren(children) {\n return traverseAllChildren(children, function () {\n return null;\n }, null);\n}\n\n/**\n * Flatten a children object (typically specified as `props.children`) and\n * return an array with appropriately re-keyed children.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrentoarray\n */\nfunction toArray(children) {\n var result = [];\n mapIntoWithKeyPrefixInternal(children, result, null, function (child) {\n return child;\n });\n return result;\n}\n\n/**\n * Returns the first child in a collection of children and verifies that there\n * is only one child in the collection.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrenonly\n *\n * The current implementation of this function assumes that a single child gets\n * passed without a wrapper, but the purpose of this helper function is to\n * abstract away the particular structure of children.\n *\n * @param {?object} children Child collection structure.\n * @return {ReactElement} The first and only `ReactElement` contained in the\n * structure.\n */\nfunction onlyChild(children) {\n !isValidElement(children) ? invariant(false, 'React.Children.only expected to receive a single React element child.') : void 0;\n return children;\n}\n\nfunction createContext(defaultValue, calculateChangedBits) {\n if (calculateChangedBits === undefined) {\n calculateChangedBits = null;\n } else {\n {\n !(calculateChangedBits === null || typeof calculateChangedBits === 'function') ? warningWithoutStack$1(false, 'createContext: Expected the optional second argument to be a ' + 'function. Instead received: %s', calculateChangedBits) : void 0;\n }\n }\n\n var context = {\n $$typeof: REACT_CONTEXT_TYPE,\n _calculateChangedBits: calculateChangedBits,\n // As a workaround to support multiple concurrent renderers, we categorize\n // some renderers as primary and others as secondary. We only expect\n // there to be two concurrent renderers at most: React Native (primary) and\n // Fabric (secondary); React DOM (primary) and React ART (secondary).\n // Secondary renderers store their context values on separate fields.\n _currentValue: defaultValue,\n _currentValue2: defaultValue,\n // Used to track how many concurrent renderers this context currently\n // supports within in a single renderer. Such as parallel server rendering.\n _threadCount: 0,\n // These are circular\n Provider: null,\n Consumer: null\n };\n\n context.Provider = {\n $$typeof: REACT_PROVIDER_TYPE,\n _context: context\n };\n\n var hasWarnedAboutUsingNestedContextConsumers = false;\n var hasWarnedAboutUsingConsumerProvider = false;\n\n {\n // A separate object, but proxies back to the original context object for\n // backwards compatibility. It has a different $$typeof, so we can properly\n // warn for the incorrect usage of Context as a Consumer.\n var Consumer = {\n $$typeof: REACT_CONTEXT_TYPE,\n _context: context,\n _calculateChangedBits: context._calculateChangedBits\n };\n // $FlowFixMe: Flow complains about not setting a value, which is intentional here\n Object.defineProperties(Consumer, {\n Provider: {\n get: function () {\n if (!hasWarnedAboutUsingConsumerProvider) {\n hasWarnedAboutUsingConsumerProvider = true;\n warning$1(false, 'Rendering <Context.Consumer.Provider> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Provider> instead?');\n }\n return context.Provider;\n },\n set: function (_Provider) {\n context.Provider = _Provider;\n }\n },\n _currentValue: {\n get: function () {\n return context._currentValue;\n },\n set: function (_currentValue) {\n context._currentValue = _currentValue;\n }\n },\n _currentValue2: {\n get: function () {\n return context._currentValue2;\n },\n set: function (_currentValue2) {\n context._currentValue2 = _currentValue2;\n }\n },\n _threadCount: {\n get: function () {\n return context._threadCount;\n },\n set: function (_threadCount) {\n context._threadCount = _threadCount;\n }\n },\n Consumer: {\n get: function () {\n if (!hasWarnedAboutUsingNestedContextConsumers) {\n hasWarnedAboutUsingNestedContextConsumers = true;\n warning$1(false, 'Rendering <Context.Consumer.Consumer> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Consumer> instead?');\n }\n return context.Consumer;\n }\n }\n });\n // $FlowFixMe: Flow complains about missing properties because it doesn't understand defineProperty\n context.Consumer = Consumer;\n }\n\n {\n context._currentRenderer = null;\n context._currentRenderer2 = null;\n }\n\n return context;\n}\n\nfunction lazy(ctor) {\n var lazyType = {\n $$typeof: REACT_LAZY_TYPE,\n _ctor: ctor,\n // React uses these fields to store the result.\n _status: -1,\n _result: null\n };\n\n {\n // In production, this would just set it on the object.\n var defaultProps = void 0;\n var propTypes = void 0;\n Object.defineProperties(lazyType, {\n defaultProps: {\n configurable: true,\n get: function () {\n return defaultProps;\n },\n set: function (newDefaultProps) {\n warning$1(false, 'React.lazy(...): It is not supported to assign `defaultProps` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');\n defaultProps = newDefaultProps;\n // Match production behavior more closely:\n Object.defineProperty(lazyType, 'defaultProps', {\n enumerable: true\n });\n }\n },\n propTypes: {\n configurable: true,\n get: function () {\n return propTypes;\n },\n set: function (newPropTypes) {\n warning$1(false, 'React.lazy(...): It is not supported to assign `propTypes` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');\n propTypes = newPropTypes;\n // Match production behavior more closely:\n Object.defineProperty(lazyType, 'propTypes', {\n enumerable: true\n });\n }\n }\n });\n }\n\n return lazyType;\n}\n\nfunction forwardRef(render) {\n {\n if (render != null && render.$$typeof === REACT_MEMO_TYPE) {\n warningWithoutStack$1(false, 'forwardRef requires a render function but received a `memo` ' + 'component. Instead of forwardRef(memo(...)), use ' + 'memo(forwardRef(...)).');\n } else if (typeof render !== 'function') {\n warningWithoutStack$1(false, 'forwardRef requires a render function but was given %s.', render === null ? 'null' : typeof render);\n } else {\n !(\n // Do not warn for 0 arguments because it could be due to usage of the 'arguments' object\n render.length === 0 || render.length === 2) ? warningWithoutStack$1(false, 'forwardRef render functions accept exactly two parameters: props and ref. %s', render.length === 1 ? 'Did you forget to use the ref parameter?' : 'Any additional parameter will be undefined.') : void 0;\n }\n\n if (render != null) {\n !(render.defaultProps == null && render.propTypes == null) ? warningWithoutStack$1(false, 'forwardRef render functions do not support propTypes or defaultProps. ' + 'Did you accidentally pass a React component?') : void 0;\n }\n }\n\n return {\n $$typeof: REACT_FORWARD_REF_TYPE,\n render: render\n };\n}\n\nfunction isValidElementType(type) {\n return typeof type === 'string' || typeof type === 'function' ||\n // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE);\n}\n\nfunction memo(type, compare) {\n {\n if (!isValidElementType(type)) {\n warningWithoutStack$1(false, 'memo: The first argument must be a component. Instead ' + 'received: %s', type === null ? 'null' : typeof type);\n }\n }\n return {\n $$typeof: REACT_MEMO_TYPE,\n type: type,\n compare: compare === undefined ? null : compare\n };\n}\n\nfunction resolveDispatcher() {\n var dispatcher = ReactCurrentDispatcher.current;\n !(dispatcher !== null) ? invariant(false, 'Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://fb.me/react-invalid-hook-call for tips about how to debug and fix this problem.') : void 0;\n return dispatcher;\n}\n\nfunction useContext(Context, unstable_observedBits) {\n var dispatcher = resolveDispatcher();\n {\n !(unstable_observedBits === undefined) ? warning$1(false, 'useContext() second argument is reserved for future ' + 'use in React. Passing it is not supported. ' + 'You passed: %s.%s', unstable_observedBits, typeof unstable_observedBits === 'number' && Array.isArray(arguments[2]) ? '\\n\\nDid you call array.map(useContext)? ' + 'Calling Hooks inside a loop is not supported. ' + 'Learn more at https://fb.me/rules-of-hooks' : '') : void 0;\n\n // TODO: add a more generic warning for invalid values.\n if (Context._context !== undefined) {\n var realContext = Context._context;\n // Don't deduplicate because this legitimately causes bugs\n // and nobody should be using this in existing code.\n if (realContext.Consumer === Context) {\n warning$1(false, 'Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be ' + 'removed in a future major release. Did you mean to call useContext(Context) instead?');\n } else if (realContext.Provider === Context) {\n warning$1(false, 'Calling useContext(Context.Provider) is not supported. ' + 'Did you mean to call useContext(Context) instead?');\n }\n }\n }\n return dispatcher.useContext(Context, unstable_observedBits);\n}\n\nfunction useState(initialState) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useState(initialState);\n}\n\nfunction useReducer(reducer, initialArg, init) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useReducer(reducer, initialArg, init);\n}\n\nfunction useRef(initialValue) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useRef(initialValue);\n}\n\nfunction useEffect(create, inputs) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useEffect(create, inputs);\n}\n\nfunction useLayoutEffect(create, inputs) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useLayoutEffect(create, inputs);\n}\n\nfunction useCallback(callback, inputs) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useCallback(callback, inputs);\n}\n\nfunction useMemo(create, inputs) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useMemo(create, inputs);\n}\n\nfunction useImperativeHandle(ref, create, inputs) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useImperativeHandle(ref, create, inputs);\n}\n\nfunction useDebugValue(value, formatterFn) {\n {\n var dispatcher = resolveDispatcher();\n return dispatcher.useDebugValue(value, formatterFn);\n }\n}\n\n/**\n * ReactElementValidator provides a wrapper around a element factory\n * which validates the props passed to the element. This is intended to be\n * used only in DEV and could be replaced by a static type checker for languages\n * that support it.\n */\n\nvar propTypesMisspellWarningShown = void 0;\n\n{\n propTypesMisspellWarningShown = false;\n}\n\nfunction getDeclarationErrorAddendum() {\n if (ReactCurrentOwner.current) {\n var name = getComponentName(ReactCurrentOwner.current.type);\n if (name) {\n return '\\n\\nCheck the render method of `' + name + '`.';\n }\n }\n return '';\n}\n\nfunction getSourceInfoErrorAddendum(elementProps) {\n if (elementProps !== null && elementProps !== undefined && elementProps.__source !== undefined) {\n var source = elementProps.__source;\n var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n var lineNumber = source.lineNumber;\n return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n }\n return '';\n}\n\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n var info = getDeclarationErrorAddendum();\n\n if (!info) {\n var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n if (parentName) {\n info = '\\n\\nCheck the top-level render call using <' + parentName + '>.';\n }\n }\n return info;\n}\n\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\nfunction validateExplicitKey(element, parentType) {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n element._store.validated = true;\n\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true;\n\n // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n var childOwner = '';\n if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\n // Give the component that originally created this child.\n childOwner = ' It was passed a child from ' + getComponentName(element._owner.type) + '.';\n }\n\n setCurrentlyValidatingElement(element);\n {\n warning$1(false, 'Each child in a list should have a unique \"key\" prop.' + '%s%s See https://fb.me/react-warning-keys for more information.', currentComponentErrorInfo, childOwner);\n }\n setCurrentlyValidatingElement(null);\n}\n\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\nfunction validateChildKeys(node, parentType) {\n if (typeof node !== 'object') {\n return;\n }\n if (Array.isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n if (isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else if (node) {\n var iteratorFn = getIteratorFn(node);\n if (typeof iteratorFn === 'function') {\n // Entry iterators used to provide implicit keys,\n // but now we print a separate warning for them later.\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step = void 0;\n while (!(step = iterator.next()).done) {\n if (isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n}\n\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\nfunction validatePropTypes(element) {\n var type = element.type;\n if (type === null || type === undefined || typeof type === 'string') {\n return;\n }\n var name = getComponentName(type);\n var propTypes = void 0;\n if (typeof type === 'function') {\n propTypes = type.propTypes;\n } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE ||\n // Note: Memo only checks outer props here.\n // Inner props are checked in the reconciler.\n type.$$typeof === REACT_MEMO_TYPE)) {\n propTypes = type.propTypes;\n } else {\n return;\n }\n if (propTypes) {\n setCurrentlyValidatingElement(element);\n checkPropTypes(propTypes, element.props, 'prop', name, ReactDebugCurrentFrame.getStackAddendum);\n setCurrentlyValidatingElement(null);\n } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n propTypesMisspellWarningShown = true;\n warningWithoutStack$1(false, 'Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', name || 'Unknown');\n }\n if (typeof type.getDefaultProps === 'function') {\n !type.getDefaultProps.isReactClassApproved ? warningWithoutStack$1(false, 'getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.') : void 0;\n }\n}\n\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\nfunction validateFragmentProps(fragment) {\n setCurrentlyValidatingElement(fragment);\n\n var keys = Object.keys(fragment.props);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (key !== 'children' && key !== 'key') {\n warning$1(false, 'Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n break;\n }\n }\n\n if (fragment.ref !== null) {\n warning$1(false, 'Invalid attribute `ref` supplied to `React.Fragment`.');\n }\n\n setCurrentlyValidatingElement(null);\n}\n\nfunction createElementWithValidation(type, props, children) {\n var validType = isValidElementType(type);\n\n // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n if (!validType) {\n var info = '';\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n }\n\n var sourceInfo = getSourceInfoErrorAddendum(props);\n if (sourceInfo) {\n info += sourceInfo;\n } else {\n info += getDeclarationErrorAddendum();\n }\n\n var typeString = void 0;\n if (type === null) {\n typeString = 'null';\n } else if (Array.isArray(type)) {\n typeString = 'array';\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n typeString = '<' + (getComponentName(type.type) || 'Unknown') + ' />';\n info = ' Did you accidentally export a JSX literal instead of a component?';\n } else {\n typeString = typeof type;\n }\n\n warning$1(false, 'React.createElement: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n }\n\n var element = createElement.apply(this, arguments);\n\n // The result can be nullish if a mock or a custom function is used.\n // TODO: Drop this when these are no longer allowed as the type argument.\n if (element == null) {\n return element;\n }\n\n // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing errors.\n // We don't want exception behavior to differ between dev and prod.\n // (Rendering will throw with a helpful message and as soon as the type is\n // fixed, the key warnings will appear.)\n if (validType) {\n for (var i = 2; i < arguments.length; i++) {\n validateChildKeys(arguments[i], type);\n }\n }\n\n if (type === REACT_FRAGMENT_TYPE) {\n validateFragmentProps(element);\n } else {\n validatePropTypes(element);\n }\n\n return element;\n}\n\nfunction createFactoryWithValidation(type) {\n var validatedFactory = createElementWithValidation.bind(null, type);\n validatedFactory.type = type;\n // Legacy hook: remove it\n {\n Object.defineProperty(validatedFactory, 'type', {\n enumerable: false,\n get: function () {\n lowPriorityWarning$1(false, 'Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.');\n Object.defineProperty(this, 'type', {\n value: type\n });\n return type;\n }\n });\n }\n\n return validatedFactory;\n}\n\nfunction cloneElementWithValidation(element, props, children) {\n var newElement = cloneElement.apply(this, arguments);\n for (var i = 2; i < arguments.length; i++) {\n validateChildKeys(arguments[i], newElement.type);\n }\n validatePropTypes(newElement);\n return newElement;\n}\n\n// Helps identify side effects in begin-phase lifecycle hooks and setState reducers:\n\n\n// In some cases, StrictMode should also double-render lifecycles.\n// This can be confusing for tests though,\n// And it can be bad for performance in production.\n// This feature flag can be used to control the behavior:\n\n\n// To preserve the \"Pause on caught exceptions\" behavior of the debugger, we\n// replay the begin phase of a failed component inside invokeGuardedCallback.\n\n\n// Warn about deprecated, async-unsafe lifecycles; relates to RFC #6:\n\n\n// Gather advanced timing metrics for Profiler subtrees.\n\n\n// Trace which interactions trigger each commit.\n\n\n// Only used in www builds.\n // TODO: true? Here it might just be false.\n\n// Only used in www builds.\n\n\n// Only used in www builds.\n\n\n// React Fire: prevent the value and checked attributes from syncing\n// with their related DOM properties\n\n\n// These APIs will no longer be \"unstable\" in the upcoming 16.7 release,\n// Control this behavior with a flag to support 16.6 minor releases in the meanwhile.\nvar enableStableConcurrentModeAPIs = false;\n\nvar React = {\n Children: {\n map: mapChildren,\n forEach: forEachChildren,\n count: countChildren,\n toArray: toArray,\n only: onlyChild\n },\n\n createRef: createRef,\n Component: Component,\n PureComponent: PureComponent,\n\n createContext: createContext,\n forwardRef: forwardRef,\n lazy: lazy,\n memo: memo,\n\n useCallback: useCallback,\n useContext: useContext,\n useEffect: useEffect,\n useImperativeHandle: useImperativeHandle,\n useDebugValue: useDebugValue,\n useLayoutEffect: useLayoutEffect,\n useMemo: useMemo,\n useReducer: useReducer,\n useRef: useRef,\n useState: useState,\n\n Fragment: REACT_FRAGMENT_TYPE,\n StrictMode: REACT_STRICT_MODE_TYPE,\n Suspense: REACT_SUSPENSE_TYPE,\n\n createElement: createElementWithValidation,\n cloneElement: cloneElementWithValidation,\n createFactory: createFactoryWithValidation,\n isValidElement: isValidElement,\n\n version: ReactVersion,\n\n unstable_ConcurrentMode: REACT_CONCURRENT_MODE_TYPE,\n unstable_Profiler: REACT_PROFILER_TYPE,\n\n __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: ReactSharedInternals\n};\n\n// Note: some APIs are added with feature flags.\n// Make sure that stable builds for open source\n// don't modify the React object to avoid deopts.\n// Also let's not expose their names in stable builds.\n\nif (enableStableConcurrentModeAPIs) {\n React.ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;\n React.Profiler = REACT_PROFILER_TYPE;\n React.unstable_ConcurrentMode = undefined;\n React.unstable_Profiler = undefined;\n}\n\n\n\nvar React$2 = Object.freeze({\n\tdefault: React\n});\n\nvar React$3 = ( React$2 && React ) || React$2;\n\n// TODO: decide on the top-level export form.\n// This is hacky but makes it work with both Rollup and Jest.\nvar react = React$3.default || React$3;\n\nmodule.exports = react;\n })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcz83MmQwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7Ozs7QUFJYixJQUFJLElBQXFDO0FBQ3pDO0FBQ0E7O0FBRUEsY0FBYyxtQkFBTyxDQUFDLGdGQUFlO0FBQ3JDLHFCQUFxQixtQkFBTyxDQUFDLDhFQUEyQjs7QUFFeEQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRDtBQUNyRCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHNGQUFzRixhQUFhO0FBQ25HO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRGQUE0RixlQUFlO0FBQzNHO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxzRkFBc0YsYUFBYTtBQUNuRztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscU9BQXFPO0FBQ3JPO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFdBQVc7QUFDeEIsY0FBYyxRQUFRO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxXQUFXO0FBQ3hCLGFBQWEsVUFBVTtBQUN2QixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxXQUFXO0FBQ3hCLGFBQWEsT0FBTztBQUNwQixhQUFhLFVBQVU7QUFDdkIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFdBQVc7QUFDeEIsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsVUFBVTtBQUN2QixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsc0ZBQXNGLGFBQWE7QUFDbkc7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7QUFD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O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsRUFBRTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsVUFBVTtBQUNyQixXQUFXLEVBQUU7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsaUJBQWlCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCLHNCQUFzQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7O0FBR0Esa0RBQWtEOzs7QUFHbEQ7OztBQUdBOzs7QUFHQTtBQUNBOztBQUVBOzs7QUFHQTs7O0FBR0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LmRldmVsb3BtZW50LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNi44LjZcbiAqIHJlYWN0LmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBfYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xudmFyIGNoZWNrUHJvcFR5cGVzID0gcmVxdWlyZSgncHJvcC10eXBlcy9jaGVja1Byb3BUeXBlcycpO1xuXG4vLyBUT0RPOiB0aGlzIGlzIHNwZWNpYWwgYmVjYXVzZSBpdCBnZXRzIGltcG9ydGVkIGR1cmluZyBidWlsZC5cblxudmFyIFJlYWN0VmVyc2lvbiA9ICcxNi44LjYnO1xuXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxudmFyIGhhc1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcjtcblxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSA6IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpIDogMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpIDogMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpIDogMHhlYWNjO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpIDogMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpIDogMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKSA6IDB4ZWFjZTtcblxudmFyIFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuY29uY3VycmVudF9tb2RlJykgOiAweGVhY2Y7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZvcndhcmRfcmVmJykgOiAweGVhZDA7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlJykgOiAweGVhZDE7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubWVtbycpIDogMHhlYWQzO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmxhenknKSA6IDB4ZWFkNDtcblxudmFyIE1BWUJFX0lURVJBVE9SX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLml0ZXJhdG9yO1xudmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InO1xuXG5mdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgaWYgKG1heWJlSXRlcmFibGUgPT09IG51bGwgfHwgdHlwZW9mIG1heWJlSXRlcmFibGUgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgdmFyIG1heWJlSXRlcmF0b3IgPSBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtNQVlCRV9JVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdO1xuICBpZiAodHlwZW9mIG1heWJlSXRlcmF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF5YmVJdGVyYXRvcjtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBVc2UgaW52YXJpYW50KCkgdG8gYXNzZXJ0IHN0YXRlIHdoaWNoIHlvdXIgcHJvZ3JhbSBhc3N1bWVzIHRvIGJlIHRydWUuXG4gKlxuICogUHJvdmlkZSBzcHJpbnRmLXN0eWxlIGZvcm1hdCAob25seSAlcyBpcyBzdXBwb3J0ZWQpIGFuZCBhcmd1bWVudHNcbiAqIHRvIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBicm9rZSBhbmQgd2hhdCB5b3Ugd2VyZVxuICogZXhwZWN0aW5nLlxuICpcbiAqIFRoZSBpbnZhcmlhbnQgbWVzc2FnZSB3aWxsIGJlIHN0cmlwcGVkIGluIHByb2R1Y3Rpb24sIGJ1dCB0aGUgaW52YXJpYW50XG4gKiB3aWxsIHJlbWFpbiB0byBlbnN1cmUgbG9naWMgZG9lcyBub3QgZGlmZmVyIGluIHByb2R1Y3Rpb24uXG4gKi9cblxudmFyIHZhbGlkYXRlRm9ybWF0ID0gZnVuY3Rpb24gKCkge307XG5cbntcbiAgdmFsaWRhdGVGb3JtYXQgPSBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFyaWFudCByZXF1aXJlcyBhbiBlcnJvciBtZXNzYWdlIGFyZ3VtZW50Jyk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBpbnZhcmlhbnQoY29uZGl0aW9uLCBmb3JtYXQsIGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgdmFsaWRhdGVGb3JtYXQoZm9ybWF0KTtcblxuICBpZiAoIWNvbmRpdGlvbikge1xuICAgIHZhciBlcnJvciA9IHZvaWQgMDtcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKCdNaW5pZmllZCBleGNlcHRpb24gb2NjdXJyZWQ7IHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCAnICsgJ2ZvciB0aGUgZnVsbCBlcnJvciBtZXNzYWdlIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBhcmdzID0gW2EsIGIsIGMsIGQsIGUsIGZdO1xuICAgICAgdmFyIGFyZ0luZGV4ID0gMDtcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBhcmdzW2FyZ0luZGV4KytdO1xuICAgICAgfSkpO1xuICAgICAgZXJyb3IubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICB9XG5cbiAgICBlcnJvci5mcmFtZXNUb1BvcCA9IDE7IC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgaW52YXJpYW50J3Mgb3duIGZyYW1lXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuLy8gUmVseWluZyBvbiB0aGUgYGludmFyaWFudCgpYCBpbXBsZW1lbnRhdGlvbiBsZXRzIHVzXG4vLyBwcmVzZXJ2ZSB0aGUgZm9ybWF0IGFuZCBwYXJhbXMgaW4gdGhlIHd3dyBidWlsZHMuXG5cbi8qKlxuICogRm9ya2VkIGZyb20gZmJqcy93YXJuaW5nOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2ZianMvYmxvYi9lNjZiYTIwYWQ1YmU0MzNlYjU0NDIzZjJiMDk3ZDgyOTMyNGQ5ZGU2L3BhY2thZ2VzL2ZianMvc3JjL19fZm9ya3NfXy93YXJuaW5nLmpzXG4gKlxuICogT25seSBjaGFuZ2UgaXMgd2UgdXNlIGNvbnNvbGUud2FybiBpbnN0ZWFkIG9mIGNvbnNvbGUuZXJyb3IsXG4gKiBhbmQgZG8gbm90aGluZyB3aGVuICdjb25zb2xlJyBpcyBub3Qgc3VwcG9ydGVkLlxuICogVGhpcyByZWFsbHkgc2ltcGxpZmllcyB0aGUgY29kZS5cbiAqIC0tLVxuICogU2ltaWxhciB0byBpbnZhcmlhbnQgYnV0IG9ubHkgbG9ncyBhIHdhcm5pbmcgaWYgdGhlIGNvbmRpdGlvbiBpcyBub3QgbWV0LlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBsb2cgaXNzdWVzIGluIGRldmVsb3BtZW50IGVudmlyb25tZW50cyBpbiBjcml0aWNhbFxuICogcGF0aHMuIFJlbW92aW5nIHRoZSBsb2dnaW5nIGNvZGUgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIHdpbGwga2VlcCB0aGVcbiAqIHNhbWUgbG9naWMgYW5kIGZvbGxvdyB0aGUgc2FtZSBjb2RlIHBhdGhzLlxuICovXG5cbnZhciBsb3dQcmlvcml0eVdhcm5pbmcgPSBmdW5jdGlvbiAoKSB7fTtcblxue1xuICB2YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIGFyZ0luZGV4ID0gMDtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBhcmdzW2FyZ0luZGV4KytdO1xuICAgIH0pO1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcblxuICBsb3dQcmlvcml0eVdhcm5pbmcgPSBmdW5jdGlvbiAoY29uZGl0aW9uLCBmb3JtYXQpIHtcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYGxvd1ByaW9yaXR5V2FybmluZyhjb25kaXRpb24sIGZvcm1hdCwgLi4uYXJncylgIHJlcXVpcmVzIGEgd2FybmluZyAnICsgJ21lc3NhZ2UgYXJndW1lbnQnKTtcbiAgICB9XG4gICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4yID4gMiA/IF9sZW4yIC0gMiA6IDApLCBfa2V5MiA9IDI7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5MiAtIDJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cblxuICAgICAgcHJpbnRXYXJuaW5nLmFwcGx5KHVuZGVmaW5lZCwgW2Zvcm1hdF0uY29uY2F0KGFyZ3MpKTtcbiAgICB9XG4gIH07XG59XG5cbnZhciBsb3dQcmlvcml0eVdhcm5pbmckMSA9IGxvd1ByaW9yaXR5V2FybmluZztcblxuLyoqXG4gKiBTaW1pbGFyIHRvIGludmFyaWFudCBidXQgb25seSBsb2dzIGEgd2FybmluZyBpZiB0aGUgY29uZGl0aW9uIGlzIG5vdCBtZXQuXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGxvZyBpc3N1ZXMgaW4gZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzIGluIGNyaXRpY2FsXG4gKiBwYXRocy4gUmVtb3ZpbmcgdGhlIGxvZ2dpbmcgY29kZSBmb3IgcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMgd2lsbCBrZWVwIHRoZVxuICogc2FtZSBsb2dpYyBhbmQgZm9sbG93IHRoZSBzYW1lIGNvZGUgcGF0aHMuXG4gKi9cblxudmFyIHdhcm5pbmdXaXRob3V0U3RhY2sgPSBmdW5jdGlvbiAoKSB7fTtcblxue1xuICB3YXJuaW5nV2l0aG91dFN0YWNrID0gZnVuY3Rpb24gKGNvbmRpdGlvbiwgZm9ybWF0KSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuID4gMiA/IF9sZW4gLSAyIDogMCksIF9rZXkgPSAyOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAyXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYHdhcm5pbmdXaXRob3V0U3RhY2soY29uZGl0aW9uLCBmb3JtYXQsIC4uLmFyZ3MpYCByZXF1aXJlcyBhIHdhcm5pbmcgJyArICdtZXNzYWdlIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIGlmIChhcmdzLmxlbmd0aCA+IDgpIHtcbiAgICAgIC8vIENoZWNrIGJlZm9yZSB0aGUgY29uZGl0aW9uIHRvIGNhdGNoIHZpb2xhdGlvbnMgZWFybHkuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3dhcm5pbmdXaXRob3V0U3RhY2soKSBjdXJyZW50bHkgc3VwcG9ydHMgYXQgbW9zdCA4IGFyZ3VtZW50cy4nKTtcbiAgICB9XG4gICAgaWYgKGNvbmRpdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB2YXIgYXJnc1dpdGhGb3JtYXQgPSBhcmdzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gJycgKyBpdGVtO1xuICAgICAgfSk7XG4gICAgICBhcmdzV2l0aEZvcm1hdC51bnNoaWZ0KCdXYXJuaW5nOiAnICsgZm9ybWF0KTtcblxuICAgICAgLy8gV2UgaW50ZW50aW9uYWxseSBkb24ndCB1c2Ugc3ByZWFkIChvciAuYXBwbHkpIGRpcmVjdGx5IGJlY2F1c2UgaXRcbiAgICAgIC8vIGJyZWFrcyBJRTk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTM2MTBcbiAgICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGNvbnNvbGUuZXJyb3IsIGNvbnNvbGUsIGFyZ3NXaXRoRm9ybWF0KTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB2YXIgYXJnSW5kZXggPSAwO1xuICAgICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBhcmdzW2FyZ0luZGV4KytdO1xuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcbn1cblxudmFyIHdhcm5pbmdXaXRob3V0U3RhY2skMSA9IHdhcm5pbmdXaXRob3V0U3RhY2s7XG5cbnZhciBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQgPSB7fTtcblxuZnVuY3Rpb24gd2Fybk5vb3AocHVibGljSW5zdGFuY2UsIGNhbGxlck5hbWUpIHtcbiAge1xuICAgIHZhciBfY29uc3RydWN0b3IgPSBwdWJsaWNJbnN0YW5jZS5jb25zdHJ1Y3RvcjtcbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IF9jb25zdHJ1Y3RvciAmJiAoX2NvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8IF9jb25zdHJ1Y3Rvci5uYW1lKSB8fCAnUmVhY3RDbGFzcyc7XG4gICAgdmFyIHdhcm5pbmdLZXkgPSBjb21wb25lbnROYW1lICsgJy4nICsgY2FsbGVyTmFtZTtcbiAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50W3dhcm5pbmdLZXldKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgXCJDYW4ndCBjYWxsICVzIG9uIGEgY29tcG9uZW50IHRoYXQgaXMgbm90IHlldCBtb3VudGVkLiBcIiArICdUaGlzIGlzIGEgbm8tb3AsIGJ1dCBpdCBtaWdodCBpbmRpY2F0ZSBhIGJ1ZyBpbiB5b3VyIGFwcGxpY2F0aW9uLiAnICsgJ0luc3RlYWQsIGFzc2lnbiB0byBgdGhpcy5zdGF0ZWAgZGlyZWN0bHkgb3IgZGVmaW5lIGEgYHN0YXRlID0ge307YCAnICsgJ2NsYXNzIHByb3BlcnR5IHdpdGggdGhlIGRlc2lyZWQgc3RhdGUgaW4gdGhlICVzIGNvbXBvbmVudC4nLCBjYWxsZXJOYW1lLCBjb21wb25lbnROYW1lKTtcbiAgICBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnRbd2FybmluZ0tleV0gPSB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgYWJzdHJhY3QgQVBJIGZvciBhbiB1cGRhdGUgcXVldWUuXG4gKi9cbnZhciBSZWFjdE5vb3BVcGRhdGVRdWV1ZSA9IHtcbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIG9yIG5vdCB0aGlzIGNvbXBvc2l0ZSBjb21wb25lbnQgaXMgbW91bnRlZC5cbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2Ugd2Ugd2FudCB0byB0ZXN0LlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIG1vdW50ZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICogQHByb3RlY3RlZFxuICAgKiBAZmluYWxcbiAgICovXG4gIGlzTW91bnRlZDogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBGb3JjZXMgYW4gdXBkYXRlLiBUaGlzIHNob3VsZCBvbmx5IGJlIGludm9rZWQgd2hlbiBpdCBpcyBrbm93biB3aXRoXG4gICAqIGNlcnRhaW50eSB0aGF0IHdlIGFyZSAqKm5vdCoqIGluIGEgRE9NIHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBZb3UgbWF5IHdhbnQgdG8gY2FsbCB0aGlzIHdoZW4geW91IGtub3cgdGhhdCBzb21lIGRlZXBlciBhc3BlY3Qgb2YgdGhlXG4gICAqIGNvbXBvbmVudCdzIHN0YXRlIGhhcyBjaGFuZ2VkIGJ1dCBgc2V0U3RhdGVgIHdhcyBub3QgY2FsbGVkLlxuICAgKlxuICAgKiBUaGlzIHdpbGwgbm90IGludm9rZSBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYCwgYnV0IGl0IHdpbGwgaW52b2tlXG4gICAqIGBjb21wb25lbnRXaWxsVXBkYXRlYCBhbmQgYGNvbXBvbmVudERpZFVwZGF0ZWAuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLlxuICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIGNvbXBvbmVudCBpcyB1cGRhdGVkLlxuICAgKiBAcGFyYW0gez9zdHJpbmd9IGNhbGxlck5hbWUgbmFtZSBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbiBpbiB0aGUgcHVibGljIEFQSS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlRm9yY2VVcGRhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgJ2ZvcmNlVXBkYXRlJyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIGFsbCBvZiB0aGUgc3RhdGUuIEFsd2F5cyB1c2UgdGhpcyBvciBgc2V0U3RhdGVgIHRvIG11dGF0ZSBzdGF0ZS5cbiAgICogWW91IHNob3VsZCB0cmVhdCBgdGhpcy5zdGF0ZWAgYXMgaW1tdXRhYmxlLlxuICAgKlxuICAgKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBgdGhpcy5zdGF0ZWAgd2lsbCBiZSBpbW1lZGlhdGVseSB1cGRhdGVkLCBzb1xuICAgKiBhY2Nlc3NpbmcgYHRoaXMuc3RhdGVgIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QgbWF5IHJldHVybiB0aGUgb2xkIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbXBsZXRlU3RhdGUgTmV4dCBzdGF0ZS5cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBjb21wb25lbnQgaXMgdXBkYXRlZC5cbiAgICogQHBhcmFtIHs/c3RyaW5nfSBjYWxsZXJOYW1lIG5hbWUgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24gaW4gdGhlIHB1YmxpYyBBUEkuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZVJlcGxhY2VTdGF0ZTogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlLCBjb21wbGV0ZVN0YXRlLCBjYWxsYmFjaywgY2FsbGVyTmFtZSkge1xuICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCAncmVwbGFjZVN0YXRlJyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFNldHMgYSBzdWJzZXQgb2YgdGhlIHN0YXRlLiBUaGlzIG9ubHkgZXhpc3RzIGJlY2F1c2UgX3BlbmRpbmdTdGF0ZSBpc1xuICAgKiBpbnRlcm5hbC4gVGhpcyBwcm92aWRlcyBhIG1lcmdpbmcgc3RyYXRlZ3kgdGhhdCBpcyBub3QgYXZhaWxhYmxlIHRvIGRlZXBcbiAgICogcHJvcGVydGllcyB3aGljaCBpcyBjb25mdXNpbmcuIFRPRE86IEV4cG9zZSBwZW5kaW5nU3RhdGUgb3IgZG9uJ3QgdXNlIGl0XG4gICAqIGR1cmluZyB0aGUgbWVyZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFydGlhbFN0YXRlIE5leHQgcGFydGlhbCBzdGF0ZSB0byBiZSBtZXJnZWQgd2l0aCBzdGF0ZS5cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBjb21wb25lbnQgaXMgdXBkYXRlZC5cbiAgICogQHBhcmFtIHs/c3RyaW5nfSBOYW1lIG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGluIHRoZSBwdWJsaWMgQVBJLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVTZXRTdGF0ZTogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlLCBwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsICdzZXRTdGF0ZScpO1xuICB9XG59O1xuXG52YXIgZW1wdHlPYmplY3QgPSB7fTtcbntcbiAgT2JqZWN0LmZyZWV6ZShlbXB0eU9iamVjdCk7XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBoZWxwZXJzIGZvciB0aGUgdXBkYXRpbmcgc3RhdGUgb2YgYSBjb21wb25lbnQuXG4gKi9cbmZ1bmN0aW9uIENvbXBvbmVudChwcm9wcywgY29udGV4dCwgdXBkYXRlcikge1xuICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIC8vIElmIGEgY29tcG9uZW50IGhhcyBzdHJpbmcgcmVmcywgd2Ugd2lsbCBhc3NpZ24gYSBkaWZmZXJlbnQgb2JqZWN0IGxhdGVyLlxuICB0aGlzLnJlZnMgPSBlbXB0eU9iamVjdDtcbiAgLy8gV2UgaW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCB1cGRhdGVyIGJ1dCB0aGUgcmVhbCBvbmUgZ2V0cyBpbmplY3RlZCBieSB0aGVcbiAgLy8gcmVuZGVyZXIuXG4gIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7XG59XG5cbkNvbXBvbmVudC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCA9IHt9O1xuXG4vKipcbiAqIFNldHMgYSBzdWJzZXQgb2YgdGhlIHN0YXRlLiBBbHdheXMgdXNlIHRoaXMgdG8gbXV0YXRlXG4gKiBzdGF0ZS4gWW91IHNob3VsZCB0cmVhdCBgdGhpcy5zdGF0ZWAgYXMgaW1tdXRhYmxlLlxuICpcbiAqIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGB0aGlzLnN0YXRlYCB3aWxsIGJlIGltbWVkaWF0ZWx5IHVwZGF0ZWQsIHNvXG4gKiBhY2Nlc3NpbmcgYHRoaXMuc3RhdGVgIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QgbWF5IHJldHVybiB0aGUgb2xkIHZhbHVlLlxuICpcbiAqIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGNhbGxzIHRvIGBzZXRTdGF0ZWAgd2lsbCBydW4gc3luY2hyb25vdXNseSxcbiAqIGFzIHRoZXkgbWF5IGV2ZW50dWFsbHkgYmUgYmF0Y2hlZCB0b2dldGhlci4gIFlvdSBjYW4gcHJvdmlkZSBhbiBvcHRpb25hbFxuICogY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIGNhbGwgdG8gc2V0U3RhdGUgaXMgYWN0dWFsbHlcbiAqIGNvbXBsZXRlZC5cbiAqXG4gKiBXaGVuIGEgZnVuY3Rpb24gaXMgcHJvdmlkZWQgdG8gc2V0U3RhdGUsIGl0IHdpbGwgYmUgY2FsbGVkIGF0IHNvbWUgcG9pbnQgaW5cbiAqIHRoZSBmdXR1cmUgKG5vdCBzeW5jaHJvbm91c2x5KS4gSXQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgdXAgdG8gZGF0ZVxuICogY29tcG9uZW50IGFyZ3VtZW50cyAoc3RhdGUsIHByb3BzLCBjb250ZXh0KS4gVGhlc2UgdmFsdWVzIGNhbiBiZSBkaWZmZXJlbnRcbiAqIGZyb20gdGhpcy4qIGJlY2F1c2UgeW91ciBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGFmdGVyIHJlY2VpdmVQcm9wcyBidXQgYmVmb3JlXG4gKiBzaG91bGRDb21wb25lbnRVcGRhdGUsIGFuZCB0aGlzIG5ldyBzdGF0ZSwgcHJvcHMsIGFuZCBjb250ZXh0IHdpbGwgbm90IHlldCBiZVxuICogYXNzaWduZWQgdG8gdGhpcy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdHxmdW5jdGlvbn0gcGFydGlhbFN0YXRlIE5leHQgcGFydGlhbCBzdGF0ZSBvciBmdW5jdGlvbiB0b1xuICogICAgICAgIHByb2R1Y2UgbmV4dCBwYXJ0aWFsIHN0YXRlIHRvIGJlIG1lcmdlZCB3aXRoIGN1cnJlbnQgc3RhdGUuXG4gKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHN0YXRlIGlzIHVwZGF0ZWQuXG4gKiBAZmluYWxcbiAqIEBwcm90ZWN0ZWRcbiAqL1xuQ29tcG9uZW50LnByb3RvdHlwZS5zZXRTdGF0ZSA9IGZ1bmN0aW9uIChwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrKSB7XG4gICEodHlwZW9mIHBhcnRpYWxTdGF0ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIHBhcnRpYWxTdGF0ZSA9PT0gJ2Z1bmN0aW9uJyB8fCBwYXJ0aWFsU3RhdGUgPT0gbnVsbCkgPyBpbnZhcmlhbnQoZmFsc2UsICdzZXRTdGF0ZSguLi4pOiB0YWtlcyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzIHRvIHVwZGF0ZSBvciBhIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcy4nKSA6IHZvaWQgMDtcbiAgdGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLCBwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrLCAnc2V0U3RhdGUnKTtcbn07XG5cbi8qKlxuICogRm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gaXQgaXMga25vd24gd2l0aFxuICogY2VydGFpbnR5IHRoYXQgd2UgYXJlICoqbm90KiogaW4gYSBET00gdHJhbnNhY3Rpb24uXG4gKlxuICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZVxuICogY29tcG9uZW50J3Mgc3RhdGUgaGFzIGNoYW5nZWQgYnV0IGBzZXRTdGF0ZWAgd2FzIG5vdCBjYWxsZWQuXG4gKlxuICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAsIGJ1dCBpdCB3aWxsIGludm9rZVxuICogYGNvbXBvbmVudFdpbGxVcGRhdGVgIGFuZCBgY29tcG9uZW50RGlkVXBkYXRlYC5cbiAqXG4gKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHVwZGF0ZSBpcyBjb21wbGV0ZS5cbiAqIEBmaW5hbFxuICogQHByb3RlY3RlZFxuICovXG5Db21wb25lbnQucHJvdG90eXBlLmZvcmNlVXBkYXRlID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gIHRoaXMudXBkYXRlci5lbnF1ZXVlRm9yY2VVcGRhdGUodGhpcywgY2FsbGJhY2ssICdmb3JjZVVwZGF0ZScpO1xufTtcblxuLyoqXG4gKiBEZXByZWNhdGVkIEFQSXMuIFRoZXNlIEFQSXMgdXNlZCB0byBleGlzdCBvbiBjbGFzc2ljIFJlYWN0IGNsYXNzZXMgYnV0IHNpbmNlXG4gKiB3ZSB3b3VsZCBsaWtlIHRvIGRlcHJlY2F0ZSB0aGVtLCB3ZSdyZSBub3QgZ29pbmcgdG8gbW92ZSB0aGVtIG92ZXIgdG8gdGhpc1xuICogbW9kZXJuIGJhc2UgY2xhc3MuIEluc3RlYWQsIHdlIGRlZmluZSBhIGdldHRlciB0aGF0IHdhcm5zIGlmIGl0J3MgYWNjZXNzZWQuXG4gKi9cbntcbiAgdmFyIGRlcHJlY2F0ZWRBUElzID0ge1xuICAgIGlzTW91bnRlZDogWydpc01vdW50ZWQnLCAnSW5zdGVhZCwgbWFrZSBzdXJlIHRvIGNsZWFuIHVwIHN1YnNjcmlwdGlvbnMgYW5kIHBlbmRpbmcgcmVxdWVzdHMgaW4gJyArICdjb21wb25lbnRXaWxsVW5tb3VudCB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcy4nXSxcbiAgICByZXBsYWNlU3RhdGU6IFsncmVwbGFjZVN0YXRlJywgJ1JlZmFjdG9yIHlvdXIgY29kZSB0byB1c2Ugc2V0U3RhdGUgaW5zdGVhZCAoc2VlICcgKyAnaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zMjM2KS4nXVxuICB9O1xuICB2YXIgZGVmaW5lRGVwcmVjYXRpb25XYXJuaW5nID0gZnVuY3Rpb24gKG1ldGhvZE5hbWUsIGluZm8pIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29tcG9uZW50LnByb3RvdHlwZSwgbWV0aG9kTmFtZSwge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxvd1ByaW9yaXR5V2FybmluZyQxKGZhbHNlLCAnJXMoLi4uKSBpcyBkZXByZWNhdGVkIGluIHBsYWluIEphdmFTY3JpcHQgUmVhY3QgY2xhc3Nlcy4gJXMnLCBpbmZvWzBdLCBpbmZvWzFdKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgZm9yICh2YXIgZm5OYW1lIGluIGRlcHJlY2F0ZWRBUElzKSB7XG4gICAgaWYgKGRlcHJlY2F0ZWRBUElzLmhhc093blByb3BlcnR5KGZuTmFtZSkpIHtcbiAgICAgIGRlZmluZURlcHJlY2F0aW9uV2FybmluZyhmbk5hbWUsIGRlcHJlY2F0ZWRBUElzW2ZuTmFtZV0pO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBDb21wb25lbnREdW1teSgpIHt9XG5Db21wb25lbnREdW1teS5wcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuXG4vKipcbiAqIENvbnZlbmllbmNlIGNvbXBvbmVudCB3aXRoIGRlZmF1bHQgc2hhbGxvdyBlcXVhbGl0eSBjaGVjayBmb3Igc0NVLlxuICovXG5mdW5jdGlvbiBQdXJlQ29tcG9uZW50KHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgLy8gSWYgYSBjb21wb25lbnQgaGFzIHN0cmluZyByZWZzLCB3ZSB3aWxsIGFzc2lnbiBhIGRpZmZlcmVudCBvYmplY3QgbGF0ZXIuXG4gIHRoaXMucmVmcyA9IGVtcHR5T2JqZWN0O1xuICB0aGlzLnVwZGF0ZXIgPSB1cGRhdGVyIHx8IFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlO1xufVxuXG52YXIgcHVyZUNvbXBvbmVudFByb3RvdHlwZSA9IFB1cmVDb21wb25lbnQucHJvdG90eXBlID0gbmV3IENvbXBvbmVudER1bW15KCk7XG5wdXJlQ29tcG9uZW50UHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUHVyZUNvbXBvbmVudDtcbi8vIEF2b2lkIGFuIGV4dHJhIHByb3RvdHlwZSBqdW1wIGZvciB0aGVzZSBtZXRob2RzLlxuX2Fzc2lnbihwdXJlQ29tcG9uZW50UHJvdG90eXBlLCBDb21wb25lbnQucHJvdG90eXBlKTtcbnB1cmVDb21wb25lbnRQcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQgPSB0cnVlO1xuXG4vLyBhbiBpbW11dGFibGUgb2JqZWN0IHdpdGggYSBzaW5nbGUgbXV0YWJsZSB2YWx1ZVxuZnVuY3Rpb24gY3JlYXRlUmVmKCkge1xuICB2YXIgcmVmT2JqZWN0ID0ge1xuICAgIGN1cnJlbnQ6IG51bGxcbiAgfTtcbiAge1xuICAgIE9iamVjdC5zZWFsKHJlZk9iamVjdCk7XG4gIH1cbiAgcmV0dXJuIHJlZk9iamVjdDtcbn1cblxuLyoqXG4gKiBLZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBkaXNwYXRjaGVyLlxuICovXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciA9IHtcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAdHlwZSB7UmVhY3RDb21wb25lbnR9XG4gICAqL1xuICBjdXJyZW50OiBudWxsXG59O1xuXG4vKipcbiAqIEtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IG93bmVyLlxuICpcbiAqIFRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBjb21wb25lbnQgd2hvIHNob3VsZCBvd24gYW55IGNvbXBvbmVudHMgdGhhdCBhcmVcbiAqIGN1cnJlbnRseSBiZWluZyBjb25zdHJ1Y3RlZC5cbiAqL1xudmFyIFJlYWN0Q3VycmVudE93bmVyID0ge1xuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEB0eXBlIHtSZWFjdENvbXBvbmVudH1cbiAgICovXG4gIGN1cnJlbnQ6IG51bGxcbn07XG5cbnZhciBCRUZPUkVfU0xBU0hfUkUgPSAvXiguKilbXFxcXFxcL10vO1xuXG52YXIgZGVzY3JpYmVDb21wb25lbnRGcmFtZSA9IGZ1bmN0aW9uIChuYW1lLCBzb3VyY2UsIG93bmVyTmFtZSkge1xuICB2YXIgc291cmNlSW5mbyA9ICcnO1xuICBpZiAoc291cmNlKSB7XG4gICAgdmFyIHBhdGggPSBzb3VyY2UuZmlsZU5hbWU7XG4gICAgdmFyIGZpbGVOYW1lID0gcGF0aC5yZXBsYWNlKEJFRk9SRV9TTEFTSF9SRSwgJycpO1xuICAgIHtcbiAgICAgIC8vIEluIERFViwgaW5jbHVkZSBjb2RlIGZvciBhIGNvbW1vbiBzcGVjaWFsIGNhc2U6XG4gICAgICAvLyBwcmVmZXIgXCJmb2xkZXIvaW5kZXguanNcIiBpbnN0ZWFkIG9mIGp1c3QgXCJpbmRleC5qc1wiLlxuICAgICAgaWYgKC9eaW5kZXhcXC4vLnRlc3QoZmlsZU5hbWUpKSB7XG4gICAgICAgIHZhciBtYXRjaCA9IHBhdGgubWF0Y2goQkVGT1JFX1NMQVNIX1JFKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgdmFyIHBhdGhCZWZvcmVTbGFzaCA9IG1hdGNoWzFdO1xuICAgICAgICAgIGlmIChwYXRoQmVmb3JlU2xhc2gpIHtcbiAgICAgICAgICAgIHZhciBmb2xkZXJOYW1lID0gcGF0aEJlZm9yZVNsYXNoLnJlcGxhY2UoQkVGT1JFX1NMQVNIX1JFLCAnJyk7XG4gICAgICAgICAgICBmaWxlTmFtZSA9IGZvbGRlck5hbWUgKyAnLycgKyBmaWxlTmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgc291cmNlSW5mbyA9ICcgKGF0ICcgKyBmaWxlTmFtZSArICc6JyArIHNvdXJjZS5saW5lTnVtYmVyICsgJyknO1xuICB9IGVsc2UgaWYgKG93bmVyTmFtZSkge1xuICAgIHNvdXJjZUluZm8gPSAnIChjcmVhdGVkIGJ5ICcgKyBvd25lck5hbWUgKyAnKSc7XG4gIH1cbiAgcmV0dXJuICdcXG4gICAgaW4gJyArIChuYW1lIHx8ICdVbmtub3duJykgKyBzb3VyY2VJbmZvO1xufTtcblxudmFyIFJlc29sdmVkID0gMTtcblxuXG5mdW5jdGlvbiByZWZpbmVSZXNvbHZlZExhenlDb21wb25lbnQobGF6eUNvbXBvbmVudCkge1xuICByZXR1cm4gbGF6eUNvbXBvbmVudC5fc3RhdHVzID09PSBSZXNvbHZlZCA/IGxhenlDb21wb25lbnQuX3Jlc3VsdCA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldFdyYXBwZWROYW1lKG91dGVyVHlwZSwgaW5uZXJUeXBlLCB3cmFwcGVyTmFtZSkge1xuICB2YXIgZnVuY3Rpb25OYW1lID0gaW5uZXJUeXBlLmRpc3BsYXlOYW1lIHx8IGlubmVyVHlwZS5uYW1lIHx8ICcnO1xuICByZXR1cm4gb3V0ZXJUeXBlLmRpc3BsYXlOYW1lIHx8IChmdW5jdGlvbk5hbWUgIT09ICcnID8gd3JhcHBlck5hbWUgKyAnKCcgKyBmdW5jdGlvbk5hbWUgKyAnKScgOiB3cmFwcGVyTmFtZSk7XG59XG5cbmZ1bmN0aW9uIGdldENvbXBvbmVudE5hbWUodHlwZSkge1xuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgLy8gSG9zdCByb290LCB0ZXh0IG5vZGUgb3IganVzdCBpbnZhbGlkIHR5cGUuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAge1xuICAgIGlmICh0eXBlb2YgdHlwZS50YWcgPT09ICdudW1iZXInKSB7XG4gICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdSZWNlaXZlZCBhbiB1bmV4cGVjdGVkIG9iamVjdCBpbiBnZXRDb21wb25lbnROYW1lKCkuICcgKyAnVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgfVxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTpcbiAgICAgIHJldHVybiAnQ29uY3VycmVudE1vZGUnO1xuICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgIHJldHVybiAnRnJhZ21lbnQnO1xuICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICByZXR1cm4gJ1BvcnRhbCc7XG4gICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgcmV0dXJuICdQcm9maWxlcic7XG4gICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgcmV0dXJuICdTdHJpY3RNb2RlJztcbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlJztcbiAgfVxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgcmV0dXJuICdDb250ZXh0LkNvbnN1bWVyJztcbiAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgcmV0dXJuICdDb250ZXh0LlByb3ZpZGVyJztcbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldFdyYXBwZWROYW1lKHR5cGUsIHR5cGUucmVuZGVyLCAnRm9yd2FyZFJlZicpO1xuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKHR5cGUudHlwZSk7XG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciB0aGVuYWJsZSA9IHR5cGU7XG4gICAgICAgICAgdmFyIHJlc29sdmVkVGhlbmFibGUgPSByZWZpbmVSZXNvbHZlZExhenlDb21wb25lbnQodGhlbmFibGUpO1xuICAgICAgICAgIGlmIChyZXNvbHZlZFRoZW5hYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZShyZXNvbHZlZFRoZW5hYmxlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0ge307XG5cbnZhciBjdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCA9IG51bGw7XG5cbmZ1bmN0aW9uIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpIHtcbiAge1xuICAgIGN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50ID0gZWxlbWVudDtcbiAgfVxufVxuXG57XG4gIC8vIFN0YWNrIGltcGxlbWVudGF0aW9uIGluamVjdGVkIGJ5IHRoZSBjdXJyZW50IHJlbmRlcmVyLlxuICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjayA9IG51bGw7XG5cbiAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRTdGFja0FkZGVuZHVtID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdGFjayA9ICcnO1xuXG4gICAgLy8gQWRkIGFuIGV4dHJhIHRvcCBmcmFtZSB3aGlsZSBhbiBlbGVtZW50IGlzIGJlaW5nIHZhbGlkYXRlZFxuICAgIGlmIChjdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCkge1xuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKGN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50LnR5cGUpO1xuICAgICAgdmFyIG93bmVyID0gY3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQuX293bmVyO1xuICAgICAgc3RhY2sgKz0gZGVzY3JpYmVDb21wb25lbnRGcmFtZShuYW1lLCBjdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudC5fc291cmNlLCBvd25lciAmJiBnZXRDb21wb25lbnROYW1lKG93bmVyLnR5cGUpKTtcbiAgICB9XG5cbiAgICAvLyBEZWxlZ2F0ZSB0byB0aGUgaW5qZWN0ZWQgcmVuZGVyZXItc3BlY2lmaWMgaW1wbGVtZW50YXRpb25cbiAgICB2YXIgaW1wbCA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0Q3VycmVudFN0YWNrO1xuICAgIGlmIChpbXBsKSB7XG4gICAgICBzdGFjayArPSBpbXBsKCkgfHwgJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YWNrO1xuICB9O1xufVxuXG52YXIgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPSB7XG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXI6IFJlYWN0Q3VycmVudERpc3BhdGNoZXIsXG4gIFJlYWN0Q3VycmVudE93bmVyOiBSZWFjdEN1cnJlbnRPd25lcixcbiAgLy8gVXNlZCBieSByZW5kZXJlcnMgdG8gYXZvaWQgYnVuZGxpbmcgb2JqZWN0LWFzc2lnbiB0d2ljZSBpbiBVTUQgYnVuZGxlczpcbiAgYXNzaWduOiBfYXNzaWduXG59O1xuXG57XG4gIF9hc3NpZ24oUmVhY3RTaGFyZWRJbnRlcm5hbHMsIHtcbiAgICAvLyBUaGVzZSBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGluIHByb2R1Y3Rpb24uXG4gICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTogUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSxcbiAgICAvLyBTaGltIGZvciBSZWFjdCBET00gMTYuMC4wIHdoaWNoIHN0aWxsIGRlc3RydWN0dXJlZCAoYnV0IG5vdCB1c2VkKSB0aGlzLlxuICAgIC8vIFRPRE86IHJlbW92ZSBpbiBSZWFjdCAxNy4wLlxuICAgIFJlYWN0Q29tcG9uZW50VHJlZUhvb2s6IHt9XG4gIH0pO1xufVxuXG4vKipcbiAqIFNpbWlsYXIgdG8gaW52YXJpYW50IGJ1dCBvbmx5IGxvZ3MgYSB3YXJuaW5nIGlmIHRoZSBjb25kaXRpb24gaXMgbm90IG1ldC5cbiAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gbG9nIGlzc3VlcyBpbiBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMgaW4gY3JpdGljYWxcbiAqIHBhdGhzLiBSZW1vdmluZyB0aGUgbG9nZ2luZyBjb2RlIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50cyB3aWxsIGtlZXAgdGhlXG4gKiBzYW1lIGxvZ2ljIGFuZCBmb2xsb3cgdGhlIHNhbWUgY29kZSBwYXRocy5cbiAqL1xuXG52YXIgd2FybmluZyA9IHdhcm5pbmdXaXRob3V0U3RhY2skMTtcblxue1xuICB3YXJuaW5nID0gZnVuY3Rpb24gKGNvbmRpdGlvbiwgZm9ybWF0KSB7XG4gICAgaWYgKGNvbmRpdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG4gICAgdmFyIHN0YWNrID0gUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRTdGFja0FkZGVuZHVtKCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3dhcm5pbmctYW5kLWludmFyaWFudC1hcmdzXG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4gPiAyID8gX2xlbiAtIDIgOiAwKSwgX2tleSA9IDI7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleSAtIDJdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMS5hcHBseSh1bmRlZmluZWQsIFtmYWxzZSwgZm9ybWF0ICsgJyVzJ10uY29uY2F0KGFyZ3MsIFtzdGFja10pKTtcbiAgfTtcbn1cblxudmFyIHdhcm5pbmckMSA9IHdhcm5pbmc7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBSRVNFUlZFRF9QUk9QUyA9IHtcbiAga2V5OiB0cnVlLFxuICByZWY6IHRydWUsXG4gIF9fc2VsZjogdHJ1ZSxcbiAgX19zb3VyY2U6IHRydWVcbn07XG5cbnZhciBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biA9IHZvaWQgMDtcbnZhciBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biA9IHZvaWQgMDtcblxuZnVuY3Rpb24gaGFzVmFsaWRSZWYoY29uZmlnKSB7XG4gIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsICdyZWYnKSkge1xuICAgICAgdmFyIGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY29uZmlnLCAncmVmJykuZ2V0O1xuICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gY29uZmlnLnJlZiAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBoYXNWYWxpZEtleShjb25maWcpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ2tleScpKSB7XG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdrZXknKS5nZXQ7XG4gICAgICBpZiAoZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0V2FybmluZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBjb25maWcua2V5ICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICB2YXIgd2FybkFib3V0QWNjZXNzaW5nS2V5ID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICghc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24pIHtcbiAgICAgIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duID0gdHJ1ZTtcbiAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJyVzOiBga2V5YCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9mYi5tZS9yZWFjdC1zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKTtcbiAgICB9XG4gIH07XG4gIHdhcm5BYm91dEFjY2Vzc2luZ0tleS5pc1JlYWN0V2FybmluZyA9IHRydWU7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ2tleScsIHtcbiAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ0tleSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGRlZmluZVJlZlByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICB2YXIgd2FybkFib3V0QWNjZXNzaW5nUmVmID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICghc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24pIHtcbiAgICAgIHNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duID0gdHJ1ZTtcbiAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJyVzOiBgcmVmYCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9mYi5tZS9yZWFjdC1zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKTtcbiAgICB9XG4gIH07XG4gIHdhcm5BYm91dEFjY2Vzc2luZ1JlZi5pc1JlYWN0V2FybmluZyA9IHRydWU7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ3JlZicsIHtcbiAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ1JlZixcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59XG5cbi8qKlxuICogRmFjdG9yeSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IFJlYWN0IGVsZW1lbnQuIFRoaXMgbm8gbG9uZ2VyIGFkaGVyZXMgdG9cbiAqIHRoZSBjbGFzcyBwYXR0ZXJuLCBzbyBkbyBub3QgdXNlIG5ldyB0byBjYWxsIGl0LiBBbHNvLCBubyBpbnN0YW5jZW9mIGNoZWNrXG4gKiB3aWxsIHdvcmsuIEluc3RlYWQgdGVzdCAkJHR5cGVvZiBmaWVsZCBhZ2FpbnN0IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSB0byBjaGVja1xuICogaWYgc29tZXRoaW5nIGlzIGEgUmVhY3QgRWxlbWVudC5cbiAqXG4gKiBAcGFyYW0geyp9IHR5cGVcbiAqIEBwYXJhbSB7Kn0ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IHJlZlxuICogQHBhcmFtIHsqfSBzZWxmIEEgKnRlbXBvcmFyeSogaGVscGVyIHRvIGRldGVjdCBwbGFjZXMgd2hlcmUgYHRoaXNgIGlzXG4gKiBkaWZmZXJlbnQgZnJvbSB0aGUgYG93bmVyYCB3aGVuIFJlYWN0LmNyZWF0ZUVsZW1lbnQgaXMgY2FsbGVkLCBzbyB0aGF0IHdlXG4gKiBjYW4gd2Fybi4gV2Ugd2FudCB0byBnZXQgcmlkIG9mIG93bmVyIGFuZCByZXBsYWNlIHN0cmluZyBgcmVmYHMgd2l0aCBhcnJvd1xuICogZnVuY3Rpb25zLCBhbmQgYXMgbG9uZyBhcyBgdGhpc2AgYW5kIG93bmVyIGFyZSB0aGUgc2FtZSwgdGhlcmUgd2lsbCBiZSBub1xuICogY2hhbmdlIGluIGJlaGF2aW9yLlxuICogQHBhcmFtIHsqfSBzb3VyY2UgQW4gYW5ub3RhdGlvbiBvYmplY3QgKGFkZGVkIGJ5IGEgdHJhbnNwaWxlciBvciBvdGhlcndpc2UpXG4gKiBpbmRpY2F0aW5nIGZpbGVuYW1lLCBsaW5lIG51bWJlciwgYW5kL29yIG90aGVyIGluZm9ybWF0aW9uLlxuICogQHBhcmFtIHsqfSBvd25lclxuICogQHBhcmFtIHsqfSBwcm9wc1xuICogQGludGVybmFsXG4gKi9cbnZhciBSZWFjdEVsZW1lbnQgPSBmdW5jdGlvbiAodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgb3duZXIsIHByb3BzKSB7XG4gIHZhciBlbGVtZW50ID0ge1xuICAgIC8vIFRoaXMgdGFnIGFsbG93cyB1cyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIGFzIGEgUmVhY3QgRWxlbWVudFxuICAgICQkdHlwZW9mOiBSRUFDVF9FTEVNRU5UX1RZUEUsXG5cbiAgICAvLyBCdWlsdC1pbiBwcm9wZXJ0aWVzIHRoYXQgYmVsb25nIG9uIHRoZSBlbGVtZW50XG4gICAgdHlwZTogdHlwZSxcbiAgICBrZXk6IGtleSxcbiAgICByZWY6IHJlZixcbiAgICBwcm9wczogcHJvcHMsXG5cbiAgICAvLyBSZWNvcmQgdGhlIGNvbXBvbmVudCByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgdGhpcyBlbGVtZW50LlxuICAgIF9vd25lcjogb3duZXJcbiAgfTtcblxuICB7XG4gICAgLy8gVGhlIHZhbGlkYXRpb24gZmxhZyBpcyBjdXJyZW50bHkgbXV0YXRpdmUuIFdlIHB1dCBpdCBvblxuICAgIC8vIGFuIGV4dGVybmFsIGJhY2tpbmcgc3RvcmUgc28gdGhhdCB3ZSBjYW4gZnJlZXplIHRoZSB3aG9sZSBvYmplY3QuXG4gICAgLy8gVGhpcyBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhIFdlYWtNYXAgb25jZSB0aGV5IGFyZSBpbXBsZW1lbnRlZCBpblxuICAgIC8vIGNvbW1vbmx5IHVzZWQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzLlxuICAgIGVsZW1lbnQuX3N0b3JlID0ge307XG5cbiAgICAvLyBUbyBtYWtlIGNvbXBhcmluZyBSZWFjdEVsZW1lbnRzIGVhc2llciBmb3IgdGVzdGluZyBwdXJwb3Nlcywgd2UgbWFrZVxuICAgIC8vIHRoZSB2YWxpZGF0aW9uIGZsYWcgbm9uLWVudW1lcmFibGUgKHdoZXJlIHBvc3NpYmxlLCB3aGljaCBzaG91bGRcbiAgICAvLyBpbmNsdWRlIGV2ZXJ5IGVudmlyb25tZW50IHdlIHJ1biB0ZXN0cyBpbiksIHNvIHRoZSB0ZXN0IGZyYW1ld29ya1xuICAgIC8vIGlnbm9yZXMgaXQuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQuX3N0b3JlLCAndmFsaWRhdGVkJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICB2YWx1ZTogZmFsc2VcbiAgICB9KTtcbiAgICAvLyBzZWxmIGFuZCBzb3VyY2UgYXJlIERFViBvbmx5IHByb3BlcnRpZXMuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQsICdfc2VsZicsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBzZWxmXG4gICAgfSk7XG4gICAgLy8gVHdvIGVsZW1lbnRzIGNyZWF0ZWQgaW4gdHdvIGRpZmZlcmVudCBwbGFjZXMgc2hvdWxkIGJlIGNvbnNpZGVyZWRcbiAgICAvLyBlcXVhbCBmb3IgdGVzdGluZyBwdXJwb3NlcyBhbmQgdGhlcmVmb3JlIHdlIGhpZGUgaXQgZnJvbSBlbnVtZXJhdGlvbi5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudCwgJ19zb3VyY2UnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogc291cmNlXG4gICAgfSk7XG4gICAgaWYgKE9iamVjdC5mcmVlemUpIHtcbiAgICAgIE9iamVjdC5mcmVlemUoZWxlbWVudC5wcm9wcyk7XG4gICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBSZWFjdEVsZW1lbnQgb2YgdGhlIGdpdmVuIHR5cGUuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2NyZWF0ZWVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0eXBlLCBjb25maWcsIGNoaWxkcmVuKSB7XG4gIHZhciBwcm9wTmFtZSA9IHZvaWQgMDtcblxuICAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkXG4gIHZhciBwcm9wcyA9IHt9O1xuXG4gIHZhciBrZXkgPSBudWxsO1xuICB2YXIgcmVmID0gbnVsbDtcbiAgdmFyIHNlbGYgPSBudWxsO1xuICB2YXIgc291cmNlID0gbnVsbDtcblxuICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICBpZiAoaGFzVmFsaWRSZWYoY29uZmlnKSkge1xuICAgICAgcmVmID0gY29uZmlnLnJlZjtcbiAgICB9XG4gICAgaWYgKGhhc1ZhbGlkS2V5KGNvbmZpZykpIHtcbiAgICAgIGtleSA9ICcnICsgY29uZmlnLmtleTtcbiAgICB9XG5cbiAgICBzZWxmID0gY29uZmlnLl9fc2VsZiA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNvbmZpZy5fX3NlbGY7XG4gICAgc291cmNlID0gY29uZmlnLl9fc291cmNlID09PSB1bmRlZmluZWQgPyBudWxsIDogY29uZmlnLl9fc291cmNlO1xuICAgIC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIGFyZSBhZGRlZCB0byBhIG5ldyBwcm9wcyBvYmplY3RcbiAgICBmb3IgKHByb3BOYW1lIGluIGNvbmZpZykge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBwcm9wTmFtZSkgJiYgIVJFU0VSVkVEX1BST1BTLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBjb25maWdbcHJvcE5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENoaWxkcmVuIGNhbiBiZSBtb3JlIHRoYW4gb25lIGFyZ3VtZW50LCBhbmQgdGhvc2UgYXJlIHRyYW5zZmVycmVkIG9udG9cbiAgLy8gdGhlIG5ld2x5IGFsbG9jYXRlZCBwcm9wcyBvYmplY3QuXG4gIHZhciBjaGlsZHJlbkxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuICBpZiAoY2hpbGRyZW5MZW5ndGggPT09IDEpIHtcbiAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB9IGVsc2UgaWYgKGNoaWxkcmVuTGVuZ3RoID4gMSkge1xuICAgIHZhciBjaGlsZEFycmF5ID0gQXJyYXkoY2hpbGRyZW5MZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW5MZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGRBcnJheVtpXSA9IGFyZ3VtZW50c1tpICsgMl07XG4gICAgfVxuICAgIHtcbiAgICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICAgIE9iamVjdC5mcmVlemUoY2hpbGRBcnJheSk7XG4gICAgICB9XG4gICAgfVxuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRBcnJheTtcbiAgfVxuXG4gIC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wc1xuICBpZiAodHlwZSAmJiB0eXBlLmRlZmF1bHRQcm9wcykge1xuICAgIHZhciBkZWZhdWx0UHJvcHMgPSB0eXBlLmRlZmF1bHRQcm9wcztcbiAgICBmb3IgKHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykge1xuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHtcbiAgICBpZiAoa2V5IHx8IHJlZikge1xuICAgICAgdmFyIGRpc3BsYXlOYW1lID0gdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgPyB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCAnVW5rbm93bicgOiB0eXBlO1xuICAgICAgaWYgKGtleSkge1xuICAgICAgICBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgICAgaWYgKHJlZikge1xuICAgICAgICBkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gUmVhY3RFbGVtZW50KHR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQsIHByb3BzKTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYSBmdW5jdGlvbiB0aGF0IHByb2R1Y2VzIFJlYWN0RWxlbWVudHMgb2YgYSBnaXZlbiB0eXBlLlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNjcmVhdGVmYWN0b3J5XG4gKi9cblxuXG5mdW5jdGlvbiBjbG9uZUFuZFJlcGxhY2VLZXkob2xkRWxlbWVudCwgbmV3S2V5KSB7XG4gIHZhciBuZXdFbGVtZW50ID0gUmVhY3RFbGVtZW50KG9sZEVsZW1lbnQudHlwZSwgbmV3S2V5LCBvbGRFbGVtZW50LnJlZiwgb2xkRWxlbWVudC5fc2VsZiwgb2xkRWxlbWVudC5fc291cmNlLCBvbGRFbGVtZW50Ll9vd25lciwgb2xkRWxlbWVudC5wcm9wcyk7XG5cbiAgcmV0dXJuIG5ld0VsZW1lbnQ7XG59XG5cbi8qKlxuICogQ2xvbmUgYW5kIHJldHVybiBhIG5ldyBSZWFjdEVsZW1lbnQgdXNpbmcgZWxlbWVudCBhcyB0aGUgc3RhcnRpbmcgcG9pbnQuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2Nsb25lZWxlbWVudFxuICovXG5mdW5jdGlvbiBjbG9uZUVsZW1lbnQoZWxlbWVudCwgY29uZmlnLCBjaGlsZHJlbikge1xuICAhIShlbGVtZW50ID09PSBudWxsIHx8IGVsZW1lbnQgPT09IHVuZGVmaW5lZCkgPyBpbnZhcmlhbnQoZmFsc2UsICdSZWFjdC5jbG9uZUVsZW1lbnQoLi4uKTogVGhlIGFyZ3VtZW50IG11c3QgYmUgYSBSZWFjdCBlbGVtZW50LCBidXQgeW91IHBhc3NlZCAlcy4nLCBlbGVtZW50KSA6IHZvaWQgMDtcblxuICB2YXIgcHJvcE5hbWUgPSB2b2lkIDA7XG5cbiAgLy8gT3JpZ2luYWwgcHJvcHMgYXJlIGNvcGllZFxuICB2YXIgcHJvcHMgPSBfYXNzaWduKHt9LCBlbGVtZW50LnByb3BzKTtcblxuICAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkXG4gIHZhciBrZXkgPSBlbGVtZW50LmtleTtcbiAgdmFyIHJlZiA9IGVsZW1lbnQucmVmO1xuICAvLyBTZWxmIGlzIHByZXNlcnZlZCBzaW5jZSB0aGUgb3duZXIgaXMgcHJlc2VydmVkLlxuICB2YXIgc2VsZiA9IGVsZW1lbnQuX3NlbGY7XG4gIC8vIFNvdXJjZSBpcyBwcmVzZXJ2ZWQgc2luY2UgY2xvbmVFbGVtZW50IGlzIHVubGlrZWx5IHRvIGJlIHRhcmdldGVkIGJ5IGFcbiAgLy8gdHJhbnNwaWxlciwgYW5kIHRoZSBvcmlnaW5hbCBzb3VyY2UgaXMgcHJvYmFibHkgYSBiZXR0ZXIgaW5kaWNhdG9yIG9mIHRoZVxuICAvLyB0cnVlIG93bmVyLlxuICB2YXIgc291cmNlID0gZWxlbWVudC5fc291cmNlO1xuXG4gIC8vIE93bmVyIHdpbGwgYmUgcHJlc2VydmVkLCB1bmxlc3MgcmVmIGlzIG92ZXJyaWRkZW5cbiAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG5cbiAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgaWYgKGhhc1ZhbGlkUmVmKGNvbmZpZykpIHtcbiAgICAgIC8vIFNpbGVudGx5IHN0ZWFsIHRoZSByZWYgZnJvbSB0aGUgcGFyZW50LlxuICAgICAgcmVmID0gY29uZmlnLnJlZjtcbiAgICAgIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudDtcbiAgICB9XG4gICAgaWYgKGhhc1ZhbGlkS2V5KGNvbmZpZykpIHtcbiAgICAgIGtleSA9ICcnICsgY29uZmlnLmtleTtcbiAgICB9XG5cbiAgICAvLyBSZW1haW5pbmcgcHJvcGVydGllcyBvdmVycmlkZSBleGlzdGluZyBwcm9wc1xuICAgIHZhciBkZWZhdWx0UHJvcHMgPSB2b2lkIDA7XG4gICAgaWYgKGVsZW1lbnQudHlwZSAmJiBlbGVtZW50LnR5cGUuZGVmYXVsdFByb3BzKSB7XG4gICAgICBkZWZhdWx0UHJvcHMgPSBlbGVtZW50LnR5cGUuZGVmYXVsdFByb3BzO1xuICAgIH1cbiAgICBmb3IgKHByb3BOYW1lIGluIGNvbmZpZykge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBwcm9wTmFtZSkgJiYgIVJFU0VSVkVEX1BST1BTLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICBpZiAoY29uZmlnW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkICYmIGRlZmF1bHRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gUmVzb2x2ZSBkZWZhdWx0IHByb3BzXG4gICAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBjb25maWdbcHJvcE5hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ2hpbGRyZW4gY2FuIGJlIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQsIGFuZCB0aG9zZSBhcmUgdHJhbnNmZXJyZWQgb250b1xuICAvLyB0aGUgbmV3bHkgYWxsb2NhdGVkIHByb3BzIG9iamVjdC5cbiAgdmFyIGNoaWxkcmVuTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCAtIDI7XG4gIGlmIChjaGlsZHJlbkxlbmd0aCA9PT0gMSkge1xuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIH0gZWxzZSBpZiAoY2hpbGRyZW5MZW5ndGggPiAxKSB7XG4gICAgdmFyIGNoaWxkQXJyYXkgPSBBcnJheShjaGlsZHJlbkxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZEFycmF5W2ldID0gYXJndW1lbnRzW2kgKyAyXTtcbiAgICB9XG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZEFycmF5O1xuICB9XG5cbiAgcmV0dXJuIFJlYWN0RWxlbWVudChlbGVtZW50LnR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIG93bmVyLCBwcm9wcyk7XG59XG5cbi8qKlxuICogVmVyaWZpZXMgdGhlIG9iamVjdCBpcyBhIFJlYWN0RWxlbWVudC5cbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjaXN2YWxpZGVsZW1lbnRcbiAqIEBwYXJhbSB7P29iamVjdH0gb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGBvYmplY3RgIGlzIGEgUmVhY3RFbGVtZW50LlxuICogQGZpbmFsXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsICYmIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xufVxuXG52YXIgU0VQQVJBVE9SID0gJy4nO1xudmFyIFNVQlNFUEFSQVRPUiA9ICc6JztcblxuLyoqXG4gKiBFc2NhcGUgYW5kIHdyYXAga2V5IHNvIGl0IGlzIHNhZmUgdG8gdXNlIGFzIGEgcmVhY3RpZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgdG8gYmUgZXNjYXBlZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gdGhlIGVzY2FwZWQga2V5LlxuICovXG5mdW5jdGlvbiBlc2NhcGUoa2V5KSB7XG4gIHZhciBlc2NhcGVSZWdleCA9IC9bPTpdL2c7XG4gIHZhciBlc2NhcGVyTG9va3VwID0ge1xuICAgICc9JzogJz0wJyxcbiAgICAnOic6ICc9MidcbiAgfTtcbiAgdmFyIGVzY2FwZWRTdHJpbmcgPSAoJycgKyBrZXkpLnJlcGxhY2UoZXNjYXBlUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgIHJldHVybiBlc2NhcGVyTG9va3VwW21hdGNoXTtcbiAgfSk7XG5cbiAgcmV0dXJuICckJyArIGVzY2FwZWRTdHJpbmc7XG59XG5cbi8qKlxuICogVE9ETzogVGVzdCB0aGF0IGEgc2luZ2xlIGNoaWxkIGFuZCBhbiBhcnJheSB3aXRoIG9uZSBpdGVtIGhhdmUgdGhlIHNhbWUga2V5XG4gKiBwYXR0ZXJuLlxuICovXG5cbnZhciBkaWRXYXJuQWJvdXRNYXBzID0gZmFsc2U7XG5cbnZhciB1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCA9IC9cXC8rL2c7XG5mdW5jdGlvbiBlc2NhcGVVc2VyUHJvdmlkZWRLZXkodGV4dCkge1xuICByZXR1cm4gKCcnICsgdGV4dCkucmVwbGFjZSh1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCwgJyQmLycpO1xufVxuXG52YXIgUE9PTF9TSVpFID0gMTA7XG52YXIgdHJhdmVyc2VDb250ZXh0UG9vbCA9IFtdO1xuZnVuY3Rpb24gZ2V0UG9vbGVkVHJhdmVyc2VDb250ZXh0KG1hcFJlc3VsdCwga2V5UHJlZml4LCBtYXBGdW5jdGlvbiwgbWFwQ29udGV4dCkge1xuICBpZiAodHJhdmVyc2VDb250ZXh0UG9vbC5sZW5ndGgpIHtcbiAgICB2YXIgdHJhdmVyc2VDb250ZXh0ID0gdHJhdmVyc2VDb250ZXh0UG9vbC5wb3AoKTtcbiAgICB0cmF2ZXJzZUNvbnRleHQucmVzdWx0ID0gbWFwUmVzdWx0O1xuICAgIHRyYXZlcnNlQ29udGV4dC5rZXlQcmVmaXggPSBrZXlQcmVmaXg7XG4gICAgdHJhdmVyc2VDb250ZXh0LmZ1bmMgPSBtYXBGdW5jdGlvbjtcbiAgICB0cmF2ZXJzZUNvbnRleHQuY29udGV4dCA9IG1hcENvbnRleHQ7XG4gICAgdHJhdmVyc2VDb250ZXh0LmNvdW50ID0gMDtcbiAgICByZXR1cm4gdHJhdmVyc2VDb250ZXh0O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICByZXN1bHQ6IG1hcFJlc3VsdCxcbiAgICAgIGtleVByZWZpeDoga2V5UHJlZml4LFxuICAgICAgZnVuYzogbWFwRnVuY3Rpb24sXG4gICAgICBjb250ZXh0OiBtYXBDb250ZXh0LFxuICAgICAgY291bnQ6IDBcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbGVhc2VUcmF2ZXJzZUNvbnRleHQodHJhdmVyc2VDb250ZXh0KSB7XG4gIHRyYXZlcnNlQ29udGV4dC5yZXN1bHQgPSBudWxsO1xuICB0cmF2ZXJzZUNvbnRleHQua2V5UHJlZml4ID0gbnVsbDtcbiAgdHJhdmVyc2VDb250ZXh0LmZ1bmMgPSBudWxsO1xuICB0cmF2ZXJzZUNvbnRleHQuY29udGV4dCA9IG51bGw7XG4gIHRyYXZlcnNlQ29udGV4dC5jb3VudCA9IDA7XG4gIGlmICh0cmF2ZXJzZUNvbnRleHRQb29sLmxlbmd0aCA8IFBPT0xfU0laRSkge1xuICAgIHRyYXZlcnNlQ29udGV4dFBvb2wucHVzaCh0cmF2ZXJzZUNvbnRleHQpO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcGFyYW0geyFzdHJpbmd9IG5hbWVTb0ZhciBOYW1lIG9mIHRoZSBrZXkgcGF0aCBzbyBmYXIuXG4gKiBAcGFyYW0geyFmdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZWFjaCBjaGlsZCBmb3VuZC5cbiAqIEBwYXJhbSB7Pyp9IHRyYXZlcnNlQ29udGV4dCBVc2VkIHRvIHBhc3MgaW5mb3JtYXRpb24gdGhyb3VnaG91dCB0aGUgdHJhdmVyc2FsXG4gKiBwcm9jZXNzLlxuICogQHJldHVybiB7IW51bWJlcn0gVGhlIG51bWJlciBvZiBjaGlsZHJlbiBpbiB0aGlzIHN1YnRyZWUuXG4gKi9cbmZ1bmN0aW9uIHRyYXZlcnNlQWxsQ2hpbGRyZW5JbXBsKGNoaWxkcmVuLCBuYW1lU29GYXIsIGNhbGxiYWNrLCB0cmF2ZXJzZUNvbnRleHQpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgY2hpbGRyZW47XG5cbiAgaWYgKHR5cGUgPT09ICd1bmRlZmluZWQnIHx8IHR5cGUgPT09ICdib29sZWFuJykge1xuICAgIC8vIEFsbCBvZiB0aGUgYWJvdmUgYXJlIHBlcmNlaXZlZCBhcyBudWxsLlxuICAgIGNoaWxkcmVuID0gbnVsbDtcbiAgfVxuXG4gIHZhciBpbnZva2VDYWxsYmFjayA9IGZhbHNlO1xuXG4gIGlmIChjaGlsZHJlbiA9PT0gbnVsbCkge1xuICAgIGludm9rZUNhbGxiYWNrID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICBpbnZva2VDYWxsYmFjayA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgc3dpdGNoIChjaGlsZHJlbi4kJHR5cGVvZikge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgICBpbnZva2VDYWxsYmFjayA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoaW52b2tlQ2FsbGJhY2spIHtcbiAgICBjYWxsYmFjayh0cmF2ZXJzZUNvbnRleHQsIGNoaWxkcmVuLFxuICAgIC8vIElmIGl0J3MgdGhlIG9ubHkgY2hpbGQsIHRyZWF0IHRoZSBuYW1lIGFzIGlmIGl0IHdhcyB3cmFwcGVkIGluIGFuIGFycmF5XG4gICAgLy8gc28gdGhhdCBpdCdzIGNvbnNpc3RlbnQgaWYgdGhlIG51bWJlciBvZiBjaGlsZHJlbiBncm93cy5cbiAgICBuYW1lU29GYXIgPT09ICcnID8gU0VQQVJBVE9SICsgZ2V0Q29tcG9uZW50S2V5KGNoaWxkcmVuLCAwKSA6IG5hbWVTb0Zhcik7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICB2YXIgY2hpbGQgPSB2b2lkIDA7XG4gIHZhciBuZXh0TmFtZSA9IHZvaWQgMDtcbiAgdmFyIHN1YnRyZWVDb3VudCA9IDA7IC8vIENvdW50IG9mIGNoaWxkcmVuIGZvdW5kIGluIHRoZSBjdXJyZW50IHN1YnRyZWUuXG4gIHZhciBuZXh0TmFtZVByZWZpeCA9IG5hbWVTb0ZhciA9PT0gJycgPyBTRVBBUkFUT1IgOiBuYW1lU29GYXIgKyBTVUJTRVBBUkFUT1I7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICAgIG5leHROYW1lID0gbmV4dE5hbWVQcmVmaXggKyBnZXRDb21wb25lbnRLZXkoY2hpbGQsIGkpO1xuICAgICAgc3VidHJlZUNvdW50ICs9IHRyYXZlcnNlQWxsQ2hpbGRyZW5JbXBsKGNoaWxkLCBuZXh0TmFtZSwgY2FsbGJhY2ssIHRyYXZlcnNlQ29udGV4dCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihjaGlsZHJlbik7XG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB7XG4gICAgICAgIC8vIFdhcm4gYWJvdXQgdXNpbmcgTWFwcyBhcyBjaGlsZHJlblxuICAgICAgICBpZiAoaXRlcmF0b3JGbiA9PT0gY2hpbGRyZW4uZW50cmllcykge1xuICAgICAgICAgICFkaWRXYXJuQWJvdXRNYXBzID8gd2FybmluZyQxKGZhbHNlLCAnVXNpbmcgTWFwcyBhcyBjaGlsZHJlbiBpcyB1bnN1cHBvcnRlZCBhbmQgd2lsbCBsaWtlbHkgeWllbGQgJyArICd1bmV4cGVjdGVkIHJlc3VsdHMuIENvbnZlcnQgaXQgdG8gYSBzZXF1ZW5jZS9pdGVyYWJsZSBvZiBrZXllZCAnICsgJ1JlYWN0RWxlbWVudHMgaW5zdGVhZC4nKSA6IHZvaWQgMDtcbiAgICAgICAgICBkaWRXYXJuQWJvdXRNYXBzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwoY2hpbGRyZW4pO1xuICAgICAgdmFyIHN0ZXAgPSB2b2lkIDA7XG4gICAgICB2YXIgaWkgPSAwO1xuICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICBjaGlsZCA9IHN0ZXAudmFsdWU7XG4gICAgICAgIG5leHROYW1lID0gbmV4dE5hbWVQcmVmaXggKyBnZXRDb21wb25lbnRLZXkoY2hpbGQsIGlpKyspO1xuICAgICAgICBzdWJ0cmVlQ291bnQgKz0gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwoY2hpbGQsIG5leHROYW1lLCBjYWxsYmFjaywgdHJhdmVyc2VDb250ZXh0KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YXIgYWRkZW5kdW0gPSAnJztcbiAgICAgIHtcbiAgICAgICAgYWRkZW5kdW0gPSAnIElmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgJyArICdpbnN0ZWFkLicgKyBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldFN0YWNrQWRkZW5kdW0oKTtcbiAgICAgIH1cbiAgICAgIHZhciBjaGlsZHJlblN0cmluZyA9ICcnICsgY2hpbGRyZW47XG4gICAgICBpbnZhcmlhbnQoZmFsc2UsICdPYmplY3RzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZCAoZm91bmQ6ICVzKS4lcycsIGNoaWxkcmVuU3RyaW5nID09PSAnW29iamVjdCBPYmplY3RdJyA/ICdvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmpvaW4oJywgJykgKyAnfScgOiBjaGlsZHJlblN0cmluZywgYWRkZW5kdW0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdWJ0cmVlQ291bnQ7XG59XG5cbi8qKlxuICogVHJhdmVyc2VzIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYCwgYnV0XG4gKiBtaWdodCBhbHNvIGJlIHNwZWNpZmllZCB0aHJvdWdoIGF0dHJpYnV0ZXM6XG4gKlxuICogLSBgdHJhdmVyc2VBbGxDaGlsZHJlbih0aGlzLnByb3BzLmNoaWxkcmVuLCAuLi4pYFxuICogLSBgdHJhdmVyc2VBbGxDaGlsZHJlbih0aGlzLnByb3BzLmxlZnRQYW5lbENoaWxkcmVuLCAuLi4pYFxuICpcbiAqIFRoZSBgdHJhdmVyc2VDb250ZXh0YCBpcyBhbiBvcHRpb25hbCBhcmd1bWVudCB0aGF0IGlzIHBhc3NlZCB0aHJvdWdoIHRoZVxuICogZW50aXJlIHRyYXZlcnNhbC4gSXQgY2FuIGJlIHVzZWQgdG8gc3RvcmUgYWNjdW11bGF0aW9ucyBvciBhbnl0aGluZyBlbHNlIHRoYXRcbiAqIHRoZSBjYWxsYmFjayBtaWdodCBmaW5kIHJlbGV2YW50LlxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgb2JqZWN0LlxuICogQHBhcmFtIHshZnVuY3Rpb259IGNhbGxiYWNrIFRvIGludm9rZSB1cG9uIHRyYXZlcnNpbmcgZWFjaCBjaGlsZC5cbiAqIEBwYXJhbSB7Pyp9IHRyYXZlcnNlQ29udGV4dCBDb250ZXh0IGZvciB0cmF2ZXJzYWwuXG4gKiBAcmV0dXJuIHshbnVtYmVyfSBUaGUgbnVtYmVyIG9mIGNoaWxkcmVuIGluIHRoaXMgc3VidHJlZS5cbiAqL1xuZnVuY3Rpb24gdHJhdmVyc2VBbGxDaGlsZHJlbihjaGlsZHJlbiwgY2FsbGJhY2ssIHRyYXZlcnNlQ29udGV4dCkge1xuICBpZiAoY2hpbGRyZW4gPT0gbnVsbCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgcmV0dXJuIHRyYXZlcnNlQWxsQ2hpbGRyZW5JbXBsKGNoaWxkcmVuLCAnJywgY2FsbGJhY2ssIHRyYXZlcnNlQ29udGV4dCk7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSBrZXkgc3RyaW5nIHRoYXQgaWRlbnRpZmllcyBhIGNvbXBvbmVudCB3aXRoaW4gYSBzZXQuXG4gKlxuICogQHBhcmFtIHsqfSBjb21wb25lbnQgQSBjb21wb25lbnQgdGhhdCBjb3VsZCBjb250YWluIGEgbWFudWFsIGtleS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBJbmRleCB0aGF0IGlzIHVzZWQgaWYgYSBtYW51YWwga2V5IGlzIG5vdCBwcm92aWRlZC5cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0Q29tcG9uZW50S2V5KGNvbXBvbmVudCwgaW5kZXgpIHtcbiAgLy8gRG8gc29tZSB0eXBlY2hlY2tpbmcgaGVyZSBzaW5jZSB3ZSBjYWxsIHRoaXMgYmxpbmRseS4gV2Ugd2FudCB0byBlbnN1cmVcbiAgLy8gdGhhdCB3ZSBkb24ndCBibG9jayBwb3RlbnRpYWwgZnV0dXJlIEVTIEFQSXMuXG4gIGlmICh0eXBlb2YgY29tcG9uZW50ID09PSAnb2JqZWN0JyAmJiBjb21wb25lbnQgIT09IG51bGwgJiYgY29tcG9uZW50LmtleSAhPSBudWxsKSB7XG4gICAgLy8gRXhwbGljaXQga2V5XG4gICAgcmV0dXJuIGVzY2FwZShjb21wb25lbnQua2V5KTtcbiAgfVxuICAvLyBJbXBsaWNpdCBrZXkgZGV0ZXJtaW5lZCBieSB0aGUgaW5kZXggaW4gdGhlIHNldFxuICByZXR1cm4gaW5kZXgudG9TdHJpbmcoMzYpO1xufVxuXG5mdW5jdGlvbiBmb3JFYWNoU2luZ2xlQ2hpbGQoYm9va0tlZXBpbmcsIGNoaWxkLCBuYW1lKSB7XG4gIHZhciBmdW5jID0gYm9va0tlZXBpbmcuZnVuYyxcbiAgICAgIGNvbnRleHQgPSBib29rS2VlcGluZy5jb250ZXh0O1xuXG4gIGZ1bmMuY2FsbChjb250ZXh0LCBjaGlsZCwgYm9va0tlZXBpbmcuY291bnQrKyk7XG59XG5cbi8qKlxuICogSXRlcmF0ZXMgdGhyb3VnaCBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVuZm9yZWFjaFxuICpcbiAqIFRoZSBwcm92aWRlZCBmb3JFYWNoRnVuYyhjaGlsZCwgaW5kZXgpIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoXG4gKiBsZWFmIGNoaWxkLlxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLlxuICogQHBhcmFtIHtmdW5jdGlvbigqLCBpbnQpfSBmb3JFYWNoRnVuY1xuICogQHBhcmFtIHsqfSBmb3JFYWNoQ29udGV4dCBDb250ZXh0IGZvciBmb3JFYWNoQ29udGV4dC5cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaENoaWxkcmVuKGNoaWxkcmVuLCBmb3JFYWNoRnVuYywgZm9yRWFjaENvbnRleHQpIHtcbiAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cbiAgdmFyIHRyYXZlcnNlQ29udGV4dCA9IGdldFBvb2xlZFRyYXZlcnNlQ29udGV4dChudWxsLCBudWxsLCBmb3JFYWNoRnVuYywgZm9yRWFjaENvbnRleHQpO1xuICB0cmF2ZXJzZUFsbENoaWxkcmVuKGNoaWxkcmVuLCBmb3JFYWNoU2luZ2xlQ2hpbGQsIHRyYXZlcnNlQ29udGV4dCk7XG4gIHJlbGVhc2VUcmF2ZXJzZUNvbnRleHQodHJhdmVyc2VDb250ZXh0KTtcbn1cblxuZnVuY3Rpb24gbWFwU2luZ2xlQ2hpbGRJbnRvQ29udGV4dChib29rS2VlcGluZywgY2hpbGQsIGNoaWxkS2V5KSB7XG4gIHZhciByZXN1bHQgPSBib29rS2VlcGluZy5yZXN1bHQsXG4gICAgICBrZXlQcmVmaXggPSBib29rS2VlcGluZy5rZXlQcmVmaXgsXG4gICAgICBmdW5jID0gYm9va0tlZXBpbmcuZnVuYyxcbiAgICAgIGNvbnRleHQgPSBib29rS2VlcGluZy5jb250ZXh0O1xuXG5cbiAgdmFyIG1hcHBlZENoaWxkID0gZnVuYy5jYWxsKGNvbnRleHQsIGNoaWxkLCBib29rS2VlcGluZy5jb3VudCsrKTtcbiAgaWYgKEFycmF5LmlzQXJyYXkobWFwcGVkQ2hpbGQpKSB7XG4gICAgbWFwSW50b1dpdGhLZXlQcmVmaXhJbnRlcm5hbChtYXBwZWRDaGlsZCwgcmVzdWx0LCBjaGlsZEtleSwgZnVuY3Rpb24gKGMpIHtcbiAgICAgIHJldHVybiBjO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKG1hcHBlZENoaWxkICE9IG51bGwpIHtcbiAgICBpZiAoaXNWYWxpZEVsZW1lbnQobWFwcGVkQ2hpbGQpKSB7XG4gICAgICBtYXBwZWRDaGlsZCA9IGNsb25lQW5kUmVwbGFjZUtleShtYXBwZWRDaGlsZCxcbiAgICAgIC8vIEtlZXAgYm90aCB0aGUgKG1hcHBlZCkgYW5kIG9sZCBrZXlzIGlmIHRoZXkgZGlmZmVyLCBqdXN0IGFzXG4gICAgICAvLyB0cmF2ZXJzZUFsbENoaWxkcmVuIHVzZWQgdG8gZG8gZm9yIG9iamVjdHMgYXMgY2hpbGRyZW5cbiAgICAgIGtleVByZWZpeCArIChtYXBwZWRDaGlsZC5rZXkgJiYgKCFjaGlsZCB8fCBjaGlsZC5rZXkgIT09IG1hcHBlZENoaWxkLmtleSkgPyBlc2NhcGVVc2VyUHJvdmlkZWRLZXkobWFwcGVkQ2hpbGQua2V5KSArICcvJyA6ICcnKSArIGNoaWxkS2V5KTtcbiAgICB9XG4gICAgcmVzdWx0LnB1c2gobWFwcGVkQ2hpbGQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcEludG9XaXRoS2V5UHJlZml4SW50ZXJuYWwoY2hpbGRyZW4sIGFycmF5LCBwcmVmaXgsIGZ1bmMsIGNvbnRleHQpIHtcbiAgdmFyIGVzY2FwZWRQcmVmaXggPSAnJztcbiAgaWYgKHByZWZpeCAhPSBudWxsKSB7XG4gICAgZXNjYXBlZFByZWZpeCA9IGVzY2FwZVVzZXJQcm92aWRlZEtleShwcmVmaXgpICsgJy8nO1xuICB9XG4gIHZhciB0cmF2ZXJzZUNvbnRleHQgPSBnZXRQb29sZWRUcmF2ZXJzZUNvbnRleHQoYXJyYXksIGVzY2FwZWRQcmVmaXgsIGZ1bmMsIGNvbnRleHQpO1xuICB0cmF2ZXJzZUFsbENoaWxkcmVuKGNoaWxkcmVuLCBtYXBTaW5nbGVDaGlsZEludG9Db250ZXh0LCB0cmF2ZXJzZUNvbnRleHQpO1xuICByZWxlYXNlVHJhdmVyc2VDb250ZXh0KHRyYXZlcnNlQ29udGV4dCk7XG59XG5cbi8qKlxuICogTWFwcyBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVubWFwXG4gKlxuICogVGhlIHByb3ZpZGVkIG1hcEZ1bmN0aW9uKGNoaWxkLCBrZXksIGluZGV4KSB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaFxuICogbGVhZiBjaGlsZC5cbiAqXG4gKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKiwgaW50KX0gZnVuYyBUaGUgbWFwIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IENvbnRleHQgZm9yIG1hcEZ1bmN0aW9uLlxuICogQHJldHVybiB7b2JqZWN0fSBPYmplY3QgY29udGFpbmluZyB0aGUgb3JkZXJlZCBtYXAgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmMsIGNvbnRleHQpIHtcbiAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBtYXBJbnRvV2l0aEtleVByZWZpeEludGVybmFsKGNoaWxkcmVuLCByZXN1bHQsIG51bGwsIGZ1bmMsIGNvbnRleHQpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIENvdW50IHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhc1xuICogYHByb3BzLmNoaWxkcmVuYC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0Y2hpbGRyZW5jb3VudFxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLlxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGNoaWxkcmVuLlxuICovXG5mdW5jdGlvbiBjb3VudENoaWxkcmVuKGNoaWxkcmVuKSB7XG4gIHJldHVybiB0cmF2ZXJzZUFsbENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sIG51bGwpO1xufVxuXG4vKipcbiAqIEZsYXR0ZW4gYSBjaGlsZHJlbiBvYmplY3QgKHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYCkgYW5kXG4gKiByZXR1cm4gYW4gYXJyYXkgd2l0aCBhcHByb3ByaWF0ZWx5IHJlLWtleWVkIGNoaWxkcmVuLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbnRvYXJyYXlcbiAqL1xuZnVuY3Rpb24gdG9BcnJheShjaGlsZHJlbikge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIG1hcEludG9XaXRoS2V5UHJlZml4SW50ZXJuYWwoY2hpbGRyZW4sIHJlc3VsdCwgbnVsbCwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmaXJzdCBjaGlsZCBpbiBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4gYW5kIHZlcmlmaWVzIHRoYXQgdGhlcmVcbiAqIGlzIG9ubHkgb25lIGNoaWxkIGluIHRoZSBjb2xsZWN0aW9uLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbm9ubHlcbiAqXG4gKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBhIHNpbmdsZSBjaGlsZCBnZXRzXG4gKiBwYXNzZWQgd2l0aG91dCBhIHdyYXBwZXIsIGJ1dCB0aGUgcHVycG9zZSBvZiB0aGlzIGhlbHBlciBmdW5jdGlvbiBpcyB0b1xuICogYWJzdHJhY3QgYXdheSB0aGUgcGFydGljdWxhciBzdHJ1Y3R1cmUgb2YgY2hpbGRyZW4uXG4gKlxuICogQHBhcmFtIHs/b2JqZWN0fSBjaGlsZHJlbiBDaGlsZCBjb2xsZWN0aW9uIHN0cnVjdHVyZS5cbiAqIEByZXR1cm4ge1JlYWN0RWxlbWVudH0gVGhlIGZpcnN0IGFuZCBvbmx5IGBSZWFjdEVsZW1lbnRgIGNvbnRhaW5lZCBpbiB0aGVcbiAqIHN0cnVjdHVyZS5cbiAqL1xuZnVuY3Rpb24gb25seUNoaWxkKGNoaWxkcmVuKSB7XG4gICFpc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgPyBpbnZhcmlhbnQoZmFsc2UsICdSZWFjdC5DaGlsZHJlbi5vbmx5IGV4cGVjdGVkIHRvIHJlY2VpdmUgYSBzaW5nbGUgUmVhY3QgZWxlbWVudCBjaGlsZC4nKSA6IHZvaWQgMDtcbiAgcmV0dXJuIGNoaWxkcmVuO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDb250ZXh0KGRlZmF1bHRWYWx1ZSwgY2FsY3VsYXRlQ2hhbmdlZEJpdHMpIHtcbiAgaWYgKGNhbGN1bGF0ZUNoYW5nZWRCaXRzID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWxjdWxhdGVDaGFuZ2VkQml0cyA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAge1xuICAgICAgIShjYWxjdWxhdGVDaGFuZ2VkQml0cyA9PT0gbnVsbCB8fCB0eXBlb2YgY2FsY3VsYXRlQ2hhbmdlZEJpdHMgPT09ICdmdW5jdGlvbicpID8gd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnY3JlYXRlQ29udGV4dDogRXhwZWN0ZWQgdGhlIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCB0byBiZSBhICcgKyAnZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6ICVzJywgY2FsY3VsYXRlQ2hhbmdlZEJpdHMpIDogdm9pZCAwO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjb250ZXh0ID0ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9DT05URVhUX1RZUEUsXG4gICAgX2NhbGN1bGF0ZUNoYW5nZWRCaXRzOiBjYWxjdWxhdGVDaGFuZ2VkQml0cyxcbiAgICAvLyBBcyBhIHdvcmthcm91bmQgdG8gc3VwcG9ydCBtdWx0aXBsZSBjb25jdXJyZW50IHJlbmRlcmVycywgd2UgY2F0ZWdvcml6ZVxuICAgIC8vIHNvbWUgcmVuZGVyZXJzIGFzIHByaW1hcnkgYW5kIG90aGVycyBhcyBzZWNvbmRhcnkuIFdlIG9ubHkgZXhwZWN0XG4gICAgLy8gdGhlcmUgdG8gYmUgdHdvIGNvbmN1cnJlbnQgcmVuZGVyZXJzIGF0IG1vc3Q6IFJlYWN0IE5hdGl2ZSAocHJpbWFyeSkgYW5kXG4gICAgLy8gRmFicmljIChzZWNvbmRhcnkpOyBSZWFjdCBET00gKHByaW1hcnkpIGFuZCBSZWFjdCBBUlQgKHNlY29uZGFyeSkuXG4gICAgLy8gU2Vjb25kYXJ5IHJlbmRlcmVycyBzdG9yZSB0aGVpciBjb250ZXh0IHZhbHVlcyBvbiBzZXBhcmF0ZSBmaWVsZHMuXG4gICAgX2N1cnJlbnRWYWx1ZTogZGVmYXVsdFZhbHVlLFxuICAgIF9jdXJyZW50VmFsdWUyOiBkZWZhdWx0VmFsdWUsXG4gICAgLy8gVXNlZCB0byB0cmFjayBob3cgbWFueSBjb25jdXJyZW50IHJlbmRlcmVycyB0aGlzIGNvbnRleHQgY3VycmVudGx5XG4gICAgLy8gc3VwcG9ydHMgd2l0aGluIGluIGEgc2luZ2xlIHJlbmRlcmVyLiBTdWNoIGFzIHBhcmFsbGVsIHNlcnZlciByZW5kZXJpbmcuXG4gICAgX3RocmVhZENvdW50OiAwLFxuICAgIC8vIFRoZXNlIGFyZSBjaXJjdWxhclxuICAgIFByb3ZpZGVyOiBudWxsLFxuICAgIENvbnN1bWVyOiBudWxsXG4gIH07XG5cbiAgY29udGV4dC5Qcm92aWRlciA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfUFJPVklERVJfVFlQRSxcbiAgICBfY29udGV4dDogY29udGV4dFxuICB9O1xuXG4gIHZhciBoYXNXYXJuZWRBYm91dFVzaW5nTmVzdGVkQ29udGV4dENvbnN1bWVycyA9IGZhbHNlO1xuICB2YXIgaGFzV2FybmVkQWJvdXRVc2luZ0NvbnN1bWVyUHJvdmlkZXIgPSBmYWxzZTtcblxuICB7XG4gICAgLy8gQSBzZXBhcmF0ZSBvYmplY3QsIGJ1dCBwcm94aWVzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGNvbnRleHQgb2JqZWN0IGZvclxuICAgIC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBJdCBoYXMgYSBkaWZmZXJlbnQgJCR0eXBlb2YsIHNvIHdlIGNhbiBwcm9wZXJseVxuICAgIC8vIHdhcm4gZm9yIHRoZSBpbmNvcnJlY3QgdXNhZ2Ugb2YgQ29udGV4dCBhcyBhIENvbnN1bWVyLlxuICAgIHZhciBDb25zdW1lciA9IHtcbiAgICAgICQkdHlwZW9mOiBSRUFDVF9DT05URVhUX1RZUEUsXG4gICAgICBfY29udGV4dDogY29udGV4dCxcbiAgICAgIF9jYWxjdWxhdGVDaGFuZ2VkQml0czogY29udGV4dC5fY2FsY3VsYXRlQ2hhbmdlZEJpdHNcbiAgICB9O1xuICAgIC8vICRGbG93Rml4TWU6IEZsb3cgY29tcGxhaW5zIGFib3V0IG5vdCBzZXR0aW5nIGEgdmFsdWUsIHdoaWNoIGlzIGludGVudGlvbmFsIGhlcmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb25zdW1lciwge1xuICAgICAgUHJvdmlkZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKCFoYXNXYXJuZWRBYm91dFVzaW5nQ29uc3VtZXJQcm92aWRlcikge1xuICAgICAgICAgICAgaGFzV2FybmVkQWJvdXRVc2luZ0NvbnN1bWVyUHJvdmlkZXIgPSB0cnVlO1xuICAgICAgICAgICAgd2FybmluZyQxKGZhbHNlLCAnUmVuZGVyaW5nIDxDb250ZXh0LkNvbnN1bWVyLlByb3ZpZGVyPiBpcyBub3Qgc3VwcG9ydGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gJyArICdhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBEaWQgeW91IG1lYW4gdG8gcmVuZGVyIDxDb250ZXh0LlByb3ZpZGVyPiBpbnN0ZWFkPycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY29udGV4dC5Qcm92aWRlcjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoX1Byb3ZpZGVyKSB7XG4gICAgICAgICAgY29udGV4dC5Qcm92aWRlciA9IF9Qcm92aWRlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIF9jdXJyZW50VmFsdWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuX2N1cnJlbnRWYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoX2N1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgIGNvbnRleHQuX2N1cnJlbnRWYWx1ZSA9IF9jdXJyZW50VmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBfY3VycmVudFZhbHVlMjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5fY3VycmVudFZhbHVlMjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoX2N1cnJlbnRWYWx1ZTIpIHtcbiAgICAgICAgICBjb250ZXh0Ll9jdXJyZW50VmFsdWUyID0gX2N1cnJlbnRWYWx1ZTI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBfdGhyZWFkQ291bnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3RocmVhZENvdW50O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChfdGhyZWFkQ291bnQpIHtcbiAgICAgICAgICBjb250ZXh0Ll90aHJlYWRDb3VudCA9IF90aHJlYWRDb3VudDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIENvbnN1bWVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICghaGFzV2FybmVkQWJvdXRVc2luZ05lc3RlZENvbnRleHRDb25zdW1lcnMpIHtcbiAgICAgICAgICAgIGhhc1dhcm5lZEFib3V0VXNpbmdOZXN0ZWRDb250ZXh0Q29uc3VtZXJzID0gdHJ1ZTtcbiAgICAgICAgICAgIHdhcm5pbmckMShmYWxzZSwgJ1JlbmRlcmluZyA8Q29udGV4dC5Db25zdW1lci5Db25zdW1lcj4gaXMgbm90IHN1cHBvcnRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluICcgKyAnYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gRGlkIHlvdSBtZWFuIHRvIHJlbmRlciA8Q29udGV4dC5Db25zdW1lcj4gaW5zdGVhZD8nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuQ29uc3VtZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyAkRmxvd0ZpeE1lOiBGbG93IGNvbXBsYWlucyBhYm91dCBtaXNzaW5nIHByb3BlcnRpZXMgYmVjYXVzZSBpdCBkb2Vzbid0IHVuZGVyc3RhbmQgZGVmaW5lUHJvcGVydHlcbiAgICBjb250ZXh0LkNvbnN1bWVyID0gQ29uc3VtZXI7XG4gIH1cblxuICB7XG4gICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyID0gbnVsbDtcbiAgICBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIyID0gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBjb250ZXh0O1xufVxuXG5mdW5jdGlvbiBsYXp5KGN0b3IpIHtcbiAgdmFyIGxhenlUeXBlID0ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9MQVpZX1RZUEUsXG4gICAgX2N0b3I6IGN0b3IsXG4gICAgLy8gUmVhY3QgdXNlcyB0aGVzZSBmaWVsZHMgdG8gc3RvcmUgdGhlIHJlc3VsdC5cbiAgICBfc3RhdHVzOiAtMSxcbiAgICBfcmVzdWx0OiBudWxsXG4gIH07XG5cbiAge1xuICAgIC8vIEluIHByb2R1Y3Rpb24sIHRoaXMgd291bGQganVzdCBzZXQgaXQgb24gdGhlIG9iamVjdC5cbiAgICB2YXIgZGVmYXVsdFByb3BzID0gdm9pZCAwO1xuICAgIHZhciBwcm9wVHlwZXMgPSB2b2lkIDA7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobGF6eVR5cGUsIHtcbiAgICAgIGRlZmF1bHRQcm9wczoge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBkZWZhdWx0UHJvcHM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5ld0RlZmF1bHRQcm9wcykge1xuICAgICAgICAgIHdhcm5pbmckMShmYWxzZSwgJ1JlYWN0LmxhenkoLi4uKTogSXQgaXMgbm90IHN1cHBvcnRlZCB0byBhc3NpZ24gYGRlZmF1bHRQcm9wc2AgdG8gJyArICdhIGxhenkgY29tcG9uZW50IGltcG9ydC4gRWl0aGVyIHNwZWNpZnkgdGhlbSB3aGVyZSB0aGUgY29tcG9uZW50ICcgKyAnaXMgZGVmaW5lZCwgb3IgY3JlYXRlIGEgd3JhcHBpbmcgY29tcG9uZW50IGFyb3VuZCBpdC4nKTtcbiAgICAgICAgICBkZWZhdWx0UHJvcHMgPSBuZXdEZWZhdWx0UHJvcHM7XG4gICAgICAgICAgLy8gTWF0Y2ggcHJvZHVjdGlvbiBiZWhhdmlvciBtb3JlIGNsb3NlbHk6XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGxhenlUeXBlLCAnZGVmYXVsdFByb3BzJywge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcHJvcFR5cGVzOiB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHByb3BUeXBlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3UHJvcFR5cGVzKSB7XG4gICAgICAgICAgd2FybmluZyQxKGZhbHNlLCAnUmVhY3QubGF6eSguLi4pOiBJdCBpcyBub3Qgc3VwcG9ydGVkIHRvIGFzc2lnbiBgcHJvcFR5cGVzYCB0byAnICsgJ2EgbGF6eSBjb21wb25lbnQgaW1wb3J0LiBFaXRoZXIgc3BlY2lmeSB0aGVtIHdoZXJlIHRoZSBjb21wb25lbnQgJyArICdpcyBkZWZpbmVkLCBvciBjcmVhdGUgYSB3cmFwcGluZyBjb21wb25lbnQgYXJvdW5kIGl0LicpO1xuICAgICAgICAgIHByb3BUeXBlcyA9IG5ld1Byb3BUeXBlcztcbiAgICAgICAgICAvLyBNYXRjaCBwcm9kdWN0aW9uIGJlaGF2aW9yIG1vcmUgY2xvc2VseTpcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobGF6eVR5cGUsICdwcm9wVHlwZXMnLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBsYXp5VHlwZTtcbn1cblxuZnVuY3Rpb24gZm9yd2FyZFJlZihyZW5kZXIpIHtcbiAge1xuICAgIGlmIChyZW5kZXIgIT0gbnVsbCAmJiByZW5kZXIuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSkge1xuICAgICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnZm9yd2FyZFJlZiByZXF1aXJlcyBhIHJlbmRlciBmdW5jdGlvbiBidXQgcmVjZWl2ZWQgYSBgbWVtb2AgJyArICdjb21wb25lbnQuIEluc3RlYWQgb2YgZm9yd2FyZFJlZihtZW1vKC4uLikpLCB1c2UgJyArICdtZW1vKGZvcndhcmRSZWYoLi4uKSkuJyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcmVuZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdmb3J3YXJkUmVmIHJlcXVpcmVzIGEgcmVuZGVyIGZ1bmN0aW9uIGJ1dCB3YXMgZ2l2ZW4gJXMuJywgcmVuZGVyID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHJlbmRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgICEoXG4gICAgICAvLyBEbyBub3Qgd2FybiBmb3IgMCBhcmd1bWVudHMgYmVjYXVzZSBpdCBjb3VsZCBiZSBkdWUgdG8gdXNhZ2Ugb2YgdGhlICdhcmd1bWVudHMnIG9iamVjdFxuICAgICAgcmVuZGVyLmxlbmd0aCA9PT0gMCB8fCByZW5kZXIubGVuZ3RoID09PSAyKSA/IHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ2ZvcndhcmRSZWYgcmVuZGVyIGZ1bmN0aW9ucyBhY2NlcHQgZXhhY3RseSB0d28gcGFyYW1ldGVyczogcHJvcHMgYW5kIHJlZi4gJXMnLCByZW5kZXIubGVuZ3RoID09PSAxID8gJ0RpZCB5b3UgZm9yZ2V0IHRvIHVzZSB0aGUgcmVmIHBhcmFtZXRlcj8nIDogJ0FueSBhZGRpdGlvbmFsIHBhcmFtZXRlciB3aWxsIGJlIHVuZGVmaW5lZC4nKSA6IHZvaWQgMDtcbiAgICB9XG5cbiAgICBpZiAocmVuZGVyICE9IG51bGwpIHtcbiAgICAgICEocmVuZGVyLmRlZmF1bHRQcm9wcyA9PSBudWxsICYmIHJlbmRlci5wcm9wVHlwZXMgPT0gbnVsbCkgPyB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdmb3J3YXJkUmVmIHJlbmRlciBmdW5jdGlvbnMgZG8gbm90IHN1cHBvcnQgcHJvcFR5cGVzIG9yIGRlZmF1bHRQcm9wcy4gJyArICdEaWQgeW91IGFjY2lkZW50YWxseSBwYXNzIGEgUmVhY3QgY29tcG9uZW50PycpIDogdm9pZCAwO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUsXG4gICAgcmVuZGVyOiByZW5kZXJcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fFxuICAvLyBOb3RlOiBpdHMgdHlwZW9mIG1pZ2h0IGJlIG90aGVyIHRoYW4gJ3N5bWJvbCcgb3IgJ251bWJlcicgaWYgaXQncyBhIHBvbHlmaWxsLlxuICB0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUpO1xufVxuXG5mdW5jdGlvbiBtZW1vKHR5cGUsIGNvbXBhcmUpIHtcbiAge1xuICAgIGlmICghaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpKSB7XG4gICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdtZW1vOiBUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIGNvbXBvbmVudC4gSW5zdGVhZCAnICsgJ3JlY2VpdmVkOiAlcycsIHR5cGUgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgdHlwZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX01FTU9fVFlQRSxcbiAgICB0eXBlOiB0eXBlLFxuICAgIGNvbXBhcmU6IGNvbXBhcmUgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb21wYXJlXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVEaXNwYXRjaGVyKCkge1xuICB2YXIgZGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudDtcbiAgIShkaXNwYXRjaGVyICE9PSBudWxsKSA/IGludmFyaWFudChmYWxzZSwgJ0ludmFsaWQgaG9vayBjYWxsLiBIb29rcyBjYW4gb25seSBiZSBjYWxsZWQgaW5zaWRlIG9mIHRoZSBib2R5IG9mIGEgZnVuY3Rpb24gY29tcG9uZW50LiBUaGlzIGNvdWxkIGhhcHBlbiBmb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcXG4xLiBZb3UgbWlnaHQgaGF2ZSBtaXNtYXRjaGluZyB2ZXJzaW9ucyBvZiBSZWFjdCBhbmQgdGhlIHJlbmRlcmVyIChzdWNoIGFzIFJlYWN0IERPTSlcXG4yLiBZb3UgbWlnaHQgYmUgYnJlYWtpbmcgdGhlIFJ1bGVzIG9mIEhvb2tzXFxuMy4gWW91IG1pZ2h0IGhhdmUgbW9yZSB0aGFuIG9uZSBjb3B5IG9mIFJlYWN0IGluIHRoZSBzYW1lIGFwcFxcblNlZSBodHRwczovL2ZiLm1lL3JlYWN0LWludmFsaWQtaG9vay1jYWxsIGZvciB0aXBzIGFib3V0IGhvdyB0byBkZWJ1ZyBhbmQgZml4IHRoaXMgcHJvYmxlbS4nKSA6IHZvaWQgMDtcbiAgcmV0dXJuIGRpc3BhdGNoZXI7XG59XG5cbmZ1bmN0aW9uIHVzZUNvbnRleHQoQ29udGV4dCwgdW5zdGFibGVfb2JzZXJ2ZWRCaXRzKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAge1xuICAgICEodW5zdGFibGVfb2JzZXJ2ZWRCaXRzID09PSB1bmRlZmluZWQpID8gd2FybmluZyQxKGZhbHNlLCAndXNlQ29udGV4dCgpIHNlY29uZCBhcmd1bWVudCBpcyByZXNlcnZlZCBmb3IgZnV0dXJlICcgKyAndXNlIGluIFJlYWN0LiBQYXNzaW5nIGl0IGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnWW91IHBhc3NlZDogJXMuJXMnLCB1bnN0YWJsZV9vYnNlcnZlZEJpdHMsIHR5cGVvZiB1bnN0YWJsZV9vYnNlcnZlZEJpdHMgPT09ICdudW1iZXInICYmIEFycmF5LmlzQXJyYXkoYXJndW1lbnRzWzJdKSA/ICdcXG5cXG5EaWQgeW91IGNhbGwgYXJyYXkubWFwKHVzZUNvbnRleHQpPyAnICsgJ0NhbGxpbmcgSG9va3MgaW5zaWRlIGEgbG9vcCBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ0xlYXJuIG1vcmUgYXQgaHR0cHM6Ly9mYi5tZS9ydWxlcy1vZi1ob29rcycgOiAnJykgOiB2b2lkIDA7XG5cbiAgICAvLyBUT0RPOiBhZGQgYSBtb3JlIGdlbmVyaWMgd2FybmluZyBmb3IgaW52YWxpZCB2YWx1ZXMuXG4gICAgaWYgKENvbnRleHQuX2NvbnRleHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIHJlYWxDb250ZXh0ID0gQ29udGV4dC5fY29udGV4dDtcbiAgICAgIC8vIERvbid0IGRlZHVwbGljYXRlIGJlY2F1c2UgdGhpcyBsZWdpdGltYXRlbHkgY2F1c2VzIGJ1Z3NcbiAgICAgIC8vIGFuZCBub2JvZHkgc2hvdWxkIGJlIHVzaW5nIHRoaXMgaW4gZXhpc3RpbmcgY29kZS5cbiAgICAgIGlmIChyZWFsQ29udGV4dC5Db25zdW1lciA9PT0gQ29udGV4dCkge1xuICAgICAgICB3YXJuaW5nJDEoZmFsc2UsICdDYWxsaW5nIHVzZUNvbnRleHQoQ29udGV4dC5Db25zdW1lcikgaXMgbm90IHN1cHBvcnRlZCwgbWF5IGNhdXNlIGJ1Z3MsIGFuZCB3aWxsIGJlICcgKyAncmVtb3ZlZCBpbiBhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBEaWQgeW91IG1lYW4gdG8gY2FsbCB1c2VDb250ZXh0KENvbnRleHQpIGluc3RlYWQ/Jyk7XG4gICAgICB9IGVsc2UgaWYgKHJlYWxDb250ZXh0LlByb3ZpZGVyID09PSBDb250ZXh0KSB7XG4gICAgICAgIHdhcm5pbmckMShmYWxzZSwgJ0NhbGxpbmcgdXNlQ29udGV4dChDb250ZXh0LlByb3ZpZGVyKSBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBjYWxsIHVzZUNvbnRleHQoQ29udGV4dCkgaW5zdGVhZD8nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlQ29udGV4dChDb250ZXh0LCB1bnN0YWJsZV9vYnNlcnZlZEJpdHMpO1xufVxuXG5mdW5jdGlvbiB1c2VTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VTdGF0ZShpbml0aWFsU3RhdGUpO1xufVxuXG5mdW5jdGlvbiB1c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xufVxuXG5mdW5jdGlvbiB1c2VSZWYoaW5pdGlhbFZhbHVlKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlUmVmKGluaXRpYWxWYWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHVzZUVmZmVjdChjcmVhdGUsIGlucHV0cykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUVmZmVjdChjcmVhdGUsIGlucHV0cyk7XG59XG5cbmZ1bmN0aW9uIHVzZUxheW91dEVmZmVjdChjcmVhdGUsIGlucHV0cykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUxheW91dEVmZmVjdChjcmVhdGUsIGlucHV0cyk7XG59XG5cbmZ1bmN0aW9uIHVzZUNhbGxiYWNrKGNhbGxiYWNrLCBpbnB1dHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VDYWxsYmFjayhjYWxsYmFjaywgaW5wdXRzKTtcbn1cblxuZnVuY3Rpb24gdXNlTWVtbyhjcmVhdGUsIGlucHV0cykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZU1lbW8oY3JlYXRlLCBpbnB1dHMpO1xufVxuXG5mdW5jdGlvbiB1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBpbnB1dHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBpbnB1dHMpO1xufVxuXG5mdW5jdGlvbiB1c2VEZWJ1Z1ZhbHVlKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICB7XG4gICAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICAgIHJldHVybiBkaXNwYXRjaGVyLnVzZURlYnVnVmFsdWUodmFsdWUsIGZvcm1hdHRlckZuKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlYWN0RWxlbWVudFZhbGlkYXRvciBwcm92aWRlcyBhIHdyYXBwZXIgYXJvdW5kIGEgZWxlbWVudCBmYWN0b3J5XG4gKiB3aGljaCB2YWxpZGF0ZXMgdGhlIHByb3BzIHBhc3NlZCB0byB0aGUgZWxlbWVudC4gVGhpcyBpcyBpbnRlbmRlZCB0byBiZVxuICogdXNlZCBvbmx5IGluIERFViBhbmQgY291bGQgYmUgcmVwbGFjZWQgYnkgYSBzdGF0aWMgdHlwZSBjaGVja2VyIGZvciBsYW5ndWFnZXNcbiAqIHRoYXQgc3VwcG9ydCBpdC5cbiAqL1xuXG52YXIgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24gPSB2b2lkIDA7XG5cbntcbiAgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24gPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkge1xuICBpZiAoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkge1xuICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnR5cGUpO1xuICAgIGlmIChuYW1lKSB7XG4gICAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgbmFtZSArICdgLic7XG4gICAgfVxuICB9XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW0oZWxlbWVudFByb3BzKSB7XG4gIGlmIChlbGVtZW50UHJvcHMgIT09IG51bGwgJiYgZWxlbWVudFByb3BzICE9PSB1bmRlZmluZWQgJiYgZWxlbWVudFByb3BzLl9fc291cmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgc291cmNlID0gZWxlbWVudFByb3BzLl9fc291cmNlO1xuICAgIHZhciBmaWxlTmFtZSA9IHNvdXJjZS5maWxlTmFtZS5yZXBsYWNlKC9eLipbXFxcXFxcL10vLCAnJyk7XG4gICAgdmFyIGxpbmVOdW1iZXIgPSBzb3VyY2UubGluZU51bWJlcjtcbiAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHlvdXIgY29kZSBhdCAnICsgZmlsZU5hbWUgKyAnOicgKyBsaW5lTnVtYmVyICsgJy4nO1xuICB9XG4gIHJldHVybiAnJztcbn1cblxuLyoqXG4gKiBXYXJuIGlmIHRoZXJlJ3Mgbm8ga2V5IGV4cGxpY2l0bHkgc2V0IG9uIGR5bmFtaWMgYXJyYXlzIG9mIGNoaWxkcmVuIG9yXG4gKiBvYmplY3Qga2V5cyBhcmUgbm90IHZhbGlkLiBUaGlzIGFsbG93cyB1cyB0byBrZWVwIHRyYWNrIG9mIGNoaWxkcmVuIGJldHdlZW5cbiAqIHVwZGF0ZXMuXG4gKi9cbnZhciBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcblxuZnVuY3Rpb24gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKSB7XG4gIHZhciBpbmZvID0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCk7XG5cbiAgaWYgKCFpbmZvKSB7XG4gICAgdmFyIHBhcmVudE5hbWUgPSB0eXBlb2YgcGFyZW50VHlwZSA9PT0gJ3N0cmluZycgPyBwYXJlbnRUeXBlIDogcGFyZW50VHlwZS5kaXNwbGF5TmFtZSB8fCBwYXJlbnRUeXBlLm5hbWU7XG4gICAgaWYgKHBhcmVudE5hbWUpIHtcbiAgICAgIGluZm8gPSAnXFxuXFxuQ2hlY2sgdGhlIHRvcC1sZXZlbCByZW5kZXIgY2FsbCB1c2luZyA8JyArIHBhcmVudE5hbWUgKyAnPi4nO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaW5mbztcbn1cblxuLyoqXG4gKiBXYXJuIGlmIHRoZSBlbGVtZW50IGRvZXNuJ3QgaGF2ZSBhbiBleHBsaWNpdCBrZXkgYXNzaWduZWQgdG8gaXQuXG4gKiBUaGlzIGVsZW1lbnQgaXMgaW4gYW4gYXJyYXkuIFRoZSBhcnJheSBjb3VsZCBncm93IGFuZCBzaHJpbmsgb3IgYmVcbiAqIHJlb3JkZXJlZC4gQWxsIGNoaWxkcmVuIHRoYXQgaGF2ZW4ndCBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkIGFyZSByZXF1aXJlZCB0b1xuICogaGF2ZSBhIFwia2V5XCIgcHJvcGVydHkgYXNzaWduZWQgdG8gaXQuIEVycm9yIHN0YXR1c2VzIGFyZSBjYWNoZWQgc28gYSB3YXJuaW5nXG4gKiB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgdGhhdCByZXF1aXJlcyBhIGtleS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBlbGVtZW50J3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVFeHBsaWNpdEtleShlbGVtZW50LCBwYXJlbnRUeXBlKSB7XG4gIGlmICghZWxlbWVudC5fc3RvcmUgfHwgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkIHx8IGVsZW1lbnQua2V5ICE9IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcblxuICB2YXIgY3VycmVudENvbXBvbmVudEVycm9ySW5mbyA9IGdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8ocGFyZW50VHlwZSk7XG4gIGlmIChvd25lckhhc0tleVVzZVdhcm5pbmdbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgb3duZXJIYXNLZXlVc2VXYXJuaW5nW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dID0gdHJ1ZTtcblxuICAvLyBVc3VhbGx5IHRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBvZmZlbmRlciwgYnV0IGlmIGl0IGFjY2VwdHMgY2hpbGRyZW4gYXMgYVxuICAvLyBwcm9wZXJ0eSwgaXQgbWF5IGJlIHRoZSBjcmVhdG9yIG9mIHRoZSBjaGlsZCB0aGF0J3MgcmVzcG9uc2libGUgZm9yXG4gIC8vIGFzc2lnbmluZyBpdCBhIGtleS5cbiAgdmFyIGNoaWxkT3duZXIgPSAnJztcbiAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5fb3duZXIgJiYgZWxlbWVudC5fb3duZXIgIT09IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQpIHtcbiAgICAvLyBHaXZlIHRoZSBjb21wb25lbnQgdGhhdCBvcmlnaW5hbGx5IGNyZWF0ZWQgdGhpcyBjaGlsZC5cbiAgICBjaGlsZE93bmVyID0gJyBJdCB3YXMgcGFzc2VkIGEgY2hpbGQgZnJvbSAnICsgZ2V0Q29tcG9uZW50TmFtZShlbGVtZW50Ll9vd25lci50eXBlKSArICcuJztcbiAgfVxuXG4gIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuICB7XG4gICAgd2FybmluZyQxKGZhbHNlLCAnRWFjaCBjaGlsZCBpbiBhIGxpc3Qgc2hvdWxkIGhhdmUgYSB1bmlxdWUgXCJrZXlcIiBwcm9wLicgKyAnJXMlcyBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWtleXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uJywgY3VycmVudENvbXBvbmVudEVycm9ySW5mbywgY2hpbGRPd25lcik7XG4gIH1cbiAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG59XG5cbi8qKlxuICogRW5zdXJlIHRoYXQgZXZlcnkgZWxlbWVudCBlaXRoZXIgaXMgcGFzc2VkIGluIGEgc3RhdGljIGxvY2F0aW9uLCBpbiBhblxuICogYXJyYXkgd2l0aCBhbiBleHBsaWNpdCBrZXlzIHByb3BlcnR5IGRlZmluZWQsIG9yIGluIGFuIG9iamVjdCBsaXRlcmFsXG4gKiB3aXRoIHZhbGlkIGtleSBwcm9wZXJ0eS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3ROb2RlfSBub2RlIFN0YXRpY2FsbHkgcGFzc2VkIGNoaWxkIG9mIGFueSB0eXBlLlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIG5vZGUncyBwYXJlbnQncyB0eXBlLlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNoaWxkS2V5cyhub2RlLCBwYXJlbnRUeXBlKSB7XG4gIGlmICh0eXBlb2Ygbm9kZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IG5vZGVbaV07XG4gICAgICBpZiAoaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoY2hpbGQsIHBhcmVudFR5cGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChpc1ZhbGlkRWxlbWVudChub2RlKSkge1xuICAgIC8vIFRoaXMgZWxlbWVudCB3YXMgcGFzc2VkIGluIGEgdmFsaWQgbG9jYXRpb24uXG4gICAgaWYgKG5vZGUuX3N0b3JlKSB7XG4gICAgICBub2RlLl9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfSBlbHNlIGlmIChub2RlKSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG5vZGUpO1xuICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gRW50cnkgaXRlcmF0b3JzIHVzZWQgdG8gcHJvdmlkZSBpbXBsaWNpdCBrZXlzLFxuICAgICAgLy8gYnV0IG5vdyB3ZSBwcmludCBhIHNlcGFyYXRlIHdhcm5pbmcgZm9yIHRoZW0gbGF0ZXIuXG4gICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gbm9kZS5lbnRyaWVzKSB7XG4gICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChub2RlKTtcbiAgICAgICAgdmFyIHN0ZXAgPSB2b2lkIDA7XG4gICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICBpZiAoaXNWYWxpZEVsZW1lbnQoc3RlcC52YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoc3RlcC52YWx1ZSwgcGFyZW50VHlwZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogR2l2ZW4gYW4gZWxlbWVudCwgdmFsaWRhdGUgdGhhdCBpdHMgcHJvcHMgZm9sbG93IHRoZSBwcm9wVHlwZXMgZGVmaW5pdGlvbixcbiAqIHByb3ZpZGVkIGJ5IHRoZSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpIHtcbiAgdmFyIHR5cGUgPSBlbGVtZW50LnR5cGU7XG4gIGlmICh0eXBlID09PSBudWxsIHx8IHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKHR5cGUpO1xuICB2YXIgcHJvcFR5cGVzID0gdm9pZCAwO1xuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBwcm9wVHlwZXMgPSB0eXBlLnByb3BUeXBlcztcbiAgfSBlbHNlIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHxcbiAgLy8gTm90ZTogTWVtbyBvbmx5IGNoZWNrcyBvdXRlciBwcm9wcyBoZXJlLlxuICAvLyBJbm5lciBwcm9wcyBhcmUgY2hlY2tlZCBpbiB0aGUgcmVjb25jaWxlci5cbiAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFKSkge1xuICAgIHByb3BUeXBlcyA9IHR5cGUucHJvcFR5cGVzO1xuICB9IGVsc2Uge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAocHJvcFR5cGVzKSB7XG4gICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG4gICAgY2hlY2tQcm9wVHlwZXMocHJvcFR5cGVzLCBlbGVtZW50LnByb3BzLCAncHJvcCcsIG5hbWUsIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0U3RhY2tBZGRlbmR1bSk7XG4gICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gIH0gZWxzZSBpZiAodHlwZS5Qcm9wVHlwZXMgIT09IHVuZGVmaW5lZCAmJiAhcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24pIHtcbiAgICBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93biA9IHRydWU7XG4gICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnQ29tcG9uZW50ICVzIGRlY2xhcmVkIGBQcm9wVHlwZXNgIGluc3RlYWQgb2YgYHByb3BUeXBlc2AuIERpZCB5b3UgbWlzc3BlbGwgdGhlIHByb3BlcnR5IGFzc2lnbm1lbnQ/JywgbmFtZSB8fCAnVW5rbm93bicpO1xuICB9XG4gIGlmICh0eXBlb2YgdHlwZS5nZXREZWZhdWx0UHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAhdHlwZS5nZXREZWZhdWx0UHJvcHMuaXNSZWFjdENsYXNzQXBwcm92ZWQgPyB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdnZXREZWZhdWx0UHJvcHMgaXMgb25seSB1c2VkIG9uIGNsYXNzaWMgUmVhY3QuY3JlYXRlQ2xhc3MgJyArICdkZWZpbml0aW9ucy4gVXNlIGEgc3RhdGljIHByb3BlcnR5IG5hbWVkIGBkZWZhdWx0UHJvcHNgIGluc3RlYWQuJykgOiB2b2lkIDA7XG4gIH1cbn1cblxuLyoqXG4gKiBHaXZlbiBhIGZyYWdtZW50LCB2YWxpZGF0ZSB0aGF0IGl0IGNhbiBvbmx5IGJlIHByb3ZpZGVkIHdpdGggZnJhZ21lbnQgcHJvcHNcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBmcmFnbWVudFxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUZyYWdtZW50UHJvcHMoZnJhZ21lbnQpIHtcbiAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZnJhZ21lbnQpO1xuXG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZnJhZ21lbnQucHJvcHMpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoa2V5ICE9PSAnY2hpbGRyZW4nICYmIGtleSAhPT0gJ2tleScpIHtcbiAgICAgIHdhcm5pbmckMShmYWxzZSwgJ0ludmFsaWQgcHJvcCBgJXNgIHN1cHBsaWVkIHRvIGBSZWFjdC5GcmFnbWVudGAuICcgKyAnUmVhY3QuRnJhZ21lbnQgY2FuIG9ubHkgaGF2ZSBga2V5YCBhbmQgYGNoaWxkcmVuYCBwcm9wcy4nLCBrZXkpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKGZyYWdtZW50LnJlZiAhPT0gbnVsbCkge1xuICAgIHdhcm5pbmckMShmYWxzZSwgJ0ludmFsaWQgYXR0cmlidXRlIGByZWZgIHN1cHBsaWVkIHRvIGBSZWFjdC5GcmFnbWVudGAuJyk7XG4gIH1cblxuICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudFdpdGhWYWxpZGF0aW9uKHR5cGUsIHByb3BzLCBjaGlsZHJlbikge1xuICB2YXIgdmFsaWRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpO1xuXG4gIC8vIFdlIHdhcm4gaW4gdGhpcyBjYXNlIGJ1dCBkb24ndCB0aHJvdy4gV2UgZXhwZWN0IHRoZSBlbGVtZW50IGNyZWF0aW9uIHRvXG4gIC8vIHN1Y2NlZWQgYW5kIHRoZXJlIHdpbGwgbGlrZWx5IGJlIGVycm9ycyBpbiByZW5kZXIuXG4gIGlmICghdmFsaWRUeXBlKSB7XG4gICAgdmFyIGluZm8gPSAnJztcbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmIE9iamVjdC5rZXlzKHR5cGUpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaW5mbyArPSAnIFlvdSBsaWtlbHkgZm9yZ290IHRvIGV4cG9ydCB5b3VyIGNvbXBvbmVudCBmcm9tIHRoZSBmaWxlICcgKyBcIml0J3MgZGVmaW5lZCBpbiwgb3IgeW91IG1pZ2h0IGhhdmUgbWl4ZWQgdXAgZGVmYXVsdCBhbmQgbmFtZWQgaW1wb3J0cy5cIjtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlSW5mbyA9IGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKHByb3BzKTtcbiAgICBpZiAoc291cmNlSW5mbykge1xuICAgICAgaW5mbyArPSBzb3VyY2VJbmZvO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbmZvICs9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuICAgIH1cblxuICAgIHZhciB0eXBlU3RyaW5nID0gdm9pZCAwO1xuICAgIGlmICh0eXBlID09PSBudWxsKSB7XG4gICAgICB0eXBlU3RyaW5nID0gJ251bGwnO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0eXBlKSkge1xuICAgICAgdHlwZVN0cmluZyA9ICdhcnJheSc7XG4gICAgfSBlbHNlIGlmICh0eXBlICE9PSB1bmRlZmluZWQgJiYgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFKSB7XG4gICAgICB0eXBlU3RyaW5nID0gJzwnICsgKGdldENvbXBvbmVudE5hbWUodHlwZS50eXBlKSB8fCAnVW5rbm93bicpICsgJyAvPic7XG4gICAgICBpbmZvID0gJyBEaWQgeW91IGFjY2lkZW50YWxseSBleHBvcnQgYSBKU1ggbGl0ZXJhbCBpbnN0ZWFkIG9mIGEgY29tcG9uZW50Pyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHR5cGVTdHJpbmcgPSB0eXBlb2YgdHlwZTtcbiAgICB9XG5cbiAgICB3YXJuaW5nJDEoZmFsc2UsICdSZWFjdC5jcmVhdGVFbGVtZW50OiB0eXBlIGlzIGludmFsaWQgLS0gZXhwZWN0ZWQgYSBzdHJpbmcgKGZvciAnICsgJ2J1aWx0LWluIGNvbXBvbmVudHMpIG9yIGEgY2xhc3MvZnVuY3Rpb24gKGZvciBjb21wb3NpdGUgJyArICdjb21wb25lbnRzKSBidXQgZ290OiAlcy4lcycsIHR5cGVTdHJpbmcsIGluZm8pO1xuICB9XG5cbiAgdmFyIGVsZW1lbnQgPSBjcmVhdGVFbGVtZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgLy8gVGhlIHJlc3VsdCBjYW4gYmUgbnVsbGlzaCBpZiBhIG1vY2sgb3IgYSBjdXN0b20gZnVuY3Rpb24gaXMgdXNlZC5cbiAgLy8gVE9ETzogRHJvcCB0aGlzIHdoZW4gdGhlc2UgYXJlIG5vIGxvbmdlciBhbGxvd2VkIGFzIHRoZSB0eXBlIGFyZ3VtZW50LlxuICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICAvLyBTa2lwIGtleSB3YXJuaW5nIGlmIHRoZSB0eXBlIGlzbid0IHZhbGlkIHNpbmNlIG91ciBrZXkgdmFsaWRhdGlvbiBsb2dpY1xuICAvLyBkb2Vzbid0IGV4cGVjdCBhIG5vbi1zdHJpbmcvZnVuY3Rpb24gdHlwZSBhbmQgY2FuIHRocm93IGNvbmZ1c2luZyBlcnJvcnMuXG4gIC8vIFdlIGRvbid0IHdhbnQgZXhjZXB0aW9uIGJlaGF2aW9yIHRvIGRpZmZlciBiZXR3ZWVuIGRldiBhbmQgcHJvZC5cbiAgLy8gKFJlbmRlcmluZyB3aWxsIHRocm93IHdpdGggYSBoZWxwZnVsIG1lc3NhZ2UgYW5kIGFzIHNvb24gYXMgdGhlIHR5cGUgaXNcbiAgLy8gZml4ZWQsIHRoZSBrZXkgd2FybmluZ3Mgd2lsbCBhcHBlYXIuKVxuICBpZiAodmFsaWRUeXBlKSB7XG4gICAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGFyZ3VtZW50c1tpXSwgdHlwZSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICB2YWxpZGF0ZUZyYWdtZW50UHJvcHMoZWxlbWVudCk7XG4gIH0gZWxzZSB7XG4gICAgdmFsaWRhdGVQcm9wVHlwZXMoZWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmFjdG9yeVdpdGhWYWxpZGF0aW9uKHR5cGUpIHtcbiAgdmFyIHZhbGlkYXRlZEZhY3RvcnkgPSBjcmVhdGVFbGVtZW50V2l0aFZhbGlkYXRpb24uYmluZChudWxsLCB0eXBlKTtcbiAgdmFsaWRhdGVkRmFjdG9yeS50eXBlID0gdHlwZTtcbiAgLy8gTGVnYWN5IGhvb2s6IHJlbW92ZSBpdFxuICB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbGlkYXRlZEZhY3RvcnksICd0eXBlJywge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbG93UHJpb3JpdHlXYXJuaW5nJDEoZmFsc2UsICdGYWN0b3J5LnR5cGUgaXMgZGVwcmVjYXRlZC4gQWNjZXNzIHRoZSBjbGFzcyBkaXJlY3RseSAnICsgJ2JlZm9yZSBwYXNzaW5nIGl0IHRvIGNyZWF0ZUZhY3RvcnkuJyk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAndHlwZScsIHtcbiAgICAgICAgICB2YWx1ZTogdHlwZVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVkRmFjdG9yeTtcbn1cblxuZnVuY3Rpb24gY2xvbmVFbGVtZW50V2l0aFZhbGlkYXRpb24oZWxlbWVudCwgcHJvcHMsIGNoaWxkcmVuKSB7XG4gIHZhciBuZXdFbGVtZW50ID0gY2xvbmVFbGVtZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFsaWRhdGVDaGlsZEtleXMoYXJndW1lbnRzW2ldLCBuZXdFbGVtZW50LnR5cGUpO1xuICB9XG4gIHZhbGlkYXRlUHJvcFR5cGVzKG5ld0VsZW1lbnQpO1xuICByZXR1cm4gbmV3RWxlbWVudDtcbn1cblxuLy8gSGVscHMgaWRlbnRpZnkgc2lkZSBlZmZlY3RzIGluIGJlZ2luLXBoYXNlIGxpZmVjeWNsZSBob29rcyBhbmQgc2V0U3RhdGUgcmVkdWNlcnM6XG5cblxuLy8gSW4gc29tZSBjYXNlcywgU3RyaWN0TW9kZSBzaG91bGQgYWxzbyBkb3VibGUtcmVuZGVyIGxpZmVjeWNsZXMuXG4vLyBUaGlzIGNhbiBiZSBjb25mdXNpbmcgZm9yIHRlc3RzIHRob3VnaCxcbi8vIEFuZCBpdCBjYW4gYmUgYmFkIGZvciBwZXJmb3JtYW5jZSBpbiBwcm9kdWN0aW9uLlxuLy8gVGhpcyBmZWF0dXJlIGZsYWcgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB0aGUgYmVoYXZpb3I6XG5cblxuLy8gVG8gcHJlc2VydmUgdGhlIFwiUGF1c2Ugb24gY2F1Z2h0IGV4Y2VwdGlvbnNcIiBiZWhhdmlvciBvZiB0aGUgZGVidWdnZXIsIHdlXG4vLyByZXBsYXkgdGhlIGJlZ2luIHBoYXNlIG9mIGEgZmFpbGVkIGNvbXBvbmVudCBpbnNpZGUgaW52b2tlR3VhcmRlZENhbGxiYWNrLlxuXG5cbi8vIFdhcm4gYWJvdXQgZGVwcmVjYXRlZCwgYXN5bmMtdW5zYWZlIGxpZmVjeWNsZXM7IHJlbGF0ZXMgdG8gUkZDICM2OlxuXG5cbi8vIEdhdGhlciBhZHZhbmNlZCB0aW1pbmcgbWV0cmljcyBmb3IgUHJvZmlsZXIgc3VidHJlZXMuXG5cblxuLy8gVHJhY2Ugd2hpY2ggaW50ZXJhY3Rpb25zIHRyaWdnZXIgZWFjaCBjb21taXQuXG5cblxuLy8gT25seSB1c2VkIGluIHd3dyBidWlsZHMuXG4gLy8gVE9ETzogdHJ1ZT8gSGVyZSBpdCBtaWdodCBqdXN0IGJlIGZhbHNlLlxuXG4vLyBPbmx5IHVzZWQgaW4gd3d3IGJ1aWxkcy5cblxuXG4vLyBPbmx5IHVzZWQgaW4gd3d3IGJ1aWxkcy5cblxuXG4vLyBSZWFjdCBGaXJlOiBwcmV2ZW50IHRoZSB2YWx1ZSBhbmQgY2hlY2tlZCBhdHRyaWJ1dGVzIGZyb20gc3luY2luZ1xuLy8gd2l0aCB0aGVpciByZWxhdGVkIERPTSBwcm9wZXJ0aWVzXG5cblxuLy8gVGhlc2UgQVBJcyB3aWxsIG5vIGxvbmdlciBiZSBcInVuc3RhYmxlXCIgaW4gdGhlIHVwY29taW5nIDE2LjcgcmVsZWFzZSxcbi8vIENvbnRyb2wgdGhpcyBiZWhhdmlvciB3aXRoIGEgZmxhZyB0byBzdXBwb3J0IDE2LjYgbWlub3IgcmVsZWFzZXMgaW4gdGhlIG1lYW53aGlsZS5cbnZhciBlbmFibGVTdGFibGVDb25jdXJyZW50TW9kZUFQSXMgPSBmYWxzZTtcblxudmFyIFJlYWN0ID0ge1xuICBDaGlsZHJlbjoge1xuICAgIG1hcDogbWFwQ2hpbGRyZW4sXG4gICAgZm9yRWFjaDogZm9yRWFjaENoaWxkcmVuLFxuICAgIGNvdW50OiBjb3VudENoaWxkcmVuLFxuICAgIHRvQXJyYXk6IHRvQXJyYXksXG4gICAgb25seTogb25seUNoaWxkXG4gIH0sXG5cbiAgY3JlYXRlUmVmOiBjcmVhdGVSZWYsXG4gIENvbXBvbmVudDogQ29tcG9uZW50LFxuICBQdXJlQ29tcG9uZW50OiBQdXJlQ29tcG9uZW50LFxuXG4gIGNyZWF0ZUNvbnRleHQ6IGNyZWF0ZUNvbnRleHQsXG4gIGZvcndhcmRSZWY6IGZvcndhcmRSZWYsXG4gIGxhenk6IGxhenksXG4gIG1lbW86IG1lbW8sXG5cbiAgdXNlQ2FsbGJhY2s6IHVzZUNhbGxiYWNrLFxuICB1c2VDb250ZXh0OiB1c2VDb250ZXh0LFxuICB1c2VFZmZlY3Q6IHVzZUVmZmVjdCxcbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogdXNlSW1wZXJhdGl2ZUhhbmRsZSxcbiAgdXNlRGVidWdWYWx1ZTogdXNlRGVidWdWYWx1ZSxcbiAgdXNlTGF5b3V0RWZmZWN0OiB1c2VMYXlvdXRFZmZlY3QsXG4gIHVzZU1lbW86IHVzZU1lbW8sXG4gIHVzZVJlZHVjZXI6IHVzZVJlZHVjZXIsXG4gIHVzZVJlZjogdXNlUmVmLFxuICB1c2VTdGF0ZTogdXNlU3RhdGUsXG5cbiAgRnJhZ21lbnQ6IFJFQUNUX0ZSQUdNRU5UX1RZUEUsXG4gIFN0cmljdE1vZGU6IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUsXG4gIFN1c3BlbnNlOiBSRUFDVF9TVVNQRU5TRV9UWVBFLFxuXG4gIGNyZWF0ZUVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnRXaXRoVmFsaWRhdGlvbixcbiAgY2xvbmVFbGVtZW50OiBjbG9uZUVsZW1lbnRXaXRoVmFsaWRhdGlvbixcbiAgY3JlYXRlRmFjdG9yeTogY3JlYXRlRmFjdG9yeVdpdGhWYWxpZGF0aW9uLFxuICBpc1ZhbGlkRWxlbWVudDogaXNWYWxpZEVsZW1lbnQsXG5cbiAgdmVyc2lvbjogUmVhY3RWZXJzaW9uLFxuXG4gIHVuc3RhYmxlX0NvbmN1cnJlbnRNb2RlOiBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSxcbiAgdW5zdGFibGVfUHJvZmlsZXI6IFJFQUNUX1BST0ZJTEVSX1RZUEUsXG5cbiAgX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ6IFJlYWN0U2hhcmVkSW50ZXJuYWxzXG59O1xuXG4vLyBOb3RlOiBzb21lIEFQSXMgYXJlIGFkZGVkIHdpdGggZmVhdHVyZSBmbGFncy5cbi8vIE1ha2Ugc3VyZSB0aGF0IHN0YWJsZSBidWlsZHMgZm9yIG9wZW4gc291cmNlXG4vLyBkb24ndCBtb2RpZnkgdGhlIFJlYWN0IG9iamVjdCB0byBhdm9pZCBkZW9wdHMuXG4vLyBBbHNvIGxldCdzIG5vdCBleHBvc2UgdGhlaXIgbmFtZXMgaW4gc3RhYmxlIGJ1aWxkcy5cblxuaWYgKGVuYWJsZVN0YWJsZUNvbmN1cnJlbnRNb2RlQVBJcykge1xuICBSZWFjdC5Db25jdXJyZW50TW9kZSA9IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFO1xuICBSZWFjdC5Qcm9maWxlciA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG4gIFJlYWN0LnVuc3RhYmxlX0NvbmN1cnJlbnRNb2RlID0gdW5kZWZpbmVkO1xuICBSZWFjdC51bnN0YWJsZV9Qcm9maWxlciA9IHVuZGVmaW5lZDtcbn1cblxuXG5cbnZhciBSZWFjdCQyID0gT2JqZWN0LmZyZWV6ZSh7XG5cdGRlZmF1bHQ6IFJlYWN0XG59KTtcblxudmFyIFJlYWN0JDMgPSAoIFJlYWN0JDIgJiYgUmVhY3QgKSB8fCBSZWFjdCQyO1xuXG4vLyBUT0RPOiBkZWNpZGUgb24gdGhlIHRvcC1sZXZlbCBleHBvcnQgZm9ybS5cbi8vIFRoaXMgaXMgaGFja3kgYnV0IG1ha2VzIGl0IHdvcmsgd2l0aCBib3RoIFJvbGx1cCBhbmQgSmVzdC5cbnZhciByZWFjdCA9IFJlYWN0JDMuZGVmYXVsdCB8fCBSZWFjdCQzO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlYWN0O1xuICB9KSgpO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/react/cjs/react.development.js\n"); + +/***/ }), + +/***/ "./node_modules/react/index.js": +/*!*************************************!*\ + !*** ./node_modules/react/index.js ***! + \*************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react.development.js */ \"./node_modules/react/cjs/react.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzP2FiNWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsSUFBSSxLQUFxQyxFQUFFLEVBRTFDO0FBQ0QsbUJBQW1CLG1CQUFPLENBQUMsaUZBQTRCO0FBQ3ZEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LmRldmVsb3BtZW50LmpzJyk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/react/index.js\n"); + +/***/ }) + +},[["./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?page=%2Fnext%2Fdist%2Fpages%2F_error&absolutePagePath=%2FUsers%2Fjohn.fisher%2Fworkspace%2Fvandebron%2Ftech-blog%2Fnode_modules%2Fnext%2Fdist%2Fpages%2F_error.js!./","webpack"]]]); \ No newline at end of file diff --git a/_next/static/chunks/webpack.js b/_next/static/chunks/webpack.js index 1a88a661d..1d1efb4d0 100644 --- a/_next/static/chunks/webpack.js +++ b/_next/static/chunks/webpack.js @@ -113,7 +113,7 @@ /******/ /******/ var hotApplyOnUpdate = true; /******/ // eslint-disable-next-line no-unused-vars -/******/ var hotCurrentHash = "045f58a0297d5f7e9846"; +/******/ var hotCurrentHash = "5eb0e2a5f22fd4ee6288"; /******/ var hotRequestTimeout = 10000; /******/ var hotCurrentModuleData = {}; /******/ var hotCurrentChildModule; diff --git a/_next/static/development/_buildManifest.js b/_next/static/development/_buildManifest.js index 302ed4df8..0b190f27b 100644 --- a/_next/static/development/_buildManifest.js +++ b/_next/static/development/_buildManifest.js @@ -1 +1 @@ -self.__BUILD_MANIFEST = {__rewrites:{beforeFiles:[],afterFiles:[],fallback:[]},"/":["static\u002Fchunks\u002Fpages\u002Findex.js"],"/_error":["static\u002Fchunks\u002Fpages\u002F_error.js"],"/blog/[slug]":["static\u002Fchunks\u002Fpages\u002Fblog\u002F[slug].js"],sortedPages:["\u002F","\u002F_app","\u002F_error","\u002Fblog\u002F[slug]"]};self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB() \ No newline at end of file +self.__BUILD_MANIFEST = {__rewrites:{beforeFiles:[],afterFiles:[],fallback:[]},"/_error":["static\u002Fchunks\u002Fpages\u002F_error.js"],"/blog/[slug]":["static\u002Fchunks\u002Fpages\u002Fblog\u002F[slug].js"],sortedPages:["\u002F_app","\u002F_error","\u002Fblog\u002F[slug]"]};self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB() \ No newline at end of file diff --git a/_next/static/gzB60_OAN8-5jYSs7tPqd/_buildManifest.js b/_next/static/gzB60_OAN8-5jYSs7tPqd/_buildManifest.js deleted file mode 100644 index 9aece60b9..000000000 --- a/_next/static/gzB60_OAN8-5jYSs7tPqd/_buildManifest.js +++ /dev/null @@ -1 +0,0 @@ -self.__BUILD_MANIFEST = (function(a){return {__rewrites:{beforeFiles:[],afterFiles:[],fallback:[]},"/":["static\u002Fchunks\u002Fpages\u002Findex-fa81e77dbb0d11046a38.js"],"/_error":["static\u002Fchunks\u002Fpages\u002F_error-3471ef3eb12e3a96abde.js"],"/about":[a,"static\u002Fchunks\u002Fpages\u002Fabout-2cf6cb0673d6904a8e88.js"],"/blog/[slug]":[a,"static\u002Fchunks\u002Fpages\u002Fblog\u002F[slug]-8ca30567d5754bf22109.js"],"/greentech-hackathon":["static\u002Fcss\u002F7335de542e4b4f02a25b.css","static\u002Fchunks\u002Fd637bb0c.ddce25b62cf34b951439.js",a,"static\u002Fchunks\u002Fpages\u002Fgreentech-hackathon-6b79709a263687467e50.js"],sortedPages:["\u002F","\u002F_app","\u002F_error","\u002Fabout","\u002Fblog\u002F[slug]","\u002Fgreentech-hackathon"]}}("static\u002Fchunks\u002F1c49f5f00355f650bee3d37484f094be037a30fa.91581ad1159d948d31b7.js"));self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB() \ No newline at end of file diff --git a/_next/static/gzB60_OAN8-5jYSs7tPqd/_ssgManifest.js b/_next/static/gzB60_OAN8-5jYSs7tPqd/_ssgManifest.js deleted file mode 100644 index 5ed81266f..000000000 --- a/_next/static/gzB60_OAN8-5jYSs7tPqd/_ssgManifest.js +++ /dev/null @@ -1 +0,0 @@ -self.__SSG_MANIFEST=new Set(["\u002F","\u002Fgreentech-hackathon","\u002Fblog\u002F[slug]"]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB() \ No newline at end of file diff --git a/_next/static/sMaP26r88BWlLN5aWZqrh/_buildManifest.js b/_next/static/sMaP26r88BWlLN5aWZqrh/_buildManifest.js deleted file mode 100644 index 9aece60b9..000000000 --- a/_next/static/sMaP26r88BWlLN5aWZqrh/_buildManifest.js +++ /dev/null @@ -1 +0,0 @@ -self.__BUILD_MANIFEST = (function(a){return {__rewrites:{beforeFiles:[],afterFiles:[],fallback:[]},"/":["static\u002Fchunks\u002Fpages\u002Findex-fa81e77dbb0d11046a38.js"],"/_error":["static\u002Fchunks\u002Fpages\u002F_error-3471ef3eb12e3a96abde.js"],"/about":[a,"static\u002Fchunks\u002Fpages\u002Fabout-2cf6cb0673d6904a8e88.js"],"/blog/[slug]":[a,"static\u002Fchunks\u002Fpages\u002Fblog\u002F[slug]-8ca30567d5754bf22109.js"],"/greentech-hackathon":["static\u002Fcss\u002F7335de542e4b4f02a25b.css","static\u002Fchunks\u002Fd637bb0c.ddce25b62cf34b951439.js",a,"static\u002Fchunks\u002Fpages\u002Fgreentech-hackathon-6b79709a263687467e50.js"],sortedPages:["\u002F","\u002F_app","\u002F_error","\u002Fabout","\u002Fblog\u002F[slug]","\u002Fgreentech-hackathon"]}}("static\u002Fchunks\u002F1c49f5f00355f650bee3d37484f094be037a30fa.91581ad1159d948d31b7.js"));self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB() \ No newline at end of file diff --git a/_next/static/sMaP26r88BWlLN5aWZqrh/_ssgManifest.js b/_next/static/sMaP26r88BWlLN5aWZqrh/_ssgManifest.js deleted file mode 100644 index 5ed81266f..000000000 --- a/_next/static/sMaP26r88BWlLN5aWZqrh/_ssgManifest.js +++ /dev/null @@ -1 +0,0 @@ -self.__SSG_MANIFEST=new Set(["\u002F","\u002Fgreentech-hackathon","\u002Fblog\u002F[slug]"]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB() \ No newline at end of file diff --git a/_next/static/webpack/045aa36bfdcb84f53836.hot-update.json b/_next/static/webpack/045aa36bfdcb84f53836.hot-update.json deleted file mode 100644 index fefdc6dc4..000000000 --- a/_next/static/webpack/045aa36bfdcb84f53836.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"h":"045f58a0297d5f7e9846","c":{"pages/_app":true,"pages/blog/[slug]":true}} \ No newline at end of file diff --git a/_next/static/webpack/05c0053eb13bab46bca4.hot-update.json b/_next/static/webpack/05c0053eb13bab46bca4.hot-update.json deleted file mode 100644 index e6d9b80a6..000000000 --- a/_next/static/webpack/05c0053eb13bab46bca4.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"h":"6de4a6b8d4f651a3d938","c":{}} \ No newline at end of file diff --git a/_next/static/webpack/082932577e0db71fda3e.hot-update.json b/_next/static/webpack/082932577e0db71fda3e.hot-update.json new file mode 100644 index 000000000..8fe817fda --- /dev/null +++ b/_next/static/webpack/082932577e0db71fda3e.hot-update.json @@ -0,0 +1 @@ +{"h":"5eb0e2a5f22fd4ee6288","c":{"pages/next/dist/pages/_error":false}} \ No newline at end of file diff --git a/_next/static/webpack/1d8c547f9abb877f56b4.hot-update.json b/_next/static/webpack/1d8c547f9abb877f56b4.hot-update.json deleted file mode 100644 index 1afa81000..000000000 --- a/_next/static/webpack/1d8c547f9abb877f56b4.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"h":"05c0053eb13bab46bca4","c":{"pages/blog/[slug]":true}} \ No newline at end of file diff --git a/_next/static/webpack/1e96017d1654b24109f6.hot-update.json b/_next/static/webpack/1e96017d1654b24109f6.hot-update.json deleted file mode 100644 index 6d7f6056c..000000000 --- a/_next/static/webpack/1e96017d1654b24109f6.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"h":"81eb14340a150ff28f41","c":{"pages/_app":true}} \ No newline at end of file diff --git a/_next/static/webpack/1ed3bf7a44c05fc89bbe.hot-update.json b/_next/static/webpack/1ed3bf7a44c05fc89bbe.hot-update.json deleted file mode 100644 index 2d8a8d2c1..000000000 --- a/_next/static/webpack/1ed3bf7a44c05fc89bbe.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"h":"e66e5e798c6a970e4f36","c":{}} \ No newline at end of file diff --git a/_next/static/webpack/2830984271c8361f7e69.hot-update.json b/_next/static/webpack/2830984271c8361f7e69.hot-update.json new file mode 100644 index 000000000..9d0316f62 --- /dev/null +++ b/_next/static/webpack/2830984271c8361f7e69.hot-update.json @@ -0,0 +1 @@ +{"h":"67d46fe1d00b6cfa2fa9","c":{}} \ No newline at end of file diff --git a/_next/static/webpack/2f3ff1b9a32ad1108cb5.hot-update.json b/_next/static/webpack/2f3ff1b9a32ad1108cb5.hot-update.json deleted file mode 100644 index 07329e271..000000000 --- a/_next/static/webpack/2f3ff1b9a32ad1108cb5.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"h":"1e96017d1654b24109f6","c":{"pages/_app":true}} \ No newline at end of file diff --git a/_next/static/webpack/4a6246cb00144a264a80.hot-update.json b/_next/static/webpack/4a6246cb00144a264a80.hot-update.json deleted file mode 100644 index e86633cef..000000000 --- a/_next/static/webpack/4a6246cb00144a264a80.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"h":"2f3ff1b9a32ad1108cb5","c":{"pages/_app":true}} \ No newline at end of file diff --git a/_next/static/webpack/656cb36d1b7ceab9ac41.hot-update.json b/_next/static/webpack/656cb36d1b7ceab9ac41.hot-update.json deleted file mode 100644 index 76dfd98c8..000000000 --- a/_next/static/webpack/656cb36d1b7ceab9ac41.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"h":"706cc8477ff71d2c99f9","c":{"pages/_app":true}} \ No newline at end of file diff --git a/_next/static/webpack/67d46fe1d00b6cfa2fa9.hot-update.json b/_next/static/webpack/67d46fe1d00b6cfa2fa9.hot-update.json new file mode 100644 index 000000000..df0d8295e --- /dev/null +++ b/_next/static/webpack/67d46fe1d00b6cfa2fa9.hot-update.json @@ -0,0 +1 @@ +{"h":"082932577e0db71fda3e","c":{"pages/_app":true}} \ No newline at end of file diff --git a/_next/static/webpack/685fb85f4afad62de3e4.hot-update.json b/_next/static/webpack/685fb85f4afad62de3e4.hot-update.json deleted file mode 100644 index afbc0c38c..000000000 --- a/_next/static/webpack/685fb85f4afad62de3e4.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"h":"b95d50f77e064531a643","c":{"pages/_app":true}} \ No newline at end of file diff --git a/_next/static/webpack/6de4a6b8d4f651a3d938.hot-update.json b/_next/static/webpack/6de4a6b8d4f651a3d938.hot-update.json deleted file mode 100644 index 9978caf5e..000000000 --- a/_next/static/webpack/6de4a6b8d4f651a3d938.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"h":"045aa36bfdcb84f53836","c":{"pages/_app":true,"pages/blog/[slug]":true}} \ No newline at end of file diff --git a/_next/static/webpack/706cc8477ff71d2c99f9.hot-update.json b/_next/static/webpack/706cc8477ff71d2c99f9.hot-update.json deleted file mode 100644 index d331015cf..000000000 --- a/_next/static/webpack/706cc8477ff71d2c99f9.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"h":"7e63bbf52f3628dc72d6","c":{"pages/blog/[slug]":true}} \ No newline at end of file diff --git a/_next/static/webpack/7e63bbf52f3628dc72d6.hot-update.json b/_next/static/webpack/7e63bbf52f3628dc72d6.hot-update.json deleted file mode 100644 index 648372a34..000000000 --- a/_next/static/webpack/7e63bbf52f3628dc72d6.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"h":"dcd431c2c642074bf604","c":{"pages/_app":true}} \ No newline at end of file diff --git a/_next/static/webpack/81eb14340a150ff28f41.hot-update.json b/_next/static/webpack/81eb14340a150ff28f41.hot-update.json deleted file mode 100644 index 3f638c361..000000000 --- a/_next/static/webpack/81eb14340a150ff28f41.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"h":"1ed3bf7a44c05fc89bbe","c":{"pages/blog/[slug]":true}} \ No newline at end of file diff --git a/_next/static/webpack/b95d50f77e064531a643.hot-update.json b/_next/static/webpack/b95d50f77e064531a643.hot-update.json deleted file mode 100644 index a31f0f06c..000000000 --- a/_next/static/webpack/b95d50f77e064531a643.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"h":"4a6246cb00144a264a80","c":{"pages/_app":true}} \ No newline at end of file diff --git a/_next/static/webpack/dcd431c2c642074bf604.hot-update.json b/_next/static/webpack/dcd431c2c642074bf604.hot-update.json deleted file mode 100644 index 650a006de..000000000 --- a/_next/static/webpack/dcd431c2c642074bf604.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"h":"685fb85f4afad62de3e4","c":{"pages/_app":true}} \ No newline at end of file diff --git a/_next/static/webpack/e66e5e798c6a970e4f36.hot-update.json b/_next/static/webpack/e66e5e798c6a970e4f36.hot-update.json deleted file mode 100644 index 1cc9ad093..000000000 --- a/_next/static/webpack/e66e5e798c6a970e4f36.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"h":"1d8c547f9abb877f56b4","c":{"pages/index":false}} \ No newline at end of file diff --git a/_next/static/webpack/pages/_app.045aa36bfdcb84f53836.hot-update.js b/_next/static/webpack/pages/_app.045aa36bfdcb84f53836.hot-update.js deleted file mode 100644 index c9399b2dc..000000000 --- a/_next/static/webpack/pages/_app.045aa36bfdcb84f53836.hot-update.js +++ /dev/null @@ -1,15 +0,0 @@ -webpackHotUpdate_N_E("pages/_app",{ - -/***/ "./node_modules/next/dist/compiled/css-loader/cjs.js?!./node_modules/next/dist/compiled/postcss-loader/cjs.js?!./pages/styles.css": -/*!**************************************************************************************************************************!*\ - !*** (webpack)/css-loader/cjs.js??ref--5-oneOf-6-1!(webpack)/postcss-loader/cjs.js??ref--5-oneOf-6-2!./pages/styles.css ***! - \**************************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_next_dist_compiled_css_loader_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/next/dist/compiled/css-loader/api.js */ \"./node_modules/next/dist/compiled/css-loader/api.js\");\n/* harmony import */ var _node_modules_next_dist_compiled_css_loader_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_next_dist_compiled_css_loader_api_js__WEBPACK_IMPORTED_MODULE_0__);\n// Imports\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_next_dist_compiled_css_loader_api_js__WEBPACK_IMPORTED_MODULE_0___default()(true);\n// Module\n___CSS_LOADER_EXPORT___.push([module.i, \"body {\\n margin: 0px;\\n min-height: 100vh;\\n}\\n\\nbody > div {\\n height: 100%;\\n}\\n\\n.visually-hidden {\\n position: absolute;\\n left: -10000px;\\n top: auto;\\n width: 1px;\\n height: 1px;\\n overflow: hidden;\\n}\\n\\n.Card-module__Card .Card-module__content {\\n padding: 30px 0;\\n}\\n.Text-module__u-font-body {\\n font-size: 1rem;\\n line-height: 1.5rem;\\n margin: 0.5rem;\\n}\\n\\ntd.expanded-table-cell div {\\n width: 100%;\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://pages/styles.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,WAAW;EACX,iBAAiB;AACnB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,kBAAkB;EAClB,cAAc;EACd,SAAS;EACT,UAAU;EACV,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,eAAe;AACjB;AACA;EACE,eAAe;EACf,mBAAmB;EACnB,cAAc;AAChB;;AAEA;EACE,WAAW;AACb\",\"sourcesContent\":[\"body {\\n margin: 0px;\\n min-height: 100vh;\\n}\\n\\nbody > div {\\n height: 100%;\\n}\\n\\n.visually-hidden {\\n position: absolute;\\n left: -10000px;\\n top: auto;\\n width: 1px;\\n height: 1px;\\n overflow: hidden;\\n}\\n\\n.Card-module__Card .Card-module__content {\\n padding: 30px 0;\\n}\\n.Text-module__u-font-body {\\n font-size: 1rem;\\n line-height: 1.5rem;\\n margin: 0.5rem;\\n}\\n\\ntd.expanded-table-cell div {\\n width: 100%;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vcGFnZXMvc3R5bGVzLmNzcz9lZGI4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQytGO0FBQy9GLDhCQUE4Qix5RkFBMkI7QUFDekQ7QUFDQSw4QkFBOEIsUUFBUyxTQUFTLGdCQUFnQixzQkFBc0IsR0FBRyxnQkFBZ0IsaUJBQWlCLEdBQUcsc0JBQXNCLHVCQUF1QixtQkFBbUIsY0FBYyxlQUFlLGdCQUFnQixxQkFBcUIsR0FBRyw4Q0FBOEMsb0JBQW9CLEdBQUcsNkJBQTZCLG9CQUFvQix3QkFBd0IsbUJBQW1CLEdBQUcsZ0NBQWdDLGdCQUFnQixHQUFHLE9BQU8saUZBQWlGLFVBQVUsWUFBWSxPQUFPLEtBQUssVUFBVSxNQUFNLEtBQUssWUFBWSxXQUFXLFVBQVUsVUFBVSxVQUFVLFlBQVksT0FBTyxLQUFLLFVBQVUsTUFBTSxLQUFLLFVBQVUsWUFBWSxXQUFXLE9BQU8sS0FBSyxVQUFVLCtCQUErQixnQkFBZ0Isc0JBQXNCLEdBQUcsZ0JBQWdCLGlCQUFpQixHQUFHLHNCQUFzQix1QkFBdUIsbUJBQW1CLGNBQWMsZUFBZSxnQkFBZ0IscUJBQXFCLEdBQUcsOENBQThDLG9CQUFvQixHQUFHLDZCQUE2QixvQkFBb0Isd0JBQXdCLG1CQUFtQixHQUFHLGdDQUFnQyxnQkFBZ0IsR0FBRyxtQkFBbUI7QUFDNXRDO0FBQ2Usc0ZBQXVCLEVBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL2Nzcy1sb2FkZXIvY2pzLmpzPyEuL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcG9zdGNzcy1sb2FkZXIvY2pzLmpzPyEuL3BhZ2VzL3N0eWxlcy5jc3MuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL2Nzcy1sb2FkZXIvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18odHJ1ZSk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCJib2R5IHtcXG4gIG1hcmdpbjogMHB4O1xcbiAgbWluLWhlaWdodDogMTAwdmg7XFxufVxcblxcbmJvZHkgPiBkaXYge1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG5cXG4udmlzdWFsbHktaGlkZGVuIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IC0xMDAwMHB4O1xcbiAgdG9wOiBhdXRvO1xcbiAgd2lkdGg6IDFweDtcXG4gIGhlaWdodDogMXB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuXFxuLkNhcmQtbW9kdWxlX19DYXJkIC5DYXJkLW1vZHVsZV9fY29udGVudCB7XFxuICBwYWRkaW5nOiAzMHB4IDA7XFxufVxcbi5UZXh0LW1vZHVsZV9fdS1mb250LWJvZHkge1xcbiAgZm9udC1zaXplOiAxcmVtO1xcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcXG4gIG1hcmdpbjogMC41cmVtO1xcbn1cXG5cXG50ZC5leHBhbmRlZC10YWJsZS1jZWxsIGRpdiB7XFxuICB3aWR0aDogMTAwJTtcXG59XCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovL3BhZ2VzL3N0eWxlcy5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7RUFDRSxXQUFXO0VBQ1gsaUJBQWlCO0FBQ25COztBQUVBO0VBQ0UsWUFBWTtBQUNkOztBQUVBO0VBQ0Usa0JBQWtCO0VBQ2xCLGNBQWM7RUFDZCxTQUFTO0VBQ1QsVUFBVTtFQUNWLFdBQVc7RUFDWCxnQkFBZ0I7QUFDbEI7O0FBRUE7RUFDRSxlQUFlO0FBQ2pCO0FBQ0E7RUFDRSxlQUFlO0VBQ2YsbUJBQW1CO0VBQ25CLGNBQWM7QUFDaEI7O0FBRUE7RUFDRSxXQUFXO0FBQ2JcIixcInNvdXJjZXNDb250ZW50XCI6W1wiYm9keSB7XFxuICBtYXJnaW46IDBweDtcXG4gIG1pbi1oZWlnaHQ6IDEwMHZoO1xcbn1cXG5cXG5ib2R5ID4gZGl2IHtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuXFxuLnZpc3VhbGx5LWhpZGRlbiB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBsZWZ0OiAtMTAwMDBweDtcXG4gIHRvcDogYXV0bztcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDFweDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi5DYXJkLW1vZHVsZV9fQ2FyZCAuQ2FyZC1tb2R1bGVfX2NvbnRlbnQge1xcbiAgcGFkZGluZzogMzBweCAwO1xcbn1cXG4uVGV4dC1tb2R1bGVfX3UtZm9udC1ib2R5IHtcXG4gIGZvbnQtc2l6ZTogMXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XFxuICBtYXJnaW46IDAuNXJlbTtcXG59XFxuXFxudGQuZXhwYW5kZWQtdGFibGUtY2VsbCBkaXYge1xcbiAgd2lkdGg6IDEwMCU7XFxufVwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/css-loader/cjs.js?!./node_modules/next/dist/compiled/postcss-loader/cjs.js?!./pages/styles.css\n"); - -/***/ }) - -}) \ No newline at end of file diff --git a/_next/static/webpack/pages/_app.1e96017d1654b24109f6.hot-update.js b/_next/static/webpack/pages/_app.1e96017d1654b24109f6.hot-update.js deleted file mode 100644 index c9399b2dc..000000000 --- a/_next/static/webpack/pages/_app.1e96017d1654b24109f6.hot-update.js +++ /dev/null @@ -1,15 +0,0 @@ -webpackHotUpdate_N_E("pages/_app",{ - -/***/ "./node_modules/next/dist/compiled/css-loader/cjs.js?!./node_modules/next/dist/compiled/postcss-loader/cjs.js?!./pages/styles.css": -/*!**************************************************************************************************************************!*\ - !*** (webpack)/css-loader/cjs.js??ref--5-oneOf-6-1!(webpack)/postcss-loader/cjs.js??ref--5-oneOf-6-2!./pages/styles.css ***! - \**************************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_next_dist_compiled_css_loader_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/next/dist/compiled/css-loader/api.js */ \"./node_modules/next/dist/compiled/css-loader/api.js\");\n/* harmony import */ var _node_modules_next_dist_compiled_css_loader_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_next_dist_compiled_css_loader_api_js__WEBPACK_IMPORTED_MODULE_0__);\n// Imports\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_next_dist_compiled_css_loader_api_js__WEBPACK_IMPORTED_MODULE_0___default()(true);\n// Module\n___CSS_LOADER_EXPORT___.push([module.i, \"body {\\n margin: 0px;\\n min-height: 100vh;\\n}\\n\\nbody > div {\\n height: 100%;\\n}\\n\\n.visually-hidden {\\n position: absolute;\\n left: -10000px;\\n top: auto;\\n width: 1px;\\n height: 1px;\\n overflow: hidden;\\n}\\n\\n.Card-module__Card .Card-module__content {\\n padding: 30px 0;\\n}\\n.Text-module__u-font-body {\\n font-size: 1rem;\\n line-height: 1.5rem;\\n margin: 0.5rem;\\n}\\n\\ntd.expanded-table-cell div {\\n width: 100%;\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://pages/styles.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,WAAW;EACX,iBAAiB;AACnB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,kBAAkB;EAClB,cAAc;EACd,SAAS;EACT,UAAU;EACV,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,eAAe;AACjB;AACA;EACE,eAAe;EACf,mBAAmB;EACnB,cAAc;AAChB;;AAEA;EACE,WAAW;AACb\",\"sourcesContent\":[\"body {\\n margin: 0px;\\n min-height: 100vh;\\n}\\n\\nbody > div {\\n height: 100%;\\n}\\n\\n.visually-hidden {\\n position: absolute;\\n left: -10000px;\\n top: auto;\\n width: 1px;\\n height: 1px;\\n overflow: hidden;\\n}\\n\\n.Card-module__Card .Card-module__content {\\n padding: 30px 0;\\n}\\n.Text-module__u-font-body {\\n font-size: 1rem;\\n line-height: 1.5rem;\\n margin: 0.5rem;\\n}\\n\\ntd.expanded-table-cell div {\\n width: 100%;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vcGFnZXMvc3R5bGVzLmNzcz9lZGI4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQytGO0FBQy9GLDhCQUE4Qix5RkFBMkI7QUFDekQ7QUFDQSw4QkFBOEIsUUFBUyxTQUFTLGdCQUFnQixzQkFBc0IsR0FBRyxnQkFBZ0IsaUJBQWlCLEdBQUcsc0JBQXNCLHVCQUF1QixtQkFBbUIsY0FBYyxlQUFlLGdCQUFnQixxQkFBcUIsR0FBRyw4Q0FBOEMsb0JBQW9CLEdBQUcsNkJBQTZCLG9CQUFvQix3QkFBd0IsbUJBQW1CLEdBQUcsZ0NBQWdDLGdCQUFnQixHQUFHLE9BQU8saUZBQWlGLFVBQVUsWUFBWSxPQUFPLEtBQUssVUFBVSxNQUFNLEtBQUssWUFBWSxXQUFXLFVBQVUsVUFBVSxVQUFVLFlBQVksT0FBTyxLQUFLLFVBQVUsTUFBTSxLQUFLLFVBQVUsWUFBWSxXQUFXLE9BQU8sS0FBSyxVQUFVLCtCQUErQixnQkFBZ0Isc0JBQXNCLEdBQUcsZ0JBQWdCLGlCQUFpQixHQUFHLHNCQUFzQix1QkFBdUIsbUJBQW1CLGNBQWMsZUFBZSxnQkFBZ0IscUJBQXFCLEdBQUcsOENBQThDLG9CQUFvQixHQUFHLDZCQUE2QixvQkFBb0Isd0JBQXdCLG1CQUFtQixHQUFHLGdDQUFnQyxnQkFBZ0IsR0FBRyxtQkFBbUI7QUFDNXRDO0FBQ2Usc0ZBQXVCLEVBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL2Nzcy1sb2FkZXIvY2pzLmpzPyEuL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcG9zdGNzcy1sb2FkZXIvY2pzLmpzPyEuL3BhZ2VzL3N0eWxlcy5jc3MuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL2Nzcy1sb2FkZXIvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18odHJ1ZSk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCJib2R5IHtcXG4gIG1hcmdpbjogMHB4O1xcbiAgbWluLWhlaWdodDogMTAwdmg7XFxufVxcblxcbmJvZHkgPiBkaXYge1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG5cXG4udmlzdWFsbHktaGlkZGVuIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IC0xMDAwMHB4O1xcbiAgdG9wOiBhdXRvO1xcbiAgd2lkdGg6IDFweDtcXG4gIGhlaWdodDogMXB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuXFxuLkNhcmQtbW9kdWxlX19DYXJkIC5DYXJkLW1vZHVsZV9fY29udGVudCB7XFxuICBwYWRkaW5nOiAzMHB4IDA7XFxufVxcbi5UZXh0LW1vZHVsZV9fdS1mb250LWJvZHkge1xcbiAgZm9udC1zaXplOiAxcmVtO1xcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcXG4gIG1hcmdpbjogMC41cmVtO1xcbn1cXG5cXG50ZC5leHBhbmRlZC10YWJsZS1jZWxsIGRpdiB7XFxuICB3aWR0aDogMTAwJTtcXG59XCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovL3BhZ2VzL3N0eWxlcy5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7RUFDRSxXQUFXO0VBQ1gsaUJBQWlCO0FBQ25COztBQUVBO0VBQ0UsWUFBWTtBQUNkOztBQUVBO0VBQ0Usa0JBQWtCO0VBQ2xCLGNBQWM7RUFDZCxTQUFTO0VBQ1QsVUFBVTtFQUNWLFdBQVc7RUFDWCxnQkFBZ0I7QUFDbEI7O0FBRUE7RUFDRSxlQUFlO0FBQ2pCO0FBQ0E7RUFDRSxlQUFlO0VBQ2YsbUJBQW1CO0VBQ25CLGNBQWM7QUFDaEI7O0FBRUE7RUFDRSxXQUFXO0FBQ2JcIixcInNvdXJjZXNDb250ZW50XCI6W1wiYm9keSB7XFxuICBtYXJnaW46IDBweDtcXG4gIG1pbi1oZWlnaHQ6IDEwMHZoO1xcbn1cXG5cXG5ib2R5ID4gZGl2IHtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuXFxuLnZpc3VhbGx5LWhpZGRlbiB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBsZWZ0OiAtMTAwMDBweDtcXG4gIHRvcDogYXV0bztcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDFweDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi5DYXJkLW1vZHVsZV9fQ2FyZCAuQ2FyZC1tb2R1bGVfX2NvbnRlbnQge1xcbiAgcGFkZGluZzogMzBweCAwO1xcbn1cXG4uVGV4dC1tb2R1bGVfX3UtZm9udC1ib2R5IHtcXG4gIGZvbnQtc2l6ZTogMXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XFxuICBtYXJnaW46IDAuNXJlbTtcXG59XFxuXFxudGQuZXhwYW5kZWQtdGFibGUtY2VsbCBkaXYge1xcbiAgd2lkdGg6IDEwMCU7XFxufVwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/css-loader/cjs.js?!./node_modules/next/dist/compiled/postcss-loader/cjs.js?!./pages/styles.css\n"); - -/***/ }) - -}) \ No newline at end of file diff --git a/_next/static/webpack/pages/_app.2f3ff1b9a32ad1108cb5.hot-update.js b/_next/static/webpack/pages/_app.2f3ff1b9a32ad1108cb5.hot-update.js deleted file mode 100644 index 14cb38f46..000000000 --- a/_next/static/webpack/pages/_app.2f3ff1b9a32ad1108cb5.hot-update.js +++ /dev/null @@ -1,15 +0,0 @@ -webpackHotUpdate_N_E("pages/_app",{ - -/***/ "./node_modules/next/dist/compiled/css-loader/cjs.js?!./node_modules/next/dist/compiled/postcss-loader/cjs.js?!./pages/styles.css": -/*!**************************************************************************************************************************!*\ - !*** (webpack)/css-loader/cjs.js??ref--5-oneOf-6-1!(webpack)/postcss-loader/cjs.js??ref--5-oneOf-6-2!./pages/styles.css ***! - \**************************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_next_dist_compiled_css_loader_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/next/dist/compiled/css-loader/api.js */ \"./node_modules/next/dist/compiled/css-loader/api.js\");\n/* harmony import */ var _node_modules_next_dist_compiled_css_loader_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_next_dist_compiled_css_loader_api_js__WEBPACK_IMPORTED_MODULE_0__);\n// Imports\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_next_dist_compiled_css_loader_api_js__WEBPACK_IMPORTED_MODULE_0___default()(true);\n// Module\n___CSS_LOADER_EXPORT___.push([module.i, \"body {\\n margin: 0px;\\n min-height: 100vh;\\n}\\n\\nbody > div {\\n height: 100%;\\n}\\n\\n.visually-hidden {\\n position: absolute;\\n left: -10000px;\\n top: auto;\\n width: 1px;\\n height: 1px;\\n overflow: hidden;\\n}\\n\\n.Card-module__Card .Card-module__content {\\n padding: 30px 0;\\n}\\n.Text-module__u-font-body {\\n font-size: 1rem;\\n line-height: 1.5rem;\\n margin: 0.5rem;\\n}\\n\\ntd.expanded-table-cell div {\\n width: 100%;\\n height: 100%;\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://pages/styles.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,WAAW;EACX,iBAAiB;AACnB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,kBAAkB;EAClB,cAAc;EACd,SAAS;EACT,UAAU;EACV,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,eAAe;AACjB;AACA;EACE,eAAe;EACf,mBAAmB;EACnB,cAAc;AAChB;;AAEA;EACE,WAAW;EACX,YAAY;AACd\",\"sourcesContent\":[\"body {\\n margin: 0px;\\n min-height: 100vh;\\n}\\n\\nbody > div {\\n height: 100%;\\n}\\n\\n.visually-hidden {\\n position: absolute;\\n left: -10000px;\\n top: auto;\\n width: 1px;\\n height: 1px;\\n overflow: hidden;\\n}\\n\\n.Card-module__Card .Card-module__content {\\n padding: 30px 0;\\n}\\n.Text-module__u-font-body {\\n font-size: 1rem;\\n line-height: 1.5rem;\\n margin: 0.5rem;\\n}\\n\\ntd.expanded-table-cell div {\\n width: 100%;\\n height: 100%;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vcGFnZXMvc3R5bGVzLmNzcz9lZGI4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQytGO0FBQy9GLDhCQUE4Qix5RkFBMkI7QUFDekQ7QUFDQSw4QkFBOEIsUUFBUyxTQUFTLGdCQUFnQixzQkFBc0IsR0FBRyxnQkFBZ0IsaUJBQWlCLEdBQUcsc0JBQXNCLHVCQUF1QixtQkFBbUIsY0FBYyxlQUFlLGdCQUFnQixxQkFBcUIsR0FBRyw4Q0FBOEMsb0JBQW9CLEdBQUcsNkJBQTZCLG9CQUFvQix3QkFBd0IsbUJBQW1CLEdBQUcsZ0NBQWdDLGdCQUFnQixpQkFBaUIsR0FBRyxPQUFPLGlGQUFpRixVQUFVLFlBQVksT0FBTyxLQUFLLFVBQVUsTUFBTSxLQUFLLFlBQVksV0FBVyxVQUFVLFVBQVUsVUFBVSxZQUFZLE9BQU8sS0FBSyxVQUFVLE1BQU0sS0FBSyxVQUFVLFlBQVksV0FBVyxPQUFPLEtBQUssVUFBVSxVQUFVLCtCQUErQixnQkFBZ0Isc0JBQXNCLEdBQUcsZ0JBQWdCLGlCQUFpQixHQUFHLHNCQUFzQix1QkFBdUIsbUJBQW1CLGNBQWMsZUFBZSxnQkFBZ0IscUJBQXFCLEdBQUcsOENBQThDLG9CQUFvQixHQUFHLDZCQUE2QixvQkFBb0Isd0JBQXdCLG1CQUFtQixHQUFHLGdDQUFnQyxnQkFBZ0IsaUJBQWlCLEdBQUcsbUJBQW1CO0FBQ3h3QztBQUNlLHNGQUF1QixFQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9jc3MtbG9hZGVyL2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3Bvc3Rjc3MtbG9hZGVyL2Nqcy5qcz8hLi9wYWdlcy9zdHlsZXMuY3NzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9jc3MtbG9hZGVyL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKHRydWUpO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiYm9keSB7XFxuICBtYXJnaW46IDBweDtcXG4gIG1pbi1oZWlnaHQ6IDEwMHZoO1xcbn1cXG5cXG5ib2R5ID4gZGl2IHtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuXFxuLnZpc3VhbGx5LWhpZGRlbiB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBsZWZ0OiAtMTAwMDBweDtcXG4gIHRvcDogYXV0bztcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDFweDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi5DYXJkLW1vZHVsZV9fQ2FyZCAuQ2FyZC1tb2R1bGVfX2NvbnRlbnQge1xcbiAgcGFkZGluZzogMzBweCAwO1xcbn1cXG4uVGV4dC1tb2R1bGVfX3UtZm9udC1ib2R5IHtcXG4gIGZvbnQtc2l6ZTogMXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XFxuICBtYXJnaW46IDAuNXJlbTtcXG59XFxuXFxudGQuZXhwYW5kZWQtdGFibGUtY2VsbCBkaXYge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly9wYWdlcy9zdHlsZXMuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0VBQ0UsV0FBVztFQUNYLGlCQUFpQjtBQUNuQjs7QUFFQTtFQUNFLFlBQVk7QUFDZDs7QUFFQTtFQUNFLGtCQUFrQjtFQUNsQixjQUFjO0VBQ2QsU0FBUztFQUNULFVBQVU7RUFDVixXQUFXO0VBQ1gsZ0JBQWdCO0FBQ2xCOztBQUVBO0VBQ0UsZUFBZTtBQUNqQjtBQUNBO0VBQ0UsZUFBZTtFQUNmLG1CQUFtQjtFQUNuQixjQUFjO0FBQ2hCOztBQUVBO0VBQ0UsV0FBVztFQUNYLFlBQVk7QUFDZFwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJib2R5IHtcXG4gIG1hcmdpbjogMHB4O1xcbiAgbWluLWhlaWdodDogMTAwdmg7XFxufVxcblxcbmJvZHkgPiBkaXYge1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG5cXG4udmlzdWFsbHktaGlkZGVuIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IC0xMDAwMHB4O1xcbiAgdG9wOiBhdXRvO1xcbiAgd2lkdGg6IDFweDtcXG4gIGhlaWdodDogMXB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuXFxuLkNhcmQtbW9kdWxlX19DYXJkIC5DYXJkLW1vZHVsZV9fY29udGVudCB7XFxuICBwYWRkaW5nOiAzMHB4IDA7XFxufVxcbi5UZXh0LW1vZHVsZV9fdS1mb250LWJvZHkge1xcbiAgZm9udC1zaXplOiAxcmVtO1xcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcXG4gIG1hcmdpbjogMC41cmVtO1xcbn1cXG5cXG50ZC5leHBhbmRlZC10YWJsZS1jZWxsIGRpdiB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG59XCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/css-loader/cjs.js?!./node_modules/next/dist/compiled/postcss-loader/cjs.js?!./pages/styles.css\n"); - -/***/ }) - -}) \ No newline at end of file diff --git a/_next/static/webpack/pages/_app.4a6246cb00144a264a80.hot-update.js b/_next/static/webpack/pages/_app.4a6246cb00144a264a80.hot-update.js deleted file mode 100644 index c9399b2dc..000000000 --- a/_next/static/webpack/pages/_app.4a6246cb00144a264a80.hot-update.js +++ /dev/null @@ -1,15 +0,0 @@ -webpackHotUpdate_N_E("pages/_app",{ - -/***/ "./node_modules/next/dist/compiled/css-loader/cjs.js?!./node_modules/next/dist/compiled/postcss-loader/cjs.js?!./pages/styles.css": -/*!**************************************************************************************************************************!*\ - !*** (webpack)/css-loader/cjs.js??ref--5-oneOf-6-1!(webpack)/postcss-loader/cjs.js??ref--5-oneOf-6-2!./pages/styles.css ***! - \**************************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_next_dist_compiled_css_loader_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/next/dist/compiled/css-loader/api.js */ \"./node_modules/next/dist/compiled/css-loader/api.js\");\n/* harmony import */ var _node_modules_next_dist_compiled_css_loader_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_next_dist_compiled_css_loader_api_js__WEBPACK_IMPORTED_MODULE_0__);\n// Imports\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_next_dist_compiled_css_loader_api_js__WEBPACK_IMPORTED_MODULE_0___default()(true);\n// Module\n___CSS_LOADER_EXPORT___.push([module.i, \"body {\\n margin: 0px;\\n min-height: 100vh;\\n}\\n\\nbody > div {\\n height: 100%;\\n}\\n\\n.visually-hidden {\\n position: absolute;\\n left: -10000px;\\n top: auto;\\n width: 1px;\\n height: 1px;\\n overflow: hidden;\\n}\\n\\n.Card-module__Card .Card-module__content {\\n padding: 30px 0;\\n}\\n.Text-module__u-font-body {\\n font-size: 1rem;\\n line-height: 1.5rem;\\n margin: 0.5rem;\\n}\\n\\ntd.expanded-table-cell div {\\n width: 100%;\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://pages/styles.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,WAAW;EACX,iBAAiB;AACnB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,kBAAkB;EAClB,cAAc;EACd,SAAS;EACT,UAAU;EACV,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,eAAe;AACjB;AACA;EACE,eAAe;EACf,mBAAmB;EACnB,cAAc;AAChB;;AAEA;EACE,WAAW;AACb\",\"sourcesContent\":[\"body {\\n margin: 0px;\\n min-height: 100vh;\\n}\\n\\nbody > div {\\n height: 100%;\\n}\\n\\n.visually-hidden {\\n position: absolute;\\n left: -10000px;\\n top: auto;\\n width: 1px;\\n height: 1px;\\n overflow: hidden;\\n}\\n\\n.Card-module__Card .Card-module__content {\\n padding: 30px 0;\\n}\\n.Text-module__u-font-body {\\n font-size: 1rem;\\n line-height: 1.5rem;\\n margin: 0.5rem;\\n}\\n\\ntd.expanded-table-cell div {\\n width: 100%;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vcGFnZXMvc3R5bGVzLmNzcz9lZGI4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQytGO0FBQy9GLDhCQUE4Qix5RkFBMkI7QUFDekQ7QUFDQSw4QkFBOEIsUUFBUyxTQUFTLGdCQUFnQixzQkFBc0IsR0FBRyxnQkFBZ0IsaUJBQWlCLEdBQUcsc0JBQXNCLHVCQUF1QixtQkFBbUIsY0FBYyxlQUFlLGdCQUFnQixxQkFBcUIsR0FBRyw4Q0FBOEMsb0JBQW9CLEdBQUcsNkJBQTZCLG9CQUFvQix3QkFBd0IsbUJBQW1CLEdBQUcsZ0NBQWdDLGdCQUFnQixHQUFHLE9BQU8saUZBQWlGLFVBQVUsWUFBWSxPQUFPLEtBQUssVUFBVSxNQUFNLEtBQUssWUFBWSxXQUFXLFVBQVUsVUFBVSxVQUFVLFlBQVksT0FBTyxLQUFLLFVBQVUsTUFBTSxLQUFLLFVBQVUsWUFBWSxXQUFXLE9BQU8sS0FBSyxVQUFVLCtCQUErQixnQkFBZ0Isc0JBQXNCLEdBQUcsZ0JBQWdCLGlCQUFpQixHQUFHLHNCQUFzQix1QkFBdUIsbUJBQW1CLGNBQWMsZUFBZSxnQkFBZ0IscUJBQXFCLEdBQUcsOENBQThDLG9CQUFvQixHQUFHLDZCQUE2QixvQkFBb0Isd0JBQXdCLG1CQUFtQixHQUFHLGdDQUFnQyxnQkFBZ0IsR0FBRyxtQkFBbUI7QUFDNXRDO0FBQ2Usc0ZBQXVCLEVBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL2Nzcy1sb2FkZXIvY2pzLmpzPyEuL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcG9zdGNzcy1sb2FkZXIvY2pzLmpzPyEuL3BhZ2VzL3N0eWxlcy5jc3MuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL2Nzcy1sb2FkZXIvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18odHJ1ZSk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCJib2R5IHtcXG4gIG1hcmdpbjogMHB4O1xcbiAgbWluLWhlaWdodDogMTAwdmg7XFxufVxcblxcbmJvZHkgPiBkaXYge1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG5cXG4udmlzdWFsbHktaGlkZGVuIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IC0xMDAwMHB4O1xcbiAgdG9wOiBhdXRvO1xcbiAgd2lkdGg6IDFweDtcXG4gIGhlaWdodDogMXB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuXFxuLkNhcmQtbW9kdWxlX19DYXJkIC5DYXJkLW1vZHVsZV9fY29udGVudCB7XFxuICBwYWRkaW5nOiAzMHB4IDA7XFxufVxcbi5UZXh0LW1vZHVsZV9fdS1mb250LWJvZHkge1xcbiAgZm9udC1zaXplOiAxcmVtO1xcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcXG4gIG1hcmdpbjogMC41cmVtO1xcbn1cXG5cXG50ZC5leHBhbmRlZC10YWJsZS1jZWxsIGRpdiB7XFxuICB3aWR0aDogMTAwJTtcXG59XCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovL3BhZ2VzL3N0eWxlcy5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7RUFDRSxXQUFXO0VBQ1gsaUJBQWlCO0FBQ25COztBQUVBO0VBQ0UsWUFBWTtBQUNkOztBQUVBO0VBQ0Usa0JBQWtCO0VBQ2xCLGNBQWM7RUFDZCxTQUFTO0VBQ1QsVUFBVTtFQUNWLFdBQVc7RUFDWCxnQkFBZ0I7QUFDbEI7O0FBRUE7RUFDRSxlQUFlO0FBQ2pCO0FBQ0E7RUFDRSxlQUFlO0VBQ2YsbUJBQW1CO0VBQ25CLGNBQWM7QUFDaEI7O0FBRUE7RUFDRSxXQUFXO0FBQ2JcIixcInNvdXJjZXNDb250ZW50XCI6W1wiYm9keSB7XFxuICBtYXJnaW46IDBweDtcXG4gIG1pbi1oZWlnaHQ6IDEwMHZoO1xcbn1cXG5cXG5ib2R5ID4gZGl2IHtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuXFxuLnZpc3VhbGx5LWhpZGRlbiB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBsZWZ0OiAtMTAwMDBweDtcXG4gIHRvcDogYXV0bztcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDFweDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi5DYXJkLW1vZHVsZV9fQ2FyZCAuQ2FyZC1tb2R1bGVfX2NvbnRlbnQge1xcbiAgcGFkZGluZzogMzBweCAwO1xcbn1cXG4uVGV4dC1tb2R1bGVfX3UtZm9udC1ib2R5IHtcXG4gIGZvbnQtc2l6ZTogMXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XFxuICBtYXJnaW46IDAuNXJlbTtcXG59XFxuXFxudGQuZXhwYW5kZWQtdGFibGUtY2VsbCBkaXYge1xcbiAgd2lkdGg6IDEwMCU7XFxufVwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/css-loader/cjs.js?!./node_modules/next/dist/compiled/postcss-loader/cjs.js?!./pages/styles.css\n"); - -/***/ }) - -}) \ No newline at end of file diff --git a/_next/static/webpack/pages/_app.656cb36d1b7ceab9ac41.hot-update.js b/_next/static/webpack/pages/_app.67d46fe1d00b6cfa2fa9.hot-update.js similarity index 100% rename from _next/static/webpack/pages/_app.656cb36d1b7ceab9ac41.hot-update.js rename to _next/static/webpack/pages/_app.67d46fe1d00b6cfa2fa9.hot-update.js diff --git a/_next/static/webpack/pages/_app.685fb85f4afad62de3e4.hot-update.js b/_next/static/webpack/pages/_app.685fb85f4afad62de3e4.hot-update.js deleted file mode 100644 index ff556d3f3..000000000 --- a/_next/static/webpack/pages/_app.685fb85f4afad62de3e4.hot-update.js +++ /dev/null @@ -1,15 +0,0 @@ -webpackHotUpdate_N_E("pages/_app",{ - -/***/ "./node_modules/next/dist/compiled/css-loader/cjs.js?!./node_modules/next/dist/compiled/postcss-loader/cjs.js?!./pages/styles.css": -/*!**************************************************************************************************************************!*\ - !*** (webpack)/css-loader/cjs.js??ref--5-oneOf-6-1!(webpack)/postcss-loader/cjs.js??ref--5-oneOf-6-2!./pages/styles.css ***! - \**************************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_next_dist_compiled_css_loader_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/next/dist/compiled/css-loader/api.js */ \"./node_modules/next/dist/compiled/css-loader/api.js\");\n/* harmony import */ var _node_modules_next_dist_compiled_css_loader_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_next_dist_compiled_css_loader_api_js__WEBPACK_IMPORTED_MODULE_0__);\n// Imports\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_next_dist_compiled_css_loader_api_js__WEBPACK_IMPORTED_MODULE_0___default()(true);\n// Module\n___CSS_LOADER_EXPORT___.push([module.i, \"body {\\n margin: 0px;\\n min-height: 100vh;\\n}\\n\\nbody > div {\\n height: 100%;\\n}\\n\\n.visually-hidden {\\n position: absolute;\\n left: -10000px;\\n top: auto;\\n width: 1px;\\n height: 1px;\\n overflow: hidden;\\n}\\n\\n.Card-module__Card .Card-module__content {\\n padding: 30px 0;\\n}\\n.Text-module__u-font-body {\\n font-size: 1rem;\\n line-height: 1.5rem;\\n margin: 0.5rem;\\n}\\n\\n.expanded div {\\n width: 100%;\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://pages/styles.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,WAAW;EACX,iBAAiB;AACnB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,kBAAkB;EAClB,cAAc;EACd,SAAS;EACT,UAAU;EACV,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,eAAe;AACjB;AACA;EACE,eAAe;EACf,mBAAmB;EACnB,cAAc;AAChB;;AAEA;EACE,WAAW;AACb\",\"sourcesContent\":[\"body {\\n margin: 0px;\\n min-height: 100vh;\\n}\\n\\nbody > div {\\n height: 100%;\\n}\\n\\n.visually-hidden {\\n position: absolute;\\n left: -10000px;\\n top: auto;\\n width: 1px;\\n height: 1px;\\n overflow: hidden;\\n}\\n\\n.Card-module__Card .Card-module__content {\\n padding: 30px 0;\\n}\\n.Text-module__u-font-body {\\n font-size: 1rem;\\n line-height: 1.5rem;\\n margin: 0.5rem;\\n}\\n\\n.expanded div {\\n width: 100%;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vcGFnZXMvc3R5bGVzLmNzcz9lZGI4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQytGO0FBQy9GLDhCQUE4Qix5RkFBMkI7QUFDekQ7QUFDQSw4QkFBOEIsUUFBUyxTQUFTLGdCQUFnQixzQkFBc0IsR0FBRyxnQkFBZ0IsaUJBQWlCLEdBQUcsc0JBQXNCLHVCQUF1QixtQkFBbUIsY0FBYyxlQUFlLGdCQUFnQixxQkFBcUIsR0FBRyw4Q0FBOEMsb0JBQW9CLEdBQUcsNkJBQTZCLG9CQUFvQix3QkFBd0IsbUJBQW1CLEdBQUcsbUJBQW1CLGdCQUFnQixHQUFHLE9BQU8saUZBQWlGLFVBQVUsWUFBWSxPQUFPLEtBQUssVUFBVSxNQUFNLEtBQUssWUFBWSxXQUFXLFVBQVUsVUFBVSxVQUFVLFlBQVksT0FBTyxLQUFLLFVBQVUsTUFBTSxLQUFLLFVBQVUsWUFBWSxXQUFXLE9BQU8sS0FBSyxVQUFVLCtCQUErQixnQkFBZ0Isc0JBQXNCLEdBQUcsZ0JBQWdCLGlCQUFpQixHQUFHLHNCQUFzQix1QkFBdUIsbUJBQW1CLGNBQWMsZUFBZSxnQkFBZ0IscUJBQXFCLEdBQUcsOENBQThDLG9CQUFvQixHQUFHLDZCQUE2QixvQkFBb0Isd0JBQXdCLG1CQUFtQixHQUFHLG1CQUFtQixnQkFBZ0IsR0FBRyxtQkFBbUI7QUFDbHNDO0FBQ2Usc0ZBQXVCLEVBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL2Nzcy1sb2FkZXIvY2pzLmpzPyEuL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcG9zdGNzcy1sb2FkZXIvY2pzLmpzPyEuL3BhZ2VzL3N0eWxlcy5jc3MuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL2Nzcy1sb2FkZXIvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18odHJ1ZSk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCJib2R5IHtcXG4gIG1hcmdpbjogMHB4O1xcbiAgbWluLWhlaWdodDogMTAwdmg7XFxufVxcblxcbmJvZHkgPiBkaXYge1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG5cXG4udmlzdWFsbHktaGlkZGVuIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IC0xMDAwMHB4O1xcbiAgdG9wOiBhdXRvO1xcbiAgd2lkdGg6IDFweDtcXG4gIGhlaWdodDogMXB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuXFxuLkNhcmQtbW9kdWxlX19DYXJkIC5DYXJkLW1vZHVsZV9fY29udGVudCB7XFxuICBwYWRkaW5nOiAzMHB4IDA7XFxufVxcbi5UZXh0LW1vZHVsZV9fdS1mb250LWJvZHkge1xcbiAgZm9udC1zaXplOiAxcmVtO1xcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcXG4gIG1hcmdpbjogMC41cmVtO1xcbn1cXG5cXG4uZXhwYW5kZWQgZGl2IHtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vcGFnZXMvc3R5bGVzLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtFQUNFLFdBQVc7RUFDWCxpQkFBaUI7QUFDbkI7O0FBRUE7RUFDRSxZQUFZO0FBQ2Q7O0FBRUE7RUFDRSxrQkFBa0I7RUFDbEIsY0FBYztFQUNkLFNBQVM7RUFDVCxVQUFVO0VBQ1YsV0FBVztFQUNYLGdCQUFnQjtBQUNsQjs7QUFFQTtFQUNFLGVBQWU7QUFDakI7QUFDQTtFQUNFLGVBQWU7RUFDZixtQkFBbUI7RUFDbkIsY0FBYztBQUNoQjs7QUFFQTtFQUNFLFdBQVc7QUFDYlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJib2R5IHtcXG4gIG1hcmdpbjogMHB4O1xcbiAgbWluLWhlaWdodDogMTAwdmg7XFxufVxcblxcbmJvZHkgPiBkaXYge1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG5cXG4udmlzdWFsbHktaGlkZGVuIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IC0xMDAwMHB4O1xcbiAgdG9wOiBhdXRvO1xcbiAgd2lkdGg6IDFweDtcXG4gIGhlaWdodDogMXB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuXFxuLkNhcmQtbW9kdWxlX19DYXJkIC5DYXJkLW1vZHVsZV9fY29udGVudCB7XFxuICBwYWRkaW5nOiAzMHB4IDA7XFxufVxcbi5UZXh0LW1vZHVsZV9fdS1mb250LWJvZHkge1xcbiAgZm9udC1zaXplOiAxcmVtO1xcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcXG4gIG1hcmdpbjogMC41cmVtO1xcbn1cXG5cXG4uZXhwYW5kZWQgZGl2IHtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/css-loader/cjs.js?!./node_modules/next/dist/compiled/postcss-loader/cjs.js?!./pages/styles.css\n"); - -/***/ }) - -}) \ No newline at end of file diff --git a/_next/static/webpack/pages/_app.6de4a6b8d4f651a3d938.hot-update.js b/_next/static/webpack/pages/_app.6de4a6b8d4f651a3d938.hot-update.js deleted file mode 100644 index ce8a9b020..000000000 --- a/_next/static/webpack/pages/_app.6de4a6b8d4f651a3d938.hot-update.js +++ /dev/null @@ -1,15 +0,0 @@ -webpackHotUpdate_N_E("pages/_app",{ - -/***/ "./node_modules/next/dist/compiled/css-loader/cjs.js?!./node_modules/next/dist/compiled/postcss-loader/cjs.js?!./pages/styles.css": -/*!**************************************************************************************************************************!*\ - !*** (webpack)/css-loader/cjs.js??ref--5-oneOf-6-1!(webpack)/postcss-loader/cjs.js??ref--5-oneOf-6-2!./pages/styles.css ***! - \**************************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_next_dist_compiled_css_loader_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/next/dist/compiled/css-loader/api.js */ \"./node_modules/next/dist/compiled/css-loader/api.js\");\n/* harmony import */ var _node_modules_next_dist_compiled_css_loader_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_next_dist_compiled_css_loader_api_js__WEBPACK_IMPORTED_MODULE_0__);\n// Imports\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_next_dist_compiled_css_loader_api_js__WEBPACK_IMPORTED_MODULE_0___default()(true);\n// Module\n___CSS_LOADER_EXPORT___.push([module.i, \"body {\\n margin: 0px;\\n min-height: 100vh;\\n}\\n\\nbody > div {\\n height: 100%;\\n}\\n\\n.visually-hidden {\\n position: absolute;\\n left: -10000px;\\n top: auto;\\n width: 1px;\\n height: 1px;\\n overflow: hidden;\\n}\\n\\n.Card-module__Card .Card-module__content {\\n padding: 30px 0;\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://pages/styles.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,WAAW;EACX,iBAAiB;AACnB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,kBAAkB;EAClB,cAAc;EACd,SAAS;EACT,UAAU;EACV,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,eAAe;AACjB\",\"sourcesContent\":[\"body {\\n margin: 0px;\\n min-height: 100vh;\\n}\\n\\nbody > div {\\n height: 100%;\\n}\\n\\n.visually-hidden {\\n position: absolute;\\n left: -10000px;\\n top: auto;\\n width: 1px;\\n height: 1px;\\n overflow: hidden;\\n}\\n\\n.Card-module__Card .Card-module__content {\\n padding: 30px 0;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vcGFnZXMvc3R5bGVzLmNzcz9lZGI4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQytGO0FBQy9GLDhCQUE4Qix5RkFBMkI7QUFDekQ7QUFDQSw4QkFBOEIsUUFBUyxTQUFTLGdCQUFnQixzQkFBc0IsR0FBRyxnQkFBZ0IsaUJBQWlCLEdBQUcsc0JBQXNCLHVCQUF1QixtQkFBbUIsY0FBYyxlQUFlLGdCQUFnQixxQkFBcUIsR0FBRyw4Q0FBOEMsb0JBQW9CLEdBQUcsT0FBTyxpRkFBaUYsVUFBVSxZQUFZLE9BQU8sS0FBSyxVQUFVLE1BQU0sS0FBSyxZQUFZLFdBQVcsVUFBVSxVQUFVLFVBQVUsWUFBWSxPQUFPLEtBQUssVUFBVSxnQ0FBZ0MsZ0JBQWdCLHNCQUFzQixHQUFHLGdCQUFnQixpQkFBaUIsR0FBRyxzQkFBc0IsdUJBQXVCLG1CQUFtQixjQUFjLGVBQWUsZ0JBQWdCLHFCQUFxQixHQUFHLDhDQUE4QyxvQkFBb0IsR0FBRyxtQkFBbUI7QUFDdjNCO0FBQ2Usc0ZBQXVCLEVBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL2Nzcy1sb2FkZXIvY2pzLmpzPyEuL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcG9zdGNzcy1sb2FkZXIvY2pzLmpzPyEuL3BhZ2VzL3N0eWxlcy5jc3MuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL2Nzcy1sb2FkZXIvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18odHJ1ZSk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCJib2R5IHtcXG4gIG1hcmdpbjogMHB4O1xcbiAgbWluLWhlaWdodDogMTAwdmg7XFxufVxcblxcbmJvZHkgPiBkaXYge1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG5cXG4udmlzdWFsbHktaGlkZGVuIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IC0xMDAwMHB4O1xcbiAgdG9wOiBhdXRvO1xcbiAgd2lkdGg6IDFweDtcXG4gIGhlaWdodDogMXB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuXFxuLkNhcmQtbW9kdWxlX19DYXJkIC5DYXJkLW1vZHVsZV9fY29udGVudCB7XFxuICBwYWRkaW5nOiAzMHB4IDA7XFxufVwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly9wYWdlcy9zdHlsZXMuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0VBQ0UsV0FBVztFQUNYLGlCQUFpQjtBQUNuQjs7QUFFQTtFQUNFLFlBQVk7QUFDZDs7QUFFQTtFQUNFLGtCQUFrQjtFQUNsQixjQUFjO0VBQ2QsU0FBUztFQUNULFVBQVU7RUFDVixXQUFXO0VBQ1gsZ0JBQWdCO0FBQ2xCOztBQUVBO0VBQ0UsZUFBZTtBQUNqQlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJib2R5IHtcXG4gIG1hcmdpbjogMHB4O1xcbiAgbWluLWhlaWdodDogMTAwdmg7XFxufVxcblxcbmJvZHkgPiBkaXYge1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG5cXG4udmlzdWFsbHktaGlkZGVuIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IC0xMDAwMHB4O1xcbiAgdG9wOiBhdXRvO1xcbiAgd2lkdGg6IDFweDtcXG4gIGhlaWdodDogMXB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuXFxuLkNhcmQtbW9kdWxlX19DYXJkIC5DYXJkLW1vZHVsZV9fY29udGVudCB7XFxuICBwYWRkaW5nOiAzMHB4IDA7XFxufVwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/css-loader/cjs.js?!./node_modules/next/dist/compiled/postcss-loader/cjs.js?!./pages/styles.css\n"); - -/***/ }) - -}) \ No newline at end of file diff --git a/_next/static/webpack/pages/_app.7e63bbf52f3628dc72d6.hot-update.js b/_next/static/webpack/pages/_app.7e63bbf52f3628dc72d6.hot-update.js deleted file mode 100644 index 1856c5f1d..000000000 --- a/_next/static/webpack/pages/_app.7e63bbf52f3628dc72d6.hot-update.js +++ /dev/null @@ -1,15 +0,0 @@ -webpackHotUpdate_N_E("pages/_app",{ - -/***/ "./node_modules/next/dist/compiled/css-loader/cjs.js?!./node_modules/next/dist/compiled/postcss-loader/cjs.js?!./pages/styles.css": -/*!**************************************************************************************************************************!*\ - !*** (webpack)/css-loader/cjs.js??ref--5-oneOf-6-1!(webpack)/postcss-loader/cjs.js??ref--5-oneOf-6-2!./pages/styles.css ***! - \**************************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_next_dist_compiled_css_loader_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/next/dist/compiled/css-loader/api.js */ \"./node_modules/next/dist/compiled/css-loader/api.js\");\n/* harmony import */ var _node_modules_next_dist_compiled_css_loader_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_next_dist_compiled_css_loader_api_js__WEBPACK_IMPORTED_MODULE_0__);\n// Imports\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_next_dist_compiled_css_loader_api_js__WEBPACK_IMPORTED_MODULE_0___default()(true);\n// Module\n___CSS_LOADER_EXPORT___.push([module.i, \"body {\\n margin: 0px;\\n min-height: 100vh;\\n}\\n\\nbody > div {\\n height: 100%;\\n}\\n\\n.visually-hidden {\\n position: absolute;\\n left: -10000px;\\n top: auto;\\n width: 1px;\\n height: 1px;\\n overflow: hidden;\\n}\\n\\n.Card-module__Card .Card-module__content {\\n padding: 30px 0;\\n}\\n.Text-module__u-font-body {\\n font-size: 1rem;\\n line-height: 1.5rem;\\n margin: 0.5rem;\\n}\\n\\n.wide-code div {\\n width: 100%;\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://pages/styles.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,WAAW;EACX,iBAAiB;AACnB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,kBAAkB;EAClB,cAAc;EACd,SAAS;EACT,UAAU;EACV,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,eAAe;AACjB;AACA;EACE,eAAe;EACf,mBAAmB;EACnB,cAAc;AAChB;;AAEA;EACE,WAAW;AACb\",\"sourcesContent\":[\"body {\\n margin: 0px;\\n min-height: 100vh;\\n}\\n\\nbody > div {\\n height: 100%;\\n}\\n\\n.visually-hidden {\\n position: absolute;\\n left: -10000px;\\n top: auto;\\n width: 1px;\\n height: 1px;\\n overflow: hidden;\\n}\\n\\n.Card-module__Card .Card-module__content {\\n padding: 30px 0;\\n}\\n.Text-module__u-font-body {\\n font-size: 1rem;\\n line-height: 1.5rem;\\n margin: 0.5rem;\\n}\\n\\n.wide-code div {\\n width: 100%;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vcGFnZXMvc3R5bGVzLmNzcz9lZGI4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQytGO0FBQy9GLDhCQUE4Qix5RkFBMkI7QUFDekQ7QUFDQSw4QkFBOEIsUUFBUyxTQUFTLGdCQUFnQixzQkFBc0IsR0FBRyxnQkFBZ0IsaUJBQWlCLEdBQUcsc0JBQXNCLHVCQUF1QixtQkFBbUIsY0FBYyxlQUFlLGdCQUFnQixxQkFBcUIsR0FBRyw4Q0FBOEMsb0JBQW9CLEdBQUcsNkJBQTZCLG9CQUFvQix3QkFBd0IsbUJBQW1CLEdBQUcsb0JBQW9CLGdCQUFnQixHQUFHLE9BQU8saUZBQWlGLFVBQVUsWUFBWSxPQUFPLEtBQUssVUFBVSxNQUFNLEtBQUssWUFBWSxXQUFXLFVBQVUsVUFBVSxVQUFVLFlBQVksT0FBTyxLQUFLLFVBQVUsTUFBTSxLQUFLLFVBQVUsWUFBWSxXQUFXLE9BQU8sS0FBSyxVQUFVLCtCQUErQixnQkFBZ0Isc0JBQXNCLEdBQUcsZ0JBQWdCLGlCQUFpQixHQUFHLHNCQUFzQix1QkFBdUIsbUJBQW1CLGNBQWMsZUFBZSxnQkFBZ0IscUJBQXFCLEdBQUcsOENBQThDLG9CQUFvQixHQUFHLDZCQUE2QixvQkFBb0Isd0JBQXdCLG1CQUFtQixHQUFHLG9CQUFvQixnQkFBZ0IsR0FBRyxtQkFBbUI7QUFDcHNDO0FBQ2Usc0ZBQXVCLEVBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL2Nzcy1sb2FkZXIvY2pzLmpzPyEuL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcG9zdGNzcy1sb2FkZXIvY2pzLmpzPyEuL3BhZ2VzL3N0eWxlcy5jc3MuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL2Nzcy1sb2FkZXIvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18odHJ1ZSk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCJib2R5IHtcXG4gIG1hcmdpbjogMHB4O1xcbiAgbWluLWhlaWdodDogMTAwdmg7XFxufVxcblxcbmJvZHkgPiBkaXYge1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG5cXG4udmlzdWFsbHktaGlkZGVuIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IC0xMDAwMHB4O1xcbiAgdG9wOiBhdXRvO1xcbiAgd2lkdGg6IDFweDtcXG4gIGhlaWdodDogMXB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuXFxuLkNhcmQtbW9kdWxlX19DYXJkIC5DYXJkLW1vZHVsZV9fY29udGVudCB7XFxuICBwYWRkaW5nOiAzMHB4IDA7XFxufVxcbi5UZXh0LW1vZHVsZV9fdS1mb250LWJvZHkge1xcbiAgZm9udC1zaXplOiAxcmVtO1xcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcXG4gIG1hcmdpbjogMC41cmVtO1xcbn1cXG5cXG4ud2lkZS1jb2RlIGRpdiB7XFxuICB3aWR0aDogMTAwJTtcXG59XCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovL3BhZ2VzL3N0eWxlcy5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7RUFDRSxXQUFXO0VBQ1gsaUJBQWlCO0FBQ25COztBQUVBO0VBQ0UsWUFBWTtBQUNkOztBQUVBO0VBQ0Usa0JBQWtCO0VBQ2xCLGNBQWM7RUFDZCxTQUFTO0VBQ1QsVUFBVTtFQUNWLFdBQVc7RUFDWCxnQkFBZ0I7QUFDbEI7O0FBRUE7RUFDRSxlQUFlO0FBQ2pCO0FBQ0E7RUFDRSxlQUFlO0VBQ2YsbUJBQW1CO0VBQ25CLGNBQWM7QUFDaEI7O0FBRUE7RUFDRSxXQUFXO0FBQ2JcIixcInNvdXJjZXNDb250ZW50XCI6W1wiYm9keSB7XFxuICBtYXJnaW46IDBweDtcXG4gIG1pbi1oZWlnaHQ6IDEwMHZoO1xcbn1cXG5cXG5ib2R5ID4gZGl2IHtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuXFxuLnZpc3VhbGx5LWhpZGRlbiB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBsZWZ0OiAtMTAwMDBweDtcXG4gIHRvcDogYXV0bztcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDFweDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi5DYXJkLW1vZHVsZV9fQ2FyZCAuQ2FyZC1tb2R1bGVfX2NvbnRlbnQge1xcbiAgcGFkZGluZzogMzBweCAwO1xcbn1cXG4uVGV4dC1tb2R1bGVfX3UtZm9udC1ib2R5IHtcXG4gIGZvbnQtc2l6ZTogMXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XFxuICBtYXJnaW46IDAuNXJlbTtcXG59XFxuXFxuLndpZGUtY29kZSBkaXYge1xcbiAgd2lkdGg6IDEwMCU7XFxufVwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/css-loader/cjs.js?!./node_modules/next/dist/compiled/postcss-loader/cjs.js?!./pages/styles.css\n"); - -/***/ }) - -}) \ No newline at end of file diff --git a/_next/static/webpack/pages/_app.b95d50f77e064531a643.hot-update.js b/_next/static/webpack/pages/_app.b95d50f77e064531a643.hot-update.js deleted file mode 100644 index 13b1fb901..000000000 --- a/_next/static/webpack/pages/_app.b95d50f77e064531a643.hot-update.js +++ /dev/null @@ -1,15 +0,0 @@ -webpackHotUpdate_N_E("pages/_app",{ - -/***/ "./node_modules/next/dist/compiled/css-loader/cjs.js?!./node_modules/next/dist/compiled/postcss-loader/cjs.js?!./pages/styles.css": -/*!**************************************************************************************************************************!*\ - !*** (webpack)/css-loader/cjs.js??ref--5-oneOf-6-1!(webpack)/postcss-loader/cjs.js??ref--5-oneOf-6-2!./pages/styles.css ***! - \**************************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_next_dist_compiled_css_loader_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/next/dist/compiled/css-loader/api.js */ \"./node_modules/next/dist/compiled/css-loader/api.js\");\n/* harmony import */ var _node_modules_next_dist_compiled_css_loader_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_next_dist_compiled_css_loader_api_js__WEBPACK_IMPORTED_MODULE_0__);\n// Imports\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_next_dist_compiled_css_loader_api_js__WEBPACK_IMPORTED_MODULE_0___default()(true);\n// Module\n___CSS_LOADER_EXPORT___.push([module.i, \"body {\\n margin: 0px;\\n min-height: 100vh;\\n}\\n\\nbody > div {\\n height: 100%;\\n}\\n\\n.visually-hidden {\\n position: absolute;\\n left: -10000px;\\n top: auto;\\n width: 1px;\\n height: 1px;\\n overflow: hidden;\\n}\\n\\n.Card-module__Card .Card-module__content {\\n padding: 30px 0;\\n}\\n.Text-module__u-font-body {\\n font-size: 1rem;\\n line-height: 1.5rem;\\n margin: 0.5rem;\\n}\\n\\n.expanded-table-cell div {\\n width: 100%;\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://pages/styles.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,WAAW;EACX,iBAAiB;AACnB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,kBAAkB;EAClB,cAAc;EACd,SAAS;EACT,UAAU;EACV,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,eAAe;AACjB;AACA;EACE,eAAe;EACf,mBAAmB;EACnB,cAAc;AAChB;;AAEA;EACE,WAAW;AACb\",\"sourcesContent\":[\"body {\\n margin: 0px;\\n min-height: 100vh;\\n}\\n\\nbody > div {\\n height: 100%;\\n}\\n\\n.visually-hidden {\\n position: absolute;\\n left: -10000px;\\n top: auto;\\n width: 1px;\\n height: 1px;\\n overflow: hidden;\\n}\\n\\n.Card-module__Card .Card-module__content {\\n padding: 30px 0;\\n}\\n.Text-module__u-font-body {\\n font-size: 1rem;\\n line-height: 1.5rem;\\n margin: 0.5rem;\\n}\\n\\n.expanded-table-cell div {\\n width: 100%;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vcGFnZXMvc3R5bGVzLmNzcz9lZGI4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQytGO0FBQy9GLDhCQUE4Qix5RkFBMkI7QUFDekQ7QUFDQSw4QkFBOEIsUUFBUyxTQUFTLGdCQUFnQixzQkFBc0IsR0FBRyxnQkFBZ0IsaUJBQWlCLEdBQUcsc0JBQXNCLHVCQUF1QixtQkFBbUIsY0FBYyxlQUFlLGdCQUFnQixxQkFBcUIsR0FBRyw4Q0FBOEMsb0JBQW9CLEdBQUcsNkJBQTZCLG9CQUFvQix3QkFBd0IsbUJBQW1CLEdBQUcsOEJBQThCLGdCQUFnQixHQUFHLE9BQU8saUZBQWlGLFVBQVUsWUFBWSxPQUFPLEtBQUssVUFBVSxNQUFNLEtBQUssWUFBWSxXQUFXLFVBQVUsVUFBVSxVQUFVLFlBQVksT0FBTyxLQUFLLFVBQVUsTUFBTSxLQUFLLFVBQVUsWUFBWSxXQUFXLE9BQU8sS0FBSyxVQUFVLCtCQUErQixnQkFBZ0Isc0JBQXNCLEdBQUcsZ0JBQWdCLGlCQUFpQixHQUFHLHNCQUFzQix1QkFBdUIsbUJBQW1CLGNBQWMsZUFBZSxnQkFBZ0IscUJBQXFCLEdBQUcsOENBQThDLG9CQUFvQixHQUFHLDZCQUE2QixvQkFBb0Isd0JBQXdCLG1CQUFtQixHQUFHLDhCQUE4QixnQkFBZ0IsR0FBRyxtQkFBbUI7QUFDeHRDO0FBQ2Usc0ZBQXVCLEVBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL2Nzcy1sb2FkZXIvY2pzLmpzPyEuL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcG9zdGNzcy1sb2FkZXIvY2pzLmpzPyEuL3BhZ2VzL3N0eWxlcy5jc3MuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL2Nzcy1sb2FkZXIvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18odHJ1ZSk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCJib2R5IHtcXG4gIG1hcmdpbjogMHB4O1xcbiAgbWluLWhlaWdodDogMTAwdmg7XFxufVxcblxcbmJvZHkgPiBkaXYge1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG5cXG4udmlzdWFsbHktaGlkZGVuIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IC0xMDAwMHB4O1xcbiAgdG9wOiBhdXRvO1xcbiAgd2lkdGg6IDFweDtcXG4gIGhlaWdodDogMXB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuXFxuLkNhcmQtbW9kdWxlX19DYXJkIC5DYXJkLW1vZHVsZV9fY29udGVudCB7XFxuICBwYWRkaW5nOiAzMHB4IDA7XFxufVxcbi5UZXh0LW1vZHVsZV9fdS1mb250LWJvZHkge1xcbiAgZm9udC1zaXplOiAxcmVtO1xcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcXG4gIG1hcmdpbjogMC41cmVtO1xcbn1cXG5cXG4uZXhwYW5kZWQtdGFibGUtY2VsbCBkaXYge1xcbiAgd2lkdGg6IDEwMCU7XFxufVwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly9wYWdlcy9zdHlsZXMuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0VBQ0UsV0FBVztFQUNYLGlCQUFpQjtBQUNuQjs7QUFFQTtFQUNFLFlBQVk7QUFDZDs7QUFFQTtFQUNFLGtCQUFrQjtFQUNsQixjQUFjO0VBQ2QsU0FBUztFQUNULFVBQVU7RUFDVixXQUFXO0VBQ1gsZ0JBQWdCO0FBQ2xCOztBQUVBO0VBQ0UsZUFBZTtBQUNqQjtBQUNBO0VBQ0UsZUFBZTtFQUNmLG1CQUFtQjtFQUNuQixjQUFjO0FBQ2hCOztBQUVBO0VBQ0UsV0FBVztBQUNiXCIsXCJzb3VyY2VzQ29udGVudFwiOltcImJvZHkge1xcbiAgbWFyZ2luOiAwcHg7XFxuICBtaW4taGVpZ2h0OiAxMDB2aDtcXG59XFxuXFxuYm9keSA+IGRpdiB7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcblxcbi52aXN1YWxseS1oaWRkZW4ge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgbGVmdDogLTEwMDAwcHg7XFxuICB0b3A6IGF1dG87XFxuICB3aWR0aDogMXB4O1xcbiAgaGVpZ2h0OiAxcHg7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG5cXG4uQ2FyZC1tb2R1bGVfX0NhcmQgLkNhcmQtbW9kdWxlX19jb250ZW50IHtcXG4gIHBhZGRpbmc6IDMwcHggMDtcXG59XFxuLlRleHQtbW9kdWxlX191LWZvbnQtYm9keSB7XFxuICBmb250LXNpemU6IDFyZW07XFxuICBsaW5lLWhlaWdodDogMS41cmVtO1xcbiAgbWFyZ2luOiAwLjVyZW07XFxufVxcblxcbi5leHBhbmRlZC10YWJsZS1jZWxsIGRpdiB7XFxuICB3aWR0aDogMTAwJTtcXG59XCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/css-loader/cjs.js?!./node_modules/next/dist/compiled/postcss-loader/cjs.js?!./pages/styles.css\n"); - -/***/ }) - -}) \ No newline at end of file diff --git a/_next/static/webpack/pages/_app.dcd431c2c642074bf604.hot-update.js b/_next/static/webpack/pages/_app.dcd431c2c642074bf604.hot-update.js deleted file mode 100644 index c8f6e3e79..000000000 --- a/_next/static/webpack/pages/_app.dcd431c2c642074bf604.hot-update.js +++ /dev/null @@ -1,15 +0,0 @@ -webpackHotUpdate_N_E("pages/_app",{ - -/***/ "./node_modules/next/dist/compiled/css-loader/cjs.js?!./node_modules/next/dist/compiled/postcss-loader/cjs.js?!./pages/styles.css": -/*!**************************************************************************************************************************!*\ - !*** (webpack)/css-loader/cjs.js??ref--5-oneOf-6-1!(webpack)/postcss-loader/cjs.js??ref--5-oneOf-6-2!./pages/styles.css ***! - \**************************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_next_dist_compiled_css_loader_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/next/dist/compiled/css-loader/api.js */ \"./node_modules/next/dist/compiled/css-loader/api.js\");\n/* harmony import */ var _node_modules_next_dist_compiled_css_loader_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_next_dist_compiled_css_loader_api_js__WEBPACK_IMPORTED_MODULE_0__);\n// Imports\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_next_dist_compiled_css_loader_api_js__WEBPACK_IMPORTED_MODULE_0___default()(true);\n// Module\n___CSS_LOADER_EXPORT___.push([module.i, \"body {\\n margin: 0px;\\n min-height: 100vh;\\n}\\n\\nbody > div {\\n height: 100%;\\n}\\n\\n.visually-hidden {\\n position: absolute;\\n left: -10000px;\\n top: auto;\\n width: 1px;\\n height: 1px;\\n overflow: hidden;\\n}\\n\\n.Card-module__Card .Card-module__content {\\n padding: 30px 0;\\n}\\n.Text-module__u-font-body {\\n font-size: 1rem;\\n line-height: 1.5rem;\\n margin: 0.5rem;\\n}\\n\\n.expanded > div {\\n width: 100%;\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://pages/styles.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,WAAW;EACX,iBAAiB;AACnB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,kBAAkB;EAClB,cAAc;EACd,SAAS;EACT,UAAU;EACV,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,eAAe;AACjB;AACA;EACE,eAAe;EACf,mBAAmB;EACnB,cAAc;AAChB;;AAEA;EACE,WAAW;AACb\",\"sourcesContent\":[\"body {\\n margin: 0px;\\n min-height: 100vh;\\n}\\n\\nbody > div {\\n height: 100%;\\n}\\n\\n.visually-hidden {\\n position: absolute;\\n left: -10000px;\\n top: auto;\\n width: 1px;\\n height: 1px;\\n overflow: hidden;\\n}\\n\\n.Card-module__Card .Card-module__content {\\n padding: 30px 0;\\n}\\n.Text-module__u-font-body {\\n font-size: 1rem;\\n line-height: 1.5rem;\\n margin: 0.5rem;\\n}\\n\\n.expanded > div {\\n width: 100%;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vcGFnZXMvc3R5bGVzLmNzcz9lZGI4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQytGO0FBQy9GLDhCQUE4Qix5RkFBMkI7QUFDekQ7QUFDQSw4QkFBOEIsUUFBUyxTQUFTLGdCQUFnQixzQkFBc0IsR0FBRyxnQkFBZ0IsaUJBQWlCLEdBQUcsc0JBQXNCLHVCQUF1QixtQkFBbUIsY0FBYyxlQUFlLGdCQUFnQixxQkFBcUIsR0FBRyw4Q0FBOEMsb0JBQW9CLEdBQUcsNkJBQTZCLG9CQUFvQix3QkFBd0IsbUJBQW1CLEdBQUcscUJBQXFCLGdCQUFnQixHQUFHLE9BQU8saUZBQWlGLFVBQVUsWUFBWSxPQUFPLEtBQUssVUFBVSxNQUFNLEtBQUssWUFBWSxXQUFXLFVBQVUsVUFBVSxVQUFVLFlBQVksT0FBTyxLQUFLLFVBQVUsTUFBTSxLQUFLLFVBQVUsWUFBWSxXQUFXLE9BQU8sS0FBSyxVQUFVLCtCQUErQixnQkFBZ0Isc0JBQXNCLEdBQUcsZ0JBQWdCLGlCQUFpQixHQUFHLHNCQUFzQix1QkFBdUIsbUJBQW1CLGNBQWMsZUFBZSxnQkFBZ0IscUJBQXFCLEdBQUcsOENBQThDLG9CQUFvQixHQUFHLDZCQUE2QixvQkFBb0Isd0JBQXdCLG1CQUFtQixHQUFHLHFCQUFxQixnQkFBZ0IsR0FBRyxtQkFBbUI7QUFDdHNDO0FBQ2Usc0ZBQXVCLEVBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL2Nzcy1sb2FkZXIvY2pzLmpzPyEuL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcG9zdGNzcy1sb2FkZXIvY2pzLmpzPyEuL3BhZ2VzL3N0eWxlcy5jc3MuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL2Nzcy1sb2FkZXIvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18odHJ1ZSk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCJib2R5IHtcXG4gIG1hcmdpbjogMHB4O1xcbiAgbWluLWhlaWdodDogMTAwdmg7XFxufVxcblxcbmJvZHkgPiBkaXYge1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG5cXG4udmlzdWFsbHktaGlkZGVuIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IC0xMDAwMHB4O1xcbiAgdG9wOiBhdXRvO1xcbiAgd2lkdGg6IDFweDtcXG4gIGhlaWdodDogMXB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuXFxuLkNhcmQtbW9kdWxlX19DYXJkIC5DYXJkLW1vZHVsZV9fY29udGVudCB7XFxuICBwYWRkaW5nOiAzMHB4IDA7XFxufVxcbi5UZXh0LW1vZHVsZV9fdS1mb250LWJvZHkge1xcbiAgZm9udC1zaXplOiAxcmVtO1xcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcXG4gIG1hcmdpbjogMC41cmVtO1xcbn1cXG5cXG4uZXhwYW5kZWQgPiBkaXYge1xcbiAgd2lkdGg6IDEwMCU7XFxufVwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly9wYWdlcy9zdHlsZXMuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0VBQ0UsV0FBVztFQUNYLGlCQUFpQjtBQUNuQjs7QUFFQTtFQUNFLFlBQVk7QUFDZDs7QUFFQTtFQUNFLGtCQUFrQjtFQUNsQixjQUFjO0VBQ2QsU0FBUztFQUNULFVBQVU7RUFDVixXQUFXO0VBQ1gsZ0JBQWdCO0FBQ2xCOztBQUVBO0VBQ0UsZUFBZTtBQUNqQjtBQUNBO0VBQ0UsZUFBZTtFQUNmLG1CQUFtQjtFQUNuQixjQUFjO0FBQ2hCOztBQUVBO0VBQ0UsV0FBVztBQUNiXCIsXCJzb3VyY2VzQ29udGVudFwiOltcImJvZHkge1xcbiAgbWFyZ2luOiAwcHg7XFxuICBtaW4taGVpZ2h0OiAxMDB2aDtcXG59XFxuXFxuYm9keSA+IGRpdiB7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcblxcbi52aXN1YWxseS1oaWRkZW4ge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgbGVmdDogLTEwMDAwcHg7XFxuICB0b3A6IGF1dG87XFxuICB3aWR0aDogMXB4O1xcbiAgaGVpZ2h0OiAxcHg7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG5cXG4uQ2FyZC1tb2R1bGVfX0NhcmQgLkNhcmQtbW9kdWxlX19jb250ZW50IHtcXG4gIHBhZGRpbmc6IDMwcHggMDtcXG59XFxuLlRleHQtbW9kdWxlX191LWZvbnQtYm9keSB7XFxuICBmb250LXNpemU6IDFyZW07XFxuICBsaW5lLWhlaWdodDogMS41cmVtO1xcbiAgbWFyZ2luOiAwLjVyZW07XFxufVxcblxcbi5leHBhbmRlZCA+IGRpdiB7XFxuICB3aWR0aDogMTAwJTtcXG59XCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/css-loader/cjs.js?!./node_modules/next/dist/compiled/postcss-loader/cjs.js?!./pages/styles.css\n"); - -/***/ }) - -}) \ No newline at end of file diff --git a/_next/static/webpack/pages/blog/[slug].045aa36bfdcb84f53836.hot-update.js b/_next/static/webpack/pages/blog/[slug].045aa36bfdcb84f53836.hot-update.js deleted file mode 100644 index b16bb08f5..000000000 --- a/_next/static/webpack/pages/blog/[slug].045aa36bfdcb84f53836.hot-update.js +++ /dev/null @@ -1,70 +0,0 @@ -webpackHotUpdate_N_E("pages/blog/[slug]",{ - -/***/ "./components/Markdown.jsx": -/*!*********************************!*\ - !*** ./components/Markdown.jsx ***! - \*********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(module) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Markdown; });\n/* harmony import */ var _Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/esm/defineProperty */ \"./node_modules/next/node_modules/@babel/runtime/helpers/esm/defineProperty.js\");\n/* harmony import */ var _Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties */ \"./node_modules/next/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var _Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/esm/extends */ \"./node_modules/next/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var react_markdown__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-markdown */ \"./node_modules/react-markdown/src/react-markdown.js\");\n/* harmony import */ var react_markdown__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_markdown__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @vandebron/windmolen */ \"./node_modules/@vandebron/windmolen/dist/index.js\");\n/* harmony import */ var _vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var react_syntax_highlighter__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-syntax-highlighter */ \"./node_modules/react-syntax-highlighter/dist/esm/index.js\");\n/* harmony import */ var react_syntax_highlighter_dist_cjs_styles_prism__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react-syntax-highlighter/dist/cjs/styles/prism */ \"./node_modules/react-syntax-highlighter/dist/cjs/styles/prism/index.js\");\n/* harmony import */ var react_syntax_highlighter_dist_cjs_styles_prism__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react_syntax_highlighter_dist_cjs_styles_prism__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var rehype_raw__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! rehype-raw */ \"./node_modules/rehype-raw/index.js\");\n/* harmony import */ var rehype_raw__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(rehype_raw__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var remark_gfm__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! remark-gfm */ \"./node_modules/remark-gfm/index.js\");\n/* harmony import */ var remark_gfm__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(remark_gfm__WEBPACK_IMPORTED_MODULE_9__);\n\n\n\nvar _jsxFileName = \"/Users/john.fisher/workspace/vandebron/tech-blog/components/Markdown.jsx\";\n\nvar __jsx = react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement;\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\n\n\n\n\n\n\nfunction Markdown(_ref) {\n var _this = this;\n\n var children = _ref.children;\n return __jsx(react_markdown__WEBPACK_IMPORTED_MODULE_4___default.a, {\n children: children,\n rehypePlugins: [rehype_raw__WEBPACK_IMPORTED_MODULE_8___default.a, remark_gfm__WEBPACK_IMPORTED_MODULE_9___default.a],\n components: {\n hr: react__WEBPACK_IMPORTED_MODULE_3___default.a.Fragment,\n h1: function h1(_ref2) {\n var children = _ref2.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"H1\"], {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 16,\n columnNumber: 28\n }\n }, children);\n },\n h2: function h2(_ref3) {\n var children = _ref3.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"H2\"], {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 19,\n columnNumber: 28\n }\n }, children);\n },\n h3: function h3(_ref4) {\n var children = _ref4.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"H3\"], {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 22,\n columnNumber: 28\n }\n }, children);\n },\n h4: function h4(_ref5) {\n var children = _ref5.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"H4\"], {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 25,\n columnNumber: 28\n }\n }, children);\n },\n h5: function h5(_ref6) {\n var children = _ref6.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"H5\"], {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 28,\n columnNumber: 28\n }\n }, children);\n },\n p: function p(props) {\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Paragraph\"], Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, props, {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 30,\n columnNumber: 31\n }\n }));\n },\n ol: function ol(_ref7) {\n var children = _ref7.children;\n return __jsx(\"ol\", {\n style: {\n marginBlockStart: 0,\n marginBlockEnd: 30\n },\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 32,\n columnNumber: 21\n }\n }, children);\n },\n ul: function ul(_ref8) {\n var children = _ref8.children;\n return __jsx(\"ol\", {\n style: {\n marginBlockStart: 0,\n marginBlockEnd: 30\n },\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 37,\n columnNumber: 21\n }\n }, children);\n },\n li: function li(_ref9) {\n var children = _ref9.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Paragraph\"], {\n as: \"li\",\n style: {\n marginBottom: 0\n },\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 42,\n columnNumber: 21\n }\n }, children);\n },\n a: function a(_ref10) {\n var children = _ref10.children,\n props = Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_ref10, [\"children\"]);\n\n return __jsx(\"a\", Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, props, {\n style: {\n color: \"inherit\"\n },\n target: 'target' in props || props['href'].includes('#') ? undefined : '_blank',\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 47,\n columnNumber: 22\n }\n }), children);\n },\n code: function code(_ref11) {\n var node = _ref11.node,\n inline = _ref11.inline,\n className = _ref11.className,\n children = _ref11.children,\n props = Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_ref11, [\"node\", \"inline\", \"className\", \"children\"]);\n\n var match = /language-(\\w+)/.exec(className || '');\n return !inline && match ? __jsx(react_syntax_highlighter__WEBPACK_IMPORTED_MODULE_6__[\"PrismAsync\"], Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({\n style: react_syntax_highlighter_dist_cjs_styles_prism__WEBPACK_IMPORTED_MODULE_7__[\"okaidia\"],\n language: match[1],\n PreTag: \"div\",\n children: String(children).replace(/\\n$/, '')\n }, props, {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 55,\n columnNumber: 25\n }\n })) : __jsx(\"code\", Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({\n className: className\n }, props, {\n style: {\n background: \"rgb(0,0,0, 0.1)\",\n padding: \"2px 4px\",\n fontSize: \"80%\",\n color: \"#000\"\n },\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 58,\n columnNumber: 25\n }\n }), children);\n },\n img: function img(_ref12) {\n var src = _ref12.src,\n alt = _ref12.alt,\n props = Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_ref12, [\"src\", \"alt\"]);\n\n return __jsx(\"img\", Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({\n src: src,\n alt: alt,\n style: {\n width: \"100%\"\n }\n }, props, {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 68,\n columnNumber: 49\n }\n }));\n },\n table: function table(_ref13) {\n var children = _ref13.children,\n className = _ref13.className,\n style = _ref13.style;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Table\"], {\n tableStyle: \"solid-borders\",\n className: className,\n style: _objectSpread({\n 'borderCollapse': 'collapse',\n 'marginBottom': '5%',\n 'fontSize': '18px',\n 'border': 'none'\n }, style),\n align: \"center\",\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 71,\n columnNumber: 25\n }\n }, children);\n },\n thead: function thead(_ref14) {\n var children = _ref14.children,\n style = _ref14.style;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Table\"].Thead, {\n style: _objectSpread({\n 'color': 'black'\n }, style),\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 83,\n columnNumber: 48\n }\n }, children);\n },\n tbody: function tbody(_ref15) {\n var children = _ref15.children,\n style = _ref15.style;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Table\"].Tbody, {\n style: style,\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 84,\n columnNumber: 48\n }\n }, children);\n },\n tr: function tr(_ref16) {\n var children = _ref16.children,\n style = _ref16.style;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Table\"].Row, {\n style: _objectSpread({}, style),\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 85,\n columnNumber: 45\n }\n }, children);\n },\n td: function td(_ref17) {\n var children = _ref17.children,\n style = _ref17.style,\n rest = Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_ref17, [\"children\", \"style\"]);\n\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Table\"].Cell, Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, rest, {\n style: style,\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 86,\n columnNumber: 54\n }\n }), children);\n },\n th: function th(_ref18) {\n var children = _ref18.children,\n style = _ref18.style;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Table\"].Cell, {\n style: style,\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 87,\n columnNumber: 45\n }\n }, children);\n }\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 10,\n columnNumber: 9\n }\n });\n}\n_c = Markdown;\n\nvar _c;\n\n$RefreshReg$(_c, \"Markdown\");\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node_modules/next/dist/compiled/webpack/harmony-module.js */ \"./node_modules/next/dist/compiled/webpack/harmony-module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vY29tcG9uZW50cy9NYXJrZG93bi5qc3g/ZTQ2OCJdLCJuYW1lcyI6WyJNYXJrZG93biIsImNoaWxkcmVuIiwicmVoeXBlUmF3IiwicmVtYXJrR2ZtIiwiaHIiLCJSZWFjdCIsIkZyYWdtZW50IiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsInAiLCJwcm9wcyIsIm9sIiwibWFyZ2luQmxvY2tTdGFydCIsIm1hcmdpbkJsb2NrRW5kIiwidWwiLCJsaSIsIm1hcmdpbkJvdHRvbSIsImEiLCJjb2xvciIsImluY2x1ZGVzIiwidW5kZWZpbmVkIiwiY29kZSIsIm5vZGUiLCJpbmxpbmUiLCJjbGFzc05hbWUiLCJtYXRjaCIsImV4ZWMiLCJva2FpZGlhIiwiU3RyaW5nIiwicmVwbGFjZSIsImJhY2tncm91bmQiLCJwYWRkaW5nIiwiZm9udFNpemUiLCJpbWciLCJzcmMiLCJhbHQiLCJ3aWR0aCIsInRhYmxlIiwic3R5bGUiLCJ0aGVhZCIsInRib2R5IiwidHIiLCJ0ZCIsInJlc3QiLCJ0aCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFZSxTQUFTQSxRQUFULE9BQThCO0FBQUE7O0FBQUEsTUFBWEMsUUFBVyxRQUFYQSxRQUFXO0FBQ3pDLFNBQ0ksTUFBQyxxREFBRDtBQUNJLFlBQVEsRUFBRUEsUUFEZDtBQUVJLGlCQUFhLEVBQUUsQ0FBQ0MsaURBQUQsRUFBWUMsaURBQVosQ0FGbkI7QUFHSSxjQUFVLEVBQUU7QUFDUkMsUUFBRSxFQUFFQyw0Q0FBSyxDQUFDQyxRQURGO0FBRVJDLFFBQUUsRUFBRSxtQkFBZ0I7QUFBQSxZQUFkTixRQUFjLFNBQWRBLFFBQWM7QUFDaEIsZUFBTyxNQUFDLHVEQUFEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0FBS0EsUUFBTCxDQUFQO0FBQ0gsT0FKTztBQUtSTyxRQUFFLEVBQUUsbUJB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LEtBQTdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBcUN4QyxRQUFyQyxDQUFqQztBQUFBLE9BekVJO0FBMEVSOEMsUUFBRSxFQUFFO0FBQUEsWUFBRTlDLFFBQUYsVUFBRUEsUUFBRjtBQUFBLFlBQVl3QyxLQUFaLFVBQVlBLEtBQVo7QUFBQSxlQUF3QixNQUFDLDBEQUFELENBQU8sSUFBUDtBQUFZLGVBQUssRUFBRUEsS0FBbkI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQUEyQnhDLFFBQTNCLENBQXhCO0FBQUE7QUExRUksS0FIaEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQURKO0FBbUZIO0tBcEZ1QkQsUSIsImZpbGUiOiIuL2NvbXBvbmVudHMvTWFya2Rvd24uanN4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0TWFya2Rvd24gZnJvbSBcInJlYWN0LW1hcmtkb3duXCI7XG5pbXBvcnQgeyBIMSwgSDIsIEgzLCBINCwgSDUsIFRhYmxlLCBQYXJhZ3JhcGggfSBmcm9tIFwiQHZhbmRlYnJvbi93aW5kbW9sZW5cIjtcbmltcG9ydCB7IFByaXNtQXN5bmMgYXMgU3ludGF4SGlnaGxpZ2h0ZXIgfSBmcm9tIFwicmVhY3Qtc3ludGF4LWhpZ2hsaWdodGVyXCI7XG5pbXBvcnQgeyBva2FpZGlhIH0gZnJvbSBcInJlYWN0LXN5bnRheC1oaWdobGlnaHRlci9kaXN0L2Nqcy9zdHlsZXMvcHJpc21cIjtcbmltcG9ydCByZWh5cGVSYXcgZnJvbSAncmVoeXBlLXJhdydcbmltcG9ydCByZW1hcmtHZm0gZnJvbSAncmVtYXJrLWdmbSdcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTWFya2Rvd24oe2NoaWxkcmVufSkge1xuICAgIHJldHVybiAoXG4gICAgICAgIDxSZWFjdE1hcmtkb3duXG4gICAgICAgICAgICBjaGlsZHJlbj17Y2hpbGRyZW59XG4gICAgICAgICAgICByZWh5cGVQbHVnaW5zPXtbcmVoeXBlUmF3LCByZW1hcmtHZm1dfVxuICAgICAgICAgICAgY29tcG9uZW50cz17e1xuICAgICAgICAgICAgICAgIGhyOiBSZWFjdC5GcmFnbWVudCxcbiAgICAgICAgICAgICAgICBoMTogKHtjaGlsZHJlbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxIMT57Y2hpbGRyZW59PC9IMT47XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBoMjogKHtjaGlsZHJlbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxIMj57Y2hpbGRyZW59PC9IMj47XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBoMzogKHtjaGlsZHJlbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxIMz57Y2hpbGRyZW59PC9IMz47XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBoNDogKHtjaGlsZHJlbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxIND57Y2hpbGRyZW59PC9IND47XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBoNTogKHtjaGlsZHJlbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxINT57Y2hpbGRyZW59PC9INT47XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwOiAocHJvcHMpID0+IDxQYXJhZ3JhcGggey4uLnByb3BzfSAvPixcbiAgICAgICAgICAgICAgICBvbDogKHtjaGlsZHJlbn0pID0+IChcbiAgICAgICAgICAgICAgICAgICAgPG9sIHN0eWxlPXt7bWFyZ2luQmxvY2tTdGFydDogMCwgbWFyZ2luQmxvY2tFbmQ6IDMwfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgICAgICAgIDwvb2w+XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB1bDogKHtjaGlsZHJlbn0pID0+IChcbiAgICAgICAgICAgICAgICAgICAgPG9sIHN0eWxlPXt7bWFyZ2luQmxvY2tTdGFydDogMCwgbWFyZ2luQmxvY2tFbmQ6IDMwfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgICAgICAgIDwvb2w+XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBsaTogKHtjaGlsZHJlbn0pID0+IChcbiAgICAgICAgICAgICAgICAgICAgPFBhcmFncmFwaCBhcz1cImxpXCIgc3R5bGU9e3ttYXJnaW5Cb3R0b206IDB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgICAgICAgICAgPC9QYXJhZ3JhcGg+XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBhOiAoe2NoaWxkcmVuLCAuLi5wcm9wc30pID0+XG4gICAgICAgICAgICAgICAgICAgICg8YSB7Li4ucHJvcHN9IHN0eWxlPXt7Y29sb3I6IFwiaW5oZXJpdFwifX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD17J3RhcmdldCcgaW4gcHJvcHMgfHwgcHJvcHNbJ2hyZWYnXS5pbmNsdWRlcygnIycpID8gdW5kZWZpbmVkIDogJ19ibGFuayd9PlxuICAgICAgICAgICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgICA8L2E+KSxcblxuICAgICAgICAgICAgICAgIGNvZGU6ICh7bm9kZSwgaW5saW5lLCBjbGFzc05hbWUsIGNoaWxkcmVuLCAuLi5wcm9wc30pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSAvbGFuZ3VhZ2UtKFxcdyspLy5leGVjKGNsYXNzTmFtZSB8fCAnJylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFpbmxpbmUgJiYgbWF0Y2ggPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8U3ludGF4SGlnaGxpZ2h0ZXIgc3R5bGU9e29rYWlkaWF9IGxhbmd1YWdlPXttYXRjaFsxXX0gUHJlVGFnPVwiZGl2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbj17U3RyaW5nKGNoaWxkcmVuKS5yZXBsYWNlKC9cXG4kLywgJycpfSB7Li4ucHJvcHN9IC8+XG4gICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzc05hbWU9e2NsYXNzTmFtZX0gey4uLnByb3BzfSBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IFwicmdiKDAsMCwwLCAwLjEpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogXCIycHggNHB4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IFwiODAlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwiIzAwMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9jb2RlPlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBpbWc6ICh7c3JjLCBhbHQsIC4uLnByb3BzfSkgPT4gKDxpbWcgc3JjPXtzcmN9IGFsdD17YWx0fSBzdHlsZT17e3dpZHRoOiBcIjEwMCVcIn19IHsuLi5wcm9wc30vPiksXG4gICAgICAgICAgICAgICAgdGFibGU6ICh7Y2hpbGRyZW4sIGNsYXNzTmFtZSwgc3R5bGV9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGFibGUgdGFibGVTdHlsZT0nc29saWQtYm9yZGVycycgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlckNvbGxhcHNlJzogJ2NvbGxhcHNlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbkJvdHRvbSc6ICc1JScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb250U2l6ZSc6ICcxOHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlcic6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uc3R5bGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduPSdjZW50ZXInPntjaGlsZHJlbn1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGU+XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0aGVhZDogKHtjaGlsZHJlbiwgc3R5bGV9KSA9PiAoPFRhYmxlLlRoZWFkIHN0eWxlPXt7J2NvbG9yJzogJ2JsYWNrJywgLi4uc3R5bGV9fT57Y2hpbGRyZW59PC9UYWJsZS5UaGVhZD4pLFxuICAgICAgICAgICAgICAgIHRib2R5OiAoe2NoaWxkcmVuLCBzdHlsZX0pID0+ICg8VGFibGUuVGJvZHkgc3R5bGU9e3N0eWxlfT57Y2hpbGRyZW59PC9UYWJsZS5UYm9keT4pLFxuICAgICAgICAgICAgICAgIHRyOiAoe2NoaWxkcmVuLCBzdHlsZX0pID0+ICg8VGFibGUuUm93IHN0eWxlPXt7Li4uc3R5bGV9fT57Y2hpbGRyZW59PC9UYWJsZS5Sb3c+KSxcbiAgICAgICAgICAgICAgICB0ZDogKHtjaGlsZHJlbiwgc3R5bGUsIC4uLnJlc3R9KSA9PiAoPFRhYmxlLkNlbGwgey4uLnJlc3R9IHN0eWxlPXtzdHlsZX0+e2NoaWxkcmVufTwvVGFibGUuQ2VsbD4pLFxuICAgICAgICAgICAgICAgIHRoOiAoe2NoaWxkcmVuLCBzdHlsZX0pID0+ICg8VGFibGUuQ2VsbCBzdHlsZT17c3R5bGV9PntjaGlsZHJlbn08L1RhYmxlLkNlbGw+KSxcblxuICAgICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICApO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./components/Markdown.jsx\n"); - -/***/ }), - -/***/ "./public sync recursive ^\\.\\/.*$": -/*!******************************!*\ - !*** ./public sync ^\.\/.*$ ***! - \******************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var map = {\n\t\"./favicon.ico\": \"./public/favicon.ico\",\n\t\"./greentech-hackathon/1-vandebron.md\": \"./public/greentech-hackathon/1-vandebron.md\",\n\t\"./greentech-hackathon/2-hack-the-planet.md\": \"./public/greentech-hackathon/2-hack-the-planet.md\",\n\t\"./greentech-hackathon/3-top-dutch-solar-racing.md\": \"./public/greentech-hackathon/3-top-dutch-solar-racing.md\",\n\t\"./greentech-hackathon/config/config\": \"./public/greentech-hackathon/config/config.js\",\n\t\"./greentech-hackathon/config/config.js\": \"./public/greentech-hackathon/config/config.js\",\n\t\"./images/AtomicDesign.jpg\": \"./public/images/AtomicDesign.jpg\",\n\t\"./images/Iteration.jpg\": \"./public/images/Iteration.jpg\",\n\t\"./images/StorybookFigma.jpg\": \"./public/images/StorybookFigma.jpg\",\n\t\"./images/WindmolenCover.jpg\": \"./public/images/WindmolenCover.jpg\",\n\t\"./images/building-native-images-and-compiling-with-graalvm-and-sbt.jpg\": \"./public/images/building-native-images-and-compiling-with-graalvm-and-sbt.jpg\",\n\t\"./images/camunda-rising.png\": \"./public/images/camunda-rising.png\",\n\t\"./images/camunda_infrastructure.png\": \"./public/images/camunda_infrastructure.png\",\n\t\"./images/circular.jpeg\": \"./public/images/circular.jpeg\",\n\t\"./images/coalplant-gameplay.mp4\": \"./public/images/coalplant-gameplay.mp4\",\n\t\"./images/cypress-component-design-technique-for-react-applications.png\": \"./public/images/cypress-component-design-technique-for-react-applications.png\",\n\t\"./images/dagster-architecture.png\": \"./public/images/dagster-architecture.png\",\n\t\"./images/dagster-cicd.png\": \"./public/images/dagster-cicd.png\",\n\t\"./images/data-prince-charming.jpg\": \"./public/images/data-prince-charming.jpg\",\n\t\"./images/etlprocess.png\": \"./public/images/etlprocess.png\",\n\t\"./images/flex-onlogic-factor-201.jpg\": \"./public/images/flex-onlogic-factor-201.jpg\",\n\t\"./images/flex-wallpaper.webp\": \"./public/images/flex-wallpaper.webp\",\n\t\"./images/fueling-the-energy-transition-with-spark-part-1.jpg\": \"./public/images/fueling-the-energy-transition-with-spark-part-1.jpg\",\n\t\"./images/full-gameplay.mp4\": \"./public/images/full-gameplay.mp4\",\n\t\"./images/game-start-screen.png\": \"./public/images/game-start-screen.png\",\n\t\"./images/greentech-hackathon/hero-hack-planet.jpg\": \"./public/images/greentech-hackathon/hero-hack-planet.jpg\",\n\t\"./images/greentech-hackathon/hero-top-dutch-solar-racing.jpg\": \"./public/images/greentech-hackathon/hero-top-dutch-solar-racing.jpg\",\n\t\"./images/greentech-hackathon/hero.jpg\": \"./public/images/greentech-hackathon/hero.jpg?d76c\",\n\t\"./images/greentech-hackathon/logo-ev-experience.jpg\": \"./public/images/greentech-hackathon/logo-ev-experience.jpg\",\n\t\"./images/greentech-hackathon/logo-felyx.jpg\": \"./public/images/greentech-hackathon/logo-felyx.jpg\",\n\t\"./images/greentech-hackathon/logo-hack-planet.jpg\": \"./public/images/greentech-hackathon/logo-hack-planet.jpg\",\n\t\"./images/greentech-hackathon/logo-klimaatroute.jpg\": \"./public/images/greentech-hackathon/logo-klimaatroute.jpg\",\n\t\"./images/greentech-hackathon/logo-top-dutch-solar.jpg\": \"./public/images/greentech-hackathon/logo-top-dutch-solar.jpg\",\n\t\"./images/greentech-hackathon/logo-vandebron.jpg\": \"./public/images/greentech-hackathon/logo-vandebron.jpg\",\n\t\"./images/heart-breaking.jpg\": \"./public/images/heart-breaking.jpg\",\n\t\"./images/hero.jpg\": \"./public/images/hero.jpg\",\n\t\"./images/insert-perf-database.jpg\": \"./public/images/insert-perf-database.jpg\",\n\t\"./images/keycloak_aud.png\": \"./public/images/keycloak_aud.png\",\n\t\"./images/lasagnoli.png\": \"./public/images/lasagnoli.png\",\n\t\"./images/looking-back-at-vandebron-greentech-hackathon-2021.png\": \"./public/images/looking-back-at-vandebron-greentech-hackathon-2021.png\",\n\t\"./images/migrating-dcos-kubernetes-l4lb.jpg\": \"./public/images/migrating-dcos-kubernetes-l4lb.jpg\",\n\t\"./images/monolith.webp\": \"./public/images/monolith.webp\",\n\t\"./images/optimizing-converting-and-exporting-svg-icons-in-react.jpg\": \"./public/images/optimizing-converting-and-exporting-svg-icons-in-react.jpg\",\n\t\"./images/play_presentation.webp\": \"./public/images/play_presentation.webp\",\n\t\"./images/power-regular-hackathons.png\": \"./public/images/power-regular-hackathons.png\",\n\t\"./images/query-perf-database.jpg\": \"./public/images/query-perf-database.jpg\",\n\t\"./images/remix-migration-adr-options-considered.png\": \"./public/images/remix-migration-adr-options-considered.png\",\n\t\"./images/remix-migration-mocking-a-window.png\": \"./public/images/remix-migration-mocking-a-window.png\",\n\t\"./images/remix-migration-remix-vs-nextjs.png\": \"./public/images/remix-migration-remix-vs-nextjs.png\",\n\t\"./images/remix-migration-sojs-framework-positivity.png\": \"./public/images/remix-migration-sojs-framework-positivity.png\",\n\t\"./images/remix-migration-ugly-window-mock.png\": \"./public/images/remix-migration-ugly-window-mock.png\",\n\t\"./images/remix-migration-vegan-pizza-shop.png\": \"./public/images/remix-migration-vegan-pizza-shop.png\",\n\t\"./images/replacing-app-center-adr.png\": \"./public/images/replacing-app-center-adr.png\",\n\t\"./images/replacing-app-center-building-a-phone.jpg\": \"./public/images/replacing-app-center-building-a-phone.jpg\",\n\t\"./images/replacing-app-center-run-workflow.png\": \"./public/images/replacing-app-center-run-workflow.png\",\n\t\"./images/schematic_data_layers.jpg\": \"./public/images/schematic_data_layers.jpg\",\n\t\"./images/schematic_data_product.jpg\": \"./public/images/schematic_data_product.jpg\",\n\t\"./images/seasons.mp4\": \"./public/images/seasons.mp4\",\n\t\"./images/self_service.jpg\": \"./public/images/self_service.jpg\",\n\t\"./images/snowflake_auth_conf.png\": \"./public/images/snowflake_auth_conf.png\",\n\t\"./images/snowflake_keycloak.jpg\": \"./public/images/snowflake_keycloak.jpg\",\n\t\"./images/soap.jpg\": \"./public/images/soap.jpg\",\n\t\"./images/spark-cluster-overview.png\": \"./public/images/spark-cluster-overview.png\",\n\t\"./images/sparkapihistory.png\": \"./public/images/sparkapihistory.png\",\n\t\"./images/spin-up-kubernetes-on-macbook.jpg\": \"./public/images/spin-up-kubernetes-on-macbook.jpg\",\n\t\"./images/step-functions.webp\": \"./public/images/step-functions.webp\",\n\t\"./images/technology-black-1.png\": \"./public/images/technology-black-1.png\",\n\t\"./images/technology-black-2.png\": \"./public/images/technology-black-2.png\",\n\t\"./images/technology-black-3.png\": \"./public/images/technology-black-3.png\",\n\t\"./images/technology-white-1.png\": \"./public/images/technology-white-1.png\",\n\t\"./images/technology-white-2.png\": \"./public/images/technology-white-2.png\",\n\t\"./images/when-not-to-build-a-reusable-component-library.jpg\": \"./public/images/when-not-to-build-a-reusable-component-library.jpg\",\n\t\"./posts/authenticate-snowflake-rest-api-using-keycloak.md\": \"./public/posts/authenticate-snowflake-rest-api-using-keycloak.md\",\n\t\"./posts/back-to-the-monolith.md\": \"./public/posts/back-to-the-monolith.md\",\n\t\"./posts/balancing-dutch-energy-grid-with-flex-services.md\": \"./public/posts/balancing-dutch-energy-grid-with-flex-services.md\",\n\t\"./posts/building-native-images-and-compiling-with-graalvm-and-sbt.md\": \"./public/posts/building-native-images-and-compiling-with-graalvm-and-sbt.md\",\n\t\"./posts/cassandra-its-not-you-its-us.md\": \"./public/posts/cassandra-its-not-you-its-us.md\",\n\t\"./posts/choosing-remix-as-an-ssr-framework.md\": \"./public/posts/choosing-remix-as-an-ssr-framework.md\",\n\t\"./posts/cicd-dagster-user-code.md\": \"./public/posts/cicd-dagster-user-code.md\",\n\t\"./posts/creating_a_self-service_data_model.md\": \"./public/posts/creating_a_self-service_data_model.md\",\n\t\"./posts/cypress-component-design-technique-for-react-applications.md\": \"./public/posts/cypress-component-design-technique-for-react-applications.md\",\n\t\"./posts/fueling-the-energy-transition-with-spark-part-1.md\": \"./public/posts/fueling-the-energy-transition-with-spark-part-1.md\",\n\t\"./posts/how-to-sign-soap-messages.md\": \"./public/posts/how-to-sign-soap-messages.md\",\n\t\"./posts/looking-back-at-vandebron-greentech-hackathon-2021.md\": \"./public/posts/looking-back-at-vandebron-greentech-hackathon-2021.md\",\n\t\"./posts/migrating-dcos-kubernetes-l4lb.md\": \"./public/posts/migrating-dcos-kubernetes-l4lb.md\",\n\t\"./posts/optimizing-converting-and-exporting-svg-icons-in-react.md\": \"./public/posts/optimizing-converting-and-exporting-svg-icons-in-react.md\",\n\t\"./posts/power-regular-hackathons.md\": \"./public/posts/power-regular-hackathons.md\",\n\t\"./posts/replacing-app-center.md\": \"./public/posts/replacing-app-center.md\",\n\t\"./posts/salesforce-camunda-bpm-migration.md\": \"./public/posts/salesforce-camunda-bpm-migration.md\",\n\t\"./posts/spin-up-kubernetes-on-macbook.md\": \"./public/posts/spin-up-kubernetes-on-macbook.md\",\n\t\"./posts/sustainable-tech-hardware.md\": \"./public/posts/sustainable-tech-hardware.md\",\n\t\"./posts/the-difference-between-a-component-library-and-a-design-system.md\": \"./public/posts/the-difference-between-a-component-library-and-a-design-system.md\",\n\t\"./posts/vandebron-the-video-game.md\": \"./public/posts/vandebron-the-video-game.md\",\n\t\"./posts/when-not-to-build-a-reusable-component-library.md\": \"./public/posts/when-not-to-build-a-reusable-component-library.md\",\n\t\"./rss.xml\": \"./public/rss.xml\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./public sync recursive ^\\\\.\\\\/.*$\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vcHVibGljIHN5bmMgXlxcLlxcLy4qJD9kMDhhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9wdWJsaWMgc3luYyByZWN1cnNpdmUgXlxcLlxcLy4qJC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBtYXAgPSB7XG5cdFwiLi9mYXZpY29uLmljb1wiOiBcIi4vcHVibGljL2Zhdmljb24uaWNvXCIsXG5cdFwiLi9ncmVlbnRlY2gtaGFja2F0aG9uLzEtdmFuZGVicm9uLm1kXCI6IFwiLi9wdWJsaWMvZ3JlZW50ZWNoLWhhY2thdGhvbi8xLXZhbmRlYnJvbi5tZFwiLFxuXHRcIi4vZ3JlZW50ZWNoLWhhY2thdGhvbi8yLWhhY2stdGhlLXBsYW5ldC5tZFwiOiBcIi4vcHVibGljL2dyZWVudGVjaC1oYWNrYXRob24vMi1oYWNrLXRoZS1wbGFuZXQubWRcIixcblx0XCIuL2dyZWVudGVjaC1oYWNrYXRob24vMy10b3AtZHV0Y2gtc29sYXItcmFjaW5nLm1kXCI6IFwiLi9wdWJsaWMvZ3JlZW50ZWNoLWhhY2thdGhvbi8zLXRvcC1kdXRjaC1zb2xhci1yYWNpbmcubWRcIixcblx0XCIuL2dyZWVudGVjaC1oYWNrYXRob24vY29uZmlnL2NvbmZpZ1wiOiBcIi4vcHVibGljL2dyZWVudGVjaC1oYWNrYXRob24vY29uZmlnL2NvbmZpZy5qc1wiLFxuXHRcIi4vZ3JlZW50ZWNoLWhhY2thdGhvbi9jb25maWcvY29uZmlnLmpzXCI6IFwiLi9wdWJsaWMvZ3JlZW50ZWNoLWhhY2thdGhvbi9jb25maWcvY29uZmlnLmpzXCIsXG5cdFwiLi9pbWFnZXMvQXRvbWljRGVzaWduLmpwZ1wiOiBcIi4vcHVibGljL2ltYWdlcy9BdG9taWNEZXNpZ24uanBnXCIsXG5cdFwiLi9pbWFnZXMvSXRlcmF0aW9uLmpwZ1wiOiBcIi4vcHVibGljL2ltYWdlcy9JdGVyYXRpb24uanBnXCIsXG5cdFwiLi9pbWFnZXMvU3Rvcnlib29rRmlnbWEuanBnXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL1N0b3J5Ym9va0ZpZ21hLmpwZ1wiLFxuXHRcIi4vaW1hZ2VzL1dpbmRtb2xlbkNvdmVyLmpwZ1wiOiBcIi4vcHVibGljL2ltYWdlcy9XaW5kbW9sZW5Db3Zlci5qcGdcIixcblx0XCIuL2ltYWdlcy9idWlsZGluZy1uYXRpdmUtaW1hZ2VzLWFuZC1jb21waWxpbmctd2l0aC1ncmFhbHZtLWFuZC1zYnQuanBnXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL2J1aWxkaW5nLW5hdGl2ZS1pbWFnZXMtYW5kLWNvbXBpbGluZy13aXRoLWdyYWFsdm0tYW5kLXNidC5qcGdcIixcblx0XCIuL2ltYWdlcy9jYW11bmRhLXJpc2luZy5wbmdcIjogXCIuL3B1YmxpYy9pbWFnZXMvY2FtdW5kYS1yaXNpbmcucG5nXCIsXG5cdFwiLi9pbWFnZXMvY2FtdW5kYV9pbmZyYXN0cnVjdHVyZS5wbmdcIjogXCIuL3B1YmxpYy9pbWFnZXMvY2FtdW5kYV9pbmZyYXN0cnVjdHVyZS5wbmdcIixcblx0XCIuL2ltYWdlcy9jaXJjdWxhci5qcGVnXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL2NpcmN1bGFyLmpwZWdcIixcblx0XCIuL2ltYWdlcy9jb2FscGxhbnQtZ2FtZXBsYXkubXA0XCI6IFwiLi9wdWJsaWMvaW1hZ2VzL2NvYWxwbGFudC1nYW1lcGxheS5tcDRcIixcblx0XCIuL2ltYWdlcy9jeXByZXNzLWNvbXBvbmVudC1kZXNpZ24tdGVjaG5pcXVlLWZvci1yZWFjdC1hcHBsaWNhdGlvbnMucG5nXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL2N5cHJlc3MtY29tcG9uZW50LWRlc2lnbi10ZWNobmlxdWUtZm9yLXJlYWN0LWFwcGxpY2F0aW9ucy5wbmdcIixcblx0XCIuL2ltYWdlcy9kYWdzdGVyLWFyY2hpdGVjdHVyZS5wbmdcIjogXCIuL3B1YmxpYy9pbWFnZXMvZGFnc3Rlci1hcmNoaXRlY3R1cmUucG5nXCIsXG5cdFwiLi9pbWFnZXMvZGFnc3Rlci1jaWNkLnBuZ1wiOiBcIi4vcHVibGljL2ltYWdlcy9kYWdzdGVyLWNpY2QucG5nXCIsXG5cdFwiLi9pbWFnZXMvZGF0YS1wcmluY2UtY2hhcm1pbmcuanBnXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL2RhdGEtcHJpbmNlLWNoYXJtaW5nLmpwZ1wiLFxuXHRcIi4vaW1hZ2VzL2V0bHByb2Nlc3MucG5nXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL2V0bHByb2Nlc3MucG5nXCIsXG5cdFwiLi9pbWFnZXMvZmxleC1vbmxvZ2ljLWZhY3Rvci0yMDEuanBnXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL2ZsZXgtb25sb2dpYy1mYWN0b3ItMjAxLmpwZ1wiLFxuXHRcIi4vaW1hZ2VzL2ZsZXgtd2FsbHBhcGVyLndlYnBcIjogXCIuL3B1YmxpYy9pbWFnZXMvZmxleC13YWxscGFwZXIud2VicFwiLFxuXHRcIi4vaW1hZ2VzL2Z1ZWxpbmctdGhlLWVuZXJneS10cmFuc2l0aW9uLXdpdGgtc3BhcmstcGFydC0xLmpwZ1wiOiBcIi4vcHVibGljL2ltYWdlcy9mdWVsaW5nLXRoZS1lbmVyZ3ktdHJhbnNpdGlvbi13aXRoLXNwYXJrLXBhcnQtMS5qcGdcIixcblx0XCIuL2ltYWdlcy9mdWxsLWdhbWVwbGF5Lm1wNFwiOiBcIi4vcHVibGljL2ltYWdlcy9mdWxsLWdhbWVwbGF5Lm1wNFwiLFxuXHRcIi4vaW1hZ2VzL2dhbWUtc3RhcnQtc2NyZWVuLnBuZ1wiOiBcIi4vcHVibGljL2ltYWdlcy9nYW1lLXN0YXJ0LXNjcmVlbi5wbmdcIixcblx0XCIuL2ltYWdlcy9ncmVlbnRlY2gtaGFja2F0aG9uL2hlcm8taGFjay1wbGFuZXQuanBnXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL2dyZWVudGVjaC1oYWNrYXRob24vaGVyby1oYWNrLXBsYW5ldC5qcGdcIixcblx0XCIuL2ltYWdlcy9ncmVlbnRlY2gtaGFja2F0aG9uL2hlcm8tdG9wLWR1dGNoLXNvbGFyLXJhY2luZy5qcGdcIjogXCIuL3B1YmxpYy9pbWFnZXMvZ3JlZW50ZWNoLWhhY2thdGhvbi9oZXJvLXRvcC1kdXRjaC1zb2xhci1yYWNpbmcuanBnXCIsXG5cdFwiLi9pbWFnZXMvZ3JlZW50ZWNoLWhhY2thdGhvbi9oZXJvLmpwZ1wiOiBcIi4vcHVibGljL2ltYWdlcy9ncmVlbnRlY2gtaGFja2F0aG9uL2hlcm8uanBnP2Q3NmNcIixcblx0XCIuL2ltYWdlcy9ncmVlbnRlY2gtaGFja2F0aG9uL2xvZ28tZXYtZXhwZXJpZW5jZS5qcGdcIjogXCIuL3B1YmxpYy9pbWFnZXMvZ3JlZW50ZWNoLWhhY2thdGhvbi9sb2dvLWV2LWV4cGVyaWVuY2UuanBnXCIsXG5cdFwiLi9pbWFnZXMvZ3JlZW50ZWNoLWhhY2thdGhvbi9sb2dvLWZlbHl4LmpwZ1wiOiBcIi4vcHVibGljL2ltYWdlcy9ncmVlbnRlY2gtaGFja2F0aG9uL2xvZ28tZmVseXguanBnXCIsXG5cdFwiLi9pbWFnZXMvZ3JlZW50ZWNoLWhhY2thdGhvbi9sb2dvLWhhY2stcGxhbmV0LmpwZ1wiOiBcIi4vcHVibGljL2ltYWdlcy9ncmVlbnRlY2gtaGFja2F0aG9uL2xvZ28taGFjay1wbGFuZXQuanBnXCIsXG5cdFwiLi9pbWFnZXMvZ3JlZW50ZWNoLWhhY2thdGhvbi9sb2dvLWtsaW1hYXRyb3V0ZS5qcGdcIjogXCIuL3B1YmxpYy9pbWFnZXMvZ3JlZW50ZWNoLWhhY2thdGhvbi9sb2dvLWtsaW1hYXRyb3V0ZS5qcGdcIixcblx0XCIuL2ltYWdlcy9ncmVlbnRlY2gtaGFja2F0aG9uL2xvZ28tdG9wLWR1dGNoLXNvbGFyLmpwZ1wiOiBcIi4vcHVibGljL2ltYWdlcy9ncmVlbnRlY2gtaGFja2F0aG9uL2xvZ28tdG9wLWR1dGNoLXNvbGFyLmpwZ1wiLFxuXHRcIi4vaW1hZ2VzL2dyZWVudGVjaC1oYWNrYXRob24vbG9nby12YW5kZWJyb24uanBnXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL2dyZWVudGVjaC1oYWNrYXRob24vbG9nby12YW5kZWJyb24uanBnXCIsXG5cdFwiLi9pbWFnZXMvaGVhcnQtYnJlYWtpbmcuanBnXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL2hlYXJ0LWJyZWFraW5nLmpwZ1wiLFxuXHRcIi4vaW1hZ2VzL2hlcm8uanBnXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL2hlcm8uanBnXCIsXG5cdFwiLi9pbWFnZXMvaW5zZXJ0LXBlcmYtZGF0YWJhc2UuanBnXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL2luc2VydC1wZXJmLWRhdGFiYXNlLmpwZ1wiLFxuXHRcIi4vaW1hZ2VzL2tleWNsb2FrX2F1ZC5wbmdcIjogXCIuL3B1YmxpYy9pbWFnZXMva2V5Y2xvYWtfYXVkLnBuZ1wiLFxuXHRcIi4vaW1hZ2VzL2xhc2Fnbm9saS5wbmdcIjogXCIuL3B1YmxpYy9pbWFnZXMvbGFzYWdub2xpLnBuZ1wiLFxuXHRcIi4vaW1hZ2VzL2xvb2tpbmctYmFjay1hdC12YW5kZWJyb24tZ3JlZW50ZWNoLWhhY2thdGhvbi0yMDIxLnBuZ1wiOiBcIi4vcHVibGljL2ltYWdlcy9sb29raW5nLWJhY2stYXQtdmFuZGVicm9uLWdyZWVudGVjaC1oYWNrYXRob24tMjAyMS5wbmdcIixcblx0XCIuL2ltYWdlcy9taWdyYXRpbmctZGNvcy1rdWJlcm5ldGVzLWw0bGIuanBnXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL21pZ3JhdGluZy1kY29zLWt1YmVybmV0ZXMtbDRsYi5qcGdcIixcblx0XCIuL2ltYWdlcy9tb25vbGl0aC53ZWJwXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL21vbm9saXRoLndlYnBcIixcblx0XCIuL2ltYWdlcy9vcHRpbWl6aW5nLWNvbnZlcnRpbmctYW5kLWV4cG9ydGluZy1zdmctaWNvbnMtaW4tcmVhY3QuanBnXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL29wdGltaXppbmctY29udmVydGluZy1hbmQtZXhwb3J0aW5nLXN2Zy1pY29ucy1pbi1yZWFjdC5qcGdcIixcblx0XCIuL2ltYWdlcy9wbGF5X3ByZXNlbnRhdGlvbi53ZWJwXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL3BsYXlfcHJlc2VudGF0aW9uLndlYnBcIixcblx0XCIuL2ltYWdlcy9wb3dlci1yZWd1bGFyLWhhY2thdGhvbnMucG5nXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL3Bvd2VyLXJlZ3VsYXItaGFja2F0aG9ucy5wbmdcIixcblx0XCIuL2ltYWdlcy9xdWVyeS1wZXJmLWRhdGFiYXNlLmpwZ1wiOiBcIi4vcHVibGljL2ltYWdlcy9xdWVyeS1wZXJmLWRhdGFiYXNlLmpwZ1wiLFxuXHRcIi4vaW1hZ2VzL3JlbWl4LW1pZ3JhdGlvbi1hZHItb3B0aW9ucy1jb25zaWRlcmVkLnBuZ1wiOiBcIi4vcHVibGljL2ltYWdlcy9yZW1peC1taWdyYXRpb24tYWRyLW9wdGlvbnMtY29uc2lkZXJlZC5wbmdcIixcblx0XCIuL2ltYWdlcy9yZW1peC1taWdyYXRpb24tbW9ja2luZy1hLXdpbmRvdy5wbmdcIjogXCIuL3B1YmxpYy9pbWFnZXMvcmVtaXgtbWlncmF0aW9uLW1vY2tpbmctYS13aW5kb3cucG5nXCIsXG5cdFwiLi9pbWFnZXMvcmVtaXgtbWlncmF0aW9uLXJlbWl4LXZzLW5leHRqcy5wbmdcIjogXCIuL3B1YmxpYy9pbWFnZXMvcmVtaXgtbWlncmF0aW9uLXJlbWl4LXZzLW5leHRqcy5wbmdcIixcblx0XCIuL2ltYWdlcy9yZW1peC1taWdyYXRpb24tc29qcy1mcmFtZXdvcmstcG9zaXRpdml0eS5wbmdcIjogXCIuL3B1YmxpYy9pbWFnZXMvcmVtaXgtbWlncmF0aW9uLXNvanMtZnJhbWV3b3JrLXBvc2l0aXZpdHkucG5nXCIsXG5cdFwiLi9pbWFnZXMvcmVtaXgtbWlncmF0aW9uLXVnbHktd2luZG93LW1vY2sucG5nXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL3JlbWl4LW1pZ3JhdGlvbi11Z2x5LXdpbmRvdy1tb2NrLnBuZ1wiLFxuXHRcIi4vaW1hZ2VzL3JlbWl4LW1pZ3JhdGlvbi12ZWdhbi1waXp6YS1zaG9wLnBuZ1wiOiBcIi4vcHVibGljL2ltYWdlcy9yZW1peC1taWdyYXRpb24tdmVnYW4tcGl6emEtc2hvcC5wbmdcIixcblx0XCIuL2ltYWdlcy9yZXBsYWNpbmctYXBwLWNlbnRlci1hZHIucG5nXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL3JlcGxhY2luZy1hcHAtY2VudGVyLWFkci5wbmdcIixcblx0XCIuL2ltYWdlcy9yZXBsYWNpbmctYXBwLWNlbnRlci1idWlsZGluZy1hLXBob25lLmpwZ1wiOiBcIi4vcHVibGljL2ltYWdlcy9yZXBsYWNpbmctYXBwLWNlbnRlci1idWlsZGluZy1hLXBob25lLmpwZ1wiLFxuXHRcIi4vaW1hZ2VzL3JlcGxhY2luZy1hcHAtY2VudGVyLXJ1bi13b3JrZmxvdy5wbmdcIjogXCIuL3B1YmxpYy9pbWFnZXMvcmVwbGFjaW5nLWFwcC1jZW50ZXItcnVuLXdvcmtmbG93LnBuZ1wiLFxuXHRcIi4vaW1hZ2VzL3NjaGVtYXRpY19kYXRhX2xheWVycy5qcGdcIjogXCIuL3B1YmxpYy9pbWFnZXMvc2NoZW1hdGljX2RhdGFfbGF5ZXJzLmpwZ1wiLFxuXHRcIi4vaW1hZ2VzL3NjaGVtYXRpY19kYXRhX3Byb2R1Y3QuanBnXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL3NjaGVtYXRpY19kYXRhX3Byb2R1Y3QuanBnXCIsXG5cdFwiLi9pbWFnZXMvc2Vhc29ucy5tcDRcIjogXCIuL3B1YmxpYy9pbWFnZXMvc2Vhc29ucy5tcDRcIixcblx0XCIuL2ltYWdlcy9zZWxmX3NlcnZpY2UuanBnXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL3NlbGZfc2VydmljZS5qcGdcIixcblx0XCIuL2ltYWdlcy9zbm93Zmxha2VfYXV0aF9jb25mLnBuZ1wiOiBcIi4vcHVibGljL2ltYWdlcy9zbm93Zmxha2VfYXV0aF9jb25mLnBuZ1wiLFxuXHRcIi4vaW1hZ2VzL3Nub3dmbGFrZV9rZXljbG9hay5qcGdcIjogXCIuL3B1YmxpYy9pbWFnZXMvc25vd2ZsYWtlX2tleWNsb2FrLmpwZ1wiLFxuXHRcIi4vaW1hZ2VzL3NvYXAuanBnXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL3NvYXAuanBnXCIsXG5cdFwiLi9pbWFnZXMvc3BhcmstY2x1c3Rlci1vdmVydmlldy5wbmdcIjogXCIuL3B1YmxpYy9pbWFnZXMvc3BhcmstY2x1c3Rlci1vdmVydmlldy5wbmdcIixcblx0XCIuL2ltYWdlcy9zcGFya2FwaWhpc3RvcnkucG5nXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL3NwYXJrYXBpaGlzdG9yeS5wbmdcIixcblx0XCIuL2ltYWdlcy9zcGluLXVwLWt1YmVybmV0ZXMtb24tbWFjYm9vay5qcGdcIjogXCIuL3B1YmxpYy9pbWFnZXMvc3Bpbi11cC1rdWJlcm5ldGVzLW9uLW1hY2Jvb2suanBnXCIsXG5cdFwiLi9pbWFnZXMvc3RlcC1mdW5jdGlvbnMud2VicFwiOiBcIi4vcHVibGljL2ltYWdlcy9zdGVwLWZ1bmN0aW9ucy53ZWJwXCIsXG5cdFwiLi9pbWFnZXMvdGVjaG5vbG9neS1ibGFjay0xLnBuZ1wiOiBcIi4vcHVibGljL2ltYWdlcy90ZWNobm9sb2d5LWJsYWNrLTEucG5nXCIsXG5cdFwiLi9pbWFnZXMvdGVjaG5vbG9neS1ibGFjay0yLnBuZ1wiOiBcIi4vcHVibGljL2ltYWdlcy90ZWNobm9sb2d5LWJsYWNrLTIucG5nXCIsXG5cdFwiLi9pbWFnZXMvdGVjaG5vbG9neS1ibGFjay0zLnBuZ1wiOiBcIi4vcHVibGljL2ltYWdlcy90ZWNobm9sb2d5LWJsYWNrLTMucG5nXCIsXG5cdFwiLi9pbWFnZXMvdGVjaG5vbG9neS13aGl0ZS0xLnBuZ1wiOiBcIi4vcHVibGljL2ltYWdlcy90ZWNobm9sb2d5LXdoaXRlLTEucG5nXCIsXG5cdFwiLi9pbWFnZXMvdGVjaG5vbG9neS13aGl0ZS0yLnBuZ1wiOiBcIi4vcHVibGljL2ltYWdlcy90ZWNobm9sb2d5LXdoaXRlLTIucG5nXCIsXG5cdFwiLi9pbWFnZXMvd2hlbi1ub3QtdG8tYnVpbGQtYS1yZXVzYWJsZS1jb21wb25lbnQtbGlicmFyeS5qcGdcIjogXCIuL3B1YmxpYy9pbWFnZXMvd2hlbi1ub3QtdG8tYnVpbGQtYS1yZXVzYWJsZS1jb21wb25lbnQtbGlicmFyeS5qcGdcIixcblx0XCIuL3Bvc3RzL2F1dGhlbnRpY2F0ZS1zbm93Zmxha2UtcmVzdC1hcGktdXNpbmcta2V5Y2xvYWsubWRcIjogXCIuL3B1YmxpYy9wb3N0cy9hdXRoZW50aWNhdGUtc25vd2ZsYWtlLXJlc3QtYXBpLXVzaW5nLWtleWNsb2FrLm1kXCIsXG5cdFwiLi9wb3N0cy9iYWNrLXRvLXRoZS1tb25vbGl0aC5tZFwiOiBcIi4vcHVibGljL3Bvc3RzL2JhY2stdG8tdGhlLW1vbm9saXRoLm1kXCIsXG5cdFwiLi9wb3N0cy9iYWxhbmNpbmctZHV0Y2gtZW5lcmd5LWdyaWQtd2l0aC1mbGV4LXNlcnZpY2VzLm1kXCI6IFwiLi9wdWJsaWMvcG9zdHMvYmFsYW5jaW5nLWR1dGNoLWVuZXJneS1ncmlkLXdpdGgtZmxleC1zZXJ2aWNlcy5tZFwiLFxuXHRcIi4vcG9zdHMvYnVpbGRpbmctbmF0aXZlLWltYWdlcy1hbmQtY29tcGlsaW5nLXdpdGgtZ3JhYWx2bS1hbmQtc2J0Lm1kXCI6IFwiLi9wdWJsaWMvcG9zdHMvYnVpbGRpbmctbmF0aXZlLWltYWdlcy1hbmQtY29tcGlsaW5nLXdpdGgtZ3JhYWx2bS1hbmQtc2J0Lm1kXCIsXG5cdFwiLi9wb3N0cy9jYXNzYW5kcmEtaXRzLW5vdC15b3UtaXRzLXVzLm1kXCI6IFwiLi9wdWJsaWMvcG9zdHMvY2Fzc2FuZHJhLWl0cy1ub3QteW91LWl0cy11cy5tZFwiLFxuXHRcIi4vcG9zdHMvY2hvb3NpbmctcmVtaXgtYXMtYW4tc3NyLWZyYW1ld29yay5tZFwiOiBcIi4vcHVibGljL3Bvc3RzL2Nob29zaW5nLXJlbWl4LWFzLWFuLXNzci1mcmFtZXdvcmsubWRcIixcblx0XCIuL3Bvc3RzL2NpY2QtZGFnc3Rlci11c2VyLWNvZGUubWRcIjogXCIuL3B1YmxpYy9wb3N0cy9jaWNkLWRhZ3N0ZXItdXNlci1jb2RlLm1kXCIsXG5cdFwiLi9wb3N0cy9jcmVhdGluZ19hX3NlbGYtc2VydmljZV9kYXRhX21vZGVsLm1kXCI6IFwiLi9wdWJsaWMvcG9zdHMvY3JlYXRpbmdfYV9zZWxmLXNlcnZpY2VfZGF0YV9tb2RlbC5tZFwiLFxuXHRcIi4vcG9zdHMvY3lwcmVzcy1jb21wb25lbnQtZGVzaWduLXRlY2huaXF1ZS1mb3ItcmVhY3QtYXBwbGljYXRpb25zLm1kXCI6IFwiLi9wdWJsaWMvcG9zdHMvY3lwcmVzcy1jb21wb25lbnQtZGVzaWduLXRlY2huaXF1ZS1mb3ItcmVhY3QtYXBwbGljYXRpb25zLm1kXCIsXG5cdFwiLi9wb3N0cy9mdWVsaW5nLXRoZS1lbmVyZ3ktdHJhbnNpdGlvbi13aXRoLXNwYXJrLXBhcnQtMS5tZFwiOiBcIi4vcHVibGljL3Bvc3RzL2Z1ZWxpbmctdGhlLWVuZXJneS10cmFuc2l0aW9uLXdpdGgtc3BhcmstcGFydC0xLm1kXCIsXG5cdFwiLi9wb3N0cy9ob3ctdG8tc2lnbi1zb2FwLW1lc3NhZ2VzLm1kXCI6IFwiLi9wdWJsaWMvcG9zdHMvaG93LXRvLXNpZ24tc29hcC1tZXNzYWdlcy5tZFwiLFxuXHRcIi4vcG9zdHMvbG9va2luZy1iYWNrLWF0LXZhbmRlYnJvbi1ncmVlbnRlY2gtaGFja2F0aG9uLTIwMjEubWRcIjogXCIuL3B1YmxpYy9wb3N0cy9sb29raW5nLWJhY2stYXQtdmFuZGVicm9uLWdyZWVudGVjaC1oYWNrYXRob24tMjAyMS5tZFwiLFxuXHRcIi4vcG9zdHMvbWlncmF0aW5nLWRjb3Mta3ViZXJuZXRlcy1sNGxiLm1kXCI6IFwiLi9wdWJsaWMvcG9zdHMvbWlncmF0aW5nLWRjb3Mta3ViZXJuZXRlcy1sNGxiLm1kXCIsXG5cdFwiLi9wb3N0cy9vcHRpbWl6aW5nLWNvbnZlcnRpbmctYW5kLWV4cG9ydGluZy1zdmctaWNvbnMtaW4tcmVhY3QubWRcIjogXCIuL3B1YmxpYy9wb3N0cy9vcHRpbWl6aW5nLWNvbnZlcnRpbmctYW5kLWV4cG9ydGluZy1zdmctaWNvbnMtaW4tcmVhY3QubWRcIixcblx0XCIuL3Bvc3RzL3Bvd2VyLXJlZ3VsYXItaGFja2F0aG9ucy5tZFwiOiBcIi4vcHVibGljL3Bvc3RzL3Bvd2VyLXJlZ3VsYXItaGFja2F0aG9ucy5tZFwiLFxuXHRcIi4vcG9zdHMvcmVwbGFjaW5nLWFwcC1jZW50ZXIubWRcIjogXCIuL3B1YmxpYy9wb3N0cy9yZXBsYWNpbmctYXBwLWNlbnRlci5tZFwiLFxuXHRcIi4vcG9zdHMvc2FsZXNmb3JjZS1jYW11bmRhLWJwbS1taWdyYXRpb24ubWRcIjogXCIuL3B1YmxpYy9wb3N0cy9zYWxlc2ZvcmNlLWNhbXVuZGEtYnBtLW1pZ3JhdGlvbi5tZFwiLFxuXHRcIi4vcG9zdHMvc3Bpbi11cC1rdWJlcm5ldGVzLW9uLW1hY2Jvb2subWRcIjogXCIuL3B1YmxpYy9wb3N0cy9zcGluLXVwLWt1YmVybmV0ZXMtb24tbWFjYm9vay5tZFwiLFxuXHRcIi4vcG9zdHMvc3VzdGFpbmFibGUtdGVjaC1oYXJkd2FyZS5tZFwiOiBcIi4vcHVibGljL3Bvc3RzL3N1c3RhaW5hYmxlLXRlY2gtaGFyZHdhcmUubWRcIixcblx0XCIuL3Bvc3RzL3RoZS1kaWZmZXJlbmNlLWJldHdlZW4tYS1jb21wb25lbnQtbGlicmFyeS1hbmQtYS1kZXNpZ24tc3lzdGVtLm1kXCI6IFwiLi9wdWJsaWMvcG9zdHMvdGhlLWRpZmZlcmVuY2UtYmV0d2Vlbi1hLWNvbXBvbmVudC1saWJyYXJ5LWFuZC1hLWRlc2lnbi1zeXN0ZW0ubWRcIixcblx0XCIuL3Bvc3RzL3ZhbmRlYnJvbi10aGUtdmlkZW8tZ2FtZS5tZFwiOiBcIi4vcHVibGljL3Bvc3RzL3ZhbmRlYnJvbi10aGUtdmlkZW8tZ2FtZS5tZFwiLFxuXHRcIi4vcG9zdHMvd2hlbi1ub3QtdG8tYnVpbGQtYS1yZXVzYWJsZS1jb21wb25lbnQtbGlicmFyeS5tZFwiOiBcIi4vcHVibGljL3Bvc3RzL3doZW4tbm90LXRvLWJ1aWxkLWEtcmV1c2FibGUtY29tcG9uZW50LWxpYnJhcnkubWRcIixcblx0XCIuL3Jzcy54bWxcIjogXCIuL3B1YmxpYy9yc3MueG1sXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4vcHVibGljIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLiokXCI7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./public sync recursive ^\\.\\/.*$\n"); - -/***/ }), - -/***/ "./public/images/replacing-app-center-adr.png": -/*!****************************************************!*\ - !*** ./public/images/replacing-app-center-adr.png ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("module.exports = {\n srcSet: \"/_next/static/images/replacing-app-center-adr-1200-7ad603fa9774f9dc11a0a1067a2eac89.png\"+\" 1200w\"+\",\"+\"/_next/static/images/replacing-app-center-adr-800-7450f902a8589c3039a8c248633ec7fe.png\"+\" 800w\"+\",\"+\"/_next/static/images/replacing-app-center-adr-400-677d47a75a20d62fdf12ab389377e941.png\"+\" 400w\",\n images:[ {path: \"/_next/static/images/replacing-app-center-adr-1200-7ad603fa9774f9dc11a0a1067a2eac89.png\",width: 1200,height: 1941},{path: \"/_next/static/images/replacing-app-center-adr-800-7450f902a8589c3039a8c248633ec7fe.png\",width: 800,height: 1294},{path: \"/_next/static/images/replacing-app-center-adr-400-677d47a75a20d62fdf12ab389377e941.png\",width: 400,height: 647}],\n src: \"/_next/static/images/replacing-app-center-adr-1200-7ad603fa9774f9dc11a0a1067a2eac89.png\",\n toString:function(){return \"/_next/static/images/replacing-app-center-adr-1200-7ad603fa9774f9dc11a0a1067a2eac89.png\"},\n \n width: 1200,\n height: 1941\n }//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vcHVibGljL2ltYWdlcy9yZXBsYWNpbmctYXBwLWNlbnRlci1hZHIucG5nPzFkNTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBLG9CQUFvQix5SEFBeUgsRUFBRSx1SEFBdUgsRUFBRSxzSEFBc0g7QUFDOVg7QUFDQSw4QkFBOEIsaUdBQWlHOztBQUUvSDtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9wdWJsaWMvaW1hZ2VzL3JlcGxhY2luZy1hcHAtY2VudGVyLWFkci5wbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAgICAgICBzcmNTZXQ6IFwiL19uZXh0L3N0YXRpYy9pbWFnZXMvcmVwbGFjaW5nLWFwcC1jZW50ZXItYWRyLTEyMDAtN2FkNjAzZmE5Nzc0ZjlkYzExYTBhMTA2N2EyZWFjODkucG5nXCIrXCIgMTIwMHdcIitcIixcIitcIi9fbmV4dC9zdGF0aWMvaW1hZ2VzL3JlcGxhY2luZy1hcHAtY2VudGVyLWFkci04MDAtNzQ1MGY5MDJhODU4OWMzMDM5YThjMjQ4NjMzZWM3ZmUucG5nXCIrXCIgODAwd1wiK1wiLFwiK1wiL19uZXh0L3N0YXRpYy9pbWFnZXMvcmVwbGFjaW5nLWFwcC1jZW50ZXItYWRyLTQwMC02NzdkNDdhNzVhMjBkNjJmZGYxMmFiMzg5Mzc3ZTk0MS5wbmdcIitcIiA0MDB3XCIsXG4gICAgICAgICAgaW1hZ2VzOlsge3BhdGg6IFwiL19uZXh0L3N0YXRpYy9pbWFnZXMvcmVwbGFjaW5nLWFwcC1jZW50ZXItYWRyLTEyMDAtN2FkNjAzZmE5Nzc0ZjlkYzExYTBhMTA2N2EyZWFjODkucG5nXCIsd2lkdGg6IDEyMDAsaGVpZ2h0OiAxOTQxfSx7cGF0aDogXCIvX25leHQvc3RhdGljL2ltYWdlcy9yZXBsYWNpbmctYXBwLWNlbnRlci1hZHItODAwLTc0NTBmOTAyYTg1ODljMzAzOWE4YzI0ODYzM2VjN2ZlLnBuZ1wiLHdpZHRoOiA4MDAsaGVpZ2h0OiAxMjk0fSx7cGF0aDogXCIvX25leHQvc3RhdGljL2ltYWdlcy9yZXBsYWNpbmctYXBwLWNlbnRlci1hZHItNDAwLTY3N2Q0N2E3NWEyMGQ2MmZkZjEyYWIzODkzNzdlOTQxLnBuZ1wiLHdpZHRoOiA0MDAsaGVpZ2h0OiA2NDd9XSxcbiAgICAgICAgICBzcmM6IFwiL19uZXh0L3N0YXRpYy9pbWFnZXMvcmVwbGFjaW5nLWFwcC1jZW50ZXItYWRyLTEyMDAtN2FkNjAzZmE5Nzc0ZjlkYzExYTBhMTA2N2EyZWFjODkucG5nXCIsXG4gICAgICAgICAgdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gXCIvX25leHQvc3RhdGljL2ltYWdlcy9yZXBsYWNpbmctYXBwLWNlbnRlci1hZHItMTIwMC03YWQ2MDNmYTk3NzRmOWRjMTFhMGExMDY3YTJlYWM4OS5wbmdcIn0sXG4gICAgICAgICAgXG4gICAgICAgICAgd2lkdGg6IDEyMDAsXG4gICAgICAgICAgaGVpZ2h0OiAxOTQxXG4gICAgICAgIH0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./public/images/replacing-app-center-adr.png\n"); - -/***/ }), - -/***/ "./public/images/replacing-app-center-building-a-phone.jpg": -/*!*****************************************************************!*\ - !*** ./public/images/replacing-app-center-building-a-phone.jpg ***! - \*****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("module.exports = {\n srcSet: \"/_next/static/images/replacing-app-center-building-a-phone-1200-c954b007834b08f0b1bb74c9b8775e7b.jpg\"+\" 1200w\"+\",\"+\"/_next/static/images/replacing-app-center-building-a-phone-800-699fdae0ac0e207362c7cadda238465f.jpg\"+\" 800w\"+\",\"+\"/_next/static/images/replacing-app-center-building-a-phone-400-80d712eed566ebd8ebb9fb5d2ebea51a.jpg\"+\" 400w\",\n images:[ {path: \"/_next/static/images/replacing-app-center-building-a-phone-1200-c954b007834b08f0b1bb74c9b8775e7b.jpg\",width: 1200,height: 1200},{path: \"/_next/static/images/replacing-app-center-building-a-phone-800-699fdae0ac0e207362c7cadda238465f.jpg\",width: 800,height: 800},{path: \"/_next/static/images/replacing-app-center-building-a-phone-400-80d712eed566ebd8ebb9fb5d2ebea51a.jpg\",width: 400,height: 400}],\n src: \"/_next/static/images/replacing-app-center-building-a-phone-1200-c954b007834b08f0b1bb74c9b8775e7b.jpg\",\n toString:function(){return \"/_next/static/images/replacing-app-center-building-a-phone-1200-c954b007834b08f0b1bb74c9b8775e7b.jpg\"},\n \n width: 1200,\n height: 1200\n }//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vcHVibGljL2ltYWdlcy9yZXBsYWNpbmctYXBwLWNlbnRlci1idWlsZGluZy1hLXBob25lLmpwZz84ZmZhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQSxvQkFBb0Isc0lBQXNJLEVBQUUsbUlBQW1JLEVBQUUsbUlBQW1JO0FBQ3BhO0FBQ0EsOEJBQThCLDhHQUE4Rzs7QUFFNUk7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vcHVibGljL2ltYWdlcy9yZXBsYWNpbmctYXBwLWNlbnRlci1idWlsZGluZy1hLXBob25lLmpwZy5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0ge1xuICAgICAgICAgIHNyY1NldDogXCIvX25leHQvc3RhdGljL2ltYWdlcy9yZXBsYWNpbmctYXBwLWNlbnRlci1idWlsZGluZy1hLXBob25lLTEyMDAtYzk1NGIwMDc4MzRiMDhmMGIxYmI3NGM5Yjg3NzVlN2IuanBnXCIrXCIgMTIwMHdcIitcIixcIitcIi9fbmV4dC9zdGF0aWMvaW1hZ2VzL3JlcGxhY2luZy1hcHAtY2VudGVyLWJ1aWxkaW5nLWEtcGhvbmUtODAwLTY5OWZkYWUwYWMwZTIwNzM2MmM3Y2FkZGEyMzg0NjVmLmpwZ1wiK1wiIDgwMHdcIitcIixcIitcIi9fbmV4dC9zdGF0aWMvaW1hZ2VzL3JlcGxhY2luZy1hcHAtY2VudGVyLWJ1aWxkaW5nLWEtcGhvbmUtNDAwLTgwZDcxMmVlZDU2NmViZDhlYmI5ZmI1ZDJlYmVhNTFhLmpwZ1wiK1wiIDQwMHdcIixcbiAgICAgICAgICBpbWFnZXM6WyB7cGF0aDogXCIvX25leHQvc3RhdGljL2ltYWdlcy9yZXBsYWNpbmctYXBwLWNlbnRlci1idWlsZGluZy1hLXBob25lLTEyMDAtYzk1NGIwMDc4MzRiMDhmMGIxYmI3NGM5Yjg3NzVlN2IuanBnXCIsd2lkdGg6IDEyMDAsaGVpZ2h0OiAxMjAwfSx7cGF0aDogXCIvX25leHQvc3RhdGljL2ltYWdlcy9yZXBsYWNpbmctYXBwLWNlbnRlci1idWlsZGluZy1hLXBob25lLTgwMC02OTlmZGFlMGFjMGUyMDczNjJjN2NhZGRhMjM4NDY1Zi5qcGdcIix3aWR0aDogODAwLGhlaWdodDogODAwfSx7cGF0aDogXCIvX25leHQvc3RhdGljL2ltYWdlcy9yZXBsYWNpbmctYXBwLWNlbnRlci1idWlsZGluZy1hLXBob25lLTQwMC04MGQ3MTJlZWQ1NjZlYmQ4ZWJiOWZiNWQyZWJlYTUxYS5qcGdcIix3aWR0aDogNDAwLGhlaWdodDogNDAwfV0sXG4gICAgICAgICAgc3JjOiBcIi9fbmV4dC9zdGF0aWMvaW1hZ2VzL3JlcGxhY2luZy1hcHAtY2VudGVyLWJ1aWxkaW5nLWEtcGhvbmUtMTIwMC1jOTU0YjAwNzgzNGIwOGYwYjFiYjc0YzliODc3NWU3Yi5qcGdcIixcbiAgICAgICAgICB0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiBcIi9fbmV4dC9zdGF0aWMvaW1hZ2VzL3JlcGxhY2luZy1hcHAtY2VudGVyLWJ1aWxkaW5nLWEtcGhvbmUtMTIwMC1jOTU0YjAwNzgzNGIwOGYwYjFiYjc0YzliODc3NWU3Yi5qcGdcIn0sXG4gICAgICAgICAgXG4gICAgICAgICAgd2lkdGg6IDEyMDAsXG4gICAgICAgICAgaGVpZ2h0OiAxMjAwXG4gICAgICAgIH0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./public/images/replacing-app-center-building-a-phone.jpg\n"); - -/***/ }), - -/***/ "./public/images/replacing-app-center-run-workflow.png": -/*!*************************************************************!*\ - !*** ./public/images/replacing-app-center-run-workflow.png ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("module.exports = {\n srcSet: \"/_next/static/images/replacing-app-center-run-workflow-666-a3ead85356b67fc7aa6e04a87469bdf5.png\"+\" 666w\"+\",\"+\"/_next/static/images/replacing-app-center-run-workflow-400-a12cfbc95b37f8d5bed997ec490ea931.png\"+\" 400w\",\n images:[ {path: \"/_next/static/images/replacing-app-center-run-workflow-666-a3ead85356b67fc7aa6e04a87469bdf5.png\",width: 666,height: 490},{path: \"/_next/static/images/replacing-app-center-run-workflow-400-a12cfbc95b37f8d5bed997ec490ea931.png\",width: 400,height: 294}],\n src: \"/_next/static/images/replacing-app-center-run-workflow-666-a3ead85356b67fc7aa6e04a87469bdf5.png\",\n toString:function(){return \"/_next/static/images/replacing-app-center-run-workflow-666-a3ead85356b67fc7aa6e04a87469bdf5.png\"},\n \n width: 666,\n height: 490\n }//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vcHVibGljL2ltYWdlcy9yZXBsYWNpbmctYXBwLWNlbnRlci1ydW4td29ya2Zsb3cucG5nPzk4MTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBLG9CQUFvQiwrSEFBK0gsRUFBRSwrSEFBK0g7QUFDcFI7QUFDQSw4QkFBOEIseUdBQXlHOztBQUV2STtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9wdWJsaWMvaW1hZ2VzL3JlcGxhY2luZy1hcHAtY2VudGVyLXJ1bi13b3JrZmxvdy5wbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAgICAgICBzcmNTZXQ6IFwiL19uZXh0L3N0YXRpYy9pbWFnZXMvcmVwbGFjaW5nLWFwcC1jZW50ZXItcnVuLXdvcmtmbG93LTY2Ni1hM2VhZDg1MzU2YjY3ZmM3YWE2ZTA0YTg3NDY5YmRmNS5wbmdcIitcIiA2NjZ3XCIrXCIsXCIrXCIvX25leHQvc3RhdGljL2ltYWdlcy9yZXBsYWNpbmctYXBwLWNlbnRlci1ydW4td29ya2Zsb3ctNDAwLWExMmNmYmM5NWIzN2Y4ZDViZWQ5OTdlYzQ5MGVhOTMxLnBuZ1wiK1wiIDQwMHdcIixcbiAgICAgICAgICBpbWFnZXM6WyB7cGF0aDogXCIvX25leHQvc3RhdGljL2ltYWdlcy9yZXBsYWNpbmctYXBwLWNlbnRlci1ydW4td29ya2Zsb3ctNjY2LWEzZWFkODUzNTZiNjdmYzdhYTZlMDRhODc0NjliZGY1LnBuZ1wiLHdpZHRoOiA2NjYsaGVpZ2h0OiA0OTB9LHtwYXRoOiBcIi9fbmV4dC9zdGF0aWMvaW1hZ2VzL3JlcGxhY2luZy1hcHAtY2VudGVyLXJ1bi13b3JrZmxvdy00MDAtYTEyY2ZiYzk1YjM3ZjhkNWJlZDk5N2VjNDkwZWE5MzEucG5nXCIsd2lkdGg6IDQwMCxoZWlnaHQ6IDI5NH1dLFxuICAgICAgICAgIHNyYzogXCIvX25leHQvc3RhdGljL2ltYWdlcy9yZXBsYWNpbmctYXBwLWNlbnRlci1ydW4td29ya2Zsb3ctNjY2LWEzZWFkODUzNTZiNjdmYzdhYTZlMDRhODc0NjliZGY1LnBuZ1wiLFxuICAgICAgICAgIHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIFwiL19uZXh0L3N0YXRpYy9pbWFnZXMvcmVwbGFjaW5nLWFwcC1jZW50ZXItcnVuLXdvcmtmbG93LTY2Ni1hM2VhZDg1MzU2YjY3ZmM3YWE2ZTA0YTg3NDY5YmRmNS5wbmdcIn0sXG4gICAgICAgICAgXG4gICAgICAgICAgd2lkdGg6IDY2NixcbiAgICAgICAgICBoZWlnaHQ6IDQ5MFxuICAgICAgICB9Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./public/images/replacing-app-center-run-workflow.png\n"); - -/***/ }), - -/***/ "./public/posts/replacing-app-center.md": -/*!**********************************************!*\ - !*** ./public/posts/replacing-app-center.md ***! - \**********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("throw new Error(\"Module parse failed: Assigning to rvalue (1:2)\\nYou may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders\\n> ---\\n| title: Replacing App Center with GitHub Actions\\n| description: App Center is closing up shop on March 31st, 2025. So what's the plan for building mobile apps at Vandebron?\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiIuL3B1YmxpYy9wb3N0cy9yZXBsYWNpbmctYXBwLWNlbnRlci5tZC5qcyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./public/posts/replacing-app-center.md\n"); - -/***/ }) - -}) \ No newline at end of file diff --git a/_next/static/webpack/pages/blog/[slug].1d8c547f9abb877f56b4.hot-update.js b/_next/static/webpack/pages/blog/[slug].1d8c547f9abb877f56b4.hot-update.js deleted file mode 100644 index f8bf7bb41..000000000 --- a/_next/static/webpack/pages/blog/[slug].1d8c547f9abb877f56b4.hot-update.js +++ /dev/null @@ -1,15 +0,0 @@ -webpackHotUpdate_N_E("pages/blog/[slug]",{ - -/***/ "./components/Markdown.jsx": -/*!*********************************!*\ - !*** ./components/Markdown.jsx ***! - \*********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(module) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Markdown; });\n/* harmony import */ var _Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/esm/defineProperty */ \"./node_modules/next/node_modules/@babel/runtime/helpers/esm/defineProperty.js\");\n/* harmony import */ var _Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties */ \"./node_modules/next/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var _Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/esm/extends */ \"./node_modules/next/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var react_markdown__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-markdown */ \"./node_modules/react-markdown/src/react-markdown.js\");\n/* harmony import */ var react_markdown__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_markdown__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @vandebron/windmolen */ \"./node_modules/@vandebron/windmolen/dist/index.js\");\n/* harmony import */ var _vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var react_syntax_highlighter__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-syntax-highlighter */ \"./node_modules/react-syntax-highlighter/dist/esm/index.js\");\n/* harmony import */ var react_syntax_highlighter_dist_cjs_styles_prism__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react-syntax-highlighter/dist/cjs/styles/prism */ \"./node_modules/react-syntax-highlighter/dist/cjs/styles/prism/index.js\");\n/* harmony import */ var react_syntax_highlighter_dist_cjs_styles_prism__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react_syntax_highlighter_dist_cjs_styles_prism__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var rehype_raw__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! rehype-raw */ \"./node_modules/rehype-raw/index.js\");\n/* harmony import */ var rehype_raw__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(rehype_raw__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var remark_gfm__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! remark-gfm */ \"./node_modules/remark-gfm/index.js\");\n/* harmony import */ var remark_gfm__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(remark_gfm__WEBPACK_IMPORTED_MODULE_9__);\n\n\n\nvar _jsxFileName = \"/Users/john.fisher/workspace/vandebron/tech-blog/components/Markdown.jsx\";\n\nvar __jsx = react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement;\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\n\n\n\n\n\n\nfunction Markdown(_ref) {\n var _this = this;\n\n var children = _ref.children;\n return __jsx(react_markdown__WEBPACK_IMPORTED_MODULE_4___default.a, {\n children: children,\n rehypePlugins: [rehype_raw__WEBPACK_IMPORTED_MODULE_8___default.a, remark_gfm__WEBPACK_IMPORTED_MODULE_9___default.a],\n components: {\n hr: react__WEBPACK_IMPORTED_MODULE_3___default.a.Fragment,\n h1: function h1(_ref2) {\n var children = _ref2.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"H1\"], {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 16,\n columnNumber: 28\n }\n }, children);\n },\n h2: function h2(_ref3) {\n var children = _ref3.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"H2\"], {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 19,\n columnNumber: 28\n }\n }, children);\n },\n h3: function h3(_ref4) {\n var children = _ref4.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"H3\"], {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 22,\n columnNumber: 28\n }\n }, children);\n },\n h4: function h4(_ref5) {\n var children = _ref5.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"H4\"], {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 25,\n columnNumber: 28\n }\n }, children);\n },\n h5: function h5(_ref6) {\n var children = _ref6.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"H5\"], {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 28,\n columnNumber: 28\n }\n }, children);\n },\n p: function p(props) {\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Paragraph\"], Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, props, {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 30,\n columnNumber: 31\n }\n }));\n },\n ol: function ol(_ref7) {\n var children = _ref7.children;\n return __jsx(\"ol\", {\n style: {\n marginBlockStart: 0,\n marginBlockEnd: 30\n },\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 32,\n columnNumber: 21\n }\n }, children);\n },\n ul: function ul(_ref8) {\n var children = _ref8.children;\n return __jsx(\"ol\", {\n style: {\n marginBlockStart: 0,\n marginBlockEnd: 30\n },\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 37,\n columnNumber: 21\n }\n }, children);\n },\n li: function li(_ref9) {\n var children = _ref9.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Paragraph\"], {\n as: \"li\",\n style: {\n marginBottom: 0\n },\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 42,\n columnNumber: 21\n }\n }, children);\n },\n a: function a(_ref10) {\n var children = _ref10.children,\n props = Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_ref10, [\"children\"]);\n\n return __jsx(\"a\", Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, props, {\n style: {\n color: \"inherit\"\n },\n target: 'target' in props || props['href'].includes('#') ? undefined : '_blank',\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 47,\n columnNumber: 22\n }\n }), children);\n },\n code: function code(_ref11) {\n var node = _ref11.node,\n inline = _ref11.inline,\n className = _ref11.className,\n children = _ref11.children,\n props = Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_ref11, [\"node\", \"inline\", \"className\", \"children\"]);\n\n var match = /language-(\\w+)/.exec(className || '');\n return !inline && match ? __jsx(react_syntax_highlighter__WEBPACK_IMPORTED_MODULE_6__[\"PrismAsync\"], Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({\n style: react_syntax_highlighter_dist_cjs_styles_prism__WEBPACK_IMPORTED_MODULE_7__[\"okaidia\"],\n language: match[1],\n PreTag: \"div\",\n children: String(children).replace(/\\n$/, '')\n }, props, {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 55,\n columnNumber: 25\n }\n })) : __jsx(\"code\", Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({\n className: className\n }, props, {\n style: {\n background: \"rgb(0,0,0, 0.1)\",\n padding: \"2px 4px\",\n fontSize: \"80%\",\n color: \"#000\"\n },\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 58,\n columnNumber: 25\n }\n }), children);\n },\n img: function img(_ref12) {\n var src = _ref12.src,\n alt = _ref12.alt,\n props = Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_ref12, [\"src\", \"alt\"]);\n\n return __jsx(\"img\", Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({\n src: src,\n alt: alt,\n style: {\n width: \"100%\"\n }\n }, props, {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 68,\n columnNumber: 49\n }\n }));\n },\n table: function table(_ref13) {\n var children = _ref13.children,\n className = _ref13.className,\n style = _ref13.style;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Table\"], {\n tableStyle: \"solid-borders\",\n className: className,\n style: _objectSpread({\n 'borderCollapse': 'collapse',\n 'marginBottom': '5%',\n 'fontSize': '18px',\n 'border': 'none'\n }, style),\n align: \"center\",\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 71,\n columnNumber: 25\n }\n }, children);\n },\n thead: function thead(_ref14) {\n var children = _ref14.children,\n style = _ref14.style;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Table\"].Thead, {\n style: _objectSpread({\n 'color': 'black'\n }, style),\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 83,\n columnNumber: 48\n }\n }, children);\n },\n tbody: function tbody(_ref15) {\n var children = _ref15.children,\n style = _ref15.style;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Table\"].Tbody, {\n style: style,\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 84,\n columnNumber: 48\n }\n }, children);\n },\n tr: function tr(_ref16) {\n var children = _ref16.children,\n style = _ref16.style;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Table\"].Row, {\n style: _objectSpread({}, style),\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 85,\n columnNumber: 45\n }\n }, children);\n },\n td: function td(_ref17) {\n var children = _ref17.children,\n style = _ref17.style,\n rest = Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_ref17, [\"children\", \"style\"]);\n\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Table\"].Cell, Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, rest, {\n style: style,\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 86,\n columnNumber: 54\n }\n }), children);\n },\n th: function th(_ref18) {\n var children = _ref18.children,\n style = _ref18.style;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Table\"].Cell, {\n style: style,\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 87,\n columnNumber: 45\n }\n }, children);\n }\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 10,\n columnNumber: 9\n }\n });\n}\n_c = Markdown;\n\nvar _c;\n\n$RefreshReg$(_c, \"Markdown\");\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node_modules/next/dist/compiled/webpack/harmony-module.js */ \"./node_modules/next/dist/compiled/webpack/harmony-module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vY29tcG9uZW50cy9NYXJrZG93bi5qc3g/ZTQ2OCJdLCJuYW1lcyI6WyJNYXJrZG93biIsImNoaWxkcmVuIiwicmVoeXBlUmF3IiwicmVtYXJrR2ZtIiwiaHIiLCJSZWFjdCIsIkZyYWdtZW50IiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsInAiLCJwcm9wcyIsIm9sIiwibWFyZ2luQmxvY2tTdGFydCIsIm1hcmdpbkJsb2NrRW5kIiwidWwiLCJsaSIsIm1hcmdpbkJvdHRvbSIsImEiLCJjb2xvciIsImluY2x1ZGVzIiwidW5kZWZpbmVkIiwiY29kZSIsIm5vZGUiLCJpbmxpbmUiLCJjbGFzc05hbWUiLCJtYXRjaCIsImV4ZWMiLCJva2FpZGlhIiwiU3RyaW5nIiwicmVwbGFjZSIsImJhY2tncm91bmQiLCJwYWRkaW5nIiwiZm9udFNpemUiLCJpbWciLCJzcmMiLCJhbHQiLCJ3aWR0aCIsInRhYmxlIiwic3R5bGUiLCJ0aGVhZCIsInRib2R5IiwidHIiLCJ0ZCIsInJlc3QiLCJ0aCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFZSxTQUFTQSxRQUFULE9BQThCO0FBQUE7O0FBQUEsTUFBWEMsUUFBVyxRQUFYQSxRQUFXO0FBQ3pDLFNBQ0ksTUFBQyxxREFBRDtBQUNJLFlBQVEsRUFBRUEsUUFEZDtBQUVJLGlCQUFhLEVBQUUsQ0FBQ0MsaURBQUQsRUFBWUMsaURBQVosQ0FGbkI7QUFHSSxjQUFVLEVBQUU7QUFDUkMsUUFBRSxFQUFFQyw0Q0FBSyxDQUFDQyxRQURGO0FBRVJDLFFBQUUsRUFBRSxtQkFBZ0I7QUFBQSxZQUFkTixRQUFjLFNBQWRBLFFBQWM7QUFDaEIsZUFBTyxNQUFDLHVEQUFEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0FBS0EsUUFBTCxDQUFQO0FBQ0gsT0FKTztBQUtSTyxRQUFFLEVBQUUsbUJB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LEtBQTdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBcUN4QyxRQUFyQyxDQUFqQztBQUFBLE9BekVJO0FBMEVSOEMsUUFBRSxFQUFFO0FBQUEsWUFBRTlDLFFBQUYsVUFBRUEsUUFBRjtBQUFBLFlBQVl3QyxLQUFaLFVBQVlBLEtBQVo7QUFBQSxlQUF3QixNQUFDLDBEQUFELENBQU8sSUFBUDtBQUFZLGVBQUssRUFBRUEsS0FBbkI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQUEyQnhDLFFBQTNCLENBQXhCO0FBQUE7QUExRUksS0FIaEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQURKO0FBbUZIO0tBcEZ1QkQsUSIsImZpbGUiOiIuL2NvbXBvbmVudHMvTWFya2Rvd24uanN4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0TWFya2Rvd24gZnJvbSBcInJlYWN0LW1hcmtkb3duXCI7XG5pbXBvcnQgeyBIMSwgSDIsIEgzLCBINCwgSDUsIFRhYmxlLCBQYXJhZ3JhcGggfSBmcm9tIFwiQHZhbmRlYnJvbi93aW5kbW9sZW5cIjtcbmltcG9ydCB7IFByaXNtQXN5bmMgYXMgU3ludGF4SGlnaGxpZ2h0ZXIgfSBmcm9tIFwicmVhY3Qtc3ludGF4LWhpZ2hsaWdodGVyXCI7XG5pbXBvcnQgeyBva2FpZGlhIH0gZnJvbSBcInJlYWN0LXN5bnRheC1oaWdobGlnaHRlci9kaXN0L2Nqcy9zdHlsZXMvcHJpc21cIjtcbmltcG9ydCByZWh5cGVSYXcgZnJvbSAncmVoeXBlLXJhdydcbmltcG9ydCByZW1hcmtHZm0gZnJvbSAncmVtYXJrLWdmbSdcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTWFya2Rvd24oe2NoaWxkcmVufSkge1xuICAgIHJldHVybiAoXG4gICAgICAgIDxSZWFjdE1hcmtkb3duXG4gICAgICAgICAgICBjaGlsZHJlbj17Y2hpbGRyZW59XG4gICAgICAgICAgICByZWh5cGVQbHVnaW5zPXtbcmVoeXBlUmF3LCByZW1hcmtHZm1dfVxuICAgICAgICAgICAgY29tcG9uZW50cz17e1xuICAgICAgICAgICAgICAgIGhyOiBSZWFjdC5GcmFnbWVudCxcbiAgICAgICAgICAgICAgICBoMTogKHtjaGlsZHJlbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxIMT57Y2hpbGRyZW59PC9IMT47XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBoMjogKHtjaGlsZHJlbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxIMj57Y2hpbGRyZW59PC9IMj47XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBoMzogKHtjaGlsZHJlbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxIMz57Y2hpbGRyZW59PC9IMz47XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBoNDogKHtjaGlsZHJlbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxIND57Y2hpbGRyZW59PC9IND47XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBoNTogKHtjaGlsZHJlbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxINT57Y2hpbGRyZW59PC9INT47XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwOiAocHJvcHMpID0+IDxQYXJhZ3JhcGggey4uLnByb3BzfSAvPixcbiAgICAgICAgICAgICAgICBvbDogKHtjaGlsZHJlbn0pID0+IChcbiAgICAgICAgICAgICAgICAgICAgPG9sIHN0eWxlPXt7bWFyZ2luQmxvY2tTdGFydDogMCwgbWFyZ2luQmxvY2tFbmQ6IDMwfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgICAgICAgIDwvb2w+XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB1bDogKHtjaGlsZHJlbn0pID0+IChcbiAgICAgICAgICAgICAgICAgICAgPG9sIHN0eWxlPXt7bWFyZ2luQmxvY2tTdGFydDogMCwgbWFyZ2luQmxvY2tFbmQ6IDMwfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgICAgICAgIDwvb2w+XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBsaTogKHtjaGlsZHJlbn0pID0+IChcbiAgICAgICAgICAgICAgICAgICAgPFBhcmFncmFwaCBhcz1cImxpXCIgc3R5bGU9e3ttYXJnaW5Cb3R0b206IDB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgICAgICAgICAgPC9QYXJhZ3JhcGg+XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBhOiAoe2NoaWxkcmVuLCAuLi5wcm9wc30pID0+XG4gICAgICAgICAgICAgICAgICAgICg8YSB7Li4ucHJvcHN9IHN0eWxlPXt7Y29sb3I6IFwiaW5oZXJpdFwifX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD17J3RhcmdldCcgaW4gcHJvcHMgfHwgcHJvcHNbJ2hyZWYnXS5pbmNsdWRlcygnIycpID8gdW5kZWZpbmVkIDogJ19ibGFuayd9PlxuICAgICAgICAgICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgICA8L2E+KSxcblxuICAgICAgICAgICAgICAgIGNvZGU6ICh7bm9kZSwgaW5saW5lLCBjbGFzc05hbWUsIGNoaWxkcmVuLCAuLi5wcm9wc30pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSAvbGFuZ3VhZ2UtKFxcdyspLy5leGVjKGNsYXNzTmFtZSB8fCAnJylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFpbmxpbmUgJiYgbWF0Y2ggPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8U3ludGF4SGlnaGxpZ2h0ZXIgc3R5bGU9e29rYWlkaWF9IGxhbmd1YWdlPXttYXRjaFsxXX0gUHJlVGFnPVwiZGl2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbj17U3RyaW5nKGNoaWxkcmVuKS5yZXBsYWNlKC9cXG4kLywgJycpfSB7Li4ucHJvcHN9IC8+XG4gICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzc05hbWU9e2NsYXNzTmFtZX0gey4uLnByb3BzfSBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IFwicmdiKDAsMCwwLCAwLjEpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogXCIycHggNHB4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IFwiODAlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwiIzAwMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9jb2RlPlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBpbWc6ICh7c3JjLCBhbHQsIC4uLnByb3BzfSkgPT4gKDxpbWcgc3JjPXtzcmN9IGFsdD17YWx0fSBzdHlsZT17e3dpZHRoOiBcIjEwMCVcIn19IHsuLi5wcm9wc30vPiksXG4gICAgICAgICAgICAgICAgdGFibGU6ICh7Y2hpbGRyZW4sIGNsYXNzTmFtZSwgc3R5bGV9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGFibGUgdGFibGVTdHlsZT0nc29saWQtYm9yZGVycycgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlckNvbGxhcHNlJzogJ2NvbGxhcHNlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbkJvdHRvbSc6ICc1JScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb250U2l6ZSc6ICcxOHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlcic6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uc3R5bGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduPSdjZW50ZXInPntjaGlsZHJlbn1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGU+XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0aGVhZDogKHtjaGlsZHJlbiwgc3R5bGV9KSA9PiAoPFRhYmxlLlRoZWFkIHN0eWxlPXt7J2NvbG9yJzogJ2JsYWNrJywgLi4uc3R5bGV9fT57Y2hpbGRyZW59PC9UYWJsZS5UaGVhZD4pLFxuICAgICAgICAgICAgICAgIHRib2R5OiAoe2NoaWxkcmVuLCBzdHlsZX0pID0+ICg8VGFibGUuVGJvZHkgc3R5bGU9e3N0eWxlfT57Y2hpbGRyZW59PC9UYWJsZS5UYm9keT4pLFxuICAgICAgICAgICAgICAgIHRyOiAoe2NoaWxkcmVuLCBzdHlsZX0pID0+ICg8VGFibGUuUm93IHN0eWxlPXt7Li4uc3R5bGV9fT57Y2hpbGRyZW59PC9UYWJsZS5Sb3c+KSxcbiAgICAgICAgICAgICAgICB0ZDogKHtjaGlsZHJlbiwgc3R5bGUsIC4uLnJlc3R9KSA9PiAoPFRhYmxlLkNlbGwgey4uLnJlc3R9IHN0eWxlPXtzdHlsZX0+e2NoaWxkcmVufTwvVGFibGUuQ2VsbD4pLFxuICAgICAgICAgICAgICAgIHRoOiAoe2NoaWxkcmVuLCBzdHlsZX0pID0+ICg8VGFibGUuQ2VsbCBzdHlsZT17c3R5bGV9PntjaGlsZHJlbn08L1RhYmxlLkNlbGw+KSxcblxuICAgICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICApO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./components/Markdown.jsx\n"); - -/***/ }) - -}) \ No newline at end of file diff --git a/_next/static/webpack/pages/blog/[slug].6de4a6b8d4f651a3d938.hot-update.js b/_next/static/webpack/pages/blog/[slug].6de4a6b8d4f651a3d938.hot-update.js deleted file mode 100644 index 1abab3918..000000000 --- a/_next/static/webpack/pages/blog/[slug].6de4a6b8d4f651a3d938.hot-update.js +++ /dev/null @@ -1,41 +0,0 @@ -webpackHotUpdate_N_E("pages/blog/[slug]",{ - -/***/ "./components/Markdown.jsx": -/*!*********************************!*\ - !*** ./components/Markdown.jsx ***! - \*********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(module) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Markdown; });\n/* harmony import */ var _Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties */ \"./node_modules/next/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var _Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/esm/extends */ \"./node_modules/next/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var react_markdown__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-markdown */ \"./node_modules/react-markdown/src/react-markdown.js\");\n/* harmony import */ var react_markdown__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_markdown__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _vandebron_windmolen__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @vandebron/windmolen */ \"./node_modules/@vandebron/windmolen/dist/index.js\");\n/* harmony import */ var _vandebron_windmolen__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var react_syntax_highlighter__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-syntax-highlighter */ \"./node_modules/react-syntax-highlighter/dist/esm/index.js\");\n/* harmony import */ var react_syntax_highlighter_dist_cjs_styles_prism__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-syntax-highlighter/dist/cjs/styles/prism */ \"./node_modules/react-syntax-highlighter/dist/cjs/styles/prism/index.js\");\n/* harmony import */ var react_syntax_highlighter_dist_cjs_styles_prism__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react_syntax_highlighter_dist_cjs_styles_prism__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var rehype_raw__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rehype-raw */ \"./node_modules/rehype-raw/index.js\");\n/* harmony import */ var rehype_raw__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(rehype_raw__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var remark_gfm__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! remark-gfm */ \"./node_modules/remark-gfm/index.js\");\n/* harmony import */ var remark_gfm__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(remark_gfm__WEBPACK_IMPORTED_MODULE_8__);\n\n\nvar _jsxFileName = \"/Users/john.fisher/workspace/vandebron/tech-blog/components/Markdown.jsx\";\n\nvar __jsx = react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement;\n\n\n\n\n\n\nfunction Markdown(_ref) {\n var _this = this;\n\n var children = _ref.children;\n return __jsx(react_markdown__WEBPACK_IMPORTED_MODULE_3___default.a, {\n children: children,\n rehypePlugins: [rehype_raw__WEBPACK_IMPORTED_MODULE_7___default.a, remark_gfm__WEBPACK_IMPORTED_MODULE_8___default.a],\n components: {\n hr: react__WEBPACK_IMPORTED_MODULE_2___default.a.Fragment,\n h1: function h1(_ref2) {\n var children = _ref2.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_4__[\"H1\"], {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 16,\n columnNumber: 28\n }\n }, children);\n },\n h2: function h2(_ref3) {\n var children = _ref3.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_4__[\"H2\"], {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 19,\n columnNumber: 28\n }\n }, children);\n },\n h3: function h3(_ref4) {\n var children = _ref4.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_4__[\"H3\"], {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 22,\n columnNumber: 28\n }\n }, children);\n },\n h4: function h4(_ref5) {\n var children = _ref5.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_4__[\"H4\"], {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 25,\n columnNumber: 28\n }\n }, children);\n },\n h5: function h5(_ref6) {\n var children = _ref6.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_4__[\"H5\"], {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 28,\n columnNumber: 28\n }\n }, children);\n },\n p: function p(props) {\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_4__[\"Paragraph\"], Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, props, {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 30,\n columnNumber: 31\n }\n }));\n },\n ol: function ol(_ref7) {\n var children = _ref7.children;\n return __jsx(\"ol\", {\n style: {\n marginBlockStart: 0,\n marginBlockEnd: 30\n },\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 32,\n columnNumber: 21\n }\n }, children);\n },\n ul: function ul(_ref8) {\n var children = _ref8.children;\n return __jsx(\"ol\", {\n style: {\n marginBlockStart: 0,\n marginBlockEnd: 30\n },\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 37,\n columnNumber: 21\n }\n }, children);\n },\n li: function li(_ref9) {\n var children = _ref9.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_4__[\"Paragraph\"], {\n as: \"li\",\n style: {\n marginBottom: 0\n },\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 42,\n columnNumber: 21\n }\n }, children);\n },\n a: function a(_ref10) {\n var children = _ref10.children,\n props = Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_ref10, [\"children\"]);\n\n return __jsx(\"a\", Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, props, {\n style: {\n color: \"inherit\"\n },\n target: 'target' in props || props['href'].includes('#') ? undefined : '_blank',\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 47,\n columnNumber: 22\n }\n }), children);\n },\n code: function code(_ref11) {\n var node = _ref11.node,\n inline = _ref11.inline,\n className = _ref11.className,\n children = _ref11.children,\n props = Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_ref11, [\"node\", \"inline\", \"className\", \"children\"]);\n\n var match = /language-(\\w+)/.exec(className || '');\n return !inline && match ? __jsx(react_syntax_highlighter__WEBPACK_IMPORTED_MODULE_5__[\"PrismAsync\"], Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n style: react_syntax_highlighter_dist_cjs_styles_prism__WEBPACK_IMPORTED_MODULE_6__[\"okaidia\"],\n language: match[1],\n PreTag: \"div\",\n children: String(children).replace(/\\n$/, '')\n }, props, {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 55,\n columnNumber: 25\n }\n })) : __jsx(\"code\", Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n className: className\n }, props, {\n style: {\n background: \"rgb(0,0,0, 0.1)\",\n padding: \"2px 4px\",\n fontSize: \"80%\",\n color: \"#000\"\n },\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 58,\n columnNumber: 25\n }\n }), children);\n },\n img: function img(_ref12) {\n var src = _ref12.src,\n alt = _ref12.alt,\n props = Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_ref12, [\"src\", \"alt\"]);\n\n return __jsx(\"img\", Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n src: src,\n alt: alt,\n style: {\n width: \"100%\"\n }\n }, props, {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 68,\n columnNumber: 49\n }\n }));\n },\n table: function table(_ref13) {\n var children = _ref13.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_4__[\"Table\"], {\n tableStyle: \"solid-borders\",\n style: {\n 'borderCollapse': 'collapse',\n 'marginBottom': '5%',\n 'marginLeft': '5%',\n 'marginRight': '5%',\n 'fontSize': '18px'\n },\n align: \"center\",\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 69,\n columnNumber: 41\n }\n }, children);\n },\n thead: function thead(_ref14) {\n var children = _ref14.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_4__[\"Table\"].Thead, {\n style: {\n 'color': 'black'\n },\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 78,\n columnNumber: 41\n }\n }, children);\n },\n tbody: function tbody(_ref15) {\n var children = _ref15.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_4__[\"Table\"].Tbody, {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 79,\n columnNumber: 41\n }\n }, children);\n },\n tr: function tr(_ref16) {\n var children = _ref16.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_4__[\"Table\"].Row, {\n style: {\n 'borderBottom': '1px solid #000'\n },\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 80,\n columnNumber: 38\n }\n }, children);\n },\n td: function td(_ref17) {\n var children = _ref17.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_4__[\"Table\"].Cell, {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 81,\n columnNumber: 38\n }\n }, children);\n },\n th: function th(_ref18) {\n var children = _ref18.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_4__[\"Table\"].Cell, {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 82,\n columnNumber: 38\n }\n }, children);\n }\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 10,\n columnNumber: 9\n }\n });\n}\n_c = Markdown;\n\nvar _c;\n\n$RefreshReg$(_c, \"Markdown\");\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node_modules/next/dist/compiled/webpack/harmony-module.js */ \"./node_modules/next/dist/compiled/webpack/harmony-module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vY29tcG9uZW50cy9NYXJrZG93bi5qc3g/ZTQ2OCJdLCJuYW1lcyI6WyJNYXJrZG93biIsImNoaWxkcmVuIiwicmVoeXBlUmF3IiwicmVtYXJrR2ZtIiwiaHIiLCJSZWFjdCIsIkZyYWdtZW50IiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsInAiLCJwcm9wcyIsIm9sIiwibWFyZ2luQmxvY2tTdGFydCIsIm1hcmdpbkJsb2NrRW5kIiwidWwiLCJsaSIsIm1hcmdpbkJvdHRvbSIsImEiLCJjb2xvciIsImluY2x1ZGVzIiwidW5kZWZpbmVkIiwiY29kZSIsIm5vZGUiLCJpbmxpbmUiLCJjbGFzc05hbWUiLCJtYXRjaCIsImV4ZWMiLCJva2FpZGlhIiwiU3RyaW5nIiwicmVwbGFjZSIsImJhY2tncm91bmQiLCJwYWRkaW5nIiwiZm9udFNpemUiLCJpbWciLCJzcmMiLCJhbHQiLCJ3aWR0aCIsInRhYmxlIiwidGhlYWQiLCJ0Ym9keSIsInRyIiwidGQiLCJ0aCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVlLFNBQVNBLFFBQVQsT0FBOEI7QUFBQTs7QUFBQSxNQUFYQyxRQUFXLFFBQVhBLFFBQVc7QUFDekMsU0FDSSxNQUFDLHFEQUFEO0FBQ0ksWUFBUSxFQUFFQSxRQURkO0FBRUksaUJBQWEsRUFBRSxDQUFDQyxpREFBRCxFQUFZQyxpREFBWixDQUZuQjtBQUdJLGNBQVUsRUFBRTtBQUNSQyxRQUFFLEVBQUVDLDRDQUFLLENBQUNDLFFBREY7QUFFUkMsUUFBRSxFQUFFLG1CQUFnQjtBQUFBLFlBQWROLFFBQWMsU0FBZEEsUUFBYztBQUNoQixlQUFPLE1BQUMsdURBQUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQUFLQSxRQUFMLENBQVA7QUFDSCxPQUpPO0FBS1JPLFFBQUUsRUFBRSxtQkFBZ0I7QUFBQSxZQUFkUCxRQUFjLFNB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ZG93bi5qc3guanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3RNYXJrZG93biBmcm9tIFwicmVhY3QtbWFya2Rvd25cIjtcbmltcG9ydCB7IEgxLCBIMiwgSDMsIEg0LCBINSwgVGFibGUsIFBhcmFncmFwaCB9IGZyb20gXCJAdmFuZGVicm9uL3dpbmRtb2xlblwiO1xuaW1wb3J0IHsgUHJpc21Bc3luYyBhcyBTeW50YXhIaWdobGlnaHRlciB9IGZyb20gXCJyZWFjdC1zeW50YXgtaGlnaGxpZ2h0ZXJcIjtcbmltcG9ydCB7IG9rYWlkaWEgfSBmcm9tIFwicmVhY3Qtc3ludGF4LWhpZ2hsaWdodGVyL2Rpc3QvY2pzL3N0eWxlcy9wcmlzbVwiO1xuaW1wb3J0IHJlaHlwZVJhdyBmcm9tICdyZWh5cGUtcmF3J1xuaW1wb3J0IHJlbWFya0dmbSBmcm9tICdyZW1hcmstZ2ZtJ1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNYXJrZG93bih7Y2hpbGRyZW59KSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPFJlYWN0TWFya2Rvd25cbiAgICAgICAgICAgIGNoaWxkcmVuPXtjaGlsZHJlbn1cbiAgICAgICAgICAgIHJlaHlwZVBsdWdpbnM9e1tyZWh5cGVSYXcsIHJlbWFya0dmbV19XG4gICAgICAgICAgICBjb21wb25lbnRzPXt7XG4gICAgICAgICAgICAgICAgaHI6IFJlYWN0LkZyYWdtZW50LFxuICAgICAgICAgICAgICAgIGgxOiAoe2NoaWxkcmVufSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gPEgxPntjaGlsZHJlbn08L0gxPjtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGgyOiAoe2NoaWxkcmVufSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gPEgyPntjaGlsZHJlbn08L0gyPjtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGgzOiAoe2NoaWxkcmVufSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gPEgzPntjaGlsZHJlbn08L0gzPjtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGg0OiAoe2NoaWxkcmVufSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gPEg0PntjaGlsZHJlbn08L0g0PjtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGg1OiAoe2NoaWxkcmVufSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gPEg1PntjaGlsZHJlbn08L0g1PjtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHA6IChwcm9wcykgPT4gPFBhcmFncmFwaCB7Li4ucHJvcHN9IC8+LFxuICAgICAgICAgICAgICAgIG9sOiAoe2NoaWxkcmVufSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8b2wgc3R5bGU9e3ttYXJnaW5CbG9ja1N0YXJ0OiAwLCBtYXJnaW5CbG9ja0VuZDogMzB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgICAgICAgICAgPC9vbD5cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHVsOiAoe2NoaWxkcmVufSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8b2wgc3R5bGU9e3ttYXJnaW5CbG9ja1N0YXJ0OiAwLCBtYXJnaW5CbG9ja0VuZDogMzB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgICAgICAgICAgPC9vbD5cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGxpOiAoe2NoaWxkcmVufSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8UGFyYWdyYXBoIGFzPVwibGlcIiBzdHlsZT17e21hcmdpbkJvdHRvbTogMH19PlxuICAgICAgICAgICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgICA8L1BhcmFncmFwaD5cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGE6ICh7Y2hpbGRyZW4sIC4uLnByb3BzfSkgPT5cbiAgICAgICAgICAgICAgICAgICAgKDxhIHsuLi5wcm9wc30gc3R5bGU9e3tjb2xvcjogXCJpbmhlcml0XCJ9fVxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PXsndGFyZ2V0JyBpbiBwcm9wcyB8fCBwcm9wc1snaHJlZiddLmluY2x1ZGVzKCcjJykgPyB1bmRlZmluZWQgOiAnX2JsYW5rJ30+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgICAgICAgIDwvYT4pLFxuXG4gICAgICAgICAgICAgICAgY29kZTogKHtub2RlLCBpbmxpbmUsIGNsYXNzTmFtZSwgY2hpbGRyZW4sIC4uLnByb3BzfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRjaCA9IC9sYW5ndWFnZS0oXFx3KykvLmV4ZWMoY2xhc3NOYW1lIHx8ICcnKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIWlubGluZSAmJiBtYXRjaCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxTeW50YXhIaWdobGlnaHRlciBzdHlsZT17b2thaWRpYX0gbGFuZ3VhZ2U9e21hdGNoWzFdfSBQcmVUYWc9XCJkaXZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuPXtTdHJpbmcoY2hpbGRyZW4pLnJlcGxhY2UoL1xcbiQvLCAnJyl9IHsuLi5wcm9wc30gLz5cbiAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzTmFtZT17Y2xhc3NOYW1lfSB7Li4ucHJvcHN9IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogXCJyZ2IoMCwwLDAsIDAuMSlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBcIjJweCA0cHhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogXCI4MCVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogXCIjMDAwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGltZzogKHtzcmMsIGFsdCwgLi4ucHJvcHN9KSA9PiAoPGltZyBzcmM9e3NyY30gYWx0PXthbHR9IHN0eWxlPXt7d2lkdGg6IFwiMTAwJVwifX0gey4uLnByb3BzfS8+KSxcbiAgICAgICAgICAgICAgICB0YWJsZTogKHtjaGlsZHJlbn0pID0+ICg8VGFibGUgdGFibGVTdHlsZT0nc29saWQtYm9yZGVycydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXJDb2xsYXBzZSc6ICdjb2xsYXBzZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luQm90dG9tJzogJzUlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW5MZWZ0JzogJzUlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW5SaWdodCc6ICc1JScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9udFNpemUnOiAnMThweCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ249J2NlbnRlcic+e2NoaWxkcmVufTwvVGFibGU+KSxcbiAgICAgICAgICAgICAgICB0aGVhZDogKHtjaGlsZHJlbn0pID0+ICg8VGFibGUuVGhlYWQgc3R5bGU9e3snY29sb3InOiAnYmxhY2snfX0+e2NoaWxkcmVufTwvVGFibGUuVGhlYWQ+KSxcbiAgICAgICAgICAgICAgICB0Ym9keTogKHtjaGlsZHJlbn0pID0+ICg8VGFibGUuVGJvZHk+e2NoaWxkcmVufTwvVGFibGUuVGJvZHk+KSxcbiAgICAgICAgICAgICAgICB0cjogKHtjaGlsZHJlbn0pID0+ICg8VGFibGUuUm93IHN0eWxlPXt7J2JvcmRlckJvdHRvbSc6ICcxcHggc29saWQgIzAwMCd9fT57Y2hpbGRyZW59PC9UYWJsZS5Sb3c+KSxcbiAgICAgICAgICAgICAgICB0ZDogKHtjaGlsZHJlbn0pID0+ICg8VGFibGUuQ2VsbD57Y2hpbGRyZW59PC9UYWJsZS5DZWxsPiksXG4gICAgICAgICAgICAgICAgdGg6ICh7Y2hpbGRyZW59KSA9PiAoPFRhYmxlLkNlbGw+e2NoaWxkcmVufTwvVGFibGUuQ2VsbD4pLFxuXG4gICAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./components/Markdown.jsx\n"); - -/***/ }), - -/***/ "./node_modules/next/node_modules/@babel/runtime/helpers/esm/defineProperty.js": -false, - -/***/ "./public sync recursive ^\\.\\/.*$": -/*!******************************!*\ - !*** ./public sync ^\.\/.*$ ***! - \******************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var map = {\n\t\"./favicon.ico\": \"./public/favicon.ico\",\n\t\"./greentech-hackathon/1-vandebron.md\": \"./public/greentech-hackathon/1-vandebron.md\",\n\t\"./greentech-hackathon/2-hack-the-planet.md\": \"./public/greentech-hackathon/2-hack-the-planet.md\",\n\t\"./greentech-hackathon/3-top-dutch-solar-racing.md\": \"./public/greentech-hackathon/3-top-dutch-solar-racing.md\",\n\t\"./greentech-hackathon/config/config\": \"./public/greentech-hackathon/config/config.js\",\n\t\"./greentech-hackathon/config/config.js\": \"./public/greentech-hackathon/config/config.js\",\n\t\"./images/AtomicDesign.jpg\": \"./public/images/AtomicDesign.jpg\",\n\t\"./images/Iteration.jpg\": \"./public/images/Iteration.jpg\",\n\t\"./images/StorybookFigma.jpg\": \"./public/images/StorybookFigma.jpg\",\n\t\"./images/WindmolenCover.jpg\": \"./public/images/WindmolenCover.jpg\",\n\t\"./images/building-native-images-and-compiling-with-graalvm-and-sbt.jpg\": \"./public/images/building-native-images-and-compiling-with-graalvm-and-sbt.jpg\",\n\t\"./images/camunda-rising.png\": \"./public/images/camunda-rising.png\",\n\t\"./images/camunda_infrastructure.png\": \"./public/images/camunda_infrastructure.png\",\n\t\"./images/circular.jpeg\": \"./public/images/circular.jpeg\",\n\t\"./images/coalplant-gameplay.mp4\": \"./public/images/coalplant-gameplay.mp4\",\n\t\"./images/cypress-component-design-technique-for-react-applications.png\": \"./public/images/cypress-component-design-technique-for-react-applications.png\",\n\t\"./images/dagster-architecture.png\": \"./public/images/dagster-architecture.png\",\n\t\"./images/dagster-cicd.png\": \"./public/images/dagster-cicd.png\",\n\t\"./images/data-prince-charming.jpg\": \"./public/images/data-prince-charming.jpg\",\n\t\"./images/etlprocess.png\": \"./public/images/etlprocess.png\",\n\t\"./images/flex-onlogic-factor-201.jpg\": \"./public/images/flex-onlogic-factor-201.jpg\",\n\t\"./images/flex-wallpaper.webp\": \"./public/images/flex-wallpaper.webp\",\n\t\"./images/fueling-the-energy-transition-with-spark-part-1.jpg\": \"./public/images/fueling-the-energy-transition-with-spark-part-1.jpg\",\n\t\"./images/full-gameplay.mp4\": \"./public/images/full-gameplay.mp4\",\n\t\"./images/game-start-screen.png\": \"./public/images/game-start-screen.png\",\n\t\"./images/greentech-hackathon/hero-hack-planet.jpg\": \"./public/images/greentech-hackathon/hero-hack-planet.jpg\",\n\t\"./images/greentech-hackathon/hero-top-dutch-solar-racing.jpg\": \"./public/images/greentech-hackathon/hero-top-dutch-solar-racing.jpg\",\n\t\"./images/greentech-hackathon/hero.jpg\": \"./public/images/greentech-hackathon/hero.jpg?d76c\",\n\t\"./images/greentech-hackathon/logo-ev-experience.jpg\": \"./public/images/greentech-hackathon/logo-ev-experience.jpg\",\n\t\"./images/greentech-hackathon/logo-felyx.jpg\": \"./public/images/greentech-hackathon/logo-felyx.jpg\",\n\t\"./images/greentech-hackathon/logo-hack-planet.jpg\": \"./public/images/greentech-hackathon/logo-hack-planet.jpg\",\n\t\"./images/greentech-hackathon/logo-klimaatroute.jpg\": \"./public/images/greentech-hackathon/logo-klimaatroute.jpg\",\n\t\"./images/greentech-hackathon/logo-top-dutch-solar.jpg\": \"./public/images/greentech-hackathon/logo-top-dutch-solar.jpg\",\n\t\"./images/greentech-hackathon/logo-vandebron.jpg\": \"./public/images/greentech-hackathon/logo-vandebron.jpg\",\n\t\"./images/heart-breaking.jpg\": \"./public/images/heart-breaking.jpg\",\n\t\"./images/hero.jpg\": \"./public/images/hero.jpg\",\n\t\"./images/insert-perf-database.jpg\": \"./public/images/insert-perf-database.jpg\",\n\t\"./images/keycloak_aud.png\": \"./public/images/keycloak_aud.png\",\n\t\"./images/lasagnoli.png\": \"./public/images/lasagnoli.png\",\n\t\"./images/looking-back-at-vandebron-greentech-hackathon-2021.png\": \"./public/images/looking-back-at-vandebron-greentech-hackathon-2021.png\",\n\t\"./images/migrating-dcos-kubernetes-l4lb.jpg\": \"./public/images/migrating-dcos-kubernetes-l4lb.jpg\",\n\t\"./images/monolith.webp\": \"./public/images/monolith.webp\",\n\t\"./images/optimizing-converting-and-exporting-svg-icons-in-react.jpg\": \"./public/images/optimizing-converting-and-exporting-svg-icons-in-react.jpg\",\n\t\"./images/play_presentation.webp\": \"./public/images/play_presentation.webp\",\n\t\"./images/power-regular-hackathons.png\": \"./public/images/power-regular-hackathons.png\",\n\t\"./images/query-perf-database.jpg\": \"./public/images/query-perf-database.jpg\",\n\t\"./images/remix-migration-adr-options-considered.png\": \"./public/images/remix-migration-adr-options-considered.png\",\n\t\"./images/remix-migration-mocking-a-window.png\": \"./public/images/remix-migration-mocking-a-window.png\",\n\t\"./images/remix-migration-remix-vs-nextjs.png\": \"./public/images/remix-migration-remix-vs-nextjs.png\",\n\t\"./images/remix-migration-sojs-framework-positivity.png\": \"./public/images/remix-migration-sojs-framework-positivity.png\",\n\t\"./images/remix-migration-ugly-window-mock.png\": \"./public/images/remix-migration-ugly-window-mock.png\",\n\t\"./images/remix-migration-vegan-pizza-shop.png\": \"./public/images/remix-migration-vegan-pizza-shop.png\",\n\t\"./images/schematic_data_layers.jpg\": \"./public/images/schematic_data_layers.jpg\",\n\t\"./images/schematic_data_product.jpg\": \"./public/images/schematic_data_product.jpg\",\n\t\"./images/seasons.mp4\": \"./public/images/seasons.mp4\",\n\t\"./images/self_service.jpg\": \"./public/images/self_service.jpg\",\n\t\"./images/snowflake_auth_conf.png\": \"./public/images/snowflake_auth_conf.png\",\n\t\"./images/snowflake_keycloak.jpg\": \"./public/images/snowflake_keycloak.jpg\",\n\t\"./images/soap.jpg\": \"./public/images/soap.jpg\",\n\t\"./images/spark-cluster-overview.png\": \"./public/images/spark-cluster-overview.png\",\n\t\"./images/sparkapihistory.png\": \"./public/images/sparkapihistory.png\",\n\t\"./images/spin-up-kubernetes-on-macbook.jpg\": \"./public/images/spin-up-kubernetes-on-macbook.jpg\",\n\t\"./images/step-functions.webp\": \"./public/images/step-functions.webp\",\n\t\"./images/technology-black-1.png\": \"./public/images/technology-black-1.png\",\n\t\"./images/technology-black-2.png\": \"./public/images/technology-black-2.png\",\n\t\"./images/technology-black-3.png\": \"./public/images/technology-black-3.png\",\n\t\"./images/technology-white-1.png\": \"./public/images/technology-white-1.png\",\n\t\"./images/technology-white-2.png\": \"./public/images/technology-white-2.png\",\n\t\"./images/when-not-to-build-a-reusable-component-library.jpg\": \"./public/images/when-not-to-build-a-reusable-component-library.jpg\",\n\t\"./posts/authenticate-snowflake-rest-api-using-keycloak.md\": \"./public/posts/authenticate-snowflake-rest-api-using-keycloak.md\",\n\t\"./posts/back-to-the-monolith.md\": \"./public/posts/back-to-the-monolith.md\",\n\t\"./posts/balancing-dutch-energy-grid-with-flex-services.md\": \"./public/posts/balancing-dutch-energy-grid-with-flex-services.md\",\n\t\"./posts/building-native-images-and-compiling-with-graalvm-and-sbt.md\": \"./public/posts/building-native-images-and-compiling-with-graalvm-and-sbt.md\",\n\t\"./posts/cassandra-its-not-you-its-us.md\": \"./public/posts/cassandra-its-not-you-its-us.md\",\n\t\"./posts/choosing-remix-as-an-ssr-framework.md\": \"./public/posts/choosing-remix-as-an-ssr-framework.md\",\n\t\"./posts/cicd-dagster-user-code.md\": \"./public/posts/cicd-dagster-user-code.md\",\n\t\"./posts/creating_a_self-service_data_model.md\": \"./public/posts/creating_a_self-service_data_model.md\",\n\t\"./posts/cypress-component-design-technique-for-react-applications.md\": \"./public/posts/cypress-component-design-technique-for-react-applications.md\",\n\t\"./posts/fueling-the-energy-transition-with-spark-part-1.md\": \"./public/posts/fueling-the-energy-transition-with-spark-part-1.md\",\n\t\"./posts/how-to-sign-soap-messages.md\": \"./public/posts/how-to-sign-soap-messages.md\",\n\t\"./posts/looking-back-at-vandebron-greentech-hackathon-2021.md\": \"./public/posts/looking-back-at-vandebron-greentech-hackathon-2021.md\",\n\t\"./posts/migrating-dcos-kubernetes-l4lb.md\": \"./public/posts/migrating-dcos-kubernetes-l4lb.md\",\n\t\"./posts/optimizing-converting-and-exporting-svg-icons-in-react.md\": \"./public/posts/optimizing-converting-and-exporting-svg-icons-in-react.md\",\n\t\"./posts/power-regular-hackathons.md\": \"./public/posts/power-regular-hackathons.md\",\n\t\"./posts/salesforce-camunda-bpm-migration.md\": \"./public/posts/salesforce-camunda-bpm-migration.md\",\n\t\"./posts/spin-up-kubernetes-on-macbook.md\": \"./public/posts/spin-up-kubernetes-on-macbook.md\",\n\t\"./posts/sustainable-tech-hardware.md\": \"./public/posts/sustainable-tech-hardware.md\",\n\t\"./posts/the-difference-between-a-component-library-and-a-design-system.md\": \"./public/posts/the-difference-between-a-component-library-and-a-design-system.md\",\n\t\"./posts/vandebron-the-video-game.md\": \"./public/posts/vandebron-the-video-game.md\",\n\t\"./posts/when-not-to-build-a-reusable-component-library.md\": \"./public/posts/when-not-to-build-a-reusable-component-library.md\",\n\t\"./rss.xml\": \"./public/rss.xml\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./public sync recursive ^\\\\.\\\\/.*$\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vcHVibGljIHN5bmMgXlxcLlxcLy4qJD9kMDhhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vcHVibGljIHN5bmMgcmVjdXJzaXZlIF5cXC5cXC8uKiQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWFwID0ge1xuXHRcIi4vZmF2aWNvbi5pY29cIjogXCIuL3B1YmxpYy9mYXZpY29uLmljb1wiLFxuXHRcIi4vZ3JlZW50ZWNoLWhhY2thdGhvbi8xLXZhbmRlYnJvbi5tZFwiOiBcIi4vcHVibGljL2dyZWVudGVjaC1oYWNrYXRob24vMS12YW5kZWJyb24ubWRcIixcblx0XCIuL2dyZWVudGVjaC1oYWNrYXRob24vMi1oYWNrLXRoZS1wbGFuZXQubWRcIjogXCIuL3B1YmxpYy9ncmVlbnRlY2gtaGFja2F0aG9uLzItaGFjay10aGUtcGxhbmV0Lm1kXCIsXG5cdFwiLi9ncmVlbnRlY2gtaGFja2F0aG9uLzMtdG9wLWR1dGNoLXNvbGFyLXJhY2luZy5tZFwiOiBcIi4vcHVibGljL2dyZWVudGVjaC1oYWNrYXRob24vMy10b3AtZHV0Y2gtc29sYXItcmFjaW5nLm1kXCIsXG5cdFwiLi9ncmVlbnRlY2gtaGFja2F0aG9uL2NvbmZpZy9jb25maWdcIjogXCIuL3B1YmxpYy9ncmVlbnRlY2gtaGFja2F0aG9uL2NvbmZpZy9jb25maWcuanNcIixcblx0XCIuL2dyZWVudGVjaC1oYWNrYXRob24vY29uZmlnL2NvbmZpZy5qc1wiOiBcIi4vcHVibGljL2dyZWVudGVjaC1oYWNrYXRob24vY29uZmlnL2NvbmZpZy5qc1wiLFxuXHRcIi4vaW1hZ2VzL0F0b21pY0Rlc2lnbi5qcGdcIjogXCIuL3B1YmxpYy9pbWFnZXMvQXRvbWljRGVzaWduLmpwZ1wiLFxuXHRcIi4vaW1hZ2VzL0l0ZXJhdGlvbi5qcGdcIjogXCIuL3B1YmxpYy9pbWFnZXMvSXRlcmF0aW9uLmpwZ1wiLFxuXHRcIi4vaW1hZ2VzL1N0b3J5Ym9va0ZpZ21hLmpwZ1wiOiBcIi4vcHVibGljL2ltYWdlcy9TdG9yeWJvb2tGaWdtYS5qcGdcIixcblx0XCIuL2ltYWdlcy9XaW5kbW9sZW5Db3Zlci5qcGdcIjogXCIuL3B1YmxpYy9pbWFnZXMvV2luZG1vbGVuQ292ZXIuanBnXCIsXG5cdFwiLi9pbWFnZXMvYnVpbGRpbmctbmF0aXZlLWltYWdlcy1hbmQtY29tcGlsaW5nLXdpdGgtZ3JhYWx2bS1hbmQtc2J0LmpwZ1wiOiBcIi4vcHVibGljL2ltYWdlcy9idWlsZGluZy1uYXRpdmUtaW1hZ2VzLWFuZC1jb21waWxpbmctd2l0aC1ncmFhbHZtLWFuZC1zYnQuanBnXCIsXG5cdFwiLi9pbWFnZXMvY2FtdW5kYS1yaXNpbmcucG5nXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL2NhbXVuZGEtcmlzaW5nLnBuZ1wiLFxuXHRcIi4vaW1hZ2VzL2NhbXVuZGFfaW5mcmFzdHJ1Y3R1cmUucG5nXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL2NhbXVuZGFfaW5mcmFzdHJ1Y3R1cmUucG5nXCIsXG5cdFwiLi9pbWFnZXMvY2lyY3VsYXIuanBlZ1wiOiBcIi4vcHVibGljL2ltYWdlcy9jaXJjdWxhci5qcGVnXCIsXG5cdFwiLi9pbWFnZXMvY29hbHBsYW50LWdhbWVwbGF5Lm1wNFwiOiBcIi4vcHVibGljL2ltYWdlcy9jb2FscGxhbnQtZ2FtZXBsYXkubXA0XCIsXG5cdFwiLi9pbWFnZXMvY3lwcmVzcy1jb21wb25lbnQtZGVzaWduLXRlY2huaXF1ZS1mb3ItcmVhY3QtYXBwbGljYXRpb25zLnBuZ1wiOiBcIi4vcHVibGljL2ltYWdlcy9jeXByZXNzLWNvbXBvbmVudC1kZXNpZ24tdGVjaG5pcXVlLWZvci1yZWFjdC1hcHBsaWNhdGlvbnMucG5nXCIsXG5cdFwiLi9pbWFnZXMvZGFnc3Rlci1hcmNoaXRlY3R1cmUucG5nXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL2RhZ3N0ZXItYXJjaGl0ZWN0dXJlLnBuZ1wiLFxuXHRcIi4vaW1hZ2VzL2RhZ3N0ZXItY2ljZC5wbmdcIjogXCIuL3B1YmxpYy9pbWFnZXMvZGFnc3Rlci1jaWNkLnBuZ1wiLFxuXHRcIi4vaW1hZ2VzL2RhdGEtcHJpbmNlLWNoYXJtaW5nLmpwZ1wiOiBcIi4vcHVibGljL2ltYWdlcy9kYXRhLXByaW5jZS1jaGFybWluZy5qcGdcIixcblx0XCIuL2ltYWdlcy9ldGxwcm9jZXNzLnBuZ1wiOiBcIi4vcHVibGljL2ltYWdlcy9ldGxwcm9jZXNzLnBuZ1wiLFxuXHRcIi4vaW1hZ2VzL2ZsZXgtb25sb2dpYy1mYWN0b3ItMjAxLmpwZ1wiOiBcIi4vcHVibGljL2ltYWdlcy9mbGV4LW9ubG9naWMtZmFjdG9yLTIwMS5qcGdcIixcblx0XCIuL2ltYWdlcy9mbGV4LXdhbGxwYXBlci53ZWJwXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL2ZsZXgtd2FsbHBhcGVyLndlYnBcIixcblx0XCIuL2ltYWdlcy9mdWVsaW5nLXRoZS1lbmVyZ3ktdHJhbnNpdGlvbi13aXRoLXNwYXJrLXBhcnQtMS5qcGdcIjogXCIuL3B1YmxpYy9pbWFnZXMvZnVlbGluZy10aGUtZW5lcmd5LXRyYW5zaXRpb24td2l0aC1zcGFyay1wYXJ0LTEuanBnXCIsXG5cdFwiLi9pbWFnZXMvZnVsbC1nYW1lcGxheS5tcDRcIjogXCIuL3B1YmxpYy9pbWFnZXMvZnVsbC1nYW1lcGxheS5tcDRcIixcblx0XCIuL2ltYWdlcy9nYW1lLXN0YXJ0LXNjcmVlbi5wbmdcIjogXCIuL3B1YmxpYy9pbWFnZXMvZ2FtZS1zdGFydC1zY3JlZW4ucG5nXCIsXG5cdFwiLi9pbWFnZXMvZ3JlZW50ZWNoLWhhY2thdGhvbi9oZXJvLWhhY2stcGxhbmV0LmpwZ1wiOiBcIi4vcHVibGljL2ltYWdlcy9ncmVlbnRlY2gtaGFja2F0aG9uL2hlcm8taGFjay1wbGFuZXQuanBnXCIsXG5cdFwiLi9pbWFnZXMvZ3JlZW50ZWNoLWhhY2thdGhvbi9oZXJvLXRvcC1kdXRjaC1zb2xhci1yYWNpbmcuanBnXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL2dyZWVudGVjaC1oYWNrYXRob24vaGVyby10b3AtZHV0Y2gtc29sYXItcmFjaW5nLmpwZ1wiLFxuXHRcIi4vaW1hZ2VzL2dyZWVudGVjaC1oYWNrYXRob24vaGVyby5qcGdcIjogXCIuL3B1YmxpYy9pbWFnZXMvZ3JlZW50ZWNoLWhhY2thdGhvbi9oZXJvLmpwZz9kNzZjXCIsXG5cdFwiLi9pbWFnZXMvZ3JlZW50ZWNoLWhhY2thdGhvbi9sb2dvLWV2LWV4cGVyaWVuY2UuanBnXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL2dyZWVudGVjaC1oYWNrYXRob24vbG9nby1ldi1leHBlcmllbmNlLmpwZ1wiLFxuXHRcIi4vaW1hZ2VzL2dyZWVudGVjaC1oYWNrYXRob24vbG9nby1mZWx5eC5qcGdcIjogXCIuL3B1YmxpYy9pbWFnZXMvZ3JlZW50ZWNoLWhhY2thdGhvbi9sb2dvLWZlbHl4LmpwZ1wiLFxuXHRcIi4vaW1hZ2VzL2dyZWVudGVjaC1oYWNrYXRob24vbG9nby1oYWNrLXBsYW5ldC5qcGdcIjogXCIuL3B1YmxpYy9pbWFnZXMvZ3JlZW50ZWNoLWhhY2thdGhvbi9sb2dvLWhhY2stcGxhbmV0LmpwZ1wiLFxuXHRcIi4vaW1hZ2VzL2dyZWVudGVjaC1oYWNrYXRob24vbG9nby1rbGltYWF0cm91dGUuanBnXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL2dyZWVudGVjaC1oYWNrYXRob24vbG9nby1rbGltYWF0cm91dGUuanBnXCIsXG5cdFwiLi9pbWFnZXMvZ3JlZW50ZWNoLWhhY2thdGhvbi9sb2dvLXRvcC1kdXRjaC1zb2xhci5qcGdcIjogXCIuL3B1YmxpYy9pbWFnZXMvZ3JlZW50ZWNoLWhhY2thdGhvbi9sb2dvLXRvcC1kdXRjaC1zb2xhci5qcGdcIixcblx0XCIuL2ltYWdlcy9ncmVlbnRlY2gtaGFja2F0aG9uL2xvZ28tdmFuZGVicm9uLmpwZ1wiOiBcIi4vcHVibGljL2ltYWdlcy9ncmVlbnRlY2gtaGFja2F0aG9uL2xvZ28tdmFuZGVicm9uLmpwZ1wiLFxuXHRcIi4vaW1hZ2VzL2hlYXJ0LWJyZWFraW5nLmpwZ1wiOiBcIi4vcHVibGljL2ltYWdlcy9oZWFydC1icmVha2luZy5qcGdcIixcblx0XCIuL2ltYWdlcy9oZXJvLmpwZ1wiOiBcIi4vcHVibGljL2ltYWdlcy9oZXJvLmpwZ1wiLFxuXHRcIi4vaW1hZ2VzL2luc2VydC1wZXJmLWRhdGFiYXNlLmpwZ1wiOiBcIi4vcHVibGljL2ltYWdlcy9pbnNlcnQtcGVyZi1kYXRhYmFzZS5qcGdcIixcblx0XCIuL2ltYWdlcy9rZXljbG9ha19hdWQucG5nXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL2tleWNsb2FrX2F1ZC5wbmdcIixcblx0XCIuL2ltYWdlcy9sYXNhZ25vbGkucG5nXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL2xhc2Fnbm9saS5wbmdcIixcblx0XCIuL2ltYWdlcy9sb29raW5nLWJhY2stYXQtdmFuZGVicm9uLWdyZWVudGVjaC1oYWNrYXRob24tMjAyMS5wbmdcIjogXCIuL3B1YmxpYy9pbWFnZXMvbG9va2luZy1iYWNrLWF0LXZhbmRlYnJvbi1ncmVlbnRlY2gtaGFja2F0aG9uLTIwMjEucG5nXCIsXG5cdFwiLi9pbWFnZXMvbWlncmF0aW5nLWRjb3Mta3ViZXJuZXRlcy1sNGxiLmpwZ1wiOiBcIi4vcHVibGljL2ltYWdlcy9taWdyYXRpbmctZGNvcy1rdWJlcm5ldGVzLWw0bGIuanBnXCIsXG5cdFwiLi9pbWFnZXMvbW9ub2xpdGgud2VicFwiOiBcIi4vcHVibGljL2ltYWdlcy9tb25vbGl0aC53ZWJwXCIsXG5cdFwiLi9pbWFnZXMvb3B0aW1pemluZy1jb252ZXJ0aW5nLWFuZC1leHBvcnRpbmctc3ZnLWljb25zLWluLXJlYWN0LmpwZ1wiOiBcIi4vcHVibGljL2ltYWdlcy9vcHRpbWl6aW5nLWNvbnZlcnRpbmctYW5kLWV4cG9ydGluZy1zdmctaWNvbnMtaW4tcmVhY3QuanBnXCIsXG5cdFwiLi9pbWFnZXMvcGxheV9wcmVzZW50YXRpb24ud2VicFwiOiBcIi4vcHVibGljL2ltYWdlcy9wbGF5X3ByZXNlbnRhdGlvbi53ZWJwXCIsXG5cdFwiLi9pbWFnZXMvcG93ZXItcmVndWxhci1oYWNrYXRob25zLnBuZ1wiOiBcIi4vcHVibGljL2ltYWdlcy9wb3dlci1yZWd1bGFyLWhhY2thdGhvbnMucG5nXCIsXG5cdFwiLi9pbWFnZXMvcXVlcnktcGVyZi1kYXRhYmFzZS5qcGdcIjogXCIuL3B1YmxpYy9pbWFnZXMvcXVlcnktcGVyZi1kYXRhYmFzZS5qcGdcIixcblx0XCIuL2ltYWdlcy9yZW1peC1taWdyYXRpb24tYWRyLW9wdGlvbnMtY29uc2lkZXJlZC5wbmdcIjogXCIuL3B1YmxpYy9pbWFnZXMvcmVtaXgtbWlncmF0aW9uLWFkci1vcHRpb25zLWNvbnNpZGVyZWQucG5nXCIsXG5cdFwiLi9pbWFnZXMvcmVtaXgtbWlncmF0aW9uLW1vY2tpbmctYS13aW5kb3cucG5nXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL3JlbWl4LW1pZ3JhdGlvbi1tb2NraW5nLWEtd2luZG93LnBuZ1wiLFxuXHRcIi4vaW1hZ2VzL3JlbWl4LW1pZ3JhdGlvbi1yZW1peC12cy1uZXh0anMucG5nXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL3JlbWl4LW1pZ3JhdGlvbi1yZW1peC12cy1uZXh0anMucG5nXCIsXG5cdFwiLi9pbWFnZXMvcmVtaXgtbWlncmF0aW9uLXNvanMtZnJhbWV3b3JrLXBvc2l0aXZpdHkucG5nXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL3JlbWl4LW1pZ3JhdGlvbi1zb2pzLWZyYW1ld29yay1wb3NpdGl2aXR5LnBuZ1wiLFxuXHRcIi4vaW1hZ2VzL3JlbWl4LW1pZ3JhdGlvbi11Z2x5LXdpbmRvdy1tb2NrLnBuZ1wiOiBcIi4vcHVibGljL2ltYWdlcy9yZW1peC1taWdyYXRpb24tdWdseS13aW5kb3ctbW9jay5wbmdcIixcblx0XCIuL2ltYWdlcy9yZW1peC1taWdyYXRpb24tdmVnYW4tcGl6emEtc2hvcC5wbmdcIjogXCIuL3B1YmxpYy9pbWFnZXMvcmVtaXgtbWlncmF0aW9uLXZlZ2FuLXBpenphLXNob3AucG5nXCIsXG5cdFwiLi9pbWFnZXMvc2NoZW1hdGljX2RhdGFfbGF5ZXJzLmpwZ1wiOiBcIi4vcHVibGljL2ltYWdlcy9zY2hlbWF0aWNfZGF0YV9sYXllcnMuanBnXCIsXG5cdFwiLi9pbWFnZXMvc2NoZW1hdGljX2RhdGFfcHJvZHVjdC5qcGdcIjogXCIuL3B1YmxpYy9pbWFnZXMvc2NoZW1hdGljX2RhdGFfcHJvZHVjdC5qcGdcIixcblx0XCIuL2ltYWdlcy9zZWFzb25zLm1wNFwiOiBcIi4vcHVibGljL2ltYWdlcy9zZWFzb25zLm1wNFwiLFxuXHRcIi4vaW1hZ2VzL3NlbGZfc2VydmljZS5qcGdcIjogXCIuL3B1YmxpYy9pbWFnZXMvc2VsZl9zZXJ2aWNlLmpwZ1wiLFxuXHRcIi4vaW1hZ2VzL3Nub3dmbGFrZV9hdXRoX2NvbmYucG5nXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL3Nub3dmbGFrZV9hdXRoX2NvbmYucG5nXCIsXG5cdFwiLi9pbWFnZXMvc25vd2ZsYWtlX2tleWNsb2FrLmpwZ1wiOiBcIi4vcHVibGljL2ltYWdlcy9zbm93Zmxha2Vfa2V5Y2xvYWsuanBnXCIsXG5cdFwiLi9pbWFnZXMvc29hcC5qcGdcIjogXCIuL3B1YmxpYy9pbWFnZXMvc29hcC5qcGdcIixcblx0XCIuL2ltYWdlcy9zcGFyay1jbHVzdGVyLW92ZXJ2aWV3LnBuZ1wiOiBcIi4vcHVibGljL2ltYWdlcy9zcGFyay1jbHVzdGVyLW92ZXJ2aWV3LnBuZ1wiLFxuXHRcIi4vaW1hZ2VzL3NwYXJrYXBpaGlzdG9yeS5wbmdcIjogXCIuL3B1YmxpYy9pbWFnZXMvc3BhcmthcGloaXN0b3J5LnBuZ1wiLFxuXHRcIi4vaW1hZ2VzL3NwaW4tdXAta3ViZXJuZXRlcy1vbi1tYWNib29rLmpwZ1wiOiBcIi4vcHVibGljL2ltYWdlcy9zcGluLXVwLWt1YmVybmV0ZXMtb24tbWFjYm9vay5qcGdcIixcblx0XCIuL2ltYWdlcy9zdGVwLWZ1bmN0aW9ucy53ZWJwXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL3N0ZXAtZnVuY3Rpb25zLndlYnBcIixcblx0XCIuL2ltYWdlcy90ZWNobm9sb2d5LWJsYWNrLTEucG5nXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL3RlY2hub2xvZ3ktYmxhY2stMS5wbmdcIixcblx0XCIuL2ltYWdlcy90ZWNobm9sb2d5LWJsYWNrLTIucG5nXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL3RlY2hub2xvZ3ktYmxhY2stMi5wbmdcIixcblx0XCIuL2ltYWdlcy90ZWNobm9sb2d5LWJsYWNrLTMucG5nXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL3RlY2hub2xvZ3ktYmxhY2stMy5wbmdcIixcblx0XCIuL2ltYWdlcy90ZWNobm9sb2d5LXdoaXRlLTEucG5nXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL3RlY2hub2xvZ3ktd2hpdGUtMS5wbmdcIixcblx0XCIuL2ltYWdlcy90ZWNobm9sb2d5LXdoaXRlLTIucG5nXCI6IFwiLi9wdWJsaWMvaW1hZ2VzL3RlY2hub2xvZ3ktd2hpdGUtMi5wbmdcIixcblx0XCIuL2ltYWdlcy93aGVuLW5vdC10by1idWlsZC1hLXJldXNhYmxlLWNvbXBvbmVudC1saWJyYXJ5LmpwZ1wiOiBcIi4vcHVibGljL2ltYWdlcy93aGVuLW5vdC10by1idWlsZC1hLXJldXNhYmxlLWNvbXBvbmVudC1saWJyYXJ5LmpwZ1wiLFxuXHRcIi4vcG9zdHMvYXV0aGVudGljYXRlLXNub3dmbGFrZS1yZXN0LWFwaS11c2luZy1rZXljbG9hay5tZFwiOiBcIi4vcHVibGljL3Bvc3RzL2F1dGhlbnRpY2F0ZS1zbm93Zmxha2UtcmVzdC1hcGktdXNpbmcta2V5Y2xvYWsubWRcIixcblx0XCIuL3Bvc3RzL2JhY2stdG8tdGhlLW1vbm9saXRoLm1kXCI6IFwiLi9wdWJsaWMvcG9zdHMvYmFjay10by10aGUtbW9ub2xpdGgubWRcIixcblx0XCIuL3Bvc3RzL2JhbGFuY2luZy1kdXRjaC1lbmVyZ3ktZ3JpZC13aXRoLWZsZXgtc2VydmljZXMubWRcIjogXCIuL3B1YmxpYy9wb3N0cy9iYWxhbmNpbmctZHV0Y2gtZW5lcmd5LWdyaWQtd2l0aC1mbGV4LXNlcnZpY2VzLm1kXCIsXG5cdFwiLi9wb3N0cy9idWlsZGluZy1uYXRpdmUtaW1hZ2VzLWFuZC1jb21waWxpbmctd2l0aC1ncmFhbHZtLWFuZC1zYnQubWRcIjogXCIuL3B1YmxpYy9wb3N0cy9idWlsZGluZy1uYXRpdmUtaW1hZ2VzLWFuZC1jb21waWxpbmctd2l0aC1ncmFhbHZtLWFuZC1zYnQubWRcIixcblx0XCIuL3Bvc3RzL2Nhc3NhbmRyYS1pdHMtbm90LXlvdS1pdHMtdXMubWRcIjogXCIuL3B1YmxpYy9wb3N0cy9jYXNzYW5kcmEtaXRzLW5vdC15b3UtaXRzLXVzLm1kXCIsXG5cdFwiLi9wb3N0cy9jaG9vc2luZy1yZW1peC1hcy1hbi1zc3ItZnJhbWV3b3JrLm1kXCI6IFwiLi9wdWJsaWMvcG9zdHMvY2hvb3NpbmctcmVtaXgtYXMtYW4tc3NyLWZyYW1ld29yay5tZFwiLFxuXHRcIi4vcG9zdHMvY2ljZC1kYWdzdGVyLXVzZXItY29kZS5tZFwiOiBcIi4vcHVibGljL3Bvc3RzL2NpY2QtZGFnc3Rlci11c2VyLWNvZGUubWRcIixcblx0XCIuL3Bvc3RzL2NyZWF0aW5nX2Ffc2VsZi1zZXJ2aWNlX2RhdGFfbW9kZWwubWRcIjogXCIuL3B1YmxpYy9wb3N0cy9jcmVhdGluZ19hX3NlbGYtc2VydmljZV9kYXRhX21vZGVsLm1kXCIsXG5cdFwiLi9wb3N0cy9jeXByZXNzLWNvbXBvbmVudC1kZXNpZ24tdGVjaG5pcXVlLWZvci1yZWFjdC1hcHBsaWNhdGlvbnMubWRcIjogXCIuL3B1YmxpYy9wb3N0cy9jeXByZXNzLWNvbXBvbmVudC1kZXNpZ24tdGVjaG5pcXVlLWZvci1yZWFjdC1hcHBsaWNhdGlvbnMubWRcIixcblx0XCIuL3Bvc3RzL2Z1ZWxpbmctdGhlLWVuZXJneS10cmFuc2l0aW9uLXdpdGgtc3BhcmstcGFydC0xLm1kXCI6IFwiLi9wdWJsaWMvcG9zdHMvZnVlbGluZy10aGUtZW5lcmd5LXRyYW5zaXRpb24td2l0aC1zcGFyay1wYXJ0LTEubWRcIixcblx0XCIuL3Bvc3RzL2hvdy10by1zaWduLXNvYXAtbWVzc2FnZXMubWRcIjogXCIuL3B1YmxpYy9wb3N0cy9ob3ctdG8tc2lnbi1zb2FwLW1lc3NhZ2VzLm1kXCIsXG5cdFwiLi9wb3N0cy9sb29raW5nLWJhY2stYXQtdmFuZGVicm9uLWdyZWVudGVjaC1oYWNrYXRob24tMjAyMS5tZFwiOiBcIi4vcHVibGljL3Bvc3RzL2xvb2tpbmctYmFjay1hdC12YW5kZWJyb24tZ3JlZW50ZWNoLWhhY2thdGhvbi0yMDIxLm1kXCIsXG5cdFwiLi9wb3N0cy9taWdyYXRpbmctZGNvcy1rdWJlcm5ldGVzLWw0bGIubWRcIjogXCIuL3B1YmxpYy9wb3N0cy9taWdyYXRpbmctZGNvcy1rdWJlcm5ldGVzLWw0bGIubWRcIixcblx0XCIuL3Bvc3RzL29wdGltaXppbmctY29udmVydGluZy1hbmQtZXhwb3J0aW5nLXN2Zy1pY29ucy1pbi1yZWFjdC5tZFwiOiBcIi4vcHVibGljL3Bvc3RzL29wdGltaXppbmctY29udmVydGluZy1hbmQtZXhwb3J0aW5nLXN2Zy1pY29ucy1pbi1yZWFjdC5tZFwiLFxuXHRcIi4vcG9zdHMvcG93ZXItcmVndWxhci1oYWNrYXRob25zLm1kXCI6IFwiLi9wdWJsaWMvcG9zdHMvcG93ZXItcmVndWxhci1oYWNrYXRob25zLm1kXCIsXG5cdFwiLi9wb3N0cy9zYWxlc2ZvcmNlLWNhbXVuZGEtYnBtLW1pZ3JhdGlvbi5tZFwiOiBcIi4vcHVibGljL3Bvc3RzL3NhbGVzZm9yY2UtY2FtdW5kYS1icG0tbWlncmF0aW9uLm1kXCIsXG5cdFwiLi9wb3N0cy9zcGluLXVwLWt1YmVybmV0ZXMtb24tbWFjYm9vay5tZFwiOiBcIi4vcHVibGljL3Bvc3RzL3NwaW4tdXAta3ViZXJuZXRlcy1vbi1tYWNib29rLm1kXCIsXG5cdFwiLi9wb3N0cy9zdXN0YWluYWJsZS10ZWNoLWhhcmR3YXJlLm1kXCI6IFwiLi9wdWJsaWMvcG9zdHMvc3VzdGFpbmFibGUtdGVjaC1oYXJkd2FyZS5tZFwiLFxuXHRcIi4vcG9zdHMvdGhlLWRpZmZlcmVuY2UtYmV0d2Vlbi1hLWNvbXBvbmVudC1saWJyYXJ5LWFuZC1hLWRlc2lnbi1zeXN0ZW0ubWRcIjogXCIuL3B1YmxpYy9wb3N0cy90aGUtZGlmZmVyZW5jZS1iZXR3ZWVuLWEtY29tcG9uZW50LWxpYnJhcnktYW5kLWEtZGVzaWduLXN5c3RlbS5tZFwiLFxuXHRcIi4vcG9zdHMvdmFuZGVicm9uLXRoZS12aWRlby1nYW1lLm1kXCI6IFwiLi9wdWJsaWMvcG9zdHMvdmFuZGVicm9uLXRoZS12aWRlby1nYW1lLm1kXCIsXG5cdFwiLi9wb3N0cy93aGVuLW5vdC10by1idWlsZC1hLXJldXNhYmxlLWNvbXBvbmVudC1saWJyYXJ5Lm1kXCI6IFwiLi9wdWJsaWMvcG9zdHMvd2hlbi1ub3QtdG8tYnVpbGQtYS1yZXVzYWJsZS1jb21wb25lbnQtbGlicmFyeS5tZFwiLFxuXHRcIi4vcnNzLnhtbFwiOiBcIi4vcHVibGljL3Jzcy54bWxcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi9wdWJsaWMgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKiRcIjsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./public sync recursive ^\\.\\/.*$\n"); - -/***/ }), - -/***/ "./public/images/replacing-app-center-adr.png": -false, - -/***/ "./public/images/replacing-app-center-building-a-phone.jpg": -false, - -/***/ "./public/images/replacing-app-center-run-workflow.png": -false, - -/***/ "./public/posts/replacing-app-center.md": -false - -}) \ No newline at end of file diff --git a/_next/static/webpack/pages/blog/[slug].706cc8477ff71d2c99f9.hot-update.js b/_next/static/webpack/pages/blog/[slug].706cc8477ff71d2c99f9.hot-update.js deleted file mode 100644 index 8e1f2c26e..000000000 --- a/_next/static/webpack/pages/blog/[slug].706cc8477ff71d2c99f9.hot-update.js +++ /dev/null @@ -1,15 +0,0 @@ -webpackHotUpdate_N_E("pages/blog/[slug]",{ - -/***/ "./components/Markdown.jsx": -/*!*********************************!*\ - !*** ./components/Markdown.jsx ***! - \*********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(module) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Markdown; });\n/* harmony import */ var _Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/esm/defineProperty */ \"./node_modules/next/node_modules/@babel/runtime/helpers/esm/defineProperty.js\");\n/* harmony import */ var _Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties */ \"./node_modules/next/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var _Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/next/node_modules/@babel/runtime/helpers/esm/extends */ \"./node_modules/next/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var react_markdown__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-markdown */ \"./node_modules/react-markdown/src/react-markdown.js\");\n/* harmony import */ var react_markdown__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_markdown__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @vandebron/windmolen */ \"./node_modules/@vandebron/windmolen/dist/index.js\");\n/* harmony import */ var _vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var react_syntax_highlighter__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-syntax-highlighter */ \"./node_modules/react-syntax-highlighter/dist/esm/index.js\");\n/* harmony import */ var react_syntax_highlighter_dist_cjs_styles_prism__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react-syntax-highlighter/dist/cjs/styles/prism */ \"./node_modules/react-syntax-highlighter/dist/cjs/styles/prism/index.js\");\n/* harmony import */ var react_syntax_highlighter_dist_cjs_styles_prism__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react_syntax_highlighter_dist_cjs_styles_prism__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var rehype_raw__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! rehype-raw */ \"./node_modules/rehype-raw/index.js\");\n/* harmony import */ var rehype_raw__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(rehype_raw__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var remark_gfm__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! remark-gfm */ \"./node_modules/remark-gfm/index.js\");\n/* harmony import */ var remark_gfm__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(remark_gfm__WEBPACK_IMPORTED_MODULE_9__);\n\n\n\nvar _jsxFileName = \"/Users/john.fisher/workspace/vandebron/tech-blog/components/Markdown.jsx\";\n\nvar __jsx = react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement;\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\n\n\n\n\n\n\nfunction Markdown(_ref) {\n var _this = this;\n\n var children = _ref.children;\n return __jsx(react_markdown__WEBPACK_IMPORTED_MODULE_4___default.a, {\n children: children,\n rehypePlugins: [rehype_raw__WEBPACK_IMPORTED_MODULE_8___default.a, remark_gfm__WEBPACK_IMPORTED_MODULE_9___default.a],\n components: {\n hr: react__WEBPACK_IMPORTED_MODULE_3___default.a.Fragment,\n h1: function h1(_ref2) {\n var children = _ref2.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"H1\"], {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 16,\n columnNumber: 28\n }\n }, children);\n },\n h2: function h2(_ref3) {\n var children = _ref3.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"H2\"], {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 19,\n columnNumber: 28\n }\n }, children);\n },\n h3: function h3(_ref4) {\n var children = _ref4.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"H3\"], {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 22,\n columnNumber: 28\n }\n }, children);\n },\n h4: function h4(_ref5) {\n var children = _ref5.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"H4\"], {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 25,\n columnNumber: 28\n }\n }, children);\n },\n h5: function h5(_ref6) {\n var children = _ref6.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"H5\"], {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 28,\n columnNumber: 28\n }\n }, children);\n },\n p: function p(props) {\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Paragraph\"], Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, props, {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 30,\n columnNumber: 31\n }\n }));\n },\n ol: function ol(_ref7) {\n var children = _ref7.children;\n return __jsx(\"ol\", {\n style: {\n marginBlockStart: 0,\n marginBlockEnd: 30\n },\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 32,\n columnNumber: 21\n }\n }, children);\n },\n ul: function ul(_ref8) {\n var children = _ref8.children;\n return __jsx(\"ol\", {\n style: {\n marginBlockStart: 0,\n marginBlockEnd: 30\n },\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 37,\n columnNumber: 21\n }\n }, children);\n },\n li: function li(_ref9) {\n var children = _ref9.children;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Paragraph\"], {\n as: \"li\",\n style: {\n marginBottom: 0\n },\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 42,\n columnNumber: 21\n }\n }, children);\n },\n a: function a(_ref10) {\n var children = _ref10.children,\n props = Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_ref10, [\"children\"]);\n\n return __jsx(\"a\", Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, props, {\n style: {\n color: \"inherit\"\n },\n target: 'target' in props || props['href'].includes('#') ? undefined : '_blank',\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 47,\n columnNumber: 22\n }\n }), children);\n },\n code: function code(_ref11) {\n var node = _ref11.node,\n inline = _ref11.inline,\n className = _ref11.className,\n children = _ref11.children,\n props = Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_ref11, [\"node\", \"inline\", \"className\", \"children\"]);\n\n var match = /language-(\\w+)/.exec(className || '');\n return !inline && match ? __jsx(react_syntax_highlighter__WEBPACK_IMPORTED_MODULE_6__[\"PrismAsync\"], Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({\n style: react_syntax_highlighter_dist_cjs_styles_prism__WEBPACK_IMPORTED_MODULE_7__[\"okaidia\"],\n language: match[1],\n PreTag: \"div\",\n children: String(children).replace(/\\n$/, '')\n }, props, {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 55,\n columnNumber: 25\n }\n })) : __jsx(\"code\", Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({\n className: className\n }, props, {\n style: {\n background: \"rgb(0,0,0, 0.1)\",\n padding: \"2px 4px\",\n fontSize: \"80%\",\n color: \"#000\"\n },\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 58,\n columnNumber: 25\n }\n }), children);\n },\n img: function img(_ref12) {\n var src = _ref12.src,\n alt = _ref12.alt,\n props = Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_ref12, [\"src\", \"alt\"]);\n\n return __jsx(\"img\", Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({\n src: src,\n alt: alt,\n style: {\n width: \"100%\"\n }\n }, props, {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 68,\n columnNumber: 49\n }\n }));\n },\n table: function table(_ref13) {\n var children = _ref13.children,\n className = _ref13.className;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Table\"], {\n tableStyle: \"solid-borders\",\n className: className,\n style: {\n 'borderCollapse': 'collapse',\n 'marginBottom': '5%',\n 'fontSize': '18px',\n 'border': 'none'\n },\n align: \"center\",\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 71,\n columnNumber: 25\n }\n }, children);\n },\n thead: function thead(_ref14) {\n var children = _ref14.children,\n style = _ref14.style;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Table\"].Thead, {\n style: _objectSpread({\n 'color': 'black'\n }, style),\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 82,\n columnNumber: 48\n }\n }, children);\n },\n tbody: function tbody(_ref15) {\n var children = _ref15.children,\n style = _ref15.style;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Table\"].Tbody, {\n style: style,\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 83,\n columnNumber: 48\n }\n }, children);\n },\n tr: function tr(_ref16) {\n var children = _ref16.children,\n style = _ref16.style;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Table\"].Row, {\n style: _objectSpread({}, style),\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 84,\n columnNumber: 45\n }\n }, children);\n },\n td: function td(_ref17) {\n var children = _ref17.children,\n style = _ref17.style,\n rest = Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_ref17, [\"children\", \"style\"]);\n\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Table\"].Cell, Object(_Users_john_fisher_workspace_vandebron_tech_blog_node_modules_next_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, rest, {\n style: style,\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 85,\n columnNumber: 54\n }\n }), children);\n },\n th: function th(_ref18) {\n var children = _ref18.children,\n style = _ref18.style;\n return __jsx(_vandebron_windmolen__WEBPACK_IMPORTED_MODULE_5__[\"Table\"].Cell, {\n style: style,\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 86,\n columnNumber: 45\n }\n }, children);\n }\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 10,\n columnNumber: 9\n }\n });\n}\n_c = Markdown;\n\nvar _c;\n\n$RefreshReg$(_c, \"Markdown\");\n\n;\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n var currentExports = module.__proto__.exports;\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.i);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = currentExports;\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevExports !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node_modules/next/dist/compiled/webpack/harmony-module.js */ \"./node_modules/next/dist/compiled/webpack/harmony-module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vY29tcG9uZW50cy9NYXJrZG93bi5qc3g/ZTQ2OCJdLCJuYW1lcyI6WyJNYXJrZG93biIsImNoaWxkcmVuIiwicmVoeXBlUmF3IiwicmVtYXJrR2ZtIiwiaHIiLCJSZWFjdCIsIkZyYWdtZW50IiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsInAiLCJwcm9wcyIsIm9sIiwibWFyZ2luQmxvY2tTdGFydCIsIm1hcmdpbkJsb2NrRW5kIiwidWwiLCJsaSIsIm1hcmdpbkJvdHRvbSIsImEiLCJjb2xvciIsImluY2x1ZGVzIiwidW5kZWZpbmVkIiwiY29kZSIsIm5vZGUiLCJpbmxpbmUiLCJjbGFzc05hbWUiLCJtYXRjaCIsImV4ZWMiLCJva2FpZGlhIiwiU3RyaW5nIiwicmVwbGFjZSIsImJhY2tncm91bmQiLCJwYWRkaW5nIiwiZm9udFNpemUiLCJpbWciLCJzcmMiLCJhbHQiLCJ3aWR0aCIsInRhYmxlIiwidGhlYWQiLCJzdHlsZSIsInRib2R5IiwidHIiLCJ0ZCIsInJlc3QiLCJ0aCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFZSxTQUFTQSxRQUFULE9BQThCO0FBQUE7O0FBQUEsTUFBWEMsUUFBVyxRQUFYQSxRQUFXO0FBQ3pDLFNBQ0ksTUFBQyxxREFBRDtBQUNJLFlBQVEsRUFBRUEsUUFEZDtBQUVJLGlCQUFhLEVBQUUsQ0FBQ0MsaURBQUQsRUFBWUMsaURBQVosQ0FGbkI7QUFHSSxjQUFVLEVBQUU7QUFDUkMsUUFBRSxFQUFFQyw0Q0FBSyxDQUFDQyxRQURGO0FBRVJDLFFBQUUsRUFBRSxtQkFBZ0I7QUFBQSxZQUFkTixRQUFjLFNBQWRBLFFBQWM7QUFDaEIsZUFBTyxNQUFDLHVEQUFEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0FBS0EsUUFBTCxDQUFQO0FBQ0gsT0FKTztBQUtSTyxRQUFFLEVBQUUsbUJB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QUFBLFlBQXFDekMsUUFBckMsQ0FBakM7QUFBQSxPQXhFSTtBQXlFUjhDLFFBQUUsRUFBRTtBQUFBLFlBQUU5QyxRQUFGLFVBQUVBLFFBQUY7QUFBQSxZQUFZeUMsS0FBWixVQUFZQSxLQUFaO0FBQUEsZUFBd0IsTUFBQywwREFBRCxDQUFPLElBQVA7QUFBWSxlQUFLLEVBQUVBLEtBQW5CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0FBMkJ6QyxRQUEzQixDQUF4QjtBQUFBO0FBekVJLEtBSGhCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFESjtBQWtGSDtLQW5GdUJELFEiLCJmaWxlIjoiLi9jb21wb25lbnRzL01hcmtkb3duLmpzeC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdE1hcmtkb3duIGZyb20gXCJyZWFjdC1tYXJrZG93blwiO1xuaW1wb3J0IHsgSDEsIEgyLCBIMywgSDQsIEg1LCBUYWJsZSwgUGFyYWdyYXBoIH0gZnJvbSBcIkB2YW5kZWJyb24vd2luZG1vbGVuXCI7XG5pbXBvcnQgeyBQcmlzbUFzeW5jIGFzIFN5bnRheEhpZ2hsaWdodGVyIH0gZnJvbSBcInJlYWN0LXN5bnRheC1oaWdobGlnaHRlclwiO1xuaW1wb3J0IHsgb2thaWRpYSB9IGZyb20gXCJyZWFjdC1zeW50YXgtaGlnaGxpZ2h0ZXIvZGlzdC9janMvc3R5bGVzL3ByaXNtXCI7XG5pbXBvcnQgcmVoeXBlUmF3IGZyb20gJ3JlaHlwZS1yYXcnXG5pbXBvcnQgcmVtYXJrR2ZtIGZyb20gJ3JlbWFyay1nZm0nXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1hcmtkb3duKHtjaGlsZHJlbn0pIHtcbiAgICByZXR1cm4gKFxuICAgICAgICA8UmVhY3RNYXJrZG93blxuICAgICAgICAgICAgY2hpbGRyZW49e2NoaWxkcmVufVxuICAgICAgICAgICAgcmVoeXBlUGx1Z2lucz17W3JlaHlwZVJhdywgcmVtYXJrR2ZtXX1cbiAgICAgICAgICAgIGNvbXBvbmVudHM9e3tcbiAgICAgICAgICAgICAgICBocjogUmVhY3QuRnJhZ21lbnQsXG4gICAgICAgICAgICAgICAgaDE6ICh7Y2hpbGRyZW59KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA8SDE+e2NoaWxkcmVufTwvSDE+O1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaDI6ICh7Y2hpbGRyZW59KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA8SDI+e2NoaWxkcmVufTwvSDI+O1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaDM6ICh7Y2hpbGRyZW59KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA8SDM+e2NoaWxkcmVufTwvSDM+O1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaDQ6ICh7Y2hpbGRyZW59KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA8SDQ+e2NoaWxkcmVufTwvSDQ+O1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaDU6ICh7Y2hpbGRyZW59KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA8SDU+e2NoaWxkcmVufTwvSDU+O1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcDogKHByb3BzKSA9PiA8UGFyYWdyYXBoIHsuLi5wcm9wc30gLz4sXG4gICAgICAgICAgICAgICAgb2w6ICh7Y2hpbGRyZW59KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxvbCBzdHlsZT17e21hcmdpbkJsb2NrU3RhcnQ6IDAsIG1hcmdpbkJsb2NrRW5kOiAzMH19PlxuICAgICAgICAgICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgICA8L29sPlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgdWw6ICh7Y2hpbGRyZW59KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxvbCBzdHlsZT17e21hcmdpbkJsb2NrU3RhcnQ6IDAsIG1hcmdpbkJsb2NrRW5kOiAzMH19PlxuICAgICAgICAgICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgICA8L29sPlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgbGk6ICh7Y2hpbGRyZW59KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxQYXJhZ3JhcGggYXM9XCJsaVwiIHN0eWxlPXt7bWFyZ2luQm90dG9tOiAwfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgICAgICAgIDwvUGFyYWdyYXBoPlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYTogKHtjaGlsZHJlbiwgLi4ucHJvcHN9KSA9PlxuICAgICAgICAgICAgICAgICAgICAoPGEgey4uLnByb3BzfSBzdHlsZT17e2NvbG9yOiBcImluaGVyaXRcIn19XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9eyd0YXJnZXQnIGluIHByb3BzIHx8IHByb3BzWydocmVmJ10uaW5jbHVkZXMoJyMnKSA/IHVuZGVmaW5lZCA6ICdfYmxhbmsnfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgICAgICAgICAgPC9hPiksXG5cbiAgICAgICAgICAgICAgICBjb2RlOiAoe25vZGUsIGlubGluZSwgY2xhc3NOYW1lLCBjaGlsZHJlbiwgLi4ucHJvcHN9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gL2xhbmd1YWdlLShcXHcrKS8uZXhlYyhjbGFzc05hbWUgfHwgJycpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhaW5saW5lICYmIG1hdGNoID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFN5bnRheEhpZ2hsaWdodGVyIHN0eWxlPXtva2FpZGlhfSBsYW5ndWFnZT17bWF0Y2hbMV19IFByZVRhZz1cImRpdlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW49e1N0cmluZyhjaGlsZHJlbikucmVwbGFjZSgvXFxuJC8sICcnKX0gey4uLnByb3BzfSAvPlxuICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3NOYW1lPXtjbGFzc05hbWV9IHsuLi5wcm9wc30gc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBcInJnYigwLDAsMCwgMC4xKVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFwiMnB4IDRweFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBcIjgwJVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBcIiMwMDBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaW1nOiAoe3NyYywgYWx0LCAuLi5wcm9wc30pID0+ICg8aW1nIHNyYz17c3JjfSBhbHQ9e2FsdH0gc3R5bGU9e3t3aWR0aDogXCIxMDAlXCJ9fSB7Li4ucHJvcHN9Lz4pLFxuICAgICAgICAgICAgICAgIHRhYmxlOiAoe2NoaWxkcmVuLCBjbGFzc05hbWV9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGFibGUgdGFibGVTdHlsZT0nc29saWQtYm9yZGVycycgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlckNvbGxhcHNlJzogJ2NvbGxhcHNlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbkJvdHRvbSc6ICc1JScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb250U2l6ZSc6ICcxOHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlcic6ICdub25lJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ249J2NlbnRlcic+e2NoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZT5cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRoZWFkOiAoe2NoaWxkcmVuLCBzdHlsZX0pID0+ICg8VGFibGUuVGhlYWQgc3R5bGU9e3snY29sb3InOiAnYmxhY2snLCAuLi5zdHlsZX19PntjaGlsZHJlbn08L1RhYmxlLlRoZWFkPiksXG4gICAgICAgICAgICAgICAgdGJvZHk6ICh7Y2hpbGRyZW4sIHN0eWxlfSkgPT4gKDxUYWJsZS5UYm9keSBzdHlsZT17c3R5bGV9PntjaGlsZHJlbn08L1RhYmxlLlRib2R5PiksXG4gICAgICAgICAgICAgICAgdHI6ICh7Y2hpbGRyZW4sIHN0eWxlfSkgPT4gKDxUYWJsZS5Sb3cgc3R5bGU9e3suLi5zdHlsZX19PntjaGlsZHJlbn08L1RhYmxlLlJvdz4pLFxuICAgICAgICAgICAgICAgIHRkOiAoe2NoaWxkcmVuLCBzdHlsZSwgLi4ucmVzdH0pID0+ICg8VGFibGUuQ2VsbCB7Li4ucmVzdH0gc3R5bGU9e3N0eWxlfT57Y2hpbGRyZW59PC9UYWJsZS5DZWxsPiksXG4gICAgICAgICAgICAgICAgdGg6ICh7Y2hpbGRyZW4sIHN0eWxlfSkgPT4gKDxUYWJsZS5DZWxsIHN0eWxlPXtzdHlsZX0+e2NoaWxkcmVufTwvVGFibGUuQ2VsbD4pLFxuXG4gICAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./components/Markdown.jsx\n"); - -/***/ }) - -}) \ No newline at end of file diff --git a/_next/static/webpack/pages/blog/[slug].81eb14340a150ff28f41.hot-update.js b/_next/static/webpack/pages/blog/[slug].81eb14340a150ff28f41.hot-update.js deleted file mode 100644 index 643f7b240..000000000 --- a/_next/static/webpack/pages/blog/[slug].81eb14340a150ff28f41.hot-update.js +++ /dev/null @@ -1,14 +0,0 @@ -webpackHotUpdate_N_E("pages/blog/[slug]",{ - -/***/ "./public/posts/replacing-app-center.md": -/*!**********************************************!*\ - !*** ./public/posts/replacing-app-center.md ***! - \**********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("throw new Error(\"Module parse failed: Assigning to rvalue (1:2)\\nYou may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders\\n> ---\\n| title: Replacing App Center with GitHub Actions\\n| description: App Center is closing up shop on March 31st, 2025. So what's the plan for building mobile apps at Vandebron?\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiIuL3B1YmxpYy9wb3N0cy9yZXBsYWNpbmctYXBwLWNlbnRlci5tZC5qcyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./public/posts/replacing-app-center.md\n"); - -/***/ }) - -}) \ No newline at end of file diff --git a/about.html b/about.html index 5260023a6..560727457 100644 --- a/about.html +++ b/about.html @@ -1,9 +1,9 @@ <!DOCTYPE html><html lang="en"><head><script async="" src="https://www.google-analytics.com/analytics.js"></script><link rel="stylesheet" href="https://d381m57et8llfk.cloudfront.net/20210128-6054/static/css/dc7f55cf12b36887a247.fonts.css"/><script>window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date; ga('create', 'UA-49472651-19', { 'storage': 'none' }); - ga('send', 'pageview');</script><script src="https://unpkg.com/react-bootstrap@next/dist/react-bootstrap.min.js" crossorigin="anonymous"></script><meta name="viewport" content="width=device-width"/><meta charSet="utf-8"/><title>About vandebron.tech

About Vandebron

About Vandebron

+ ga('send', 'pageview');About vandebron.tech

About Vandebron

About Vandebron

Our mission is clear

100% renewable energy as soon as possible

To provide truly sustainable, renewable energy, produced locally in the Netherlands and void from dubious compensation systems from shady origins. With this roaring mission Vandebron introduced itself to the energy market in 2014. A refreshing message which was welcomed with open arms. Today, over 200.000 households have chosen Vandebron as their energy supplier.

Since then, the energy market has changed. Simply producing and selling renewable energy proves to be no longer sufficient. With the growing share of sustainable energy on the grid, it is becoming increasingly important that customers can have access to sustainable energy 100% of the time. Even when the sun is not shining, or the wind is not blowing.

In this evolving energy market, the role of Vandebron shifts as well. No longer are we the rebel of the market; more and more are we becoming the guide. We are the first Dutch energy supplier evolving into an energy tech company, who will lead in smart innovations the energy transition so desperately needs.

-

100% renewable energy 100% of the time. That is the future.

 .tech
© Vandebron
\ No newline at end of file +

100% renewable energy 100% of the time. That is the future.

 .tech
© Vandebron
\ No newline at end of file diff --git a/blog/authenticate-snowflake-rest-api-using-keycloak.html b/blog/authenticate-snowflake-rest-api-using-keycloak.html index 8e4e0eda9..c3195e0a2 100644 --- a/blog/authenticate-snowflake-rest-api-using-keycloak.html +++ b/blog/authenticate-snowflake-rest-api-using-keycloak.html @@ -1,13 +1,13 @@ Authenticate Snowflake via Keycloak

Authenticate Snowflake via Keycloak

By Rosario Renga on 19 december 2023

Authenticate Snowflake rest api via Keycloak

+ ga('send', 'pageview');Authenticate Snowflake via Keycloak

Authenticate Snowflake via Keycloak

By Rosario Renga on 19 december 2023

Authenticate Snowflake rest api via Keycloak

Here in Vandebron we use Keycloak as our identity and access management (IAM) solution and Snowflake as our data warehousing platform. Keycloak is a powerful and extensible solution for managing user identities and access control, making it a popular choice for organizations seeking a comprehensive and open-source IAM platform. Snowflake is designed to handle and analyze large volumes of data with speed and efficiency. It is known for its scalability, flexibility, and ease of use in managing and analyzing diverse and massive datasets.

-

Accessing Snowflake data via Rest API

+

Accessing Snowflake data via Rest API

There are several ways to access data in Snowflake one of these are the Snowflake rest api, they are a comprehensive set of REST APIs for managing and interacting with various aspects of the Snowflake Data Cloud, including account management, data loading, querying, and more. These REST APIs allow developers to programmatically perform tasks such as executing SQL queries, managing virtual warehouses, and administering user roles. They are designed to enable automation and integration with other applications and services.

-

Why via Rest Api?

+

Why via Rest Api?

The Snowflake SQL API is a REST API that you can use to access and update data in a Snowflake database. You can use this API to develop custom applications and integrations that can perform most of the queries you need. More info here: Snowflake rest api

We decided to connect our microservices to snowflake via rest api mainly because we consider this mechanism the best way to decouple database processing with backend processing in fact the queries issued via the endpoint are processed inside Snowflake ecosystem asynchronously.

The service can poll snowflake to monitor the request until it is completed. See Sql api response .

@@ -17,10 +17,10 @@

Why via Rest Api?No Additional spark connectors
  • Since there is no way to run snowflake on a local machine unit test a snowflake connection would have been very hard ( impossible ). With Rest api communication we can unit test snowflake api client using contract test. ( one way contract test is better than nothing )
  • -

    Snowflake Authentication

    +

    Snowflake Authentication

    Snowflake provides a convenient way to authenticate to it using “any” OAuth authentication server. Our authentication server is Keycloak so in the following sections you will learn how to integrate Keycloak with Snowflake. Resources to this topic can be found here auth-ext-overview and here: oauth-ext-custom

    -

    Keycloak side

    +

    Keycloak side

    You need to configure your client to return in the JWT access token the following claims:

    { "aud": "<audience_url>", @@ -45,7 +45,7 @@

    Keycloak side

    .... }

    The aud must contain only the snowflake login_name. For instance, a token such as the following will not work (multiple audiences):"aud": [ "batterypack-services-test", "account" ],

    -

    Snowflake side

    +

    Snowflake side

    How to find keycloak public key: stackoverflow Required: ACCOUNTADMIN rights in Snowflake. Example integration command:

    @@ -91,4 +91,4 @@

    Example

    Now you can follow the async operation to the following get endpoint:

    https://<my_snowflake_identifier>.eu-central-1.snowflakecomputing.com/api/v2/statements/01aafc80-3201-abed-0001-4a0e00e52816

    It will return 202 if the processing is still ongoing. It will return 200 and the actual result when processing ends.

    -

    Happy coding!

     .tech
    © Vandebron
    \ No newline at end of file +

    Happy coding!

     .tech
    © Vandebron
    \ No newline at end of file diff --git a/blog/back-to-the-monolith.html b/blog/back-to-the-monolith.html index 340205517..0bd4b2be2 100644 --- a/blog/back-to-the-monolith.html +++ b/blog/back-to-the-monolith.html @@ -1,6 +1,6 @@ So, back to the monolith it is then?

    So, back to the monolith it is then?

    By Sam Theisens on 20 mei 2023

    Amazon embraces the mighty monolith

    + ga('send', 'pageview');So, back to the monolith it is then?

    So, back to the monolith it is then?

    By Sam Theisens on 20 mei 2023

    Amazon embraces the mighty monolith

    image alt text

    In March 2023, Amazon published a blog post , detailing how they had managed to reduce the cost of their audio-video monitoring service by 90%. @@ -80,4 +80,4 @@

    Microservices at Va
    DangerMitigation
    A stagnating architectureCompile and unit-test time detection of breaking changes
    Complicated and error prone deploymentsModular CI/CD pipelines
    Team siloizationA single repository (AKA monorepo) for all microservices and a discussion platform for cross-domain and cross-team concerns
    Duplication of codeShared in house libraries for common functionality

    The following presentation to the students of VU University, Amsterdam explains how we implemented some of these mitigations and what we learned from them.

    -

    Presentation about micro services to students of VU Amsterdam

     .tech
    © Vandebron
    \ No newline at end of file +

    Presentation about micro services to students of VU Amsterdam

     .tech
    © Vandebron
    \ No newline at end of file diff --git a/blog/balancing-dutch-energy-grid-with-flex-services.html b/blog/balancing-dutch-energy-grid-with-flex-services.html index 3839b029f..5a3d90fc6 100644 --- a/blog/balancing-dutch-energy-grid-with-flex-services.html +++ b/blog/balancing-dutch-energy-grid-with-flex-services.html @@ -1,6 +1,6 @@ How Vandebron helps balancing the Dutch energy grid together with OnLogic & Talos Linux

    How Vandebron helps balancing the Dutch energy grid together with OnLogic & Talos Linux

    By Sietse Bruinsma & Tim van Druenen on 11 januari 2023

    Vandebron is a Dutch green-tech energy company on a mission to accelerate the transition to 100% renewable energy, 100% of the time. As part of our mission and strategy, we are constantly innovating and looking for ways to optimize energy operations and reduce negative impacts when it comes to energy production.

    + ga('send', 'pageview');How Vandebron helps balancing the Dutch energy grid together with OnLogic & Talos Linux

    How Vandebron helps balancing the Dutch energy grid together with OnLogic & Talos Linux

    By Sietse Bruinsma & Tim van Druenen on 11 januari 2023

    Vandebron is a Dutch green-tech energy company on a mission to accelerate the transition to 100% renewable energy, 100% of the time. As part of our mission and strategy, we are constantly innovating and looking for ways to optimize energy operations and reduce negative impacts when it comes to energy production.

    Our new mission: 100% renewable energy, 100% of the time

    The importance of curtailment and flexibility services

    One area where we are currently focusing our efforts is the area of curtailment and flexibility of wind turbines, solar parks, industrial batteries and electric vehicles. Curtailment refers to the practice of reducing the electricity inflow to balance the electricity grid. In other words, it involves adjusting the operation of, for example, a wind turbine in order to match the demand for electricity at any given time.

    @@ -11,4 +11,4 @@

    Our journey to find

    OnLogic Factor 201

    To ensure our gateway devices are secure and agile (like us, developers, 😛) we needed them to integrate well into our existing technology landscape based on Kubernetes. After struggling for some time to harden several (lightweight) operating systems and bootstrapping lightweight Kubernetes clusters our eyes fell on a new kid in town: ‘Talos Linux, the Kubernetes Operating system’ built by Sidero Labs. Again our predetermined wishlist was covered (even more), and what we got is a minimal OS tailored for Kubernetes, hardened, immutable and ephemeral out-of-the-box. Can you survive even more buzzwords than that?

    Until the present day though, they have fulfilled every promise made on their website. It initially didn’t work on our ARM CM4-based device from OnLogic. But after testing a lot together with their team (thank you!) the latest release (v1.3.0) officially supports our ARM devices. Ready for action! Right after the stable release the first batches were shipped and connected to the installations of our producers on the platform.

    -

    Overall, Vandebron's use of OnLogic's fabricated gateway devices running Talos Linux demonstrates the potential of IoT computing to drive innovation and sustainability in the renewable energy industry. By leveraging the power of these technologies combined, we are one step closer to achieving our goal of 100% renewable energy, 100% of the time. Care to join our mission? Look for open positions.

     .tech
    © Vandebron
    \ No newline at end of file +

    Overall, Vandebron's use of OnLogic's fabricated gateway devices running Talos Linux demonstrates the potential of IoT computing to drive innovation and sustainability in the renewable energy industry. By leveraging the power of these technologies combined, we are one step closer to achieving our goal of 100% renewable energy, 100% of the time. Care to join our mission? Look for open positions.

     .tech
    © Vandebron
    \ No newline at end of file diff --git a/blog/building-native-images-and-compiling-with-graalvm-and-sbt.html b/blog/building-native-images-and-compiling-with-graalvm-and-sbt.html index 4e30e9a2c..f53be9d1b 100644 --- a/blog/building-native-images-and-compiling-with-graalvm-and-sbt.html +++ b/blog/building-native-images-and-compiling-with-graalvm-and-sbt.html @@ -1,10 +1,10 @@ Building native images and compiling with GraalVM and sbt

    Building native images and compiling with GraalVM and sbt

    By Katrin Grunert on 6 oktober 2020

    At Vandebron we organize a two-day long Hackathon every quarter, and a colleague and I took this chance to dig into the wonderful world of GraalVM.

    + ga('send', 'pageview');Building native images and compiling with GraalVM and sbt

    Building native images and compiling with GraalVM and sbt

    By Katrin Grunert on 6 oktober 2020

    At Vandebron we organize a two-day long Hackathon every quarter, and a colleague and I took this chance to dig into the wonderful world of GraalVM.

    I've first heard of GraalVM around two years ago when Oleg Šelajev toured through Java User Groups in Germany and held talks about GraalVM. Here is one from 2019 (not Germany, but Spain this time).

    GraalVM promises a significant speedup in compile times and as I am working with Scala, which is notoriously known for its long compile times, this seems interesting. Furthermore, GraalVM provides functionality to build native executables. Meaning, an application can be run without a Java Virtual Machine (JVM).

    Thanks to the Hackathon I finally took the time to get to know GraalVM a bit better. With this blog post, I want to share our findings, experiences, and results, as they might be helpful for you too!

    -

    What is GraalVM?

    +

    What is GraalVM?

    GraalVM is a high-performance JVM that supports efficient ahead-of-time (AOT) and just-in-time (JIT) compilation, but also allows non-JVM languages (e.g. Ruby, Python, C++) to run on the JVM. The ahead-of-time compilation feature is the base for creating native executable programs, meaning an application can be run independently from the JVM. Seeing the versatile features of GraalVM, it is worth looking a bit under its hood.

    Actually, GraalVM is defined by three main technologies:

      @@ -14,7 +14,7 @@

      What is GraalVM?

      Our motivation for trying out GraalVM was tackling the pain points of Scala, Java projects, and microservices. Shipping microservices written in Scala as Docker containers to your production system comes with the cost that startup can be a bit slow, having JVM and Docker overhead, and that those containers can be fairly large, as the application can only be run with a JVM. See Building Docker images for more information.

      During the hackathon, we were most interested in building native images for Scala applications. Hoping to reduce the size of our docker containers and reducing up the startup time.

      -

      Project setup

      +

      Project setup

      The project we worked on during the Hackathon is an API that should be used for applicants to submit their applications at Vandebron in the future. By exposing one endpoint through which a resume and contact information can be submitted.

      It is also a good project to test out GraalVM, nothing too complex but also not as simple as "Hello World".

      The full setup can be found on Github. But I'll summarise the used stack below. The project is built around the following libraries, no particular reason, simply because I like them.

      @@ -38,7 +38,7 @@

      Project setup

      Response: "*confetti* Thanks for handing in your application, we will get back to you within the next days! *confetti*"
    -

    Setup GraalVM with sbt

    +

    Setup GraalVM with sbt

    With this initial project setup in mind, GraalVM needs to be installed locally.

    For the installation of GraalVM the setup guide can be followed.

    After the installation sbt needs to know that not the regular JDK/JVM is used. This can be done with the java-home option on sbt bootup. @@ -52,7 +52,7 @@

    Setup GraalVM with [info] ans: String = /Library/Java/JavaVirtualMachines/graalvm-ce-java8-20.1.0/Contents/Home/jre

    That means everything running in this sbt instance is getting compiled by GraalVM. Awesome!

    The next step is to become strong and independent and learn how to run without an underlying JVM with the help of building native images.

    -

    Building native images

    +

    Building native images

    GraalVM ships with the GraalVM Updater (gu) to install the native-image on your machine.

    $GRAALHOME/bin/gu install native-image

    sbt-native-packager provides functionality to build packages efficiently (e.g. building Docker images) and added to that, it also provides support for building native images. @@ -218,7 +218,7 @@

    Roundup

    Even without benchmarking, you notice that the startup time is way faster than with a traditional JAR-file and the application is up and running almost instantly.

    It is worth noting that the creation of a native image is a quite time-consuming process. For this project, it took between 1 and 2 minutes. This is, of course, something a CI/CD-Server like Jenkins would take care of but it has to be kept in mind.

    With a working native-image, it is time to dockerize.

    -

    Building Docker images

    +

    Building Docker images

    In this section two Docker containers will be built. One, following the "normal"-java way and the other will be using the native-image to build a Docker-container without Java.

    Before getting started with native images, a regular JAR-file and Docker image for comparison can be built.

    With the sbt-assembly plugin you can create JAR-files with all of its dependencies (fat JARs). @@ -266,14 +266,14 @@

    Building Docker ima apply-at-vdb 0.1.0-SNAPSHOT f488d4c06f28 555MB

    That is impressive! We created an app that is approx. 2.8 times smaller than our original app.

    -

    Summary

    +

    Summary

    We learned how to set up a Scala project with GraalVM, what steps have to be taken to build a native image with GraalVM, and let it run inside a Docker container. We also received a good overview of what's possible with GraalVM and what's not.

    The initial start and setup of GraalVM with sbt is pretty easy and straightforward. Getting GraalVM to compile an sbt project is nice and simple.

    This Hackathon showed us that it is difficult and requires a lot of fine-tuning to integrate GraalVM into an existing project or product. At Vandebron we work with a complex stack of technologies including Spark, Kafka, and Akka which made it difficult to port the findings from this small toy service to one of our existing microservices. This made extensive troubleshooting in the Hackathon not possible.

    All in all, GraalVM allows you to give up some Java overhead and create significant smaller Docker images. Sadly, this comes at the cost of giving up dynamic linking and class loading. A silver lining is, that inside Scala's ecosystem this rarely a problem. Scala relies heavily on compile-time mechanisms for detecting bugs early and creating type-safe applications (read here but also see e.g. Scala's compiler phases).

    -

    Sources and Reading

    +

    Sources and Reading

    1. Building Serverless Scala Services with GraalVM by Noel Welsh
    2. Small & fast Docker images using GraalVM’s native-image by Adam Warski
    3. @@ -284,4 +284,4 @@

      Sources and Reading

      Christian Wimmer

      1. GraalVM's Reference Manuals
      2. -

     .tech
    © Vandebron
    \ No newline at end of file +
     .tech
    © Vandebron
    \ No newline at end of file diff --git a/blog/cassandra-its-not-you-its-us.html b/blog/cassandra-its-not-you-its-us.html index c3dd35ff7..37582d73e 100644 --- a/blog/cassandra-its-not-you-its-us.html +++ b/blog/cassandra-its-not-you-its-us.html @@ -1,13 +1,13 @@ Cassandra, it’s not you, it’s us

    Cassandra, it’s not you, it’s us

    By Tomás Phelan on 16 februari 2024

    Cassandra, it’s not you, it’s us

    + ga('send', 'pageview');Cassandra, it’s not you, it’s us

    Cassandra, it’s not you, it’s us

    By Tomás Phelan on 16 februari 2024

    Cassandra, it’s not you, it’s us

    I want you to know that you are probably an amazing product that has so much to offer to the world. However, it sadly just isn’t working out for us anymore.

    We've encountered challenges such as escalating costs, inconsistent write and read performances, and setup misalignments that have constrained our growth. Of course, this is not entirely your fault, we set you up to fail with our infrastructure and use cases.

    I hope we can part on good terms, with mutual respect and appreciation for the time we shared.
    I wish you all the happiness, success, and fulfilment in the world, and I hope you find a company that complements your life in the way you deserve.

    Thank you for understanding, and I truly wish you the best.

    Yours truly, Vandebron

    -

    Our Data Storage Prince Charming

    +

    Our Data Storage Prince Charming

    data-prince-charming.jpg

    A list of some of the qualities we are looking for:

      @@ -21,7 +21,7 @@

      Our Data Storage Pr
    1. It does not need to be horizontally scalable, due to moving from 1 central data storage to a separate data storage per service.

    With enough work, time and commitment, Cassandra could have fulfilled most of these requirements. However, love is a two-way street, and we didn't put in the time and effort to make it work.

    -

    Speed Dating Round

    +

    Speed Dating Round

    Some potential suitors we considered for replacing Cassandra:

    ScyllaDB

    ScyllaDB is very similar to Cassandra. It should have better performance but still have (almost) all the same functionality as Cassandra.

    @@ -35,7 +35,7 @@

    Timescale

    It can also distribute data, but this is still in early access and is not recommended.

    Yugabyte

    Yugabyte is a PostgreSQL extension to make PostgreSQL into a distributed database.

    -

    Comparisons

    +

    Comparisons

    To determine the most suitable match, we did some quick performance tests. One where we inserted 2 million + weather data records as fast as possible via recurring inserts, to see how easy it would be to migrate over to. And another test to determine general query speed.

    Write Speed Results

    insert-perf-database.jpg

    @@ -50,6 +50,6 @@

    Query Speed Results
  • For timescale use buckets based on timestamps.
  • For Postgres by grouping on floor(extract(epoch from timestamp) / 60 / 15)
  • -

    Our Happily Ever After

    +

    Our Happily Ever After

    Timescale emerged as the clear winner here, not just for its performance in the above tests, but also for its seamless integration with our existing PostgreSQL setup. This compatibility allows us to maintain our current libraries and reduce code complexity, making Timescale an ideal choice for our time series data. At the same time, we continue to rely on Postgres for our other needs.

    -

    Cassandra, you won’t be missed.

     .tech
    © Vandebron
    \ No newline at end of file +

    Cassandra, you won’t be missed.

     .tech
    © Vandebron
    \ No newline at end of file diff --git a/blog/choosing-remix-as-an-ssr-framework.html b/blog/choosing-remix-as-an-ssr-framework.html index 3bb8ac9b0..0a7d3d355 100644 --- a/blog/choosing-remix-as-an-ssr-framework.html +++ b/blog/choosing-remix-as-an-ssr-framework.html @@ -1,8 +1,8 @@ Choosing Remix as a Server-Side Rendering (SSR) Framework

    Choosing Remix as a Server-Side Rendering (SSR) Framework

    By John Fisher on 18 oktober 2024

    The Background

    + ga('send', 'pageview');Choosing Remix as a Server-Side Rendering (SSR) Framework

    Choosing Remix as a Server-Side Rendering (SSR) Framework

    By John Fisher on 18 oktober 2024

    The Background

    We at Vandebron have a mission to get the news out about our good work, and we understand that Server Side Rendering (SSR) can really help with that. Among other things, it provides an easy way for search engines to discover our pages, so you, our (future?!) customer, can find them more easily. That means more people choosing green energy, and ultimately, a cleaner environment! 🎉

    -

    We rolled our own

    +

    We rolled our own

    The year was 2017, Covid was still a word that sounded more like a bird than anything else... The world was heating up and Vandebron was 4 years into its mission to bring 100% renewable energy throughout all of the Netherlands.

    As far as web technologies are concerned, 4 years was ages ago. It was a time when NextJS was less than a year old, and Remix was still several years from coming out. But we needed a way to deliver that high-quality content to all of you. So, the innovators that we were, we decided to build our own SSR framework. In short, we wanted pizza, but there were no pizza shops in town... So we made our own!

    It's been great but not without issue...

    @@ -11,13 +11,13 @@

    We rolled our ownugly-window-mock remix-migration-mocking-a-window -

    A Short Note: Why Server Side Rendering

    +

    A Short Note: Why Server Side Rendering

    You might not be satisfied with the short explanation of why we picked an SSR framework in the first place. This article isn't really about that - if you're interested in more analysis on when and where to choose an SSR framework, check out these excellent articles from Splunk:

    1. The User Experience (UX) Benefits of SSR
    2. The SEO Benefits of SSR
    -

    Decisions Made the Right Way - A Comparison

    +

    Decisions Made the Right Way - A Comparison

    Nowadays, there are better, industry standard technologies available! I.e. pizza shops have opened nearby!! Let's find a good one. Of course, you don't want to just go to any spot. Especially if there's more than one shop in town - you'd be silly not to check which one is closest, and look at the menu. Which one has better reviews, is that one very angry customer just upset that there wasn't any anchovies in the vegan pizza shop? What were they expecting anyway? vegan-pizza-shop

    At Vandebron we're a React shop, so we limited ourselves to just SSR frameworks supporting React. The choice of one framework over another is of crucial importance, so, as part of our analysis, we built a small part of our vandebron.nl/blog page twice. Two of our engineers then presented these prototypes to our Front End Guild, and this discussion fed heavily into the Architecture Decision Record that we wrote comparing the results.

    @@ -35,7 +35,7 @@

    Decisions Made the

    "Most members favoured Remix’s focus on web standards and usage of standard libraries and were put off (a little) by NextJS’s uncertainty in development direction."

    -

    So, How's it Going?

    +

    So, How's it Going?

    The migration effort is still underway but already we can report that it's going quite well - developers are excited to work on the new tech stack because it's seen as a developer-friendly platform and one of the two leading frameworks in the industry. In the words of one engineer: "Dev experience has improved massively, it's fun, it's easy to work with" Here are some of the things we still need to work on:

      @@ -44,4 +44,4 @@

      So, How's it G
    1. We feel the application we're migrating from is doing too much - it includes our marketing pages like the Blog and Mission pages we've been working on for the initial release, as well as the pages for our our signup and renewal process (become a Vandebron customer here!!!) This is a separate conversation, and ultimately one for the FE Guild, but the existing app's size and purpose is making the migration take longer than it should, and forcing us to put some routing rules in place to make sure the right parts of our old site are getting swapped out for the new.
    2. Previously, many of the images and PDFs we used on our website were checked directly into the repo. Part of our migration to Remix made us realize we should be using a CMS for this. We are already integrated with a CMS, we just need to be making better use of it in some cases.
    3. We haven't explored the Remix-specific linting rules yet. While we're confident in the existing React and TS lint rules we already have, it seems like configs like @remix-run/eslint-config could be quite handy.
    4. -

     .tech
    © Vandebron
    \ No newline at end of file +
     .tech
    © Vandebron
    \ No newline at end of file diff --git a/blog/cicd-dagster-user-code.html b/blog/cicd-dagster-user-code.html index f95eb44c4..b8bcd6ba4 100644 --- a/blog/cicd-dagster-user-code.html +++ b/blog/cicd-dagster-user-code.html @@ -1,6 +1,6 @@ The Why and How of Dagster User Code Deployment Automation

    The Why and How of Dagster User Code Deployment Automation

    By Pieter Custers on 8 juli 2022

    TL;DR

    + ga('send', 'pageview');The Why and How of Dagster User Code Deployment Automation

    The Why and How of Dagster User Code Deployment Automation

    By Pieter Custers on 8 juli 2022

    TL;DR

    If you want to deploy new Dagster user code respositories, you need to modify and redeploy the whole Dagster system (while they are presented as separate in the docs). This is undesirable for many reasons, most notably because it slows down a migration or the regular development process. This post presents a way to avoid this and build a fully automated CI/CD-pipeline for (new) user code.

    This article assumes that:

      @@ -70,4 +70,4 @@

      How to deploy from

      How to clean up old repositories

      The above described automation adds new repos but doesn't take care of old obsolete repos. The steps for removing a repo are the same for adding one. The exact implementation depends on your situation. You might want to automatically remove PR staging environments after closing a PR, for instance.

      Conclusion

      -

      Dagster is an incredibly powerful tool that enabled us to build complex data pipelines with ease. This posts explains how we streamlined the CI/CD pipeline for user code respositories, which enabled us to migrate to Dagster very quickly and saves us lots of time on a daily basis.

     .tech
    © Vandebron
    \ No newline at end of file +

    Dagster is an incredibly powerful tool that enabled us to build complex data pipelines with ease. This posts explains how we streamlined the CI/CD pipeline for user code respositories, which enabled us to migrate to Dagster very quickly and saves us lots of time on a daily basis.

     .tech
    © Vandebron
    \ No newline at end of file diff --git a/blog/creating_a_self-service_data_model.html b/blog/creating_a_self-service_data_model.html index 862ae9b78..8c6ea9d08 100644 --- a/blog/creating_a_self-service_data_model.html +++ b/blog/creating_a_self-service_data_model.html @@ -1,6 +1,6 @@ Creating a Self-Service Data Model

    Creating a Self-Service Data Model

    By Mats Stijlaart on 7 februari 2024

    The title of this article could have also been "Getting Rid of an Unmanageable Legacy Data Model", but after a year-long migration project the current title does more justice to the progress made.

    + ga('send', 'pageview');Creating a Self-Service Data Model

    Creating a Self-Service Data Model

    By Mats Stijlaart on 7 februari 2024

    The title of this article could have also been "Getting Rid of an Unmanageable Legacy Data Model", but after a year-long migration project the current title does more justice to the progress made.

    Compiled Legacy as a Data Model

    Our former data model was a series of parallel custom python jobs all covering every step of the Extract-Transform-Load (ETL) process from sources into report. Specific transformation got performed a numerous amount of times in multiple different jobs, daily. This made us prone to bugs, slow on development and maxing out on compute.

    The situation became so pressing that keeping alive simple reporting to the business became a daily burden on the Data Analytics team, limiting resources for advanced analytics and leveraging data sources for competitive insights.

    @@ -33,4 +33,4 @@

    What Did We Learn?<
  • Educate users on the designed structure of the data model, explain what layer serves which purpose and what questions can be answered how and where.
  • Create clear communication and support channels for the business to kickstart the adoption, you are not the only one learning a new tool.
  • Data is not only for the data team, so encourage those passionate and enthusiastic analysts to co-create! (Just keep an eye on the project.)
  • -

     .tech
    © Vandebron
    \ No newline at end of file +
     .tech
    © Vandebron
    \ No newline at end of file diff --git a/blog/cypress-component-design-technique-for-react-applications.html b/blog/cypress-component-design-technique-for-react-applications.html index 2c2e28b0a..e37c9f2dd 100644 --- a/blog/cypress-component-design-technique-for-react-applications.html +++ b/blog/cypress-component-design-technique-for-react-applications.html @@ -1,9 +1,9 @@ Cypress.io Component Design Technique for React Applications

    Cypress.io Component Design Technique for React Applications

    By Hatem Hatamleh on 5 februari 2021

    Cypress is a game-changer in the automation testing world, the way that Cypress was built and its architecture allows us as testers to cover more scenarios.

    + ga('send', 'pageview');Cypress.io Component Design Technique for React Applications

    Cypress.io Component Design Technique for React Applications

    By Hatem Hatamleh on 5 februari 2021

    Cypress is a game-changer in the automation testing world, the way that Cypress was built and its architecture allows us as testers to cover more scenarios.

    Cypress is not Selenium; in fact, it is different. And the way to build and design a framework should be different as well.

    The most famous design technique in Selenium is the Page Object Model, and many testers use the same design technique with Cypress. Even that Cypress on their official website recommended us not to go with that approach.

    -

    Page Object Model

    +

    Page Object Model

    The main benefit of using the page object model Is to make the automation framework maintenance-friendly. We can define a specific page's selectors in a separate file and then use these selectors in our test cases.

    class SignInPage { visit() { @@ -38,7 +38,7 @@

    Page Object ModelPage objects introduce an additional state into the tests, separate from the application’s internal state. This makes understanding the tests and failures harder.
  • Page objects make tests slow because they force the tests to always go through the application user interface.
  • -

    Component-Based Architecture

    +

    Component-Based Architecture

    On the other hand, a React application is component-based, where a specific page will be built from a collection of components. And components in React can be used on different pages too. So if we want to use the Page Object Model, we may define the same locator twice on different pages.

    So having these two facts, At Vandebron, we came up with a new way to design our Cypress Automation framework by creating a separate JavaScript file for every component in our application, inside a folder called components within our Cypress project as below:

    // Locators @@ -74,4 +74,4 @@

    Component-Based Arc }); });

    And as you can see, our test cases are readable for anyone! And if any locator changes in any of the components, we can easily fix it in one location and from the same file. And lastly, if a component will be used in different places, we can use the same code.

    -

    In the next article, I will talk about how we use Cypress in our manual testing during the sprint and how it saves us tons of time and effort.

     .tech
    © Vandebron
    \ No newline at end of file +

    In the next article, I will talk about how we use Cypress in our manual testing during the sprint and how it saves us tons of time and effort.

     .tech
    © Vandebron
    \ No newline at end of file diff --git a/blog/fueling-the-energy-transition-with-spark-part-1.html b/blog/fueling-the-energy-transition-with-spark-part-1.html index c9e562475..fb301f1c4 100644 --- a/blog/fueling-the-energy-transition-with-spark-part-1.html +++ b/blog/fueling-the-energy-transition-with-spark-part-1.html @@ -1,8 +1,8 @@ Fueling the Energy Transition With Spark - Part 1

    Fueling the Energy Transition With Spark - Part 1

    By Rosario Renga on 4 november 2020

    Here at Vandebron, we have several projects which need to compute large amounts of data. To achieve acceptable results, we had to choose a computing tool that should have helped us to build such algorithms.

    + ga('send', 'pageview');Fueling the Energy Transition With Spark - Part 1

    Fueling the Energy Transition With Spark - Part 1

    By Rosario Renga on 4 november 2020

    Here at Vandebron, we have several projects which need to compute large amounts of data. To achieve acceptable results, we had to choose a computing tool that should have helped us to build such algorithms.

    As you may have read in other articles our main backend language is Scala so the natural choice to build distributed parallel algorithms was indeed Spark.

    -

    What is Spark

    +

    What is Spark

    We will briefly introduce Spark in the next few lines and then we will dive deep into some of its key concepts.

    Spark is an ETL distributed tool. ETL are three phases that describe a general procedure for moving data from a source to a destination.

    ETL Diagram

    @@ -18,7 +18,7 @@

    Spark data structur

    An RDD is a collection of elements partitioned across the nodes of the cluster that can be operated on in parallel. Extracting data from a source creates an RDD. Operating on the RDD allows us to transform the data. Writing the RDD loads the data into the end target like a database for example). They are made to be distributed over the cluster to parallelize the computation.

    A DataFrame is an abstraction on top of an RDD. It is the first attempt of Spark (2013) to organize the data inside and RDD with an SQL-like structure. With dataframe, you can actually make a transformation in an SQL fashion. Every element in a dataframe is a Row and you can actually transform a dataframe to another by adding or removing columns.

    A DataSet finally is a further abstraction on top of a dataframe to organize data in an OO fashion (2015). Every element in a dataset is a case class and you can operate transformation in a scala fashion from a case class to another.

    -

    Spark in action

    +

    Spark in action

    Let’s see now some code samples from our codebase to illustrate in more detail each of the ETL phases.

    Extract

    The extraction phase is the first step in which you gather the data from a datasource.

    @@ -73,7 +73,7 @@

    Load

    .save()

    In this specific case, we will save our dataframe into a Cassandra database. In Spark, methods used to achieve the load phase are called actions. It is very important to distinguish Spark actions from the rest because actions are the only ones that trigger Spark to actually perform the whole transformation chain you have defined previously.

    If our transformation phase, as we described above, wasn’t followed by an action (for example save) nothing would have happened, the software would have simply terminated without doing anything.

    -

    One concept to rule them all

    +

    One concept to rule them all

    val rdd1 = sc.parallelize(1 to 10) val rdd2 = sc.parallelize(11 to 20) val rdd2Count = rdd1.map( @@ -84,5 +84,5 @@

    One concept to rule

    Spark cluster overview

    Your code starts from the Driver and a copy is distributed to all executors, this also means that each executor needs to have the same working environment of the Driver, for Scala it is not a problem since it just needs a JVM to run. (but we will see that if you use pySpark you need to take extra care when you distribute your application.) Every Spark data structure you have defined in your code will also be distributed across the executors and every time you perform a transformation it will be performed to each chunk of data in each executor.

    Now let’s go back to our example, a map is a transformation on rdd1 this means that block inside will be executed at the executor level, if we need rdd2 to perform this block Spark should somehow serialize the whole rdd2 and send it to each executor. You can understand now that it is really not possible to serialize the whole RDD since it is by its nature already a distributed data structure. So what can you do to actually perform such computation we showed in the example? The solution is “simple”: prepare your data in such a way that it will be contained in one single RDD. To do so you can take advantage of all the transformation functions Spark has to offer such map join union reduce etc.

    -

    Next step…

    -

    We have explained all the main concepts of Spark and we have shown some real snippets of our codebase. In the next article, I would like to show you a real-life problem we have solved in our company using pySpark. I will show you how to customize Spark infrastructure to correctly parallelize the ETL algorithm you have built.

     .tech
    © Vandebron
    \ No newline at end of file +

    Next step…

    +

    We have explained all the main concepts of Spark and we have shown some real snippets of our codebase. In the next article, I would like to show you a real-life problem we have solved in our company using pySpark. I will show you how to customize Spark infrastructure to correctly parallelize the ETL algorithm you have built.

     .tech
    © Vandebron
    \ No newline at end of file diff --git a/blog/how-to-sign-soap-messages.html b/blog/how-to-sign-soap-messages.html index 93d372347..7c2c4f388 100644 --- a/blog/how-to-sign-soap-messages.html +++ b/blog/how-to-sign-soap-messages.html @@ -1,11 +1,11 @@ Signing and verifying SOAP messages with wss4j and Scala

    Signing and verifying SOAP messages with wss4j and Scala

    By Katrin Grunert on 28 juni 2021

    Signing and verfiying SOAP messages with wss4j and Scala

    + ga('send', 'pageview');Signing and verifying SOAP messages with wss4j and Scala

    Signing and verifying SOAP messages with wss4j and Scala

    By Katrin Grunert on 28 juni 2021

    Signing and verfiying SOAP messages with wss4j and Scala

    SOAP is not dead. It is an established, XML-based and mature messaging protocol that comes with built-in security mechanisms, integrity checks, content validation and much more. A lot of enterprises and corporations are using it (sadly) still. Just recently, Vandebron had to implement a SOAP client to communicate with an external party. This blog post will explain with code examples how we at Vandebron are signing and verifying SOAP messages for our latest SOAP client implementation.

    For this process, we are using Apache's Web Service Security Library wss4j as it is a proven tool in the WSS context and provides, as a Java library, great interoperability with the programming language Scala.

    -

    Signing SOAP messages

    +

    Signing SOAP messages

    Here we will take a look at the necessary steps to sign a SOAP message like this one:

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header/> @@ -220,7 +220,7 @@

    Signing SOAP messag

    And that's it! The KeyStoreBuilder helps us to load a SigningCertificate and the SigningService uses this loaded certificate to sign SOAP messages. A receiver of our SOAP message has all the necessary information in our signature to verify that this message has not been tampered with and we are the original sender.

    This verification is something we should also do on our side for incoming messages. So let's take a look at how we can verify the signature of received messages.

    -

    Verification of SOAP messages

    +

    Verification of SOAP messages

    Verifying the signature of incoming messages is equally important to ensure that the connection is secure. A verification process will tell you if the message is coming from a trusted source and has not been tampered with.

    As previously mentioned we need our source of truth, a pool of trusted public keys from all parties which will receive our SOAP messages. These build the basis of the trust store.

    We will create a TrustedCertificates wrapper class in which we will load in the trust store and add this method to the KeyStoreBuilder.

    @@ -294,4 +294,4 @@

    Sources

    WSSecuritySigner by Luis Wolff

    Unit Tests from ws-wss4j

    An Introduction to XML Digital Signatures

    -

    SOAP vs. REST

     .tech
    © Vandebron
    \ No newline at end of file +

    SOAP vs. REST

     .tech
    © Vandebron
    \ No newline at end of file diff --git a/blog/looking-back-at-vandebron-greentech-hackathon-2021.html b/blog/looking-back-at-vandebron-greentech-hackathon-2021.html index b51c31c95..3fbdfa208 100644 --- a/blog/looking-back-at-vandebron-greentech-hackathon-2021.html +++ b/blog/looking-back-at-vandebron-greentech-hackathon-2021.html @@ -1,6 +1,6 @@ Looking back at the Vandebron GreenTech Hackathon 2021

    Looking back at the Vandebron GreenTech Hackathon 2021

    By Roy Derks on 5 april 2021

    At the end of March, we organized a public hackathon to create solutions to tackle climate challenges. After having done internal hackathons, we thought it was time to share our technologies with other innovative people and companies. Together with a group of partners, and enthusiastic participants, spend three full days of (remote) hacking with great results.

    + ga('send', 'pageview');Looking back at the Vandebron GreenTech Hackathon 2021

    Looking back at the Vandebron GreenTech Hackathon 2021

    By Roy Derks on 5 april 2021

    At the end of March, we organized a public hackathon to create solutions to tackle climate challenges. After having done internal hackathons, we thought it was time to share our technologies with other innovative people and companies. Together with a group of partners, and enthusiastic participants, spend three full days of (remote) hacking with great results.

    Why organize a public hackathon?

    Climate change is one of the many pressing challenges our society is currently facing. At Vandebron, we want to continue finding ways to tackle this immense challenge. That’s why we decided to organize a 3-day GreenTech hackathon that ran from March 31st to April 2nd, 2021. We've been organizing internal hackathons for the past four years, to foster innovation within our company and allow our developers to work on something exciting without any constraints. If you want to read more about why we organize internal hackathons, you can find an article by our CTO here.

    By organizing a public hackathon, we hoped to attract a bigger audience, possibly even outside our country, The Netherlands, and attract partners to work together with. We succeeded in both, and together with Hack the Planet and Top Dutch Solar Racing, we wanted to find technological solutions to problems in wildlife conservation and renewable energy. For these three days, all participants got the opportunity to work on challenges from our partners, access their technology and knowledge, and got the chance to win unique prizes. Also, we organized a free event with speakers Florian Dirkse (The Ocean Cleanup), Thijs Suijten (Hack the Planet) and Heleen Klinkert (Nieuw Groen).

    @@ -9,4 +9,4 @@

    Looking back

    All teams continued working on the hackathon challenge on the second day, after a nice warming-up quiz about climate change in the morning. For most teams this second day was when their project started to take shape, and they got a better idea about what they would be presenting on the final day. This second day was also an opportunity for non-technical people to get to know Vandebron and their partners better as we organized inspirational sessions with talks from different speakers in the afternoon. One of the co-founders from The Ocean Cleanup, Florian Dirkse, inspired us with his story behind making a difference in the world. After which, one of our hackathon partners Thijs Suijten, from Hack the Planet, demonstrated how technology can be used for the good. Our third, and final, speaker Heleen Klinkert (Nieuw Groen), showed how we can compensate for our CO2 emissions by storing them in the soil.

    On the final day of the hackathon, all teams had to finalize their projects and create a presentation for the closing ceremony. During this ceremony, all participants and partners looked back at the past three days and shared what they had been working on during the hackathon. For every challenge, one team could win and take home several prizes, sponsored by Marie-Stella-Maris, EV Experience, and Klimaatroute. The first presentations were for the Vandebron challenge about EV forecasts. This challenge was won by not one but two teams as the jury and audience were so impressed by their solutions. Both teams created not only the forecast based on the sample data provided, but also created interactive dashboards. On the challenge for Hack the Planet, the team that won came up with a unique solution to use the camera traps to detect wild animals on the streets. For countries like India, this is a huge problem, as wild animals get stuck in traffic or walk through rural areas. The final winner of the hackathon was a group of students that simulated the Top Dutch Solar Racing trip through Australia and forecasted they could complete the race within 7 days.

    Thanks everyone

    -

    I'd like to thank all the participants, prize/challenge partners, and speakers for their efforts during these days. The GreenTech Hackathon 2021 was a huge success thanks to everyone that has been involved. Keep following the vandebron.tech to be updated on future hackathons and events.

     .tech
    © Vandebron
    \ No newline at end of file +

    I'd like to thank all the participants, prize/challenge partners, and speakers for their efforts during these days. The GreenTech Hackathon 2021 was a huge success thanks to everyone that has been involved. Keep following the vandebron.tech to be updated on future hackathons and events.

     .tech
    © Vandebron
    \ No newline at end of file diff --git a/blog/migrating-dcos-kubernetes-l4lb.html b/blog/migrating-dcos-kubernetes-l4lb.html index ebac1ee1a..1440ba8cc 100644 --- a/blog/migrating-dcos-kubernetes-l4lb.html +++ b/blog/migrating-dcos-kubernetes-l4lb.html @@ -1,7 +1,7 @@ Migrating from DCOS to Kubernetes, dealing with the l4lb loadbalancer

    Migrating from DCOS to Kubernetes, dealing with the l4lb loadbalancer

    By Rogier Dikkes on 5 maart 2021

    In October 2020 D2IQ announced that they are moving onwards with their Kubernetes offering. Vandebron has been a D2IQ customer for their DCOS offering, we were just in the middle of a migration of our first workloads to DCOS Enterprise. We have evaluated the D2IQ K8s offering and decided to go for another Kubernetes product. We had a few migrations over the years, we migrated from Azure to AWS, we migrated workloads from normal instances to spot instances and all these migrations were done with nearly any downtime. We plan to reduce the downtime to a couple of minutes this migration and this is a real challenge. The first challenge that we will discuss today: We want to pair our Kubernetes clusters to the DCOS/Mesos clusters, while we move a workload it should be able to connect to its dependencies in the DCOS cluster. We use DCOS for our NoSQL databases like Cassandra, internal data that we want to keep internal. Pairing DCOS and Kubernetes clusters enable us to reduce downtime, enabling us to switch back if we run into issues and move faster because it reduces complexity.

    -

    L4LB

    + ga('send', 'pageview');Migrating from DCOS to Kubernetes, dealing with the l4lb loadbalancer

    Migrating from DCOS to Kubernetes, dealing with the l4lb loadbalancer

    By Rogier Dikkes on 5 maart 2021

    In October 2020 D2IQ announced that they are moving onwards with their Kubernetes offering. Vandebron has been a D2IQ customer for their DCOS offering, we were just in the middle of a migration of our first workloads to DCOS Enterprise. We have evaluated the D2IQ K8s offering and decided to go for another Kubernetes product. We had a few migrations over the years, we migrated from Azure to AWS, we migrated workloads from normal instances to spot instances and all these migrations were done with nearly any downtime. We plan to reduce the downtime to a couple of minutes this migration and this is a real challenge. The first challenge that we will discuss today: We want to pair our Kubernetes clusters to the DCOS/Mesos clusters, while we move a workload it should be able to connect to its dependencies in the DCOS cluster. We use DCOS for our NoSQL databases like Cassandra, internal data that we want to keep internal. Pairing DCOS and Kubernetes clusters enable us to reduce downtime, enabling us to switch back if we run into issues and move faster because it reduces complexity.

    +

    L4LB

    The internal layer 4 load balancer DCOS provides is used in the majority of our workloads. When our data scientists schedule a spark driver, they connect to the spark dispatcher through the Layer 4 load balancer. Most of the DCOS frameworks use this Layer 4 load balancer as an internal service discovery tool, with Vandebron we use this layer 4 load balancer to communicate between services. In a default DCOS set up this load balancer responds on domain names like: spark-dispatcher.marathon.l4lb.thisdcos.directory:7077

    When we ping the spark dispatcher we get the following:

    PING spark-dispatcher.marathon.l4lb.thisdcos.directory (11.155.161.35) 56(84) bytes of data. @@ -25,7 +25,7 @@

    L4LB

    "serverSparkVersion" : "2.3.4" }

    This results in that the spark dispatcher now also is available on 1.2.3.4:80. As mentioned before we wanted to connect our DCOS and Kubernetes clusters, getting hundreds of entries from ipvsadm and manually adding them one by one didn’t sound appealing to us. Especially if you consider that sometimes services fail and run on a different port or different host after recovery, maintaining this by hand would be a nightmare. We therefore decided to build a tool to sync IPVS entries from DCOS to Kubernetes.

    -

    Stack

    +

    Stack

    Within Vandebron we have our tech stack, we strongly believe it is good to eat your own dog food. When possible and when our use cases are similar we use the same tools as our Developers use. The parts of the stack we will be using are:

    1. AWS ELB in front of Traefik 1.7
    2. @@ -34,7 +34,7 @@

      Stack

    Within our platform team, we use Golang as our scripting language. Golang gives us the ability to build binary files with all the required libraries in the binary, we don’t have to install any packages, we do not even need to install Golang on the machine the application will be running on.

    In our DCOS cluster we use Traefik 1.7, this version of Traefik only forwards HTTP requests. We decided to use Traefik to expose a JSON endpoint so we can gather the IPVS information from this location.

    -

    ipvs-server

    +

    ipvs-server

    Within our DCOS cluster we will expose the IPVS information through a JSON endpoint. We have built a tool for this to expose this information in multiple ways. In the next section, we are going to discuss some of the concepts and choices we made, we won’t deep dive into Go specifics. We have provided the entire code for this project in the examples directory of our GitHub repo: https://github.com/Vandebron/tech-blog

    First, let’s discuss the library we use: https://github.com/nanobox-io/golang-lvs. This library in its essence translates to ipvsadm commands, it helped save us time to implement this ourselves. There are some gotcha’s, such as newlines are not filtered out from the output. We solved this by cleaning up some of the data.

    @@ -180,7 +180,7 @@

    Docker build

    In the repository, we have included a Dockerfile and a script to build the Dockerfile. In this Dockerfile, we pass the git commit hash to the go install. This way we always get the Git Hash from our GitHub repo and we can use this information in our version output.

    DCOS service.json

    In the repository, we have provided the service.json file, since it is opinionated on using Traefik you might need to change it. But in this service.json you see how we set up Traefik, the health check, and port index. Since the Mesos UCR container has fewer abstractions and has fewer limited capabilities. We can run the IPVS server inside a UCR container and get all the output as if we were running this directly as root on the host machine.

    -

    ipvs-client

    +

    ipvs-client

    The IPVS client is the component we use in the Kubernetes environment. The client connects to the server and gets the IPVS entries from the IPVS server inside our DCOS cluster. It then adds these IPVS entries to each node in the Kubernetes cluster. You, therefore, need to run each client per Kubernetes node.

    You can find the code from the IPVS client in our repository.

    func httpGet(remoteURL string) []byte { @@ -296,7 +296,7 @@

    ipvs-client

    Unit files

    Since IPVS is part of the Linux kernel it is hard to deploy this in a docker container, the capabilities are more restricted in Kubernetes. We decided to deploy the IPVS client on each host machine through a systemd unit file, the main reason was that we ran into restrictions that slowed us down and this is not a permanent solution. By adding the IPVS client on the machines alone does not make it possible for containers to use the IPVS routes. We needed to add NET_ADMIN capabilities to all containers using the l4lb loadbalancer locations and configure hostNetworking: true in the Kubernetes pods.

    We provided a deployment.yml file that runs a Ubuntu docker container with ipvsadm only installed extra. When the pods are deployed in this deployment you can use kubectl exec to get into the pod and run the ipvsadm -L -n command.

    -

    Vacancy at Vandebron

    +

    Vacancy at Vandebron

    We are looking for a platform engineer in Vandebron. As you can understand this is not a typical scenario we daily run across, but it is part of the workloads that we will support when working on our platform. Within Vandebron we try to use the best technology available, when it is not available we build it. Due to this as platform engineers, we have many interesting challenges and offer engineers to support further than only a strict domain. We support all components of our entire platform, regardless if it is a Linux kernel issue like this, involves setting up and maintaining a NoSQL cluster, or helping the business with something like requesting a certificate.

    If you are interested in learning more about this position, take a look at our Vacancy and get in contact with us. -https://werkenbij.vandebron.nl/

     .tech
    © Vandebron
    \ No newline at end of file +https://werkenbij.vandebron.nl/

     .tech
    © Vandebron
    \ No newline at end of file diff --git a/blog/optimizing-converting-and-exporting-svg-icons-in-react.html b/blog/optimizing-converting-and-exporting-svg-icons-in-react.html index 44803d326..c065d2bba 100644 --- a/blog/optimizing-converting-and-exporting-svg-icons-in-react.html +++ b/blog/optimizing-converting-and-exporting-svg-icons-in-react.html @@ -1,7 +1,7 @@ Optimizing, Converting And Exporting SVG Icons In React

    Optimizing, Converting And Exporting SVG Icons In React

    By Roy Derks on 10 december 2020

    At Vandebron we're maintaining a component library called Windmolen (Dutch for "wind turbine"). And if you've ever built a component library, you probably dealt with optimizing and converting icons before. With SVGO and SVGR you can do this at scale, without compromising the quality or size of your icons.

    -

    The problem

    + ga('send', 'pageview');Optimizing, Converting And Exporting SVG Icons In React

    Optimizing, Converting And Exporting SVG Icons In React

    By Roy Derks on 10 december 2020

    At Vandebron we're maintaining a component library called Windmolen (Dutch for "wind turbine"). And if you've ever built a component library, you probably dealt with optimizing and converting icons before. With SVGO and SVGR you can do this at scale, without compromising the quality or size of your icons.

    +

    The problem

    The web is full of icons, and often these icons are rendered from SVG files to ensure you can increase (or decrease) the size of the icons depending on the use case. Designers often create these icons from design tools like Adobe Photoshop or Sketch. Although these icons might look pretty, exporting a SVG out of these tools is often difficult as this article explains. Also, added lot of code in the form of metadata is added to the SVG file. Let's have a look at what a typical SVG file exported out of Sketch looks like:

    <!-- something.svg --> <?xml version="1.0" encoding="UTF-8"?> @@ -17,7 +17,7 @@

    The problem

    </g> </svg>

    The SVG file above holds a lot of information about Sketch, such as the title of the icon and a description. Next to that, there's a lot of elements that could be combined into one element to reduce the file size.

    -

    Optimizing SVGs

    +

    Optimizing SVGs

    What's cool about SVG files is that you can optimize and minify them, without affecting what the SVG looks like. This is something you can try out yourself using the website SVGOMG, which is powered by the library SVGO that you'll learn more about later.

    You can optimize the SVG file above by following these steps:

      @@ -31,7 +31,7 @@

      Optimizing SVGs

    This SVG can be even further optimized by checking the "Prefer viewbox to width/height" in SVGOMG, but let's save that for later when we use SVGO instead.

    -

    Using SVGO

    +

    Using SVGO

    By using SVGOMG you've already experienced what power SVGO has, as SVGOMG is described by its creators as " SVGO's Missing GUI, aiming to expose the majority if not all the configuration options of SVGO". Instead of using the GUI, you can also use SVGO directly from the command line as a CLI-tool or as a Node.js module. For the sake of this article, we'll be using it solely as CLI.

    SVGO can be installed globally on your machine, or locally in your project, from npm by running:

    npm i -g svgo @@ -70,7 +70,7 @@

    Using SVGO

    - prefixIds: false - prefixClassNames: false

    From the rules above you'll get an idea about all the redundant and useless lines of code that might be present in your SVG files. But luckily, they will all get removed when you run the command npm run optimize-svg.

    -

    Converting SVGs with SVGR

    +

    Converting SVGs with SVGR

    You've now learned how to optimize your SVG files, and are probably wondering how to use these files in a React application. To render an SVG in React, you need to either configure Webpack in a way that it knows how to deal with SVG files or use a library called SVGR. By default, any application created with create-react-app can render SVG files as a component, using the following import statement:

    // MyComponent.jsx import React from 'react'; @@ -130,5 +130,5 @@

    Converting SVGs wit } }

    By running the convert-svg script you both optimize and convert all the SVG files in src/assets/icons to React components based on optimized SVGs.

    -

    Reading further

    -

    The examples in this post are the tip of the metaphorical iceberg on what problems SVGO and SVGR can solve. There are many other features you can enable, such as using them as Node.js modules or enabling TypeScript support. To read further make sure to have a look at the SVGR playground or documentation.

     .tech
    © Vandebron
    \ No newline at end of file +

    Reading further

    +

    The examples in this post are the tip of the metaphorical iceberg on what problems SVGO and SVGR can solve. There are many other features you can enable, such as using them as Node.js modules or enabling TypeScript support. To read further make sure to have a look at the SVGR playground or documentation.

     .tech
    © Vandebron
    \ No newline at end of file diff --git a/blog/power-regular-hackathons.html b/blog/power-regular-hackathons.html index 27503d511..59446d590 100644 --- a/blog/power-regular-hackathons.html +++ b/blog/power-regular-hackathons.html @@ -1,6 +1,6 @@ The power of regular hackathons

    The power of regular hackathons

    By Arno van den Berg on 19 maart 2021

    At Vandebron we have been organizing a regular hackathon for the last four years. Every three months we organize a two-day event. At first glance this seems quite an investment. Eight days a year, almost losing two working-weeks of productivity for your teams!

    + ga('send', 'pageview');The power of regular hackathons

    The power of regular hackathons

    By Arno van den Berg on 19 maart 2021

    At Vandebron we have been organizing a regular hackathon for the last four years. Every three months we organize a two-day event. At first glance this seems quite an investment. Eight days a year, almost losing two working-weeks of productivity for your teams!

    Our company is like any other. Our roadmaps are stuffed, our backlogs are never-ending and pressure for delivering value to our customers is always present. Our ambitions are always higher than what we can handle with the amount of teams and people available. We like to say: ‘the energy transition can’t wait!’, but we sure do have to prioritize our projects very carefully.

    However this does not stop us from organizing our quarterly hackathons. Most of the time our regular hackathons are light-weight. People within the company know how it works. We try not to waste too much time in ‘organizing’ the event. We get right to it.

    Reasons why you should be organizing (regular) hackathons:

    @@ -19,4 +19,4 @@

    Our most important
  • Participation is optional. - At Vandebron we have autonomous teams with professionals that can manage their own agenda. As a team and as an individual. We put effort in promoting the hackathon by trying to make people enthusiastic about participating. But in the end people make their own decisions. Sometimes the team and company objectives do need to have priority, but the teams are perfectly able to make this judgement call themselves.
  • Magnify impact - show everyone what the impact is they have been making. It is good if people recognize how some projects have become reality and that feedback will be appreciated by the community. It gives people a feeling that the podium of the hackathon is a strong force. And ultimately that is how you also proof the value of organizing a hackathon.
  • -

    For our next hackathon we are opening our (virtual) doors also for guests, as we are organizing a GreenTech hackathon with other sustainability minded companies (‘Hack the Planet’ and ‘Top Dutch Solar Racing’). You can find more information and sign up via this link. It is the first time we do it like this, and we sure will learn another thing or two!

     .tech
    © Vandebron
    \ No newline at end of file +

    For our next hackathon we are opening our (virtual) doors also for guests, as we are organizing a GreenTech hackathon with other sustainability minded companies (‘Hack the Planet’ and ‘Top Dutch Solar Racing’). You can find more information and sign up via this link. It is the first time we do it like this, and we sure will learn another thing or two!

     .tech
    © Vandebron
    \ No newline at end of file diff --git a/blog/replacing-app-center.html b/blog/replacing-app-center.html index fb4b036d8..ceaf4068f 100644 --- a/blog/replacing-app-center.html +++ b/blog/replacing-app-center.html @@ -1,14 +1,14 @@ Replacing App Center with GitHub Actions

    Replacing App Center with GitHub Actions

    By John Fisher & Arnav Mundkur on 21 februari 2025

    Why GHA?

    + ga('send', 'pageview');Replacing App Center with GitHub Actions

    Replacing App Center with GitHub Actions

    By John Fisher & Arnav Mundkur on 21 februari 2025

    Why GHA?

    This seems like a lot of work... Why not go with an off-the-shelf solution from something like Bitrise or Codemagic? Fair question but not the main point of this post. To look into our reasoning check out the Benefits section!

    -

    Some notes before we get started

    +

    Some notes before we get started

    1. We use this workflow to build two apps, one of which can be white-labeled, so we have additional app and white-label-release inputs which makes things a bit trickier. You might not need that so feel free to trim stuff down and make it your own! But for us, we why we have the env-variable-prep-android.sh which normalizes the variable names used for secrets so those secrets and build file names, etc. can be easily used. If you just have a single app you probably don't need this script.
    2. The code below is only for the build process. Though the Architecture Decision Record (ADR) considered how this would affect future decisions about artifact upload automation and rolling out releases for internal testing, nothing about that is automated here.
    3. There's a lot of code here. We removed version numbers to make sure we're not giving out too much information. If you see something like @vx.x.x, you'll have to fill those in with the versions that are needed for your app/pipeline.
    -

    Implementation

    +

    Implementation

    Part 1 - Basic Setup

    Add the files below. Nothing in this setup should effect App Center but it is good to check in your changes to a branch and test those against the regular App Center build flow. The main point of the steps in this section is to just get a basic action, with inputs, set up and running. Full implementation is further down. The env-variable-prep-android.sh and env-variable-prep-ios.sh files created variables based off the input parameters passed in so they can be used in a reusable and consistent manner later on. The env-file-prep.sh file is responsible for creating a .env file with values from whichever environment you're using. Though it's nice to add the Fastlane and Gymfile files, those won't be used until Step 4 when the rest of the pipeline is fleshed out.

    Android
    @@ -494,15 +494,15 @@
    iOS

    Part 5 - Troubleshooting

    More than likely these won't work the first time. Time to go back and adjust. Note that since the workflow is now in the main branch you can test your workflow changes on a feature branch. Just select your feature branch in the "Branch" dropdown shown above.

    -

    Other Things to Note

    +

    Other Things to Note

    1. App Center gives you the ability to write `appcenter-pre-build.sh` and `appcenter-post-build.sh` scripts. The `env-file-prep.sh` is basically that same thing, just without the context of appcenter.
    2. -
    3. One of our apps is using MapBox which needs a `.netrc` in the root directory. If you need something similar, you can add a step to your action by adding the code shown in the the "optional mapbox" part + the `./my-first-app/prep-mapbox.sh` in the [Appendix](#appendix).
    4. +
    5. One of our apps is using MapBox which needs a `.netrc` in the root directory. If you need something similar, you can add a step to your action by adding the code shown in the the "optional mapbox" part + the `./my-first-app/prep-mapbox.sh` in the Appendix section below.
    6. After our work on this was done (and only as I'm writing this article) we realized we can use the `sparse-checkout` option from `actions/checkout` to only check out the needed files. This should speed up our workflow runtime even more!
    7. It may be helpful for you to add the build and/or version number onto the artifact. We haven't done that but it's something we're interested in adding for the future.
    8. Troubleshooting certificates for iOS was a HUGE pain in the butt. I don't have any good advice here other than to realize (and communicate with your POs) that this part may take a while.
    -

    Benefits

    +

    Benefits

    1. It regularly took over 50 minutes for our mobile app to build in App Center. Part of that could have very likely be improved by adjusting App Center configurations & how we store and bundle app assets but after migrating our builds to GitHub Actions our app build times are now down to 22 minutes - More than twice as fast!
    2. All the rest of the software at Vandebron (backend services in Scala and Python and frontend applications in Typescript + React) is built using GitHub Actions. This move brings mobile apps in line with all other software. This move to GHA for mobile builds has led to several of our mobile devs getting our hands dirty in GHA, which is great because we can now play a role in the larger CICD discussions.
    3. @@ -510,7 +510,7 @@

      Benefits

    4. We did a full ADR (shown below) which initiated the work here. Links referenced in image are in Appendix below. replace-app-center-adr
    -

    Appendix

    +

    Appendix

    Mapbox Integration

    file: .github/workflows/mobile-apps-build-android.yaml and .github/workflows/mobile-apps-build-ios.yaml (optional mapbox)

      
     .tech
    © Vandebron
    \ No newline at end of file +
     .tech
    © Vandebron
    \ No newline at end of file diff --git a/blog/salesforce-camunda-bpm-migration.html b/blog/salesforce-camunda-bpm-migration.html index 46edee198..8648f8047 100644 --- a/blog/salesforce-camunda-bpm-migration.html +++ b/blog/salesforce-camunda-bpm-migration.html @@ -1,10 +1,10 @@ Camunda BPM migration

    Camunda BPM migration

    By Andrei Karabovich on 4 september 2024

    Salesforce + FlowRunner golden age

    + ga('send', 'pageview');Camunda BPM migration

    Camunda BPM migration

    By Andrei Karabovich on 4 september 2024

    Salesforce + FlowRunner golden age

    Since 2015, Vandebron has been using Salesforce. At the time, Salesforce for Vandebron, was like a Swiss Army knife - versatile, multifunctional, and seemingly capable of addressing most of the business requirements. It quickly became the central hub for various operations - it became a workspace for agents, a CTI platform, a platform to send service emails and much more. Over time, Salesforce evolved beyond just a customer relationship management tool for Vandebron. It became a full-fledged platform that managed customer-related processes, such as the Signup process, Renewal process, Meter Reading process, etc. To support this transition, Vandebron developed a custom mechanism known as FlowRunner, which was designed to automate and execute these processes within Salesforce. Initially, FlowRunner seemed like the perfect solution. It was tailor-made to handle the increasingly complex workflows that Vandebron needed to manage. While it successfully managed to support Vandebron’s operations for several years, this system was not without its flaws. These issues, which will be discussed in detail later, eventually led to the need for a more robust and scalable solution. But for a time, FlowRunner did its job, enabling Vandebron to leverage Salesforce far beyond its original purpose.

    -

    Salesforce + FlowRunner solution problems

    +

    Salesforce + FlowRunner solution problems

    Broadly, the problems can be divided into two categories: technical and organizational.

    Technical Problems:

      @@ -18,11 +18,11 @@

      Salesforce + FlowRu
    1. Centralization of Customer-Related Processes: With most customer-related processes embedded in Salesforce, any changes to these processes require intervention from the Salesforce team. This centralization creates a bottleneck, as all modifications, updates, and optimizations must pass through a single team, slowing down the overall pace of innovation and response.
    2. Domain Overlap and Knowledge Dilution: The Salesforce team at Vandebron is responsible for managing approximately 50 different processes, each belonging to various business domains. This wide scope of responsibility leads to a dilution of expertise, as the team cannot maintain deep knowledge of every process. The result is a lower overall level of understanding and efficiency, making it difficult to ensure the smooth operation and timely updates of all processes.
    -

    Point of no return

    +

    Point of no return

    At the beginning of 2022, Europe was hit by an unprecedented energy crisis. Gas and electricity prices skyrocketed, fluctuating unpredictably, and placing immense pressure on energy providers like Vandebron to adapt swiftly. In response, Vandebron introduced a solution designed to navigate this volatile market: the Flexible Variable Tariffs proposition. From a technical standpoint, implementing this new offering required the execution of a relatively complex process - Flow_VariableTariff for approximately 50% of our customer base. However, it soon became clear that the FlowRunner mechanism and Salesforce in general were not sufficient to handle the demands of this new process. The total execution time for Flow_VariableTariff was projected to be enormous, spanning over 20 days, which was far too long for a business that needed to respond rapidly to market changes. Recognizing the urgency of the situation, we immediately sought ways to optimize the process. While we succeeded in significantly simplifying Flow_VariableTariff, these improvements alone were insufficient to meet our needs. It was at this critical juncture that we realized Salesforce and the FlowRunner were no longer adequate for Vandebron’s evolving requirements. The limitations of these tools became glaringly apparent, signaling the need for a more powerful and flexible solution to support our operations in the face of such a dynamic and challenging environment.

    -

    Why Camunda?

    +

    Why Camunda?

    Choosing the right process orchestration tool is a critical decision, especially for a company like Vandebron, where efficient workflow management is essential for operational success. To ensure we made the best choice, we began by establishing a set of criteria that the new tool needed to meet. These criteria were designed to address our current challenges and future-proof our operations. Here are some of the most crucial criteria:

    1. Compliance with BPMN 2.0 Standard: We prioritized tools that adhered to the BPMN 2.0 standard. This would make any future migration to another tool less painful, ensuring a smoother transition if needed.
    2. @@ -48,7 +48,7 @@

      Why Camunda?

    3. Responsive Support: Camunda's quick and helpful support was another decisive factor. Their team was readily available to assist us with any issues or questions, ensuring a smooth onboarding experience.

    In the end, Camunda stood out as the optimal choice for Vandebron’s process orchestration needs, offering the perfect balance of functionality, usability, and support.

    -

    First steps with Camunda

    +

    First steps with Camunda

    Before we could begin migrating our processes from Salesforce to Camunda, it was essential to establish a robust infrastructure that would allow Camunda to seamlessly integrate with the rest of Vandebron’s ecosystem, particularly Salesforce. Since Salesforce would continue to serve as the primary workspace for our agents, we needed to ensure smooth communication and data flow between the two platforms. To achieve this, we developed several key infrastructural applications:

    1. CamundaGateway: Camunda API (Zeebe API) operates using the gRPC protocol, which is not natively supported by Salesforce. To bridge this gap, we created the CamundaGateway, a proxy application that translates HTTP calls into a format that Zeebe API can understand. This application acts as an intermediary, enabling effective communication between Salesforce and Camunda.
    2. @@ -59,6 +59,6 @@

      First steps with Ca

      A schematic overview of the camunda infrastructure

      As of September 2024, we have successfully implemented the basic infrastructure needed for Camunda integration, and three customer-related processes have been migrated from Salesforce to Camunda, with several more in progress. It's important to highlight that the migration process involved a comprehensive analysis of the existing process, including the removal of legacy components, identification of common errors, and targeted optimization efforts. As a result, we achieved a substantial reduction in errors. Specifically, the Flow_Renewal process, which previously had a 2% failure rate, now experiences only a 0.62% dropout rate post-migration, reflecting a 69% decrease in errors.

      -

      Future plans

      +

      Future plans

      By the end of the year, we aim to migrate up to 10 processes to Camunda, further reducing our reliance on Salesforce for process orchestration. In parallel, we plan to enhance our infrastructure applications—CamundaGateway, CamundaSync, CamundaJobWorker, and the BPM frontend app - to improve their performance, scalability, and ease of use. These enhancements will ensure that our systems remain robust and efficient as we expand our use of Camunda across more of Vandebron's operations. -Moving forward, We will continue to leverage Camunda's capabilities to automate and optimize more processes, ultimately driving greater efficiencies and innovations across Vandebron.

     .tech
    © Vandebron
    \ No newline at end of file +Moving forward, We will continue to leverage Camunda's capabilities to automate and optimize more processes, ultimately driving greater efficiencies and innovations across Vandebron.

     .tech
    © Vandebron
    \ No newline at end of file diff --git a/blog/spin-up-kubernetes-on-macbook.html b/blog/spin-up-kubernetes-on-macbook.html index 9092e4973..9683db7a5 100644 --- a/blog/spin-up-kubernetes-on-macbook.html +++ b/blog/spin-up-kubernetes-on-macbook.html @@ -1,6 +1,6 @@ How to Spin Up A Kubernetes Cluster On Your Macbook

    How to Spin Up A Kubernetes Cluster On Your Macbook

    By Marco Nicotra on 25 januari 2021

    In Vandebron we have been using container clusters to host our services since the foundation of our Big Data team. + ga('send', 'pageview');How to Spin Up A Kubernetes Cluster On Your Macbook

    How to Spin Up A Kubernetes Cluster On Your Macbook

    By Marco Nicotra on 25 januari 2021

    In Vandebron we have been using container clusters to host our services since the foundation of our Big Data team. Recently our cluster of choice has declared End-Of-Life development stage, so we decided to take a step forward and get a ticket for the Kubernetes boat.

    A change in the OS that is used to run your services and applications can look quite challenging and not everyone is on the same experience level. To make everyone comfortable it is a good choice to give everyone the possibility to play with the new tools and learn what can be done and how: you need a sandbox.

    Our developers are provided with a Macbook and at the moment of writing there some options you can go for when deciding how to set up your playground:

    @@ -65,4 +65,4 @@

    Spin up Kubernetes<

    Clean up

    When you are done or you just want to hard reset your environment you can just type bronernetes cleanup and it will take care of cleaning up the VM you just used, leaving you with a pristine machine, as nothing ever happened :)

    Conclusion

    -

    Having a sandbox is very useful to play around with the concepts of a new setup or service and it packs up a huge amount of positive sides. No matter what is the language or the nature of the system you are trying to replicate, it can be challenging and involve a long list of instructions or manual operations and, sometimes, even dedicated hardware. Although with some bash glue, it is possible to automate most of those processes and the investment cost can be enormously beneficial for yourself (less work the next time you do it) and for the other people working with you (they can use the tool, comment and suggest improvements). Most of all, in the case of infrastructure, it helps raise the knowledge of "what's going on here" and documents for the ones interested in taking a trip down the rabbit hole.

     .tech
    © Vandebron
    \ No newline at end of file +

    Having a sandbox is very useful to play around with the concepts of a new setup or service and it packs up a huge amount of positive sides. No matter what is the language or the nature of the system you are trying to replicate, it can be challenging and involve a long list of instructions or manual operations and, sometimes, even dedicated hardware. Although with some bash glue, it is possible to automate most of those processes and the investment cost can be enormously beneficial for yourself (less work the next time you do it) and for the other people working with you (they can use the tool, comment and suggest improvements). Most of all, in the case of infrastructure, it helps raise the knowledge of "what's going on here" and documents for the ones interested in taking a trip down the rabbit hole.

     .tech
    © Vandebron
    \ No newline at end of file diff --git a/blog/sustainable-tech-hardware.html b/blog/sustainable-tech-hardware.html index cc9c71691..d448a39a5 100644 --- a/blog/sustainable-tech-hardware.html +++ b/blog/sustainable-tech-hardware.html @@ -1,6 +1,6 @@ Sustainable Tech-Hardware - Introducing the 'flexMac'

    Sustainable Tech-Hardware - Introducing the 'flexMac'

    By Gehdrio Lake & Sietse Bruinsma on 3 juli 2023

    In our sustainable journey at Vandebron, we are not only striving to revolutionize the renewable energy sector, but we are also rethinking how we interact with technology ourselves. As a part of this initiative, we have been looking at how to reduce our digital footprint. One of our most recent projects involves transforming our ageing fleet of iMacs into revitalized, lightweight machines.

    + ga('send', 'pageview');Sustainable Tech-Hardware - Introducing the 'flexMac'

    Sustainable Tech-Hardware - Introducing the 'flexMac'

    By Gehdrio Lake & Sietse Bruinsma on 3 juli 2023

    In our sustainable journey at Vandebron, we are not only striving to revolutionize the renewable energy sector, but we are also rethinking how we interact with technology ourselves. As a part of this initiative, we have been looking at how to reduce our digital footprint. One of our most recent projects involves transforming our ageing fleet of iMacs into revitalized, lightweight machines.

    We proudly introduce the 'flexMac'.

    Regained speed, sustainability and enhanced security

    Our customer contact department, the core of our operation, was equipped with older iMacs running on slower HDD drives. While replacing these machines with newer models might have been the easier route, it didn't align with our commitment to sustainability.

    @@ -11,4 +11,4 @@

    Regained speed, sus

    The importance of circularity

    Besides the operational benefits, the broader environmental impact of this initiative is important to us. By extending the life of our technology, we contribute directly to reducing e-waste, one of the fastest-growing waste streams in the EU. As a company, Vandebron is not only promoting sustainable innovations but striving to actively embody them. Our 'flexMacs project is a testament to this commitment.

    Our 'flexMacs' project demonstrates how we can repurpose and upgrade older hardware, which according to Emerce is a hot thing to do. We hope this blogpost inspires you to consider similar sustainability initiatives. By choosing to upgrade rather than replace, we extend the life of existing hardware and contribute to a reduction in e-waste.

    -

    Stay tuned for more updates from our tech-driven sustainability journey.

     .tech
    © Vandebron
    \ No newline at end of file +

    Stay tuned for more updates from our tech-driven sustainability journey.

     .tech
    © Vandebron
    \ No newline at end of file diff --git a/blog/the-difference-between-a-component-library-and-a-design-system.html b/blog/the-difference-between-a-component-library-and-a-design-system.html index 6c7ca16e4..83c8ed29a 100644 --- a/blog/the-difference-between-a-component-library-and-a-design-system.html +++ b/blog/the-difference-between-a-component-library-and-a-design-system.html @@ -1,6 +1,6 @@ The difference between a component library and a design system, and how they can help bridge the gap between design and development

    The difference between a component library and a design system, and how they can help bridge the gap between design and development

    By Petter Andersson on 6 juli 2022

    A while back, our former technology manager Roy Derks covered the subject of component libraries here on the blog. From a technical perspective, he spoke about when you need one (and when you don’t need one) and what to consider when building one. Since then, obviously a lot has happened at Vandebron. But one of the more interesting things to happen is that design became an integrated part of the digital department, as opposed to previously being attached to marketing. In this new setup, one of the first major projects the design team was involved in was the alignment of our component libraries. And no that’s not a typo, that’s libraries as in the plural form of library. Confusing? I thought so too. In this blog I’ll try to explain further why that was the case, how the work actually helped us bridge the gap between design and development, and dissect the work of unifying those component libraries into one single source of truth and ultimately what’s to become our design system.

    + ga('send', 'pageview');The difference between a component library and a design system, and how they can help bridge the gap between design and development

    The difference between a component library and a design system, and how they can help bridge the gap between design and development

    By Petter Andersson on 6 juli 2022

    A while back, our former technology manager Roy Derks covered the subject of component libraries here on the blog. From a technical perspective, he spoke about when you need one (and when you don’t need one) and what to consider when building one. Since then, obviously a lot has happened at Vandebron. But one of the more interesting things to happen is that design became an integrated part of the digital department, as opposed to previously being attached to marketing. In this new setup, one of the first major projects the design team was involved in was the alignment of our component libraries. And no that’s not a typo, that’s libraries as in the plural form of library. Confusing? I thought so too. In this blog I’ll try to explain further why that was the case, how the work actually helped us bridge the gap between design and development, and dissect the work of unifying those component libraries into one single source of truth and ultimately what’s to become our design system.

    A bit of a mess

    Before we get into it, some background as to where we started out might be useful. As previously mentioned, the design team had just become a part of the digital department and one of the first tasks at hand was the creation of a design system. In the design team, we had previously worked with a certain set of brand guidelines, a style guide if you will, which had not necessarily been translated or aligned to the requirements of a digital product or development environment. Development had also created a set of stylesheets and libraries with reusable components which they used to reduce development time. Having it all separately might sound a bit counter-intuitive, but not very surprising if you consider designers and developers not being in the same department, working on a different timeline, different priorities and so forth. However, this only highlighted the importance of designers and developers working together and the need for a proper design system to help prevent creating a fence between the teams causing unnecessary and ineffective work on both sides. The result of this previous “unsynciness”, a rebrand in 2017, and a re-aligned techstack, was the existence of 3 different libraries and subsequently 3 different sources of truth within the development environment. To add to this, we also had separate design guidelines geared more towards brand/marketing purposes in the design team. Now came the rather massive task of unifying these and eventually, rather than having just a library, having a system.

    Component library ≠ design system

    @@ -44,4 +44,4 @@

    Further defining th

    What’s next

    In the newly formed designer+developer guild, the work of defining requirements and improvements on the design system continues. From the design side we’re also looking to constantly improve on the documentation and the presentation of our system. This is something we imagine we’ll keep on doing continuously and iteratively for as long as it’s needed, if not even forever. After all, “design is never done” and a design system can and should be a living thing constantly evolving along with the products and the brand it serves, and in extension even the promise the brand and it’s products. In our case, that’s to aid in accelerating the energy transition towards 100% renewable energy. More on how we exactly do that, and how we always aim to design for impact, in the next blog post. Thanks for reading and stay tuned!

    Petter Andersson, Product Designer at Vandebron

    -

    If the type of work mentioned in this blog post sounds interesting to you, take a look at our job openings here.

     .tech
    © Vandebron
    \ No newline at end of file +

    If the type of work mentioned in this blog post sounds interesting to you, take a look at our job openings here.

     .tech
    © Vandebron
    \ No newline at end of file diff --git a/blog/vandebron-the-video-game.html b/blog/vandebron-the-video-game.html index 4b94b70e6..98306d785 100644 --- a/blog/vandebron-the-video-game.html +++ b/blog/vandebron-the-video-game.html @@ -1,6 +1,6 @@ Grid City: A Hackathon Journey into the Energy Transition by Vandebron

    Grid City: A Hackathon Journey into the Energy Transition by Vandebron

    By Dick Visser & Tomás Phelan on 27 januari 2025

    Grid City: A Hackathon Journey into the Energy Transition by Vandebron

    + ga('send', 'pageview');Grid City: A Hackathon Journey into the Energy Transition by Vandebron

    Grid City: A Hackathon Journey into the Energy Transition by Vandebron

    By Dick Visser & Tomás Phelan on 27 januari 2025

    Grid City: A Hackathon Journey into the Energy Transition by Vandebron

    During the last couple of hackathons, we set out to gamify one of the most pressing challenges of our time, the transition to green energy. A problem our team, VPP [Virtual Power Plant], deals with on a daily basis. What emerged was an interactive game designed to educate players about the complexities of energy grid management in a fun and manageable way, @@ -48,4 +48,4 @@

    Final Thoughts

    At some point, though, you have to wrap up the hackathon. So we polished what we had and declared the game "done". Whether you’re a gamer, an energy enthusiast, or someone entirely new to the topic, we hope this game sparks your interest in the energy transition :)

    You can play the game right from your browser here! -If you want to take a look at the (hackathon-quality) code, check out our public repo.

     .tech
    © Vandebron
    \ No newline at end of file +If you want to take a look at the (hackathon-quality) code, check out our public repo.

     .tech
    © Vandebron
    \ No newline at end of file diff --git a/blog/when-not-to-build-a-reusable-component-library.html b/blog/when-not-to-build-a-reusable-component-library.html index 12a9eeff9..69e5778ab 100644 --- a/blog/when-not-to-build-a-reusable-component-library.html +++ b/blog/when-not-to-build-a-reusable-component-library.html @@ -1,12 +1,12 @@ When (Not) To Build A Reusable Component Library

    When (Not) To Build A Reusable Component Library

    By Roy Derks on 5 oktober 2020

    Two months ago, I started my journey at Vandebron. One of the projects I first dove into was their efforts to build a component library. Something I was already familiar with from previous companies I worked at.

    + ga('send', 'pageview');When (Not) To Build A Reusable Component Library

    When (Not) To Build A Reusable Component Library

    By Roy Derks on 5 oktober 2020

    Two months ago, I started my journey at Vandebron. One of the projects I first dove into was their efforts to build a component library. Something I was already familiar with from previous companies I worked at.

    On the internet, you can find many articles that describe why a reusable component library is a good investment for your development team(s). Although there's much to say about the advantages of component libraries, most articles don't state the (obvious) disadvantages such projects can have. In this post, I'll point out some of our learnings and why you might not need such a reusable component library.

    -

    About component libraries

    +

    About component libraries

    Often you find yourself repeating the same lines of code to make, for example, a button or the layout of a page look nice, especially when you're working on multiple projects. Or as a designer, you get frustrated every time the styling for a part of the application is off when a new page or project is created. Many companies have already found multiple solutions to preventing themselves from repeating styling, which is the main reason for design inconsistencies. And therefore component libraries were created.

    A component library is a collection of all the styled parts (or components) of a website or multiple websites that make it easier for developers to reuse these parts. Also, designers will know for sure that all components in the component library adhere to their designs, and therefore all projects that use these components will conform. Often these libraries consist of different layers of components, for example, offering atoms, molecules, and organisms when an Atomic Design pattern is applied. Following this pattern, developers can use the parts to style their templates and pages consistently.

    Component libraries are becoming more and more popular with the rise of JavaScript libraries and frameworks like React and Vue. These technologies are very suitable for quickly building interactive components that you can use in your application, and can easily be exposed as a library on NPM or Github Packages. At Vandebron, we're building all our web and mobile applications with React and React Native and are using Storybook to develop our components in a shared library between the engineering and design teams. This can potentially create a lot of advantages for both the developers and designers, as you can read below.

    -

    Why you might need a component library

    +

    Why you might need a component library

    Before deciding to create a component library for your team or company, you probably want to hear about the advantages such a project can lead to. The main advantages of component libraries are briefly mentioned in the first section above and are often defined as:

    1. @@ -20,7 +20,7 @@

      Why you might

    But these advantages come at a certain price, as I'll explain in the next section.

    -

    Disadvantages of component libraries

    +

    Disadvantages of component libraries

    Besides the obvious advantages of a component library, it can also have serious disadvantages that are listed below. Whether or not these disadvantages apply to you depends on numerous things that are discussed later on in this article.

    1. @@ -34,7 +34,7 @@

      Disadvantages of co

    As mentioned before, there are reasons why these disadvantages might apply to you that are the team size, the number of teams and projects at the company, development or release lifecycles, and how your source code is organized. It clearly doesn't make sense to invest in a component library if you have just a small amount of people work on just one project, or a sole team is working on all the different projects making it easier to manage code duplication or design inconsistencies.

    -

    Considerations before starting

    +

    Considerations before starting

    There are two main alternatives that you need to take into consideration before building a reusable component library, which is (obviously) using or extending an existing component library or sourcing your code in a monorepo.

    1. @@ -45,5 +45,5 @@

      Considerations befo

    Besides these two alternatives, you also need to have proper design guidelines set by your designer(s). When the design guidelines are flexible and fluctuating, you could be structuring components incorrectly with the risk of doing a lot of work that will be omitted once the project evolves.

    -

    To summarize

    -

    Component libraries are a great way to reduce the amount of code duplication in your applications, prevent design inconsistencies, and increase collaborations between developers, designers, and different teams. But this comes with increased complexity, slower development cycles, and possible code conflicts between projects. Therefore you should consider if using an existing component library or having a monorepo for your source code is a workable solution. At Vandebron we decided to build our own component library (called windmolen) and if you'd decide the same, then be sure that your design guidelines are properly structured and mature enough.

     .tech
    © Vandebron
    \ No newline at end of file +

    To summarize

    +

    Component libraries are a great way to reduce the amount of code duplication in your applications, prevent design inconsistencies, and increase collaborations between developers, designers, and different teams. But this comes with increased complexity, slower development cycles, and possible code conflicts between projects. Therefore you should consider if using an existing component library or having a monorepo for your source code is a workable solution. At Vandebron we decided to build our own component library (called windmolen) and if you'd decide the same, then be sure that your design guidelines are properly structured and mature enough.

     .tech
    © Vandebron
    \ No newline at end of file diff --git a/greentech-hackathon.html b/greentech-hackathon.html index 26ce2f720..588a52729 100644 --- a/greentech-hackathon.html +++ b/greentech-hackathon.html @@ -1,3 +1,3 @@ GreenTech Hackathon 2021 - vandebron.tech
     .tech

    31 MARCH, 1-2 APRIL

    GreenTech Hackathon 2021

    REGISTER HACKATHONREGISTER EVENT

    Why this hackathon?

    Climate change is one of the many pressing challenges our society is currently facing. At Vandebron we want to continue trying to find ways to tackle this immense challenge. That’s why we’re organizing a 3-day GreenTech hackathon from March 31st to April 2nd.

    During this free online event, we're trying to find technological solutions to problems in wildlife conservation and renewable energy. And you can join us! In these three days, you get the opportunity to work on challenges from our partners, access their technology and knowledge, and you'll get the chance to win unique prizes. Besides, on April 1st (no joke) different speakers will share their expertise and experiences with you.

    We'd love to have you on board, registration for both the hackathon and speaker event are now open via the button below (deadline Wednesday March 24th).

    REGISTER HACKATHONREGISTER EVENT

    The Challenges

    Vandebron

    Hacking Your Energy Producers' Forecasting

    Hack the Planet

    Discover Climate Change With Camera-traps

    Top Dutch Solar Racing

    Solar Car Performance Optimalization

    Schedule

    Day 1

    Opening & hacking 🚀


    09:30 - 10:00Opening ceremony
    10:00 - 11:30Team formation (optional)
    16:30 - 17:30Day closing 🍻

    Day 2

    Full day of hacking 🚀


    09:30 - 10:00Day start ☕ (optional)
    12:00 - 12:30Lunch & energizer
    16:30 - 18:00Inspiration sessions 🎤

    Day 3

    Finishing up & presentations 🏆


    09:30 - 10:00Day start ☕
    12:00 - 12:30Lunch & energizer
    16:30 - 17:30Presentations, prizes & closing 🍻

    Frequently Asked Questions

    Can I join without technical knowledge?

    Yes! We invite everyone to participate in the event, even without technical knowledge you can still create cool prototypes or use your imagination to make the perfect hackathon project come to life. Also, you can be teamed up with more technical people during our team matchmaking event.

    How many team members do I need?

    Nobody likes to ride solo, so we advise you to sign up with a team of 2 to 5 people. If possible, it's best if you're able to combine the skill set of your team!

    What if I don't have a team yet?

    No problem! Before the event, we'll organize a team matchmaking event for those who have signed up individually. Based on your skillset and the challenge you prefer working on we try to create an optimal team.

    Can I only join the event with speakers?

    Yes, you can! If you don't have the time or not looking forward to joining the hackathon, you can still signup for the LinkedIn event and join us on April 1st to learn more about climate challenges and the energy transition.

    Other partners

     .tech
    © Vandebron
    \ No newline at end of file + ga('send', 'pageview');GreenTech Hackathon 2021 - vandebron.tech
     .tech

    31 MARCH, 1-2 APRIL

    GreenTech Hackathon 2021

    REGISTER HACKATHONREGISTER EVENT

    Why this hackathon?

    Climate change is one of the many pressing challenges our society is currently facing. At Vandebron we want to continue trying to find ways to tackle this immense challenge. That’s why we’re organizing a 3-day GreenTech hackathon from March 31st to April 2nd.

    During this free online event, we're trying to find technological solutions to problems in wildlife conservation and renewable energy. And you can join us! In these three days, you get the opportunity to work on challenges from our partners, access their technology and knowledge, and you'll get the chance to win unique prizes. Besides, on April 1st (no joke) different speakers will share their expertise and experiences with you.

    We'd love to have you on board, registration for both the hackathon and speaker event are now open via the button below (deadline Wednesday March 24th).

    REGISTER HACKATHONREGISTER EVENT

    The Challenges

    Vandebron

    Hacking Your Energy Producers' Forecasting

    Hack the Planet

    Discover Climate Change With Camera-traps

    Top Dutch Solar Racing

    Solar Car Performance Optimalization

    Schedule

    Day 1

    Opening & hacking 🚀


    09:30 - 10:00Opening ceremony
    10:00 - 11:30Team formation (optional)
    16:30 - 17:30Day closing 🍻

    Day 2

    Full day of hacking 🚀


    09:30 - 10:00Day start ☕ (optional)
    12:00 - 12:30Lunch & energizer
    16:30 - 18:00Inspiration sessions 🎤

    Day 3

    Finishing up & presentations 🏆


    09:30 - 10:00Day start ☕
    12:00 - 12:30Lunch & energizer
    16:30 - 17:30Presentations, prizes & closing 🍻

    Frequently Asked Questions

    Can I join without technical knowledge?

    Yes! We invite everyone to participate in the event, even without technical knowledge you can still create cool prototypes or use your imagination to make the perfect hackathon project come to life. Also, you can be teamed up with more technical people during our team matchmaking event.

    How many team members do I need?

    Nobody likes to ride solo, so we advise you to sign up with a team of 2 to 5 people. If possible, it's best if you're able to combine the skill set of your team!

    What if I don't have a team yet?

    No problem! Before the event, we'll organize a team matchmaking event for those who have signed up individually. Based on your skillset and the challenge you prefer working on we try to create an optimal team.

    Can I only join the event with speakers?

    Yes, you can! If you don't have the time or not looking forward to joining the hackathon, you can still signup for the LinkedIn event and join us on April 1st to learn more about climate challenges and the energy transition.

    Other partners

     .tech
    © Vandebron
    \ No newline at end of file diff --git a/index.html b/index.html index 69b13d775..d9828da6c 100644 --- a/index.html +++ b/index.html @@ -1,3 +1,3 @@ vandebron.tech

    Vandebron Technology

    Leading the renewable energy transition with innovative solutions. This blog demonstrates some highlights of tech activities that we would like to share with you!

    Latest posts

    21

    feb

    Replacing App Center with GitHub Actions

    App Center is closing up shop on March 31st, 2025. So what's the plan for building mobile apps at Vandebron?

    27

    jan

    Grid City: A Hackathon Journey into the Energy Transition by Vandebron

    A journey into the energy transition through the lens of a video game

    18

    okt

    Choosing Remix as a Server-Side Rendering (SSR) Framework

    We had our own custom SSR framework. It was time to move on. Find out why we picked Remix over NextJS as the replacement!

    4

    sep

    Camunda BPM migration

    Migration from Salesforce Flow_Runner to Camunda BPM

    16

    feb

    Cassandra, it’s not you, it’s us

    Our Journey to find the perfect data storage solution for us

    7

    feb

    Creating a Self-Service Data Model

    How we migrated to a modern data stack to enable self-servicing across the business

    19

    dec

    Authenticate Snowflake via Keycloak

    How to use Keycloak to authenticate against Snowflake rest api

    3

    jul

    Sustainable Tech-Hardware - Introducing the 'flexMac'

    Enhanced security, sustainability, and regained speed at Customer Contact revitalizing our old iMacs.

    20

    mei

    So, back to the monolith it is then?

    A recent Amazon article explaining how they managed to save costs by merging some of their services has lead some to question the value of microservices. What is our take?

    11

    jan

    How Vandebron helps balancing the Dutch energy grid together with OnLogic & Talos Linux

    Our journey to find the best fitting hardware and operating system to use for our flex services

    8

    jul

    The Why and How of Dagster User Code Deployment Automation

    If you frequently deploy new user code repositories in Dagster, you want to automate this process. However, this is not so straightforward as it may seem at first. This post explains what we did at Vandebron.

    6

    jul

    The difference between a component library and a design system, and how they can help bridge the gap between design and development

    A while back we started a rather extensive project of migrating and unifying our component library, these are some of the learnings we made during the project.

    28

    jun

    Signing and verifying SOAP messages with wss4j and Scala

    This blogpost will explain with code examples how we at Vandebron are signing and verifying SOAP messages for our latest SOAP client implementation.

    5

    apr

    Looking back at the Vandebron GreenTech Hackathon 2021

    At the end of March, we organized a public hackathon to create solutions to tackle climate challenges. After having done internal hackathons, we thought it was time to share our technologies with other innovative people and companies.

    19

    mrt

    The power of regular hackathons

    At Vandebron we have been organizing a regular hackathon for the last four years. Every three months we organize a two-day event. At first glance this seems quite an investment. Eight days a year, almost losing two working-weeks of productivity for your teams!

    5

    mrt

    Migrating from DCOS to Kubernetes, dealing with the l4lb loadbalancer

    When you want minimal downtime, you need to build your own tools

    5

    feb

    Cypress.io Component Design Technique for React Applications

    Cypress is a game-changer in the automation testing world, the way that Cypress was built and its architecture allows us as testers to cover more scenarios.

    25

    jan

    How to Spin Up A Kubernetes Cluster On Your Macbook

    It is can be useful to create a disposable Kubernetes sandbox to play with when you are exploring a new application and how it could work.

    10

    dec

    Optimizing, Converting And Exporting SVG Icons In React

    If you've ever build a component library, you probably dealt with optimizing and converting icons before. With SVGO and SVGR you can do this at scale.

    4

    nov

    Fueling the Energy Transition With Spark - Part 1

    Our main backend language is Scala, and by using Spark we build distributed parallel algorithms to fuel the Energy Transition. But why is Spark the best choice for that job?

    6

    okt

    Building native images and compiling with GraalVM and sbt

    At Vandebron we organized a two-day long Hackathon, a colleague and I took the chance to dig into the wonderful world of GraalVM.

    5

    okt

    When (Not) To Build A Reusable Component Library

    You can find much information on why a reusable component library is a good investment, but most articles don't state the (obvious) disadvantages..

     .tech
    © Vandebron
    \ No newline at end of file + ga('send', 'pageview');vandebron.tech

    Vandebron Technology

    Leading the renewable energy transition with innovative solutions. This blog demonstrates some highlights of tech activities that we would like to share with you!

    Latest posts

    21

    feb

    Replacing App Center with GitHub Actions

    App Center is closing up shop on March 31st, 2025. So what's the plan for building mobile apps at Vandebron?

    27

    jan

    Grid City: A Hackathon Journey into the Energy Transition by Vandebron

    A journey into the energy transition through the lens of a video game

    18

    okt

    Choosing Remix as a Server-Side Rendering (SSR) Framework

    We had our own custom SSR framework. It was time to move on. Find out why we picked Remix over NextJS as the replacement!

    4

    sep

    Camunda BPM migration

    Migration from Salesforce Flow_Runner to Camunda BPM

    16

    feb

    Cassandra, it’s not you, it’s us

    Our Journey to find the perfect data storage solution for us

    7

    feb

    Creating a Self-Service Data Model

    How we migrated to a modern data stack to enable self-servicing across the business

    19

    dec

    Authenticate Snowflake via Keycloak

    How to use Keycloak to authenticate against Snowflake rest api

    3

    jul

    Sustainable Tech-Hardware - Introducing the 'flexMac'

    Enhanced security, sustainability, and regained speed at Customer Contact revitalizing our old iMacs.

    20

    mei

    So, back to the monolith it is then?

    A recent Amazon article explaining how they managed to save costs by merging some of their services has lead some to question the value of microservices. What is our take?

    11

    jan

    How Vandebron helps balancing the Dutch energy grid together with OnLogic & Talos Linux

    Our journey to find the best fitting hardware and operating system to use for our flex services

    8

    jul

    The Why and How of Dagster User Code Deployment Automation

    If you frequently deploy new user code repositories in Dagster, you want to automate this process. However, this is not so straightforward as it may seem at first. This post explains what we did at Vandebron.

    6

    jul

    The difference between a component library and a design system, and how they can help bridge the gap between design and development

    A while back we started a rather extensive project of migrating and unifying our component library, these are some of the learnings we made during the project.

    28

    jun

    Signing and verifying SOAP messages with wss4j and Scala

    This blogpost will explain with code examples how we at Vandebron are signing and verifying SOAP messages for our latest SOAP client implementation.

    5

    apr

    Looking back at the Vandebron GreenTech Hackathon 2021

    At the end of March, we organized a public hackathon to create solutions to tackle climate challenges. After having done internal hackathons, we thought it was time to share our technologies with other innovative people and companies.

    19

    mrt

    The power of regular hackathons

    At Vandebron we have been organizing a regular hackathon for the last four years. Every three months we organize a two-day event. At first glance this seems quite an investment. Eight days a year, almost losing two working-weeks of productivity for your teams!

    5

    mrt

    Migrating from DCOS to Kubernetes, dealing with the l4lb loadbalancer

    When you want minimal downtime, you need to build your own tools

    5

    feb

    Cypress.io Component Design Technique for React Applications

    Cypress is a game-changer in the automation testing world, the way that Cypress was built and its architecture allows us as testers to cover more scenarios.

    25

    jan

    How to Spin Up A Kubernetes Cluster On Your Macbook

    It is can be useful to create a disposable Kubernetes sandbox to play with when you are exploring a new application and how it could work.

    10

    dec

    Optimizing, Converting And Exporting SVG Icons In React

    If you've ever build a component library, you probably dealt with optimizing and converting icons before. With SVGO and SVGR you can do this at scale.

    4

    nov

    Fueling the Energy Transition With Spark - Part 1

    Our main backend language is Scala, and by using Spark we build distributed parallel algorithms to fuel the Energy Transition. But why is Spark the best choice for that job?

    6

    okt

    Building native images and compiling with GraalVM and sbt

    At Vandebron we organized a two-day long Hackathon, a colleague and I took the chance to dig into the wonderful world of GraalVM.

    5

    okt

    When (Not) To Build A Reusable Component Library

    You can find much information on why a reusable component library is a good investment, but most articles don't state the (obvious) disadvantages..

     .tech
    © Vandebron
    \ No newline at end of file diff --git a/posts/replacing-app-center.md b/posts/replacing-app-center.md index d8e111cda..19393005f 100644 --- a/posts/replacing-app-center.md +++ b/posts/replacing-app-center.md @@ -530,7 +530,7 @@ More than likely these won't work the first time. Time to go back and adjust. No
    • App Center gives you the ability to write `appcenter-pre-build.sh` and `appcenter-post-build.sh` scripts. The `env-file-prep.sh` is basically that same thing, just without the context of appcenter.
    • -
    • One of our apps is using MapBox which needs a `.netrc` in the root directory. If you need something similar, you can add a step to your action by adding the code shown in the the "optional mapbox" part + the `./my-first-app/prep-mapbox.sh` in the [Appendix](#appendix).
    • +
    • One of our apps is using MapBox which needs a `.netrc` in the root directory. If you need something similar, you can add a step to your action by adding the code shown in the the "optional mapbox" part + the `./my-first-app/prep-mapbox.sh` in the Appendix section below.
    • After our work on this was done (and only as I'm writing this article) we realized we can use the `sparse-checkout` option from `actions/checkout` to only check out the needed files. This should speed up our workflow runtime even more!
    • It may be helpful for you to add the build and/or version number onto the artifact. We haven't done that but it's something we're interested in adding for the future.
    • Troubleshooting certificates for iOS was a HUGE pain in the butt. I don't have any good advice here other than to realize (and communicate with your POs) that this part may take a while.
    • diff --git a/pr-preview/pr-54/.nojekyll b/pr-preview/pr-54/.nojekyll deleted file mode 100644 index e69de29bb..000000000 diff --git a/rss.xml b/rss.xml index 6bd388607..9cfa92c3f 100644 --- a/rss.xml +++ b/rss.xml @@ -525,7 +525,7 @@

      Other Things to Note

      • App Center gives you the ability to write `appcenter-pre-build.sh` and `appcenter-post-build.sh` scripts. The `env-file-prep.sh` is basically that same thing, just without the context of appcenter.
      • -
      • One of our apps is using MapBox which needs a `.netrc` in the root directory. If you need something similar, you can add a step to your action by adding the code shown in the the "optional mapbox" part + the `./my-first-app/prep-mapbox.sh` in the [Appendix](#appendix).
      • +
      • One of our apps is using MapBox which needs a `.netrc` in the root directory. If you need something similar, you can add a step to your action by adding the code shown in the the "optional mapbox" part + the `./my-first-app/prep-mapbox.sh` in the Appendix section below.
      • After our work on this was done (and only as I'm writing this article) we realized we can use the `sparse-checkout` option from `actions/checkout` to only check out the needed files. This should speed up our workflow runtime even more!
      • It may be helpful for you to add the build and/or version number onto the artifact. We haven't done that but it's something we're interested in adding for the future.
      • Troubleshooting certificates for iOS was a HUGE pain in the butt. I don't have any good advice here other than to realize (and communicate with your POs) that this part may take a while.